我对我的文档(论文,近 300 页)做了一些重大更改,现在编译时间增加了近 3 倍!
一次 pdflatex 运行以前通常需要不到 3 分钟,现在需要大约 6 分钟,而使用 latexmk 完成编译则需要 26 分钟!!!
我所改变的是:
- 将所有源文件(.tex 和 .bib)切换为 UTF8
- 必须从 bibtex/biblatex 切换到 biber/biblatex
我的问题:
- 更改为 UTF8 会减慢编译速度吗?
- 我读到过关于 kpathsea 在每次编译期间检查 deeps 目录路径的一些问题。我如何才能发现我是否存在这样的问题?
我以前在我的计算机上安装了 2 个 TeXLive 发行版,但目前只安装了 TeXLive 2014。
硬件和软件
- MacBook 13英寸(2007年)
- MacOS X 10.6.8
- 2014 年 TeXLive
- Aquamacs 2.5 作为编辑器
- 编译目前是通过命令行(pdflatex 或 latexmk)完成的
对犯罪嫌疑人的进一步调查:
1. TEXINPUTS
该命令kpsexpand \$TEXINPUTS
给出以下结果:(每个路径后添加换行符)
.:{/Users/mbg4/Library/texlive/2014/texmf-config,
/Users/mbg4/Library/texlive/2014/texmf-var,
/Users/mbg4/Library/texmf,
!!/usr/local/texlive/2014/texmf-config,
!!/usr/local/texlive/2014/texmf-var,
!!/usr/local/texlive/texmf-local,
!!/usr/local/texlive/2014/texmf-dist}/tex/{kpsewhich,generic,}//
目录 /Users/mbg4/Library/texmf 不存在。但是,有一个目录/Users/mbg4/Libary/texlive
包含以下内容
texlive mbg4$ ls -ld $(find .)
drwxrwxr-x 6 mbg4 mbg4 204 16 Jan 12:16 .
-rw-r--r--@ 1 mbg4 mbg4 6148 1 Mär 12:50 ./.DS_Store
drwxrwxr-x 4 mbg4 mbg4 136 18 Mär 2011 ./2010
-rw-r--r--@ 1 mbg4 mbg4 6148 1 Mär 12:50 ./2010/.DS_Store
drwxrwxr-x 6 mbg4 mbg4 204 29 Jul 2011 ./2010/texmf-var
-rw-r--r--@ 1 mbg4 mbg4 6148 1 Mär 12:50 ./2010/texmf-var/.DS_Store
drwxrwxr-t 3 mbg4 mbg4 102 29 Jul 2011 ./2010/texmf-var/fonts
drwxrwxr-t 3 mbg4 mbg4 102 29 Jul 2011 ./2010/texmf-var/fonts/tfm
drwxrwxr-t 3 mbg4 mbg4 102 29 Jul 2011 ./2010/texmf-var/fonts/tfm/public
drwxrwxr-t 2 mbg4 mbg4 68 29 Jul 2011 ./2010/texmf-var/fonts/tfm/public/pandora
drwxrwxr-x 4 mbg4 mbg4 136 18 Mär 2011 ./2010/texmf-var/luatex-cache
-rw-r--r--@ 1 mbg4 mbg4 6148 1 Mär 12:50 ./2010/texmf-var/luatex-cache/.DS_Store
drwxrwxr-x 4 mbg4 mbg4 136 18 Mär 2011 ./2010/texmf-var/luatex-cache/context
-rw-r--r--@ 1 mbg4 mbg4 6148 1 Mär 12:50 ./2010/texmf-var/luatex-cache/context/.DS_Store
drwxrwxr-x 4 mbg4 mbg4 136 18 Mär 2011 ./2010/texmf-var/luatex-cache/context/e9159e878e989105b2ef2d27fad97515
-rw-r--r--@ 1 mbg4 mbg4 6148 1 Mär 12:50 ./2010/texmf-var/luatex-cache/context/e9159e878e989105b2ef2d27fad97515/.DS_Store
drwxrwxr-x 2 mbg4 mbg4 68 11 Feb 2011 ./2010/texmf-var/luatex-cache/context/e9159e878e989105b2ef2d27fad97515/trees
drwxrwxr-x 3 mbg4 mbg4 102 18 Dez 2010 ./2010/texmf-var/texdoc
-rw-r--r-- 1 mbg4 mbg4 818250 10 Jul 2011 ./2010/texmf-var/texdoc/cache-tlpdb.lua
drwxrwxr-x 4 mbg4 mbg4 136 1 Mär 12:50 ./2011
-rw-r--r--@ 1 mbg4 mbg4 6148 1 Mär 12:50 ./2011/.DS_Store
drwxrwxr-x 3 mbg4 mbg4 102 15 Dez 2011 ./2011/texmf-var
drwxrwxr-x 3 mbg4 mbg4 102 15 Dez 2011 ./2011/texmf-var/texdoc
-rw-r--r-- 1 mbg4 mbg4 879199 15 Dez 2011 ./2011/texmf-var/texdoc/cache-tlpdb.lua
drwxrwxr-x 3 mbg4 mbg4 102 16 Jan 12:16 ./2014
drwxrwxr-x 4 mbg4 mbg4 136 16 Jan 21:32 ./2014/texmf-var
drwxrwxr-t 3 mbg4 mbg4 102 16 Jan 21:32 ./2014/texmf-var/fonts
drwxrwxr-t 3 mbg4 mbg4 102 16 Jan 21:32 ./2014/texmf-var/fonts/pk
drwxrwxr-t 3 mbg4 mbg4 102 16 Jan 21:32 ./2014/texmf-var/fonts/pk/ljfour
drwxrwxr-t 3 mbg4 mbg4 102 16 Jan 21:32 ./2014/texmf-var/fonts/pk/ljfour/public
drwxrwxr-t 3 mbg4 mbg4 102 16 Jan 21:32 ./2014/texmf-var/fonts/pk/ljfour/public/wasy
-rw-r--r-- 1 mbg4 mbg4 15908 16 Jan 21:32 ./2014/texmf-var/fonts/pk/ljfour/public/wasy/wasy10.657pk
drwxrwxr-x 3 mbg4 mbg4 102 16 Jan 12:16 ./2014/texmf-var/texdoc
-rw-r--r-- 1 mbg4 mbg4 1142858 18 Feb 00:22 ./2014/texmf-var/texdoc/cache-tlpdb.lua
2. Tikz/PGFplots
我在我的文档中没有使用 tikz,但是我用 tikz 做了一次实验,发现我的序言中仍然有以下一行:
%\usepackage{tikz} %使用 TikZ/PGF 绘制 ->http://www.ifi.uio.no/it/latex-links/pgfmanual.pdf
它被注释掉了,所以我认为它应该根本没有影响,但我仍然尝试删除它。
- 但是:我使用 IPE 7 创建图形,并尝试在 IPE 文档中嵌入 tikz 树。我删除了 tikz 树,但我忘记删除此文档的 IPE latex 序言中的 usepackage 命令。生成的 PDF(使用 IPE 创建)通过
includegraphics
我的 pdflatex 文档使用。所以我会看看从那里删除 tikz 代码是否有帮助。
3. 数据工具
- 我不使用 datatool,至少我不知道它和 grep -ir datatool ...
4. Unicode
尚未调查
5. 比伯
biber 似乎影响很大。我目前使用这个 biblatex 设置:
\usepackage[natbib=true, style=numeric-comp, backend=biber, defernumbers,useprefix,firstinits=true, maxnames=99, maxcitenames=3]{biblatex}
当我将其替换backend=biber
为“backend = bibtex8”时,编译时间显著减少(从 98 页的近 5 分钟减少到 37 秒 - 仅需 1 次 pdflatex 运行)。
切换回biber
,我得到 2 分 40 秒的编译时间 - 我很困惑,也许是一些缓存问题?
这里继续:为什么 biber 会大幅增加 pdflatex 运行的编译时间(倍数为 2.8!!)?
评论:
- 我知道目前这些信息很少,我会做更多的测试来找出问题,但是一些关于如何解决该问题的一般性建议和意见将对我非常有帮助!
- 我正在使用版本控制,并尝试回到编译时间增加之前的原始状态并尝试比较输出。
答案1
似乎使用backend=biber
导致了惊人的减速,
我在这里提出了一个新的重点问题来讨论这个问题:为什么 biber 会大幅增加 pdflatex 运行的编译时间(倍数为 2.8!!)?
biber/bibtex8性能比较:
测试设置
- 我的 LaTeX 文档被 \includeonly 限制为一个长章节,
- 98 页,包含大量参考文献,其中许多都包含在大表格中。
- 大型 .bib 文件(5.6 MB),包含 3000 余条参考文献,其中 350 条在文献中被引用
- 我正在从 OS X 终端进行编译以测量编译的持续时间:
latexmk -C; time pdflatex main.tex
检测结果
与 biber:
rm -rf
使用biber --cache``删除了一次 biber 缓存latexmk -C; 时间 pdflatex Diss.tex
输出写在 Diss.pdf 上 (83 页, 2130562 字节)。
实际 2m17.499s
用户 1m47.626s
系统 0m1.030sbiber Diss
真实 0m27.257s
用户 0m20.568s
系统 0m1.247spdflatex Diss.tex 输出写在 Diss.pdf 上 (95 页,2453607 字节)。
实际 4m7.708s
用户 3m27.864s
系统 0m1.029s再次将 pdflatex Diss.tex
输出写入 Diss.pdf (95 页,2452370 字节)。实际 4m33.769s 用户 3m36.491s 系统 0m1.252s
使用 bibtex8
- 删除所有 aux 和 bbl 文件等。
- latexmk -C; time pdflatex Diss.tex
输出写在 Diss.pdf 上(82 页,2130383 字节)。
实际 0m48.470s
用户 0m19.161s
系统 0m0.522s - time bibtex Diss
(有 200 条错误消息)当然 :-(
实际 0m1.258s
用户 0m0.850s
系统 0m0.061s 时间 pdflatex Diss.tex
输出写在 Diss.pdf 上 (95 页, 2452225 字节)。
实际 2m26.433s
用户 1m44.921s
系统 0m0.932s第二个 pdflatex Diss.tex
输出写在 Diss.pdf 上 (95 页, 2450936 字节)。
实际 2m27.148s
用户 1m51.958s
系统 0m0.953s
答案2
从绝对意义上讲,utf8 确实会减慢处理速度,因为(如果有非 ascii 字符)您必须处理 2 个(或更多)字节,而不是 1 个字节,并且处理两个字节所花的时间不可能比处理 1 个字节所花的时间少。但除非您有数百万个非 ascii 字符,并且您的文档只是将它们写入文件并在数千次内读回,否则我怀疑它真的不会产生任何明显的区别。
磁盘搜索几乎总是罪魁祸首。
在我的系统上kpsexpand
显示(添加了空白)
$ kpsexpand \$TEXINPUTS
.:{/home/davidc/.texlive2014/texmf-config,
/home/davidc/.texlive2014/texmf-var,
/home/davidc/texmf,
!!/usr/local/texlive/2014/texmf-config,
!!/usr/local/texlive/2014/texmf-var,
!!/usr/local/texlive/texmf-local,
!!/usr/local/texlive/2014/texmf-dist}
/tex/{kpsewhich,generic,}//
请注意,!!
这意味着这些目录已预先编入 ls-lR 文件中,并且 tex 将不是搜索文件系统。这意味着当你去
\documentclass{article}
TeX 知道在哪里article.cls
并且包括它。
如果!!
不存在并且 ls-r 文件(texhash
命令)丢失或过期,那么 tex 会在所有上面列出的位置对文件系统进行递归遍历,寻找article.cls
这很容易花费几个数量级的时间。
因此请检查你的 TEXINPUTS 并运行texhash
(或者mktexlsr
这或多或少是同一件事)