为什么 kpsewhich 找不到此文件?

为什么 kpsewhich 找不到此文件?

我正在尝试用 编译文件context,但收到错误:

I couldn't open style file cont-no.bst
---line 2 of file dissertation.aux
 : \bibstyle{cont-no
 :                  }

我想通过尝试找出kpsewhich此文件的位置来调试它,但没有找到:

$ kpsewhich cont-no.bst

因此我尝试使用--debug开关来查明发生了什么,令我惊讶的是,我发现它正在搜索所有应该搜索的列表:

$ kpsewhich --debug=2 cont-no.bst
kdebug:/nix/store/msb4kcxagy3xkqx02wl25qdid1qgpnww-TeXLive-linkdir/texmf-config/ls-R: 10799 entries in 10172 directories (0 hidden).
kdebug:ls-R hash table:32003 buckets, 3564 nonempty (11%); 10799 entries, average chain 3.0.
kdebug:/nix/store/msb4kcxagy3xkqx02wl25qdid1qgpnww-TeXLive-linkdir/texmf-var/ls-R: 80 entries in 13 directories (0 hidden).
kdebug:ls-R hash table:32003 buckets, 3564 nonempty (11%); 10879 entries, average chain 3.1.
kdebug:/nix/store/msb4kcxagy3xkqx02wl25qdid1qgpnww-TeXLive-linkdir/texmf-dist/ls-R: 135626 entries in 9902 directories (0 hidden).
kdebug:ls-R hash table:32003 buckets, 30360 nonempty (94%); 146505 entries, average chain 4.8.

texmf-dist/ls-R确实列出了必要的文件:

$ cat /nix/store/msb4kcxagy3xkqx02wl25qdid1qgpnww-TeXLive-linkdir/texmf-dist/ls-R
./texmf-dist/bibtex/bst/context:
cont-ab.bst
cont-au.bst
cont-no.bst
cont-ti.bst

存在:

$ ls /nix/store/msb4kcxagy3xkqx02wl25qdid1qgpnww-TeXLive-linkdir/texmf-dist/texmf-dist/bibtex/bst/context/cont-no.bst
/nix/store/msb4kcxagy3xkqx02wl25qdid1qgpnww-TeXLive-linkdir/texmf-dist/texmf-dist/bibtex/bst/context/cont-no.bst

所以我的问题是,为什么不kpsewhich返回此文件的路径?据我所知,它应该包含所需的所有信息。

答案1

该文件包含在下,texmf-dist/texmf-dist/..kpsewhich正在下搜索texmf-dist/,相关内容ls-Rtexmf-dist/。因此找不到该文件,因为该文件比正常目录深一个目录层,但您的 TeX Live 没有进行相应配置。

请注意,文件系统的层次结构很重要。文件的位置在相关目录中正确列出是不够的ls-R。相反,文件必须位于适合其文件类型的路径上。

为了说明起见,请考虑以下示例:

kpsewhich -show-path=bst

在我的系统上,这将返回

.:/home/<username>/.texlive2015/texmf-config/bibtex/bst//:/home/<username>/.texlive2015/texmf-var/bibtex/bst//:/home/<username>/texmf/bibtex/bst//:!!/usr/local/texlive/2015/texmf-config/bibtex/bst//:!!/usr/local/texlive/2015/texmf-var/bibtex/bst//:!!/usr/local/texlive/texmf-local/bibtex/bst//:!!/usr/local/texlive/2015/texmf-dist/bibtex/bst//:/usr/share/texmf/bibtex/bst//:/home/<username>/.texlive2015/texmf-config/bibtex/csf//:/home/<username>/.texlive2015/texmf-var/bibtex/csf//:/home/<username>/texmf/bibtex/csf//:!!/usr/local/texlive/2015/texmf-config/bibtex/csf//:!!/usr/local/texlive/2015/texmf-var/bibtex/csf//:!!/usr/local/texlive/texmf-local/bibtex/csf//:!!/usr/local/texlive/2015/texmf-dist/bibtex/csf//:/usr/share/texmf/bibtex/csf//

按顺序搜索这些目录。如果前面有!!,则将使用相关目录ls-R,搜索将不检查磁盘上实际目录的内容。否则,搜索将检查相关目录下的所有内容。

这意味着,.bst如果文件位于 下,/usr/local/texlive/2015/texmf-dist/tex/latex/<some package>/即使文件位置正确包含在 中,也不会找到它。同样,即使文件包含在 中,也ls-R /usr/local/texlive/2015/texmf-dist/ls-R不会在 下找到它。/usr/local/texlive/2015/texmf-dist/texmf-dist/bibtex/bst//usr/local/texlive/2015/texmf-dist/ls-R

我认为,最好的解决方案是消除额外的层,以便您返回到符合 TDS 的配置。

相关内容