下一步 上一步 目录

3. 在屏幕上显示我们的字符

3.1 字符集 ``ISO Latin 2''

ISO 8859-2 或 ISO Latin 2 是 ISO 8859 八位字符集家族的成员,该家族涵盖了字母文字的需求(拉丁字母和西里尔字母以及阿拉伯语、希伯来语和希腊语文字;亚美尼亚语和格鲁吉亚语文字也在准备中)。该家族由欧洲计算机制造商协会 (European Computer Manufacturer's Association, ECMA) 设计,并由位于日内瓦的标准化组织 ISO 确认为国际标准。

ISO Latin 2 字符集包含用阿尔巴尼亚语、英语、波斯尼亚语、捷克语、芬兰语、克罗地亚语、爱尔兰语、卢萨蒂亚塞尔维亚语、匈牙利语、德语、波兰语、罗马尼亚语、斯洛伐克语、斯洛文尼亚语以及拉丁转写的塞尔维亚语书写所需的所有字符。

一些硬件和软件制造商,包括 IBM、Apple 和 Microsoft,使用他们自己的代码页来编码中欧和东欧民族的字符。这些代码页通常彼此不兼容,也与 ISO 标准不兼容。

3.2 控制台

系统控制台的字符集可以在荷兰埃因霍温大学 Andries Brouwer 的 kbd 软件包中找到。该软件包是所有 Linux 发行版的一部分,并在系统安装时自动加载。字体和转换表存储在 /usr/lib/kbd 目录中。(喜欢冒险的用户可以使用 Yann Dirson 的原型 Linux Console Tools 代替 kbd 软件包。)

在较旧的 Slackware 发行版中,编译后的软件包名为 keytbls。我们像安装其他软件包一样安装它,使用命令 pkgtoolinstallpkg

一旦我们安装了软件包,我们就可以使用 setfont 命令在屏幕上选择不同的字体。下面的示例选择了一种字体,其字符集符合 ISO Latin 2 标准,大小为 16 像素

setfont lat2-16
我们感兴趣的字体是 iso02.f08、iso02.f14 和 iso02.f16,以及 lat2-08.psf、lat2-10.psf、lat2-12.psf、lat2-14.psf 和 lat2-16.psf(在 setfont 命令中可以省略 .psf 扩展名)。

所选字体在控制台的所有虚拟终端(参见 console(4))中有效。如果我们不喜欢这样,而是希望在每个虚拟终端中都有自己的字体,我们可以使用 Ian Zimmerman 的 vtfontd 程序。每次我们离开虚拟终端时,它都会保存选定的控制台字体,并在我们返回时恢复它。

ftp://sizif.mf.uni-lj.si/pub/linux/vtfontd-1.0.1.tar.gz

通过选择字体,我们只完成了在文本环境中用斯洛文尼亚语书写所需的所有工作的三分之一左右。我们至少还必须执行键盘映射,并允许在命令 shell 中输入八位字符。心急的读者可以在“键盘”章节的 控制台 部分和关于命令 shell 的章节中 bash 部分阅读必要的内容。

3.3 X 窗口系统

使用 X Window System 和 XFree86 服务器安装带有我们字符的字体的简短说明。

  1. 从最近的 FTP 服务器下载字体
    ftp://ftp.arnes.si/software/unix/Latin-2-fonts/
    ISO8859-2-bdf.tar.gz 文件包含最完整的 ISO 8859-2 编码字体集,而 xfonts-iso2-0.84.tar.gz 也包含大多数有用的字体。按照常规步骤 (tar -xzf ...) 解压缩并解包它们。
  2. 在目录树结构中为带有我们字符的字体分配一个位置。通常是 /usr/X11R6/lib/X11/fonts/ 目录中的子目录(有时也可能是 /usr/lib/X11/fonts/、/usr/lib/X11R6/lib/X11/fonts 或甚至是 /usr/X386/lib/X11/fonts/,但这不应困扰我们)。可能的例子
    /usr/X11R6/lib/X11/fonts/iso_8859.2/75dpi/
    /usr/X11R6/lib/X11/fonts/iso_8859.2/100dpi/
    /usr/X11R6/lib/X11/fonts/iso_8859.2/misc/
    
    如果还没有具有此名称的目录,请创建它们。
  3. X 服务器无法使用与分发格式相同的字体格式,因此我们必须使用 bdftopcf 程序将它们从 BDF(二进制分发格式)格式转换为 PCF(可移植编译格式)格式。较旧版本的 X Window System 使用 SNF(服务器本机格式)代替后者,但今天已不再使用。
    for FILE in *.bdf
    do
      bdftopcf $FILE -o `basename $FILE .bdf`.pcf
    done
    

    (是的,bash 中的命令也可以跨越多行)。我们不再需要 BDF 格式的字体,可以删除它们。
  4. X 服务器可以使用压缩的字体文件,我们可以利用这一点并节省一些磁盘空间。
    gzip *.pcf
    
    较旧版本的 X 服务器仅支持使用 compress 进行压缩。
  5. 在每个字体目录中,服务器都期望有一个 fonts.dir 文件,该文件提供字体描述(X 逻辑字体描述,XLFD)和文件名之间的映射。我们使用以下命令创建它
    mkfontdir
    
    我们必须在每个字体子目录中运行该命令。
  6. 最后,我们可以通知服务器我们已安装新字体,我们使用 xset 命令执行此操作
    xset +fp /usr/X11R6/lib/X11/fonts/iso_8859.2/75dpi/
    xset +fp /usr/X11R6/lib/X11/fonts/iso_8859.2/100dpi/
    xset +fp /usr/X11R6/lib/X11/fonts/iso_8859.2/misc/
    xset fp rehash
    
    如果一切顺利,xlsfonts -fn "*-iso8859-2" 命令应显示所有新安装字体的列表。
  7. xset 命令仅在退出 X Window System 之前有效。我们通过修改配置文件来实现永久更改。 XFree86 服务器将其设置存储在 /etc/XF86Config 文件中(这些行的作者在多年使用不同发行版的 XFree86 中,也曾在 /etc/X11/XF86Config、/usr/X11R6/lib/X11/XF86config 和 /usr/X11/lib/X11/Xconfig 文件中看到过设置)。我们找到字符串 FontPath 并添加行
    FontPath "/usr/X11R6/lib/X11/fonts/iso_8859.2/75dpi"
    FontPath "/usr/X11R6/lib/X11/fonts/iso_8859.2/100dpi"
    FontPath "/usr/X11R6/lib/X11/fonts/iso_8859.2/misc"
    

就这样。从现在开始,X Window System 将能够在程序请求时显示我们的字符。有关如何准备程序(例如 xterm)以使其请求我们的字符的更多信息,请阅读终端仿真器章节的 xterm 部分。

3.4 X11 下的 PostScript

X 服务器可以使用 PCF、SNF 和 BDF 格式的栅格字体以及 Speedo 和 Type 1 格式的矢量字体。在小尺寸(最多 10 印刷点)下,栅格字体在屏幕上通常更漂亮,而在较大尺寸下,例如在图形程序中,矢量字体明显更漂亮。

Peter Soos 准备了一些 ISO Latin 2 代码布局的 Type 1 矢量字体。在安装过程中,我们完全遵循 在屏幕上显示我们的字符 章节的 X Window System 部分中描述的过程。从服务器下载 zip 格式的文件

ftp://ftp.arnes.si/software/unix/Latin-2-fonts/l2pfb005.zip

捷克小组收集了更多字体,RPM 包(使用命令 rpm -Uvh ... 安装内容)可以在以下位置找到

ftp://crash.fce.vutbr.cz/pub/linux_fonts/X11fonts-ulT1mo-beta-1.0-4.noarch.rpm

创建一个新目录,例如 /usr/X11R6/lib/X11/fonts/iso_8859.2/Type1,并将 l2pfb004.zip 存档的内容放入其中。作者已经准备好了 fonts.scale 和 fonts.dir 文件。使用 xset 重复该练习,并在配置文件中添加行

FontPath "/usr/X11R6/lib/X11/fonts/iso_8859.2/Type1"
这次从 X Window System 窗口环境运行 xfontsel 而不是 xlsfonts。如果我们按第一个列 (fndry) 中的 ``字体厂商'' (英文 type foundry) sp(根据作者的首字母)搜索,我们可以最快地找到新安装的字体。选择一些大的放大倍数 (pxlsz) 并与栅格字体进行比较!

3.5 X11 下的 TrueType

TrueType 字体的光栅化器还不是 X Window System 软件包的标准部分。The XFree86 Project, Inc. 的伙计们计划在 XFree86 4.0 版本中包含对它们的支持。

Freetype 和 xfsft

Mark Leisher 和 Juliusz Chroboczek 使用 FreeType 补充了来自 X Window System 环境的标准字体服务器,FreeType 是 David Turner、Robert Wilhelm、Werner Lemberg 及其同事编写的 TrueType 字体的免费光栅化器。服务器可以作为源代码使用,您可以使用它来修补 X 服务器的源代码,也可以作为 Linux 的预编译程序使用。

http://www.freetype.org/
http://www.dcs.ed.ac.uk/home/jec/programs/xfsft/

我们将假设您已经以某种方式成功获得了 xfsft 可执行文件。

  1. 创建一个 TrueType 字体的目录,例如 /usr/X11R6/lib/X11/fonts/TrueType/,并将 TrueType 字体文件复制到其中。
  2. 在上述目录中,创建一个 fonts.scale 文件。此类文件的简单示例如下
    5
    times.ttf -monotype-times-medium-r-normal--0-0-0-0-p-0-iso8859-1
    times.ttf -monotype-times-medium-r-normal--0-0-0-0-p-0-iso8859-2
    times.ttf -monotype-times-medium-r-normal--0-0-0-0-p-0-iso8859-5
    times.ttf -monotype-times-medium-r-normal--0-0-0-0-p-0-koi8-r
    times.ttf -monotype-times-medium-r-normal--0-0-0-0-p-0-iso10646-1
    

    我们可以注意到,所有五行都引用同一个文件。它们仅在代码集中有所不同。由于该文件包含所有必需的字符,因此字体服务器可以将其呈现给应用程序,作为任何五个列出的代码集。Joerg Pomnitz 编写了一个名为 ttmkfdir 的小程序,它可以自动扫描所有 TrueType 文件并创建 fonts.scale 文件。
    http://www.darmstadt.gmd.de/~pommnitz/xfsft.html
  3. 然后在同一个目录中,我们运行 mkfontdir。它不会做任何其他事情,只是将现有的 fonts.scale 文件不变地复制到名为 fonts.dir 的文件中。
  4. 使用 xfsft 字体服务器,我们可以覆盖现有的服务器(通常是 /usr/X11R6/bin/xfs),或者将其移动到其他合适的位置。
  5. 字体服务器需要一个配置文件。如果您没有更好的配置文件,则以下内容可以用作示例
    clone-self = off
    use-syslog = off
    client-limit = 20
    
    catalogue = /usr/X11R6/lib/X11/fonts/TrueType,/usr/X11R6/lib/X11/fonts/Type1
    
    error-file = /usr/X11R6/lib/X11/fs/fs-errors
    
    # in decipoints
    default-point-size = 120
    
    # x,y
    default-resolutions = 100,100,75,75
    

    现在我们可以启动 X 字体服务器了。在示例中,我们使用了端口 7100。如果您的系统上已占用,请选择其他端口。有关详细信息,请参阅 xfs(1) 手册。
    xfsft -port 7100 -config /usr/X11R6/lib/X11/fs/config &
    
  6. 无需更改我们搜索字体的路径,我们可以检查服务器是否正在运行
    fslsfonts -server localhost:7100
    
  7. 如果我们满意,我们将字体服务器添加到我们搜索字体的来源中,例如
    xset fp+ tcp/localhost:7100
    
    当然,字体服务器也可以在另一台计算机上运行,因此无需在本地网络中的所有计算机上都安装所有字体。最后,我们将字体服务器添加到 /etc/XF86Config 配置文件中
    FontPath "tcp/localhost:7100"
    

Xfstt

另一个支持 TrueType 字体的 X11 字体服务器是 Xfstt。这些行的作者没有使用它的经验,但很乐意在此处包含其他人的经验。您可以在指定的位置及其所有镜像中找到 Xfstt。

ftp://metalab.unc.edu/pub/Linux/X11/fonts/Xfstt-0.9.10.tgz


下一步 上一步 目录