我正在尝试在 TikZ 中循环绘制不同角度的箭头堆栈\foreach
。我不想手动声明每个 z 坐标和角度,所以我使用了语法,{1,2,...,10}
但这在下面的 for 循环中有两个变量的示例中似乎不起作用。
\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}
有人知道如何解决这个问题吗?上面的代码给出了错误! Illegal unit of measure (pt inserted).
谢谢。
答案1
问题源于...
宏参数中的部分;请注意,如果从代码中\foreach
删除它,它就会消失。...,
虽然你当然可以认识到
7/0, 8/10, ..., 10/30
宏\foreach
不能。我请您参阅手册第 56 节tikz
和在 tikz 中使用 \foreach 进行计算...
有关 论证内部工作原理的更多详细信息\foreach
。
在这种特殊情况下,假设\x
表示一个可以用足够简单的公式表达的序列 -\x
这里仅表示一个算术序列 - 您可以将其用作\y
唯一的循环变量并\x
从迭代变量中派生;我已将后者定义为通过在下面的可选参数中\i
使用。count=\i
\foreach
\documentclass{article}
\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[count=\i, evaluate=\i as \x using int(\i+6)] \y in {0,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}