嘗試將 mhchem 套件中的 \ce{} 與 datatool 套件中的 \DTLgetvalue 定義的命令一起使用時出現意外結果

嘗試將 mhchem 套件中的 \ce{} 與 datatool 套件中的 \DTLgetvalue 定義的命令一起使用時出現意外結果

我有一個 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}

相關內容