이미지 형식과 삽입

논문이나 책에 사진, 그래프, 도면을 넣으려면 외부 이미지 파일을 문서 안으로 가져옵니다. 그 입구가 graphicx 패키지의 \includegraphics 명령입니다. 이 페이지에서는 삽입의 기본 문법, 확대/축소, 회전, 자르기 옵션, 이미지 검색 경로 설정, 그리고 무엇보다 각 TeX 엔진이 읽을 수 있는 형식을 정리합니다. 핵심은 두 가지입니다. 이미지는 벡터와 래스터라는 두 계열로 나뉘며, 허용되는 형식은 사용하는 컴파일 엔진에 따라 달라집니다.

graphicx와 \includegraphics

이미지 삽입은 표준 graphicx 패키지가 담당합니다. 프리앰블에서 \usepackage{graphicx}로 불러오고, 본문에서는 \includegraphics[options]{filename}라고 씁니다. graphicx는 오래된 graphics 패키지를 확장한 것으로, 옵션을 key=value 형식으로 묶어 줄 수 있다는 점이 특징입니다. 둘 다 LaTeX 표준 latex-graphics 번들에 포함되어 있으므로 별도 설치가 필요 없습니다.

document.tex
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics[width=0.6\textwidth]{plot}
\end{document}

여기서 기억할 점은 파일 이름에서 확장자를 빼는 것입니다. 위 예에서 plot.pdfplot.png가 있으면 LaTeX가 엔진에 맞는 형식을 자동으로 고릅니다. 확장자를 직접 쓰면 나중에 형식을 바꾸기 어렵고, plot.tar.gz처럼 이름에 점이 들어간 파일은 잘못 해석될 수도 있습니다. 같은 이유로 이미지 파일 이름에는 공백과 점을 피하는 것이 안전합니다.

이미지가 다른 폴더에 있을 때는 \graphicspath로 검색 경로를 추가할 수 있습니다. 각 디렉터리 이름은 각각 별도의 중괄호로 감싸고(하나뿐이어도 감쌉니다), 끝에는 반드시 슬래시 /를 붙입니다(Windows에서도 /를 씁니다). LaTeX는 먼저 현재 디렉터리를 보고, 그다음 나열된 디렉터리를 순서대로 찾습니다. 공백이 들어간 경로는 {"my figures/"}처럼 따옴표로 감쌉니다.

latex
\usepackage{graphicx}
\graphicspath{ {figures/} {../shared-figures/} }

크기, 회전, 자르기 옵션

\includegraphics의 대괄호 안에는 key=value 형태로 옵션을 나열합니다. 실제 작업에서는 크기 지정이 거의 필수입니다. width=height=는 출력 폭이나 높이를 직접 지정합니다. \textwidth(본문 폭)나 \linewidth를 기준으로 width=0.8\textwidth처럼 쓰면 판면에 맞춰 이미지가 조절됩니다. scale=은 원래 크기에 대한 배율입니다.

width=height=를 둘 다 지정하면 종횡비가 깨져 이미지가 왜곡됩니다. keepaspectratio는 이를 막아 줍니다. 이 옵션을 두면 지정한 폭과 높이 안에 들어가도록 비율을 유지한 채 확대/축소합니다. 이미지를 회전하려면 angle=에 반시계 방향 각도(도)를 줍니다. 예를 들어 angle=90은 이미지를 90도 회전합니다.

이미지 가장자리를 잘라내려면 trim=clip을 함께 씁니다. trim에는 왼쪽, 아래, 오른쪽, 위 순서로 네 값을 줍니다(직관적인 위아래왼쪽오른쪽 순서가 아닙니다). 기본 단위는 bp(big point)입니다. 그리고 반드시 clip을 붙이세요. clip이 없으면 잘라낸 부분이 사라지지 않고 주변 본문으로 삐져나옵니다. 음수 값을 주면 반대로 여백이 추가됩니다. 절대 좌표로 잘라낼 영역을 지정하는 viewport=도 있습니다.

latex
% 幅を本文幅の半分に
\includegraphics[width=0.5\textwidth]{photo}

% 縦横比を保って枠に収める
\includegraphics[width=8cm,height=5cm,keepaspectratio]{photo}

% 反時計回りに 90 度回転
\includegraphics[angle=90,width=6cm]{diagram}

% 左20 下20 右30 上10(bp) を切り落として表示
\includegraphics[trim=20 20 30 10,clip,width=6cm]{scan}

주요 옵션은 표로 정리할 수 있습니다. 실제로는 보통 여러 옵션을 함께 씁니다.

옵션기능
width=출력 폭. 0.8\textwidth 같은 상대 지정이 편리함
height=출력 높이
scale=원래 크기에 대한 배율(scale=0.5는 절반)
angle=반시계 방향 회전각(도)
keepaspectratio폭과 높이를 모두 줄 때 비율 유지
trim= … clip왼쪽, 아래, 오른쪽, 위를 자름. clip 필요, 기본 단위 bp
page=여러 페이지 PDF에서 삽입할 페이지 선택

벡터와 래스터

이미지는 크게 두 계열로 나뉘며, 어떤 쪽을 선택하느냐가 결과를 좌우합니다. 벡터 이미지는 점, 선, 곡선, 문자를 수학적 좌표로 설명합니다. PDF, EPS, SVG가 대표적입니다. 윤곽이 수학식에서 다시 계산되므로 아무리 확대해도 선명하고 문자도 또렷합니다. 래스터 이미지(비트맵)는 색이 있는 픽셀을 격자로 배열한 것으로, PNG와 JPEG가 대표적입니다. 확대하면 각 픽셀이 커져 가장자리가 계단 모양이 되거나 흐려집니다.

원칙은 이렇습니다. 그래프, 선화, 회로도, 수식이 들어간 그림처럼 선과 문자로 이루어진 것은 벡터 형식(PDF/EPS/SVG)을 사용합니다. 인쇄 해상도에 의존하지 않아 종이에서도 화면에서도 항상 좋은 품질을 냅니다. 사진이나 스크린샷처럼 연속적인 계조를 가진 이미지는 래스터 형식(PNG/JPEG)을 사용합니다. 사진을 벡터로 바꿔도 이점은 없고 파일만 커집니다. 래스터를 쓸 때는 인쇄에 견딜 해상도(일반적으로 300 dpi 이상)의 원본 데이터를 준비하세요. LaTeX 안에서 그림을 생성한다면(TikZ, pgfplots 등), 출력은 자연스럽게 벡터가 됩니다.

PNG와 JPEG의 선택도 짚어 둡니다. JPEG는 사진에 맞춘 손실 압축이라 파일은 작지만, 선화나 문자 가장자리에 압축 잡음이 생깁니다. PNG는 무손실 압축이며 스크린샷, 단색 위주의 그림, 투명도가 필요한 이미지에 적합합니다. 애매하면 사진은 JPEG, 그 밖의 래스터 이미지는 PNG가 무난합니다.

엔진별로 읽을 수 있는 형식

가장 헷갈리기 쉬운 지점입니다. \includegraphics가 받아들이는 형식은 어떤 TeX 엔진이 파일을 처리하고, 최종적으로 어떤 드라이버가 출력하는지에 따라 달라집니다. 현대의 주류인 pdfLaTeX, LuaLaTeX, XeLaTeX(PDF를 직접 출력하는 경로)는 PDF, PNG, JPEG를 그대로 읽을 수 있습니다. 하지만 이 엔진들은 EPS를 직접 읽을 수 없습니다. 반대로 오래된 latex + dvips 경로(DVI를 거치는 방식)는 EPS를 그대로 다루지만 PDF나 PNG에는 적합하지 않습니다.

일본어 문서에서 자주 쓰는 pLaTeX / upLaTeX는 DVI를 출력하고 dvipdfmx로 PDF로 변환합니다. 이 경로에서는 PDF, PNG, JPEG, EPS를 다룰 수 있습니다. 다만 PNG, JPEG, PDF의 경우 이미지 크기 정보(바운딩 박스)를 기록한 보조 파일(.xbb)이 필요할 때가 있으며, extractbb 도구로 생성합니다. pLaTeX/upLaTeX에서 graphicx를 쓸 때는 \usepackage[dvipdfmx]{graphicx}처럼 어떤 드라이버로 출력할지 명시하는 것이 안전합니다(pdfLaTeX 등은 자동 판별합니다).

처리 경로직접 읽는 형식EPS는?
pdfLaTeXPDF, PNG, JPEG직접 불가. epstopdf로 변환
LuaLaTeXPDF, PNG, JPEG직접 불가. epstopdf로 변환
XeLaTeXPDF, PNG, JPEG직접 불가. epstopdf로 변환
pLaTeX/upLaTeX + dvipdfmxPDF, PNG, JPEG, EPS가능(바운딩 박스 필요)
latex + dvipsEPS(PostScript 계열)이 경로의 원래 형식

실무적인 결론은 단순합니다. 새로 시작한다면 그림은 PDF, PNG, JPEG 중 하나로 준비하면 pdfLaTeX, LuaLaTeX, XeLaTeX, dvipdfmx 어느 쪽에서도 그대로 통과합니다. 다음 두 절의 변환은 EPS나 SVG만 있을 때 필요합니다. 처리 경로 자체의 자세한 내용은 “처리 방식과 흐름” 페이지를 보세요.

EPS와 SVG 가져오기

EPS (Encapsulated PostScript) 는 오래된 벡터 형식이지만, 일부 학술지의 예전 투고 규정에서는 아직 요구합니다. pdfLaTeX 등에서 EPS를 쓰려면 PDF로 변환해야 합니다. 하지만 epstopdf package를 불러오면 EPS 파일이 컴파일 시 자동으로 PDF로 변환되어 그대로 삽입됩니다. 이 방식은 graphicx 처리에 끼어들어 Ghostscript로 변환하고, 같은 이름의 PDF가 이미 있으면 변환을 건너뜁니다. 이 자동 변환은 외부 프로그램을 실행하므로 --shell-escape(또는 -shell-escape)를 붙여 컴파일해야 합니다. 원본 EPS를 다룰 때는 이미지 범위를 나타내는 파일 앞부분의 BoundingBox가 반드시 있고 정확해야 합니다.

latex
\usepackage{graphicx}
\usepackage{epstopdf}  % EPS をコンパイル時に PDF へ自動変換
% コンパイル例: pdflatex --shell-escape main.tex

SVG는 웹의 표준 벡터 형식이지만 TeX 엔진이 직접 읽는 형식은 아닙니다. 삽입하려면 svg package를 사용합니다. 이 패키지는 \includesvg{file} 명령을 제공하고, 내부에서 Inkscape의 명령줄 기능을 호출해 SVG를 PDF로 변환합니다(DVI 출력에서는 EPS로 변환). 또한 SVG 안의 텍스트를 별도 파일로 내보내 LaTeX 쪽에서 조판하므로, 레이블이 문서와 같은 글꼴로 깔끔하게 나옵니다. Inkscape를 호출하므로 역시 --shell-escape가 필요하고, Inkscape가 설치되어 있어야 합니다. 그렇지 않다면 Inkscape나 다른 도구로 미리 SVG를 PDF로 변환해 두는 것이 확실합니다.

반대로 TeX 출력에서 SVG를 생성하고 싶을 때는 dvisvgm을 사용할 수 있습니다. 이 도구는 DVI(및 EPS, PDF)를 SVG로 변환하고, pTeX의 세로쓰기 DVI와 XeTeX의 XDV도 지원하며, 필요한 글꼴의 글리프 윤곽을 SVG에 포함합니다. 수식이나 그림을 독립된 SVG로 만들어 웹에 올릴 때 유용합니다.

figure 플로트와 흔한 문제

\includegraphics는 이미지를 그 자리에 붙여 넣을 뿐 번호나 caption을 붙이지 않습니다. 논문에서는 보통 이미지를 figure environment 안에 넣어 번호가 붙는 “그림”으로 다룹니다. 그러면 LaTeX가 페이지 형편에 맞춰 적절한 위치로 플로트시키고, \caption{…}이 번호 있는 설명을 붙이며, \label/\ref로 본문에서 “그림 3 참조”처럼 인용할 수 있습니다.

latex
\begin{figure}[htbp]
  \centering
  \includegraphics[width=0.7\textwidth]{plot}
  \caption{測定値と理論曲線の比較。}
  \label{fig:plot}
\end{figure}

図~\ref{fig:plot} に示すように……

플로트 배치, [htbp]의 의미, 여러 그림을 나란히 두는 방법은 “Floats & placement” 페이지에서, caption 모양과 하위 그림은 “Captions & subfigures” 페이지에서 다룹니다. 여기서는 이미지를 가져올 때 자주 만나는 문제를 정리합니다.

  • 엔진에 맞지 않는 형식: EPS를 pdfLaTeX 등에 넘기면 “Cannot determine size of graphic” 같은 오류로 멈춥니다. 그림을 PDF/PNG/JPEG로 만들거나 epstopdf로 변환하세요.
  • EPS BoundingBox: BoundingBox 줄이 없거나 틀리면 배치가 잘못됩니다. ps2epsepstool로 고치세요.
  • 여러 페이지 PDF: 기본적으로 첫 페이지만 삽입됩니다. page=로 삽입할 페이지를 고릅니다(문서 전체라면 pdfpages package).
  • PDF의 여백: 그림 PDF에 여백이 많으면 그림이 작아 보입니다. 먼저 pdfcrop(CTAN)으로 여백을 잘라내세요.
  • 파일 이름의 공백이나 점: 경로나 이름에 공백 또는 점이 있으면 삽입이 깨지기 쉽습니다. 이름을 바꾸거나, 공백이 있는 경로는 따옴표로 감싸세요.
  • 확장자 고정 작성: 확장자를 명시하면 형식을 바꾸기 어렵습니다. 원칙적으로 확장자 없이 이름만 씁니다.