“Knuth (1986)은 문단을 줄로 나누는 절차를 자세히 설명합니다”와 “문단을 줄로 나누는 절차는 이미 자세히 설명되어 있습니다 (Knuth, 1986)”는 같은 책을 가리키지만, 이 두 인용은 문법적으로 전혀 다른 부품입니다. 앞의 것은 문장의 주어 그 자체이고, 뒤의 것은 문장 밖에 세워 둔 주석일 뿐입니다. LaTeX의 인용이 \cite 하나로 끝나지 않고 natbib의 \citet・\citep, biblatex의 \textcite・\parencite처럼 짝으로 마련된 이유가 여기에 있습니다. 출력하는 쪽이 둘 중 어느 역할인지 알아야 하기 때문입니다. 이 페이지에서는 인용 표지를 출력하는 일부터 페이지 번호를 붙이는 일, 여러 문헌을 묶는 일, 그리고 인용이 [?]로 나왔을 때 고치는 일까지를 “그 문장을 소리 내어 읽어도 여전히 문장인가”라는 하나의 기준으로 살펴봅니다.
\cite{key} 쓰는 법: 인용 키, 여러 문헌, 페이지 번호
\cite{knuth}는 본문에 [1]을 출력하고, 동시에 그 문헌을 참고문헌 목록에 등록합니다. knuth는 인용 키로, 사용자가 직접 정하는 짧은 이름입니다. 키 자체는 출력에 전혀 나타나지 않습니다. 나타나는 것은 목록 쪽에서 정해진 번호나 레이블뿐입니다. 여러 문헌은 쉼표로 구분해 한 번에 넘길 수 있어서 \cite{knuth,lamport}는 [1, 2]가 됩니다. 페이지 같은 주석을 붙일 때는 선택 인수를 쓰며, \cite[p.~5]{knuth}는 [1, p. 5]를 출력합니다. ~는 줄바꿈을 허용하지 않는 공백이라 p.와 5가 줄 끝에서 갈라지지 않습니다.
순수 LaTeX가 받아들이는 주석은 하나뿐이고, 놓이는 자리도 문헌 번호 뒤로 고정되어 있습니다. “(see Knuth, 1986, p. 94)”처럼 이름 앞에 도입어를 붙이고 싶다는 요구는 여기서는 표현할 수 없습니다. 이 제약을 걷어 내는 것이 natbib과 biblatex이며, 둘은 선택 인수를 하나가 아니라 둘 받습니다. 아래의 페이지·장 표기 절에서 다룹니다. 뒤집어 말하면, 한계를 미리 알아 두는 편이 낫습니다. 맨 \cite로 말할 수 있는 범위는 생각보다 좁습니다.
% \cite prints the mark and registers the work
The algorithm is described in detail~\cite{knuth}.
% several keys in one command, comma separated
Both accounts agree on this point~\cite{knuth,lamport}.
% one optional argument = a note printed after the reference
The rule appears on page 5~\cite[p.~5]{knuth}.
% register a work in the list without printing a mark
\nocite{lamport}본문에서는 인용하지 않지만 목록에는 넣고 싶은 문헌에는 \nocite{key}를 씁니다. 인용 표지는 출력되지 않고 등록만 이루어집니다. 특수한 형태인 \nocite{*}는 .bib 파일의 모든 항목을 목록에 포함합니다. 다만 이것은 BibTeX이나 biber가 목록을 조립할 때만 의미가 있습니다. 손으로 쓴 thebibliography는 적어 둔 \bibitem을 어차피 전부 인쇄하므로 \nocite{*}를 더해도 달라지는 것이 없습니다. 문헌 데이터베이스 전체를 보여 줄 때 쓰는 도구라고 기억해 두면 충분합니다.
\citet와 \citep, \textcite와 \parencite의 차이
판단 기준은 하나, 저자명이 문장에서 문법적 역할을 하고 있는가 입니다. 하고 있다면 natbib의 \citet{knuth}(→ Knuth (1986))나 biblatex의 \textcite{knuth}(출력이 같습니다)를, 하고 있지 않다면 \citep{knuth}(→ (Knuth, 1986))나 \parencite{knuth}(→ (Knuth 1986))를 고릅니다. biblatex 설명서는 이 구별을 분명히 말로 적어 두었습니다. \textcite는 본문 흐름 속에서 주어 자리에 들어가기 위한 것이라고 설명하고, \autocite에 대해서는 인용이 문법적으로 문장의 성분이 아닌 자리에서만 쓰라고 못을 박습니다. 즉 이 두 계열은 취향이 아니라 문장 구조에 대응합니다.
% natbib: \citet is textual, \citep is parenthetical
\citet{knuth} describes how a paragraph is broken into lines.
The procedure is described in detail~\citep{knuth}.
% biblatex: same split, different names
\textcite{knuth} describes how a paragraph is broken into lines.
The procedure is described in detail~\parencite{knuth}.뒤바꾸면 출력이 문장이기를 그만둡니다. \citep를 주어 자리에 두면 “(Knuth, 1986)은 문단을 줄로 나누는 절차를 자세히 설명합니다”가 되어, 괄호가 주어 노릇을 하는 이상한 문장이 됩니다. 반대로 절 끝에서 \citet를 쓰면 “……절차는 이미 자세히 설명되어 있습니다 Knuth (1986)”처럼 갈 곳 없는 인명이 남습니다. 교정에서 이 둘을 잡아내기는 뜻밖에 어렵고, 투고 규정 검사에도 걸리지 않습니다. 문법의 오류이지 체재의 오류가 아니기 때문입니다.
그러면 맨 \cite에 맡기면 되지 않을까 싶지만, \cite는 문법을 보지 않습니다. natbib의 \cite는 모드의 별칭일 뿐이어서 authoryear 옵션에서는 \citet이 되고 numbers 옵션에서는 \citep가 됩니다. 결정하는 것은 문장의 구조가 아니라 서문에 적은 한 단어입니다. biblatex의 \cite는 한층 더 무뚝뚝해서, 괄호를 전혀 붙이지 않는 맨 레이블이라 style=authoryear에서는 Knuth 1986만 나옵니다. 본문에도 괄호 안에도 들어맞지 않는 형태입니다. 명령은 여러분 문장의 구문을 볼 수 없습니다. 볼 수 있는 것은 여러분뿐이고, 그래서 역할을 명시하는 명령이 따로 마련되어 있습니다.
이 구별을 저자‑연도식만의 문제로 여기기 쉽지만, 번호식에서도 그대로 살아남습니다. natbib의 번호 모드에서 \citet{knuth}는 Knuth [1]을, \citep{knuth}는 [1]을 출력합니다. biblatex의 style=numeric에서도 \textcite는 Knuth [1]입니다. 그래서 “일단 \cite로 써 두고 나중에 형식을 바꾸자”는 진행 방식은 사고의 씨앗이 됩니다. 바꾸는 순간, 문장의 성분이 되어야 했던 인용이 모두 대괄호로 짜부라지고 주어를 잃은 문장만 남기 때문입니다. 역할은 쓸 때 정해 기록해 둔다——이것이 유일하게 안전한 순서입니다.
| 명령(natbib) | 출력 예(authoryear) | 역할 |
|---|---|---|
\citet | Knuth (1986) | 본문형. 저자명이 문장의 성분이 됩니다 |
\citep | (Knuth, 1986) | 괄호형. 문장 밖에 놓는 주석 |
\cite | Knuth (1986) | 별칭. authoryear에서는 \citet, numbers에서는 \citep |
\citealt | Knuth 1986 | 괄호 없는 본문형. 괄호를 직접 짜고 싶을 때 |
\citealp | Knuth, 1986 | 괄호를 벗긴 괄호형. 쉼표만 남습니다 |
\citeauthor | Knuth | 저자명만. 두 번째 이후의 언급에 |
\citeyear | 1986 | 연도만. 저자명을 직접 쓴 뒤에 이어 붙입니다 |
\citeyearpar | (1986) | 괄호가 붙은 연도. \citeauthor와 짝지어 씁니다 |
\citenum | 1 | 번호만. 위첨자로는 나오지 않습니다 |
\citetext | (priv. comm.) | 문헌 키가 없는 주석을 인용 괄호에 넣습니다 |
\citet와 \citep에는 별표 형태도 있어서, 스타일이 et al.로 줄이는 저자명을 전원 분량으로 펼칩니다. 세 사람 공저라면 \citep{jbw}가 (Jones et al., 1990)이 되는 자리에서 \citep*{jbw}는 (Jones, Baker, and Williams, 1990)을 출력합니다. 첫 언급에서 전체 저자를 밝히라고 요구하는 학술지가 대표적인 사용 상황입니다. 펼칠 수 있는지는 .bst 스타일이 전체 저자명을 갖고 있는지에 달려 있어서, 지원하지 않는 스타일에서는 별표를 붙여도 줄임형 그대로입니다.
biblatex는 같은 두 역할을 유지하면서 인용을 어디에 두는가 자체를 명령으로 만들었습니다. \footcite는 인용 전체를 각주로 보내고, \supercite는 번호를 위첨자로 냅니다. \autocite는 한 단계 더 추상적이어서, 패키지 옵션 autocite의 값(plain, inline, footnote, superscript)에 따라 \cite, \parencite, \footcite, \supercite 중 하나로 바뀝니다. 본문을 \autocite로 써 두면 서문의 한 단어만으로 괄호 인용과 각주 인용을 통째로 전환할 수 있습니다. 다만 \textcite의 역할까지 대신하지는 못합니다. 문장의 일부가 된 인용을 기계적으로 각주로 내릴 수는 없기 때문입니다. 그중 가장 재미있는 것은 \smartcite로, 본문에서는 \footcite처럼, 각주 안에서는 \parencite처럼 행동하며 자기가 놓인 자리를 보고 모습을 바꿉니다.
| 명령(biblatex) | 출력 예(style=authoryear) | 역할 |
|---|---|---|
\textcite | Knuth (1986) | 본문형. 주어 자리에 들어갑니다 |
\parencite | (Knuth 1986) | 괄호형. 번호 계열 스타일에서는 대괄호 |
\cite | Knuth 1986 | 맨 레이블. 괄호를 전혀 붙이지 않습니다 |
\autocite | (Knuth 1986) | 패키지 옵션 autocite에 따라 형태가 바뀝니다 |
\footcite | 각주에 Knuth 1986. | 인용 전체가 각주로 가고 끝에 마침표가 붙습니다 |
\smartcite | 각주에 Knuth 1986. | 본문에서는 \footcite, 각주 안에서는 \parencite처럼 행동합니다 |
\supercite | 위첨자 번호(괄호 없음) | 번호 계열 스타일 전용. 앞뒤 주석은 버려집니다 |
\cite* | 1986 | 저자‑연도식에서는 연도만, 저자‑제목식에서는 제목만 |
페이지와 장 표기: [p.~5]와 앞 주석 [see][p.~94]
natbib과 biblatex는 모두 선택 인수를 둘 받으며, 앞의 것이 앞 주석, 뒤의 것이 뒤 주석입니다. \citep[see][p.~94]{knuth}는 (see Knuth, 1986, p. 94)를, \citet[chap.~2]{lamport}는 Lamport (1994, chap. 2)를 출력합니다. 페이지 이외의 위치 지정——장, 절, 그림, 행——도 그대로 뒤 주석에 적습니다. 맨 \cite로는 할 수 없었던 “앞에 한마디 붙이기”가 여기서 가능해집니다.
여기에 숙련자도 한 번은 밟는 함정이 있습니다. 선택 인수가 하나뿐일 때는 그것을 뒤 주석으로 읽습니다. 그래서 앞말을 붙일 셈으로 \citep[e.g.,]{knuth}라고 쓰면 출력은 (Knuth, 1986, e.g.,)가 되어 “예를 들어”가 문헌 뒤로 떨어집니다. biblatex도 같아서 \parencite[see]{knuth}는 (Knuth 1986, see)입니다. 올바른 형태는 빈 두 번째 인수를 남기는 \citep[e.g.,][]{knuth}입니다. 대괄호가 둘 나란히 놓인 모습은 오타처럼 보이지만 이것이 정답입니다.
biblatex에는 요긴한 배려가 하나 있습니다. 뒤 주석이 숫자뿐일 때는 그것을 페이지 번호로 해석해 p.를 스스로 붙입니다. \parencite[25]{knuth}는 (Knuth 1986, p. 25)입니다. 게다가 접두어는 고정이 아니라 .bib 항목에 pagination 필드를 두면 바꿀 수 있습니다. pagination = {verse}라면 같은 [17]이 v. 17이 되고, section이면 § 17이 됩니다. 페이지로 세지 않는 고전 작품이나 악보를 다루는 원고에서는 이 한 줄로 모든 인용의 표기가 정돈됩니다.
% one optional argument is always the post-note
\citep[p.~94]{knuth} % -> (Knuth, 1986, p. 94)
% two optional arguments are pre-note and post-note
\citep[see][p.~94]{knuth} % -> (see Knuth, 1986, p. 94)
% a pre-note alone still needs the empty second bracket
\citep[e.g.,][]{knuth} % -> (e.g., Knuth, 1986)
\citep[e.g.,]{knuth} % -> (Knuth, 1986, e.g.,) <- wrong
% biblatex reads a bare number as a page and adds "p."
\parencite[25]{knuth} % -> (Knuth 1986, p. 25)여러 문헌을 한 번에 인용하기: 번호의 정렬과 압축
여러 문헌은 반드시 하나의 명령에 모아서 넘깁니다. \citep{knuth,lamport}는 (Knuth, 1986; Lamport, 1994), 번호식이라면 [1, 2]가 됩니다. \cite{knuth}\cite{lamport}처럼 이어 쓰면 [1][2]처럼 따로 늘어서고, 스타일 쪽에서는 정렬할 수도 범위로 묶을 수도 없습니다. 함께 보여 주지 않은 것을 정돈할 수는 없다는 이야기입니다. 본문형 복수 인용도 마찬가지여서, biblatex의 \textcite{knuth,lamport}는 Knuth (1986) and Lamport (1994)처럼 접속사까지 채워 주므로 문장은 문장 그대로 남습니다.
문헌마다 다른 페이지 번호를 붙이고 싶을 때는 biblatex의 복수형(qualified citation list)을 씁니다. \textcites[59]{knuth}[12]{lamport}는 Knuth (1986, p. 59) and Lamport (1994, p. 12)를 출력하며, 각 키가 자기 앞·뒤 주석을 가질 수 있습니다. \parencites, \footcites 등 대응하는 복수형이 두루 갖추어져 있습니다. natbib에는 같은 장치가 없어서, 주석이 문헌마다 다르면 \citep[p.~59]{knuth}와 \citep[p.~12]{lamport}를 나란히 두고 사이의 접속어는 직접 써야 합니다.
번호식은 유지하되 모양만 정리하고 싶다면 Donald Arseneau의 cite 패키지가 간편합니다. \usepackage{cite} 한 줄만으로 표준 \cite가 똑똑해져서, 번호를 오름차순으로 정렬하고 연속된 번호를 범위로 압축합니다. \cite{c,a,b,e}가 2・3・4・6번을 가리키면 출력은 [2–4, 6]입니다. 옵션으로는 위첨자로 만드는 superscript(별칭 super), 정렬을 끄는 nosort, 범위 압축을 끄는 nocompress, 번호 사이 공백을 줄이는 nospace, 줄바꿈을 막는 nobreak가 있습니다. 다만 natbib과 biblatex은 자체 정렬·압축을 갖추고 있어서(natbib이라면 sort와 sort&compress 옵션), 그쪽을 쓴다면 cite는 필요 없습니다.
\cite의 번호는 어디에서 오는가: thebibliography와 \bibitem
\cite{key}가 내놓는 번호의 출처는 같은 key를 가진 \bibitem입니다. 참고문헌 목록을 그 자리에서 적어 내는 가장 기본적인 방법은 thebibliography 환경이고, 그 안의 \bibitem{key} ... 하나가 문헌 한 건입니다. 놓인 순서대로 1, 2, 3 … 번호가 매겨지고 \cite는 그 번호를 끌어옵니다. \begin{thebibliography}{99}의 {99}는 가장 넓은 레이블을 넘기는 인수로, 레이블 칸의 폭이 여기서 정해집니다. 항목이 10건 이상이면 {99}, 9건 이하이면 {9}가 기준이며, 잘못 지정하면 번호가 맞지 않고 들여쓰기가 들쭉날쭉해집니다. 번호 대신 고유한 레이블을 쓰고 싶다면 \bibitem[KL94]{lamport}라고 적으면 되고, [KL94]가 레이블이 되어 \cite{lamport}도 그것을 출력합니다.
\begin{thebibliography}{99}
\bibitem{knuth}
Donald E. Knuth, \emph{The \TeX book}, Addison-Wesley, 1986.
% an optional argument replaces the automatic number
\bibitem[KL94]{lamport}
Leslie Lamport, \emph{\LaTeX: A Document Preparation System},
2nd ed., Addison-Wesley, 1994.
\end{thebibliography}손으로 쓴 thebibliography가 어울리는 경우는 두 가지입니다. 문헌이 몇 건뿐일 때, 그리고 체재를 쉼표 하나까지 직접 정하고 싶을 때입니다. 그 범위를 넘어서면, 문헌 정보를 .bib 파일에 서식 적용 전 데이터로 쌓아 두고 BibTeX이나 biber에게 목록을 짜게 하는 편이 빠르고 정확하며 재사용도 됩니다. 번호 매기기, 정렬, 체재가 투고 규정에 맞춰 자동화되고, 같은 .bib를 여러 원고가 공유할 수 있습니다. 중요한 것은 쓰는 쪽의 방식은 하나도 바뀌지 않는다는 점입니다. \cite{knuth}가 \bibitem 대신 .bib 항목을 찾을 뿐, 이 페이지에서 본 명령은 그대로 통합니다.
인용이 [?]로 나오거나 Citation ... undefined가 뜰 때
[?]는 “그 페이지를 조판한 시점에 .aux에 그 키의 레이블이 없었다”는 뜻입니다. 로그에는 LaTeX Warning: Citation 'nosuchkey' on page 1 undefined on input line 4.가 나오고, 실행이 끝날 때 LaTeX Warning: There were undefined references.가 한 줄 덧붙습니다. 원인은 둘뿐입니다. 실행 횟수가 모자라거나, 키가 맞지 않거나 입니다.
실행 횟수 이야기는 번호나 상호 참조와 똑같은 구조입니다. 첫 실행에서 각 \bibitem의 번호가 .aux에 기록되고, 두 번째 실행에서 그것을 읽어 각 \cite 자리에 넣습니다. BibTeX이나 biber를 거친다면 순서는 latex → bibtex(또는 biber) → latex → latex이며, 가운데 한 수를 빠뜨리면 [?] 그대로 남습니다. 키 쪽에서는 단순한 오타 외에, .bib를 고쳐 놓고 BibTeX을 다시 돌리지 않은 경우에도 같은 증상이 납니다. .aux를 지우고 처음부터 다시 하면 구분이 빠릅니다.
biblatex는 물음표를 내지 않고 키 자체를 인쇄합니다. \parencite{nosuchkey}는 (nosuchkey)가 되고, 로그에는 Package biblatex Warning: The following entry could not be found ...가 늘어섭니다. 지면에서는 섬뜩해 보이지만, 어느 키가 길을 잃었는지가 그대로 찍히므로 원인을 짚어 내기는 오히려 빠릅니다.
하나 더, natbib에만 있는 증상이 있습니다. \citet를 썼는데 출력이 (author?) [1]이 되고 로그에 Package natbib Warning: Author undefined for citation 'knuth'가 뜨는 경우입니다. 원인은 인용 명령이 아니라 .bst 스타일 쪽입니다. \bibliographystyle{plain}이 고르는 것처럼 natbib을 모르는 스타일은 저자명과 연도를 담은 레이블을 \bibitem에 써 주지 않습니다. \bibliographystyle{plainnat} 같은 natbib 대응 스타일로 바꾸면 해결됩니다. \citet가 동작하지 않는다고 느껴지면 먼저 .bst를 의심하는 것이 지름길입니다.
natbib과 biblatex 중 어느 인용 명령을 쓸 것인가
둘 중 하나만 읽어 들이고 끝까지 밀고 간다 ——이것이 실무상의 유일한 답입니다. 둘은 같은 일을 다른 설계로 풀고 있어서, 동시에 읽어 들이면 명령 이름이 충돌합니다. 투고처가 클래스 파일이나 스타일을 배포한다면 그쪽이 요구하는 것을 먼저 따릅니다. 상당수 학회 클래스는 natbib을 전제로 합니다. 직접 고를 수 있다면 biblatex이 유니코드 처리, 다국어 문서, 각주 인용, 분야별 스타일의 다양성에서 앞섭니다. natbib은 1993년부터 쓰여 왔고 대응하는 .bst가 방대해서, 오래된 템플릿이 계속 이쪽을 고르는 이유가 됩니다.
어느 쪽을 고르든 판단의 순서는 달라지지 않습니다. 먼저 그 인용이 문장의 성분인지를 정하고 \citet・\textcite인지 \citep・\parencite인지를 고릅니다. 다음으로 위치 지정이 필요하면 선택 인수를, 여럿을 묶으려면 쉼표 목록이나 qualified list를 씁니다. 겉모습——괄호의 종류, 번호식인지 저자‑연도식인지, 구분 기호——은 맨 마지막이고, 그 층은 패키지 옵션과 .bst・스타일 파일의 몫입니다. 이 순서로 써 두면 투고처가 바뀌어도 손댈 곳은 마지막 한 층뿐입니다.