
Estaba leyendo latex2e
sobre el uso de \protect
. En la sección 13.8 menciona "expresiones tabular
y array
entornos" como ejemplos de argumentos conmovedores. Esto me sorprendió un poco. ¿Alguien podría aclarar lo que se quiere decir aquí? ¿O por qué es así?
Intenté 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}
Pero aquí no parece haber ningún problema. ¿Qué estoy entendiendo mal acerca de frágil versus robusto?
Respuesta1
El manual debe mencionar " @
-expresiones en tabular
y array
", para ser coherente con el manual oficial de Leslie Lamport. He aquí un ejemplo:
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\begin{tabular}{l@{ \resizebox{2mm}{!}{$x$} }l}
A & B \\
C & D
\end{tabular}
\end{document}
terminará con un mensaje de error típico debido a comandos frágiles en argumentos en movimiento:
! 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}
Si lo usamos \protect\resizebox
no obtenemos ningún error.
Citando de “LaTeX, un sistema de preparación de documentos”, página 168:
C.1.3 Comandos frágiles
Los comandos se clasifican comorobustoyfrágil. [...] Los siguientes son todos los comandos y entornos con argumentos en movimiento:
[...]
Un
@
enarray
otabular
entorno. (Aunque@
no es un comando, los comandos frágiles en una@
expresión - deben\protect
ejecutarse como si estuvieran en un argumento en movimiento).