为什么 pdfTeX 使用字符扩展而不是行缩放?

为什么 pdfTeX 使用字符扩展而不是行缩放?

为了实现更好的间距和换行效果,pdfTeX 可以扩展字体。用户决定每个所需字体允许的拉伸和收缩程度,以及增量。但是,另一种方法是设置每行,知道整行可以通过 pdf 变换(水平缩放)进行拉伸或收缩。这有两个优点:(1)调整是连续的,因此可以避免增量的离散效应;(2)所有字体(包括所有数学)都是同时处理的。这似乎也更容易实现。缺点是某些字符应该以不同的量扩展;pdfTeX 用于\efcode此目的。但请注意,pdfTeX 不使用不同的字形:根据 pdfTeX 用户手册(第 22 页),“出于实际原因,pdfTeX 不使用如此庞大的字形集合;它改用水平缩放”。

有取舍。有人能解释一下为什么我建议的方法没有被使用或者不是更好的方法吗?有没有使用我的方法的代码?

答案1

第一个版本pdftex实际上是通过水平缩放来实现字体扩展的(如这篇TUGboat文章)。直到后来(我想是 0.14f 版本),扩展才基于字体。Hàn Thê Thành 的脚注论文解释缩放方法

事实证明这种方法过于繁琐和脆弱,因为水平缩放是按行应用的,因此一行上的所有内容都会被扩展。为了使用这种方法,只允许使用单一字体排版的文本。所以后来这种方法被放弃了。(第 407 页)

但随后的两项发展导致pdftex了今天的方法,实际上与您描述的方法并不太远:

  • 1.20 版本引入了动态创建扩展字体实例的可能性(在此之前,必须提前手动创建它们)。
  • 自 1.40 版本以来,扩展是通过水平缩放(PDF 文本矩阵转换)实现的,而不是包括所有扩展的字体实例——从而导致 PDF 文件变得更小。

扩展仍然基于字体而不是基于行,因此只有字形会被扩展,而不会扩展单词间空格,甚至图形元素。

但如果你microtype像这样加载:

\usepackage[expansion=all,step=1]{microtype}

所有字体(包括数学字体)都将被扩展,并且通过step=1(默认设置),您可以非常接近避免离散效应。

这个\efcode问题(对不同字形应用不同扩展的可能性)可能可以忽略。至少microtype默认情况下不使用它们,因为 Hàn Thê Thành 进行的实验似乎表明,最好将所有字形扩展相同的量,但要少一些(最多 2%),而不是一些字形扩展得更多,一些字形扩展得更少。


(并且,正如@cfr所说,它只是微印刷功能microtype的界面。)pdftex

相关内容