使用 \foreach 连接数组中的点

使用 \foreach 连接数组中的点

如何获取循环数组中的下一个元素\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}

­

我认为在寻找解决方案时值得参考这些有用的帖子:

通过 `\foreach` 迭代绘制并连接节点

使用 foreach 在多个节点之间绘制路径

给定一个二维点数组,如何访问 TikZ 中的各个元素?

2D tikz 矩阵:迭代和寻址元素

坐标数组和字符串数组

TikZ \foreach 循环使用 pgfmath 函数评估变量

\foreach 在记忆部分中对“最初”参数存在问题

pgfmathparse 在 foreach 中,使用结果作为节点坐标

tikz foreach 变量名称中的索引

另外还有小节中的一个例子94.2 数学表达式的语法:运算符见第 1033 页 在此处输入图片描述

相关内容