foreach 中的 pgfmathsetmacro 问题

foreach 中的 pgfmathsetmacro 问题

我试图在 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.02.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}

结果

相关内容