한 단어만 바꿉니다. \usepackage 줄의 style=numeric을 style=authoryear로 바꾸면 본문의 모든 인용과 참고문헌 목록의 모든 항목이 다른 모양으로 나옵니다. 이 한 단어가 biblatex와 백엔드 biber를 쓰는 이유의 거의 전부입니다. 고전적인 BibTeX는 서식을 스택 언어로 쓰인 .bst 프로그램 안에 가두어 두었지만, biblatex는 서식을 다시 LaTeX 매크로 쪽으로 돌려주고——읽을 수 있고 재정의할 수 있습니다——데이터 쪽, 곧 읽기와 중복 해소와 정렬을 biber에 맡깁니다. 이 페이지에서는 그것을 굴러가게 하는 프리앰블(\usepackage[backend=biber, style=…]{biblatex}, \addbibresource, \printbibliography), latex → biber → latex → latex 빌드, 인용 명령 \autocite・\parencite・\textcite, 그리고 가장 흔한 사고——편집기가 계속 bibtex를 호출해 참고문헌이 빈 채로 남는 일——을 다룹니다.
biblatex와 biber의 차이: 어느 쪽이 패키지이고 어느 쪽이 프로그램인가
biblatex는 LaTeX 패키지이고, biber는 외부 프로그램입니다. biblatex는 인용과 참고문헌 목록의 겉모습을 정하고, biber는 .bib를 읽어 상호 참조를 풀고 저자명 중복 해소가 필요한 지점을 판정한 뒤 정렬해 .bbl로 써 냅니다. BibTeX에서는 이 두 일이 하나의 .bst 파일 안에 함께 있었습니다. 데이터 처리도 서식도, 이름조차 없는 후위 스택 언어로 쓰여 있었다는 것은 BibTeX 페이지에서 본 그대로입니다. biblatex는 이 층을 갈라놓았습니다. 설명서의 표현을 빌리면 서식은 이제 “전적으로 TeX 매크로가 제어”하며, 새 스타일을 설계하는 데 필요한 것은 LaTeX 지식뿐입니다.
.bib(또는 다른 데이터 원본)를 내부 데이터 모델로 파싱합니다crossref, 항목 집합, 관련 항목을 해결합니다- 동일한 이름과 저자 목록을 구별하는 데 필요한 데이터를 생성합니다
- 각 항목을 데이터 모델에 비추어 구조적으로 검증합니다
- 참고문헌 목록을 정렬합니다. 요청하면 여러 목록을 서로 다른 순서로 정렬합니다
- biblatex가 다시 읽어 들일
.bbl을 써 냅니다
백엔드는 backend= 옵션으로 고르며 biber, bibtex, bibtex8 세 가지를 지정할 수 있습니다. 기본값은 biber입니다. 셋의 차이는 우선 문자 인코딩에서 드러납니다. biblatex 설명서는 bibtex를 “US-ASCII 인코딩만 지원하며 정렬은 언제나 대소문자를 구별하지 않는다”라고, bibtex8을 US-ASCII와 Latin-1 같은 8비트 인코딩을 지원한다고, biber를 US-ASCII와 8비트 인코딩과 UTF-8과 즉시 재인코딩과 로캘별 정렬을 지원한다고 설명합니다. 다시 말해 bibtex를 고른 순간 비영어 참고문헌은 이미 막다른 길이며, 이것이 실무에서 가장 크게 작용하는 차이입니다. biber는 Perl로 작성되었지만 TeX Live와 MacTeX가 실행 파일로 함께 배포하므로 Perl을 따로 설치할 필요는 없습니다.
이름도 알아 둘 만합니다. biblatex를 쓴 사람은 Philipp Lehman으로, 2006년부터 2012년까지 혼자 키웠습니다. 2012년에 Philip Kime이 물려받았고, 2017년부터는 Moritz Wemheuer가 꾸준히 참여하고 있습니다(인수인계 시기에는 Audrey Boruvka와 Joseph Wright가 도왔습니다). 설명서는 지금도 Lehman을 저자로 올려 두고 “그의 훌륭한 원본 코드 상당 부분이 핵심에 남아 있다”라고 밝힙니다. biber는 Philip Kime과 François Charette의 작품이며, biblatex 전용으로 설계되었기에 단독으로는 쓸 수 없습니다. .bst를 건네도 아무 일도 일어나지 않습니다. bibtex가 범용 도구였다면 biber는 biblatex의 부품입니다.
컴파일되는 최소 구성: \usepackage{biblatex}, \addbibresource, \printbibliography
명령 세 개면 됩니다. 프리앰블에서 \usepackage[backend=biber, style=…]{biblatex}로 패키지를 불러오고, 역시 프리앰블에서 \addbibresource{refs.bib}로 문헌 데이터베이스를 등록한 뒤, 목록이 놓일 자리에 \printbibliography를 둡니다. 인용은 \autocite, \parencite 같은 명령으로 합니다. .bib 파일 자체의 작성법——@article 같은 항목 유형, 인용 키, 필드——은 BibTeX와 완전히 같으며 문헌 데이터베이스 페이지에서 다룹니다. 이전이 보기보다 싸게 먹히는 이유가 바로 이것입니다.
\documentclass{article}
\usepackage[backend=biber, style=authoryear]{biblatex}
\addbibresource{refs.bib} % preamble only, and the .bib extension IS required
\begin{document}
\textcite{shannon1948} introduced the measure.
Later work built on it \autocite[see][45]{knuth1984}.
\printbibliography
\end{document}BibTeX에서 넘어온 사람이 가장 먼저 걸리는 지점이 이 등록 방식입니다. \addbibresource는 프리앰블 전용이며, 본문 끝의 \bibliography{refs}를 대신합니다. 그리고 .bib 확장자를 반드시 적어야 합니다. \bibliography는 확장자를 붙이지 않았지만 \addbibresource는 완전한 파일 이름을 요구하므로 \addbibresource{refs}라고 쓰면 파일을 찾지 못합니다. 여러 번 쓰면 데이터베이스를 파일별로 나눌 수 있고, biber를 백엔드로 쓰면 \addbibresource[glob]{bib/*.bib} 같은 글로브 패턴이나 http://로 시작하는 원격 자원도 넘길 수 있습니다. 한편 \bibliographystyle은 여기서 쓰이지 않습니다. 스타일은 \usepackage 옵션이 정하기 때문입니다.
이 style=은 사실 두 파일을 동시에 불러오는 마스터 옵션입니다. style=authoryear는 참고문헌 목록용 authoryear.bbx와 인용용 authoryear.cbx를 함께 읽습니다. 기본값은 numeric입니다. 둘을 어긋나게 하고 싶을 때——예를 들어 목록은 저자-연도식, 인용은 번호식으로——만 bibstyle=과 citestyle=을 따로 지정합니다. 평소에는 style= 하나면 충분합니다.
빌드가 latex → biber → latex → latex인 이유
LaTeX은 한 번 돌아 보기 전에는 자신이 무엇을 인용했는지 모르기 때문입니다. 첫 번째 실행에서 biblatex는 인용 키와 설정 전체를 .bcf라는 XML 제어 파일에 써 냅니다. biber는 그 .bcf를 읽어 .bib와 맞춰 처리한 뒤 .bbl을 씁니다. 두 번째 실행이 그 .bbl을 끌어들이고, 세 번째 실행이 상호 참조와 쪽 번호를 확정합니다. 횟수의 이치는 BibTeX와 같지만, 호출하는 프로그램이 bibtex가 아니라 biber이고, 넘기는 것도 .tex가 아니라 확장자 없는 작업 이름입니다. pdflatex나 lualatex를 써도 latex 자리의 이름만 바뀔 뿐 구조는 같습니다.
$ pdflatex document.tex # 1st pass: writes document.bcf with the cited keys
$ biber document # NOT bibtex, and no .tex extension: reads .bcf, writes .bbl
$ pdflatex document.tex # 2nd pass: pulls the .bbl in
$ pdflatex document.tex # 3rd pass: settles cross-references and page numbers여기서 나는 사고는 원인이 거의 하나로 모입니다. 편집기나 latexmk 설정이 여전히 bibtex를 호출하고 있는 경우입니다. biblatex는 \citation도 \bibdata도 \bibstyle도 .aux에 아예 쓰지 않으므로, bibtex document를 돌리면 세 줄이 한꺼번에 나옵니다. I found no \citation commands---while reading file document.aux, I found no \bibdata command---while reading file document.aux, I found no \bibstyle command---while reading file document.aux. .bbl은 만들어지지 않고, LaTeX 쪽에서는 LaTeX Warning: Empty bibliography와 LaTeX Warning: Citation 'knuth1984' on page 1 undefined가 나온 뒤 Package biblatex Warning: Please (re)run Biber on the file:이 이어집니다. 이 마지막 줄이 그대로 답입니다. bibtex를 돌리던 자리에 biber를 돌리면 됩니다.
$ latexmk -pdf document.tex # detects biblatex in the .fls/.bcf and runs biber itself명령 네 개를 손으로 치는 것은 작업 흐름이라 할 수 없으므로 실무에서는 latexmk에 맡깁니다. 최근 판은 biblatex를 감지해 biber를 자동으로 호출하고 필요한 만큼 반복해 줍니다. 편집기에서 쓴다면 latexmk 기반 엔진이 가장 안전합니다. TeXShop의 LaTeXmk 엔진이나 VS Code LaTeX Workshop의 latexmk 레시피가 그것입니다. Overleaf는 biblatex를 감지해 알아서 biber를 돌립니다. 손으로 짠 빌드 스크립트만 확인하면 됩니다. bibtex 줄을 biber로 바꾸십시오.
is wrong format version: biber와 biblatex는 짝으로 정해진 버전을 씁니다
biber와 biblatex는 서로 맞는 버전끼리만 동작합니다. biber 설명서에는 둘의 대응표가 실려 있고, biber 2.7/biblatex 3.7 이후로는 마이너 번호가 완전히 발을 맞춥니다. TeX Live 2024가 싣고 있는 것은 biber 2.19와 biblatex 3.19입니다. 이 점은 패키지 관리자가 biblatex만 갱신했을 때, 또는 따로 설치한 biber(예컨대 Homebrew에서 온 것)가 PATH 앞자리를 차지하고 있을 때 문제가 됩니다. 증상은 Package biblatex Warning: File 'document.bbl' is wrong format version - expected … 경고와 아무리 고쳐도 바뀌지 않는 참고문헌입니다. 해결은 단순합니다. 같은 배포판에서 biber와 biblatex를 함께 갱신하고, document.bbl을 지운 뒤 다시 조판합니다. biber --version과 로그 앞머리에 찍히는 biblatex 버전을 대조하면 어긋났는지 바로 알 수 있습니다.
style=numeric과 style=authoryear: 한 단어로 인용 스타일 바꾸기
style=에 다른 이름을 적으면 인용과 참고문헌 목록이 함께 바뀝니다. biblatex에 딸려 오는 범용 계열은 다섯 가지——numeric, alphabetic, authoryear, authortitle, verbose——이며 각각 변종이 있습니다. 흥미로운 점은 스타일이 불러올 때 autocite=의 기본값까지 스스로 정한다는 것입니다. numeric, alphabetic, authoryear는 autocite=inline을, authortitle과 verbose는 autocite=footnote를 설정합니다. 인용을 본문에 두는 분야인지 출처를 각주로 내리는 분야인지에 대한 전제가 스타일 안에 들어 있는 셈입니다.
| style= | 인용이 보이는 모양 | 설계상의 전제 |
|---|---|---|
numeric | [1] | 기본값. LaTeX 표준 번호식에 해당하며 autocite=inline을 설정합니다 |
numeric-comp | [1--3, 7, 8] | 연속된 번호를 범위로 묶습니다. [8, 3, 1, 7, 2]가 [1--3, 7, 8]이 됩니다 |
alphabetic | [Jon95] / [JW86] | BibTeX의 alpha.bst에 해당하며 저자와 연도로 짧은 태그를 만듭니다 |
authoryear | Doe 1995a | 같은 저자가 같은 해에 여러 편을 냈으면 a, b…를 붙여 구별합니다 |
authoryear-comp | Doe 1992, 1995a,b | 한 명령에 넘긴 여러 문헌의 저자가 같으면 저자명을 한 번만 출력합니다 |
authortitle | Doe, Short title | 연도를 앞세우지 않고 shorttitle이 있으면 그것을 씁니다. autocite=footnote |
verbose | 처음에는 전체 서지, 이후에는 축약형 | 첫 인용에서 모든 정보를 주므로 참고문헌 목록 없이도 성립합니다 |
투고처가 서식을 지정한다면 이미 만들어진 스타일 패키지를 찾는 편이 빠릅니다. TeX Live에는 공학의 biblatex-ieee, 심리학과 인접 분야의 biblatex-apa, 인문학의 biblatex-chicago와 biblatex-mla, 자연과학의 biblatex-nature와 biblatex-science, 영국법의 oscola가 들어 있고, 국가 규격을 따른 것으로 중국의 biblatex-gb7714-2015(GB/T 7714-2015), 러시아의 biblatex-gost, 브라질의 biblatex-abnt, 독일 인문학의 biblatex-dw 등이 있습니다. 한국어권 학술지는 여전히 지정 서식을 .bst로 배포하는 경우가 많고, 그럴 때는 BibTeX 쪽에 남는 편이 현실적입니다. 갈림길은 BibTeX 페이지에 정리해 두었습니다.
\autocite와 \parencite와 \textcite의 사용 구분
저자명을 문장의 일부로 읽히게 하려면 \textcite, 문장 밖에 주석처럼 두려면 \parencite, 둘 중 무엇으로 할지 스타일에 맡기려면 \autocite입니다. 이 세 갈래의 문법적 이유——“Knuth (1986)이 보였다”와 “…임이 밝혀졌다 (Knuth, 1986)”는 서로 다른 문법적 대상이라는 이야기——는 인용의 기본 페이지에서 자세히 다루므로, 여기서는 biblatex 쪽 구조를 봅니다. 모든 인용 명령은 \parencite[앞 주석][뒤 주석]{키} 형태를 취하며, 키는 쉼표로 구분해 여러 개를 넘길 수 있습니다. 대괄호가 하나면 뒤 주석——\parencite[45]{knuth1984}——이고, 둘이면 앞뒤 모두——\parencite[see][45]{knuth1984}——입니다.
| 명령 | 출력되는 것 | 고를 상황 |
|---|---|---|
\cite | 덧붙임 없는 기본 레이블 | 괄호도 각주도 없이 본문에 그대로 녹이고 싶을 때 |
\parencite | 인용 전체를 소괄호에 넣습니다(번호식·영숫자식에서는 대괄호) | 가장 흔한 형태로, 절 끝에 주석처럼 둡니다 |
\textcite | 저자명과 괄호 안의 연도 또는 레이블: Doe (1995) | 저자명을 주어 등 문장 성분으로 읽힐 때 |
\footcite | 인용 전체를 각주로 내리고 마침표로 끝냅니다 | 출처를 각주로 제시하는 분야의 관행 |
\autocite | autocite= 설정에 따라 위의 어느 하나로 바뀝니다 | 문서 전체의 인용 형태를 한 번에 바꾸고 싶을 때 |
\citeauthor | 저자명만 | 연도나 번호 없이 본문에서 사람 이름만 들 때 |
\citeyear | 발행 연도만 | 바로 앞에서 저자명을 적은 뒤 연도를 보탤 때 |
\autocite는 다른 명령보다 한 단계 위에 있어서, 실제로 무엇이 되는지는 \usepackage의 autocite= 옵션이 정합니다. 가능한 값은 plain(\cite처럼 동작), inline(\parencite), footnote(\footcite), superscript(위첨자)입니다. 게다가 \autocite는 뒤따르는 문장부호를 살피기만 하는 것이 아니라 옮깁니다. autocite=footnote일 때 뒤에 오는 문장부호는 각주 번호가 그 뒤에 찍히도록 자리를 바꿉니다. 이 작은 배려 덕분에 문서 전체를 본문 인용에서 각주 인용으로 한 번에 바꾸어도 문장부호를 다시 손보지 않아도 됩니다.
여러 문헌을 한 번에 인용하면서 각각 다른 뒤 주석을 붙이려면 끝에 s가 붙은 multicite 형태가 있습니다. \parencites[35]{key1}[88--120]{key2}{key3}처럼 쓰면 괄호는 하나로 유지한 채 문헌마다 쪽 범위를 달 수 있고, \autocites와 \footcites도 같은 방식입니다. 또 BibTeX 시절의 natbib이 손에 익었다면 \usepackage[natbib=true]{biblatex}를 적어 \citep, \citet 등을 별칭으로 쓸 수 있습니다. 이전기의 다리로는 유용하지만, 새로 쓰는 문서는 biblatex 고유의 명령을 쓰는 편이 스타일을 바꿨을 때 동작을 예측하기 쉽습니다.
sorting=과 sortlocale=: 비영어 참고문헌을 올바른 순서로 정렬하기
순서는 sorting=으로 정합니다. 기본값은 nty로, name・title・year의 머리글자입니다. 그 밖에 nyt(이름, 연도, 제목), ynt(연도, 이름, 제목), ydnt(연도 내림차순), 그리고 정렬하지 않고 인용 순서를 유지하는 none이 있으며, 모두 .bib를 건드리지 않고 바꿀 수 있습니다. BibTeX에서는 이 선택지가 .bst 안에 묻혀 있어서 plain, unsrt, alpha 중 하나를 고르는 방식으로만 건드릴 수 있었습니다.
그 위에 같은 문자열이라도 “올바른 순서”는 언어마다 다릅니다. biber는 이 일을 Perl의 Unicode::Collate 모듈에 맡기는데, 이 모듈은 유니코드 정렬 알고리즘(UCA)을 완전히 구현하고 그 위에 CLDR의 로캘별 조정을 얹습니다. 효과는 바로 눈에 보입니다. 독일어에서 sortlocale=de_DE는 Mohr → Möller → Muster 순이지만, 전화번호부식인 sortlocale=de_DE_phonebook으로 바꾸면 ö가 oe로 취급되어 Möller → Mohr → Muster가 됩니다. 스페인어는 더 극적입니다. 전통 정서법을 따르는 sortlocale=es_ES_trad는 ch를 독립된 한 글자로 보기 때문에 Chávez가 Cortázar 뒤에 옵니다(현대식 es_ES에서는 Cela → Chávez → Cortázar). biber 설명서는 이 점을 따로 일러 둡니다. babel의 spanish는 현대식 es_ES에 대응되므로, 전통적 순서가 필요하면 es_ES_trad라고 직접 적어야 합니다.
\usepackage[
backend=biber,
style=authoryear,
sorting=nyt, % name, year, title
sortlocale=de_DE_phonebook, % locale tailoring: umlauts sort as oe/ue/ae
maxbibnames=99, % list every author in the bibliography
maxcitenames=2, % but shorten to "et al." inside citations
backref=true % back-links from each entry to its citations
]{biblatex}정렬 알고리즘이 다룰 수 있는 것은 결국 건네받은 문자뿐이고, 이 한계는 한국어・일본어・중국어에서 드러납니다. sortlocale=ko_KR이나 ja_JP를 지정하면 해당 로캘 조정은 적용되지만, 한자에는 읽는 법이 붙어 있지 않으므로 가나다순이나 오십음순을 기대하면 어긋납니다. 읽는 법대로 늘어놓아야 한다면 그 읽는 법을 데이터에 넣는 수밖에 없습니다. 이름의 읽는 법은 sortname에, 임의의 정렬 키는 sortkey에 씁니다. biblatex 설명서는 sortkey를 마스터 정렬 키라고 부르며, 이것이 있으면 presort를 빼고 나머지는 모두 무시한 채 정렬합니다. 어떤 한 항목이 끝내 제자리를 찾지 못할 때 언제나 통하는 최후의 수단입니다.
같은 \usepackage 줄에서 저자 목록을 어떻게 잘라 낼지도 정할 수 있습니다. maxnames의 기본값은 3, minnames의 기본값은 1이며, maxbibnames와 maxcitenames는 따로 주지 않으면 maxnames 값을 그대로 물려받습니다. 즉 maxnames가 부모이고 나머지 둘이 자식입니다. 실무에서 자주 쓰는 조합은 위 코드 예와 같습니다. 참고문헌 목록에서는 저자 전원을 싣고(maxbibnames=99), 본문 인용에서는 두 명에서 “et al.”로 자르는(maxcitenames=2) 방식으로, maxnames 하나로는 표현할 수 없습니다. backref=true를 더하면 각 항목 끝에 본문 몇 쪽에서 인용되었는지가 붙어, 긴 원고를 교정할 때 값을 합니다.
참고문헌 목록 나누기: \printbibliography[type=…]과 keyword=
\printbibliography는 몇 번이든 쓸 수 있고, 그때마다 다른 필터를 걸 수 있습니다. 쓸 수 있는 키는 type=(그 항목 유형만), nottype=(그 유형만 제외), keyword=와 notkeyword=(.bib의 keywords 필드로 거르기), category=와 notcategory=(\DeclareBibliographyCategory로 선언한 분류), 그리고 제목을 정하는 heading=과 title=입니다. 1차 자료와 2차 문헌을 가르거나 단행본과 논문을 가르는 일이 데이터를 전혀 건드리지 않고 됩니다. 더 복잡한 조건이 필요하면 \defbibfilter로 직접 필터를 정의할 수 있고, 언어별로 목록을 나눌 때도 이 도구를 씁니다. langid 필드는 지역화 문자열과 하이픈 규칙을 바꿀 뿐, 그 자체로 목록을 갈라 주지는 않습니다.
\printbibliography[type=article, title={Journal articles}]
\printbibliography[type=book, title={Books}]
\printbibliography[keyword=primary, title={Primary sources}]
\printbibliography[nottype=misc, heading=bibintoc, title={Everything else}]정리하면 판단은 두 단계입니다. 투고처가 .bst를 건네준다면 BibTeX에 남고, 서식을 스스로 정할 수 있다면 biblatex와 biber로 옮깁니다. 옮긴 뒤에 할 일은 셋뿐입니다. 프리앰블에 \usepackage[backend=biber, style=…]{biblatex}와 \addbibresource{refs.bib}를 적고, \printbibliography를 놓고, 빌드에서 bibtex 대신 biber를 부르는 것——또는 latexmk에 맡기는 것입니다. .bib 파일은 양쪽이 공유하므로 쌓아 온 자산은 그대로 가져갑니다. 사십 년 만에 바뀐 것은, 서식을 고치는 일이 .bst를 다시 쓰는 일이 아니라 \usepackage 안의 한 단어를 바꾸는 일이 되었다는 점입니다.