font8x8="iso-8x8" # font 8x8 from /usr/share/syscons/fonts/* (or NO).
字体和 FreeBSD
教程
商标
FreeBSD 是 FreeBSD 基金会的注册商标。
Adobe、Acrobat、Acrobat Reader、Flash 和 PostScript 都是 Adobe Systems Incorporated 在美国和/或其他国家/地区的注册商标或商标。
Apple、AirPort、FireWire、iMac、iPhone、iPad、Mac、Macintosh、Mac OS、Quicktime 和 TrueType 是 Apple Inc. 的商标,在美国和其他国家/地区注册。
Linux 是 Linus Torvalds 的注册商标。
Microsoft、IntelliMouse、MS-DOS、Outlook、Windows、Windows Media 和 Windows NT 都是 Microsoft Corporation 在美国和/或其他国家/地区的注册商标或商标。
Motif、OSF/1 和 UNIX 是注册商标,IT DialTone 和 The Open Group 是 The Open Group 在美国和其他国家/地区的商标。
许多制造商和销售商用来区分其产品的名称都被宣称为商标。在本文件中出现这些名称的地方,FreeBSD 项目已经意识到商标声明,这些名称后面已经加上了“™”或“®”符号。
目录
摘要
本文档包含有关可与 FreeBSD 及 syscons 驱动程序、X11、Ghostscript 和 Groff 一起使用的各种字体文件的描述。还提供了用于将 syscons 显示切换到 80x60 模式以及在上述应用程序程序中使用 Type 1 字体的食谱示例。
2. 基本术语
有许多不同的字体格式和相关的字体文件后缀。这里将介绍其中一些:
- .pfa,.pfb
PostScript® Type 1 字体。 .pfa 是 Ascii 格式,.pfb 是 Binary 格式。
- .afm
与 Type 1 字体相关的字体度量。
- .pfm
与 Type 1 字体相关的打印机字体度量。
- .ttf
TrueType® 字体
- .fot
对 TrueType 字体的间接引用(不是实际的字体)
- .fon,.fnt
位图屏幕字体
Windows® 使用 .fot 作为对实际 TrueType® 字体 (.ttf) 文件的一种符号链接。Windows 还使用 .fon 字体文件。我知道在 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 文件格式不同。我没有尝试使用其他 .fnt 文件,除了 FreeBSD 提供的那些。
4. 将虚拟控制台设置为 80x60 行模式
首先,必须加载一个 8x8 字体。为此, /etc/rc.conf 应该包含以下行(将字体名称更改为适合您语言环境的名称)
实际上切换模式的命令是 vidcontrol(1)
% vidcontrol VGA_80x60
各种面向屏幕的程序,例如 vi(1),必须能够确定当前屏幕尺寸。由于这是通过对控制台驱动程序(例如 syscons(4))的 ioctl
调用来实现的,因此它们将正确确定新的屏幕尺寸。
为了使操作更无缝,可以将这些命令嵌入到启动脚本中,以便在系统启动时执行这些命令。为此,请将以下行添加到 /etc/rc.conf 中。
allscreens_flags="VGA_80x60" # Set this vidcontrol mode for all virtual screens
参考资料: rc.conf(5), vidcontrol(1)。
5. 在 X11 中使用 Type 1 字体
X11 可以使用 .pfa 或 .pfb 格式的字体。X11 字体位于 /usr/X11R6/lib/X11/fonts 下的各个子目录中。每个字体文件都通过每个目录中的 fonts.dir 内容交叉引用到其 X11 名称。
已经有一个名为 Type1 的目录。添加新字体的最直接方法是将其放入该目录中。更好的方法是将所有新字体保留在单独的目录中,并使用符号链接到该目录中的其他字体。这样,就可以更容易地跟踪自己的字体,而不会与最初提供的字体混淆。例如
Create a directory to contain the font files
% mkdir -p /usr/local/share/fonts/type1
% cd /usr/local/share/fonts/type1
Place the .pfa, .pfb and .afm files here
One might want to keep readme files, and other documentation
for the fonts here also
% cp /cdrom/fonts/atm/showboat/showboat.pfb .
% cp /cdrom/fonts/atm/showboat/showboat.afm .
Maintain an index to cross reference the fonts
% echo showboat - InfoMagic CICA, Dec 1994, /fonts/atm/showboat >>INDEX
现在,要使用 X11 中的新字体,必须使字体文件可用并更新字体名称文件。X11 字体名称类似于
-bitstream-charter-medium-r-normal-xxx-0-0-0-0-p-0-iso8859-1 | | | | | | | | | | | | \ \ | | | | | \ \ \ \ \ \ \ +----+- character set | | | | \ \ \ \ \ \ \ +- average width | | | | \ \ \ \ \ \ +- spacing | | | \ \ \ \ \ \ +- vertical res. | | | \ \ \ \ \ +- horizontal res. | | | \ \ \ \ +- points | | | \ \ \ +- pixels | | | \ \ \ foundry family weight slant width additional style
需要为每个新字体创建一个新名称。如果您从与字体一起提供的文档中获得了一些信息,那么它可以作为创建名称的基础。如果没有信息,那么可以使用 strings(1) 在字体文件中获取一些信息。例如
% strings showboat.pfb | more
%!FontType1-1.0: Showboat 001.001
%%CreationDate: 1/15/91 5:16:03 PM
%%VMusage: 1024 45747
% Generated by Fontographer 3.1
% Showboat
1991 by David Rakowski. Alle Rechte Vorbehalten.
FontDirectory/Showboat known{/Showboat findfont dup/UniqueID known{dup
/UniqueID get 4962377 eq exch/FontType get 1 eq and}{pop false}ifelse
{save true}{false}ifelse}{false}ifelse
12 dict begin
/FontInfo 9 dict dup begin
/version (001.001) readonly def
/FullName (Showboat) readonly def
/FamilyName (Showboat) readonly def
/Weight (Medium) readonly def
/ItalicAngle 0 def
/isFixedPitch false def
/UnderlinePosition -106 def
/UnderlineThickness 16 def
/Notice (Showboat
1991 by David Rakowski. Alle Rechte Vorbehalten.) readonly def
end readonly def
/FontName /Showboat def
--stdin--
根据这些信息,一个可能的名称可能是
-type1-Showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1
我们名称的组成部分是
- 铸造厂
我们只需将所有新字体命名为
type1
。- 族
字体的名称。
- 权重
普通、粗体、中等、半粗体等。从上面的 strings(1) 输出可以看出,该字体的权重为 中等。
- 斜体
罗马、斜体、倾斜等。由于 ItalicAngle 为零,因此将使用 罗马。
- 宽度
普通、宽、紧缩、扩展等。在进行检查之前,假设为 普通。
- 其他样式
通常省略,但这将指示字体包含装饰性大写字母。
- 间距
等宽或等宽。由于 isFixedPitch 为假,因此使用 等宽。
所有这些名称都是任意的,但应该努力与现有约定保持一致。字体通过名称(可能包含通配符)被 X11 程序引用,因此选择的名称应该有一定的意义。可以简单地从
...-normal-r-normal-...-p-...
作为名称,然后使用 xfontsel(1) 检查它,并根据字体的外观调整名称。
因此,要完成我们的示例
Make the font accessible to X11
% cd /usr/X11R6/lib/X11/fonts/Type1
% ln -s /usr/local/share/fonts/type1/showboat.pfb .
Edit fonts.dir and fonts.scale, adding the line describing the font
and incrementing the number of fonts which is found on the first line.
% ex fonts.dir
:1p
25
:1c
26
.
:$a
showboat.pfb -type1-showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1
.
:wq
fonts.scale seems to be identical to fonts.dir...
% cp fonts.dir fonts.scale
Tell X11 that things have changed
% xset fp rehash
Examine the new font
% xfontsel -pattern -type1-*
参考资料: xfontsel(1), xset(1),Nutshell 中的 X 窗口系统,O’Reilly & Associates。
6. 在 Ghostscript 中使用 Type 1 字体
Ghostscript 通过 Fontmap 引用字体。这必须以类似于 X11 fonts.dir 的方式进行修改。Ghostscript 可以使用 .pfa 或 .pfb 格式的字体。使用前面示例中的字体,以下是如何在 Ghostscript 中使用它
Put the font in Ghostscript's font directory
% cd /usr/local/share/ghostscript/fonts
% ln -s /usr/local/share/fonts/type1/showboat.pfb .
Edit Fontmap so Ghostscript knows about the font
% cd /usr/local/share/ghostscript/4.01
% ex Fontmap
:$a
/Showboat (showboat.pfb) ; % From CICA /fonts/atm/showboat
.
:wq
Use Ghostscript to examine the font
% gs prfont.ps
Aladdin Ghostscript 4.01 (1996-7-10)
Copyright (C) 1996 Aladdin Enterprises, Menlo Park, CA. All rights
reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Loading Times-Roman font from /usr/local/share/ghostscript/fonts/tir_____.pfb...
/1899520 581354 1300084 13826 0 done.
GS>Showboat DoFont
Loading Showboat font from /usr/local/share/ghostscript/fonts/showboat.pfb...
1939688 565415 1300084 16901 0 done.
>>showpage, press <return> to continue<<
>>showpage, press <return> to continue<<
>>showpage, press <return> to continue<<
GS>quit
参考资料: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
。这通常不会安装,因此必须从源代码发行版中检索它。我发现我必须更改文件的第一行,所以我做了
% cp /usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.pl /tmp
% ex /tmp/afmtodit.pl
:1c
#!/usr/bin/perl -P-
.
:wq
此工具将根据度量文件 (.afm 后缀) 创建 Groff 字体文件。继续我们的示例
Many .afm files are in Mac format... ^M delimited lines
We need to convert them to UNIX(R) style ^J delimited lines
% cd /tmp
% cat /usr/local/share/fonts/type1/showboat.afm |
tr '\015' '\012' >showboat.afm
Now create the groff font file
% cd /usr/share/groff_font/devps
% /tmp/afmtodit.pl -d DESC -e text.enc /tmp/showboat.afm generate/textmap SHOWBOAT
现在可以使用名称 SHOWBOAT 引用该字体。
如果 Ghostscript 用于驱动系统上的打印机,那么就不需要做任何其他操作。但是,如果使用的是真正的 PostScript® 打印机,那么必须将字体下载到打印机,才能使用该字体(除非打印机恰好内置了 showboat 字体,或者在可访问的字体磁盘上)。最后一步是创建一个可下载的字体。 pfbtops
工具用于创建字体的 .pfa 格式,并且 download 被修改为引用新字体。 download 必须引用字体的内部名称。这可以从 Groff 字体文件中轻松确定,如以下所示
Create the .pfa font file
% pfbtops /usr/local/share/fonts/type1/showboat.pfb >showboat.pfa
当然,如果 .pfa 已经可用,只需使用符号链接来引用它。
Get the internal font name
% fgrep internalname SHOWBOAT
internalname Showboat
Tell groff that the font must be downloaded
% ex download
:$a
Showboat showboat.pfa
.
:wq
要测试字体
% cd /tmp
% cat >example.t <<EOF
.sp 5
.ps 16
This is an example of the Showboat font:
.br
.ps 48
.vs (\n(.s+2)p
.sp
.ft SHOWBOAT
ABCDEFGHI
.br
JKLMNOPQR
.br
STUVWXYZ
.sp
.ps 16
.vs (\n(.s+2)p
.fp 5 SHOWBOAT
.ft R
To use it for the first letter of a paragraph, it will look like:
.sp 50p
\s(48\f5H\s0\fRere is the first sentence of a paragraph that uses the
showboat font as its first letter.
Additional vertical space must be used to allow room for the larger
letter.
EOF
% groff -Tps example.t >example.ps
To use ghostscript/ghostview
% ghostview example.ps
To print it
% lpr -Ppostscript example.ps
参考资料: /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
PF2AFM.PS
ttf2pf.ps
奇怪的大小写是因为它们也适合 DOS shell。 ttf2pf.ps 将其他文件用作大写字母,因此任何重命名都必须与之保持一致。(实际上,GS_TTF.PS 和 PFS2AFM.PS 据说是 Ghostscript 分发版的一部分,但将它们用作独立的实用程序一样容易。FreeBSD 似乎不包含后者。)您可能还想将它们安装到 /usr/local/share/groff_font/devps(?)。
afmtodit
从 ASCII 字体度量文件创建供 groff 使用的字体文件。这通常位于 /usr/src/contrib/groff/afmtodit 目录中,需要一些工作才能启动。
如果您对在 /usr/src 树中工作感到担忧,只需将上述目录的内容复制到工作位置。
在工作区域中,您需要制作实用程序。只需键入
# make -f Makefile.sub afmtodit
您可能还需要将 /usr/contrib/groff/devps/generate/textmap 复制到 /usr/share/groff_font/devps/generate,如果它不存在。
一旦所有这些实用程序到位,您就可以开始
通过键入以下内容创建 .afm
% gs -dNODISPLAY -q -- ttf2pf.ps TTF_name PS_font_name AFM_name
其中,TTF_name 是您的 TrueType 字体文件,PS_font_name 是 .pfa 的文件名,AFM_name 是您希望为 .afm 指定的名称。如果您没有为 .pfa 或 .afm 文件指定输出文件名,则将从 TrueType 字体文件名生成默认名称。
这也生成一个 .pfa,即 ASCII PostScript 字体度量文件 (.pfb 用于二进制形式)。这将不需要,但可能(我认为)对字体服务器有用。
例如,要使用默认文件名转换 30f9 条形码字体,请使用以下命令
% gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf Aladdin Ghostscript 5.10 (1997-11-23) Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved. This software comes with NO WARRANTY: see the file PUBLIC for details. Converting 3of9.ttf to 3of9.pfa and 3of9.afm.
如果您希望将转换后的字体存储在 A.pfa 和 B.afm 中,请使用此命令
% gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf A B Aladdin Ghostscript 5.10 (1997-11-23) Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved. This software comes with NO WARRANTY: see the file PUBLIC for details. Converting 3of9.ttf to A.pfa and B.afm.
创建 groff PostScript 文件
更改到 /usr/share/groff_font/devps 目录,以便更容易执行以下命令。您可能需要 root 权限才能执行此操作。(或者,如果您对在那里工作感到担忧,请确保您引用文件 DESC、text.enc 和 generate/textmap 位于此目录中。)
% afmtodit -d DESC -e text.enc file.afm generate/textmap PS_font_name
其中,file.afm 是上面
ttf2pf.ps
创建的 AFM_name,PS_font_name 是从该命令中使用的字体名称,以及 groff(1) 将用于引用此字体的名称。例如,假设您使用了上面第一个tiff2pf.ps
,那么可以使用以下命令创建 3of9 条形码字体% afmtodit -d DESC -e text.enc 3of9.afm generate/textmap 3of9
通过复制或移动它来确保生成的 PS_font_name 文件(例如,上面示例中的 3of9)位于 /usr/share/groff_font/devps 目录中。
9. TrueType 字体能否与其他程序一起使用?
TrueType 字体格式用于 Windows、Windows 95 和 Mac。它非常流行,并且有大量此格式的字体可用。
不幸的是,我知道的很少有应用程序可以使用这种格式:Ghostscript 和 Povray 跃入脑海。根据文档,Ghostscript 的支持是基本的,结果可能不如类型 1 字体。Povray 版本 3 也具有使用 TrueType 字体的能力,但我不太确定有多少人会将文档创建为一系列光线跟踪页面:-)。
这种相当糟糕的状况可能很快就会改变。 FreeType 项目 目前正在开发一套有用的 FreeType 工具
用于 X11 的
xfsft
字体服务器除了常规字体之外还可以提供 TrueType 字体。虽然目前处于测试阶段,但据说它非常可用。请参阅 Juliusz Chroboczek 的页面 以获取更多信息。可以在 Stephen Montgomery 的软件页面 找到 FreeBSD 的移植说明。xfstt 是另一个用于 X11 的字体服务器,可在 ftp://sunsite.unc.edu/pub/Linux/X11/fonts/ 获取。
一个名为
ttf2bdf
的程序可以从 TrueType 文件生成适用于 X 环境的 BDF 文件。据说可以在 ftp://crl.nmsu.edu/CLR/multiling/General/ 获取 Linux 二进制文件。等等…
11. 更多问题
.pfm 文件有什么用?
能否从 .pfa 或 .pfb 生成 .afm?
如何为具有非标准字符名称的 PostScript 字体生成 groff 字符映射文件?
能否设置 xditview 和 devX?? 设备以访问所有新字体?
最好有使用 TrueType 字体与 Povray 和 Ghostscript 的示例。
最后修改时间:2021 年 11 月 3 日,作者:Sergio Carlavilla Delgado