如何使用包含空格的目录条目作为外部 URL 锚点?

如何使用包含空格的目录条目作为外部 URL 锚点?

当使用该hyperref包时,它会创建良好的锚点,可以作为 URL 的一部分来使用,以到达生成的 PDF 文件中的特定位置。

\documentclass {book}
\usepackage{hyperref}

\begin{document}

\tableofcontents*

\chapter {One}

\clearpage
\chapter {Two}

\clearpage
\chapter {Chapter Three}

\end{document}

当生成的 PDF 被放置在网络服务器可以访问的目录中时,URL与主播#One指向第一章的开头,但 URL与锚点#Chapter%20Three指向 PDF 文件的开头。

我如何创建锚定到第三章的外部 URL?

答案1

hyperref 不会从章节标题创建锚点。内部目标名称为chapter.1chapter.2chapter.3,因此带有 的 url....test-utf8.pdf#chapter.3可以正常工作。

使用书签名称在某种程度上也有效,pdf 阅读器似乎会浏览大纲标题以找到目的地,但正如您所发现的,如果标题包含一些在 URL 中无法正常工作的内容,或者如果 hyperref 在创建书签标题时替换了某些内容,或者如果标题重复,您将遇到问题。在我看来,命名目的地的更好选择是destlabel使用以下标签键的选项:

\documentclass {book}
\usepackage[destlabel]{hyperref}

\begin{document}

\tableofcontents*

\chapter {One}\label{One}

\clearpage
\chapter {Two}\label{Two}

\clearpage
\chapter {Chapter Three}\label{ChapterThree}

\end{document}

这样#ChapterThree就可以了。

答案2

进一步的研究表明,pdf 目标不能包含空格,因此我们需要从 pdf 文件中的书签名称中删除空格。

\texorpdfstring这可以通过在章节标题中使用来实现。

另外,通过使用stringstrings我可以将标题中的所有空格替换为连字符,并且可以在我的.sty文件中执行此操作

    \documentclass {memoir}

\usepackage{hyperref}
\usepackage{stringstrings}

\newcommand{\mychapter}[1]{
  \convertchar[q]{#1}{ }{-} %
  \chapter [\texorpdfstring{#1}{\thestring}][#1]{#1}
}

\begin{document}

\tableofcontents

\mychapter{One}

Chapter one body

\clearpage
\mychapter{Chapter Two}

Chapter two body

\clearpage
\mychapter{This is a test}

This is a test body.
\end{document}

这为我提供了我想要的功能。它只需进行最小程度的更改即可与我现有的文件配合使用,并允许我创建易于定义的外部 URL 链接。

相关内容