はじめに
LaTeXは綺麗な組版で文章を出力してくれて大変便利ですが、コンパイルが地味に面倒ですよね。
単純な文章を書いているときは良いのですが、数式や図表を扱う場合はコンパイル・確認・修正を繰り返す必要があり面倒ですし、
\cite{}
や\ref{}
を使うと、複数回コンパイルする必要があって更に面倒です。
IDE系のツールを使っている場合は、ボタンやショートカットキーでよしなにビルドしてくれますし、 バッチファイルやMakefile(Rakefile)を作っておけばコンソールでコマンド1発叩くだけになります。
しかし、この動作すら面倒です。僕はもうEmacs上でC-c t b
を叩いたり、コンソールでmake
を叩くステップを踏みたくありません。
執筆を楽にするためにコンピュータを使っているのであって、LaTeXをコンパイルをしたいからコンピュータを使うわけではありません。
コンピュータは賢いのですから、文章を書いて保存したらよしなにバックグランドでコンパイルして欲しいものです。
ちなみに、pandocの様なドキュメント変換ツールや、CIツールを利用した自動ビルドは今回扱いませんのであしからず。
解決法
OMakeを使います。強いMakeだと思ってもらえれば良いです(雑)。
インストール
Windows
下記サイトからバイナリがダウンロードできますので、パスの通った場所におきましょう。
Mac
少し前までHomebrewからのインストールが上手くいかなかったようですが、今は普通に入れれば大丈夫です。
$ brew install o-make
Ubuntu
ファイルの更新監視の為にfam
も必要です。
$ sudo apt-get install omake fam
セットアップ
.tex
ファイルがあるディレクトリで、下記のコマンドを実行します。
$ omake --install
OMakefile
とOMakeroot
というファイルが生成されるはずです。
OMakefileの編集
OMakefileには予めサンプルやコメントが書いてあるので、全部消して下記の設定を書きましょう。 設定の内容は、各自のディレクトリ構成やファイル名、コンパイルに使用するコマンドやオプションによって、 変更すると良いです。
こちらの設定は、 LaTeX用のOMakefile - Qiita を利用させて頂きつつ、下記の変更を追加しています。
- バウンディングボックスをxbb形式で生成
- PDF形式の画像に対応
.gitignoreの設定
Gitで管理している人は下記の設定を.gitignore
ファイルに追加すると良いでしょう。
.omakedb .omakedb.lock *.omc
使い方
下記のコマンドを叩くだけで、継続監視ビルドを始めてくれます。
$ omake -P --verbose
.tex
ファイルから.pdf
ファイルを生成する際に依存しているファイル(.tex
,.bib
,.png
等)が更新されると、勝手にビルドしなおしてくれます。超便利。
.xbb
ファイルも自動で生成してくれるので、PNGやJPG形式の画像もシュッと使えます。もちろんPDFやEPS形式でも大丈夫ですよ。
ちなみに、LaTeXにおける画像の取り扱いについては
日本人のための LaTeX タブー集 ~画像読込編~ - Qiita
が詳しいので、ご一読されることをおすすめします。
ちなみに、OMakeは普通にMakeライクに使えるので
$ omake
とすればビルドが走りますし
$ omake clean
とすれば、いわゆるmake clean
が出来ます。
便利につかう
こうなると、わざわざPDFファイルを開き直すのも不便です。 PDFリーダで自動リロードを行ってくれるソフトはいくつかありますが、下記がおすすめです。 (Adobeリーダーは対応してなかった気がしますが、今はしてるんですかね?)
Windowsユーザの方は、
http://www.sumatrapdfreader.org/free-pdf-reader-ja.html
http://www.sumatrapdfreader.org/free-pdf-reader-ja.html
Macユーザの方は、
を使うと、PDFファイルの変更を検知して自動でリロードしてくれます。
MacのPreview.app
もリロードしてくれるのですが、フォーカスしてないとダメなので少し不便です。
さらに便利に使う
Macユーザ限定になってしまいますが、iTerm2と組み合わせると便利です。 iTerm2のPreferences->Profiles->Advancedから、Triggersのeditを選んで下図の様に設定してあげます。
こうすると、PDF生成が終わったり、構文エラーが検出された時にGrowlの通知で教えてくれます。