不平衡的多列环境 + 换行页脚导致页脚移动

不平衡的多列环境 + 换行页脚导致页脚移动

当使用不平衡的多列(multicols*环境)并且页脚包含parbox换行文本时,页脚会向上移动。有人知道为什么会发生这种情况以及如何避免这种情况发生吗?

梅威瑟:

\documentclass[letterpaper]{article}
\usepackage{lipsum}
\usepackage{multicol}
\usepackage{fancyhdr}
\usepackage[left=22.18mm,top=12.7mm,right=22.18mm,bottom=13.02mm,headsep=4.0mm,headheight=10.70mm,footskip=6.63mm,includeheadfoot=true]{geometry}

\pagestyle{fancy}
\fancyfoot[R]{\parbox[t]{0.4\textwidth}{\raggedleft Long footer text that wraps around to the next line}}

\begin{document}

\section{Footer Normal}

\begin{multicols}{2}
    \lipsum
\end{multicols}

\newpage

\section{Footer Moved Up}

\begin{multicols*}{2}
    \lipsum
\end{multicols*}

\newpage

\section{Footer Back to Normal}
\lipsum

\end{document}

在我的真实文档中,我有动态的左页脚和右页脚,有时它们足够长而相互碰撞,因此需要parbox强制换行的解决方案。

答案1

哎哟。看起来这是补丁 pr4395 不久前引入的一个错误。问题是,在组装文本列时,框会被构造和重建,为此我们需要一个与正常页面生成期间使用的\boxmaxdepth相等的值。\maxdepth

然而,在构建最终页面时(在正常情况下), \boxmaxdepth 不受限制,即\maxdimen。因此,将列和页脚放在一起使用了 的整个高度\footskip

现在,通过将多列设置\boxmaxdepth为本地设置\maxdepth,该距离会缩短 :-( 。为什么?因为页脚被定义为“顶部”框,即具有正常高度和较大深度的框。但是,使用\boxmaxdepth限制时这是不可能的,因此深度会缩短而高度会增加。现在\footskip分离实际上是一个异常大的基线跳跃,因此如果页脚框的高度很大,基线跳跃就会变小,从而分离也会变小。很棘手。

两种方法都有争议,没有对错之分。问题只是标准 OR 以一种方式进行,而 multicols 的一个分支则以另一种方式进行。

目前,请先加载多列后尝试此操作:

% bug introduced with patch 4395?

 \usepackage{etoolbox}

 \makeatletter
 \patchcmd\multi@column@out{\setbox\@cclv\vbox{\unvbox\partial@page\page@sofar}}
     {\boxmaxdepth\maxdimen
      \setbox\@cclv\vbox{\unvbox\partial@page\page@sofar}}
   {\typeout{Success!!}}{\typeout{Patch failed!!}}
\makeatother

我将在 CTAN 上安装新版本的 multicols(可能是 1.8p 版本),之后该补丁不再需要(尽管它也不会造成任何损害)。

编辑

该软件包的新版本现在应该在 CTAN 上。

相关内容