Разъяснение по поводу движущихся аргументов

Разъяснение по поводу движущихся аргументов

Я читал latex2eоб использовании \protect. В разделе 13.8 упоминаются "выражения в tabularи arrayокружениях" как примеры движущихся аргументов. Я был немного удивлен этим. Может кто-нибудь пояснить, что здесь имеется в виду? Или почему это так?

Я пробовал экспериментировать, например

\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}

Но, похоже, здесь нет проблемы. Что я не понимаю насчет хрупкого и прочного?

решение1

В руководстве следует упомянуть « @-выражения в tabularи array», чтобы соответствовать официальному руководству Лесли Лэмпорта. Вот пример:

\documentclass{article}
\usepackage{graphicx}
\begin{document}

\begin{tabular}{l@{ \resizebox{2mm}{!}{$x$} }l}
A & B \\
C & D
\end{tabular}
\end{document}

в результате вы получите типичное сообщение об ошибке из-за нестабильных команд при перемещении аргументов:

! 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}

Если мы используем, \protect\resizeboxто не получим никакой ошибки.

Цитата из «LaTeX, система подготовки документов», стр. 168:

C.1.3 Хрупкие команды

Команды классифицируются каккрепкийихрупкий. [...] Ниже приведены все команды и среды с перемещаемыми аргументами:

  • [...]

  • В среде @или . (Хотя это не команда, хрупкие команды в выражении должны быть написаны так array, как если бы они были в движущемся аргументе.)tabular@@\protect

Связанный контент