背景

背景

背景

希望使用回忆录类和 pdfTeX 3.1415926-2.4-1.40.13(TeX Live 2012)在索引中缩进任意 n 级层次结构并为最后一项提供超链接。

例如:

\index[classification]{Anthropoidea!Hominoidea!Hominidae!Homo!sapiens}

应产生:

小样

其中“sapiens”中的2,2“在文档(PDF)中以超链接形式返回。

问题

首先,makeindex只能嵌套3 层深度。其次,xindy与 hyperref 不兼容;从手册页来看:

具体来说,这意味着默认情况下 LaTeX 包“hyperref”将创建无法用 xindy 处理的原始索引文件。这不是错误,这是故意不兼容的不幸结果。目前无法同时获取 hyperref 的索引链接和使用 xindy。

问题

如何创建嵌套到任意深度的超链接索引?

示例文档

最小文档可能类似于:

\documentclass{memoir}
\usepackage{filecontents}

\begin{filecontents*}{style1.xdy}
(markup-index :open  "~n\begin{theindex}~n"
              :close "~n\end{theindex}~n"
              :tree)
(markup-indexentry :open "~n            \sssssubitem "  :depth 5)
\end{filecontents*}

\long\def\lettergroup#1\item{\item\textbf}
\let\lettergroupDefault\lettergroup

\usepackage{makeidx}
\makeindex

\begin{document}
Start

\index{Anthropoidea!Hominoidea!Hominidae!Homo!sapiens}

End
\printindex
\end{document} 

但是,运行时不会产生正确的结果:

pdflatex file.tex; texindy file.idx; pdflatex file.tex

相关链接

答案1

\documentclass{memoir}
\usepackage{filecontents}

\begin{filecontents*}{style1.xdy}
(markup-locref :open "\hyperpage{" :close "}")

(markup-index :open  "~n\begin{theindex}~n"
              :close "~n\end{theindex}~n"
          :tree
              )
(markup-indexentry :open "~n       \sssubitem " :depth 3) 
(markup-indexentry :open "~n            \sssssubitem "  :depth 4)
(markup-indexentry :open "~n            \sssssssubitem "  :depth 5)
\end{filecontents*}

\long\def\lettergroup#1\item{\item\textbf}
\let\lettergroupDefault\lettergroup
\makeatletter
\newcommand\sssubitem{\@idxitem \hspace*{40\p@}}
\newcommand\sssssubitem{\@idxitem \hspace*{50\p@}}
\newcommand\sssssssubitem{\@idxitem \hspace*{60\p@}}

\makeatother
\usepackage{makeidx}
\makeindex
\usepackage{hyperref}
\begin{document}
Start

\index{Anthropoidea!Hominoidea!Hominidae!Homo!sapiens}


End
\printindex
\end{document} 

您可以使用hyperref\hyperpage链接到索引页面。使用

(markup-locref :open "\hyperpage{" :close "}")

您告诉 xindy 用这个宏来括起页码。

对于更多层次,您可以使用

(markup-indexentry :open "~n       \sssubitem " :depth 3) 
(markup-indexentry :open "~n            \sssssubitem "  :depth 4)
(markup-indexentry :open "~n            \sssssssubitem "  :depth 5)

并定义如下宏\sssubitem

\newcommand\sssubitem{\@idxitem \hspace*{40\p@}}

使用以下方式编译

pdflatex filename
texindy -M style1 filename.idx
pdflatex filename

您必须告知texindy使用带有选项的模块-M

结果:

层次索引

相关内容