5.5. 在 XFree86™ 中使用字体

Contributed by Murray Stokely.

5.5.1. Type1 字体

XFree86 使用的默认字体不是很理想。 大型的字体显得参差不齐,看起来很不专业,在 Netscape® 中,小字体也显得莫名其妙。 然而,有几个自由的,高质量的字体可以在 XFree86 中使用,version 3.X 或 version 4.X 都可以。例如,URW字体集合 (x11-fonts/urwfonts) 就包括了高质量的 标准 type1 字体 (Times Roman®, Helvetica®, Palatino® 和其他一些).在 Freefont 集合中 (x11-fonts/freefonts) 也包括更多的字体, 但它们中的绝大部分使用在图形软件中,如 Gimp,在屏幕字体中使用并不完美。另外, 只要花很少的功夫,可以将 XFree86 配置成能使用 TrueType® 字体:请参见后面的 section on TrueType fonts 章节。

要安装上面的Type1字体,你只需要运行下面的命令:

# cd /usr/ports/x11-fonts/urwfonts
# make install clean

Freefont 或其他的集合都是一样的。要告诉 X 服务器这些字体的存在, 你需要在 XF86Config 文件中添加一行 (XFree86 版本3在 /etc/ 下 版本4在 /etc/X11/ 下):

FontPath "/usr/X11R6/lib/X11/fonts/URW/"

或者,也可以在命令行运行:

% xset fp+ /usr/X11R6/lib/X11/fonts/URW
% xset fp rehash

这样会起作用,但是当 X 会话结束后就会丢失, 除非它被添加到启动文件 (~/.xinitrc 中, 针对一个寻常的 startx 会话,或者当你通过一个类似 XDM 的图形登陆管理器登陆时添加到 ~/.xsession 中)。 第三种方法是使用新的 XftConfig 文件: 查看 anti-aliasing 章节。

5.5.2. TrueType® 字体

XFree86 4.X 已经内建了对 TrueType 字体的支持。有两个不同的模块能够启用这个功能。 在这个例子中使用“freetype”这个模块,因为它与其他的字体描绘后端 是兼容的。要启用 freetype 模块,只需要将下面这行添加到 /etc/X11/XF86Config 文件的 "Module" 部分。

Load  "freetype"

对于 XFree86 3.3.X,需要额外的 TrueType 字体服务器。 Xfstt 通常被用于这个目的。 要安装 Xfstt, 只要简单的安装 port x11-servers/Xfstt.

现在,为 TrueType 字体创建一个目录 (比如, /usr/X11R6/lib/X11/fonts/TrueType) 然后把所有的 TrueType 字体拷贝到这个目录。记住你不能直接从 Macintosh® 计算机中提取 TrueType 字体; 能被 XFree86 使用的必须是 UNIX®/DOS/Windows® 格式的。 一旦你已经拷贝了这些文件到这个目录,使用 ttmkfdir 来创建一个 fonts.dir 文件,以便让X字体引擎知道 你已经安装了这些新文件。 ttmkfdir 可以在 FreeBSD Ports Collection x11-fonts/ttmkfdir 中找到。

# cd /usr/X11R6/lib/X11/fonts/TrueType
# ttmkfdir > fonts.dir

现在把 TrueType 字体目录添加到字体路径中。 这和上面 Type1 字体的步骤是一样的, 那就是,使用

% xset fp+ /usr/X11R6/lib/X11/fonts/TrueType
% xset fp rehash

或者把 FontPath 行添加到 XF86Config 文件中。

就是这样。现在 Netscape, Gimp, StarOffice 和其他所有的 X 应用程序 应该可以认出安装的 TrueType 字体。一些很小的字体(如在 Web 页面上高分辨率显示的文本) 和一些很大的字体(在 StarOffice 下) 现在看起来已经很好了。

5.5.3. Anti-Aliased 字体

Updated for XFree86 4.3 by Joe Marcus Clarke.

XFree86 从 4.0.2 开始支持 Anti-aliased 字体。 然而,字体配置在 XFree86 4.3.0 之前是非常繁琐的。 从 4.3.0 版本开始,在 /usr/X11R6/lib/X11/fonts/~/.fonts/ 目录下的所有字体对支持 Xft 的应用程序 都可以自动的支持 anti-aliased。还不是所有的应用程序都支持 Xft,但是很多已经 有了 Xft 支持。 支持 Xft 的应用程序包括 Qt 2.3 以及更高版本(开发 KDE 桌面的工具包), Gtk+ 2.0 以及更高版本(开发 GNOME 桌面的工具包), 还有 Mozilla 1.2 以及更高版本。

要控制哪些字体是 anti-aliased,或者配置 anti-aliased 特性, 创建(或者编辑,如果文件已经存在的话)文件 /usr/X11R6/etc/fonts/local.conf。Xft 字体系统的几个 高级特性都可以使用这个文件来调节; 这一部分只描述几种最简单的情况。要了解更多的细节,请查看 fonts-conf(5).

这个文件一定是 XML 格式的。注意确保所有的标签都完全的关闭掉。 这个文件用一个 DOCTYPE 定义的普通的 XML 头开始, 然后是 <fontconfig> 标签:

      <?xml version="1.0"?>
      <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
      <fontconfig>
   

像前面所做的那样,在 /usr/X11R6/lib/X11/fonts/~/.fonts/ 目录下的所有字体已经可以被支持 Xft 的 应用程序使用了。如果你想添加这两个目录以外的其他路径, 简单的添加下面这行到 /usr/X11R6/etc/fonts/local.conf文件中:

<dir>/path/to/my/fonts</dir>

添加了新的字体,尤其是添加了新的字体目录后, 你应该运行下面的命令重建字体缓存:

# fc-cache -f

Anti-aliasing 会让字体边缘有些模糊,这样增加了非常小的文本的可读性, 然后从大文本字体中删除 ``staircases'' 但如果使用普通的文本,可能会引起眼疲劳。 要将字体大小范围控制在14号以下,包括这些行:

        <match target="font">
            <test name="size" compare="less">
                <double>14</double>
            </test>
            <edit name="antialias" mode="assign">
                <bool>false</bool>
            </edit>
        </match>

用 anti-aliasing 来间隔一些等宽字体也是不适当的。 这似乎是 KDE 的一个问题。 要修复这个问题需要确保每个字体之间的间距保持在100。 加入下面这些行:

       <match target="pattern" name="family">
           <test qual="any" name="family">
               <string>fixed</string>
           </test>
           <edit name="family" mode="assign">
               <string>mono</string>
           </edit>
        </match>
        <match target="pattern" name="family">
            <test qual="any" name="family">
                <string>console</string>
            </test>
            <edit name="family" mode="assign">
                <string>mono</string>
            </edit>
        </match>

(这里把其他普通的修复的字体作为 "mono"),然后加入:

         <match target="pattern" name="family">
             <test qual="any" name="family">
                 <string>mono</string>
             </test>
             <edit name="spacing" mode="assign">
                 <int>100</int>
             </edit>
         </match>     

某些字体,比如 Helvetica,当 anti-aliased 的时候可能存在问题。 通常的表现为字体本身似乎被垂直的切成两半。 糟糕的时候,还可能导致应用程序比如 Mozilla 崩溃。 为了避免这样的现象,考虑添加下面几行到 local.conf文件里面:

         <match target="pattern" name="family">
             <test qual="any" name="family">
                 <string>Helvetica</string>
             </test>
             <edit name="family" mode="assign">
                 <string>sans-serif</string>
             </edit>
         </match>       

一旦你完成对 local.conf 文件的编辑,确保你使用了 </fontconfig> 标签来结束文件。 不这样做将会导致你的更改被忽略。

XFree86 默认的字体集当使用 anti-aliasing 时并不是很合适。一个更好的默认字体集合可以在 x11-fonts/bitstream-vera port 下面找到。如果 /usr/X11R6/etc/fonts/local.conf 文件不存在, 这个 port 将会安装它。如果文件已经存在了, 这个 port 将会创建 /usr/X11R6/etc/fonts/local.conf-vera 文件。把这个文件的内容合并进 /usr/X11R6/etc/fonts/local.conf, Bitstream 字体就会自动的取代默认的 XFree86 Serif,Sans Serif,和 Monospaced 字体。

最后,用户可以添加他们自己的设定通过他们个人的 .fonts.conf 文件。这样做,每个用户应该简单的 创建文件 ~/.fonts.conf。这个文件也必须是 XML 格式的。

最后一点:对于LCD屏幕,需要有子像素的取样。这个基本上 由(水平分割的)红,绿,蓝三色组成,用来提高水平刷新率,结果 可能很有趣。要启用这个,需要在 local.conf 文件的某个地方加入下面这行:

         <match target="font">
             <test qual="all" name="rgba">
                 <const>unknown</const>
             </test>
             <edit name="rgba" mode="assign">
                 <const>rgb</const>
             </edit>
         </match>
      

Note: 依赖于显示器的种类, rgb 可能需要被更改为 bgr, vrgbvbgr:实验一下 看看那个更好。

Anti-aliasing 在你下次启动系统时就能用了。 然而,注意你的程序必须知道如何使用它。现在,Qt 工具包做到了, 所以整个 KDE 环境能够使用 anti-aliased 字体 (查看 KDE 上的 Section 5.7.3.2 了解细节)。 Gtk+ 和 GNOME 也可以被编译为使用 anti-aliasing 通过 ``Font'' capplet (查看 Section 5.7.1.3 了解细节)。默认情况下, Mozilla 1.2 以及更高版本都会自动的使用 anti-aliasing。要禁用它,使用 -DWITHOUT_XFT 选项 重新编译 Mozilla