这是一个后续问题:如何使文本中的索引词可点击?
我对@Stephen 给出的代码有两个问题。
如果我使用以下代码重新定义
\index
命令,则指向索引中的条目的链接将不使用xindy
\let\oldindex\index \renewcommand*{\index}[1]{\oldindex{#1@\protect\hypertarget{#1.ind}{}#1}\href{\##1.ind}{#1}}
我的索引条目(例如
\index{foo!bar}
)不能以这种方式使用。
顺便说一句,我的文档是波斯语,它是一种 RTL 语言。
编辑:
这是我遇到问题的代码:
\documentclass{article}
\usepackage{makeidx}
\makeindex
\usepackage{hyperref}
\let\oldindex\index
\renewcommand*{\index}[1]{\oldindex{#1@\protect\hypertarget{#1.ind}{}#1}\href{\##1.ind}{#1}}
\begin{document}
test \index{test}% problem 1
\index{foo!bar}% problem 2
\printindex
\end{document}
答案1
由于没有人能够提供答案,这是一种替代方法makeidx
。xindy
glossaries-extra
和bib2gls
这意味着\index
必须在文件中定义需要索引的术语.bib
。
例如,该文件entries.bib
包含:
% Encoding: UTF-8
@index{test}
@index{foo}
@index{bar,
name={bar},
parent={foo}
}
该文件test.tex
是:
\documentclass{article}
\usepackage[colorlinks]{hyperref}
\usepackage[record, % using bib2gls
nostyles,% don't load the default styles
stylemods={bookindex},% load glossary-bookindex.sty
style=bookindex% use the bookindex style
]{glossaries-extra}
\GlsXtrLoadResources[
src={entries}, % data in entries.bib
sort={en}% sort by this language tag (en = English)
]
\begin{document}
\Gls{test}.\glsadd{bar}
\printunsrtglossary[title=Index]
\end{document}
文档构建为:
pdflatex test
bib2gls -g test
pdflatex test
pdflatex test
(根据需要替换pdflatex
为xelatex
等。第三个实例只是确保 PDF 书签是最新的。)
结果是:
红色文本表示超链接。
如果您忘记了-g
( --group
) 开关,那么您将无法获得组标题:
笔记:
@index
首先确定用于引用术语的标签(类似于 BibTeX,其中标签用于\cite
)。这也将是索引中使用的文本,\gls
除非被字段覆盖,否则命令将使用此类文本name
。- 标签不能包含任何特殊字符、逗号或空格。与 一起使用时
inputenc
,标签也不能包含任何非 ASCII 字符,但由于您使用的是波斯语,我猜您可能使用的fontspec
是 XeLaTeX 或 LuaLaTeX。 \gls{
标签}
显示术语并创建指向索引中相关行的超链接。\Gls
将首字母转换为大写。您可以使用\glspl
和获得复数形式\Glspl
。\glsadd{
标签}
只是将术语添加到索引中而不产生任何文本(因此没有超链接)。sort
如果语言与文档语言匹配,则无需指定。我使用是sort=en
因为文档不包含任何语言信息。
这是另一个示例。文件entries.bib
现在包含:
% Encoding: UTF-8
@index{bird}
@index{duck,
name={duck},
parent={bird}
}
@index{goose,
name={goose},
plural={geese},
parent={bird}
}
@index{wildfowl,
alias={bird}
}
该文件test.tex
包含:
\documentclass{article}
\usepackage[colorlinks]{hyperref}
\usepackage[record, % using bib2gls
nostyles,% don't load the default styles
stylemods={bookindex},% load glossary-bookindex.sty
style=bookindex% use the bookindex style
]{glossaries-extra}
\GlsXtrLoadResources[
src={entries}, % data in entries.bib
sort={en}% sort by this language tag
]
\begin{document}
\Glspl{goose} and \glspl{duck}. \Gls{wildfowl} links to `bird' not
`wildfowl' in the index.
\printunsrtglossary[title=Index]
\end{document}
现在的结果是: