Fehler bei der Verwendung von \pause, Schleifen und Lindenmayer-Systemen

Fehler bei der Verwendung von \pause, Schleifen und Lindenmayer-Systemen

Ich versuche, eine Beamer-Präsentation mit L-Systemen zu erstellen, und ich möchte die Schritte des L-Systems einzeln anzeigen lassen. Derzeit habe ich den Code:

\documentclass[11pt]{beamer}

\usepackage{tikz}
\usetikzlibrary{lindenmayersystems}
\begin{document}
\begin{frame}
\frametitle{title}

\begin{center}

\def\intervalwidth{9cm}%
\pgfdeclarelindenmayersystem{CantorMiddleThirds}{
    \symbol{X}{\pgflsystemdrawforward}
    \symbol{Y}{\pgflsystemmoveforward}
    \rule{X -> XYX}
    \rule{Y -> YYY}
}

\foreach \level in {0,...,5}{
    \begin{tikzpicture}
    \draw [line width = 5pt] (0,0) l-system
    [l-system={CantorMiddleThirds, axiom=X,step=\intervalwidth/(3^\level), order=\level, angle=0},fill=black];
    \end{tikzpicture}
    \pause
}

\end{center}
\end{frame}
\end{document}

Beim Kompilieren erhalte ich ein PDF, das genau meinen Erwartungen entspricht. Der Compiler gibt jedoch einen Fehler aus:

Package pgf Error: Lindenmayer system `CantorMiddleThirds' is already defined. \end{frame}

das einmal pro Schleifendurchlauf auftritt. Ich frage mich, welche Interaktion diesen Fehler verursacht und wie man ihn vermeiden kann.

Antwort1

Funktioniert ohne Kompilierungsfehler, wenn \pgfdeclarelindenmayersystem{CantorMiddleThirds}aus dem Frame heraus verschoben wird. Klasse beamerverarbeitet den Frame-Inhalt mehr als einmal.

\documentclass[11pt]{beamer}

\usepackage{tikz}
\usetikzlibrary{lindenmayersystems}

\pgfdeclarelindenmayersystem{CantorMiddleThirds}{
    \symbol{X}{\pgflsystemdrawforward}
    \symbol{Y}{\pgflsystemmoveforward}
    \rule{X -> XYX}
    \rule{Y -> YYY}
}

\begin{document}
\begin{frame}
\frametitle{title}

\begin{center}

\def\intervalwidth{9cm}%

\foreach \level in {0,...,5}{
    \begin{tikzpicture}
    \draw [line width = 5pt] (0,0) l-system
    [l-system={CantorMiddleThirds, axiom=X,step=\intervalwidth/(3^\level),
      order=\level, angle=0},fill=black];
    \end{tikzpicture}
    \pause
}

\end{center}
\end{frame}
\end{document}

verwandte Informationen