リビジョン間のtexの差分をpdfで見る

あまりエレガントな方法ではないけども,個人的に我慢できるレベルの方法をメモする.

比較したいリビジョンをそれぞれclone

git clone hoge.git old
cd old
git checkout hogerevision

git clone hoge.git new
cd new
git checkout fugarevision

差分pdfを作るためのtexを置くフォルダを作成

 cp -R new diff_dir

差分pdfを作るためのtexファイルを作る

latexdiffを使う.次のようなコマンドで差分pdfを作るためのtexを作成してくれる.

latexdiff old.tex new.tex > diff.tex

ただ,分割したファイルをいちいち指定するのは面倒なので以下のスクリプトlatexdiffdir.pyを用意する.

import sys
import subprocess
import os

cmd_latediff_template = 'latexdiff %s %s > %s'

if __name__ == '__main__':
  old_dir = os.path.abspath(sys.argv[1])
  new_dir = os.path.abspath(sys.argv[2])
  diff_dir = os.path.abspath(sys.argv[3])

  print old_dir, new_dir, diff_dir

  # print 'ls %s/*.tex' % old_dir

  flist = [os.path.basename(x) for x in subprocess.check_output('ls %s/*.tex' % old_dir, shell=True).strip().split()]

  for in_fname in flist:
    old_fname, new_fname, out_fname = [os.path.join(x, in_fname) for x in [old_dir, new_dir, diff_dir]]
    if os.path.exists(old_fname) and os.path.exists(new_fname):
      cmd_latexdiff = cmd_latediff_template % (old_fname, new_fname, out_fname)
      print cmd_latexdiff
      print subprocess.check_output(cmd_latexdiff, shell=True)

次のように実行することでdiff_dirに差分pdfを表示するためのtexが作成される. 元々newディレクトリをコピペしているのでtex以外の図データ等もディレクトリ内にある. あとはdiff_dirでコンパイルするだけで,差分pdfを作成することが出来る.

python latexdiffdir.py old new diff_dir

おわりに

もちろんファイル名を変更していたり,新しいファイルなどがあると比較できないが,その場合は潔く諦める.

またいちいち特定のリビジョンをチェックアウトするのは面倒な気がするが,これを簡単にやろうと思うと面倒なので,これも潔く諦める.

諦めてばっかしだけど,あんまり頑張り過ぎるのもアレなので.