『数学ガール/ガロア理論』をLaTeXで書いているときに使っていたRubyスクリプト
結城浩(id:hyuki)さんが『数学ガール/ガロア理論』をLaTeXで書いているときに使っていたRubyスクリプトです。
Windowsで動作することを仮定しています。
やっていることは、
- 一時的なディレクトリを作成し、
- カレントディレクトリの下のファイルを全部そこにコピーし、
- そこでLaTeXを動かし、
- 場合によってはmakeindexとmendexを動かし(コマンドラインで twice と書く)、
- PDFを作り、
- Dropboxにコピーしてから、
- Acrobatでプレビューする。
というものです。ほとんどバッチファイル代わりですね。
Acrobatが共有禁止で握っているPDFに上書きするために、途中でAcrobat.exeを殺しています。乱暴な…。
require "fileutils" PLATEX_OPTION = '' TMP_DIR = '\\tmp' DROPBOX_DIR = 'C:\\My Dropbox' PDF_NUMBER = '5' if ARGV.length == 0 abort "Usage: texpdf.rb filename[.tex] [a5|a4] [once|twice]" end from = ARGV[0].gsub(/\.tex$/, "") if ARGV.length >= 2 if ARGV[1] == 'a5' || ARGV[1] == 'a4' page_size = ARGV[1] else page_size = 'a4' end end if ARGV.length >= 3 if ARGV[2] == 'once' MAKE_INDEX = false else MAKE_INDEX = true end end time = Time.now.strftime("%Y-%m-%d-%H%M%S") to_dir = "#{TMP_DIR}\\_#{time}" texname = "#{from}.tex" dvifile = "#{from}.dvi" pdffile = "#{from}.pdf" system("mkdir #{to_dir}") system("xcopy /Y /s *.* #{to_dir}") Dir.chdir("#{to_dir}") puts "Create #{dvifile}." system("platex #{PLATEX_OPTION} #{texname}") abort "pLaTeX error." unless $? == 0 puts "Kill Acrobat." system("taskkill /IM Acrobat.exe") if MAKE_INDEX puts "Make index." system("makeindex #{from}") system("mendex #{from}") system("platex #{PLATEX_OPTION} #{texname}") abort "pLaTeX error." unless $? == 0 end abort "#{dvifile} is not found." unless File.exist?(dvifile) puts "Create #{pdffile}." system("dvipdfmx -d #{PDF_NUMBER} -p #{page_size} #{dvifile}") abort "#{pdffile} is not found." unless File.exist?(pdffile) puts "Copy to dropbox." system("xcopy /Y #{pdffile} \"#{DROPBOX_DIR}\"") puts "Show #{pdffile}." system("start #{pdffile}")