LaTeX 원고는 보통의 본문 안에 명령을 끼워 넣은 것입니다. 명령, 공백, 주석에는 처음에 익혀 두면 오래도록 작은 혼란을 줄여 주는 몇 가지 규칙이 있습니다. 왜 \LaTeX is라고 쓰면 공백이 사라질까요? 왜 Enter를 두 번 누르면 새 단락이 될까요? 이 페이지에서 그 원리를 한곳에 정리합니다.
본문과 명령
원고의 대부분은 본문 텍스트입니다. 그대로 조판되는 일반 문자이므로 Hello라고 쓰면 Hello가 나옵니다. 반면 명령(command) 은 줄바꿈, 제목, 글꼴 변경 같은 조판 지시이며, 반드시 백슬래시 \ 로 시작합니다(일부 일본어 환경에서는 엔 기호 ¥로 보일 수 있습니다). \LaTeX는 로고를, \newpage는 페이지 나눔을 뜻하며 둘 다 문자 그대로 출력되지는 않습니다.
백슬래시 뒤에 오는 명령 이름을 제어철(control sequence) 이라고 하며 두 종류가 있습니다. \ 뒤에 영문자(A–Z, a–z)만 이어지는 것은 제어어(control word), \ 뒤에 영문자가 아닌 문자 하나가 오는 것은 제어기호(control symbol) 입니다. 따라서 \section, \LaTeX, \newpage는 제어어이고, \$, \%, \&, \ (백슬래시+공백)는 제어기호입니다. 둘은 이름이 끝나는 방식뿐 아니라 바로 뒤 공백을 처리하는 방식도 다릅니다(다음 절).
왜 이 구분이 필요할까요? 제어어의 이름은 “영문자가 아닌 곳”에서 자동으로 끝나므로, \LaTeXlogo처럼 이어 쓰면 \LaTeXlogo라는 하나의 별도(정의되지 않은) 명령으로 해석됩니다. 이름을 \LaTeX에서 끊고 싶다면 공백, 기호, {}처럼 영문자가 아닌 무언가로 구분해야 합니다. 반면 제어기호는 정확히 한 문자로 끝나므로 \$5처럼 숫자가 이어져도 문제가 없습니다.
제어어는 바로 뒤 공백을 먹는다
가장 큰 함정이 바로 이것입니다. 제어어 바로 뒤의 공백(스페이스, 탭, 줄바꿈)은 모두 건너뜁니다. 이름을 구분하는 데만 쓰일 뿐 출력에는 공백을 만들지 않습니다. 따라서 \LaTeX is great라고 쓰면 \LaTeX와 is 사이의 공백이 사라져 “LaTeXis great”처럼 붙어 나옵니다.
고치는 표준 방법은 세 가지입니다. (1) 빈 중괄호를 둡니다: \LaTeX{} is. {}가 이름을 끝내고 본문의 공백이 그대로 남습니다. (2) 제어 공백을 씁니다: \LaTeX\ is. \ (백슬래시+공백)는 보통 단어 사이 공백을 정확히 하나 만듭니다. (3) 명령을 중괄호로 감쌉니다: {\LaTeX} is. 세 방법 모두 결과는 “LaTeX is”입니다. 헷갈리면 {}가 안전하며, 바로 뒤가 공백이든 기호든 항상 올바르게 동작합니다.
% 制御語の直後の空白は消える / The space after a control word vanishes:
\LaTeX is great % → LaTeXis great (まちがい / wrong)
% 直し方 / The fixes — all give “LaTeX is great”:
\LaTeX{} is great
\LaTeX\ is great
{\LaTeX} is great반대로 제어기호는 바로 뒤 공백을 먹지 않습니다. \$ 뒤의 공백은 보통 단어 사이 공백으로 남습니다. 또한 \ 라는 제어 공백은 명령 뒤를 정리할 때뿐 아니라 Prof.\ Smith나 et al.\ (1993)처럼 약어를 나타내는 마침표 뒤에서도 씁니다. LaTeX는 기본적으로 문장 끝 마침표 뒤를 조금 더 넓히므로, \ 로 “이것은 문장 끝이 아니다”라고 알려 단어 간격을 고르게 합니다.
인수와 중괄호 그룹화
많은 명령은 인수를 받습니다. 인수에는 두 종류가 있어 중괄호 { }는 필수 인수를, 대괄호 [ ]는 선택 인수(옵션) 를 감쌉니다. 예를 들어 \section{Introduction}의 {Introduction}은 필수 제목 문자열이고, \documentclass[12pt]{article}에서는 [12pt]가 옵션, {article}이 필수 클래스 이름입니다. 보통 형태는 \command[options]{required}입니다.
또 { }에는 적용 범위를 구분하는 그룹화라는 두 번째 역할이 있습니다. 글꼴이나 크기를 바꾸는 선언형 명령인 \bfseries(굵게), \itshape(기울임), \large(크게) 등은 인수를 받지 않고 “여기서부터”를 바꿉니다. 이를 중괄호로 감싸면 효과가 그 그룹 안에만 갇힙니다. {\bfseries bold} normal이라고 쓰면 “bold”만 굵어지고, 닫는 }에서 이전 설정으로 돌아갑니다.
\section{はじめに} % 必須引数 / mandatory argument
\documentclass[12pt]{article} % [オプション]{必須} / [optional]{required}
{\bfseries 太字になる} ここは普通 % {} で効果を閉じ込める / braces limit the scope
{\bfseries bold here} back to normal그룹의 안과 밖은 독립적이므로 시각적 변경이 의도하지 않은 범위로 새지 않습니다. 이는 환경(\begin{...}...\end{...})이 범위를 구분하는 것과 같은 발상이며, \begin–\end 쌍도 하나의 그룹을 만듭니다. 환경은 별도 페이지에서 자세히 다룹니다.
공백, 줄바꿈, 빈 줄
공백 처리에는 원고의 모양과 출력 결과를 분리하는 독특한 규칙이 있습니다. 먼저 연속된 공백(스페이스나 탭)은 몇 개가 이어져도 하나의 단어 사이 공백으로 합쳐집니다. 단어 사이를 한 칸 띄우든 열 칸 띄우든 출력은 같습니다. 또한 소스 안의 줄바꿈 하나는 단순한 공백으로 취급됩니다. 줄을 어디에서 접든 최종 줄바꿈 위치는 LaTeX가 정하므로, 원고는 읽기 편한 폭으로 줄바꿈해도 됩니다.
그렇다면 단락은 어떻게 나눌까요? 답은 빈 줄입니다. 아무것도 쓰지 않은 줄을 하나 두면 그곳이 단락 경계가 됩니다. 빈 줄을 두 개 이상 이어도 효과는 빈 줄 하나와 같은 “한 번의 단락 바꿈”입니다. 반대로 소스에서 줄만 바꾸는 것으로는 단락이 바뀌지 않습니다. \\로 강제 줄바꿈하는 등의 더 세밀한 줄/단락 제어는 줄바꿈과 단락 페이지에서 다룹니다.
これらの 余分な空白は 1 つにまとめられ、
この改行も空白 1 つになります。
空行をはさむと、ここから新しい段落が始まります。단어 사이 공백을 의도한 위치에 정확히 두고 싶은 경우도 있습니다. 대표적인 것이 타이 ~ 입니다. 이는 줄바꿈되지 않는 공백(노브레이크 스페이스) 으로, Fig.~\ref{fig:1}, Chapter~12, Donald~E. Knuth처럼 공백 앞뒤가 다른 줄로 갈라지면 안 되는 곳에 넣습니다. 폭은 보통 단어 사이 공백과 같지만 여기서는 줄이 꺾이지 않습니다. 한편 앞서 본 \ (제어 공백) 은 보통 폭의 공백을 강제하고, 수식 모드에서는 \,(얇은 공백 thin space, 3/18 quad 폭) 으로 자간을 미세 조정할 수 있습니다.
주석
퍼센트 기호 % 부터 그 줄 끝까지 는 주석이며, 컴파일할 때 완전히 무시됩니다. 출력에는 나타나지 않으므로 원고에 메모를 남기거나 명령을 임시로 비활성화(주석 처리)할 때 씁니다. 주석은 줄 끝까지 이어질 뿐 아니라 그 줄 끝의 줄바꿈(및 뒤따르는 공백)도 삼킵니다. 이것이 작은 요령으로 쓰입니다.
소스 안의 줄바꿈은 공백 하나가 된다는 점을 기억하세요. 긴 단어를 소스에서 여러 줄로 나누어 쓰고 싶지만 경계에 불필요한 공백이 들어가면 안 되는 경우, 줄 끝에 %를 두면 줄바꿈이 사라져 다음 줄과 공백 없이 이어집니다. 명령을 여러 줄에 나누어 쓸 때도 같은 요령으로 원치 않는 공백을 막을 수 있습니다.
これは行末コメント % ここから行末まで(と改行)が無視される / ignored to end of line
超長い%
単語 % → 「超長い単語」 % で改行を消してつなぐ / % joins the lines, no space
割引率は 100\% です。 % 文字としての % は \% と書く / a literal percent is \%% 자체가 특수 문자이므로 문자로서의 퍼센트 기호를 출력하려면 \%라고 씁니다(\%는 제어기호라서 바로 뒤 공백을 먹지 않습니다). 특수 문자 전체는 특수 문자 페이지에 정리되어 있습니다.
여러 줄을 한꺼번에 비활성화하려면 각 줄마다 %를 붙이는 대신 두 가지 방법이 있습니다. verbatim 패키지(또는 comment 패키지)가 제공하는 comment 환경으로 \begin{comment} … \end{comment}처럼 감싸는 방법과, TeX 조건문인 \iffalse … \fi 로 감싸는 방법입니다. 후자는 추가 패키지가 필요 없고 블록 전체를 한 번에 주석 처리할 수 있습니다.
\usepackage{verbatim} % プリアンブルで / in the preamble
\begin{comment}
このブロックは丸ごと無視される。
This whole block is ignored.
\end{comment}
\iffalse
下書きのコードもパッケージ無しで一括コメントアウト。
Draft code, commented out with no package needed.
\fi첫 원고에서 익힐 습관
문법 규칙은 모두 외우는 것보다 “망가지기 어려운 쓰기 방식”을 정하는 편이 더 효과적입니다. 명령 이름 바로 뒤에 영문자가 이어지면 {}로 구분하고, 의미 단위는 {...}로 감싸며, 긴 설정은 한 줄에 욱여넣지 말고 주석을 달아 나눕니다. 이 세 가지만으로도 공백 사라짐, 인수 착각, 설정이 어디까지 적용되는지 모르는 초반의 시행착오를 많이 줄일 수 있습니다.
% 命令名の後ろに英字が続くなら {} で区切る
\LaTeX{} users write source, then compile it.
% 長い設定は意味ごとに分け、行末コメントで不要な空白を消す
\newcommand{\courseTitle}{%
Advanced Topics in \LaTeX%
}주석은 편리하지만, 제출용 본문에서 버린 큰 덩어리를 작업 파일에 주석 처리한 채 많이 남겨 두지 않는 것도 실무적인 요령입니다. 비교하고 싶은 이전 원고는 Git 같은 이력 도구에 맡기고, 현재 .tex에는 “지금 조판할 내용”만 남기면 오류 줄 번호와 실제 원고가 일치해 마감 전 디버깅이 빨라집니다.
망가진 소스를 읽는 순서
오류가 나면 파일 전체를 처음부터 다시 읽기보다 LaTeX의 구문 단위에 맞춰 확인합니다. 먼저 보고된 오류 줄보다 조금 앞에서 제어어 이름이 뒤따르는 영문자를 삼키지 않았는지, 필수 인수 {...}와 선택 인수 [...]의 짝이 맞는지 봅니다. 다음으로 %를 확인합니다. 행 끝 주석이 필요한 공백까지 지우지는 않았는지, 반대로 문자로서의 퍼센트를 출력해야 하는 곳에서 \%를 잊지는 않았는지 점검합니다.
| 증상 | 먼저 의심할 것 | 고치는 방법 |
|---|---|---|
run-together | 로고나 명령 뒤에서 단어가 붙음 | \LaTeX{} users처럼 {}로 구분 |
wrong-argument | 제목이나 명령의 범위가 너무 길어짐 | 대응하는 {와 }를 하나의 의미 단위에 맞춤 |
comment-gap | 소스 줄바꿈 위치에서 공백이 사라지거나 생김 | 행 끝 %와 일반 줄바꿈을 의도에 따라 구분 |