tags:

views:

42

answers:

1

Say I want to construct a circulant graph in TikZ, with a variable number of nodes, labelled v0, v1, ..., v_n-1 for some n of my choice (say, 5).

I'd like to be able to use the \foreach command in TikZ to iteratively (1) define the nodes, and (2) connect the nodes. I'd like to be able to connect v_i to v_(i+1) and v_i to v_{i+2}, say.

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

constructs the nodes perfectly. But then when I want to draw some lines,

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

doesn't work. Nor does

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

I get an error "no such shape v0" or something like that.

I know this must be totally easy to do, but I can't figure out how. Any suggestions?

As a followup, it would be nice to be able to connect v_i and v_{i+4} or something, with a single \foreach command, and have TikZ/pgf do the modular arithmetic for me without having to worry about spilling over.

A: 

This worked for me:

\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

The syntax {0/1,...,5/6} did not work for me. But I admit, I spent a bit of time trying to find a good solution, and I'm still not totally satisfied.

Steve