我正在尝试编译一个乳胶文档,但这花了很长时间。
当一个非常简单的文档几乎无法立即完成时,我认为这是非常奇怪的。
当使用 ptrace 运行 pdflatex 时,我发现它正在搜索到处在我家里texmf
。但是,当我在另一台机器上运行相同的命令时,我没有看到这种情况发生。
以下是我的文件:
\documentclass[letterpaper,12pt]{article}
\begin{document}
Hello World!
\end{document}
下面是 strace 的一部分:
getdents(3, /* 241 entries */, 32768) = 9048
stat("/home/user/gdb_examples.tar.xz", {st_mode=S_IFREG|0660, st_size=1796, ...}) = 0
stat("/home/user/src.tar.xz", {st_mode=S_IFREG|0644, st_size=112380084, ...}) = 0
stat("/home/user/tracing-on-linux.pdf", {st_mode=S_IFREG|0644, st_size=161222, ...}) = 0
stat("/home/user/ssl_example.pcapng", {st_mode=S_IFREG|0644, st_size=4520, ...}) = 0
stat("/home/user/spimsimulator-code", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/home/user/spimsimulator-code/texmf", 0x7ffee1f6ef40) = -1 ENOENT (No such file or directory)
尽管没有为 latex 设置变量来指示在其中进行搜索$HOME
。
我确信如果我mkdir ~/texmf
这样做,这将解决问题,但我担心的是为什么乳胶事件尝试打开每个文件?
答案1
kpsexpand '$TEXINPUTS'
生产
.:{/home/cen5848//texmf,!!/etc/texmf,!!/var/lib/texmf,!!/usr/local/share/texmf,!!/usr/share/texmf}/tex/{kpsewhich,generic,}//
问题是导致使用文件系统而不是 mktexlsr 文件列表对下面的 texmf/home/cen5848//texmf
进行递归(//
)搜索。/home/cen5848
显然$HOME
意外地出现了尾随/
,当与之连接时/texmf
会产生不良影响。
~/texmf
不这样做很正常,因为!!
这样您可以将本地文件放在那里,而不必每次都重建文件列表。通常那里的树比系统 texmf 树小很多,所以这是一个合理的折衷方案。但是您通常不希望在//
没有强制 kpathsea 使用文件列表的情况下在树上放置。