「部門/TeX/ソースファイルが更新されたら自動的にコンパイルするスクリプト」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
Twitterでこんなのを見かけた。
#html2(){<blockquote class="twitter-tweet"><p>iOS機器でのTeX仕事用に,DropboxにあるTeXソースの更新をウォッチしてコンパイル&PDF化する「TeXコンパイルデーモン」を職場の個人サーバで走らせているのだが,これは通常のTeX仕事に使ってもいいかも.手癖でセーブするたびにPDFプレビューが更新される</p>— 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>— 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>— 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>— 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]]