我正在尝试在表格/图片和我手动创建的所有表格/图片列表之间创建双向链接。即,表格列表中的每个项目都应链接到一个表格,单击表格标题应链接回参考资料。
当链接表格/图形时,我想使用表格/图形名称,而不是其编号,因为这样是可能的\namref
。
我发现了一个使用时有效的解决方案\ref
,但当我尝试\nameref
在超链接内插入时,它不再起作用。我尝试\phantomsection
在表格标签前插入并使用 删除链接\nameref*
以避免链接之间发生冲突,但这没有帮助。我还尝试了其他各种链接设置,例如使用cleverref
,但尚未成功。
因此,以下代码不起作用,但如果我将其替换\nameref
为\ref
,它就会起作用。但我希望引用中的表名称(无需手动输入,因为我有数百个表),而不是表号。
\documentclass{article}
\usepackage{hyperref}
\newcommand{\mylabel}[2]{%
\hyperlink{back:#1}{\hypertarget{#1}{#2}}
}
\newcommand{\myref}[2]{%
\hyperlink{#1}{\hypertarget{back:#1}{#2}}
}
\begin{document}
\begin{enumerate}
\item \myref{link}{\nameref{testtab}}
\end{enumerate}
\newpage
\begin{table}
\caption{\mylabel{link}{My Table}}\label{testtab}
\centering
\begin{tabular}[t]{rr}
\toprule
\textbf{Col A} & \textbf{Col B} \\
\midrule
1 & A \\
2 & B \\
\end{tabular}
\end{table}
\end{document}
奇怪的是\nameref
,输出显示两个链接,其中一个在顶部,似乎链接到自身,另一个只能在最右边点击并正确链接到表格(见截图)。
我该如何正确设置它?
提前感谢您的任何提示,我是 StackExchange 的新手,对 LaTeX 也比较陌生,因此非常感谢任何支持。
编辑:我想要创建的表格/图形列表需要高度可定制(包含链接和非链接条目、多个深度、分成多个部分、包含表格和图形),这\listoftables
似乎不是解决问题的替代方法
答案1
我建议使用\listoftables
和\listoffigures
。在这种情况下,您可以修补\contentsline
以添加额外的超级目标并修补\caption
以使用此额外的超级目标:
\documentclass{article}
\usepackage{caption}% To support \caption above tabular.
\usepackage{booktabs}
\usepackage{lipsum}% Dummy text for the example.
\usepackage{hyperref}
\makeatletter
\AtBeginDocument{%
% 1. Patch \contentsline to automatically add a hyper target to the LoT entry
% and the LoF entry.
\addtocontents{lot}{%
\string\let\string\normalcontentsline\string\contentsline
\string\let\string\contentsline\string\backrefcontentsline
}%
\addtocontents{lof}{%
\string\let\string\normalcontentsline\string\contentsline
\string\let\string\contentsline\string\backrefcontentsline
}%
\newcommand{\backrefcontentsline}[4]{%
\hypertarget{back.#4}{\normalcontentsline{#1}{#2}{#3}{#4}}%
}%
% 2. Patch \caption to automatically link to the hyper target of the LoT/LoF entry.
\NewCommandCopy\Caption\caption
\RenewDocumentCommand\caption{O{#2}m}{%
\Caption[{#1}]{\hyperlink{back.\@currentHref}{#2}}
}%
}
\makeatother
\begin{document}
\listoftables
\listoffigures
\newpage
\begin{table}
\show\caption
\caption{My Table}\label{testtab}
\centering
\begin{tabular}{rr}
\toprule
\textbf{Col A} & \textbf{Col B} \\
\midrule
1 & A \\
2 & B \\
\end{tabular}
\end{table}
\begin{figure}
\centering
\rule{1cm}{1cm}
\caption{My figure}
\end{figure}
\lipsum
\begin{table}
\centering
\caption{One more Table}
\begin{tabular}{lr}
left & right
\end{tabular}
\end{table}
\end{document}
注意:无论是否带有软件包,此补丁都可以工作caption
。
但为了真正没有从标题到内容的链接,\listoffigures
而\listoftables
只有一个专门的参考,我会定义新的命令:
\documentclass{article}
\usepackage{hyperref}
\NewDocumentCommand\captionbacktonameref{O{#2}mm}{%
\caption[{#1}]{\hyperlink{nameback:#3}{#2}}\label{#3}%
}
\newcommand*\namerefwithbackref[1]{%
\hypertarget{nameback:#1}{\nameref{#1}}%
}
\begin{document}
See \namerefwithbackref{tab:test} (the link
anchor from the table would is here).
See also (without back-ref) \nameref{fig:test}.
\newpage
\begin{table}
\centering
\begin{tabular}{lr}
left & right
\end{tabular}
\captionbacktonameref{Test Table}{tab:test}
\end{table}
\begin{figure}
\centering
\rule{1cm}{1cm}
\captionbacktonameref{Test Figure}{fig:test}
\end{figure}
\clearpage
See \namerefwithbackref{fig:test} (the link
anchor from the figure is here).
See also \nameref{tab:test}.
\end{document}
因此,现在您可以决定使用\caption
不链接回任何参考文献或\captiontobackref
(链接回一个)\namerefwithbackref
。您还可以决定在标题中使用 或 来将链接的锚点放在哪里,\namerefwithbackref
或者仍然使用\nameref
。
这也可以扩展为支持来自/到号码而不是名称的反向链接:
\documentclass{article}
\usepackage{hyperref}
\NewDocumentCommand\captionbacktonameref{O{#2}mm}{%
\caption[{#1}]{\hyperlink{nameback:#3}{#2}}\label{#3}%
}
\makeatletter
\NewDocumentCommand\captionbacktorefs{O{#2}mm}{%
\expandafter\let\expandafter\orig@fnum\csname fnum@\@captype\endcsname
\@namedef{fnum@\@captype}{%
\hyperlink{numback:#3}{\orig@fnum}%
}%
\caption[{#1}]{\hyperlink{nameback:#3}{#2}}\label{#3}%
}
\makeatother
\newcommand*\namerefwithbackref[1]{%
\hypertarget{nameback:#1}{\nameref{#1}}%
}
\newcommand*\refwithbackref[1]{%
\hypertarget{numback:#1}{\ref{#1}}%
}
\begin{document}
See \namerefwithbackref{tab:test} (the link
anchor from the table would is here).
See also Figure \refwithbackref{fig:test} (the link anchor from the figure number is
here) \nameref{fig:test} (the name isn't an anchor).
\newpage
\begin{table}
\centering
\begin{tabular}{lr}
left & right
\end{tabular}
\captionbacktonameref{Test Table}{tab:test}
\end{table}
\begin{figure}
\centering
\rule{1cm}{1cm}
\captionbacktorefs{Test Figure}{fig:test}
\end{figure}
\clearpage
See Figure \ref{fig:test} (the number isn't an anchor)
\namerefwithbackref{fig:test} (the link anchor from the figure is here).
See also \nameref{tab:test}.
\end{document}
注意:您需要将\namerefwithbackref
和设为不同的目标\refwithbackref
。这就是为什么\captionwithbackrefs
使用数字的附加链接并\refwithbackref
使用numback:
前缀而不是的原因nameback:
。