![嵌套宏失败](https://linux22.com/image/343938/%E5%B5%8C%E5%A5%97%E5%AE%8F%E5%A4%B1%E8%B4%A5.png)
我正在尝试为我的学生创建数字轨迹。它们看起来应该像这样。
我想创建一个宏,使它们具有任意数量和任意长度(x-max)。
注意:该命令\numbertrack{20}
编译后会生成上述图像。我编写的宏\mytracks
无法编译生成上述图像。
\documentclass[landscape]{article}
\usepackage[margin=2cm]{geometry}
\usepackage{tikz}
\pagestyle{empty}
\def\myscale{1.15}
\newcommand{\numbertrack}[1]
{
\begin{tikzpicture}[scale=\myscale]
\draw (0,0)--(#1,0);
\draw (0,1)--(#1,1);
\foreach \x in {0,1,2,...,#1}
\draw (\x,0)--(\x,1);
\foreach \x in {1,2,3,...,#1}
\node[anchor=center] at (\x-0.5,0.5) {\huge\x};
\end{tikzpicture}
\\
\vspace{1cm}
}
\newcommand{\mytracks}
{
\foreach \y in {1,2,3,...,20}
\numbertrack{\y}
}
\begin{document}
\mytracks
\end{document}
答案1
像这样吗?
\documentclass{article}
\usepackage{tikz}
\usepackage[margin=10mm]{geometry}
\newcommand\numbertrack[2][1.15]{%
\begin{tikzpicture}[scale=#1,
mybox/.style={rectangle,draw,
minimum height=#1*10mm,
minimum width=#1*10mm}
]
\foreach \num [count=\x] in {#2} {
\node[mybox] at (\x,0){\num};
}
\end{tikzpicture}
}
\begin{document}
\numbertrack{1,2,3,...,16}
\numbertrack{12,4,3,5,3,5,2,3,4}
\numbertrack[0.5]{a,d,3,c,s,g,d,a}
\end{document}
得出的结果为:
节点用矩形边界绘制,其最小宽度和高度根据比例设置——这是唯一棘手的部分,由#1*10mm
的样式完成。有关和设置mybox
的说明,请参阅:minimum height
minimum width
在 foreach 循环内显示节点除缩放比例外,这两道题非常相似。
请注意,\numbertrack
宏采用可选参数作为比例。因此,最后一个例子\numbertrack[0.5]{a,d,3,c,s,g,d,a}
,将比例设置为0.5
。默认情况下,比例设置为 ,1.15
如 OP 中所示。
编辑
如果我误解了,而您只是想要数字,1,2,...,x
那么上面的代码稍作改动就可以了:
\documentclass{article}
\usepackage{tikz}
\usepackage[margin=10mm]{geometry}
\newcommand\numbertrack[2][1.15]{%
\begin{tikzpicture}[scale=#1,
mybox/.style={rectangle,draw,
minimum height=#1*10mm,
minimum width=#1*10mm}
]
\foreach \num [count=\x] in {1,...,#2} {
\node[mybox] at (\x,0){\num};
}
\end{tikzpicture}
}
\begin{document}
\numbertrack{16}
\numbertrack{12}
\numbertrack[0.5]{3}
\numbertrack[2]{1}
\numbertrack[2]{0}
\numbertrack[2]{-5}
\end{document}
得出的结果为:
特别是,1
这不是特殊情况。负数也可以,但可能不是你想要的:(
答案2
这是一个仅使用节点的方法。由于\foreach
,1 是特殊情况
\documentclass[landscape]{article}
\usepackage[margin=2cm]{geometry}
\usepackage{tikz,etoolbox}
\usetikzlibrary{calc}
\pagestyle{empty}
\def\myscale{1.15}
\newcommand\drawnumber[1]{
\node[draw,anchor=west,
minimum width=5mm,
minimum height=5mm] (B) at (A) {#1};
\coordinate (A) at ($(B.east)+(-\pgflinewidth,0)$);
}
\newcommand{\numbertrack}[1]
{
\noindent
\begin{tikzpicture}[scale=\myscale]
\coordinate (A) at (0,0); % initialize
\ifnum#1=1\drawnumber{1}\fi
\ifnum#1>1\relax
\foreach\x in {1,2,...,#1}{
\drawnumber{\x}
}
\fi
\end{tikzpicture}
\par
\bigskip
}
\newcommand{\mytracks}
{
\foreach \y in {1,2,3,...,20} {
\numbertrack{\y}
}
}
\begin{document}
\mytracks
\end{document}