我有一個 CSV 文件,其中包含我想要解析的化合物列表,將\ce{}
它們mhchem
轉換為良好的化學符號。當使用原始字串作為\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}