git + latexdiff で論文の差分を出力する
論文執筆はWord派でしたが、今年からLaTeXを使い始めた結果、「数式の含まれる文書はLaTeXで全て書いた方が楽」とまで感じているこの頃。
LaTeXで論文修正をするとき、今まではcolorパッケージを使っていて色付けして差分を示していて、かなり効率が悪かったのですが、最近latexdiff
の存在を知りました。
latexdiff
latexdiffは、2つのtexファイルの差分を自動で色付け・強調表示して出力してくれる便利なツールです。 (インストール方法などは省略します)
コマンドラインで下記を入力すると、生成されたdiff.texが出力されます。
latexdiff old.tex new.tex > diff.tex
diff.texをコンパイルすると、old/newの差分を示すファイルが生成されます。
参考:
今回はこれをGitと組み合わせて、前のコミットのデータとの差分が出力できるようにしました。
書いたスクリプト
latexdiff-gitなどのツールもあるそうですが、インストールができなかったため自分でスクリプトlatexdiff.sh
を書きました。
ただし、書いている論文はSection 1-5まであり、それぞれ別ファイルに入力していることに注意してください。
\section{Introduction} \input{section/1.tex} \section{Section 2} \input{section/2.tex} % ...
# 実行: sh latexdiff.sh <ルートファイル名(拡張子は含まない)> # clear rm -rf diff/* # gitレポジトリのrootファイルから、実行しているディレクトリまでの相対pathを取得 X=$(git rev-parse --show-prefix) cp *.jpg diff/ % 画像をコピー mkdir diff/section cp section/* diff/section for i in 1 2 3 4 5 # section 1-5 do # HEAD(1つ前のコミット)のtexファイルを取得し、diff/section/old_{i}.texに保存 git show HEAD:"${X}section/${i}.tex" > "diff/section/old_${i}.tex" done # 同様にHEADのTexルートファイルを出力 (${1}: コマンドライン引数=ルートファイル名) git show HEAD:"${X}${1}.tex" > "diff/old_${1}.tex" # TeXルートファイルと最新版との差分をdiff/diff.texに出力 latexdiff -e utf8 "diff/old_${1}.tex" $1.tex > diff/diff.tex for i in 1 2 3 4 5 # section 1-5 do # 各セクションの差分を出力 latexdiff -e utf8 "diff/section/old_${i}.tex" "section/${i}.tex" > "diff/section/${i}.tex" done
この後diff/diff.tex
をコンパイルすると、差分ファイルが出力されます。
追記(2020.07.27) 日本語を扱っている場合、latexdiffで出力したファイルの改行位置がおかしくなるため、コマンドを下記の通り置き換えると問題なく使えるようになります。
latexdiff -e utf8 -t CFONT old.tex new.tex > diff.tex