less than 1 minute read

LaTeX の原稿を修正したときに,修正内容の差分を分かりやすく PDF にして確認したい場合がある.これは差分を自分で確認したい場合はもちろん,共著者のレビュー時やレフェリーへの返答にこの赤字の版を含めるとわかりやすさが大きく向上するという点も大きい.追加した部分を手で\textcolor{red}{text} の形でハイライトしても良いのだが,自動でやってくれるコマンドに latexdiff および latexdiff-vc がある.本記事では,LaTeX 文書の変更点を簡単にハイライトする方法として latexdiff を紹介し、さらに latexdiff-vc を活用して Git との統合を行う方法を解説する.

latexdiff について

latexdiff は 2 つの LaTeX ファイルを比較して変更点を自動でハイライトするツール.

インストール

多くの LaTeX 環境には latexdiff が標準で含まれている.もしインストールされていない場合は以下の方法で導入できる.

sudo apt install latexdiff  # Ubuntu / Debian
brew install latexdiff       # macOS (Homebrew)

基本的な使い方

詳細なオプションはlatexdiff —help で確認できる.基本的な使い方は比較したい二つのファイルを引数として渡すものだ.

$latexdiff old.tex new.tex > diff.tex

これにより、old.texnew.tex の違いが diff.tex に出力される.diff.tex を通常通りコンパイルすると、追加された部分は青色、削除された部分は赤色の取り消し線付きで表示される.変更点の表示方法は—type オプションで変更できる.UNDERLINECTRADITIONALBOLD などが指定できる.

実際に簡単な例でテストしてみよう.超簡単なtest1.texとtest2.texを用意する.test2.texはtest1.texに一行足したもの.

\documentclass[a4]{article}
\begin{document}
This is the test document.
\end{document}
\documentclass[a4]{article}
\begin{document}
This is the test document.
We added this line!!
\end{document}

二つのファイルの差分を

$latexdiff test1.tex test2.tex > diff.tex

でとってコンパイルすると,青色で追加した部分が強調される.これはわかりやすい!

latexdiffで更新部分が青くハイライトされる.
青い部分がハイライトされたところ.typeオプションで見栄えは調整できる.

latexdiff-vcについて

vcはVersion Controlの略で,latexdiff-vc は latexdiff コマンドをラップしたもので,基本的にはlatexdiffが入っていればlatexdiff-vcも入っており追加のインストールは不要.latexdiff-vcはGit と連携して過去のコミットと現在のバージョンを比較して差分を可視化する.現実的には論文はgitで管理している場合が多く,latexdiff-vcの方がはるかに使える場面が多いだろう.

基本的な使い方

-rに何もオプションをつけない場合,このコマンドは最新のコミットとの差分を取得する.

latexdiff-vc --git --pdf -r main.tex

このコマンドは以下の動作をする.

  1. main.tex の最新版と直前のコミットを比較
  2. diff.tex を生成
  3. (pdfオプションをつけた場合)pdflatex でコンパイルして diff.pdf を作成

pdfオプションをつけた場合のコンパイルコマンドは変更できないので,lualatexを利用していると自動でのコンパイルには失敗する可能性がある.

現実的には特定のコミットとの差分を見たい場合が多い.この場合は-r オプションで過去のコミットIDを指定する.以下の例では1a2b3cを自身のコミットIDで置き換える.

latexdiff-vc --git --pdf -r 1a2b3c main.tex

latexdiff 自体のオプションは全く同じものが全てlatexdiff-vc でも使えるので,例えば可視化方法を変更したければ上述の--type オプションが使える.latexdiff-vc特有の(latexdiffにはない)オプションで有用なものを二つ挙げておく.

  • --force : 既存のdiffされたファイルを強制的に上書きする.デフォルトだと上書きするかわざわざ確認されて面倒臭いので.
  • --dir : 指定したディレクトリ以下にdiffファイルを出力する.

構造化されたlatexファイルの処理

一般的には論文を作るときは複数のlatexファイルを用意していることが多いので,単純に一つのファイルのdiffをとってもあまり嬉しくない.そこで--flatten オプションを利用してinput で読み込んでいる複数ファイルをひとまとめにできる.これはlatexpandとかと似た挙動.投稿時とは違って画像のパスを変更する必要はないため,こうして生成されたファイルをそのままコンパイルすればめでたく変更点が強調されたpdfが出来上がる.

latexdiff-vc --git --pdf --flatten -r 1a2b3c main.tex

まとめ

LaTeX 文書の差分を簡単に可視化する latexdiff と、Git と統合した latexdiff-vc の使い方を概説した.これらのツールを使うことで手動で変更箇所をマークする必要がなくなり,Git の履歴を活用して簡単に差分を取得できる.

TODO

  • github actionのワークフローで自動でdiffされたファイルを作成する.

参考文献