hypertexnames=false 与索引的兼容性

hypertexnames=false 与索引的兼容性

我想使用hyperrefhypertexnames=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=falseMWE 中的问题,问题得以解决,但在 500 页的大型文档中,我严重依赖此选项来工作(例如 minitocs、KOMA-Script\addchap等)。

是否可以hypertexnames=false与索引兼容?我有两个猜测,但无法评估/实现它们:

  1. 是否可以为链接设置相对页码计数器(前言用罗马数字,正文用阿拉伯数字,后文可能用罗马数字),同时保留hypertexnames=false分段命令的功能?
  2. 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}

相关内容