在序言中加载 siunitx 单元以供词汇表使用

在序言中加载 siunitx 单元以供词汇表使用

我正在尝试建立一个词汇表,其中一些术语是带有单位的常数,而我遇到的问题是 siunitx 的单位没有定义。

\documentclass{article}
\usepackage{glossaries-extra}
\usepackage{siunitx}

\makenoidxglossaries
\newglossaryentry{working entry}{type=main, name={$e = 1.6e-19$ C}, description={electron charge}}
\newglossaryentry{failing entry}{name={$e = \qty{1.6e-19}{\coulomb}$}, description={electron charge}}

\begin{document}
\printunsrtglossary
\end{document}

失败:

! Undefined control sequence.
\@gls@value ->$e = \qty {1.6e-19}{\coulomb 
                                           }$
l.7 ...\coulomb}$}, description={electron charge}}
                                                  
!  ==> Fatal error occurred, no output PDF file produced!

这不是字段扩展的问题,因为根据词汇表手册,名称字段未扩展(并且 \glssetnoexpandfield、\unexpanded、\protect 和类似的任何组合都无济于事)。

我反而怀疑读完之后这个有点相关的答案siunitx 单元宏未在序言中定义。根据类似问题这个它曾经可以工作,但 siunitx 2 和 siunitx 3 之间可能发生了一些变化。

答案是使用以下代码解决缩写单位尚未加载的问题:

%load abbreviations:
\ExplSyntaxOn
\__siunitx_load_abbreviations:
\ExplSyntaxOff

所以我想知道 siunitx 3 是否存在类似的东西,用于在定义词汇表条目之前加载整个单元。

答案1

为了让用户调整序言中的宏,siunitx它会在文档开始时自行加载。我不知道出了什么问题\newglossaryentry,也不知道它为什么会立即展开内容。

您可以使用以下方式延迟它们

\AtBeginDocument{
\newglossaryentry{working entry}{type=main, name={$e = 1.6e-19$ C}, description={electron charge}}
\newglossaryentry{failing entry}{name={$e = \qty{1.6e-19}{\coulomb}$}, description={electron charge}}
}

相关内容