对犯罪嫌疑人的进一步调查:

对犯罪嫌疑人的进一步调查:

我对我的文档(论文,近 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

它被注释掉了,所以我认为它应该根本没有影响,但我仍然尝试删除它。

  • 但是:我使用 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.030s

  • biber Diss
    真实 0m27.257s
    用户 0m20.568s
    系统 0m1.247s

  • pdflatex 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这或多或少是同一件事)

相关内容