在使用LaTeX编辑文档时,可以方便地插入参考文献,推荐使用bibtex插件,我在文章
LaTeX 插入参考文献
中详细介绍了这种方法。最近阅读一些书籍时,注意到有些书籍在每章或每节的末尾插入了参考文献,这对于编写大型教学资料非常有帮助。本文将介绍如何在章节末尾插入参考文献。
bib 文献库
在编写资料时,可以根据文献的分类分别建立不同的文献库,例如编写一本物理资料时,可以分别建立li.bib、dian.bib、re.bib等文件。例如: li.bib文件的内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| @book{zhou2009,
author = {周衍柏},
title = {理论力学教程},
edition = {3},
publisher = {高等教育出版社},
address = {北京},
year = {2009},
note = {第五版于2023年出版}
}
@book{liu2019,
author = {刘川},
title = {理论力学},
publisher = {北京大学出版社},
address = {北京},
year = {2019},
isbn = {978-7-301-30653-6}
}
@book{landau2007,
author = {朗道 and 栗弗席兹},
title = {力学},
translator = {李俊峰 and 鞠国兴},
publisher = {高等教育出版社},
address = {北京},
year = {2007}
}
@book{goldstein2013,
author = {Goldstein, Herbert and Poole, Charles P. and Safko, John L.},
title = {Classical Mechanics},
edition = {3},
publisher = {Pearson},
address = {Harlow},
year = {2013},
isbn = {978-1-292-02655-8}
}
@book{liang2009,
author = {梁昆淼},
title = {力学(第四版)(下册)},
publisher = {高等教育出版社},
address = {北京},
year = {2009}
}
|
文献的引用
在正文需要引用的地方使用\cite{键名}。 例如推荐刘川的书时写:
1
| 推荐刘川的《理论力学》\cite{liu2019}作为入门教材。
|
文档末列出被引用过的文献
使用传统的 BibTeX 方式
在文档末尾(\end{document})加入两行:
1
2
| \bibliographystyle{plain} % 或unsrt, ieeetr 等样式
\bibliography{li, dian, re} %多个库用英文逗号隔开,逗号后跟一个空格, 不需要加.bib
|
其中plain是基础样式,按作者字母排序、数字标号。如果你希望参考文献按引用先后顺序排列,把样式换成unsrt即可。
使用现代的 BibLaTeX 方式
只需要在导言为每个文献库单独调用一次\addbibresource命令,即
1
2
3
4
| \usepackage[backend=biber, style=numeric]{biblatex}
\addbibresource{li.bib} % 特别注意要加上 .bib, 这与传统的bibtex方式不同
\addbibresource{dian.bib}
\addbibresource{re.bib}
|
在正文中的任何位置都可以使用命令\printbibliography插入引用过的条目,biblatex默认只打印在正文中被\cite系列命令引用过的条目。如果某个文献在.bib文件中但未被引用,它不会出现在目录中。
\printbibliography支持在方括号[]内添加参数,以控制目录的标题、内容和格式。具体定制选项如下:
1
2
3
| \printbibliography[title={参考文献}]
% 或英文标题
\printbibliography[title={Reference list}] %[reference:2]
|
- 将目录添加到目录,如果希望“参考文献”作为一个章节出现在目录中,使用
heading=bibinto:
1
| \printbibliography[heading=bibintoc, title={参考文献}] %[reference:3]
|
1
2
3
4
5
6
7
8
| % 只列出文章(@article)类型的文献
\printbibliography[type=article, title={期刊论文}] %[reference:4]
% 只列出在 .bib 文件中标记了 keyword={primary} 的文献
\printbibliography[keyword=primary, title={核心文献}] %[reference:5]
% 排除某一类文献,例如排除网络来源(@online)
\printbibliography[nottype=online, title={非网络文献}] %[reference:6]
|
每节末列出参考文献
列出正文中引用过的条目
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| \usepackage[backend=biber, style=numeric]{biblatex}
\addbibresource{li.bib}
\addbibresource{dian.bib}
\begin{document}
\section{力学}
\begin{refsection}
推荐刘川《理论力学》\cite{liu2019}。
\printbibliography[heading=subbibliography, title={本节参考文献}]
\end{refsection}
\section{电学}
\begin{refsection}
推荐某本电学书 \cite{some-elec-book}。
\printbibliography[heading=subbibliography, title={本节参考文献}]
\end{refsection}
|
- 方式二:为
refsection 指定专属 bib(更严格, 推荐使用)
如果你希望“力学这一节只能引用 li.bib 里的书,电学只能引用 dian.bib 里的书”,可以给 refsection 环境加上可选参数,直接指定该节使用的文献源:
1
2
3
4
5
6
7
8
9
10
11
| \begin{refsection}[li.bib]
\section{力学}
推荐刘川《理论力学》\cite{liu2019}。
\printbibliography[heading=subbibliography, title={本节参考文献}]
\end{refsection}
\begin{refsection}[dian.bib]
\section{电学}
推荐某本电学书 \cite{some-elec-book}。
\printbibliography[heading=subbibliography, title={本节参考文献}]
\end{refsection}
|
这个写法在 biblatex 文档和多个教程中被明确支持。它的优点是各节文献源完全隔离,不会互相污染;缺点是如果某一节需要同时引用两个库里的书,写起来会稍麻烦(需要把两个库都列进去,或改回方式一)。
列出所有文献库中的文献
使用\nocite{*} 放在refsection环境内部,将它的作用范围被限制在当前节,意思是将所有文献库中的文献都标记为引用过,虽然没有引用过。写法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| \usepackage[backend=biber, style=numeric]{biblatex}
\addbibresource{li.bib}
\addbibresource{dian.bib}
\begin{document}
\section{力学}
\begin{refsection}[li.bib]
\nocite{*} % 列出 li.bib 中全部条目,即使正文没引用
% 正文正常 \cite 也可写在这里
\printbibliography[heading=subbibliography, title={力学参考文献}]
\end{refsection}
\section{电学}
\begin{refsection}[dian.bib]
\nocite{*}
\printbibliography[heading=subbibliography, title={电学参考文献}]
\end{refsection}
\end{document}
|
每章末列出参考文献
导言区设置
1
2
| \usepackage[backend=biber, style=numeric]{biblatex}
\addbibresource{refs.bib} % 你之前生成的 BibTeX 文件
|
正文写法
1
2
3
4
5
6
7
8
9
10
11
12
13
| \begin{refsection}
\chapter{力学}
...
推荐参考朗道的《力学》\cite{landau2007}。
...
\printbibliography[heading=subbibliography, title={本章参考文献}]
\end{refsection}
\begin{refsection}
\chapter{电学}
...
\printbibliography[heading=subbibliography, title={本章参考文献}]
\end{refsection}
|
编译
传统 bibtex
1
2
3
4
| xelatex foo.tex
bibtex foo.aux % 注意此处需要明显写出foo.aux
xelatex foo.tex
xelatex foo.tex
|
现代 biblatex
先安装biber命令,在 ArchLinux中执行命令:
编译流程
1
2
3
4
| xelatex foo.tex
biber foo % 注意此处没有 .aux
xelatex foo.tex
xelatex foo.tex
|