我正在尝试重新定义词汇表列表的样式,并以 altlist 为基础。然而,在执行新样式时,我注意到当两个词汇表项分组时会出现一个空行,尽管我已指定\nopostdesc
。在普通 altlist 中不存在此空行。
我遇到的另一个问题是,我想将词汇表中描述的首字母大写。根据手册,我应该能够使用\Glossentrydesc
,但一旦我使用它,就会出现 9 个错误,第一个是与相关的“未定义的控制序列” \nopostdesc
。我做错了什么?
这是我得到的结果:
具有以下 MWE:
\documentclass{article}
\usepackage{glossaries}
%make a new glossaries style
\newglossarystyle{altlistnumbers}{%
\setglossarystyle{altlist}%
\renewcommand*{\glossentry}[2]{%
\item[\glsentryitem{##1}%
\glstarget{##1}{\Glossentryname{##1}}]
\mbox{}\par\nobreak
\glossentrydesc{##1}\glspostdescription\hfill ##2}%
}
\setglossarystyle{altlistnumbers}
\makeglossaries
\newglossaryentry{abb} {
name = {abb},
description = {\nopostdesc},
}
\newglossaryentry{abbone} {
description = {this is the first description of an ABB},
sort = {1},
parent = abb,
text = {abb},
long = {abbreviation-one},
first = {\glsentrylong{abbone} (\glsentrytext{abbone})}
}
\newglossaryentry{abbtwo} {
description = {there is a second different description of ABB, too},
sort = {2},
parent = abb,
text = {abb},
long = {abbreviation-two},
first = {\glsentrylong{abbtwo} (\glsentrytext{abbtwo})}
}
\begin{document}
\printglossaries
\noindent
There is \gls{abbone}, but also \gls{abbtwo}.\\
\end{document}
答案1
您的样式仅调整顶级(0 级)条目的行为。您还需要调整子条目的格式。顶级条目受 控制\glossentry
,在您的 MWE 中定义为:
\renewcommand*{\glossentry}[2]{%
\item[\glsentryitem{##1}%
\glstarget{##1}{\Glossentryname{##1}}]
\mbox{}\par\nobreak
\glossentrydesc{##1}\glspostdescription\hfill ##2}%
这是在描述之前插入一个段落分隔符,但是您没有顶级条目的描述abb
,因此您得到一个段落分隔符,后跟一个空描述,后跟另一个段落分隔符,这导致了额外的垂直空间。
子条目的格式按照\subglossentry
。由于您尚未重新定义它,因此它使用样式设置的定义altlist
,即:
\renewcommand{\subglossentry}[3]{%
\par
\glssubentryitem{##2}%
\glstarget{##2}{\strut}\glossentrydesc{##2}\glspostdescription\space ##3}%
由于使用的是\glossentrydesc
,因此描述中未应用任何大小写变化。
对 MWE 进行以下调整可以修复这些问题:
\documentclass{article}
\usepackage{glossaries}
%make a new glossaries style
\newglossarystyle{altlistnumbers}{%
\setglossarystyle{altlist}%
\renewcommand*{\glossentry}[2]{%
\item[\glsentryitem{##1}%
\glstarget{##1}{\Glossentryname{##1}}]
\mbox{}\par\nobreak}%
\renewcommand{\subglossentry}[3]{%
\par
\glssubentryitem{##2}%
\glstarget{##2}{\strut}\Glossentrydesc{##2}\glspostdescription\space
##3}%
}
\setglossarystyle{altlistnumbers}
\makeglossaries
\newglossaryentry{abb} {
name = {abb},
description = {\nopostdesc},
}
\newglossaryentry{abbone} {
description = {this is the first description of an ABB},
sort = {1},
parent = abb,
text = {abb},
long = {abbreviation-one},
first = {\glsentrylong{abbone} (\glsentrytext{abbone})}
}
\newglossaryentry{abbtwo} {
description = {there is a second different description of ABB, too},
sort = {2},
parent = abb,
text = {abb},
long = {abbreviation-two},
first = {\glsentrylong{abbtwo} (\glsentrytext{abbtwo})}
}
\begin{document}
\printglossaries
\noindent
There is \gls{abbone}, but also \gls{abbtwo}.
\end{document}
得出的结果为:
请注意,这已删除所有顶级条目的描述和位置列表。如果您希望位置列表出现,只需将其##2
重新添加到 的定义中即可\glossentry
。