chemmacros \iupac 命令在 achemso 的 \title 中中断

chemmacros \iupac 命令在 achemso 的 \title 中中断

在类\iupac内部使用时出现错误:\titleachemso

\documentclass{achemso}
\usepackage{chemmacros}

\title{Study of \iupac{1,2-di|methyl|benzene}}

\begin{document}
\maketitle
\end{document}

这是错误:

ABD: EveryShipout initializing macros
! Undefined control sequence.
\l__chemmacros_tmpa_tl ->1,2-
                             di|methyl|benzene
l.7 \begin{document}

使用 ,或者在正文中article使用相同的命令而不是在标题中使用,一切看起来都很好。\iupac

答案1

chemmacros此问题已在v5.11 (2020/03/07)中修复。


achemso/存在轻微的时间问题chemmacros。首先achemso重新定义为在末尾\begin{document}添加。然后加载,然后附加到(因此现在相当于)。\maketitlechemmacrosetoolbox\@afterendpreamblehook\document\begin{document}\begin{document}\maketitle\@afterendpreamblehook

问题是\iupac使多个字符处于活动状态,最好不要在序言中这样做,因此chemmacros使用 延迟了此活动状态\AfterEndPreamble,因此事物仅在 中得到定义\@afterendpreamblehook,因此您可以看到这将走向何方。在 中使用标题时\maketitle,使用 有点太早了\iupac,尽管可能不应该这样。

通过(可能过于)快速地查看代码,在我看来应该在定义中这样chemmacros做,以便在需要时所有定义都存在。\bool_set_true:N \l__chemmacros_in_document_bool\chemmacros_iupac:nn

有几种方法可以解决这个问题,但最简单的方法似乎是交换添加到 的顺序\begin{document},以便前言在 之前“结束” \maketitle(这可能是一个好主意)。要做到这一点,只需etoolbox在 之前加载\documentclass{achemso}

\RequirePackage{etoolbox}
\documentclass{achemso}
\usepackage{chemmacros}

\title{Study of \iupac{1,2-di|methyl|benzene}}

\begin{document}
\maketitle
\end{document}

相关内容