我正在尝试用 编译文件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-R
在texmf-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 的配置。