如何在 siunitx 命令中使用词汇表条目?

如何在 siunitx 命令中使用词汇表条目?

我使用词汇表作为文档中的符号列表,并添加了一些单位键。我想在 siunitx 范围内使用词汇表中定义的单位。当我定义的单位只有一个术语时,这种方法很有效,但对于更复杂的单位则无效。有什么方法可以实现这一点吗?

这是我的 MWE:

\documentclass{article}
\usepackage{siunitx}
\sisetup{per-mode=symbol}
\usepackage[symbols,xindy]{glossaries-extra}

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

\glssetnoexpandfield{unit}

% add unit
\glsaddkey
{unit2}
{}
{\glsentryunit2}
{\Glsentryunit2}
{\glsunit2}
{\Glsunit2}
{\GLSunit2}

\glssetnoexpandfield{unit2}

\makeglossaries

\glsxtrnewsymbol[%
description=power,%
unit=\si{\W},%
unit2=\si{\J\per\s}
]{P}{P}

\begin{document}

\glsunit{P}, \glsunit2{P}\\

\SIrange{0.5}{2}{\glsunit{P}}\\

\SIrange{0.5}{2}{\glsunit2{P}}

\end{document}

正如您在第三行看到的,没有显示单位。

答案1

这里似乎有两个问题。首先,你不能使用包含数字的命令名,所以\glsentryunit2实际上意味着\glsentryunit后面跟着2。(这就是为什么会有这样的命令,例如\glsentryuseri)包含罗马数字而不是数字。)

第一个\glsaddkey命令定义了\glsentryunit,第二个命令\glsaddkey尝试定义\glsentryunit,但该命令已被定义,因此出现错误。要解决这个问题,您需要找到另一个名称,例如\glsentryunitII

\documentclass{article}
\usepackage{siunitx}
\sisetup{per-mode=symbol}
\usepackage[symbols,xindy]{glossaries-extra}

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

\glssetnoexpandfield{unit}

% add unit
\glsaddkey
{unit2}
{}
{\glsentryunitII}
{\GlsentryunitII}
{\glsunitII}
{\GlsunitII}
{\GLSunitII}

\glssetnoexpandfield{unit2}

\makeglossaries

\glsxtrnewsymbol[%
description=power,%
unit=\si{\W},%
unit2=\si{\J\per\s}
]{P}{P}

\begin{document}

\glsunit{P}, \glsunitII{P}\\

\SIrange{0.5}{2}{\glsunit{P}}\\

\SIrange{0.5}{2}{\glsunitII{P}}

\end{document}

第二个问题是

\SIrange{0.5}{2}{\glsunitII{P}}

不起作用,但也不

\SIrange{0.5}{2}{\si{\J\per\s}}

必须

\SIrange{0.5}{2}{\J\per\s}

\si我建议从定义中删除该部分,并提供方便的命令在需要的地方添加它。例如:

\documentclass{article}
\usepackage{siunitx}
\sisetup{per-mode=symbol}
\usepackage[symbols,xindy]{glossaries-extra}

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

\glssetnoexpandfield{unit}

% add unit
\glsaddkey
{unit2}
{}
{\glsentryunitII}
{\GlsentryunitII}
{\glsunitII}
{\GlsunitII}
{\GLSunitII}

\glssetnoexpandfield{unit2}

\makeglossaries

\glsxtrnewsymbol[%
description=power,%
unit=\W,%
unit2=\J\per\s
]{P}{P}

\newcommand{\sigls}[2][]{\glsdisp[#1]{#2}{\si{\glsentryunit{#2}}}}

\newcommand{\siglsII}[2][]{\glsdisp[#1]{#2}{\si{\glsentryunitII{#2}}}}

\begin{document}

\sigls{P}, \siglsII{P}

\SIrange{0.5}{2}{\glsentryunit{P}}

\SIrange{0.5}{2}{\glsentryunitII{P}}

\end{document}

结果图像

编辑:

上面的范围没有索引条目。如果要索引,可以添加\glsadd。便捷命令:

\newcommand*{\siglsrange}[4][]{\SIrange[#1]{#2}{#3}{\glsentryunit{#4}}\glsadd{#4}}
\newcommand*{\siglsrangeII}[4][]{\SIrange[#1]{#2}{#3}{\glsentryunitII{#4}}\glsadd{#4}}

用法:

\siglsrange{0.5}{2}{P}
\siglsrangeII{0.5}{2}{P}

相关内容