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

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

考虑一下(目前不正确的)MWE:

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{shapes,arrows,calc}

\begin{document}
\begin{tikzpicture}[node distance=2cm, auto]

\def\mypoints{(1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (5, 1), (4, 1), (3, 1), (2, 1), (1, 1)};
\def\lastnode{(1,0)};
\foreach \x in \mypoints { 
    \draw[fill] \x circle (0.05);   
    \path[draw, -latex', black!50!white] \x -| \lastnode;
    \let\lastnode=\x;
};

\end{tikzpicture}
\end{document}

我的目标是遍历一个点列表,这些点要么是这样定义的,要么通过某个\foreach范围生成的,并在每个点处绘制一个圆/节点/矩形/等,然后从上一次迭代到该点绘制一个箭头或其他线。

我认为可行的方法是创建一个trailer变量来维护最近绘制的节点的状态,然后使用该信息轻松绘制连接线。目前变量\lastnode没有更新,很可能是因为我使用了错误的宏来完成这项工作……

是否可以使用上面概述的方法迭代绘制和连接节点/点/...,或者另一种方法更合适?理想情况下,该解决方案可以同时适用于点(x, y)和命名节点(nodenumber1)

答案1

以下示例定义节点node1、 、... 并在它们之间绘制边。的node2选项允许保存上一次循环中的一些值。remember\foreach

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{shapes,arrows,calc}

\begin{document}
\begin{tikzpicture}[node distance=2cm, auto]

\def\mypoints{%
  (1, 0), (2, 0), (3, 0), (4, 0), (5, 0),
  (5, 1), (4, 1), (3, 1), (2, 1), (1, 1)%
};
\path
  \foreach \x [count=\xi] in \mypoints {
    \x node[circle, fill, inner sep=sqrt(2)*0.025cm] (node\xi) {}
  }
  \foreach \x [count=\xi, remember=\xi-1 as \xiprev] in \mypoints {
    \ifnum\xi>1 %
      (node\xiprev) edge[-latex', black!50!white] (node\xi)
    \fi
  }
;
\end{tikzpicture}
\end{document}

结果

相关内容