我想使用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