8

I want to print some calculations into a graph paper (just some easy calculations like adding some numbers...).

An (ugly) example with a tabular:

\begin{tabular}{|*{10}{r|}}\hline
 &   &   &   &  &   &   & &  &  \\\hline
 &   & 1 & + &  & 1 & = & &  & 2\\\hline
 & 1 & 1 & + &  & 1 & = & &  1 & 2\\\hline
 & 1 & 1 & + & 1& 1 & = & &  2 & 2\\\hline
 &   &   &   &  &   &   & &  &  \\\hline
\end{tabular}

enter image description here

There are some solutions to print a graph paper/squared paper:

So I tried to find a solution with a graph paper, but I have problems to write the text into the squared boxes.

My solution up to now:

\documentclass[12pt,a6paper]{scrartcl} 
\usepackage{tikz}
\usepackage{ifthen}

\newcounter{gridypos}
\newenvironment{squaredpaper}[2][0.5cm]{% 
  \setcounter{gridypos}{#2}
  \newcommand\gridtext[2][\relax]{
    \ifthenelse{\equal{##1}{\relax}}{}{
         \setcounter{gridypos}{#2}
        \addtocounter{gridypos}{-##1}
        \addtocounter{gridypos}{1}
    }
    \node[anchor=west] at (0,0) [yshift=\value{gridypos}*#1-.5*#1]{##2};  %fixme one box per character(including spaces)
    \addtocounter{gridypos}{-1}%Next \gridtext one line lower
  }
  %Make the grid
  %Source: http://texwelt.de/wissen/fragen/2639/wie-kann-ich-kastchenpapier-zeichnen
  \begin{tikzpicture}[gray,step=#1]
     \pgfmathtruncatemacro\anzahl{(\linewidth-\pgflinewidth)/#1} % maximale Anzahl Kaestchen pro Zeile
     \draw (0,0) rectangle (\anzahl*#1,#2*#1) (0,0) grid (\anzahl*#1,#2*#1);
  }{
   \end{tikzpicture} 
}

\begin{document} 
  \begin{squaredpaper}{20}
    %Start on top line and go down.
    \gridtext{ 1+ 1= 2}
    \gridtext{ 1+ 2= 3}
    \gridtext{ 1+ 3= 4}
    \gridtext{ 1+10=11}
    %Make fix positions
    \gridtext[10]{10+10=20}  %Start in line 10
    \gridtext[15]{15+10=25}  %Start in line 15
    \gridtext[18]{18+10=28}  %Start in line 18
  \end{squaredpaper}

\end{document}

The result: enter image description here

There are two missing things:

  • The macro \gridtext should get a 2nd parameter to define the x-pos (I think that's something I can make on my own if my other problem is solved)
  • The text does not fit into the squared boxes (one character (number, operator or space) per box)

There are some ideas how I can do it, but I have no idea, how to do it:

  • parse the parameter and position character by character into its box.
  • Use a monospace font with the exact length of the optional parameter of my squaredpaper-environment.

Remarks:

  • The spaces in the \gridtext parameter should be respected (and if this is to difficult I could use ~ as placeholder.)
  • Up to now I don't want to add a text, but maybe a *-variant of \gridtext to add text would be fine (but I think, that's something I could do on my own if I need it).
  • Do you want one character per box, two, or what exactly? – Steven B. Segletes Feb 18 '15 at 19:15
  • One character (number, space or operator) per box. – knut Feb 18 '15 at 19:19
  • You realize that the font will not be "naturally" spaced for that solution, since you are, in essence forcing the height allocated to a character to equal the width allocated for the character. – Steven B. Segletes Feb 18 '15 at 19:22
  • Yes, that's ok. It would be ok to use a monospaced font, but I need a specific size for it. -- Hmm, one idea as solution: Use a monospaced font and set the box with to 1em of this font? – knut Feb 18 '15 at 19:28
12

I did add spaces manually to the input by way of ~. While the macro could be written to intercept a single space in the input between characters, all of LaTeX's parsing mechanisms short of verbatim will read multiple spaces as a single space. Therefore, using \ or ~ makes sense as the right approach for hard spacing.

The result of \gridtext is achieved by parsing the input one character at a time, and setting it in a box the size of the unit-grid cell.

The macro \gridtext now has a 2nd mandatory argument that specifies the horizontal offset in squares.

EDITED to us \obeyspaces, rather than requiring the use of hard spaces in the \gridtext argument.

\documentclass[12pt,a6paper]{scrartcl} 
\usepackage{tikz}
\usepackage{ifthen}

\newcounter{gridypos}
\newenvironment{squaredpaper}[2][.5cm]{\obeyspaces% 
  \setcounter{gridypos}{#2}
  \newcommand\gridtext[3][\relax]{
    \ifthenelse{\equal{##1}{\relax}}{}{
         \setcounter{gridypos}{#2}
        \addtocounter{gridypos}{-##1}
        \addtocounter{gridypos}{1}
    }
%\tmp@dim0=#1\relax%
    \node[anchor=west] at (-.15,0) [yshift=\value{gridypos}*#1-.5*#1]{%
      \hspace{##2\dimexpr#1\relax}\spaceout{#1}{##3}};  %fixme one box per character(including spaces)
    \addtocounter{gridypos}{-1}%Next \gridtext one line lower
  }
  %Make the grid
  %Source: http://texwelt.de/wissen/fragen/2639/wie-kann-ich-kastchenpapier-zeichnen
  \begin{tikzpicture}[gray,step=#1]
     \pgfmathtruncatemacro\anzahl{(\linewidth-\pgflinewidth)/#1} % maximale Anzahl Kaestchen pro Zeile
     \draw (0,0) rectangle (\anzahl*#1,#2*#1) (0,0) grid (\anzahl*#1,#2*#1);
  }{
   \end{tikzpicture} 
}
\newcommand\spaceout[2]{\def\charwd{#1}\spaceouthelp#2\relax\relax\relax}
\def\spaceouthelp#1#2\relax{%
  \ifx#1\relax\else%
    \makebox[\charwd]{#1}%
    \spaceouthelp#2\relax%
  \fi%
}

\begin{document} 
\ttfamily%\scriptsize% WILL WORK IF UNCOMMENTED
  \begin{squaredpaper}{19}
    %Start on top line and go down.
    \gridtext{0}{1+ 1= 2}
    \gridtext{0}{1+ 2= 3}
    \gridtext{0}{1+ 3= 4}
    \gridtext{0}{1+10=11}
    %Make fix positions
    \gridtext[10]{3}{10+10=20}  %Start in line 10
    \gridtext[15]{4}{15+10=25}  %Start in line 15
    \gridtext[18]{5}{18+10=28}  %Start in line 18
  \end{squaredpaper}

\end{document}

enter image description here

If the size is changed to \scriptsize, it still works.

enter image description here

If the grid size is changed (e.g., \begin{squaredpaper}[.4cm]{19}), it still works:

enter image description here

  • Great! Thanks. I will use it with ~ - so I can align the output in my editor. I think I will accept your answer after a latency to give the possibility for other answers. – knut Feb 18 '15 at 19:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.