BibTeX는 참고문헌을 관리하는 고전적인 방식입니다. 각 문헌을 .bib 데이터베이스에 한 번만 기록해 두면 참고문헌 목록이 자동으로 생성됩니다. 본문에서는 \cite로 키를 호출하기만 하면 됩니다. 스타일 파일(.bst)을 바꾸면 같은 데이터를 학회나 저널 형식에 맞게 다시 조판할 수 있습니다. 이 페이지에서는 .bib 파일 작성법, \bibliographystyle와 \bibliography의 역할, 그리고 “latex → bibtex → latex → latex”라는 독특한 빌드 순서를 살펴봅니다.
BibTeX란 무엇인가
문서 끝에 참고문헌을 손으로 나열할 수도 있습니다(thebibliography 환경). 하지만 문헌 수가 늘어나고 여러 논문에서 같은 문헌을 재사용하게 되면 금방 한계에 부딪힙니다. BibTeX는 Oren Patashnik가 1985년 무렵 작성한 별도 프로그램으로, TeX/LaTeX 본체와 나란히, 그러나 분리되어 실행됩니다. 역할은 문헌 데이터베이스에서 “실제로 인용된 문헌만” 꺼내 선택한 스타일로 형식화하고, 문서가 끼워 넣을 수 있는 형태로 써 내는 것입니다.
이 구조는 세 부분으로 나뉩니다. .bib 파일(문헌의 원자료), 본문 안의 \cite 호출과 두 명령(\bibliographystyle, \bibliography), 그리고 모양을 정하는 .bst 파일(스타일)입니다. 데이터와 모양이 분리되어 있으므로 투고처가 바뀌어도 데이터는 전혀 건드리지 않고 스타일 이름 하나만 바꾸면 됩니다. 이는 LaTeX 전체에 흐르는 “구조와 표현의 분리”라는 생각 그 자체입니다.
.bib 데이터베이스 쓰기
.bib 파일은 항목의 목록입니다. 각 항목은 @article 같은 유형을 선언한 뒤, 중괄호 안에 인용 키와 필드를 적습니다. 인용 키는 사용자가 정하는 식별자(예: knuth1984)이며 문서의 \cite{...}와 한 글자도 틀리지 않아야 합니다. 필드는 fieldname = {value} 형식으로 쓰고 쉼표로 구분합니다.
@book{knuth1984,
author = {Donald E. Knuth},
title = {The {TeX}book},
publisher = {Addison-Wesley},
year = {1984}
}
@article{shannon1948,
author = {Claude E. Shannon},
title = {A Mathematical Theory of Communication},
journal = {Bell System Technical Journal},
volume = {27},
number = {3},
pages = {379--423},
year = {1948}
}
@inproceedings{lamport1987,
author = {Leslie Lamport},
title = {Document Production: Visual or Logical?},
booktitle = {Proceedings of TUG},
year = {1987},
pages = {19--24}
}자주 쓰는 유형과 필수 필드를 익혀 두면 좋습니다. @article은 학술지 논문(author, title, journal, year), @book은 책(author 또는 editor, title, publisher, year), @inproceedings는 학회 논문(author, title, booktitle, year)입니다. 그 밖에 학위논문용 @phdthesis/@mastersthesis, 책의 한 장을 나타내는 @incollection, 웹 페이지 등 잡다한 항목을 넣는 @misc가 있습니다. 유형별 필수 필드는 스타일이 결정합니다.
값을 감싸는 중괄호에는 실제 의미가 있습니다. title = {The {TeX}book}처럼 안쪽에 한 쌍을 더 넣으면 그 부분이 스타일의 대소문자 변환에서 보호됩니다(TeX가 Tex로 낮춰지지 않음). 저자가 여럿이면 author = {A. Smith and B. Jones}처럼 and로 구분하고, 이름 순서와 약어 처리는 BibTeX와 스타일에 맡깁니다.
문서 쪽의 두 명령
문서 쪽에서는 참고문헌이 나올 위치(보통 본문 끝)에 두 명령을 둡니다. \bibliographystyle{plain}은 스타일, 즉 어떤 .bst를 쓸지 고르고, \bibliography{references}는 BibTeX에 어떤 데이터베이스를 읽을지 알려 주는 동시에 그 위치에 참고문헌 목록을 출력합니다. 후자에는 .bib 확장자를 붙이지 않는 점에 주의하세요. 파일 이름이 references.bib여도 references라고 씁니다.
\documentclass{article}
\begin{document}
TeX was created by Knuth~\cite{knuth1984}, building on
Shannon's information theory~\cite{shannon1948}.
\bibliographystyle{plain}
\bibliography{references}
\end{document}본문의 \cite{knuth1984}는 .bib의 인용 키 knuth1984를 가리킵니다. 키가 일치하지 않으면 문헌은 나타나지 않습니다(정의되지 않은 참조 경고가 납니다). 인용된 문헌만 목록에 나오며, .bib에 들어 있어도 인용하지 않은 것은 무시됩니다(전체를 내보내려면 \nocite{*}를 사용합니다). \cite 자체의 변형, 예를 들어 여러 인용, 쪽 지정, cite 패키지는 “인용의 기본” 페이지에서 다룹니다.
빌드 순서(4번 실행)
BibTeX에서 처음 헷갈리는 부분이 여기입니다. 목록을 올바르게 만들려면 전통적으로 latex → bibtex → latex → latex 순서로 도구를 네 번 실행합니다. 왜 여러 번일까요? BibTeX는 LaTeX 본체와 별도의 프로그램이고, 둘이 보조 파일(.aux, .bbl)을 통해 정보를 주고받기 때문입니다.
- 1번째 latex — 본문을 처리하고 인용된 키와
\bibliographystyle/\bibliography설정을.aux파일에 씁니다. 이 시점의 참고문헌 목록은 아직 비어 있습니다. - bibtex —
.aux를 읽어 어떤 키가 인용되었는지, 어떤 스타일인지, 어떤.bib인지 파악하고,.bib에서 해당 항목을 꺼내.bst규칙으로 형식화한 뒤.bbl파일에 씁니다. - 2번째 latex —
.bbl을 가져와 참고문헌 목록을 조판하지만, 각 문헌 번호 같은 상호참조는 아직 해결되지 않았습니다. - 3번째 latex — 번호와
\cite표시가 확정되어 본문 인용과 참고문헌 목록이 완전히 맞아떨어집니다.
$ latex document.tex # writes document.aux (cite keys)
$ bibtex document # reads .aux + .bib + .bst, writes .bbl
$ latex document.tex # pulls in .bbl
$ latex document.tex # resolves all referencesbibtex에 넘기는 것은 .tex가 아니라 보조 파일 이름(확장자 없는 작업 이름) 이라는 점에 주의하세요. pdflatex를 사용할 때도 절차는 같고, latex를 pdflatex로 바꾸기만 하면 됩니다. 매번 네 번 입력하는 것은 번거로우므로 실무에서는 latexmk에 맡깁니다. latexmk는 .aux 내용을 보고 BibTeX 실행 필요 여부와 필요한 반복 횟수를 자동으로 판단하므로, 보통 한 번 실행하면 됩니다.
$ latexmk -pdf document.tex # runs latex/bibtex/latex as many times as needed표준 스타일(.bst)
스타일은 문헌의 정렬 순서, 레이블(번호 또는 약호), 저자명과 학술지명의 축약 방식을 정합니다. BibTeX에는 표준으로 네 가지 스타일이 포함되어 있으며, 이것만 알아도 많은 용도에 충분합니다. \bibliographystyle{...}에 이름을 넘기기만 하면 전환됩니다.
| 스타일 | 순서 | 레이블 / 특징 |
|---|---|---|
plain | 저자 알파벳순 | 번호 [1]; 가장 일반적인 기본값 |
unsrt | 본문에서 처음 인용한 순서 | 번호 [1](plain과 같은 형식) |
alpha | 레이블순(대략 저자, 연도) | [Knu84] 같은 영숫자 레이블 |
abbrv | 저자 알파벳순 | 이름(first names)과 학술지명을 축약 |
그 밖에도 분야별 정석 스타일이 표준으로 포함되어 있습니다. 공학에서 널리 쓰이는 ieeetr(IEEE Transactions식, 인용 순서 번호), 컴퓨터 과학의 acm(ACM식), 응용수학의 siam(SIAM식) 등입니다. 학회와 출판사도 자체 .bst 파일을 배포하므로 투고처의 지정에 따라 바꾸면 됩니다. 스타일을 바꾸어도 .bib와 본문의 \cite를 전혀 바꾸지 않아도 된다는 점이 BibTeX의 장점입니다.
일본어: pbibtex / upbibtex
기본 bibtex는 서양어 텍스트를 대상으로 하므로 일본어 저자명이나 제목이 들어 있는 필드를 잘 정렬하거나 처리하지 못합니다. 그래서 pLaTeX/upLaTeX에는 일본어를 고려한 명령이 마련되어 있습니다. pbibtex는 pLaTeX용이며 EUC-JP 코드 포인트 기준으로 정렬합니다. upbibtex는 upLaTeX용이며 Unicode 코드 포인트 기준으로 정렬합니다. 둘 다 JBibTeX(Shouichi Matsui 개발)의 계보를 잇고, 일본어 필드가 문자 중간에서 잘리지 않도록 내장 함수를 확장했습니다.
사용법은 서양어의 경우와 같습니다. 빌드 순서에서 latex를 platex(또는 uplatex)로, bibtex를 pbibtex(또는 upbibtex)로 바꾸기만 하면 됩니다. 스타일도 일본어판이 준비되어 있어 plain에 대응하는 jplain, unsrt에 대응하는 junsrt, alpha에 대응하는 jalpha, 그리고 “[Kin80] Kinoshita: …”처럼 성을 앞에 내세우는 jname 등이 있습니다(jipsj 같은 학회용 스타일도 있습니다).
$ uplatex document.tex # 1st pass: writes .aux
$ upbibtex document # Japanese-aware: writes .bbl
$ uplatex document.tex # pulls in .bbl
$ uplatex document.tex # resolves references
$ dvipdfmx document.dvi # DVI -> PDFupLaTeX는 DVI를 거치므로 마지막에 dvipdfmx로 PDF로 변환합니다(이 흐름은 일본어 페이지와 DVI 변환기 페이지에서 자세히 다룹니다). latexmk는 pbibtex/upbibtex를 호출하도록 설정할 수 있으므로, 일본어에서도 네 번의 수동 실행을 자동화할 수 있습니다.
BibTeX의 한계와 biber/biblatex
BibTeX는 오래 검증되었고 널리 쓰이지만 설계가 오래되어 몇 가지 제약이 있습니다. 8비트 인코딩을 전제로 하므로 Unicode를 깔끔하게 다루지 못하고(다국어 저자명과 악센트 기호가 번거롭습니다), 정렬 유연성이 낮으며, 복잡한 형식을 만들려면 .bst라는 독특한 스택 지향 작은 언어를 써야 합니다.
이런 제약을 없애기 위해 biblatex(LaTeX 패키지)와 그 기본 백엔드 biber가 나왔습니다. 이들은 Unicode를 네이티브로 처리하고, 정렬과 서식을 LaTeX 쪽 옵션으로 세밀하게 제어할 수 있게 하며, .bst를 쓰지 않아도 되게 합니다. 새 프로젝트에서는 biblatex/biber가 유력한 선택지이며 별도 페이지에서 다룹니다.