макрос mhchem в нижнем индексе

макрос mhchem в нижнем индексе

Рассмотрим следующий 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}

которые производят

введите описание изображения здесь

Теперь: почему я должен (все каламбуры) включать \ce{CO2}макрос в фигурные скобки, когда \text{}макрос в них не нуждается? Закомментированный текст выдает ошибкуmissing { inserted c_\ce{CO2}

решение1

Давайте посмотрим, что amstext.styтам написано:

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

Если мы находимся в математическом режиме, то при \text{xyz}обнаружении TeX следует по «истинной» ветви и поэтому отображается с \text@{xyz}(поскольку \else...\fiотбрасывается).

Затем он заменяется \text@своим определением, то есть:

{\mathchoice{...}}

и эти дополнительные скобки сохраняют _счастье. Мы должны помнить, что _в математическом режиме вызывает расширение следующих токенов.

Я полагаю, что дополнительные скобки были введены только для того, чтобы избежать непонятных ошибок, которые _\text{xyz}могли бы возникнуть в противном случае.

К сожалению, этопозволяеттакого рода «неправильный» ввод. Это очень похоже на то, что происходит с _\mathrm{xyz}, что я примерно объяснил вhttps://tex.stackexchange.com/a/160538/4427

С другой стороны, в определении \ceнет ничего подобного:

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

Это определенно расстроит TeX, увидев _\ce{...}.

Связанный контент