以下代码创建了一个词汇表,其中包含首字母缩略词、它们在数学表达式中的表示及其描述。my
使用 创建自定义词汇表样式\newglossarystyle
。它是一个表格,\tabularnewline
每个条目组之间都有一个,通过重新定义 进行设置\glsgroupskip
。但是,代码在每个条目之间生成一个新行,而不仅仅是组之间。默认情况下,组基于条目的首字母,例如“bar”和“baz”应在一个组中,而“foo”和“qux”则分别分组。
默认样式(即禁用线条\setglossarystyle{my}
)确实会创建具有额外分隔的组。为什么/在哪里我的样式失败了?
请注意,我使用了包手册中定义的“选项 1” glossaries
,即\makenoidxglossaries
。
\documentclass{article}
\usepackage{amsfonts}
\usepackage{booktabs}
\usepackage{tabu}
\usepackage[shortcuts]{glossaries}
\makenoidxglossaries
\glsaddkey{math}{}{\acem}{\Acem}{\acm}{\Acm}{\ACm}
\newacronym[math=\mathfrak{foo}]{foo}{foo}{Foo}
\newacronym[math=\mathfrak{bar}]{bar}{bar}{Bar}
\newacronym[math=\mathfrak{baz}]{baz}{baz}{Baz}
\newacronym[math=\mathfrak{qux}]{qux}{qux}{Qux}
\newglossarystyle{my}{%
% redefine theglossary environment
\renewenvironment{theglossary}%
% begin
{\begin{longtabu} spread 0pt {@{}X[1Lm]X[1Lm]X[3Jm]@{}}}%
% end
{\bottomrule
\end{longtabu}}%
\renewcommand*{\glossaryheader}{%
\toprule%
Abbreviation & Symbol in Mathematical Expressions & Description \\ \midrule%
}%
\renewcommand*{\glsgroupskip}{%
\tabularnewline%
}%
\renewcommand*{\glossentry}[2]{%
\glstarget{##1}{\glossentryname{##1}}%
&%
$\acem{##1}$%
&%
\glossentrydesc{##1}%
\\%
}%
}
\setglossarystyle{my}
\begin{document}
\glsaddallunused
\printnoidxglossaries
\end{document}
答案1
似乎使用带有词汇表创建“选项 1”的表格样式时,分组无法正常工作。如果您使用\makeglossaries
脚本makeglossaries
,它可以正常工作。或者,如果您使用列表样式,它可以正常工作。我不确定这是一个错误还是一个公认的限制。
以下是该makeglossaries
脚本的一个示例:
\documentclass{article}
\usepackage{amsfonts}
\usepackage{booktabs}
\usepackage[shortcuts]{glossaries}
\makeglossaries
\glsaddkey{math}{}{\acem}{\Acem}{\acm}{\Acm}{\ACm}
\newacronym[math=\mathfrak{foo}]{foo}{foo}{Foo}
\newacronym[math=\mathfrak{bar}]{bar}{bar}{Bar}
\newacronym[math=\mathfrak{baz}]{baz}{baz}{Baz}
\newacronym[math=\mathfrak{qux}]{qux}{qux}{Qux}
\newglossarystyle{my}{%
\setglossarystyle{long3colheader}%
\renewcommand*{\glossaryheader}{%
\toprule
Abbreviation & Symbol in Mathematical Expressions & Description \tabularnewline\midrule\endhead
\bottomrule\endfoot
}%
\renewcommand*{\glsgroupskip}{%
& &\tabularnewline}%
\setlength\glsdescwidth{.275\textwidth}%
\setlength\glspagelistwidth{.45\textwidth}%
\renewcommand{\glossentry}[2]{%
\glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} & $\acem{##1}$ & \glossentrydesc{##1}\tabularnewline
}%
}
\setglossarystyle{my}
\begin{document}
\glsaddallunused
\printglossaries
\end{document}
这是用
pdflatex <filename>
makeglossaries <filename>
pdflatex <filename>
使用 etc. 的问题\makenoidxglossaries
不在于忽略组跳过。而是glossaries
错误地认为每个条目都会开始一个新组。
my
下面是一个使用标准样式的示例,它表明问题不是由您的特定定义引起的:
\documentclass{article}
\usepackage{amsfonts}
\usepackage{booktabs}
\usepackage[shortcuts]{glossaries}
\makenoidxglossaries
\glsaddkey{math}{}{\acem}{\Acem}{\acm}{\Acm}{\ACm}
\newacronym[math=\mathfrak{foo}]{foo}{foo}{Foo}
\newacronym[math=\mathfrak{bar}]{bar}{bar}{Bar}
\newacronym[math=\mathfrak{baz}]{baz}{baz}{Baz}
\newacronym[math=\mathfrak{qux}]{qux}{qux}{Qux}
\setglossarystyle{long3colheader}
\renewcommand*\glsgroupskip{%
X & X & X\tabularnewline}
\begin{document}
\glsaddallunused
\printnoidxglossaries
\end{document}
如果改用\makeglossaries
和,则分组是正确的:\printglossaries
或者,如果\makenoidxglossaries
和\printnoidxglossaries
与默认(列表)样式一起使用,并且
\renewcommand*\glsgroupskip{%
\item XXX}
那么分组也是正确的: