LaTeX 如何用 .bib 插入参考文献:从入门到入土(含完整示例)
LaTeX 如何用 .bib 插入参考文献:从入门到入土(含完整示例)
1. 基本概念速览
.bib
文件:参考文献数据库(纯文本),由一条条@article{...}
、@book{...}
等构成。- 引用命令:在正文中用
\cite{键}
、\citep{键}
、\citet{键}
等调用。 - 样式:决定文末参考文献列表的格式(作者名、期刊名、年份等的排版)。
- 编译链:
- BibTeX 路线:
pdflatex → bibtex → pdflatex → pdflatex
- biblatex 路线:
pdflatex → biber → pdflatex → pdflatex
- BibTeX 路线:
2. 路线 A:BibTeX(经典稳定,投稿友好)
2.1 目录与文件结构
project/ |
注:很多期刊会提供
.bst
(样式)与.cls
(文档类),放在同目录或 TEX 路径可见处即可。
2.2 .bib
文件示例(refs.bib)
@article{Willott1999, |
技巧:从 Google Scholar、ADS、Zotero、Mendeley 可直接导出 BibTeX。导入时注意清理字段(如多余的 html 标记)。
2.3 natbib
+ BibTeX 最小示例(main.tex)
\documentclass[11pt]{article} |
2.4 常用 natbib
引用命令
\citet{键}
:作者名在句中(Author (Year))\citep{键}
:括号引用((Author, Year))\citealp{键}
:无括号外壳的引用(Author, Year)\citeyear{键}
:只年份\citeauthor{键}
:只作者
选择不同的
\bibliographystyle{...}
(如plainnat
、unsrtnat
、apalike
、期刊.bst
)会改变最终格式。
2.5 编译步骤(本地 TeX Live/MiKTeX)
pdflatex main |
Overleaf:菜单选择 Compiler 为 pdfLaTeX,点击 Recompile;首次需要让 Overleaf 触发
bibtex
,一般自动完成。
3. 路线 B:biblatex + biber(功能强、中文友好、Web 字段丰富)
3.1 .bib
文件可与上文相同(refs.bib)
3.2 最小示例(main.tex)
\documentclass[11pt]{article} |
3.3 常用 biblatex
引用命令
\parencite{键}
:括号引用\textcite{键}
:作者名融入正文\footcite{键}
:脚注引用\citeauthor{键}
、\citeyear{键}
同理可用
3.4 编译步骤
pdflatex main |
Overleaf:菜单设置 Biber 为后端(Project → Settings → Compiler:pdfLaTeX;Biber enabled)。首次编译后 Overleaf 会自动运行 biber。
4. 选择哪条路线?
- 投稿/跟随期刊模版:通常用 BibTeX + 期刊
.bst
;很多天文、物理期刊(AAS、MNRAS、A&A)传统上就是这个。 - 个人论文/讲义/中文环境更友好:推荐 biblatex + biber(可玩性强,字段更全,分组/过滤更灵活)。
- 已有大量老项目:继续用 BibTeX 也很好,稳定可靠。
5. 处理中文与编码
- 现代 TeX Live 下,建议用
xelatex
或lualatex
编译,并配合biblatex + biber
:
\documentclass{article} |
- BibTeX 处理中文较麻烦,需要
gbt7714
等样式或将中文转拼音排序;若需国标格式,可用\usepackage[backend=biber,style=gb7714-2015]{biblatex}
(需安装biblatex-gb7714-2015
套件)。
6. 常见条目类型与字段(速查)
@article
:author
,title
,journal
,year
,volume
,number
,pages
,doi
,url
@book
:author/editor
,title
,publisher
,year
,edition
@inproceedings
:author
,title
,booktitle
,year
,pages
@misc
:万金油;可放howpublished
,note
,url
,doi
,eprint
(arXiv)@phdthesis
/@mastersthesis
:author
,title
,school
,year
arXiv:可用
eprint={arXiv:XXXX.XXXXX}
,archivePrefix={arXiv}
,primaryClass={astro-ph.GA}
等字段(biblatex 对 eprint 支持更好)。
7. 批量管理文献的实用建议
- Zotero / Mendeley 管库 → 导出
.bib
到项目目录。 - 给文献稳定的 citation key(如
AuthorYearTitleKey
),避免与同名同年冲突(必要时加a,b,c
)。 - 定期清理
.bib
:去掉无用字段(abstract
、file
、urldate
等,按需)。
8. 常见报错与排查
- “Citation
xxx
undefined”- 键不存在/拼写错误;或忘记在
.tex
中\bibliography{refs}
/\addbibresource{refs.bib}
。 - 没有按正确顺序多次编译(见第 2.5/3.4 步骤)。
- 键不存在/拼写错误;或忘记在
- 参考文献不显示/老版本
- 忘了运行
bibtex
/biber
;或.aux/.bbl/.bcf
等中间文件残留导致。 - 解决:删中间文件重新编译,或按顺序完整跑一遍。
- 忘了运行
biber
not found / biblatex 报错- 本地没装
biber
或 PATH 未配置;Overleaf 需在设置里启用 biber。
- 本地没装
- 中文乱码/问号
- 用
xelatex
/lualatex
+biblatex + biber
;或检查.bib
的 UTF-8 编码。
- 用
- 样式不合期刊要求
- 使用期刊提供的
.bst
(BibTeX)或官方文档推荐的biblatex
样式。 - 某些期刊仅接受 BibTeX 格式的
.bbl
,按其要求生成即可。
- 使用期刊提供的
9. 进阶:同一文献多次引用、附加页码、前后缀
- natbib:
\citep[见][p.~12]{Willott1999}
→ (见 Willott et al., 1999, p. 12)\citep[例如][]{Willott1999}
、\citet[第2节]{Willott1999}
- biblatex:
\parencite[见][12]{Willott1999}
\parencite[例如][]{Willott1999}
\textcite[§2]{Willott1999}
10. 在博客中展示
- 用 Markdown 代码块粘贴
.tex
、.bib
示例(与本文相同做法)。 - 若博客支持渲染公式(KaTeX/MathJax),依然建议给出 可复制的源码,方便读者本地测试。
- 可附一张编译流程图或命令行片段(见上文编译命令)。
11. 完整可运行示例(两套各给一份)
11.1 BibTeX + natbib 版
main.tex
\documentclass[11pt]{article} |
refs.bib
@article{Willott1999, |
编译
pdflatex main |
11.2 biblatex + biber 版
main.tex
\documentclass[11pt]{article} |
refs.bib(同上)
编译
pdflatex main |
12. FAQ 快速解惑
Q:期刊要求提供
.bbl
,怎么弄?
A:走 BibTeX 流程,编译后生成的main.bbl
即可提交。biblatex 路线有时不被传统流程接受。Q:同一作者同一年多篇
[2019a, 2019b]
如何自动添加 a/b?
A:natbib
与biblatex
都会自动区分;关键在于条目的year
与作者相同,系统会追加字母。Q:如何显示 DOI/URL?
A:biblatex
默认更友好;BibTeX 需样式支持(如plainurl
、apalike
的改款、或期刊.bst
)。
在biblatex
下,可\usepackage[doi=true,url=true]{biblatex}
(或样式本身已开启)。Q:我需要 GB/T 7714 国标格式?
A:推荐biblatex-gb7714-2015
:\usepackage[backend=biber,style=gb7714-2015]{biblatex}
13. 一键排错清单(贴墙用)
- 检查 citation key 是否一致(
\cite{键}
与.bib
中的@...{键, ...}
)。 - 跑对 编译顺序(BibTeX vs biber)。
- 删中间文件(
.aux .bbl .bcf .blg .run.xml
等)后重编。 - 确认 Overleaf/本地 后端设置(biber 是否开启)。
- 确认 编码 为 UTF-8;中文建议用
xelatex
+biblatex
。