当我在多列表格环境中使用脚注时,遇到了奇怪的不一致。具体来说,我在样式文件中声明了一个 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
在您的情况下为 )放置在multicol
env中时fn@width
, 不会设置为textwidth
,而是保持默认值,即columnwidth
。在上面的代码中,默认值已更改为textwidth
。我更改的行是
\fn@width\textwidth
最初
\fn@width\columnwidth
这样宽度就不会包裹住列。
fn@width
默认设置的原因在第 4 页的文档columnwidth
中进行了解释。footnote
我不确定是否存在默认值的改变会导致问题的情况,但我认为如果存在的话,有人会告诉我们:)