NTEmacs のフォント設定については、(私も含めて)情報の出し方が悪かったのか、偏った情報が、広まっています。
ここで、整理しておきたいと思います。
尚、このページの2章以下に紹介した設定は、fixed-width-fontset パッケージに記述してあり、バイナリ配布版では、設定済になっています。
http://sourceforge.jp/projects/macemacsjp/files/ から、fixed-width-fontset.1.2.0 をダウンロードして、carbon-font.el と、fixed-width-fontset.el を、ロードパスの通った所に置いてください。
バイナリパッケージをお使いの方は、Emacs/22.1/site-lisp/fixed-width-fontset に有る、上記二つのファイルを入れ替えてください。
その上で、下記のようにすればOKです。
(if (eq window-system 'w32) (require 'ntemacs-font)) (fixed-width-set-fontset "msgothic" 14)
"msgothic" は、フォントの種類を表しますが、使えるのは、他に下記2種類です。
"msmincho" "lucida"
14はサイズを表しますが、指定できるのは、下記10種類です。
7, 8, 9, 10, 12, 14, 16, 18, 20, 24
fixed-width-fontset パッケージを使った場合、此処から先は必要有りません。
ご自分でビルドされている方は、この章はとばして、次に進んでください。
このページで紹介する方法を試される場合は、配布しているバイナリのフォント設定を、一旦 GNUのデフォルトに戻す必用が有ります。
幾つか方法を紹介しますが、どれか一つ実行すれば結構です。
シフト+マウスクリックで、default を選ぶ。
簡単だけど、立ち上げる度に実行する必用が有ります。
この s式 を、*scrach* で実行(C-j)するか、
(setcdr (assoc 'font default-frame-alist) "fontset-default") (set-frame-font "fontset-default")~/.emacs に次の様に書きます。
(setcdr (assoc 'font default-frame-alist) "fontset-default")
此れがお勧めかな。
今見ているフレームだけデフォルトにしてみるのなら、此れだけでもよいかも。
(set-frame-font "fontset-default")
emacs/22.1/site-lisp/site-start.el の、31行目
`(font . ,fontname)を、コメントアウトする。
この場合は、シフト+マウスクリック で、予め設定しているフォントセットも選ぶことが出来ます。
emacs/22.1/site-lisp/site-start.el を、emacs/22.1/site-lisp/site-start.el.orig 等とリネームして、NTEmacs を立ち上げ直す。
この場合、cygwin-mount.el & w32-symlinks.el の設定も効かなくなるので、ご注意下さい。
次のようにすると、一時的に、配布バイナリの設定を読み込まなくすることが出来ます。
この場合も、cygwin-mount.el & w32-symlinks.el の設定も効かなくなるので、ご注意下さい。
フォントの設定方法には大きく以下の二つの方法が有ります。
2番目の方法だと、フレーム毎に異なるフォントセットを割り付けることが出来ます。
この章では、最初の方法を説明します。
先ず、英文字フォント(ascii)を選びます。この時、使えるフォントは、
(insert (prin1-to-string (x-list-fonts "*iso8859-1*")))を、評価して得られるフォントです。
"MS ゴシック" 大きさ 12point を選んだ場合、次のようにします。
(set-face-attribute 'default nil :family "MS ゴシック" :height 120)
次に、日本語用のフォントを選びます。大きさは、ascii と同じになり、指定できません。
もし、大きさを変える必用が有れば、後で調整します。
(set-fontset-font "fontset-default" 'japanese-jisx0208 '("MS ゴシック*" . "jisx0208-sjis")) (set-fontset-font "fontset-default" 'katakana-jisx0201 '("MS ゴシック*" . "jisx0201-katakana"))
どうです、とっても、簡単でしょう?
次に、フォントセットを定義してから、フレームに設定する手順を説明します。
この方法は、"-outline-MS ゴシック-normal-r-normal-normal-12-*-*-*-*-*-iso8859-1" と言うような、XLFD表現による、フォント指定が必要で、ちょっと間違うと嵌まってしまいます。ここだけは要注意です。
この時指定できるフォントは、前章と同じで、iso8859-1 のフォントです。
"MS ゴシック" 大きさ 12point を選んで、フォントセット名を、'myfont' にした場合、次のようにします。
(create-fontset-from-ascii-font "-outline-MS ゴシック-normal-r-normal-normal-12-*-*-*-*-*-iso8859-1" nil "myfont")この時、フォントのファミリー名(MS ゴシック)の前後の、outline や、normal は、x-list-font を評価して得られる値と合わせてください。
続けて、同じ名前でサイズ違いのフォントセットも定義できます。例えば、
(create-fontset-from-ascii-font "-outline-MS ゴシック-normal-r-normal-normal-14-*-*-*-*-*-iso8859-1" nil "myfont")
この場合、サイズ指定無で 'myfont' が呼ばれると、最初に定義されたサイズ(この場合は 12point)が、選ばれます。
次に、日本語用のフォントを選びます。大きさは、ascii と同じになり、指定できません。
もし、大きさを変える必用が有れば、後で調整します。
基本的に、フォントセット名以外は、前章でデフォルトのフォント設定を書き換えたときと同じです。
(set-fontset-font "fontset-myfont" 'japanese-jisx0208 '("MS ゴシック*" . "jisx0208-sjis")) (set-fontset-font "fontset-myfont" 'katakana-jisx0201 '("MS ゴシック*" . "jisx0201-katakana"))
'default-frame-alist に、font のエントリーを作れば良いので、一番簡単には、~/.emacs に次の様に記述します。
(add-to-list 'default-frame-alist '(font . "fontset-myfont"))
同じ名前で複数サイズのフォントセットを定義している場合は、サイズを指定する必用が有ります。
(add-to-list 'default-frame-alist '(font . "-*-*-medium-r-normal--14-*-*-*-*-*-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")
この章の設定は、バイナリ配布の NTEmacs では、既に設定してあります。
Windows では、TrueType フォントは、イタリックやボールド文字を、元のフォントから合成で作り出すことができます。デフォルトでは無効になっているので、此れを有効にします。
(setq w32-enable-synthesized-fonts t)
GNU デフォルトの設定だと、w32-use-w32-font-dialog は、non-nil になっていて、シフト+マウスクリックで、windows のフォント選択ダイアログが出ます。これは、デフォルトの英文字に使うフォントを選択する事を意味します。
(set-face-attribute 'default nil :family "MS ゴシック" :height 120)と同じです。
これだと、前章で折角作ったフォントセットを試せないので、
(setq w32-use-w32-font-dialog nil)とします。
デフォルトのフォント設定を直接書き換えている場合は、特に必要有りません。
Ascii と、日本語フォントを、1:2 の幅にしたいと思っても、組合せによっては、上手くいきません。又、文字飾りを有効にする設定をしていると、ボールドも幅が変わります。そこで、フォントの大きさを微調整します。
フォントの大きさを微調整するには、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 '(".*Lucida Console.*bold.*" . 0.9))
又、一度、設定した値を変えたいときは、
(setcdr (assoc ".*Lucida Console.*bold.*" face-font-rescale-alist) 0.8)みたいに、やります。
"MS ゴシック" を、英文字に設定していて、文字飾りを有効にするにしていると、ボールドの幅が大きくなります。これを小さくしてみましょう。
(add-to-list 'face-font-rescale-alist '(".*MS.*bold.*iso8859.*" . 0.9))てやりたくなりますが、上手くいかないときが有ります。これは、emacs の、フォントの正規表現が、マルチバイト文字 "MS" を上手く扱えないために、".*MS.*bold.*iso8859.*" ではなく、".*bold.*iso8859.*" と見做してしまうからです。
これを救うために、正規表現の部分を、emacs 内部表現に変換します。
(add-to-list 'face-font-rescale-alist `(,(encode-coding-string ".*MS.*bold.*iso8859.*" 'emacs-mule) . 0.9))
そう云う時は、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)))
HELLO で、各国語を表示する為には、各国語のフォントをフォントセット毎に指定していきます。
此処では、default を指定していますが、myfont 等、適当に読み替えてください。
(set-fontset-font "fontset-default" 'chinese-gb2312 '("Arial Unicode MS*" . "gb2312")) (set-fontset-font "fontset-default" 'chinese-big5-1 '("Arial Unicode MS*" . "big5"))
(set-fontset-font "fontset-default" 'korean-ksc5601 '("Arial Unicode MS*" . "ksc5601.1987"))
(set-fontset-font "fontset-default" 'thai-tis620 '("Arial Unicode MS*" . "tis620"))
(set-fontset-font "fontset-default" 'mule-unicode-0100-24ff '("Arial Unicode MS*" . "iso10646-1"))
(set-fontset-font "fontset-default" 'latin-iso8859-3 '("Arial Unicode MS*" . "iso10646-1"))
(set-fontset-font "fontset-default" 'cyrillic-iso8859-5 '("Arial Unicode MS*" . "iso10646-1"))
(set-fontset-font "fontset-default" 'greek-iso8859-7 '("Arial Unicode MS*" . "iso10646-1"))
(set-fontset-font "fontset-default" 'vietnamese-viscii-lower '("Arial Unicode MS*" . "iso10646-1")) (set-fontset-font "fontset-default" 'vietnamese-viscii-upper '("Arial Unicode MS*" . "iso10646-1"))
(set-fontset-font "fontset-default" 'tibetan '("Arial Unicode MS*" . "iso10646-1"))
(set-fontset-font "fontset-default" 'lao '("Arial Unicode MS*" . "iso10646-1"))
(set-fontset-font "fontset-default" 'ipa '("Arial Unicode MS*" . "iso10646-1"))
(set-fontset-font "fontset-default" 'arabic-1-column '("Arial Unicode MS*" . "*-#178")) (set-fontset-font "fontset-default" 'arabic-2-column '("Arial Unicode MS*" . "*-#178"))
(set-fontset-font "fontset-default" 'ethiopic '("Ethiopia Jiret" . "iso10646-1"))
(set-fontset-font "fontset-default" `(,(decode-char 'ucs #x2800) . ,(decode-char 'ucs #x28ff)) '("Braille*" . "iso10646-1")) ; Braille Patterns
(set-face-attribute 'default nil :family "MS ゴシック" :height 120) (set-fontset-font "fontset-default" 'japanese-jisx0208 '("MS ゴシック*" . "jisx0208-sjis")) (set-fontset-font "fontset-default" 'katakana-jisx0201 '("MS ゴシック*" . "jisx0201-katakana")) (setq w32-enable-synthesized-fonts t) (add-to-list 'face-font-rescale-alist `(,(encode-coding-string ".*MS.*bold.*iso8859.*" 'emacs-mule) . 0.9)) (add-to-list 'face-font-rescale-alist `(,(encode-coding-string ".*MS.*bold.*jisx02.*" 'emacs-mule) . 0.95))
Intel Mac で Windows を動かしていると、ヒラギノも使えます。Vista 用の Consolas と組み合わせると、一寸良い感じ。
(setcdr (assoc 'font default-frame-alist) "fontset-default") (set-frame-font "fontset-default") (set-face-attribute 'default nil :family "Consolas" :height 95) (set-fontset-font "fontset-default" 'japanese-jisx0208 '("ヒラギノ丸ゴ Pro W4*" . "jisx0208-sjis")) (set-fontset-font "fontset-default" 'katakana-jisx0201 '("ヒラギノ丸ゴ Pro W4*" . "jisx0201-katakana")) (add-to-list 'face-font-rescale-alist `(,(encode-coding-string ".*ヒラギノ丸ゴ Pro W4.*" 'emacs-mule) . 1.1))
create-fontset-from-fontset-spec を使った設定が良く紹介されています。私も、紹介していたことが有ります。
この関数を使うと、フォントの大きさを恣意的に指定することが出来るので、等幅設定をするのに便利でした。ですが、font-face が反映されなくなるのが最大の欠点です。折角、emacs22 を使っているのですから、font-face も使いたいものです。
如何にも、デフォルトのフォントを変えてくれる関数の様な名前なのですが、実態は、set-frame-font のエイリアスで、今居るフレームのフォントを変えてくれるだけです。誤解の元なので、使わないようにしましょう。