为什么 xdvi 不能根据 pfb 文件纠正高度?

为什么 xdvi 不能根据 pfb 文件纠正高度?

在您的工作目录中:

$ tftopl cmr10.tfm > cmr10.pl

改变cmr10.pln 顺序,字符 A 具有不同的宽度,B 具有不同的高度:

--- cmr10.pl.orig
+++ cmr10.pl
@@ -466,7 +466,7 @@
    (CHARHT R 0.694445)
    )
 (CHARACTER C A
-   (CHARWD R 0.750002)
+   (CHARWD R 0.1)
    (CHARHT R 0.683332)
    (COMMENT
       (KRN C t R -0.027779)
@@ -483,7 +483,7 @@
    )
 (CHARACTER C B
    (CHARWD R 0.708336)
-   (CHARHT R 0.683332)
+   (CHARHT R 0.1)
    )
 (CHARACTER C C
    (CHARWD R 0.722224)

在您的工作目录中创建“坏指标”cmr10.tfm:

$ pltotf cmr10.pl

生成格式:

$ pdftex -ini '\input plain \dump'

创建测试文档:

$ pdftex -fmt plain -jobname wd \\pdfoutput=1 Ab\\end
$ pdftex -fmt plain -jobname wd \\pdfoutput=0 Ab\\end
$ pdftex -fmt plain -jobname ht \\pdfoutput=1 x\\par\\nointerlineskip B\\end
$ pdftex -fmt plain -jobname ht \\pdfoutput=0 x\\par\\nointerlineskip B\\end

wd.dvi与进行比较wd.pdf然后ht.dviht.pdf- 为什么宽度被 xdvi 校正,而高度没有?

答案1

我想你的问题是:为什么没有wd.dvi经过校正就显示出来,而其他所有实验都显示了校正。xdvitfm

所有字符的宽度都复制到pfb字体文件中,即该命令hsbw使用左侧边距和宽度值。您可以尝试这样做

t1disasm cmr10.pfb > cmr10.pps

并查看cmr10.pps字符/A。 是32 750 hsbw在这里。 因此, 的宽度为 750/1000 em,使用A不同的度量标准无关紧要。 Xdvi 使用这些数据。排版命令是“打印 A,然后打印 b”,中间没有任何校正。tfmdvi

另一方面,wd.pdf尊重更正的tfm。为什么?您可以使用\pdfcompresslevel=0来查看 pdf 文件中的更多信息(使用普通文本编辑器)。我们在这里看到了什么?首先。命令[(Ab)] TJ在这里,所以打印命令是相同的:“打印 A,然后打印 b”。字体 CMR10 已下载。您可以剪切字体数据(从 到stream没有endstream它们)并应用t1disasm。然后您可以看到字体已部分加载,只有字母/A/b数字/one。而 是32 750 hsbw字母的/A。为什么 PDF 查看器知道使用了更正的度量?因为有一个包含数据的下一个对象。从第一个字符到 的[500 500 500 ... 555.6]宽度在这里。您可以看到第 17 个数字是 100。这是从更正的度量得到的 的宽度。PdfTeX 将数据从使用的度量复制到此对象进入 PDF 输出,PDF 查看器使用它们。/one=49/b=98/Atfm

为什么高度实验会给出正确的结果(使用修正的度量)?因为pfb字体不包含高度度量数据,并且所有垂直移位都由打印命令(在dvi或 在PDF)精确执行。

相关内容