字体与 FreeBSD
教程
摘要
本文档包含可用于 FreeBSD 和 syscons 驱动程序、X11、Ghostscript 和 Groff 的各种字体文件的描述。提供了用于将 syscons 显示切换到 80x60 模式以及在上述应用程序中使用 Type 1 字体的示例。
1. 引言
有许多可用的字体来源,人们可能会问如何与 FreeBSD 一起使用它们。答案可以通过仔细搜索想要使用的组件的文档来找到。这非常耗时,因此本教程试图为其他可能感兴趣的人提供一条捷径。
2. 基本术语
有许多不同的字体格式和相关的字体文件后缀。这里将讨论一些:
.pfa,.pfb PostScript® 类型 1 字体。 .pfa 是 Ascii 形式,.pfb 是二进制形式。
.afm 与类型 1 字体相关的字体度量。
.pfm 与类型 1 字体相关的打印机字体度量。
.ttf 一种 TrueType® 字体
.fot 对 TrueType 字体的间接引用(并非实际字体)
.fon, .fnt 点阵屏幕字体
Windows® 中使用.fot 作为对实际 TrueType® 字体(.ttf)文件的一种符号链接。.fon 字体文件也被 Windows 使用。我不知道如何在 FreeBSD 中使用这种字体格式。
3. 我可以使用哪些字体格式?
哪种字体文件格式有用取决于所使用的应用程序。FreeBSD 本身不使用字体。应用程序和/或驱动程序可以利用字体文件。这里是一个小的应用程序/驱动程序与字体类型后缀的交叉引用:
驱动程序 vt.hex
syscons.fnt
应用程序 Ghostscript.pfa, .pfb, .ttf
X11.pfa, .pfb
Groff.pfa, .afm
Povray.ttf
“.fnt”后缀经常使用。我怀疑每当有人想为他们的应用程序创建一个专用字体文件时,很可能会选择这个后缀。因此,使用这个后缀的文件很可能不是相同的格式;具体来说,在 FreeBSD 下由 syscons 使用的“.fnt”文件可能与在 MS-DOS®/Windows® 环境中遇到的“.fnt”文件不是相同的格式。我没有尝试使用 FreeBSD 提供的以外的其他“.fnt”文件。
设置虚拟控制台为 80x60 行模式
首先,必须加载 8x8 字体。为此,/etc/rc.conf 文件应包含以下行(将字体名称更改为适合你所在地区的恰当名称):
实际切换模式的命令是 vidcontrol(1):
各种面向屏幕的程序,如 vi(1),必须能够确定当前屏幕尺寸。由于这是通过 ioctl 调用控制台驱动程序(如 syscons(4))来实现的,它们将正确地确定新的屏幕尺寸。
为了使此过程更无缝,可以将这些命令嵌入启动脚本中,以便在系统启动时执行。要做到这一点,将此行添加到/etc/rc.conf 中。
引用:rc.conf(5),vidcontrol(1)。
5. 在 X11 中使用 Type 1 字体
X11 可以使用.pfa 或.pfb 格式字体。X11 字体位于/usr/X11R6/lib/X11/fonts 下的各个子目录中。每个字体文件都通过每个目录中的 fonts.dir 的内容与其 X11 名称进行交叉引用。
已经有一个名为 Type1 的目录了。添加新字体的最直接方法是将其放入此目录。更好的方法是将所有新字体放入单独的目录,并使用符号链接到额外的字体。这样可以更轻松地跟踪自己的字体,而不会与最初提供的字体混淆。例如:
现在,要在 X11 中使用新字体,必须使字体文件可用并更新字体名称文件。X11 字体名称看起来像:
每个新字体都需要创建一个新名称。如果你从字体附带的文档中获取了一些信息,那么可以用它作为创建名称的基础。如果没有信息,那么你可以通过对字体文件使用 strings(1)来获取一些想法。例如:
使用这些信息,可能的名称可能是:
我们名称的组成部分是:
FoundryLets 只是命名所有新字体 type1 。
家庭字体的名称。
重量正常,粗体,中等,半粗体等。从上面的字符串(1)输出来看,这个字体的重量是中等的。
斜体、意大利体、倾斜体等。由于 ItalicAngle 为零,将使用罗马体。
宽度正常、宽、压缩、扩展等。在无法检查之前,假设为正常。
附加样式通常省略,但这将表明字体包含装饰性大写字母。
间距比例或等宽。由于 isFixedPitch 为假,因此使用比例间距。
所有这些名称都是任意的,但是应该努力与现有的惯例保持兼容。一个字体通过一个 X11 程序通过名称引用,所以选择的名称应该有一定的意义。一个简单的方法是开始时使用“作为名称”,然后使用 xfontsel(1)来查看并根据字体的外观调整名称。
所以,为了完成我们的示例:
作为名称并根据字体的外观调整名称。
参考:xfontsel(1),xset(1),《X 窗口系统概述》,O’Reilly & Associates。
6. 使用 Ghostscript 与 Type 1 字体
Ghostscript 通过其 Fontmap 引用字体。必须以与 X11 fonts.dir 类似的方式进行修改。Ghostscript 可以使用.pfa 或.pfb 格式的字体。使用上一个示例中的字体,以下是如何在 Ghostscript 中使用它:
使用 Ghostscript 4.01 发布中的 fonts.txt 文件
7. 使用 Groff 与 Type 1 字体
既然新字体可以被 X11 和 Ghostscript 同时使用,那么如何在 groff 中使用新字体呢?首先,由于我们正在处理 Type 1 PostScript® 字体,适用的 groff 设备是 ps 设备。必须为 groff 可以使用的每种字体创建一个字体文件。groff 字体名称就是/usr/share/groff_font/devps 中的一个文件。在我们的例子中,字体文件可能是/usr/share/groff_font/devps/SHOWBOAT。文件必须使用 groff 提供的工具来创建。
第一个工具是 afmtodit 。这通常不会被安装,因此必须从源分发获取。我发现我需要更改文件的第一行,所以我这样做了:
这个工具将从指标文件(.afm 后缀)创建 groff 字体文件。继续我们的例子:
现在可以使用 SHOWBOAT 名称引用该字体。
如果 Ghostscript 用于驱动系统上的打印机,则不需要做其他操作。但是,如果使用真正的 PostScript® 打印机,则必须下载字体到打印机,以便使用该字体(除非打印机恰好内置了 showboat 字体或在可访问的字体磁盘上)。最后一步是创建可下载的字体。 pfbtops 工具用于创建字体的.pfa 格式,并修改下载以引用新字体。下载必须引用字体的内部名称,这可以很容易地从 groff 字体文件中确定,就像下面的示例一样:
当然,如果.pfa 已经可用,只需使用符号链接来引用它。
测试字体:
参考资料:/usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.man,groff_font(5),groff_char(7),pfbtops(1)。
8. 将 TrueType 字体转换为 groff/PostScript 格式以供 groff 使用
这可能需要一些工作,因为它依赖于一些未作为基础系统的一部分安装的实用工具。它们包括:
ttf2pf TrueType 到 PostScript 转换实用程序。这允许将 TrueType 字体转换为 ascii 字体度量 (.afm) 文件。
目前可在 http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/ 获取。注意:这些文件是 PostScript 程序,必须通过在单击链接时按住 Shift 键来下载到磁盘。否则,你的浏览器可能会尝试启动 ghostview 来查看它们。
感兴趣的文件为:
GS_TTF.PS
ttf2pf.ps 有趣的大/小写是因为它们也用于 DOSshells。ttf2pf.ps 利用其他部分作为大写字母,因此任何重命名都必须与此保持一致。(实际上,GS_TTF.PS 和 PFS2AFM.PS 据说是 Ghostscript 分发的一部分,但将它们用作独立工具同样方便。FreeBSD 似乎不包含后者。) 你还可能希望将这些安装到 /usr/local/share/groff_font/devps(?)。
afmtodit 从 ascii 字体度量文件创建 groff 使用的字体文件。它通常位于目录 /usr/src/contrib/groff/afmtodit 中,需要一些工作才能开始使用。
在工作区,你需要制作该实用程序。只需键入:
你可能还需要将 /usr/contrib/groff/devps/generate/textmap 复制到 /usr/share/groff_font/devps/generate,如果它尚不存在。
一旦所有这些实用程序就位,你就可以开始了:
通过输入以下内容创建 .afm:
在此处,TTF_name 是你的 TrueType 字体文件,PS_font_name 是.pfa 文件的文件名,AFM_name 是.afm 文件的名称。如果你没有指定.pfa 或.afm 文件的输出文件名,则将从 TrueType 字体文件名生成默认名称。
这也会生成一个.pfa 文件,即 ASCII 格式的 PostScript 字体度量文件(.pfb 为其二进制形式)。这不是必需的,但可能对字体服务器有用(我认为)。
例如,要使用默认文件名转换 30f9 条形码字体,请使用以下命令:
如果你希望将转换后的字体存储在 A.pfa 和 B.afm 中,请使用以下命令:
创建 groff PostScript 文件:切换到 /usr/share/groff_font/devps 目录,以便更轻松地执行以下命令。你可能需要 root 权限才能执行此操作。(或者,如果你对在这里工作感到不安全,请确保引用文件 DESC、text.enc 和 generate/textmap 存储在该目录中。)
其中,file.afm 是由上述 ttf2pf.ps 创建的 AFM 名称,而 PS_font_name 是从该命令中使用的字体名称,也是 groff(1) 引用此字体的名称。例如,假设你使用了上述第一个 tiff2pf.ps ,则可以使用以下命令创建 3of9 条形码字体:
确保生成的 PS_font_name 文件(例如,上面的 3of9 示例)位于/usr/share/groff_font/devps 目录中,通过复制或移动它到那里。
请注意,如果 ttf2pf.ps 使用 TrueType 字体文件中找到的字体名称,并且你希望使用不同的名称,你必须在运行 afmtodit 之前编辑.afm 文件。该名称还必须与 Fontmap 文件中使用的名称匹配,如果你希望将 groff(1)传输到 gs(1)中的话。
9. 可以将 TrueType 字体与其他程序一起使用吗?
TrueType 字体格式被 Windows、Windows 95 和 Mac 使用。它相当受欢迎,在这种格式中有大量可用的字体。
不幸的是,我所知道的应用程序中很少可以使用这种格式:Ghostscript 和 Povray 被提起。根据文档,Ghostscript 的支持是基本的,结果可能不如 Type 1 字体好。Povray 版本 3 也能够使用 TrueType 字体,但我怀疑不会有很多人会以一系列光线追踪页面的方式创建文件 :-)
这种相当令人沮丧的局面可能很快会发生改变。FreeType 项目目前正在开发一组实用的 FreeType 工具:
X11 的 xfsft 字体服务器可以除了常规字体外,还可以用于 TrueType 字体。尽管目前还在测试阶段,但据说已经相当可用。更多信息请参见 Juliusz Chroboczek 的页面。FreeBSD 的移植说明可以在 Stephen Montgomery 的软件页面找到。
xfstt 是另一个 X11 的字体服务器,可在 ftp://sunsite.unc.edu/pub/Linux/X11/fonts/上获取。
一个名为 ttf2bdf 的程序可以从 TrueType 文件生成适用于 X 环境的 BDF 文件。据说 Linux 二进制文件可以从 ftp://crl.nmsu.edu/CLR/multiling/General/获取。
及其他……
10. 哪里可以获得更多字体?
互联网上有许多字体。它们要么完全免费,要么是共享软件。此外,许多字体可以在 ports 中的 x11-fonts/ 目录下找到。
11. 其他问题
.pfm 文件有什么用处?
能否从 .pfa 或 .pfb 生成 .afm 文件?
如何为具有非标准字符名称的 PostScript 字体生成 groff 字符映射文件?
可以设置 xditview 和 devX??设备以访问所有新字体吗?
最好有一些使用 TrueType 字体与 Povray 和 Ghostscript 的示例。
最后更新于