
Eu estava lendo latex2e
sobre o uso de \protect
. Na seção 13.8 menciona “expressões em tabular
e array
ambientes” 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 tabular
e 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\resizebox
nã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
@
dentroarray
outabular
ambiente. (Embora@
não seja um comando, os comandos frágeis em uma@
expressão - devem ser\protect
editados como se estivessem em um argumento em movimento.)