我知道周围有类似的问题,但我找不到我想要的解决方案。例如这里,文档中的所有首字母缩略词都设置为索引。我认为,索引应该手动完成,以便每个索引引用只显示文档中的 1 或 2 页。如果完成了词汇表的工作,我认为这个列表也应该出现在索引中。这样,使用索引至少会引导读者找到简短的词汇表解释。
详细来说:我使用imakeidx
和glossaries
。当我\gls{}
在某处写入以在主词汇表中设置条目时,我不希望索引链接到此处,而是链接到词汇表条目所在的页面。因此,命令\newglossaryentry{glo:AD}{name=Active Directory, description={Active Directory is an...}}
应该以某种方式自动包含\index{name}
resp. \index{Active Directory}
。
当我认为在文本中的出现足够重要时,我会手动添加\gls{glo:AD}\index{Active Directory}
并获得带有两个参考页码的索引条目。
答案1
快速解决方案
这是一个更简短的解决方案,它努力解决将第一次出现的文本写入词汇表的问题。
\defglsdisplayfirst[\acronymtype]{#1#4\index{#1}}
它重新定义了术语的第一次显示,包括使用命令调用索引\defglsdisplayfirst
,并将此更改限制在首字母缩略词词汇表中。目前,这个问题是#1
已经定义为long term (acronym)
,但对于正常的词汇表条目来说,它应该没问题。
一种解决方法可能是重新定义新的缩写命令以设置不同的描述。但从长远来看,最好只是访问命令中的标签\defglsdisplay(first)
以根据需要访问其他键。我给 nicola 写了一个功能请求。
从Nicloas 对功能请求的回应:如果使用,\glslabel
则可以访问所有其他信息。因此对于首字母缩略词,请使用\index{\glsWhatKeyDoYouWantForTheIndex{\glslabel}}
。
原始解决方案
我曾有一个类似问题并从中推断出答案。我重新定义了词汇表命令以调用 index,正如相关问题中的一些答案所建议的那样,但是只有在第一次使用时才会调用“ndex”。
\documentclass{article}
\usepackage{makeidx}
\makeindex
\usepackage[acronym]{glossaries}
\makeglossaries
\newacronym{gpu}{GPU}{graphics processing unit}
\let\oldGls\gls
\renewcommand{\gls}[1]{%
\ifglsused{#1}{ %
\oldGls{#1}%
}{%
\oldGls{#1}%
\index{\glsentryfirst{#1}}%
}%
}
\begin{document}
%\gls{gpu}
First use \gls{gpu}-computing\\
subsequent \gls{gpu}-computing and \gls{gpu}
\clearpage
\gls{gpu}
\printindex
\end{document}
我只介绍了\gls
-命令,并没有检查条目所在的词汇表,如果您有多个词汇表,这可能会造成麻烦。
索引 printglossary 中的条目
通过使用 printglossary 的自定义样式,可以添加索引命令。
\documentclass{article}
\usepackage{makeidx}
\makeindex
\usepackage{hyperref}
\usepackage{glossaries}
\makeglossaries
\newglossaryentry{gpu}{name=graphics processing unit, description={bla blup}}
% \defglsdisplayfirst[acronym]{#1#4\index{#1}}
\newglossarystyle{myList}{%
\glossarystyle{list}%
\renewcommand*{\glossaryentryfield}[5]{%
\item[\glsentryitem{##1}\glstarget{##1}{##2}\index{\glsentrytext{##1}}]
##3\glspostdescription\space ##5}%
\renewcommand*{\glossarysubentryfield}[6]{%
\glssubentryitem{##2}\index{\glsentrytext{##1}%
\glstarget{##2}{\strut}##4\glspostdescription\space ##6.}%
}}
\begin{document}
First use \gls{gpu}-computing
\clearpage
\printglossary[type=main, style=myList]
\printindex
\end{document}
只需转到您的 texmf 树,查看您想要使用的样式,然后复制其定义\glossaryentryfield
和\glossarysubentryfield
出来。创建您自己的写作风格(将索引调用放在合理的位置,否则您可以使用 patch \appendto
):
\newglossarystyle{yourStyle}{%
\glossarystyle{originalStyle}%
\renewcommand*{\glossaryentryfield}[5]{originalDef+\index{\glsentrytext{##1}}}%
\renewcommand*{\glossarysubentryfield}[6]{originalDef+\index{\glsentrytext{##1}}}%
}
答案2
好吧,经过一番苦苦挣扎之后,我想出了以下简短的解决方案。它确实需要最少的黑客攻击,但需要您在需要生成索引时使用 \mygls{ABBRV}。
\providecommand{\myglsindextext}[1]{\glsentrydesc{#1} (\glsentrytext{#1})}
\providecommand{\myglsindex}[1]{\index{\myglsindextext{#1}}}
\providecommand{\mygls}[1]{\gls{#1}\myglsindex{#1}}
\providecommand{\myglspl}[1]{\glspl{#1}\myglsindex{#1}}
\providecommand{\myGls}[1]{\Gls{#1}\myglsindex{#1}}
\providecommand{\myGlspl}[1]{\Glspl{#1}\myglsindex{#1}}
嗨