我在 win7 上的 texstudio 中使用 latexmk。处理一本 400 多页的书,其中包含大量图表、引文和索引词,编译一次这本书需要五分钟以上的时间。完整的编译(至少有时)需要将近半个小时。这我可以轻松忍受。然而,我注意到编译时间中有一半不是在运行 pdflatex,而是在运行 kpsewhich。
我已经将整本书和 texlive 组织在快速 ssd 上。Texlive 定期更新。请问有人能告诉我为什么 kpsewhich 会接管很长时间吗?我之前被告知它会搜索整个计算机。在这种情况下,如何告诉 kpsewhich 专注于 ssd?是否有任何环境变量需要添加?
顺便说一句,直接运行 PDFlatex 而不是 latexmk 不涉及 kpsewhich。
诚挚问候 Bernhard
编辑:
这是从 latexmk 命令中删除 -silent 选项时的(部分)输出。Pdflatex 在以下情况下停止:
Latexmk:日志文件显示输出到“VierteDeutscheEdition.pdf”
然后 kpsewhich 接管。不幸的是,没有 kpsewhich 输出。运行 kpsewhich 后,其余消息才会出现。...
输出写在 VierteDeutscheEdition.pdf (581 页,170933099 字节) 上。
SyncTeX 写在 VierteDeutscheEdition.synctex.gz 上。
抄录在 VierteDeutscheEdition.log 上。
Latexmk:索引文件“VierteDeutscheEdition.idx”已写入
Latexmk:找到输入 bbl 文件“VierteDeutscheEdition.bbl”
Latexmk:日志文件显示输出到“VierteDeutscheEdition.pdf”
pdflatex 停止
Latexmk:未定义的参考和引文列表:
参考第 39 页上的“sec:sugarmetabolism”在输入第 39 行上未定义
参考第 473 页上的“sec:sugarmetabolism”在输入第 8 行未定义
参考第 85 页上的“sec:sugarmetabolism”在输入第 68 行上未定义
Biber 警告:[32485] Utils.pm:164> 警告 - 我没有找到“CSV+87”的数据库条目(第 5 节)Biber 警告:[32486] Utils.pm:164
警告 - 我没有找到“THH+13”(第 5 节)的数据库条目
Biber 警告:[39095] Utils.pm:164> 警告 - 我没有找到“Loveland11a”的数据库条目(第 9 节)Biber 警告:[44320] Utils.pm:164
警告 - 条目“CWT+98”中的月份字段“Nov”不是整数 - 这可能无法正确排序。Biber 警告:[44336] Utils.pm:164
警告 - 条目“RYF+98”中的月份字段“Nov”不是整数 - 这可能无法正确排序。Biber 警告:[44348] Utils.pm:164
警告 - 条目“HLH08”中的月份字段“Apr”不是整数 - 这可能无法正确排序。Biber 警告:[44357] Utils.pm:164
...
Latexmk:找到 biber 源文件 [Literatur/EndokrinologieKunde.bib Literatur/FatMetabolism.bib Literatur/Leptin.bib VierteDeutscheEdition.bcf]
Latexmk:警告摘要:Latex 无法解析 5 个引用
Latexmk:所有目标(VierteDeutscheEdition.pdf)都是最新的
答案1
latexmk
此行为是由于版本 4.52b 中修复的一个错误造成的。如果可能,您应该更新你的 TeX 发行版安装当前版本。如果无法做到这一点,例如,如果您只想更改这一个包,或者您没有权限更新整个发行版,则需要在本地安装包。此选项应被视为最后的手段,因为对于更复杂的软件包,可能存在软件包依赖性,这将使本地安装更加复杂且容易出错。(请注意,该latexmk
脚本是单个文件,因此关于复杂软件包的通常重要警告在这里并不那么重要。)
(笔记:如果新文件传播到 CTAN 镜像站点和发行版出现延迟,您可以通过以下方式获取新版本:http://personal.psu.edu/jcc8/latexmk/,如果您有紧急需要的话。)
问题诊断与解决
问题是由一个包含大量图形文件的文档引发的,这些文件是通过使用 kpsearch 在 texmf 树中进行非平凡使用而找到的。 (许多文档的图形文件位于文档目录中或文档目录下,不需要搜索;这就是为什么之前没有注意到这个问题的原因,即使latexmk
作者正在写一本 600 多页的书。) Latexmk
在 .fls 文件和 .log 文件中搜索依赖关系信息。 .log 文件中的某些相关信息没有必要的路径信息,因此latexmk
调用kpsewhich
它来查找它们。但是它有时具有对每个文件调用一次的极非优化行为。即使每次调用 0.2 秒(在最近的 iMac 上),也会很快累积起来。这并不是真正kpsewhich
搜索整个计算机,而是它被调用的次数太多了。严格来说,这不是一个错误,而是缺乏重要的优化。
如果latexmk
的记录器模式已打开,则必要的信息位于 .fls 文件中,因此对于图形和其他输入文件,kpsewhich
在新版本中不再调用 。如果记录器模式已关闭,则kpsewhich
需要调用 ,但现在调用已分批为一次调用,这在有问题的情况下仍可显著缩短运行时间。 的其余用途kpsewhich
是查找 .bst 和 .bib 文件(如果需要);这些文件不是分批的(至少目前还没有),但通常数量很少,因此它们应该不是问题。
(新版本还提供了一些获取有关调用的诊断的方法kpsewhich
。)