공동 작업과 변경 추적

LaTeX는 일반 텍스트이므로 버전 관리와 공동 집필에 매우 잘 맞습니다. 이 장에서는 원고를 망가뜨리지 않고 여러 사람이 진행하기 위한 틀을 만듭니다. Git으로 소스만 관리하고, 버전 간 차이를 latexdiff로 PDF화하며, 원고 안의 작업 메모나 검토 표시를 todonotes / changes로 다룹니다.

Git으로 관리하기

소스가 텍스트이므로 Git줄 단위 diff, 브랜치, 병합, 기록이 그대로 적용됩니다(바이너리 문서 파일과는 차원이 다릅니다). 커밋하는 것은 소스만(.tex, .bib, 그림, .latexmkrc 등)으로 하고, 컴파일로 다시 생성되는 파일은 .gitignore로 제외합니다. 공동 집필의 요령은 한 문장 한 줄로 쓰는 것입니다. 줄이 짧아져 diff를 읽기 쉽고 병합 충돌도 줄어듭니다.

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

PDF를 Git에 넣을지는 배포 방식에 따라 결정합니다. 제출본이나 release 버전을 고정해야 한다면 releases/ 같은 곳에 두고 명시적으로 관리해도 됩니다. 반면 매번 컴파일로 재생성할 수 있는 main.pdf를 항상 커밋하면 diff를 읽을 수 없고 기록이 무거워집니다. 평소에는 생성 PDF를 무시하고, 중요한 시점에만 tag나 Release에 첨부하는 운용이 다루기 쉽습니다.

공동 작업에서는 장이나 작업별로 브랜치를 만들고, 하나의 커밋에는 하나의 의미 있는 변경만 담으면 리뷰하기 쉽습니다. 큰 그림 교체, 참고문헌 DB 정리, 본문 개고를 같은 커밋에 섞으면 diff PDF에서도 Git diff에서도 원인을 따라가기 어려워집니다. LaTeX의 강점은 “글을 코드처럼 다룰 수 있다”는 점이므로, 기록도 코드와 같은 입도로 남깁니다.

latexdiff — 버전 차이 표시

latexdiff(F. Tilmann 제작)는 두 버전을 비교해 변경 부분을 강조한 새 .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을 붙여 하나로 합친 뒤 비교합니다. latexdiff-vc--git(또는 --svn, --hg)을 쓰면 버전 관리의 특정 revision과 직접 차이를 낼 수 있습니다.

todonotes — 메모와 TODO 남기기

todonotes package는 원고에 작업 메모를 남기기 위한 도구입니다. \todo{...}는 여백에 색이 있는 말풍선을 놓고(\todo[inline]{...}는 본문 안에 배치), \missingfigure{...}는 아직 그리지 않은 그림의 자리 표시자를 넣으며, \listoftodos는 모든 TODO를 목록으로 모읍니다. 완성본에서는 \usepackage[disable]{todonotes}로 모두 숨길 수 있습니다.

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

changes — 작성자별 수정 표시

검토와 공동 저자 표시에는 changes package가 편리합니다. \added{...}, \deleted{...}, \replaced{new}{old}, \comment{...}로 변경을 명시할 수 있고, 작성자마다 색을 지정할 수 있습니다. draft 옵션은 마크업을 표시하고 최종 모드에서는 숨기며, \listofchanges로 변경 사항을 목록화할 수 있습니다. 소스 안에 track changes를 심어 두는 느낌입니다.

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

최종본으로 전환하기 전 확인

  • todonotesdisable, changesfinal로 설정하고 PDF에 TODO나 마크업이 남지 않았는지 확인합니다.
  • latexdiff가 만든 .tex는 별도 이름으로 두고, 주 원고 소스에 섞지 않습니다.
  • 제출 PDF를 만들기 전에 latexmk -C 같은 명령으로 생성물을 지우고 clean rebuild가 되는지 확인합니다.
  • 공동 저자에게 보낼 때는 “소스 묶음”, “diff PDF”, “최종 PDF”를 구분하고 무엇을 검토해야 하는지 명시합니다.

어떻게 함께 쓰는가

  • 기록, 분담, 병합Git(생성물은 무시, 한 문장 한 줄).
  • 이전 버전에서 무엇이 바뀌었는지 보여주기latexdiff(분할 문서는 --flatten).
  • 자신의 TODO와 미완성 부분todonotes(최종본은 disable).
  • 공동 저자의 표시와 채택/거절 관리changes(draft와 final 전환).