chemmacros \iupac コマンドが achemso の \title を中断する

chemmacros \iupac コマンドが achemso の \title を中断する

\iupacクラス内\titleでinsideを使用するとエラーが発生しますachemso:

\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}

関連情報