当提供多个 bib 资源时,有没有办法正常处理 1 个丢失的 bib 文件?

当提供多个 bib 资源时,有没有办法正常处理 1 个丢失的 bib 文件?

我正在使用 MiKTeX 2.9、LyX 2.1.3 和 biblatex/biber 进行参考书目管理。

我需要一组可移植的项目文件,因为我在多台计算机上工作,并且所有内容都使用版本控制系统进行同步。虽然每台计算机上的相对路径相同,但由于帐户名称和驱动器号不同,绝对路径也不同。使用 BibLatex 和 LyX 要求 bib 文件的路径名是绝对引用。

因此,在计算机 A 上,我需要在序言中添加以下内容:

\addbibresource{C:/Users/accountname/dir1/dir2/filename.bib}

在计算机 B 上,我需要有以下内容:

\addbibresource{S:/dir3/dir1/dir2/filename.bib}

我尝试在同一个项目中同时使用这两个命令,但如果在计算机 B 上使用第一个 \addbibresource 行,则运行 biblatex 时会失败并出现“无法找到”错误。它在计算机 A 上可以正常工作,因为它适用于第一个文件(然后在第二个文件上失败)。

我希望它忽略文件丢失错误——跳过丢失的文件并根据需要使用其他 bibresource。不幸的是,它因致命错误而死机,并且不会尝试第二个文件。这可以改变吗?

还有其他我忽略的解决方案吗?不幸的是,似乎必须做出一些让步。我要么放弃 biblatex/biber,恢复到标准 bibtex,这样相对路径在 LyX 中就可以正常工作。我喜欢 biblatex 的灵活性,而且我花了很多时间在我的项目中进行设置,所以我不想放弃 biblatex。我读到过我可以将我的 bib 文件添加到 TEXMF 树中,但我想避免这种方法,因为我不想将项目特定的文件添加到“全局”存储库中。我也不想在从一台计算机切换到另一台计算机时必须注释和取消注释相应的行。我每天都会更新项目,因此不断手动更改使用的 bibresource 会很繁琐。有人有什么建议吗?

答案1

我只会用

\addbibresource{filename.bib}

并在两台机器上安排输入路径,以便在两种情况下都能正常工作。通过将文件放入常规 texmf 树中或设置环境变量,以便S:/dir3/dir1/dir2/filename.bib找到它。

但如果你因为某种原因不想这么做,那就这么做吧

\IfFileExists{S:/dir3/dir1/dir2/filename.bib}
 {\addbibresource{S:/dir3/dir1/dir2/filename.bib}}

另一条路径也类似。

答案2

由于我不被允许对卡莱尔的帖子发表评论:

我遇到了同样的问题,只是两台计算机运行不同的操作系统,Windows 和 MacOS。至少在 Windows 中使用上述代码:

\IfFileExists{D:/Dropbox/library.bib}{
\addbibresource{D:/Dropbox/library.bib}}

\IfFileExists{/Users/.../Dropbox/library.bib}{
\addbibresource{/Users/.../Dropbox/library.bib}}

返回错误(可能是因为 Windows 中没有/Users/(?))

所以我不得不稍微修改一下代码(取自:IfFileExists 和 filecontents 导致错误):

\begingroup\newif\ifmx
\IfFileExists{D:/Dropbox/library.bib}{\mxtrue}{}
\ifmx%{%
\addbibresource{D:/Dropbox/library.bib}%}
\fi\endgroup

\begingroup\newif\ifmy
\IfFileExists{/Users/.../Dropbox/library.bib}{\mytrue}{}
\ifmy%{%
\addbibresource{/Users/.../Dropbox/library.bib}%}
\fi\endgroup

我也可以使用[remote]它,\addbibresource因为它位于我的 Dropbox 中,但它不适用于 TexStudio 中的自动完成功能:

\addbibresource[location=remote]{https://www.dropbox.com/.../library.bib?dl=1}

相关内容