重新定义词汇表样式:分组和大写问题

重新定义词汇表样式:分组和大写问题

我正在尝试重新定义词汇表列表的样式,并以 altlist 为基础。然而,在执行新样式时,我注意到当两个词汇表项分组时会出现一个空行,尽管我已指定\nopostdesc。在普通 altlist 中不存在此空行。

我遇到的另一个问题是,我想将词汇表中描述的首字母大写。根据手册,我应该能够使用\Glossentrydesc,但一旦我使用它,就会出现 9 个错误,第一个是与相关的“未定义的控制序列” \nopostdesc。我做错了什么?

这是我得到的结果: MWE 结果

具有以下 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

相关内容