如果我想先检查文件是否在当前目录中,然后在 texmf 树中查找它,我可以这样做:
\documentclass{article}
\begin{document}
\IfFileExists{./biblatex.def}
{yes, current dir}
{\IfFileExists{biblatex.def}
{yes, texmf dir}{no}}
\end{document}
有没有办法反过来做?首先搜索 texmf 树,如果失败了才使用本地文件?(我问这个问题更多的是出于好奇而不是需要,我只是考虑了一下代码中的搜索顺序,然后意识到我不知道该怎么做排除当前目录)。
答案1
正如 egreg 所说,您可以将其放在.
搜索路径的另一端,或者如果(如这里)您知道它在 texmf 中的位置(如果已安装),您可以使用biblatex/biblatex.def
它将找到标准位置,但不会找到.def
当前目录中的文件。假设您本地没有biblatex
目录,如果您使用latex/biblatex/biblatex.def
或任何路径片段,您需要区分副本。
答案2
该程序kpsewhich
可以使用。在 TeX Live 中,它属于可以在受限 shell 转义中使用的命令。
\documentclass{article}
\begin{document}
\newread\mypipe
\openin\mypipe="|kpsewhich -progname pdflatex -all biblatex.def"
\loop
\ifeof\mypipe
\else
\begingroup
\endlinechar=-1 % suppress space at line end
\read\mypipe to \x
\texttt{\x}\par
\endgroup
\repeat
\end{document}
选项-all
列出给定文件名的所有匹配项。