Esclarecimento sobre argumentos móveis

Esclarecimento sobre argumentos móveis

Eu estava lendo latex2esobre o uso de \protect. Na seção 13.8 menciona “expressões em tabulare arrayambientes” como exemplos de argumentos móveis. Fiquei um pouco surpreso com isso. Alguém poderia esclarecer o que significa aqui? Ou por que esse é o caso?

Eu tentei experimentar, como

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

Mas não parece haver um problema aqui. O que estou entendendo mal sobre frágil versus robusto?

Responder1

O manual deve mencionar “ @-expressões em tabulare array”, para ser consistente com o manual oficial de Leslie Lamport. Aqui está um exemplo:

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

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

terminará com uma mensagem de erro típica devido a comandos frágeis na movimentação de argumentos:

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

Se usarmos, \protect\resizeboxnão teremos erro.

Citando “LaTeX, um sistema de preparação de documentos”, página 168:

C.1.3 Comandos frágeis

Os comandos são classificados comorobustoefrágil. [...] A seguir estão todos os comandos e ambientes com argumentos móveis:

  • [...]

  • Um @dentro arrayou tabularambiente. (Embora @não seja um comando, os comandos frágeis em uma @expressão - devem ser \protecteditados como se estivessem em um argumento em movimento.)

informação relacionada