一个目录中有几个 *.bib 文件,我想将其添加到我的参考书目中。
我不想像这样一个接一个地添加它们:
\bibliography{../dir/a,../dir/b,../dir/c}
我尝试像这样将目录添加到 bibtex:(参见这里)
bibtex --include-directory "../dir/
导致
bibtex: unrecognized option '--include-directory=../dir/'
此选项似乎特定于 mikTeX BibTeX,但我正在使用 TeXLive。
有没有办法将 ../dir/ 中的所有 *.bib 文件添加到我的参考书目中?
我已经在使用 TeX、BibTeX 和 Make,因此使用这些工具的解决方案是首选,尽管我们欢迎任何解决方案。
答案1
默认情况下,TeX Live 会在您的本地文件夹中bibtex
查找本地文件。因此,您可以将包含 bib 文件的目录放在那里,或者在该文件夹内创建指向您的目录的符号链接。两种方法都可以。然后您只需使用for file等。.bib
texmf/bibtex/bib
\bibliography{a,b,c}
.bib
a.bib
b.bib
答案2
据我所知,没有内置的方法将所有文件添加到一个目录中,类似于\bibliography{*.bib}
。
但是,您可以将环境变量设置BIBINPUTS
为./dir:
;然后您将能够使用\bibliography{a,b,c}
来加载./dir/a.bib
,./dir/b.bib
等等。您还可以根据需要设置任意数量的路径,例如./dirA:./dirB:./dirC:
。这里的冒号用于分隔路径,当用在开头或结尾时,用于添加默认路径。
BIBINPUTS
您可以env BIBINPUTS='./dir:' pdftex yourfile.tex
在命令行或 Makefile 中使用来进行设置。
还有一个BSTINPUTS
变量可以设置.bst
文件路径。
答案3
如果你使用 LuaLatex :
\begin{luacode*}
function findBibFiles(folder)
local files = {}
local lfs = require("lfs")
if isDir(folder) then
for file in lfs.dir(folder) do
if file:match("%.bib$") then
table.insert(files, folder .. "/" .. file)
end
end
end
return files
end
function isDir(name)
if type(name)~="string" then return false end
local cd = lfs.currentdir()
local is = lfs.chdir(name) and true or false
lfs.chdir(cd)
return is
end
\end{luacode*}
\newcommand{\setbibliographypath}[1]{
\directlua{
local files = findBibFiles("#1")
for _, file in ipairs(files) do
tex.print("\\addbibresource{" .. file .. "}")
end
}
}
\setbibliographypath{directorypath}
您可以轻松地调整它来处理正则表达式。