1. fonts.conf(5)
  2. fonts.conf(5)

NAME

fonts.conf - 字体配置文件

文件概要

/etc/fonts/fonts.conf
/etc/fonts/fonts.dtd
/etc/fonts/conf.d/
$XDG_CONFIG_HOME/fontconfig/conf.d/
$XDG_CONFIG_HOME/fontconfig/fonts.conf
~/.fonts.conf.d/
~/.fonts.conf

描述

fontconfig是一个字体配置函数库,它既提供全局范围的配置,也允许每个用户 进行个性化的配置,应用程序可以通过它访问字体。

功能概览

fontconfig由两个模块组成:

  1. 配置模块,用于解析XML格式的配置文件;
  2. 匹配模块,根据应用程序请求的字体模式(pattern),返回最匹配的字体。

字体配置

配置模块由以下三部分组成:

  1. 保存配置信息的FcConfig数据类型
  2. 解析XML文本的libexpat
  3. 提取配置信息的FcConfigParse函数。

其中,FcConfigParse函数的作用是将XML格式的配置文件中的数据提取出来,填 充到数据类型为FcConfig的变量中。从外部来看,配置fontconfig库,就是编 写一个有效的XML配置文件并将其交给FcConfigParse函数处理。

这样做的目的是为了让字体的配置变得相对静态,并且尽可能广泛地在多个应用程 序之间共享。这样,在应用程序之间传递字体名称(见后文的"Font Name")时,可 以获得一致的字体选择。而选用XML作为配置文件的格式,是因为它既便于外部程 序编辑、又有严谨的结构和语法。

字体的配置(<match target="scan">)与字体的匹配(matching)是两个相互独立 的部分。因为某些应用程序希望使用其自身特有的字体匹配方式,它们只需要通过 fontconfig库获得已有的字体列表,即可执行独立的匹配操作.这种将配置与匹配 分离的做法可以将所有应用程序的字体配置集中到一处。集中的字体配置可以简化 和标准化字体的安装和个性化设置。

字体属性

虽然字体模式(pattern)理论上可以包含任意属性,但还是有一些约定俗成的属性 及其类型。fontconfig 利用其中的一些属性来做字体匹配与补全。其他的属性则 被用于为应用程序的渲染机制提供辅助信息。

"补全":当应用程序提交的字体模式缺少某些属性时,fontconfig 会通过其内置 的推测规则"补全"这些属性。

    属性(Property)   类型    描述
    --------------------------------------------------------------
    family          String   字族名称
    familylang      String   每个字族名称所对应的语言
    style           String   字体风格名称
    stylelang       String   每个字体风格名称所对应的语言
    fullname        String   字体全名(通常包含style)
    fullnamelang    String   每个字体全名所对应的语言
    slant           Int      倾斜度
    weight          Int      粗细程度
    width           Int      宽度
    size            Double   磅大小(point size)
    pixelsize       Double   像素大小(pixel size)
    aspect          Double   在微调(hinting)前将字形(glyph)水平拉宽的倍数。
    spacing         Int      字符间距
    foundry         String   字体制造商名称
    antialias       Bool     渲染字形(glyph)时是否开启抗锯齿功能
    hinting         Bool     渲染字形(glyph)时是否开启微调功能
    autohint        Bool     "true"表示只使用自动微调;"false"表示优先使用内嵌微调
    hintstyle       Int      微调的程度(同时作用于内嵌微调与自动微调)
    verticallayout  Bool     是否采用竖直排版
    globaladvance   Bool     是否使用字体提供的全局间距值(即将被废弃)
    file            String   字体文件的名称
    index           Int      字体文件内该字体的索引号,由"0"开始计数
    ftface          FT_Face  使用指定的 Freetype face 对象
    rasterizer      String   使用哪种渲染引擎(rasterizer)(即将被废弃)
    outline         Bool     字形(glyph)是否具有轮廓线
    scalable        Bool     字形(glyph)是否可以缩放
    scale           Double   磅->像素(point->pixel)的缩放系数
    dpi             Double   目标dpi(像素/英寸)值
    rgba            Int      LCD子像素的排列顺序
    lcdfilter       Int      LCD filter 的风格
    minspace        Bool     是否消除行间距(也就是使用最小行间距)
    charset         CharSet  字体所支持的Unicode字符的列表
    lang            String   字体所支持的RFC-3066语言的列表
    fontversion     Int      字体的版本号
    capability      String   字体的排版功能列表
    embeddedbitmap  Bool     是否使用字体中内嵌的点阵字形
    embolden        Bool     字形渲染引擎是否应该以合成的方式加粗
    fontfeatures    String   要开启的OpenType特性标记列表
    prgname         String   正在运行的程序的名称

    [提示1]有关Int类型的详细说明,可以参考下面对<const>单元的说明。
    [提示2]可以用fc-query /path/to/foo.ttf查看字体的属性

字体匹配

fontconfig将接收到的字体模板(pattern)和系统中所有可用字体逐一对比,计算 两者的差距,差距最小的字体将被选中。这样可以确保在任何时候都能返回一个字 体,但无法保证所返回的字体一定与模板的要求完全吻合。

要进行字体匹配,应用程序必须首先创建一个字体模板,并在其中包含所期望的字 体的所有属性。模板中的每个属性都可以包含按照优先级排列的多个值:越靠前的 值,优先级越高。也就是说,如果现有字体中有两个字体分别匹配同一个属性的两 个值,那么匹配较前的值的字体被认为"差距更小",或者说"更为接近"。

匹配字体之前,fontconfig会首先按配置文件对应用程序创建的字体模板进行第一 次修改。修改的过程包括<test><edit>个步骤:首先用一系列<test>指令 进行匹配,然后再用一系列<edit>指令进行修改,而<test><edit>的执行 顺序就是它们在配置文件中出现的顺序。同样,每个<match target="pattern"> 配置块也会按照它们在配置文件中出现的顺序依次执行。

完成对字体模板的第一次修改之后,fontconfig将会继续对其执行一系列默认的替 换操作,从而得到一组规范化的属性(包含了全部要素)。这样就可以避免底层的渲 染程序一直为各种未指定的属性提供默认值。

字体模板经过第一次修改与规范化两个步骤之后,可以用来和系统中的字体进行匹 配了。模板和系统中每个字体的差距通过以下属性进行计算(按照优先级排序,属 性越靠前,优先级越高):

foundry,charset,family,lang,spacing,pixelsize,
style,slant,weight,antialias,rasterizer,outline

上述规则中有一个特例需要特别注意:字族名称(family)分为强(strong)和弱 (weak)两种不同的绑定(binding)。强字族名称比语言属性(lang)的优先级要高, 而弱字族名称则比语言属性(lang)的优先级要低。

如果字体模板中出现字体本身所没有的属性,那么这些属性将会被按原样保留。这 样就可以确保向字体渲染引擎传递的渲染指令和其它数据,不会受到前述的修改与 规范化两个步骤的干扰。

经过规范化之后的字体模板,将被按照配置文件的要求进行第二次修改。修改规则 与第一次修改完全相同。最终,经过"第一次修改-规范化-第二次修改"处理的字体 模板将会被返回给应用程序。

最终返回的字体模板已经包含了充足的字体定位和渲染信息(包括文件名、像素大 小以及其他各种渲染数据)。由于不包含任何专属于FreeType库的信息,所以应用 程序可以自由选择渲染引擎,甚至直接访问字体文件。

如前所述,对字体模板的修改实际上是分两次进行的,因为本质上就需要有两个不 同操作:第一次修改决定了如何选取字体:主要是修正字族名称,以及添加合适的 默认值。第二次修改决定了如何渲染已选定的字体:这个步骤必须作用在已选定的 字体上,而不能作用在原始的字体模板上。

字体名称

注意,是"Font Name"而不是"Family Name"[字族名称]

fontconfig为字体模板(pattern)规定了一种文本格式,这种格式被称为"Font Name"(字体名称)。它既是fontconfig接受的格式,也是fontconfig返回格式。这 种格式由三个部分组成:(1)字族名称列表,(2)磅大小列表,(3)附加的属性值列表 。具体如下:

<families>-<point size>:<name1>=<value1>:<name2>=<value2>...

属性的名称(name)不需要包含任何字族名称(families)或者磅大小(point sizes) 。如果属性值(value)是一个列表,那么必须用逗号分隔其中的每个项。此外,还 有一些符号常量可以同时指定属性的名称和值。下面是一些例子:

字体名称                     含义
----------------------------------------------------------
Times-12                     12 磅大小的 Times 正体(Roman)
Times-12:bold                12 磅大小的 Times 粗体(Bold)
Courier:italic               默认大小的 Courier 斜体(Italic)
Monospace:matrix=1 .1 0 1    采用合成斜体的用户首选的等宽字体

字族名称(family)中的 '\', '-', ':', ',' 字符必须要使用'\'进行转义
属性值(value)中的 '\', '=', '_', ':', ',' 也必须要使用'\'进行转义

调试

为了帮助诊断字体和应用的各种问题,fontconfig内置了许多调试功能。这些调试 功能可以通过 FC_DEBUG 环境变量进行控制。这个环境变量是个整数值,它的每 个位都对应着一类调试信息。具体如下:

Name         Value    Meaning
---------------------------------------------------------
MATCH            1    显示字体匹配的简要信息
MATCHV           2    显示字体匹配的扩展信息
EDIT             4    监视 match/test/edit 的执行
FONTSET          8    在启动时跟踪字体信息的加载
CACHE           16    显示字体缓存变化的简要信息
CACHEV          32    显示字体缓存变化的扩展信息
PARSE           64    (已废弃)
SCAN           128    显示扫描字体文件并创建缓存的过程
SCANV          256    显示扫描字体文件的详细信息
MEMORY         512    监视 fontconfig 的内存使用量
CONFIG        1024    监视加载了哪些配置文件
LANGSET       2048    显示用来创建 lang 的字符集
OBJTYPES      4096    显示值类型检查失败的消息

将你期望看到的调试信息类别所对应的Value值相加,然后赋给FC_DEBUG环境 变量,再运行应用程序就可以在标准输出上看到调试信息了。

[例子]假如你想查看'Courier,mono'的匹配过程,可以在命令行上运行:

FC_DEBUG=5 fc-match -s 'Courier,mono'

语言标记(Lang Tag)

数据库中的每种字体都包含一个它所支持的语言列表。该列表是通过比较该字体的 Unicode覆盖范围和每种语言的正字法之后计算出来的。语言的标记符合RFC-3066 规范,形如"语言[-国家]"(中括号表示可以省略)。"语言"部分是一个符合ISO 639 规范的语言标记,而"国家"部分是一个符合ISO 3166规范的国家代码。

fontconfig 内置了多种语言的正字法。除非重新编译函数库,否则无法添加新的 正字法。fontconfig目前支持ISO639-1命名的139种语言中的122种,以及ISO 639-2中141种双字母编码的语言和另外30种三字母编码的语言。对于那些同时具备 双字母编码与三字母编码的语言,仅提供双字母编码标记。

对于那些在不同地区分别使用不同字符集的语言,fontconfig会针对每个不同的地 区使用不同的正字法。例如:阿塞拜疆语,库尔德语,普什图语,提格里尼亚语, 汉语。

配置文件的格式

fontconfig的配置文件以XML格式存储,XML格式的优点是易于外部配置工具的编辑 ,同时又拥有严谨的语法结构。由于XML文件是纯文本文件,专家级的用户还可以 直接用文本编辑器处理它们。

fontconfig文档类型定义在外部实体"fonts.dtd"中,该文件通常位于默认的字体 设置目录(/etc/fonts)。每个配置文件必须包含如下结构:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
...
</fontconfig>

<fontconfig>

字体配置的顶层单元,可以包含0或1个"<config>,<selectfont>"单元,以及任 意数量的"<dir>,<cachedir>,<include>,<match>,<alias>"单元

<dir prefix="default">

这个单元包含一个目录名称,fontconfig 将会扫描其中的字体文件,然后将找到 的字体添加到系统的可用字体列表中。如果将'prefix'设为'xdg',那么环境变量 XDG_DATA_HOME的值将会被作为前缀添加到路径的头部。详情参见"XDG Base Directory Specification"。

<cachedir prefix="default">

这个单元包含一个目录名称,用于保存字体属性的缓存(为了加速之后的读取)。默 认值是"$XDG_CACHE_HOME/fontconfig"。详情参见"XDG Base Directory Specification"。如果将'prefix'设为'xdg',那么环境变量"XDG_CACHE_HOME" 的值将会被作为前缀添加到路径的头部。如果配置文件中包含多个<cachedir>单 元,那么在读取缓存时,将会按顺序依次搜索,而在写入缓存时,则仅写入第一个 有写入权限的目录。缓存文件的名字遵循

<hash value>-<architecture>.cache-<version>

格式,其中的"<version>"是字体配置文件的版本号(目前是"3")。

<include ignore_missing="no" prefix="default">

这个单元包含一个额外的配置文件或目录(以'~'开头则表示位于用户的家目录中) 。如果是目录,那么该目录中所有文件名符合[0-9]*.conf格式的文件(以数字开 头并以.conf结尾),都将被按照文件名的ASCII顺序依次处理。注意,这些文件 本身必须是具有完整XML结构的字体配置文件(包含完整的DOCTYPE声明),而不是 用于插入此处的配置片段。当配置文件的XML数据被FcConfigParse函数解析之后 ,这个单元中所包含的文件(或目录中文件名符合[0-9]*.conf"式的文件)也会被 传递给FcConfigLoadAndParse函数进行处理,从而将这些文件的内容也整合到配 置中。如果将'ignore_missing'设为"yes"(而不是默认的"no"),那么将不会对丢 失的文件或目录发出警告。如果将'prefix'设为"xdg",那么环境变量 XDG_CONFIG_HOME的值将会被作为前缀添加到路径的头部。详情参见"XDG Base Directory Specification"。

<config>

这个单元提供了一个整合附加配置信息的地方。<config>可以包含0或1个 "<blank>, <rescan>"单元。

<blank>

字体中经常会缺少某些字符的字形,这些字符在编码中存在,但是却只能在屏幕上 绘制成空白。通过在<blank>单元中放置原本就应该绘制成空白的Unicode字符( 例如空格),就可以推断出:那些既不包含在中、又被绘制为空白的字符,就是该 字体所不支持的字符。这些不被支持的字符将会从该字体支持的字符集中剔除。 <blank>可以包含任意数量的<int><range>单元,用于指定这些空白字符 的Unicode码位。

<rescan>

<rescan>仅可容纳单独一个<int>单元,表示每隔多少秒自动扫描一次字体配 置文件。每次扫描,fontconfig 都会验证所有的配置文件和目录,并自动重建内 部的数据结构。

<selectfont>

<selectfont>通过包含0或1个<rejectfont>,<acceptfont>单元来设置字体 黑名单与白名单。通过包含一个<rejectfont>单元,可以明确将某些字体排除在 可用字体列表之外;同样,通过包含一个<acceptfont>单元,也可以明确将某些 字体包含在可用字体列表之内。

<acceptfont>

<acceptfont>通过包含任意数量的<glob><pattern>单元来匹配"白名单" 字体。所有被匹配到的字体都会被列入"白名单",也就是会被明确包含在可用字体 列表之内,它们既可以用于字体匹配,也可以被列出给应用程序。注意,"白名单" 中的字体永远不会被<rejectfont>列入"黑名单"。

<rejectfont>

<rejectfont>通过包含任意数量的<glob><pattern>单元来匹配"黑名单" 字体。所有被匹配到的字体都会被列入"黑名单"(注意:"白名单"中的字体永远不 会被列入"黑名单"),也就是会被明确排除在可用字体列表之外:它们既不会被用 于字体匹配,也不会被列出给应用程序,就好象系统中更本不存在这些字体一样。

<glob>

<glob>单元可以容纳一个shell风格的文件名匹配模式(包含"?"和"*"),用于根 据字体的全路径名称进行匹配。可以用于匹配一组特定目录中的字体,或者用于匹 配具有特定后缀名(例如:*.pcf.gz)的字体。不过,基于后缀名的匹配并不总是 那么可靠,因为并非所有字体文件的命名都十分规范。此外,需要注意的是, <glob>单元仅可作用于目录,而不能作用于单个字体。

<pattern>

<pattern>通过包含任意数量的<patelt>单元,将字体的属性值与<patelt> 单元列出的属性值列表进行比较,如果每个<patelt>单元列出的属性值列表中都 至少有一项与输入字体对应的属性值相符,那么就表示该字体与整个<pattern> 单元的要求相符合。这样就可以基于字体的属性(缩放,粗细等)来匹配字体,这可 比根据字体文件的后缀名匹配要可靠多了。

<patelt name="属性">

首先,必须明确指定"属性",以表明该<patelt>单元要比较的是字体的哪个属性 。其次,<patelt>又通过包含一系列常量单元,来指定可与该属性匹配的值列表 。"常量单元"是指:

<int>,<double>,<string>,<matrix>,<bool>,<charset>,<langset>,<const>

<match target="目标">

<match>必须首先包含一系列<test>组成的列表(可以为空),然后再包含一系 列<edit>组成的列表(可以为空),即<test>列表必须位于<edit>列表之前。 注意:虽然两个列表都可以为空,但是不可以同时为空。如果"目标"满足<test> 列表的所有测试条件,那么将被按照<edit>列表中的指令序列进行修改。"目标" 的默认值是"pattern",表示此<match>单元针对的是用于匹配字体模板(第一次 修改)。如果"目标"的值是"font",那么就表示此<match>单元针对的是已被选定 的字体(第二次修改)。如果"目标"的值是"scan",那么就表示此<match>单元针 对的是扫描字体以创建内部配置数据的初始化阶段(FcConfigParse)。

<test qual="品质" name="属性" target="目标" compare="比较" ignore-blanks="false">

<test>必须包含一个单独的表达式单元(其值将在运行时实时计算),用于和"目 标"的"属性"(参见前面"字体属性"小节)值列表进行"比较"。

<edit name="属性" mode="修改方式" binding="绑定">

<edit>包含一系列特定顺序的表达式单元(其值将在运行时实时计算),用于修改 "目标"(来自外层<match>单元)的"属性"值列表。"表达式单元"是指:

<int>, <double>, <string>, <matrix>, <bool>, <charset>,
<langset>, <name>, <const>, <or>, <and>, <eq>, <not_eq>, <less>,
<less_eq>, <more>, <more_eq>, <contains>, <not_contains>,
<plus>, <minus>, <times>, <divide>, <not>, <if>, <floor>,
<ceil>, <round>, <trunc>

"绑定"仅在name="family"的情况下才有意义。其默认值是"weak",表示弱绑定 ;若设为"strong",则表示强绑定;而设为"same",则表示不改变当前的绑定。至 于如何修改,则与两个因素有关:(1)"修改方式",(2)此<edit>的"属性"是否与 同<match>内某个<test>的"属性"相同。具体如下表所示:

"修改方式"              有相同"属性"              无相同"属性"
--------------------------------------------------------------------
"assign"(默认值)        替换第一个匹配的值        替换全部值
"assign_replace"        替换全部值                替换全部值
"prepend"               在第一个匹配的值之前插入  在值列表的首部插入
"prepend_first"         在值列表的首部插入        在值列表的首部插入
"append"                在第一个匹配的值之后添加  在值列表的尾部添加
"append_last"           在值列表的尾部添加        在值列表的尾部添加
"delete"                删除第一个匹配的值        删除全部值
"delete_all"            删除全部值                删除全部值

<alias binding="绑定">

<alias>单元为修改字族名称提供了一种专门的速记法。"绑定"默认值是"weak" ,表示弱绑定;若设为"strong",则表示强绑定;而设为"same",则表示不改变当 前的绑定。<alias>必须首先包含一个单独的<family>单元,然后再依次包含 :0或1个<prefer>单元、0或1个<accept>单元、0或1个<default>单元。这 种标记法等价于如下结构:

<match>
<test name="family" ignore-blanks="true">
<string value=[family]/>
</test>
<edit name="family" binding="绑定" mode="prepend">
<string value=[prefer]/>
... 
</edit>
<edit name="family" binding="绑定" mode="append">
<string value=[accept]/> 
...
</edit>
<edit name="family" binding="绑定" mode="append_last">
<string value=[default]/>
... 
</edit>
</match>

<family>

用于容纳一个单独的字族名称。

<prefer>,<accept>,<default>

这些单元可以容纳一系列特定顺序的<family>单元。

<int>,<double>,<string>,<bool>

这些单元必须按照其声明的类型容纳一个单独的常量值。<bool>只能容纳true或 者 false。此外,浮点数必须以数字开头,而不能以小数点开头(例如:必须使用 0.5而不是.5 ,而对于负数,则必须使用-0.5 而不是-.5 )。

<matrix>

<matrix>必须包含4个<double>单元,以指定仿射变换的四个系数(用于合成斜 体)。此外,也可以用表达式单元(参见前面的解释)来替换<double>单元,但是 每个表达式单元的计算结果都必须是数值。

<range>

<range>通过包含两个<int>单元界定一个整数范围(包括两端的整数)。

<charset>

<charset>可以包含任意数量的<int>,<range>单元,用于表示一组Unicode 码位(code point)。由于每个码位都是一个正整数,都对应着一个Unicode字符, 所以<charset>单元相当于定于了一个字符集。

<langset>

<langset>必须包含至少一个<string>单元,而每个<string>单元必须包含 一个符合RFC-3066规范的语言标记(语言[-国家])。

<name target="目标">

<name>必须包含一个字体属性的名称,而单元的值则等于"目标"的该属性值列表 中的第一个值。"目标"的默认值是"default",表示继承外层<match>单元的值。 唯一的例外是:当外层是<match target="font">时,可将"目标"设为"pattern" ,以强迫此<name>作用于原始的字体模板,而不是选中的字体。

<const> <const>必须包含一个下表中的常量名称。表中的数值总是整数,并且这些常量 只能作为对应属性值的字符记号使用。

      常量            属性            数值  
      ---------------------------------------
      thin            weight          0
      extralight      weight          40
      ultralight      weight          40
      light           weight          50
      book            weight          75
      regular         weight          80
      normal          weight          80
      medium          weight          100
      demibold        weight          180
      semibold        weight          180
      bold            weight          200
      extrabold       weight          205
      black           weight          210
      heavy           weight          210
      roman           slant           0  
      italic          slant           100
      oblique         slant           110
      ultracondensed  width           50
      extracondensed  width           63
      condensed       width           75
      semicondensed   width           87
      normal          width           100
      semiexpanded    width           113
      expanded        width           125
      extraexpanded   width           150
      ultraexpanded   width           200
      proportional    spacing         0  
      dual            spacing         90 
      mono            spacing         100
      charcell        spacing         110
      unknown         rgba            0  
      rgb             rgba            1  
      bgr             rgba            2  
      vrgb            rgba            3  
      vbgr            rgba            4  
      none            rgba            5  
      lcdnone         lcdfilter       0  
      lcddefault      lcdfilter       1  
      lcdlight        lcdfilter       2    
      lcdlegacy       lcdfilter       3    
      hintnone        hintstyle       0    
      hintslight      hintstyle       1    
      hintmedium      hintstyle       2    
      hintfull        hintstyle       3    

<or>,<and>,<plus>,<minus>,<times>,<divide>

这些单元都必须包含至少两个表达式单元(参见前面的解释),然后对它们进行相应 的运算:<or>(或);<and>(与);<plus>(加);<minus>(减);<times>( 乘);<divide>(除)。注意,<or><and>执行的是逻辑运算(而不是位运算) 。

<eq>,<not_eq>,<less>,<less_eq>,<more>,<more_eq>,<contains>,<not_contains>

这些单元都必须包含恰好两个表达式单元(参见前面的解释),然后对它们进行相应 的运算:<eq>(等于);<not_eq>(不等于);<less>(小于);<less_eq>(小 于等于);<more>(大于);<more_eq>(大于等于);<contains>(包含); <not_contains>(不包含)。他们都会得到一个逻辑结果(true 或 false)。

<not>,<floor>,<ceil>,<round>,<trunc>

这些单元都必须包含恰好一个表达式单元(参见前面的解释),然后对它们进行相应 的运算。<not>执行的是逻辑运算(而不是位运算),会得到一个逻辑结果(true 或 false)。其他都是算术运算,都会得到一个整数:<floor>表示向下取整; <ceil>表示向上取整;<round>表示四舍五入;<trunc>表示去掉小数部分。

<if>

<if>必须包含恰好三个表达式单元(参见前面的解释)。如果第一个表达式的值是 真,那么整个单元的值就取第二个表达式的值,否则就取第三个表达式的值。

文件

fonts.conf

是 fontconfig 库的主配置文件,使用 XML 格式。

conf.d

是外部应用程序或本地系统管理员用来保存额外配置文件的目录。其中包 含的配置文件必须是XML格式,文件名必须以ASCII十进制数字开头,并以 字典顺序排序。主配置文件fonts.conf通过<include>单元引用此目录。

fonts.dtd

是描述配置文件语法规则的DTD文件

$XDG_CONFIG_HOME/fontconfig/conf.d, ~/.fonts.conf.d

是每个用户用来保存额外配置文件的目录(通常是自动生成的)。其实际位 置由主配置文件 fonts.conf 指定。需要注意的是~/.fonts.conf.d已 经被反对使用,并会在未来的版本中不再被默认读取。

$XDG_CONFIG_HOME/fontconfig/fonts.conf, ~/.fonts.conf

是每个用户的个性化配置文件。其实际位置由主配置文件fonts.conf指 定。需要注意的是~/.fonts.conf已经被反对使用,并会在未来的版本 中不再被默认读取。

$XDG_CACHE_HOME/fontconfig/*.cache-*, ~/.fontconfig/*.cache-*

当没有在主缓存目录(cachedir)中发现字体的缓存信息时,就会在这些 文件中缓存字体的信息。这些文件由 fontconfig自动维护。需要注意的 是~/.fontconfig/*.cache-*已经被反对使用,并会在未来的版本中不 再被默认读取。

环境变量

Fontconfig_FILE

用于指定主配置文件

Fontconfig_PATH

用于指定保存额外配置文件的目录

FC_DEBUG

用于指定输出哪些调试信息。参见前面的"调试"小节

Fontconfig_USE_MMAP

接受一个bool值,用于控制在访问缓存文件时,是否使用 mmap(2) 系统 调用接口。默认情况下,fontconfig 将会检查缓存文件所在的文件系统 是否可以安全的使用 mmap(2) 功能。明确设置此变量之后,将会跳过这 个检测,强制使用或禁用 mmap(2) 功能。

参见

fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1)

版本

fontconfig version 2.11.1 

版权声明

fonts.conf 中文手册

译者:金步国

本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的 精神发布。

无担保:本文译者不保证译文内容准确无误,亦不承担任何由于使用此文档所导致 的损失。

自由使用:任何人都可以自由的阅读/链接/打印此文档,无需任何附加条件。

名誉权:任何人都可以自由的转载/引用/再创作此文档,但必须保留译者署名并注 明出处。

金步国作品集 [ http://www.jinbuguo.com/ ]

  1. March 2015
  2. fonts.conf(5)