2

假设我想在 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 为我做模运算而不必担心溢出,那就太好了。

4

2 回答 2

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}

圆形图

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

于 2010-10-18T05:07:28.240 回答
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}

输出截图

于 2015-12-14T22:27:44.700 回答