『数学ガール/ガロア理論』をLaTeXで書いているときに使っていたRubyスクリプト

結城浩(id:hyuki)さんが『数学ガール/ガロア理論』LaTeXで書いているときに使っていたRubyスクリプトです。
Windowsで動作することを仮定しています。
やっていることは、

というものです。ほとんどバッチファイル代わりですね。
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}")