今や XFree86 は標準で xtt や freetype による TrueType フォントのサポートがあり,最近のディストリビューションであるなら労せず TrueType フォントが表示できる環境を手にいれることができます.
しかし,市販パッケージ,或いはフリーで配布されているフォントを入手してシステムへインストールし,各ソフトウェアから使えるようにするには,いくつかの手順を踏む必要があります.
そこで,ここでは主に XFree86 環境へ TrueType フォントをインストールする際に必要となる最低限の知識と手順について触れてみたいと思います.
尚,この文書を作成するにあたり参考にさせて戴いきましたサイトをご紹介しますとともに,作者様に感謝申し上げます.
XFree86 では,論理フォント名 (XLFD [1]) というモノでフォントを管理しています.長くて複雑ですが,覚えておくと多少幸せになれます.
-misc-fixed-medium-r-normal--12-120-75-75-c-60-iso8859-1
-dynalab-dfhsgothic-medium-r-normal--0-0-0-0-c-0-jisx0208.1990-0
TrueType フォントの場合, pixel size, point size, resolution X, resolution Y, average width の部分は通常 0
にします.
提供者名.フォント制作会社 (Adobe や Dynalab , Ricoh 等) や,作者がつけたブランド名 (kochi や shinonome , efont 等) ,或いは,使用者がテキト〜につけたり :-p します.
フォントの名前. gothic , times 等.
名前については,テキト〜につけても構いませんし, TrueType フォントの場合,ftdump を使って PostScript name:
行を摘出し,それを基につけても良いかと思います. (ftdumpは freetype-utils というパッケージに収録されています)
たとえば,
$ for f in *.tt[cf]; do psname=`ftdump $f | \ grep '^PostScript.*$' | \ sed 's/PostScript name: \([^-]*\)-\([^-]*\)-.*/\1-\2/'`; echo "$f $psname" >> font_psname.list; done
とやればカレントディレクトリに放り込んである *.ttc
,*.ttf
ファイルの ファイル名と PostScript name の Weight のフィールドまでの部分の対応一覧が
というファイルに書き出せます.[2]font_psname.list
文字の太さ (重さ?) .
thin (ultralight)
extralight
light
book (semilight,demilight)
medium
demibold (semibold)
bold
heavy (extrabold)
black (ultrabold)
などが使われます.上から順に下に向かって太く (重く?) なります.
文字の傾き.
Roman (正字体 r)
Italic (イタリック体 i)
Oblique (斜体 o)
Reversed Italic (逆傾きのイタリック体 ri)
Reversed Oblique (逆傾きの斜体 ro)
が使われます.
文字幅. condenced や normal , extended 等
付加情報.普通,ここは空のままが多いです.たまに ja とか sans とかいう付加スタイル情報が書かれます.
ピクセルでのサイズです.単純に 12
とあれば 12
pixel です. TrueType フォントなどのスケーラブルフォントでは,ここを 0
にしておきます.
ポイントサイズとありますが,数字は deci point の値を書きます. TrueType フォントなどのスケーラブルフォントではここも 0
にしておきます.
余談ですが…….伝統的に (謎) 1point (1pt) は 1/72
inch で, pixel と point の関係は,
pixel = point * resolution / 72 point = pixel * 72 / resolution
となっています.[3]
フォントの X 軸方向の解像度.72
,75
,100
が使われることが多いです. TrueType フォントなどのスケーラブルフォントでは通常ここを 0
にしておきます.
フォントの Y 軸方向の解像度.以下 ResolutionX と同様.
文字送り.
p プロポーショナル (可変)
m モノスペース (一定)
c 文字セル
があります.
平均文字幅. TrueType フォントなどのスケーラブルフォントでは通常ここを 0
にしておきます.*.bdf
,*.pcf
などビットマップフォントでは PointSize と同値 [4] か, PointSize の半分 [5] にします.
登録組織,或いは標準名
エンコーディング.上の Registry とペアで単に encoding と称される場合もあります.フォントのキャラクターコード範囲を指定します.
たとえば,jisx0208.1990-0
であれば, JIS X 0208-1990
の範囲の文字となります.[6]
新たに TrueType フォントをシステムに追加するとき /usr/X11R6/lib/X11/fonts
以下,或いは,/usr/share/fonts
などに TrueType
などのディレクトリを作成し,そこへ TrueType フォントをコピーしますが,悲しいことに (謎) それだけでは ソフトウェアからフォントを利用できません.
インストールされたフォントを論理フォント名によって利用できるように,インストールしたディレクトリ内に fonts.dir
というファイルを作成しておくという作業が必要になります.
fonts.dir
とは,そのディレクトリ内にあるフォントファイルと XLFD の対応をリストしたファイルです.
上記は自分に管理者権限がある場合で,自分に管理者権限が無い場合 /usr/X11R6/lib/X11/fonts
などに置けないですので,~/
に任意のディレクトリ,例えば ~/fonts/TrueType
を作成し,そこにフォントファイルと fonts.dir
を置いて利用することになります.
line_count (number) Filename -Foundry-Family-Weight-Slant-SetWidth-AddStyle-PixelSize-PointSize-ResolutionX-ResolutionY-Spacing-AverageWidth-Registry-Encoding
第一行目には記述されているファイル名と XLFD の対応リストの数を記入します.*.bdf
や *.pcf
フォントだと mkfontdir で fonts.dir
が生成できます.
TrueType フォントの場合,
mkttfdir.pl を使う.
もしくは ttmkfdir で fonts.dir
の骨を書き出して加工する.
一からエディタでゴリゴリ書く. (これはカナリ面倒……)
fonts.dir
でっち上げスクリプト などを自分で作っておいてそれを利用する.
などで作らなくてはなりません.
fonts.dir
記述の手助けになるかどうか判りませんが,fonts.dir
& fonts.alias
でっち上げゲートウェイを設置しておきましたので,宜しければお使いください.
4 shnmk12.pcf.gz -shinonome-gothic-medium-r-normal--12-110-75-75-c-120-jisx0208.1990-0 shnmk12b.pcf.gz -shinonome-gothic-bold-r-normal--12-110-75-75-c-120-jisx0208.1990-0 shnmk12i.pcf.gz -shinonome-gothic-medium-i-normal--12-110-75-75-c-120-jisx0208.1990-0 shnmk12bi.pcf.gz -shinonome-gothic-bold-i-normal--12-110-75-75-c-120-jisx0208.1990-0
15 fn=0:bw=0.5:dfhsg3.ttc -dynalab-dfhsgothic-light-r-normal--0-0-0-0-m-0-jisx0208.1983-0 fn=0:bw=0.5:ai=0.1:dfhsg3.ttc -dynalab-dfhsgothic-light-i-normal--0-0-0-0-m-0-jisx0208.1983-0 fn=0:bw=0.5:ai=0.2:dfhsg3.ttc -dynalab-dfhsgothic-light-o-normal--0-0-0-0-m-0-jisx0208.1983-0 fn=0:bw=0.5:ai=-0.1:dfhsg3.ttc -dynalab-dfhsgothic-light-ri-normal--0-0-0-0-m-0-jisx0208.1983-0 fn=0:bw=0.5:ai=-0.2:dfhsg3.ttc -dynalab-dfhsgothic-light-ro-normal--0-0-0-0-m-0-jisx0208.1983-0 fn=1:dfhsg3.ttc -dynalab-dfhsgothicp-light-r-normal--0-0-0-0-p-0-jisx0208.1983-0 fn=1:ai=0.1:dfhsg3.ttc -dynalab-dfhsgothicp-light-i-normal--0-0-0-0-p-0-jisx0208.1983-0 fn=1:ai=0.2:dfhsg3.ttc -dynalab-dfhsgothicp-light-o-normal--0-0-0-0-p-0-jisx0208.1983-0 fn=1:ai=-0.1:dfhsg3.ttc -dynalab-dfhsgothicp-light-ri-normal--0-0-0-0-p-0-jisx0208.1983-0 fn=1:ai=-0.2:dfhsg3.ttc -dynalab-dfhsgothicp-light-ro-normal--0-0-0-0-p-0-jisx0208.1983-0 fn=2:dfhsg3.ttc -dynalab-dfhsgothicg-light-r-normal--0-0-0-0-p-0-jisx0208.1983-0 fn=2:ai=0.1:dfhsg3.ttc -dynalab-dfhsgothicg-light-i-normal--0-0-0-0-p-0-jisx0208.1983-0 fn=2:ai=0.2:dfhsg3.ttc -dynalab-dfhsgothicg-light-o-normal--0-0-0-0-p-0-jisx0208.1983-0 fn=2:ai=-0.1:dfhsg3.ttc -dynalab-dfhsgothicg-light-ri-normal--0-0-0-0-p-0-jisx0208.1983-0 fn=2:ai=-0.2:dfhsg3.ttc -dynalab-dfhsgothicg-light-ro-normal--0-0-0-0-p-0-jisx0208.1983-0
X の TrueType 独自の拡張に TTCap というものがあります.これを用いることにより文字の傾き,ウェイトなどを細かく制御することができます.
Key=Value:FileName -Foundry-Family-Weight-Slant-SetWidth-AddStyle-PixelSize-PointSize-ResolutionX-ResolutionY-Spacing-AverageWidth-Registry-Encoding
TTCap は, Key と Value を '=' (イコール) でつなぎ,その後ろとを ':' コロンで区切った書式で,filename の前へ記述します.
TrueType Collection (*.ttc) フォントファイルで取り出す face 番号.当然,*.ttf では意味を持ちません. 0-2 までの face が含まれていることが多いようです.
例を挙げると,上記 fonts.dir の例 [TrueType font の場合] での dfhsg3.ttc
というフォントファイルには 3 つの face が含まれていて,それぞれ DF 平成ゴシック, DFP 平成ゴシック, DFG 平成ゴシックという名前になっています.そこで例では face0 を dfhsgothic
, face1 を dfhsgothicp
, face2 を dfhsgothicg
という名前づけを行なっています.
True Type Collection フォントは複数の face を取り出せますが,フォントにより face 番号で取り出せる face が異なり,必ずしも face0 が等幅, face1 がプロポーショナルというわけではないようです.
どの face 番号でどのような face が取り出せるかは,ftstrtto というユーティリティで見ることができます.[7]
dfhsg5.ttc
の face0, face1, face2 を解像度 75dpi サイズ 16pt で 見比べる.$
ftstrtto -c 0 -g -u -r 75 16dfhsg5.ttc
\ "`echo 'ABCDEFGHIJKabcdefghijk01234567 ひらがなカタカナ漢字' | \ iconv -f EUC-JP -t UTF-8`" &$
ftstrtto -c 1 -g -u -r 75 16dfhsg5.ttc
\ "`echo 'ABCDEFGHIJKabcdefghijk01234567 ひらがなカタカナ漢字' | \ iconv -f EUC-JP -t UTF-8`" &$
ftstrtto -c 2 -g -u -r 75 16dfhsg5.ttc
\ "`echo 'ABCDEFGHIJKabcdefghijk01234567 ひらがなカタカナ漢字' | \ iconv -f EUC-JP -t UTF-8`" &
フォントメトリック計算法を指定します.与える value は XLFD の Spacing フィールドの文字と同じで,このオプションで XLFD の Spacing フィールドの値をオーバーライドします. このオプションの指定が無い場合は XLFD の Spacing に指定してある Spacing によって計算されます.
このオプションは固定幅フォントのみで有効で,バウンディングボックス幅の倍率を指定します.指定がない場合 1.0 となります. Scale Width オプションも指定されている時は Scale Width 適用後このオプションが適用されます.
フォントに依っては,欠け,重なり等が発生しますので,値は試行錯誤で微調整する必要があります.
文字幅の倍率を指定します.指定がない場合,1.0
となります.
文字の傾きを指定します.良く使われるのは Italic
体に 0.2
,Oblique
体に 0.4
などの値です.フォントデザインに依っては大きな値を指定すると崩れて読めない場合がありますので,フォント毎に試行錯誤で値を微調整することをお奨めします.特に日本語フォントなどはあまり大きな値を指定せず 0.1
,0.2
あたりを指定するのが良いでしょう.
二重打ち効果を使用して疑似的に太字に見せるか否かを指定します. ds=y にすると,擬似的なボールドになります.
ウェイトの揃っていないフォントで bold
を使いたい時などに使います.
vl=y にすると,プロポーショナル,モノスペースに於いてメトリック計算を厳密に行なわないようになります.
embeded bitmap な TrueType フォントの場合,このオプションをつけると埋め込みビットマップフォント表示時に文字の一部が欠たりかすれたりということがあります.最近の PC はパワーありますのでこのオプションは使わない方が良いかもしれません.
フォントをコピーし,そのディレクトリに fonts.dir
を置いたら,次に X にそのディレクトリの場所を教えてあげなくてはなりません.
教えてあげるには xset というコマンドを使います.
/usr/X11R6/lib/X11/fonts/TrueType
を fontpath の末尾に追加する.$
xsetfp+
/usr/X11R6/lib/X11/fonts/TrueType
$
xsetfp
rehash
/usr/X11R6/lib/X11/fonts/TrueType
を fontpath の先頭に追加する.$
xset+fp
/usr/X11R6/lib/X11/fonts/TrueType
$
xsetfp
rehash
/usr/X11R6/lib/X11/fonts/TrueType
を fontpath から削除する.$
xset-fp
/usr/X11R6/lib/X11/fonts/TrueType
$
xsetfp
rehash
$
xsetfp
default
$
xsetfp
rehash
fonts.dir
の記述に問題がある場合,xset 実行時にエラーが出ますので,エラーした場合は fonts.dir
の記述を再確認しましょう.
自分の $HOME
にディレクトリを作成してフォントを置いた場合,たとえば ~/fonts/TrueType
などにした場合は,上記の例の /usr/X11R6/lib/X11/fonts/TrueType
を,~/fonts/TrueType
に置き換えてください.
xset 実行後,追加したフォントが無事使えるのかどうか確認してみましょう.
確認には nexfontsel を使ってみると良いでしょう.
xset で教えてあげても,一度 X を終了すると, X は追加された fontpath を忘れてしまい,再度 startx を行なったときに fontpath をデフォルトに戻してしまいます.毎回毎回 startx の度に xset fp+
.... などとやってられませんので,設定を覚えさせておきます.
自分に管理権限があり,システム全体の設定とする場合は, X の設定ファイル XF86Config-4
(XFree86 4.x の場合) の Files セクションへ FontPath
を追記します.
XF86Config-4
の記述例Section "Files" FontPath "/usr/X11R6/lib/X11/fonts/japanese/:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/intlfonts/:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/ucs/:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/TrueType/" EndSection
管理権限がない,または,自分だけが 追加したフォントを使用する場合は,~/.xinit.d/hook
に
/usr/X11R6/bin/xset +fp$HOME
/fonts/TrueType
/usr/X11R6/bin/xset fp rehash
となどと記述しておきます.[8]
これで次に X を立ち上げた時も追加したフォントを利用できます.
同じファミリーでウェイトが各太さ (重さ?) 品揃えがあるフォントの場合, family を同じにして Weight 別にフォントファイルを指定してやることで, TTCap での疑似ボールド効果よりもより綺麗な表示が期待でき,また,ウェイトを細かく管理できます.
dfhsg3.ttc
-dynalab-dfhsgothic-light-r-normal--0-0-0-0-c-0-jisx0208.1983-0dfhsg5.ttc
-dynalab-dfhsgothic-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0dfhsg7.ttc
-dynalab-dfhsgothic-bold-r-normal--0-0-0-0-c-0-jisx0208.1983-0dfhsg9.ttc
-dynalab-dfhsgothic-extrabold-r-normal--0-0-0-0-c-0-jisx0208.1983-0
ゴシック体などのいわゆるヒゲの無い sans-serif
な書体を使っていて,I
(英大文字のアイ) と l
(英小文字のエル) や O
(英大文字のオー) と 0
(数字のゼロ) の区別がつきにくいなど不都合を感じる時がありますが,本文フォントなどでそれらをパッと見で明確に区別したい場合に,jisx0208.1983-0
の部分と,ascii-0
部分 (或いは iso8859-1
部分) に別々のフォントファイルを指定し,同じファミリー名をつけて使うということが可能です.
foundry や family は,自分が判りやすく,他の既存のフォントと重複しない名前をつけておけば良いでしょう.[9]
andalemo.ttf
-ttmix-monogothic-medium-r-normal--0-0-0-0-c-0-iso8859-1 bw=0.5:kochi-gothic.ttf
-ttmix-monogothic-medium-r-normal--0-0-0-0-c-0-jisx0201.1976-0kochi-gothic.ttf
-ttmix-monogothic-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0
~/.Xresources
へ記述する.
Emacs.Fontset-0:-*-fixed-medium-r-normal--14-*-*-c-*-*-fontset-defaults,\ ascii:-monotype-andale mono-medium-r-*-*-14-*-*-*-m-*-iso8859-1,\ latin-jisx0201:-motoya-cedar1mono-medium-r-*-*-14-*-*-*-m-*-jisx0201.1976-0,\ katakana-jisx0201:-motoya-cedar1mono-medium-r-*-*-14-*-*-*-m-*-jisx0201.1976-0,\ japanese-jisx0208:-motoya-cedar1mono-medium-r-*-*-14-*-*-*-m-*-jisx0208.1990-0,\ japanese-jisx0212:-motoya-cedar1mono-medium-r-*-*-14-*-*-*-m-*-jisx0212.1990-0 Emacs.Font: fontset-defaults
変更後,以下のコマンドを実行し反映させる.
$
xrdb-merge
~/.Xresources
~/.Xresources
へ記述する.
xterm*fontSet: -misc-fixed-medium-r-normal-*-14-*,-misc-fixed-medium-r-normal-*-14-*-iso8859-1 xterm*boldfontset: -misc-fixed-bold-r-normal-*-14-*,-misc-fixed-bold-r-normal-*-14-*-iso8859-1
変更後,以下のコマンドを実行し反映させる.
$
xrdb-merge
~/.Xresources
gtk+ 1.2 を使うソフト[10] のメニューなど User Interface に関するフォントは, ~/.gtkrc
に以下の様に記述する.
style "gtk-default-ja" { fontset = "-monotype-andale mono-medium-r-*-*-12-*-*-*-m-*-iso8859-1,\ -motoya-cedar1mono-medium-r-*-*-12-*-*-*-m-*-jisx0201.1976-0,\ -motoya-cedar1mono-medium-r-*-*-12-*-*-*-m-*-jisx0208.1983-0,\ -motoya-cedar1mono-medium-r-*-*-12-*-*-*-m-*-jisx0208.1990-0,\ -motoya-cedar1mono-medium-r-*-*-12-*-*-*-m-*-jisx0212.1990-0" } widget "*Text" style "gtk-default-ja"
重要なのは fontconfig の設定がうまくいっているかどうかです.
fontconfig のコンフィグファイル /etc/fonts/local.conf
[11]
で TrueType フォントがインストールしてあるディレクトリが指定してあるかどうか,また, fc-list で,インストールしてある TrueTypeフォントがリストされるか確認しましょう.リストは UTF-8 で吐き出されるので,フォント名に因っては化けます.
$ fc-list | iconv -f UTF-8 -t EUC-JP
| sort
若しくは
$ fc-list | nkf -e
| sort
化けて見辛い場合は,上記のように iconv や nkf に pipe すると良いでしょう.
/etc/fonts/local.conf
はシステム全般での設定ファイル,~/.fonts.conf
は各ユーザ個別の設定ファイルです.
/etc/fonts/fonts.conf
,/etc/fonts/local.conf
,~/fonts.conf
, は XML[12]で記述され,DTD[13]もfonts.dtd
というファイル名で /etc/fonts
ディレクトリ内にありますから編集は簡単です. emacs の psgml-modeで編集すると楽に編集できるでしょう.
fontconfig でフォントをインストールしたディレクトリが走査されるように指定するには,/etc/fonts/local.conf
,或いは~/.fonts.conf
へ以下の様に<dir>〜</dir>タグでフォントのあるディレクトリを囲んで追記します.指定されたディレクトリは再帰的に走査され,フォントのリストが作成されます.
<dir>/usr/X11R6/lib/X11/fonts</dir> <dir>/usr/share/fonts</dir> <dir>~/.fonts</dir>
フォントサイズによって,また,フォントによってはヒンティングを強く効かせると読み辛くなったり,逆に汚くなったりすることがあるが,それは autohint と hinting によって制御できる.
以下の例では 16pixelより小さいサイズでは autohintを無効にし,16pixel以上では autohintoを有効にしている.
<match target="font"> <test name="pixelsize" compare="less"> <double>16</double> </test> <edit name="hinting" mode="assign"> <bool>true</bool> </edit> <edit name="hintstyle" mode="assign"> <const>hintslight</const> </edit> <edit name="autohint" mode="assign"> <bool>false</bool> </edit> </match> <match target="font"> <test name="pixelsize" compare="more_eq"> <double>16</double> </test> <edit name="hinting" mode="assign"> <bool>true</bool> </edit> <edit name="hintstyle" mode="assign"> <const>hintfull</const> </edit> <edit name="autohint" mode="assign"> <bool>true</bool> </edit> </match>
ビルド時に ./configure のオプションで --enable-xft
を指定し Xft2 + fontconfig サポートが有効になっている Mozilla は,メニューの Edit → Preference のフォント設定でフォントを選択するだけです.fontconfigが有効なMozillaでは以下のようなフォントリストが表示されます.
User Interface 部分のフォント設定は,~/.mozilla/$USER/XXXXXXXX.slt/chrome/userChrome.css に記述します.fc-list で表示されるフォント名で指定しないとならない点に注意が必要です.
以下は私が行なっている設定例です.
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* set default name space to XUL */ * { font-size: 12px; font-family: "Anito-L-Mono", monospace !important; }
この文書の著作権は 山下繁行 にあります.この文書の配布ライセンスは,利用許諾のオプション A. B. を除外したオープン・パブリケーション利用許諾契約書 (OPL - Open Publication License) に従います.
OPL についての詳細は,http://www.opencontent.org/openpub/ を参照してください. また,八田真行氏による OPL ドラフト v1.0 日本語訳がhttp://www.opensource.jp/openpub/にて参照可能です.
[1] X Logical Font Description
[2] ただし,フォントファイルに PostScript name のデータがある場合に限ります.
[3] resolution は デバイスの 解像度 dpi
[4] 日本語マルチバイト文字などのいわゆる全角文字の場合
[5] ASCII , JIS X 0201 カナ などいわゆる半角文字の場合
[6] 間違っていることを曰ってるかも知れませんので,お気づきの方はツッコミいれてください.;-p
[7] ftstrtto は freetype-utils というパッケージに入っています
[8] ただし,これはxinitをフックしているmomonga-linuxだけの場合です.hook には実行パーミッションを与えておくこと.
[9] 同じことを fonts.alias
を使って実現することも可能です.
[10] gimp 1.2 や sylpheed など
[11] 使用している OS やそのディストリビューションによって若干場所が異なるか,若しくはfontconfigのバージョンによっては /etc/fonts/fonts.confしか無い場合があるかもしれません
[12] Extensible Markup Language
[13] Document Type Definition