我有一个简单的 TikZ 图,其中包含一个 3×3 点阵,我希望每个点按整数 1 到 9 的顺序进行标记。我目前拥有的代码是
\foreach \x in {-1, 0, 1}{
\foreach \y in {-1, 0, 1}{
\node[dot] at (\x,\y){};
}
}
如果我使用的是更强大的编程语言,我只需添加一个在内部循环结束时递增的变量,但这似乎是不可能的。我也在[count=\something]
每个循环上进行了实验,但收效甚微。
我想使用嵌套循环,部分是为了学习练习,部分是因为我计划向图表中添加绘图,因此简单地手动添加我手动标记的九个点并不是最佳解决方案。TikZ 和 TeX-core 中有什么方法可以实现这一点吗?
答案1
这蒂克兹 \foreach
命令非常强大,允许您执行许多操作,例如count=...
,,,evaluate=...
...请参阅 tikz/pgf 手册的第 88 章(重复操作:Foreach 语句)。因此,有很多不同的方法可以在这里完成您想要的操作。以下是使用给出的remember=...
一种方法:evaluate
你没有说你的dot
风格是什么,所以我只是使用了blue
。我可能以与你想要的顺序不同的顺序标记了节点,但这只是一个细节,你应该可以轻松修复。以下是完整代码:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[dot/.style={blue}]
\foreach \x in {-1, 0, 1}{
\foreach \y [evaluate=\y as \z using int( 3*(\x+1)+\y+2 )] in {-1, 0, 1}{
\node[dot] at (\x,\y){\z};
}
}
\end{tikzpicture}
\end{document}
请注意,int(...)
在的定义中是必需的,因为否则,您的节点标签\z
最终会变成1.0
,,2.0
...。9.0
当然,另一个选择是使用外部计数器,例如
\documentclass{article}
\usepackage{tikz}
\newcounter{nodenumber}
\begin{document}
\begin{tikzpicture}[dot/.style={blue}]
\foreach \x in {-1, 0, 1}{
\foreach \y in {-1, 0, 1}{
\stepcounter{nodenumber}
\node[dot] at (\x,\y){\arabic{nodenumber}};
}
}
\end{tikzpicture}
\end{document}
但我个人认为使用提供的工具\foreach
是更好的选择。