Fangen wir mit den **beweglichen Argumenten** an. _Beweglich_ bedeutet hier eigentlich etwas anderes: das entsprechende Argument wird vollständig expandiert. Dazu muss man grob verstehen, was es mit Expansion auf sich hat. Ein LaTeX-Makro wird im Laufe des Kompilations-Prozesses mit seinem Ersetzungstext ersetzt. Diesen Schritt nennt man Expansion.
\def\foo{foo} => `\foo' wird nach einer Expansion zu `foo'
Je nach Makro-Definition kann das ein oder mehrere Schritte beinhalten:
\def\a{a}
=> `a` wird nach einer Expansion zu `a'
\def\b{\a}
=> `\b' wird nach einer Expansion zu `\a' und nach zweien zu `a'
\def\c{\b}
=> `\c' wird nach einer Expansion zu `\b', nach zweien zu `\a' und nach dreien zu `a'
Kommt ein solches Makro nun in einer Definition vor, die mit `\edef` oder `\xdef` geschieht oder landet es im Argument des `\write`-Befehls, wird es _vollständig_ expandiert:
\edef\foo{\c} => `\foo' hat die Definition `a'
Da der `\write`-Befehl sein Argument expandiert und dieser nötig ist, um etwas in eine Hilfsdatei zu schreiben, sind die klassischen Stellen, an denen die Expansion problematisch ist, tatsächlich beweglich: Argumente von `\section` etwa, die im Kopf oder im Inhaltsverzeichnis landen (sich also an andere Stellen bewegen), oder die von `\caption`, die z.B. im Tabellenverzeichnis landen.
Warum kann die Expansion problematisch sein? Nun, nicht alle Befehle lassen sich definieren. expandieren. `\def` ist ein Standardbeispiel:
\edef\foo{\def\bla{blub}}
=> \edef wird versuchen, sein Argument zu expandieren;
\def lässt sich nicht expandieren, also ist als nächstes \bla dran
\bla ist nicht definiert, also wird eine Fehlermeldung ausgegeben
**Zerbrechliche Befehle** sind nun alle, die in einem `\edef`, `\xdef` oder `\write` zu einem Fehler führen, wo auch immer der Haken liegen mag. Eine Faustregel: Befehle mit einem optionalen Argument sind in der Regel zerbrechlich. Auch `\textbf`, `\textit` usw zerbrechen gerne mal, wenn man nicht damit rechnet. Ein klassisches Beispiel (ignorieren wir für den Moment, dass Fußnoten in Tabellenbeschriftungen sowieso fragwürdig sind):
\documentclass{article}
\begin{document}
\begin{table}
Eine Tabelle
\caption{Bla\footnote{blub}}
\end{table}
\end{document}
Dieser Code liefert den Fehler
! Argument of \@caption has an extra }.
<inserted text>
\par
l.5 \caption{Bla\footnote{blub}}
Der Standardweg, den Fehler zu vermeiden, ist es, dem zerbrechlichen Befehl ein `\protect` voranzustellen. `\protect` ist ein cleveres Makro, das in verschiedenen Situationen eine eine jeweils andere Definition hat, um den entsprechenden Schutz liefern zu können.
\documentclass{article}
\begin{document}
\begin{table}
Eine Tabelle
\caption{Bla\protect\footnote{blub}}
\end{table}
\end{document}
Hat man e-TeX zur Verfügung, und das ist bei heutigen TeX-Installation eigentlich der Standardfall, dann kann man das betroffene Makro auch _engine-protected_ machen. Das heißt, TeX bekommt mitgeteilt, dass dieses Makro (in `\edef` und Freunden) nicht expandierbar ist, ähnlich wie es bei `\def` von vornherein der Fall ist. Das [`etoolbox`](http://www.ctan.org/pkg/etoolbox)-Paket stellt dafür den bequemen Befehl `\robustify` zur Verfügung:
\documentclass{article}
\usepackage{etoolbox}
\robustify\footnote
\begin{document}
\begin{table}
Eine Tabelle
\caption{Bla\footnote{blub}}
\end{table}
\end{document}
----------
Man sollte dazu sagen, dass es keine eindeutige Definition der Zerbrechlichkeit gibt, wie die Diskussion in den Kommentaren zeigt. Je nachdem, _wie_ man sie definiert, kann Zerbrechlichkeit auch über die oben erwähnten Fälle hinaus gehen. Andere Definitionen wären etwa:
- Ein Makro zerbricht, wenn das Ergebnis seines Einsatzes ein anderes ist, als man es von Einsätzen an anderen Stellen kennt. (Eine mir persönlich zu weit gehende Definition.)
- Ein Makro ist zerbrechlich, wenn es durch den Einsatz von `\protect` vor dem Zerbrechen geschützt werden kann. (Eine Definition, die eher zu eng gefasst ist.)