petitviolet blog

    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