
在過去的幾天裡,我一直在努力嘗試配置 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
如果您對「標準」格式(「與…合作[oration]」)感到滿意,那麼這將是您所需要的。因為您需要不同的格式“與協作者”,所以會出現一些額外的複雜性。這裡的問題是,在「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
orin collab with
。 collaborators
您也可以使用轉換為collaborators
或 的按鍵collab.
。
但請注意,這似乎與我的電腦上的文件所描述的不太一樣,關鍵字翻譯並非適用於每種語言。
此外,這些鍵後面跟著語言檔案中的一堆% FIXME: unsure
,所以也許它仍然無法正常工作。
當你給 biblatex 一個名字清單時,你應該用and
關鍵字分隔每個名字,因為逗號被識別為名字/姓氏分隔符號。因此,biblatex 確實將您的條目解釋為David Spurett
和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},
}