LaTeX는 일반 텍스트이므로 버전 관리와 공동 집필에 매우 잘 맞습니다. 이 장에서는 원고를 망가뜨리지 않고 여러 사람이 진행하기 위한 틀을 만듭니다. Git으로 소스만 관리하고, 버전 간 차이를 latexdiff로 PDF화하며, 원고 안의 작업 메모나 검토 표시를 todonotes / changes로 다룹니다.
Git으로 관리하기
소스가 텍스트이므로 Git의 줄 단위 diff, 브랜치, 병합, 기록이 그대로 적용됩니다(바이너리 문서 파일과는 차원이 다릅니다). 커밋하는 것은 소스만(.tex, .bib, 그림, .latexmkrc 등)으로 하고, 컴파일로 다시 생성되는 파일은 .gitignore로 제외합니다. 공동 집필의 요령은 한 문장 한 줄로 쓰는 것입니다. 줄이 짧아져 diff를 읽기 쉽고 병합 충돌도 줄어듭니다.
# .gitignore — 生成物を無視 / ignore generated files
*.aux
*.log
*.out
*.toc
*.fls
*.fdb_latexmk
*.synctex.gz
*.bbl
*.blg
*.bcf
*.run.xml
*.idx
*.ilg
*.indPDF를 Git에 넣을지는 배포 방식에 따라 결정합니다. 제출본이나 release 버전을 고정해야 한다면 releases/ 같은 곳에 두고 명시적으로 관리해도 됩니다. 반면 매번 컴파일로 재생성할 수 있는 main.pdf를 항상 커밋하면 diff를 읽을 수 없고 기록이 무거워집니다. 평소에는 생성 PDF를 무시하고, 중요한 시점에만 tag나 Release에 첨부하는 운용이 다루기 쉽습니다.
공동 작업에서는 장이나 작업별로 브랜치를 만들고, 하나의 커밋에는 하나의 의미 있는 변경만 담으면 리뷰하기 쉽습니다. 큰 그림 교체, 참고문헌 DB 정리, 본문 개고를 같은 커밋에 섞으면 diff PDF에서도 Git diff에서도 원인을 따라가기 어려워집니다. LaTeX의 강점은 “글을 코드처럼 다룰 수 있다”는 점이므로, 기록도 코드와 같은 입도로 남깁니다.
latexdiff — 버전 차이 표시
latexdiff(F. Tilmann 제작)는 두 버전을 비교해 변경 부분을 강조한 새 .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을 붙여 하나로 합친 뒤 비교합니다. latexdiff-vc와 --git(또는 --svn, --hg)을 쓰면 버전 관리의 특정 revision과 직접 차이를 낼 수 있습니다.
todonotes — 메모와 TODO 남기기
todonotes package는 원고에 작업 메모를 남기기 위한 도구입니다. \todo{...}는 여백에 색이 있는 말풍선을 놓고(\todo[inline]{...}는 본문 안에 배치), \missingfigure{...}는 아직 그리지 않은 그림의 자리 표시자를 넣으며, \listoftodos는 모든 TODO를 목록으로 모읍니다. 완성본에서는 \usepackage[disable]{todonotes}로 모두 숨길 수 있습니다.
\usepackage{todonotes}
...
\todo{ここは要出典}
\missingfigure{回路図を後で追加}
\listoftodoschanges — 작성자별 수정 표시
검토와 공동 저자 표시에는 changes package가 편리합니다. \added{...}, \deleted{...}, \replaced{new}{old}, \comment{...}로 변경을 명시할 수 있고, 작성자마다 색을 지정할 수 있습니다. draft 옵션은 마크업을 표시하고 최종 모드에서는 숨기며, \listofchanges로 변경 사항을 목록화할 수 있습니다. 소스 안에 track changes를 심어 두는 느낌입니다.
\usepackage[draft]{changes}
...
\added[id=AB]{新しく加えた一文。}
\replaced[id=AB]{改訂後}{改訂前}최종본으로 전환하기 전 확인
todonotes는disable,changes는final로 설정하고 PDF에 TODO나 마크업이 남지 않았는지 확인합니다.latexdiff가 만든.tex는 별도 이름으로 두고, 주 원고 소스에 섞지 않습니다.- 제출 PDF를 만들기 전에
latexmk -C같은 명령으로 생성물을 지우고 clean rebuild가 되는지 확인합니다. - 공동 저자에게 보낼 때는 “소스 묶음”, “diff PDF”, “최종 PDF”를 구분하고 무엇을 검토해야 하는지 명시합니다.
어떻게 함께 쓰는가
- 기록, 분담, 병합 →
Git(생성물은 무시, 한 문장 한 줄). - 이전 버전에서 무엇이 바뀌었는지 보여주기 →
latexdiff(분할 문서는--flatten). - 자신의 TODO와 미완성 부분 →
todonotes(최종본은disable). - 공동 저자의 표시와 채택/거절 관리 →
changes(draft와 final 전환).