Como encaixar caracteres (números) em um papel milimetrado?

Como encaixar caracteres (números) em um papel milimetrado?

Quero imprimir alguns cálculos em um papel milimetrado (apenas alguns cálculos fáceis, como adicionar alguns números...).

Um exemplo (feio) com uma tabela:

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

insira a descrição da imagem aqui

Existem algumas soluções para imprimir um papel milimetrado/quadrado:

Então tentei encontrar uma solução com um papel milimetrado, mas tenho problemas para escrever o texto nas caixas quadradas.

Minha solução até agora:

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

O resultado: insira a descrição da imagem aqui

Há duas coisas faltando:

  • A macro \gridtext deve receber um segundo parâmetro para definir o x-pos (acho que isso é algo que posso fazer sozinho se meu outro problema for resolvido)
  • O texto não cabe nas caixas quadradas (um caractere (número, operador ou espaço) por caixa)

Existem algumas idéias de como posso fazer isso, mas não tenho ideia de como fazer:

  • analise o parâmetro e posicione caractere por caractere em sua caixa.
  • Use uma fonte monoespaçada com o comprimento exato do parâmetro opcional do meu ambiente squaredpaper.

Observações:

  • Os espaços no parâmetro \gridtext devem ser respeitados (e se isso for muito difícil eu poderia usar ~ como espaço reservado).
  • Até agora eu não quero adicionar um texto, mas talvez uma variante * de \gridtext para adicionar texto seria bom (mas acho que isso é algo que eu poderia fazer sozinho se precisar).

Responder1

Eu adicionei espaços manualmente à entrada por meio de ~. Embora a macro possa ser escrita para interceptar um único espaço na entrada entre os caracteres, todos os mecanismos de análise do LaTeX verbatimirão ler vários espaços como um único espaço. Portanto, usar \ou ~faz sentido como a abordagem correta para espaçamento rígido.

O resultado \gridtexté obtido analisando a entrada, um caractere por vez, e configurando-o em uma caixa do tamanho da célula da grade unitária.

A macro \gridtextagora possui um segundo argumento obrigatório que especifica o deslocamento horizontal em quadrados.

EDITADO para nós \obeyspaces, em vez de exigir o uso de espaços rígidos no \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}

insira a descrição da imagem aqui

Se o tamanho for alterado para \scriptsize, ainda funcionará.

insira a descrição da imagem aqui

Se o tamanho da grade for alterado (por exemplo, \begin{squaredpaper}[.4cm]{19}), ainda funciona:

insira a descrição da imagem aqui

informação relacionada