LaTeX의 \footnote에는 누구나 한 번은 빠지는 함정이 있습니다. tabular 안에 쓴 각주는 본문이 어디에도 나오지 않습니다. 표에는 표지만 남고 주석 내용은 사라지며, 오류도 경고도 나오지 않습니다. 게다가 사라진 주석이 번호를 하나 먹기 때문에 다음 각주는 2가 아니라 3 부터 시작합니다. 재미있는 것은 LaTeX 자신이 이 함정에 빠져 있다는 점입니다. \maketitle은 저자 이름을 tabular 안에 조판하므로, 표준 클래스는 표제 블록 안에서만 \footnote를 \thanks로 슬쩍 바꿔 둡니다. 이 페이지에서는 \footnote와 \footnotemark・\footnotetext 짝, minipage 안의 별도 번호, footmisc를 통한 조정, \marginpar와 marginnote의 여백 주석, 그리고 미주까지를 실측하며 살펴봅니다.
각주의 기본 — \footnote 쓰는 법과 번호의 모양
\footnote{text} 라고 쓰면 그 자리에 위첨자 번호가 나오고 대응하는 내용이 그 페이지 아래에 조판됩니다. 번호는 footnote 카운터가 자동으로 올려 주므로 직접 매길 필요가 없습니다. 중요한 것은 놓는 위치 입니다. 표지는 주석을 붙일 단어 바로 뒤에 와야 하므로 \footnote는 그 단어 바로 뒤에, 사이에 공백 없이 씁니다. 단어와 명령 사이에 공백이나 줄바꿈이 있으면 그 간격이 본문에 남아 표지가 단어에서 떨어집니다. 구두점과의 관계에서는 보통 구두점 뒤 에 둡니다.
TeX was born in 1978.\footnote{Written by Donald Knuth.}
Its maths setting is still the reference.\footnote{arXiv accepts LaTeX sources.}
% forced number: does NOT step the footnote counter
See the note above.\footnote[1]{Same note, referenced twice.}특정 번호를 강제하려면 \footnote[num]{text} 라고 씁니다. 그 호출은 footnote 카운터를 올리지 않고 준 번호를 쓰므로, 두 곳에서 같은 주석을 가리킬 때 사용합니다. 번호의 모양 은 \thefootnote가 정합니다. 아라비아 숫자 대신 기호를 쓰려면 \renewcommand{\thefootnote}{\fnsymbol{footnote}}를 사용합니다. \fnsymbol은 1–9를 별표, 단검표 등에 대응시키므로 주석이 적은 문서에 알맞습니다. \alph, \roman도 같은 방식입니다. 장마다 번호를 다시 시작하려면 요즘 방식은 \@addtoreset을 건드리는 대신 chngcntr의 \counterwithin*{footnote}{chapter}입니다.
각주 영역의 모양을 정하는 길이들도 알아 두면 편합니다. TeX Live 2024의 article에서 실측하면, 주석 사이 최소 간격을 정하는 \footnotesep 은 6.65pt, 본문과 각주 영역 사이의 간격 \skip\footins 는 9.0pt plus 4.0pt minus 2.0pt 입니다. 둘을 나누는 짧은 가로선은 \footnoterule 이라는 매크로이며, \renewcommand{\footnoterule}{}로 비워 재정의하면 선을 없앨 수 있습니다.
표 안의 각주가 나오지 않는다 — tabular, caption, 제목의 함정
\footnote는 “바깥쪽 문단 모드”에서만 제대로 작동하기 때문 입니다. tabular 안은 셀이라는 다른 모드이므로 주석 본문이 페이지의 각주 보관함(\footins)으로 넘어가지 못하고 그대로 사라집니다. 실제로 조판해 보면 증상은 완전히 무음입니다. 아래 문서를 TeX Live 2024로 처리하면 pdftotext 출력은 Body text.1, A value2, B value 순으로 나오고 페이지 아래에는 1번 주석만 나옵니다. 2번의 내용은 어디에도 없고 로그에도 한 줄 나오지 않습니다.
\documentclass{article}
\begin{document}
Body text.\footnote{Real footnote at the page bottom.}
\begin{tabular}{ll}
A & value\footnote{This footnote is inside a tabular -- the text is lost.} \\
B & value \\
\end{tabular}
Next.\footnote{This one is numbered 3, not 2.}
\end{document}놓치기 쉬운 것은 번호의 어긋남 입니다. 사라진 주석도 카운터는 올리므로, 표 다음에 쓴 각주는 2가 아니라 3 이 됩니다. 본문만 읽으면 “2번은 어디 갔나” 하고 갸웃하게 됩니다. 같은 제약이 \caption이나 절 제목 명령의 인수에도 적용되는데, 그쪽 증상은 훨씬 요란합니다. \caption{Cap\footnote{...}} 는 오류로 멈추고 ! Argument of \@caption has an extra }. 에 이어 ! Paragraph ended before \@caption was complete. 를 냅니다. \caption의 인수는 표 목록으로 써 내보내지는 “움직이는 인수”라서, 취약한 \footnote를 보호 없이 둘 수 없기 때문입니다.
표지와 본문을 나누기 — \footnotemark와 \footnotetext, 그리고 \thanks
우회로는 표지와 본문을 서로 다른 명령으로 놓는 것 입니다. 표나 캡션 안에서는 \footnotemark로 표지만 내보내고, 거기서 빠져나온 본문 쪽에서 \footnotetext{…}에 내용을 씁니다. 번호가 어긋나지 않도록 \footnotemark[7]과 \footnotetext[7]{…}처럼 명시적으로 맞추는 편이 안전합니다.
\footnotemark— 그 자리에 표지(번호)만 놓습니다. 인수가 없으면footnote카운터를 1 올리고,\footnotemark[num]은 카운터를 올리지 않고 그 번호를 사용합니다.\footnotetext{text}— 각주 본문만 페이지 아래에 놓습니다.\footnotemark뒤의, 바깥쪽 문단 모드인 자리에 씁니다.\footnotetext[num]{text}로 번호를 맞출 수 있습니다.
\begin{tabular}{ll}
Item A & value\footnotemark[1] \\
Item B & value \\
\end{tabular}
\footnotetext[1]{This value is provisional.}이 “표지와 본문을 나누는” 형태는 LaTeX 본체에도 박혀 있습니다. latex.ltx의 \thanks 정의가 아래인데, 내용은 바로 \footnotemark 와 나중에 실행되는 \footnotetext[현재 번호] 의 조합입니다. 그리고 article.cls의 \@maketitle에는 \let \footnote \thanks 라는 한 줄이 있습니다. 표제 블록의 저자 이름은 \begin{tabular}[t]{c} 안에 조판되므로 거기서 맨 \footnote를 쓰면 본문이 사라집니다. 그래서 클래스가 미리 손을 써서 표제 안의 \footnote를 \thanks로 바꿔 놓은 것입니다. 이 페이지 첫머리의 함정을 피하는 방법을, LaTeX 자신이 쓰고 있습니다.
\DeclareRobustCommand\thanks[1]{\footnotemark
\protected@xdef\@thanks{\@thanks
\protect\footnotetext[\the\c@footnote]{#1}}%
}실무에서는 \title이나 \author에 붙이는 소속, 감사의 말, 연락처를 모두 \thanks{…}에 씁니다. 번호 대신 기호를 쓰고 싶다면 \maketitle 앞에 \renewcommand{\thefootnote}{\fnsymbol{footnote}}를 두고 그 직후에 되돌리는 것이 정석입니다. 표준 클래스는 \maketitle 끝에서 \setcounter{footnote}{0}을 실행하므로 본문의 각주는 다시 1부터 시작합니다.
minipage 안의 각주는 a, b, c가 된다
minipage 안에서는 \footnote가 다른 카운터 mpfootnote로 바뀌고 그 표지가 소문자 알파벳 이 되기 때문입니다. 실측하면 minipage에 넣은 주석은 본문의 1, 2와 무관하게 a 로 조판되었고, 페이지 아래가 아니라 그 minipage 바로 밑 에 놓였습니다. 즉 minipage는 “작은 독립된 페이지”처럼 행동합니다. 숫자로 되돌리려면 \renewcommand{\thempfootnote}{\arabic{mpfootnote}}를 씁니다.
이 성질은 표의 주석을 “표 아래”에 두고 싶을 때 그대로 쓸 수 있습니다. tabular를 minipage로 감싸면 \footnote가 사라지지 않고 표 바로 아래에 조판됩니다. 다만 그때는 페이지 각주와는 다른 번호 체계 가 된다는 점을 감수해야 합니다. 표의 주석을 제대로 다루고 싶다면 전용 패키지 threeparttable(표・주석・캡션을 세 부분으로 정리)이나 tabularray의 talltblr 환경 쪽이 체재가 고릅니다.
footmisc — 페이지마다 번호 되돌리기, 기호로 바꾸기, 한 문단으로 흘리기
표준 각주의 동작을 세밀하게 바꾸고 싶으면 \usepackage[options]{footmisc}를 읽어 들입니다. TeX Live 2024 동봉판은 2023/07/05의 v6.0f입니다. 옵션은 조합해 쓸 수 있으며, 예를 들어 [perpage,symbol]로 조판하면 실측에서 1페이지는 ∗ † ‡, 2페이지에서 다시 ∗ † 로 돌아갔습니다. 번호 초기화와 기호 표지가 함께 작동한 것입니다.
| 옵션 | 효과 |
|---|---|
perpage | 페이지마다 번호를 초기화해 각 페이지에서 1부터 다시 셉니다. |
symbol | 번호 대신 기호(∗ † ‡ …)로 표시합니다. symbol*은 본문 안의 표지만 기호로 만듭니다. |
bottom | 페이지가 짧아도 각주를 지면 맨 아래로 밀어 내립니다. |
para | 여러 주석을 줄을 바꾸지 않고 하나의 문단으로 이어 흘립니다. |
multiple | 이웃한 표지를 감지해 사이에 구분을 넣어 깔끔하게 늘어놓습니다. |
hang | 표지를 왼쪽으로 내밀고 주석의 둘째 줄 이후를 매달아 정렬합니다. |
flushmargin | 주석 본문을 들여쓰지 않고 판면 왼쪽 끝에 맞춥니다. |
norule | 본문과 각주를 나누는 가로선을 그리지 않습니다. splitrule은 나뉜 주석에 별도의 선을 마련합니다. |
stable | 제목 같은 움직이는 인수 안에서도 \footnote가 깨지지 않게 합니다. |
marginal | 표지를 판면 바깥, 여백 쪽으로 내밀어 놓습니다. |
% per-page numbering, notes pushed to the bottom, adjacent marks separated
\usepackage[perpage,bottom,multiple]{footmisc}
% width of the gap between the mark and the note body
\setlength{\footnotemargin}{1.8em}footmisc는 여백 쪽에도 손이 닿습니다. 표지와 주석 본문 사이의 간격, 곧 각주 자체의 왼쪽 여백은 이 패키지가 제공하는 길이 \footnotemargin 으로 조정합니다. 부동체와의 앞뒤 관계를 정하는 bottomfloats, abovefloats, belowfloats, 주석을 판면 옆에 두는 side, 주석을 한쪽 정렬로 조판하는 ragged도 있습니다. 옵션 이름 전체는 footmisc.sty의 \DeclareOption 줄에서 볼 수 있습니다.
여백에 주석 놓기 — \marginpar와 marginparwidth
본문 옆에 짧은 주석을 내려면 \marginpar{text} 를 씁니다. 쓴 행의 높이에서 여백에 작게 조판됩니다. 양면 조판(twoside)에서는 바깥쪽 여백 에 나오며 왼쪽 페이지와 오른쪽 페이지에서 자동으로 쪽이 바뀝니다. 좌우 문구를 다르게 하고 싶다면 \marginpar[왼쪽]{오른쪽} 이라고 씁니다. 대괄호의 [왼쪽]은 주석이 왼쪽 여백에 올 때, 중괄호의 {오른쪽}은 오른쪽 여백에 올 때 쓰입니다. 나오는 쪽을 뒤집으려면 \reversemarginpar, 기본으로 되돌리려면 \normalmarginpar를 씁니다.
여백 주석의 치수는 세 길이가 정합니다. TeX Live 2024에서의 실측값은 다음과 같습니다. \marginparwidth는 article과 report에서 65pt, book에서 125pt 이고, article에 twoside를 붙이면 121pt 로 뜁니다. 본문과 주석 사이 간격 \marginparsep은 11pt, 주석끼리 밀어내는 최소 간격 \marginparpush는 5pt 입니다. 65pt는 10pt 본문에서 여섯 글자 남짓밖에 들어가지 않으므로, 손대지 않은 article에서 긴 여백 주석을 쓰면 거의 확실히 한 단어씩 세로로 쌓입니다. 여백 주석을 본격적으로 쓸 생각이라면 \setlength{\marginparwidth}{...}나 geometry로 여백부터 다시 설계해야 합니다.
\marginpar에는 강한 제약이 있습니다. 내부적으로 부동체로 처리되므로 figure나 table 안, 각주 안, 다른 \marginpar 안에서는 쓸 수 없습니다. figure 안에 써서 처리하면 ! LaTeX Error: Float(s) lost. 로 멈춥니다. 문단도 하나만 들어갑니다. 게다가 가까운 행에 여백 주석이 여럿 놓이면 서로 밀치게 되고, LaTeX은 위치를 옮긴 뒤 LaTeX Warning: Marginpar on page 1 moved. 라고 보고합니다. 이 경고가 나오면 주석이 의도한 행에서 떨어져 인쇄되고 있다는 신호입니다.
marginnote — 부동체가 아닌 여백 주석, 다만 컴파일 두 번
\marginpar의 제약을 피하고 싶다면 marginnote 패키지의 \marginnote{text} 를 씁니다. 부동체를 쓰지 않으므로 \marginpar가 ! LaTeX Error: Float(s) lost. 로 죽는 figure 안에서도 통합니다. 실제로 같은 문서로 시험해 보니 \marginpar 판은 오류로 멈췄고 \marginnote 판은 아무 일 없이 통과해 여백에 주석을 냈습니다. \marginpar와 마찬가지로 \marginnote[왼쪽]{오른쪽} 으로 좌우 문구를 나눌 수 있고 \reversemarginpar도 존중됩니다. TeX Live 2024 동봉판은 1.4b(2018/08/09)입니다.
다만 대가가 있습니다. marginnote는 두 번 컴파일하지 않으면 아무것도 나오지 않습니다. 첫 실행의 로그에는 Package marginnote Info: xpos seems to be \@mn@currxpos 와 LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. 가 나란히 찍히고 PDF의 여백은 비어 있었습니다. 주석이 좌우 어느 쪽에 올지를 상호 참조 장치로 정하기 때문입니다. 두 번째 실행을 돌려야 비로소 여백에 글자가 나타납니다.
또 \marginnote에는 중괄호 뒤 에 놓는 세 번째 인수, 곧 세로 방향 이동량 이 있습니다. 형식은 \marginnote[왼쪽]{오른쪽}[이동량] 입니다. 실측하면 [-3\baselineskip]을 준 주석은 본문보다 세 줄 위 에, [3\baselineskip]을 준 주석은 세 줄 아래 에 놓였습니다. 음수는 위로, 양수는 아래로입니다. 이 기능은 사실상 필수입니다. \marginnote는 쓴 행의 높이에 그대로 놓을 뿐이고 \marginpar와 달리 충돌 회피를 전혀 하지 않기 때문입니다. 주석이 겹치면 이 인수로 손수 흩뜨립니다. \marginnote는 페이지를 넘겨 나뉠 수도 없으므로, 여백에 긴 글을 흘리고 싶다면 다른 설계(단 구성이나 방주 중심의 클래스)를 생각해야 합니다.
\usepackage{marginnote}
% ...
A note beside the text.\marginnote{This is a margin note.}
% negative offset moves the note up by three lines
Another line.\marginnote{Nudged upwards}[-3\baselineskip]
% marginnote works here; \marginpar would give "Float(s) lost."
\begin{figure}[h]
Some figure.\marginnote{Inside a float.}
\caption{A figure with a margin note}
\end{figure}장 끝 주석과 권말 주석 — endnotes와 enotez
주석을 페이지 아래가 아니라 장이나 책 끝에 모으고 싶을 때 는 각주가 아니라 미주를 씁니다. 표준 도구는 endnotes 패키지로, \endnote{text} 라고 쓰고 모아 낼 자리에 \theendnotes 를 두기만 하면 됩니다. 실측에서는 미주 둘을 쓴 문서가 본문에 1과 2 표지를 남기고, \theendnotes 자리에 “Notes”라는 제목과 두 주석을 나란히 출력했습니다. 제목 문구는 \notesname으로 바꿉니다. 인문학 서적이나, 주석이 많아 지면이 검어지는 문서에서 선택됩니다.
더 현대적인 선택지는 expl3로 작성된 enotez 로, 주석 묶기, 제목 체재, 목록 서식 등을 키=값으로 세밀하게 지정할 수 있습니다. 사용 기준은 단순합니다. 기존 문서에 주석 몇 개를 더하는 정도면 endnotes, 장마다 주석을 묶거나 체재를 꼼꼼히 만들어야 하면 enotez 입니다. 어느 쪽을 고르든, 주석을 뒤로 보내면 독자가 본문과 주석 사이를 오가야 한다는 점은 잊지 마십시오. 섞어 쓰는 것도 가능합니다. 정말 필요한 주석은 각주로 남기고 출처만 뒤로 보내면 됩니다.