DejaVuフォントで日本語を使いたい!

プログラミングに使える良いフォントを探していたら、DejaVuフォントというものを見つけた。確かにすごくきれいだし見やすい。
で、VimでDejaVu Sans Monoを使おうと思ったんだけど、Vimでは欧文フォントと和文フォントを別々に指定することができないから、DejaVu Sans Monoを指定してしまうと日本語が表示できなくなってしまう。だから、いろいろと試行錯誤してみた。まだ途中だけどとりあえずメモ。
方法1 Font Linkingを使う
Font LinkingっていうのはWindowsの機能で、任意のフォントを組み合わせて使えるようになる機能らしい。これを使ってDejaVu Sans MonoとIPAゴシックを組み合わせてみたい。
詳しい方法はこちらやこちらなどを参考にしてもらいたいが、要はレジストリに一つキーを追加すればいいらしい。
regeditを起動したら、まずは↓の位置に移動。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink
そうしたら、DejaVu Sans Monoという名前の文字列エントリーを新規作成して、ipag.ttfという値を入力する。↓の図のような感じになるはず。

一度Windowsを再起動したら、VimでDejaVu Sans Monoを指定してみる。
:set guifont=DejaVu_Sans_Mono:h11

日本語がすごく横に伸びてしまいました。一般に日本語フォントに含まれる半角文字は縦横比が2:1なんだけど、DejaVu Sans Monoはそれよりも少し横幅が広いことが原因らしい。ということで、↓のように幅がちょうど半分になるように指定してあげます。
:set guifont=DejaVu_Sans_Mono:h11:w5.5

結構いい感じなんじゃないかなと。Vim以外で使わないならこれだけでも大丈夫な感じ。
方法2 FontForgeで合成する
とはいえ、レジストリをいじったりする方法だと.gvimrcの移植性に劣るかもなとか思ったので、FontForgeを使ってDejaVu Sans MonoとIPAゴシックを合成してみようと思った。これが全くうまくいかないんだけど、とりあえずそこそこ使えそうなものができあがったから、できたところまでメモ。
まずはFontForgeのインストール。以前導入したcoLinuxを起動して、↓のコマンド。
sudo apt-get install fontforge
次に、適当なディレクトリに移動して、WindowsのフォントフォルダからDejaVu Sans MonoとIPAゴシックをコピーしてくる。
mkdir ~/tmp && cd ~/tmp
cp /mnt/c/WINDOWS/Fonts/{ipag,DejaVuSansMono}.ttf .
次に、↓のような内容のスクリプトファイルを用意して、適当な名前(script.peなど)で保存する。このスクリプトをもう少し改良できれば結果がかなり変わってくるんだろうけど、もっとFontForgeについて勉強してからじゃないと無理そう。
#!/usr/bin/fontforge -script
# 新しいフォント名
family = "DejaVu+IPAG"
Open("ipag.ttf")
# IPAゴシックの高さをDejaVu Sans Monoに揃える
ScaleToEm(2048)
# 別ファイルとして保存
Generate("ipag-scaled.ttf")
Close()
Open("DejaVuSansMono.ttf")
# DejaVu Sans Monoの横幅を縮小する処理
SelectWorthOutputting()
Scale(75,100)
SetWidth(1024)
SelectNone()
# 高さを揃えたIPAゴシックをマージ
MergeFonts("ipag-scaled.ttf")
#フォント名等を指定して保存
SetFontNames(family, family, family, "Regular")
Generate(family + ".ttf")
Close()
↓のようにしてスクリプトを実行。coLinuxではメモリ不足でkillされることがしばしばあるので、その場合はcoLinuxの設定ファイルを編集してメモリの割当量を増やす。
fontforge -script script.pe
できあがったttfファイルをWindowsのファイルシステムに移動する。coLinuxではWindowsのファイルシステムをいじるのにroot権限が要るっぽい。
sudo mv DejaVu+IPAG.ttf /mnt/c
ttfファイルをC:\WINDOWS\Fontsに移動してフォントをインストールしたら、またVimでフォント指定をしてやる。
:set guifont=DejaVu+IPAG:h10.5

これはこれでいい感じ。スクリプトを改良すればもっと良くなるかも。
合成したフォントを公開してみようかと思ったけど、IPAフォントのライセンスが面倒そうなのでやめた。
まとめ
Font Linkingを使うか、FontForgeで合成したフォントを使うかは結構悩みどころ。
総合的なきれいさではまだFont Linkingの方が上かもしれない。特に、太字にしたり斜体にしたりしたときに結構差が出る (DejaVu Sans Monoは太字・斜体・太字斜体がそれぞれ別のttfファイルとして用意されていて、FontForgeで合成フォントを作るときにそれらのttfは使っていないから、当然といえば当然の話)。
でも、Font LinkingだとVimの外では横に伸びた日本語になっちゃうから、例えばATOKの変換候補が間抜けな感じになっちゃっていたりする。Font Linkingを使うとしたらDejaVu Sans Monoをインストールして、その上レジストリの設定までしなきゃダメだけど、合成フォントならフォントをインストールするだけで使えるようになるしなー。
どうしようかな。
トラックバックURL
- http://liosk.blog103.fc2.com/tb.php/169-9343014c
1 件のトラックバック
- [FontForge] IPAゴシックとDejaVu Sans Monoを合成するスクリプトを修正
-
前回のエントリーで、FontForgeのスクリプトを使ってDejaVu Sans MonoとIPAゴシックを合成したりしてみた。そのとき使ったスクリプトを手直しして、少...
- 2008-12-06
- 発信元: 文系大学的IT系の悲哀

