LaTeX 에서 단락을 만드는 것은 빈 줄입니다. 다만 빈 줄이 “단락 구분과 비슷한 무엇” 인 것은 아닙니다. TeX 의 입력 처리기는 빈 줄을 읽으면 그 자리에 \par 라는 명령 자체 를 끼워 넣습니다. 그러니 빈 줄과 \par 는 닮은 것이 아니라 같은 것입니다. \let\par\relax 을 해 놓고 빈 줄을 넣어 보면 단락이 전혀 바뀌지 않습니다——빈 줄이 던지던 명령을 무력화했으니 당연합니다. 이 한 가지를 붙들면 \\ 로 단락을 나누면 안 되는 이유도, \parindent 와 \parskip 의 역할도, 제목 바로 뒤 단락만 들여쓰지 않는 이유도 모두 같은 이야기의 연장으로 보입니다.
빈 줄은 \par 명령 그 자체
소스의 줄바꿈 자체는 출력에서 공백 하나에 지나지 않습니다. 세 줄로 나누어 쓴 문장도 이어진 채로 조판되고, 어디에서 줄을 접을지는 TeX 이 정합니다. 그러나 입력 처리기가 공백만 있는 줄 을 만나는 순간에는 공백이 아니라 \par 를 보냅니다. 여기서 두 가지가 따라 나옵니다. 첫째, 빈 줄을 두 줄로 하든 다섯 줄로 하든 결과는 같습니다. 두 번째 \par 가 도착할 때 TeX 은 이미 수직 모드에 있고, 수직 모드의 \par 는 아무 일도 하지 않기 때문입니다. 빈 줄을 겹쳐 여백을 벌어 보려 해도 1 밀리미터도 움직이지 않습니다. 둘째, 빈 줄과 \par 는 서로 바꿔 쓸 수 있습니다.
These three lines are broken
in the source, but they come out
as a single paragraph.
The blank line above started a new one.
Extra blank lines add nothing.
Still just one paragraph break.\par 를 굳이 적어야 하는 자리는 빈 줄을 쓸 수 없는 곳 입니다. 직접 만든 명령의 정의 안이나 인수 안에서는 빈 줄이 금지된 경우가 많아서, \section{...} 의 인수에 빈 줄을 넣으면 ! Paragraph ended before \@sect was complete. 로 멈춥니다. 수식 모드에서도 빈 줄은 허용되지 않아 ! Missing $ inserted. 가 납니다. 반대로 일반 본문에서 \par 를 늘어놓는 것은 가독성만 떨어뜨리므로, 원고에서는 빈 줄을 쓰는 것이 정석입니다.
\\ 가 단락을 끝내지 못하는 이유
\\ 는 “여기서 줄 을 끝낸다” 고 말할 뿐, 단락을 끝낸다고는 한마디도 하지 않습니다. 속을 보면 줄 끝을 \hfil 로 채우고 그 자리에서 강제로 접는 절차이고, \par 는 어디에도 나오지 않습니다. 그래서 단락은 그대로 이어집니다. 실측하면 차이가 뚜렷합니다. article(10pt)에서 새 단락의 첫 줄은 왼쪽 여백에서 15pt 안쪽부터 시작하지만, \\ 다음 줄은 왼쪽 여백에 딱 붙어 시작합니다——들여쓰기가 붙지 않는 것입니다. 단락 사이 여백 \parskip 도 들어가지 않습니다. “줄은 바뀌었는데 단락처럼 보이지 않는” 그 어정쩡함의 정체가 바로 이것입니다.
더 알기 쉬운 증거가 로그에 남습니다. 단락 마지막 줄 끝에 \\ 를 두면 TeX 은 Underfull \hbox (badness 10000) in paragraph at lines 3--4 라고 경고합니다. 무슨 일이 일어나느냐 하면, \\ 가 “여기서 끊어라” 고 명령한 직후 단락이 끝나 버려서 아무것도 없는 줄이 하나 남는 것입니다. \showboxdepth 를 올려 들여다보면 그 상자는 \hbox(0.0+0.0)x345.0——높이는 0, 너비는 본문 폭 전체인 빈 상자입니다. 반대로 아직 끊을 줄이 시작되지도 않은 자리(예: 단락 맨 앞)에서 \\ 를 쓰면 ! LaTeX Error: There's no line here to end. 가 납니다. 두 증상 모두 \\ 가 줄의 도구이지 단락의 도구가 아님을 반대편에서 보여 줍니다.
그렇다고 \\ 자체가 쓸모없는 것은 아닙니다. 대괄호로 길이를 더한 \\[2ex] 는 그 줄 뒤에 여분의 세로 여백을 넣으며(음수도 가능), 표나 별행 수식에서 줄 사이를 벌릴 때 흔히 쓰는 방법입니다. \\* 는 그 줄바꿈 자리에서 쪽 나눔을 금지해 두 줄을 같은 쪽에 둡니다. 단락 모드에서 \newline 은 \\ 와 완전히 같게 동작합니다. \linebreak 만 성격이 달라서, 그 자리에서 줄을 끊는 동시에 줄 안의 공백을 늘려 오른쪽 여백까지 양쪽 정렬합니다——단어 사이가 벌어지는 이유가 이것입니다. \linebreak[n](n 은 0 부터 4)로 강도를 지정할 수 있고, 4 는 강제, 1 은 “가능하면” 정도의 요청입니다. 표 안에서는 \\ 가 행 전체를 끝내고 \newline 은 셀 안에서만 줄을 끊는다는 차이도 기억해 두면 유용합니다.
% wrong: the second block is still the same paragraph
First thought about the topic.\\
Second thought about the topic.
% right: a blank line ends the paragraph
First thought about the topic.
Second thought about the topic.
% \\ is for lines that belong together
\begin{tabular}{ll}
Ada Lovelace & 1815 \\[2pt]
Alan Turing & 1912 \\
\end{tabular}\parindent 와 \parskip 의 기본값
단락의 모양을 정하는 길이는 둘뿐입니다. \parindent 는 첫 줄 들여쓰기 폭이고, \parskip 은 단락과 단락 사이에 들어가는 세로 여백입니다. 표준 클래스의 1 단 조판에서 \parindent 는 본문 10pt 에서 15pt, 11pt 에서 17pt, 12pt 에서 1.5em(약 17.6pt), 2 단 조판에서는 1em 입니다. 한편 \parskip 의 기본값은 0pt plus 1pt 입니다. 0 이 아니라 “0 이지만 1pt 까지 늘어나도 좋다” 는 고무 길이이며, 이 1pt 씩의 여유가 쌓여 TeX 이 쪽 아래를 맞출 약간의 여지를 얻습니다. 곧 표준 LaTeX 은 단락 경계를 들여쓰기만으로 나타내고 여백은 사실상 0 으로 두는 서적 조판의 방식을 따르고 있습니다.
개별 단락만 들여쓰기를 바꾸려면 \noindent 와 \indent 를 씁니다. 단락 첫머리에 \noindent 를 두면 그 단락의 들여쓰기가 사라지고, \indent 는 반대로 들여쓰기를 강제합니다(내부적으로는 \parindent 폭의 빈 상자를 하나 놓을 뿐입니다). 둘 다 단락 중간에서는 듣지 않습니다. 들여쓸지 여부는 첫 줄을 조판하기 시작하는 순간에 결정되며 나중에 되돌릴 수 없기 때문입니다. 가장 흔한 쓰임은 인용이나 그림표로 끊겼던 글을 다시 이어 갈 때 \noindent 를 두는 경우입니다.
제목 바로 뒤 단락만 들여쓰지 않는 이유
이것은 버그가 아니라 의도된 조판의 작법입니다. 들여쓰기는 본래 “여기서부터 새 단락이다” 라는 구분 신호 여서, 바로 앞에 다른 단락이 있어야 비로소 뜻을 가집니다. 제목 바로 뒤에는 구분할 앞 단락이 없으니 들여쓰기는 가리킬 대상이 없는 들여쓰기가 되어 버립니다——그래서 생략하는 것이 전통적인 약속입니다. 실측해 보아도 \section 다음 단락만 왼쪽 여백에 딱 붙어 시작하고, 그다음 단락부터는 15pt 의 들여쓰기가 돌아옵니다.
구현이 또 재미있습니다. LaTeX 은 “들여쓰기를 조판하지 않는” 것이 아닙니다. TeX 은 단락 머리에서 평소대로 \parindent 폭의 빈 상자를 놓고, 그다음 LaTeX 이 \everypar 안에서 {\setbox\z@\lastbox} 를 실행해 방금 놓인 그 상자를 도로 집어 갑니다. 어느 제목이 그렇게 하는지는 제목 명령에 적힌 “제목 앞 여백” 인수의 부호 로 정해집니다. \section 정의에 있는 -3.5ex 의 음수 부호가 그것으로, 커널은 음수를 읽으면 “다음 단락은 들여쓰지 말라” 로 해석합니다. 그리고 들여쓰기를 되살리는 indentfirst 패키지는 사실상 한 줄——\let\@afterindentfalse\@afterindenttrue 입니다. “거짓” 을 “참” 의 별칭으로 만들어, 들여쓰기를 끄는 스위치를 영영 누를 수 없게 하는 수법입니다.
\usepackage{indentfirst} % indent the first paragraph after a heading too
\setlength{\parindent}{2em} % a wider first-line indent
\section{A heading}
With indentfirst loaded, this paragraph is indented like the others.들여쓰기를 버리고 블록 단락으로: parskip 패키지
사양서나 사내 문서, 웹에서 온 자료에서는 들여쓰기를 없애고 단락을 여백으로 나누는 “블록 단락” 을 선호하는 일이 잦습니다. 단순하게 하려면 프리앰블에서 \parindent 를 0 으로 만들고 \parskip 에 여백을 주면 됩니다. 그런데 이 변경은 생각보다 넓은 범위를 함께 끌고 갑니다. 목차의 각 줄, 목록 항목 사이, 그림표 주변——LaTeX 은 여러 곳에서 \parskip 을 바탕 여백으로 재사용하기 때문에, 본문 단락뿐 아니라 그 모두가 동시에 늘어집니다.
이 일을 대신 떠맡는 것이 parskip 패키지 이고, \usepackage{parskip} 한 줄이면 끝입니다. TeX Live 2024 에 들어 있는 판(v2)은 \parindent 를 0pt 로, \parskip 을 .5\baselineskip plus 2pt 로 설정한 뒤, 제목 앞뒤 여백과 목차, 목록의 정의에 손을 대어 늘어난 만큼의 \parskip 을 도로 빼서 본래 설계값으로 되돌립니다. 이 모두를 손으로 따라잡는 것은 현실적이지 않습니다. plus 2pt 의 신축이 남아 있는 것도 의도적이며, TeX 이 더 나은 쪽 나눔 자리를 찾을 여지가 됩니다. 들여쓰기는 남긴 채 블록 단락으로 하고 싶다면 \usepackage[indent]{parskip}, 여백의 크기를 직접 정하고 싶다면 \usepackage[skip=10pt]{parskip} 처럼 옵션으로 건넬 수 있습니다.
% the naive version: also stretches the TOC, lists and float spacing
\setlength{\parindent}{0pt}
\setlength{\parskip}{\baselineskip}
% the maintained version: same look, without the collateral damage
\usepackage{parskip}
% \usepackage[indent]{parskip} % keep the first-line indent
% \usepackage[skip=10pt]{parskip} % choose the gap yourself단락 나눔, 쪽 나눔, 그리고 끊기지 않는 공백
단락을 바꾸는 일과 쪽을 바꾸는 일은 다른 조작입니다. \newpage 는 그 자리에서 쪽을 끝내고 다음으로 넘어가지만 단락을 나누지는 않습니다. \clearpage 는 한 걸음 더 나아가 대기 중인 플로트(그림과 표)를 모두 출력한 뒤 쪽을 바꿉니다. 단락을 바꾸려는 목적으로 이들을 쓰면 의도치 않은 쪽 나눔과 반쯤 빈 쪽 아래가 따라옵니다. 반대로 “끊기지 않게” 하는 도구도 있습니다. 물결표 ~ 는 줄바꿈되지 않는 공백으로, Fig.~3 이나 Dr.~Smith 처럼 양쪽을 반드시 같은 줄에 두어야 할 때 씁니다. \, 는 숫자와 단위 사이 등에 넣는 얇은 공백입니다. 둘 다 줄이나 단락을 끊는 명령이 아니라 공백의 성질을 지정하는 도구라고 보면 헷갈리지 않습니다.
원고를 쓸 때 단락을 다루는 법
소스의 줄바꿈은 출력을 바꾸지 않으므로, 그 자유를 통째로 편집의 편의 에 쓸 수 있습니다. 실무에서 흔한 약속은 “한 문장 한 줄”, 또는 절이나 구의 경계에서 접는 방식입니다. 줄이 짧을수록 버전 관리의 차이가 읽기 쉬워지고, 공저자가 검토할 때도 어느 문장을 고쳤는지 한눈에 보입니다. 그리고 빈 줄은 단락이 정말로 바뀌는 자리에만 둡니다. 소스의 줄바꿈을 지면의 줄바꿈 대신 쓰기 시작하면, 글꼴이나 여백을 바꾸는 순간 전부 무너집니다.
마감이 가까워지면 여백의 모양만 보고 빈 줄이나 \vspace 를 더하고 싶어집니다. 하지만 LaTeX 에서 단락은 곧 문서 구조입니다. 한 단락에 주장이 둘 들어 있지는 않은지, 그림표의 설명은 앞 단락과 뒤 단락 중 어디에 속하는지, 제목 바로 뒤에 짧은 도입이 필요한지——먼저 판단할 것은 그쪽입니다. 그런 뒤에 “단락 경계는 빈 줄, 같은 단락 안의 시각적 줄바꿈만 \\” 라는 규칙을 지키면, 교정을 몇 바퀴 돌아도 구조가 무너지지 않습니다.
- 본문 단락 — 주장이 바뀔 때 빈 줄을 넣고, 보기만을 위해 빈 줄을 늘리지 않습니다.
- 표지·주소·운문 — 의미상 하나인 항목을 여러 출력 줄로 보여야 할 때만
\\를 씁니다. - 단락 사이 여백이 마음에 걸릴 때 — 곳곳의
\vspace가 아니라parskip패키지로 문서 전체의 방침을 정합니다. - 들여쓰기가 마음에 걸릴 때 —
\parindent를 프리앰블에서 한 번만 설정하고, 제목 바로 뒤도 들여쓰고 싶으면indentfirst를 불러옵니다. - 쪽 나눔이 마음에 걸릴 때 — 단락 명령이 아니라 쪽 나눔 조정 명령이나 플로트 배치를 검토합니다.