意識の高いLISPマシン

藤原惟/すかいゆき(@sky_y)の技術用ブログ

latexdiffを日本語LaTeX文書でうまく扱えるようにする

今,後輩の卒論を添削しているのですが,LaTeX文書をきれいに比較(diff)してくれるようなものを探してたら, latexdiff という便利ツールを見つけました.

Pascal Junod » LaTeXdiff によると,こんな感じで綺麗にdiffできるようです.

  • 赤字:新しい原稿で消した箇所
  • 青字:新しい原稿で追加した箇所

f:id:sky-y:20130203005811p:plain

インストール

私はMacでTeX Live 2012(MacTeX - TeX Users Group)を入れていたせいか,いつの間にかlatexdiffが入っていました.

必要ならソースからコンパイルもできるそうです.手順は以下を参照.

日本語LaTeX文書に対応させる

英文LaTeX文書であれば,以下の要領でいけると思います.

$ latexdiff input1.tex input2.tex > output.tex
$ platex output.tex
$ platex output.tex
$ platex output.tex
$ dvipdfmx output.dvi

ただし,日本語LaTeX文書だとUnicodeのNFD/NFC(濁点などを分離する・しない)の問題で, 余計なところまで差分と見なされてしまう場合があります.

参考:紹介マニアどらふと版: Mac OS X におけるファイル名に関するメモ(NFC, NFD等)

そこで,この問題を解決しつつlatexdiffを便利に使えるようにするシェルスクリプトを作りました.

まず,iconvをインストールしてください. MacならHomebrew, Macportsなどで,Linuxならapt-getやyumなどでsearchすれば見つかると思います. Homebrewには無いようです.無い場合はソースからコンパイルしてください.申し訳ございません.

次に,gistに置いてあるスクリプトをjlatexdiffという名前で保存し,PATHの通っているところに放り込んでください(私は~/binに入れています).

sky-y / jlatexdiff.sh : gist

私はlatexmkを使っているのでこれがデフォルトですが, 使っていない人はスクリプトのplatex部分をコメントアウトして使ってください.

また,うちで使っているLaTeXUTF-8を受け付ける仕様です. 他の文字コード用のを使っている人は,iconvを使って適宜スクリプトをいじってください.

使い方は以下の通りです.

$ jlatexdiff [old file name].tex [new file name].tex

不具合があれば,ご報告いただけると幸いです. なお,このスクリプトは以下のサイトを参考にしました.

latexdiffで幸せな添削ライフを!


おまけ: latexmkの簡単な紹介

latexmk は,

  • めんどくさい複数回コンパイルを自動的にやってくれる
  • texファイルから一気にpdfまで作ってくれる

という神ツールです.余裕がある人は,設定すると幸せになれます.

参考: