\IfFileExists 用于全局书目文件

\IfFileExists 用于全局书目文件

我正在开发一个文档类,如果可用,它会自动从 Mendeley 加载参考书目。以下是挂接到 \end{document} 的代码:

\IfFileExists{library.bib}{
    \ClassWarningNoLine{imetex}{Mendeley bibliography found}
    \ifdefempty{\imetex@bibliography}{
        \renewcommand{\imetex@bibliography}{library}
    }{
        \ClassWarningNoLine{imetex}{Adding local references from \[email protected]}
        \let\mybib\imetex@bibliography
        \renewcommand{\imetex@bibliography}{\mybib,library}
    }
}{
    \ClassWarningNoLine{imetex}{Mendeley bibliography not found}
}
\ifdefempty{\imetex@bibliography}{
    \ClassWarningNoLine{imetex}{No bibliography found}
}{
    \bibliography{\imetex@bibliography}
}

\IfFileExists{library.bib}总是返回 false,即使文件在~/texmf/bibtex/bib/local。如果我尝试\bibliography{library},BibTeX 会成功加载库。

那么问题是什么?IfFileExists不搜索整个texmf树,而是只搜索tex树?有什么替代方案?

答案1

.bib文件是 bibtex 输入,因此通常不在用于输入到 latex 的 TEXINPUTS 搜索路径中。

我认为最好的解决方案是使用

\bibliography{library}

并向搜索该文件的程序(即 bibtex)留下有关该文件不存在的警告。

替代方法是要求在本地将 TEXINPUTS 更改为包含,$BIBINPUTS这样\IfFileExists才能起作用,或者使用 shell-escape 功能并使用外部调用来kpsewhich检查文件是否存在,但这两者都使该类更难为用户设置。

相关内容