I'm trying to draw a stack of arrows at different angles in a \foreach
loop in TikZ. I don't want to have to declare every z coordinate and angle manually so I was using the {1,2,...,10}
syntax but this doesn't seem to work in the example below with two variables in the for loop.
\documentclass{standalone}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\usetikzlibrary{arrows}
\usetikzlibrary{3d}
\tikzset{>=latex}
\begin{document}
\tdplotsetmaincoords{90}{90}
\tdplotsetrotatedcoords{0}{20}{70}
\begin{tikzpicture}[tdplot_rotated_coords,scale=0.5]
\foreach \x/\y in {7/0, 8/10, ..., 10/30}
{
\draw (2, 2, \x) circle(2) node[right]{\y};
\draw[->, ultra thick, red] (2, 2, \x) --++ (\y:2) --++ (\y+180:4);
}
\end{tikzpicture}
\end{document}
Does anyone know how to get around this? The code above gives the error ! Illegal unit of measure (pt inserted).
Thanks.
Best Answer
The problem stems from the
...
part in the argument of the\foreach
macro; note that it disappears if you delete...,
from your code.Although you can of course recognise a pattern in
the
\foreach
macro cannot. I refer you to section 56 of thetikz
manual and to using computations with \foreach in tikz for more details about how...
works inside the argument of\foreach
.In this particular case, under the assumption that
\x
represent a sequence that can be expressed by a simple enough formula—\x
simply represents an arithmetic sequence, here—you can just use\y
as the only loop variable and derive\x
from the iteration variable; I've defined the latter as\i
by usingcount=\i
in the optional argument of\foreach
, below.