我正在寻找一种解决方案,使用可以编写的单个函数,将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}