背景
希望使用回忆录类和 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
。
结果: