[Macemacsjp-users 1686] Re: Cocoa Emacs フォント設定での不具合(?)

Back to archive index

Ryohei SETO setor****@me*****
2011年 1月 15日 (土) 07:01:32 JST


瀬戸です

山本さんから以下の返信を頂きましたが、Macemacsjp-users には流れていませんでした。

> 正直、Emacs のフォント周りは、どういうポリシーなのかまったく分かりませ
> ん。僕のブログは半田さんにお聞きした内容を載せていますので、問題はない
> と思います。sakitoさんの方法が正しいか否かは、僕には判断できません。そ
> のことも含めて半田さんに尋ねて、解答をまとめて公開して頂けると、みんな
> 幸せになれると思います。:)

私も、Emacs のフォント関連は、難しい何かとして避けていましたが、
この山本さんのリクエストを受けて、少し予備勉強をしてみました。

今回、出くわした不具合とは別に、ここでフォントセットの設定に関する
要点をまとめてみたいと思います。
もし、勘違いなどがあれば指摘をよろしくお願いします。

基本的なフォントセットの考え方は、
廣松さんの「Carbon版 Emacs 22.1 のフォント設定」の解説
http://macemacsjp.sourceforge.jp/matsuan/FontSettingJp.html
にある、二通りの方法がEmacs 23 (Cocoa Emacs) でも適用されるものと理解しています。

これとは別のもう1つ別の方法として、山本さんが半田さんから直接聞かれた
set-default-font を使う方法があります。
http://d.hatena.ne.jp/kazu-yamamoto/20090122

まず、この山本さんが紹介されている方法は、ご自身が、
「このコードは極めてハードコーティングなので、一時的な解だと思って下さい。」
とおっしゃっていること、そして廣松さんの解説のなかで、
「誤解の元なので、使わないようにしましょう。」と書かれている点から判断して、
技術的には問題なくても、広く知ってもらうための最終解ではないだろうと思っています。

そして、廣松さんが解説されている二通りの方法
(1) default のフォントセットを変更する
(2) フォントセットを予め定義する (フォントセットを定義してそれに名前を付ける)
については、どちらが正しい(or 新しい)、間違っている(or 古い)というのではなく、
ただ二通りの方法があると理解しました。

一応、Emacs のドキュメント info を確認したところ、
Emacs > International > 26 International Character Set Support
26.14 Fontsets
26.15 Defining fontsets
26.16 Modifying Fontsets
で書かれているのは、上の(2)の方法、
create-fontset-from-mac-roman-font で、新しい名前のフォントセットを作って、
set-fontset-font によって、日本語など一部の文字に、日本語フォントを指定する、
でした。

この方法は、Sakito さんが、まとめられている
http://sakito.jp/emacs/emacs23.html
でも最初に紹介されていますし、ブログのほうでも解説
http://emacs.g.hatena.ne.jp/sakito/20100127
されています。

ということで、今回調べた中では、新しく名前をつけてフォントセットを作る方法(2)が、
考え方もシンプルで一番良いのではないかと思っています。

この方法として、設定の行数が少なくてシンプルなsakitoさんが紹介されている
------------------
(create-fontset-from-ascii-font "Menlo-14:weight=normal:slant=normal" nil "menlokakugo")
(set-fontset-font "fontset-menlokakugo" 'unicode (font-spec :family "Hiragino Kaku Gothic ProN" :size 16) nil 'append)
(add-to-list 'default-frame-alist '(font . "fontset-menlokakugo"))
------------------
があります。
これは、ヒラギノのフォントサイズを 16ptと指定しています。
でも、この方法だと
text-scale-increase / text-scale-decrease 
をしたときに、ascii はサイズが変わるのに、日本語のフォントだけが 16pt のまま変化しないという
状況になります。
これは、Emacs 側のバグなのか、この振る舞いで問題ないのか私には分かりませんが、
現状、せっかくの text-scale-increase / text-scale-decrease  が使えないのは問題です。

そして、(sakito さんから教えていただいた事ですが)、これを回避するには、
16ptとサイズを直接指定するのではなく、face-font-rescale-alist で比を指定すれば良いようです。
------------------
(create-fontset-from-ascii-font "Menlo-14:weight=normal:slant=normal" nil "menlokakugo")
(set-fontset-font "fontset-menlokakugo" 'unicode (font-spec :family "Hiragino Kaku Gothic ProN" ) nil 'append)
(add-to-list 'default-frame-alist '(font . "fontset-menlokakugo"))
(setq face-font-rescale-alist '((".*Hiragino.*" . 1.2) (".*Menlo.*" . 1.0)))
------------------
ということで、この方法が、今のところ一番良いのではないかと思います。

私は、欧州の研究者の名前などで、アクセント記号付きのアルファベットが必要な場合があるので、
そういった文字を、ヒラギノではなく Menlo にする以下の設定を使っています。
------------------
(create-fontset-from-ascii-font "Menlo-14:weight=normal:slant=normal" nil "menlokakugo")
(set-fontset-font "fontset-menlokakugo" 'unicode (font-spec :family "Hiragino Kaku Gothic ProN" ) nil 'append)
(set-fontset-font "fontset-menlomarugo" '(#x0080 .  #x024F) (font-spec :family "Menlo") nil 'prepend)
(add-to-list 'default-frame-alist '(font . "fontset-menlokakugo"))
(setq face-font-rescale-alist '((".*Hiragino.*" . 1.2) (".*Menlo.*" . 1.0)))
------------------
Unicode の中の特定の文字に対して、適切なフォントを割り当てるには、
同じ方法でいくらでも set-fontset-font の部分を追加できます。

以上が、私が今回認識した、フォントセット周りの現状報告です。
この理解を半田さんから、確認してもらおうかと思いますが、どうでしょうか?

あと、フォントについての総合的なまとめは、
私が新しい場所をつくってするより、Emacs23関連の情報をまとめられている sakitoさんか、
フォントセットについて詳しく解説されている廣松さんにして頂くのが、
周知の観点から良いのではないかと思います。

p.s.
ちなみに、一番最後の設定をしているときに、
つぎの2つの設定を加えると、干渉してフォント設定が無効になるというのが、
前回の不可解な現象の報告でした。
(add-to-list 'default-frame-alist '(background-color . "white"))
(setq inhibit-startup-message t)

SETO Ryohei
setor****@me*****

-------------- next part --------------
HTMLの添付ファイルを保管しました...
下載 



Macemacsjp-users メーリングリストの案内
Back to archive index