在glossaries
包中,\glssee{label}{aaa,bbb,ccc,ddd}
将交叉引用条目,但如果词汇表中未包含引用的条目,则不会包括该条目。(例如,将会缺少链接)。
该包提供了\glsadd
包含词汇表条目的命令,而无需在页面上生成链接或其他文本,因此可以像这样添加缺失的条目
\glsadd{entry1}\glsadd{entry2}\glsadd{entry3}
\printglossaries
但这会将页码添加到数字列表(词汇表之前的页面)。我想这\glsadd
主要是为了使用其可选参数引用页面范围。
有nonumberlist
打包选项,但是否真的有必要放弃整个功能只是为了删除一些不相关的页码?
例如,可以\glsadd
重新定义不将页码添加到数字列表的方式吗?
(这是非常可预测的,所以如果知道第 192 页是不必要的,则可以在对文档进行最后的润色时手动\setentrycounter[]{page}\glsnumberformat{192}\delimN
从.gls
文件中删除多余的字符串,但我想知道是否可以避免这种黑客行为。)
答案1
\gslgobblenumber
定义一个将吞噬其参数的新命令,并重新定义\glsadd
以便它将写入文件\glsgobblenumber
而不是\glsnumberformat
写入.glo
文件。
\documentclass{article}
\usepackage{glossaries}
\makeglossaries
\makeatletter
\newcommand*{\glsgobblenumber}[1]{}
% \renewcommand*{\glsgobblenumber}[1]{#1}% uncomment for testing
\renewcommand*{\glsadd}[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}%
}%
}
\makeatother
\newglossaryentry{oesophagus}{name=\oe sophagus,
description={canal from mouth to stomach}}
\newglossaryentry{electrolyte}{name=electrolyte,
description={solution able to conduct electric current}}
\begin{document}
Some text about \gls{oesophagus}.
\glsadd{electrolyte}
\printglossaries
\end{document}
答案2
另一种解决方案是指定nonumberlist
仅交叉引用的词汇表条目的选项:
\documentclass{article}
\usepackage{glossaries}
\makeglossaries
\newglossaryentry{first}{name={First}, description={First Term}, nonumberlist}
\glsadd{first}
\newglossaryentry{second}{name={Second}, description={Second Term}, see=first}
\begin{document}
\noindent
\gls{second}
\printglossary
\end{document}
输出为:
答案3
如今,有一个很好的方法可以做到这一点glossaries-extra
:\glsadd[noindex=true]{first}
。