![kpathsea 和路径前缀](https://linux22.com/image/246387/kpathsea%20%E5%92%8C%E8%B7%AF%E5%BE%84%E5%89%8D%E7%BC%80.png)
在第 27 页,kpathsea 手册指出:
- [搜索路径是用冒号分隔的路径元素列表。]
- ...
- 要检查特定路径元素
e
,Kpathsea 首先会查看预建数据库是否适用于e
,即数据库是否位于前缀为 的目录中e
。如果是,则将路径规范与数据库的内容进行匹配。
这篇描述的最后一句话中有些事情不太清楚。如果有人能给我一个更准确的描述或解释一下它的工作原理,我将不胜感激。以下是我的一些问题。
- 路径元素
e
可能有多个前缀。按照什么顺序搜索它们?例如,如果e
等于/a/b/c
,则/a
和/a/b
都是的前缀e
。(我怀疑顺序是:最长前缀优先...最短前缀最后。) - 是
e
其自身的前缀吗?(我怀疑是的。)
以下是问题 1 的可能解决方案。是否有一个隐含的假设,即任何路径元素最多只有一个前缀可以包含数据库ls-R
?如果是这样,包含数据库的目录应该ls-R
位于 中吗TEXMFDBS
?这是有道理的。例如,find /usr/local/texlive -name ls-R
给出:
/usr/local/texlive/texmf-local/ls-R
/usr/local/texlive/2011/texmf/ls-R
/usr/local/texlive/2011/texmf-dist/ls-R
/usr/local/texlive/2011/texmf-var/ls-R
/usr/local/texlive/2011/texmf-config/ls-R
并kpsewhich -var-value=TEXMFDBS
给出:
{!!/usr/local/texlive/2011/texmf-config,
!!/usr/local/texlive/2011/texmf-var,
!!/usr/local/texlive/2011/texmf,
!!/usr/local/texlive/2011/../texmf-local,
!!/usr/local/texlive/2011/texmf-dist}
编辑(2012 年 3 月 2 日)我发了一封电邮到kathsea
邮件列表。我得到了Karl Berry 的回复ls-R
建议从根到任何叶的一条路径上不应有多个数据库。此外,包含 ls-R 数据库的目录应位于 中TEXMFDBS
。
答案1
专家建议ls-R
从根到任何叶的一条路径上不应有多个数据库。此外,包含 ls-R 数据库的目录应位于 中TEXMFDBS
。