跳转到内容

LaTeX/超链接

来自维基教科书,自由的教科书,为了一个自由的世界

LaTeX

入门
  1. 简介
  2. 安装
  3. 安装额外包
  4. 基础知识
  5. 如何获得帮助

常用元素

  1. 文档结构
  2. 文本格式
  3. 段落格式
  4. 颜色
  5. 字体
  6. 列表结构
  7. 特殊字符
  8. 国际化
  9. 旋转
  10. 表格
  11. 标题创建
  12. 页面布局
  13. 自定义页面页眉和页脚‎
  14. 导入图形
  15. 浮动体、图形和标题
  16. 脚注和边注
  17. 超链接
  18. 标签和交叉引用
  19. 首字母缩略词

机制

  1. 错误和警告
  2. 长度
  3. 计数器
  4. 规则和支撑

技术文本

  1. 数学
  2. 高级数学
  3. 定理
  4. 化学图形
  5. 算法
  6. 源代码清单
  7. 语言学

特殊页面

  1. 索引
  2. 词汇表
  3. 参考文献管理
  4. 更多参考文献

特殊文档

  1. 科学报告(学士报告、硕士论文、博士论文)
  2. 信函
  3. 演示文稿
  4. 教师专区
  5. 简历
  6. 学术期刊(MLA、APA 等)

创建图形

  1. 介绍过程式图形
  2. MetaPost
  3. Picture
  4. PGF/TikZ
  5. PSTricks
  6. Xy-pic
  7. 创建 3D 图形

编程

  1. Plain TeX
  2. 创建包
  3. 创建包文档
  4. 主题

其他

  1. 模块化文档
  2. LaTeX 文档的协作编写
  3. 导出到其他格式

帮助和推荐

  1. 常见问题解答
  2. 提示和技巧

附录

  1. 作者
  2. 链接
  3. 包参考
  4. LaTeX 文档示例
  5. 索引
  6. 命令词汇表

编辑此框编辑 TOC

LaTeX 允许排版超链接,当结果格式为 PDF 时非常有用,超链接可以被点击。它使用 hyperref 包来实现。

hyperref[1] 包为 LaTeX 提供了在文档中创建超链接的能力。它适用于 pdflatex 以及与 dvips 和 ghostscript 或 dvipdfm 一起使用的标准 “latex” 来构建 PDF 文件。如果你加载它,你将有可能包含交互式外部链接,所有内部引用都将转换为超链接。编译器 pdflatex 使得可以直接从 LaTeX 源代码创建 PDF 文件,而 PDF 比 DVI 支持更多功能。特别是 PDF 支持超链接。此外,PDF 可以包含有关文档的其他信息,例如标题、作者等,这些信息可以使用同一个包进行编辑。

使用标准设置的基本用法很简单。只需在序言中加载该包即可

\usepackage{hyperref}

这将自动将所有内部引用转换为超链接。它不会影响编写文档的方式:只需继续使用标准的 \label-\ref 系统(在关于 标签和交叉引用 的章节中讨论);使用 hyperref,这些 “连接” 将变成链接,你就可以点击它们来跳转到正确的页面。此外,目录、图/表列表和索引也将由超链接组成。如果你在草稿模式下工作,超链接将不会显示出来。

该包提供了一些有用的命令,用于插入指向文档外部的链接。

\hyperref

[编辑 | 编辑源代码]

用法

\hyperref[label_name]{''link text''}

这将与 \ref{label_name} 的效果相同,但它将使文本 link text 变成一个完整的链接。两者可以结合使用。如果标记为 mainlemma 的引理编号为 4.1.1,则以下示例将得到

We use \hyperref[mainlemma]{lemma \ref*{mainlemma} }.

我们使用引理 4.1.1。

并得到预期的超链接。注意 \ref 后面的 "*" 用于避免嵌套超链接。

用法

\url{<my_url>}

它将使用等宽字体显示 URL,如果你点击它,你的浏览器将打开并指向它。

用法

\href{<my_url>}{<description>}

它将使用标准文档字体显示字符串 description,但如果你点击它,你的浏览器将打开并指向 my_url。这里有一个例子

\url{https://www.wikibooks.org}
\href{https://www.wikibooks.org}{Wikibooks home}

两者都指向同一个页面,但第一个示例会显示 URL,而第二个示例会隐藏 URL。请注意,如果你打印你的文档,使用 \href 存储的链接将不会在文档中的任何地方显示。

其他可能性

[编辑 | 编辑源代码]

除了上面讨论的链接到网站之外,hyperref 可以用于提供 mailto 链接、链接到本地文件以及链接到 PDF 输出文件中的任何地方。

电子邮件地址

[编辑 | 编辑源代码]

插入电子邮件链接的一种可能方法是

\href{mailto:my_[email protected]}{my\_[email protected]}

它只会显示你的电子邮件地址(以便人们即使在纸上打印文档也能知道它),但如果读者点击它,他/她可以轻松地给你发送电子邮件。或者,要将 url 包的格式化和换行功能整合到显示的文本中,请使用[2]

\href{mailto:my_[email protected]}{\nolinkurl{my_[email protected]} }

使用此形式时,请注意 \nolinkurl 命令很脆弱,如果超链接在移动参数内部,则必须在其前面加上 \protect 命令。

本地文件

[编辑 | 编辑源代码]

也可以使用 url 或 href 命令链接文件。你只需要在链接字符串的开头添加字符串 run:

\url{run:/path/to/my/file.ext}
\href{run:/path/to/my/file.ext}{text displayed}

根据 http://tex.stackexchange.com/questions/46488/link-to-local-pdf-file 使用的版本url并不总是有效,但href有效。


可以使用相对路径来链接当前文档位置附近的文档;为此,请使用标准的类 Unix 符号(./是当前目录,../是上一级目录,等等)。

示例

\href{run:D:/my_folder/my_subfolder/my_file.txt}{Windows, absolute path}
\href{run:my_subfolder/my_file.txt}{Windows, relative path}
\href{run:./my_subfolder/my_file.txt}{Windows, relative path, variant}
\href{run:/my_folder/my_subfolder/my_file.txt}{Linux, absolute path}
\href{run:./my_subfolder/my_file.txt}{Linux, relative path}
[编辑 | 编辑源代码]

还可以创建文档中的任何位置的锚点(带或不带标题),并链接到它。要创建锚点,请使用

\hypertarget{label}{target caption}

要链接到它,请使用

\hyperlink{label}{link caption}

其中 target captionlink caption 分别是在目标位置和链接位置显示的文本。

还要注意,如果你放置了超目标,单击链接到该超目标时,它实际上可能会指向超目标后的行,这并不理想。因此,如果发生这种情况,你可以报告错误并参考 此处 以了解解决方案。

在浏览器中查看
[编辑 | 编辑源代码]

你还可以通过将 #label 附加到文件的 URL 来获取超目标的外部链接,或者右键单击指向目标的超链接之一并复制 URL,或者从 PDF 侧边栏中的标题获取链接,或者通过从查看中推断的过程(例如,子节 11.5.1 将具有标签 subsubsection.11.5.1)。这在学术和教学目的中非常有用。如果你在浏览器中启用与 PDF 1.5 兼容的 PDF 查看器,例如 Chrome 或 Chromium 浏览器的 PDF 查看器 和 Firefox 的 No PDF Download;以及在 Android 上,Xodo 应用程序最适合使用链接,因为它使用与 PDF 桌面程序相同的正确边框渲染它们,其次是 Foxit PDF 应用程序,它使用灰色突出显示渲染链接(而在其他应用程序中,链接可能也适用,但没有任何特殊渲染,例如 Dropbox PDF 查看器应用程序;而另一些则不适用于链接,例如 Drive PDF 查看器、PDF 阅读器和 Google PDF 查看器)。你可能需要在新标签页中打开指向 PDF 的 URL,否则它可能会提示下载它(也就是说,如果你点击 URL,不要左键单击,右键单击并选择在新标签页中打开它)。

自定义

[编辑 | 编辑源代码]

标准设置应该适合大多数用户,但如果你想更改某些内容,这也是可能的。有几个变量和两种方法将它们传递给包。选项可以在加载包时作为参数传递(包的工作标准方式),或者可以使用 \hypersetup 命令,如下所示

\hypersetup{<option1> [, ...]}

你可以传递任意多个选项;用逗号分隔它们。选项必须采用以下形式

variable_name=new_value

在加载包时将这些选项传递给包时,必须使用完全相同的格式,如下所示

\usepackage[<option1, option2>]{hyperref}

以下是你可以更改的可能变量列表(有关完整列表,请参阅官方文档)。默认值以直立字体书写

查看 tug.org 上的 hyperref-manual 中的 3.8 大列表

变量 评论
bookmarks =true,false 显示或隐藏显示文档时的书签栏
unicode =false,true 允许在 Acrobat 的书签中使用非拉丁语系字符
pdfborder ={RadiusH RadiusV Width [Dash-Pattern]} 设置链接周围边框的样式。前两个参数(RadiusH、RadiusV)在大多数 pdf 查看器中没有效果。Width 定义边框的粗细。Dash-Pattern 是由空格分隔并用方括号括起来的数字序列。它是一个可选参数,用于指定虚线图案中每条线和间隙的长度。例如,{0 0 0.5 [3 3]} 应该绘制一个宽度为 0.5 的正方形框(没有圆角)和一个虚线图案,该图案的虚线长度为 3,间隙长度为 3。关于不同的 pdf 查看器是否/如何渲染虚线图案,并没有统一性。
pdftoolbar =true,false 显示或隐藏 Acrobat 的工具栏
pdfmenubar =true,false 显示或隐藏 Acrobat 的菜单
pdffitwindow =true,false 调整文档窗口大小以适合文档大小
pdfstartview ={FitH},{FitV},etc[3]. 将页面的宽度调整为窗口大小
pdftitle ={text} 定义在 Acrobat 的“文档信息”窗口中显示的标题
pdfauthor ={text} PDF 作者的姓名,它与上面的工作方式相同
pdfsubject ={text} 文档的主题,它与上面的工作方式相同
pdfcreator ={text} 文档的创建者,它与上面的工作方式相同
pdfproducer ={text} 文档的生产者,它与上面的工作方式相同
pdfkeywords ={text} 用逗号分隔的关键字列表,示例如下
pdfnewwindow (=true,false) 定义当链接超出当前文档时是否应该打开新的 PDF 窗口。注意:如果链接指向 http/https 地址,则此选项将被忽略。
pagebackref (=false,true) 激活参考文献内部。必须在\usepackage{}语句中指定。
colorlinks (=false,true) 用彩色框架包围链接(false)或用颜色对链接的文本进行着色(true)。可以使用以下选项配置这些链接的颜色(默认颜色如下所示)
hidelinks 隐藏链接(删除颜色和边框)
linkcolor =red 内部链接(部分、页面等)的颜色
linktoc =none,section,page,all 定义目录条目中哪一部分被制成链接
citecolor =green 引文链接(参考文献)的颜色
filecolor =cyan 文件链接的颜色
urlcolor =magenta URL 链接(邮件、网络)的颜色
linkbordercolor ={1 0 0} 内部链接周围框架的颜色(如果colorlinks=false)
citebordercolor ={0 1 0} 引文周围框架的颜色
urlbordercolor ={0 1 1} URL 链接周围框架的颜色

请注意,显式 RGB 规范仅适用于边框颜色(如 linkbordercolor 等),而其他颜色只能分配给命名颜色(你可以定义自己的颜色,请参阅 Colors)。为了加快自定义过程,以下列出了带默认值的变量。将它复制到你的文档中并进行你想要的更改。变量旁边是对其含义的简短说明

\hypersetup{
    bookmarks=true,         % show bookmarks bar?
    unicode=false,          % non-Latin characters in Acrobat’s bookmarks
    pdftoolbar=true,        % show Acrobat’s toolbar?
    pdfmenubar=true,        % show Acrobat’s menu?
    pdffitwindow=false,     % window fit to page when opened
    pdfstartview={FitH},    % fits the width of the page to the window
    pdftitle={My title},    % title
    pdfauthor={Author},     % author
    pdfsubject={Subject},   % subject of the document
    pdfcreator={Creator},   % creator of the document
    pdfproducer={Producer}, % producer of the document
    pdfkeywords={keyword1, key2, key3}, % list of keywords
    pdfnewwindow=true,      % links in new PDF window
    colorlinks=false,       % false: boxed links; true: colored links
    linkcolor=red,          % color of internal links (change box color with linkbordercolor)
    citecolor=green,        % color of links to bibliography
    filecolor=cyan,         % color of file links
    urlcolor=magenta        % color of external links
}

如果你不需要如此高的自定义程度,以下是一些较小但有用的示例。在创建用于打印的 PDF 时,彩色链接不是一件好事,因为它们最终会在最终输出中变为灰色,难以阅读。你可以使用彩色框架,这些框架不会被打印

\usepackage{hyperref}
\hypersetup{colorlinks=false}

或使链接变为黑色

\usepackage[hidelinks]{hyperref}

或使用 \usepackage{hyperref} \hypersetup{hidelinks}

当你只想为 PDF 文件的“文档信息”部分提供信息,以及启用参考文献内部时

\usepackage[pdfauthor={Author's name},%
pdftitle={Document Title},%
pagebackref=true,%
pdftex]{hyperref}

默认情况下,URL 使用等宽字体打印。如果你不喜欢它,并希望它们以与文本其余部分相同的样式打印,可以使用以下方法

\urlstyle{same}

故障排除

[编辑 | 编辑源代码]
[编辑 | 编辑源代码]

出现以下消息

! pdfTeX warning (ext4): destination with the same identifier (name{
equation.1.7.7.30}) has been already used, duplicate ignored

当你执行以下操作时会发生

\begin{eqnarray}a=b\nonumber\end{eqnarray}

如果你使用此形式,错误会消失

\begin{eqnarray*}a=b\end{eqnarray*}

注意,显示的行号通常与错误行完全不同。

可能的解决方案:将 amsmath 包放在 hyperref 包之前。

[编辑 | 编辑源代码]

出现以下消息

! Runaway argument?
{\@firstoffive }\fi ), Some text from your document here (\ref {re\ETC.
Latex Error: Paragraph ended before \Hy@setref@link was complete.

当你使用 \labelalign 环境中时会出现。

可能的解决方案:在你的前言中添加以下内容

\AtBeginDocument{\let\textlabel\label}

注意:如果你使用冒号“:作为标签的一部分,例如 \label{lst:program01},也会出现相同的错误。替换它将有所帮助。

[编辑 | 编辑源代码]

出现以下消息

! pdfTeX warning (ext4): destination with the same
identifier (name{page.1}) has been already used,
duplicate ignored

当计数器被重新初始化时会出现问题,例如使用book文档类提供的命令 \mainmatter。它在书的第一章之前将页码计数器重置为1。但由于书籍的前言也有页码1,所以所有指向“第1页”的链接将不再是唯一的,因此会出现“重复项已被忽略”的提示。解决方法是在 hyperref 选项中添加 plainpages=false。不幸的是,这只能解决页码计数器的问题。一个更彻底的解决方法是使用选项 hypertexnames=false,但这样会导致索引中的页面链接无法正常工作。

最佳解决方案是使用 \pagenumbering 命令为每个页面赋予一个唯一的名称

\pagenumbering{alph}    % a, b, c, ...
... titlepage, other front matter ...
\pagenumbering{roman}   % i, ii, iii, iv, ...
... table of contents, table of figures, ...
\pagenumbering{arabic}  % 1, 2, 3, 4, ...
... beginning of the main matter (chapter 1) ...

另一个解决方法是在命令 \maketitle 之前使用 \pagenumbering{alph},这将为标题页提供标签 page.a。由于页码被隐藏,所以对输出结果不会产生任何影响。

通过在计数器重置之前每次更改页码,每个页面都会获得一个唯一的名称。在这种情况下,页面将被编号为 a, b, c, i, ii, iii, iv, v, 1, 2, 3, 4, 5, ...

如果你不想让页码可见(例如,在前言部分),请使用 \pagestyle{empty} ... \pagestyle{plain}。重要的是,尽管数字不可见,但每个页面都将拥有一个唯一的名称。

另一个更灵活的方法是将计数器设置为负数

\setcounter{page}{-100}
... titlepage, other front matter ...
\pagenumbering{roman}   % i, ii, iii, iv, ...
... table of contents, table of figures, ...
\pagenumbering{arabic}  % 1, 2, 3, 4, ...
... beginning of the main matter (chapter 1) ...

这将为前几页提供一个唯一的负数页码。

问题也可能出现在算法包中:因为每个算法都使用相同的行号方案,所以第二个及后续算法的行标识符将与第一个算法的重复。

如果在 eqnarray 环境的每一行上都使用 \nonumber,就会出现方程式标识符的问题。在这种情况下,请使用带星号的形式,例如 \{eqnarray*} ... \end{eqnarray*}(这是一个无编号的方程式数组),并删除现在不再需要的 \nonumber 命令。

如果你的 url 太长,导致超出页面范围,请尝试使用breakurl包将 url 分割到多行。这在多列环境中尤其重要,因为在这种环境下行宽会大大缩短。

书签问题

[编辑 | 编辑源代码]

书签显示的文本并不总是如你预期的那样。因为书签只是“文本”,所以书签可用的字符比正常的 LaTeX 文本要少得多。Hyperref 通常会注意到此类问题并发出警告

Package hyperref Warning:
Token not allowed in a PDFDocEncoded string:

现在你可以通过提供一个书签的文本字符串来解决此问题,该字符串将替换有问题的文本

\texorpdfstring{''TEX text''}{''Bookmark Text''}

数学表达式是此类问题的典型例子

\section{ \texorpdfstring{$E=mc^2$}{E=mc2} }

它将 \section{$E=mc^2$} 转换为E=mc2书签区域。颜色更改也不会很好地传播到书签中

\section{ \textcolor{red}{Red !} }

生成字符串“redRed!”。命令 \textcolor 被忽略,但它的参数(red)被打印出来。如果你使用

\section{ \texorpdfstring{\textcolor{red}{Red !}}{Red\ !} }

结果会更清晰易懂。

如果你用 unicode 编写文档,并且在 hyperref 包中使用 unicode 选项,你可以在书签中使用 unicode 字符。这将为你提供更多可供选择的字符,用于 \texorpdfstring

表格和图形问题

[编辑 | 编辑源代码]

hyperref 创建的链接指向浮动环境中创建的标签,正如 之前所述,该标签必须始终在标题之后设置。由于标题通常位于图形或表格下方,所以点击链接时,图形或表格本身将不可见[4]。可以通过使用包 hypcap [2] 来解决此问题,并使用

\usepackage[all]{hypcap}

确保在加载 hyperref 之后调用此包。

如果你使用 wrapfig[5](如“浮动、图形和标题”章节的“将文本环绕图形”部分中所述),或者其他类似的定义了自己的环境的包,你需要在这些环境中手动包含 \capstart,例如

\begin{wrapfigure}{R}{0.5\textwidth}
  \capstart
  \begin{center}
    \includegraphics[width=0.48\textwidth]{filename}
  \end{center}  
  \caption{\label{labelname}a figure}
\end{wrapfigure}

长标题和 \listoffigures 或长标题的问题

[编辑 | 编辑源代码]

在使用 \listoffigureshyperref 时,如果标题过长或标题过长,就会出现问题。这种情况发生在标题(或标题)的长度超过页面宽度(根据你的设置,大约 7-9 个单词)。为了解决这个问题,你需要在第一次声明时使用选项 breaklinks

\usepackage[breaklinks]{hyperref}

这将导致 \listoffigures 中的链接正确换行。

已有 .toc、.lof 和类似文件的问题

[编辑 | 编辑源代码]

当包含 hyperref 包时,latex 生成的某些辅助文件的格式会发生变化。因此,当第一次使用 hyperref 排版文档时,如果这些文件已经存在,则可能会遇到类似以下的错误。

! Argument of \Hy@setref@link has an extra }.

解决方法是删除 latex 用于获取正确引用而使用的所有文件,然后重新排版。

脚注和特殊字符问题

[编辑 | 编辑源代码]

请参阅 相关部分

Beamer 问题

[编辑 | 编辑源代码]

使用命令

\hyperref[some_label]{some text}

指向标签时会出错。点击时,用户不会被发送到目标标签,而是会被发送到第一帧。有一个简单的解决方法;不要使用

\phantomsection\label{some_label}

为你的框架添加标签,请使用

\hypertarget{some_label}{}

并用它作为参考

\hyperlink{some_label}{some text}

草稿模式问题

[编辑 | 编辑源代码]

警告! 请注意,如果您在 \documentclass 声明中启用了“draft”选项,则超链接将不会显示在目录或其他任何地方!

通过在包含包之后立即使用 hyperref 包的以下初始化中的“final=true”选项,可以重新启用超链接

\usepackage{hyperref}
\hypersetup{final=true}

可以在此处找到 hyperref 包的更多选项的良好来源 [6].

注释和参考

[编辑 | 编辑源代码]
  1. CTAN 中的 Hyperref 包网页
  2. "使用 hyperref、url 包的电子邮件链接". comp.text.tex 用户组. {{cite web}}: 未知参数 |accessmonthday= 被忽略 (帮助); 未知参数 |accessyear= 被忽略 (|access-date= 建议) (帮助)
  3. 其他可能的值在hyperref 手册中定义
  4. http://www.ctan.org/tex-archive/macros/latex/contrib/hyperref/README
  5. CTAN 中的 Wrapfig 包网页
  6. [1]Hyperref - 使用 LaTeX 的超链接页面


上一个:脚注和页边注 索引 下一个:标签和交叉引用
华夏公益教科书