我正在使用biblatex
Biber。我使用类别来分离属于不同类型的引文,并相应地生成不同的参考书目。假设我有一个a.bib
文件,其中包含 bib 记录(假设带有标签a1
、a2、...),它们都属于一个类别c1
,还有一个b.bib
文件,其中包含 bib 记录(标签b1
、b2
...),它们都属于类别c2
。目前,我写了类似这样的内容:
\usepackage[citestyle=numeric-comp,backend=biber,defernumbers=true]{biblatex}
\DeclareBibliographyCategory{c1}
\DeclareBibliographyCategory{c2}
\addtocategory{c1}{a1,a2,...}
\addtocategory{c2}{b1,b2,...}
\addbibresource{a.bib}
\addbibresource{b.bib}
有没有一种简单的方法可以说:“中的所有 bib 记录都a.bib
属于c1
,而无需全部列出?”
答案1
biblatex
为将条目拆分/分类为任意子集的任务提供了两种主要解决方案
- 书目类别和
- 关键词。
书目类别在文档端实时工作。您可以使用声明类别,\DeclareBibliographyCategory
并使用将条目添加到类别中\addtocategory
。类别对于临时分类和分组很有用,这些分类和分组可能因文档而异。类别的一个很好的例子是如何将参考书目分为“引用的作品”和“未引用的作品”?,其中类别用于划分所引用著作和添加的参考书目\nocite
。
另一方面,关键字被添加到.bib
字段中的文件中keywords
。它们不需要在文档中进一步设置,可以直接用于过滤书目keyword=<keyword>
或用于通用测试\ifkeyword{<keyword>}{<true>}{<false>}
。由于关键字来自.bib
,因此它们通常与特定入口而不是文档。
大多数情况下,一旦了解/定义了类别和关键词,就可以以类似的方式使用。
当 Biber/BibTeX 处理完您的.bib
文件并将数据传递到biblatex
时,.bbl
没有关于每个条目的数据源的信息。这使得从.bib
文件生成类别变得极其困难,因为相关数据不再可用。
不过,有一个技巧可以让 Biber 添加不同的关键词对于每个.bib
文件,如下所示biblatex:按不同的 .bib 文件分类的多个参考书目。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{csquotes}
\usepackage[backend=biber,style=authoryear]{biblatex}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\perdatasource{\jobname-primary.bib}
\step[fieldset=keywords, fieldvalue={, primary}, append]
}
\map{
\perdatasource{\jobname-secondary.bib}
\step[fieldset=keywords, fieldvalue={, secondary}, append]
}
}
}
\usepackage{filecontents}
\begin{filecontents}{\jobname-primary.bib}
@BOOK{hectic,
AUTHOR = {Henry Hectic},
TITLE = {How Horticulturalists Howl},
PUBLISHER = {Honorary Books: Henage},
YEAR = {2000}
}
\end{filecontents}
\begin{filecontents}{\jobname-secondary.bib}
@BOOK{flutter,
AUTHOR = {Frederick Flutter},
TITLE = {Fraternising with Flowers},
PUBLISHER = {Frippery Pamphlets: Folkestone},
YEAR = {1995}
}
\end{filecontents}
\addbibresource{\jobname-primary.bib}
\addbibresource{\jobname-secondary.bib}
\begin{document}
Some citations: \cite{hectic}, \cite{flutter}.
\printbibliography[title=Primary Sources, keyword=primary]
\printbibliography[title=Secondary Sources, keyword=secondary]
\end{document}
如果你坚持类别,这可以作为一种迂回的方式,最终产生如下的类别。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{csquotes}
\usepackage[backend=biber,style=authoryear]{biblatex}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\perdatasource{\jobname-primary.bib}
\step[fieldset=keywords, fieldvalue={, primary}, append]
}
\map{
\perdatasource{\jobname-secondary.bib}
\step[fieldset=keywords, fieldvalue={, secondary}, append]
}
}
}
\DeclareBibliographyCategory{primary}
\DeclareBibliographyCategory{secondary}
\AtDataInput{%
\ifkeyword{primary}
{\addtocategory{primary}{\thefield{entrykey}}}
{}%
\ifkeyword{secondary}
{\addtocategory{secondary}{\thefield{entrykey}}}
{}%
}
\usepackage{filecontents}
\begin{filecontents}{\jobname-primary.bib}
@BOOK{hectic,
AUTHOR = {Henry Hectic},
TITLE = {How Horticulturalists Howl},
PUBLISHER = {Honorary Books: Henage},
YEAR = {2000}
}
\end{filecontents}
\begin{filecontents}{\jobname-secondary.bib}
@BOOK{flutter,
AUTHOR = {Frederick Flutter},
TITLE = {Fraternising with Flowers},
PUBLISHER = {Frippery Pamphlets: Folkestone},
YEAR = {1995}
}
\end{filecontents}
\addbibresource{\jobname-primary.bib}
\addbibresource{\jobname-secondary.bib}
\begin{document}
Some citations: \cite{hectic}, \cite{flutter}.
\printbibliography[title=Primary Sources, category=primary]
\printbibliography[title=Secondary Sources, category=secondary]
\end{document}
但我怀疑这是否会带来很大的优势。