Eu tenho um arquivo CSV com uma lista de compostos químicos que gostaria de analisar através do \ce{}
qual mhchem
os converte em uma boa notação química. Ao usar a string bruta como argumento para \ce{}
obras, quando a mesma string é fornecida como um comando, a macro não faz 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}
Rendimentos
Então \ce{\methane}
não está fazendo nada (deveria estar colocando 4
como subscrito).
Responder1
Parece que \ce
requer que seu argumento seja expandido (presumivelmente porque \ce
o analisa), então você precisa usar\expandafter
para garantir que o argumento esteja no formato correto:
\expandafter\ce\expandafter{\methane}
Explicação
Dentro de \ce
, caracteres ativos (como ^
, _
e {
) têm um significado diferente. Um significado intuitivo, mas tecnicamente muito diferente do LaTeX padrão. Portanto, \ce
é necessário analisar a entrada não expandida.
Neste caso específico, \ce
encontrei \methane
, então fez a formatação química. Como não parece químico, ele é apenas copiado e posteriormente expandido para o formato CH4
.
\expandafter\ce\expandafter{\methane}
certifica-se de que \methane
está expandido para CH4
antes de \ce
dar uma olhada nele.
Dica
Você pode criar um comando próprio para isso.
\newcommand*\myce[1]{\expandafter\ce\expandafter{#1}}
Para que você pudesse simplesmente escrever
\myce{\methane}