Ich habe eine CSV-Datei mit einer Liste chemischer Verbindungen, die ich gerne analysieren lassen würde, \ce{}
um mhchem
sie 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
Es passiert also \ce{\methane}
nichts (es sollte 4
als Index eingefügt werden).
Antwort1
Es scheint, dass \ce
das Argument erweitert werden muss (vermutlich weil \ce
es analysiert wird), also müssen Sie verwenden\expandafter
um sicherzustellen, dass das Argument das richtige Format hat:
\expandafter\ce\expandafter{\methane}
Erläuterung
Innerhalb haben \ce
aktive Zeichen (wie ^
, _
und {
) eine andere Bedeutung. Eine intuitive Bedeutung, die sich aber technisch stark von Standard-LaTeX unterscheidet. Daher \ce
muss die nicht erweiterte Eingabe analysiert werden.
In diesem speziellen Fall \ce
wurde gefunden \methane
und 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 \methane
es erweitert wird, CH4
bevor \ce
er 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}