使用 hyperref 进行脚注反向引用

使用 hyperref 进行脚注反向引用

这个问题导致了一个新的方案的出现:
footnotebackref

我习惯hyperref将脚注标记链接到脚注本身,并且我希望从脚注本身获得某种“反向引用”来指向它们被调用的位置(就像 Wikipedia 一样)。例如:

This[1] is the text[2] that serves[3] as an example[1] to
the footnote[2] backrefence thing[4].
-------
[1] The first footnote. [a, d]
[2] The second footnote. [b, e]
[3] The third footnote. [c]
[4] The fourth footnote. [f]

其中abcd和分别链接到脚注标记的第一、第二、第三、第四、第五和第六位ef

我希望我能表达出我想要的意思,我不太擅长这个:P

接下来是 MWE。

\documentclass{book}
\usepackage{hyperref}
\begin{document}
  This\footnote{The first footnote. [a, d]} is the text\footnote{The second footnote. [b, e]}
  that serves\footnote{The third footnote. [c]} as an example\footnotemark[1] to
  the footnote\footnotemark[2] backrefence thing\footnote{The fourth footnote. [f]}.
\end{document}

答案1

编辑:使用新包footnotebackref

只需将软件包包含在前言中并\footnote像往常一样使用 -command。软件包文档中描述了两个选项。

\documentclass{article}
\usepackage{footnotebackref}
%\usepackage[symbol=$\wedge$]{footnotebackref}
%\usepackage[numberlinked=false]{footnotebackref}

\textheight=3cm
\begin{document}\noindent
Text\footnote{The first footnote.} Text\\
Text\footnote[4]{The second footnote.} Text\\
Text\footnote{The third footnote.} Text
\end{document}

脚注返回参考


原答案:

这是反向引用的一种非技巧性方法。我使用了hyperref[target]{text}hyperref 包中的命令并创建了一个新的脚注来扩展标准脚注命令。在设置标准脚注之前,我myFootnoteTag使用独立的计数器为标签引用机制放置了一个带有明确(!) 标签 ( ) 的标签。要从脚注引用标签,hyperref[]{}请使用该命令。这被设置为脚注文本并在其中创建可点击的引用。在这里,可以为可点击项目选择不同的样式。

\documentclass{article}
\usepackage{hyperref}

\newcounter{myHyperFootnoteCounter}

\newcommand{\myHyperFootnote}[1]{%
    \refstepcounter{myHyperFootnoteCounter}%
    \def\myFootnoteTag{hfn:\themyHyperFootnoteCounter}%
    \label{\myFootnoteTag}%
    %\footnote{\hyperref[\myFootnoteTag]{#1}}% clickable footnotetext
    \footnote{\hyperref[\myFootnoteTag]{$\wedge$}#1}% Wikipedia style
}

\makeatletter
%clickable footnote number
\renewcommand\@makefntext[1]{%
    \noindent\makebox[1.8em][r]{%
    \mbox{\textsuperscript{\normalfont\hyperref[\myFootnoteTag]{\@thefnmark}}}\,}#1%
}

\makeatother

\begin{document}
Text\myHyperFootnote{The first footnote.} Text\\
Text\myHyperFootnote{The second footnote.} Text\\
Text\myHyperFootnote{The third footnote.} Text\\
Text\myHyperFootnote{The fourth footnote.} Text\\
Text\myHyperFootnote{The fifth footnote.} Text\\
Text\myHyperFootnote{The sixth footnote.} Text
\end{document}

编辑: 在回答 Stephen 的问题后,我给出了一个扩展版本。我使用 TeX 命令\@ifnextchar在带或不带可选参数的脚注之间进行分支。如果下一个字符是,\myHyperFootnote则将执行[\my@OptHyperFootnote。如果没有,则将执行[\my@HyperFootnote。请记住,\makeatletter现在所有宏都在环境中,因为我@在“submacros”中使用了。

\documentclass{article}
\usepackage{hyperref}

%a new counter to create an unambiguous label-tag
\newcounter{myHyperFootnoteCounter}

\makeatletter

% branch between the footnote with/without opt. argument
\def\myHyperFootnote{\@ifnextchar[\my@OptHyperFootnote\my@HyperFootnote}

%define an new footnote without optional argument
\def\my@HyperFootnote#1{%
    \refstepcounter{myHyperFootnoteCounter}%
    \def\myFootnoteTag{hfn:\themyHyperFootnoteCounter}%
    \label{\myFootnoteTag}%
    \footnote{\hyperref[\myFootnoteTag]{$\wedge$}#1}%
}

%define an new footnote with optional argument
\def\my@OptHyperFootnote[#1]#2{%
    \refstepcounter{myHyperFootnoteCounter}%
    \def\myFootnoteTag{hfn:\themyHyperFootnoteCounter}%
    \label{\myFootnoteTag}%
    % put the optional argument to the original `footnote`
    \footnote[#1]{\hyperref[\myFootnoteTag]{$\wedge$}#2}% 
}

%if the footnote number should be the reference than redefine the footnote macro
\renewcommand\@makefntext[1]{%
    \noindent\makebox[1.8em][r]{%
    \mbox{\textsuperscript{\normalfont\hyperref[\myFootnoteTag]{\@thefnmark}}}\,}#1%
}
\makeatother


\begin{document}
Text\myHyperFootnote{The first footnote.} Text\\
Text\myHyperFootnote[4]{The second footnote.} Text\\
Text\myHyperFootnote{The third footnote.} Text\\
Text\myHyperFootnote{The fourth footnote.} Text\\
Text\myHyperFootnote[8]{The fifth footnote.} Text\\
Text\myHyperFootnote{The sixth footnote.} Text
\end{document}

相关内容