自定义词汇表样式,\makenoidxglossaries 和 \glsgroupskip

自定义词汇表样式,\makenoidxglossaries 和 \glsgroupskip

以下代码创建了一个词汇表,其中包含首字母缩略词、它们在数学表达式中的表示及其描述。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}

那么分组也是正确的:

使用列表正确分组

相关内容