假设我正在使用 LaTeX 准备多页讲义。
我不太关心字体和边距大小(虽然它们是合理的),但我希望所有页面都填满,即避免最后一页大部分是空白的情况。
我可以使用外部程序来实现这一点,它将分析 TeX 的输出(或生成的文档)以确定页数,然后迭代地找到所提到的“边际”参数的值。
但是,出于以下原因,我更喜欢“内部”解决方案:
- 更加跨平台
- 可以避免一些额外/重复的工作,例如在每次迭代时写入输出文件
- 总的来说,我认为,这是一种更清洁的方法
是否有任何可立即使用的软件包,或者可以相当容易地实现它(也许使用 LuaTeX)?
答案1
TeX 一次排版一个段落(至少对于主垂直列表而言),因此,当最后一页的空间确定时,大部分排版工作已经完成。这意味着多遍排版方法是进行所需调整的唯一方法。但是,这不会像缩放字体大小和/或第二遍的边距那样简单,因为第二遍的换行方式会有所不同,这可能会改变排版的总行数。
还有一些更广泛的担忧。首先,将使用什么算法来决定进行哪些更改。如果字体大小和边距都可以更改,则需要决定选择哪一个。还需要进行一些设置多少可以接受改变。
这让我想到了这里最大的担忧,而且它根本不是程序化的。(La)TeX 是一种排版系统,而排版就是关于文本和页面其余部分之间的平衡。读一些类似印刷风格的要素Bringhurst 的这篇文章,让我们看看这有多复杂。随意更改页面布局确实超出了高质量排版的范围。现在,并不是每个 LaTeX 用户都关心排版,但 TeX 引擎本身就是为解决排版挑战而设计的。因此,这类问题需要人工输入也就不足为奇了。您可能还想看看压缩科学论文以适应页数限制。
综上所述,我可以想象如何编写此程序。第一次运行,您将以“自然”大小排版,然后保存最后一页上最后一项的位置以及总页数。对于第二次运行,您需要决定是将材料放大还是缩小,这当然需要一组阈值。在此范围内,需要有一个“理想”大小的窗口(IE我认为最后一页的行数需要有所变化)。根据拉伸/收缩量,您可以设置字体大小和边距并进行排版。然后,您将看到一个迭代过程,将每组试验值存储在文件中.aux
并进行排版运行,直到页面看起来“正确”。我想,这将通过日志消息来处理。
答案2
有一个fullpage
包,它使页边距变小。当您使用 beamer 时,您可以使用选项shrink
使所有内容适合页面,但不建议这样做。