
Я получаю ошибку при использовании \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}