Emacs + Org Export + TeXShop

Emacs の Org-Mode で LaTeX 文書へエクスポートする場合、変換処理中は他の操作を受け付けてくれない。短いファイルだとほとんど気にはならないが、ある程度の長さを持つファイルのためには、

(setq org-export-run-in-background t)

と設定ファイル (~/.emacs.d/init.el) に書いておいて、バックグラウンドでの処理にしておいたほうがよい1。LaTeX 処理のログは *Org PDF LaTeX Output* というバッファで確認できるが、途中でエラーが起こった場合は分割されたウインドウにこのバッファが表示される。しかし、こうしてバックグラウンドで処理し変換後ログを表示してくれるとしても、処理に比較的時間のかかる場合は特に、LaTeX の処理経過が視覚的に確認される方が好ましい。

Mac OS X 上で動作する TeX 編集に特化したエディタ TeXShop の場合、独自のコンソールウインドウを持っていて、コンパイルの経過がそこで視覚的に確認され、エラーが出た場合も対処が行われ易いように設計されている。TeX 文書の編集そのものは Emacs で行い、コンパイル作業 (の仲介) からプレビューまでを TeXShop に任せる、という贅沢な使い方ができないものかと調べてみると、TeXShop の環境設定には「外部エディタでソースを編集」という項目が用意されていた。さらにはエディタから直接 TeXShop を呼び出せるような AppleScript が予め用意されている (TeXShop ヘルプ 参照)。これは素晴らしい。

AppleScript を呼び出すコマンド osascript を利用して、Org-Mode でエクスポートされた TeX ファイルを TeXShop に引数として渡して TeX 処理を実行させ、TeXShop のプレビューで PDF 表示までしてもらう。イメージとしてはこうだ。

https://skalldan.files.wordpress.com/2011/07/wpid-org_texshop_3b5b472ab05fd61485c933f49cfc55e3d27b3a451.png

ごく単純なスクリプトのはずだが、残念なことに AppleScript の知識がまったくないため自由に書けない。さらに少し調べると、すでに同様のことを実践している方がいた (Vim/TeXShop integration) ので、AppleScript の部分をほぼそのまま拝借することにした。

#!/usr/bin/osascript

on run argv
    tell application "TeXShop"
        activate
        set theFile to item 1 of argv
        set theDoc to open ((POSIX file theFile) as alias)
        try
            tell theDoc to latexinteractive
        on error
            set theDoc to front document
            tell theDoc to latexinteractive
        end try
    end tell
end run

このスクリプト (orgtexshop.scpt) を ~/Library/Scripts 以下に置いたとして2、Emacs の設定ファイルに、

(setq org-latex-to-pdf-process
       '("osascript ~/Library/Scripts/orgtexshop.scpt %f"))

と書いておく。

TeXShop 側の設定は、「環境設定」で次のように各項目にチェック (あるいは記述) しておく。LaTeX プログラムには 前回 同様 latexmk を利用する。なお TeXShop のバージョンは 2.43 である。

  • 書類
    • 起動時に: 外部エディタでソースを編集
    • (起動時に新しいファイルを作成する、のチェックは外しておいたほうがよい)
  • プレビュー
    • 外部エディタ: プレビューの自動更新
  • タイプセット
    • デフォルトのコマンド: 次のコマンドを使用 “/opt/local/bin/latexmk”
    • デフォルトのスクリプト: デフォルトのスクリプト
  • 詳細
    • パーソナルスクリプト: LaTeX プログラム “/opt/local/bin/latexmk”

以上で設定が完了した。

テストとして次のような org ファイル (emacs_texshop.org) を用意してみる。TeXShop のコンソールウインドウでエラーが出た場合を確認したいので、あえて誤った記述をしてある。

#+TITLE: Emacs + Org Export + TeXShop
#+AUTHOR: skalldan
#+OPTIONS:   num:nil toc:nil
#+LATEX_CLASS: jsarticle
#+LATEX: usepackage{pxfonts}
#------------------ Begin Document -------------------------
* 草枕
  山路を登りながら、こう考えた。
  智に働けば角が立つ。情に棹させば流される。
  意地を通せば窮屈だ。とかくに人の世は住みにくい。
#------------------ End Document ----------------------------

Org Export as LaTeX and PDF process を実行すると、TeXShop のコンソールウインドウが開きコンパイルが進行する。

https://skalldan.files.wordpress.com/2011/07/wpid-texshop_console1.png

TeX の FAQ なエラー「Can be used only in preamble」で処理が中断しているのが確認された。「エラー箇所」をクリックすると Emacs 内の TeX ファイルの該当箇所にジャンプする、とまではいかなかったが、コンソール画面で処理状況が確認できるだけでもありがたい。なお、このコンソールウインドウ上で “Return” (ignore), “s” (ignore all), “x” (complete), “h” (help) などの入力や、「作業ファイルを削除」や「強制終了」の作業は可能だ。

もとの org ファイルの誤りを修正する。

#+LATEX_HEADER: usepackage{pxfonts}

再度 Org Export を実行すると TeXShop のプレビューで正しく PDF が表示される。

https://skalldan.files.wordpress.com/2011/07/wpid-texshop_emacs1.png

TeXShop のプレビューは自動更新されるようになっているので、PDF 作成の度に閉じて開くという冗長な動作をしない、という点もうれしい。

今回は Org Export (as LaTeX) と TeXShop との連携を行ったが、AUCTeX や YaTeX を使う場合にも以上のような TeXShop との連携は有効であろう。

【追記 2012/05/11】

最近ようやく Mac OS X Lion にアップグレードして、TeX の動作チェックをしつつ、この記事に書いたことも確認してみた。Org Mode で作成したファイルをここに書いたような手順で TeXShop に渡して PDF を作成してみた。TeXShop と外部エディタの連携 の記事で書いたように BibTeX 処理も少し含めて動画を撮ってみた。使用したのはこの時に作成した Org ファイル。動画には音があるのでご注意ください。

通常の Org Export as LaTeX の動作だけで十分便利で、実際にはこうして TeX ファイルを TeXShop に渡す必要まではないかもしれないのだが…

Footnotes:

1 大きい org ファイルに対してのみ有効にするにはファイルローカル変数で有効にする。 org-mode→HTML変換をする3つの方法 参照。

2 AppleScript (に限りませんが…) に関してはまったくの素人なので、訂正や提案等は大歓迎です。

Advertisements

3 thoughts on “Emacs + Org Export + TeXShop

  1. Pingback: TeXShop と外部エディタの連携 | Amrta

  2. Pingback: AUCTeX の設定と便利な機能 | Amrta

  3. Pingback: インド学仏教学における UTF-8 による TeX 文書作成 (2) | Amrta

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