대규모 문서 다루기

책, 학위논문, 긴 보고서는 편집과 컴파일을 오가는 흐름을 무겁게 만듭니다. 빌드는 느려지고, 하나의 거대한 파일은 다루기 어렵고, 수백 페이지에 걸쳐 번호와 참조를 일관되게 유지하기도 힘듭니다. 이 장에서는 긴 문서를 매일 계속 쓸 수 있는 형태로 나눕니다. 장별로 파일을 분리하고, 지금 작업 중인 부분만 조판하며, draft 모드와 깨끗한 전체 빌드를 의도적으로 구분합니다.

큰 문서에서 어려워지는 점

문서가 커지면 (1) 전체 컴파일에 시간이 오래 걸리고, (2) 하나의 파일이 너무 길어 원하는 위치를 찾기 어렵고, (3) 장을 넘나드는 상호 참조, 번호, 목차의 정합성을 유지하기 번거롭고, (4) 오류 위치를 특정하기 어렵다는 문제가 생깁니다. 모두 “분할”과 “필요한 부분만 처리”로 크게 완화됩니다.

파일을 나누기

기본은 장마다 파일 하나를 두고, 얇은 본문 파일이 그것들을 묶는 구조입니다. 원하는 위치를 찾기 쉽고, 공동 저자와 작업을 나누기도 쉬우며, diff도 작아집니다. 불러오기 방식(\input / \include / subfiles)은 “여러 파일 프로젝트”에서 자세히 다루지만, 장 단위라면 \include 가 적합합니다(앞뒤로 페이지를 넘기고 장마다 별도의 .aux를 갖기 때문입니다).

편집 중인 장만 컴파일 — \includeonly

\include로 분할했다면, 프리앰블에 \includeonly{the-chapter-you-are-editing} 를 써서 그 장만 처리할 수 있습니다. 각 장의 .aux가 이전 전체 빌드의 값을 유지하므로, 처리하지 않은 장의 페이지 번호와 상호 참조도 올바른 상태로 남습니다. 몇 분 걸리던 전체 빌드가 몇 초짜리 부분 빌드가 됩니다. 중요한 습관은 처음에 한 번 전체 장을 모두 빌드하는 것입니다. 아직 .aux가 없는 장을 건너뛰면 참조가 ??로 남거나 페이지 번호가 낡은 값에 머물 수 있습니다. 여기에 latexmk의 증분 빌드나 -pvc를 더하면 대기 시간은 거의 0에 가까워집니다.

latex
% プリアンブルで編集中の章だけに絞る / restrict to the chapter you’re editing
\includeonly{chapters/ch3}

\includeonly는 마무리를 위한 장치가 아닙니다. 페이지 번호와 참조가 과거의 .aux에 의존하므로, 제출 전에는 반드시 \includeonly를 제거하고 모든 장을 전체 빌드해야 합니다. 색인, 문헌, 목차까지 포함하는 문서에서 부분 빌드로 보이는 PDF는 “작업 중의 근사값”이지 최종판 자체가 아닙니다.

draft 모드로 빠르게 돌리기

문서 클래스의 draft 옵션은 큰 문서의 시험 조판에 유용합니다. (1) 행이 넘치는 부분(overfull hbox)을 여백의 검은 선으로 표시하므로 레이아웃 깨짐을 찾기 쉽습니다. (2) 이미지를 실제로 그리지 않고, 파일명이 적힌 테두리 자리표시자로 바꾸기 때문에 이미지 처리를 건너뛰어 컴파일이 빨라집니다. 이미지에만 적용하려면 \usepackage[draft]{graphicx}를 씁니다. 마무리에서는 final로 되돌립니다. 이미지는 그대로 보이게 하면서 overfull만 표시하고 싶다면 \overfullrule=5pt를 사용할 수 있습니다.

latex
\documentclass[draft]{report}   % 画像を省き overfull を表示 / skip images, show overfull rules
% 画像だけ draft にする場合 / scope it to images only:
\usepackage[draft]{graphicx}

긴 문서의 작업 리듬 만들기

대규모 문서에서는 “매번 모든 것을 완벽하게 빌드”하거나 “항상 부분 빌드만” 하는 이분법으로 두지 않는 편이 안정적입니다. 평소에는 \includeonlylatexmk -pvc로 담당 장만 빠르게 돌리고, 마일스톤마다 draft를 빼고 전체를 빌드하며, 주말이나 제출 전에는 생성물을 지우고 클린 빌드를 합니다. 대기 시간을 줄이면서 최종 PDF의 문제를 일찍 찾기 위한 리듬입니다.

그 밖의 요령

  • latexmk의 증분 빌드나 -pvc로 대기 시간을 최소화합니다(“자동 빌드” 참조).
  • 무거운 그림은 TikZ 외부화나 사전 PDF 렌더링으로 재컴파일을 가볍게 합니다.
  • 거대한 부분은 일시적으로 \includeonly에서 빼거나 주석 처리합니다.
  • 마무리 직전에는 final로 전체 빌드하여 번호, 목차, 색인, 문헌을 확정합니다.
  • 제출 전에는 draft\includeonly를 제거한 상태로 PDF를 다시 만들고, 로그의 warning까지 읽습니다.