I'm trying to create a generic code to draw a cycle graph. I used a code found in the net to create the nodes… But when it comes to re-use pgfmathparse
and pgfmathresult
, I only get as value for the second \pgfmathresult
… 0. Even in this example, I've put \pgfmathparse{int(2)}
, and in the second line, he draws me a vertex with the label "0" … Which should be "2"… Right ? I don't understand what I'm missing.
\tikzstyle{vertex}=[circle,fill=black!0, draw, minimum size=10pt,inner sep=0pt]
\tikzstyle{edge} = [draw,thick,-]
\begin{tikzpicture}[scale=0.8, auto,swap]
\foreach \i in {1,...,4}{%
\pgfmathparse{(\i-1)*90+floor(\i/5)*22.5}
\node[vertex] (N-\i) at (\pgfmathresult:2) [thick] {}; % Put some nodes N-1 to N-4
\pgfmathparse{int(2)}
\node (muck) at (0,0) {\pgfmathresult}; % DISPLAY 0 AS RESULT
}
\end{tikzpicture}
Best Answer
TikZ uses
\pgfmathparse{...}\pgfmathresult
mechanism for its own computations for node size, background path etc. just as you would access it for your own computations. Hence it gets overwritten a lot.Here, you make a computation but call the value too late. So
\node
also called it and it might even also give other values not equal to zero depending on what has happened before the node is placed. In this case they
coordinate of the node, for example, this gives1
That's why you have to be "quick" as Gonzalo Medina commented that you call it immediately after you do a computation.
In the first instance of
\pgfmathparse
you use the same thing but that one seemingly works. Why? It works because the value is called before node computations took place, since it only parses the input but doesn't actually start doing the node creation. So we are lucky. For example,will not work since we did an internal computation line width.