4

我在处理多列环境中的寡妇时遇到了问题,也就是说,我没有设法指示 LaTeX 删除它们。

此 PDF 文档显示了该问题的一个示例。在第二页的顶部,我从第一页的最后一段中得到了一个寡妇。我尝试了几种方法,但没有运气:

  • \widowpenalty和设置\clubpenalty为高值
  • \raggedcolumns在和之间切换\flushcolumns
  • 调整collectmoreunbalance计数器

我还通读了 multicol 的文档,但没有发现任何有用的东西。

还有什么我可以尝试的吗?

上述示例的完整 LaTeX 文档

4

2 回答 2

1
{\obeyspaces\gdef\nomorebreak{\beginnomorebreak\let \nobreakspace}}
\def\beginnomorebreak{\begingroup
   \def\par{\endgraf\endgroup\par\penalty 9999 }\obeyspaces
   \brokenpenalty 10000 \widowpenalty 10000 \clubpenalty 10000 }
\def\nobreakspace{\vadjust{\nobreak} \removespaces}
\def\removespaces{\futurelet\next\checkspace}
\def\checkspace{\ifx\next\nobreakspace\expandafter\removesinglespace\fi}
\def\removesinglespace#1{\removespaces}

插入\nomorebreak段落的任何位置。在此宏之后直到段落结尾将禁止分页符。

于 2010-03-05T16:17:08.217 回答
1

似乎 TeX FAQ 项目控制寡妇和孤儿有一些你还没有尝试过的选项。

摆脱寡妇可能会更加棘手。选项是

  • 如果上一页包含一个长段落,最后一行很短,则可以将其设置为“紧”:\looseness=-1 紧跟在段落的最后一个单词之后。
  • 如果这不起作用,则调整页面大小,使用\enlargethispage{\baselineskip}“添加一行”到页面,这可能具有将整个段落放在一页上的效果。
  • 将页面大小减小 10\enlargethispage{-\baselineskip}倍可能会产生(或多或少)可接受的“双行寡妇”。
于 2010-03-05T17:47:20.287 回答