manyfoot 对 multicol 做了什么,而 fnpara 没有做?

manyfoot 对 multicol 做了什么,而 fnpara 没有做?

如果我使用该fnpara包来制作段落脚注:

\documentclass{article}
\usepackage{multicol}
\usepackage{lipsum}
\usepackage{fnpara}
\begin{document}
\begin{multicols}{2}
\lipsum[1]
\footnote{This is a test.}\footnote{This is a test.}\footnote{This is a test.}
\footnote{This is a test.}\footnote{This is a test.}\footnote{This is a test.}
\footnote{This is a test.}\footnote{This is a test.}\footnote{This is a test.}
\footnote{This is a test.}\footnote{This is a test.}\footnote{This is a test.}
\footnote{This is a test.}\footnote{This is a test.}\footnote{This is a test.}
\footnote{This is a test.}\footnote{This is a test.}\footnote{This is a test.}
\footnote{This is a test.}\footnote{This is a test.}\footnote{This is a test.}
\footnote{This is a test.}\footnote{This is a test.}\footnote{This is a test.}
\footnote{This is a test.}\footnote{This is a test.}\footnote{This is a test.}
\footnote{This is a test.}\footnote{This is a test.}\footnote{This is a test.}
\footnote{This is a test.}\footnote{This is a test.}\footnote{This is a test.}
\footnote{This is a test.}\footnote{This is a test.}\footnote{This is a test.}
\footnote{This is a test.}\footnote{This is a test.}\footnote{This is a test.}
\footnote{This is a test.}\footnote{This is a test.}\footnote{This is a test.}
\footnote{This is a test.}\footnote{This is a test.}\footnote{This is a test.}
\footnote{This is a test.}\footnote{This is a test.}\footnote{This is a test.}
\footnote{This is a test.}\footnote{This is a test.}\footnote{This is a test.}
\footnote{This is a test.}\footnote{This is a test.}\footnote{This is a test.}
\lipsum[1-10]
\end{multicols}
\end{document}

然后脚注与页脚重叠。软件包也存在同样的问题。但是,软件包footmisc不会发生这种情况manyfoot

\documentclass{article}
\usepackage{multicol}
\usepackage{lipsum}
\usepackage[para]{manyfoot}
\DeclareNewFootnote[para]{A}
\begin{document}
\begin{multicols}{2}
\lipsum[1]
\footnoteA{This is a test.}\footnoteA{This is a test.}\footnoteA{This is a test.}
\footnoteA{This is a test.}\footnoteA{This is a test.}\footnoteA{This is a test.}
\footnoteA{This is a test.}\footnoteA{This is a test.}\footnoteA{This is a test.}
\footnoteA{This is a test.}\footnoteA{This is a test.}\footnoteA{This is a test.}
\footnoteA{This is a test.}\footnoteA{This is a test.}\footnoteA{This is a test.}
\footnoteA{This is a test.}\footnoteA{This is a test.}\footnoteA{This is a test.}
\footnoteA{This is a test.}\footnoteA{This is a test.}\footnoteA{This is a test.}
\footnoteA{This is a test.}\footnoteA{This is a test.}\footnoteA{This is a test.}
\footnoteA{This is a test.}\footnoteA{This is a test.}\footnoteA{This is a test.}
\footnoteA{This is a test.}\footnoteA{This is a test.}\footnoteA{This is a test.}
\footnoteA{This is a test.}\footnoteA{This is a test.}\footnoteA{This is a test.}
\footnoteA{This is a test.}\footnoteA{This is a test.}\footnoteA{This is a test.}
\footnoteA{This is a test.}\footnoteA{This is a test.}\footnoteA{This is a test.}
\footnoteA{This is a test.}\footnoteA{This is a test.}\footnoteA{This is a test.}
\footnoteA{This is a test.}\footnoteA{This is a test.}\footnoteA{This is a test.}
\footnoteA{This is a test.}\footnoteA{This is a test.}\footnoteA{This is a test.}
\footnoteA{This is a test.}\footnoteA{This is a test.}\footnoteA{This is a test.}
\footnoteA{This is a test.}\footnoteA{This is a test.}\footnoteA{This is a test.}
\lipsum[1-10]
\end{multicols}
\end{document}

manyfoot包对没有做的multicol事情做了什么fnpara?如何使用fnparafootmisc包解决这个问题?

答案1

fnpara 和 footmisc 使用的算法(或多或少)与 Don Knuth 在 TeXbook 中的示例相同。在某个时候,它们会将页面上收集的所有脚注组合起来,并将它们拆箱成一个段落(执行此操作的命令称为\makefootnoteparagraph)该段落的宽度在宏中明确设置为

 \hsize=\columnwidth

在 LaTeX 中这通常是正确的,因为在双列模式下,您希望这样的段落与列同宽。但是在多列模式下,脚注应该跨越所有列,因此在这种情况下段落应设置为\textwidth

因此,一个可能的解决方法是修补该命令以改用\textwidth,即

\usepackage{etoolbox}
\patchcmd{\makefootnoteparagraph}
   {\columnwidth}{\textwidth}
   {\typeout{Success}}{\typeout{patch failed}}

适用于 fnpara 和 footmisc。

但请注意,这不是一个通用补丁,也就是说,如果您不使用 multicol,而是使用\twocolumn或类的 twocolumn 选项,那将是错误的!

PS 没有检查 manyfoot 中是如何实现的。该软件包进行了更复杂的操作,并且可能使用不同的算法来获取段落脚注,因此不会遇到问题。

相关内容