**Man benötigt `fragile` z.B. für folgende verbatim-ähnliche Umgebungen und Befehle:**
- `verbatim` von Standard-LaTeX
- `verbatim` und `verbatim*` vom Paket `verbatim`
- `comment` vom Paket `comment`
- `lstlisting` vom Paket `lstlisting`
- `minted` vom Paket `minted`
- `\verb` von Standard-LaTeX abhängig von den Zeichen, die man verbatim setzen möchte
- `\lstinline` vom Paket `listings` abhängig von den Zeichen, die man als Listing setzen möchte
- `alltt` des gleichnamigen Paketes abhängig von den Zeichen, die man in der Umgebung verwendet
Ohne `fragile` funktionieren:
- `semiverbatim`-Umgebung von `beamer`
- `alltt` des gleichnamigen Paketes abhängig von den Zeichen, die man in der Umgebung verwendet
- `\verb` von Standard-LaTeX abhängig von den Zeichen, die man verbatim setzen möchte.
- `\lstinline` vom Paket `listings` abhängig von den Zeichen, die man als Listing setzen möchte
- `algorithm` und `algorithmic` aus den Paketen `algorithm` bzw. `algorithmic`
**Weitere Umgebungen und Pakete, bei denen man `fragile` braucht:**
- die `tikzpicture`-Umgebung, wenn darin die `quotes` Syntax verwendet wird
- die `matrix`-Umgebung von TikZ, wenn das Ampersand-Symbol darin nicht ersetzt wird
- die `tikzcd`-Umgebung des `tikzcd`-Pakets aus selbem Grund wie TikZ' `matrix`
- die `bytefield`-Umgebung des `bytefield`-Pakets
**Mehr theoretische Antwort:**
`fragil` wird immer dann benötigt, wenn mit Befehlen oder Umgebungen gearbeitet wird, die den `\catcode` ändern, bevor ein Argument oder der Inhalt einer Umgebung gelesen wird. Der Grund dafür ist darin zu suchen, wie das Paket normalerweise den Inhalt einer `frame`-Umgebung liest. Teilweise trifft das Paket Vorsorge, dass Befehle trotzdem funktionieren. Das geschieht aber nicht umfassend. So genügt beispielsweise die Verwendung von
Das ist ein Prozent-Zeichen: \verb|%|
oder das gleiche mit `\lstinline` in einer `frame`-Umgebung, um einen Fehler zu provozieren.
Die Ursache liegt darin, dass die `frame`-Umgebung ihr Argument nicht wie eine gewöhnliche Umgebung, sondern eher wie ein Argument behandelt. Argumente werden aber komplett mit den *Category Codes* gelesen, die vor dem Lesens gelten. Änderungen innerhalb des Arguments gelten also nicht mehr für das Argument selbst.