Gitで管理した論文の差分pdfをlatexdiffで作成する(latexdiff-vc –flattenでエラーが出た時の対応)

技術備忘録

Gitで論文を管理していて、先生のチェックを反映して修正したものを見てもらう時、その差分がわかるようにしたいことがあると思います。下記ページを参考にlatexdiff-vcを実行したのですが、\input{}で複数ファイルを使用している場合に必要な、–flattenコマンドが実行できませんでした。(現在原因不明、windows固有の問題?)

Gitで管理しているLaTeXのdiffをpdfで見る(TeXLive2015版)

スポンサーリンク

問題のエラー

実行したコマンド(–flattenにkeep-intermediateを指定しています)

latexdiff-vc -e utf8 --git --flatten=keep-intermediate --force -d diff -r HEAD main.tex

実行結果(エラー内容)

Working on  main.tex 
Checking out old dir into: ./latexdiff-vc-HEAD (rev: HEAD)
指定されたパスが見つかりません。
Something went wrong in executing:  git archive --format=tar HEAD | ( cd ./latexdiff-vc-HEAD ; tar -xf -) at c:/pf/w32tex/share/texmf-dist/scripts/latexdiff/latexdiff-vc line 603.

エラー内容を見ると、git archive –format=tar HEAD | ( cd ./latexdiff-vc-HEAD ; tar -xf -)が実行できていないようですが、本来は作成されたlatexdiff-vc-HEADのディレクトリにHEADのコミット分がtar.gz形式で保存されるはずです。

スポンサーリンク

代替案方針

ここはどうにもできなかったため、次のような方針で差分のtexファイルを生成したいと思います。

  1. git archive –format=tar {commitID} で参照したいコミットをtarで保存し、解凍
  2. 比較したいcommitIDそれぞれで1を実行し、latexdiff --flatten\includeしたファイル込みで2つのコミット間の差分を作成する
  3. 差分をコンパイル
スポンサーリンク

batファイルを作成

論文本文はmain.texとします

@echo off
echo difference between %1 (old) and %2 (new)

@REM 一時保存フォルダを作成し、各コミットをtar形式でアーカイブ
mkdir %1
mkdir %2
git archive %1 --format=tar > %1\%1.tar.gz
git archive %2 --format=tar > %2\%2.tar.gz

@REM 各コミットのアーカイブを解凍
tar -xzvf %1\%1.tar.gz -C %1
tar -xzvf %2\%2.tar.gz -C %2

@REM 差分texファイルを作成
latexdiff --flatten %1\main.tex %2\main.tex > diff.tex

@REM 一時保存フォルダを削除
rd /s /q %1
rd /s /q %2

実行方法

generate_latexdiff.bat {commit ID old} {commit ID new}

あとは生成されるdiff.texをコンパイルするだけで、差分がわかる形式のpdfが生成できます。このとき、diff.texの生成先をmain.texと別にする場合は画像やbibファイルを用意しておく必要があります。

生成されるpdfの例

コメント

タイトルとURLをコピーしました