部門 > TeX > ソースファイルが更新されたら自動的にコンパイルするスクリプト

「部門/TeX/ソースファイルが更新されたら自動的にコンパイルするスクリプト」の編集履歴(バックアップ)一覧はこちら

部門/TeX/ソースファイルが更新されたら自動的にコンパイルするスクリプト」(2012/09/04 (火) 10:44:36) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

Twitterでこんなのを見かけた。 #html2(){<blockquote class="twitter-tweet"><p>iOS機器でのTeX仕事用に,DropboxにあるTeXソースの更新をウォッチしてコンパイル&PDF化する「TeXコンパイルデーモン」を職場の個人サーバで走らせているのだが,これは通常のTeX仕事に使ってもいいかも.手癖でセーブするたびにPDFプレビューが更新される</p>&mdash; keithtok (@keithtok) <a href="https://twitter.com/keithtok/status/241452649084497921" data-datetime="2012-08-31T08:29:32+00:00">August 31, 2012</a></blockquote> <script src="//platform.twitter.com/widgets.js" charset="utf-8"></script>} #html2(){<blockquote class="twitter-tweet"><p>ちなみに850円払えばTeXTouch+TeXTimerで同じことが出来る模様。英語だけでいいなら、GoogleDocs+Latexlabが最も手間なし。この学会シーズンはiPadだけで巡業してみようかな</p>&mdash; keithtok (@keithtok) <a href="https://twitter.com/keithtok/status/241487223718019072" data-datetime="2012-08-31T10:46:55+00:00">August 31, 2012</a></blockquote> <script src="//platform.twitter.com/widgets.js" charset="utf-8"></script>} iOSに限らず、TeXを一台にだけセットアップしておけばいいし、便利そうなので自分でも書いてみた。流れとしては、 +lsで更新時刻を取得 +時間のオブジェクトに変換 +新しくなってるか判定 +コンパイル という感じ。[[Time Objectの部分はRubyでやったことがある>http://www47.atwiki.jp/cscd/pages/103.html]]ので、コンパイルとかもRubyの組み込み関数を使ってみる。つくったスクリプトを、cronで動かす。 #highlight(linenumber,ruby){{#!/usr/bin/ruby dir="/home/oka/Dropbox/TeX/sotuken/" filename="sotuken" tex="#{filename}.tex" dvi="#{filename}.dvi" pdf="#{filename}.pdf" string = ` ls --full-time #{dir}#{tex}` p string2 = string.scan(/(....)-(..)-(..) (..):(..):(..)/) p t = string2[0] p modified=Time.local(t[0],t[1],t[2],t[3],t[4],t[5]) p now = Time.now p check = now - 10*60 if modified > check #更新されたのが10分以内ならコンパイル `platex -halt-on-error #{dir}#{tex} ` `dvipdfmx #{dir}#{tex}` end}} LaTeXは普通エラーが起きると待機状態になってしまうので、-halt-on-errorオプションをつけてエラーが出ると止まるようにした。ただし、これでもinput fileが見つからないと待機状態になってしまうので注意。待機状態になると、cronでどんどん次のプロセスが実行されてしまうからな... 850円分の機能らしいので、1時間以内につくれば時給850円だったけど、もう少しかかった。 *追記 lsで時間がどう表示されるかはけっこう環境によってしまう。上のはUbuntuでやった場合で、Macだったらlsのオプションを ls -lT に変えて、scanの部分とTimeの部分も変える必要があった。 #highlight(ruby,linenumber){{#!/usr/bin/ruby dir="/Users/oka/Dropbox/TeX/sotuken/" filename="sotuken" tex="#{filename}.tex" dvi="#{filename}.dvi" pdf="#{filename}.pdf" string = ` ls -lT #{dir}#{tex}` p string2 = string.scan(/(..) (..) (..):(..):(..) (....)/) p t = string2[0] p modified=Time.local(t[5],t[0].to_i,t[1].to_i,t[2],t[3],t[4]) p now = Time.now p check = now - 10*60 if modified > check #更新されたのが10分以内ならコンパイル `platex -halt-on-error #{dir}#{tex} ` `dvipdfmx #{dir}#{tex}` end}} *参考 -[[組み込み関数 - Rubyリファレンスマニュアル>http://www.ruby-lang.org/ja/old-man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#a.60]]
Twitterでこんなのを見かけた。 #html2(){<blockquote class="twitter-tweet"><p>iOS機器でのTeX仕事用に,DropboxにあるTeXソースの更新をウォッチしてコンパイル&PDF化する「TeXコンパイルデーモン」を職場の個人サーバで走らせているのだが,これは通常のTeX仕事に使ってもいいかも.手癖でセーブするたびにPDFプレビューが更新される</p>&mdash; keithtok (@keithtok) <a href="https://twitter.com/keithtok/status/241452649084497921" data-datetime="2012-08-31T08:29:32+00:00">August 31, 2012</a></blockquote> <script src="//platform.twitter.com/widgets.js" charset="utf-8"></script>} #html2(){<blockquote class="twitter-tweet"><p>ちなみに850円払えばTeXTouch+TeXTimerで同じことが出来る模様。英語だけでいいなら、GoogleDocs+Latexlabが最も手間なし。この学会シーズンはiPadだけで巡業してみようかな</p>&mdash; keithtok (@keithtok) <a href="https://twitter.com/keithtok/status/241487223718019072" data-datetime="2012-08-31T10:46:55+00:00">August 31, 2012</a></blockquote> <script src="//platform.twitter.com/widgets.js" charset="utf-8"></script>} iOSに限らず、TeXを一台にだけセットアップしておけばいいし、便利そうなので自分でも書いてみた。流れとしては、 +lsで更新時刻を取得 +時間のオブジェクトに変換 +新しくなってるか判定 +コンパイル という感じ。[[Time Objectの部分はRubyでやったことがある>http://www47.atwiki.jp/cscd/pages/103.html]]ので、コンパイルとかもRubyの組み込み関数を使ってみる。つくったスクリプトを、cronで動かす。 #highlight(linenumber,ruby){{#!/usr/bin/ruby dir="/home/oka/Dropbox/TeX/sotuken/" filename="sotuken" tex="#{filename}.tex" dvi="#{filename}.dvi" pdf="#{filename}.pdf" string = ` ls --full-time #{dir}#{tex}` p string2 = string.scan(/(....)-(..)-(..) (..):(..):(..)/) p t = string2[0] p modified=Time.local(t[0],t[1],t[2],t[3],t[4],t[5]) p now = Time.now p check = now - 10*60 if modified > check #更新されたのが10分以内ならコンパイル `platex -halt-on-error #{dir}#{tex} ` `dvipdfmx #{dir}#{dvi}` end}} LaTeXは普通エラーが起きると待機状態になってしまうので、-halt-on-errorオプションをつけてエラーが出ると止まるようにした。ただし、これでもinput fileが見つからないと待機状態になってしまうので注意。待機状態になると、cronでどんどん次のプロセスが実行されてしまうからな... 850円分の機能らしいので、1時間以内につくれば時給850円だったけど、もう少しかかった。 *追記 lsで時間がどう表示されるかはけっこう環境によってしまう。上のはUbuntuでやった場合で、Macだったらlsのオプションを ls -lT に変えて、scanの部分とTimeの部分も変える必要があった。 #highlight(ruby,linenumber){{#!/usr/bin/ruby dir="/Users/oka/Dropbox/TeX/sotuken/" filename="sotuken" tex="#{filename}.tex" dvi="#{filename}.dvi" pdf="#{filename}.pdf" string = ` ls -lT #{dir}#{tex}` p string2 = string.scan(/(..) (..) (..):(..):(..) (....)/) p t = string2[0] p modified=Time.local(t[5],t[0].to_i,t[1].to_i,t[2],t[3],t[4]) p now = Time.now p check = now - 10*60 if modified > check #更新されたのが10分以内ならコンパイル `platex -halt-on-error #{dir}#{tex} ` `dvipdfmx #{dir}#{dvi}` end}} *参考 -[[組み込み関数 - Rubyリファレンスマニュアル>http://www.ruby-lang.org/ja/old-man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#a.60]]

表示オプション

横に並べて表示:
変化行の前後のみ表示: