我有几个bib
文件,我想以略有不同的方式处理它们。我认为最明显的方法是将它们放在不同的类别中(\DeclareBibliographyCategory
),然后在中处理该问题\printbibliography
。
我的问题如下:
- 给定
1.bib
,2.bib
我如何自动将一个文件中的所有条目分配给特定类别?根据文档\addtocategory
仅采用键,因此我必须手动列出所有键。 - 给定第三个文件,
3.bib
在手动将几个条目分配3.bib
到一个类别后,我怎样才能将所有其他条目分配3.bib
到另一个类别中?
基本上,我试图自动将这三个文件分成 4 个类别。
答案1
99% 的你想做的事情都可以在这个问题。使用该答案末尾的源映射技术将合适的关键字添加到您的文件中。假设您有一个关键字“cata”(映射到您的文件1.bib
和)2.bib
,另一个关键字“catb”(自动映射到您的文件3.bib
那么,您唯一剩下的问题就是您想要将一些文件分配给一个类别,将一些文件分配给另一个类别。使用该文件,手动将字段分配keyword
给“cata”,并允许biber
添加自己的额外关键字catb
。
现在您有三个类别:
两个文件中的条目的关键字仅设置为“cata”。
两个文件中的条目关键字设置为“catb”。
其中一个文件中的某些条目的关键字同时设置为“cata”(手动)和“catb”(自动)。
现在,您要做的就是keyword=cata
在第一个参考书目中筛选,keyword=catb, notkeyword=cata
在第二个参考书目中筛选。第一个会挑选自动编码的文件和手动添加的文件,第二个会挑选所有自动编码的文件,但会排除您手动分配给第一个类别的文件。
唯一的技巧是您需要在手动分配的关键字后面加上逗号。
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{test1.bib}
@book{book1,
author = "Anonymous, Author",
title = "First Bibliography: Category 1",
date = {2000},
}
\end{filecontents}
\begin{filecontents}{test2.bib}
@book{book2,
author = "Writer, William",
title = "Second Bibliography: Category 2",
date = {2010},
}
\end{filecontents}
\begin{filecontents}{test3.bib}
@book{book3,
author = "Scribbler, Steven",
title = "First Bibliography Again: Category A and B",
date = {1899},
keywords = {cata,},
}
@book{book4,
author = "Poetaster, Peter",
title = "Second Bibliography Again: Category B",
date = {1767},
}
\end{filecontents}
\usepackage{biblatex}
\DeclareSourcemap{
\maps[datatype=bibtex,overwrite] {
\map{
\perdatasource{test1.bib}
\step[fieldset=KEYWORDS, fieldvalue=cata, append]
}
\map{
\perdatasource{test2.bib}
\step[fieldset=KEYWORDS, fieldvalue=catb, append]
}
\map{
\perdatasource{test3.bib}
\step[fieldset=KEYWORDS, fieldvalue=catb, append]
}
}
}
\addbibresource{test1.bib}
\addbibresource{test2.bib}
\addbibresource{test3.bib}
\begin{document}
\nocite{*}
\printbibliography[keyword=cata]
\printbibliography[keyword=catb, notkeyword=cata]
\end{document}