当使用该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.1
、chapter.2
和chapter.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 链接。