编写:Alex Korobka <alex@aikea.ams.sunysb.edu>
(提取自 wine/documentation/fonts)
Note: Wine 包含了 fnt2bdf 实用工具。可以在 tools 目录中找到它。可以在 wine headquarters: http://www.winehq.com/tools.html 找到到本文档中提及的工具的链接。
如果你要访问一个 Windows 安装,你应该使用 fnt2bdf 实用工具(可在 tools 目录中找到) 来把位图字体(VGASYS.FON、SSERIFE.FON、和 SERIFE.FON)转换成 X 窗口系统可以识别的格式。
用 fnt2bdf 提取位图字体。
使用 bdftopcf 把第一步生成的 .bdf 文件转换成 .pcf 文件。
把 .pcf 文件复制到字体服务器目录中,它的目录通常是 /usr/lib/X11/fonts/misc (你可能要有超级用户的特权)。如果你想建立一个新字体目录,则你必须把它添加到字体路径上。
为把字体复制到其中的那个目录运行 mkfontdir。如果你已经在 X 中了,你应该运行 xset fp rehash 来使 X 服务器使用这个新字体。
编辑 ~/.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 :-)
许多 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 字体的时候,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 目录中有可缩放的字体。
WINE 在 ~/.wine/.cachedmetrics 文件中存储可获得的字体的详情。你可以把它复制到其他地方并向 ~/.wine/config 中的 [fonts] 段添加这个条目:
FontMetrics = <file with metrics> |
如果 WINE 检测到在 X 字体配置中的变动,它将从头重建字体矩阵并用新信息重写 ~/.wine/.cachedmetrics 。这个过程要持续一会。
Windows 程序可以要求 WINE 呈现有用点指定的高度的一个字体。但是,点-到-象素的比率依赖于你的显示器的真实的物理大小(15"、17"、等...)。X 尝试着提供一个估计的比率,而可能与你的实际大小有很到不同,你可以通过向 [fonts] 段添加下列条目来选择这个比率:
Resolution = <integer value> |
一般的,更高的数给你更大的字体。尝试实验 60 - 120 范围的值。96 是好的起点。
最常见的情况是在你的字体目录之一当中有一个破碎的 fonts.dir 文件。你需要重新运行 mkfontdir 来重建这个文件。详情参见它的手册页。如果你因为不是 root 而不能在机器上运行 mkfontdir,使用 xset -fp xxx 来删除破碎的字体路径。
编写:???
(提取自 wine/documentation/ttfserver)
依从下列指示来在你的系统上设置一个 TrueType 字体服务器。
获得 freetype-1.0.full.tar.gz
阅读文档,解包,配置和安装
测试库,比如 ftview 20 /dosc/win95/fonts/times
获得 xfsft-beta1e.linux-i586
安装它并在启动时开始它,比如在一个 rc 脚本中。参见 xfs 的手册页。
依从 <williamc@dai.ed.ac.uk> 给出的提示
我是从 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 出现 ...
关闭 X 并重新启动(并调试你在设置这些事时做出的错误)。
测试,比如 xlsfont | grep arial
希望这有所帮助...