如何将 footnotebackref 包与 \footnotemark 和 \footnotetext 一起使用?

如何将 footnotebackref 包与 \footnotemark 和 \footnotetext 一起使用?

我习惯footnotebackref在脚注标记和脚注文本之间建立链接和反向链接。但下面的示例产生了此错误:

! Undefined control sequence.
<argument> \BackrefFootnoteTag 

l.5 \footnotetext{My note.}

我的示例文档是:

\documentclass{book}
\usepackage{footnotebackref}
\begin{document}
Some text\footnotemark.
\footnotetext{My note.}
\end{document}

笔记:

以下代码运行时没有错误(但第二个反向链接链接到第一个注释)。

\documentclass{book}
\usepackage{footnotebackref}
\begin{document}
Prenote\footnote{First note}.
\newpage
Some text\footnotemark.
\footnotetext{My note.}
\end{document}

答案1

在 中footnotebackref,仅\footnote修补了设置唯一的引用和标签,而还有其他用于设置脚注的用户命令,例如\footnotemark您正在使用的命令。

下面,我还将该补丁添加到\@footnotemark(请注意@),我相信所有可能的用户命令都会调用它来设置脚注。请注意,使用补丁(因为我没有从命令中删除相同的代码\footnote),调用的脚注\footnote将获得两个标签,但这应该不是问题,因为标签不可见,只有超链接。

\documentclass{book}
\usepackage{footnotebackref}
\makeatletter
\LetLtxMacro{\BHFN@Old@footnotemark}{\@footnotemark}

\renewcommand*{\@footnotemark}{%
    \refstepcounter{BackrefHyperFootnoteCounter}%
    \xdef\BackrefFootnoteTag{bhfn:\theBackrefHyperFootnoteCounter}%
    \label{\BackrefFootnoteTag}%
    \BHFN@Old@footnotemark
}
\makeatother

\begin{document}
Some text\footnotemark.
\footnotetext{My note.}
\end{document}

答案2

好的,这是解决问题的快速尝试。它还处理了包选项。

\makeatletter 
\LetLtxMacro{\BHFN@OldFootnotemark}{\footnotemark}
\LetLtxMacro{\BHFN@OldFootnotetext}{\footnotetext}

\renewcommand*\footnotemark{%
    \refstepcounter{BackrefHyperFootnoteCounter}%
    \edef\BackrefFootnoteTag{bhfn:\theBackrefHyperFootnoteCounter}%
    \label{\BackrefFootnoteTag}%
    \@ifnextchar[\Backref@OptHyperFootnotemark\Backref@HyperFootnotemark}

\newcommand\Backref@HyperFootnotemark{%
    \BHFN@OldFootnotemark}

\newcommand\Backref@OptHyperFootnotemark[1]{%
    \BHFN@OldFootnotemark#1}

\renewcommand*\footnotetext{%
    \@ifnextchar[\Backref@OptHyperFootnotetext\Backref@HyperFootnotetext}

\newcommand\Backref@HyperFootnotetext[1]{%
    \BHFN@OldFootnotetext{\Backref@HyperSymbol#1}}

\newcommand\Backref@OptHyperFootnotetext[2][\empty]{%
    \BHFN@OldFootnotetext[#1]{\Backref@HyperSymbol#2}}    
\makeatother

请记住,此命令不能影响其他包或环境的行为。我不知道其他包如何改变\footnotemark和的含义\footnotetext。我总是尽量避免在我的文档中使用此命令。如果您想在表格中使用脚注,只需尝试tablefootnotes@Stephen的包。这个包涉及footnotebackref。也许这对你来说也很有趣:可点击的表格脚注

答案3

看起来该包footnotebackref破坏了命令的直接使用 \footnotemark/\footnotetext。以下内容编译时没有错误:

\documentclass{book}
\usepackage{footnotebackref}
    \edef\BackrefFootnoteTag{bhfn:\theBackrefHyperFootnoteCounter}%
\begin{document}
Some text\footnotemark.
\footnotetext{My note.}

Some further text\footnote{My second note}.
\end{document}

但只有第二个脚注创建了反向引用。

相关内容