词汇表:使用 glsaddall 时隐藏页面

词汇表:使用 glsaddall 时隐藏页面

我想使用glossaries-package 生成符号索引,以便隐藏某些页码。

定义一些标准符号并将其包含在索引中很容易\glsaddall。但这会将页码添加到索引中,而这正是我想要避免的。

添加nonumberlist到条目的定义会抑制页码。(nonumberlist也作为包选项存在,但不作为选项\glsaddall。)但这必须对每个条目执行,并且还会抑制未来的引用。

这是我的问题:我怎样才能隐藏所有由 生成的页码\glsaddall 换句话说:\glsaddall确保所有未引用的符号\gls都出现在索引中,但没有页码。所有由 生成的条目都\gls添加页码。

这是一个很好的例子:

\documentclass{article}

\usepackage{amsfonts}
\newcommand*{\Z}{\mathbb{Z}}
\newcommand*{\Q}{\mathbb{Q}}

% glossaries-user.pdf (v3.03):
% If you use hyperref and glossaries, you must load hyperref first.
\usepackage{hyperref}
\usepackage[
  style=long3colheader,
  hyperfirst=false
  ]{glossaries}

\newglossaryentry{integers}{name=\ensuremath{\Z},
  description={the ring of integers}, sort=!}
\newglossaryentry{rationals}{name=\ensuremath{\Q},
  description={the field of rational numbers}, sort=!, nonumberlist}

\newglossaryentry{vector-space}{name=\ensuremath{V},
  description={a vector space}, sort=V}

\makeglossaries

\begin{document}

\glsaddall

A vector space \gls{vector-space} \ldots

\printglossaries

\end{document}

输出如下。Z 和 Q 的页面不应出现。(Q 的页面被手动抑制。)

输出

(这个问题与词汇表:包括没有页面位置的条目

答案1

这是一种仅存在微小限制的方法:我们不会\gladdall在开始时发出权限,而是\glsaddallunused在执行之前发出权限\printglossaries。此新命令\glsaddallunused将把到目前为止尚未使用的所有条目写入词汇表,并隐藏页码。对于隐藏,我们将使用您链接到的 lockstep 答案。

如果我们将全部条目写入\glsaddall辅助词汇表文件,我们将很难告诉大家makeindex要隐藏哪些页码,以及如何正确排序和压缩这些页码。在我的方法中,我们只显示所有页码的条目(明确引用的条目),以及完全隐藏页码列表的条目。

\documentclass{article}

\usepackage{amsfonts}
\newcommand*{\Z}{\mathbb{Z}}
\newcommand*{\Q}{\mathbb{Q}}

\usepackage{lipsum} % to have some dummy text, and therefore larger page numbers
\usepackage[colorlinks]{hyperref}
\usepackage[
  style=long3colheader,
  hyperfirst=false
  ]{glossaries}

\newcommand*{\glsgobblenumber}[1]{}
% \renewcommand*{\glsgobblenumber}[1]{#1}% uncomment for testing

\makeatletter
%% lockstep's code
\newcommand*{\glsaddnp}[2][]{%
  \glsdoifexists{#2}%
  {%
%     \def\@glsnumberformat{glsnumberformat}% DELETED
    \def\@glsnumberformat{glsgobblenumber}% NEW
    \edef\@gls@counter{\csname glo@#2@counter\endcsname}%
    \setkeys{glossadd}{#1}%
    \@gls@saveentrycounter
    \@do@wrglossary{#2}%
  }%
}
%% new code; modified \glsaddall
\newcommand{\glsaddallunused}[1][]{%
  \edef\@glo@type{\@glo@types}%
  \setkeys{glossadd}{#1}%
  \forallglsentries[\@glo@type]{\@glo@entry}{%
    \ifglsused{\@glo@entry}{}{%
     \glsaddnp[#1]{\@glo@entry}}}%
}
\makeatother


\newglossaryentry{integers}{name=\ensuremath{\Z},
  description={the ring of integers}, sort=Z}

\newglossaryentry{rationals}{name=\ensuremath{\Q},
  description={the field of rational numbers}, sort=Q, nonumberlist}

\newglossaryentry{vector-space}{name=\ensuremath{V},
  description={a vector space}, sort=V}

\makeglossaries

\begin{document}
A vector space \gls{vector-space} \ldots
\lipsum[1-10]

\glsaddallunused
\printglossaries
\end{document}

示例输出

答案2

以下是不使用内部命令的替代方法:

\documentclass{article}

\usepackage{amsfonts}
\newcommand*{\Z}{\mathbb{Z}}
\newcommand*{\Q}{\mathbb{Q}}

\usepackage{hyperref}
\usepackage[
  style=long3colheader,
  hyperfirst=false
  ]{glossaries}

\newcommand{\ignore}[1]{}

\newglossaryentry{integers}{name=\ensuremath{\Z},
  description={the ring of integers}, sort=!}
\newglossaryentry{rationals}{name=\ensuremath{\Q},
  description={the field of rational numbers}, sort=!, nonumberlist}

\newglossaryentry{vector-space}{name=\ensuremath{V},
  description={a vector space}, sort=V}

\makeglossaries

\begin{document}

A vector space \gls{vector-space} \ldots

\printglossaries


\forallglsentries{\thislabel}%
{%
  \ifglsused{\thislabel}{}{\glsadd[format=ignore]{\thislabel}}%
}

\end{document}

结果:

词汇表图片

答案3

@mafp 建议的命令\glsaddallunused已添加到glossaries包中。

因此该示例可以简化为:

\documentclass{article}

\usepackage{amsfonts}
\newcommand*{\Z}{\mathbb{Z}}
\newcommand*{\Q}{\mathbb{Q}}

\usepackage{lipsum} % to have some dummy text, and therefore larger page numbers
\usepackage[colorlinks]{hyperref}
\usepackage[
  style=long3colheader,
  hyperfirst=false
  ]{glossaries}

\newglossaryentry{integers}{name=\ensuremath{\Z},
  description={the ring of integers}, sort=Z}

\newglossaryentry{rationals}{name=\ensuremath{\Q},
  description={the field of rational numbers}, sort=Q, nonumberlist}

\newglossaryentry{vector-space}{name=\ensuremath{V},
  description={a vector space}, sort=V}

\makeglossaries

\begin{document}
A vector space \gls{vector-space} \ldots
\lipsum[1-10]

\glsaddallunused
\printglossaries
\end{document}

答案4

上述答案对我不起作用。当我使用\glsaddall \printglossary[title=Glossar, toctitle=Glossar] 该包时,仍然会产生一个空白页\usepackage[acronym, toc, section=section]{glossaries}

然而,真正起作用的\usepackage[acronym, toc,section=chapter]{glossaries-extra}\printunsrtglossary

相关内容