X 逻辑字体描述

出自 ArchWiki

X 逻辑字体描述 (XLFD) 是最初的 X11 核心字体系统。它最初是为位图字体设计的,后来添加了对可缩放字体(Type 1、TrueType 和 OpenType/CFF)的支持。XLFD 不支持抗锯齿和子像素栅格化。

X FreeType 接口库 (Xft) 是较新的 X11 字体系统,它使应用程序可以完全控制字形的渲染方式,并允许使用未在系统范围内安装的字体。Xft 使用 Fontconfig 和 FreeType 库,并且当需要字体外观平滑时,它比 XLFD 更合适。请参阅字体配置以获取有关 Fontconfig 使用的更多信息。

字体名称

当使用 XLFD 时,字体名称很复杂

-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1

名称包含十四个元素,每个元素字段都以连字符 `-` 开头。并非所有元素都必须出现在字体名称中,并且字段可能为空。用户可以使用通配符 `*` 和 `?` 简化名称。在命令行中,请用引号将字体名称括起来,以防止 shell 解释通配符,并避免转义、反斜杠和特殊键。

$ xterm -fn "-*-fixed-medium-r-s*--12-87-*-*-*-*-iso10???-1"
$ xterm -fn "-*-dejavu sans mono-medium-r-normal--*-80-*-*-*-*-iso10646-1"

通过使用别名可以进一步简化名称

$ xterm -fn 12x24

用于处理 XLFD 名称的两个几乎不可或缺的实用程序是 xfontsel (xorg-xfontsel) 和 xlsfonts (xorg-xlsfonts)。Xfontsel 使用下拉菜单来选择字体名称的各个部分并预览所选字体。Xlsfonts 可以按名称列出字体,并具有可选的详细程度,并且可以显示 XLFD 系统将如何解释通配符和别名。如果字体名称不起作用,请检查是否与 xlsfonts 匹配。

$ xlsfonts -fn "*-fixed-medium-r-n*--13-120-75-*-iso1*-1"
$ xlsfonts -ll -fn fixed

字体名称元素

下表提供了字体名称字段的描述。这些元素按照它们在字体名称中出现的顺序排列。xfontsel 使用的名称列在较长的全大写名称下方。

铸字厂
fndry
字体的供应商。

当两个不同的字体共享相同的 FAMILY_NAME 时,例如 courier,请指定此字段。否则,可以使用通配符 * 代替。

字体族名
fmly
字体名称,由铸字厂定义。通常,具有相同族名的字体在视觉上相似。
字体粗细
wght
字形的黑色程度,由铸字厂定义。常用值有 boldmedium
倾斜度
slant
常用值包括 r(罗马体或正体)以及 io(斜体的 italic 和 oblique 字体)。

通常需要指定此项。

字宽名称
sWdth
值由设计师设置,示例包括 normalnarrowcondensed,用于标识宽度。

当有两个或多个可能的值时,应该设置一个值,而不是使用通配符。

附加样式
adstyl
通常是一个空字段,但值可能由铸字厂提供。

在 xfontsel 中,通过从下拉框中选择 (nil) 来选择空字段。通常可以安全地使用通配符 * 通配此字段。

像素大小
pxlsz
特定 POINT_SIZE 和 RESOLUTION_Y 的字体主体大小。更改字体的高度,而与字体设计所用的磅值大小无关。

如果指定 POINT_SIZE,则对于可缩放字体,可以使用零 0*

磅值大小
ptSz
字体设计的主体高度。值以十分之一磅表示(一磅名义上是英寸的七十二分之一)。

请参阅 #字体大小

水平分辨率
resx
字体设计的水平分辨率,以整数字符串表示。值以像素或 dpi 表示。

对于可缩放字体,可以安全地将其设置为零或 *,位图字体通常使用 75100

垂直分辨率
resy
字体设计的垂直 dpi。

与 RESOLUTION_X 类似,可缩放字体可以将此值设置为零或 *。对于位图,只需要标识 RESOLUTION_X 或 RESOLUTION_Y 中的一个。另一个可以使用通配符。

间距
spc
p – 比例字体

m – 等宽字体;所有字形都具有相同的逻辑宽度。

c – 字符单元格;每个字形占据一个“框架”,并且所有框架都具有相同的宽度。这是打字机间距。如果使用 m 间距的字体,则在刷新显示时,某些较旧的应用程序可能会留下字形碎片。对于这些应用程序,请尝试使用 c 间距的字体。

平均宽度
avgWdth
所有字形宽度的算术平均值。零用于比例字体。

可以安全地使用通配符 * 通配此值。

字符集注册表
rgstry
始终与下一个字段配对,此字段命名用于字符编码的注册机构。示例包括 iso10646koi8

始终可以安全地选择与用户区域设置兼容的可用注册表。

字符集编码
encdng
字符集编码的标识符。

字体大小

字体名称存储在每个字体目录的 fonts.dir 文件中。有关这些文件的更多信息,请参见下面的 #字体搜索路径。在字体名称中,像素和磅值大小以及 x 和 y 分辨率值可能会被更改,并且这些更改将影响字体的显示大小以及字符和行之间的间距。

一般来说,位图字体在设计师指定的大小下具有最佳外观。对于这些字体,更改字体名称中存储的与大小相关的值可能会产生意外或难看的失真或无法匹配的字体图案。

可缩放字体被设计为可以调整大小。如下例所示,可缩放字体名称在像素和磅值大小字段、两个分辨率字段以及平均宽度字段中都为零。

-misc-liberation serif-medium-r-normal--0-0-0-0-p-0-iso10646-1

要以特定大小指定可缩放字体,您只需为 POINT_SIZE 字段提供一个值,其他与大小相关的值可以保持为零。POINT_SIZE 值以十分之一磅为单位,因此输入的值必须是所需磅值大小乘以十。例如,以下行指定 9 磅的 Liberation Serif。

-misc-liberation serif-medium-r-normal--0-90-0-0-p-0-iso8859-1

字体搜索路径

请参阅字体以获取有关安装字体文件和修改字体路径的指南。为了使字体可供 X 服务器使用,包含字体文件的目录必须位于用户的字体路径中。您可以使用以下命令检查当前的字体路径:

$ xset q

当请求字体时,X 服务器会按照字体路径中给出的顺序搜索字体目录。每个字体目录都将包含一个名为 fonts.dir 的文件,该文件充当将字体的 XLFD 名称连接到包含字体的文件的索引。当找到第一个匹配的字体时,搜索结束。

fonts.dir 文件中的第一行是文件中列出的字体数量。接下来的行然后列出该目录中的字体:首先是文件名,后跟一个空格,最后是字体名称。以下是一个示例 fonts.dir 的前四行

1894
UTBI__10-ISO8859-1.pcf.gz -adobe-utopia-bold-i-normal--14-100-100-100-p-78-iso8859-1
UTBI__10-ISO8859-10.pcf.gz -adobe-utopia-bold-i-normal--14-100-100-100-p-78-iso8859-10
UTBI__10-ISO8859-13.pcf.gz -adobe-utopia-bold-i-normal--14-100-100-100-p-78-iso8859-13

mkfontscale 和 mkfontdir

要创建 fonts.dir 文件,需要两个程序:mkfontscale 和 mkfontdir。这些程序可能在您安装 Xorg 时已安装。Mkfontdir 读取目录中所有位图字体文件的字体名称,并使用它找到的字体和文件名创建 fonts.dir 文件。它还会从名为 fonts.scale 的文件中添加条目。

由于 mkfontdir 无法读取可缩放字体文件,因此使用程序 mkfontscale 来创建 TrueType、OpenType 和 Type1 字体的名称。字体名称和字体文件名存储在名为 fonts.scale 的文件中。fonts.scale 文件的结构与 fonts.dir 文件相同。第一行是列出的字体名称的数量;接下来的行包含文件名(首先),后跟一个空格,最后是字体名称。

fonts.scale 和 fonts.dir 都可以手动编辑。但是,每次运行 mkfontscale 或 mkfontdir 时,任何现有的 fonts.scale 或 fonts.dir 都会被覆盖。您的编辑很容易丢失。

每次运行 mkfontdir 时,都应更新字体数据库,使用以下命令

$ xset fp rehash
注意: 包含空格的文件名无法从 fonts.dir 和 fonts.scale 文件中正确解析。引用或转义这些空格将不起作用。唯一的解决方案是使用不包含空格的文件名重命名文件,或删除 fonts.dir 和 fonts.scale 文件中的字体列表。

别名

使用别名可以大大简化 XLFD 名称的使用。别名存储在字体路径目录中的名为 fonts.alias 的文件中。

软件包 xorg-fonts-alias-misc, xorg-fonts-alias-cyrillic, xorg-fonts-alias-75dpi, xorg-fonts-alias-100dpi 提供了一些已成为 X 服务器标准的常用别名。这些软件包为 100dpi、75dpi、cyrillic 和 misc 目录中的字体提供了 fonts.alias 文件。某些应用程序依赖于这些标准别名:xterm 的默认字体被编码为使用与别名“fixed”匹配的字体。不建议更改这些标准化别名,特别是对于多用户计算机。

您可以通过编写自己的 fonts.alias 文件或添加到现有文件来向系统添加别名。格式很简单。注释仅限于以感叹号 ! 开头的行。空白行将被忽略。每个别名都在单行上定义。首先是别名名称,后跟任意数量的空格,最后是要匹配的字体名称或别名名称(别名可以引用另一个别名)。如果别名名称或字体名称包含空格,则该名称必须用引号括起来。这是一个构造的示例

! This is a comment.

djvsm9  "-misc-dejavu sans mono-medium-r-normal--0-90-0-0-m-0-iso10646-1"
djvsm8    "-misc-dejavu sans mono-medium-r-normal--0-80-0-0-m-0-iso10646-1"
"djvsm 8"        djvsm8

fonts.alias 文件的位置可能在字体路径上的任何目录中。别名引用的字体也可能在字体路径上的任何目录中;字体文件不必与 fonts.alias 文件位于同一目录中。

为了使新的字体别名可供用户使用,必须再次使用以下命令更新字体数据库

$ xset fp rehash

参见