
latex2e
Ich habe etwas über die Verwendung von gelesen \protect
. In Abschnitt 13.8 werden „Ausdrücke in tabular
und array
Umgebungen“ als Beispiele für bewegliche Argumente erwähnt. Das hat mich ein wenig überrascht. Könnte jemand erklären, was hier gemeint ist? Oder warum das so ist?
Ich habe experimentiert, zum Beispiel
\documentclass{article}
\usepackage{etoolbox}
\makeatletter
\newcommand\ae@suchthat{\mid}
\newcommand\set[1]{%%
\begingroup
\let\suchthat\ae@suchthat
\{\,#1\,\}%%
\endgroup
}
\makeatother
\begin{document}
\begin{tabular}{lc}
This & $\set{x\in X \suchthat x>42}$
\end{tabular}
\end{document}
Aber hier scheint es kein Problem zu geben. Was verstehe ich falsch, wenn es um zerbrechlich vs. robust geht?
Antwort1
Das Handbuch sollte „ @
-Ausdrücke in tabular
und array
“ erwähnen, um mit dem offiziellen Handbuch von Leslie Lamport übereinzustimmen. Hier ist ein Beispiel:
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\begin{tabular}{l@{ \resizebox{2mm}{!}{$x$} }l}
A & B \\
C & D
\end{tabular}
\end{document}
endet mit einer typischen Fehlermeldung aufgrund instabiler Befehle beim Verschieben von Argumenten:
! Use of \@array doesn't match its definition.
\@ifnextchar ... \reserved@d =#1\def \reserved@a {
#2}\def \reserved@b {#3}\f...
l.5 ...in{tabular}{l@{ \resizebox{2mm}{!}{$x$} }l}
Wenn wir verwenden, \protect\resizebox
erhalten wir keinen Fehler.
Zitat aus „LaTeX, A Document Preparation System“, Seite 168:
C.1.3 Fragile Befehle
Befehle werden klassifiziert alsrobustUndzerbrechlich. [...] Nachfolgend sind alle Befehle und Umgebungen mit beweglichen Argumenten aufgeführt:
[...]
Eine
@
in-array
odertabular
Umgebung. (Obwohl@
es sich nicht um einen Befehl handelt,@
müssen fragile Befehle in einem -Ausdruck\protect
mit 'spezifiziert werden, als wären sie in einem beweglichen Argument.)