NTEmacs 22.1 のフォント設定

NTEmacs のフォント設定については、(私も含めて)情報の出し方が悪かったのか、偏った情報が、広まっています。

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

尚、このページの2章以下に紹介した設定は、fixed-width-fontset パッケージに記述してあり、バイナリ配布版では、設定済になっています。


関連ページ
このページの目次
  1. fixed-width-fontset パッケージを使う
  2. GNU デフォルトに戻す
  3. default のフォントセットを変更する
  4. フォントセットを予め作成する
  5. NTEmacs フォント固有の設定
  6. フォントの大きさを調整する
  7. 各国語フォントを選ぶ
  8. 簡単な例
  9. 気をつけたい設定

1. 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


2. GNU デフォルトに戻す

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


ご自分でビルドされている方は、この章はとばして、次に進んでください。

このページで紹介する方法を試される場合は、配布しているバイナリのフォント設定を、一旦 GNUのデフォルトに戻す必用が有ります。

幾つか方法を紹介しますが、どれか一つ実行すれば結構です。


2.1. フォント設定で default を選び直す(1)

シフト+マウスクリックで、default を選ぶ。

簡単だけど、立ち上げる度に実行する必用が有ります。


2.2. フォント設定で default を選び直す(2)

この 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")


2.3. 設定ファイルを書き換える

emacs/22.1/site-lisp/site-start.el の、31行目

 	  `(font . ,fontname)
を、コメントアウトする。

この場合は、シフト+マウスクリック で、予め設定しているフォントセットも選ぶことが出来ます。


2.4. 設定ファイルをリネームする

emacs/22.1/site-lisp/site-start.el を、emacs/22.1/site-lisp/site-start.el.orig 等とリネームして、NTEmacs を立ち上げ直す。

この場合、cygwin-mount.el & w32-symlinks.el の設定も効かなくなるので、ご注意下さい。


2.5. 設定ファイルを読み込まない

次のようにすると、一時的に、配布バイナリの設定を読み込まなくすることが出来ます。

この場合も、cygwin-mount.el & w32-symlinks.el の設定も効かなくなるので、ご注意下さい。


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

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

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

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

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


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

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

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

"MS ゴシック" 大きさ 12point を選んだ場合、次のようにします。

(set-face-attribute 'default nil
                    :family "MS ゴシック"
                    :height 120)

3.2. 日本語フォントを選ぶ

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

(set-fontset-font "fontset-default"
                  'japanese-jisx0208
                  '("MS ゴシック*" . "jisx0208-sjis"))

(set-fontset-font "fontset-default"
                  'katakana-jisx0201
                  '("MS ゴシック*" . "jisx0201-katakana"))

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


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

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

この方法は、"-outline-MS ゴシック-normal-r-normal-normal-12-*-*-*-*-*-iso8859-1" と言うような、XLFD表現による、フォント指定が必要で、ちょっと間違うと嵌まってしまいます。ここだけは要注意です。


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

この時指定できるフォントは、前章と同じで、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)が、選ばれます。


4.2. 日本語フォントを選ぶ

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

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

(set-fontset-font "fontset-myfont"
                  'japanese-jisx0208
                  '("MS ゴシック*" . "jisx0208-sjis"))

(set-fontset-font "fontset-myfont"
                  'katakana-jisx0201
                  '("MS ゴシック*" . "jisx0201-katakana"))

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

4.3.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--14-*-*-*-*-*-fontset-myfont"))

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

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


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

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

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

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

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

5. NTEmacs フォント固有の設定

この章の設定は、バイナリ配布の NTEmacs では、既に設定してあります。


5.1. 文字飾りを有効にする

Windows では、TrueType フォントは、イタリックやボールド文字を、元のフォントから合成で作り出すことができます。デフォルトでは無効になっているので、此れを有効にします。

(setq w32-enable-synthesized-fonts t)

5.2. フォント選択ダイアログ

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)
とします。

デフォルトのフォント設定を直接書き換えている場合は、特に必要有りません。


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

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


6.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 '(".*Lucida Console.*bold.*" . 0.9))

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

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


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

"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))


6.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)))


7. 各国語フォントを選ぶ

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

8. 簡単な例

8.1. MS ゴシック で、英文字+日本語を表示

(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))


8.2. Consolas で英文字、ヒラギノ丸ゴで日本語を表示

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))

9. 気をつけたい設定

9.1. create-fontset-from-fontset-spec

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

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

9.2. set-default-font

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