我正在尝试在表格中添加一些可点击的脚注。我尝试使用\footnote{}
,它确实创建了一个链接,但没有与之关联的脚注文本。\footnotemark[number]
以及\footnotetext[]{}
确实创建了一个脚注,但没有超链接。(我想明确说明,我试图在页面底部添加脚注,而不是在表格内添加脚注。)
以下是一小段代码:
\documentclass{report}
\usepackage{hyperref}
\begin{document}
\begin{table}[h!]
\centering
\begin{tabular}{|r|r|r|}
\hline
A\footnote{Test!} & B\footnotemark[4] & C\footnotemark[5]\\
\hline
123 & Tim & Jane\\
\hline
456 & Tom & Jung\\
\hline
\end{tabular}
\caption{A table}
\end{table}
This is a clickable footnote\footnote{You clicked me!}.
\footnotetext[4]{This is B}
\footnotetext[5]{This is C}
\end{document}
答案1
摘自 hyperref README,第 8 节“提示”,第 26 页:
脚注支持相当有限。不按顺序使用 \footnotemark 和 \footnotetext 或重复使用 \footnotemark 超出了范围。在这里,您可以通过“hyperfootnotes=false”禁用 hyperref 的脚注支持,或者摆弄内部宏 [...]
第 26-27 页给出了一些“令人讨厌的例子”;我使用第二个作为基础来修改您的代码示例。这就是我想出的:
\documentclass{report}
\usepackage{hyperref}
\begin{document}
\makeatletter
\begin{table}[h!]
\centering
\begin{tabular}{|r|r|r|}
\hline
A & B\footnotemark\global\let\saved@Href@B\Hy@footnote@currentHref & C\footnotemark\global\let\saved@Href@C\Hy@footnote@currentHref \\
\hline
123 & Tim & Jane\\
\hline
456 & Tom & Jung\\
\hline
\end{tabular}
\caption{A table}
\end{table}
\addtocounter{footnote}{-1}%
\let\Hy@footnote@currentHref\saved@Href@B
\footnotetext{This is B}
\addtocounter{footnote}{1}%
\let\Hy@footnote@currentHref\saved@Href@C
\footnotetext{This is C}
This is a clickable footnote\footnote{You clicked me!}.
\end{document}
顺便说一句,我同意 Thorsten Donig 的观点,在浮动行中添加脚注不是一个好主意。
答案2
您可以使用tablefootnote
包(在之后加载hyperref
)并在表中\tablefootnote
而不是\footnote
。该命令没有可选参数,但如果我理解您的问题正确的话,您确实需要自动编号。
\documentclass{report}
\usepackage{hyperref}
\usepackage{tablefootnote}
\begin{document}
This is a clickable footnote\footnote{You clicked me!}.
\begin{table}[h!]
\centering
\begin{tabular}{|r|r|r|}
\hline
A\tablefootnote{Test!} & B\tablefootnote{This is B} & C\tablefootnote{This is C}\\
\hline
123 & Tim & Jane\\
\hline
456 & Tom & Jung\\
\hline
\end{tabular}
\caption{A table}
\end{table}
This is a another clickable footnote\footnote{Now you clicked me!}.
\newpage
To test the hyperlinks it is very useful to have a second page in the document!
\end{document}
答案3
我使用以下技术来多次引用同一个脚注,并hyperref
结合其文档中的建议和这里的几篇文章:
\newcommand{\Hair}{\kern.16667em}
[…]
Falls hierbei Fehler auftauchen prüfen Sie […] die
Logs\Hair\textsuperscript{\ref{fn:tomcatlogs}}.
[…]
Prüfen Sie ggfs. die Logausgaben\Hair\footnote{\label{fn:tomcatlogs}in
\texttt{/var/log/tomcat7/catalina.out}}, […]
如您所见,一旦在文档的任何地方定义了脚注,就可以轻松地多次引用脚注,甚至在以后也是如此。这很重要,因为脚注不能\footnote
在表格或小页面内定义(使用)。
现在,我想我可以简单地用这样的一行来定义脚注的主体:
\stepcounter{footnote}\footnotetext{\label{fn:foo}foobar}%
不幸的是,虽然在表格中引用此脚注是可行的,但它不是超链接,因为hyperref
仅适用于\footnote
但不适用于拆分\footnotemark
+ \footnotetext
。因此,我们真正想要的是调用\footnote
但不呈现其输出。
说起来容易做起来难。但我们可以暂时重新定义将标记设置到文本中的命令 – \@makefnmark
– 为空。这可行,但它需要一个段落,否则它会创建一个段落,因此您必须执行以下操作:
[…]
\end{tabular}
Some paragraph here.\hyperfootnotetext{\label{fn:foo}foobar}\hyperfootnotetext{…}
正如您所看到的,这很快就变得难以辨认,尤其是当有多个时。所以我尝试暂时阻止离开 vmode……然而,代码仍然试图设置 (empty)芬马克作为脚注的超链接,仅在水平模式下有效。嗯。此时我打算收工了……
…但我发现我们能暂时阻止设置超链接,但不放弃从一个脚注链接到另一个脚注的能力。
南加州大学
此示例显示了如何多次使用表格中的脚注,并使用指向脚注的超链接以及脚注本身的超链接,并能够在任何段落之外声明这些脚注:
\documentclass{scrartcl}
\RequirePackage[utf8]{inputenc}
\RequirePackage[T1]{fontenc}
\usepackage{mwe}
\RequirePackage[pdftex]{hyperref}
\hypersetup{
colorlinks = true,
linkcolor = blue,
urlcolor = blue,
}
% em dash
\def\dash{\unskip\kern.16667em\textemdash\penalty\exhyphenpenalty\hskip.16667em\relax}
% for footnotes
\newcommand{\Hair}{\kern.16667em}
\makeatletter%
% \hyperfootnotetext is what \footnotetext is supposed to be:
% like \footnote except not rendering anything (it will not
% generate a paragraph if you append % to all lines)
\newcommand\hyperfootnotetext[1]{%
% new local scope
{%
% temporarily redefine this macro to empty
\renewcommand{\@makefnmark}{}%
% temporarily prevent leaving vmode
\renewcommand{\leavevmode}{}%
% this also means we cannot create a(n empty) hyperlink
\renewcommand{\hyper@linkstart}[2]{}%
\renewcommand{\hyper@linkend}{}%
% call the original \footnote macro
\footnote{#1}%
% exit the local scope with the redefined macro
}%
% end of command
}%
\makeatother%
\begin{document}
\section{First page}\label{sec:first}
These are the system requirements:
\begin{tabular}{| r || l | l | l |}\hline
& minimum & recommended & maximum\\\hline\hline
Operating System & Debian 7 & Debian 7 or 8 & Debian unstable\Hair\textsuperscript{\ref{fn:req-nolimit}}\\\hline
Webserver & Apache 2.2 & Apache 2.2 & Apache 2.4\Hair\textsuperscript{\ref{fn:req-notmore}}\\\hline
Java Runtime & OpenJDK 7 & OpenJDK 8 & OpenJDK 8\Hair\textsuperscript{\ref{fn:req-notmore}}\\\hline
Application Server & Tomcat 7 & Tomcat 7 & Tomcat 7\Hair\textsuperscript{\ref{fn:req-nonewer}}\\\hline
\end{tabular}
% note no paragraph here before next section!
\hyperfootnotetext{\label{fn:req-nolimit}%
no practical limitation}%
\hyperfootnotetext{\label{fn:req-notmore}%
newer versions were not tested\Hair\textsuperscript{\ref{fn:didnot}}}%
\hyperfootnotetext{\label{fn:req-nonewer}%
newer versions do \emph{not} work!}%
\section{Second half}\label{sec:second}
Page break upcoming.
\newpage
Some systems were not tested\Hair\footnote{\label{fn:didnot}… or
did not exist at the time of this writing}.
\end{document}
应用说明:您很可能会将您的\hyperfootnotetext
调用直接放在表格下方(除非您重新使用在其他地方定义的脚注),以便将它们理想地放在同一页面上。
附注:最初我\hyperfootnotetext
重新实现了原始版本\footnote
,除了内联\@footnotemark
减去它的\@makefnmark
调用……这很快就会过时……最后我发现你可以暂时在其他命令中重新定义命令,但只能在它们的持续时间内重新定义。(我还不明白为什么在脚注中设置超链接文本在我的例子中仍然有效,但我对此感到高兴。)
ObNote:这也应该适用于小页面。