我正在尝试使用 AUCTeX C-c C-a
(TeX-command-run-all)来调用完整的编译链(包括调用biber
)来构建以下 MWE:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{mybib.bib}
@ARTICLE{example,
author = {Other, Anthony Norman},
title = {Some things I did},
year = {2014},
journal = {J.~Irrep. Res.},
volume = {1},
number = {1},
pages = {1-10}
}
\end{filecontents}
\usepackage[backend = biber]{biblatex}
\addbibresource{mybib.bib}
\begin{document}
Hello\cite{example}.
\printbibliography
\end{document}
但是,虽然 LaTeX 文档包含参考书目,但C-c C-a
只调用一次latex
运行,然后打开查看器。使用C-c C-c
分步编译文档时也会出现同样的情况:C-c C-c
建议运行latex
,然后直接view
打开 PDF 文件,而不建议biber
构建参考书目。
我怎样才能让 AUCTeX 建议正确的构建顺序 latex -> biber -> latex -> viewer 来通过点击来编译文档C-c C-a
?
答案1
AUCTeX 方面存在一些问题。
首先,也是最重要的一点,AUCTeX 无法处理 TeX 文件和参考书目文件共享相同基本名称的情况(例如,前者名为mydocument.tex
,后者名为mydocument.bib
)。这是几十年前做出的一个不幸的设计决定,如今如果不进行大量重写,很难修复。我想修复这个问题,但这基本上会严重向后不兼容。
第二个问题是,当 AUCTeX 解析文件时,它不会\jobname
使用实际的作业名称进行翻译。这个问题很容易解决,但\jobname
通常用于引用与主文件具有相同基本名称的文件,就像本例一样,因此考虑到上述问题,修复当前问题是没有意义的。
最后一个问题与 AUCTeX 如何猜测要运行的命令有关。它查看.bib
和.bbl
文件:如果文件.bib
比文件新.bbl
,则需要再次运行biber
(或bibtex
或其他)。但是,如果将参考书目数据库与环境一起插入到 TeX 文件中filecontents
,则每次运行时latex
,.bib
文件都会重新生成,因此它总是比文件新.bbl
,从而混淆了 AUCTeX 中用于确定要运行哪个命令的机制:AUCTeX 会建议运行无限序列 LaTeX(这会创建文件.bib
),然后 Biber(因为没有.bbl
文件),LaTeX(这会重新生成文件.bib
),Biber(因为文件.bib
现在比.bbl
文件新),LaTeX(这会重新生成文件.bib
),Biber(因为文件.bib
现在比文件新.bbl
)等...实际上,不会有无限循环,因为 AUCTeX 将运行最多 12 个命令的序列,但无论如何都不是很有用。
这段历史的寓意:
\jobname
如果您想依赖 AUCTeX 能力来解析文件,请避免使用。- 不要使用与 TeX 文件具有相同基本名称的参考书目文件,其原因本质上与上一点相同。
- 如果要使用该
filecontents
环境,则需要使用手动运行latex
和。使用将进入无限循环(不是真正的无限,它将是 LaTeX - Biber 序列,每个序列重复 6 次)。biber
C-c C-cC-c C-a
但请注意,filecontents
通常用于编写简单的自包含示例。然而,现实世界的文档有一个外部书目文件。在这种情况下,您不会遇到任何问题,只要书目文件的基本名称与 TeX 文件的不同。