为什么下面的循环没有\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}
答案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}