将一个目录中的所有 *.bib 文件包含到参考书目中

将一个目录中的所有 *.bib 文件包含到参考书目中

一个目录中有几个 *.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等。.bibtexmf/bibtex/bib\bibliography{a,b,c}.biba.bibb.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}

您可以轻松地调整它来处理正则表达式。

相关内容