共同執筆・変更管理

LaTeX はプレーンテキストなので、バージョン管理や共同執筆と相性が抜群 です。この章では、原稿を壊さずに複数人で進めるための型を作ります。Git でソースだけを管理し、版どうしの差分を latexdiff で PDF 化し、原稿内の作業メモや赤入れを todonoteschanges で扱います。

Git で管理する

ソースがテキストなので、Git行単位の差分・ブランチ・マージ・履歴 がそのまま活きます(バイナリの文書ファイルとは段違いです)。コミットするのは ソースだけ.tex.bib・図・.latexmkrc など)にし、コンパイルで再生成されるファイルは .gitignore で除外します。共同執筆のコツは、1 文 1 行 で書くこと——行が短くまとまり、差分もマージも衝突しにくくなります。

terminal
# .gitignore — 生成物を無視 / ignore generated files
*.aux
*.log
*.out
*.toc
*.fls
*.fdb_latexmk
*.synctex.gz
*.bbl
*.blg
*.bcf
*.run.xml
*.idx
*.ilg
*.ind

PDF を Git に入れるかは、配布方法で決めます。提出版やリリース版を固定したいなら releases/ などに置いて明示的に管理してもかまいません。一方、毎回コンパイルで再生成できる main.pdf を常にコミットすると差分が読めず、履歴が重くなります。ふだんは生成 PDF を無視し、節目だけタグや Release に添付する運用が扱いやすいでしょう。

共同執筆では、章ごとにブランチを切り、1 つのコミットで 1 つの意味の変更だけを入れるとレビューしやすくなります。大きな図の差し替え、参考文献 DB の整理、本文の改稿を同じコミットに混ぜると、差分 PDF でも Git の差分でも原因を追いにくくなります。LaTeX の強みは「文章をコードのように扱える」ことなので、履歴もコードと同じ粒度で残します。

latexdiff — 版の差分をマークアップ

latexdiff(F. Tilmann 作)は、2 つの版を比べて 変更箇所を強調した新しい .tex を出力します。それをコンパイルすると、追加された文は下線(色つき)、削除された文は取り消し線で示され、ワープロの変更履歴のような PDF ができます。挿入されるマークアップ命令はすべて \DIF で始まります。

terminal
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} ですべて非表示にできます。

latex
\usepackage{todonotes}
...
\todo{ここは要出典}
\missingfigure{回路図を後で追加}
\listoftodos

changes — 著者つきの赤入れ

査読・共著の赤入れには changes パッケージが便利です。\added{...}\deleted{...}\replaced{新}{旧}\comment{...} で変更を明示でき、著者ごとに色 を割り当てられます。draft オプションでマークアップを表示、最終版では非表示に切り替え、\listofchanges で変更箇所を一覧化できます。ソースに track changes を埋め込むような感覚です。

latex
\usepackage[draft]{changes}
...
\added[id=AB]{新しく加えた一文。}
\replaced[id=AB]{改訂後}{改訂前}

完成版へ切り替える前の確認

  • todonotesdisablechangesfinal にして、TODO や赤入れが PDF に残らないことを確認します。
  • latexdiff で作った差分用 .tex は提出用ソースとは別名にし、本文の本流へ混ぜないようにします。
  • 提出 PDF を作る直前に latexmk -C などで生成物を消し、クリーンビルドで同じ PDF ができるか見ます。
  • 共著者に送るときは「ソース一式」「差分 PDF」「最終 PDF」を分け、どれをレビューすべきかを明記します。

使い分け

  • 履歴・分担・マージGit(生成物は .gitignore で除外、1 文 1 行)。
  • 「前の版からどこが変わったか」を見せるlatexdiff(分割文書は --flatten)。
  • 自分用のやること・未完成箇所todonotes(最終版は disable)。
  • 共著者の赤入れ・採否管理changesdraft/最終を切替)。