Команда chemmacros \iupac прерывается в achemso's \title

Команда chemmacros \iupac прерывается в achemso's \title

Я получаю ошибку при использовании \iupacвнутри \titleс 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версии 5.11 (07.03.2020).


Есть небольшая проблема с синхронизацией с achemso/ chemmacros. Сначала achemsoпереопределяется \begin{document}для добавления \maketitleв конец. Затем chemmacrosзагружается etoolbox, который затем добавляется \@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}

Связанный контент