![¿Cómo encajar caracteres (números) en un papel cuadriculado?](https://rvso.com/image/305890/%C2%BFC%C3%B3mo%20encajar%20caracteres%20(n%C3%BAmeros)%20en%20un%20papel%20cuadriculado%3F.png)
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}
Existen algunas soluciones para imprimir un papel cuadriculado/cuadriculado:
- http://texwelt.de/wissen/fragen/2639/wie-kann-ich-kastchenpapier-zeichnen
- http://www.texample.net/tikz/examples/graph-paper/
- ¿Un paquete para ayudar con la generación de diseños? ¿Papel cuadriculado al fondo?
- http://www.ctan.org/pkg/graphpap
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:
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 verbatim
leerán múltiples espacios como un solo espacio. Por lo tanto, usar \
o ~
tiene sentido como el enfoque correcto para espacios estrictos.
El resultado \gridtext
se 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 \gridtext
ahora 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 \gridtext
argumento.
\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}
Si se cambia el tamaño a \scriptsize
, todavía funciona.
Si se cambia el tamaño de la cuadrícula (por ejemplo, \begin{squaredpaper}[.4cm]{19}
), todavía funciona: