¿Cómo encajar caracteres (números) en un papel cuadriculado?

¿Cómo encajar caracteres (números) en un papel cuadriculado?

Quiero imprimir algunos cálculos en un papel cuadriculado (solo algunos cálculos sencillos como sumar algunos números...).

Un ejemplo (feo) con una tabla:

\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}

ingrese la descripción de la imagen aquí

Existen algunas soluciones para imprimir un papel cuadriculado/cuadriculado:

Entonces intenté encontrar una solución con un papel cuadriculado, pero tengo problemas para escribir el texto en los cuadros cuadriculados.

Mi solución hasta ahora:

\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}

El resultado: ingrese la descripción de la imagen aquí

Faltan dos cosas:

  • La macro \gridtext debería obtener un segundo parámetro para definir la posición x (creo que es algo que puedo hacer por mi cuenta si se resuelve mi otro problema)
  • El texto no cabe en los cuadros (un carácter (número, operador o espacio) por cuadro)

Hay algunas ideas de cómo puedo hacerlo, pero no tengo idea de cómo hacerlo:

  • analice el parámetro y coloque carácter por carácter en su cuadro.
  • Utilice una fuente monoespaciada con la longitud exacta del parámetro opcional de mi entorno de papel cuadrado.

Observaciones:

  • Se deben respetar los espacios en el parámetro \gridtext (y si esto es demasiado difícil, podría usar ~ como marcador de posición).
  • Hasta ahora no quiero agregar un texto, pero tal vez una variante * de \gridtext para agregar texto estaría bien (pero creo que es algo que podría hacer por mi cuenta si lo necesito).

Respuesta1

Agregué espacios manualmente a la entrada mediante ~. Si bien la macro podría escribirse para interceptar un solo espacio en la entrada entre caracteres, todos los mecanismos de análisis de LaTeX verbatimleerán múltiples espacios como un solo espacio. Por lo tanto, usar \o ~tiene sentido como el enfoque correcto para espacios estrictos.

El resultado \gridtextse logra analizando la entrada un carácter a la vez y configurándola en un cuadro del tamaño de la celda de la cuadrícula unitaria.

La macro \gridtextahora tiene un segundo argumento obligatorio que especifica el desplazamiento horizontal en cuadrados.

EDITADO para nosotros \obeyspaces, en lugar de requerir el uso de espacios duros en el \gridtextargumento.

\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}

ingrese la descripción de la imagen aquí

Si se cambia el tamaño a \scriptsize, todavía funciona.

ingrese la descripción de la imagen aquí

Si se cambia el tamaño de la cuadrícula (por ejemplo, \begin{squaredpaper}[.4cm]{19}), todavía funciona:

ingrese la descripción de la imagen aquí

información relacionada