想定読者
- LaTeX で論文を執筆している
- コマンドラインで LaTeX のコンパイルができる
- 基本的な git コマンドを使える
- 論文の変更を git 管理している
-
git-latexiff
コマンドがインストールされている- TeX Live で LaTeX 環境をインストールしていればついてくる
背景
- 論文の修正をひと目でわかるようにしたい
- 指導教員の修正,共著者からのコメント,査読対応など
- Adobe Acrobat の差分作成機能は意図していない挙動が多い
- 特に数式が多い論文は複雑になりがち
- tex ファイルの diff を見るだけではよくわからないので pdf の組版結果を視覚的に比較したい
方法
git latexdiff <old> <new> --flatten --latexmk --tmpdirprefix <output-path> --main <main_tex_file>.tex
- コマンドが正しく実行されると
<output-path>
直下にgit-latexdiff.12345
のようなディレクトリが生成される -
git-latexdiff.12345/new
以下に差分をまとめたファイルが生成される- pdf がうまく出力されない場合は,
git-latexdiff.12345/new/<main_tex_file>.tex
をお好みの環境でコンパイルすればよい
- pdf がうまく出力されない場合は,
- デフォルトで,削除は赤字に取り消し線,追加は青文字に下波線でハイライトされる
解説
-
<new>
: 修正後の git のコミットハッシュ.省略可能.省略するとHEAD
が渡される. -
<old>
: 修正前の git のコミットハッシュ. -
--flatten
:<main_tex_file>.tex
中の\input
や\include
をすべて展開する.メインファイル 1 個だけで執筆している場合は省略可 -
--latexmk
: 差分結果を latexmk を使って pdf などで出力する.latexmkrc
を作っていると便利. -
--tmpdirprefix <output-path>
: 作成された差分を格納するディレクトリへのパス -
--main <main_tex_file>.tex
: メインの tex ファイル名
応用
日本語の論文では上記コマンドそのままでは動かないので工夫が必要.
準備
同じディレクトリに latexmkrc
を作成しておく.
例えば pLaTeX+dvipdfmx でコンパイルする場合は下記のように設定する.
latexmkrcの例
#!/usr/bin/env perl
@default_files = ("main.tex");
$latex = 'platex -synctex=1 -halt-on-error';
$latex_silent = 'platex -synctex=1 -halt-on-error -interaction=batchmode';
$dvipdf = 'dvipdfmx %O -o %D %S';
$bibtex = 'bibtex';
差分生成
さらに,--latexopt "-r latexmkrc"
オプションで先ほど作成したlatexmkrc
に従ってコンパイルするよう支持する.
git latexdiff <new> <old> -e utf8 -t CFONT --flatten --latexmk --latexopt "-r latexmkrc" --tmpdirprefix <output-path> --main <main_tex_file>.tex
TODO
- 出力結果の例を画像で埋め込む
- git のタグ名を指定して簡単に差分を取れるようにしたい
- 差分を違う色などで表示できるようにしたい
- 査読者 1 の対応は赤,査読者 2 の対応は緑など分けたい
もし良い方法をご存じの方がいればコメントで共有いただきたいです