问题描述
今天老的TexWorks出了各种问题,一怒之下卸载了,重新下了一个TexLive,配置了一个新的VSCode的LaTex环境。结果在用模板编译的时候出现了报错:
I found no \citation commands---while reading file individual_thesis.aux
I found no \bibdata command---while reading file individual_thesis.aux
I found no \bibstyle command---while reading file individual_thesis.aux
原因分析
经过一番查阅资料,以及一些失败的尝试,最后确定了问题所在:
使用的模板中用了biblatex包,还给塞到了一个xxx.cls文件里面并在tex主文件里面用\documentclass{xxx}调用。
\RequirePackage[style=ieee]{biblatex}
然后我在配置的时候,用的编译链是xelatex --> bibtex --> xelatex*2,而在使用biblatex包的时候,其对应的引擎应该是biber,而不是bibtex!
参见:biblatex - No `\citation`, `\bibdata` or `\bibstyle` command - TeX - LaTeX Stack Exchange
There are two engines to read .bib files:
- BibTex. This is the old one and is the default engine used by TeXmaker
- Biber. This is the new engine and is used in my example
解决方法
解决方法就是把编译链改成xelatex --> biber --> xelatex*2。
Biber和BibTex这两个宏包在安装TexLive的时候都会有,加入系统环境变量后可以直接调用,所以我们直接在VSCode的设置中修改编译链即可。于是我们在settings.json中新增:
在"latex-workshop.latex.tools":属性内加入
{
"name": "biber",
"command": "biber",
"args": [
"%DOCFILE%"
]
}
再在"latex-workshop.latex.recipes":属性中加入
{
"name": "Biber",
"tools": [
"biber"
]
},
{
"name": "xelatex -> biber -> xelatex*2",
"tools": [
"xelatex",
"biber",
"xelatex",
"xelatex"
]
},
{
"name": "pdflatex -> biber -> pdflatex*2",
"tools": [
"pdflatex",
"biber",
"pdflatex",
"pdflatex"
]
}
这样就新了三种编译链:(1)单独运行biber编译;(2)一次XeLaTex,一次Biber,两次XeLaTex;(3)一次PdfLaTex,一次Biber,两次PdfLaTex(用于英文论文)。((1)和(3)视情况可不加)
保存,重启VSCode,再编译时手动选择xelatex -> biber -> xelatex*2的recipe运行,即可。
更多补救措施
如果还没有解决,可以参考这篇文章试着清一下bib的缓存,然后再重新编译:
如果还还没有解决,可以尝试在调用biblatex包的时候指定backend=biber:
\RequirePackage[style=ieee, backend=biber]{biblatex}
或者更一般地:
\usepackage[style=ieee, backend=biber]{biblatex}
PS:如果没有调用biblatex包,而是直接用bibtex写引用,则应当使用xelatex -> bibtex -> xelatex*2的编译链,设置方法与上面类似,只要将biber改为bibtex即可。
以前都是Overleaf直接搞定的,第一次在本地跑Latex折腾了半天,也算吃一堑长一智了。