オルタナティブ・ブログ > 俺の話を聞け! >

いや、やっぱり聞いていただけなくても結構なんですがとりあえず垂れ流させてください

「ボールドが出たッ!Fedora Core編完!」「ほ〜お、それでほかのやり残したネタはどうするんだ?」〜Fedora Coreと日本語フォント完結(?)編〜

»

さて、突然ですがまず告知。

 以前、このブログでもUNIX USERがオープンソースマガジンになる、と告知しましたが、それに関連しまして「オープンソースマガジン /japan.linux.com 合同オープン編集会議」というイベントを開催することになりました。詳細はホームページの方を参照していただきたいと思いますが、オープンソースマガジンの編集長以下編集スタッフ全員とともにパーティー形式でオープンソースマガジンへの誌名変更祝いと編集部への要望、企画持込み会をいっぺんにやってしまおう、というイベントです。誰でも参加できますので、ご都合のつく方は是非参加されてみてはいかがでしょうか。「ブログを見た」と言えば、もれなく私がお相手いたします(笑)。

以下本題


 昔、「Fedora Core 4だとデフォルトでは日本語フォントでボールドがでねぇぜ!!!」てなネタを書いた。しかも微妙な感じで終わってしまいその後のフォローアップがいまいち、というか決定的なネタが無かったのでフォローアップも糞もない、という状態だったのだが、ひさしぶりに色々いじったらネタが出てきたので、またまたFedora Core 4のフォントネタで攻めてみる。というか、GoogleでXftでググったらこのブログの例の記事が結構高い順位で表示されてしまっていたのでまずいと思ったからちょっと本気だして調べてみたというのが真実だったりする訳だが。

前回までのおさらい


  • Fedora Core 4ではデフォルトでは日本語フォントでボールド表示がされない。
  • 日本語フォントのほとんどはフォント自体にボールドフォントの情報が含まれていないのが原因。Windowsなどでは通常のフォントからボールドフォントを合成して表示していたりする。
  • Vine Linuxなどではパッチによりボールドフォント合成機能を取り込んでいるため、デフォルトでボールドが表示されているが、Fedora Coreではそのパッチが採用されていない。
  • かつてFedora Coreでも「ボールド合成パッチを採用してくれ」というリクエストはあったが、「これはX側で対処するべき問題なのでバグではない。ということでFedora Project側(以下Fedora側)では対処しない。」

 ということで、「Fedora側の問題じゃねぇ!」と言われてしまっているこの問題。それでは、とX側の方を調べてみた。

Xでフォントを描画する仕組みの方を軽く紹介


 現在、Xで主流となっているのが、Xft+freetype+fontconfigというライブラリの組み合せによるフォントの描画だ。Xでのフォントの話をすると非常にややこしくなるので詳細は割愛するが、おおざっぱに言えばXftがフォントを描画するフロントエンドで、Xftがフォントを描画する際に使用するレンダリングライブラリがfreetype、そしてフォント関連のマネージメントを行っているのがfontconfigである。

 合成ボールドを表示させる場合、それぞれの役割としてはfontconfigは合成ボールドを使用するかどうかの判別、freetypeは通常のフォントからボールドフォントを合成する機能の提供、Xftはfontconfigの指示をチェックしてのfreetypeの呼び出し、という感じである。

 なお、より詳しい情報についてはUNIX USER 2004年3月号第1特集「フォント徹底解剖」や関連Webを参照してほしい。

以上を踏まえて結論から言ってしまうと


 最新バージョンのXft 2.1.7とfreetype 2.1.10、fontconfig 2.2.3では、「日本語フォント(というかボールド情報を持っていないフォント)でボールドがでない」という問題はすでに解決されており、その3つの組み合せでは正しく日本語フォントでボールドフォントが表示される。

 ただし、fontconfigでのボールドフォント合成機能はまだ実験的機能としての搭載であるため、将来的に変更される可能性もあるようで、開発者の間でもこの機能をどうするかは議論の対象となっているようだ

 特に漢字など、画数が多く込み入った文字についてボールドフォントを合成する場合、見ため的に美しいボールドフォントを合成することが難しいという問題点がある。日本語フォントのボールド表示問題はだいぶ前から話題になっているにも関わらず、なかなかきちんとした実装が行われていなかったのも、その辺りが原因なのだろう。

実際にXft、freetype、fontconfigをインストールしてみよう


 インストールはfreetype、fontconfig、Xftの順で行う。これは、Xftのconfigure時に、インストールされているfreetypeがボールド合成機能を持っているかチェックを行うためである。

 それぞれの入手先は

 である。インストールの手順は以下の通りだ。

■freetypeのインストール

$ tar xvzf fretype-2.1.10.tar.gz
 :(tarballが展開される)
 :
$ cd freetype-2.1.10
$ ./configure --prefix=/usr
 :(configureが実行される)
 :
$ make
 :(makeが実行される)
 :
$ su
Password: ←rootパスワードを入力
# make install
 :(freetypeがインストールされる)
 :
# exit

■fontconfigのインストール

$ tar xvzf fontconfig-2.3.2.tar.gz
 :(tarballが展開される)
 :
$ cd fontconfig-2.3.2
$ ./configure --prefix=/usr
 :(configureが実行される)
 :
$ make
 :(makeが実行される)
 :
$ su
Password: ←rootパスワードを入力
# make install
 :(fontconfigがインストールされる)
 :
# exit

■Xftのインストール

$ tar xvzf libXft-2.1.7.tar.gz
 :(tarballが展開される)
 :
$ ./configure --prefix=/usr/X11R6
 :(configureが実行される)
checking for FT_GlyphSlot_Embolden... yes ←freetypeにボールド合成機能があるかのチェック
 :
$ make
 :(makeが実行される)
 :
$ su
Password:
# make install
 :(xftがインストールされる)
 :
$ exit

 また、以上のライブラリのインストール後、fontconfigに合成ボールドの機能を利用するよう設定を追加する必要がある。fontconfigの設定ファイルは/etc/fonts/fonts.confである。fonts.conf内の以下の記述

<!--
  These are the default Unicode chars that are expected to be blank
  in fonts.  All other blank chars are assumed to be broken and
  won't appear in the resulting charsets
-->

の前に、次の設定を追加しよう。

<!--
Synthetic emboldening for fonts that do not have bold face available
-->

        <match target="font">
                <!-- check to see if the font is just regular -->
                <test name="weight" compare="less_eq">
                        <const>medium</const>
                </test>
                <!-- check to see if the pattern requests bold -->
                <test target="pattern" name="weight" compare="more">
                        <const>medium</const>
                </test>
                <!-- set the embolden flag -->
                <edit name="embolden" mode="assign">
                        <bool>true</bool>
                </edit>
        </match>

以上で、ブラウザ等を再起動すれば日本語フォントでもボールドが正しく表示されるはずだ。この設定は以前紹介したパッチによるものとは若干異なるため、注意していただきたい。

fontconfigには設定ファイルのサンプルが同梱されているが、その設定ファイルではFirefoxで正しくボールド表示が行えないようである。

 なお、これらの合成ボールド機能が実装されているXft 2.1.7、fontconfig 2.2.3、freetype 2.1.10自体はすでに安定版という形で公開されているため、Fedora Coreの次期バージョンではデフォルトで日本語フォントがボールド表示できるようになるだろう。

Comment(1)