过去几天,我一直在绞尽脑汁尝试配置 biblatex 来处理参考书目条目中的单个和多个合作者。无奈的叹息。
鉴于此示例:
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{LadymanRoss07,
author = {Ladyman, James and Ross, Don},
collaborator = {David Spurrett and Collier, John},
title = {Every Thing Must Go: Metaphysics Naturalized},
publisher = {Oxford University Press},
year = {2007}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\nocite{*}
\begin{document}
\printbibliography
\end{document}
我怎样才能优雅地实现:
Ladyman, James and Don Ross (2007). Every Thing Must Go: Metaphysics Naturalized.
With collaborators: David Spurrett and John Collier. Oxford University Press.
在输出中,With collaborator:
如果只涉及一个合作者?
仅供参考,我目前最不满意的“修复”涉及更改collaborator =
为annotator =
我的 .bib 文件中出现的任何位置,并添加
\DefineBibliographyStrings{english}{
withannotator = With collaborators:\addspace ,
}
到我的 biblatex 配置代码。(这显然是一个从很多方面来看都很糟糕的解决方案!)
答案1
我认为,让您在数据库中拥有“合作者”并且仍然使用标准样式而无需摆弄任何驱动程序的最合适的方法是添加源映射(您将需要 Biber 1.0+ 和 biblatex 2.0+)。
这里的“魔法”在于\DeclareSourcemap
部分,其基本工作原理如下:
识别具有合作者字段的条目:如果条目没有这样的字段,则不再进行进一步处理:
\step[fieldsource=collaborator, final=true]
将合作者字段复制到编辑字段:
\step[fieldtarget=editora, origfieldval]
将 editoratype 字段设置为“collaborator”:
\step[fieldset=editoratype, fieldvalue=collaborator
如果您对“标准”格式(“与……合作”)感到满意,那么这就是您所需要的。由于您想要不同的格式,“与合作者合作”,因此会出现一些额外的复杂性。这里的问题在于,在“bytype”字符串中,标准 biblatex 样式不会尝试区分单个和多个名称。此时您有三个选项:
如果您想让事情变得简单,那就随机应变,接受一种可以适用于一个或多个协作者的格式,例如默认格式。这是最简单的,除非您坚持“与协作者”的公式,否则这可能是最好的。如果是这样,您可以删除整个第二个映射步骤、以及字符串
\newbibliographystring
的定义bycollaborators
。如果想要“正确”,请重写内部宏以识别多个名称并适当地打印不同的介绍字符串。这将是相当多的工作,而且可能比实际合理的工作还要多。
在文件本身中区分
.bib
一个或多个合作者,使用“合作者”表示一个,使用“合作者”表示两个。就 biblatex 而言,它处理的是完全不同的“类型”(就它而言,“合作者”也可能是“turnipwranglers”),但通过定义适合bibstring
处理复数形式的类型,问题就解决了。这并不完美,但似乎可以接受,所以我在这里就是这么做的。
鉴于您的输入略有改变,使得“合作者”变为“合作者”(出于上述原因),最终结果如下:
\documentclass{article}
\usepackage{filecontents}
\usepackage[style=authoryear,backend=biber]{biblatex}
\DeclareSourcemap{
\maps[datatype=bibtex,overwrite=false]{
\map{
\step[fieldsource=collaborator, final=true]
\step[fieldset=editora, origfieldval]
\step[fieldset=editoratype, fieldvalue=collaborator]
}
% THIS MAP STEP IS ONLY THERE TO ENABLE US TO USE "COLLABORATORS"
% AS WELL AS "COLLABORATOR", BECAUSE THE QUESTION WANTS TO USE THE
% "WITH COLLABORATORS" INTRODUCTION
\map{
\step[fieldsource=collaborators, final=true]
\step[fieldset=editora, origfieldval]
\step[fieldset=editoratype, fieldvalue=collaborators]
}
}
}
\NewBibliographyString{bycollaborators}% ONLY FOR "WITH COLLABORATORS"
\DefineBibliographyStrings{english}{%
bycollaborator = {with collaborator\addcolon\space},
% AND ONLY FOR "WITH COLLABORATORS"
bycollaborators = {with collaborators\addcolon\space}}
\begin{filecontents}{\jobname.bib}
@book{LadymanRoss07,
author = {Ladyman, James and Ross, Don},
collaborators = {David Spurrett and Collier, John},
title = {Every Thing Must Go: Metaphysics Naturalized},
publisher = {Oxford University Press},
year = {2007}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\nocite{*}
\begin{document}
\printbibliography
\end{document}
答案2
根据 biblatex 的手册,可以通过在编辑器字段中设置列表并使用来实现处理合作者editortype=collaborator
。
对于 biblatex,这在语义上表明您希望它考虑您不是给出编辑器条目而是给出合作者条目,因为他们不想过多地增加新键以使其保持相当标准。
您还可以指定想要引用合作者的方式。
- 默认情况下,该
collaborator
关键字翻译成collaborator
或collab.
为缩写版本。 - 该
bycollaborator
关键字翻译为in collaboration with
或in collab with
。 collaborators
您也可以使用转换为collaborators
或 的键collab.
。
但请注意,这似乎与我的计算机上的文档描述的不太一样,并且关键字翻译并非适用于每种语言。
此外,这些键后面跟着一堆% FIXME: unsure
语言文件中的键,所以它可能仍然不能正常工作。
当您向 biblatex 提供姓名列表时,您应该用and
关键字分隔每个姓名,因为逗号被识别为姓名/姓氏分隔符。因此,biblatex 会将您的输入解释为David Spurett
and John Collier
。
因此你应该有类似这样的内容:
@book{LadymanRoss07,
author = {Ladyman, James and Ross, Don},
editor = {David Spurrett and Collier, John},
editortype = {collaborator},
title = {Every Thing Must Go: Metaphysics Naturalized},
publisher = {Oxford University Press},
year = {2007}
}
我认为这对你有用。在我的测试文档中,通过使用英语,我获得了以下内容:
[1] James Ladyman and Don Ross. Every Thing Must Go: Metaphysics Naturalized. In collab.
with David Spurrett, Collier, and John. Oxford University Press, 2007.
这似乎正是您所期望的。
答案3
这是另一本书中存在相同问题的示例。此解决方案来自 MathSciNet。他们note
在这种情况下使用了该字段。
@BOOK{Buergisser1997,
AUTHOR = {B{\"u}rgisser, Peter and Clausen, Michael and Shokrollahi, M. Amin},
TITLE = {{A}lgebraic {C}omplexity {T}heory},
SERIES = {Grundlehren der Mathematischen Wissenschaften [Fundamental Principles of Mathematical Sciences]},
VOLUME = {315},
NOTE = {With the collaboration of Thomas Lickteig},
PUBLISHER = {Springer-Verlag},
ADDRESS = {Berlin},
YEAR = {1997},
PAGES = {xxiv+618},
ISBN = {3-540-60582-7},
MRCLASS = {68-02 (12Y05 65Y20 68Q05 68Q15 68Q25 68Q40)},
MRNUMBER = {1440179 (99c:68002)},
MRREVIEWER = {Alexander I. Barvinok},
}