字体如何在 LaTeX 上“存储”?

字体如何在 LaTeX 上“存储”?

我在文档中使用了一个巨大的字母(字体为\mathscr),尽管字母很大,但我对字母的质量感到震惊。所有这些细节是如何存储的?为什么字母在某个点之后看起来没有像素化?这可能非常简单,但我对这个问题属于哪个领域一无所知。

答案1

您也许会更加惊讶地发现,LaTeX 对于用于排版文档的字体知之甚少。

为了排版文档,TeX 只需要字符边界框、连字、斜体校正、字体间距等信息。字符的形状(字形)不是 TeX 所担心的。

在 PDF 出现之前,这一点更为明显。经典的 TeX 曾经(现在仍然可以)将排版信息存储在 DVI 文件中(名称代表“设备无关”)。此文件可用于查看或打印,可能需要转换为与设备相关的格式。

在过去,对于连接到计算机的每个打印设备,都必须使用为该特定设备编写的合适驱动程序。您仍然可以在 TeX Live 中找到以下程序dvihpdvilj惠普开发了一种名为 PCL 的页面描述语言,这些程序使用该语言将 DVI 文件转换为可以发送到打印机(分别为 HP 或 LJ)的内容。

然而,当 Adob​​e 发布 PostScript 时,情况开始发生变化。越来越多的打印设备生产商开始使用 PostScript 语言,而由于 Tom Rokicki 编写了 ,TeX 世界已经习惯了使用它dvips

设备驱动程序如何处理字体与 TeX 无关。但 TeX 从一开始就需要字体:没有字体,就无法打印。事实上,Donald Knuth 还编写了一个 TeX 的姊妹程序,即 METAFONT,旨在制作字体。

在 TeX 和 METAFONT 开发的时候,也就是 20 世纪 70 年代末,位图是唯一可用于存储字体的技术。这是仅有的METAFONT 的输出格式(除了 TeX 所需的字体信息)。而且,在 Knuth 的设想中,您需要为每种打印机型号准备一个参数文件,以便调整位图字体。

然而,PostScript 对字体有不同的看法:它根据字符的轮廓来考虑字符:曲线(通常是样条线)界定了要用墨水填充的平面区域;但它也允许不同的格式,而 Rokicki 的工作之一是提供从位图 METAFONT 的 PK 文件到 PostScript Type3 字体的透明转换。

因此,通常情况下,如果你有一台能够理解 PostScript 的 300dpi 激光打印机,dvips驱动程序会在必要时使用cx模式生成缺失的位图字体

% This applies to the LaserWriter Plus, HP LaserJet, HP LaserJet Plus,
% and also the Canon LBP-LX engine, in the LaserJet IIP, QMS 410,
% and Apple Personal LaserWriter, and also to the CanonSX engine,
% in the LaserWriter II family.  And {\tt [email protected]}
% says it works well for the ``enhanced-resolution'' LaserJet III.
% {\tt [email protected]} is developing a mode for the Canon EX engine
% inside an Apple Pro 630 printer.
mode_def cx =                       %\[ Canon CX, SX, LBP-LX (300dpi)
  mode_param (pixels_per_inch, 300);
  mode_param (blacker, 0);
  mode_param (fillin, .2);
  mode_param (o_correction, .6);
  mode_common_setup_;
enddef;
CanonCX := cx;
corona := cx;
dp := cx; % some kind of DataProducts
hplaser := cx;
imagen := cx;
kyocera := cx;
laserwriter := cx;

如您所见,激光引擎实际上只有一个供应商,因此这些打印机的模式可以共享。

但是 PostScript 更喜欢轮廓字体而不是位图,并且它有自己的字体格式,称为 Type1,它与设备无关,特别是与分辨率无关。这种格式是保密的,以便 Adob​​e 可以出售其高质量字体。但后来 Type1 格式被逆向工程,Adobe 输掉了对“肇事者”的诉讼,并在某种意义上被迫公开该格式。

此后不久,Blue Sky Research 首次将 Computer Modern 字体转换为 Type1 格式。这是为了让 Textures(他们为 Macintosh 开发的 TeX 引擎)能够使用 Adob​​e Type Manager(只能处理 Type1 字体)并在屏幕上显示字体轮廓或以尽可能少的像素化打印它们。

Rokicki 还提供了一个小工具,用于将 Adob​​e 字体指标转换为 TeX 字体指标,以便能够直接在 TeX 中使用 PostScript 字体。

METAFONT 定义的绝大部分字体都已经数字化,并转换为 Type1 所需的轮廓。这是后续发展的必要步骤。

进入PDF。

PDF 格式源自 PostScript,允许独立于设备的查看或打印。Hàn Thê Thành 在其博士论文中开发了一种可输出 PDF 文件的 TeX 版本。

这要求将字体文件(部分)嵌入 PDF 文件,但这并不会使文档顶部的声明无效。我们可以大致将 TeX/LaTeX 生成的 PDF 文件视为 TeX 和 的联合工作dvips。此生成的 TeX 部分仍然依赖于对字形的了解,而只依赖于对它们的边界框和相关内容(斜体校正、连字、字体间距参数)的了解。

当一页被发送到 PDF 文件时,会记录所需字体的信息,并且在作业结束时,所需字体会嵌入到 PDF 文件中。

无像素化仍然需要 Type1 字体或其后代 OpenType 格式。不过,Tru​​eType 字体也是允许的。这种格式是苹果和微软联合开发的项目,旨在减少对 Adob​​e 的依赖。苹果提供了其实验性的 GX 字体技术,XeTeX 的第一个版本就是基于该技术。但原始模型仍然适用于 XeTeX 和 LuaTeX。排版时,引擎不需要知道任何有关字形的信息;只有 PDF 制作最终才需要它们。

相关内容