#topicpath

* fontconfig の tips / FAQs [#c15e4a6b]
#contents

* 基本 [#f95f3c9b]

** フォントファイルの所在 &aname(font-file); [#k89f7ef6]
インストール済みのフォントファイルを確認するには fc-list コマンドを使います。
 $ fc-list

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

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

システムワイドで使う場合には、フォントファイルを配置した後で root 権限にて
 # fc-cache
コマンドにより cache を更新しておきます。

''※ 市販フォントの利用に際してはライセンスを確認した上で自己責任で''
** 設定ファイルの所在 &aname(config-file); [#wb1c52a4]
fontconfig の設定ファイルは以下の箇所にあります。
+ /etc/fonts/fonts.conf
+ /etc/fonts/conf.d/ 配下
+ ~~/.config/fontconfig/conf.d 配下
+ ~~/.config/fontconfig/fonts.conf
+ ~~/.fonts.conf.d/ 配下 (deprecated)
+ ~~/.fonts.conf (deprecated)
+ /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文字|設定ファイルの内容                                            |h
| 00 〜 09 |フォントを置くディレクトリの指定 (/opt/fonts 等を指定する場合)|
| 10 〜 19 |システムのレンダリングのデフォルト指定                        |
| 20 〜 29 |フォント毎のレンダリングオプション                            |
| 30 〜 39 |フォントファミリーの alias 指定                               |
| 40 〜 49 |各フォントファミリーの一般名 (serif 等) 指定                  |
| 50 〜 59 |/etc/fonts/conf.d/ 配下以外の設定ファイルの指定               |
| 60 〜 69 |一般名 (serif 等) に割り当てるフォントの指定                  |
| 70 〜 79 |select font (adjust which fonts are available)                |
| 80 〜 89 |match target="scan" (フォント定義の変更)                      |
| 90 〜 99 |font synthesis                                                |

>参照
-/usr/share/doc/fontconfig/fontconfig-user.html
-/etc/fonts/conf.d/README
* デフォルトの表示フォントの選択 [#i2ccb788]
serif、sans-serif、monospace が選択されたときに表示されるフォントを設定します。

システムワイドに設定するなら /etc/fonts/local.conf に、
自分だけに適用するするならば ~/.config/fontconfig/fonts.conf に '''<prefer>''' 指定の '''<alias>''' を書きます。
((この設定だけは例外的に、システムワイドでも local.conf に書くのが正解))
 <?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) が設定されていた場合、フォントがその言語のタグ((コマンドラインでfc-list : family lang と打つと確認できます))を持っているかどうかを見ます。
- 言語が英語 (en) なら、DejaVu フォントは英語の言語タグを持つので妥当となり、アルファベットや記号などは DejaVu フォントのグリフが使われ、平仮名などは IPA フォントのグリフが使われます。
- 言語が日本語 (ja) なら、DejaVu フォントは日本語の言語タグを持たないので不当となり、アルファベットや記号も IPA フォントのグリフが使われます。
- もし記述した順番そのままで表示させたい場合は、'''<alias binding="same">''' と書きます。

この指定は /etc/fonts/conf.d/ 配下の 60 番台の設定ファイルの指定よりも優先されます。
((50-user.conf や 51-local.conf から読み込まれるため。'''<prefer>''' 指定は先に書いた方が優先。同じ理由で、local.conf よりも先に読み込まれる ~/.config/fontconfig/fonts.conf の方が優先される))
/etc/fonts/local.conf や ~/.config/fontconfig/fonts.conf で指定したフォントでカバーされない範囲の文字 (中国語や韓国語等)
についてはそのまま /etc/fonts/conf.d/6?-* の指定が有効となります。

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

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>
* フォントの置き換え [#b88bbdb6]
特定のフォントが呼ばれたときに、全く別のフォントを表示させることができます。

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>
* フォントのブラックリストとホワイトリストを設定 [#q49cda6d]
特定のフォントの存在を隠したりその逆をすることができます。
なお、ブラックリストとホワイトリストの両方に載っている場合、ホワイトリストが優先されます。

/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>
* フォントの見た目を良くする [#qc3c6221]

**フォントの形が崩れる、線がかすれる &aname(unhint-ja); [#pca0b8f3]
ヒンティングが効きすぎているのかも。
効き具合を弱めてみる。
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>
** オートヒントで綺麗に表示させるコツ [#h8d7da11]
オートヒントを有効にしたら、サブピクセルレンダリングは無効にしましょう。
オートヒントはサブピクセルレンダリングと組み合わせて使用されることを想定していないため。

基本的にオートヒントを有効にすると字形が崩れ、字幅が狂います。
字形の崩れはどうにもなりませんが、字幅の狂いはヒントスタイルに 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>
** 埋め込みビットマップを表示しない &aname(embeddedbitmap); [#i41de8a7]
デフォルトでは埋め込みビットマップでの表示が優先されます。

システムワイドに設定するなら /etc/fonts/conf.d/11-embeddedbitmap.conf あたりに
((これを /etc/fonts/local.conf に書いてしまうと、~/.config/fontconfig/fonts.conf で override できなくなる))
 <?xml version="1.0"?>
 <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
 <fontconfig>
 
   <match>
     <edit name="embeddedbitmap">
       <bool>false</bool>
     </edit>
   </match>
 
 </fontconfig>
と記述する。

>参照
-[[fontconfig 更新に伴うあれこれ>http://kmuto.jp/d/index.cgi/debian/fontconfig2.4.htm]]

>ちなみに似たような設定の一つとして
>>これを止めさせるには、
 # dpkg-reconfigure fontconfig-config
を実行し、「デフォルトでビットマップフォントを有効にしますか?」の質問に「いいえ」と答えてください。
<<
>のような情報が出ていたが、
これは X ビットマップフォント (.pcf 等) を fontconfig の対象として使うかどうかの設定

** 疑似斜体や疑似太字を表示しない [#odf5b1f3]
最も単純な方法は /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>
//疑似斜体の判定方法が・・・
** フォントのサイズに応じて最適なレンダリングを設定する [#a2e0ddc1]
一律で設定するのではなく、
フォントのサイズに応じたレンダリング方法を指定するとさらに見やすくなる可能性があります。

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」はどちらも「以下」です。
バグだか仕様だか知りませんが、そうなっています。
** フォントごとに最適なレンダリングを設定する [#i1f15fc6]
一律で設定するのではなく、
フォントに応じたレンダリング方法を指定するとさらに見やすくなる可能性があります。

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>
//*** ヒラギノフォントの最適化設定サンプル &aname(hint-optimize); [#h1d86265]
///etc/fonts/conf.d/26-hiragino.conf に
// <?xml version="1.0"?>
// <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
// <fontconfig>
// 
//   <match target="font">
//     <test name="family">
//       <string>Hiragino Kaku Gothic Pro</string>
//       <string>Hiragino Kaku Gothic Pro W3</string>
//       <string>Hiragino Kaku Gothic Pro W6</string>
//       <string>ヒラギノ角ゴ Pro</string>
//       <string>ヒラギノ角ゴ Pro W3</string>
//       <string>ヒラギノ角ゴ Pro W6</string>
//       <string>Hiragino Maru Gothic Pro</string>
//       <string>Hiragino Maru Gothic Pro W4</string>
//       <string>ヒラギノ丸ゴ Pro</string>
//       <string>ヒラギノ丸ゴ Pro W4</string>
//     </test>
//     <test name="pixelsize" compare="less">
//       <double>20</double>
//     </test>
//     <edit name="hinting">
//       <bool>false</bool>
//     </edit>
//   </match>
// 
//   <match target="font">
//     <test name="family">
//       <string>Hiragino Mincho Pro</string>
//       <string>Hiragino Mincho Pro W3</string>
//       <string>Hiragino Mincho Pro W6</string>
//       <string>ヒラギノ明朝 Pro</string>
//       <string>ヒラギノ明朝 Pro W3</string>
//       <string>ヒラギノ明朝 Pro W6</string>
//     </test>
//     <test name="pixelsize" compare="less">
//       <double>20</double>
//     </test>
//     <edit name="hinting">
//       <bool>false</bool>
//     </edit>
//   </match>
// 
// </fontconfig>
//
//小さいサイズでは、ヒンティングが効き過ぎてしまい (特に明朝体でかすれて見える等の不都合がある)、
//ヒンティングは無効のままの方がいいようです。
//
//&color(red){''※ 市販フォントの利用に際してはライセンスを確認した上で自己責任で''};
//* メトリック情報の誤ったフォントの利用 &aname(wrong-metrics); [#k189762b]
//残念ながら、一部の TrueType フォント等には誤ったメトリック情報が設定されているものがあります。
//fontconfig の設定により、ある程度はこれを正しく解釈できるように設定できます。
//
//具体的には、/etc/fonts/conf.d/ 配下に 80 番台で始まる設定ファイルを置き、
//その中に '''<match target="scan">''' 指定でメトリック情報の置き換えルールを書きます。
//
//下記はその設定例ですが、設定後には次のようなコマンドを実行して fontconfig の cache を更新する必要があります。
// fc-cache --force
//※ システム全体の cache の更新は root アカウントで…。
//フォントファイル自体は変更されていないため、
//オプションの --force を付けないと cache が更新されません。
//
//** VL Gothic &aname(vlgothic-spacing); [#gdb5442b]
//version 20091214-1 時点の VL Gothic は spacing の情報が誤っており、
//等幅フォントの VL Gothic が VL PGothic と同様にプロポーショナルとして設定されています。
//((これ以外にも、ゴシックなのに Serif 系のフォントとしている等の誤りがある))
//
///etc/fonts/conf.d/85-vlgothic.conf とでもいうファイルを作成し、以下のように設定。
// <?xml version="1.0"?>
// <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
// <fontconfig>
// 
//   <!-- fix ups for VL Goghic family -->
//   <match target="scan">
//     <test name="family">
//       <string>VL Gothic</string>
//       <string>VL ゴシック</string>
//     </test>
//     <edit name="spacing">
//       <const>dual</const>
//     </edit>
//   </match>
// 
// </fontconfig>
//
//>次のコマンドで設定前後の情報を確認
// fc-list : family style spacing
//
//>ただし、これは [[dual-width 問題>Japanese#dual-width]] を回避するために意図的にしているという説もあり。
//** リコーフォント &aname(ricoh-weight); [#x6a97542]
//某ソフトにバンドルされていたりする市販フォント。
//weight の情報が誤っており、全て regular 相当になっている。
//
///etc/fonts/conf.d/85-ricoh.conf とでもいうファイルを作成し、以下のように設定。
// <?xml version="1.0"?>
// <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
// <fontconfig>
// 
//   <!-- fix up for HG* family -->
//   <match target="scan">
//     <test name="family">
//       <string>HGGothicM</string>
//       <string>HGGyoshotai</string>
//       <string>HGKyokashotai</string>
//       <string>HGPGothicM</string>
//       <string>HGPKyokashotai</string>
//       <string>HGPGyoshotai</string>
//       <string>HGSGothicM</string>
//       <string>HGSKyokashotai</string>
//       <string>HGSGyoshotai</string>
//       <string>HGPゴシックM</string>
//       <string>HGゴシックM</string>
//       <string>HGP教科書体</string>
//       <string>HGP行書体</string>
//       <string>HGSゴシックM</string>
//       <string>HGS教科書体</string>
//       <string>HGS行書体</string>
//       <string>HG教科書体</string>
//       <string>HG行書体</string>
//     </test>
//     <edit name="weight">
//       <const>medium</const>
//     </edit>
//   </match>
//   <match target="scan">
//     <test name="family">
//       <string>HGMinchoB</string>
//       <string>HGPMinchoB</string>
//       <string>HGSMinchoB</string>
//       <string>HGP明朝B</string>
//       <string>HGS明朝B</string>
//       <string>HG明朝B</string>
//     </test>
//     <edit name="weight">
//       <const>bold</const>
//     </edit>
//   </match>
//   <match target="scan">
//     <test name="family">
//       <string>HGGothicE</string>
//       <string>HGMinchoE</string>
//       <string>HGSoeiPresenceEB</string>
//       <string>HGPGothicE</string>
//       <string>HGPMinchoE</string>
//       <string>HGPSoeiPresenceEB</string>
//       <string>HGSGothicE</string>
//       <string>HGSMinchoE</string>
//       <string>HGSSoeiPresenceEB</string>
//       <string>HGPゴシックE</string>
//       <string>HGP明朝E</string>
//       <string>HGP創英プレゼンスEB</string>
//       <string>HGSゴシックE</string>
//       <string>HGS明朝E</string>
//       <string>HGS創英プレゼンスEB</string>
//       <string>HGゴシックE</string>
//       <string>HG明朝E</string>
//       <string>HG創英プレゼンスEB</string>
//     </test>
//     <edit name="weight">
//       <const>extrabold</const>
//     </edit>
//   </match>
//   <match target="scan">
//     <test name="family">
//       <string>HGPSoeiKakugothicUB</string>
//       <string>HGPSoeiKakupoptai</string>
//       <string>HGSSoeiKakugothicUB</string>
//       <string>HGSSoeiKakupoptai</string>
//       <string>HGSoeiKakugothicUB</string>
//       <string>HGSoeiKakupoptai</string>
//       <string>HGP創英角ゴシックUB</string>
//       <string>HGP創英角ポップ体</string>
//       <string>HGS創英角ゴシックUB</string>
//       <string>HGS創英角ポップ体</string>
//       <string>HG創英角ゴシックUB</string>
//       <string>HG創英角ポップ体</string>
//     </test>
//     <edit name="weight">
//       <const>heavy</const>
//     </edit>
//   </match>
// 
// </fontconfig>
//
//>次のコマンドで設定前後の情報を確認
// fc-list : family style weight
//* その他 [#hb7ea4bd]
//
//** 不完全な英語グリフを持つ日本語フォントを英語表示に使用する [#m67f6cb0]
//
// <?xml version="1.0"?>
// <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
// <fontconfig>
// 
//   <match>
//     <test name="lang">
//       <string>en</string>
//     </test>
//     <edit name="lang" mode="prepend">
//       <string>ja</string>
//      </edit>
//   </match>
// 
// </fontconfig>

* おまけ [#s824081f]

** 設定確認 &aname(test); [#p570a26b]
- [[表示確認テスト用ページ>./SandBox]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS