줄 간격(setspace)

“더블 스페이스(이중 행간)로 제출할 것.” 투고 규정에 그렇게 적혀 있다면, 그것은 타자기의 치수를 말하는 것입니다. 12포인트 활자를 찍는 타자기는 한 줄마다 종이를 12포인트씩 보냈고, 다이얼을 2에 맞추면 24포인트를 보냈습니다. 편집자가 줄 사이에 교정을 적어 넣을 수 있도록 생긴 실무 관행이었습니다. LaTeX에서 줄간격을 넓힐 때 쓰는 setspace 패키지는 지금도 그 치수를 그대로 재현합니다. 그래서 \doublespacing은 무언가를 두 배로 만드는 명령이 아니라 행간을 글자 크기의 정확히 두 배 로 맞추는 명령입니다. 이 페이지에서는 \baselineskip이라는 길이, \linespread가 듣지 않는 이유, 그리고 setspace가 실제로 몇 포인트를 만들어 내는지를 모두 실측값으로 따라갑니다.

줄간격의 정체는 \baselineskip이라는 길이

LaTeX이 말하는 줄간격은 한 줄의 베이스라인(글자가 놓이는 보이지 않는 선)에서 다음 줄의 베이스라인까지의 거리이며, \baselineskip이라는 길이에 담겨 있습니다. 글자와 글자 사이의 틈이 아니라 한 줄의 이송량 을 잰다는 점이 핵심이어서, 글자를 키우면 간격도 자동으로 커집니다. 10pt article에서 실측하면 \baselineskip은 정확히 12.0pt, 본문 폭 \textwidth345.0pt입니다. “행간은 글자 크기의 1.2배”라는 익숙한 기준은 이 10pt에서만 정확히 들어맞습니다.

클래스 옵션실제 글자 크기baselineskip비율
10pt10pt12.0pt1.200
11pt10.95pt(11pt이 아닙니다)13.6pt1.242
12pt12pt14.5pt1.208

표의 두 번째 줄에는 알아 두면 좋은 사실이 숨어 있습니다. 11pt 옵션이 실제로 고르는 글자는 11pt가 아니라 10.95pt입니다. LaTeX에 \f@size를 물으면 10.95라고 답합니다. Computer Modern의 설계 크기가 그렇기 때문이며, 행간만 깔끔하게 13.6pt로 반올림되어 있습니다. 이 페이지 뒤쪽에 나오는 setspace의 어중간해 보이는 배율은 부분적으로 이 0.05pt의 어긋남을 흡수하기 위한 것입니다.

\linespread가 듣지 않는다 — 프리앰블에서는 되고 본문에서는 안 되는 이유

\linespread{1.5}는 쓴 자리에서 아무 일도 일으키지 않습니다. 다음에 글꼴이 다시 선택되기 전까지 \baselineskip은 1pt도 움직이지 않습니다. 실측하면 이렇습니다. 기본값 12.0pt, \linespread{1.5} 직후에도 12.0pt, \selectfont를 부르는 순간 18.0pt. 구조를 보면 이유가 분명합니다. \linespread{x}의 내용은 그대로 \renewcommand{\baselinestretch}{x}, 곧 어떤 배율을 쓸지 적어 둔 쪽지를 고쳐 쓸 뿐 입니다. 그 쪽지를 실제 길이로 바꾸는 일은 \selectfont의 몫으로, \selectfont는 지금 유효한 배율과 \baselinestretch를 맞대어 보고 서로 다를 때만 행간을 다시 계산합니다.

이로써 증상이 나타나는 방식도 설명됩니다. 프리앰블에 쓴 \linespread가 듣는 이유는 \begin{document}에서 LaTeX이 \normalsize를 실행하며 바로 그 자리에서 글꼴을 다시 고르기 때문입니다. 본문 안에 쓰면 직접 \selectfont를 불러야 하고, \Large 같은 크기 변경이나 \bfseries 같은 굵기 변경도 같은 역할을 합니다(모두 내부적으로 \selectfont를 지나기 때문입니다). 실측에서도 \linespread{2} 뒤에 \large만 두었더니 28.0pt가 되었습니다. 다만 일부 구간만 바꿀 때는 단락을 닫는 \par를 그룹 안쪽에 두는 것 을 잊지 마세요. \par가 그룹 밖으로 떨어지면 그 단락은 옛 행간으로 조판됩니다. 이 함정 자체는 「글자 크기를 바꾸는 명령」 페이지가 자세히 다룹니다.

latex
% In the preamble: applies to the whole document.
\linespread{1.3}          % measured: baselineskip 12.0pt -> 15.6pt

% In the body: nothing happens until the font is re-selected.
\linespread{1.6}          % baselineskip is STILL 12.0pt here
\selectfont               % now it becomes 19.2pt

% One paragraph only. Note the \par INSIDE the braces.
{\linespread{1.6}\selectfont
  This paragraph is set with wider leading.\par}

setspace 사용법 — 세 가지 선언과 spacing 환경

\usepackage{setspace}를 불러오고 프리앰블에 \onehalfspacing 또는 \doublespacing을 한 줄 쓰면 실무에서는 그것으로 끝입니다. 이 패키지를 권하는 이유는 셋입니다. 첫째, \setstretch{1.6} 같은 임의 배율이 그 자리에서 바로 적용 됩니다(내부에서 현재 크기 명령을 다시 발행하므로 \selectfont를 빠뜨리는 사고가 없습니다). 둘째, \onehalfspacing\doublespacing의 배율이 본문 크기별로 조정 되어 있습니다. 셋째, 각주와 캡션은 넓히지 않습니다. 이는 다음다음 절에서 실측합니다.

명령·환경하는 일
\singlespacing기본 행간으로 되돌리는 선언. 이후 본문에 적용됩니다
\onehalfspacing행간을 글자 크기의 1.5배로 만드는 선언
\doublespacing행간을 글자 크기의 2배로 만드는 선언. 투고 규정의 “더블 스페이스”가 이것입니다
\setstretch\setstretch{1.6}처럼 임의 배율을 지정. \baselineskip에 곱해집니다
spacing환경. \begin{spacing}{2.5}\end{spacing} 구간만 배율을 바꾸고 뒤에서 원래대로 돌아옵니다
singlespace환경. 더블 스페이스 본문 안에서 이 구간만 기본 행간으로 되돌립니다
onehalfspace환경. \onehalfspacing의 지역판(doublespace도 마찬가지). 행간을 넓히는 용도로만 쓰입니다
\SetSinglespace“단일”로 간주할 배율 자체를 바꿉니다(기본 1). 명목 크기보다 커 보이는 서체를 미세 조정할 때 씁니다
document.tex
\documentclass[12pt]{article}
\usepackage{setspace}
\doublespacing            % whole document: leading 24.0pt at 12pt
% \onehalfspacing        % or 18.0pt
% \setstretch{1.6}       % or any factor you like
\begin{document}
The body is set double spaced.

\begin{spacing}{1}       % one region back to the normal leading
  A long quotation, set tight.
\end{spacing}

Back to double spacing here.
\end{document}

“더블 스페이스”는 몇 포인트인가 — \doublespacing 실측값

답은 글자 크기의 정확히 두 배 입니다. 10pt면 20pt, 11pt면 22pt, 12pt면 24pt. \doublespacing\baselineskip을 두 배로 만드는 것이 아니라 이 목표값이 나오도록 배율을 역산합니다. 그래서 클래스 옵션마다 배율이 다르고, 1.667・1.618・1.655 같은 어중간한 숫자가 나오는 것입니다. 실측값을 나란히 놓으면 의도가 그대로 드러납니다.

클래스 옵션기본 행간onehalfspacingdoublespacing
10pt12.0pt1.25 → 15.00pt1.667 → 20.00pt
11pt13.6pt1.213 → 16.50pt1.618 → 22.00pt
12pt14.5pt1.241 → 17.99pt1.655 → 24.00pt

추측이 아닙니다. setspace.sty 소스에는 각 정의 바로 위에 “one and a half spacing is 1.5 x pt size”와 “double spacing is 2 x pt size”라고 적혀 있고, 실측값도 정확히 그대로입니다. 여기서 실무상 중요한 결론이 따라 나옵니다. \setstretch{2}\doublespacing이 아닙니다. \setstretch{2}\baselineskip을 두 배로 만들므로 10pt 문서에서 24.0pt가 되어, \doublespacing의 20.0pt보다 20% 넓습니다. 규정에 “더블 스페이스”라고만 적혀 있다면 그냥 \doublespacing을 쓰세요.

setspace 자체의 내력도 한 단락만. 파일 첫머리의 크레딧에 따르면 원작자는 Erica M. S. Harris이고, 1992년부터 1994년 사이에 GDG가 손을 보았으며, Geoffrey Tobin이 1996년 2월 6일 LaTeX2e 패키지로 다시 썼고, 이후 Robin Fairbairns가 오래 유지 관리했으며, 지금은 저작권 표시에 LaTeX Team이 올라 있습니다(TeX Live 2024 동봉판은 2022년 12월의 v6.7b). 숫자 하나를 바꾸는 것이 일인 패키지에 30년치 이름이 쌓여 있는 셈입니다.

각주와 캡션은 넓어지지 않는다 — setspace가 지켜 주는 것

본문을 더블 스페이스로 해도 각주와 플로트 안쪽은 기본 행간을 유지합니다. 12pt article\doublespacing을 걸고 실측하면 본문 23.99pt, 각주 안 12.0pt, figuretable14.5pt였습니다. setspace\@footnotetext, \@mpfootnotetext, \@xfloat에 손을 대어 그 안에서는 배율을 단일로 되돌리기 때문입니다. 날것의 \linespread에는 이런 배려가 없어 각주도 캡션도 함께 늘어납니다. 투고 원고에서는 그 자체가 체재 위반이 됩니다.

반면에 인용용 quote 환경은 자동으로 좁혀지지 않습니다. 더블 스페이스를 건 12pt 문서에서 quote 안을 재면 본문과 같은 23.99pt 그대로였습니다. 작자가 처음부터 그렇게 의도한 것으로, 소스에도 단일 간격 인용은 singlespacequote로 감싸서 만든다고 적어 두었습니다. 그러니 아래처럼 직접 중첩하세요. 참고로 setspace는 별행 수식 앞뒤 여백에도 배율을 적용합니다(\setdisplayskipstretch로 조정, nodisplayskipstretch 옵션으로 해제).

latex
% quote is NOT single-spaced by setspace; nest it yourself.
\begin{quote}
\begin{singlespace}
  A long quotation, set tight inside a double-spaced document.
\end{singlespace}
\end{quote}

\parskip\baselineskip의 차이 — 단락 간격은 행간이 아닙니다

\parskip단락과 단락 사이에 추가로 들어가는 세로 여백 이며, 줄의 이송량과는 별개로 계산됩니다. 표준 클래스의 기본값은 0.0pt plus 1.0pt, 즉 단락 사이에는 기본적으로 아무것도 더하지 않고 페이지를 고르게 하기 위해 최대 1pt만 늘어날 여지를 둔다는 설정입니다. 표준 클래스는 단락의 구분을 여백이 아니라 들여쓰기 로 표시하기 때문입니다. 여기서 중요한 것은 setspace\parskip을 전혀 건드리지 않는다 는 점입니다. 실측에서도 \doublespacing 적용 후 \parskip0.0pt plus 1.0pt 그대로였습니다. 행간을 두 배로 했는데 단락 경계가 흐릿하게 느껴진다면 그것은 \parskip의 문제이지 행간의 문제가 아닙니다.

마지막으로 하지 말아야 할 것 하나. \baselineskip 자체를 \setlength로 고쳐 쓰지 마세요. 이 길이는 글꼴을 다시 고를 때마다 재설정되므로 지정이 허무하게 사라집니다. 실측해 보면 \setlength{\baselineskip}{20pt} 뒤에 \large를 지나기만 해도 14.0pt, \normalsize로 돌아오면 12.0pt로, 20pt는 어디에도 남지 않습니다. 행간은 반드시 배율 쪽(\linespread, \setstretch, setspace 선언)에서 조작하세요. 배율은 크기 변경을 따라가고, 각주와 플로트의 예외 처리도 그대로 유지됩니다.