X 逻辑字体描述

出自 ArchWiki
(重定向自 XLFD

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

X FreeType 接口库 (Xft) 是较新的 X11 字体系统,它使应用程序可以完全控制字形的渲染方式,并允许使用未在系统范围内安装的字体。Xft 使用 FontconfigFreeType 库,并且当需要字体外观平滑时,它比 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 使用的名称列在较长的 Uppercase 名称下方。

FOUNDRY
fndry
字体的供应商。

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

FAMILY_NAME
fmly
字体族名称,由供应商定义。通常,具有相同字体族名称的字体在视觉上相似。
WEIGHT_NAME
wght
字形的黑度,由供应商定义。常用值为 boldmedium
SLANT
slant
常用值是 r 表示罗马体或正体,io 表示倾斜的意大利体和斜体字体。

通常需要指定此项。

SETWIDTH_NAME
sWdth
值由设计者设置,例如 normalnarrowcondensed,用于标识宽度。

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

ADD_STYLE
adstyl
通常是一个空字段,但值可能由供应商提供。

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

PIXEL_SIZE
pxlsz
特定 POINT_SIZE 和 RESOLUTION_Y 的字体主体大小。更改字体的高度,独立于字体设计的磅值。

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

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

请参阅 #字体大小

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

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

RESOLUTION_Y
resy
字体设计的垂直 dpi。

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

SPACING
spc
p – 用于比例字体

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

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

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

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

CHARSET_REGISTRY
rgstry
始终与下一个字段配对,此字段命名所用字符编码的注册机构。例如 iso10646koi8

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

CHARSET_ENCODING
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 文件,需要两个程序,mkfontscalemkfontdir。这些程序可能在您安装 Xorg 时已安装。Mkfontdir 读取目录中所有位图字体文件的字体名称,并使用它找到的字体和文件名创建 fonts.dir 文件。它还添加来自名为 fonts.scale. 的文件中的条目。

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

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

任何时候运行 mkfontdir,都应更新字体数据库,使用命令

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

别名

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

软件包 xorg-fonts-alias-miscxorg-fonts-alias-cyrillicxorg-fonts-alias-75dpixorg-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

参见