読者です 読者をやめる 読者になる 読者になる

Emacs+AUCTeXのjapanese-latex-modeでplatexコマンドを実行するときにバッファの文字コードに応じて適切なオプションを付与する

Windows & Ubuntu それぞれで TeX を書く機会が増えそうだったので,TeXで使う文字コードUTF-8にしてみた。UTF-8なファイルを pLaTeX で処理するためには引数として -kanji=utf8 を渡さなければならないのので,バッファの文字コードに応じて適切なオプションを自動付与するようにしてみた。
とりあえずのやっつけ実装なので,判別してる文字コードの種類が少ないのはご愛敬。

(add-hook 'LaTeX-mode-hook
          '(lambda ()
             (setq kanji-opt (case buffer-file-coding-system
                               ('utf-8 " -kanji=utf8")
                               ('utf-8-dos " -kanji=utf8")
                               ('shift_jis " -kanji=sjis")
                               ('shift_jis-dos " -kanji=sjis")
                               ('euc-jp " -kanji=euc")
                               ('iso-2022-jp " -kanji=jis")
                               (t "")))
             (setcar (cdr (assoc "pLaTeX" japanese-TeX-command-list))
                     (concat "%(PDF)platex" kanji-opt " %`%S%(PDFout)%(mode)%' %t"))
             (setcar (cdr (assoc "jBiBTeX" japanese-TeX-command-list))
                     (concat "%(PDF)jbibtex" kanji-opt " %s"))))

2009/04/25 追記

emacs本家にはcaseが無いようなので書き直した。ついでに若干汎用性アップ。

(add-hook 'LaTeX-mode-hook
          '(lambda ()
             (let*
                 ((kcode (symbol-name buffer-file-coding-system))
                  (opt (cond
                        ((string-match "^utf-8" kcode) " -kanji=utf8")
                        ((string-match "^shift_jis" kcode) " -kanji=sjis")
                        ((string-match "^euc-jp" kcode) " -kanji=euc")
                        ((string-match "^iso-2022-jp" kcode) " -kanji=jis")
                        (t ""))))
               (if (boundp 'japanese-TeX-command-list)
                   (progn
                     (setcar (cdr (assoc "pLaTeX" japanese-TeX-command-list))
                             (concat "%(PDF)platex" opt " %`%S%(PDFout)%(mode)%' %t"))
                     (setcar (cdr (assoc "jBibTeX" japanese-TeX-command-list))
                             (concat "%(PDF)jbibtex" opt " %s"))
                     (message "pLaTeX UTF-8 flag enabled"))
                 (message "pLaTeX UTF-8 flag disabled"))))))