macro mhchem em subscrito

macro mhchem em subscrito

Considere o seguinte 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 produzem

insira a descrição da imagem aqui

Agora: por que tenho que abraçar (todos os trocadilhos) a \ce{CO2}macro com colchetes, enquanto a \text{}macro não precisa deles? O texto comentado produz um erromissing { inserted c_\ce{CO2}

Responder1

Vejamos o que amstext.stydiz:

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

Se estivermos no modo matemático, quando \text{xyz}for encontrado, o TeX segue o ramo “verdadeiro” e assim é apresentado \text@{xyz}(porque o \else...\fié descartado.

Então ele substitui \text@por sua definição, ou seja,

{\mathchoice{...}}

e esses aparelhos adicionais ficam _felizes. Devemos lembrar que _no modo matemático causa a expansão dos seguintes tokens.

Acho que os colchetes adicionais foram introduzidos apenas para evitar erros inescrutáveis ​​que _\text{xyz}produziriam o contrário.

Infelizmente, issopermiteesse tipo de entrada “errada”. É muito semelhante ao que acontece com _\mathrm{xyz}, que expliquei aproximadamente emhttps://tex.stackexchange.com/a/160538/4427

Por outro lado, a definição de \cenão tem nada deste 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
}

Isso definitivamente deixará o TeX infeliz ao ver _\ce{...}.

informação relacionada