TikZ 嵌套 Foreach 循环中的总数

TikZ 嵌套 Foreach 循环中的总数

我有一个简单的 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是更好的选择。

相关内容