首先在 texmf 树中搜索文件

首先在 texmf 树中搜索文件

如果我想先检查文件是否在当前目录中,然后在 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列出给定文件名的所有匹配项。

相关内容