我使用glossary
包xindy
并用 编译我的文档lualatex
。
是否可以显示词汇表中的特定位置?
我最喜欢的方式是:
标准
\gls{}
命令应该显示链接的词汇表项,并且词汇表中不显示反向引用。通过附加选项(例如)
\gls[showloc]{}
,链接的词汇表项将显示在文本中,并显示对词汇表中页面的反向引用。
补充说明:我想在长文档中经常使用首字母缩略词和词汇表条目。这将导致词汇表中的位置列表很长。不幸的是,用户不知道哪个反向引用包含最有趣的信息。
pdflatex
MWE (也适用于):
\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
包的包,提供了noindex
key(上述 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}
这意味着现在\gls
etc 不会自动索引条目,除非在可选参数中明确覆盖此新默认值,例如\gls[noindex=false]{svm}
。如果第一次使用不是最重要的用途,这将很有用。由于编写 有点麻烦[noindex=false]
,您可以使用 设置快捷方式。这允许您为 等命令\GlsXtrSetAltModifier
设置第三个修饰符(除了*
和) 。例如:+
\gls
\GlsXtrSetAltModifier{>}{noindex=false}
这意味着\gls>{svm}
现在等同于\gls[noindex=false]{svm}
。您可以根据需要使用其他字符,但它只能是一个字符(并且您需要小心更改类别代码)。
以下索引了 的第一次使用oe
和svm
但 的第二次使用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}