假设我需要绘制一个康托集、一条谢尔宾斯基地毯、一条科赫曲线或者任何类似的简单分形。
通常,您可以通过绘制一幅图,然后重新缩放它并在多个地方复制来实现这一点。
我尝试使用\foreach \a in {...}
组合\begin{scope}[shift{some function of \a},scale{some function of \a}]
但我没有成功。
那么将循环与移动和重新缩放图片结合起来的正确方法是什么?
更确切地说,我尝试过:
\foreach \a in {0,1,2}
\begin{scope}[shift={(10\a,0)}, scale=1/3]
mypicture
\end{scope}
这会产生错误
“额外},或者忘记了\endgroup。”
并带有组括号
\foreach \a in {0,1,2}
{\begin{scope}[shift={(10\a,0)}, scale=1/3]
mypicture
\end{scope}}
这似乎不起作用。
答案1
您的代码中有两个错误。
- 您可能想要乘以
\a
10,因此必须写10*\a
。 如果 foreach 循环的主体不止一个语句,则必须将其放在括号组中。
\foreach \a in {0,1,2} \node at (10*\a,0) {\a};
可以(单句,以 结尾
;
),但不能\foreach \a in {0,1,2} \begin{scope}[shift={(10*\a,0)}] \node at (0,0) {\a}; % scanning actually stops at this ; \end{scope} % this is not reached -> error!
如果您纠正这些错误,以下 MWE 排版就会很好。
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \a in {0,1,2} {
\begin{scope}[shift={(10*\a,0)}]
\node at (0,0) {\a};
\end{scope}
}
\end{tikzpicture}
\end{document}