我在文档中使用了一个巨大的字母(字体为\mathscr
),尽管字母很大,但我对字母的质量感到震惊。所有这些细节是如何存储的?为什么字母在某个点之后看起来没有像素化?这可能非常简单,但我对这个问题属于哪个领域一无所知。
答案1
您也许会更加惊讶地发现,LaTeX 对于用于排版文档的字体知之甚少。
为了排版文档,TeX 只需要字符边界框、连字、斜体校正、字体间距等信息。字符的形状(字形)不是 TeX 所担心的。
在 PDF 出现之前,这一点更为明显。经典的 TeX 曾经(现在仍然可以)将排版信息存储在 DVI 文件中(名称代表“设备无关”)。此文件可用于查看或打印,可能需要转换为与设备相关的格式。
在过去,对于连接到计算机的每个打印设备,都必须使用为该特定设备编写的合适驱动程序。您仍然可以在 TeX Live 中找到以下程序dvihp
:dvilj
惠普开发了一种名为 PCL 的页面描述语言,这些程序使用该语言将 DVI 文件转换为可以发送到打印机(分别为 HP 或 LJ)的内容。
然而,当 Adobe 发布 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,它与设备无关,特别是与分辨率无关。这种格式是保密的,以便 Adobe 可以出售其高质量字体。但后来 Type1 格式被逆向工程,Adobe 输掉了对“肇事者”的诉讼,并在某种意义上被迫公开该格式。
此后不久,Blue Sky Research 首次将 Computer Modern 字体转换为 Type1 格式。这是为了让 Textures(他们为 Macintosh 开发的 TeX 引擎)能够使用 Adobe Type Manager(只能处理 Type1 字体)并在屏幕上显示字体轮廓或以尽可能少的像素化打印它们。
Rokicki 还提供了一个小工具,用于将 Adobe 字体指标转换为 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 格式。不过,TrueType 字体也是允许的。这种格式是苹果和微软联合开发的项目,旨在减少对 Adobe 的依赖。苹果提供了其实验性的 GX 字体技术,XeTeX 的第一个版本就是基于该技术。但原始模型仍然适用于 XeTeX 和 LuaTeX。排版时,引擎不需要知道任何有关字形的信息;只有 PDF 制作最终才需要它们。