Carbon版 Emacs 22.1 のフォント設定

Emacs のフォント設定については、(私も含めて)情報の出し方が悪かったのか、偏った情報が、広まっています。且つ、何だか難しい様に思われています。でも、そんなことはないです。

なので、ここで、整理しておきたいと思います。

尚、このページの2章以下に紹介した設定は、fixed-width-fontset パッケージに記述してあります。


このページの目次
  1. fixed-width-fontset パッケージを使う
  2. default のフォントセットを変更する
  3. フォントセットを予め定義する
  4. フォントの大きさを調整する
  5. 簡単な例
  6. 気をつけたい設定

1. fixed-width-fontset パッケージを使う

http://sourceforge.jp/projects/macemacsjp/files/ から、fixed-width-fontset.1.2.0 をダウンロードして、carbon-font.el と、fixed-width-fontset.el を、ロードパスの通った所に置いてください。

銭谷版CarbonEmacs をお使いの方は、Emacs.app/Contents/Resources/site-lisp/mac に有る、上記二つのファイルを入れ替えてください。

その上で、下記のようにすればOKです。

(if (eq window-system 'mac) (require 'carbon-font))
(fixed-width-set-fontset "hiramaru" 14)

"hiramaru" は、フォントの種類を表しますが、使えるのは、他に下記5種類です。

"hirakaku_w3" "hirakaku_w6" "hirakaku_w8" "hiramin_w3" "hiramin_w6" "osaka"

14はサイズを表しますが、指定できるのは、下記10種類です。

7, 8, 9, 10, 12, 14, 16, 18, 20, 24


2. default のフォントセットを変更する

fixed-width-fontset パッケージを使った場合、此処から先は必要有りません。


フォントの設定方法には大きく以下の二つの方法が有ります。

  1. default のフォント設定を直接書き換える
  2. 予め、幾つかのフォントセットを設定しておいて、そのフォントセットをフレームに設定する

2番目の方法だと、フレーム毎に異なるフォントセットを割り付けることが出来ます。

この章では、最初の方法を説明します。


2.1. フォント設定で default を選ぶ

~/.emacs に次の様に書きます。

(add-to-list 'default-frame-alist '(font . "fontset-default"))

もし、設定を上書きするなら、次の様にします。

(setcdr (assoc 'font default-frame-alist) "fontset-default")
次のフレームから反映されます。

今見ているフレームだけデフォルトにしてみるのなら、此れだけでもよいかも。

(set-frame-font "fontset-default")


2.2. 英文字フォントを選ぶ

先ず、英文字フォント(ascii)を選びます。この時、使えるフォントは、

(insert (prin1-to-string (x-list-fonts "*iso10646*")))
又は、
(insert (prin1-to-string (x-list-fonts "*mac-roman*")))
を、評価して得られるフォントです。

"monaco" 大きさ 14point を選んだ場合、次のようにします。

(set-face-attribute 'default nil
                    :family "monaco"
                    :height 140)

2.3. 日本語フォントを選ぶ (Quick Draw Font)

次に、日本語用のフォントを選びます。大きさは、ascii と同じになり、指定できません。
もし、大きさを変える必用が有れば、後で調整します。

(set-fontset-font "fontset-default"
                  'japanese-jisx0208
                  '("ヒラギノ丸ゴ pro w4*" . "jisx0208.*"))

(set-fontset-font "fontset-default"
                  'katakana-jisx0201
                  '("ヒラギノ丸ゴ pro w4*" . "jisx0201.*"))

どうです、とっても、簡単でしょう?


2.4. 日本語フォントを選ぶ (ATSUI Font)

ATSUI Font も選ぶ事が出来ます。ATSUI Font は、Unicode で表されており、ヒラギノの全てのグリフを表示できる筈です。圧倒的に表示できる文字数が増えます。でも、行間が拡がりすぎて、ちょっと評判悪いです。

(set-fontset-font "fontset-default"
                  'japanese-jisx0208
                  '("hiragino maru gothic pro" . "iso10646-*"))

(set-fontset-font "fontset-default"
                  'katakana-jisx0201
                  '("hiragino maru gothic pro" . "iso10646-*"))


3. フォントセットを予め定義する

次に、フォントセットを定義してから、フレームに設定する手順を説明します。

この方法は、"-apple-monaco-medium-r-normal--0-0-75-75-m-0-mac-roman" と言うような、XLFD表現による、フォント指定が必要で、ちょっと間違うと嵌まってしまいます。ここだけは要注意です。


3.1. 英文字フォントを選ぶ

この時指定できるフォントは、前章と同じで、mac-roman 又は iso10646-1 のフォントです。

"monaco" 大きさ 14point を選んで、フォントセット名を、'myfont' にした場合、次のようにします。此の場合、ATSUI Font が使われます。

(create-fontset-from-mac-roman-font
 "-apple-monaco-medium-r-normal--14-*-*-*-*-*-iso10646-1"
 nil "myfont")

続けて、同じ名前でサイズ違いのフォントセットも定義できます。例えば、

(create-fontset-from-mac-roman-font
 "-apple-monaco-medium-r-normal--16-*-*-*-*-*-iso10646-1"
 nil "myfont")

この場合、サイズ指定無で 'myfont' が呼ばれると、最初に定義されたサイズ(この場合は 14point)が、選ばれます。

次のようにすると、Quick Draw Font が使われますが、Bold の幅が揃わないので、ちょっと見苦しいです。

(create-fontset-from-mac-roman-font
 "-apple-monaco-medium-r-normal--14-*-*-*-*-*-mac-roman"
 nil "myfont")


3.2. 日本語フォントを選ぶ (Quick Draw Font)

次に、日本語用のフォントを選びます。大きさは、ascii と同じになり、指定できません。
もし、大きさを変える必用が有れば、後で調整します。

基本的に、フォントセット名以外は、前章でデフォルトのフォント設定を書き換えたときと同じです。

(set-fontset-font "fontset-myfont"
                  'japanese-jisx0208
                  '("ヒラギノ丸ゴ pro w4*" . "jisx0208.*"))

(set-fontset-font "fontset-myfont"
                  'katakana-jisx0201
                  '("ヒラギノ丸ゴ pro w4*" . "jisx0201.*"))

3.3. 日本語フォントを選ぶ (ATSUI Font)

ATSUI Font も選ぶ事が出来ます。ATSUI Font は、Unicode で表されており、ヒラギノの全てのグリフを表示できる筈です。圧倒的に表示できる文字数が増えます。でも、行間が拡がりすぎて、ちょっと評判悪いです。

(set-fontset-font "fontset-myfont"
                  'japanese-jisx0208
                  '("hiragino maru gothic pro" . "iso10646-*"))

(set-fontset-font "fontset-myfont"
                  'katakana-jisx0201
                  '("hiragino maru gothic pro" . "iso10646-*"))


3.4. 定義したフォントセットをフレームに設定する

3.4.1. 全てのフレームに適用する

'default-frame-alist に、font のエントリーを作れば良いので、一番簡単には、~/.emacs に次の様に記述します。

(add-to-list 'default-frame-alist '(font . "fontset-myfont"))

同じ名前で複数サイズのフォントセットを定義している場合は、サイズを指定する必用が有ります。

(add-to-list 'default-frame-alist
             '(font . "-*-*-medium-r-normal--16-*-*-*-*-*-fontset-myfont"))

既に、defalut-frame-alist に、font エントリーがある場合は、次のようにして書き換えます。

(setcdr (assoc 'font default-frame-alist) "fontset-myfont")
次に作製されるフレームから適用されます。


3.4.2. 最初のフレームだけに適用する

'initial-frame-alist に、font のエントリーを作れば良いので、一番簡単には、~/.emacs に次の様に記述します。

(add-to-list 'initial-frame-alist '(font . "fontset-myfont"))

3.4.3. 今アクティブなフレームのみに適用する

(set-frame-font "fontset-myfont")

4. フォントの大きさを調整する

Ascii と、日本語フォントを、1:2 の幅にしたいと思っても、組合せによっては、上手くいきません。又、ascii に Quick Draw Font を使っていると、ボールドも幅が変わります。そこで、フォントの大きさを微調整します。


4.1. 'face-font-rescale-alist を使う

フォントの大きさを微調整するには、face-font-rescale-alist を使います。DOC には下のように書いてあります。

face-font-rescale-alist is a variable defined in `C source code'.
Its value is (("-cdac$" . 1.3))

Documentation:
Alist of fonts vs the rescaling factors.
Each element is a cons (FONT-NAME-PATTERN . RESCALE-RATIO), where
FONT-NAME-PATTERN is a regular expression matching a font name, and
RESCALE-RATIO is a floating point number to specify how much larger
(or smaller) font we should use.  For instance, if a face requests
a font of 10 point, we actually use a font of 10 * RESCALE-RATIO point.

早い話が、"正規表現で示されたXLFDのフォントパターン"と"倍率"のコンスセルを、list として設定すれば良い訳です。

例えば、

(add-to-list 'face-font-rescale-alist '(".*osaka-bold.*" . 1.2))

又、一度、設定した値を変えたいときは、

(setcdr (assoc ".*osaka-bold.*" face-font-rescale-alist) 1.4)
みたいに、やります。


4.2. フォント名が、マルチバイト文字を含む時

"ヒラギノ丸ゴ pro w4" を、日本語に設定していると、英文字との幅が 1:2 になりません。此れを、補整してみましょう。

(add-to-list 'face-font-rescale-alist '(".*ヒラギノ丸ゴ pro w4.*" . 1.4))
てやりたくなりますが、上手くいかないときが有ります。これは、emacs の、フォントの正規表現が、マルチバイト文字 "ヒラギノ丸ゴ" を上手く扱えないために、".*ヒラギノ丸ゴ pro w4.*" ではなく、".*pro w4.*" と見做してしまうからです。

これを救うために、正規表現の部分を、emacs 内部表現に変換します。

(add-to-list 'face-font-rescale-alist
             `(,(encode-coding-string ".*ヒラギノ丸ゴ pro w4.*" 'emacs-mule) . 1.2))


4.3. フレーム毎に、リスケールのパラメータを変えたい時

そう云う時は、face-font-rescale-alist を、そのフレーム固有のパラメータに束縛しておいてから、設定を変えます。

フレームに束縛するには次の様にします。

(modify-frame-parameters nil
                         `((face-font-rescale-alist . ,face-font-rescale-alist)))
(make-variable-frame-local 'face-font-rescale-alist)

上のようにしておいてから、次のように設定すると、このフレームでは、文字のリスケールは効かなくなります。

(setq face-font-rescale-alist '(("-cdac$" . 1.3)))


5. 簡単な例

5.1. 英文字に "osaka"、日本語に "ヒラギノ丸ゴ pro w4" を使う

大きさは、14point にしてみました。此れだけです。

(add-to-list 'default-frame-alist '(font . "fontset-default"))
;; (set-frame-font "fontset-default")

(set-face-attribute 'default nil
                    :family "monaco"
                    :height 140)

(set-fontset-font "fontset-default"
                  'japanese-jisx0208
                  '("ヒラギノ丸ゴ pro w4*" . "jisx0208.*"))

(set-fontset-font "fontset-default"
                  'katakana-jisx0201
                  '("ヒラギノ丸ゴ pro w4*" . "jisx0201.*"))

(add-to-list 'face-font-rescale-alist
             `(,(encode-coding-string ".*ヒラギノ丸ゴ pro w4.*" 'emacs-mule) . 1.2))


6. 気をつけたい設定

6.1. create-fontset-from-fontset-spec

create-fontset-from-fontset-spec を使った設定が良く紹介されています。私も、紹介していたことが有ります。

この関数を使うと、フォントの大きさを恣意的に指定することが出来るので、等幅設定をするのに便利でした。ですが、font-face が反映されなくなるのが最大の欠点です。折角、emacs22 を使っているのですから、font-face も使いたいものです。

6.2. set-default-font

如何にも、デフォルトのフォントを変えてくれる関数の様な名前なのですが、実態は、set-frame-font のエイリアスで、今居るフレームのフォントを変えてくれるだけです。誤解の元なので、使わないようにしましょう。