在我的上一个问题,我问了一个页面底部垂直对齐的问题;解决方案(由 egreg 提供)简单明了。然而,这里有一个不那么简单的例子(即更接近我真正的问题),包括multicols
环境。问题(再次)是,即使是一个真的无限拉伸胶水无法帮助将两列文本向下移动,使其底部与其他页面对齐。有什么提示吗?
\documentclass[12pt]{article}
\usepackage{vgrid}% here only to help visualize the problem
\usepackage{multicol}
\setlength{\multicolsep}{0pt}
\usepackage[height=11\baselineskip,paperheight=20\baselineskip]{geometry}
\usepackage{lipsum}
\begin{document}
\flushbottom
\lipsum[1-2]
\vskip 0pt plus 1filll
{\begin{multicols}{2}\footnotesize
\lipsum[2-3]
\par\end{multicols}}
\end{document}
答案1
您的问题仅部分与处理间距的方式有关multicols
,还存在很多问题,不幸的是,有些问题您不会得到自动答案。
您要求的11\baselineskip
高度为 159.5pt。但是页面上第一行的高度为\topskip
12pt(而不是 14.5pt)。
现在,由于您的第一页仅由一个段落组成,其中没有任何内容可以拉伸,因此页面会变短,并且您会收到一条警告,提示您:
Underfull \vbox (badness 10000) has occurred while \output is active [1{...
您会发现,如果您实际添加了任何可以拉伸的内容(例如,第二段),则此页面会变短。要修复此问题,您需要从计算值中减去 2.5pt \textheight
(或使用可以为您执行此操作的几何选项 --- 我认为有一个)。
但不幸的是,如果你这样做,第二页的情况不会有任何改善。原因如下:
- 环境
multicols
从该页面的某个位置开始 - 上面的东西(包括你的
\vskip
)被测量并保存在某个盒子里(因此你的\vskip
被认为是0pt,并且1filll
以后不会产生任何影响 从中计算剩余空间(如果你使用 选项,你就可以看到这一点
balancingshow
)multicol
,即包 multicol:在输入行 25 处以 2 列作为起始环境。
包 multicol:当前页面:(multicol)高度=157.0pt:已使用 101.33331pt -> 可用=55.66669pt(multicol)需要 50.0pt(用于 \premulticols )在输入行 25。
因此页面上剩余 55.66669pt,并且由于页面已满时环境尚未完成,因此
multicols
所做的一切就是从可用高度的样板中剪掉列。现在 4 行\footnotesize
(12pt)位于 48pt,比列高目标少 6.66669pt。您应该会看到另一堆未满的框。但是,经过multicols
如此多次试验,未满消息被抑制,因为大多数试验都会给您这些消息。结果您看不到这样的警告,但事实是,对于 TeX,即使未正确填充,列框在一天结束时也具有 55.66669pt 的名义高度。再次尝试输入类似xxx\par \lipsum[2-3]
在那里你会看到第一列是如何向下变化的。
而且因为柱子的高度“名义上”构成了其余的两个块,当重新放在一起时,刚好合适,因此没有
1fill
什么可拉伸的。
因此,为了得到正确的结果,您需要输入“正确”量的实际空间,例如 6.66669pt(除非我算错了),但是由于较小尺寸的线数或上述材料的深度,该量每次都会有所不同。
所以基本上你运气不好,因为multicols
没有设置让这种情况发生。我有点怀疑它是否可以工作(或者即使其中的一些可以称为错误),我在我的“有一天”要查看的大量事项列表中做了一个记录。但不要抱有希望 --- 修复这个问题的机会很小(特别是因为那里的任何更改都可能对大多数文档的使用产生影响multicols
,如果是这样,那就排除它了)
答案2
\documentclass[12pt]{article}
\usepackage{vgrid}% here only to help visualize the problem
\usepackage{multicol}
\setlength{\multicolsep}{0pt}
\usepackage[height=11\baselineskip,paperheight=20\baselineskip]{geometry}
\usepackage{lipsum}
\begin{document}
\flushbottom
\lipsum[1-2]
\setlength\multicolsep{2\baselineskip minus \baselineskip}
{\begin{multicols}{2}\footnotesize
\lipsum[2-3]
\par\end{multicols}}
\end{document}