显示词汇表中的特定位置

显示词汇表中的特定位置

我使用glossaryxindy并用 编译我的文档lualatex

是否可以显示词汇表中的特定位置?

我最喜欢的方式是:

  1. 标准\gls{}命令应该显示链接的词汇表项,并且词汇表中不显示反向引用。

  2. 通过附加选项(例如)\gls[showloc]{},链接的词汇表项将显示在文本中,并显示对词汇表中页面的反向引用。

补充说明:我想在长文档中经常使用首字母缩略词和词汇表条目。这将导致词汇表中的位置列表很长。不幸的是,用户不知道哪个反向引用包含最有趣的信息。

pdflatexMWE (也适用于):

\documentclass{scrartcl}
\usepackage{blindtext}
\usepackage{hyperref}
\usepackage[toc, xindy]{glossaries}
\makeglossaries

\newglossaryentry{ex}{name={sample},description={an example}}
\newglossaryentry{oe}{name={{\"o}l},description={{\"O}l}}

\newacronym{svm}{SVM}{support vector machine}

\begin{document}

\gls{ex} liegt im \gls{oe}.

First use: \gls{svm}. Second use: \gls{svm}.

\Blindtext[2][3]

\gls{svm}

% Task: do not display the backlink to page 2 on svm
\printglossaries

\end{document}

编辑: 这个问题类似于此主题,但并不相同。我想使用 的功能\gls{}并仅省略页面位置。

答案1

版本 4.16glossaries现在有一个钩子\glswriteentry,用于确定是否对诸如 之类的命令执行索引\gls。默认定义是:

\newcommand*{\glswriteentry}[2]{%
  \ifglsindexonlyfirst
    \ifglsused{#1}{}{#2}%
  \else
    #2%
  \fi
}

第一个参数是条目的标签,第二个参数是实际执行索引的代码,因此默认定义检查indexonlyfirst包选项,并且仅#2在第一次使用时执行indexonlyfirst=true

如果您只是想在词汇表开始时关闭索引,您可以重新定义\glswriteentry为在之前不执行任何操作\printglossaries

\renewcommand*{\glswriteentry}[2]{}

您还可以将此机制用于更复杂的情况,例如首先仅使用特定词汇表类型的索引:

\renewcommand*{\glswriteentry}[2]{%
 \ifthenelse{\equal{\glsentrytype{#1}}{acronym}}
 {\ifglsused{#1}{}{#2}}%
 {#2}%
}

或者,你可以调整sample-chap-hyperfirst.tex例如,它也只对每个章节执行一次索引。

如果您想添加新密钥,如在另一个答案中一样,您可以在 中测试密钥的设置\glswriteentry。例如:

\define@boolkey{glslink}{index}[true]{}
\KV@glslink@indexfalse

\renewcommand*{\glswriteentry}[2]{\ifKV@glslink@index #2\fi}

(这需要放在包中或放置在\makeatletter和之间\makeatother。)由于默认值设置为 false,因此除非您明确使用\gls[index]{label}(或类似方法)将其打开,否则不会发生索引。

请注意,\glswriteentry不使用\glsadd(或\glsaddall),因为的全部目的\glsadd是添加索引信息。

更新:

glossaries-extra扩展了该glossaries包的包,提供了noindexkey(上述 key 的否定index)。它还提供了一种应用于indexonlyfirst特定条目类别的方法。

请注意,glossaries-extra为缩写提供了一种新的(更灵活的)机制。如果您想继续使用\newacronym,则需要使用以下方式设置样式:

\setabbreviationstyle[acronym]{long-short}

或者,替换\newacronym\newabbreviation

例如,indexonlyfirst仅适用于首字母缩略词:

\documentclass{scrartcl}
\usepackage{blindtext}
\usepackage{hyperref}
\usepackage[xindy]{glossaries-extra}
\makeglossaries

\glssetcategoryattribute{acronym}{indexonlyfirst}{true}

\newglossaryentry{ex}{name={sample},description={an example}}
\newglossaryentry{oe}{name={{\"o}l},description={{\"O}l}}

\setabbreviationstyle[acronym]{long-short}
\newacronym{svm}{SVM}{support vector machine}

\begin{document}

\gls{ex} liegt im \gls{oe}.

First use: \gls{svm}. Second use: \gls{svm}.

\Blindtext[2][3]

\gls{svm}

\printglossaries

\end{document}

或者,从 切换\newacronym\newabbreviation

\documentclass{scrartcl}
\usepackage{blindtext}
\usepackage{hyperref}
\usepackage[xindy]{glossaries-extra}
\makeglossaries

\glssetcategoryattribute{abbreviation}{indexonlyfirst}{true}

\newglossaryentry{ex}{name={sample},description={an example}}
\newglossaryentry{oe}{name={{\"o}l},description={{\"O}l}}

\newabbreviation{svm}{SVM}{support vector machine}

\begin{document}

\gls{ex} liegt im \gls{oe}.

First use: \gls{svm}. Second use: \gls{svm}.

\Blindtext[2][3]

\gls{svm}

\printglossaries

\end{document}

可以使用 来抑制特定条目的索引\gls[noindex]{svm}。除了使用 之外indexonlyfirst,您还可以将其设置noindex=true为默认值:

\GlsXtrSetDefaultGlsOpts{noindex}

这意味着现在\glsetc 不会自动索引条目,除非在可选参数中明确覆盖此新默认值,例如\gls[noindex=false]{svm}。如果第一次使用不是最重要的用途,这将很有用。由于编写 有点麻烦[noindex=false],您可以使用 设置快捷方式。这允许您为 等命令\GlsXtrSetAltModifier设置第三个修饰符(除了*和) 。例如:+\gls

\GlsXtrSetAltModifier{>}{noindex=false}

这意味着\gls>{svm}现在等同于\gls[noindex=false]{svm}。您可以根据需要使用其他字符,但它只能是一个字符(并且您需要小心更改类别代码)。

以下索引了 的第一次使用oesvm但 的第二次使用ex

\documentclass{scrartcl}
\usepackage{blindtext}
\usepackage{hyperref}
\usepackage[xindy]{glossaries-extra}
\makeglossaries

\GlsXtrSetDefaultGlsOpts{noindex}
\GlsXtrSetAltModifier{>}{noindex=false}

\newglossaryentry{ex}{name={sample},description={an example}}
\newglossaryentry{oe}{name={{\"o}l},description={{\"O}l}}

\newabbreviation{svm}{SVM}{support vector machine}

\begin{document}

\gls{ex} liegt im \gls>{oe}.

First use: \gls>{svm}. Second use: \gls{svm}.

\Blindtext[2][3]

\gls{svm}, \gls>{ex}.

\printglossaries

\end{document}

答案2

这只是一个部分解决方案,通过重新定义\gls命令,将其转换为\glslink有效并将显示格式更改为\glsignore,如果(新!)选项showloc为假(或未设置)。

\Gls但是,到目前为止,这还不适用于等,并且-由于location classes来自而显示出不良结果xindy

我找不到解决这个问题的方法。正如所说,这只是部分解决方案。

\documentclass{scrartcl}
\usepackage{blindtext}
\usepackage{hyperref}
\usepackage{etoolbox}
\usepackage{letltxmacro}
\usepackage{xparse}

\usepackage[toc,xindy]{glossaries}


\makeatletter
\LetLtxMacro\defaultgls\gls

\newif\ifglsaddshowloc
\glsaddshowlocfalse

\define@boolkey{gls}{showloc}[true]{%
  \ifKV@gls@showloc
  \glsaddshowloctrue%
  \else
  \glsaddshowlocfalse%
  \fi
}%

\define@boolkey{glslink}{showloc}[true]{%
  \ifKV@gls@showloc
  \glsaddshowloctrue%
  \else
  \glsaddshowlocfalse%
  \fi
}%


\RenewDocumentCommand{\gls}{somO{}}{%
  \IfBooleanTF{#1}{%
    \IfValueTF{#2}{%
      \defaultgls*[#2]{#3}%
    }{%
      \defaultgls*{#3}%
    }%
  }{%
    \IfValueTF{#2}{%
      \setkeys{gls,glslink}{#2}
      \ifglsaddshowloc
      \glslink[#2]{#3}{\glsentryname{#3}}%
      \glsaddshowlocfalse
      \else
      \glslink[format=glsignore,#2]{#3}{\glsentryname{#3}}%
      \fi
    }{%
      \glslink[format=glsignore]{#3}{\glsentryname{#3}}%
    }%  
  }%
}
\makeatother

\makeglossaries

\newglossaryentry{ex}{name={sample},description={an example}}
\newglossaryentry{oe}{name={{\"o}l},description={{\"O}l}}
\newacronym{svm}{SVM}{support vector machine}

\begin{document}

\gls[showloc]{ex} liegt im \gls[showloc]{oe}.

First use: \gls[showloc]{svm}. 

\Blindtext Second use: \gls{svm}.

\Blindtext[2][3]

\gls{svm} 

\blindtext[10]
\gls[showloc=false]{oe}



% Task: do not display the backlink to page 2 on svm
\printglossaries

\end{document}

相关内容