LaTeX はプレーンテキストなので、バージョン管理や共同執筆と相性が抜群 です。この章では、原稿を壊さずに複数人で進めるための型を作ります。Git でソースだけを管理し、版どうしの差分を latexdiff で PDF 化し、原稿内の作業メモや赤入れを todonotes/changes で扱います。
Git で管理する
ソースがテキストなので、Git の 行単位の差分・ブランチ・マージ・履歴 がそのまま活きます(バイナリの文書ファイルとは段違いです)。コミットするのは ソースだけ(.tex・.bib・図・.latexmkrc など)にし、コンパイルで再生成されるファイルは .gitignore で除外します。共同執筆のコツは、1 文 1 行 で書くこと——行が短くまとまり、差分もマージも衝突しにくくなります。
# .gitignore — 生成物を無視 / ignore generated files
*.aux
*.log
*.out
*.toc
*.fls
*.fdb_latexmk
*.synctex.gz
*.bbl
*.blg
*.bcf
*.run.xml
*.idx
*.ilg
*.indPDF を Git に入れるかは、配布方法で決めます。提出版やリリース版を固定したいなら releases/ などに置いて明示的に管理してもかまいません。一方、毎回コンパイルで再生成できる main.pdf を常にコミットすると差分が読めず、履歴が重くなります。ふだんは生成 PDF を無視し、節目だけタグや Release に添付する運用が扱いやすいでしょう。
共同執筆では、章ごとにブランチを切り、1 つのコミットで 1 つの意味の変更だけを入れるとレビューしやすくなります。大きな図の差し替え、参考文献 DB の整理、本文の改稿を同じコミットに混ぜると、差分 PDF でも Git の差分でも原因を追いにくくなります。LaTeX の強みは「文章をコードのように扱える」ことなので、履歴もコードと同じ粒度で残します。
latexdiff — 版の差分をマークアップ
latexdiff(F. Tilmann 作)は、2 つの版を比べて 変更箇所を強調した新しい .tex を出力します。それをコンパイルすると、追加された文は下線(色つき)、削除された文は取り消し線で示され、ワープロの変更履歴のような PDF ができます。挿入されるマークアップ命令はすべて \DIF で始まります。
latexdiff --flatten old.tex new.tex > diff.tex # diff.tex をコンパイル / then compile diff.tex
latexdiff-vc --git -r HEAD~3 main.tex # Git の版と比較 / compare against a Git revision\input/\include で分割した文書は --flatten を付けて 1 つにまとめてから比較します。latexdiff-vc を使えば、--git(や --svn・--hg)で バージョン管理上の特定リビジョンとの差分 を直接出せます。
todonotes — メモ・やることを書き込む
todonotes パッケージは、原稿に作業メモを残すための道具です。\todo{...} は余白に色つきの吹き出しを置き(\todo[inline]{...} で本文中に)、\missingfigure{...} はまだ描いていない図のプレースホルダを、\listoftodos はすべての TODO を一覧にします。完成版では \usepackage[disable]{todonotes} ですべて非表示にできます。
\usepackage{todonotes}
...
\todo{ここは要出典}
\missingfigure{回路図を後で追加}
\listoftodoschanges — 著者つきの赤入れ
査読・共著の赤入れには changes パッケージが便利です。\added{...}・\deleted{...}・\replaced{新}{旧}・\comment{...} で変更を明示でき、著者ごとに色 を割り当てられます。draft オプションでマークアップを表示、最終版では非表示に切り替え、\listofchanges で変更箇所を一覧化できます。ソースに track changes を埋め込むような感覚です。
\usepackage[draft]{changes}
...
\added[id=AB]{新しく加えた一文。}
\replaced[id=AB]{改訂後}{改訂前}完成版へ切り替える前の確認
todonotesはdisable、changesはfinalにして、TODO や赤入れが PDF に残らないことを確認します。latexdiffで作った差分用.texは提出用ソースとは別名にし、本文の本流へ混ぜないようにします。- 提出 PDF を作る直前に
latexmk -Cなどで生成物を消し、クリーンビルドで同じ PDF ができるか見ます。 - 共著者に送るときは「ソース一式」「差分 PDF」「最終 PDF」を分け、どれをレビューすべきかを明記します。
使い分け
- 履歴・分担・マージ →
Git(生成物は.gitignoreで除外、1 文 1 行)。 - 「前の版からどこが変わったか」を見せる →
latexdiff(分割文書は--flatten)。 - 自分用のやること・未完成箇所 →
todonotes(最終版はdisable)。 - 共著者の赤入れ・採否管理 →
changes(draft/最終を切替)。