考虑一下(目前不正确的)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}