我有一个主文件和一个对应的 bib 文件。现在我想引用已编译bbl
文件中找到的项目。如何将两者结合起来?
思路:
- 将新内容添加
\bibitem
到main.bbl
文件,重新编译时删除条目 - 可以合并多个 bib/bbl 文件吗?
- 根据答案建议,手动将 bbl 文件转换为 bib
答案1
文件起什么.bbl
作用?
.bbl
.bib
文件是用于使条目在 LaTeX 文件中可用的中间数据格式。它们的格式和确切用途在biblatex
基于 BibTeX 的系统之间有所不同。
对于基于 BibTeX 的系统(例如natbib
),该.bbl
文件包含一个thebibliography
可以直接排版的环境。通常thebibliography
是一个美化的enumerate
环境,带有一些额外的\label
类似命令。该.bbl
文件(本质上)\input
由\bibliography{...}
和 排版。文件的格式和内容由您在文档中给出的.bbl
控制。BibTeX 的文件可以轻松手动编辑,实际上“手动书目方法”本质上是将 的内容直接写入文档(例如,参见.bst
\bibliographystyle
.bbl
.bbl
https://www.tug.org/TUGboat/tb30-1/tb94mori.pdf)。
因为biblatex
文件.bbl
不包含可排版的代码,而是包含可用于的摘要格式的原始数据biblatex
。.bbl
文件在文档开头读取,以便在处理文档时提供有关所有条目的所有信息。由于biblatex
允许您将文档分成几个refsection
部分并支持从不同refcontext
部分获取数据,因此文件的结构可能比所有条目及其数据的简单列表稍微复杂一些。但最终,biblatex
文件.bbl
是基于文本的列表结构,如果需要可以手动编辑。
也可以看看Latex 的 .bib 文件和 .bbl 文件之间的区别,如何在不运行 bibtex 的情况下告诉 LaTeX 使用现有的 bbl 文件?。我曾在使用 bibulous 自定义引文,让 arXiv 接受 BibTeX BBL(2018 年 5 月)和LaTeX 文件可以包含 BibTeX 文件吗?并且您可能会在本站上找到更多帖子来解释这一点或.bbl
顺便或详细地提及其工作原理。
.bbl
合并多个文件时遇到困难
需要记住的一件重要事情是.bbl
BibTeX 和 的文件都是经过排序的。这意味着在合并两个文件时(无论通过何种方式),biblatex
您必须注意排序顺序。.bbl
此外,.bbl
文件可能包含 中不存在的、.bib
超出排序范围的数据。其中biblatex
包括名称唯一性和消歧义数据。一些更高级的作者年份 BibTeX 样式还会动态创建年份消歧义标签,如“Knuth 1986a, Knuth 1986b”中的“a”和“b”。如果添加了新条目,这些上下文相关功能可能不再按预期运行。文件本身中不存在且由后端计算的数据的另一个示例是或.bib
生成的字母数字标签。alpha.bst
style=alphabetic
对于基于 BibTeX 的文件,如果两个文件的输出兼容,输出一致,.bbl
那就太好了。如果两个文件都是用相同的 生成的,那么这是理所当然的,如果不是这样,可能需要手动干预。由于的文件只包含数据,因此 不必担心。.bbl
.bbl
.bst
biblatex
.bbl
biblatex
将文件一的内容粘贴.bbl
到文件二中
合并文件的简单解决方案.bbl
是将一个.bbl
文件的内容复制到另一个文件中。
由于.bbl
文件旨在作为.bib
和.tex
文件之间的辅助和临时桥梁,因此每次运行 BibTeX 或 Biber 时,它们都会被覆盖。这意味着biblatex
手动更改这些文件非常繁琐,但对于 BibTeX 来说非常简单,对于 来说也相当简单。
总而言之,如果您只有少量条目需要集成到您的.bbl
文件中,并且上下文相关的数据和排序起的作用很小或根本不起作用,那么这种方法是可行的。
.bbl
使用 LaTeX加载多个文件
使用 BibTeX加载多个文件没有问题.bbl
,但如果你不操作相关的宏,两个文件都会产生带有自己编号的单独参考书目
\begin{document}
\cite{sarfraz,kullback}
\cite{doody,wilde}
\input{bblone.bbl}
\input{bbltwo.bbl}
\end{document}
根据所需的输出,可能会将两个.bbl
文件(或多或少)组合在一起(这只是一个概念证明,绝对不建议,它以一种非常简单的方式重新定义了低级命令)
\begin{document}
\cite{sarfraz,kullback}
\cite{doody,wilde}
\makeatletter
\begingroup
% usually \begin{...}\end{...} has an implicit group, we need to get rid of that
\def\begin#1{\csname #1\endcsname}
\def\end#1{\csname end#1\endcsname}
% save the real endthebibliography and disable the end for the first bbl
\let\orig@endthebibliography\endthebibliography
\let\endthebibliography\relax
\input{bblone.bbl}
% remove the beginning and restore the end
\let\thebibliography\@gobble
\let\endthebibliography\orig@endthebibliography
\input{bbltwo.bbl}
\endgroup
\makeatother
\end{document}
也可以从不同的文件中获取数据,请biblatex
参见.bbl
如何导入/打印从单独/外部文档创建的参考书目?。但由于结构更复杂,因此要正确处理也更加复杂。
因此理论上可以.bbl
在 LaTeX 方面进行组合,但这可能很快变得非常复杂,并且不能解决排序和上下文相关信息的问题。
转换.bbl
为.bib
我更倾向于将第二个文件的内容转换.bbl
回.bib
文件。有了该.bib
文件,您就可以照常使用 BibTeX 或 Biber。
转换不必手动完成,您可以使用https://text2bib.economics.utoronto.ca/就像建议的那样从 textplain 引用转换为 bibtex。当然,您必须仔细检查结果,并且应该期望对结果进行一些修复,但作为第一种方法,这样的工具可能会有所帮助。好处是您只需执行一次。
.bib
一次加载多个文件没有问题,请参阅来自多个 .bib 文件的书目。