我想使用hyperref
。hypertexnames=false
这会导致索引出现问题:打印了正确的页面,但它们指向错误的位置。MWE:
\documentclass[index=totoc]{scrbook}
\usepackage{fontspec}
\usepackage{lipsum}
\usepackage{makeidx}
\makeindex
\usepackage[hypertexnames=false]{hyperref}
\begin{document}
\frontmatter
\title{Title}
\maketitle
\mainmatter
\chapter{Chapter 1}
\index{BeginningChapter1}\lipsum\index{EndChapter1}
\chapter{Chapter 2}
\index{BeginningChapter2}\lipsum\index{EndChapter2}
\printindex
\end{document}
从文档中可以清楚地看出hyperref
页面锚点存在问题。通过删除hypertexnames=false
MWE 中的问题,问题得以解决,但在 500 页的大型文档中,我严重依赖此选项来工作(例如 minitocs、KOMA-Script\addchap
等)。
是否可以hypertexnames=false
与索引兼容?我有两个猜测,但无法评估/实现它们:
- 是否可以为链接设置相对页码计数器(前言用罗马数字,正文用阿拉伯数字,后文可能用罗马数字),同时保留
hypertexnames=false
分段命令的功能? hypertexnames=false
之后是否有激活选项\frontmatter
?
答案1
你可以尝试一下,但这种方法还没有经过太多测试。你必须检查指向页面的链接是否正确。
\documentclass[index=totoc]{scrbook}
\usepackage{lipsum}
\usepackage{makeidx}
\makeindex
\usepackage[hypertexnames=false]{hyperref}
\makeatletter
\usepackage{etoolbox}
\patchcmd\Hy@EveryPageBoxHook{\Hy@EveryPageAnchor}{\Hy@hypertexnamestrue\Hy@EveryPageAnchor}{}{\fail}
\makeatother
\begin{document}
\frontmatter
\title{Title}
\maketitle
\mainmatter
\chapter{Chapter 1}
\label{chap1}
\index{BeginningChapter1}\lipsum\index{EndChapter1}
\chapter{Chapter 2}
\index{BeginningChapter2}\lipsum\index{EndChapter2}
\pageref{chap1}
\printindex
\end{document}