TikZ中节点名称的模块化算法?

时间:2010-10-15 18:00:24

标签: latex tikz

假设我想在TikZ中构建一个循环图,其中包含可变数量的节点,标记为v0,v1,...,v_n-1,用于我选择的某些n(例如,5)。

我希望能够在TikZ中使用\ foreach命令迭代地(1)定义节点,以及(2)连接节点。我希望能够将v_i连接到v_(i + 1)和v_i连接到v_ {i + 2},比如说。

\foreach \i in {0, ..., 4} {\path (\i*72:3) node (v\i) {};}

完美地构造节点。但是当我想绘制一些线条时,

\foreach \i \in {0, ..., 3} { \draw (v\i) -- (v{\i+1}); } ????

不起作用。

也没有

\foreach \i / \j in {0/1, ..., 3/4} { \draw (v\i) -- (v{\j}); }

我收到错误“没有这样的形状v0”或类似的东西。

我知道这一定很容易,但我无法弄明白。有什么建议吗?

作为一个后续内容,能够使用单个\foreach命令连接v_i和v_ {i + 4}或其他东西会很好,并让TikZ / pgf为我做模块化算法而不需要担心溢出。

2 个答案:

答案 0 :(得分:2)

这对我有用:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,fit,arrows,positioning}
\tikzstyle{vertex} = [circle, draw, thick, text centered]
\tikzstyle{edge} = [draw, thick,->]
\begin{document}
\begin{tikzpicture}[scale=1]
  \foreach \x in {0,...,6}
    \node[vertex] (\x) at (\x*360/7:3) {v\x};
  \foreach \x/\y in {0/1,1/2,2/3,3/4,4/5,5/6,6/0}
    \draw[edge] (\x) to (\y);
\end{tikzpicture}
\end{document}

circular graph

语法{0/1,...,5/6}对我不起作用。但我承认,我花了一些时间试图找到一个好的解决方案,但我仍然不满意。

答案 1 :(得分:2)

另一个解决方案,由Steve Tjoa编辑代码:

\documentclass[tikz,border=1mm]{standalone}
\usetikzlibrary{arrows}

\begin{document}
\begin{tikzpicture}[thick]
\foreach \x in {0,...,4}{%
  \node [circle, draw] at (\x*72:3) {$v_{\x}$};
  \draw [->] (\x*72+10:3) arc (\x*72+10:\x*72+62:3);
}
\end{tikzpicture}
\end{document}

screenshot of output