.png)
Последние несколько дней я рвал на себе волосы, пытаясь настроить 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, то он имеет дело с совершенно разными "типами" ("соавторы" могли бы быть "репейниками", если говорить о нем), но определение подходящей формы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
и 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},
}