![使用 hyperref 链接显示索引中的章节编号](https://linux22.com/image/475242/%E4%BD%BF%E7%94%A8%20hyperref%20%E9%93%BE%E6%8E%A5%E6%98%BE%E7%A4%BA%E7%B4%A2%E5%BC%95%E4%B8%AD%E7%9A%84%E7%AB%A0%E8%8A%82%E7%BC%96%E5%8F%B7.png)
我有一篇很长的文档,包含 40 个章节。我想索引两个不同的内容,因此我使用 imakeidx 来建立多个索引。
当显示索引时,我希望它们显示每个条目的章节号和参考文献的页码。
经过一番研究,我找到了以下解决方案(请参阅下面的 MWE)。我修改了其中一个索引命令,使其将章节号与页码一起存储。
从视觉上看,它确实产生了我想要的效果,只是链接坏了。数字是可以点击的,但无论它们引用的是什么,它们都会让我回到文档的第一页。
是否有人知道有什么解决方案可以让章节像在图像上一样显示并且仍具有有效的超链接?
理想情况下,我愿意继续使用 imakeidx,但如果它支持多个索引,我想我可以切换到另一个索引包。
\documentclass{report}
\usepackage{imakeidx}
\makeatletter
\renewcommand{\imki@wrindexentrysplit}[3]{%
\expandafter\protected@write\csname#1@idxfile\endcsname{}%
{\string\indexentry{#2}{\thechapter-#3}}%
}
\let\imki@wrindexentry\imki@wrindexentrysplit
\makeatother
\usepackage{hyperref}
\makeindex
\begin{document}
\chapter{This is a chapter}
Hello\index{Hello}
\newpage
There's some text on this page too!
\chapter{This is another chapter}
Who\index{Who} are\index{are} you\index{you} ?
\printindex
\end{document}
答案1
更改后,ind 文件包含类似这样的命令\hyperpage{2-3}
,并且 hyperref 尝试添加指向不存在的第 2-3 页的链接。然后您的日志包含如下警告:
pdfTeX warning (dest): name{page.2-3} has been referenced but does not exist,
replaced by a fixed one
由于是“固定的” Doc-Start
,因此所有链接都转到文档的开头。
解决这个问题最简单的方法是添加额外的、合适的页面锚点
\AddToHook{shipout/background}{\put(0,0){\MakeLinkTarget*{page.\thechapter-\thepage}}}