Klarstellung zum Verschieben von Argumenten

Klarstellung zum Verschieben von Argumenten

latex2eIch habe etwas über die Verwendung von gelesen \protect. In Abschnitt 13.8 werden „Ausdrücke in tabularund arrayUmgebungen“ 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 tabularund 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\resizeboxerhalten 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- arrayoder tabularUmgebung. (Obwohl @es sich nicht um einen Befehl handelt, @müssen fragile Befehle in einem -Ausdruck \protectmit 'spezifiziert werden, als wären sie in einem beweglichen Argument.)

verwandte Informationen