如何用 tikzpicture 绘制递归图片?

如何用 tikzpicture 绘制递归图片?

假设我需要绘制一个康托集、一条谢尔宾斯基地毯、一条科赫曲线或者任何类似的简单分形。

通常,您可以通过绘制一幅图,然后重新缩放它并在多个地方复制来实现这一点。

我尝试使用\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

您的代码中有两个错误。

  1. 您可能想要乘以\a10,因此必须写10*\a
  2. 如果 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}

相关内容