我需要在 foreach 循环内更新 pgfmathsetmacro 命令中定义的变量。显然,只有在 update 命令之后使用时,var 才会更新。以下是 MWE:
\begin{tikzpicture}
\draw [help lines] (0,0) grid (3,3);
\pgfmathsetmacro{\a}{1}
\foreach \b in {2,3} {
\node [blue] at (\a,0) {\a};
\pgfmathsetmacro{\a}{\b}
\node [red] at (0,\a) {\a};
}
\end{tikzpicture}
红色节点打印在更新的位置,打印的值也更新;蓝色节点则不然:它们保持其初始值 (1) 并位于初始位置 (0,1)。这是为什么?谢谢 José
答案1
这些\pgfmathsetmacro
定义只是局部的。通过将其与 进行比较,您可以更好地理解这一点\gdef
。
\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (3,3);
\pgfmathsetmacro{\a}{1}
\foreach \b in {2,3} {
\node [blue] at (\a,0) {\a};
\pgfmathsetmacro{\a}{\b}
\node [red] at (0,\a) {\a};
}
\end{tikzpicture}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (3,3);
\pgfmathsetmacro{\a}{1}
\foreach \b in {2,3} {
\node [blue] at (\a,0) {\a};
\gdef\a{\b}
\node [red] at (0,\a) {\a};
}
\end{tikzpicture}
\end{document}
在第二张图片中,\a
被重新定义全球。请注意,有这些定义是有意且有利的当地的\a
否则,如果您像下面这样使用宏名,您可能会遇到真正的麻烦\b
。