为什么 tikz foreach 在访问节点时表现得很奇怪

为什么 tikz foreach 在访问节点时表现得很奇怪

我想使用 foreach 绘制节点序列之间的连接。但是,出于某种原因,foreach 忘记了最后一个节点的位置。

下面是一个 MWE,它说明了我的问题:为什么两个 tikz 图形不同?据我所知,第二个图中使用的 foreach 应该产生与第一个图完全相同的代码,其中节点被明确命名。但它似乎忘记更新最后绘制的节点的位置。为什么?

有没有办法使用 foreach 产生所需的输出(如第一张图所示)?我不想使用坐标,因为我希望线路在节点处断开。

\documentclass{standalone}
\usepackage{tikz}

\begin{document}

    \begin{tikzpicture}
    \node (n1) at (0,0) {1};
    \node (n2) at (0,1) {2};
    \node (n3) at (1,1) {3};
    \node (n4) at (1,0) {4};
    \draw (n1) -- (n2) -- (n3) -- (n4);
    \end{tikzpicture}

    \begin{tikzpicture}
    \node (n1) at (0,0) {1};
    \node (n2) at (0,1) {2};
    \node (n3) at (1,1) {3};
    \node (n4) at (1,0) {4};
    \draw (n1) \foreach \i in {2,...,4} { -- (n\i)};
    \end{tikzpicture}
    
\end{document}

答案1

foreach您可以通过 向循环中引入第二个计数器\i[count=\secondcounter]。因此将集合 内\secondcounter的索引视为值。因此其值为 1,2,3,因为集合恰好包含三个元素。\i{2,...,4}\secondcounter{2,...,4}

请注意,foreach 循环绘制的段始终从 开始(n1)

无论如何,这里是所需的循环:

\foreach \i[count=\x]  in {2,...,4}
{
\draw (n\x)  -- (n\i);
}

在此处输入图片描述

答案2

令人反感的台词是

\draw (n1) \foreach \i in {2,...,4} { -- (n\i)};

一旦展开,就会得到结果

n1---n2 first iteration
n1---n3 second iteration
n1---n4 third iteration

而需要的是

n1---n2 first iteration
n2---n3 second iteration
n3---n4 third iteration

n1因此计数器也需要增加

相关内容