12pt 문서에서는 LaTeX의 \Huge와 \huge가 같은 명령입니다. 크기가 비슷한 정도가 아니라, size12.clo 86행에 \let\Huge=\huge라고 적혀 있어 말 그대로 동일물입니다. \tiny부터 \Huge까지 열 개의 크기 명령이 “절대적인 크기”가 아니라 “본문에 대한 상대적인 단”을 나타내기 때문에 벌어지는 일로, 같은 \large도 10pt 문서에서는 12pt, 12pt 문서에서는 14.4pt가 됩니다. 게다가 이 단의 눈금은 LaTeX의 발명이 아니라, Knuth가 plain TeX에 써 넣은 \magstep 값 그대로입니다. 이 페이지에서는 열 개의 명령이 10pt / 11pt / 12pt에서 각각 몇 포인트가 되는지 실측한 표와, {\Large ...}라고 썼는데 행간만 그대로인 유명한 함정, 그리고 \fontsize가 아무 말 없이 아무 일도 하지 않을 때 무슨 일이 벌어지는지를 다룹니다.
\tiny부터 \Huge까지 — 열 개의 선언
크기 명령은 인수를 받지 않습니다. \textbf{...} 같은 명령이 아니라 쓴 지점부터 그 뒤를 전환하는 선언이므로, 작용 범위는 스스로 그룹이나 환경으로 끊어 줘야 합니다. 작은 것부터 차례로 \tiny, \scriptsize, \footnotesize, \small, \normalsize, \large, \Large, \LARGE, \huge, \Huge의 열 개입니다. 단계를 가르는 것은 첫 글자의 대소문자와 전부 대문자인 LARGE뿐이므로, 겉모습이 아니라 철자에 주의하십시오. \Large{텍스트}라고 써도 인수로 취급되지 않습니다. 단지 \Large가 선언된 뒤에 {텍스트}라는 그룹이 놓일 뿐이고, 그 그룹을 벗어나도 크기는 돌아오지 않습니다. 범위를 한정하려면 {\Large 텍스트}처럼 선언 쪽을 중괄호 안에 넣습니다. \normalsize가 본문의 표준 크기이며, \documentclass의 크기 옵션(기본값 10pt)과 일치합니다.
% right: the declaration is inside the braces
Ordinary text. {\Large only this part is large.} Ordinary again.
% wrong: nothing is passed as an argument, and the size never comes back
Ordinary text. \Large{this is large} and so is everything after it.실제 포인트 크기는 기준 크기에 따라 달라집니다(10pt / 11pt / 12pt)
같은 명령이라도 \documentclass에 10pt·11pt·12pt 가운데 무엇을 넘겼는지에 따라 결과의 포인트 크기가 달라집니다. \large는 10pt 클래스와 11pt 클래스에서 모두 12pt이지만, 12pt 클래스에서는 14.4pt가 됩니다. 아래 표는 표준 클래스(article / report / book)에서 열 개를 모두 실제로 조판하며 \f@size와 \baselineskip을 찍어 낸 값입니다. 각 칸은 글자 크기 / 행송(연속한 줄의 기준선 사이 거리) 순서로 적혀 있습니다. 행송까지 실은 것은, 크기 명령이 글자뿐 아니라 행간까지 함께 움직인다는 사실이 이 표를 보면 한눈에 드러나기 때문입니다.
| 명령 | 10pt 클래스 | 11pt 클래스 | 12pt 클래스 |
|---|---|---|---|
\tiny | 5pt / 6pt | 6pt / 7pt | 6pt / 7pt |
\scriptsize | 7pt / 8pt | 8pt / 9.5pt | 8pt / 9.5pt |
\footnotesize | 8pt / 9.5pt | 9pt / 11pt | 10pt / 12pt |
\small | 9pt / 11pt | 10pt / 12pt | 10.95pt / 13.6pt |
\normalsize | 10pt / 12pt | 10.95pt / 13.6pt | 12pt / 14.5pt |
\large | 12pt / 14pt | 12pt / 14pt | 14.4pt / 18pt |
\Large | 14.4pt / 18pt | 14.4pt / 18pt | 17.28pt / 22pt |
\LARGE | 17.28pt / 22pt | 17.28pt / 22pt | 20.74pt / 25pt |
\huge | 20.74pt / 25pt | 20.74pt / 25pt | 24.88pt / 30pt |
\Huge | 24.88pt / 30pt | 24.88pt / 30pt | 24.88pt / 30pt(\huge과 동일) |
눈금을 훑어보면 12 → 14.4 → 17.28 → 20.74 → 24.88로, 각 단이 앞 단의 대략 1.2배씩 늘어나는 것이 보입니다. 우연이 아닙니다. plain TeX 391행에는 \def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or 2074\or 2488\fi\relax}이 있어, Knuth가 정한 확대율이 1200·1440·1728·2074·2488, 곧 천분율로 나타낸 1.2의 1제곱부터 5제곱까지입니다. LaTeX의 큰 쪽 다섯 단은 이 \magstep을 그대로 가져다 씁니다. 어중간해 보이는 10.95pt도 바로 윗줄의 \def\magstephalf{1095 }에서 왔습니다(1.2의 제곱근인 약 1.0954를 반올림한 값). 나아가 latex.ltx 8915행부터의 매크로 이름을 보면, “14포인트”라는 이름의 \@xivpt가 14.4로, “25포인트”라는 이름의 \@xxvpt가 24.88로 정의되어 있습니다. 이름은 사람을 위한 통칭이고, 값은 확대율의 계단입니다.
계단이 24.88pt에서 멈추는 것은 그것이 Computer Modern이 제공하는 최대 디자인 크기이기 때문입니다. 글꼴 정의 파일 ot1cmr.fd에 나열된 크기는 <5><6><7><8><9><10><10.95><12><14.4><17.28><20.74><24.88>의 열두 단으로, 크기 명령이 오르는 사다리와 정확히 같은 배열입니다. 그래서 12pt 클래스에서는 \huge가 이미 천장인 24.88pt에 닿아 버리고, size12.clo 86행은 그냥 \let\Huge=\huge라고 적어 둘을 같은 명령으로 만듭니다. 11pt 클래스에서는 둘이 별개로, \huge가 20.74pt, \Huge가 24.88pt입니다. “\Huge으로 바꿔도 커지지 않는다”는 증상을 만나면 먼저 클래스 옵션이 12pt가 아닌지 확인하십시오. 이상은 모두 표준 클래스의 값입니다. jsarticle 같은 일본어 클래스, extsizes, KOMA-Script는 저마다의 눈금과 천장을 가지므로 이 표를 그대로 적용하지 마십시오.
{\Large ...}으로 글자는 커졌는데 행간이 그대로일 때
문단의 끝맺음(빈 줄 또는 \par)이 닫는 중괄호 바깥에 있기 때문입니다. 그룹 안쪽으로 옮기십시오. TeX이 행송을 확정하는 것은 글자를 조판하는 순간이 아니라 문단을 줄로 나누는 순간입니다. 문단의 끝이 그룹 밖에 있으면 그 순간에는 \baselineskip이 이미 본문 값으로 돌아가 있으므로, 큰 글자가 본문 행간으로 조판됩니다. 10pt 클래스에서 \Large(14.4pt) 두 줄짜리 문단을 실측하니, \par를 그룹 밖에 둔 경우 행송이 12pt, 안쪽에 둔 경우 18pt였습니다. 한 줄당 6pt 차이입니다.
% right -- \par is inside the group, so the leading is 18pt
{\Large
A long paragraph that will wrap onto a second line and keep its leading.
\par}
% wrong -- the paragraph ends after the group, so the leading falls back to 12pt
{\Large A long paragraph that will wrap onto a second line and lose its leading.}
The next paragraph.이 6pt는 지면에서 줄끼리 부딪히는 모습으로 드러납니다. \Large의 글자는 베이스라인 위로 9.99998pt, 아래로 2.79999pt 뻗습니다(\sbox로 측정한 값입니다). 위아래를 더하면 12.79997pt가 되어, 잘못된 12pt 행송을 0.8pt 넘어섭니다. 즉 어느 줄에 아래로 뻗는 글자(g, y, p)가 있고 다음 줄에 위로 뻗는 글자(h, k, l)가 있으면, 그 둘은 종이 위에서 반드시 겹칩니다. 줄 수가 적으면 알아채기 어렵고, 투고용 PDF를 인쇄하고 나서야 드러나는 식으로 표면화되기 쉽습니다.
두 가지를 덧붙입니다. 하나는 \selectfont을 더해도 고쳐지지 않는다는 점입니다. {\Large\selectfont ...}을 시험해도 실측값은 12pt 그대로였습니다. 문제는 글꼴 선택이 아니라 문단을 다 조판하는 시점의 \baselineskip 값이므로, \par의 위치를 고치는 것 말고는 해결책이 없습니다. 다른 하나는 이 증상이 \centering에서는 일어나고 center 환경에서는 일어나지 않는다는 점입니다. {\centering \Large ... }라고 쓰고 빈 줄을 밖에 두면 12pt가 되지만, \begin{center} \Large ... \end{center}는 올바른 18pt로 조판되었습니다. \end{center}가 그룹을 닫기 전에 문단을 끝내 주기 때문입니다. 가운데 정렬한 큰 제목의 행간이 이상하다면, \centering을 맨 그룹 안에서 쓰고 있지 않은지 의심해 보십시오.
임의의 크기 — \fontsize와 \selectfont
열 단계에 원하는 크기가 없다면 \fontsize{크기}{행송}\selectfont으로 포인트 수를 직접 지정할 수 있습니다. 첫 인수가 글자 크기, 둘째 인수가 행송입니다. 포스터 표제나 표 안에서 한 줄만 좁히고 싶을 때처럼 단계 밖으로 나가고 싶은 경우가 있습니다. 여기서 중요한 것은 \fontsize가 값을 적어 둘 뿐 아무것도 고르지 않는다는 점입니다. 실측하면 \fontsize{20}{24}x라고 쓴 x의 너비는 5.2778pt로, \normalsize의 x와 완전히 같았습니다. \selectfont을 이어 쓰면 10.05351pt가 되어 비로소 20pt 글자가 나옵니다. 게다가 \selectfont을 잊어도 오류도 경고도 나오지 않습니다. “크기를 지정했는데 바뀌지 않는다”는 보고의 상당수가 이것입니다.
% \fontsize alone changes nothing and says nothing
{\fontsize{20}{24}Still 10pt.}
% \selectfont is what commits the change
{\fontsize{20}{24}\selectfont 20pt type on 24pt leading.}둘째 인수인 행송은 생략할 수 없으므로, 관례에 따라 글자 크기의 약 1.2배를 어림잡아 정합니다(20pt라면 24pt 전후). 앞의 표를 보면 표준 클래스의 비율도 대체로 이 범위로, 이를테면 10pt / 12pt, 14.4pt / 18pt입니다. \tiny 같은 선언형 명령이 행송을 자동으로 맞춰 주는 데 비해, \fontsize에서는 직접 정해야 한다는 것이 실무상 가장 큰 차이입니다. 여기를 너무 작게 잡으면 앞 절과 같은 이치로 줄이 겹칩니다. 문서 전체의 행간을 넓히고 싶다면(1.5줄 간격 등) 그것은 크기 명령의 일이 아니므로, 행간을 다루는 페이지를 참조하십시오.
수식 안에서는 크기 명령이 듣지 않습니다
수식 모드 안에서 크기 명령을 쓰면 LaTeX은 그것을 무시하고 로그에 한 줄을 남깁니다. $ \large x $를 조판하면 LaTeX Font Warning: Command \large invalid in math mode on input line 9.가 나옵니다. 오류가 아니므로 조판은 계속되고 x는 보통 크기 그대로 나옵니다. 수식 안의 크기는 바깥 글자 크기와 수식 스타일(\displaystyle / \textstyle / \scriptstyle / \scriptscriptstyle)의 조합으로 정해지는 별개의 체계이므로, 본문용 크기 명령과 섞을 수 없습니다. 분수나 합 기호만 크게 내고 싶다면 \displaystyle을 씁니다. 수식 전체를 키우고 싶을 때는 수식 바깥에서 크기를 선언하십시오. {\Large $ ... $}라면 듣습니다.
LaTeX Font Warning: Command \large invalid in math mode on input line 9.크기를 정하는 순서
글자 크기는 본문을 쓰면서 국소적으로 고치는 대신, 위에서부터 차례로 정하면 무너지지 않습니다. 먼저 \documentclass[11pt]{...}처럼 문서 전체의 기준 크기를 정합니다. 다음으로 제목·캡션·각주·표 주석처럼 되풀이해 나타나는 것은 본문에서 매번 크기를 지정하지 말고 클래스나 패키지 설정에서 정합니다. 마지막으로 남은 “한 번뿐인” 것 — 포스터 표제, 표 안의 보충 설명 — 만 {\small ...}처럼 국소적으로 지정합니다. 이 순서를 지키면 나중에 기준 크기를 11pt에서 12pt로 바꿔도 전체가 비율을 유지한 채 따라옵니다. 반대로 본문에 국소 지정을 뿌려 두면, 기준 크기를 바꾸는 순간 그곳만 뒤처집니다. 본문 크기 자체가 다른 포스터나 슬라이드에서는 국소 명령으로 밀어붙이지 말고, 처음부터 그 용도에 맞게 만들어진 클래스를 고르십시오.
- 기준 크기는 클래스 옵션으로 정합니다. 본문 전체를
{\small ...}으로 감싸는 방법은 각주·제목·행송과의 정합을 깨뜨리기 쉽고, 투고 규정에 “본문 11pt”라고 되어 있을 때의 답도 되지 못합니다. - 절 제목을 본문에서 키우지 않습니다.
\section의 모습은 클래스 설정이나titlesec같은 패키지로 바꿉니다. 본문에\Large을 써서 만든 가짜 제목은 목차에도 상호 참조에도 실리지 않습니다. - 되풀이되는 요소는 정의 쪽에서 바꿉니다. 모든 표 주석을 작게 하고 싶다면 표 주석용 매크로나 환경을 만들어 본문에서의 수작업을 없앱니다.
- 국소 크기 지정은 문단 단위로 닫습니다. 긴 문단을 작게 한다면
\par를 그룹 안쪽에 두어 행송까지 같은 크기로 확정합니다. - 표를 줄이기 전에 구조를 의심합니다. 표 전체를
\scriptsize으로 밀어 넣기 전에, 열을 줄이거나 가로로 눕히거나 두 표로 나누는 선택지를 먼저 검토합니다. - 최종 페이지 크기의 PDF로 확인합니다. 화면에서 읽히더라도 A4로 인쇄한 심사용 PDF에서는 너무 작을 수 있습니다. 확대가 아니라 실제 크기로 봅니다.