模板编译 - 需要 biber、pdflatex、makeindex 才能运行

模板编译 - 需要 biber、pdflatex、makeindex 才能运行

我使用的模板是 Legrand Orange Book,来自http://www.latextemplates.com

它与TeXShop(发行版的一部分MacTeX)一起编译得很好,但我不确定我做得是否完全正确。我必须编译几次才能获得索引和参考书目(我假设这是预期的行为)。我应该使用什么方法(如果有的话,除了使用编译按钮)来确保它编译正确(即,我如何确切地知道要运行编译多少次)?

模板中的说明如下:

% Compiling this template:
% This template uses biber for its bibliography and makeindex for its index.
% This means that to update the bibliography and index in this template you
% will need to run the following sequence of commands in the template
% directory:
%
% 1) pdflatex main
% 2) makeindex main.idx -s StyleInd.ist
% 3) biber main
% 4) pdflatex main

并且我在模板中看到以下引用,因此我假设TeXShop正在内部调用必要的程序(?):

% Bibliography
\usepackage[style=alphabetic,sorting=nyt,sortcites=true,autopunct=true,babel=hyphen,hyperref=true,abbreviate=false,backref=true,backend=biber]{biblatex}
\addbibresource{bibliography.bib} % BibTeX bibliography file
\defbibheading{bibempty}{}

% Index
\usepackage{calc} % For simpler calculation - used for spacing the index letter headings correctly
\usepackage{makeidx} % Required to make an index
\makeindex % Tells LaTeX to create the files required for indexing

答案1

这种情况下,酷炫的自动化工具arara会有所帮助。如果您有能力使用它,那么应该这样做。

如果你尚未安装 arara(它与 texlive 捆绑在一起),请下载它来自 github并安装。它需要 java。现在让我们假设您的文件是main.tex。将以下内容放在 之前\documentclass{...}

% arara: pdflatex 
% arara: makeindex: { style: StyleInd }
% arara: biber
% arara: pdflatex 
\documentclass{...}
..
..
..
..

现在打开命令并发出arara main(从您的同一文件夹,main.tex并且arara应该在系统路径中)。整个工作将由您处理arara,您应该已经准备好您的 pdf 文件。

有关如何arara与 texshop 集成的详细信息,请参阅:

这个答案

这个答案

以及出色的arara手册。

答案2

为了获得正确的编译顺序,您应该考虑外部工具需要知道的信息。

例如:biber 只需要知道您在文档中使用的所有引用。此信息存储在文件中第一次运行 pdflatex 时.bcf。因此,biber 的正确顺序是:

  1. pdflatex % 创建 bcf
  2. biber % 创建 bbl
  3. 运行更多 pdflatex (通常至少 2 次) 来使用 bbl 中的信息

makeindex而另一边则不仅需要知道要放入索引的单词,还需要知道它们的页面!因此,编译顺序makeindex要复杂得多:

  1. 足够多的 pdflatex + 所有可以影响索引词页码的工具(这包括 biber,因为引文的扩展会改变页面)运行,以便 pdflatex 可以为 makeindex 创建正确的输入文件
  2. 制作索引
  3. pdflatex 包含索引
  4. 也许一切都会重来,以防索引本身影响到索引词的页数

所以我认为你的模板中描述的编译顺序是错误的。当然,如果你在最终文档中重复两三次,最后结果会是正确的(代价是运行 biber 太频繁)。

相关内容