Resultado inesperado al intentar utilizar \ce{} del paquete mhchem con un comando definido por \DTLgetvalue del paquete datatool

Resultado inesperado al intentar utilizar \ce{} del paquete mhchem con un comando definido por \DTLgetvalue del paquete datatool

Tengo un archivo CSV con una lista de compuestos químicos que me gustaría analizar \ce{}y mhchemque los convierte a una notación química agradable. Mientras se utiliza la cadena sin formato como argumento para \ce{}obras, cuando la misma cadena se proporciona como comando, la macro no hace nada.

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

Rendimientos

Captura de pantalla del resultado

Entonces \ce{\methane}no está haciendo nada (debería ponerse 4como subíndice).

Respuesta1

Parece que \cerequiere que su argumento se expanda (presumiblemente porque \celo analiza), por lo que necesita usar\expandafterpara garantizar que el argumento esté en el formato correcto:

\expandafter\ce\expandafter{\methane}

Explicación

Dentro \ce, los caracteres activos (como ^y _) {tienen un significado diferente. Un significado intuitivo, pero técnicamente muy diferente al LaTeX estándar. Por lo tanto, \cetiene que analizar la entrada no expandida.

En este caso particular, \ceencontró \methaney luego realizó el formateo químico. Como no parece químico, simplemente se copia y luego se expande a CH4.

\expandafter\ce\expandafter{\methane}se asegura de que \methaneesté ampliado CH4antes de \ceecharle un vistazo.

Consejo

Puedes crear un comando propio para eso.

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

Para que puedas simplemente escribir

\myce{\methane}

información relacionada