Difference between revisions of "Font configuration (简体中文)"

From ArchWiki
Jump to: navigation, search
(some update)
(flagged broken section links (interactive))
(Tag: wiki-scripts)
 
(69 intermediate revisions by 12 users not shown)
Line 1: Line 1:
[[Category:X Server (简体中文)]]
+
[[Category:X server (简体中文)]]
 
[[Category:Fonts (简体中文)]]
 
[[Category:Fonts (简体中文)]]
[[Category:简体中文]]
+
[[en:Font configuration]]
[[en:Font Configuration]]
+
[[it:Font configuration]]
[[it:Font Configuration]]
+
[[ja:フォント設定]]
[[ru:Font Configuration]]
+
[[ru:Font configuration]]
[[sr:Font Configuration]]
+
[[sr:Font configuration]]
[[tr:Yazıtipi_yapılandırması]]
+
[[tr:Yazıtipi yapılandırması]]
{{out of date}}
+
{{TranslationStatus (简体中文)|Font_Configuration|2014-06-07|229345}}
{{Article summary start|摘要}}
+
{{Translateme (简体中文)}}
{{Article summary text|An overview of font configuration options and various techniques for improving the readability of fonts}}
+
{{Related articles start (简体中文)}}
{{Article summary heading|相关页面}}
+
{{Related2|Fonts (简体中文)|字体}}
{{Article summary wiki|Fonts}}: Information on adding fonts and font recommendations
+
{{Related|Java Runtime Environment Fonts}}
{{Article summary wiki|Java Runtime Environment Fonts}}: Fonts specific to Sun's Java machine
+
{{Related|MS Fonts}}
{{Article summary wiki|MS Fonts}}: Adding Microsoft fonts and mimicking Windows' font settings
+
{{Related|Font configuration/Examples}}
{{Article summary wiki|Font Configuration/fontconfig Examples}}
+
{{Related articles end}}
{{Article summary end}}
+
Fontconfig 是一个为应用程序提供可用 [[Fonts (简体中文)|字体]] 的程序库,也可用来配置字体渲染效果,参见{{Pkg|fontconfig}} 软件包和 [[Wikipedia:Fontconfig]]。Free type 库({{Pkg|freetype2}} 软件包)就是以此为配置基础来渲染字体。
  
Fontconfig is a library designed to provide a list of available [[fonts]] to applications, and also for configuration for how fonts get rendered.  See package {{Pkg|fontconfig}} and [[Wikipedia:Fontconfig]].  The Free type library ({{Pkg|freetype2}} package) renders the fonts, based on this configuration.
+
尽管 Fontconfig 已经是当今 Linux 字体界的标准,但是仍有一部分应用使用更加原始的字体显示方法,[[X Logical Font Description]]
  
Though Fontconfig is the standard in today's Linux, some applications still rely on the original method of font categorization: the Xorg server configuration.
+
Arch Linux 上的字体渲染包支持有字节码解释器(BCI)的''freetype2''。为了更好的字体渲染,特别是在 LCD 显示器上,一些补丁包也添加到库中,参见下面的 [[#补丁包]]。[[#Infinality]] 包同时支持自动微调和亚像素渲染,允许在无须重新编译的情况下微调LCD滤光器,而且在粗体字下自动微调仍然表现良好。
  
The font rendering packages on Arch Linux includes support for ''freetype2'' with the bytecode interpreter (BCI) enabled.  Patched packages exist for better font rendering, especially with an LCD monitor.  See [[#Patched packages]] below.  The [[#Infinality]] package allows both auto-hinting and subpixel rendering, allows the LCD filter to be tweaked without recompiling, and allows the auto-hinter to work well with bold fonts.
+
==字体路径==
  
==X的字体配置和美化==
+
由于应用程序需要知道它们所使用的字体的位置,所以必须对字体做良好的编目,以便于应用程序更好更快的访问它们。
:参见 [http://www.x.org/X11R6.8.2/doc/fonts.html Xorg Font Documentation] 查看所有细节。
+
:参见 the [http://freetype.sourceforge.net/freetype2/ FreeType2 Project Page] 查看关于 freetype X.org 模块的的细节。
+
:参见 [http://avi.alkalay.net/linux/docs/font-howto/Font.html Optimal Use of Fonts on Linux] 查看更多关于 Linux 字体的信息。
+
  
===xorg.conf模块===
+
Fontconfig包含的字体路径是{{ic|/usr/share/fonts/}}和{{ic|~/.fonts/}}(Fontconfig会递归访问上述目录)。为了简化管理和安装过程,当需要[[Fonts#Installation|添加字体]]时,推荐使用上述路径。
*freetype - 为True Type (ttf, ttc), Type1 (pfa, pfb), CID (cid), CFF, Open Type, 点阵bitmap (bdf, pcf, snf), Windows (fnt), PFR, 和 Type42 字体提供支持
+
*type1 - 为Type1 (pfa, pfb) 和CID (cid) 字体提供支持
+
*speedo - 支持Bitstream Speedo (spd) 字体
+
*xtt - 为True Type (ttf, ttc) 字体提供支持 ('''与freetype有冲突''')
+
*bitmap - 提供bitmap (bdf, pcf, snf) 的支持
+
  
如你所看到的,freetype提供了所有的支持.补充说明一点,xtt于freetype有冲突.
+
查看Fontconfig所包含的字体:
 +
$ fc-list : file
  
==X.org字体路径和/etc/fonts/配置目录==
+
参见{{ic|man fc-list}}以获得更多输出格式方面的信息。
===xorg.conf字体路径===
+
xorg.conf里面的字体路径是给非xft字体用的. 为大多数字体在这里指定路径是值得的.  那些不支持xft的程序会寻找X的字体路径.我个人来说,我在这里填写最少的字体路径-仅仅为了xterm和那一类程序使用.
+
  
===/etc/fonts/配置目录===
+
通过考察Xorg的log文件来检查Xorg包含的字体路径:
/etc/fonts下的配置文件 (fonts.conf and local.conf)是用来配置字体的(Xft fonts). fonts.conf 不应该被更改, 如果要更改应该改local.conf(系统全局) 或者 ~/.fonts.conf (用户自定义).
+
  $ grep /fonts /var/log/Xorg.0.log
/etc/fonts/conf.d目录下的文件都是以一个数字开头,还有.conf结尾的一个软链接(指向/etc/fonts/conf.avail/).
+
  
在fonts.conf列出的目录会为字体配置而被fc-cache扫描 (/usr/share/fonts 和 ~/.fonts).  所有的字体都应该放在这些文件夹内. 如果安装一个新字体,运行'''fc-cache -fv'''会让改变生效.
+
{{小贴士|你也可以通过命令{{ic|xset q}}检查Xorg包含的字体路径。}}
  
===添加新字体===
+
需要明确的是,Xorg不会像Fontconfig一样递归搜索{{ic|/usr/share/fonts/}}目录。如果要增加一个目录,必须使用一个完整目录:
当新字体被添加后,它们不过是系统里面的一些文件. 必须使用一些工具来告诉系统新字体已经被安装了.
+
  Section "Files"
/usr/bin/fc-cache
+
    FontPath    "/usr/share/fonts/local/"
这样将会更新系统字体缓存, 当然是假设新字体能够被配置文件找到 (看上一节关于/etc/fonts部分)
+
  EndSection
  /usr/bin/mkfontscale
+
/usr/bin/mkfontdir
+
  ln -s /usr/X11R6/lib/X11/fonts/encodings/encodings.dir encodings.dir
+
  
这几个工具需要在含有新字体的目录内运行. mkfontscale创建一个fonts.scale文件, mkfontdir 则创建一个fonts.dir文件. 这两个文件被X服务所使用, 也仅仅需要当字体通过X.org的字体路径使用的时候运行.而encodings的软链接允许X服务使用这些新字体(支持相关编码情况下).所有这些完成后, 你会发现这个字体目录下有3个新文件 : fonts.scale, fonts.dir, and encodings.dir.
+
如果你想把字体路径设置到每一位用户,你可以通过添加下面的配置代码到文件{{ic|~/.xinitrc}},这样可以将字体路径添加进或者移除出默认的路径中:
 +
xset +fp /usr/share/fonts/local/          # Prepend a custom font path to Xorg's list of known font paths
 +
xset -fp /usr/share/fonts/sucky_fonts/    # Remove the specified font path from Xorg's list of known font paths
  
===fc-list和xlsfont工具===
+
如果要查看Xorg包含的字体,可以使用这个命令{{ic|xlsfonts}}, 这个命令来自包{{Pkg|xorg-xlsfonts}}。
这两个工具将在命令行下用不同方式列出所有可用字体. fc-list将列出所有配置过的字体,而xlsfont则会列出所有的X字体. 如果同时使用grep效果会非常好,例如: "xlsfonts || grep -i bitstream" 可以看到所有可用的bitstream字体.
+
  
==一些字体的下载==
+
==Fontconfig配置==
*[http://www.users.bigpond.net.au/gavindi/ Arkpandora TrueType fonts] - Replacements for Arial and Times New Roman.
+
*[http://themes.freshmeat.net/projects/ppantsfonts/ PPants Angular Font Collection]-Small collection of Angular-styled fonts with a general width of six pixels.
+
*[http://www.tobias-jung.de/seekingprofont/ Profont]-Programming font.
+
  
==Goodies==
+
通过对{{ic|$XDG_CONFIG_HOME/fontconfig/fonts.conf}}的修改可以完成对某个用户的配置, 而对{{ic|/etc/fonts/local.conf}}的修改则可以完成对每一位用户的配置. 如果用户的单独配置和全局配置不同,系统优先使用前者.  这些文件共用相同的语法.
===LCD的ClearType补丁===
+
{{Note|配置文件和目录: {{ic|~/.fonts.conf}}, {{ic|~/.fonts.conf.d}} 和 {{ic|~/.fontconfig/*.cache-*}} 从fontconfig 2.10.1开始已经被废弃([http://cgit.freedesktop.org/fontconfig/commit/?id=8c255fb185d5651b57380b0a9443001e8051b29d upstream commit]) 未来的版本也不会默认读取这些文件当作配置依据. 分别用 {{ic|$XDG_CONFIG_HOME/fontconfig/fonts.conf}}, {{ic|$XDG_CONFIG_HOME/fontconfig/conf.d}} 和{{ic|$XDG_CACHE_HOME/fontconfig/*.cache-*}} 来代替.}}
[http://bbs.archlinux.org/viewtopic.php?id=33955 http://bbs.archlinux.org/viewtopic.php?id=33955]
+
  
===我的字体很难看.我都配置好了,但是好像是我缺少好看字体.===
+
Fontconfig 把所有的配置都放在一个中心文件中 ({{ic|/etc/fonts/fonts.conf}})这个文件会在fontconfig更新时被替换,注意你不应该编辑这个文件. 字体设置重要的程序会引用这个文件以获得当前字体配置和渲染配置.这个文件是一系列配置规则的集合包括全局配置文件({{ic|/etc/fonts/local.conf}}), 预设的配置 {{ic|/etc/fonts/conf.d/}}, 和用户的配置文件 ({{ic|$XDG_CONFIG_HOME/fontconfig/fonts.conf}}).
建议你从pacman安装如下包来解决:
+
  pacman -S ttf-ms-fonts ttf-cheapskate artwiz-fonts
+
  
另外一个方法是删除75/100dpi包然后安装Bitstream Vera.后者提供漂亮的等宽终端字体,也能是浏览网页字体更好看(至少是firefox里面这样):
+
{{Note|有一些桌面环境 (比如说 [[GNOME]] 和 [[KDE]]) 使用 ''Font Control Panel'' 会自动生成和重写用户字体配置文件. 对于这些桌面环境, 最好配合已定义的字体配置来得到需要的显示效果.}}
  pacman -Rns xorg-fonts-75dpi xorg-fonts-100dpi
+
pacman -S ttf-bitstream-vera
+
  
补充:中文用户,安装如下任意一个中文字体,带有很全的GBK字符集,需要打开community仓库
+
配置文件使用[[Wikipedia:XML|XML]]格式并且需要一些格式头:
pacman -S wqy-bitmapfont 文泉驿点阵字体
+
pacman -S wqy-zenhei 文泉驿正黑字体
+
  
===我有一些针对Gtk 2.2和以下版本编译的程序,字体仍然看起来很垃圾.===
+
{{bc|<nowiki>
的确这个会发生.现在的Gtk程序默认开启了xft支持, 但是2.2字体以前就没有这样了. 也许这些程序应该升级到一个针对新Gtk的新版本了. 如果那不可能,那么就添加 '''export GDK_USE_XFT=1''' 到全局设置文件 (/etc/profile, /etc/profile.d/gnome.sh, ~/.xinitrc, 等,任选一个) 将会为老程序启用xft的支持.
+
<?xml version="1.0"?>
 +
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
 +
<fontconfig>
  
===我有的老的Qt基础的程序有同样的问题.===
+
  <!-- settings go here -->
同上, 添加 '''export QT_XFT=true'''.
+
  
===在用KDE桌面的时候,Gtk程序字体太小.===
+
</fontconfig>
安装gtk-qt-engine:
+
</nowiki>}}
pacman -S gtk-qt-engine
+
*更改Gtk程序字体大小:`Control Center' -> `Appearance & Themes' -> `GTK Styles and Fonts'.
+
  
===bytecode interpreter让我字体看起来很丑,但是我已经把它编译进去了,我需要重新编译么?===
+
文中的配置示例省略了这些标签.
完全不需要. 只是Freetype内部的自动微调(auto-hinting)关闭了. 在某些distros(也许可以翻译成源)里面, bytecode interpreter 被编译进去而且默认开启了. 这样造成bytecode interpreter 替代了freetype的自动微调(autohinter) (这还是开发者比较得意的地方). 指定自动微调开启, 添加下面的段到/etc/fonts/local.conf 或者 ~/.fonts.conf
+
      <!-- Use the Autohinter -->
+
      <match target="pattern">
+
        <edit name=<code>"autohint" mode=</code>"assign">
+
            <bool>true</bool>
+
        </edit>
+
      </match>
+
  
或者改变 /etc/fonts/conf.d目录, 即从conf.avail做一个10-autohint.conf的软链接到这里.  如下(第二个命令需要有超级用户权限).
+
在线的字体配置请点击[http://wenq.org/cloud/fcdesigner_local.html 此处]。
cd /etc/fonts/conf.d
+
ln -s ../conf.avail/10-autohint.conf
+
  
问题: 我不明白,bytecode interpreter 会和自动微调(autohinter)冲突都有段时间了,所以我不知道为什么有人想要自动微调.
+
===预设===
回答: 因为 bytecode interpreter 在2.3分支(branch)里面支持相当不好 . 这里有一个论坛帖子是关于这个的: http://bbs.archlinux.org/viewtopic.php?id=29976 那上面的代码让我的字体好看很多. 尽管我重启效果就会失效,我也不知道为什么.
+
  
===自动微调(Autohint)运行的很好,但是我的字体的粗体就不行了,我怎样能针对粗体关闭它?===
+
预设配置放在目录{{ic|/etc/fonts/conf.avail}}中. 当给它们创建了[[Wikipedia:Symbolic link|符号链接]], 这些配置就被激活了.不管是对某一个用户还是全局配置, 这一规则是相同的.在{{ic|/etc/fonts/conf.d/README}}中有描述.  这些预设会通过匹配它们原先它们的单独设置文件来覆盖配置.
自动微调可以让字体很好看,但是有时也让字体变太宽. 特别是字体为粗体模式时尤其严重. 幸好你可以为粗体关闭微调,而为其他字体模式保留.
+
*First turn on autohinter (see above) and add the following to ~/[[.fonts.conf]]
+
      <match target="font">
+
          <test name=<code>"weight" compare=</code>"more">
+
              <const>medium</const>
+
          </test>
+
          <edit name=<code>"autohint" mode=</code>"assign">
+
              <bool>false</bool>
+
          </edit>
+
      </match>
+
  
===我有一个使用DVI数据线的TFT/DFP/LCD显示器,字体看起来模糊不清晰===
+
举个例子,为了打开全局亚像素RGB渲染:
这是CRT和非CTR渲染的不同造成的. 为了解决这个问题,你应该开启次像素(sub-pixel)渲染.  编辑~/[[[.fonts.conf]]] 文件.  添加下面一小段开启用. 说明:这样并没有显示质量的提高,只是做了CRT显示器完成的一部分额外工作(NOTE that this will do nothing but a minor amount of extra work on CRTs and does not improve the display quality). 这里 '''const'''可能的值是- rgb, bgr, vrgb, bgrv, 等.
+
  
  < !-- Enable sub-pixel rendering -->
+
  # cd /etc/fonts/conf.d
<match target="font" >
+
# ln -s ../conf.avail/10-sub-pixel-rgb.conf
  <edit mode="assign" name="rgba" >
+
  <const>rgb</const>
+
  </edit>
+
</match>
+
  
===我不希望我的字体在某些字号下反锯齿(或者叫边缘模糊 AA Antialiase).===
+
为单个独立用户配置:
一份例子是/etc/fonts/local.conf文件. 推荐这样做, 当然就像次像素渲染那一节一样写. 如果有任何改变,就应该改变 '''compare="less_eq"''' , 和'''<int>12</int>'''区域 - 这分别是渲染强弱和点大小.
+
      <!-- Disable anti-aliasing for fonts that are size <=12 -->
+
      <match target="pattern">
+
        <test qual="any" name="size" compare="less_eq">
+
            <int>12</int>
+
        </test>
+
        <edit name="antialias" mode="assign"><bool>false</bool></edit>
+
      </match>
+
  
===我使用MS的TrueType字体(verdana),想针对看起来有锯齿的大号字体开启反锯齿.===
+
$ mkdir $XDG_CONFIG_HOME/fontconfig/conf.d
      <?xml version="1.0"?>
+
$ ln -s /etc/fonts/conf.avail/10-sub-pixel-rgb.conf $XDG_CONFIG_HOME/fontconfig/conf.d
      <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+
      <fontconfig>
+
  
      <match target="font" >
+
===抗锯齿===
      <test compare<code>"more" name</code>"size" qual="any" >
+
 
      <double>12</double>
+
[[Wikipedia:Font rasterization|字体光栅化]]将矢量字体数据转化为位图数据以显示在屏幕上. 最后的效果可能由于[[Wikipedia:Aliasing|走样]]会出现锯齿. [[Wikipedia:Anti-aliasing|抗锯齿]]默认被打开,这样可以增加字体边缘的分辨率.
      </test>
+
 
      <edit mode<code>"assign" name</code>"antialias" >
+
{{bc|<nowiki>
 +
  <match target="font">
 +
    <edit name="antialias" mode="assign">
 
       <bool>true</bool>
 
       <bool>true</bool>
      </edit>
+
    </edit>
      </match>
+
  </match>
 +
</nowiki>}}
 +
 
 +
===微调===
 +
 
 +
[[Wikipedia:Font hinting|字体微调]] (也叫做instructing) 是利用精确的指令来调整字体显示的轮廓,这样就可以用离散的网格来显示我们需要的线条, 比如说像素网格.字体在[[Wikipedia:Dots per inch|DPI]]达到300之前不可能正确的显示.我们有两种微调的方法可以用.
 +
 
 +
====字节码解释器(BCI)====
 +
当用BCI方法时,TrueType字体里的指令就会被唤醒并用FreeTypes的解释器来渲染,这在自带良好微调指令的字体上工作的很好.
 +
 
 +
打开normal hinting:
  
      <match target="font" >
+
{{bc|<nowiki>
      <test compare<code>"more" name</code>"pixelsize" qual="any" >
+
  <match target="font">
      <double>17</double>
+
    <edit name="hinting" mode="assign">
      </test>
+
      <edit mode<code>"assign" name</code>"antialias" >
+
 
       <bool>true</bool>
 
       <bool>true</bool>
      </edit>
+
    </edit>
      </match>
+
  </match>
      </fontconfig>
+
</nowiki>}}
  
===我想安装更多字体.===
+
====自动微调器====
保存你的字体到一个目录然后到'''~/[[[.fonts.conf]]]'''添加路径
+
自动微调器方法就是微调全自动并且忽视任何内嵌的微调指令,起初这种方法是缺省配置的,因为以前的TrueType2字体都是有专利保护限制,没办法用BCI方法微调,但是现在这些专利都已经过期,所以限制也就没有了,当然也就是没有多大意义用自动微调这种方法了。但是它对内嵌微调指令不完整或者干脆没有的字体非常管用,相对的,如果字体自身有良好的微调指令,这种方法就绝对不提倡了。现如今,一般字体都有不错的微调指令,所以自动微调器这种方法就没多大用武之地。
  
    < !-- Additional font directories -->
+
打开自动微调(auto-hinting):
    <dir>/path/to/dir</dir>
+
  
===我希望我的字体大小符合我的DPI设置.===
+
{{bc|<nowiki>
照下面编辑'''~/[[[.fonts.conf]]]'''. 这个设置应该适合你[[xorg.conf]]里面的Dpi,或者startx命令. 使用xdpyinfo来查看你目前的DPI设置. 大多数人适合或者正在使用96或者100的值.应该依照这个文档[[Xorg#Display_Size.2FDPI|Xorg DisplaySize/DPI]]来改变X的DPI值
+
  <match target="font">
  <!-- Setup for DPI = 100 -->
+
    <edit name="autohint" mode="assign">
      <match target="pattern">
+
      <bool>true</bool>
        <edit name=<code>"dpi" mode=</code>"assign"><double>100</double></edit>
+
    </edit>
      </match>
+
  </match>
 +
</nowiki>}}
  
===我不喜欢 <某个字体>希望用<另一个字体>替代它===
+
====微调样式====
  
最可靠的办法是同上面一样添加一段XML段落到 ~/[[.fonts.conf]]. 这会让Bitstream Vera Sans取代Helvetica:
+
微调样式就是微调时可以采用的款式,包括{{ic|hintfull}}, {{ic|hintmedium}}, {{ic|hintslight}} 还有 {{ic|hintnone}}。至于效果,{{ic|hintslight}}可以较好的保持字体的形态但是在像素网格里的排列会有些模糊,{{ic|hintfull}}则相反,排列清晰但字体的体态就不慎清楚。所以如果用BCI微调法,就推荐用{{ic|hintfull}},自动微调的话就{{ic|hintslight}}了。
  
<match target="pattern" name="family" >
+
{{bc|<nowiki>
  <test name="family" qual="any" >
+
  <match target="font">
  <string>Helvetica</string>
+
    <edit name="hintstyle" mode="assign">
  </test>
+
      <const>hintfull</const>
  <edit mode="assign" name="family" >
+
    </edit>
  <string>Bitstream Vera Sans</string>
+
   </match>
   </edit>
+
</nowiki>}}
</match>
+
  
 +
{{Note|Some applications, like [[GNOME|GNOME 3]] may [[#Troubleshooting|override default hinting settings.]]{{Broken section link}}}}
  
 +
===亚像素渲染===
  
一个另类的办法是设置"更喜欢"字体,'''但这仅仅在原始字体不存在的时候生效''',这样你设置的字体才能生效:
+
如今生产的显示器大部分用的是红绿蓝(RGB)规范,也有用'''BGR''', '''V-RGB''' (vertical), 或者 '''V-BGR'''规范的(具体什么类型可以[http://www.lagom.nl/lcd-test/subpixel.php 这里]查看)。为了正确显示字体,Fontconfig得知道你的显示器具体类型。
  
 +
打开亚像素渲染:
  
      < !-- Replace Helvetica with Bitstream Vera Sans Mono -->
+
{{bc|<nowiki>
      < !-- Note, an alias for Helvetica should already exist in default conf files -->
+
  <match target="font">
      <alias>
+
    <edit name="rgba" mode="assign">
        <family>Helvetica</family>
+
      <const>rgb</const>
        <prefer><family>Bitstream Vera Sans Mono</family></prefer>
+
    </edit>
        <default><family>fixed</family></default>
+
  </match>
      </alias>
+
</nowiki>}}
  
===我有一堆不想要的恶心的像素字体(pixel fonts)===
+
{{Note|Subpixel rendering effectively triples the horizontal (or vertical) resolution for fonts by making use of subpixels. The autohinter and subpixel rendering are not designed to work together and should not be used in combination without the [[#Infinality: the generic way|Infinality]]{{Broken section link}} patch set.}}
只有两个字体你需要一定保留,否则X服务无法启动:'cursor' 和 'fixed', 他们都在/usr/share/fonts/misc目录. 如果你不想要除此之外所有的像素字体, 你可以删除那个目录下多数文件, 除了'''cursor.pcf.gz'''和所有类似'''9x18.pcf.gz'''或者'''9x18-ISO8859-1.pcf.gz'''. 我删除所有不需要字体后,misc目录还有大约337个文件, 所以如果你比这个数字少,那么在重启X之前你最好是还原删除的问题件.
+
  
译者补充:
+
====LCD过滤器====
*我试过这种方法,不过我的文件是可以更少的,只需要保留cursor.pcf.gz和类似6x13-Iso8859-[1-10].pcf.gz就行了,没有实验能不能更少,其实没有必要删除这么多,系统还是会剩下某个字号的fiexd字体,可以利用上面提到的字体替换方法替换成你喜欢字体,避免任何程序调用.
+
  
*如够你删除了所有文件,但是没有备份,那么可以
+
当使用亚像素渲染时,你最好启用LCD过滤器,这个是设计用来减少彩色边纹现象的,具体解释参见FreeType 2 API参考里的[http://www.freetype.org/freetype2/docs/reference/ft2-lcd_filtering.html LCD filtering]。它的各个不同选项的描述位于[http://www.freetype.org/freetype2/docs/reference/ft2-lcd_filtering.html#FT_LcdFilter FT_LcdFilter],具体实例看[http://www.spasche.net/files/lcdfiltering/ LCD filter test]。
pacman -S xorg-fonts-misc
+
来重新安装这个字体,否则你的X是不能启动的,当然也可以解压你cache文件夹下相应包.
+
  
*这种方法对于opera的中文字体难看问题有一定程度的解决
+
{{ic|lcddefault}}这个选项对大多数用户都适用,其他选项则都有某一特定的用途:{{ic|lcdlight}}对那些字体看起来太粗或者模糊的超管用,{{ic|lcdlegacy}}嘛可用来对付Cairo字体,而{{ic|lcdnone}}的意思则是完全禁用{{ic|LCD过滤器}}功能。
  
===我的点阵字体被禁用了,我想使用它们.===
+
{{bc|<nowiki>
默认的, fontconfig 2.3.2-4和更高版本会禁用点阵(bitmap)字体. 这个设置是被/etc/fonts/conf.d/10-no-bitmaps.conf管理的, 在更高版本里面是/etc/fonts/conf.d/10-bitmaps.conf.
+
  <match target="font">
启用点阵字体而且在升级fontconfig后也保持, 建立一个软链接从yes-bitmaps.conf到10-bitmaps.conf, 覆盖no-bitmaps.conf.
+
    <edit mode="assign" name="lcdfilter">
 +
      <const>lcddefault</const>
 +
    </edit>
 +
  </match>
 +
</nowiki>}}
  
===为没有粗斜体的字体构造粗体和斜体===
+
====高级LCD过滤器说明====
Freetype已经具备这样的能力,但是如果不是程序要求,是不会这样作的 - 也就是说它自己无论如何也不会给正常字体添加粗斜体样式. 要是用这些样式,你需要手动编辑''/usr/share/fonts/fonts.cache-1'' (保留一份你的修改,因为fc-cache的更新会覆盖它). 假设你有一个字体叫Dupree:
+
      "dupree.ttf" 0 "Dupree:style=Regular:slant=0:weight=80:width=100:foundry=unknown:index=0:outline=True:....
+
复制这一行, 把 ''style=Regular''改成''style=Bold''或者其他样式. 同时为斜体更改 ''slant=0'' 为 ''slant=100'' , 为粗体更改''weight=80''为''weight=200'' (粗斜体则都更改):
+
      "dupree.ttf" 0 "Dupree:style=Bold Italic:slant=100:weight=200:width=100:foundry=unknown:index=0:outline=True:....
+
添加必须的设置到''~/.fonts.conf'':
+
      <match target="font">
+
        <test name="family" qual="any">
+
            <string>Dupree</string>
+
            &lt;!-- other fonts here .... --&gt;
+
        </test>
+
        <test compare="more_eq" name="weight"><int>140</int></test>
+
        <edit mode="assign" name="embolden"><bool>true</bool></edit>
+
      </match>
+
      <match target="font">
+
        <test name="family" qual="any">
+
            <string>Dupree</string>
+
            &lt;!-- other fonts here .... --&gt;
+
        </test>
+
        <test compare="more_eq" name="slant"><int>80</int></test>
+
        <edit mode="assign" name="matrix">
+
            <times>
+
              <name>matrix</name>
+
              <matrix>
+
                  <double>1</double><double>0.2</double>
+
                  <double>0</double><double>1</double>
+
              </matrix>
+
            </times>
+
        </edit>
+
      </match>
+
(注意,现在你就能使用粗体了 - 或者把他们变得更粗)
+
  
===~/.fonts.conf===
+
如果对内置的{{ic|LCD过滤器}}不满意,那可以自己对字体渲染来一个360度微调,只要修改下硬编码了的过滤器|filters并创建一个自定义的freetype2软件包就可以了。[[Arch Build System]]就是用来从源文件创建并安装软件包的一个工具。
一个网络开发者的.~/[[.fonts.conf]],是论坛上来的. 备份你现有的这是,尝试一下. 
+
<pre>
+
<?xml version="1.0"?>
+
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+
  
<!-- the cathectic LCD tweaks, from linuxquestions.org,
+
首先,以root用户刷新下freetype2的PKGBUILD文件:
http://www.linuxquestions.org/questions/showthread.php? postid=1361098#post1361098 -->
+
  
  <fontconfig>
+
  # abs extra/freetype2
  
<!-- Disable sub-pixel rendering.
+
{{Note|下面这个示例以{{ic|/var/abs/build}}作为编译目录,请根据各自的ABS设置值来替换。}}
X detects it anyway, and if you set this as well, it just looks really horrible  -->
+
<match target="font" >
+
<edit mode="assign" name="rgba" >
+
<const>none</const>
+
</edit>
+
</match>
+
<match target="font" >
+
<edit mode="assign" name="hinting">
+
<bool>true</bool>
+
</edit>
+
</match>
+
<match target="font" >
+
<edit mode="assign" name="hintstyle">
+
<const>hintfull</const>
+
</edit>
+
</match>
+
  
<!-- The first part of the 'magic.'
+
然后切换回普通用户,下载并解压freetype2软件包:
This makes the fonts start to look nice,
+
but some of the shapes will be distorted, so hinting is needed still -->
+
<match target="font" >
+
<edit mode="assign" name="antialias">
+
<bool>true</bool>
+
</edit>
+
</match>
+
  
  <!-- Autohinter is not turned on automatically.
+
  $ cd /var/abs/build
  Only disable this if you have recompiled Freetype with the bytecode interpreter,
+
$ cp -r ../extra/freetype2 .
  which is run automatically.<br />  -->
+
$ cd freetype2
  <match target="pattern" >
+
$ makepkg -o
<edit mode="assign" name="autohint">
+
 
<bool>true</bool>
+
接着编辑一下{{ic|src/freetype-VERSION/src/base/ftlcdfil.c}}这个文件,看看{{ic|default_filter[5]}}这个变量是怎么定义的:
</edit>
+
 
  </match>
+
  static const FT_Byte  default_filter[5] =
 +
    { 0x10, 0x40, 0x70, 0x40, 0x10 };
 +
 
 +
上面这个变量定义了一个应用于rendered glyph的低通过滤器|filter,请根据需要修改,然后保存、创建并安装这个自定义软件包:
 +
 
 +
  $ makepkg -e
 +
$ sudo pacman -Rd freetype2
 +
  $ sudo pacman -U freetype2-VERSION-ARCH.pkg.tar.xz
 +
 
 +
最后重启机器或者重启X服务器,{{ic|lcddefault}}这个过滤器字体渲染的效果应该就出来了。
 +
 
 +
===取消粗体字的自动微调功能===
 +
 
 +
{{ic|自动微调}}使用了很复杂的方法来渲染字体,但常常把粗体字弄得太宽了,好在有一个方法,可以让{{ic|自动微调}}在粗体字上不起作用的同时而不影响其他字体:
 +
  ...
 
  <match target="font">
 
  <match target="font">
<test name="weight" compare="more">
+
    <test name="weight" compare="more">
<const>medium</const>
+
        <const>medium</const>
</test>
+
    </test>
<edit name="autohint" mode="assign">
+
    <edit name="autohint" mode="assign">
<bool>false</bool>
+
        <bool>false</bool>
</edit>
+
    </edit>
 
  </match>
 
  </match>
  <!-- Helvetica is a non true type font, and will look bad.
+
  ...
This replaces it with whatever is the default sans-serif font -->
+
<match target="pattern" name="family" >
+
<test name="family" qual="any" >
+
<string>Helvetica</string>
+
</test>
+
<edit mode="assign" name="family" >
+
<string>sans-serif</string>
+
</edit>
+
</match>
+
<dir>~/.fonts</dir>
+
</fontconfig>
+
</pre>
+
  
===另一个.fonts.conf===
+
===只对较大的字体打开反锯齿功能===
<pre>
+
<?xml version="1.0"?>
+
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+
  
<fontconfig>
+
有些用户更偏爱锐利一点的渲染效果而不是反锯齿那样的:
  
<!-- Info:
+
{{bc|<nowiki>
xeffects thread:  http://forums.gentoo.org/viewtopic-t-511382.html
+
...
http://wiki.archlinux.org/index.php/XOrg_Font_Configuration
+
<match target="font">
http://antigrain.com/research/font_rasterization/index.html
+
    <edit name="antialias" mode="assign">
http://fontconfig.org/fontconfig-user.html
+
        <bool>false</bool>
-->
+
    </edit>
 +
</match>
  
 +
<match target="font" >
 +
    <test name="size" qual="any" compare="more">
 +
        <double>12</double>
 +
    </test>
 +
    <edit name="antialias" mode="assign">
 +
        <bool>true</bool>
 +
    </edit>
 +
</match>
  
<!-- http://bugs.gentoo.org/show_bug.cgi?id=130466 -->
+
<match target="font" >
 +
    <test name="pixelsize" qual="any" compare="more">
 +
        <double>16</double>
 +
    </test>
 +
    <edit name="antialias" mode="assign">
 +
        <bool>true</bool>
 +
    </edit>
 +
</match>
 +
...
 +
</nowiki>}}
  
<alias>
+
===字体替换===
<family>serif</family>
+
  <prefer>
+
  <family>Bitstream Vera Serif</family>
+
  <family>DejaVu Serif</family>
+
  <family>WenQuanYi Micro Hei</family>
+
  <family>WenQuanYi Zen Hei</family>
+
  </prefer>
+
</alias>
+
  
<alias>
+
最可靠的方法是添加像下面那样的一个XML片段。关键点在于''使用“binding”属性可以有更好的效果'',例如在Firefox你可能只想替换字体但并不想改变被替换字体的属性。下面的例子演示的是Georgia如何被Ubuntu字体替换掉的:
<family>sans-serif</family>
+
...
  <prefer>
+
  <match target="pattern">
  <family>DejaVu Sans</family>
+
    <test qual="any" name="family"><string>georgia</string></test>
  <family>Bitstream Vera Sans</family>
+
    <edit name="family" mode="assign" binding="same"><string>Ubuntu</string></edit>
  <family>WenQuanYi Micro Hei</family>
+
  </match>
  <family>WenQuanYi Zen Hei</family>
+
...
  </prefer>
+
另外一种方法是设置“优先”字体,但是''这只有在原字体系统缺失的情况下才有效'',这种情况真发生了的话,设定的字体就会把它换了:
</alias>
+
...
 +
< !-- Replace Helvetica with Bitstream Vera Sans Mono -->
 +
< !-- Note, an alias for Helvetica should already exist in default conf files -->
 +
<alias>
 +
    <family>Helvetica</family>
 +
    <prefer><family>Bitstream Vera Sans Mono</family></prefer>
 +
    <default><family>fixed</family></default>
 +
</alias>
 +
...
  
<alias>
+
===禁用点阵字型===
<family>monospace</family>
+
  <prefer>
+
  <family>DejaVu Sans Mono</family>
+
  <family>Bitstream Vera Sans Mono</family>
+
  <family>WenQuanYi Micro Hei Mono</family>
+
  <family>WenQuanYi Zen Hei Mono</family>
+
  </prefer>
+
</alias>
+
  
<!-- Reject bitmap fonts in favour of Truetype, Postscript, etc. -->
+
想禁用点阵字体(这个经常是在因为字体缺失而被回滚使用,却导致字体被渲染得很像素化)可以使用{{ic|70-no-bitmaps.conf}}(fontconfig缺省情况没有内置这个文件):
<selectfont>
+
<rejectfont>
+
<pattern>
+
<patelt name="scalable">
+
<bool>false</bool>
+
</patelt>
+
</pattern>
+
</rejectfont>
+
</selectfont>
+
  
<!-- Replace Luxi Sans with a better-looking font - looks terrible at e.g. http://market-ticker.org/ -->
+
# cd /etc/fonts/conf.d
<match name="family" target="pattern">
+
# rm 70-yes-bitmaps.conf
<test name="family" qual="any">
+
# ln -s ../conf.avail/70-no-bitmaps.conf
<string>Luxi Sans</string>
+
</test>
+
<edit name="family" mode="assign">
+
<string>Liberation Sans</string>
+
</edit>
+
</match>
+
  
<!-- Ubuntu options:  lcdnone, lcddefault, lcdlight, lcdlegacy -->
+
下面的就一行效果也一样:
<!-- hintnone, hintslight, hintmedium, hintfull -->
+
<!-- Keep autohint off -->
+
<!-- Blurry fonts:  Try rgb, bgr, vrgb, vbgr for "rgba" -->
+
<!-- Blurry:  http://forums.gentoo.org/viewtopic-p-5060979.html#5060979 -->
+
<match target="font">
+
<edit name="rgba" mode="assign"><const>rgb</const></edit>
+
<edit name="autohint" mode="assign"><bool>false</bool></edit>
+
<edit name="antialias" mode="assign"><bool>true</bool></edit>
+
<edit name="hinting" mode="assign"><bool>true</bool></edit>
+
<edit name="hintstyle" mode="assign"><const>hintmedium</const></edit>
+
<edit name="lcdfilter" mode="assign"><const>lcddefault</const></edit>
+
</match>
+
  
     <!-- Tweak Courier -->
+
# ln -s /etc/fonts/conf.avail/70-no-bitmaps.conf /etc/fonts/conf.d/
     <match name="family" target="pattern">
+
 
 +
可能你并没有{{ic|70-yes-bitmaps.conf}}这个文件,所以也就无须什么删除了。 利用下面这个配置文件,你就可以决定用什么字体来替换点阵字体了:
 +
 
 +
{{hc|~/.config/fontconfig/conf.d/29-replace-bitmap-fonts.conf|<nowiki>
 +
<?xml version="1.0"?>
 +
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
 +
<fontconfig>
 +
     <!-- Replace generic bitmap font names by generic font families -->
 +
     <match target="pattern" name="family">
 
         <test name="family" qual="any">
 
         <test name="family" qual="any">
             <string>Courier</string>
+
             <string>Helvetica</string>
 
         </test>
 
         </test>
<edit name="lcdfilter" mode="assign"><const>lcdlegacy</const></edit>
+
        <edit mode="assign" name="family">
 +
            <string>Arial</string>
 +
            <string>Liberation Sans</string>
 +
            <string>sans-serif</string>
 +
        </edit>
 
     </match>
 
     </match>
 
+
     <match target="pattern" name="family">
    <!-- Tweak Courier New -->
+
     <match name="family" target="pattern">
+
 
         <test name="family" qual="any">
 
         <test name="family" qual="any">
 +
            <string>Courier</string>
 +
        </test>
 +
        <edit mode="assign" name="family">
 
             <string>Courier New</string>
 
             <string>Courier New</string>
 +
            <string>Liberation Mono</string>
 +
            <string>monospace</string>
 +
        </edit>
 +
    </match>
 +
    <match target="pattern" name="family">
 +
        <test name="family" qual="any">
 +
            <string>Times</string>
 
         </test>
 
         </test>
<edit name="lcdfilter" mode="assign"><const>lcdlegacy</const></edit>
+
        <edit mode="assign" name="family">
 +
            <string>Times New Roman</string>
 +
            <string>Liberation Serif</string>
 +
            <string>serif</string>
 +
        </edit>
 
     </match>
 
     </match>
 +
</fontconfig>
 +
</nowiki>}}
  
 +
<div id="EmbeddedBitmap">禁用所有字体里的点阵字型:<div>
 +
 +
{{hc|~/.config/fontconfig/conf.d/20-no-embedded.conf|<nowiki>
 +
<?xml version="1.0"?>
 +
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
 +
<fontconfig>
 +
  <match target="font">
 +
    <edit name="embeddedbitmap" mode="assign">
 +
      <bool>false</bool>
 +
    </edit>
 +
  </match>
 
</fontconfig>
 
</fontconfig>
 +
</nowiki>}}
 +
 +
只禁用特定字体里的点阵字型:
 +
 +
<match target="font">
 +
  <test qual="any" name="family">
 +
    <string>Monaco</string>
 +
  </test>
 +
  <edit name="embeddedbitmap"><bool>false</bool></edit>
 +
</match>
 +
 +
=== 禁用点阵字体的缩放 ===
 +
 +
如果要禁用点阵字体的缩放功能(这个经常会把字搞得很模糊),请删除 {{ic|/etc/fonts/conf.d/10-scale-bitmap-fonts.conf}}.
 +
 +
===为不完善的字体构建粗体风格和斜体风格===
 +
 +
Freetype字体可以自动为没有''斜体''和'''粗体'''的字体创建''斜体''和'''粗体''',但这只会在应用程序明确地提出这样请求下生效。但现有的程序很少会发出这样的请求,这版讲述如何手动强制生成缺少的字体风格。
 +
 +
按照如下描述编辑{{ic|/usr/share/fonts/fonts.cache-1}}。因为执行{{ic|fc-cache}}时会覆盖{{ic|/usr/share/fonts/fonts.cache-1}},所以编辑前请先备份{{ic|/usr/share/fonts/fonts.cache-1}}到其他地方。
 +
 +
假设已经安装了Dupree字体:
 +
"dupree.ttf" 0 "Dupree:style=Regular:slant=0:weight=80:width=100:foundry=unknown:index=0:outline=True:''etc...''
 +
 +
复制上面一行,并将{{ic|<nowiki>style=Regular</nowiki>}}改为{{ic|<nowiki>style=Bold</nowiki>}}或者其他你想要的字体风格(粗体用Bold,斜体用Italic)。同时,若需要斜体的将{{ic|<nowiki>slant=0</nowiki>}}改为{{ic|<nowiki>slant=100</nowiki>}},需要粗体的将{{ic|<nowiki>weight=80</nowiki>}} 改为{{ic|<nowiki>weight=200</nowiki>}},或者你可以将两句组合起来来生成'''''粗体和斜体'''''的风格,其中一个示例如下:
 +
"dupree.ttf" 0 "Dupree:style=Bold Italic:slant=100:weight=200:width=100:foundry=unknown:index=0:outline=True:''etc...''
 +
 +
现在将以下内容添加到{{ic|$XDG_CONFIG_HOME/fontconfig/fonts.conf}}文件中:
 +
{{bc|<nowiki>
 +
...
 +
<match target="font">
 +
    <test name="family" qual="any">
 +
        <string>Dupree</string>
 +
        &lt;!-- other fonts here .... --&gt;
 +
    </test>
 +
    <test name="weight" compare="more_eq"><int>140</int></test>
 +
    <edit name="embolden" mode="assign"><bool>true</bool></edit>
 +
</match>
 +
 +
<match target="font">
 +
    <test name="family" qual="any">
 +
        <string>Dupree</string>
 +
        &lt;!-- other fonts here .... --&gt;
 +
    </test>
 +
    <test name="slant" compare="more_eq"><int>80</int></test>
 +
    <edit name="matrix" mode="assign">
 +
        <times>
 +
            <name>matrix</name>
 +
                <matrix>
 +
                    <double>1</double><double>0.2</double>
 +
                    <double>0</double><double>1</double>
 +
                </matrix>
 +
        </times>
 +
    </edit>
 +
</match>
 +
...
 +
</nowiki>}}
 +
{{小贴士| 使用了参数 'embolden' 可以令原来就存在粗体的字体变得更粗}}
 +
 +
===改变规则重定义机制===
 +
 +
Fontconfig按照文件名中的数字顺序来处理{{ic|/etc/fonts/conf.d}}里的文件,这样子数值高的规则或者文件就可以覆盖掉低的,但是有时容易让人对什么文件最后处理产生疑惑。
 +
 +
依照下例所示改变一下顺序,以确保“个人配置文件”永远被最后处理:
 +
 +
# cd /etc/fonts/conf.d
 +
# mv 50-user.conf 99-user.conf
 +
 +
上面这个更改在大部分情况下是非必要的,因为用户本来就被赋予了足够的控制权来设置他喜欢的字体属性、微调和反锯齿,以及把某个字体设置为一个普通字体家族的别名等等。
 +
 +
===fontconfig配置的例子===
 +
 +
Fongconfig的配置文件示例请参考这个[[Font configuration/Examples|页面]].
 +
 +
下面是一个简单的上手例子:
 +
 +
{{hc|/etc/fonts/local.conf|<nowiki>
 +
<?xml version='1.0'?>
 +
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
 +
<fontconfig>
 +
<match target="font">
 +
 
 +
  <edit mode="assign" name="rgba">
 +
  <const>rgb</const>
 +
  </edit>
 +
 +
  <edit mode="assign" name="hinting">
 +
  <bool>true</bool>
 +
  </edit>
 +
 +
  <edit mode="assign" name="hintstyle">
 +
  <const>hintfull</const>
 +
  </edit>
 +
 +
  <edit mode="assign" name="antialias">
 +
  <bool>true</bool>
 +
  </edit>
 +
 +
  <edit mode="assign" name="lcdfilter">
 +
    <const>lcddefault</const>
 +
  </edit>
 +
 +
</match>
 +
</fontconfig>
 +
</nowiki>}}
 +
 +
==补丁包==
 +
 +
These patched packages are available in the [[Arch User Repository|AUR]]. A few considerations:
 +
 +
* Configuration is usually necessary.
 +
* The new font rendering will not kick in until applications restart.
 +
* Applications which [[Wikipedia:Static library|statically link]] to a library will not be affected by patches applied to the system library.
 +
 +
===Infinality===
 +
The infinality patchset aims to greatly improve freetype2 font rendering. It adds multiple new capabilities.
 +
 +
* [http://www.infinality.net/blog/infinality-freetype-patches/ Home page]
 +
* [http://www.infinality.net/forum/ Forum]
 +
* [http://www.webupd8.org/2013/06/better-font-rendering-in-linux-with.html Short article about infinality (contains screenshots)]
 +
 +
Infinality's settings are all configurable at runtime via environment variables in {{ic|/etc/profile.d/infinality-settings.sh}}, and include the following:
 +
 +
*'''Emboldening Enhancement''': Disables Y emboldening, producing a much nicer result on fonts without bold versions.  Works on native TT hinter and autohinter.
 +
*'''Auto-Autohint''': Automatically forces autohint on fonts that contain no TT instructions.
 +
*'''Autohint Enhancement''': Makes autohint snap horizontal stems to pixels. Gives a result that appears like a well-hinted truetype font, but is 100% patent-free (as far as I know).
 +
*'''Customized FIR Filter''': Select your own [http://www.infinality.net/forum/viewtopic.php?f=2&t=19 filter values] at run-time.  Works on native TT hinter and autohinter.
 +
*'''Stem Alignment''': Aligns bitmap glyphs to optimized pixel boundaries.  Works on native TT hinter and autohinter.
 +
*'''Pseudo Gamma Correction''': Lighten and darken glyphs at a given value, below a given size.  Works on native TT hinter and autohinter.
 +
*'''Embolden Thin Fonts''': Embolden thin or light fonts so that they are more visible.  Works on autohinter.
 +
*'''Force Slight Hinting''': Force slight hinting even when programs want full hinting. If you use the local.conf I provide (included in infinality-settings fedora package) you will notice nice improvements on @font-face fonts.
 +
*'''ChromeOS Style Sharpening''': ChromeOS uses a patch to sharpen the look of fonts. This is now included in the infinality patchset.
 +
 +
A number of presets are included and can be used by setting the USE_STYLE variable in {{ic|/etc/profile.d/infinality-settings.sh}}.
 +
 +
{{AUR|freetype2-infinality}} can be installed from the [[Arch User Repository|AUR]]. Additionally, if you are using {{pkg|lib32-freetype2}} from [multilib], replace it with {{AUR|lib32-freetype2-infinality}}{{Broken package link|{{aur-mirror|lib32-freetype2-infinality}}}} from the AUR. The AUR also contains a Git version of freetype2 that builds the latest development snapshot of freetype2 with the Infinality patchset: {{AUR|freetype2-infinality-git}}{{Broken package link|{{aur-mirror|freetype2-infinality-git}}}}, {{AUR|lib32-freetype2-infinality-git}}{{Broken package link|{{aur-mirror|lib32-freetype2-infinality-git}}}}.
 +
 +
It is recommended to also install {{AUR|fontconfig-infinality}} to enable selection of predefined font substitution styles and antialiasing settings, apart from the rendering settings of the engine itself. After doing so, you can select the font style (win7, winxp, osx, linux, ...) with:
 +
# infctl setstyle
 +
 +
If you set e.g. win7 or osx you need the corresponding fonts installed.
 +
 +
{{Note|Default infinality settings can cause some programs  to display fonts at 72 DPI instead of 96. If you notice a problem open /etc/fonts/infinality/infinality.conf search for the section on DPI and change 72 to 96. This problem can specifically affect conky causing the fonts to appear smaller than they should. Thus not aligning properly with images. }}
 +
 +
{{Note|''The README for {{AUR|fontconfig-infinality}} says that /etc/fonts/local.conf should either not exist, or have no infinality-related configurations in it.  The local.conf is now obsolete and completely replaced by this configuration.''}}
 +
 +
for more information see this article: http://www.infinality.net/forum/viewtopic.php?f=2&t=77
 +
 +
===Ubuntu===
 +
 +
Ubuntu adds extra configurations, and occasionally patches to the font rendering libraries.
 +
 +
Install the patched packages from the [[Arch User Repository|AUR]], the package names are: {{AUR|freetype2-ubuntu}} {{AUR|fontconfig-ubuntu}} {{AUR|libxft-ubuntu}}{{Broken package link|{{aur-mirror|libxft-ubuntu}}}} {{AUR|cairo-ubuntu}}.
 +
 +
The global configuration will need to be added. See [[#Example fontconfig configurations]]{{Broken section link}} for a starting point.
 +
 +
===恢复到未打补丁的包===
 +
 +
To restore the unpatched packages, reinstall the originals:
 +
 +
# pacman -S --asdeps freetype2 libxft cairo fontconfig
 +
 +
==没有fontconfig支持的应用程序==
 +
 +
Some applications like [[URxvt]] will ignore fontconfig settings. This is very apparent when using the infinality patches which are heavily reliant on proper configuration. You can work around this by using {{ic|~/.Xresources}}, but it is not nearly as flexible as fontconfig. Example (see [[#Fontconfig configuration]]{{Broken section link}} for explanations of the options):
 +
 +
{{hc|~/.Xresources|<nowiki>
 +
Xft.autohint: 0
 +
Xft.lcdfilter:  lcddefault
 +
Xft.hintstyle:  hintfull
 +
Xft.hinting: 1
 +
Xft.antialias: 1
 +
Xft.rgba: rgb
 +
</nowiki>}}
 +
 +
Make sure the settings are loaded properly when X starts with {{ic|xrdb -q}} (see [[Xresources]] for more information).
 +
 +
==字体问题解决方法==
 +
 +
===字体扭曲===
 +
{{Note|96 DPI is not a standard. You should use your monitor's actual DPI to get proper font rendering, especially when using subpixel rendering.}}
 +
 +
If fonts are still unexpectedly large or small, poorly proportioned or simply rendering poorly, fontconfig may be using the incorrect DPI.
 +
 +
Fontconfig should be able to detect DPI parameters as discovered by the Xorg server. You can check the automatically discovered DPI with {{ic|xdpyinfo}}:
 +
 +
{{hc|<nowiki>$ xdpyinfo | grep dots</nowiki>|  resolution:    102x102 dots per inch}}
 +
 +
{{Note|To use the ''xdpyinfo'' command, you must install the package {{pkg|xorg-xdpyinfo}}.}}
 +
 +
If the DPI is detected incorrectly (usually due to an incorrect monitor EDID), you can specify it manually in the Xorg configuration, see [[Xorg#Display size and DPI]]. This is the recommended solution, but it may not work with buggy drivers.
 +
 +
Fontconfig will default to the Xft.dpi variable if it is set. Xft.dpi is usually set by desktop environments (usually to Xorg's DPI setting) or manually in {{ic|~/.Xdefaults}} or {{ic|~/.Xresources}}. Use xrdb to query for the value:
 +
 +
{{hc|<nowiki>$ xrdb -query | grep dpi</nowiki>|Xft.dpi: 102}}
 +
 +
Those still having problems can fall back to manually setting the DPI used by fontconfig:
 +
 +
...
 +
<!-- Setup for DPI=96 -->
 +
<match target="pattern">
 +
    <edit name="dpi" mode="assign"><double>102</double></edit>
 +
</match>
 +
...
 +
 +
===较旧的GTK和QT应用程序===
 +
 +
Modern GTK apps enable Xft by default but this was not the case before version 2.2.  If it is not possible to update these applications, force Xft for old [[GNOME]] applications by adding to {{ic|~/.bashrc}}:
 +
 +
export GDK_USE_XFT=1
 +
 +
For older QT applications:
  
 +
export QT_XFT=true
  
</pre>
+
==资源==
WikiMigration--[[User:Dlanor|dlanor]] 14:05, 23 Jul 2005 (EDT)
+
*[http://www.x.org/X11R6.8.2/doc/fonts.html Fonts in X11R6.8.2] - Official Xorg font information
 +
*[http://freetype.sourceforge.net/freetype2/ FreeType 2 Overview]
 +
*[https://forums.gentoo.org/viewtopic-t-723341.html Gentoo font-rendering thread]

Latest revision as of 15:31, 6 August 2016

翻译状态: 本文是英文页面 Font_Configuration翻译,最后翻译时间:2014-06-07,点击这里可以查看翻译后英文页面的改动。

Tango-preferences-desktop-locale.png本页面需要更新翻译,内容可能已经与英文脱节。要贡献翻译,请访问简体中文翻译组Tango-preferences-desktop-locale.png

附注: please use the first argument of the template to provide more detailed indications.

Fontconfig 是一个为应用程序提供可用 字体 的程序库,也可用来配置字体渲染效果,参见fontconfig 软件包和 Wikipedia:Fontconfig。Free type 库(freetype2 软件包)就是以此为配置基础来渲染字体。

尽管 Fontconfig 已经是当今 Linux 字体界的标准,但是仍有一部分应用使用更加原始的字体显示方法,X Logical Font Description

Arch Linux 上的字体渲染包支持有字节码解释器(BCI)的freetype2。为了更好的字体渲染,特别是在 LCD 显示器上,一些补丁包也添加到库中,参见下面的 #补丁包#Infinality 包同时支持自动微调和亚像素渲染,允许在无须重新编译的情况下微调LCD滤光器,而且在粗体字下自动微调仍然表现良好。

字体路径

由于应用程序需要知道它们所使用的字体的位置,所以必须对字体做良好的编目,以便于应用程序更好更快的访问它们。

Fontconfig包含的字体路径是/usr/share/fonts/~/.fonts/(Fontconfig会递归访问上述目录)。为了简化管理和安装过程,当需要添加字体时,推荐使用上述路径。

查看Fontconfig所包含的字体:

$ fc-list : file

参见man fc-list以获得更多输出格式方面的信息。

通过考察Xorg的log文件来检查Xorg包含的字体路径:

$ grep /fonts /var/log/Xorg.0.log
小贴士: 你也可以通过命令xset q检查Xorg包含的字体路径。

需要明确的是,Xorg不会像Fontconfig一样递归搜索/usr/share/fonts/目录。如果要增加一个目录,必须使用一个完整目录:

Section "Files"
    FontPath     "/usr/share/fonts/local/"
EndSection

如果你想把字体路径设置到每一位用户,你可以通过添加下面的配置代码到文件~/.xinitrc,这样可以将字体路径添加进或者移除出默认的路径中:

xset +fp /usr/share/fonts/local/           # Prepend a custom font path to Xorg's list of known font paths
xset -fp /usr/share/fonts/sucky_fonts/     # Remove the specified font path from Xorg's list of known font paths

如果要查看Xorg包含的字体,可以使用这个命令xlsfonts, 这个命令来自包xorg-xlsfonts

Fontconfig配置

通过对$XDG_CONFIG_HOME/fontconfig/fonts.conf的修改可以完成对某个用户的配置, 而对/etc/fonts/local.conf的修改则可以完成对每一位用户的配置. 如果用户的单独配置和全局配置不同,系统优先使用前者. 这些文件共用相同的语法.

Note: 配置文件和目录: ~/.fonts.conf, ~/.fonts.conf.d~/.fontconfig/*.cache-* 从fontconfig 2.10.1开始已经被废弃(upstream commit) 未来的版本也不会默认读取这些文件当作配置依据. 分别用 $XDG_CONFIG_HOME/fontconfig/fonts.conf, $XDG_CONFIG_HOME/fontconfig/conf.d$XDG_CACHE_HOME/fontconfig/*.cache-* 来代替.

Fontconfig 把所有的配置都放在一个中心文件中 (/etc/fonts/fonts.conf). 这个文件会在fontconfig更新时被替换,注意你不应该编辑这个文件. 字体设置重要的程序会引用这个文件以获得当前字体配置和渲染配置.这个文件是一系列配置规则的集合包括全局配置文件(/etc/fonts/local.conf), 预设的配置 /etc/fonts/conf.d/, 和用户的配置文件 ($XDG_CONFIG_HOME/fontconfig/fonts.conf).

Note: 有一些桌面环境 (比如说 GNOMEKDE) 使用 Font Control Panel 会自动生成和重写用户字体配置文件. 对于这些桌面环境, 最好配合已定义的字体配置来得到需要的显示效果.

配置文件使用XML格式并且需要一些格式头:

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

  <!-- settings go here -->

</fontconfig>

文中的配置示例省略了这些标签.

在线的字体配置请点击此处

预设

预设配置放在目录/etc/fonts/conf.avail中. 当给它们创建了符号链接, 这些配置就被激活了.不管是对某一个用户还是全局配置, 这一规则是相同的.在/etc/fonts/conf.d/README中有描述. 这些预设会通过匹配它们原先它们的单独设置文件来覆盖配置.

举个例子,为了打开全局亚像素RGB渲染:

# cd /etc/fonts/conf.d
# ln -s ../conf.avail/10-sub-pixel-rgb.conf

为单个独立用户配置:

$ mkdir $XDG_CONFIG_HOME/fontconfig/conf.d
$ ln -s /etc/fonts/conf.avail/10-sub-pixel-rgb.conf $XDG_CONFIG_HOME/fontconfig/conf.d

抗锯齿

字体光栅化将矢量字体数据转化为位图数据以显示在屏幕上. 最后的效果可能由于走样会出现锯齿. 抗锯齿默认被打开,这样可以增加字体边缘的分辨率.

  <match target="font">
    <edit name="antialias" mode="assign">
      <bool>true</bool>
    </edit>
  </match>

微调

字体微调 (也叫做instructing) 是利用精确的指令来调整字体显示的轮廓,这样就可以用离散的网格来显示我们需要的线条, 比如说像素网格.字体在DPI达到300之前不可能正确的显示.我们有两种微调的方法可以用.

字节码解释器(BCI)

当用BCI方法时,TrueType字体里的指令就会被唤醒并用FreeTypes的解释器来渲染,这在自带良好微调指令的字体上工作的很好.

打开normal hinting:

  <match target="font">
    <edit name="hinting" mode="assign">
      <bool>true</bool>
    </edit>
  </match>

自动微调器

自动微调器方法就是微调全自动并且忽视任何内嵌的微调指令,起初这种方法是缺省配置的,因为以前的TrueType2字体都是有专利保护限制,没办法用BCI方法微调,但是现在这些专利都已经过期,所以限制也就没有了,当然也就是没有多大意义用自动微调这种方法了。但是它对内嵌微调指令不完整或者干脆没有的字体非常管用,相对的,如果字体自身有良好的微调指令,这种方法就绝对不提倡了。现如今,一般字体都有不错的微调指令,所以自动微调器这种方法就没多大用武之地。

打开自动微调(auto-hinting):

  <match target="font">
    <edit name="autohint" mode="assign">
      <bool>true</bool>
    </edit>
  </match>

微调样式

微调样式就是微调时可以采用的款式,包括hintfull, hintmedium, hintslight 还有 hintnone。至于效果,hintslight可以较好的保持字体的形态但是在像素网格里的排列会有些模糊,hintfull则相反,排列清晰但字体的体态就不慎清楚。所以如果用BCI微调法,就推荐用hintfull,自动微调的话就hintslight了。

  <match target="font">
    <edit name="hintstyle" mode="assign">
      <const>hintfull</const>
    </edit>
  </match>
Note: Some applications, like GNOME 3 may override default hinting settings.[broken link: invalid section]

亚像素渲染

如今生产的显示器大部分用的是红绿蓝(RGB)规范,也有用BGR, V-RGB (vertical), 或者 V-BGR规范的(具体什么类型可以这里查看)。为了正确显示字体,Fontconfig得知道你的显示器具体类型。

打开亚像素渲染:

  <match target="font">
    <edit name="rgba" mode="assign">
      <const>rgb</const>
    </edit>
  </match>
Note: Subpixel rendering effectively triples the horizontal (or vertical) resolution for fonts by making use of subpixels. The autohinter and subpixel rendering are not designed to work together and should not be used in combination without the Infinality[broken link: invalid section] patch set.

LCD过滤器

当使用亚像素渲染时,你最好启用LCD过滤器,这个是设计用来减少彩色边纹现象的,具体解释参见FreeType 2 API参考里的LCD filtering。它的各个不同选项的描述位于FT_LcdFilter,具体实例看LCD filter test

lcddefault这个选项对大多数用户都适用,其他选项则都有某一特定的用途:lcdlight对那些字体看起来太粗或者模糊的超管用,lcdlegacy嘛可用来对付Cairo字体,而lcdnone的意思则是完全禁用LCD过滤器功能。

  <match target="font">
    <edit mode="assign" name="lcdfilter">
      <const>lcddefault</const>
    </edit>
  </match>

高级LCD过滤器说明

如果对内置的LCD过滤器不满意,那可以自己对字体渲染来一个360度微调,只要修改下硬编码了的过滤器|filters并创建一个自定义的freetype2软件包就可以了。Arch Build System就是用来从源文件创建并安装软件包的一个工具。

首先,以root用户刷新下freetype2的PKGBUILD文件:

# abs extra/freetype2
Note: 下面这个示例以/var/abs/build作为编译目录,请根据各自的ABS设置值来替换。

然后切换回普通用户,下载并解压freetype2软件包:

$ cd /var/abs/build
$ cp -r ../extra/freetype2 .
$ cd freetype2
$ makepkg -o

接着编辑一下src/freetype-VERSION/src/base/ftlcdfil.c这个文件,看看default_filter[5]这个变量是怎么定义的:

static const FT_Byte  default_filter[5] =
    { 0x10, 0x40, 0x70, 0x40, 0x10 };

上面这个变量定义了一个应用于rendered glyph的低通过滤器|filter,请根据需要修改,然后保存、创建并安装这个自定义软件包:

$ makepkg -e
$ sudo pacman -Rd freetype2
$ sudo pacman -U freetype2-VERSION-ARCH.pkg.tar.xz

最后重启机器或者重启X服务器,lcddefault这个过滤器字体渲染的效果应该就出来了。

取消粗体字的自动微调功能

自动微调使用了很复杂的方法来渲染字体,但常常把粗体字弄得太宽了,好在有一个方法,可以让自动微调在粗体字上不起作用的同时而不影响其他字体:

...
<match target="font">
    <test name="weight" compare="more">
        <const>medium</const>
    </test>
    <edit name="autohint" mode="assign">
        <bool>false</bool>
    </edit>
</match>
...

只对较大的字体打开反锯齿功能

有些用户更偏爱锐利一点的渲染效果而不是反锯齿那样的:

...
<match target="font">
    <edit name="antialias" mode="assign">
        <bool>false</bool>
    </edit>
</match>

<match target="font" >
    <test name="size" qual="any" compare="more">
        <double>12</double>
    </test>
    <edit name="antialias" mode="assign">
        <bool>true</bool>
    </edit>
</match>

<match target="font" >
    <test name="pixelsize" qual="any" compare="more">
        <double>16</double>
    </test>
    <edit name="antialias" mode="assign">
        <bool>true</bool>
    </edit>
</match>
...

字体替换

最可靠的方法是添加像下面那样的一个XML片段。关键点在于使用“binding”属性可以有更好的效果,例如在Firefox你可能只想替换字体但并不想改变被替换字体的属性。下面的例子演示的是Georgia如何被Ubuntu字体替换掉的:

...
 <match target="pattern">
   <test qual="any" name="family"><string>georgia</string></test>
   <edit name="family" mode="assign" binding="same"><string>Ubuntu</string></edit>
 </match>
...

另外一种方法是设置“优先”字体,但是这只有在原字体系统缺失的情况下才有效,这种情况真发生了的话,设定的字体就会把它换了:

...
< !-- Replace Helvetica with Bitstream Vera Sans Mono -->
< !-- Note, an alias for Helvetica should already exist in default conf files -->
<alias>
    <family>Helvetica</family>
    <prefer><family>Bitstream Vera Sans Mono</family></prefer>
    <default><family>fixed</family></default>
</alias>
...

禁用点阵字型

想禁用点阵字体(这个经常是在因为字体缺失而被回滚使用,却导致字体被渲染得很像素化)可以使用70-no-bitmaps.conf(fontconfig缺省情况没有内置这个文件):

# cd /etc/fonts/conf.d
# rm 70-yes-bitmaps.conf
# ln -s ../conf.avail/70-no-bitmaps.conf

下面的就一行效果也一样:

# ln -s /etc/fonts/conf.avail/70-no-bitmaps.conf /etc/fonts/conf.d/

可能你并没有70-yes-bitmaps.conf这个文件,所以也就无须什么删除了。 利用下面这个配置文件,你就可以决定用什么字体来替换点阵字体了:

~/.config/fontconfig/conf.d/29-replace-bitmap-fonts.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <!-- Replace generic bitmap font names by generic font families -->
    <match target="pattern" name="family">
        <test name="family" qual="any">
            <string>Helvetica</string>
        </test>
        <edit mode="assign" name="family">
            <string>Arial</string>
            <string>Liberation Sans</string>
            <string>sans-serif</string>
        </edit>
    </match>
    <match target="pattern" name="family">
        <test name="family" qual="any">
            <string>Courier</string>
        </test>
        <edit mode="assign" name="family">
            <string>Courier New</string>
            <string>Liberation Mono</string>
            <string>monospace</string>
        </edit>
    </match>
    <match target="pattern" name="family">
        <test name="family" qual="any">
            <string>Times</string>
        </test>
        <edit mode="assign" name="family">
            <string>Times New Roman</string>
            <string>Liberation Serif</string>
            <string>serif</string>
        </edit>
    </match>
</fontconfig>
禁用所有字体里的点阵字型:
~/.config/fontconfig/conf.d/20-no-embedded.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <match target="font">
    <edit name="embeddedbitmap" mode="assign">
      <bool>false</bool>
    </edit>
  </match>
</fontconfig>

只禁用特定字体里的点阵字型:

<match target="font">
  <test qual="any" name="family">
    <string>Monaco</string>
  </test>
  <edit name="embeddedbitmap"><bool>false</bool></edit>
</match>

禁用点阵字体的缩放

如果要禁用点阵字体的缩放功能(这个经常会把字搞得很模糊),请删除 /etc/fonts/conf.d/10-scale-bitmap-fonts.conf.

为不完善的字体构建粗体风格和斜体风格

Freetype字体可以自动为没有斜体粗体的字体创建斜体粗体,但这只会在应用程序明确地提出这样请求下生效。但现有的程序很少会发出这样的请求,这版讲述如何手动强制生成缺少的字体风格。

按照如下描述编辑/usr/share/fonts/fonts.cache-1。因为执行fc-cache时会覆盖/usr/share/fonts/fonts.cache-1,所以编辑前请先备份/usr/share/fonts/fonts.cache-1到其他地方。

假设已经安装了Dupree字体:

"dupree.ttf" 0 "Dupree:style=Regular:slant=0:weight=80:width=100:foundry=unknown:index=0:outline=True:etc...

复制上面一行,并将style=Regular改为style=Bold或者其他你想要的字体风格(粗体用Bold,斜体用Italic)。同时,若需要斜体的将slant=0改为slant=100,需要粗体的将weight=80 改为weight=200,或者你可以将两句组合起来来生成粗体和斜体的风格,其中一个示例如下:

"dupree.ttf" 0 "Dupree:style=Bold Italic:slant=100:weight=200:width=100:foundry=unknown:index=0:outline=True:etc...

现在将以下内容添加到$XDG_CONFIG_HOME/fontconfig/fonts.conf文件中:

...
<match target="font">
    <test name="family" qual="any">
        <string>Dupree</string>
         <!-- other fonts here .... -->
     </test>
     <test name="weight" compare="more_eq"><int>140</int></test>
     <edit name="embolden" mode="assign"><bool>true</bool></edit>
</match>

<match target="font">
    <test name="family" qual="any">
        <string>Dupree</string>
        <!-- other fonts here .... -->
    </test>
    <test name="slant" compare="more_eq"><int>80</int></test>
    <edit name="matrix" mode="assign">
        <times>
            <name>matrix</name>
                <matrix>
                    <double>1</double><double>0.2</double>
                    <double>0</double><double>1</double>
                </matrix>
        </times>
    </edit>
</match>
...
小贴士: 使用了参数 'embolden' 可以令原来就存在粗体的字体变得更粗

改变规则重定义机制

Fontconfig按照文件名中的数字顺序来处理/etc/fonts/conf.d里的文件,这样子数值高的规则或者文件就可以覆盖掉低的,但是有时容易让人对什么文件最后处理产生疑惑。

依照下例所示改变一下顺序,以确保“个人配置文件”永远被最后处理:

# cd /etc/fonts/conf.d
# mv 50-user.conf 99-user.conf

上面这个更改在大部分情况下是非必要的,因为用户本来就被赋予了足够的控制权来设置他喜欢的字体属性、微调和反锯齿,以及把某个字体设置为一个普通字体家族的别名等等。

fontconfig配置的例子

Fongconfig的配置文件示例请参考这个页面.

下面是一个简单的上手例子:

/etc/fonts/local.conf
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
 <match target="font">
  
  <edit mode="assign" name="rgba">
   <const>rgb</const>
  </edit>

  <edit mode="assign" name="hinting">
   <bool>true</bool>
  </edit>

  <edit mode="assign" name="hintstyle">
   <const>hintfull</const>
  </edit>

  <edit mode="assign" name="antialias">
   <bool>true</bool>
  </edit>

  <edit mode="assign" name="lcdfilter">
    <const>lcddefault</const>
  </edit>
 
 </match>
</fontconfig>

补丁包

These patched packages are available in the AUR. A few considerations:

  • Configuration is usually necessary.
  • The new font rendering will not kick in until applications restart.
  • Applications which statically link to a library will not be affected by patches applied to the system library.

Infinality

The infinality patchset aims to greatly improve freetype2 font rendering. It adds multiple new capabilities.

Infinality's settings are all configurable at runtime via environment variables in /etc/profile.d/infinality-settings.sh, and include the following:

  • Emboldening Enhancement: Disables Y emboldening, producing a much nicer result on fonts without bold versions. Works on native TT hinter and autohinter.
  • Auto-Autohint: Automatically forces autohint on fonts that contain no TT instructions.
  • Autohint Enhancement: Makes autohint snap horizontal stems to pixels. Gives a result that appears like a well-hinted truetype font, but is 100% patent-free (as far as I know).
  • Customized FIR Filter: Select your own filter values at run-time. Works on native TT hinter and autohinter.
  • Stem Alignment: Aligns bitmap glyphs to optimized pixel boundaries. Works on native TT hinter and autohinter.
  • Pseudo Gamma Correction: Lighten and darken glyphs at a given value, below a given size. Works on native TT hinter and autohinter.
  • Embolden Thin Fonts: Embolden thin or light fonts so that they are more visible. Works on autohinter.
  • Force Slight Hinting: Force slight hinting even when programs want full hinting. If you use the local.conf I provide (included in infinality-settings fedora package) you will notice nice improvements on @font-face fonts.
  • ChromeOS Style Sharpening: ChromeOS uses a patch to sharpen the look of fonts. This is now included in the infinality patchset.

A number of presets are included and can be used by setting the USE_STYLE variable in /etc/profile.d/infinality-settings.sh.

freetype2-infinalityAUR can be installed from the AUR. Additionally, if you are using lib32-freetype2 from [multilib], replace it with lib32-freetype2-infinalityAUR[broken link: archived in aur-mirror] from the AUR. The AUR also contains a Git version of freetype2 that builds the latest development snapshot of freetype2 with the Infinality patchset: freetype2-infinality-gitAUR[broken link: archived in aur-mirror], lib32-freetype2-infinality-gitAUR[broken link: archived in aur-mirror].

It is recommended to also install fontconfig-infinalityAUR to enable selection of predefined font substitution styles and antialiasing settings, apart from the rendering settings of the engine itself. After doing so, you can select the font style (win7, winxp, osx, linux, ...) with:

# infctl setstyle

If you set e.g. win7 or osx you need the corresponding fonts installed.

Note: Default infinality settings can cause some programs to display fonts at 72 DPI instead of 96. If you notice a problem open /etc/fonts/infinality/infinality.conf search for the section on DPI and change 72 to 96. This problem can specifically affect conky causing the fonts to appear smaller than they should. Thus not aligning properly with images.
Note: The README for fontconfig-infinalityAUR says that /etc/fonts/local.conf should either not exist, or have no infinality-related configurations in it. The local.conf is now obsolete and completely replaced by this configuration.

for more information see this article: http://www.infinality.net/forum/viewtopic.php?f=2&t=77

Ubuntu

Ubuntu adds extra configurations, and occasionally patches to the font rendering libraries.

Install the patched packages from the AUR, the package names are: freetype2-ubuntuAUR fontconfig-ubuntuAUR libxft-ubuntuAUR[broken link: archived in aur-mirror] cairo-ubuntuAUR.

The global configuration will need to be added. See #Example fontconfig configurations[broken link: invalid section] for a starting point.

恢复到未打补丁的包

To restore the unpatched packages, reinstall the originals:

# pacman -S --asdeps freetype2 libxft cairo fontconfig

没有fontconfig支持的应用程序

Some applications like URxvt will ignore fontconfig settings. This is very apparent when using the infinality patches which are heavily reliant on proper configuration. You can work around this by using ~/.Xresources, but it is not nearly as flexible as fontconfig. Example (see #Fontconfig configuration[broken link: invalid section] for explanations of the options):

~/.Xresources
Xft.autohint: 0
Xft.lcdfilter:  lcddefault
Xft.hintstyle:  hintfull
Xft.hinting: 1
Xft.antialias: 1
Xft.rgba: rgb

Make sure the settings are loaded properly when X starts with xrdb -q (see Xresources for more information).

字体问题解决方法

字体扭曲

Note: 96 DPI is not a standard. You should use your monitor's actual DPI to get proper font rendering, especially when using subpixel rendering.

If fonts are still unexpectedly large or small, poorly proportioned or simply rendering poorly, fontconfig may be using the incorrect DPI.

Fontconfig should be able to detect DPI parameters as discovered by the Xorg server. You can check the automatically discovered DPI with xdpyinfo:

$ xdpyinfo | grep dots
  resolution:    102x102 dots per inch
Note: To use the xdpyinfo command, you must install the package xorg-xdpyinfo.

If the DPI is detected incorrectly (usually due to an incorrect monitor EDID), you can specify it manually in the Xorg configuration, see Xorg#Display size and DPI. This is the recommended solution, but it may not work with buggy drivers.

Fontconfig will default to the Xft.dpi variable if it is set. Xft.dpi is usually set by desktop environments (usually to Xorg's DPI setting) or manually in ~/.Xdefaults or ~/.Xresources. Use xrdb to query for the value:

$ xrdb -query | grep dpi
Xft.dpi:	102

Those still having problems can fall back to manually setting the DPI used by fontconfig:

...
<match target="pattern">
   <edit name="dpi" mode="assign"><double>102</double></edit>
</match>
...

较旧的GTK和QT应用程序

Modern GTK apps enable Xft by default but this was not the case before version 2.2. If it is not possible to update these applications, force Xft for old GNOME applications by adding to ~/.bashrc:

export GDK_USE_XFT=1

For older QT applications:

export QT_XFT=true

资源