mhchem-Makro im Index

mhchem-Makro im Index

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

Bildbeschreibung hier eingeben

\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.stysagt:

\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...\fiverworfen 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 \cenichts 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{...}.

verwandte Informationen