可点击的表格脚注

可点击的表格脚注

我正在尝试在表格中添加一些可点击的脚注。我尝试使用\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:这也应该适用于小页面。

相关内容