我决定通过添加带有新定义的键“单位”的单位列来丰富我的符号列表。
\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}