foreach 循环并计算

foreach 循环并计算

为什么下面的循环没有\posx变化?我手动添加了结果应该是怎样的(左侧第二张图片)。有什么办法可以解决这个问题吗?

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{pgfplots}
\usepackage{tkz-fct}
\usetkzobj{all}

\usepackage{ifthen}

\begin{document}

\newcommand{\vt}[1]{
  \pgfmathsetmacro{\posx}{0}
  \foreach \x/\y in {#1}{
    \draw[color=red,thick] (\posx,\y) -- (\x + \posx,\y);
    \pgfmathsetmacro{\posx}{\x + \posx};
  }
  \node at (5,3) {posx: \posx};
}

\begin{tikzpicture}
   \tkzInit[xmax=6,ymax=4]
   \tkzGrid
   \tkzAxeXY
   \vt{1/1,2/2,3/3}
\end{tikzpicture}
\begin{tikzpicture}
   \tkzInit[xmax=6,ymax=4]
   \tkzGrid
   \tkzAxeXY
   \draw[color=red,thick] (0,1) -- (1,1);
   \draw[color=red,thick] (1,2) -- (3,2);
   \draw[color=red,thick] (3,3) -- (6,3);
\end{tikzpicture}


\end{document}

loop.jpg

答案1

由于整个命令都在一个组内,因此影响在\foreach循环内是局部的。因此您需要全局定义事物(请参阅 的使用\xdef)。

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{tkz-fct}
\usetkzobj{all}

\begin{document}

\newcommand{\vt}[1]{
  \pgfmathsetmacro{\posx}{0}
  \foreach \x/\y in {#1}{
    \draw[color=red,thick] (\posx,\y) -- (\x + \posx,\y);
    \pgfmathparse{\x + \posx}
    \xdef\posx{\pgfmathresult}%
  }
  \node at (5,3) {posx: \posx};
}

\begin{tikzpicture}
   \tkzInit[xmax=6,ymax=4]
   \tkzGrid
   \tkzAxeXY
   \vt{1/1,2/2,3/3}
\end{tikzpicture}
\begin{tikzpicture}
   \tkzInit[xmax=6,ymax=4]
   \tkzGrid
   \tkzAxeXY
   \draw[color=red,thick] (0,1) -- (1,1);
   \draw[color=red,thick] (1,2) -- (3,2);
   \draw[color=red,thick] (3,3) -- (6,3);
\end{tikzpicture}

\end{document}

相关内容