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

AUCTeXでpxdviを使う

EmacsLaTeX環境の1つAUCTeXで、dviのデフォルトビューアをxdviからpxdviに変更する設定に苦闘していたが、ようやく解決できたヽ(*´∀`)ノ


どのように設定すれば良いか、なんてのはググればすぐ見つかって、TeX-view-style や TeX-output-view-style といった変数を変更することでdviのデフォルトビューアを変更できるらしい、というところまで辿りつける。例えば、AUCTeX - TeX Wikiには

DVI Viewerを変更する場合は、

  (setq TeX-output-view-style '(("^dvi$" "." "/path/viewer %d")))

のようにします。

と書いてある。しかし残念なことに、僕の環境 (Gentoo Linux, AUCTeX-11.86) では、これらの変数を変更しても全く効果がなかった。


うまくいかない原因が全く検討つかなくてしばらくの間放置していたんだけど、AUCTeXのソース tex.el を眺めてやっとその答えが分かった。

;;; Viewing
(defgroup TeX-view nil ... )
(defcustom TeX-view-style ... )
(defcustom TeX-output-view-style ... )

;;; Viewing (new implementation)
(defvar TeX-view-predicate-list-builtin ... )
(defcustom TeX-view-predicate-list ... )
(defvar TeX-view-program-list-builtin ... )
(defcustom TeX-view-program-list ... )
(defcustom TeX-view-program-selection ... )
(defun TeX-match-style ... )
(defun TeX-view-match-predicate ... )
(defun TeX-view-command-raw ... )

つまり、*-view-style 系の変数は古いバージョンで使われてたもので、現在は使われてないってことなんじゃないかと思う。だから、いくら変更を試しても効果が無かった。代わりに、これからは新しい実装が用意してくれてる3つのカスタマイズ変数を利用すれば良いはず。

3つの変数の内 TeX-view-program-list はプログラム名とコマンドラインの対応の定義に用いられるもので、今回の目的だとこいつを変更すれば十分。結局、

(eval-after-load "tex" '(progn
  (setq TeX-view-program-list
        (list (assoc "xdvi" TeX-view-program-list-builtin)))
  (setcar (cadr (assoc "xdvi"  TeX-view-program-list))
          "%(o?)pxdvi")))

という風にして、pxdviをdviのデフォルトビューアに変更することに成功。