嵌套脚注 + Hyperref

嵌套脚注 + Hyperref

脚注可以通过\footnotemark在脚注中放置 ,然后添加随附的 来添加脚注\footnotetext。但是,只有单身的脚注可以放在脚注内,因为脚注计数器不同步.这个问题是解决了,但解决方案结果与\hyperref包不兼容(尽管hyperfootnotes\usepackage{hyperref}声明中禁用)。

下面的 MWE 证明了这种不兼容性。

    \documentclass[10pt]{article}

    % comment the below line to resolve the footnote numbering problem
    \usepackage[colorlinks=true,urlcolor=red,hyperfootnotes=false]{hyperref}

    % solution proposed by Werner (begin)
    \usepackage{letltxmacro}
    \newcounter{fnmarkcntr}\newcounter{fntextcntr}
    \makeatletter
    \renewcommand{\footnotemark}{%
       \@ifnextchar[\@xfootnotemark
         {\stepcounter{fnmarkcntr}%
          \refstepcounter{footnote}\label{footnotemark\thefnmarkcntr}%
          \protected@xdef\@thefnmark{\thefootnote}%
          \@footnotemark}}
    \makeatother
    \LetLtxMacro{\oldfootnotetext}{\footnotetext}
    \renewcommand{\footnotetext}[1]{%
      \stepcounter{fntextcntr}%
      \oldfootnotetext[\ref{footnotemark\thefntextcntr}]{#1}
    }
    % solution proposed by Werner (end)

    \begin{document}
    This text has a footnote\footnote%
    {Which contains a sub-footnote\footnotemark}
    \footnotetext{This footnote should be labeled `2'}
    \end{document}

下面显示的是删除命令后的上述代码的输出\usepackage{hyperref}

在此处输入图片描述

下面显示的是错误包含命令的上述代码的输出\usepackage{hyperref}

在此处输入图片描述

请注意,包含该hyperref软件包会导致嵌套脚注的编号不正确(0 而不是 2),并且footnotemark文本正文中会出现不需要的脚注(尽管编号正确)(它应该放在脚注中)。这个不需要的脚注footnotemark被错误地超链接了。

答案1

你可能想(滥用)使用表脚注包裹:

\documentclass{article}
\usepackage{tablefootnote}[2011/11/26]% v1.0e

\makeatletter
\newcommand{\spewnotes}{%
\tfn@tablefootnoteprintout%
\global\let\tfn@tablefootnoteprintout\relax%
\gdef\tfn@fnt{0}%
}
\makeatother

\usepackage{hyperref}

\begin{document}
This is a footnote\footnote{Here is a footnote within the footnote%
\tablefootnote{This footnote should be labeled `2'}. %
And here is another one\tablefootnote{This footnote should be labelled `3'}.}%
\spewnotes{}. Text\footnote{Another footnote%
\tablefootnote{This footnote should be labelled `5'}. %
And here is another one\tablefootnote{This footnote should be labelled `6'}}\spewnotes{}.

\newpage

Some text (which is necessary to get two pages,
thus one can choose continuous view of the pdf-file and then check
that the hyperreferences indeed aim to the correct point.

\end{document}

您只需要确保 '\footnote{...}' 和 之间没有分页符\spewnotes,否则喷出的脚注将在第二页结束。(我没有测试当您使用与tablefootnote脚注位于同一页的表格时会发生什么,但在不太可能发生的情况下,可以处理该问题。)

答案2

如果您将\refWerner 的答案中的\getrefnumber从它refcount使用的包中更改为hyperref(如果hyperfootnote=false没有传递,则会出现有关footnotemark无处可去的链接的警告)。

\documentclass[10pt]{article}

\usepackage[colorlinks=true,urlcolor=red,hyperfootnotes=false]{hyperref}

% modified solution by Werner (begin)
\usepackage{letltxmacro}
\usepackage{refcount}
\newcounter{fnmarkcntr}\newcounter{fntextcntr}
\makeatletter
\renewcommand{\footnotemark}{%
   \@ifnextchar[\@xfootnotemark
     {\stepcounter{fnmarkcntr}%
      \refstepcounter{footnote}\label{footnotemark\thefnmarkcntr}%
      \protected@xdef\@thefnmark{\thefootnote}%
      \@footnotemark}}
\makeatother
\LetLtxMacro{\oldfootnotetext}{\footnotetext}
\renewcommand{\footnotetext}[1]{%
  \stepcounter{fntextcntr}%
  \oldfootnotetext[\getrefnumber{footnotemark\thefntextcntr}]{#1}
}
% modified solution by Werner (end)

\begin{document}
This text has a footnote\footnote%
{Which contains a sub-footnote\footnotemark}
\footnotetext{This footnote should be labeled `2'}
\end{document}

相关内容