我正在尝试建立一个词汇表,其中一些术语是带有单位的常数,而我遇到的问题是 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}}
}