Top / Software / fontconfig

fontconfig の tips / FAQs

基本

フォントファイルの所在

インストール済みのフォントファイルを確認するには fc-list コマンドを使います。

$ fc-list

パッケージに含まれていない TrueType 等のフォントファイルは、 以下の場所に置くだけで使えるようになります。

  • システムワイドで使うフォント
    /usr/local/share/fonts 配下
    例えば /usr/local/share/fonts/truetype 等のディレクトリを作成してそこに置く
  • 自分だけで使うフォント

    ~/.fonts 配下 (deprecated)

    ~/.local/share/fonts 配下

システムワイドで使う場合には、フォントファイルを配置した後で root 権限にて

# fc-cache

コマンドにより cache を更新しておきます。

※ 市販フォントの利用に際してはライセンスを確認した上で自己責任で

設定ファイルの所在

fontconfig の設定ファイルは以下の箇所にあります。

  1. /etc/fonts/fonts.conf
  2. /etc/fonts/conf.d/ 配下
  3. ~/.config/fontconfig/conf.d 配下

  4. ~/.config/fontconfig/fonts.conf

  5. ~/.fonts.conf.d/ 配下 (deprecated)

  6. ~/.fonts.conf (deprecated)

  7. /etc/fonts/local.conf

大元の設定ファイルは /etc/fonts/fonts.conf だけであり、 ここから /etc/fonts/conf.d/ 配下の各ファイルが読み込まれ、 さらに /etc/fonts/conf.d/ 配下の 50-user.conf や 51-local.conf から ~/.config/fontconfig/fonts.conf や /etc/fonts/local.conf 等が読み込まれます。

/etc/fonts/conf.d/ 配下には /etc/fonts/conf.avail/ 配下と /usr/share/fontconfig/conf.avail/ 配下に用意されている設定のうち、 有効にしたいものをシンボリックリンクさせています。 /etc/fonts/conf.d/ 配下の各ファイルはファイル名の順番に読み込まれます。 システムワイドに設定を追加したい場合には、 この読み込まれる順番に注意しながら /etc/fonts/conf.d/ 配下にファイルを置くこともできます。

先頭2文字設定ファイルの内容
00 〜 09フォントを置くディレクトリの指定 (/opt/fonts 等を指定する場合)
10 〜 19システムのレンダリングのデフォルト指定
20 〜 29フォント毎のレンダリングオプション
30 〜 39フォントファミリーの alias 指定
40 〜 49各フォントファミリーの一般名 (serif 等) 指定
50 〜 59/etc/fonts/conf.d/ 配下以外の設定ファイルの指定
60 〜 69一般名 (serif 等) に割り当てるフォントの指定
70 〜 79select font (adjust which fonts are available)
80 〜 89match target="scan" (フォント定義の変更)
90 〜 99font synthesis

参照

  • /usr/share/doc/fontconfig/fontconfig-user.html
  • /etc/fonts/conf.d/README

デフォルトの表示フォントの選択

serif、sans-serif、monospace が選択されたときに表示されるフォントを設定します。

システムワイドに設定するなら /etc/fonts/local.conf に、 自分だけに適用するするならば ~/.config/fontconfig/fonts.conf に <prefer> 指定の <alias> を書きます。 *1

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

  <alias>
    <family>serif</family>
    <prefer>
      <family>DejaVu Serif</family>
      <family>IPAPMincho</family>
    </prefer>
  </alias>
  <alias>
    <family>sans-serif</family>
    <prefer>
      <family>DejaVu Sans</family>
      <family>IPAPGothc</family>
    </prefer>
  </alias>
  <alias>
    <family>monospace</family>
    <prefer>
      <family>DejaVu Sans Mono</family>
      <family>IPAGothic</family>
    </prefer>
  </alias>

</fontconfig>

こう記述すると DejaVu フォント → IPA フォントの順に妥当性を評価し、妥当と評価されたフォントをベースに、足りないグリフを他のフォントから補完して表示します。 例えば、表示対象に言語 (lang) が設定されていた場合、フォントがその言語のタグ*2を持っているかどうかを見ます。

  • 言語が英語 (en) なら、DejaVu フォントは英語の言語タグを持つので妥当となり、アルファベットや記号などは DejaVu フォントのグリフが使われ、平仮名などは IPA フォントのグリフが使われます。
  • 言語が日本語 (ja) なら、DejaVu フォントは日本語の言語タグを持たないので不当となり、アルファベットや記号も IPA フォントのグリフが使われます。
  • もし記述した順番そのままで表示させたい場合は、<alias binding="same"> と書きます。

この指定は /etc/fonts/conf.d/ 配下の 60 番台の設定ファイルの指定よりも優先されます。 *3 /etc/fonts/local.conf や ~/.config/fontconfig/fonts.conf で指定したフォントでカバーされない範囲の文字 (中国語や韓国語等) についてはそのまま /etc/fonts/conf.d/6?-* の指定が有効となります。

代替フォントの設定

特定のフォントが存在しないとき、代わりに使うフォントを設定できます。

MS P ゴシックのなかったら、代わりに Monapo で表示する

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

  <alias binding="same">
    <family>MS P ゴシック</family>
    <prefer>
      <family>Monapo</family>
    </prefer>
  </alias>

</fontconfig>

フォントの置き換え

特定のフォントが呼ばれたときに、全く別のフォントを表示させることができます。

MS P ゴシックが呼ばれたときに、Monapo を表示するには

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

  <match target="font">
    <test name="family">
      <string>MS P ゴシック</string>
    </test>
    <edit name="family">
      <string>Monapo</string>
    </edit>
  </match>
 
</fontconfig>

この機能はデフォルトフォントの設定にも使えます。

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

  <match target="font">
    <test name="family">
      <string>serif</string>
    </test>
    <edit name="family">
     <string>DejaVu Serif</string>
     <string>IPAPMincho</string>
    <edit>
  </match>
  <match target="font">
    <test name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family">
      <string>DejaVu Sans</string>
      <string>IPAPGothc</string>
    </edit>
  </match>
  <match target="font">
    <test name="family">
      <string>monospace</string>
    </test>
    <edit name="family">
      <string>DejaVu Sans Mono</string>
      <string>IPAGothic</string>
    </edit>
  </match>
 
</fontconfig>

フォントのブラックリストとホワイトリストを設定

特定のフォントの存在を隠したりその逆をすることができます。 なお、ブラックリストとホワイトリストの両方に載っている場合、ホワイトリストが優先されます。

/usr/local/share/fonts 以下にあるフォントと、さざなみフォントをブラックリストに入れる

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

  <selectfont>
    <rejectfont>
      <glob>/usr/local/share/fonts/*</glob>
      <pattern>
        <patelt name="family">
          <string>Sazanami Mincho</string>
        </patelt>
        <patelt name="family">
          <string>Sazanami Gothic</string>
        </patelt>
      </pattern>
    </rejectfont>
  </selectfont> 

</fontconfig>

さざなみフォントをホワイトリストに入れる

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

  <selectfont>
    <acceptfont>
      <pattern>
        <patelt name="family">
          <string>Sazanami Mincho</string>
        </patelt>
        <patelt name="family">
          <string>Sazanami Gothic</string>
        </patelt>
      </pattern>
    </acceptfont>
  </selectfont> 

</fontconfig>

フォントの見た目を良くする

フォントの形が崩れる、線がかすれる

ヒンティングが効きすぎているのかも。 効き具合を弱めてみる。 IPA P 明朝の場合。

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

  <match target="font">
    <test name="family">
      <string>IPAPMincho</string>
    </test>
    <edit name="hintstyle">
      <bool>hintslight</bool>
    </edit>
  </match>

</fontconfig>

改善しないようならヒンティングを切ってみる。 IPA P 明朝の場合。

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

  <match target="font">
    <test name="family">
      <string>IPAPMincho</string>
    </test>
    <edit name="hinting">
      <bool>false</bool>
    </edit>
  </match>

</fontconfig>

オートヒントで綺麗に表示させるコツ

オートヒントを有効にしたら、サブピクセルレンダリングは無効にしましょう。 オートヒントはサブピクセルレンダリングと組み合わせて使用されることを想定していないため。

基本的にオートヒントを有効にすると字形が崩れ、字幅が狂います。 字形の崩れはどうにもなりませんが、字幅の狂いはヒントスタイルに hintslight を指定することで回避できます。

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

  <match target="font">
    <test name="autohint">
      <bool>true</bool>
    </test>
    <edit name="hintstyle">
      <const>hintslight</const>
    </edit>
    <edit name="rgba">
      <const>none</const>
    </edit>
  </match>

</fontconfig>

埋め込みビットマップを表示しない

デフォルトでは埋め込みビットマップでの表示が優先されます。

システムワイドに設定するなら /etc/fonts/conf.d/11-embeddedbitmap.conf あたりに *4

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

  <match>
    <edit name="embeddedbitmap">
      <bool>false</bool>
    </edit>
  </match>

</fontconfig>

と記述する。

参照

ちなみに似たような設定の一つとして

これを止めさせるには、

# dpkg-reconfigure fontconfig-config

を実行し、「デフォルトでビットマップフォントを有効にしますか?」の質問に「いいえ」と答えてください。

のような情報が出ていたが、 これは X ビットマップフォント (.pcf 等) を fontconfig の対象として使うかどうかの設定

疑似斜体や疑似太字を表示しない

最も単純な方法は /etc/fonts/conf.d の中の 90-synthetic.conf のリンクを外すことです。

# rm /etc/fonts/conf.d/90-synthetic.conf

力技で無効にしたい等の場合は、 /etc/fonts/conf.d/91-reset-synthetic.conf といったファイルに

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

  <match target="font">
    <test name="slant">
      <const>oblique</const>
    </test>
    <test name="embeddedbitmap">
      <bool>false</bool>
    </test>
    <edit name="matrix">
      <times>
        <name>matrix</name>
        <matrix>
          <double>1</double>
          <double>-0.2</double>
          <double>0</double>
          <double>1</double>
        </matrix>
      </times>
    </edit>
  </match>

  <match target="font">
    <test name="embolden">
      <bool>true</bool>
    </test>
    <edit name="embolden">
      <bool>false</bool>
    </edit>
  </match>

</fontconfig>

フォントのサイズに応じて最適なレンダリングを設定する

一律で設定するのではなく、 フォントのサイズに応じたレンダリング方法を指定するとさらに見やすくなる可能性があります。

13 ピクセル以上のサイズで埋め込みビットマップを無効にするには

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

  <match target="font">
    <test name="pixelsize" compare="more_eq">
      <double>13</double>
    </test>
    <edit name="embeddedbitmap">
      <bool>false</bool>
    </edit>
  </match>

</fontconfig>

※「more」「more_eq」はどちらも「以上」、「less」「less_eq」はどちらも「以下」です。 バグだか仕様だか知りませんが、そうなっています。

フォントごとに最適なレンダリングを設定する

一律で設定するのではなく、 フォントに応じたレンダリング方法を指定するとさらに見やすくなる可能性があります。

VL ゴシックでオートヒントを有効にするには

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

  <match target="font">
    <test name="family">
      <string>VL Gothic</string>
    </test>
    <edit name="autohint">
      <bool>true</bool>
    </edit>
  </match>

</fontconfig>

おまけ

設定確認



*1 この設定だけは例外的に、システムワイドでも local.conf に書くのが正解
*2 コマンドラインでfc-list : family lang と打つと確認できます
*3 50-user.conf や 51-local.conf から読み込まれるため。<prefer> 指定は先に書いた方が優先。同じ理由で、local.conf よりも先に読み込まれる ~/.config/fontconfig/fonts.conf の方が優先される
*4 これを /etc/fonts/local.conf に書いてしまうと、~/.config/fontconfig/fonts.conf で override できなくなる

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-01-20 (水) 21:07:06 (2619d)