我如何将每个词汇表条目添加到索引中?

我如何将每个词汇表条目添加到索引中?

我知道周围有类似的问题,但我找不到我想要的解决方案。例如这里,文档中的所有首字母缩略词都设置为索引。我认为,索引应该手动完成,以便每个索引引用只显示文档中的 1 或 2 页。如果完成了词汇表的工作,我认为这个列表也应该出现在索引中。这样,使用索引至少会引导读者找到简短的词汇表解释。


详细来说:我使用imakeidxglossaries。当我\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}}

相关内容