我想将一些计算结果打印到方格纸上(只是一些简单的计算,例如添加一些数字......)。
带有表格的(丑陋)示例:
\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}
打印方格纸/方格纸有一些解决方案:
- http://texwelt.de/wissen/fragen/2639/wie-kann-ich-kastchenpapier-zeichnen
- http://www.texample.net/tikz/examples/graph-paper/
- 帮助生成布局的软件包?背景中的方格纸?
- http://www.ctan.org/pkg/graphpap
因此,我尝试用方格纸寻找解决方案,但在将文本写入方框时遇到了问题。
我到目前为止的解决方案:
\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}
结果:
有两件事缺失了:
- 宏 \gridtext 应该获得第二个参数来定义 x-pos(我想如果我的其他问题解决了,这是我可以自己做的事情)
- 文本不适合方框(每个方框一个字符(数字、运算符或空格))
关于如何做到这一点,有一些想法,但我不知道如何去做:
- 解析参数并将每个字符逐个定位到其框中。
- 使用等宽字体,其长度与我的 squaredpaper 环境的可选参数的长度完全相同。
评论:
- 应该尊重 \gridtext 参数中的空格(如果这太困难,我可以使用 ~ 作为占位符。)
- 到目前为止,我不想添加文本,但也许使用 \gridtext 的 * 变体来添加文本就可以了(但我想,如果需要的话,我可以自己做)。
答案1
我确实通过 手动向输入添加了空格~
。虽然可以编写宏来截取字符之间的输入中的单个空格,但 LaTeX 的所有解析机制(除了 )verbatim
都会将多个空格读为单个空格。因此,使用\
或~
作为硬间距的正确方法是正确的。
的结果\gridtext
是通过一次解析输入的一个字符并将其设置在单位网格单元大小的框中来实现的。
该宏\gridtext
现在有第二个强制参数,用于指定方块中的水平偏移量。
对我们进行了编辑\obeyspaces
,而不是要求在参数中使用硬空格\gridtext
。
\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}
如果将尺寸改为\scriptsize
,它仍然有效。
如果网格大小发生变化(例如\begin{squaredpaper}[.4cm]{19}
),它仍然有效: