自动化“良好”分页符(手动本地分页符优化)

自动化“良好”分页符(手动本地分页符优化)

我最近正在用 LaTeX 排版一本书,出版商有以下要求:

  1. 绝对禁止俱乐部;寡妇可以容忍,但如果可能的话,请避免。(文本包含许多 2 行和 3 行段落。)
  2. 分页符处没有连字符。
  3. 好看的页面。
  4. 我可以在某种程度上选择页面布局(调整边距等)。

我执行的步骤如下:

  1. 使用固定的\textwidthmicrotype可获得相当大的段落灵活性。查找全部Overfull hbox并调整被断开的单词的连字,或调整短语的措辞;这始终位于段落的第一行。
  2. 设置\clubpenalty=10000和。结果\widowpenalty=10000很多。在给定的页面大小附近找到最佳值;我尝试了初始猜测±4mm,步长为 1mm。其中一个生成的 Underfull vboxes 数量最少,这是我选择的页面大小。Underfull vbox\textheight
  3. 对于每一Underfull vbox页,找到一个接近于比前一页短(最后一行短)或比前一页长(最后一行长)的段落。设置\looseness1-1并重试。通常,只需以这种方式调整一个段落,并且只在有问题的页面上调整,就可以立即找到更好的分页符。继续,直到不再Underfull vbox出现(带有\vbadness=3000)。
  4. 在分页符处直观地找到所有连字符,并将被断开的单词放入其中\hbox{...}以防止断开。在所有情况下,段落都是这样。(使用\brokenpenalty会移动分页符,但不会尝试不连字符。)

有些步骤(#3、#4)重复性很高。虽然这种方法是简单的反复试验,但仅从分页符到换行符提供简单的反馈就可以在局部优化等方面大大改善结果。

问题是:这些任务是否已经实现自动化,或者正在被编程?(我不是在问 Frank 的爱丽丝飘浮其具有更广泛的全局优化目标。

答案1

在经典 tex 中,如果不使用 lua 回调,那么可以做的事情不多,但是......

第 2 步听起来不对。

\textheight应该始终为\topskip+ 的某个倍数,\baselineskip否则在仅有文本的页面上就无法避免出现框未满的情况。

如果你可以允许自己多出一行而不调整页面大小,你可以使用

\enlargethispage{\baselineskip}

当然,最好是在跨页的两页上都这样做。

但基本上它需要像您说的那样手动调整。

你没有说明你设置了什么\parskip。如果你有很多 2-3 行的小段落,那么你大概会有很多段落间空间,所以如果你设置了俱乐部和寡妇惩罚,那么段落就不会中断,一个选项(在某些设计中)是使其\parskip非常灵活,以便在实践中你总是可以将三行段落移到下一页,而不会使当前页面不完整。如果你需要保持垂直粘连控制或甚至根本不可拉伸以保持网格布局,那么需要更多的手动调整。

相关内容