I want to draw a graph like in the second picture of the following code:
\documentclass{article}
\usepackage{mathptmx}
\usepackage{tikz}
\usepackage{verbatim}
\usetikzlibrary{arrows,shapes,graphs,graphs.standard,quotes}
\usepackage{calc}% http://ctan.org/pkg/calc
\usepackage{ifthen}
\begin{document}
% This one works
\begin{tikzpicture}
\foreach \x in {1,...,5}
{ \node[circle,draw] (\x 1) at (0,\x) {\x};
\node[circle,draw] (\x 2)at (2,\x) {\x};
\ifthenelse{\NOT 4 = \x \AND \NOT 7 = \x}{\draw (\x 1) -- (\x 2);}{} % (*)
}
\end{tikzpicture}
% This one does not work with line (*)
\begin{tikzpicture}
\tikzstyle{vertex}=[circle,fill=blue!15,draw,minimum size=17pt,inner sep=0pt]
%See TikZ documentation! (Section 19, graphs)
\graph[circular placement, radius=4cm, group polar shift=(360/5:0),
nodes={circle,draw,vertex}] {
\foreach \x [evaluate=\x as \sx using int(\x+1)] in {0,...,4} {
\foreach \y in {\x,...,4} {
\x -- \y;
%\ifthenelse{\NOT 4 = \x \AND \NOT 7 = \x}{\draw (\x 1) -- (\x 2);}{} % (*)
};
};
};
\end{tikzpicture}
\end{document}
It uses the TikZ graph library. As you might guess, I want to label the edges dependent on what \x
and \y
are in the for loop. So I need an If-Then-Else
statement and came to this answer: https://tex.stackexchange.com/a/45907/52709.
I copied the code, it is the first picture and it works.
But applying the same \ifthenelse
-line to my code (commented out), produces an error at that line:
! Undefined control sequence.<argument> \NOT 4 = \x \AND \NOT 7 = \x }
and also
! Illegal parameter number in definition of \tikz@lib@graph@name.
at the end of the graph defintion (};
).
Isn’t it possible to use something like \ifthenelse
inside such a graph definition?
How can I achieve what I need?
Best Answer
\ifthenelse
is "normal" LaTeX code. Therefore you can not use this command inside a TikZ path specification. But since the node text is put in a normal TeX box you can use\ifthenelse
inside the node text. So you can tryOr you can position the nodes inside the
\graph
and connect them outside. Then you can use\ifthenelse
outside of a path specification. Note that the complete\draw
paths are in the arguments of\ifthenelse
.The result is the same as above.
In the pgfmanual you can also find
\pgfextra
as a possibilty to suspend temporarly the path construction and do some other things like\ifthenelse
. Here is a simple example where the filling color depends on the counter:This results in
But AFAIK this does not work inside a
\graph
command.Update:
Solutions without package
\ifthen
based on a suggestion of @marmot in a comment:or
The result is the same as in the first picture.