我使用 Cygwinpdflatex
已有近十年了。由于不是管理员,我好几年都只能使用 2015 版安装。大约在 2019 年,我有机会更新 Cygwin,我想大概就是在那个时候,我发现它处理pdflatex
LaTeX 文档的速度明显变慢了,即使是小文档也是如此(这些年来我的文档大小没有太大变化)。由于我使用多台笔记本电脑,我估计这种情况大约在 2019 年夏天开始出现,前后大概 4 个月。Cygwin 的实际速度减慢可能pdflatex
早在那之前就开始了,而我被困在 2015 版安装中,对此毫不知情。
我在网上搜索过。我看到早在 2019 年之前就有投诉称 Cygwin 和各种 LaTeX 处理软件运行缓慢,但没有提到 2015 年至 2019 年期间出现明显的运行缓慢。
由于我主要处于用户级别而非管理员级别,因此我非常依赖已安装的 Cygwin 应用程序的配置。但有时我会深入研究,尤其是在反复经历令人痛苦的编译缓慢时。 什么可能导致这种速度减慢?我可以采取什么措施来缓解这种速度减慢?
我正在认真考虑切换到 MiKTeX,尽管我非常不喜欢离开 Bash 和 Vim 的非 GUI 环境。
故障排除
带有组织 texmf 子树的最小示例文件编译也很慢,即没有引用或缩写。与 2015 年安装相比,控制台输出滚动非常缓慢。
在控制台输出中,我有时会看到一行看起来像是用方括号装饰的页码的内容打印得很慢。我对此的天真印象是,这种缓慢是由于文件搜索以外的处理造成的。
我将定时执行与 MiKTeX 进行了比较,发现它甚至比 Cygwin 的还要慢
pdflatex
(正如 Steven B. Segletes 和 Ulrike Fischer 所预测的那样)。删除辅助文件并运行
mkpdf.bash
包含常见pdflatex
,bibtex
,pdflatex
x2 的Bash 脚本执行时间从Cygwin 的 Bash和
time ./mkpdf.bash
: 1分56秒两次尝试增量运行使用
pdflatex
Cygwin 的 Bash:38s、37s
export TEXMFHOME=texmf
time pdflatex MainDocument.tex
微特克斯和没有“辅助”文件(
pdfLaTeX+MakeIndex+BibTex
): 2分18秒选择增加的
pdfLaTeX
旁微特克斯“播放”按钮: 43秒
答案1
acro
在我第一次看到这个软件包的时候,我的组织里有人报告说它运行速度变慢了。我无法使用建议[version=2]
选项,因为这会导致exclude
和exclude-class
选项都无法识别。我的解决方案是禁用acro
除文档完成之外的包。
以下是有条件地启用/禁用 acro 包的代码。pdflatex
现在的单次运行需要 13.5 秒,速度提高了 3 倍。感谢大家的帮助。
% Acronyms
\newif\ifacro
\acrofalse % Replace with \acrotrue to enable acro package
\ifacro
\usepackage[display-foreign=false]{acro}
% https://tex.stackexchange.com/questions/499134/calling-acro-first-use-when-plural-is-producing-an-s-in-the-short-definition-t
\input{acronyms}
\else
\usepackage{suffix}
\newcommand{\ac}[1]{\uppercase{#1}}
\newcommand{\Ac}[1]{\uppercase{#1}}
\newcommand{\acf}[1]{\uppercase{#1}}
\newcommand{\Acf}[1]{\uppercase{#1}}
\newcommand{\acs}[1]{\uppercase{#1}}
\newcommand{\Acs}[1]{\uppercase{#1}}
\newcommand{\acl}[1]{\uppercase{#1}}
\newcommand{\Acl}[1]{\uppercase{#1}}
\newcommand{\acp}[1]{\uppercase{#1}s}
\newcommand{\Acp}[1]{\uppercase{#1}s}
\newcommand{\acsp}[1]{\uppercase{#1}s}
\newcommand{\Acsp}[1]{\uppercase{#1}s}
\newcommand{\acfp}[1]{\uppercase{#1}s}
\newcommand{\Acfp}[1]{\uppercase{#1}s}
\newcommand{\aclp}[1]{\uppercase{#1}s}
\newcommand{\Aclp}[1]{\uppercase{#1}s}
\newcommand{\acresetall}{}
\newcommand{\acuse}{}
\WithSuffix\newcommand\ac*[1]{\uppercase{#1}}
\WithSuffix\newcommand\Ac*[1]{\uppercase{#1}}
\WithSuffix\newcommand\acf*[1]{\uppercase{#1}}
\WithSuffix\newcommand\Acf*[1]{\uppercase{#1}}
\WithSuffix\newcommand\acs*[1]{\uppercase{#1}}
\WithSuffix\newcommand\Acs*[1]{\uppercase{#1}}
\WithSuffix\newcommand\acl*[1]{\uppercase{#1}}
\WithSuffix\newcommand\Acl*[1]{\uppercase{#1}}
\WithSuffix\newcommand\acp*[1]{\uppercase{#1}s}
\WithSuffix\newcommand\Acp*[1]{\uppercase{#1}s}
\WithSuffix\newcommand\acsp*[1]{\uppercase{#1}s}
\WithSuffix\newcommand\Acsp*[1]{\uppercase{#1}s}
\WithSuffix\newcommand\acfp*[1]{\uppercase{#1}s}
\WithSuffix\newcommand\Acfp*[1]{\uppercase{#1}s}
\WithSuffix\newcommand\aclp*[1]{\uppercase{#1}s}
\WithSuffix\newcommand\Aclp*[1]{\uppercase{#1}s}
\fi
<...snip...>
\ifacro
\cleardoublepage
\printacronyms[%
name = {List of abbreviations/acronyms/initialisms/symbols},
sort = false
]
\fi