Unerwartetes Ergebnis beim Versuch, \ce{} aus dem mhchem-Paket mit einem durch \DTLgetvalue aus dem datatool-Paket definierten Befehl zu verwenden

Unerwartetes Ergebnis beim Versuch, \ce{} aus dem mhchem-Paket mit einem durch \DTLgetvalue aus dem datatool-Paket definierten Befehl zu verwenden

Ich habe eine CSV-Datei mit einer Liste chemischer Verbindungen, die ich gerne analysieren lassen würde, \ce{}um mhchemsie in eine schöne chemische Notation umzuwandeln. Während die Verwendung der Rohzeichenfolge als Argument \ce{}funktioniert, tut das Makro nichts, wenn dieselbe Zeichenfolge als Befehl angegeben wird.

\documentclass{scrartcl}
\begin{filecontents*}{foo.csv}
Molecule
CH4
\end{filecontents*}
\usepackage{datatool}
\usepackage{mhchem}
\DTLloaddb{foo}{foo.csv}
\DTLgetvalue{\methane}{foo}{1}{1}
\begin{document}

CH4

\methane

\ce{CH4}

\ce{\methane}

\end{document}

Erträge

Screenshot des Ergebnisses

Es passiert also \ce{\methane}nichts (es sollte 4als Index eingefügt werden).

Antwort1

Es scheint, dass \cedas Argument erweitert werden muss (vermutlich weil \cees analysiert wird), also müssen Sie verwenden\expandafterum sicherzustellen, dass das Argument das richtige Format hat:

\expandafter\ce\expandafter{\methane}

Erläuterung

Innerhalb haben \ceaktive Zeichen (wie ^, _und {) eine andere Bedeutung. Eine intuitive Bedeutung, die sich aber technisch stark von Standard-LaTeX unterscheidet. Daher \cemuss die nicht erweiterte Eingabe analysiert werden.

In diesem speziellen Fall \cewurde gefunden \methaneund dann die chemische Formatierung durchgeführt. Da es nicht chemisch aussieht, wird es einfach kopiert und später zu erweitert CH4.

\expandafter\ce\expandafter{\methane}stellt sicher, dass \methanees erweitert wird, CH4bevor \ceer es sich ansieht.

Tipp

Sie können hierfür einen eigenen Befehl erstellen.

\newcommand*\myce[1]{\expandafter\ce\expandafter{#1}}

Damit Sie einfach schreiben können

\myce{\methane}

verwandte Informationen