如何使用 hyperref 从浏览器链接到文档的特定部分?

如何使用 hyperref 从浏览器链接到文档的特定部分?

Hyperref 会自动在 PDF 输出中为文档划分(部分、章节、节)生成书签。使用浏览器打开文档时,我们可以使用锚点语法链接到特定页面或节:

http://website.net/document.pdf#page=4
http://webiste.net/document.pdf#introduction

但是默认的 hyperref 书签的格式是什么?它并不总是像在标准 PDF 查看器中显示的那样。我无法找到 (a) hyperref 的命名过程或 (b) 解析 PDF 以显示实际锚点名称的方法。

我找到了一些关于如何改变hyperref 的默认书签。但我想使用默认书签。

下面的测试文档显示了这个问题。它包含部分和章节。如果我使用以下方法在浏览器中打开它:

/path/to/file/document.pdf#Introduction

文档在简介章节页正确打开。因此原则上链接到各部分是可行的。但我找不到其他部分和章节的书签名称。例如,以下操作失败,让我转到标题页:

/path/to/file/document.pdf#Baby
/path/to/file/document.pdf#Baby Logic
/path/to/file/document.pdf#Baby%20Logic
/path/to/file/document.pdf#Part%20I%20Baby%Logic
/path/to/file/document.pdf#I%20Baby%20Logic
/path/to/file/document.pdf#Syntax%20%and%semantics

尽管其中一些是 PDF 查看器中出现的书签。

增加了一个挑战:不同章节中的一些部分具有相同的名称,不同部分中的一些章节具有相同的名称。我不知道 hyperref 如何处理这些书签。

以下是测试文档:

\documentclass[a4paper]{memoir}

\RequirePackage{hyperref}
\hypersetup{breaklinks,
  bookmarks,
  bookmarksopen,
  bookmarksopenlevel=1,
  colorlinks,
  urlcolor=dark-gray}
  %linkcolor=reflex-blue}

\begin{document}

% title page

{\Huge Title of the book}

\frontmatter

\newpage

\tableofcontents*

\mainmatter

\chapter{Introduction}

\section{dummy section 1}
\section{dummy section 2}
\section{FAQ}

\part{Baby Logic}

\chapter{Syntax and semantics}

\section{dummy section 3}
\section{dummy section 4}
\section{FAQ}

\chapter{Exercises}

\section{dummy section 5}

\part{Advanced Logic}

\chapter{Syntax and semantics}

\section{dummy section 6}
\section{dummy section 7}
\section{FAQ}

\chapter{Exercises}

\end{document}

答案1

在您的示例中,hyperref 生成类似 的目的地,chapter.1因此是名称加数字。part.2section.4.2

你可以通过创建一个未压缩的pdf来找到它,例如

\documentclass[a4paper]{memoir}
\usepackage{l3pdf}
\ExplSyntaxOn
\pdf_uncompress:
\ExplSyntaxOff 
....

然后在 pdf 中搜索带有 /Names 条目的对象(可以有多个)。例如

182 0 obj
<<
/Names [(section.2.3) 34 0 R (section.3.1) 42 0 R (section.4.1) 54 0 R (section.4.2) 58 0 R (section.4.3) 62 0 R]
/Limits [(section.2.3) (section.4.3)]
>>

或者你可以使用包选项destlabel

\usepackage[destlabel]{hyperref}

然后 hyperref 将尝试根据标签构建目标名称。例如

\chapter{Introduction}\label{chap:introduction}

将创建目的地chap:introduction

Options for destination names文档的第 3.2 节包含更多信息。

相关内容