如何从 TikZ 中“foreach”使用的计数器生成命名节点?

如何从 TikZ 中“foreach”使用的计数器生成命名节点?

我尝试使用foreach运算符在 TikZ 中生成多个节点,但无论我如何尝试,都会出现编译错误。我需要命名所有节点,以便在它们之间绘制边。

读过let可以解决这个问题的文章后,下面是我最近的尝试:

\foreach \i in {1, 2, 3}
{
  \node let \n1 = (4+\i)
    in
      at +(1, 0) [process_small] (p0\n1) {};
}

答案1

你的代码其实并没有什么问题。其中有三个错误。以下是更正后的版本:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}
\foreach \i in {1, 2, 3}
{
  \path let \n1 = {int(4+\i)}
  in
  node at +(\n1, 0) [draw] (p0\n1) {};
}
\draw (p05) -- (p06) -- (p07);
\end{tikzpicture}
\end{document}

错误如下:

  1. 一个小问题是,您使用圆括号来对算术进行分组,而您应该使用大括号(至少对于最外层的分组)。

  2. let 操作不能位于节点和其参数之间。您必须事先拥有它。节点有点特殊,会非常仔细地检查后面的文本,因此最好不要让它太复杂。在这种情况下,可以通过编写而不是来将 放在let节点前面。\path let ... node\node let ...

  3. 最后一个错误非常常见:节点名称中带有点。您的语法在按上述方法更正后,将分配节点名称p05.0p06.0p07.0。这些作为节点名称没问题,但以后不能用作坐标,因为它们与node.anchor模式匹配,因此被解释为节点边界上的 0 度p05(由于称为 ,因此不存在p05.0)。如果\pgfmathsetmacro直接使用,我们会使用\pgfmathtruncatemacro来避免这种情况,但由于您使用的是 ,let我们必须有点狡猾,并明确输入int

相关内容