Tengo un archivo CSV con una lista de compuestos químicos que me gustaría analizar \ce{}
y mhchem
que 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
Entonces \ce{\methane}
no está haciendo nada (debería ponerse 4
como subíndice).
Respuesta1
Parece que \ce
requiere que su argumento se expanda (presumiblemente porque \ce
lo analiza), por lo que necesita usar\expandafter
para 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, \ce
tiene que analizar la entrada no expandida.
En este caso particular, \ce
encontró \methane
y 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 \methane
esté ampliado CH4
antes de \ce
echarle un vistazo.
Consejo
Puedes crear un comando propio para eso.
\newcommand*\myce[1]{\expandafter\ce\expandafter{#1}}
Para que puedas simplemente escribir
\myce{\methane}