我正在使用带有显示多个首字母缩略词和符号列表选项的glossaries
软件包。使用会使任何首字母缩略词的下一个用法与完整描述一起出现,但符号不会出现这种情况。我无法将首字母缩略词格式用于其他词汇表,因为它们包含值和单位。acronym
\glsresetall
我怎样才能使词汇表的第一次使用提供完整的格式,就像首字母缩略词的第一次使用一样?
梅威瑟:
\documentclass{report}
\usepackage{siunitx}
\usepackage[nomain, acronym, section=section]{glossaries} % use glossaries-package
\setlength{\glsdescwidth}{15cm}
\newglossary[slg]{symbolslist}{syi}{syg}{Symbolslist} % create add. symbolslist
\glsaddkey{symbolvalue}{\glsentrytext{\glslabel}}{\glsentrysymbolvalue}{\GLsentrysymbolvalue}{\glssymbolvalue}{\Glssymbolvalue}{\GLSsymbolvalue}
\glssetnoexpandfield{symbolvalue}
\glsaddkey{unit}{\glsentrytext{\glslabel}}{\glsentryunit}{\GLsentryunit}{\glsunit}{\Glsunit}{\GLSunit}
\glssetnoexpandfield{unit}
\makeglossaries % activate glossaries-package
\newglossaryentry{lightspeed}{
name=\ensuremath{c},
description={speed of light},
symbolvalue={299792432},
unit={\si{\meter/\second}},
type=symbolslist
}
\newacronym[longplural={Frames per Second}]{fps}{FPS}{Frame per Second}
\newglossarystyle{mylist}{%
% put the glossary in the itemize environment:
\renewenvironment{theglossary}{\setlength{\LTleft}{0pt}\begin{longtable}{l>{\raggedright}p{.4\textwidth}>{\raggedleft}p{0.3\textwidth}r}}{\end{longtable}}%
% have nothing after \begin{theglossary}:
\renewcommand*{\glossaryheader}{% Change the table header
Sign & Description & Value & Unit \\
\endhead}
% have nothing between glossary groups:
\renewcommand*{\glsgroupheading}[1]{}%
\renewcommand*{\glsgroupskip}{}%
% set how each entry should appear:
\renewcommand*{\glossentry}[2]{% Change the displayed items
\glstarget{##1}{\glossentryname{##1}} %
& \glossentrydesc{##1}% Description
& \glssymbolvalue{##1}
& \glsunit{##1}%
\tabularnewline
}
}
\begin{document}
\glsaddall
\printglossary[type=symbolslist,style=mylist] % list of symbols
\printglossary[type=\acronymtype] % prints just the list of acronyms
\glsresetall
Now the first use of the acronym gives \gls{fps}
But the first use of the symbol gives \gls{lightspeed}, whereas I want it to give \glsdesc{lightspeed} (\glsname{lightspeed})
\end{document}
结果:
答案1
的基本行为\gls
是在第一次使用时显示密钥的值,并在后续使用时显示密钥first
的值。如果密钥未明确设置,则假定它与密钥相同。如果密钥未设置,则假定它与密钥相同。text
text
name
first
text
因此,
\newglossaryentry{lightspeed}{
name=\ensuremath{c},
description={speed of light},
symbolvalue={299792432},
unit={\si{\meter/\second}},
type=symbolslist
}
这里有一个隐含的text={\ensuremath{c}}
和first={\ensuremath{c}}
,这就是为什么第一次使用时只显示符号。
\newacronym
基础glossaries
包中原来不使用的那个\setacronymstyle
会自动将first
键设置为长格式,后面跟着括号中的缩写,并将键text
设置为缩写形式,因此
\newacronym[longplural={Frames per Second}]{fps}{FPS}{Frame per Second}
基本上是做
\newglossaryentry{fps}{
name={fps},
description={Frame per Second},
first={Frame per Second (FPS)},
firstplural={Frames per Second (FPSs)},
text={FPS},
plural={FPSs}
}
这就是为什么第一次使用时会显示描述。
(这是处理缩写的一种相当简单的方法,不允许有太多的风格灵活性,因此\newacronymstyle
改变了行为方式\gls
,使得使用 定义的条目\newacronym
与直接用 定义的条目受到不同的处理\newglossaryentry
。)
一种可能的解决方案是定义一个符号命令,该命令的first
键设置方式与原始符号的键设置方式大致相同\newacronym
。这有助于保持所有符号的一致样式。
例如:
\documentclass{report}
\usepackage{siunitx}
\usepackage[nomain, acronym, section=section]{glossaries} % use glossaries-package
\setlength{\glsdescwidth}{15cm}
\newglossary[slg]{symbolslist}{syi}{syg}{Symbolslist} % create add. symbolslist
\glsaddkey{symbolvalue}{\glsentrytext{\glslabel}}{\glsentrysymbolvalue}{\GLsentrysymbolvalue}{\glssymbolvalue}{\Glssymbolvalue}{\GLSsymbolvalue}
\glssetnoexpandfield{symbolvalue}
\glsaddkey{unit}{\glsentrytext{\glslabel}}{\glsentryunit}{\GLsentryunit}{\glsunit}{\Glsunit}{\GLSunit}
\glssetnoexpandfield{unit}
\makeglossaries % activate glossaries-package
% \newsymbol[options]{label}{symbol}{unit}{symbolvalue}{description}
\newcommand*{\newsymbol}[6][]{%
\newglossaryentry{#2}{name={#3},% symbol
first={#6 (#3)},% description (symbol)
symbolvalue={#5},
unit={#4},
type={symbolslist},
description={#6},#1}%
}
\newsymbol{lightspeed}{\ensuremath{c}}{\si{\meter/\second}}{299792432}
{speed of light}
\newacronym[longplural={Frames per Second}]{fps}{FPS}{Frame per Second}
\newglossarystyle{mylist}{%
% put the glossary in the itemize environment:
\renewenvironment{theglossary}{\setlength{\LTleft}{0pt}\begin{longtable}{l>{\raggedright}p{.4\textwidth}>{\raggedleft}p{0.3\textwidth}r}}{\end{longtable}}%
% have nothing after \begin{theglossary}:
\renewcommand*{\glossaryheader}{% Change the table header
Sign & Description & Value & Unit \\
\endhead}
% have nothing between glossary groups:
\renewcommand*{\glsgroupheading}[1]{}%
\renewcommand*{\glsgroupskip}{}%
% set how each entry should appear:
\renewcommand*{\glossentry}[2]{% Change the displayed items
\glstarget{##1}{\glossentryname{##1}} %
& \glossentrydesc{##1}% Description
& \glssymbolvalue{##1}
& \glsunit{##1}%
\tabularnewline
}
}
\begin{document}
\glsaddall
\printglossary[type=symbolslist,style=mylist] % list of symbols
\printglossary[type=\acronymtype] % prints just the list of acronyms
\glsresetall
Now the first use of the acronym gives \gls{fps}
First use of \gls{lightspeed}.
Next use of \gls{lightspeed}.
\end{document}
得出的结果为:
您可能还想考虑覆盖默认sort
值,因为makeindex
无法识别 LaTeX 标记,因此会看到\ensuremath{c}
字符序列\
e
n
s
u
r
e
m
a
t
h
{
c
}
。
根据其他符号可能是什么,有几种方法。如果它们在数学模式下大多只是拉丁字符,那么你可以这样做:
\newcommand*{\newsymbol}[6][]{%
\newglossaryentry{#2}{name={$#3$},% symbol
sort={#3},
first={#6 ($#3$)},% description (symbol)
text={\ensuremath{#3}},
symbolvalue={#5},
unit={#4},
type={symbolslist},
description={#6},#1}%
}
\newsymbol{lightspeed}{c}{\si{\meter/\second}}{299792432} {speed of light}
在这种情况下,排序值现在只是c
。
或者,如果它们都是常量,您可以按符号值排序:
\newcommand*{\newsymbol}[6][]{%
\newglossaryentry{#2}{name={$#3$},% symbol
sort={#5},
first={#6 ($#3$)},% description (symbol)
text={\ensuremath{#3}},
symbolvalue={#5},
unit={#4},
type={symbolslist},
description={#6},#1}%
}
\newsymbol{lightspeed}{c}{\si{\meter/\second}}{299792432} {speed of light}
在这种情况下,该sort
值为 299792432,它makeindex
被识别为数字而不是字符串。