Beamer

beamer의 매뉴얼은 발표 준비에 관해 딱 하나의 인정사정없는 기준을 제시합니다. 프레임은 많아야 1분에 한 장입니다. 같은 매뉴얼에 따르면 Till Tantau가 이 LaTeX 클래스의 첫 판을 쓴 것은 2003년 2월, 자신의 박사 학위 심사 발표를 위해서였고, 그전까지는 “seminar 클래스를 쓰기 편하게 만드는 작은 개인용 매크로 모음”이었습니다. 한 달 뒤 동료들의 권유로 CTAN에 올렸습니다. 이 페이지는 프레임을 쓰는 법이 아니라(그것은 beamer 클래스 페이지가 다룹니다), 다 쓴 .tex 파일과 프로젝터가 있는 방 사이에 놓인 것들을 다룹니다. aspectratio=169로 16:9를 만드는 일, 아무도 부탁하지 않은 내비게이션 기호를 지우는 일, 백업 슬라이드를 붙여도 거짓말이 되지 않는 슬라이드 번호, 절 표지 슬라이드, 본인에게만 보이는 노트, 그리고 121쪽짜리 덱이 한 번에 3.5초씩 걸리기 시작했을 때의 대처법입니다.

beamer를 16:9로 만들기 — aspectratio=169, 그리고 기본값의 실제

\documentclass[aspectratio=169]{beamer} 한 마디면 16:9가 됩니다. 그리고 기본값은 여전히 4:3입니다. 2026년 강연장의 프로젝터가 무엇이든, 아무 지정도 하지 않은 beamer는 4:3을 내놓습니다. TeX Live 2024에 동봉된 beamer 3.71로 실제 조판해 pdfinfo로 재 보면, 기본은 362.835 × 272.126 pt(128 × 96 mm), aspectratio=169453.543 × 255.118 pt(160 × 90 mm)였습니다. 놓치기 쉬운 대목은 16:9로 가면 폭만 넓어지는 것이 아니라 높이가 96 mm에서 90 mm로 줄어든다는 점입니다. 4:3에서 아래 끝까지 채워 둔 프레임은 aspectratio=169를 붙이는 순간 넘칩니다. 그래서 비율은 마지막이 아니라 맨 처음에 정하는 항목입니다.

클래스 옵션치수pdfinfo 실측값비고
aspectratio=43128 × 96 mm362.835 × 272.126 pt기본값. 아무것도 쓰지 않으면 이것
aspectratio=169160 × 90 mm453.543 × 255.118 pt현행 프로젝터 표준. 높이는 6 mm 줄어듦
aspectratio=1610160 × 100 mm453.543 × 283.465 pt많은 노트북 화면과 일치
aspectratio=149140 × 90 mm396.85 × 255.118 pt덜 극단적인 와이드 형식
aspectratio=32135 × 90 mm382.677 × 255.118 pt3:2
aspectratio=141148.5 × 105 mm420.945 × 297.638 pt정확히 A6 가로. pdfinfo도 “A6”라고 표시합니다
aspectratio=54125 × 100 mm354.331 × 283.465 pt5:4. 오래된 프로젝터용
aspectratio=2013140 × 91 mm396.85 × 257.953 pt20:13. 숫자가 그대로 비율입니다

이 치수가 어떻게 PDF까지 도달하는지 알아 두면 이득입니다. beamer.cls는 스스로 계산한 폭과 높이를 papersize={...}geometry에 넘기고, geometry\pdfpagewidth\pdfpageheight를 고쳐 씁니다. 이것은 보기보다 중요합니다. 보통의 LaTeX에서는 \documentclass[letterpaper]{article}라고 써도 PDF는 A4로 나옵니다(실측 595.276 × 841.89 pt). TeX Live의 pdftexconfig.tex가 먼저 \pdfpagewidth = 210 true mm를 설정해 두었고 표준 클래스는 그것을 건드리지 않기 때문입니다. beamer는 그 덮어쓰기를 스스로 다시 하므로 이 함정에 빠지지 않습니다. 뒤집어 말하면, 프리앰블에서 \pdfpagewidth를 손으로 바꾸는 코드를 넣으면 beamer의 치수 계산만 남겨져 그림의 가운데 맞춤이 어긋납니다. 건드리지 않는 편이 정답입니다.

latex
% decide this before you place a single figure
\documentclass[aspectratio=169]{beamer}

% inside a frame, always express sizes relative to the slide,
% never in absolute cm, so a later ratio change survives
\includegraphics[width=0.8\textwidth]{plot.pdf}
\includegraphics[height=0.6\textheight]{photo.jpg}

프리앰블에 \setbeamertemplate{navigation symbols}{} 한 줄이면 사라집니다. 그 흐릿한 기호 줄은 장식이 아니라 여섯 부품으로 짜인 진짜 링크 모음입니다. beamerouterthemedefault.sty의 정의를 보면 \insertslidenavigationsymbol, \insertframenavigationsymbol, \insertsubsectionnavigationsymbol, \insertsectionnavigationsymbol, \insertdocnavigationsymbol, \insertbackfindforwardnavigationsymbol을 나란히 늘어놓았을 뿐이고, 각각이 2~4개의 하이퍼링크를 가집니다. default 테마로 프레임 하나짜리 덱을 조판해 세어 보니 PDF의 /Link 주석이 한 장에 20개였습니다. 템플릿을 비우면 0개가 되고, 프레임 이동만 남기려고 {\insertframenavigationsymbol}로 두면 4개가 됩니다.

부품링크 대상개수
\insertslidenavigationsymbol앞뒤 슬라이드와 뷰어의 “페이지로 이동”3
\insertframenavigationsymbol이전 프레임 끝, 현재 프레임의 처음과 끝, 다음 프레임 처음4
\insertsubsectionnavigationsymbol소절의 경계 네 곳. 프레임과 같은 형태4
\insertsectionnavigationsymbol절의 경계 네 곳4
\insertdocnavigationsymbol발표의 첫 페이지와 마지막 페이지2
\insertbackfindforwardnavigationsymbol뷰어 메뉴 명령 GoBack, Find, GoForward3

지울지 남길지는 발표 길이가 정합니다. beamer의 가이드라인도 그렇게 말합니다. 긴 발표일수록 길잡이가 필요하고, 90분짜리 강의라면 현재 위치를 보여 주는 사이드바가 도움이 되지만 10분짜리 소개에 목차를 띄우는 것은 우스꽝스럽다는 것입니다. 실무로 옮기면 이렇습니다. 15분짜리 학회 발표라면 지웁니다(아무도 누르지 않고, 인쇄하면 종이에도 나옵니다). 한 학기 강의 자료라면 남깁니다(수강생은 자리에서 PDF를 다시 읽고 절로 건너뛰고 싶어 합니다). 중간 선택지로 프레임 이동만 남기려면 {\insertframenavigationsymbol}을 씁니다. 또한 \usetheme{metropolis}처럼 테마 쪽에서 이미 꺼 두는 경우도 있으니, 지워지지 않으면 테마부터 의심하세요.

preamble
% remove all six symbols
\setbeamertemplate{navigation symbols}{}

% or keep only the frame-stepping pair
\setbeamertemplate{navigation symbols}{\insertframenavigationsymbol}

슬라이드 번호 넣기 — \insertframenumber\inserttotalframenumber

직접 짠다면 footline 템플릿에 \insertframenumber/\inserttotalframenumber를 쓰지만, 테마의 꼬리말에 이미 번호가 있다면 beamer가 마련해 둔 이름 붙은 템플릿을 고르는 편이 확실합니다. \setbeamertemplate{page number in head/foot}[totalframenumber]라고 쓰면 “3 / 12” 형태가 됩니다(beamerbaseauxtemplates.styframenumber, totalframenumber, appendixframenumber 세 가지가 정의되어 있습니다). 많은 사람이 걸려 넘어지는 지점은 번호가 세는 것이 PDF 페이지가 아니라 프레임이라는 사실입니다. \pause 하나를 품은 프레임은 PDF에서 두 페이지가 되지만, 오른쪽 아래 번호는 두 페이지 모두 같은 “3 / 3”입니다. 방향키를 눌러도 번호가 움직이지 않는 것은 버그가 아닙니다.

두 번째 함정은 첫 컴파일에서 총수가 거짓말이 된다는 점입니다. \inserttotalframenumber는 덱 전체를 조판해야 확정되므로, beamer는 결과를 보조 파일 .nav에 적어 둡니다. 실제로 열어 보면 \headcommand {\gdef \inserttotalframenumber {3}}라는 줄이 들어 있습니다. .aux.nav를 지우고 한 번만 돌리면 꼬리말에 2/1, 3/1 같은 깨진 분수가 늘어섰고, 두 번째에야 2/3, 3/3이 되었습니다. 발표용 PDF는 반드시 두 번 돌린다, 이것이 beamer의 철칙입니다. 그다음 표지와 백업 슬라이드에 [noframenumbering]을 붙이면 총수는 본편만 셉니다. 실측에서 첫 본문 슬라이드가 “2/3”이던 덱이, 표지를 세지 않는 것만으로 “1/2”가 되었습니다. 부록을 아예 따로 세고 싶다면 \appendix를 두고 [appendixframenumber]를 고르면 본편이 “2/2”, 백업이 “1/1”로 각각 세어집니다.

latex
\documentclass[aspectratio=169]{beamer}
\usetheme{Madrid}
\setbeamertemplate{navigation symbols}{}
\setbeamertemplate{page number in head/foot}[appendixframenumber]

\begin{document}
% the title page should not eat frame number 1
\begin{frame}[plain,noframenumbering]\titlepage\end{frame}

\begin{frame}{Results}\end{frame}

% everything after \appendix is counted separately
\appendix
\begin{frame}{Backup: full derivation}\end{frame}
\end{document}

절마다 표지 슬라이드를 자동으로 넣기 — \AtBeginSection

프리앰블에 \AtBeginSection[]{...}를 두고, 그 안에 \tableofcontents[currentsection]를 담은 프레임을 씁니다. 이것만으로 \section{...}이 나올 때마다 “지금 여기”를 보여 주는 표지가 자동으로 들어갑니다. 대괄호 []는 번호 없는 절(\section*)일 때 쓰는 인수로 “거기서는 아무것도 하지 말라”는 뜻이며, 빠뜨리면 부록 제목 앞에까지 표지가 자랍니다. 삽입되는 프레임에는 [noframenumbering,plain]을 붙이는 것이 정석입니다. 앞 절에서 본 대로 총수를 더럽히지 않고, 테마의 테두리 장식도 걷힙니다. 더 잘게 넣고 싶다면 \AtBeginSubsection[]{...}, 90분 강의를 크게 두 부로 나누려면 \part{...}가 있고 각 부는 독립된 목차를 가집니다.

이 장치에는 모르면 5분을 녹이는 부작용이 있습니다. \tableofcontents는 목차 파일 .toc를 읽어 조판되므로, 첫 컴파일에서는 표지 슬라이드가 한 장도 나오지 않습니다. 실제로 2개 절, 4개 프레임짜리 덱을 보조 파일 없이 한 번 돌리면 5쪽, 두 번째에 7쪽이 되었습니다. “\AtBeginSection이 안 듣는다”를 검색하기 전에 우선 한 번 더 돌려 보세요.

preamble
% the [] argument is what runs for \section*, i.e. nothing
\AtBeginSection[]{%
  \begin{frame}[noframenumbering,plain]
    \tableofcontents[currentsection]
  \end{frame}%
}

% same idea one level down
\AtBeginSubsection[]{%
  \begin{frame}[noframenumbering,plain]
    \tableofcontents[currentsection,currentsubsection]
  \end{frame}%
}

객석엔 슬라이드, 손엔 노트 — 발표자 화면으로 가는 두 갈래 길

길은 둘입니다. 하나는 beamer만으로 끝나는 \setbeameroption{show notes on second screen=right}입니다. 이것은 PDF 자체를 가로로 두 배로 만듭니다. 프레임 하나짜리 덱으로 재 보면 페이지가 725.669 × 272.126 pt(= 256 × 96 mm)가 되고 쪽수는 1 그대로입니다. 곧 왼쪽 절반은 객석, 오른쪽 절반은 발표자용인 한 장이 나옵니다. =bottom으로 하면 세로로 두 배(362.835 × 544.252 pt)가 됩니다. 별도 프로그램은 필요 없고, 투영하는 쪽에서 왼쪽 절반만 잘라 낼 수 있으면 성립합니다. 다른 하나는 TeX Live 2024에 동봉된 pdfpc 패키지(v0.7.1, 2023/10/21)로, 노트와 발표 시간을 PDF의 메타데이터에 심습니다. \usepackage[overridenote]{pdfpc}라고 쓰면 \note{...}의 내용이 pdfpc용 노트가 되고, \pdfpcsetup{duration=20, lastminutes=3}이라고 쓰면 20분 카운트다운과 남은 3분 경고가 파일 자체에 따라다닙니다.

여기서 솔직히 밝혀 두면, PDF Presenter Console 자체는 TeX Live에 들어 있지 않습니다. pdfpc 패키지가 담고 있는 것은 메타데이터를 써 넣는 LaTeX 쪽뿐이고, 두 화면 표시를 담당하는 응용 프로그램(GPLv3+)은 따로 설치해야 합니다. 뒤집어 말하면, 현장에서 아무것도 설치할 수 없는 장소에서도 show notes on second screen이 만드는 가로로 넓은 PDF는 어떤 뷰어로든 열립니다. 보험 삼아 함께 뽑아 두는 데 드는 비용은 없습니다. 노트 본문을 쓰는 법(\note{...}의 문법, show notes로 노트 전용 페이지를 끼워 넣는 법)은 배포 자료 페이지에서 다룹니다.

preamble
% route 1: one PDF, twice as wide, no extra software
\setbeameroption{show notes on second screen=right}

% route 2: notes and a countdown clock stored inside the PDF
\usepackage[overridenote]{pdfpc}
\pdfpcsetup{duration=20, lastminutes=3}

긴 덱의 컴파일이 느릴 때 — \includeonlyframesdraft

지금 손보고 있는 프레임에 [label=cur]를 붙이고, 프리앰블에 \includeonlyframes{cur}라고 씁니다. 그 프레임만 출력되고 나머지는 조판까지는 되지만 버려집니다. 실측해 봅시다. 프레임 40개, 각 프레임에 3단계 오버레이와 TikZ 그림 하나씩을 얹은 덱은 121쪽이 되고, 이 Mac(TeX Live 2024)에서 한 번에 3.51초 걸렸습니다. \includeonlyframes{cur}를 더하면 3쪽, 1.39초가 되었습니다. 두 번 돌려야 한다는 점을 떠올리면 대기 시간은 약 7초에서 3초 미만으로 줄어듭니다. 클래스 옵션 draft는 다르게 작동합니다. 머리말·꼬리말·사이드바를 그냥 회색 띠로 갈아 끼웁니다(그 치환이 beamerbasemisc.sty에 적혀 있습니다). 쪽수는 121 그대로, 시간은 2.76초였습니다. 그림 위치를 다듬을 때는 draft, 한 장의 레이아웃을 마흔 번 들여다볼 때는 \includeonlyframes입니다.

latex
% preamble: build only the frame you are working on
\includeonlyframes{cur}

% body: the label must match
\begin{frame}[label=cur]{The slide I am fighting with}
  \includegraphics[width=\textwidth]{big-figure.pdf}
\end{frame}

비추는 PDF와 나눠 주는 PDF는 다르다 — 내보내기와 인쇄

발표용 PDF를 그대로 인쇄하면 안 됩니다. 이유는 치수입니다. 16:9 슬라이드는 160 × 90 mm, A4는 210 × 297 mm이므로 한 장에 한 슬라이드씩 찍으면 종이의 3분의 2가 하얗게 남고, 게다가 \pause를 세 번 쓴 프레임은 이미 네 쪽으로 불어나 있어 30분 발표가 120장짜리 종이 뭉치가 됩니다. 정공법은 \documentclass[handout]{beamer}pgfpages로 또 하나의 PDF를 만드는 것이고, 배포 자료 페이지에서 자세히 다룹니다. 소스를 전혀 건드리고 싶지 않다면 TeX Live에 동봉된 pdfjam으로 후처리할 수 있습니다. pdfjam --nup 2x2 --frame true --paper a4paper --landscape를 돌리자 실측으로 슬라이드 두 장이 A4 가로(841.89 × 595.276 pt) 한 쪽에 들어갔습니다.

terminal
# four slides to an A4 sheet, without touching the source
pdfjam --nup 2x2 --frame true --paper a4paper --landscape \
       --outfile talk-4up.pdf talk.pdf

# check what you actually produced before you print 40 copies
pdfinfo talk-4up.pdf | grep -E "Pages|Page size"
  • 화면비를 맨 처음 고정한다aspectratio=169는 폭을 늘리는 동시에 높이를 96 mm에서 90 mm로 줄입니다. 늦게 바꾸면 꽉 채운 프레임이 넘칩니다.
  • 반드시 두 번 컴파일한다 — 총 프레임 수도 절 표지도 .nav.toc를 거치므로 첫 회에는 2/1 같은 깨진 번호가 나옵니다.
  • 표지와 백업에 [noframenumbering] — 총수가 본편만 세게 됩니다. 부록을 독립시키려면 \appendix[appendixframenumber].
  • 15분 발표라면 내비게이션을 지운다\setbeamertemplate{navigation symbols}{} 한 줄. 긴 강의라면 반대로 남깁니다.
  • 현장에 도착하기 전에 PDF 세 개를 준비한다 — 발표용, show notes on second screen으로 만든 보험용, 그리고 배포용. 세 번째는 배포 자료 페이지로.
  • 글꼴이 포함됐는지 확인한다 — USB에 넣기 전에 pdfinfopdffonts를 통과시킵니다.