LaTeX의 쪽 나눔 명령 가운데 \newpage와 \pagebreak의 차이는 latex.ltx 안에서 \vfil 하나뿐입니다. \newpage는 \vfil \penalty -10000이고, \pagebreak는 \vfil이 없는 같은 \penalty -10000입니다. 무한히 늘어나는 이 공백이 있느냐 없느냐만으로, 남은 부분을 백지로 버릴지 본문을 아래 여백까지 늘일지가 갈립니다. \clearpage는 한 걸음 더 나아가 \penalty -10001을 놓습니다. TeX의 무한대보다 딱 1 큰 값이며, 이것이 밀려 있던 플로트를 토해 내게 하는 장치입니다. 이 페이지에서는 \pagebreak[n], \newpage, \clearpage, \cleardoublepage, \nopagebreak[n], \samepage, needspace, \enlargethispage를 실제로 조판해 측정한 결과와 함께 다룹니다.
다루는 층을 분명히 해 둡니다. 이 페이지는 그 자리에서 쪽 나눔에 개입하는 명령을 맡습니다. 문서 전체의 리듬——\widowpenalty와 \clubpenalty(표준 클래스에서 둘 다 기본값 150), \raggedbottom과 \flushbottom의 선택, 플로트가 차지할 수 있는 비율, 그리고 “이 쪽이 왜 여기서 끝났는가”의 진단——은 “쪽 나눔 설계와 진단” 페이지가 깊이 다룹니다. 그쪽의 원칙은 여기서도 그대로입니다. 쪽 나눔 손질은 마지막에. 글자 하나만 더해도 이후의 끊는 자리가 전부 밀리므로, 본문이 굳기 전에 \newpage를 뿌리면 고칠 때마다 이상한 여백이 생깁니다. 아래 명령들은 원고가 굳은 뒤의 마무리 도구라고 생각하시면 됩니다.
\pagebreak와 \newpage의 차이: 남은 부분을 늘일 것인가, 버릴 것인가
둘 다 그 자리에서 쪽을 끝내지만, 남은 세로 공백을 다루는 방식이 정반대입니다. \newpage는 \vfil을 놓은 뒤 끊으므로 무한히 늘어나는 그 공백이 남은 것을 전부 빨아들여 쪽 아래쪽은 백지 그대로 다음으로 넘어갑니다. \pagebreak은 \vfil을 놓지 않으므로 쪽에 원래 있던 행간 등의 글루가 늘어나 본문이 아래 여백까지 퍼집니다. 고르는 기준은 이렇습니다. 장의 끝처럼 “여기서 끊는다”면 \newpage, 행간이 조금 벌어지더라도 지면을 채우고 싶다면 \pagebreak. 다만 \pagebreak에는 부작용이 있어 문단 도중에도 끊깁니다.
\pagebreak[n]의 n은 줄 쪽의 \linebreak[n]과 완전히 같은 장치를 씁니다. latex.ltx의 \@getpen을 지나 article.cls의 값에 따라 0・51・151・301・10000으로 번역됩니다. \pagebreak은 음수로, \nopagebreak은 양수로 넣으며, 인수를 생략하면 둘 다 4, 곧 ∓10000입니다. [0]은 “여기서 끊어도 좋다”는 허가, 명령은 [4]뿐이라고 기억하면 충분합니다. 한편 \flushbottom이 걸린 문서(twoside article이나 기본 book)에서 \pagebreak을 쓰면 다 채우지 못해 Underfull \vbox (badness 10000) has occurred while \output is active가 나올 수 있습니다. 실측에서도 twoside article의 문단 도중에 \pagebreak을 놓자 이 줄이 로그에 나타났습니다. 반면 \raggedbottom 문서에서는 쪽이 짧게 끝나도 되므로 경고가 나지 않습니다.
\clearpage와 \newpage의 차이: 그림이 다음 절에 남겨지는 이유
\clearpage은 대기 중인 플로트(figure와 table)를 모두 출력한 뒤 끊고, \newpage는 출력하지 않습니다. 이 차이가 얼마나 큰지는 실측이 분명히 보여 줍니다. 본문・그림 A・그림 B・\section* 순으로 놓인 문서를 세 가지로 조판해 보았습니다. 아무것도 넣지 않으면 1쪽에 절 제목과 그림 A, 2쪽에 그림 B. \newpage를 넣으면 여전히 두 쪽이지만 2쪽에 절 제목과 그림 B가 함께 놓입니다. “그림 다음에 와야 할” 절이 그림 B보다 앞으로 나와 버린 것입니다. \clearpage를 넣으면 세 쪽이 되어 1쪽에 그림 A, 2쪽에 그림 B, 그리고 3쪽에 비로소 절 제목이 옵니다. 도판의 순서가 의미를 갖는 문서라면 절의 경계에 놓아야 할 것은 \clearpage입니다.
\begin{figure}[b]\centering\rule{4cm}{3cm}\caption{Figure A}\end{figure}
\begin{figure}[b]\centering\rule{4cm}{3cm}\caption{Figure B}\end{figure}
% \newpage -> heading and Figure B end up together on page 2
% \clearpage -> Figure A p.1, Figure B p.2, heading p.3
\clearpage
\section*{This section must come after its figures}장치는 짧은 정의 그 자체입니다. \clearpage은 \newpage를 부른 뒤 \write\m@ne{}, 빈 \vbox{}, 그리고 \penalty -\@Mi를 놓습니다. \@Mi는 10001, 곧 TeX의 무한대보다 1 큰 값이며, 이것이 출력 루틴을 한 번 더 돌려 밀려 있던 플로트 대기열을 비웁니다. 여기서 한 가지 주의할 점. 두 단 조판에서 \newpage는 “단”만 끝냅니다. 실측에서도 twocolumn article에서 \newpage를 쓰자 그 뒤의 글이 같은 쪽 오른쪽 단으로 내려갔고 쪽은 바뀌지 않았습니다. 같은 문서에서 \clearpage를 쓰자 비로소 다음 쪽으로 넘어갔습니다. 두 단에서 쪽을 바꾸려면 \clearpage나 \cleardoublepage를 쓰세요.
\cleardoublepage: 장을 반드시 오른쪽 쪽에서 시작하기
\cleardoublepage은 \clearpage을 실행한 다음, twoside일 때에 한해 다음 본문이 홀수(오른쪽) 쪽에서 시작하도록 백지를 끼워 넣습니다. 정의는 그대로 읽어 내려갈 수 있을 만큼 짧습니다. \clearpage 뒤에 “twoside이고 쪽 번호가 짝수면 \hbox{}\newpage”라는 것뿐입니다. 이 \hbox{}는 “내용이 있는 쪽”처럼 보이게 하는 장치로, 이것이 없으면 빈 쪽은 출력되지 않고 사라집니다. 두 단 조판이면 이 절차를 두 번 반복합니다. 제본된 책에서 장이 늘 펼침면의 오른쪽에서 시작하는 것이 이 장치 덕분이며, book 클래스의 \chapter가 기본으로 이를 부릅니다. 단면 인쇄(oneside)에서는 조건이 성립하지 않으므로 \clearpage과 똑같이 동작합니다.
여기서 쪽을 끊지 않기: \nopagebreak은 듣고 \samepage은 듣지 않는다
\samepage은 잇따른 문단을 한 덩어리로 붙들어 두지 못합니다. 실측이 가차 없으므로 먼저 적습니다. 쪽 끝 가까이에 한 줄짜리 문단 여섯 개를 늘어놓은 문서에서, 손대지 않으면 BLOCK1~4가 1쪽, BLOCK5・6이 2쪽으로 갈립니다. 이 여섯 문단을 \begin{samepage} … \end{samepage}로 감싸도, 선언으로 {\samepage …}처럼 묶어도 갈리는 방식은 완전히 같았습니다. 정의를 보면 이유를 알 수 있습니다. \samepage은 \interlinepenalty, \predisplaypenalty, \postdisplaypenalty, \interdisplaylinepenalty, \@beginparpenalty, \@endparpenalty, \@itempenalty, \@secpenalty, \interfootnotelinepenalty 아홉 개를 \@M(10000)으로 만드는 선언일 뿐이고, 문단과 문단 사이의 이음매에는 이 아홉 가운데 어느 것도 관여하지 않기 때문입니다. 문단 내부, 목록 항목 사이, 별행 수식의 앞뒤는 지켜지지만 보통의 문단 바꿈은 그대로 통과합니다.
그 한 자리를 지키고 싶다면 \nopagebreak[n]이 정답입니다. 같은 실험에서 끊겨 있던 BLOCK4와 BLOCK5의 경계에 \nopagebreak을 놓자 끊는 자리가 3과 4 사이로 옮겨 갔고, BLOCK4는 BLOCK5・6과 함께 다음 쪽으로 갔습니다. 문단 바로 앞에 두든 바로 뒤에 두든 결과는 같았습니다. \nopagebreak은 그 자리에 페널티를 놓을 뿐이므로(수평 모드에서는 \vadjust를 거쳐, 수직 모드에서는 직접) “찢으면 안 되는 이음매”가 분명할 때 가장 확실합니다. 제목과 그 바로 뒤의 본문 사이, 그림과 설명글 사이처럼 이음매가 하나로 정해지는 자리에 쓰세요. 반대로 “이 한 덩어리를 몇 줄 통째로”라는 요구에는 다음의 needspace가 더 맞습니다.
% Measured: six one-line paragraphs at the foot of a page split 4 | 5.
% \samepage around all six changes nothing.
% \nopagebreak at the seam moves the split to 3 | 4.
BLOCK4\par\nopagebreak
BLOCK5\par
% Reserve room instead of forbidding a break:
\usepackage{needspace}
\needspace{6\baselineskip}
% Or make just this one page one line taller:
\enlargethispage{\baselineskip}needspace 패키지: “여섯 줄이 더 안 들어가면 쪽을 넘겨라”
\needspace{6\baselineskip}은 “여기서 쪽 아래까지 여섯 줄 분량의 높이가 남아 있지 않으면 지금 쪽을 넘겨라”라는 조건부 명령입니다. \samepage이 실패한 실험에 \usepackage{needspace}를 더하고 여섯 문단 바로 앞에 \needspace{6\baselineskip}을 놓자 BLOCK1부터 6까지 전부 2쪽으로 옮겨 갔습니다. 금지하는 대신 자리를 확보한다는 발상이라 \samepage처럼 “지키지 못하면서 잠자코 있는” 일이 없습니다. 길이는 \baselineskip의 배수로 쓰는 편이 직관적이지만 pt나 cm도 됩니다. 더 엄밀하게 확보하는 \Needspace{...}, \flushbottom 아래에서 짧은 쪽의 아래를 맞추는 \Needspace*{...}도 있으며 뒤의 둘은 문단 사이에서 씁니다. 제목이 쪽 끝에 한 줄만 남겨지는 것을 막는 가장 솔직한 도구입니다.
\enlargethispage: 이 쪽만 한 줄 키우기
\enlargethispage{\baselineskip}은 현재 쪽의 \textheight만 일시적으로 늘려 한 줄을 더 담게 합니다. 효과는 셀 수 있습니다. 한 줄짜리 문단 120개를 흘려 넣은 article에서, 손대지 않으면 1쪽의 마지막이 LINE46이었습니다. \enlargethispage{\baselineskip}을 더하면 LINE47, {2\baselineskip}이면 LINE48, 음수 길이 {-\baselineskip}이면 거꾸로 LINE45까지 줄어듭니다. 요구한 그대로입니다. 구현은 놀랄 만큼 솔직합니다. latex.ltx는 \@kludgeins라는 이름의 인서트에 음수 \vskip을 밀어 넣어 지면의 목표 높이를 속입니다. LaTeX 스스로 이 장치를 kludge(임시변통)라고 이름 붙였다는 점에 이 명령의 성격이 드러납니다. 행간을 조여서라도 한 줄을 밀어 넣어야 한다면 별표가 붙은 \enlargethispage*{\baselineskip}을 씁니다.
이 명령이 나설 자리는 대개 홀로 남은 줄의 뒤처리입니다. 문단의 마지막 한 줄만 다음 쪽 첫머리에 남겨졌을 때(위도), \enlargethispage{\baselineskip}으로 그 쪽을 한 줄 높이면 떠난 줄이 불려 돌아와 해소됩니다. \widowpenalty를 10000으로 올려 문서 전체에서 금지하는 방법도 있지만, 그 대가——쪽 아래가 맞지 않게 되고 \flushbottom에서는 Underfull \vbox가 나오는 것——는 “쪽 나눔 설계와 진단”에서 실측으로 비교되어 있습니다. 마지막 공정의 정석은 이렇습니다. 전역 설정으로 대세를 정하고, 남은 몇 군데만 \enlargethispage로 손보기. 손으로 넣은 한 줄에는 반드시 주석을 붙이세요. 본문을 고친 뒤 그 한 줄이 해로워졌는지 판단할 수 있는 것은 주석뿐입니다.
| 명령 | 하는 일 | 주의 |
|---|---|---|
\pagebreak[n] | 페널티 −(0/51/151/301/10000)를 넣습니다. \vfil이 없어 본문이 아래까지 늘어납니다 | 문단 도중에도 끊깁니다. \flushbottom에서는 Underfull \vbox가 날 수 있습니다 |
\newpage | \vfil \penalty -10000. 남은 부분을 백지로 두고 넘어갑니다 | 두 단에서는 단만 끝냅니다. 플로트는 내보내지 않습니다 |
\clearpage | \newpage에 \penalty -10001을 더해, 대기 중인 플로트를 모두 내보낸 뒤 끊습니다 | 절의 경계에 두세요. 본문 도중에 두면 큰 여백이 남습니다 |
\cleardoublepage | \clearpage 뒤, twoside면 홀수(오른쪽) 쪽에서 다시 시작하며 필요하면 백지를 넣습니다 | oneside에서는 \clearpage과 같습니다. 두 단에서는 절차를 두 번 수행합니다 |
\nopagebreak[n] | 그 자리에 페널티 +(0/51/151/301/10000)를 넣습니다 | 이음매가 하나로 정해질 때 가장 확실합니다. 제목과 본문 사이 등 |
\samepage | 아홉 개 페널티를 10000으로 만드는 선언(같은 이름의 환경으로도 사용 가능) | 문단과 문단 사이에는 듣지 않습니다. 실측에서 BLOCK4/5의 끊김을 막지 못했습니다 |
\needspace{N\baselineskip} | 아래까지 N 줄 분량이 남아 있지 않으면 지금 쪽을 넘깁니다(needspace 패키지) | 금지가 아니라 확보. 제목을 첫 줄들과 함께 두는 데 최적입니다 |
\enlargethispage{\baselineskip} | 이 쪽의 \textheight만 일시적으로 늘립니다. 실측에서 LINE46이 LINE47이 되었습니다 | 음수 길이면 줄어듭니다. 별표형은 행간을 조여 밀어 넣습니다 |
쪽 조판의 마지막 공정: 무엇을 어떤 순서로 볼 것인가
쪽 조판 점검은 본문・도판・참고문헌이 모두 갖춰진 뒤에 시작합니다. 순서가 있습니다. 먼저 플로트가 밀려 있지 않은지 보고, 필요하면 \clearpage으로 흘려보냅니다. 다음으로 쪽 끝에 남겨질 것 같은 제목을 needspace로 지킵니다. 마지막으로 눈에 띄는 홀로 남은 줄만 \enlargethispage로 하나씩 손봅니다. \newpage를 뿌리는 것은 장의 구성이 정말로 그것을 요구하는 자리에만 하세요. 손댄 자리에는 이유를 주석으로 남기세요. 반년 뒤의 자신은 그 \enlargethispage가 왜 거기에 있는지 절대 기억하지 못합니다.
- 장・부록의 경계에는
\clearpage이나\cleardoublepage. 도판이 다음 부로 흘러드는 것을 막습니다. 두 단에서는\newpage로는 부족합니다. - 제목 앞에는
\needspace{3\baselineskip}정도. 금지가 아니라 자리 확보이며,\samepage은 믿지 마세요. - 이음매가 하나로 정해지면
\nopagebreak. 그림과 그 설명, 제목과 그 첫 문단 등. - 홀로 남은 한 줄에는
\enlargethispage{\baselineskip}. 여백의 양과 쪽 아래 정렬을 둘 다 본 뒤에 넣으세요. - 손으로 넣은 쪽 나눔에는 반드시 주석을. 본문을 고친 뒤 뺄지 말지 판단할 수 있는 것은 그 한 줄뿐입니다.