我试图在 foreach 循环中使用 \pgfmathsetmacro 连接相邻且根据位置命名的节点,如下所示:
\foreach \src in {0,...,\T}{
\pgfmathsetmacro{\dest}{\src+1};
\path (n-\src-1) edge[<-] (n-\dest-1);
};
但这会导致编译时出现以下错误:
./nn.tex:54: Package pgf Error: No shape named n-1 is known. [ }]
./nn.tex:54: Package pgf Error: No shape named n-2 is known. [ }]
./nn.tex:54: Package pgf Error: No shape named n-3 is known. [ }]
./nn.tex:54: Package pgf Error: No shape named n-4 is known. [ }]
这使得 \dest 值似乎不可用。我该如何解决这个问题?
提前致谢!
答案1
通过 定义后\pgfmathsetmacro
,宏\dest
包含一个实数(1.0
、2.0
、...),但很可能您需要一个整数。这可以通过使用\pgfmathtruncatemacro
而不是\pgfmathsetmacro
来截断小数部分来实现:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\path
\foreach \src in {0, ..., 4} {
(\src, 0) node[circle, draw] (n-\src-1) {}
}
;
\foreach \src in {0, ..., 3} {
\pgfmathtruncatemacro{\dest}{\src+1};
\path (n-\src-1) edge[<-] (n-\dest-1);
};
\end{tikzpicture}
\end{document}
或者也可以使用整数加法,例如通过 eTeX 的\numexpr
:
\edef\dest{\the\numexpr(\src)+1}
另一种方法是使用evaluate
键(而不是\pgfmathsetmacro
)和int
函数(截断您的添加):
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\path
\foreach \src in {0, ..., 4} {
(\src, 0) node[circle, draw] (n-\src-1) {}
}
;
\foreach \src [evaluate=\src as \dest using int(\src + 1)]
in {0, ..., 3} {
\path (n-\src-1) edge[<-] (n-\dest-1);
};
\end{tikzpicture}
\end{document}