我尝试使用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}
错误如下:
一个小问题是,您使用圆括号来对算术进行分组,而您应该使用大括号(至少对于最外层的分组)。
let 操作不能位于节点和其参数之间。您必须事先拥有它。节点有点特殊,会非常仔细地检查后面的文本,因此最好不要让它太复杂。在这种情况下,可以通过编写而不是来将 放在
let
节点前面。\path let ... node
\node let ...
最后一个错误非常常见:节点名称中带有点。您的语法在按上述方法更正后,将分配节点名称
p05.0
、p06.0
和p07.0
。这些作为节点名称没问题,但以后不能用作坐标,因为它们与node.anchor
模式匹配,因此被解释为节点边界上的 0 度p05
(由于称为 ,因此不存在p05.0
)。如果\pgfmathsetmacro
直接使用,我们会使用\pgfmathtruncatemacro
来避免这种情况,但由于您使用的是 ,let
我们必须有点狡猾,并明确输入int
。