AUCTeX の設定と便利な機能

はじめに

AUCTeX の便利な機能をいくつかメモしておく。はじめに作業環境をあげておく。

  • Mac OS X: 10.6.8
  • TeXShop: 2.43
  • Skim: 1.3.17 (68)
  • Preview: 5.0.3 (504.1)
  • pTeX: 3.141592-p3.1.10 (utf8.euc) (Web2C 7.5.4), via Macports
  • latexmk: 4.25
  • Mxdvi: 0.278
  • Emacs: Carbon Emacs パッケージ (22.3.1)
  • AUCTeX: 11.86

PDF ビューア

TeXShop.app

Emacs + Org Export + TeXShop の記事では Emacs の Org-Mode からエクスポートされた LaTeX 文書を TeXShop に渡す、ということを試してみた。もちろん同様のことは AUCTeX でもできる。すなわち、AUCTeX で TeX 文書を編集して、TeX コマンドの呼び出しやプレビューを TeXShop に任せる、ということは簡単で、AUCTeX の TeX-Command に 前回 同様 osascript で AppleScript (orgtexshop.scpt) を呼び出すように設定すれば良い。

しかし AUCTeX の場合 C-c C-l (TeX-recenter-output-buffer) で常に output バッファの最後尾を確認できるし、処理中に何らかのエラーが起これば C-c ` (TeX-next-error) でエラー箇所にカーソルが移動し、該当するヘルプメッセージが (もしあれば) 分割したウインドウに表示される。ヘルプの内容は日本語の pTeX を使用していれば日本語で表示される (tex-jp.el)。また lacheck というユーティリティーも特に設定なしに利用出来て (C-c C-c Check <RET>)、通常では通知されないような文書中の誤ったスタイルを調べることもできる。

このような機能を捨ててあえて TeXShop のコンソールを利用する必要もないと思う。一方で、TeXShop のプレビューは、環境設定の「プレビューの自動更新」にチェックを入れておけば、PDF の更新を監視してくれるようになるので、PDF ビューア に関してはこれを利用したい。

~/.emacs.d/init.el:

;; for AUCTeX 11.86
(setq japanese-LaTeX-command-default "latexmk")
(setq TeX-view-program-list '(("Mxdvi" "open -a Mxdvi.app %d")
                              ("TeXShop" "open -a TeXShop.app %o")
                              ("open" "open %o")
                              ))
(setq TeX-view-program-selection '((output-dvi "Mxdvi")
                                   (output-pdf "TeXShop")
                                   (output-html "open")
                                   ))
(add-hook 'LaTeX-mode-hook (function (lambda ()
    (add-to-list 'TeX-command-list
                 '("latexmk" "latexmk %t"
                   TeX-run-TeX nil (latex-mode) :help "Run ASCII pLaTeX"))
    (add-to-list 'TeX-command-list
                 '("pdfview" "open -a TeXShop.app '%s.pdf' " TeX-run-command t nil))
    )))

AUCTeX の基本的な設定は TeX Wiki に譲り、今は必要なものだけ書いている。以上のように設定しておくと、C-c C-c latexmk <RET> で TeX コマンド、C-c C-c pdfview <RET> で TeXShop のプレビューが開く。TeXShop は PDF の更新を監視してくれるので、二回目以降は TeX コマンドのみでいい。一気にプレビューまで行いたい場合 latexmk をオプション付きで設定しておく (i.e. “latexmk -pv %t”)。

Skim.app

PDF ビューアに Skim.app を使用しても同様に PDF を自動更新してくれる。その場合、上記の TeXShop.app を適宜 Skim.app に書き換えればよい。さらに目を引く特徴は、欧文 LaTeX や PDFLaTeX, XeLaTeXなどの場合 SyncTeX を利用する (コマンドラインオプションに -synctex=1 を加えるか、 TeX 原稿のプリアンブルに synctex=1 を加える) ことで、Skim と Emacs の間を行き来できるようになることだ。詳しい設定方法は TeX and PDF Synchronization にあるが、ここにも最小限の設定をメモしておく。

Skim の環境設定で PDF-TeX 同期サポートの初期値に Emacs を選択しておく。

https://skalldan.files.wordpress.com/2011/08/wpid-skim1.png

Emacs 側では、

(server-start)

と予め Emacs server をスタートしておく。例えば PDFLaTeX を使用する場合次のように TeX Command を追加しておく。

(add-hook 'LaTeX-mode-hook (function (lambda ()
    (add-to-list 'TeX-command-list
                 '("PDFLaTeX_SyncTeX" "%`pdflatex -synctex=1%(mode)%' %t"
                      TeX-run-TeX nil (latex-mode) :help "Run PDFLaTeX"))
    (add-to-list 'TeX-command-list
                 '("Displayline" "/Applications/Skim.app/Contents/SharedSupport/displayline %n %s.pdf %b" TeX-run-command t nil))
    )))

これで C-c C-c PDFLaTeX_SyncTeX <RET> で PDF が作成され、C-c C-c Displayline <RET> で Skim が立ち上がり、PDF の該当箇所がハイライトされて示される。

(例)

section*{SyncTeX}
āsīd rājā nalo nāma vīrasenasuto balī /

https://skalldan.files.wordpress.com/2011/08/wpid-skim2.png

Skim から Emacs に移動するには、PDF ファイルの適当な箇所で Shift-Command-Click する。なお、W32TeX の pTeX は SyncTeX に対応しているとのことだが、MacPorts や TeX Live (2010, 2011) 所収の pTeX など、Mac 上では今のところこの synchronization の機能は活用できない。

Preview.app

Mac OS X 標準の Preview.app も実は PDF の自動更新に対応しているのだが、Command + Tab 等でアプリケーションを切り替えた段階でその更新が適用される。Preview.app only auto-refreshes if you alt-tab to it の Answer に書いてあるように、この作業を自動化するには少しだけトリックが必要だ。

tell application "Preview" to activate
tell application "Emacs" to activate

という focus を切り替えるだけの簡単なアップルスクリプトを ~/Library/Scripts/refresh-preview.scpt で保存しておく。

Emacs 設定ファイルには例えば次のように書いておく。

(add-hook 'LaTeX-mode-hook
          (function
           (lambda ()
             (add-to-list 'TeX-command-list
                          '("latexmk" "latexmk %t && osascript ~/Library/Scripts/refresh-preview.scpt"
                            TeX-run-TeX nil (latex-mode) :help "Run ASCII pLaTeX"))
             (add-to-list 'TeX-command-list
                          '("Preview" "open -a Preview.app '%s.pdf' " TeX-run-command t nil))
             ))

C-c C-c Preview <RET> で Preview.app で PDF が開き、以後は LaTeX コマンド (latexmk) を実行するごとに PDF は自動更新される。

source specials で相互参照

Mac OS X 用の dvi ビューア Mxdvi は source specials に対応している (詳しくは Macwiki の Mxdvi)。latexmk の設定ファイル .latexmkrc の platex には次のようにオプション “-src-specials” を加えておいて、

$latex  = 'platex -kanji=utf8 -src-specials -interaction=nonstopmode';
$bibtex = 'jbibtex -kanji=utf8';
$dvips  = 'dvipsk';
$dvipdf  = 'dvipdfmx %O -o %D %S';
$makeindex  = 'mendex -U -r -c -s dot.ist';
$dvi_previewer ='open -a Mxdvi.app';
$pdf_previewer = 'open -a TeXShop.app %O %S';
$pdf_mode = 3;
$pdf_update_method = 0;

Emacs の設定ファイルに、

(server-start)

と書いておく。さらに ~/Library/Preferences/Mxdvi.plist に次の行を追加しておく。Emacs のパスは適宜変更する。

<key>[[MxdviEditor]]</key>
<string>/Applications/Emacs.app/Contents/MacOS/bin/emacsclient -n -a /Applications/Emacs.app/Contents/MacOS/Emacs +%l %f</string>

TeX コマンド実行後 C-c C-c View (or C-c C-v, TeX-view) <RET> を実行すると Mxdvi で dvi ファイルが表示され、ファイル上の任意の場所を Ctrl + クリックすると対応する Emacs の箇所にカーソルが移動する。

複数ファイル

inputinclude のマクロを使って大きな文書を複数のファイルに分割している場合には、デフォルトのままでは分割されたファイルからマスターファイルを認識する手立てはない。

(setq-default TeX-master nil)

と書いておけばバッファに関連付けられるべきマスターファイルが尋ねられ、自動的にファイル末尾に次のようにマスターファイル名 (hogehoge) がファイル変数として挿入される。

%%% Local Variables:
%%% TeX-master: "hogehoge"
%%% End:

この変数は自分で入力することもできる。こうしておけば分割されたファイルから、マスターファイル (hogehoge.tex) をコンパイルすることができるようになる。私は上記の TeX-master の変数は t (default) のままだが、auto-insert のテンプレートの末尾に次のような記述を加えておいて、TeX 文書 (.tex) を新規に作成する場合に自動挿入されるようにしている。

%%% Local Variables:
%%% mode: japanese-latex
%%% TeX-master: t
%%% End:

マスターファイルが別にある場合は適宜手で変数を書き換えるか、C-c _ (TeX-Master-file-ask) で挿入する。

自動構文解析

バッファの構文解析の機能はいくぶん動作を重くするためデフォルトではオフになっている。

(setq TeX-parse-self t) ; Enable parse on load.
(setq TeX-auto-save t) ; Enable parse on save.

と書いておくことで利用出来るようになる。二行目の設定をしておくと、自動的に auto というサブフォルダを作成し、そのなかに解析情報が収められ、次にバッファを開いたときに再び解析する時間を削ってくれる。

TeX-Master 同様、ファイルローカル変数を変更することで個々のファイルに適用できる。

%%% Local Variables:
%%% TeX-parse-self: t
%%% TeX-auto-save: t
%%% End:

自動コンパイル

最後にもう一点、便利な設定を紹介しておく。銭谷誠司さんの Emacs Lisp TIPS より。

;; automatically run background TeX process
(defun my-autotex ()
  (when (string-match ".tex$" (buffer-file-name))
    (let ((buf (get-buffer "*Background TeX proccess*")))
      (if (bufferp buf) (kill-buffer buf)) ) ;; flush previous log
    (require 'smart-compile) ;; for smart-compile-string
    (start-process-shell-command
     "Background TeX" "*Background TeX proccess*"
     (if (and (boundp 'TeX-PDF-mode) TeX-PDF-mode)
          (smart-compile-string "pdflatex -interaction=nonstopmode %f || SayKana エラーです") ; PDFTeX
            (smart-compile-string "latexmk %f || growlnotify -a Emacs.app -t "Oops!" -m "エラーが起こりました。"") ; pTeX
       )
     )))
;; wrapper
(define-minor-mode my-autotex-mode
  "My autotex mode."
  :global nil
  :lighter " Auto"
  (if my-autotex-mode
      (add-hook 'after-save-hook 'my-autotex t t) ;; set the local flag to t
    (remove-hook 'after-save-hook 'my-autotex t)
    ))

同じ銭谷さんの smart-compile.el の関数が用いられている。my-autotex-mode に入っている場合、保存 (C-x C-s) と同時にコンパイルが実行される。上記のように PDF ビューアに TeXShop を設定していれば、保存と同時に TeXShop が更新を認識し PDF が表示される。上の例ではエラー通知に SayKanagrowlnotify を用いている (cf. More Growl !?)。いらなければ適宜外しておく。常にこのマイナーモードを有効にしておきたい場合は先程の LaTeX-mode-hook に (my-autotex-mode 1) を加えておく。

参考

One thought on “AUCTeX の設定と便利な機能

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s