Emacsで利用しているフォント

私は Emacs では主に以下のフォントを利用しています。

HackGen フォントは「Hack」という英文用のフォントと「源柔ゴシック」という日本語フォントを組合せて作成されたフォントだそうです。

一方、Migu フォントは「M+ FONTS」と「IPAフォント Ver.00303」というフォントを組合せたフォントだそうです。

どちらも

  • モノスペースフォント(固定幅のフォント)
  • 全角文字の幅 = 半角文字の幅×2
  • 無料で利用できるフォント

というフォントです(ただし、Miguフォントにはプロポーショナルフォントもありますが)。プログラムなどを書く場合には2番目の特徴が特に重要になります。こうなっていないと英語と日本語を混ぜて書いた場合に桁がずれて見にくくなるので。

上の画像がHackGenフォント、下の画像がMiguフォントになります。

普段は主にHackGenフォントを利用していますが、たまにMiguフォントに切り替えたりしています。フォント切り替え用に、以下のコードをEmacsの設定ファイル(init.elファイル)に追加して、「C-z `」というキー(my-change-v-fontというコマンド)でフォントを切り替えています。こうすると、フォントの種類だけではなく、サイズも簡単に変更できるようになるので。

;; 作成するフォントサイズのリスト
(setq emacs-font-defined-sizes
      '(9 10 11 12 13 14 15 16 17 18 19 20 21 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50))

;; フォントセットを作成するための関数
(defun emacs-font-create-fontset
  (fontset ascii-font latin1-font gb-font big5-font japanese-font korean-font size-list)
  (let (size)
    (while size-list
      (setq size (car size-list))
      (setq size-list (cdr size-list))
      (create-fontset-from-ascii-font
       (format "-outline-%s-normal-r-normal-normal-%d-*-*-*-*-*-iso8859-1"
               ascii-font size)
       nil
       (format "%s%02d" fontset size))
      (set-fontset-font (format "fontset-%s%02d" fontset size)
                        'latin-iso8859-1
                        (cons latin1-font "iso8859*"))
      (set-fontset-font (format "fontset-%s%02d" fontset size)
                        'japanese-jisx0208
                        (cons japanese-font "jisx0208-sjis"))
      (set-fontset-font (format "fontset-%s%02d" fontset size)
                        'katakana-jisx0201
                        (cons japanese-font "jisx0201-katakana"))
      (set-fontset-font (format "fontset-%s%02d" fontset size)
                        'chinese-gb2312
                        (cons gb-font "gb2312"))
      (set-fontset-font (format "fontset-%s%02d" fontset size)
                        'chinese-big5-1
                        (cons big5-font "big5"))
      (set-fontset-font (format "fontset-%s%02d" fontset size)
                        'korean-ksc5601
                        (cons korean-font "ksc5601.1987")))))


;; 「Migu 1M」フォントを利用したフォントセットに作成
(emacs-font-create-fontset
 "migu1m"
 "Migu 1M"
 "Migu 1M*"
 "Migu 1M*"
 "Migu 1M*"
 "Migu 1M*"
 "Arial Unicode MS*"
 emacs-font-defined-sizes)

;; 「HackGen」フォントを利用したフォントセットに作成
(emacs-font-create-fontset
 "HackGen"
 "HackGen"
 "HackGen*"
 "HackGen*"
 "HackGen*"
 "HackGen*"
 "HackGen*"
 emacs-font-defined-sizes)

;; フォントセットを変更するための関数
(defun my-change-v-font ()
  (interactive)
  (let ((k-list my-varible-pitch-font)
        (prompt "Insert fontset:")
        f-name)
    (setq f-name
          (completing-read prompt k-list nil nil nil nil))
    (when f-name
      (custom-set-faces
       (list 'variable-pitch (list (list t (list :family f-name)))))
      (message (format "The variable ptich font is changed to %s" f-name)))))

;; my-change-v-font を "C-z `"にバインド
(global-set-key (kbd "C-z `") 'my-change-v-font)