将超链接扩展至图 a、b、c

将超链接扩展至图 a、b、c

我正在寻找一种解决方案,使用可以编写的单个函数,将hyperref图形、章节等的链接预先扩展到单词“图形”(或“章节”),然后扩展到图形本身中存在的图片子索引 a、b、c 等。\ref[Figure][a]{missing Figure}无论如何做到这一点?

以下是 MWE:

\documentclass[10pt,a4paper]{article}

\usepackage{todonotes}
\usepackage{hyperref}

\begin{document}

\begin{figure}[t]
   \missingfigure[figwidth=6cm]{- << Ciel, mon mari >> dit-elle !}
\caption{a: Missing figure, and b: still missing figure.}
\label{fig:missing Figure}
\end{figure}

Something in Figure \ref{fig:missing Figure} a and some other thing in Figure \ref{fig:missing Figure} b.

\end{document}

答案1

\hyperref使用可选参数可以链接到带有任意文本的标签:

\hyperref[<label>]{<arbitrary text>}

星号形式\ref*设置了无需额外链接的引用,因为链接已由 设置\hyperref

以下示例定义了\figref图形引用。可选参数采用子图编号,强制参数采用不带前缀的标签名称fig:

完整示例:

\documentclass[10pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{todonotes}
\usepackage{hyperref}

\newcommand*{\figref}[2][]{%
  \hyperref[{fig:#2}]{%
    Figure~\ref*{fig:#2}%
    \ifx\\#1\\%
    \else
      \,#1%
    \fi
  }%
}

\begin{document}

\begin{figure}[t]
   \missingfigure[figwidth=6cm]{- << Ciel, mon mari >> dit-elle !}
\caption{a: Missing figure, and b: still missing figure.}
\label{fig:missing Figure}
\end{figure}

The figure \figref{missing Figure} contains two subfigures.
Something in \figref[a]{missing Figure} and some other thing in
Figure \figref[b]{missing Figure}.

\end{document}

结果

版本作为通用命令形式\myref(我不建议重新定义\ref):

\documentclass[10pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{todonotes}
\usepackage{hyperref}
\usepackage{twoopt}

\newcommandtwoopt*{\myref}[3][][]{%
  \hyperref[{#3}]{%
    \ifx\\#1\\%
    \else
      #1~%
    \fi
    \ref*{#3}%
    \ifx\\#2\\%
    \else
      \,#2%
    \fi
  }%
}

\begin{document}

\begin{figure}[t]
   \missingfigure[figwidth=6cm]{- << Ciel, mon mari >> dit-elle !}
\caption{a: Missing figure, and b: still missing figure.}
\label{fig:missing Figure}
\end{figure}

The figure \myref[Figure]{fig:missing Figure} contains two subfigures.
Something in \myref[Figure][a]{fig:missing Figure} and some other thing in
Figure \myref[Figure][b]{fig:missing Figure}.

\end{document}

\eqref

\eqref没有提供星号形式,但(\ref*{...})可以使用类似形式代替。或者更准确地说,\eqref在包中定义amsmath为:

\newcommand{\eqref}[1]{\textup{\tagform@{\ref{#1}}}}

那么\eqrefstar无链接可以定义为:

\makeatletter
\newcommand*{\eqrefstar}[1]{\textup{\tagform@{\ref*{#1}}}}
\makeatother

答案2

非常感谢 Heiko 和其他人。这太完美了。这只是将 eqref 添加到答案中:

\documentclass[10pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{hyperref}
\usepackage{twoopt}

\newcommandtwoopt*{\myeqref}[3][][]{%
  \hyperref[{#3}]{%
    \ifx\\#1\\%
      Equation~%
    \else
      #1~%
    \fi
    (\ref*{#3})%
    \ifx\\#2\\%
    \else
      \,#2%
    \fi
  }%
}
\begin{document}

See \myeqref{eq:plancksrelation} (\myeqref[Relation][a]{eq:plancksrelation}) for details.

\begin{equation}
E = \hbar \omega
\label{eq:plancksrelation}
\end{equation}

\end{document}

相关内容