Hyperref 之图表交叉引用

常规的交叉引用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
\documentclass{ctexart}
\usepackage{graphicx}
%\usepackage{hyperref}
%\def\figureautorefname{图}%
%\def\tableautorefname{表}%
\begin{document}
\section{第一章}

\begin{figure} [htbp]
\centering
\includegraphics{example-image-duck}
\caption{This is a duck image}
\label{duck}
\end{figure}

这是一段正文,这里需要交叉引用这张图片。由\ref{duck}可知,图片当中是一只鸭子。
\end{document}

01-autoref命令使用.png

从输出的图片可以看出,通过标签的形式实现图片的交叉引用,交叉引用中只会出现交叉引用的序号 “1”,而不是输出 “图 1”,如果要实现输出 “图 1” 的效果,需要在 tex 中手动添加,如:

1
由图 \ref{duck}可知,图片当中是一只鸭子。

那么每次交叉引用图、表、公式等都需要手动去敲这个 “前缀”,有没有更人性化一些的工具或宏包呢?
引出今天的主角:hyperref 宏包

hyperref 宏包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
\documentclass{ctexart}
\usepackage{graphicx}
\usepackage{hyperref}
\def\figureautorefname{图}%将默认的“figure”改为“图”
\def\tableautorefname{表}%

\begin{document}
\section{第一章}

\begin{figure} [htbp]
\centering
\includegraphics{example-image-duck}
\caption{This is a duck image}
\label{duck}
\end{figure}

这是一段正文,这里需要交叉引用这张图片。由\autoref{duck}可知,图片当中是一只鸭子。
\end{document}

02-默认的ref引用格式.png

简要步骤如下

  1. 使用 hyperref 宏包(可修改引用时的 “前缀”)
  2. 需要交叉引用的位置打上标签
  3. 正文中通过使用 \autoref{mylabel} 实现交叉引用

但是,也引出了一个新问题,存在交叉引用的地方有红色的边框

如何去除 hyperref 带来的红边框

解决方案 1

1
\usepackage[hidelinks]{hyperref}

解决方案 2

1
2
3
4
\hypersetup{
colorlinks=true,
linkcolor=black
}

推荐解决方案 1,也就是 hyperref 宏包提供的参数设置中的可选参数 hidelinks

03-hyperref宏包提供的参数设置.png

hyperref 宏包提供的更多参数设置可查阅 Latex 的官方入门手册:一份(不太)简短的 LaTeX2ε 介绍

拓展

1
2
3
4
5
6
\usepackage{hyperref}
\def\figureautorefname{图}%
\def\tableautorefname{表}%
%对于以上3句代码中的后两句下,如下命令可等效
%\renewcommand{\figureautorefname}{图}
%\renewcommand{\tableautorefname}{表}

除了图和表之外,对于其他如定理环境的交叉引用汇总如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
\def\equationautorefname{式}%
\def\footnoteautorefname{脚注}%
\def\itemautorefname{项}%
\def\figureautorefname{图}%
\def\tableautorefname{表}%
\def\partautorefname{篇}%
\def\appendixautorefname{附录}%
\def\chapterautorefname{章}%
\def\sectionautorefname{节}%
\def\subsectionautorefname{小小节}%
\def\subsubsectionautorefname{subsubsection}%
\def\paragraphautorefname{段落}%
\def\subparagraphautorefname{子段落}%
\def\FancyVerbLineautorefname{行}%
\def\theoremautorefname{定理}%

参考资料