「フォント設定」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
553行目: 553行目:
   
 
一部のアプリケーションまたはデスクトップ環境では、フォント設定のヒンティングとアンチエイリアスのデフォルト設定が無効になる場合があります。これは、 {{pkg|vlc}} や {{pkg|smplayer}} などの Qt アプリケーションを使用している場合など、 [[GNOME]] 3 で発生することがあります。このような場合は、アプリケーション固有の構成プログラムを使用してください。 GNOME の場合は、 {{Pkg|gnome-tweaks}} を試してください。
 
一部のアプリケーションまたはデスクトップ環境では、フォント設定のヒンティングとアンチエイリアスのデフォルト設定が無効になる場合があります。これは、 {{pkg|vlc}} や {{pkg|smplayer}} などの Qt アプリケーションを使用している場合など、 [[GNOME]] 3 で発生することがあります。このような場合は、アプリケーション固有の構成プログラムを使用してください。 GNOME の場合は、 {{Pkg|gnome-tweaks}} を試してください。
 
=== 古い GTK と Qt アプリケーション ===
 
 
新しい GTK アプリはデフォルトで Xft を有効にしますが、バージョン 2.2 以前では話が違っていました。これらのアプリケーションを更新できない場合、{{ic|~/.bashrc}} に次を追加することで古い [[GNOME]] に Xft を強制してください:
 
 
export GDK_USE_XFT=1
 
 
古い Qt アプリケーションでは:
 
 
export QT_XFT=true
 
 
=== アプリケーションがヒンティングを無視する ===
 
 
一部のアプリケーションまたはデスクトップ環境は、デフォルトの fontconfig ヒンティングおよびアンチエイリアス設定をオーバーライドする場合があります。これは、[[GNOME]] 3 で、たとえば {{pkg|vlc}} や {{pkg|smplayer}} などの Qt アプリケーションを使用しているときに発生する可能性があります。このような場合は、アプリケーションに固有の設定プログラムを使用してください。GNOME の場合は、{{Pkg|gnome-tweaks}} を試してください。
 
   
 
=== デスクトップ環境によるヒンティングの設定がアプリケーションに反映されない ===
 
=== デスクトップ環境によるヒンティングの設定がアプリケーションに反映されない ===
584行目: 570行目:
 
上記の例では、ヒンティングを "grayscale" に設定しています。
 
上記の例では、ヒンティングを "grayscale" に設定しています。
   
=== GNOME を使っていない場合に GTK アプリケーションのヒンティングがおかしくなる ===
+
=== 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 のフリーの代替フォントを入手できます。
+
アプリケーションの ''ファイルに印刷'' あるいは ''エクスポート'' を使って 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/]古いフォーマットを使用していたユーザーはフォントエイリアスを作成することで問題を解決できます [https://forum.manjaro.org/t/terminus-font-name-fix-after-freetype2-update-to-2-7-1-1/15530]
+
{{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 に依存しています。

目次

フォントパス

アプリケーションからフォントを使えるようにするには、迅速かつ容易にアクセスできるようフォントを一覧表に入れる必要があります。

最初から 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
ヒント:
  • xset q コマンドでも Xorg が使っているフォントパスを確認できます。
  • Xorg を root 権限で実行している場合は /var/log/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 で全体的に設定することもできます。ユーザー別の設定はグローバルの設定よりも優先されます。これらのファイルは同じ構文を使っています。

ノート: 設定ファイルとディレクトリ: ~/.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/NN-name.conf, $XDG_CACHE_HOME/fontconfig/*.cache-* を各々使って下さい。二番目のディレクトリを使う場合、ファイルの名前は NN-name.conf という決まりに従って下さい (NN は2桁の数字です、例: 00, 10, 99)。

Fontconfig は全ての設定を一つの中心ファイル (/etc/fonts/fonts.conf) に集めます。このファイルは fontconfig がアップデートしたときに置き換えられるので編集してはいけません。Fontconfig に対応したアプリケーションはこのファイルを読み込んで利用できるフォントとレンダリング方法を知ります。このファイルは、全体的な設定 (/etc/fonts/local.conf) と /etc/fonts/conf.d/ の設定済みプリセット、そしてユーザーの設定ファイル ($XDG_CONFIG_HOME/fontconfig/fonts.conf) に書かれたルールの寄せ集めです。fc-cache を使うことで fontconfig の設定をリビルドできます、ただし変更は新しく起動したアプリケーションにのみ適用されます。

ノート: (GNOMEKDE などの) デスクトップ環境によっては、フォントコントロールパネルを使うと自動的にユーザーのフォント設定ファイルが作成・上書きされます。これらのデスクトップ環境では、期待した動作をするために既に定義済みの設定ファイルにあわせるのが最善です。

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>
ノート: GNOME など、アプリケーションによってはデフォルトのアンチエイリアスの設定を上書きすることがあります

ヒンティング

フォントヒンティング (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, hintnonehintslight はフォントをあいまいにしますがフォントの形は維持されます。一方、hintfull はピクセルグリッドに上手く整列するハッキリとしたフォントになりますがフォントの形は大きく変わってしまいます。好みは人によって好きずきです。hintslight がデフォルト設定です。

  <match target="font">
    <edit name="hintstyle" mode="assign">
      <const>hintnone</const>
    </edit>
  </match>
ノート: GNOME などのアプリケーションによっては、デフォルトのヒンティング設定を無視することがあります。

ピクセル アライメント

現在製造されているモニタのほとんどは、Red, Green, Blue (RGB) の仕様を使用しています。フォントを正しく表示するには、お使いのモニタの種類を Fontconfig が認識している必要があります。モニタは, RGB, BGR, V-RGB, または V‐BGR である。モニタテストは ここ にあります。

  <match target="font">
    <edit name="rgba" mode="assign">
      <const>rgb</const>
    </edit>
  </match>
ノート: サブピクセルの描画を行わない場合 (下記参照) 、 freetype はサブピクセルの配置 (垂直か水平か) のみを考慮します。たとえば、RGBBGR に違いはありません。

サブピクセルレンダリング

サブピクセルレンダリング は、サブピクセルを使用して水平 (または垂直) 解像度を効果的に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]

ノート: ClearType の代わりに Harmony と呼ばれる、 FreeType 2.10.3 より前のバージョンでは lcdlight LCD フィルタを使用してサブピクセルのレンダリング動作を取得します。

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 (例えば、GeorgiaGeorgia Pro いずれかと一致) または他の値でありえる。[4] を参照してください。

エイリアス

別の方法は、<alias> を使用して "優先" フォントを設定することです。<family> 要素に一致するフォントは、一致する <family> の前に <prefer> のファミリーのリストを追加するように編集されます。次の例では、Helvetica が呼び出されたときに "Bitstream Vera Sans" にフォールバックします。

...
<alias>
    <family>Helvetica</family>
    <prefer>
        <family>Bitstream Vera Sans</family>
    </prefer>
</alias>
...

<alias> は、一部のグリフが欠落している場合に代替フォントを指定するためにも使用できます。たとえば、He​​lvetica 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-no-bitmaps.conf/usr/share/fontconfig/conf.avail 内に存在する場合があります

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 には italicbold のスタイルがフォントにないときに自動で作成する機能があります。ただし、この機能はアプリケーションによって明示的に必要とされたときしか使われません。プログラムがこのようなリクエストを送るのは稀なので、このセクションでは手動で欠けているスタイルを強制的に作成する方法を説明しています。

下で説明しているように /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=Regularstyle=Bold などの他のスタイルに変更してください。さらに、イタリック体では slant=0slant=100 に、ボールド体では weight=80weight=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>
...
ヒント: 既に太字フォントが存在していて、更に太くしたいときは 'embolden' という値を使って下さい。

ルールの優先順を変更する

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 を見てください)。

トラブルシューティング

フォントが歪む

ノート: 96 DPI はスタンダードではありません。あなたのモニターの実際の DPI を使って正しいフォントレンダリングをする必要があります (特にサブピクセルレンダリングを使う場合)。

フォントが大きすぎ・小さすぎたり、プロポーションやレンダリングがおかしい場合、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 などが正しく表示されない

スケーラブルフォントによっては、主として小さなサイズの時、代わりとして埋め込みビットマップが表示されることがあります。全てのサイズでスケーラブルフォントを使うには埋め込みビットマップを無効にしてください

メトリック互換フォントを使うことでもフォントを正しく表示することができます。

ヒンティングをオーバーライドするアプリケーション

一部のアプリケーションまたはデスクトップ環境では、フォント設定のヒンティングとアンチエイリアスのデフォルト設定が無効になる場合があります。これは、 vlcsmplayer などの 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 documentationGTK 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)。ターミナルエミュレータや dwmAURdmenu などのプログラムで別のフォントにフォールバックして表示が崩れるようです。原因はリリースノートで説明されている 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

参照