watchmanを使ってTexのコンパイルを自動化してみる
Texで文章を書く際に,いちいちコンパイルを行うのが面倒だったので自動化してみました.
今回は,facebookが提供しているwatchmanを使います.
watchmanとは
ファイルの変更を検知するツールで,ファイルの変更をトリガーとして何らかのアクションを起こすことが出来ます.
watchmanのインストール
Homebrewで手軽にインストールできます
brew install watchman
watchmanの使い方
今回の使い方で必要なのは次の1つだけです (watchmanのドキュメント->watchman | A file watching service)
watchman -- trigger [監視対象ディレクトリへのパス] [トリガ名] [監視するファイルのパターン] -- [実行するコマンド]
このコマンドで
- [監視対象のディレクトリ]で変更が生じた場合,
- 該当ファイルが[監視パターン]にマッチすれば
- [コマンド]が実行
されます
(ここでの監視パターンはwatchman のSimple pattern syntaxのみが使用可能です https://facebook.github.io/watchman/docs/simple-query.html)
Texファイルを自動コンパイルする
まず,コンパイルを行うシェルスクリプトを書きます.(update.sh
とします)
platex foobar && dvipdfmx foobar
そして,watchmanでTexファイルを監視させるために以下のコマンドをtexファイルのあるディレクトリ内で実行します.
watchman -- trigger ./ texbuild '*.tex' -- ./update.sh
これで,Texファイルの変更時にコンパイルが自動で行われるようになりました!
監視をやめる
triggerを解除してあげましょう
watchman trigger-del ./ texbuild
その他
コンパイルが終わったら自動的にビューワで開きたい
platex foobar && dvipdfmx foobar && open foobar.pdf
としてあげれば,自動的に開いてくれるはずです!
上の方法だといちいちフォーカス移ってだるい
仰るとおりです. Mac標準のプレビュー.appでは,フォーカスを当てないと再描画されないため,他の方法を考える必要があります...
Macには変更を検知して,再描画を行ってくれるPDFビューワがあるようなので,それを使うのもありかもしれません!
参考
- TeXを監視して自動コンパイルする - Qiita
- ruby のguardを使ったやり方