使用 siunitx 在词汇表中添加自定义键来显示单位

使用 siunitx 在词汇表中添加自定义键来显示单位

我决定通过添加带有新定义的键“单位”的单位列来丰富我的符号列表。

\glsaddkey
 {unit}
 {}
 {\glsentryunit}
 {\Glsentryunit}
 {\glsunit}
 {\Glsunit}
 {\GLSunit}

新条目看起来像

\newglossaryentry{insu}{
    type=symbols,
    name=thermal resistance,
    symbol={\ensuremath{R\mathrm{c}}},
    description={ratio of the temperature difference across an insulator and the heat flux for a particular material or assembly of materials},
    unit={\ensuremath\protect\si{\watt}},
}

并使用最后一个花括号(关闭)产生以下错误\newglossaryentry

> ! Undefined control sequence.
\@glo@tmp ->\ensuremath \protect \si {\watt }

为了测试目的,将密钥内的代码移动unit到密钥上symbol效果很好,但不幸的是不是预期的位置。protect和周围的更改ensuremath无效。 的星号变体\glsaddkey*也无济于事。

向词汇表条目添加新键和命令之间有什么冲突\si

以下是一个简短的 MWE:

\documentclass{scrreprt}%
\usepackage{siunitx}
\usepackage{glossaries}

\glsaddkey
 {unit}
 {}
 {\glsentryunit}
 {\Glsentryunit}
 {\glsunit}
 {\Glsunit}
 {\GLSunit}

\makeglossaries

\newglossaryentry{test}{
 name=Test,
 unit=\si{\meter},
 description=sample description}

%-------------------------

\begin{document}

\printglossaries
\gls{test}

\end{document}

答案1

默认情况下,包glossaries会扩展所有条目的输入。这不适用于命令的“本地”定义,如siunitx单元命令所用(在其他上下文中可能完全不同)。可能的解决方案是使用\glsnoexpandfields

\glsnoexpandfields
\newglossaryentry{test}{
 type=symbols,
 name=Test,
 unit=\si{\metre},
 description=sample description}

或者仅仅抑制单位的扩张

\newglossaryentry{test}{
 type=symbols,
 name=Test,
 unit=\unexpanded{\si{\metre}},
 description=sample description}

或关闭字段的扩展

\glssetnoexpandfield{unit}

相关内容