「フォント設定」の版間の差分
(→Subpixel rendering: 翻訳) |
(→トラブルシューティング: 情報を更新) |
||
(4人の利用者による、間の10版が非表示) | |||
14行目: | 14行目: | ||
{{Related articles end}} |
{{Related articles end}} |
||
− | [https://www.freedesktop.org/wiki/Software/fontconfig/ Fontconfig] はアプリケーションに利用できる[[フォント]]のリストを提供し、フォントのレンダリングの設定をするために作られたライブラリです |
+ | [https://www.freedesktop.org/wiki/Software/fontconfig/ Fontconfig] はアプリケーションに利用できる[[フォント]]のリストを提供し、フォントのレンダリングの設定をするために作られたライブラリです。FreeType ライブラリはこの設定に基づいてフォントをレンダリングします。Arch Linux の freetype2 フォントレンダリングパッケージには、特に LCD モニターでのフォントレンダリングを改善するために有効にされたバイトコードインタープリター(BCI)が含まれています。[[#Fontconfig 設定]]と[[フォント設定/サンプル]]を参照してください。 |
− | + | Fontconfig は、最近の Unix および Unix ライクなオペレーティングシステムでよく使用されますが、一部のアプリケーションは、フォントの選択と表示のオリジナルの方法である [[X Logical Font Description]] に依存しています。 |
|
− | |||
− | Arch Linux のフォントレンダリングパッケージには ''freetype2'' のサポートが含まれており バイトコードインタプリタ (BCI) が有効になっています。LCD モニターでより良いフォントレンダリングを行うためのパッチがあてられたパッケージも存在します。 |
||
== フォントパス == |
== フォントパス == |
||
77行目: | 75行目: | ||
=== プリセット === |
=== プリセット === |
||
− | プリセットは {{ic|/ |
+ | プリセットは {{ic|/usr/share/fontconfig/conf.avail}} ディレクトリにインストールされています。{{ic|/etc/fonts/conf.d/README}} に記述されているように、[[Wikipedia:ja:ソフトリンク|シンボリックリンク]]を作成することで、ユーザーごと・全体的に、プリセットの設定を有効にすることが可能です。これらのプリセットは個別の設定ファイルの設定を上書きします。 |
例えば、サブピクセル RGB レンダリングを全体的に有効にするには: |
例えば、サブピクセル RGB レンダリングを全体的に有効にするには: |
||
213行目: | 211行目: | ||
再起動して X を起動してください。これで lcddefault フィルタはフォントを違ったふうに表示するはずです。 |
再起動して X を起動してください。これで lcddefault フィルタはフォントを違ったふうに表示するはずです。 |
||
− | === |
+ | === 特定のフォントまたはフォントスタイルのカスタム設定 === |
auto-hinter は複雑な方法を使ってフォントを表示しますが、しばしば太字フォントの幅が広すぎになってしまうことがあります。幸いに、太字フォントのみ autohinter をオフにすることで解決できます: |
auto-hinter は複雑な方法を使ってフォントを表示しますが、しばしば太字フォントの幅が広すぎになってしまうことがあります。幸いに、太字フォントのみ autohinter をオフにすることで解決できます: |
||
259行目: | 257行目: | ||
</nowiki>}} |
</nowiki>}} |
||
− | === フォント |
+ | === デフォルトまたは代替フォントを設定する === |
+ | ==== マッチテスト ==== |
||
− | 一番信頼できる方法は下のような XML フラグメントを追加することです。''"binding" 属性を使うことでよりよい結果を得ることができます''、例えば、Firefox でフォントのプロパティを変更したくない場合。下のフラグメントは Georgia の代わりに Ubuntu を使わせます: |
||
+ | |||
+ | デフォルトまたはフォールバックフォントを設定する確実な方法は、マッチテストを実行する XML フラグメントを追加することです。"binding" 属性で、例えば次のように設定すると、''Georgia'' の代わりに ''Gentium'' にフォールバックします: |
||
+ | |||
+ | {{bc|1= |
||
+ | ... |
||
+ | <match target="pattern"> |
||
+ | <test qual="any" name="family" compare="eq"><string>Georgia</string></test> |
||
+ | <edit name="family" mode="assign" binding="same"><string>Gentium Book Plus</string></edit> |
||
+ | </match> |
||
+ | ... |
||
+ | }} |
||
+ | |||
+ | 上記において、''compare'' 属性は、"eq" (すなわち、''Georgia''と完全に等しい)、''contains'' (例えば、''Georgia'' と ''Georgia Pro'' いずれかと一致) または他の値でありえる。[https://www.linux.org/docs/man5/fonts-conf.html] を参照してください。 |
||
+ | |||
+ | ==== エイリアス ==== |
||
+ | |||
+ | 別の方法は、''<alias>'' を使用して "優先" フォントを設定することです。''<family>'' 要素に一致するフォントは、一致する ''<family>'' の前に ''<prefer>'' のファミリーのリストを追加するように編集されます。次の例では、''Helvetica'' が呼び出されたときに "Bitstream Vera Sans" にフォールバックします。 |
||
{{bc|<nowiki> |
{{bc|<nowiki> |
||
... |
... |
||
+ | <alias> |
||
− | <match target="pattern"> |
||
− | < |
+ | <family>Helvetica</family> |
+ | <prefer> |
||
− | <edit name="family" mode="assign" binding="same"><string>Ubuntu</string></edit> |
||
+ | <family>Bitstream Vera Sans</family> |
||
− | </match> |
||
+ | </prefer> |
||
+ | </alias> |
||
... |
... |
||
</nowiki>}} |
</nowiki>}} |
||
+ | ''<alias>'' は、一部のグリフが欠落している場合に代替フォントを指定するためにも使用できます。たとえば、''Helvetica Neue'' の多くのバージョンにはギリシャ文字が含まれていません。ユーザーは ''Helvetica Neue'' がインストールされており、ラテン文字にはそれを使用し、ギリシャ文字には ''Helvetica'' と類似しているため ''FreeSans'' にフォールバックしたい場合があります。ただし、同じユーザーが別のフォント ''Noto Sans'' をデフォルトのサンセリフフォントとして設定した可能性があります。以下によりこれを実現できます。 |
||
− | 他の方法として "preferred" フォントを設定するというのもありますが、''元のフォントがシステムに存在しない時にしか効果がありません''。その場合、指定したフォントが代わりに使われます: |
||
{{bc|<nowiki> |
{{bc|<nowiki> |
||
... |
... |
||
− | <!-- Replace Helvetica with Bitstream Vera Sans Mono --> |
||
− | <!-- Note, an alias for Helvetica should already exist in default conf files --> |
||
<alias> |
<alias> |
||
− | <family>Helvetica</family> |
+ | <family>Helvetica Neue LT Pro</family> |
+ | <prefer> |
||
− | <prefer><family>Bitstream Vera Sans Mono</family></prefer> |
||
− | + | <family>Helvetica Neue LT Pro</family> |
|
+ | <family>FreeSans</family> |
||
+ | </prefer> |
||
</alias> |
</alias> |
||
... |
... |
||
</nowiki>}} |
</nowiki>}} |
||
+ | |||
+ | ユーザーがグリフが欠落している場合にデフォルトのフォントにフォールバックしたいだけの場合は、上記は必要ありません。 |
||
=== フォントのホワイトリストとブラックリスト === |
=== フォントのホワイトリストとブラックリスト === |
||
338行目: | 357行目: | ||
# ln -s /etc/fonts/conf.avail/70-no-bitmaps.conf /etc/fonts/conf.d/ |
# ln -s /etc/fonts/conf.avail/70-no-bitmaps.conf /etc/fonts/conf.d/ |
||
+ | |||
+ | {{note|環境によっては {{ic|70-no-bitmaps.conf}} が {{ic|/usr/share/fontconfig/conf.avail}} 内に存在する場合があります }} |
||
{{ic|70-yes-bitmaps.conf}} が存在しない場合は削除する必要はありません。ビットマップフォントをどのフォントで置き換えるか選択することもできます (Helvetica, Courier, Times のビットマップを TTF フォントに): |
{{ic|70-yes-bitmaps.conf}} が存在しない場合は削除する必要はありません。ビットマップフォントをどのフォントで置き換えるか選択することもできます (Helvetica, Courier, Times のビットマップを TTF フォントに): |
||
479行目: | 500行目: | ||
== fontconfig をサポートしていないアプリケーション == |
== fontconfig をサポートしていないアプリケーション == |
||
− | [[URxvt]] |
+ | [[URxvt]] のような一部のアプリケーションは fontconfig の設定を無視することがあります。{{ic|~/.Xresources}} を使うことで問題を解決することができますが、このファイルの柔軟性は fontconfig に到底及びません。例 (オプションの説明は [[#Fontconfig 設定]] を見てください): |
{{hc|~/.Xresources|<nowiki> |
{{hc|~/.Xresources|<nowiki> |
||
494行目: | 515行目: | ||
== トラブルシューティング == |
== トラブルシューティング == |
||
− | === Force emoji font === |
||
− | |||
− | Some software may lacks proper [[Emoji]] font fallback support. |
||
− | |||
− | {{Note|For [[Firefox]] see workaround on [[Firefox#Font troubleshooting]] instead.}} |
||
− | |||
− | To force emoji presentation create emoji font fallback preset for your application, to enable see [[#Presets]]. Replace ''application'' and ''Noto Color Emoji'' with your application and preferred emoji font respectively: |
||
− | |||
− | {{hc|/etc/fonts/conf.avail/55-emoji-prepend.conf|<nowiki> |
||
− | <?xml version="1.0" encoding="UTF-8"?> |
||
− | <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> |
||
− | <fontconfig> |
||
− | <match> |
||
− | <test name="prgname"> |
||
− | <string></nowiki>''application''<nowiki></string> |
||
− | </test> |
||
− | <edit name="family" mode="prepend" binding="weak"> |
||
− | <string></nowiki>''Noto Color Emoji''<nowiki></string> |
||
− | </edit> |
||
− | </match> |
||
− | </fontconfig></nowiki>}} |
||
=== フォントが歪む === |
=== フォントが歪む === |
||
550行目: | 550行目: | ||
[[メトリック互換フォント]]を使うことでもフォントを正しく表示することができます。 |
[[メトリック互換フォント]]を使うことでもフォントを正しく表示することができます。 |
||
+ | === ヒンティングをオーバーライドするアプリケーション === |
||
− | === Applications overriding hinting === |
||
+ | 一部のアプリケーションまたはデスクトップ環境では、フォント設定のヒンティングとアンチエイリアスのデフォルト設定が無効になる場合があります。これは、 {{pkg|vlc}} や {{pkg|smplayer}} などの Qt アプリケーションを使用している場合など、 [[GNOME]] 3 で発生することがあります。このような場合は、アプリケーション固有の構成プログラムを使用してください。 GNOME の場合は、 {{Pkg|gnome-tweaks}} を試してください。 |
||
− | Some applications or desktop environments may override default fontconfig hinting and anti-aliasing settings. This may happen with [[GNOME]] 3, for example while you are using Qt applications like {{pkg|vlc}} or {{pkg|smplayer}}. Use the specific configuration program for the application in such cases. For GNOME, try {{Pkg|gnome-tweaks}}. |
||
− | |||
− | === 古い GTK と Qt アプリケーション === |
||
− | |||
− | 新しい GTK アプリはデフォルトで Xft を有効にしますが、バージョン 2.2 以前では話が違っていました。これらのアプリケーションを更新できない場合、{{ic|~/.bashrc}} に次を追加することで古い [[GNOME]] に Xft を強制してください: |
||
− | |||
− | export GDK_USE_XFT=1 |
||
− | |||
− | 古い Qt アプリケーションでは: |
||
− | |||
− | export QT_XFT=true |
||
− | |||
− | === アプリケーションがヒンティングを無視する === |
||
− | |||
− | アプリケーションによってはデフォルトの fontconfig のヒンティングやアンチエイリアス設定を無視することがあります。例えば [[VLC media player|vlc]] や [[MPlayer|smplayer]] などの Qt アプリケーションを [[GNOME]] 3 で使っている時に起こることがあります。そのような場合はアプリケーションにあった指定の設定プログラムを使って下さい。gnome なら、{{pkg|gnome-tweak-tool}}{{Broken package link|置換パッケージ: {{Pkg|gnome-tweaks}}}} を使ってアンチエイリアスをデフォルトの {{ic|Grayscale}} から {{ic|Rgba}} に設定してください。 |
||
=== デスクトップ環境によるヒンティングの設定がアプリケーションに反映されない === |
=== デスクトップ環境によるヒンティングの設定がアプリケーションに反映されない === |
||
584行目: | 570行目: | ||
上記の例では、ヒンティングを "grayscale" に設定しています。 |
上記の例では、ヒンティングを "grayscale" に設定しています。 |
||
− | === |
+ | === GTK アプリケーションでの間違ったヒンティング === |
+ | 一部のデスクトップ環境、特に [[GNOME]] および [[Plasma]] の外では、一部の GTK アプリケーションがフォント設定を適切に読み取ることができませんでした。この問題を解決するには、{{Pkg|xsettingsd}} または {{AUR|xsettingsd-git}} をインストールし、システム起動時に毎回実行します。詳細については、[[Xsettingsd]] および [https://github.com/derat/xsettingsd/wiki/Settings xsettingsd wiki] も参照してください。次の一般的な設定で構成できます。 |
||
− | [[GNOME]] は XSETTINGS システムを使ってフォントレンダリングを設定しています。GNOME が存在しない場合、GTK アプリケーションは fontconfig を使いますが、フォントによってはヒンティングが間違って設定され、結果として見た目が太すぎたり細すぎたりすることがあります。代わりとして {{AUR|xsettingsd-git}} を使って設定を行うのがシンプルな解決法です、例えば: |
||
{{hc|~/.xsettingsd| |
{{hc|~/.xsettingsd| |
||
Xft/Hinting 1 |
Xft/Hinting 1 |
||
− | Xft/RGBA "rgb" |
||
Xft/HintStyle "hintslight" |
Xft/HintStyle "hintslight" |
||
Xft/Antialias 1 |
Xft/Antialias 1 |
||
+ | Xft/RGBA "rgb" |
||
}} |
}} |
||
+ | 他のアプリケーションでこれが機能しない場合は、{{Pkg|xorg-xrdb}} をインストールし、次の構成を提供します。 |
||
− | また、{{ic|~/.Xresources}} に {{ic|Xft.*}} ディレクティブを使ってフォント設定を書くことで設定デーモンを使用しないですみます。 |
||
+ | {{hc|~/.Xresources| |
||
− | === 生成された PDF でのフォントの問題 === |
||
+ | Xft.hinting: 1 |
||
+ | Xft.hintstyle: hintslight |
||
+ | Xft.antialias: 1 |
||
+ | Xft.rgba: rgb |
||
+ | }} |
||
+ | |||
+ | その後、システムを起動するたびにスクリプト {{ic|xrdb -merge ~/.Xresources}} を実行してオプションを適用できます。[[X resources]] および [[フォント設定#fontconfig をサポートしていないアプリケーション|fontconfig をサポートしていないアプリケーション]] も参照してください。 |
||
+ | |||
+ | === GTK4 プログラムでのヒンティング === |
||
+ | |||
+ | GTK4 および libadwaita プログラムは、フォントヒンティング設定を無視します。これを解決するには、次の構成を作成または変更します。 |
||
+ | |||
+ | {{hc|~/.config/gtk-4.0/settings.ini|2= |
||
+ | [Settings] |
||
+ | gtk-hint-font-metrics=true |
||
+ | }} |
||
+ | |||
+ | こちらも参照 [https://docs.gtk.org/gtk4/property.Settings.gtk-hint-font-metrics.html GTK documentation] 、[https://gitlab.gnome.org/GNOME/gtk/-/issues/3787 GTK issue 3787] |
||
+ | |||
+ | === 生成された PDF での Helvetica フォントの問題 === |
||
以下のコマンドを実行したときに: |
以下のコマンドを実行したときに: |
||
607行目: | 613行目: | ||
helvR12-ISO8859-1.pcf.gz: "Helvetica" "Regular" |
helvR12-ISO8859-1.pcf.gz: "Helvetica" "Regular" |
||
− | アプリケーションの |
+ | アプリケーションの ''ファイルに印刷'' あるいは ''エクスポート'' を使って PDF を生成したときに {{Pkg|xorg-fonts-75dpi}} のビットマップフォントが埋め込まれてしまっています。ビットマップフォントは {{Grp|xorg}} グループをインストールしたときに一緒にインストールされることがあります。フォントが汚くなる問題を解決するには、パッケージをアンインストールしてください。{{Pkg|gsfonts}} (Type 1) または {{Pkg|tex-gyre-fonts}} (OpenType) をインストールすることで Helvetica のフリーの代替フォントを入手できます。 |
Helvetica を必要とする PDF を開いたときにも同じ問題が発生することがあります。 |
Helvetica を必要とする PDF を開いたときにも同じ問題が発生することがあります。 |
||
613行目: | 619行目: | ||
=== FreeType フォントによってビットマップフォントがおかしくなる === |
=== FreeType フォントによってビットマップフォントがおかしくなる === |
||
− | {{Pkg|freetype2}} をバージョン 2.7.1 にアップグレードしてからビットマップフォントに問題が発生すると一部のユーザーが報告しています ({{Bug|52502}})。ターミナルエミュレータや {{AUR|dwm}} や {{Pkg|dmenu}} などのプログラムで別のフォントにフォールバックして表示が崩れるようです。原因はリリースノートで説明されている PCF フォントファミリーのフォーマットの変更です [https://sourceforge.net/projects/freetype/files/freetype2/2.7.1/] |
+ | {{Pkg|freetype2}} をバージョン 2.7.1 にアップグレードしてからビットマップフォントに問題が発生すると一部のユーザーが報告しています ({{Bug|52502}})。ターミナルエミュレータや {{AUR|dwm}} や {{Pkg|dmenu}} などのプログラムで別のフォントにフォールバックして表示が崩れるようです。原因はリリースノートで説明されている PCF フォントファミリーのフォーマットの変更です [https://sourceforge.net/projects/freetype/files/freetype2/2.7.1/] 古いフォーマットを使用していたユーザーはフォントエイリアスを作成することで問題を解決できます [https://forum.manjaro.org/t/terminus-font-name-fix-after-freetype2-update-to-2-7-1-1/15530] |
上記の {{Pkg|freetype2}} のアップデートで {{ic|Terminus}} から {{ic|xos4 Terminus}} に名前が変更された {{Pkg|terminus-font}} のエイリアスを作成する例を示します: |
上記の {{Pkg|freetype2}} のアップデートで {{ic|Terminus}} から {{ic|xos4 Terminus}} に名前が変更された {{Pkg|terminus-font}} のエイリアスを作成する例を示します: |
||
629行目: | 635行目: | ||
* {{ic|/etc/fonts/conf.d}} ディレクトリに作成したファイルのシンボリックリンクを作成して変更を適用してください。例: {{ic|ln -s /etc/fonts/conf.avail/33-TerminusPCFFont.conf /etc/fonts/conf.d}}。 |
* {{ic|/etc/fonts/conf.d}} ディレクトリに作成したファイルのシンボリックリンクを作成して変更を適用してください。例: {{ic|ln -s /etc/fonts/conf.avail/33-TerminusPCFFont.conf /etc/fonts/conf.d}}。 |
||
設定を行うことでアップデート前と同じように表示されるはずですが、フォントエイリアスが適用されない場合、{{ic|.Xresources}} をリロードしたりディスプレイサーバーを再起動してみてください。 |
設定を行うことでアップデート前と同じように表示されるはずですが、フォントエイリアスが適用されない場合、{{ic|.Xresources}} をリロードしたりディスプレイサーバーを再起動してみてください。 |
||
+ | |||
+ | === DejaVu Monospace でアンダースコアがレンダリングされない === |
||
+ | |||
+ | [https://gitlab.gnome.org/GNOME/pango/issues/392 Pango 1.44 以降]、DejaVu Sans Mono フォントを使用すると、特定のフォントサイズでアンダースコア文字が消えます。回避策は、Liberation Mono を等幅フォントとして使用することです。[[フォント設定#デフォルトまたは代替フォントを設定する]] を参照してください。 |
||
+ | |||
+ | === FreeType フォントのデバッグ === |
||
+ | |||
+ | {{Pkg|freetype2-demos}} は、FreeType フォント設定をデバッグするためのツールを提供します。{{ic|ftview}} は、GUI でライブプレビューを使用してフォントレンダリング設定を調整できるます。例えば: |
||
+ | |||
+ | $ ftview -e unic -d 1024x768x24 -r 96 10 /usr/share/fonts/noto/NotoSans-Regular.ttf |
||
== 参照 == |
== 参照 == |
2023年6月4日 (日) 20:10時点における最新版
Fontconfig はアプリケーションに利用できるフォントのリストを提供し、フォントのレンダリングの設定をするために作られたライブラリです。FreeType ライブラリはこの設定に基づいてフォントをレンダリングします。Arch Linux の freetype2 フォントレンダリングパッケージには、特に LCD モニターでのフォントレンダリングを改善するために有効にされたバイトコードインタープリター(BCI)が含まれています。#Fontconfig 設定とフォント設定/サンプルを参照してください。
Fontconfig は、最近の Unix および Unix ライクなオペレーティングシステムでよく使用されますが、一部のアプリケーションは、フォントの選択と表示のオリジナルの方法である X Logical Font Description に依存しています。
目次
- 1 フォントパス
- 2 Fontconfig 設定
- 2.1 プリセット
- 2.2 アンチエイリアス
- 2.3 ヒンティング
- 2.4 ピクセル アライメント
- 2.5 サブピクセルレンダリング
- 2.6 特定のフォントまたはフォントスタイルのカスタム設定
- 2.7 大きいフォントでだけアンチエイリアスを有効にする
- 2.8 デフォルトまたは代替フォントを設定する
- 2.9 フォントのホワイトリストとブラックリスト
- 2.10 ビットマップフォントの無効化
- 2.11 ビットマップフォントのスケーリングを無効にする
- 2.12 不完全なフォントにボールド・イタリック体を作成する
- 2.13 ルールの優先順を変更する
- 2.14 fontconfig 設定サンプル
- 2.15 現在の設定を確認
- 3 fontconfig をサポートしていないアプリケーション
- 4 トラブルシューティング
- 4.1 フォントが歪む
- 4.2 Calibri, Cambria, Monaco などが正しく表示されない
- 4.3 ヒンティングをオーバーライドするアプリケーション
- 4.4 デスクトップ環境によるヒンティングの設定がアプリケーションに反映されない
- 4.5 GTK アプリケーションでの間違ったヒンティング
- 4.6 GTK4 プログラムでのヒンティング
- 4.7 生成された PDF での Helvetica フォントの問題
- 4.8 FreeType フォントによってビットマップフォントがおかしくなる
- 4.9 DejaVu Monospace でアンダースコアがレンダリングされない
- 4.10 FreeType フォントのデバッグ
- 5 参照
フォントパス
アプリケーションからフォントを使えるようにするには、迅速かつ容易にアクセスできるようフォントを一覧表に入れる必要があります。
最初から Fontconfig が利用するフォントパスは /usr/share/fonts/
や ~/.local/share/fonts
です (~/.fonts/
もありますが、非推奨となっています)。これらのフォルダを Fontconfig は再帰的にスキャンします。管理とインストールを簡単にするために、フォントを追加する際にはこのフォントパスを使うのが推奨されます。
Fontconfig が認識しているフォントの一覧を表示するには:
$ fc-list : file
出力のフォーマットについては fc-list(1) を見て下さい。
Xorg が利用しているフォントパスを確認するには Xorg のログを見て下さい:
$ grep /fonts ~/.local/share/xorg/Xorg.0.log
Fontconfig とは違い、Xorg は /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 が認識しているフォントの一覧を表示するには、xorg-xlsfonts パッケージに入っている xlsfonts
を使って下さい。
Fontconfig 設定
Fontconfig については fonts-conf の man ページで説明されています。
設定は $XDG_CONFIG_HOME/fontconfig/fonts.conf
を使ってユーザーごとに行うことも、/etc/fonts/local.conf
で全体的に設定することもできます。ユーザー別の設定はグローバルの設定よりも優先されます。これらのファイルは同じ構文を使っています。
Fontconfig は全ての設定を一つの中心ファイル (/etc/fonts/fonts.conf
) に集めます。このファイルは fontconfig がアップデートしたときに置き換えられるので編集してはいけません。Fontconfig に対応したアプリケーションはこのファイルを読み込んで利用できるフォントとレンダリング方法を知ります。このファイルは、全体的な設定 (/etc/fonts/local.conf
) と /etc/fonts/conf.d/
の設定済みプリセット、そしてユーザーの設定ファイル ($XDG_CONFIG_HOME/fontconfig/fonts.conf
) に書かれたルールの寄せ集めです。fc-cache
を使うことで fontconfig の設定をリビルドできます、ただし変更は新しく起動したアプリケーションにのみ適用されます。
Fontconfig の設定ファイルは XML 形式で、以下のヘッダーが必要になります:
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <!-- settings go here --> </fontconfig>
この記事で出てくる設定例ではこれらのタグは省略しています。
プリセット
プリセットは /usr/share/fontconfig/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>false</bool> </edit> </match>
ヒンティング
フォントヒンティング (instructing とも呼ばれます) は数学的な情報を使ってアウトラインフォントの表示を調整し、ディスプレイのピクセルグリッドと同じように、ラスタライズされたグリッドにフォントを並べる技術です。フォントの見た目をハッキリとさせることで読みやすくなるような効果を生みます。ディスプレイが 300 DPI ではない場合ヒンティングがないとフォントを正しく並べることはできません。ヒンティングは2つのタイプが利用できます。
バイトコードインタプリタ (BCI)
BCI ヒンティングを使うと、TrueType のフォントは FreeType の Byte-Code Interpreter によってフォントがレンダリングされます。正しいヒンティング情報があるフォントでは BCI ヒンティングが良く機能します。ヒンティングはデフォルトで有効になっています。無効化するには:
<match target="font"> <edit name="hinting" mode="assign"> <bool>false</bool> </edit> </match>
Autohinter
Autohinter は既存のヒンティング情報を無視して自動ヒンティングを実行します。TrueType2 がパテントで保護されていたため昔はデフォルトでしたが、パテントの有効期限が切れたので現在は使う意味がほとんどなくなっています。情報が少なかったり無かったりするフォントでは見た目が良くなりますが、ヒント情報があるフォントではかなり見た目が悪くなります。普通のフォントは後者なので autohinter はあまり役に立ちません。自動ヒンティングを有効にするには:
<match target="font"> <edit name="autohint" mode="assign"> <bool>true</bool> </edit> </match>
ヒントスタイル
ヒントスタイルはヒンティングモードの影響力の強さを示します。ヒンティングの強さは次のどれかに設定できます: hintfull
, hintmedium
, hintslight
, hintnone
。hintslight
はフォントをあいまいにしますがフォントの形は維持されます。一方、hintfull
はピクセルグリッドに上手く整列するハッキリとしたフォントになりますがフォントの形は大きく変わってしまいます。好みは人によって好きずきです。hintslight
がデフォルト設定です。
<match target="font"> <edit name="hintstyle" mode="assign"> <const>hintnone</const> </edit> </match>
ピクセル アライメント
現在製造されているモニタのほとんどは、Red, Green, Blue (RGB) の仕様を使用しています。フォントを正しく表示するには、お使いのモニタの種類を Fontconfig が認識している必要があります。モニタは, RGB, BGR, V-RGB, または V‐BGR である。モニタテストは ここ にあります。
<match target="font"> <edit name="rgba" mode="assign"> <const>rgb</const> </edit> </match>
サブピクセルレンダリング
サブピクセルレンダリング は、サブピクセルを使用して水平 (または垂直) 解像度を効果的に3倍にすることで、フォントレンダリングの鮮明さを向上させるテクニックです。 Windows マシンでは、このテクニックは ClearType と呼ばれます。
FreeType2 には、 Harmony と ClearType (FT_CONFIG_OPTION_SUBPIXEL_RENDERING
) [1] という2種類のサブピクセルレンダリングがあります。
ClearType サブピクセルレンダリングが有効になっている場合は、 LCD フィルタの使用をお勧めします not LCD フィルタを有効にする方法とその利点については、以下のセクションを参照してください。
FreeType 2.10.3 から、 Arch Linux はデフォルトで ClearType サブピクセルレンダリングを有効にします [2]
LCD フィルター
サブピクセルレンダリングを使う場合、色縁を減らす LCD フィルターを有効にするべきです。FreeType 2 API リファレンスの LCD filtering にこのフィルターの説明があります。また、FT_LcdFilter にオプションの説明があり、LCD filter test にそれぞれのオプションを使って実際に表示したサンプルがあります
ほとんどのユーザーにとっては lcddefault
フィルターが具合が良いでしょう。他のフィルターは特別な事情がある場合に使えます: lcdlight
は明るいフィルターで、太すぎたりぼやけているフォントに向いています。lcdlegacy
はオリジナルの Cairo フィルターです。lcdnone
はフィルターを完全に無効にします。
<match target="font"> <edit name="lcdfilter" mode="assign"> <const>lcddefault</const> </edit> </match>
高度な LCD フィルター設定
内蔵の LCD フィルターで満足しない時は、freetype2 のカスタムパッケージをビルドしてハードコードされたフィルターを修正することでフォントレンダリングを調整することが可能です。Arch Build System を使えばソースからパッケージをビルド・インストールできます。
まず、root で freetype2 の PKGBUILD を更新してください:
# abs extra/freetype2
この例ではビルドディレクトリに /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 };
この定数はレンダリングされた文字に適用するローパスフィルタを定義しています。必要に応じて修正してください [3]。ファイルを保存し、カスタムパッケージをビルド・インストールしてください:
$ makepkg -e # pacman -Rd freetype2 # pacman -U freetype2-VERSION-ARCH.pkg.tar.xz
再起動して X を起動してください。これで lcddefault フィルタはフォントを違ったふうに表示するはずです。
特定のフォントまたはフォントスタイルのカスタム設定
auto-hinter は複雑な方法を使ってフォントを表示しますが、しばしば太字フォントの幅が広すぎになってしまうことがあります。幸いに、太字フォントのみ autohinter をオフにすることで解決できます:
... <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" 属性で、例えば次のように設定すると、Georgia の代わりに Gentium にフォールバックします:
... <match target="pattern"> <test qual="any" name="family" compare="eq"><string>Georgia</string></test> <edit name="family" mode="assign" binding="same"><string>Gentium Book Plus</string></edit> </match> ...
上記において、compare 属性は、"eq" (すなわち、Georgiaと完全に等しい)、contains (例えば、Georgia と Georgia Pro いずれかと一致) または他の値でありえる。[4] を参照してください。
エイリアス
別の方法は、<alias> を使用して "優先" フォントを設定することです。<family> 要素に一致するフォントは、一致する <family> の前に <prefer> のファミリーのリストを追加するように編集されます。次の例では、Helvetica が呼び出されたときに "Bitstream Vera Sans" にフォールバックします。
... <alias> <family>Helvetica</family> <prefer> <family>Bitstream Vera Sans</family> </prefer> </alias> ...
<alias> は、一部のグリフが欠落している場合に代替フォントを指定するためにも使用できます。たとえば、Helvetica Neue の多くのバージョンにはギリシャ文字が含まれていません。ユーザーは Helvetica Neue がインストールされており、ラテン文字にはそれを使用し、ギリシャ文字には Helvetica と類似しているため FreeSans にフォールバックしたい場合があります。ただし、同じユーザーが別のフォント Noto Sans をデフォルトのサンセリフフォントとして設定した可能性があります。以下によりこれを実現できます。
... <alias> <family>Helvetica Neue LT Pro</family> <prefer> <family>Helvetica Neue LT Pro</family> <family>FreeSans</family> </prefer> </alias> ...
ユーザーがグリフが欠落している場合にデフォルトのフォントにフォールバックしたいだけの場合は、上記は必要ありません。
フォントのホワイトリストとブラックリスト
<selectfont>
エレメントを <acceptfont>
や <rejectfont>
エレメントと組み合わせて使うことで、フォントを選択的にブラックリストやホワイトリストに入れることができます。よくあるユースケースとしては、あるフォントをインストールする必要があるが、アプリケーションのユーザーインターフェイスで使われると問題が起こるので、使われないようにしたい場合があります。
まずフォントのファミリー名を確認してください:
$ fc-scan .fonts/lklug.ttf --format='%{family}\n'
LKLUG
以下のように <rejectfont>
を記述してファミリー名を使います:
<selectfont> <rejectfont> <pattern> <patelt name="family" > <string>LKLUG</string> </patelt> </pattern> </rejectfont> </selectfont>
<rejectfontfont>
と <acceptfont>
両方のエレメントを使う場合、最初に <rejectfontfont>
を使って排除したいグループをマッチさせ、それから <acceptfont>
を使ってブラックリストに入れたグループの中から個々のフォントをホワイトリストに追加するのが普通です。
<selectfont> <rejectfont> <glob>/usr/share/fonts/OTF/*</glob> </rejectfont> <acceptfont> <pattern> <patelt name="family" > <string>Monaco</string> </patelt> </pattern> </acceptfont> </selectfont>
ビットマップフォントの無効化
ビットマップフォントが有効になっていると、特定のフォントが見つからなかった場合のフォールバックとして使われて、テキストがギザギザに表示されることがあります。fontconfig でビットマップフォントを無効化するには、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
が存在しない場合は削除する必要はありません。ビットマップフォントをどのフォントで置き換えるか選択することもできます (Helvetica, Courier, Times のビットマップを TTF フォントに):
~/.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"> <test name="family" qual="any"> <string>Helvetica</string> </test> <edit mode="assign"> <string>Arial</string> <string>Liberation Sans</string> <string>sans-serif</string> </edit> </match> <match target="pattern"> <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>
ビットマップフォントのスケーリングを無効にする
ビットマップフォントのスケーリングを無効化するには (which often makes them blurry)、/etc/fonts/conf.d/10-scale-bitmap-fonts.conf
を削除してください。
不完全なフォントにボールド・イタリック体を作成する
Freetype には italic や bold のスタイルがフォントにないときに自動で作成する機能があります。ただし、この機能はアプリケーションによって明示的に必要とされたときしか使われません。プログラムがこのようなリクエストを送るのは稀なので、このセクションでは手動で欠けているスタイルを強制的に作成する方法を説明しています。
下で説明しているように /usr/share/fonts/fonts.cache-1
を編集するところから初めて下さい。fc-cache
でフォントの更新がされると /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
などの他のスタイルに変更してください。さらに、イタリック体では slant=0
を slant=100
に、ボールド体では weight=80
を weight=200
に変更してください。もしくは bold italic と結合するなら:
"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> ...
ルールの優先順を変更する
Fontconfig は番号順で /etc/fonts/conf.d
内のファイルを処理します。ルールやファイルが他のルールを上書きする可能性があり、どのファイルが最後にパースされるのか混乱するおそれがあります。
個人設定が他の全てのルールに優先することを保証するには、順番を変えて下さい:
# cd /etc/fonts/conf.d # mv 50-user.conf 99-user.conf
ただし、ユーザーにはデフォルトでフォントの設定(ヒンティングやアンチエイリアスのプロパティ、新しいフォントから一般的なフォントファミリーへのエイリアスなど)のコントロールを与えられているので、ほとんどの場合この変更は必要ありません。
fontconfig 設定サンプル
fontconfig の設定例はフォント設定/サンプルにあります。
現在の設定を確認
使われている設定を確認するには、fc-match --verbose
を実行してください。例:
$ fc-match --verbose Sans
family: "DejaVu Sans"(s) hintstyle: 3(i)(s) hinting: True(s) ...
数字の意味は https://www.freedesktop.org/software/fontconfig/fontconfig-user.html を参照。例えば 'hintstyle: 3' は 'hintfull' の意味です。
fontconfig をサポートしていないアプリケーション
URxvt のような一部のアプリケーションは fontconfig の設定を無視することがあります。~/.Xresources
を使うことで問題を解決することができますが、このファイルの柔軟性は fontconfig に到底及びません。例 (オプションの説明は #Fontconfig 設定 を見てください):
~/.Xresources
Xft.autohint: 0 Xft.lcdfilter: lcddefault Xft.hintstyle: hintslight Xft.hinting: 1 Xft.antialias: 1 Xft.rgba: rgb
X が起動した時に設定が正しくロードされているか xrdb -q
で確認してください (詳細な情報は Xresources を見てください)。
トラブルシューティング
フォントが歪む
フォントが大きすぎ・小さすぎたり、プロポーションやレンダリングがおかしい場合、fontconfig が間違った DPI を使っている可能性があります。
Fontconfig は Xorg サーバーによる DPI パラメータを検知することができます。自動で検知された DPI を (xorg-xdpyinfo パッケージに入っている) xdpyinfo
で確認してみて下さい:
$ xdpyinfo | grep dots
resolution: 102x102 dots per inch
DPI が (おそらくモニター EDID が誤っているせいで) 間違って検出されている場合、Xorg の設定で手動で指定することが可能です。Xorg#画面サイズと DPI を参照してください。これは推奨されている解決方法ですが、ドライバーにバグがあると動かないことがあります。
Fontconfig は Xft.dpi 変数が設定されている場合、デフォルトをそれにします。Xft.dpi は基本的にデスクトップ環境 (通常は Xorg の DPI 設定) か ~/.Xdefaults
や ~/.Xresources
で手動で設定されます。xrdb を使って値を調べて下さい:
$ xrdb -query | grep dpi
Xft.dpi: 102
問題が修正されない場合は fontconfig によって使われる DPI を手動で設定するようにフォールバックできます:
... <match target="pattern"> <edit name="dpi" mode="assign"><double>102</double></edit> </match> ...
Calibri, Cambria, Monaco などが正しく表示されない
スケーラブルフォントによっては、主として小さなサイズの時、代わりとして埋め込みビットマップが表示されることがあります。全てのサイズでスケーラブルフォントを使うには埋め込みビットマップを無効にしてください。
メトリック互換フォントを使うことでもフォントを正しく表示することができます。
ヒンティングをオーバーライドするアプリケーション
一部のアプリケーションまたはデスクトップ環境では、フォント設定のヒンティングとアンチエイリアスのデフォルト設定が無効になる場合があります。これは、 vlc や smplayer などの Qt アプリケーションを使用している場合など、 GNOME 3 で発生することがあります。このような場合は、アプリケーション固有の構成プログラムを使用してください。 GNOME の場合は、 gnome-tweaks を試してください。
デスクトップ環境によるヒンティングの設定がアプリケーションに反映されない
例えば、GNOME の設定でヒンティングを "none" に設定していても Firefox が完全なヒンティングを行ってしまい、フォントが幅広になってしまうことがあります。このような場合、ヒンティングの設定を fonts.conf
ファイルに追加してください:
<?xml version='1.0'?> <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'> <fontconfig> <match target="font"> <edit mode="assign" name="hinting"> <bool>false</bool> </edit> </match> </fontconfig>
上記の例では、ヒンティングを "grayscale" に設定しています。
GTK アプリケーションでの間違ったヒンティング
一部のデスクトップ環境、特に GNOME および Plasma の外では、一部の GTK アプリケーションがフォント設定を適切に読み取ることができませんでした。この問題を解決するには、xsettingsd または xsettingsd-gitAUR をインストールし、システム起動時に毎回実行します。詳細については、Xsettingsd および xsettingsd wiki も参照してください。次の一般的な設定で構成できます。
~/.xsettingsd
Xft/Hinting 1 Xft/HintStyle "hintslight" Xft/Antialias 1 Xft/RGBA "rgb"
他のアプリケーションでこれが機能しない場合は、xorg-xrdb をインストールし、次の構成を提供します。
~/.Xresources
Xft.hinting: 1 Xft.hintstyle: hintslight Xft.antialias: 1 Xft.rgba: rgb
その後、システムを起動するたびにスクリプト xrdb -merge ~/.Xresources
を実行してオプションを適用できます。X resources および fontconfig をサポートしていないアプリケーション も参照してください。
GTK4 プログラムでのヒンティング
GTK4 および libadwaita プログラムは、フォントヒンティング設定を無視します。これを解決するには、次の構成を作成または変更します。
~/.config/gtk-4.0/settings.ini
[Settings] gtk-hint-font-metrics=true
こちらも参照 GTK documentation 、GTK issue 3787
生成された PDF での Helvetica フォントの問題
以下のコマンドを実行したときに:
$ fc-match helvetica
以下のように出力される場合:
helvR12-ISO8859-1.pcf.gz: "Helvetica" "Regular"
アプリケーションの ファイルに印刷 あるいは エクスポート を使って PDF を生成したときに xorg-fonts-75dpi のビットマップフォントが埋め込まれてしまっています。ビットマップフォントは xorg グループをインストールしたときに一緒にインストールされることがあります。フォントが汚くなる問題を解決するには、パッケージをアンインストールしてください。gsfonts (Type 1) または tex-gyre-fonts (OpenType) をインストールすることで Helvetica のフリーの代替フォントを入手できます。
Helvetica を必要とする PDF を開いたときにも同じ問題が発生することがあります。
FreeType フォントによってビットマップフォントがおかしくなる
freetype2 をバージョン 2.7.1 にアップグレードしてからビットマップフォントに問題が発生すると一部のユーザーが報告しています (FS#52502)。ターミナルエミュレータや dwmAUR や dmenu などのプログラムで別のフォントにフォールバックして表示が崩れるようです。原因はリリースノートで説明されている PCF フォントファミリーのフォーマットの変更です [5] 古いフォーマットを使用していたユーザーはフォントエイリアスを作成することで問題を解決できます [6]
上記の freetype2 のアップデートで Terminus
から xos4 Terminus
に名前が変更された terminus-font のエイリアスを作成する例を示します:
/etc/fonts/conf.avail/
に設定ファイルを作成してフォントエイリアスを設定:
/etc/fonts/conf.avail/33-TerminusPCFFont.conf
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <alias> <family>Terminus</family> <prefer><family>xos4 Terminus</family></prefer> <default><family>fixed</family></default> </alias> </fontconfig>
/etc/fonts/conf.d
ディレクトリに作成したファイルのシンボリックリンクを作成して変更を適用してください。例:ln -s /etc/fonts/conf.avail/33-TerminusPCFFont.conf /etc/fonts/conf.d
。
設定を行うことでアップデート前と同じように表示されるはずですが、フォントエイリアスが適用されない場合、.Xresources
をリロードしたりディスプレイサーバーを再起動してみてください。
DejaVu Monospace でアンダースコアがレンダリングされない
Pango 1.44 以降、DejaVu Sans Mono フォントを使用すると、特定のフォントサイズでアンダースコア文字が消えます。回避策は、Liberation Mono を等幅フォントとして使用することです。フォント設定#デフォルトまたは代替フォントを設定する を参照してください。
FreeType フォントのデバッグ
freetype2-demos は、FreeType フォント設定をデバッグするためのツールを提供します。ftview
は、GUI でライブプレビューを使用してフォントレンダリング設定を調整できるます。例えば:
$ ftview -e unic -d 1024x768x24 -r 96 10 /usr/share/fonts/noto/NotoSans-Regular.ttf