我正在开发一个文档类,如果可用,它会自动从 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
检查文件是否存在,但这两者都使该类更难为用户设置。