答案1
网格排版可以在 LaTeX 中进行,只要您愿意像平面设计师一样逐页工作即可。话虽如此,但有一天,当输出程序被广泛破解以一次处理 2 页时,也许可以实现某些情况的自动化。请参阅网格包网格举个今天可能实现的例子。
要查看存在的一些问题和矛盾,请参阅图片。请注意第一段中的文本,它是平衡的。现在,如果在其中一个段落中有内联数学,会发生什么?一些行将错位。在这个特定的例子中,右页的标题用于填充页面。
请注意,在网络发展的早期,平面设计师习惯于以表格形式编写 HTML 页面,以便生成网格布局!这种方法如今也适用于 LaTeX。
如今,在包含大量图片的书中,很容易做到一半就将图片的高度标准化,因此如果每页顶部都有两张图片,它们会很好地保持平衡。但你可能会像萧伯纳一样,据说他有时会更改整个文本的样板,以便在他想要的地方添加连字符;幸运的是,我们使用 LaTeX 不会遇到这个问题。
答案2
将几个 TeX 原始寄存器设置为固定大小(默认情况下它们不是固定的,例如\parskip
,,\abovedisplayskip
...)并为章节标题等创建宏,使它们遵守网格,这是没有问题的。并且为图像或插入的表格创建更多宏,以测量此材料的高度,计算其上方和下方的空间,以使新高度是的整数倍\baselineskip
。
我解释了为什么这种网格设置不是典型 TeX 宏集合中的默认设置。基本排版规则之一是每页的第一行和最后一行位于同一位置(章节标题和章节最后一页除外)。如果没有可伸缩的垂直粘连,这条规则就无法简单地满足,因为我们有另一条排版规则:禁止段落中的孤行和孤行,禁止孤行章节标题。
我建议按照我的书中的步骤操作TeXbook 彻底对于网格排版:
- 将所有相关的 TeX 原始寄存器设置为固定值(即无拉伸无收缩组件),
- 设置为正一
\vsize
的整数倍,\baselineskip
\topskip
- 为章节标题和图像插入创建宏,如上所述(这些宏在“TeXbook inside out”中介绍),
- 放
\widowpenalty=10000
,\clubpenalty=10000
, - 并执行以下操作:
尝试对文档进行 TeX 处理,并查看日志文件中第一次出现的“输出处于活动状态时未满的垂直框”。打开 pdf 并思考如何解决给定页面的行号不一致问题(在日志中报告为未满)。通常,您可以尝试\looseness
对问题之前的某个段落应用非零值。这可能会改变所选段落中的行数。尝试再次对文档进行 TeX 处理,并查看下一个“输出处于活动状态时未满的垂直框”,等等。
可以看出,在排版文档时,这需要大量的人工干预。也许,今天的机器能够做的比 TeX 诞生时更多,这个过程应该更加自动化。但是,优化任务需要获取整个章节的文本并找到排版美学函数的最优值,其复杂度呈指数级增长。制定一个衡量这种排版美学的良好函数也是一个大问题。
答案3
LaTeX 中可以实现网格布局(平衡线)。我使用 LuaLaTeX,它增加了执行一些额外技巧的能力,但在基本层面上这些技巧并不是必需的。
要了解其工作原理,请查看 <texmf-dist/tex/latex/base> 目录。*.clo
在文本编辑器中打开各种文件,看看它们的作用。大部分代码涉及将各种“粘合”和“跳过”以及“惩罚”设置为适当的值。
但这些值对您正在编写的内容做出了一些假设。TeX 的主要用途是数学排版,现在仍然是。连续文本(段落)排在第二位。
数学表达式以及图表和其他非连续文本对象的特点是它们不需要符合网格布局。事实上,如果将许多数学公式强制放到文本网格中,它们看起来会更糟。因此,标准 LaTeX 假设您有大量空白,并且您还拥有一些对象(公式、图表、表格),您在创建它们时不知道它们的高度和宽度。将其与具有已知像素大小的光栅图像进行比较,您可以在将它们插入 LaTeX 文档之前从中计算打印尺寸。
如果您创建的文档仅使用连续文本,那么将文本放在网格上并不难。这涉及将几个 *.clo 变量设置为零(或一,或其他固定值)。这会导致“刚性”页面布局,而不是灵活胶水提供的灵活布局。
您将需要在运行文本中使用固定点大小:否\large
或类似的内容。您将需要使用固定基线跳过。请注意,某些包在使用其宏时会更改基线跳过,因此您需要避免加载某些包。啊,但是章节标题、节标题和所有其他 LaTeX 自动化怎么办?它们使用更大的文本并插入空格。太糟糕了,太可悲了。在看到初步结果后,您将需要调整它们的大小,或者(更容易)填充它们。在我自己的非技术工作中,我从不使用这些自动化。也许我不会做太多数学题,但我可以计算章节。
您需要避免每页的行数过于拥挤。原因:如果行数太紧,当您输入异常高或深的字符时,它们会自动分开(脱离网格)。文字处理器也会这样做。
您需要填充对象(图像、图表、表格等)的大小,以便它们可以取代整数行文本。对于浮动对象,这很棘手。最好的策略是预先组合这些对象,一次一个。然后,您可以看到它们必须占用多少空间,并计算需要添加多少填充(也许使用\vspace*
)。
如果您的书是打印在纸上的(不是电子书或任何类型的书),那么这会更容易:您不需要矢量图形的调整大小功能,因为您无法调整纸张大小。如果您将所有矢量对象转换为光栅,然后将它们放置为*.png
或*.jpg
图像,计算填充将更容易。
请注意,许多纸质书出版商会拒绝使用跨书脊装订对象的页面布局。这与制造有关,与 TeX 或 PDF 无关。
您需要谨慎使用某些 LaTeX 环境,例如minipage
。在许多情况下,文本对齐是相对于先前的字符深度,而不是文本基线。可以在此站点上找到该问题的解决方案。
我没有提供您需要设置的内容及其值的列表,因为这可能取决于您正在做的事情。
如果您的书除了包含连续文本外还包含很多对象,那么使用现代文字处理器或页面布局程序可能会更方便。这些程序是针对网格布局预设的,会自动填充对象。通常,它们不会像 LaTeX 那样很好地排版连续文本。但它们比 20 年前好多了,而且由于电子书的出现,读者已经习惯了平庸的排版。
最后说明:无论你做什么,一定要选择适合你预期用途的主字体。如果是纸质印刷,默认的拉丁现代罗马字体可能太浅。我建议使用 Libertinus Serif。