使用 CC Ca 在 AUCTex 中调用完整的编译链

使用 CC Ca 在 AUCTex 中调用完整的编译链

我正在尝试使用 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 次)。biberC-c C-cC-c C-a

但请注意,filecontents通常用于编写简单的自包含示例。然而,现实世界的文档有一个外部书目文件。在这种情况下,您不会遇到任何问题,只要书目文件的基本名称与 TeX 文件的不同。

相关内容