# How to make many copies of similar graphs systematically?

I want to make various copies of a graph in tikz. The graph I want has 10 vertices. But only has the edges between the vertices a_i,a_(i+1),t,b.

I would like to automatically create 8 copies of this graph. and draw them. I just don't know how to code it. Here is my current code, but it adds all of the edges to the same copy of the graph:

\begin{tikzpicture}
[main_node/.style={circle,fill=blue!20,draw,minimum size=2em,inner sep=3pt]}]
\node[main_node] (8) at (0:0.5) {b};
\node[main_node] (9) at (180:0.5) {t};
\foreach \x in {0,1,...,7}
\node[main_node] (\x) at (360/8*\x:2) {$a_{\x}$};
\foreach \x in {0,1,...,7}{
\pgfmathsetmacro{\y}{int(mod(\x+1,8))}
\path[draw,thick] (\x) edge node {} (8);
\path[draw,thick] (\x) edge node {} (9);
\path[draw,thick] (\x) edge node {} (\y);
\path[draw,thick] (8) edge node {} (9);
\path[draw,thick] (8) edge node {} (\y);
\path[draw,thick] (9) edge node {} (\y);

}


I want each of the edge sets to be drawn seperately.

• In this case the copies of the graph are just rotations of the same thing, but I need a similar case in which the construction is not soo similiar (but is still arithmetically expressable in terms of an integer x that ranges between 0 and 8).
– user26420
Feb 12 '17 at 17:01
• thank you! Sorry if this question is not up to quality standards, I started learning tikz yesterday, but I couldn't find any resources on this.
– user26420
Feb 12 '17 at 17:11
• You can enclose the whole tikzpicture inside the body of a foreach loop. Feb 12 '17 at 17:35
• But how can I do it so that a new graph is created in each cycle?
– user26420
Feb 12 '17 at 17:44
• @JorgeFernándezHidalgo If \begin{picture}/\end{picture} is inside the loop, each iteration of it would produce a new figure. See my anser. Feb 12 '17 at 17:49

Elaborating the method proposed in my comment:

\documentclass[tikz]{standalone}
\usepackage{tikz}

\begin{document}
\foreach \n [remember=\n as \previous (initially 0)] in {1,...,7,0} {
\begin{tikzpicture}[main_node/.style={circle,fill=blue!20,draw,minimum size=2em,inner sep=3pt]}]
\node[main_node] (8) at (0:0.5) {b};
\node[main_node] (9) at (180:0.5) {t};
\foreach \x in {0,1,...,7}
\node[main_node] (\x) at (360/8*\x:2) {$a_{\x}$};
\path[draw,thick] (\n) edge (8);
\path[draw,thick] (\n) edge (9);
\path[draw,thick] (\previous) edge (8);
\path[draw,thick] (\previous) edge (9);
\path[draw,thick] (\n) edge (\previous);
\end{tikzpicture}
}
\end{document}


Result:

(Not sure if this is the intended result, but at least it can illustrate the proposed method)

Update: A little improvement to avoid overlapping edges (and to add the missing t--b edge):

\documentclass[tikz]{standalone}
\usepackage{tikz}

\begin{document}
\foreach \n [remember=\n as \previous (initially 0)] in {1,...,7,0} {
\begin{tikzpicture}[main_node/.style={circle,fill=blue!20,draw,minimum size=2em,inner sep=3pt]}]
\node[main_node] (8) at (0:0.5) {b};
\node[main_node] (9) at (180:0.5) {t};
\foreach \x in {0,1,...,7}
\node[main_node] (\x) at (360/8*\x:2) {$a_{\x}$};
\path[draw,thick] (\n) edge[bend left] (8);
\path[draw,thick] (\n) edge[bend right] (9);
\path[draw,thick] (8) edge (9);
\path[draw,thick] (\previous) edge[bend left] (8);
\path[draw,thick] (\previous) edge[bend right] (9);
\path[draw,thick] (\n) edge (\previous);
\end{tikzpicture}
}
\end{document}


Result:

Second update

Using a conditional expression, we can change the bending direction of the edges for the cases of the nodes a4..a7, which produces a nicer result.

\documentclass[tikz,border=2pt]{standalone}
\usepackage{tikz}

\begin{document}
\foreach \n [remember=\n as \previous (initially 7)] in {0,...,7} {
\begin{tikzpicture}[main_node/.style={circle,fill=blue!20,draw,minimum size=2em,inner sep=3pt]}]
\node[main_node] (8) at (0:0.5) {b};
\node[main_node] (9) at (180:0.5) {t};
\foreach \x in {0,1,...,7}
\node[main_node] (\x) at (360/8*\x:2) {$a_{\x}$};
% Here is the conditional which defines \up and \down
% appropiately, depending on the iteration of the loop
\pgfmathsetmacro{\up}{\previous < 4 ? "left" : "right"}
\pgfmathsetmacro{\down}{\previous < 4 ? "right" : "left"}
\path[draw,thick] (\n) edge[bend \up] (8);
\path[draw,thick] (\n) edge[bend \down] (9);
\path[draw,thick] (8) edge (9);
\path[draw,thick] (\previous) edge[bend \up] (8);
\path[draw,thick] (\previous) edge[bend \down] (9);
\path[draw,thick] (\n) edge (\previous);
\end{tikzpicture}
}
\end{document}


Result:

• yes, that is exactly what I wanted. Thank you very much!
– user26420
Feb 12 '17 at 17:52
• Any hints as to how I can make my article position the graphs in an ordered fashion? currently it packs them all really close.
– user26420
Feb 12 '17 at 18:03
• @JorgeFernándezHidalgo Not sure of what you mean. You can insert other commands inside the loop, even a figure environment with a caption whose text uses \n variable. But I think the easiest approach is to use an external tex file which uses standalone class, like the one in my answer, to generate a pdf with only figures, and then insert these in your main document via \includegraphics[page=1]{figs.pdf} at your convenience (changing 1 by 2, and so on for the different figures). Feb 12 '17 at 21:36
• Is there any way to directly output gif? May 8 '21 at 22:42