살아가는 이야기

subfigure에 verbatim 넣기 본문

컴퓨터, 풀어그림

subfigure에 verbatim 넣기

우균 2009. 12. 4. 05:07
갑자기 subfigure에 verbatime을 넣어야 할 일이 생겼다. subfigure는 latex의 subfigure 패키지(http://ctan.org/tex-archive/obsolete/macros/latex/contrib/subfigure/)에 정의되어 있는데, 한 그림 안에 작은 그림 여러 개를 넣을 수 있도록 해 주는 패키지다. 간단한 사용법은 다음과 같다.

\begin{figure}[H]
  \centering
  \subfigure[This is the left figure]{\label{fig:left}
    \includegraphics[width=5cm]{a}
  }\qquad
  \subfigure[This is the right figure]{\label{fig:right}
   \includegraphics[width=5cm]{b}
  }
  \caption{An example of subfigures}
  \label{fig:subfigure}
\end{figure}

그런데 여기서 그림을 넣는 대신에 verbatim 코드를 넣고 싶다면 subfigure는 작동하지 않는다. 한참을 헤매다가 subfigure 패키지 설명서에서 예를 찾을 수 있었다. 방법은 subfloat 환경을 새로 정의하는 것이다. 즉 프리앰블에 다음과 같이 선언하고,

\usepackage{subfigure}
\newbox\subfigbox % Create a box to hold the subfigure.
\makeatletter
\newenvironment{subfloat}% % Create the new environment.
 {\def\caption##1{\gdef\subcapsave{\relax##1}}%
  \let\subcapsave=\@empty % Save the subcaption text.
  \let\sf@oldlabel=\label
  \def\label##1{\xdef\sublabsave{\noexpand\label{##1}}}%
  \let\sublabsave\relax % Save the label key.
  \setbox\subfigbox\hbox
  \bgroup}% % Open the box...
 {\egroup % ... close the box and call \subfigure.
  \let\label=\sf@oldlabel
  \subfigure[\subcapsave]{\box\subfigbox}}%
\makeatother

사용하는 부분에서 다음과 같이 사용하면 된다.

\begin{figure}[H]
  \centering
  \subfigure[This is the left figure]{\label{fig:left}
    \includegraphics[width=5cm]{a}
  }\qquad
  \begin{subfloat}
    \begin{minipage}{5.5cm}
    \begin{verbatim}
#include <stdio.h>
int main() { return 0; }
    \end{verbatim}
    \end{minipage}
    \caption{This is a code\label{fig:right}}%
  \end{subfloat}%
  \caption{An example of subfigures}

  \label{fig:subfigure}
\end{figure}

여기서 주의할 점은 subfloat의 캡션에 label을 붙이는 위치다. \caption 안에 넣어야 \label이 정상적으로 작동한다. subfigure 설명서에는 \caption 밖에 \label을 넣는 것으로 되어 있는데, 설명서대로 \caption 밖에 넣으면 \label을 제대로 찾지 못하는 경우가 있으므로 주의해야 한다.



Comments