4.8. 处理字体

4.8.1. 字体

编写:Alex Korobka

(提取自 wine/documentation/fonts)

 

Note: Wine 包含了 fnt2bdf 实用工具。可以在 tools 目录中找到它。可以在 wine headquarters: http://www.winehq.com/tools.html 找到到本文档中提及的工具的链接。

4.8.1.1.如何转换 Windows 字体

如果你要访问一个 Windows 安装,你应该使用 fnt2bdf 实用工具(可在 tools 目录中找到) 来把位图字体(VGASYS.FONSSERIFE.FON、和 SERIFE.FON)转换成 X 窗口系统可以识别的格式。

 

  1. fnt2bdf 提取位图字体。

  2. 使用 bdftopcf 把第一步生成的 .bdf 文件转换成 .pcf 文件。

  3. .pcf 文件复制到字体服务器目录中,它的目录通常是 /usr/lib/X11/fonts/misc (你可能要有超级用户的特权)。如果你想建立一个新字体目录,则你必须把它添加到字体路径上。

  4. 为把字体复制到其中的那个目录运行 mkfontdir。如果你已经在 X 中了,你应该运行 xset fp rehash 来使 X 服务器使用这个新字体。

  5. 编辑 ~/.wine/config 文件来删除给你刚安装的字体的别名。

WINE 运行可以不需要这些字体,但感观可能非常不同。还有,一些应用程序尝试装载它们定制的字体(? on the fly)(WinWord 6.0),并且因为 WINE 仍未实现这个,它转而输出象下面这样的一些东西;

STUB: AddFontResource( SOMEFILE.FON )
        

你也可以转换这个文件。注意这个 .FON 文件可能不持有任何位图字体,而 fnt2bdf 在这种情况下会失败。还要注意尽管上述消息不会消失,WINE 通过使用你从 SOMEFILE.FON 提取的字体绕过(work around)问题。fnt2bdf 将只适用于 Windows 3.1 字体。它不适用于 TrueType 字体。

怎样处理 TrueType 字体? 有很多商业字体工具可以把它们转换成 Type1 格式但结果的字体是远离主流的 (stellar)。使用它们的其他方式是使用有呈现(render) TrueType 能力的字体服务器(Caldera 有一个,在 sunsite 和它的镜像的 Linux/X11/fonts 中有自由的 xfstt,如果你在 FreeBSD 上你可以使用 /usr/ports/x11-servers/Xfstt 中的 port。还有一个 xfsft,它使用 freetype 库,参见 documentation/ttfserver)。

但是,将来有可能通过 FreeType 呈现器支持固有 TrueType(hint, hint :-)

4.8.1.2. 如何向 ~/.wine/config 添加字体别名

许多 Windows 应用程序假定总是存在最初的 Windows 3.1 发布中包含的字体。缺省的 Wine 建立许多把它们映射成现存的 X 字体的别名:

 

Windows 字体 ...被映射成... X 字体
"MS Sans Serif" -> "-adobe-helvetica-"
"MS Serif" -> "-bitstream-charter-"
"Times New Roman" -> "-adobe-times-"
"Arial" -> "-adobe-helvetica-"

 

没有给 "System" 字体的别名。还有,对应用程序在运行时安装的字体不建立别名。建议的处理这个问题的方式是转换缺少的字体(参见前面)。如果证明这是不可能的,如在 TrueType 字体的情况下,你可以通过向 [fonts] 添加一个别名强迫字体映射器选择一个接近的相关 X 字体。确保 X 字体实际上存在(使用 xfontsel 工具)。

AliasN = [Windows 字体], [X 字体] <, 可选的 "屏蔽 X 字体" 标志>
        

例子:

Alias0 = System, --international-, subst
Alias1 = ...
...
        

注释:

 

  • 在序列 {0, ..., N} 中不能有间隙(gap),否则不读在第一个间隙之后的所有别名。

  • 通常字体映射器以下列方式把 X 字体名转换成 Windows 程序可见的字体名字:

     

    X 字体 ...被展示为... 提取的名字
    --international-... -> "International"
    -adobe-helvetica-... -> "Helvetica"
    -adobe-utopia-... -> "Utopia"
    -misc-fixed-... -> "Fixed"
    -... ->  
    -sony-fixed-... -> "Sony Fixed"
    -... ->  

     

    注意因为 -misc-fixed--sony-fixed- 是不同的字体,Wine 修改第二个提取的名字来确保 Windows 程序可以区分它们,原因是在字体选择对话框中只出现提取的名字。

  • "屏蔽" 别名替换最初的提取的名字,所以在这个例子的情况下我们将有下列映射:

     

    X 字体 ...被映射成... 提取的名字
    --international-... -> "System"

     

    "非屏蔽"别名对用户是透明的,他们不替代提取的名字。

    当对一个别名可获得一个固有 X 字体的时候,Wine 丢弃这个别名。

  • 如果你不访问在第一段落中提及的 Windows 字体,你应该尝试用非屏蔽别名替换"System"字体。 xfontsel 应用程序可向你展示 X 可获得的字体。

    Alias.. = System, ...bold font without serifs
                

还有,一些 Windows 应用程序要求字体而不指定这个字体的字型名字。在多数 Windows 安装中字体表以 Arial 为开始,但是 X 字体表以在 fonts.dir 中的第一行的字体为开始。所以 WINE 使用下列条目来确定首先检查哪个字体。

例子:

Default = -adobe-times-
        

注释:

最好使可缩放的字体家族(包括粗体和斜体)成为缺省的选择,原因是映射器检查所有可获得的字体,直到完美的匹配了要求的高度和其他属性或者到达了字体表的结束。典型的 X 安装在 ../fonts/Type1../fonts/Speedo 目录中有可缩放的字体。

4.8.1.3. 如何管理一个缓存的字体矩阵

WINE 在 ~/.wine/.cachedmetrics 文件中存储可获得的字体的详情。你可以把它复制到其他地方并向 ~/.wine/config 中的 [fonts] 段添加这个条目:

FontMetrics = <file with metrics>
        

如果 WINE 检测到在 X 字体配置中的变动,它将从头重建字体矩阵并用新信息重写 ~/.wine/.cachedmetrics 。这个过程要持续一会。

4.8.1.4. 太小或太大的字体

Windows 程序可以要求 WINE 呈现有用点指定的高度的一个字体。但是,点-到-象素的比率依赖于你的显示器的真实的物理大小(15"、17"、等...)。X 尝试着提供一个估计的比率,而可能与你的实际大小有很到不同,你可以通过向 [fonts] 段添加下列条目来选择这个比率:

Resolution = <integer value>
        

一般的,更高的数给你更大的字体。尝试实验 60 - 120 范围的值。96 是好的起点。

4.8.1.5. 启动时的 "FONT_Init: failed to load ..." 消息

最常见的情况是在你的字体目录之一当中有一个破碎的 fonts.dir 文件。你需要重新运行 mkfontdir 来重建这个文件。详情参见它的手册页。如果你因为不是 root 而不能在机器上运行 mkfontdir,使用 xset -fp xxx 来删除破碎的字体路径。

4.8.2. 设置一个 TrueType 字体服务器

编写:???

(提取自 wine/documentation/ttfserver)

依从下列指示来在你的系统上设置一个 TrueType 字体服务器。

 

  1. 获得 freetype-1.0.full.tar.gz

  2. 阅读文档,解包,配置和安装

  3. 测试库,比如 ftview 20 /dosc/win95/fonts/times

  4. 获得 xfsft-beta1e.linux-i586

  5. 安装它并在启动时开始它,比如在一个 rc 脚本中。参见 xfs 的手册页。

  6. 依从 给出的提示

  7. 我是从 http://www.dcs.ed.ac.uk/home/jec/progindex.html 得到 xfsft。我总是运行它。下面是我的 /usr/X11R6/lib/X11/fs/config:

    clone-self = on
    use-syslog = off
    catalogue = /c/windows/fonts
    error-file = /usr/X11R6/lib/X11/fs/fs-errors
    default-point-size = 120
    default-resolutions = 75,75,100,100
              

    明显的,/c/windows/fonts 是我的 Win95 C: 驱动器上 Windows 字体所在的地方;对于 Win31 是 /mnt/dosC/windows/system。在 /c/windows/fonts/fonts.scale 中我有

    14
    arial.ttf -monotype-arial-medium-r-normal--0-0-0-0-p-0-iso8859-1
    arialbd.ttf -monotype-arial-bold-r-normal--0-0-0-0-p-0-iso8859-1
    arialbi.ttf -monotype-arial-bold-o-normal--0-0-0-0-p-0-iso8859-1
    ariali.ttf -monotype-arial-medium-o-normal--0-0-0-0-p-0-iso8859-1
    cour.ttf -monotype-courier-medium-r-normal--0-0-0-0-p-0-iso8859-1
    courbd.ttf -monotype-courier-bold-r-normal--0-0-0-0-p-0-iso8859-1
    courbi.ttf -monotype-courier-bold-o-normal--0-0-0-0-p-0-iso8859-1
    couri.ttf -monotype-courier-medium-o-normal--0-0-0-0-p-0-iso8859-1
    times.ttf -monotype-times-medium-r-normal--0-0-0-0-p-0-iso8859-1
    timesbd.ttf -monotype-times-bold-r-normal--0-0-0-0-p-0-iso8859-1
    timesbi.ttf -monotype-times-bold-i-normal--0-0-0-0-p-0-iso8859-1
    timesi.ttf -monotype-times-medium-i-normal--0-0-0-0-p-0-iso8859-1
    symbol.ttf -monotype-symbol-medium-r-normal--0-0-0-0-p-0-microsoft-symbol
    wingding.ttf -microsoft-wingdings-medium-r-normal--0-0-0-0-p-0-microsoft-symbol
              

    /c/windows/fonts/fonts.dir 中我有完全相同的字体。

    /usr/X11R6/lib/X11/XF86Config 中我有

    FontPath "tcp/localhost:7100"
              

    在其他 FontPath 行的前面。就是它了! 作为一个有趣的阶段性的意外收获(by-product of course),所有指定 Arial 的 web 页在 Netscape 中以 Arial 出现 ...

  8. 关闭 X 并重新启动(并调试你在设置这些事时做出的错误)。

  9. 测试,比如 xlsfont | grep arial

希望这有所帮助...