chemmacros \ch{} 宏中的宏扩展

chemmacros \ch{} 宏中的宏扩展

我的整个文章中有一些化学公式,这些公式会不时更改。因此,我定义了一个宏\compound,其中包含适当的内容,供在chemmacros' \ch宏中使用。

编译该文档(参见 MWE)表明,直接输入按预期工作(排版为公式),而第二个版本则排版为普通文本。

\documentclass{minimal}
\usepackage{chemmacros}
\newcommand{\compound}{H2O}

\begin{document}
Works: \ch{H2O}
Does not work: \ch{\compound}
\end{document}

我是否遗漏了(或者误解了)什么?

任何帮助都非常感谢。提前致谢。

答案1

\ch不是chemmacros但由包提供chemformula

正如您所注意到的,它不会扩展其参数。因此,当它看到\compound(不知道其定义)时,它不会对其执行任何操作,而只是输入它。之后才会\compound扩展到其定义,但为时已晚。

这意味着您要么需要通过添加适当数量的\expandafters 来手动执行此操作,要么可以定义一个\chX(比如说),在解析之前将其参数扩展一次:

\documentclass{article}
\usepackage{chemformula}

\ExplSyntaxOn
\NewDocumentCommand \chX { O{}m }
  { \chemformula_ch:no {#1} {#2} }
\cs_generate_variant:Nn \chemformula_ch:nn {no}
\ExplSyntaxOff

\newcommand{\compound}{H2O}

\begin{document}

\ch{H2O} \par
\expandafter\ch\expandafter{\compound} \par
\chX{\compound}

\end{document}

如果您选择这种\chX方式,chemmacros您也应该在定义变体之前chemformula明确加载(\usepackage{chemmacros}\usepackage{chemformula})或告诉chemformula它为您执行此操作( )。\chemsetup{formula = chemformula}

相关内容