
Considere el siguiente MWE
\documentclass{article}
\usepackage[version=3]{mhchem}
\begin{document}
\begin{equation*}
% c_\ce{CO2} not working
c_{\ce{CO2}} \quad c_\text{working}
\end{equation*}
\end{document}
que producen
Ahora: ¿por qué tengo que aceptar (todos los juegos de palabras intencionados) la \ce{CO2}
macro con llaves, mientras que la \text{}
macro no las necesita? El texto comentado produce un error.missing { inserted c_\ce{CO2}
Respuesta1
Veamos que amstext.sty
dice:
\DeclareRobustCommand{\text}{%
\ifmmode\expandafter\text@\else\expandafter\mbox\fi}
\def\text@#1{{\mathchoice
{\textdef@\displaystyle\f@size{#1}}%
{\textdef@\textstyle\f@size{\firstchoice@false #1}}%
{\textdef@\textstyle\sf@size{\firstchoice@false #1}}%
{\textdef@\textstyle \ssf@size{\firstchoice@false #1}}%
\check@mathfonts
}%
}
Si estamos en modo matemático, cuando \text{xyz}
se encuentra, TeX sigue la rama "verdadera" y por eso se presenta \text@{xyz}
(porque \else...\fi
se descarta.
Luego lo sustituye \text@
por su definición, es decir,
{\mathchoice{...}}
y estos aparatos ortopédicos adicionales te mantienen _
feliz. Debemos recordar que _
en modo matemático provoca la expansión de los siguientes tokens.
Supongo que las llaves adicionales se introdujeron solo para evitar errores inescrutables que _\text{xyz}
de otra manera se producirían.
Desafortunadamente,permiteese tipo de entrada "incorrecta". Es muy similar a lo que sucede con _\mathrm{xyz}
, que he explicado a grandes rasgos enhttps://tex.stackexchange.com/a/160538/4427
Por otro lado, la definición de \ce
no tiene nada de este tipo:
\newcommand*{\ce}{%
\ifx\protect\@typeset@protect
\csname ce \expandafter\endcsname
\else
\ifx\protect\@unexpandable@protect
\protect@unexpand@cmd@arg\ce
\else
\ifx\protect\string
\protect@string@cmd@arg\ce
\else
\expandafter\protect@unknown@cmd@arg
\csname ce \endcsname
\fi
\fi
\fi
}
Esto definitivamente hará que TeX se sienta infeliz al verlo _\ce{...}
.