# Apply operations to iterator \x in \foreach loop in Tikz

I am trying to draw a graph comprised of 13 triangles joined at the centre (i.e. a wheel graph with some edges missing from the outer cycle). I managed to connect the outer vertices to the central one but I would like to automate the insertion of the remaining edges. The vertices on the outer cycle are labelled from 1 to 26. For each odd vertex n, I want to draw an edge between this and vertex n+1, e.g. edges (1,2), (3,4), (5,6), etc. I tried the code below but I don't know how to "evaluate" the expression "\x + 1" to reference a vertex.

\begin{tikzpicture}[main/.style = {draw, circle, inner sep=1.2, fill=black}]
\node[main, label=below:{$e$}] at (360:0mm) (0) {};
\graph[circular placement, group polar shift=(360/26:0), empty nodes, radius=6cm, nodes={circle, inner sep=1.2, draw=black, fill=black}] {
\foreach \x in {1,...,26} {
\x -- (0);
};
\foreach \x in {1,3,5,7,9,11,13,15,17,19,21,23,25} {
\x -- \x + 1
};
};

\end{tikzpicture}


The result should look similar to the following but with all the missing edges on the outer cycle.

Any help is very much appreciated!

• how about draw 1 triangle, then rotate? Jul 11 at 1:57
• You might try with \foreach \x/\y in{1/2,3/4,5/6,…}. Jul 11 at 8:14
• Thank you! it worked! : ) Jul 11 at 10:19

You want to evaluate \x+1.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{graphs}

\begin{document}

\begin{tikzpicture}[
main/.style = {draw, circle, inner sep=1.2, fill=black}
]
\node[main, label=below:{$e$}] at (360:0mm) (0) {};
\graph[
circular placement,
group polar shift=(360/26:0),
empty nodes,
nodes={circle, inner sep=1.2, draw=black, fill=black}
]{
\foreach \x in {1,...,26} {
\x -- (0);
};
\foreach \x [evaluate=\x as \y using \x+1] in {1,3,...,25} {
\x -- \y
};
};
\end{tikzpicture}

\end{document}


However, the connections are not correctly placed. It might make more sense to draw one piece and rotate it.

• thank you! yes, I see some of the connectors are slanted - weird.. Jul 11 at 10:14

May I suggest a simpler way to do that?

\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}[dot/.style={circle,fill=black,inner sep=1.2pt}]
\coordinate (0) at (0,0);
\def\r{6}
\foreach \i [evaluate=\i as \j using \i+1] in {1,3,...,25}
\draw (0) -- (\i*360/26-360/52:\r) node[dot](\i){} -- (\j*360/26-360/52:\r) node[dot](\j){} -- cycle;
\end{tikzpicture}

\end{document}

• That's great! Thank you! Jul 11 at 15:32
• @AdrianLeverkuhn If this is what you needed, please consider upvoting and accepting this answer to let users know that you find your solution ;) Jul 11 at 16:00
• unfortunately it does not let me upvote yet but I accepted the answer. Cheers Jul 11 at 16:04
• Of course, because you're new here. Thanks anyway and feel free to come back with other questions. Jul 11 at 16:17

based on comments provided and other posts, I ended up with the following:

\begin{tikzpicture}[main/.style = {draw, circle, inner sep=1.2, fill=black}]
\node[main, label=right:{$e$}] at (360:0mm) (0) {};
\graph[circular placement, group polar shift=(360/26:0), empty nodes, radius=4cm, nodes={circle, inner sep=1.2, draw=black, fill=black}] {
\foreach \x in {1,...,26} {
\x -- (0);
};
\foreach \x [evaluate={\xi=int(\x+1);}] in {1, 3, ..., 25} {
\foreach \y in {\x,...,\xi} {
\x -- \y;
};
};
};

\foreach \x [count=\idx from 0] in {a, a^2, b, b^2, c, c^2, d, d^2, f, f^2, g, g^2, h, h^2, i, i^2, j, j^2, k, k^2, l, l^2, m, m^2, n, n^2} {
\pgfmathparse{90 + \idx * (360 / 26)} \node at (\pgfmathresult:4.4cm) {$\x$};
};

\end{tikzpicture}


which produces this graph:

thank you all!