인용(quote / quotation / csquotes)

키보드에는 굽은 따옴표 “ ”를 찍는 키가 없습니다. 그런데도 LaTeX 문서에 제대로 된 따옴표가 찍히는 것은, 백틱 두 개와 어퍼스트로피 두 개를 글꼴의 합자(ligature) 기구가 진짜 따옴표로 바꿔 조립하기 때문입니다. f와 i를 fi로 만드는 바로 그 기계가 움직입니다. 이 페이지는 거기서부터 한 줄기로 이어갑니다. 따옴표를 제대로 찍는 법, csquotes\enquote가 언어마다 모양을 바꾸고 중첩까지 처리하는 방식, 그리고 quote·quotation·verse 환경이 인용문을 별행으로 세우는 방법입니다.

굽은 따옴표는 어디서 오는가 — 백틱 두 개의 정체

답은 글꼴 안에 있습니다. TeX은 글꼴을 읽을 때 .tfm(글꼴 치수 파일)을 참조하는데, .tfm 안에는 어떤 문자 뒤에 어떤 문자가 오면 제3의 글리프로 바꾸라는 합자 프로그램이 들어 있습니다. 따옴표 치환도 바로 그 표에 적혀 있습니다. T1 인코딩 Computer Modern 로만인 ecrm1000.tfm을 사람이 읽을 수 있는 형태로 되돌리면, 백틱 항목에 (LIG O 140 O 20) — “백틱 다음에 백틱이 오면 8진 20번 글리프로 바꾸라” — 라는 한 줄이 있습니다. 8진 20번은 \textquotedblleft, 곧 여는 큰따옴표입니다. 어퍼스트로피 항목도 같은 모양이어서 (LIG O 47 O 21)이 닫는 큰따옴표 \textquotedblright를 가리킵니다.

재미있는 대목은 여기입니다. 같은 파일에서 f 항목을 보면 (LIG C i O 14)이라고 적혀 있습니다. “f 다음에 i가 오면 fi 글리프로 바꾸라”는 뜻입니다. 다시 말해 따옴표와, 활자 조판이 수백 년 써 온 fi 합자는 TeX에게 문자 그대로 같은 명령입니다. 커누스는 글자 쌍을 위해 설계한 기구를 그대로 구두점에 돌려 썼습니다. 하이픈 두 개가 en 대시가 되는 것도 같은 표의 몇 줄 아래, (LIG O 55 O 173)입니다. “친 대로 나오지 않는다”는 TeX의 첫 번째 놀라움은 이 작은 표에서 나옵니다.

latex
% Two backticks open a quotation, two apostrophes close it.
``A quotation set the TeX way.''

% One of each gives the single marks.
`A quotation inside a quotation.'

% Adjacent closing marks collide; a thin space keeps them apart.
``He said `yes.'\thinspace''
입력출력되는 글리프비고
``여는 큰따옴표, 합자로 합성됩니다
''닫는 큰따옴표, 어퍼스트로피 두 개
`여는 작은따옴표. 합자는 일어나지 않습니다
'닫는 작은따옴표. 어퍼스트로피도 같은 글리프
"” 또는 "쓰지 않습니다. 다음 절 참조

"를 그대로 치면 따옴표가 이상해지는 이유 — OT1과 T1의 차이

ASCII의 곧은 "를 그대로 치면 어떤 글꼴 인코딩을 쓰느냐에 따라 두 가지로 망가집니다. LaTeX 기본값인 OT1 인코딩에서는 ot1enc.def\textquotedblright를 34번 자리 — ASCII가 "를 두는 바로 그 자리 — 에 배정합니다. 그래서 "quoted"라고 쓰면 여는 쪽까지 포함해 둘 다 닫는 따옴표가 되어 ”quoted”로 나옵니다. 반면 \usepackage[T1]{fontenc}을 넣으면 t1enc.def은 같은 34번에 \textquotedbl, 곧 타자기식 곧은 따옴표를 놓습니다. 이쪽은 굽지 않고 "quoted" 그대로입니다. 서문 한 줄이 바꾸는 것은 오류의 모습일 뿐, 오류라는 사실이 아닙니다. 아포스트로피 쪽도 사정은 같습니다. 정말로 곧은 '가 필요할 때——코드 조각이나 굽으면 안 되는 식별자——는 \textquotesingle을 쓰십시오. TS1 문자이며 2020년 이후 커널에서는 별도 패키지 없이 쓸 수 있고, \texttt 안에서도 굽지 않습니다.

latex
% Default OT1: slot 34 holds the CLOSING double mark.
%   "quoted"  ->  ”quoted”   (two closing marks)
\documentclass{article}

% With T1: slot 34 holds an upright typewriter quote.
%   "quoted"  ->  "quoted"   (never curls)
\usepackage[T1]{fontenc}

% Either way, this is what you want instead:
``quoted''

실무에서는 세 가지만 지키면 사고가 나지 않습니다. 첫째, 원고에 "를 치지 않습니다. 찾아 바꾸기로 한 번에 정리하는 편이 확실합니다. 둘째, \usepackage[T1]{fontenc}은 넣습니다. 34번 문제를 없애기 위해서가 아니라 올바른 하이픈 넣기와 악센트 문자를 위해서입니다. 셋째, LuaLaTeX이나 XeLaTeX에서는 UTF-8 문자 “ ”를 직접 치는 것이 유효합니다. 이때는 글꼴을 유니코드로 참조하므로 합자 기구를 거치지 않고, 원고와 출력의 모양이 일치한다는 이점이 있습니다. 다만 따옴표 모양이 원고에 굳어 버리므로, 다국어 문서라면 다음 절의 \enquote이 다루기 쉽습니다.

\enquote과 직접 찍은 따옴표의 차이

차이는 한 줄로 말할 수 있습니다. 직접 찍으면 글리프를 적는 것이고, \enquote은 “여기가 인용이다”라는 사실을 적는 것입니다. csquotes 패키지를 불러 \enquote{…}이라고 쓰면, 지면에 실제로 어떤 글리프가 놓일지는 선택된 인용 스타일이 정합니다. 게다가 중첩은 자동입니다. \enquote은 내부에서 중첩 깊이를 세고 있어서(카운터 이름은 \csq@qlevel입니다) 첫 층에는 바깥 따옴표를, 그 안쪽에는 안 따옴표를 고릅니다. 미국식처럼 바깥이 큰따옴표이고 안이 작은따옴표인지, 영국식처럼 그 반대인지는 이제 스타일 정의가 감당할 문제입니다.

latex
\usepackage[T1]{fontenc}
\usepackage[english]{babel}
\usepackage[autostyle=true]{csquotes}
% ...
\enquote{He said \enquote{yes} to me.}
%  ->  “He said ‘yes’ to me.”

\begin{otherlanguage}{ngerman}
\enquote{Er sagte \enquote{ja} zu mir.}
\end{otherlanguage}
%  ->  „Er sagte ‚ja‘ zu mir.“

\begin{otherlanguage}{french}
\enquote{Il a dit \enquote{oui}.}
\end{otherlanguage}
%  ->  « Il a dit “oui”. »

위 세 줄은 같은 \enquote을 같은 모양으로 썼는데도 출력되는 따옴표가 모두 다릅니다. 작동하는 것은 autostyle=true이며, 이는 인용 스타일을 babel·polyglossia의 현재 언어에 따라가게 하는 옵션입니다. 언어만 바꾸면 따옴표가 따라오므로 원고 쪽에는 언어별 분기가 전혀 나타나지 않습니다. 안쪽 따옴표를 일부러 내고 싶을 때는 별표를 붙인 \enquote*{…}를 씁니다. 서문에서 고정하고 싶다면 \setquotestyle{german}처럼 직접 지정할 수도 있습니다.

의미를 적어 두면 두 번째 이득이 따라옵니다. 틀린 곳을 검출할 수 있다는 점입니다. 직접 찍은 따옴표는 닫는 것을 빠뜨려도 아무 일도 일어나지 않고, 인쇄해 보고서야 알게 됩니다. \enquote은 중첩 깊이를 따라가므로 짝이 맞지 않으면 Package csquotes Error: Unbalanced groups or invalid nesting이나 Still 1 quote open. 같은 오류로 멈춥니다. 300쪽짜리 논문에서 눈으로 따옴표 짝을 맞추던 일이 컴파일 출력 한 줄로 바뀝니다. 이웃한 따옴표가 부딪히는 문제도 csquotes이 떠맡습니다. 스타일 정의마다 [0.05em] 같은 커닝 값이 적혀 있어, 바깥과 안쪽 따옴표가 동시에 열리거나 닫힐 때 자동으로 삽입됩니다. 예전에 \thinspace로 손보던 작업이 사라집니다.

언어마다 다른 따옴표: “ ”, „ “, « », 「 」

따옴표의 모양은 언어마다 다르고, 심지어 “어느 쪽이 여는 것인가”까지 다릅니다. 한국어의 “ ”와 ‘ ’, 일본어의 「 」와 『 』, 독일어의 „ “, 프랑스어의 « … »는 모두 같은 일을 하면서도 글자꼴도 방향도 높이도 맞지 않습니다. csquotes은 이를 인용 스타일로 다루며, csquotes.def에는 영어·독일어·프랑스어·에스파냐어·일본어를 포함해 29개 언어의 정의가 들어 있습니다. 다만 한국어 스타일은 들어 있지 않습니다. 현대 한국어 가로짜기는 큰따옴표 “ ”와 작은따옴표 ‘ ’를 쓰고 낫표 「 」·겹낫표 『 』는 주로 작품명에 남아 있으므로, 실무에서는 american 스타일이 그대로 맞아떨어집니다.

스타일 이름바깥안쪽비고
american“ ”‘ ’english의 기본 변종
british‘ ’“ ”바깥과 안쪽이 미국식과 반대
german„ “‚ ’닫는 쪽이 영어의 여는 글리프와 같은 모양
french« »“ ”따옴표 안쪽에 분리 불가 공백이 들어갑니다
spanish« »“ ”이어지는 문단 첫머리에 »를 다시 놓습니다
japanese「 」『 』커닝은 0pt. 전각이라 부딪히지 않습니다

이 표에는 알아 두면 이득인 뒤집힘이 몇 가지 숨어 있습니다. 독일어의 기유메 변종은 \guillemotright열고 \guillemotleft닫습니다. 곧 »…«와 프랑스어의 « … »는 방향이 정반대입니다. 프랑스어는 따옴표 안쪽에 분리 불가 공백이 필요해서, csquotes은 그것만을 위한 \mkfrenchopenquote 훅을 따로 두고 있습니다. 그리고 에스파냐어 스타일에는 중간 표시가 정의되어 있습니다. 여러 문단에 걸친 인용에서 둘째 문단부터 행 첫머리에 »를 다시 놓는 라틴계 전통 조판 방식이며, \DeclareQuoteStyle에는 이를 위한 인수 자리가 따로 마련되어 있습니다.

실무상 주의점이 둘 있습니다. 첫째, csquotes.def이 담고 있는 것은 29개 언어이며 한국어와 중국어 스타일은 들어 있지 않습니다. 필요하다면 \DeclareQuoteStyle로 직접 정의하거나, 글자꼴이 일치하는 기존 스타일을 그대로 씁니다. 현대 한국어 가로짜기라면 american이 곧바로 맞습니다. 둘째, babel의 언어별 축약 기호와의 관계입니다. 독일어 babel은 "를 활성 문자로 만들어 뒤에 백틱이 오면 \glqq, 어퍼스트로피가 오면 \grqq이 되도록 하는 고전적인 장치를 갖고 있지만, 이는 원고를 독일어 전용으로 묶어 버립니다. 한 언어로 끝나는 문서라면 충분해도, 다국어라면 \enquote 쪽으로 모으는 편이 나중에 편합니다.

quotequotation의 차이

차이는 결국 한 가지, 문단이 나뉘는 지점을 무엇으로 보여 주느냐입니다. 인용이 서너 줄(대략 40 단어)을 넘으면 따옴표로 묶어 문장 안에 심는 대신 좌우로 여백을 두고 별행으로 세우는 것이 관례이고, 그 다음이 두 갈래입니다. classes.dtx의 정의를 읽어 보면 두 환경 모두 list 위에 세워져 있고 다른 것은 넘기는 매개변수뿐입니다. quote\rightmargin\leftmargin만 설정하고 첫 줄 들여쓰기는 두지 않습니다. quotation은 거기에 \listparindent 1.5em, \itemindent \listparindent, \parsep 0pt plus 1pt을 더합니다. 곧 문단 머리를 1.5em 들여쓰고 문단 사이 공백을 거의 0으로 눌러 본문과 같은 “들여쓰기로 문단을 가르는” 방식을 씁니다.

latex
\begin{quote}
One paragraph, indented from both margins,
with no first-line indent at all.
\end{quote}

\begin{quotation}
First paragraph of a longer quotation. Its first line is indented.

Second paragraph. The indent, not blank space, marks the break,
which is why quotation is the right choice past one paragraph.
\end{quotation}
환경첫 줄 들여쓰기문단 사이 공백알맞은 용도
quote없음보통의 문단 공백한 문단 인용, 제사, 나란한 짧은 줄
quotation1.5em거의 0 (0pt plus 1pt)여러 문단에 걸친 긴 인용, 대화가 든 발췌
verse−1.5em (내어쓰기)보통의 문단 공백시, 가사, 줄 나눔이 뜻을 지니는 글

초심자가 자주 저지르는 사고를 하나 짚어 둡니다. 영어권 조판에서는 별행으로 세운 인용에 따옴표를 붙이지 않습니다. 들여쓰기 자체가 “여기는 인용이다”라는 신호이므로, 거기에 “ ”를 더하면 같은 말을 두 번 하는 셈입니다. quotequotation이 따옴표를 전혀 넣지 않는 것은 이 관례를 그대로 반영한 설계입니다. 전통이 다른 곳도 있습니다. 일본어 조판에서는 별행 인용에도 「 」를 남기는 유파가 있고, 분야와 출판사에 따라 갈립니다. 어느 쪽을 택하든 문서 전체에서 일관된 편이 선택 자체보다 중요합니다.

시와 가사를 조판하는 verse 환경

줄 나눔이 뜻을 지니는 글에는 verse을 씁니다. 줄 끝은 \\로 직접 정하고, 연은 빈 줄로 나눕니다. classes.dtx의 정의를 보면 verse\itemindent음수 1.5em을 주고 \leftmargin에는 1.5em을 더합니다. 이 조합이 만들어 내는 것이 내어쓰기입니다. 판면에 들어가지 않는 긴 시행이 접힐 때 접힌 쪽만 1.5em 들어가므로, 독자는 “새로운 행”과 “접혀 넘어온 이어짐”을 한눈에 구별합니다. 매개변수 두 개로 시의 행 구조가 단 너비에 무너지지 않습니다.

latex
\begin{verse}
Roses are red, \\
Violets are blue, \\
This stanza ends here.

A new stanza starts after the blank line, and a line long enough to
run over gets a hanging indent so it still reads as a single verse.
\end{verse}

\blockquote은 길이로 행내와 블록을 가릅니다

csquotes은 quotequotation 중에서 손으로 고르는 작업 자체를 없애 버립니다. \blockquote{…}은 내용의 길이를 실제로 재어, 문턱값을 넘으면 별행 블록 인용으로, 넘지 않으면 따옴표를 붙인 행내 인용으로 조판합니다. 기본값은 thresholdtype=lines3줄이고, 블록 쪽에서 쓰는 환경은 quote입니다. \SetBlockThreshold{5}\SetBlockEnvironment{quotation}으로 바꿀 수 있고, 낱말 수로 재려면 thresholdtype=wordsthreshold=50을 줍니다. 여기에 parthreshold이 기본으로 켜져 있어 인용 안에 명시적인 문단 나눔이나 줄 바꿈이 있으면 길이와 무관하게 블록이 됩니다. 여러 문단짜리 인용은 반드시 별행으로 세운다는 직관 그대로입니다.

latex
\usepackage[autostyle=true]{csquotes}
\SetBlockThreshold{3}        % default: 3 lines
\SetBlockEnvironment{quote}  % default: the quote environment
% ...

% Short -> stays inline, with quotation marks around it:
\blockquote{Brevity is the soul of wit.}

% Longer than the threshold -> set as an indented block, no marks:
\blockquote{A passage that runs past three printed lines of text is
set off on its own instead, and csquotes reaches that decision by
measuring the material rather than by asking the author to choose
between the quote and the quotation environment by hand.}

% Block quotation that also prints a citation (page 67 of doe2020):
\blockcquote[][67]{doe2020}{The argument develops over several
sentences and is long enough to be set as a block.}

출처를 함께 내고 싶으면 \blockcquote과 그 행내 짝인 \textcquote을 씁니다. 형태는 \blockcquote[⟨앞주⟩][⟨뒷주⟩]{⟨문헌 키⟩}{⟨본문⟩}이고, 뒷주에는 보통 쪽 번호를 넣습니다. 실제로 불리는 인용 명령은 \SetCiteCommand로 바꿀 수 있어서, biblatex에서도 natbib에서도 같은 원고가 통합니다. 행내 인용만 필요하고 길이와 무관하게 반드시 따옴표를 두르고 싶다면 \textquote{…}을 쓰십시오. \blockquote과 달리 이쪽은 결코 블록으로 바뀌지 않습니다. 외국어 인용에는 \foreignblockquote{⟨언어⟩}{…}(따옴표와 하이픈 넣기를 모두 그 언어에 맞춤)와 \hyphenblockquote{⟨언어⟩}{…}(하이픈 넣기만 전환)가 있습니다.

csquotes 자체의 내력도 한마디. 이 패키지를 쓴 사람은 biblatex의 저자이기도 한 Philipp Lehman으로, 저작권 표시에 따르면 2003년부터 2011년까지 개발을 맡았습니다. 2015년부터는 Joseph Wright가 이어받았습니다(TeX Live 2024 수록판은 v5.2n). 인용과 문헌 참조를 같은 설계 사상으로 다시 엮은 사람이 동일 인물임을 알고 나면, \blockcquotebiblatex과 그토록 매끄럽게 맞물리는 이유도 납득이 갑니다.

결국 무엇을 쓸 것인가

  • 짧은 행내 인용\enquote{…}. 글자꼴은 언어가 정하고, 중첩과 짝 검사는 덤입니다.
  • 한 문단짜리 별행 인용quote. 패키지가 필요 없고 따옴표도 붙이지 않습니다.
  • 여러 문단에 걸친 긴 인용quotation(첫 줄 들여쓰기로 문단을 가름).
  • 시나 가사verse(\\로 줄을 끝내고, 빈 줄로 연을 끝내며, 접힌 줄은 내어씀).
  • 길이 판단을 맡기고 싶을 때\blockquote(기본 3줄, parthreshold이 있으면 문단이 든 인용은 반드시 블록).
  • 출처까지 함께\blockcquote / \textcquote(\SetCiteCommand으로 biblatex·natbib에 연결).
  • 다국어 문서\usepackage[autostyle=true]{csquotes}을 babel·polyglossia와 함께 씁니다.

마지막으로 하나. 지금까지의 환경은 모두 내부에서 list로 조판되므로, itemize와 마찬가지로 앞뒤에 세로 공백이 들어가고 중첩도 됩니다. 인용 안에서 줄 나눔 위치를 세밀하게 다듬으려면 “줄바꿈 및 단락바꿈”을, 들여쓰기와 가운데 맞춤 같은 배치 전반은 “텍스트 정렬”을, 인용 주변에서 쓰는 대시와 줄임표는 “따옴표 및 대시”를 참조하십시오.