
Betrachten Sie die folgenden 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}
die produzieren
\ce{CO2}
Nun: Warum muss ich das Makro mit Klammern umschließen (Wortspiel beabsichtigt) , obwohl das \text{}
Makro sie nicht braucht? Der kommentierte Text erzeugt einen Fehlermissing { inserted c_\ce{CO2}
Antwort1
Mal sehen, was amstext.sty
sagt:
\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
}%
}
Wenn wir uns im Mathematikmodus befinden und \text{xyz}
gefunden wird, folgt TeX dem „wahren“ Zweig und erhält daher \text@{xyz}
(weil \else...\fi
verworfen wird).
Dann ersetzt es \text@
durch seine Definition, das heißt,
{\mathchoice{...}}
und diese zusätzlichen Klammern bleiben _
glücklich. Wir müssen daran erinnern, dass _
im Mathematikmodus die Erweiterung der folgenden Tokens bewirkt wird.
Ich vermute, dass die zusätzlichen Klammern nur eingeführt wurden, um unerklärliche Fehler zu vermeiden, die _\text{xyz}
sonst entstehen würden.
Leidererlaubtdiese Art von „falscher“ Eingabe. Es ist sehr ähnlich zu dem, was mit passiert _\mathrm{xyz}
, was ich grob inhttps://tex.stackexchange.com/a/160538/4427
Die Definition von enthält dagegen \ce
nichts dergleichen:
\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 wird beim Anblick dieses Codes mit Sicherheit unzufrieden sein _\ce{...}
.