为什么 \let\oldindex 在此代码中不起作用?

为什么 \let\oldindex 在此代码中不起作用?

这是一个后续问题:如何使文本中的索引词可点击?

我对@Stephen 给出的代码有两个问题。

  1. 如果我使用以下代码重新定义\index命令,则指向索引中的条目的链接将不使用xindy

    ‎\let\oldindex\index‎‎
    \renewcommand*{\index}[1]{\oldindex{#1@\protect‎\hypertarget{#1.ind}{}#1}\href{\#‌​#1.‎ind}{#1}}‎
    
  2. 我的索引条目(例如\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

由于没有人能够提供答案,这是一种替代方法makeidxxindyglossaries-extrabib2gls这意味着\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

(根据需要替换pdflatexxelatex等。第三个实例只是确保 PDF 书签是最新的。)

结果是:

测试。索引 F foo bar, 1 T 测试, 1

红色文本表示超链接。

如果您忘记了-g( --group) 开关,那么您将无法获得组标题:

测试。索引 foo bar,1 测试,1

笔记:

  • @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}

现在的结果是:

鹅和鸭。索引中的野禽与“鸟”相关,而不是“野禽”。索引 B 鸟,1 只鹅,1 只鸭,1 只 W 野禽,参见鸟

相关内容