footmisc-option multiple 与 hyperref 不兼容

footmisc-option multiple 与 hyperref 不兼容

有一个关于使用逗号嵌套脚注的问题,其中有一些答案。嵌套的脚注可以正确编号,并且可以正确超链接。剩余问题:超链接脚注不用逗号分隔,尽管footmisc 包multiple使用with 选项。最小不工作示例:

\documentclass{article}
\usepackage[multiple]{footmisc}
\usepackage{hyperref}
\begin{document}
Text\footnote{Here is a footnote.}\footnote{Here is another footnote.}.
\end{document}

虽然\textsuperscript{,\,}在脚注(标记)之间是可能的,但我正在寻找一些自动解决方案。(如果它也适用于嵌套脚注,那就更好了。)

答案1

我意识到我来晚了几个月,但我想提出我的方法,也许可以解决问题,或者至少提供一个变通方法。我面临的问题是,这种方法太简单了,我无法想象以前没有其他人有同样的想法。所以我的问题是:这种方法的陷阱在哪里?

解释一下代码:我重新定义了footnote-command 并使用 查看以下命令\futurelet。如果下一个命令也是 -command,则包含footnotea , 。您对此有何看法?

\documentclass{article}
\usepackage{hyperref}

\let\oldFootnote\footnote
\newcommand\nextToken\relax

\renewcommand\footnote[1]{%
    \oldFootnote{#1}\futurelet\nextToken\isFootnote}

\newcommand\isFootnote{%
    \ifx\footnote\nextToken\textsuperscript{,}\fi}

\textheight=3cm
\begin{document}

Text\footnote{First footnote}\footnote{Second footnote}\footnote{Third footnote} Text\footnote{Fourth footnote} Text

\end{document} 

这是给定示例的输出: 多个脚注

答案2

footmisc正如@lockstep 在上面的评论部分所指出的那样,和包之间的不兼容性hyperref——最终以某种方式抑制了在连续的脚注标记之间自动插入凸起逗号——不幸的是,这是一个相当众所周知的现象。

作为一种解决方法,您可以在序言中设置一个名为\fnsep(“脚注标记分隔符”的缩写)的宏:

\newcommand\fnsep{\textsuperscript{,}}

然后每次有两个连续的脚注时插入这个小宏——这种情况并不常见,对吧?——就像

Text.\footnote{Here is a footnote.}\fnsep\footnote{Here is another footnote.}

答案3

另一种可能性:该fnpct包可以正确处理多个脚注hyperref。但是,由于主要包装的用途不同您可能想要使用它的选项dont-mess-around

\documentclass{article}
\usepackage{fnpct}
 % uncomment if don't want the kerning and punctuation switching:
% \setfnpct{dont-mess-around}
\usepackage[colorlinks]{hyperref}
\begin{document}

Text\footnote{First footnote}\footnote{Second footnote}\footnote{Third footnote}
Text\footnote{Fourth footnote} Text

\newpage\null%so we see that the hyperlinks are correct
\end{document}

在此处输入图片描述

答案4

这是(轻微的)改进(非常好!)解决方案由@Holle 提供 考虑到\footnote命令的可选参数(由 LaTeX 内核提供)。它利用了expl3语法。

\documentclass{article}
\usepackage[colorlinks]{hyperref}

\ExplSyntaxOn
\NewCommandCopy{\__old_footnote}{\footnote}
\let\__next_token\relax

\RenewDocumentCommand {\footnote} { O{} m }{
  \tl_if_empty:nTF {#1}{
    \__old_footnote { #2 }
  }{
    \__old_footnote [#1] { #2 }
  }
  \futurelet\__next_token\__next_token_is_footnote:
}

\cs_new_protected:Npn \__next_token_is_footnote:
{\if_meaning:w\footnote\__next_token\textsuperscript{,}\fi}

\ExplSyntaxOff

\textheight=3cm
\begin{document}

Text\footnote{First footnote}\footnote{Second footnote}\footnote{Third footnote}
Text\footnote{Fourth footnote} Text

Text\footnote[10]{Fifth footnote} Text

\end{document}

相关内容