多列表格环境中的脚注

多列表格环境中的脚注

当我在多列表格环境中使用脚注时,遇到了奇怪的不一致。具体来说,我在样式文件中声明了一个 savenotes 环境,如下所示:

\makesavenoteenv[tabunote]{tabular}

然后,在文档的同一双栏页面中,我使用tabunote环境中的脚注

并在一个空白段落中再添加一个脚注

产生以下结果:

看起来,我的第一个脚注(来自 savenotes 表格环境)会换行到列,而裸脚注会换行到页面(这是我在 下期望的行为multicols)。此外,由于savenotes脚注在前面,它会导致脚注分隔线的长度只有预期长度的一半 — 在我反转脚注顺序的页面上(裸脚注,然后tabunote),分隔线的长度为正常长度。以下应该会产生类似的结果:

\documentclass{article}
\usepackage{footnote}
\usepackage{multicols}

\makesavenoteenv[tabunote]{tabular}

\begin{document}
\begin{multicols}{2}

\begin{center}
  \begin{tabunote}{c|c}
    foo & bar%
    \footnote{A long enough footnote here will wrap to the column
    rather than to the page---this is easily illustrated by the use
    of lots of filler text.}
  \end{tabunote}
\end{center}

On the other hand, this footnote will be fine.%
\footnote{Here is the aforementioned example of the footnote that is
fine and represents the expected behavior for footnotes in a multicols
environment.}

\end{multicols}
\end{document}

有办法解决这个问题吗?具体来说,我该如何同时使用裸列和表格/savenotes脚注,以便两者都换行到页面,而不是列中?

答案1

在序言中添加以下代码:

\makeatletter
\def\savenotes{%
  \begingroup%
  \if@savingnotes\else%
    \@savingnotestrue%
    \let\@footnotetext\fn@fntext%
    \let\@mpfootnotetext\fn@fntext%
    \fn@width\textwidth%
    \let\fn@colwidth\fn@width%
    \global\setbox\fn@notes\box\voidb@x%
    \let\fn@thempfn\thempfn%
    \let\fn@mpfn\@mpfn%
    \ifx\@minipagerestore\relax\let\@minipagerestore\@empty\fi%
    \expandafter\def\expandafter\@minipagerestore\expandafter{%
      \@minipagerestore%
      \let\thempfn\fn@thempfn%
      \let\@mpfn\fn@mpfn%
    }%
  \fi%
}
\makeatother

并且自定义表格环境中的脚注将具有正确的宽度。 在此处输入图片描述

我认为,当存储脚注的环境(tabunote在您的情况下为 )放置在multicolenv中时fn@width, 不会设置为textwidth,而是保持默认值,即columnwidth。在上面的代码中,默认值已更改为textwidth。我更改的行是

\fn@width\textwidth

最初

 \fn@width\columnwidth  

这样宽度就不会包裹住列。

fn@width默认设置的原因在第 4 页的文档columnwidth中进行了解释。footnote

我不确定是否存在默认值的改变会导致问题的情况,但我认为如果存在的话,有人会告诉我们:)

相关内容