The problem is that TeX macro definitions are by default local and each loop iteration is inside a group. Hence the definition of \z
to \y
at the end of the loop is thrown away immediately afterwards and replaced by the original definition of \z
as 2.
Simply replacing \pgfmathsetmacro{\z}{\y};
by \xdef\z{\y};
solves the problem (and is a lot faster too). The drawback of this is however that the new definition of \z
will now globally override any macro that was stored in \z
(if there happened to be one).
You could also replace the code by the following, which avoids any additional macro definitions:
\usetikzlibrary{calc}
\begin{tikzpicture}[scale=0.6]
\coordinate[label=left:$2$] (0) at (0,2){};
\pgfmathdeclarerandomlist{dir}{{-1}{1}};
\foreach \i in {1,2,...,10}{
\pgfmathrandomitem{\d}{dir};
\pgfmathtruncatemacro{\p}{\i-1};
\coordinate (\i) at ($(\p) + (1,\d)$) {};
\draw[red] (\p)--(\i);
}
\end{tikzpicture}
I don't really get the question so I hope this is what you wanted. If you include a full document (such that we copy paste and see the problem on our systems) things are much more easier.
Here, you can change the default setting within a scope but your block
style had a node distance
which was resetting every time it is issued. I've made it 2mm such that we can see the difference easier.
\documentclass[tikz]{standalone}
\usetikzlibrary{arrows,shapes.geometric,positioning}
\begin{document}
\begin{tikzpicture}[decision/.style={diamond, draw, text width=4.5em, text badly centered, node distance=3.5cm, inner sep=0pt},
block/.style ={rectangle, draw, text width=6em, text centered, rounded corners, minimum height=4em, minimum height=2em},
cloud/.style ={draw, ellipse, minimum height=2em},
line/.style ={draw,-latex'},
node distance = 1cm,
auto]
\node [block] (1st) {1st};
\node [block, right= of 1st] (2nd1) {2nd1};
\begin{scope}[node distance=2mm and 10mm]%Here we change it for everything inside this scope
\node [block, above= of 2nd1] (2nd2) {2nd2};
\node [block, below= of 2nd1] (2nd3) {2nd3};
\node [block, right= of 2nd1] (3rd1) {3rd1};
\node [block, above= of 3rd1] (3rd2) {3rd2};
\node [block, above= of 3rd2] (3rd3) {3rd3};
\end{scope}
\node [block, below= of 3rd1] (3rd4) {3rd4};
\node [block, below= of 3rd4] (3rd5) {3rd5};
\path [line] (1st) -- (2nd1);
\path [line] (2nd1) -- (2nd2);
\path [line] (2nd1) -- (2nd3);
\path [line] (2nd2) -- (3rd3);
\path [line] (2nd1) -- (3rd1);
\path [line] (1st) -- (2nd1);
\end{tikzpicture}
\end{document}
Best Answer
TikZ library
positioning
is needed for the syntaxleft=5mm of a
:Without library
positioning
, there are error messages like: