我的整个文章中有一些化学公式,这些公式会不时更改。因此,我定义了一个宏\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
扩展到其定义,但为时已晚。
这意味着您要么需要通过添加适当数量的\expandafter
s 来手动执行此操作,要么可以定义一个\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}