.bib 파일은 서지 정보를 담아 두는 일반 텍스트 데이터베이스입니다. 각 문헌은 엔트리 하나로 쓰며, 종류(@article 등)와 필드(author, title 등)로 원자료를 기록하고 모양은 적지 않습니다. BibTeX 페이지가 *도구를 실행하는 방법*을 다룬다면, 이 페이지는 .bib 파일 자체의 구조, 즉 엔트리 종류, 필드 작성법, 참고문헌 목록의 출력 순서를 자세히 설명합니다.
.bib 파일의 가장 큰 장점은 재사용입니다. 한 번 꼼꼼히 작성해 두면 여러 논문에서 공유할 수 있고, 제출처가 바뀌어도 데이터는 건드리지 않고 스타일만 바꾸면 됩니다. 빌드 순서(latex → bibtex → latex → latex)와 .bst 스타일을 고르는 방법은 [BibTeX 페이지](/learn/bibliography/bibtex-page)에서 다루므로 여기서는 생략합니다.
엔트리의 형태
하나의 엔트리는 @ 뒤에 종류를 쓰고, 중괄호 안에 인용 키와 이어지는 필드를 나열하는 형태입니다. 기본 골격은 다음과 같습니다.
@article{shannon1948,
author = {Shannon, Claude E.},
title = {A Mathematical Theory of Communication},
journal = {Bell System Technical Journal},
volume = {27},
number = {3},
pages = {379--423},
year = {1948}
}여는 중괄호 바로 뒤의 shannon1948가 인용 키입니다. 문서의 \cite{shannon1948}와 정확히 일치해야 하는, 사용자가 정하는 식별자입니다(surname+year를 자주 쓰지만, 파일 안에서 고유하기만 하면 됩니다). 그 뒤에는 fieldname = {value} 쌍을 쉼표로 구분해 나열합니다. 마지막 필드 뒤의 쉼표는 있어도 되고 없어도 됩니다. 값은 중괄호 { }나 큰따옴표 " "로 감싸며, year = 1948처럼 순수한 숫자는 감싸지 않아도 됩니다. 종류 이름과 필드 이름은 대소문자를 구분하지 않습니다(@Article과 @article은 같습니다).
엔트리 종류
종류는 그 문헌이 무엇인지, 즉 학술지 논문인지, 책인지, 회의록에 실린 발표 논문인지를 나타냅니다. 종류를 정하면 스타일이 어떤 필드를 어떤 순서로 조판할지가 결정됩니다. 아래 표는 고전적인 BibTeX에서 사용할 수 있는 표준 종류입니다. 각 종류에는 필수 필드(빠지면 경고가 나옴)와 선택 필드가 있으며, 그 대응은 스타일(.bst)이 정합니다.
| 종류 | 용도 | 주요 필수 필드 |
|---|---|---|
@article | 학술지나 정기간행물의 논문 | author, title, journal, year |
@book | 출판사가 명시된 책 | author 또는 editor, title, publisher, year |
@inproceedings | 회의록에 실린 논문 | author, title, booktitle, year |
@conference | @inproceedings의 별칭(Scribe 호환) | (@inproceedings와 같음) |
@incollection | 편저 안의 제목이 있는 독립 장 | author, title, booktitle, publisher, year |
@inbook | 책의 일부(장 또는 쪽 범위) | author/editor, title, chapter 또는 pages, publisher, year |
@phdthesis | 박사 학위논문 | author, title, school, year |
@mastersthesis | 석사 학위논문 | author, title, school, year |
@techreport | 기관에서 발행한 기술 보고서 | author, title, institution, year |
@manual | 기술 또는 소프트웨어 설명서 | title(최소한) |
@unpublished | 미출판 원고 또는 초안 | author, title, note |
@misc | 위 어디에도 맞지 않는 기타 자료 | 필수 없음(note 등으로 보완) |
헷갈리기 쉬운 쌍이 두 가지 있습니다. @inbook와 @incollection에서 전자는 *한 책의 일부*(예: 자기 책의 3장)를 뜻하고, 후자는 *편자가 엮은 책 안에 들어 있는 별도 저자의 독립 글*을 뜻합니다. @inproceedings와 @conference는 기능적으로 같으며, @conference는 오래된 Scribe 호환 별칭일 뿐입니다. 학위논문은 학위에 따라 @phdthesis 또는 @mastersthesis를 고릅니다. 맞는 종류가 없으면 @misc를 쓰고 howpublished나 note로 보완합니다.
현대적인 biblatex는 위 종류를 거의 모두 포괄하고 더 많은 종류를 추가합니다. 웹 자료용 @online(별칭 @electronic), 범용 @report(type 필드에 “technical report” 같은 종류를 적음), 학위 구분 없는 @thesis(마찬가지로 type에 종류를 적음) 등이 있습니다. @online은 arXiv와 프리프린트 기록에 알맞으며, 아래에서 설명하는 eprint 계열 필드와 함께 씁니다. 이러한 새 종류는 biber/biblatex를 전제로 하므로, 고전적인 bibtex + .bst에서는 해석하지 못할 수 있습니다.
필드 작성법
필드는 문헌의 속성을 기록하는 name = {value} 쌍입니다. 종류와 관계없이 자주 만나는 필드는 다음과 같습니다.
author/editor— 저자 또는 편자. 여러 저자를 쓰는 문법은 다음 절에서 자세히 다룹니다.title— 제목: 논문 제목, 책 제목, 장 제목 등.journal/booktitle— 학술지명(@article) 또는 수록된 책/회의록 제목(@inproceedings,@incollection).year/date— 출판 연도. 고전 BibTeX는year(선택적으로month추가)를 쓰고, biblatex는date = {2026-05-01}같은 ISO 형식을 권장합니다(연도만 있는date = {2026}도 가능합니다).volume/number— 권/호.pages = {379--423}는 범위를 나타내기 위해 이중 하이픈을 씁니다(출력은 en dash “–”).publisher/institution/school— 출판사 / (보고서의) 발행 기관 / (학위논문의) 학위 수여 대학.doi/url— DOI(10.…본문만)와 URL. 스타일이 이를 링크로 출력합니다.eprint/eprinttype/eprintclass— biblatex의 프리프린트용 필드입니다. arXiv라면eprint = {2405.00001},eprinttype = {arxiv}(예전 이름archivePrefix), 분야를 나타내는eprintclass(예전 이름primaryClass)를 씁니다.note/howpublished— 자유 형식의 보충 설명 / “어떻게 공개되었는가”(@misc엔트리의 URL이 자주 들어가는 곳).
어떤 필드가 필수이고 선택인지는 종류마다 다르며, 그 판단은 스타일이 내립니다. 필수 필드가 빠지면 BibTeX가 경고하고, 알 수 없는 필드는 (대부분의 스타일에서) 조용히 무시됩니다. 따라서 가져온 메타데이터에 여분의 필드가 있어도 보통 해가 되지 않습니다.
저자명과 중괄호 보호
author는 가장 자주 틀리는 필드입니다. 여러 저자는 and로 구분합니다(쉼표가 아닙니다). 각 이름은 두 가지 방식으로 쓸 수 있습니다. 자연스러운 순서인 First Last(Claude E. Shannon) 또는 성을 먼저 쓰는 Last, First(Shannon, Claude E.)입니다. 성이 여러 단어이거나 “von / van der” 같은 접두사를 포함할 때는 성을 먼저 쓰는 형식이 가장 안전합니다. van der Plas, Geert라고 쓰면 “van der”가 성에 속한다는 점이 분명해집니다(자연 순서라면 Geert {Van der Plas}처럼 중괄호로 한 덩어리로 묶습니다).
@book{example2026,
author = {Knuth, Donald E. and Lamport, Leslie},
editor = {{The TeX Users Group}},
title = {On the {NASA} Mission to {TeX}},
publisher = {Addison-Wesley},
year = {2026}
}저자가 너무 많아 모두 쓰고 싶지 않을 때는 끝에 and others를 붙입니다. 스타일이 이를 “et al.” 등으로 바꿉니다. 또한 저자가 조직이나 단체(The TeX Users Group)일 때는 내부의 and가 이름 구분자로 오해되지 않도록 이중 중괄호 {{...}}로 감싸는 것이 관례입니다.
실무에서 똑같이 중요한 것이 대문자 보호입니다. 많은 스타일은 제목을 sentence case로 바꾸기 때문에 NASA나 TeX 같은 고유명사와 약어가 Nasa, Tex처럼 망가질 수 있습니다. 유지하고 싶은 부분을 중괄호 한 겹 더 감싸면, 예를 들어 title = {On the {NASA} Mission to {TeX}}처럼 쓰면, 그 범위는 변환에서 보호됩니다.
@string 매크로와 주석
같은 값이 여러 번 반복된다면 @string으로 매크로를 정의해 둘 수 있습니다. 정의한 이름은 값이 들어갈 위치에서(중괄호로 감싸지 않고) 사용하며, #로 문자열과 이어 붙일 수 있습니다. 학술지 약칭과 정식 명칭을 바꾸어 쓰는 데 편리합니다.
@string{bstj = {Bell System Technical Journal}}
@article{shannon1948,
author = {Shannon, Claude E.},
title = {A Mathematical Theory of Communication},
journal = bstj,
year = {1948}
}주석에 대해서는 흔한 오해를 바로잡아야 합니다. .bib 파일에서 %는 주석 문자가 아닙니다(LaTeX 본문과 다릅니다). 고전적인 bibtex는 엔트리(@...{}) 밖의 모든 문자를 무시하므로, 메모를 엔트리 사이의 일반 문장으로 두어도 실제 해는 없습니다. 하지만 biber(biblatex의 백엔드)는 더 엄격해서 엔트리 밖의 생 텍스트에 경고를 냅니다. 이식성이 높은 형식은 @comment{ ... }이며, 그 안의 내용은 전부 건너뜁니다.
문헌 목록의 순서
목록에 엔트리가 나타나는 순서는 .bib에 적은 순서와 관계가 없습니다. 순서가 결정되는 방식은 두 메커니즘으로 나뉩니다.
고전적인 BibTeX에서는 순서가 스타일(.bst)에 의해 고정됩니다. 사용자가 지정할 수 있는 여지는 거의 없으며, 스타일을 고르는 것이 곧 순서를 고르는 일입니다. 예를 들어 plain과 alpha는 저자 이름 알파벳순으로 정렬하고, unsrt는 본문에서 처음 인용된 순서를 사용하며, ieeetr 같은 공학계 스타일도 인용 순서를 따릅니다. 같은 데이터라도 \bibliographystyle{plain}에서 \bibliographystyle{unsrt}로 바꾸기만 하면 순서가 달라집니다. 일본어에서는 pbibtex / upbibtex가 코드 포인트 순으로 정렬합니다(자세한 내용은 [BibTeX 페이지](/learn/bibliography/bibtex-page) 참조).
biblatex에서는 sorting= 옵션으로 순서를 명시적으로 제어합니다. 스타일과 독립적으로 \usepackage[sorting=nyt]{biblatex}처럼 지정하면 됩니다. 정렬 키는 문자 조합으로 나타냅니다. n = name(이름), y = year(연도), t = title(제목)입니다. 대표적인 지정은 다음과 같습니다.
| 옵션 | 키 순서 | 의미 |
|---|---|---|
nty | name → title → year | 이름, 제목, 연도(biblatex 기본값) |
nyt | name → year → title | 이름, 연도, 제목(저자-연도 방식에서 선호) |
ynt | year → name → title | 연도, 이름, 제목(시간순) |
ydnt | year(내림차순) → name → title | 최신 연도부터 오래된 연도 순 |
none | (정렬 없음) | 본문에서 인용한 순서(unsrt 상당) |
요약하면, 인용 순서를 유지하려면 BibTeX에서는 unsrt 스타일을, biblatex에서는 sorting=none을 선택합니다. 알파벳순이라면 BibTeX에서는 plain, biblatex에서는 기본값 nty(저자-연도 방식이면 nyt)를 씁니다. 어느 쪽이든 .bib의 엔트리를 직접 재정렬할 필요는 전혀 없습니다. 순서를 결정하는 일은 전적으로 처리 도구의 몫입니다.