跳到主要内容

references-citations

交叉引用与文献管理

长文档的两大自动化利器:交叉引用(章节、图表、公式之间互相指向)和参考文献管理(BibTeX)。 它们的共同哲学:编号永远是自动的,你只负责起一个「标签名」。

标签与引用:\label\ref

交叉引用三步走:在被引用处用 \label{标签} 打标签,在引用处用 \ref{标签}(或 \pageref\eqref)获取编号。

命令输出什么典型搭配
\label{key}无输出,给前面的对象打标签紧跟 \section\captionequation
\ref{key}编号数字(如 3、1.2)\ref{sec:method}
\eqref{key}带括号编号(如 (1))\eqref{eq:loss}(公式专用)
\pageref{key}所在页码见第\pageref{sec:method}

\label必须紧跟被引用的命令之后、写在同一个环境层级里——\section{方法}\label{sec:method} 是正确姿势;若把 \label 写到下一段去,引用到的就是错误的对象。公式的 \label 要写在 equation 环境内部。

实例:章节、公式、图片互引

\documentclass{ctexart}
\usepackage{amsmath, graphicx}
\begin{document}

\section{方法}\label{sec:method}
本节介绍模型结构,损失函数见式\eqref{eq:loss},
实验分析见第\ref{sec:result} 节。

\begin{equation}\label{eq:loss}
L = \sum_{i=1}^n \left( y_i - \hat{y}_i \right)^2
\end{equation}

\section{实验结果}\label{sec:result}
方法(第\ref{sec:method} 节)的损失由式\eqref{eq:loss} 度量,
曲线形态见图\ref{fig:sin}。

\begin{figure}[htbp]
\centering
\includegraphics[width=0.5\textwidth]{sin}
\caption{正弦曲线}
\label{fig:sin}
\end{figure}

\end{document}

1 方法

本节介绍模型结构,损失函数见式 (1),实验分析见第 2 节。

L=i=1n(yiy^i)2(1)L = \sum_{i=1}^n \left( y_i - \hat{y}_i \right)^2 \tag{1}

2 实验结果

方法(第 1 节)的损失由式 (1) 度量,曲线形态见图 1。

正弦函数曲线

图 1:正弦函数曲线

章节公式图片交叉引用的编译效果: 所有引用都自动取到了正确编号。之后不管插入多少新章节、新公式,编号与引用会自动更新——这是 Word 里「手动改编号改到崩溃」的终极解药。

标签命名建议「前缀:内容」,常用的前缀约定如下。

前缀对象示例
sec:章节\label{sec:method}
fig:\label{fig:sin}
tab:\label{tab:result}
eq:公式\label{eq:loss}
chap:章(report/book)\label{chap:intro}

超链接:hyperref 宏包

加载 hyperref 后,所有 \ref\cite\url 自动变成可点击的链接,并在 PDF 里生成侧边书签栏。

实例:hyperref 常用配置

\usepackage[colorlinks=true, linkcolor=blue, % 正文引用:蓝色
citecolor=blue, urlcolor=blue]{hyperref}
% colorlinks=true 用颜色标记链接(默认红框很难看)
% 三个参数分别控制:内部引用 / 文献引用 / 网址的颜色

\url{https://uniresearch.uniplore.com/} % 网址排版:自动断行、可点击

配置后,文档中的引用、网址都会变成可点击的超链接。

例如:https://uniresearch.uniplore.com/

hyperref 几乎永远应该是导言区最后一个加载的宏包——它要等所有其他宏包就位后才能正确改造文档,放早了会莫名冲突。

参考文献:BibTeX 工作流

参考文献的正确姿势不是在文末手写列表,而是:文献信息存进 .bib 数据库,正文用 \cite 引用,BibTeX 程序自动生成格式化的文献列表。

先看文献数据库长什么样——每条文献是一个「条目」。

实例:refs.bib 文献数据库

@article{alexnet2012, % 条目类型:期刊论文
author = {Krizhevsky, Alex and Sutskever, Ilya and Hinton, Geoffrey E.},
title = {ImageNet Classification with Deep Convolutional Neural Networks},
journal = {Communications of the ACM},
year = {2017},
volume = {60},
pages = {84--90}
}

@book{goodfellow2016, % 条目类型:图书
author = {Goodfellow, Ian and Bengio, Yoshua and Courville, Aaron},
title = {Deep Learning},
publisher = {MIT Press},
year = {2016}
}

花括号里第一项是引用键(如 alexnet2012),正文里 \cite{alexnet2012} 就靠它找到这条文献;键名随意,但全文唯一。

条目类型对应文献关键字段
@article期刊论文author、title、journal、year
@inproceedings会议论文author、title、booktitle、year
@book图书author/editor、title、publisher、year
@phdthesis博士论文author、title、school、year
@misc / @online网页、报告等title、url、note、year

正文侧只有两条命令,放在文档末尾:

实例:引用与生成文献列表

\documentclass{ctexart}
\begin{document}
深度学习的突破源于 AlexNet~\cite{alexnet2012},
系统教材可参考~\cite{goodfellow2016}。

\bibliographystyle{plain} % 文献样式: plain 数字序号风格
\bibliography{refs} % 文献数据库文件(不带 .bib 扩展名)
\end{document}

深度学习的突破源于 AlexNet[2],系统教材可参考[1]

参考文献

[1] Goodfellow I, Bengio Y, Courville A. Deep Learning[M]. MIT Press, 2016.

[2] Krizhevsky A, Sutskever I, Hinton G E. ImageNet Classification with Deep Convolutional Neural Networks[J]. Communications of the ACM, 2017, 60: 84-90.

引用处自动出现 [1], [2],文末自动生成按引用顺序排列的文献列表——你没写过一行格式。

为什么要编译四遍

加了 BibTeX 之后,完整的编译变成四步,文件之间形成一条流水线。

步骤命令作用
1xelatex main生成 main.aux,记录正文引用了哪些键
2bibtex main读 .aux 与 refs.bib,生成 main.bbl 文献列表
3xelatex main把 .bbl 内容排进文档
4xelatex main引用编号稳定,显示正确

引用显示「??」的原因就藏在这条流水线里:没跑 bibtex、或跑完没再编译两遍。Overleaf 会自动帮你跑完全部步骤,本地推荐用 latexmk -pdf main.tex 一键代劳。

BibLaTeX:更现代的选择

BibTeX 是 1985 年的老库;后继者 biblatex(配合程序 biber)在中文场景下更值得了解。

维度BibTeXbiblatex + biber
诞生时间19852009 起
Unicode / 中文支持有限原生 UTF-8
样式定制需写 .bst 文件,门槛高LaTeX 语法,直观
中文国标需配置,较繁琐biblatex-gb7714-2015 宏包直接支持
适用建议老模板、期刊指定时用新项目、中文论文优先

实例:biblatex 基本用法

\usepackage[backend=biber, style=numeric]{biblatex} % backend 指定 biber
\addbibresource{refs.bib} % 注意带 .bib 扩展名

\begin{document}
深度学习的突破源于 AlexNet~\cite{alexnet2012}。

\printbibliography[title=参考文献] % 文档末尾打印参考文献
\end{document}

深度学习的突破源于 AlexNet[1]

参考文献

[1] Krizhevsky A, Sutskever I, Hinton G E. ImageNet Classification with Deep Convolutional Neural Networks[J]. Communications of the ACM, 2017, 60: 84-90.

命令从 bibtex 换成 biber,其余编译流水线完全相同。写中文毕业论文时,装上 biblatex-gb7714-2015 宏包、把 style 换成 gb7714-2015,即可满足国标著录格式。

小结

需求命令
打标签\label{前缀:名字}(紧跟被引用对象)
引用编号 / 页码 / 公式\ref\pageref\eqref
超链接hyperref(最后加载)
引用文献\cite{键名},文献存 .bib 数据库
生成文献列表BibTeX:\bibliography;biblatex:\printbibliography
一键编译latexmk -pdf main.tex