blog.petitviolet.net

TeXを監視して自動コンパイルする

2015-01-05

QiitaRubyTeX

ruby のguard/guardを使ってファイルの変更を監視して、 裏で自動コンパイルする

準備

まずguardをインストールする

以下の様な Gemfile を用意する

source 'http://rubygems.org'
gem 'guard'
gem 'guard-shell'
gem 'rb-readline'
gem 'rb-inotify'

そして

# gem install bundle
bundle install

guardなどをインストールする

ファイルの監視およびコンパイルの設定

まずguardの初期設定をする

bundle exec guard init

すると Guardfile が作成される これを以下の様に書き換える

Guardfile
guard :shell do
  watch(/(.*).tex/) {|m|
    `platex -interaction=nonstopmode  #{m[1]}`
    `dvipdfmx #{m[1]}`
    `open -g -a Preview #{m[1]}.pdf`
  }
end

これで、tex ファイルに変更があればplatexdvipdfmxで pdf ファイルに変換し、バックグラウンドの Preview.app で開くようになる なお、Preview.app にフォーカスをあてないと変更が可視化されないので注意 やや無理矢理な解決策としては

Guardfile
guard :shell do
  watch(/(.*).tex/) {|m|
    `platex -interaction=nonstopmode #{m[1]}`
    `dvipdfmx #{m[1]}`
    `open -a Preview #{m[1]}.pdf`
    `open -a TexShop`
  }
end

とすることで一度 Preview.app にフォーカスをあててから再度 TexShop.app にフォーカスをあてることが出来るため、 Preview.app も更新されつつフォーカスは(一瞬奪われるが)TexShop に保つことが出来る

追記(2015/01/05 17:25)

Skimという PDF ビューワーには ファイルの変更を検知して表示を更新してくれる機能があるので、これを使えば

Guardfile
guard :shell do
  watch(/(.*).tex/) {|m|
    `platex -interaction=nonstopmode #{m[1]}`
    `dvipdfmx #{m[1]}`
    `open -g -a Skim #{m[1]}.pdf`
  }
end

とすればフォーカスを奪われることなく表示の更新ができて便利でした

from: https://qiita.com/petitviolet/items/f4ee19aeb612617e5108