跳转至内容

X11/字体指南

来自维基教科书,开放世界中的开放书籍

作者 · 历史 · 打印 · 许可证

简介 · 配置 · 构建 · 启动会话 · 启动程序 · 字体 · 窗口管理器 · Xt 客户端 · 政治历史 · 参考文献和链接

补充: 命令

编辑此模板

当您的 X11 客户端绘制文本时,它们使用字体,这是标准字符(例如字母、数字和标点符号)的图形。至少,字体是一种字形(也称为),例如Bitstream Vera SansLuxi MonoNimbus Roman No9 Lfixed。更具体地说,字体包括大小或样式,例如Bitstream Vera Sans Bold Italic 10 点。字体也有三种类别,称为衬线(如 Nimbus Roman No9 L)、无衬线(如 Bitstream Vera Sans)和等宽(如 Luxi Mono 或“fixed”)。

字体有多种字体格式,例如位图、TrueType 和 PostScript。TrueType 字体是.ttf文件。如果 X11 服务器和客户端位于不同的计算机上,那么您可能在每台计算机上安装了不同的字体。

核心字体与 Xft 字体

[编辑 | 编辑源代码]

X11 客户端可以通过多种不同的方式绘制文本

  1. 使用原始核心 X11 协议绘制文本。 使用这种方法,X11 服务器会加载并存储字体的每个字符。因此,如果 X11 服务器(带有屏幕和键盘)和 X11 客户端(带有您的 Web 浏览器或其他窗口)位于不同的计算机上,那么您必须在服务器上安装字体。服务器会将字符转换为位图并直立绘制它们,这意味着您无法旋转它们。此外,服务器从不为字体提供抗锯齿功能。
  2. 使用 Xft 库和 RENDER 扩展绘制文本。 使用这种方法,X11 客户端会加载并存储字体的每个字符。您必须在客户端机器上安装字体。客户端会将字符转换为几何图形。它将图形分解为基本的形状,例如三角形和梯形,然后将它们发送到服务器。服务器绘制图形,并可以选择提供抗锯齿功能,从而使字体的外观更平滑。也可以旋转这些图形。
  3. 使用客户端库(例如 libart_lgpl 或 SDL_ttf)绘制文本。 虽然 libart_lgpl 是一个矢量图形库,但 SDL_ttf 是一个库,用于为使用跨平台简单直接媒体层 (Simple DirectMedia Layer) 的程序绘制文本。通常,这些库会加载几何图形,然后将它们绘制到位图中,可能会进行抗锯齿和旋转,然后再将其发送到 X11 服务器,就好像 X11 服务器对文本一无所知一样。这些库也可以像 Xft 一样使用 RENDER。

第一个 X11 客户端使用核心 X11 协议绘制文本,因为这是唯一的选择。但是,现在有几个客户端使用 Xft。由于 GTK+ 和 Qt(几个应用程序背后的工具包,包括所有 GNOME 和 KDE 应用程序)切换到 Xft,因此许多桌面上的程序(包括 Konqueror)现在使用 Xft。

使用 fontconfig 配置 Xft

[编辑 | 编辑源代码]

较旧的 Xft 版本 1 有自己的配置方案。这里描述的版本 2 使用fontconfig 进行配置。由于 fontconfig 独立于 X11,因此有像fc-list 这样的程序可以列出 X11 程序(如 Konqueror)可用的字体,但它们本身不使用 X11。一个简单的终端命令来列出可用字体是

$ fc-list | sort | less

默认的/etc/fonts/fonts.conf允许您选择性地创建一个自定义文件~/.fonts.conf用于您的自定义字体设置。

一些自定义包括

  1. 您可以添加包含字体的其他目录。fontconfig 会递归地搜索目录。如果您有一个包含.ttf文件的文件夹,那么您只需将其添加到~/.fonts.conf中;您无需为 fontconfig 写一个fonts.scale或任何其他此类文件。
  2. 您可以指定要搜索的额外字体,以查找模糊的字符。如果您没有看到引号之间 "→" 的右箭头,那么在搜索用于绘制此句子的字符时没有找到右箭头字符。事实上,与 Xorg 一起包含的 Bitstream 和 Luxi 字体以及来自 ghostscript 的 Nimbus 字体没有该字符,但来自 ghostscript 的“Standard Symbols L”字体包含一个右箭头。

但是,~/.fonts.conf使用严格的 XML 语法。您必须在文件开头声明<?xml version="1.0"?>,并且您必须将文件中的所有其他内容放在<fontconfig></fontconfig>标签之间,否则它将无法工作。

这是一个示例文件,展示了如何执行这两个自定义

<?xml version="1.0"?><fontconfig>
 <dir>/usr/local/share/ghostscript/fonts</dir>
 <alias>
  <family>sans-serif</family>
  <prefer><family>Standard Symbols L</family></prefer>
 </alias>
 <alias>
  <family>serif</family>
  <prefer>
   <family>Standard Symbols L</family>
  </prefer>
 </alias>
 <alias>
  <family>monospace</family>
  <prefer>
   <family>Standard Symbols L</family>
  </prefer>
 </alias>
</fontconfig>

添加字体目录很简单:使用<dir>/完整/路径</dir>。上面的示例添加了/usr/local/share/ghostscript/fonts,它在某些计算机上是 Ghostscript 字体的所在位置,包括 Standard Symbols L。

要将 Standard Symbols L 添加到首选字体列表中,以便我们始终可以绘制右箭头 "→",则更为困难。假设您已将 Konqueror Web 浏览器设置为使用 Luxi Serif 来显示网页。然后,您加载了一些包含一些右箭头的文本。当 fontconfig 未能在 Luxi Serif 字体中找到右箭头时,它转向了通用字体名称 "serif",它实际上是首选衬线字体的列表的别名。

作为参考,以下是在/etc/fonts/fonts.conf中包含的字体别名,该文件包含在 Xorg 6.9rc1 中。

<!--
  Provide required aliases for standard names
-->
	<alias>
		<family>serif</family>
		<prefer>
			<family>Bitstream Vera Serif</family>
			<family>Times New Roman</family>
			<family>Thorndale AMT</family>
			<family>Luxi Serif</family>
			<family>Nimbus Roman No9 L</family>
			<family>Times</family>
			<family>Frank Ruehl</family>
			<family>Kochi Mincho</family>
			<family>AR PL SungtiL GB</family>
			<family>AR PL Mingti2L Big5</family>
			<family>MS 明朝</family>
			<family>Baekmuk Batang</family>
			<family>FreeSerif</family>
		</prefer>
	</alias>
	<alias>
		<family>sans-serif</family>
		<prefer>
			<family>Bitstream Vera Sans</family>
			<family>Verdana</family>
			<family>Arial</family>
			<family>Albany AMT</family>
			<family>Luxi Sans</family>
			<family>Nimbus Sans L</family>
			<family>Helvetica</family>
			<family>Nachlieli</family>
			<family>Kochi Gothic</family>
			<family>AR PL KaitiM GB</family>
			<family>AR PL KaitiM Big5</family>
			<family>MS ゴシック</family>
			<family>Baekmuk Dotum</family>
			<family>SimSun</family>
			<family>FreeSans</family>
		</prefer>
	</alias>
	<alias>
		<family>monospace</family>
		<prefer>
			<family>Bitstream Vera Sans Mono</family>
			<family>Andale Mono</family>
			<family>Courier New</family>
			<family>Cumberland AMT</family>
			<family>Luxi Mono</family>
			<family>Nimbus Mono L</family>
			<family>Courier</family>
			<family>Miriam Mono</family>
			<family>Kochi Gothic</family>
			<family>AR PL KaitiM GB</family>
			<family>Baekmuk Dotum</family>
			<family>FreeMono</family>
		</prefer>
	</alias>

安装新字体

[编辑 | 编辑源代码]

根据您的发行版,可能有一个万无一失的字体安装程序,也可能没有。无论如何,使用简单的命令总是有效的。

要安装新字体,只需下载字体文件(例如“.ttf”文件)并将其放在正确的目录中。对于使用 fontconfig 的 Xft,您可以安装哪些字体以及安装的位置由默认配置文件 /etc/fonts/fonts.conf/etc/fonts/local.conf~/.fonts.conf 中的额外配置决定。大多数发行版在 /etc/fonts/fonts.conf 中有以下行

	<dir>~/.fonts</dir>

这意味着您可以使用简单的用户权限在您的主目录中安装新字体。要更新 fontconfig,您可以使用命令 fc-cache

例如,假设您已将字体 anicefont.ttf 下载到您的桌面。打开您喜欢的终端或一个简单的 xterm,然后键入

cd 
mkdir .fonts
cd .fonts
cp ~/Desktop/anicefont.ttf .
fc-cache

完成。您可以使用命令 fc-list(例如使用 sortmore 对其进行分页)来检查字体是否已成功安装,并检查您的字体名称:fc-list | sort | more

华夏公益教科书