如何获取循环数组中的下一个元素\foreach
?
下面是我想要实现的一个例子,但它显然不起作用
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\def\points{(0.31,-0.23), (1,0.68), (0.54,1.35), (2,2)}
\foreach \p [count=\i] in \points{
\draw \points[\i] -- \points[\i+1];
}
\end{tikzpicture}
\end{document}
请注意,使用这种方法对我来说至关重要,因为我希望我的代码具有灵活性,以便我可以\points
根据需要删除或添加数组中的任意多个点,所以\draw (A) -- (B) -- (C) -- ...
不适合我。实际任务比简单的点连接要复杂一些,但它基于此问题的解决方案。
答案1
您可以使用remember
来访问上一个点。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\def\points{(0.31,-0.23), (1,0.68), (0.54,1.35), (2,2)}
\foreach \p [count=\i,remember=\p as \lastp] in \points{
\ifnum\i>1\relax
\draw \lastp -- \p;
\fi
}
\end{tikzpicture}
\end{document}
答案2
,
如果对于你来说,用不同于(我使用)的字符来分隔列表中的点不是问题;
,因为逗号已经用于分隔坐标,那么使用listofitems
包很容易:
\documentclass{article}
\usepackage{tikz}
\usepackage{listofitems}
\setsepchar{;}
\begin{document}
\readlist\points{(0.31,-0.23); (1,0.68); (0.54,1.35); (2,2)}
\begin{tikzpicture}
\foreach \i in {2,...,\pointslen}
{\draw \points[\i-1] -- \points[\i];}
\end{tikzpicture}
With more points:
\readlist\points{(0.31,-0.23); (1,0.68); (0.54,1.35); (2,2); (3,4); (4,5)}
\begin{tikzpicture}
\foreach \i in {2,...,\pointslen}
{\draw \points[\i-1] -- \points[\i];}
\end{tikzpicture}
\end{document}
答案3
经过一番研究,我想我找到了最适合我的解决方案,这就是我将此答案标记为“已接受”的原因。但是,请考虑其他答案,因为它们可能更适合您的需求。
以下是两种类似的方法:
\documentclass{article}
\usepackage{tikz}
\begin{tikzpicture}
\def\points{{{0.31,-0.23}, {1,0.68}, {0.54,1.35}, {2,2}}}
\pgfmathsetmacro{\len}{dim(\points)-2}
\foreach \i [evaluate={\ax=\points[\i][0]; \ay=\points[\i][1]; \bx=\points[\i+1][0]; \by=\points[\i+1][1]}]
in {0,...,\len}{
\draw (\ax,\ay) -- (\bx,\by);
}
\end{tikzpicture}
\end{document}
\documentclass{article}
\usepackage{tikz}
\begin{tikzpicture}
\def\points{{{0.31,-0.23}, {1,0.68}, {0.54,1.35}, {2,2}}}
\pgfmathsetmacro{\len}{dim(\points)-2}
\foreach \i in {0,...,\len}{
\pgfmathsetmacro{\ax}{\points[\i][0]}
\pgfmathsetmacro{\ay}{\points[\i][1]}
\pgfmathsetmacro{\bx}{\points[\i+1][0]}
\pgfmathsetmacro{\by}{\points[\i+1][1]}
\draw (\ax,\ay) -- (\bx,\by);
}
\end{tikzpicture}
\end{document}
我认为在寻找解决方案时值得参考这些有用的帖子:
TikZ \foreach 循环使用 pgfmath 函数评估变量
pgfmathparse 在 foreach 中,使用结果作为节点坐标
另外还有小节中的一个例子94.2 数学表达式的语法:运算符见第 1033 页