跳转至内容

LaTeX/超链接

来自Wikibooks,开放世界中的开放书籍
(重定向自 LaTeX/Packages/Hyperref)

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. 盒子
  5. 规则和撑杆

技术文本

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

特殊页面

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

特殊文档

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

创建图形

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

编程

  1. 纯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}具有相同的效果,但会使文本链接文本成为一个完整的链接。两者可以结合使用。如果标记为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分别是目标位置和链接位置显示的文本。

另请注意,如果放置了超目标,当点击指向该超目标的链接时,它实际上可能会指向超目标后的行,这并非我们期望的结果。因此,如果发生这种情况,可以报告错误并参考此处以获取解决方案。

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

还可以获取指向超目标的外部URL,方法是在文件的URL后面添加#label,或者右键单击指向目标的超链接之一并复制URL,或者从PDF侧边栏的标题中获取链接,或者通过从查看中推断的过程(例如,子子节11.5.1将具有标签subsubsection.11.5.1)。这对于学术和教学目的很有用。如果你在浏览器中启用与PDF 1.5兼容的PDF查看器(例如Chrome或Chromium浏览器的PDF查看器和Firefox的无PDF下载),则该URL将指向目标;在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大列表

变量 注释
书签 =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}等[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链接周围边框的颜色

请注意,只有边框颜色(如linkbordercolor等)才允许显式RGB规范,而其他颜色只能分配给命名颜色(可以自定义自己的颜色,请参阅颜色)。为了加快自定义过程,这里列出了带有默认值的变量。将其复制到文档中并进行所需的更改。在变量旁边,是对其含义的简要说明

\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,则公式标识符会出现此问题。在这种情况下,请改用带星号的形式,例如\begin{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或长标题问题

[编辑 | 编辑源代码]

当使用hyperref\listoffigures时,对于长标题或长标题存在问题。当标题(或标题)的长度超过页面宽度(根据你的设置大约7-9个单词)时,就会发生这种情况。要解决此问题,你需要在首次声明时使用选项breaklinks

\usepackage[breaklinks]{hyperref}

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

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

[编辑 | 编辑源代码]

当你包含hyperref包时,latex生成的一些辅助文件的格式会发生变化。因此,可能会遇到类似以下错误

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

当文档第一次使用hyperref排版并且这些文件已存在时。解决此问题的方法是删除latex用于获取正确引用并重新排版的所有文件。

脚注和特殊字符问题

[编辑 | 编辑源代码]

请参阅相关部分

Beamer问题

[编辑 | 编辑源代码]

使用命令

\hyperref[some_label]{some text}

当指向标签时会发生错误。点击后,用户不会被发送到所需的标签,而是会被发送到第一个框架。存在一个简单的解决方法;不要使用

\phantomsection\label{some_label}

来标记你的框架,而是使用

\hypertarget{some_label}{}

并用

\hyperlink{some_label}{some text}

草稿模式问题

[编辑 | 编辑源代码]

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

可以通过在包含包之后,在 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 的超链接页面


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