我经常记不住kpsewhich
命令的名称。如果我明白这个名字的来源,也许我会更容易记住它,所以问题是:
这个立场代表什么kpse
?
答案1
钾arl 的磷阿斯东南arch 库哪个
答案2
如上所述info kpathsea
(在线手册这里)Kpathsea 是一个路径搜索.sty
(例如,为了在一组可能很大的 TEXMF 树中快速定位给定文件,没有每次需要给定文件时都执行递归目录树遍历;这在使用多个包编译 LaTeX 文档时很重要,因为这些包本身需要其他包,可能还需要各种字体文件等)。
这路径搜索给出pathse
部分,缩写为pse
。 “which” 让人想起 Unixwhich
实用程序,它根据您的 PATH 环境变量告诉您给定命令的可执行文件运行的路径。例如:
$ which find
/usr/bin/find
我相信“k”代表“Karl Berry”。:-)
补充
which
和之间的比较kpsewhich
远不止于此。由于 Unix shell 通常会维护 PATH 目录中的可执行文件的缓存,以便提供高效的命令完成查找,因此 Kpathsea 库会维护文件名数据库(由ls-R
每个 TEXMF 树中的文件组成),以便为 TeX 相关程序提供类似的快速查找。
在 Unix shell 中,当您从 PATH 添加或删除可执行文件并希望在不重新启动 shell 的情况下刷新缓存时,通常可以使用 hash 命令(hash -r
在 Bash 中,rehash
在 Zsh 中)更新缓存;对于 Kpathsea 库,相应的操作是使用 完成的mktexlsr
,也称为texhash
。
最后,在 PATH 1which
中列出的目录中查找给定的可执行文件,某种程度上类似于使用磁盘查找或仅使用文件名数据库来查找 TeX 相关文件(这取决于 TEXMF 树前面是否带有在2中使用它的位置)。然而,它比典型的内置命令更复杂,因为它可以根据给出的内容返回不同的结果,具有可以在 中设置的变量的概念,可以根据 中的每个目录设置仅在缓存中或磁盘上查找,等等。kpsewhich
!!
texmf.cnf
kpsewhich
which
-progname
texmf.cnf
texmf.cnf
脚注
至少在 Bash 和 Zsh 中,它似乎确实在搜索 PATH:如果你将新的可执行文件添加到 PATH 的目录中,则
which
这些 shell 的内置命令会立即找到它,而无需运行hash -r
或rehash
(对于命令完成可能并非如此)。例如参见
/usr/share/texlive/texmf-dist/web2c/texmf.cnf
Debian。