Skip to content

Commit 44eb052

Browse files
committed
update: citation in latex
1 parent d298f8b commit 44eb052

1 file changed

Lines changed: 102 additions & 44 deletions

File tree

writings/Add-citation-in-LaTeX.md

Lines changed: 102 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,63 @@
22

33
> BibTeX是一套用于管理文献、产生文献目录的格式。 使用上通常与LaTeX一起使用。(摘自[WikiPedia](https://zh.wikipedia.org/zh-cn/BibTeX))
44
5+
## 0. 内容与格式的分离
6+
7+
在 Word 中,你手动写下“[1] 王小明. 论文标题...”,一旦要调整格式(比如要把作者变斜体,或者按年份排序),你需要手动修改几十处。而LaTeX的逻辑是数据库思维:
8+
9+
1. **`.bib` 文件(数据库):** 只管存储数据(作者是谁、哪年发的),不关心长什么样。
10+
2. **`.tex` 文件(逻辑):** 只管引用数据(这里引用了这篇文章),不关心具体内容。
11+
3. **样式命令(渲染):** 决定最终长什么样(是 `[1]` 还是 `(Wang, 2025)`)。
12+
513
有了BibTeX,我们可以方便的在一个文件中收集需要的文献,并在LaTeX文件中引用它。
614

7-
## 创建包含参考文献条目 `.bib` 文件
15+
## 1. 创建包含参考文献条目 `.bib` 文件
816

9-
首先,创建一个文件后缀为 `.bib` 的文件,包含参考文献条目。每个参考文献条目都需要遵循BibTeX格式,通常包括如作者、标题、出版年份等信息。
17+
首先,我们需要创建一个后缀为 `.bib` 的文件(例如 `references.bib`),并在其中添加参考文献条目。每个参考文献条目都需要遵循BibTeX格式,通常包括如作者、标题、出版年份等信息。
1018

11-
例如,在与`.tex`相同目录下创建一个 `references.bib` 文件,示例内容如下:
19+
一个bib文件中可以包含多个条目,下面我们来看一下一个典型的参考文献条目格式是怎么样的:
20+
21+
```bibtex
22+
@book{latexguide,
23+
author = {Leslie Lamport},
24+
title = {LaTeX: A Document Preparation System},
25+
publisher = {Addison-Wesley},
26+
year = {2077},
27+
edition = {2nd}
28+
}
29+
```
30+
31+
让我们逐字段介绍一下这个格式:
32+
33+
```
34+
文档类型 (Entry Type)
35+
固定语法: book, article...
36+
37+
│ 引用标签 (Citation Key)
38+
│ 自定义ID: 在正文中引用
39+
│ │
40+
┌─┴──┐ ┌─┴──────────┐
41+
@│book│{│ latexguide │,
42+
└────┘ └────────────┘
43+
字段名 (Field Name)
44+
固定关键字: author, title...
45+
46+
│ 字段内容 (Field Value)
47+
│ 具体的文献信息
48+
┌─┴────┐ ┌─┴─────────────┐
49+
│author│ = {│Leslie Lamport │}, ◄────── 注意:字段结束必须加英文逗号
50+
└──────┘ └───────────────┘
51+
title = {LaTeX: A Document Preparation System},
52+
publisher = {Addiso.-Wesley},
53+
year = {2077},
54+
edition = {2nd}
55+
...
56+
◄────── 可以添加更多字段
57+
...
58+
}
59+
```
60+
61+
例如,我们在与`.tex`文件相同的目录下创建一个 `references.bib` 文件,包含两个条目的示例内容如下:
1262

1363
```bibtex
1464
@book{latexguide,
@@ -19,34 +69,32 @@
1969
edition = {2nd},
2070
}
2171
22-
@misc{citename,
72+
@misc{citename,
2373
author = {chenyu76},
2474
title = {Add citation in LaTeX},
2575
year = {2025}
2676
}
27-
28-
……
29-
可以添加更多条目,
30-
只有在正文中使用\cite命令的条目
31-
才会出现在最后编译好的文档中
3277
```
3378

34-
每个@开头是一个条目,条目内部填入作者、标题等信息;这个示例中第一个条目中book是文档类型, 此外还有article, inproceedings, misc等;`latexguide`是引用时使用的名称,可以在之后使用类似的格式添加更多内容。推荐直接在[Google Scholar](https://scholar.google.com/)或其他文献网站上复制,不要手写;也可以让ai生成,但注意核对信息。
79+
可以在一个文件中添加任意多的条目,默认情况下,只有在正文中使用`\cite`命令引用的条目,才会出现在最后编译好的文档中。
80+
81+
每个`@`开头是一个条目,条目内部填入作者、标题等信息;这个示例中第一个条目中book是文档类型, 此外还有article, inproceedings, misc等,如它们的名称所暗示的,它们分别代表书籍、文章等格式;`latexguide`是引用时使用的名称,可以在之后使用类似的格式添加更多内容。对于正经期刊上发表的论文,其对应的bib条目一般可以直接在[Google Scholar](https://scholar.google.com/)或其他文献网站上复制获得,不推荐手写;或者你非常懒得话,也可以让ai生成,但务必注意核对信息。
3582

3683
![Google Scholar 示例](./assets/google_scholar.png)
3784

38-
## 引用参考文献
39-
在 LaTeX 文件中,使用 `\cite{}` 命令引用参考文献。例如:
85+
## 2. 引用参考文献
86+
87+
在LaTeX文件中,使用 `\cite{}` 命令引用参考文献。例如:
4088

4189
```latex
4290
This is a reference to the LaTeX guide \cite{latexguide}.
4391
```
4492

45-
这里的`latexguide`是上面的例子中定义的名称
93+
这里的`latexguide`是上面的例子中定义的引用标签
4694

47-
## 插入参考文献列表
95+
## 3. 插入参考文献列表
4896

49-
在文档任意位置插入使用的参考文献列表。只有使用了`\cite{}`命令插入的文献才会出现。
97+
在文档任意位置插入使用的参考文献列表(通常是文末,`\end{document}`前)。只有使用了`\cite{}`命令插入的文献才会出现。
5098

5199
使用 `\bibliographystyle{}` 命令指定参考文献的格式,并使用 `\bibliography{}` 命令指定 `.bib` 文件的路径。在编译好的文档中,参考文献列表会出现在`\bibliography{}`命令调用处。
52100

@@ -55,6 +103,20 @@ This is a reference to the LaTeX guide \cite{latexguide}.
55103
\bibliography{references.bib} % 引用.bib文件
56104
```
57105

106+
> [!IMPORTANT]
107+
> 在这个示例中,我们之前创建的`references.bib``.tex`文件位于同一目录,所以可以直接使用`\bibliography{references.bib}`引用bib文件。但是如果bib文件与tex文件不在同一个目录下,就需要在`{ }`内填写其位置。
108+
109+
### 常用样式一览
110+
111+
修改 `\bibliographystyle{...}` 中的参数,可以瞬间改变所有文献的格式:
112+
113+
| 样式代码 | 排序方式 | 显示效果 (正文 / 列表) |
114+
| -------- | ---------------------- | -------------------------------- |
115+
| `plain` | 按作者姓名首字母排序 | `[1]` / `[1] Lamport...` |
116+
| `unsrt` | 按在文中出现的先后排序 | `[1]` / `[1] Lamport...` |
117+
| `alpha` | 字母+年份排序 | `[Lam77]` / `[Lam77] Lamport...` |
118+
| `abbrv` | 类似 plain,但简写名字 | `[1]` / `[1] L. Lamport...` |
119+
58120
### Tips
59121

60122
1. 如果在beamer中使用,可以添加 allowframebreaks 参数使文献列表自动换页
@@ -65,18 +127,29 @@ This is a reference to the LaTeX guide \cite{latexguide}.
65127
\bibliography{references}
66128
\end{frame}
67129
```
130+
68131
文献列表编号(而不是图标)
132+
69133
```
70134
\setbeamertemplate{bibliography item}{\insertbiblabel}
71135
```
136+
72137
2. 可以通过使用`hyperref`宏包使引用标签可点击
73138

74139
```latex
75140
\usepackage{hyperref}
141+
% 可以使用`[hidelinks]`选项隐藏pdf中的红色框框
142+
%\usepackage[hidelinks]{hyperref}
76143
```
77144

78-
## 完整示例
145+
3. 多个作者怎么写?
146+
- 不要用逗号分隔作者!必须用 `and` 连接。
147+
- 错误:`author = {San Zhang, Si Li}`
148+
- 正确:`author = {San Zhang and Si Li}` (BibTeX 会自动处理成 "S. Zhang, S. Li" 等格式)。
149+
4. 参考文献列表里只有一部分文献?
150+
- BibTeX 默认只显示被引用的文献。如果你想显示数据库里的所有文献(包括没引用的),请在 `\bibliography` 前加上 `\nocite{*}`
79151

152+
## 4. 完整示例
80153

81154
```latex
82155
\documentclass{article}
@@ -93,44 +166,29 @@ This is a reference to the LaTeX guide \cite{latexguide}.
93166

94167
你可以在[这里](./Add-citation-in-LaTeX.zip)下载这个示例。
95168

96-
## 编译流程
169+
## 5. 编译流程
170+
171+
在 LaTeX 中正确处理参考文献通常需要编译 4 次。如果你使用 Overleaf,它会自动处理;但在本地使用命令行或编辑器时,了解原理很重要。
97172

98-
在 LaTeX 中正确处理参考文献需要多次编译。如果你使用overleaf等在线平台,他们应该会自动帮你处理好编译流程,不用操心,否则:
173+
### 为什么需要这么多次?
99174

100-
### 如果没有编译过:
175+
LaTeX 处理参考文献不是一次性完成的,它需要一个“信使”—— **.aux (辅助) 文件**
101176

102-
(如果使用XeLaTeX)
177+
1. **`xelatex` (第1遍 - 抄录)**:LaTeX 读一遍正文,看到 `\cite{latexguide}`,它在 `.aux` 小本本上记下:“这里引用了 `latexguide`”。此时文档中显示为 `[?]`
178+
2. **`bibtex` (第2遍 - 搬运)**:BibTeX 程序读取 `.aux`,去 `.bib` 数据库里找对应条目,按样式整理好,生成 `.bbl` 文件(真正的列表代码)。
179+
3. **`xelatex` (第3遍 - 插入)**:LaTeX 读取 `.bbl` 文件,把参考文献列表排版到文末。
180+
4. **`xelatex` (第4遍 - 链接)**:LaTeX 终于确认了每一篇文献的最终编号(如 [1]),将正文中的 `[?]` 替换为正确的 `[1]`
103181

104-
1. 使用 `xelatex` 编译 LaTeX 文件,生成需要的文献列表(.aux 文件)
105-
2. 使用 `bibtex` 编译参考文献。
106-
3. 再次使用 `xelatex` 编译两次,第一次会生成参考文献,第二次确保参考文献引用和引用列表正确生成。
182+
**命令行操作示例:**
107183

108-
如果使用命令行:
109184
```bash
110185
xelatex yourfile.tex
111-
bibtex yourfile.aux
186+
bibtex yourfile.aux # 注意这里是对 .aux 文件运行 bibtex
112187
xelatex yourfile.tex
113188
xelatex yourfile.tex
114189
```
115190

116-
### 如果编译过了
117-
118-
只需要在参考文献有更新时运行
119-
120-
```bash
121-
bibtex yourfile.aux
122-
```
123-
即可
124-
125-
## 参考文献样式
126-
127-
LaTeX 支持多种参考文献样式(如 `plain`, `unsrt`, `alpha`, `ieeetr` 等):
128-
129-
在完整示例中修改
130-
131-
```
132-
\bibliographystyle{plain} % 修改这里的plain
133-
```
134-
可以根据需要选择不同的样式。
191+
> [!TIP]
192+
> 如果你只修改了正文文字,只需运行一遍 xelatex;只有当你**新增/删除引用****修改了 bib 文件**时,才需要完整跑这一套流程。
135193
136194
2025/02/20

0 commit comments

Comments
 (0)