我最近读过这个非常有趣的帖子:(La)TeX 在选择字体时如何使用字体相关文件,即 .fd、.map、.enc、.def 等?。
与此同时,我一直在尝试编译(为了好玩).mf
在我的 MiKTeX 发行版中找到的 MetaFont 文件。
例如,我编译了该文件cmr10.mf
,并生成了文件cmr10.2602gf
,该文件似乎具有上述线程中提到的文件类型之一(.gf
或类似文件)。
现在,假设.gf
文件是 MetaFont 的输出(或者不是?),
- 它们有什么用途?它们只能
.pk
通过转换为文件吗gftopk
? - 文件到底是什么
.pk
以及它们有什么用途?(egreg 的回答没有提到这个文件类型) - 我如何从 MetaFont 输出中获取字体度量
.tfm
文件.vf
,因为我似乎从该线程中了解到这些是 LaTeX 搜索的“真实”字体文件?
答案1
如果您使用的是 metafont 字体(这种字体越来越少见),那么原始源是用 MetaFont 编写的。使用 metafont 处理该源会产生两个文件:一个tfm
文件对字体度量进行编码(本质上只是每个字符的大小,以及有关连字和字距的信息,没有关于形状的信息),另一个gf
文件包含指定分辨率的位图序列(需要指定给 metafont,通常作为打印机配置的一部分)。(默认情况下,分辨率记录在文件扩展名中,因此您的问题中就有这个例子)
tfm 文件可由 TeX 直接读取,但很少有程序可以直接读取 gf 字体,因此它们几乎总是立即转换为 pk(打包)格式,该格式以更压缩的形式包含相同的信息,并且可以由 dvips 或 xdvi 等 dvi 驱动程序读取。
因此,最终结果是您可以生成与您所使用的打印机精确匹配的位图 pk 字体,不仅仅是基本分辨率,还有“黑度”控制,即打印机处理细线或紧密线条的能力,如果需要,metafont 会生成线条较粗的位图等。对于在纸上打印,这会产生非常高质量的输出,对于在屏幕上查看,如果您具有高分辨率并合理地对位图进行采样和抗锯齿以达到屏幕分辨率,它可以产生良好的效果,就像 dviview 或 xdvi 所做的那样,但早期版本的 acrobat 使位图字体或多或少变得不可读,这增加了开发 type1 和其他可扩展格式版本的 TeX 字体的紧迫性,这是当今最常用的形式。
要查看位图如何适应每台打印机,请查看modes.mf
/usr/local/texlive/2013/texmf-dist/metafont/misc/modes.mf
在我的系统上
这是一个很长的文件,其中包含以下信息:
% From {\tt ..........compulink.co.uk}, 9 February 1994.
mode_def bjtenex = %\[ Canon BubbleJet 10ex (360dpi)
mode_param (pixels_per_inch, 360);
mode_param (blacker, .6);
mode_param (fillin, 0);
mode_param (o_correction, .6);
mode_common_setup_;
enddef;
它告诉 metafont 如何制作适合特定打印机型号的位图。(您可以看到,这对于将 pdf 放在网络上以供在任何地方打印来说并不理想)
pixels_per_inch
是解决方案
blacker
是衡量在此设备上打印时细线需要变黑(即变粗)多少才会消失的标准。
fillin
控制对角线,使得角落的角度保持锐利,而不是作为分辨率的伪影而被“填充”。
o_correction
是超调校正,用于控制曲线是否应超出边界框(在高分辨率下效果比低分辨率下更好)
这些模式校正对 tfm 文件中的字体度量没有影响,因此 tex 在所有情况下都会生成相同的 dvi 文件,但 dvips 会使用它们来提取特定于打印机的位图,具体取决于 PostScript 所针对的打印机。