오류 읽기와 디버깅

컴파일이 실패하면 LaTeX는 알쏭달쏭한 ! … 메시지와 행 번호 l.NN을 출력하고 ? 프롬프트에서 멈춥니다. 이를 읽는 법과 .log, 몇 가지 디버깅 명령을 알면 “깨졌다”가 “여기를 고치면 된다”로 바뀝니다. 이 페이지는 오류 읽기, 로그, 디버깅을 다룹니다.

오류 읽는 법

오류는 정해진 형태를 가집니다. ! 다음에 메시지(예: ! Undefined control sequence)가 나오고, 이어서 TeX가 막힌 행을 l.NN으로 보여 주며 TeX가 읽은 지점에서 줄이 나뉩니다. 중요: l.NN은 LaTeX가 문제를 알아차린 위치이지, 반드시 원인 위치는 아닙니다. 닫는 } 누락은 몇 줄 뒤에서 드러날 수 있으므로 그 줄이 맞아 보이면 위쪽도 의심해야 합니다. ? 프롬프트에서는 Return = 계속 시도, h = 도움말, x = 종료, q = 끝까지 조용히 실행(모든 오류 수집), r = 멈추지 않고 실행입니다. (실제로는 latexmk 등이 nonstop으로 실행하므로, 보통 나중에 .log에서 읽습니다.)

  • Undefined control sequence — 오타이거나 \usepackage를 잊은 경우.
  • Missing $ inserted — 수식 모드 밖에서 수학 기호를 사용한 경우.
  • File x.sty not found — 패키지가 설치되지 않음(tlmgr로 추가).
  • Runaway argument{ } 짝이 맞지 않음(대개 } 누락).

로그 읽기 — .log / texfot

.log 파일에는 실행의 전체 기록이 남습니다. 모든 오류와 경고(Overfull/Underfull \hbox, 정의되지 않은 참조, 글꼴 대체 등)가 포함됩니다. 로그는 정보가 많으므로 texfot으로 “주목할 줄”만 추리면 읽기 쉬워집니다(“texdoc / texfot …” 참조). 빌드가 “성공”해도 여기에서 경고를 확인하세요.

디버깅 명령

\show\foo\foo의 의미/정의를 출력하고(?에서 멈춤), \showthe\textwidth는 레지스터나 길이의 을 출력합니다. \typeout{...}(LaTeX)와 \message{...}(TeX)는 사용자 메시지를 로그/터미널에 출력하므로 printf식 디버깅에 편리합니다. 최후의 수단인 \tracingall은 TeX가 하는 모든 일을 로그에 쏟아냅니다(매우 장황함. trace 패키지가 출력을 정돈해 줍니다). 전개가 어디서 잘못되는지 찾을 때 사용합니다.

latex
\show\section          % \section の定義を表示 / show its meaning
\showthe\textwidth      % 長さの値を表示 / show a length’s value
\typeout{ここまで来た}    % 自分のメッセージ / your own message
\tracingall             % すべてをログへ(非常に冗長)/ trace everything (very verbose)