我有一个 CSV 文件,里面有我想通过 解析的化合物列表,\ce{}
并将mhchem
其转换为漂亮的化学符号。虽然使用原始字符串作为 works 的参数\ce{}
,但当将相同的字符串作为命令时,宏不会执行任何操作。
\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}
收益
所以 \ce{\methane}
没有做任何事情(它应该4
作为下标)。
答案1
似乎\ce
需要扩展它的参数(大概是因为\ce
解析它)所以你需要使用\expandafter
确保参数的格式正确:
\expandafter\ce\expandafter{\methane}
解释
在 中\ce
,活动字符(如^
、_
和{
)具有不同的含义。直观的含义,但技术上与标准 LaTeX 非常不同。因此,\ce
必须解析未扩展的输入。
在这个特定案例中,\ce
发现\methane
,然后它进行了化学格式化。因为它看起来不像化学的,所以它只是被复制过来,然后扩展到CH4
。
\expandafter\ce\expandafter{\methane}
确保在查看之前\methane
已将其扩展到。CH4
\ce
提示
您可以为此创建自己的命令。
\newcommand*\myce[1]{\expandafter\ce\expandafter{#1}}
这样你就可以简单地写
\myce{\methane}