macro mhchem en subíndice

macro mhchem en subíndice

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

ingrese la descripción de la imagen aquí

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.stydice:

\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...\fise 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 \ceno 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{...}.

información relacionada