목차/그림 목록 및 표 목록(tocloft)

\tableofcontents, \listoffigures, \listoftables 는 제목과 캡션 정보를 모아 목차, 그림 목록, 표 목록을 자동으로 만듭니다. 이 페이지에서는 그 작동 방식(보조 파일과 두 번 처리), 깊이 제어, 별표 붙은 제목을 손으로 목차에 추가하는 방법, 그리고 tocloft 로 들여쓰기, 글꼴, 점선 리더까지 다듬는 절차를 다룹니다. 제목의 기본 자체는 “문서 구조·제목·목차” 페이지에 맡기고, 여기서는 생성과 커스터마이즈 에 집중합니다.

세 가지 자동 목록과 보조 파일

목차는 \tableofcontents 를 두기만 하면 만들어집니다. 같은 방식으로 \listoffiguresfigure 환경의 캡션을 모은 그림 목록을, \listoftablestable 환경의 캡션을 모은 표 목록을 생성합니다. 보통 앞부분, 제목 바로 뒤에 함께 둡니다.

세 가지 모두 같은 방식으로 작동합니다. LaTeX 는 처리 중 각 제목이나 캡션의 번호, 제목, 페이지를 보조 파일 에 씁니다. 목차는 .toc, 그림 목록은 .lof, 표 목록은 .lot 이며, 모두 문서 본체(루트 파일)와 같은 파일명을 가집니다. 다음 처리에서 그 보조 파일을 읽어 목록을 조판합니다.

여기서 중요한 결과 가 나옵니다. 첫 번째 처리에서는 보조 파일이 아직 없거나 오래된 상태라 목록이 비어 있거나 부정확합니다. 올바른 결과를 얻으려면 최소 두 번 컴파일 해야 합니다. 공식 참고문서도 정보를 저장하는 첫 번째 실행과 그것을 꺼내는 두 번째 실행이 필요하다고 설명합니다. 쪽 번호가 움직이면 더 필요할 수 있고, latexmk 같은 빌드 도구는 안정될 때까지 자동으로 반복합니다.

목록 제목은 언어에 대응하는 매크로로 정해집니다. 목차 제목은 \contentsname(기본 “Contents”), 그림 목록은 \listfigurename, 표 목록은 \listtablename 이며, 각각 \renewcommand 로 바꿀 수 있습니다. bookreport 에서는 이들이 번호 없는 장(내부적으로 \chapter*)으로, article 에서는 번호 없는 절로 조판됩니다. 번호가 없기 때문에 이 목록들 자체는 기본적으로 목차에 실리지 않습니다. 아래에서 수동으로 넣는 방법을 보입니다.

document.tex
\documentclass{report}
\begin{document}
\tableofcontents   % .toc を使う(2 回処理が必要)
\listoffigures     % .lof
\listoftables      % .lot
\chapter{序論}
\end{document}

목차 깊이 — tocdepth

어느 수준의 제목까지 목차에 넣을지는 tocdepth 카운터가 정합니다. 값은 제목의 level 값(\section은 1, \subsection은 2, book/report\chapter는 0, …)이며, “목록에 넣을 가장 깊은 단계”를 뜻합니다. 예를 들어 \setcounter{tocdepth}{1}이면 절까지만 싣고 소절 이하는 생략하며, \setcounter{tocdepth}{2}이면 소절까지 실립니다. 기본값은 article에서 3, book/report에서 2 입니다.

번호 매기기를 관장하는 secnumdepth와 혼동하지 마세요. secnumdepth는 제목에 번호를 붙이는 깊이이고, tocdepth는 제목을 목차에 싣는 깊이이며, 둘은 독립적으로 설정할 수 있습니다. 예를 들어 번호는 소절까지 붙이되 목차는 절까지만 보여 줄 수도 있습니다. 그림 목록과 표 목록은 계층이 하나(그림, 표)뿐이므로 tocdepth의 영향을 받지 않습니다.

항목을 수동으로 추가하기 — addcontentsline과 addtocontents

별표 붙은 제목(\section* 또는 \chapter*)은 번호도 페이지 참조도 없으므로 자동으로 목차에 들어가지 않습니다. “들어가며”, “감사의 글”, 참고문헌, 색인을 목차에 보이게 하려면 \addcontentsline{ext}{unit}{text} 로 수동 행을 써 넣습니다. 세 인수는 모두 필수입니다.

  • ext — 대상 보조 파일의 확장자입니다. 목차는 toc, 그림 목록은 lof, 표 목록은 lot입니다.
  • unit — 항목의 종류입니다. toc에서는 part, chapter, section, subsection 등이며 해당 서식과 들여쓰기가 사용됩니다. lof에서는 figure, lot에서는 table입니다.
  • text — 목록에 실을 문자열입니다. 앞에 \protect\numberline{}을 붙이면 번호 붙은 항목과 같은 들여쓰기에 맞출 수 있고, 깨지기 쉬운 명령에는 \protect가 필요합니다.

위치가 중요합니다. \addcontentsline은 처리가 그 줄에 도달했을 때의 현재 페이지 번호를 기록하므로, 제목 명령의 바로 뒤 에 둡니다. 별표 붙은 제목의 표준 패턴은 다음과 같습니다. 페이지 번호는 LaTeX가 자동으로 보충하므로 text에 쓸 필요가 없습니다.

latex
\section*{はじめに}
\addcontentsline{toc}{section}{はじめに}

\chapter*{謝辞}
\addcontentsline{toc}{chapter}{謝辞}

다른 하나인 \addtocontents{ext}{text} 는 행이 아니라 소재—여백이나 서식 명령 등—를 보조 파일에 끼워 넣습니다. 인수는 대상 확장자 ext와 쓸 내용 text 두 개입니다. 예를 들어 그림 목록에 세로 여백을 넣으려면 다음처럼 씁니다. .lof는 다음 실행 때 다시 읽히므로 \vspace 같은 깨지기 쉬운 명령에는 \protect가 필요합니다. 요약하면 페이지 번호가 붙는 행은 \addcontentsline, 여백과 장식은 \addtocontents 라고 기억하면 됩니다.

latex
\addtocontents{lof}{\protect\vspace{2ex}}   % 図目次に縦の空きを差し込む
\addtocontents{toc}{\protect\setcounter{tocdepth}{1}}  % ここ以降の目次の深さを変える

tocloft로 목록 다듬기

표준 목록의 모양을 세밀하게 바꾸고 싶을 때의 대표 패키지가 tocloft(Peter Wilson 작성)입니다. \usepackage{tocloft}로 불러오고, 각 단계의 들여쓰기, 번호 폭, 글꼴, 점선 리더\renewcommand와 전용 명령으로 개별 설정할 수 있습니다. 명령 이름은 규칙적입니다. 목록 단계를 나타내는 접두사(toc=\part, chap=\chapter, sec=\section, subsec=\subsection, …, 그림은 fig, 표는 tab)와 역할을 조합합니다.

들여쓰기와 번호 폭\cftsetindents{entry}{indent}{numwidth}로 한 번에 설정할 수 있습니다. 첫 번째 인수는 대상(section 등), indent는 왼쪽 끝에서의 들여쓰기, numwidth는 번호를 조판할 폭입니다. 개별 길이 레지스터 \cftsecindent\cftsecnumwidth\setlength로 직접 바꾸는 방법도 있습니다. 번호 자릿수가 늘어 제목과 겹치기 시작하면 numwidth를 넓힙니다.

글꼴 은 항목 쪽과 페이지 번호 쪽이 별도입니다. \renewcommand{\cftsecfont}{...}는 절 항목 제목의 글꼴을, \cftsecpagefont는 그 페이지 번호의 글꼴을 정합니다(장의 경우 \cftchapfont, \cftchappagefont). 목록 제목 자체의 글꼴은 그림 목록의 \cftloftitlefont 같은 명령으로 바꿀 수 있습니다.

점선 리더—제목과 페이지 번호 사이의 점列—는 \cftsecleader가 담당합니다. 점의 밀도는 길이 \cftdotsep(기본 4.5)로 정하며, 작게 하면 촘촘하고 크게 하면 성깁니다. 리더를 완전히 없애려면 \renewcommand{\cftsecleader}{\cftdotfill{\cftnodots}}로 합니다(\cftnodots는 “점을 찍지 않음”을 뜻하는 충분히 큰 값입니다). 점 자체의 문자는 \cftdot(기본은 마침표)로 바꿉니다.

명령역할
\cftsetindents해당 단계의 들여쓰기와 번호 폭을 함께 설정{entry}{indent}{numwidth}
\cftsecfont절 항목 제목의 글꼴\renewcommand 로 재정의
\cftsecpagefont절 항목 페이지 번호의 글꼴\renewcommand 로 재정의
\cftsecleader절 항목의 점선 리더\cftdotfill{\cftdotsep} 등
\cftdotsep점선 리더의 점 간격(기본 4.5, 작을수록 촘촘함)길이(mu 단위)
\cftnodots점을 찍지 않게 하는 충분히 큰 값리더를 없앨 때 사용

다음은 절 제목을 굵게 하고 점선 리더를 조금 촘촘하게 하는 예입니다. 프리앰블에 씁니다.

latex
\usepackage{tocloft}
\renewcommand{\cftsecfont}{\bfseries}                       % 節の題を太字に
\renewcommand{\cftsecpagefont}{\bfseries}                   % ページ番号も太字に
\renewcommand{\cftsecleader}{\bfseries\cftdotfill{\cftdotsep}} % 太字の点線リーダー
\renewcommand{\cftdotsep}{2}                                 % 点をやや密に
\cftsetindents{section}{1.5em}{2.5em}                       % 字下げと番号幅

그림 목록과 표 목록을 목차에 싣기

앞서 말했듯이 \listoffigures, \listoftables(그리고 참고문헌과 색인)의 제목은 번호가 없어서 기본적으로 목차에 나오지 않습니다. 이를 보이게 하는 방법은 두 가지입니다. 쉬운 방법은 각 목록 명령의 바로 앞\addcontentsline 한 줄을 두는 것입니다. tocloft 자체에는 이 자동 추가 기능이 없습니다.

latex
\cleardoublepage
\addcontentsline{toc}{chapter}{\listfigurename}  % 図目次を目次に載せる
\listoffigures
\cleardoublepage
\addcontentsline{toc}{chapter}{\listtablename}   % 表目次を目次に載せる
\listoftables

다른 방법은 tocbibind 패키지(역시 Peter Wilson 작성)를 불러오는 것입니다. \usepackage{tocbibind}로 쓰면 목차, 그림 목록, 표 목록, 참고문헌, 색인 중 존재하는 것을 자동으로 목차에 추가 합니다. 개별적으로 끄고 싶을 때는 옵션으로 전환합니다. nottoc(목차 자체 제외), notlot(표 목록 제외), notlof(그림 목록 제외), notbib(참고문헌 제외), notindex(색인 제외)입니다. 특히 여러 페이지에 걸친 참고문헌이나 색인에서는 \addcontentsline을 손으로 두는 것보다 안전하며, 수동 행이 필요 없어집니다.

더 고급 제어 — titletoc과 etoc

tocloft로 부족할 정도로 더 만들고 싶다면 두 가지 선택지가 돋보입니다. titletoc(Javier Bezos 작성, titlesec 번들의 일부)은 목차 각 행의 앞뒤 소재와 구분자까지 포함한 서식을 단계별로 세밀하게 정의할 수 있습니다. 행을 독립적으로 다듬는 강력한 훅을 갖추고 있어, 제목 모양을 titlesec으로 맞춘 문서와 잘 어울립니다.

etoc(Jean-François Burnol 작성)은 더 자유도가 높아, 목차를 “행 스타일”과 “전체 스타일”이라는 틀로 완전히 다시 설계할 수 있습니다. 핵심 기능은 \localtableofcontents 로, 같은 .toc에서 장별 부분 목차를 조판할 수 있으며, 트리나 마인드맵 모양 목차 같은 복잡한 표현도 가능합니다. 권장 순서는 먼저 tocloft를 시도하고, 구조 자체를 바꾸고 싶을 때만 titletoc / etoc으로 넘어가는 것입니다.