我正在编写一份包含大量参考资料(例如出版物清单)的小文档(8 页)。我在 Mac OS 10.14.2(Mojave)和 biber 2.10 上使用 TexShop 4.26。我正在运行 pdflatex > biber > pdflatex。
一切正常,但运行 biber 和使用 pdflatex 的第二次编译太慢了!!!!第二次用pdflatex编译的话需要四到五分钟。
我应该寻找什么?
答案1
通常,书目性能的瓶颈biblatex
似乎是 Biber 运行。至少这是人们主要抱怨的(为什么 biber 这么慢?,为什么 Biber 2.8 比 Biber 2.7 慢这么多?),但 LaTeX 运行也受到某些影响(为什么 biber 会大幅增加 pdflatex 运行的编译时间(倍数为 2.8!!)?)。
如果在 LaTeX、Biber、LaTeX、LaTeX 序列中第二次运行的速度明显慢于第一次,那么很自然地需要在 Biber 创建的文件中查找问题,.bbl
以便将书目信息传递给 LaTeX(请参阅使用问号或粗体引用关键字代替引用编号对文件进行了精彩的解释.bbl
;请注意,biblatex
文件比标准 BibTeX 生成的文件.bbl
抽象和复杂得多,后者基本上只包含用于排版的参考书目文本)。LaTeX 必须处理整个文件,因此文件越大,LaTeX 运行时间就越长。当然,这不仅仅是关于文件大小:某些东西(名称列表,读取为键值对)比文字字段(读取为简单赋值)更昂贵。.bbl
.bbl
\def
如果.bbl
包含许多条目(可能是由于),而这些条目在文档中的任何地方都\nocite
没有明确列出,并且由于过滤而没有打印出来,那么这一点就变得尤为重要。在这种情况下,输出并不多,但可能会有很多未使用的数据。这些数据仍然需要处理,因此需要花费大量时间和资源才能处理完。\cite
\printbibliography
根据条目如何被过滤以纳入参考书目,可能可以使用源映射来过滤它们,这意味着它们不会进入文件.bbl
,也不会人为地增加文件大小。以下示例来自文档biblatex
。当然,有些过滤决定不能仅根据字段内容来做出,文档上下文在其中发挥作用。但如果可以使用 Biber 的源映射进行过滤,那么从 LaTeX 运行的性能来看,这是更好的选择。
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=title, match={A Title}, final]
\step[entrynull]
}
}
}
将删除字段包含字符串的所有条目A Title
。
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\pernottype{book}
\pernottype{article}
\step[entrynull]
}
}
}
将删除所有非@book
s 或@article
s 的条目。
理论上,其他临时文件(主要是.aux
)也可能导致后续运行速度变慢。 来自的命令.aux
计算量并不大,但在中添加更多调用.aux
也会增加编译时间。