我使用词汇表作为文档中的符号列表,并添加了一些单位键。我想在 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}