使用 \autoref 命令生成子图超链接的格式调整

\(\qquad\!\!\)今日在写近代物理实验报告时发现的一个小问题,遂记录之。

\(\qquad\!\!\)在需要插入带有层级性的子图(e.g. 图1(a))时,使用非常简单的 subfig 宏包中的 subfloat 命令进行排版,与此同时还希望使用 hyperref 宏包中的 \autoref 命令进行便捷的超链接。这时发现,超链接形式近为 1a、1b 比较简单且与子图的 caption 中的带括号的 caption 不符,遂尝试对于 \autoref 命令生成超链接的格式进行调整。

\(\qquad\!\!\)首先因为 mpltx 文档类基于 revtex4-2 文档类,subfig 宏包默认调用了 caption ,本不能在本文档类下使用,但是我们可以把 subfigcaption 选项关闭即可使用:

1
\usepackage[caption=false]{subfig}

\(\qquad\!\!\)根据 mpltx 文档类的 \autoref 本地化,子图也是图,自然在超链接时也应该加上相应的前缀:

1
\def\subfigureautorefname{图}

因为超链接关于子图的后缀由 \thesubfigure 提供,所以直接将 \thesubfigure 定义为由小括号包裹的小写字母的计数器即可:

1
\renewcommand\thesubfigure{(\alph{subfigure})}

但是此时因为生成子图的标签样式本身就已经带有一对小括号,直接进行以上修改会导致子图的 caption 中带上两层括号(e.g. ((1))、((2))),所以需要先采用简单的标签格式:

1
\captionsetup[subfloat]{labelformat=simple}

\(\qquad\!\!\)综上所述,我们对于 \autoref 命令生成子图的超链接格式进行了符合 mpltx 的本地化调整,下面给出一个可以完整运行的 MWE(图片除外):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
\documentclass{ctexart}
\usepackage{graphicx}
\usepackage{siunitx}

\usepackage[caption=false]{subfig}
\def\subfigureautorefname{图}
\captionsetup[subfloat]{labelformat=simple}
\renewcommand\thesubfigure{(\alph{subfigure})}

\usepackage{hyperref}
\hypersetup{hidelinks}
\hypersetup{colorlinks=true}

\begin{document}

理论如\autoref{fig2},实验如\autoref{fig6}。

\begin{figure}[htbp]
\centering
\subfloat[汞 \qty{546.1}{nm} 谱线的塞曼分裂示意图]{
\includegraphics[width=0.85\linewidth]{fig2.pdf}
\label{fig2}}\\
\subfloat[\qty{1.0}{T}磁场作用时汞灯光谱线的扫描结果]{
\includegraphics[width=0.85\linewidth]{fig6.png}
\label{fig6}}
\end{figure}

\end{document}

效果: