词汇表:包括没有页面位置的条目

词汇表:包括没有页面位置的条目

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}

相关内容