![Wie bringt man Zeichen (Zahlen) in Millimeterpapier ein?](https://rvso.com/image/305890/Wie%20bringt%20man%20Zeichen%20(Zahlen)%20in%20Millimeterpapier%20ein%3F.png)
Ich möchte einige Berechnungen auf Millimeterpapier drucken (nur einige einfache Berechnungen, wie das Addieren einiger Zahlen ...).
Ein (hässliches) Beispiel mit einer Tabelle:
\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}
Zum Bedrucken von Millimeterpapier/Karatpapier gibt es einige Lösungen:
- http://texwelt.de/wissen/fragen/2639/wie-kann-ich-kastchenpapier-zeichnen
- http://www.texample.net/tikz/examples/graph-paper/
- Ein Paket zur Unterstützung bei der Layouterstellung? Millimeterpapier im Hintergrund?
- http://www.ctan.org/pkg/graphpap
Also habe ich versucht, eine Lösung mit Millimeterpapier zu finden, aber ich habe Probleme, den Text in die quadratischen Kästchen zu schreiben.
Meine Lösung bis jetzt:
\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}
Das Ergebnis:
Es fehlen zwei Dinge:
- Das Makro \gridtext sollte einen zweiten Parameter erhalten, um die X-Position zu definieren (ich denke, das ist etwas, was ich selbst machen kann, wenn mein anderes Problem gelöst ist).
- Der Text passt nicht in die quadratischen Felder (ein Zeichen (Zahl, Operator oder Leerzeichen) pro Feld)
Es gibt einige Ideen, wie ich es machen kann, aber ich habe keine Ahnung, wie ich es machen soll:
- Analysieren Sie den Parameter und positionieren Sie ihn Zeichen für Zeichen in seinem Feld.
- Verwenden Sie eine Monospace-Schriftart mit der genauen Länge des optionalen Parameters meiner Squaredpaper-Umgebung.
Bemerkungen:
- Die Leerzeichen im \gridtext-Parameter sollten beachtet werden (und wenn das zu schwierig ist, könnte ich ~ als Platzhalter verwenden.)
- Bis jetzt möchte ich keinen Text hinzufügen, aber vielleicht wäre eine *-Variante von \gridtext zum Hinzufügen von Text in Ordnung (aber ich denke, das ist etwas, was ich bei Bedarf selbst machen könnte).
Antwort1
Ich habe der Eingabe manuell Leerzeichen hinzugefügt, indem ich verwendet habe ~
. Das Makro könnte zwar so geschrieben werden, dass es ein einzelnes Leerzeichen in der Eingabe zwischen den Zeichen abfängt, aber alle Analysemechanismen von LaTeX, außer mit , verbatim
lesen mehrere Leerzeichen als ein einzelnes Leerzeichen. Daher ist die Verwendung von \
oder ~
als der richtige Ansatz für harte Leerzeichen sinnvoll.
Das Ergebnis \gridtext
wird dadurch erreicht, dass die Eingabe Zeichen für Zeichen analysiert und in ein Feld mit der Größe der Einheitsgitterzelle eingefügt wird.
Das Makro \gridtext
verfügt jetzt über ein zweites obligatorisches Argument, das den horizontalen Versatz in Quadraten angibt.
Für uns BEARBEITET \obeyspaces
, anstatt die Verwendung von harten Leerzeichen im \gridtext
Argument zu verlangen.
\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}
Wenn die Größe auf geändert wird \scriptsize
, funktioniert es immer noch.
Wenn die Rastergröße geändert wird (z. B. \begin{squaredpaper}[.4cm]{19}
), funktioniert es trotzdem: