目录、交叉引用、参考文献中的多次编译问题
参考文献
2019-09-23 14:21 浏览 :10144
经常会碰到在使用LaTeX排版时,出现没有目录、“图??”、“表??”、参考文献引用和著录不正确的问题。这类问题,多数是因为没有正常执行多次编译而造成的。在此,以xelatex引擎为例进行说明。
###目录和图表
在使用`\\tableofcontents`命令排版目录,`\\ref`、`\\cref`等命令排版图表交叉引用时,至少需要对.tex文件进行**两次**编译,如(可以略去扩展名):
```
xelatex demo
xelatex demo
```
其编译过程如下图所示:
![目录排版流程](https://wenda.latexstudio.net/data/attach/190923/o3m1RYbx.png "目录排版流程")
![交叉引用排版流程](https://wenda.latexstudio.net/data/attach/190923/wKBwMs5M.png "交叉引用排版流程")
###用"bibtex"排版参考文献
在使用 `bibtex`排版参考文献时,需要:
1. 首先使用xelatex等命令编译LaTeX源代码demo.tex,生成demo.aux文件;
2. 接下来用 bibtex 命令处理 demo.aux 辅助文件记录的参考文献格式、引用条目等信息。bibtex 命令处理完毕后会生成 demo.bbl 文件,其内容就是一个thebibliography环境;
3. 再使用xelatex等命令把源代码demo.tex编译**两遍**,读入参考文献并正确生成引用和著录表。
整个过程使用的命令如下(可以略去扩展名):
```
xelatex demo
bibtex demo
xelatex demo
xelatex demo
```
其编译过程如下图所示:
![BiBTeX编译参考文献](https://wenda.latexstudio.net/data/attach/190923/pWQcUBEw.png "BiBTeX编译参考文献")
###用"biblatex"排版参考文献
在使用 `biblatex`排版参考文献时,需要:
1. 首先使用xelatex等命令编译LaTeX源代码demo.tex,生成demo.aux文件和demo.bcf文件;
2. 接下来用 biber 命令处理 demo.bcf文件记录的参考文献格式、引用条目等信息。biber 命令处理完毕后会生成 demo.bbl 文件,biblatex 识别并利用其中的信息输出引用标签和文献表;
3. 再使用xelatex等命令将源代码demo.tex编译**一遍**,读入demo.bbl文件,结合第1步编译生成的demo.aux文件生成正确引用和著录表。
4. 如需要后向超链接,则除了为biblatex宏包设置 backref选项外,还需**第4遍** xelatex 编译。
整个过程使用的命令如下(可以略去扩展名):
```
xelatex demo
biber demo
xelatex demo
xelatex demo
```
![biblatex编译参考文献](https://wenda.latexstudio.net/data/attach/190923/AmkSIv8e.png "biblatex编译参考文献")
###用"latexmk"命令完成所有工作
为了简化目录、交叉引用、参考文献等编译过程的自动化操作,LaTeX发行版提供了`latexmk`命令,以实现一次性完成所有的编译过程,如:
```
latexmk -xelatex demo.tex
```
###说明
由以上分析可以看出,在LaTeX的编译过程中,会生成`*.aux`、`*.bcf`、`*.bbl`、`*.log`等辅助文件和日志文件,当这些文件没有发生改变时,这些文件则不需要再次编译,因此,一般不要随便删除这些文件。当然,如果需要从头开始完成编译或编译存在错误,造成无法再次编译时,则可以删除这些辅助文件。
*注意:以上操作都是在命令行实现操作的,若使用IDE,请参考相应手册对IDE进行合理配置,以实现对应操作。*
###编译log(日志)提示信息
通常,当没有达到预定编译次数时,在log(日志)中,会有对应的提示,如:
```
LaTeX Warning: There were undefined references.
LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.
```
或
```
you should run BiBTex to get citation right.
Package natbib Warning: There were undefined citations.
```
或
```
you should run LaTeX again to get reference right.
```
或
```
you should run Biber to get citation right.
```
因此,**认真读编译过程中生成的log(日志)文件**,是非常有必要的。
图做的漂亮!
赞!
图呢?