그림이나 표에 설명을 붙이는 \caption 명령은 겉보기에는 단순하지만, 번호 매기기, 상호 참조, 그림/표 목록의 중심에 있습니다. 이 페이지에서는 먼저 \caption의 기본, 즉 부동체 안에서만 동작한다는 점, 자동 번호 매기기, 짧은 제목 지정, \label을 둘 위치를 정리합니다. 이어서 캡션 모양을 세밀하게 다듬는 caption 패키지와, 하나의 그림을 (a)(b)처럼 나누는 subcaption 패키지로 넘어갑니다.
\caption 기본
\caption{…}은 그림이나 표에 설명문, 즉 캡션을 붙이는 명령입니다. 중요한 제약은 부동체 환경 안, 다시 말해 figure 환경이나 table 환경 내부에서만 사용할 수 있다 는 점입니다. 일반 본문에 직접 쓰면 오류가 납니다. 부동체 안에 두면 LaTeX가 “Figure 1”, “Table 3”처럼 종류별로 번호를 자동으로 붙이고, 그 번호와 캡션 본문을 정해진 형식으로 조판합니다. 번호를 직접 쓸 필요는 없습니다.
다음은 그림의 최소 예입니다. \centering으로 그림을 가운데에 두고, \includegraphics로 이미지를 불러오며, 그 아래에 \caption을 씁니다.
\begin{figure}
\centering
\includegraphics[width=0.6\textwidth]{plot}
\caption{測定値と理論曲線の比較。}
\label{fig:plot}
\end{figure}캡션이 길고 그림 목록(List of Figures)이나 표 목록(List of Tables)에는 짧은 제목만 넣고 싶다면, \caption[짧은 제목]{전체 본문}처럼 대괄호의 선택 인수 를 사용합니다. 대괄호 안의 내용은 목록에 들어가고, 중괄호 안의 내용은 그림 옆에 조판됩니다. 대괄호를 생략하면 본문 전체가 목록에도 그대로 사용됩니다.
\caption[測定値と理論曲線]{測定値(点)と理論曲線(実線)の比較。誤差棒は標準偏差を表す。}상호 참조를 위한 \label에는 놓치기 쉬운 원칙이 있습니다. \label은 반드시 \caption 뒤에 둡니다. LaTeX는 \caption을 처리하는 순간에야 “현재 번호”를 그림 번호로 갱신하므로, \caption보다 앞에 \label을 쓰면 섹션 번호 같은 직전 카운터를 잡아 버리고, \ref가 잘못된 번호를 돌려줍니다. \caption 바로 뒤(같은 줄이어도 다음 줄이어도 됨)에 \label을 두면 \ref{fig:plot}은 올바르게 “1”을 반환합니다.
배치 관례도 짚어 두겠습니다. 그림의 캡션은 보통 그림 아래에, 표의 캡션은 표 위에 둡니다. LaTeX는 \caption을 쓴 위치에 그대로 조판하므로, 위에 내고 싶으면 그림보다 앞에, 아래에 내고 싶으면 뒤에 \caption을 씁니다(번호와 본문 사이 간격 같은 형식 자체는 위치로 바뀌지 않습니다). 학회나 저널 규정에서 위치를 정해 두는 경우도 많으니, 먼저 제출처의 지침을 확인하세요.
caption 패키지로 모양 다듬기
표준 캡션의 모양, 즉 글꼴, 번호와 본문 사이의 구분자, 정렬을 바꾸고 싶다면 Axel Sommerfeldt가 만든 caption 패키지를 사용합니다. 프리앰블에서 \usepackage{caption}으로 불러오고, \captionsetup{키=값, …}으로 각종 옵션을 지정합니다. 자주 쓰는 키는 다음과 같습니다.
| 키 | 주요 값 | 역할 |
|---|---|---|
format | plain / hang | 본문을 조판하는 방식. hang은 둘째 줄 이후를 라벨 폭만큼 들여씀 |
labelsep | colon / period / space / quad | 번호(라벨)와 본문 사이의 구분자. colon은 “: ”, period는 “. ” |
font | small / bf / it … | 캡션 전체의 글꼴과 크기 |
labelfont | bf / sc … | “Figure 1” 라벨 부분만의 글꼴 |
justification | centering / raggedright / justified | 정렬: 가운데, 왼쪽 정렬(오른쪽은 래그드), 양쪽 정렬 |
width | 길이(예: 0.8\textwidth) | 캡션이 줄바꿈되는 폭을 제한 |
singlelinecheck | true / false | 한 줄에 들어가는 짧은 캡션을 자동으로 가운데 정렬할지 여부 |
예를 들어 “번호는 굵게, 구분자는 마침표, 전체는 작은 글꼴”이라는 모양은 프리앰블에서 다음처럼 한 번에 지정합니다. \captionsetup을 프리앰블에 쓰면 문서 전체에 적용되고, 부동체 환경 안에 쓰면 그 자리의 캡션 하나에만 적용됩니다.
\usepackage{caption}
\captionsetup{labelfont=bf, labelsep=period, font=small, justification=raggedright}그림과 표의 모양을 따로 지정하고 싶다면 \captionsetup[figure]{…}와 \captionsetup[table]{…}처럼 대괄호로 부동체 종류를 지정 합니다. singlelinecheck는 기본적으로 켜져 있어서, 한 줄에 들어가는 짧은 캡션은 justification 지정과 관계없이 가운데 정렬합니다. 항상 왼쪽 정렬로 두고 싶다면 singlelinecheck=false를 추가합니다.
caption 패키지는 편리한 명령 \captionof{종류}{본문}도 제공합니다. 이는 부동체 밖에서 캡션을 붙이기 위한 명령입니다. 일반 \caption을 쓸 수 없는 minipage나 center 환경 안에서도 \captionof{figure}{…}라고 쓰면 “그림”으로 올바르게 번호가 붙고 참조됩니다. 부동체의 자동 배치에 맡기지 않고 본문 속 정해진 위치에 그림과 캡션을 두고 싶을 때 유용합니다.
\begin{center}
\includegraphics[width=0.5\textwidth]{diagram}
\captionof{figure}{フロートに入れずに置いた図。}
\label{fig:inline}
\end{center}subcaption으로 그림 나누기
하나의 그림 안에 여러 작은 그림을 나란히 두고 각각에 (a)(b)(c) 같은 하위 라벨을 붙이고 싶을 때가 많습니다. 이를 위한 현재 표준은 역시 Sommerfeldt가 만든 subcaption 패키지입니다. \usepackage{subcaption}으로 불러오기만 하면 내부에서 caption 패키지도 자동으로 로드됩니다.
중심이 되는 것은 subfigure 환경(표에는 subtable 환경)입니다. \begin{subfigure}[위치]{폭}처럼 폭을 필수 인수 로 줍니다. 선택 인수 [b] 등은 세로 방향 정렬을 정합니다. 실제로는 지정한 폭의 minipage이며, 그 안에 \includegraphics와 \caption을 씁니다. 하위 그림 안의 \caption은 (a)/(b) 같은 작은 라벨 이 되고, subfigure 환경 바깥에 둔 \caption이 그림 전체의 번호 를 담당합니다.
다음은 두 개의 하위 그림을 가로로 나란히 둔 완전한 예입니다. 두 subfigure의 폭을 각각 0.45\textwidth로 하고, 사이에 \hfill을 넣어 좌우로 밀어 둡니다.
\usepackage{graphicx}
\usepackage{subcaption}
\begin{figure}
\centering
\begin{subfigure}[b]{0.45\textwidth}
\centering
\includegraphics[width=\textwidth]{before}
\caption{処理前}
\label{fig:before}
\end{subfigure}
\hfill
\begin{subfigure}[b]{0.45\textwidth}
\centering
\includegraphics[width=\textwidth]{after}
\caption{処理後}
\label{fig:after}
\end{subfigure}
\caption{画像処理の前後比較。}
\label{fig:compare}
\end{figure}이 예에서는 그림 전체가 “Figure 1”이 되고, 좌우 하위 그림은 각각 “(a) Before”, “(b) After”로 조판됩니다. 본문에서 \ref{fig:before}는 “1a”를, \ref{fig:compare}는 “1”을 반환합니다. (a) 같은 하위 라벨만 참조하고 싶다면 \subref{fig:before}라고 쓰면 “a”만, \subref*{fig:before}라면 “(a)”를 얻습니다.
subfigure 환경 외에도 한 줄로 쓸 수 있는 \subcaptionbox 명령이 있습니다. 형식은 \subcaptionbox[목록 제목]{작은 제목}[폭][내부 위치]{내용}이며, 여기서는 \label을 작은 제목 인수 안에 둔다는 점에 주의하세요(예: \subcaptionbox{Before\label{fig:before}}{\includegraphics{…}}). 여러 줄의 minipage를 쓰지 않아도 되므로, 이미지 한 장만 담는 단순한 하위 그림에 알맞습니다.
오래된 패키지(subfig, subfigure) 피하기
하위 그림을 위한 패키지는 역사적으로 세 세대가 있어 혼동하기 쉽습니다. 가장 오래된 subfigure 패키지는 폐기(obsolete)된 것으로 취급되며, \subfigure라는 오래된 명령을 사용합니다. 그 후계가 subfig 패키지(\subfloat 명령)이지만, 이것도 현재는 적극적으로 유지보수되지 않습니다. 새 문서에는 이 페이지에서 설명한 subcaption 패키지를 사용하는 것이 권장됩니다.
주의할 점은 이 패키지들을 동시에 불러올 수 없다 는 것입니다. \usepackage 목록에 subcaption과 subfig(또는 오래된 subfigure)를 둘 다 넣으면 내부 정의가 충돌하여 많은 오류가 납니다. 학회나 저널 템플릿이 이미 오래된 패키지를 불러오는 경우가 있으므로, 직접 다른 것을 추가하기 전에 템플릿이 무엇을 불러오는지 확인하세요.
- subcaption — 현재 표준.
subfigure/subtable환경과\subcaptionbox,\subref를 제공. caption 패키지와 통합되어 있으며 이 페이지에서 권장. - subfig — 이전 세대.
\subfloat명령을 사용. 유지보수가 정체되어 새 문서에는 비추천. - subfigure — 가장 오래된 방식.
\subfigure명령을 사용. 폐기된 것으로 취급되므로 사용하지 않음.