Emacs のフォント設定については、(私も含めて)情報の出し方が悪かったのか、偏った情報が、広まっています。且つ、何だか難しい様に思われています。でも、そんなことはないです。
なので、ここで、整理しておきたいと思います。
尚、このページの2章以下に紹介した設定は、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
fixed-width-fontset パッケージを使った場合、此処から先は必要有りません。
フォントの設定方法には大きく以下の二つの方法が有ります。
2番目の方法だと、フレーム毎に異なるフォントセットを割り付けることが出来ます。
この章では、最初の方法を説明します。
~/.emacs に次の様に書きます。
(add-to-list 'default-frame-alist '(font . "fontset-default"))
もし、設定を上書きするなら、次の様にします。
(setcdr (assoc 'font default-frame-alist) "fontset-default")次のフレームから反映されます。
今見ているフレームだけデフォルトにしてみるのなら、此れだけでもよいかも。
(set-frame-font "fontset-default")
先ず、英文字フォント(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)
次に、日本語用のフォントを選びます。大きさは、ascii と同じになり、指定できません。
もし、大きさを変える必用が有れば、後で調整します。
(set-fontset-font "fontset-default" 'japanese-jisx0208 '("ヒラギノ丸ゴ pro w4*" . "jisx0208.*")) (set-fontset-font "fontset-default" 'katakana-jisx0201 '("ヒラギノ丸ゴ pro w4*" . "jisx0201.*"))
どうです、とっても、簡単でしょう?
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-*"))
次に、フォントセットを定義してから、フレームに設定する手順を説明します。
この方法は、"-apple-monaco-medium-r-normal--0-0-75-75-m-0-mac-roman" と言うような、XLFD表現による、フォント指定が必要で、ちょっと間違うと嵌まってしまいます。ここだけは要注意です。
この時指定できるフォントは、前章と同じで、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")
次に、日本語用のフォントを選びます。大きさは、ascii と同じになり、指定できません。
もし、大きさを変える必用が有れば、後で調整します。
基本的に、フォントセット名以外は、前章でデフォルトのフォント設定を書き換えたときと同じです。
(set-fontset-font "fontset-myfont" 'japanese-jisx0208 '("ヒラギノ丸ゴ pro w4*" . "jisx0208.*")) (set-fontset-font "fontset-myfont" 'katakana-jisx0201 '("ヒラギノ丸ゴ pro w4*" . "jisx0201.*"))
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-*"))
'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")次に作製されるフレームから適用されます。
'initial-frame-alist に、font のエントリーを作れば良いので、一番簡単には、~/.emacs に次の様に記述します。
(add-to-list 'initial-frame-alist '(font . "fontset-myfont"))
(set-frame-font "fontset-myfont")
Ascii と、日本語フォントを、1:2 の幅にしたいと思っても、組合せによっては、上手くいきません。又、ascii に Quick Draw Font を使っていると、ボールドも幅が変わります。そこで、フォントの大きさを微調整します。
フォントの大きさを微調整するには、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)みたいに、やります。
"ヒラギノ丸ゴ 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))
そう云う時は、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)))
大きさは、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))
create-fontset-from-fontset-spec を使った設定が良く紹介されています。私も、紹介していたことが有ります。
この関数を使うと、フォントの大きさを恣意的に指定することが出来るので、等幅設定をするのに便利でした。ですが、font-face が反映されなくなるのが最大の欠点です。折角、emacs22 を使っているのですから、font-face も使いたいものです。
如何にも、デフォルトのフォントを変えてくれる関数の様な名前なのですが、実態は、set-frame-font のエイリアスで、今居るフレームのフォントを変えてくれるだけです。誤解の元なので、使わないようにしましょう。