有一个关于使用逗号嵌套脚注的问题,其中有一些答案。嵌套的脚注可以正确编号,并且可以正确超链接。剩余问题:超链接脚注不用逗号分隔,尽管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,则包含footnote
a ,
。您对此有何看法?
\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}