在 foreach 循环中更新 pgfmath 宏

在 foreach 循环中更新 pgfmath 宏

我需要在 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

答案2

选项remember可用于访问\foreach变量的先前值:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  \draw [help lines] (0,0) grid (3,3);
  \foreach \b [remember=\b as \a (initially 1)] in {2,3} {
    \node [blue] at (\a,0) {\a};
    \node [red] at (0,\b) {\b};
  }
\end{tikzpicture}
\end{document}

结果

相关内容