Мне нужно процитировать тома полных сочинений классических философов, которые часто делятся на несколько разделов (или частей), каждый из которых включает несколько томов. Вот правильно отформатированный пример:
Вольф, Кристиан фон (1962).Философия prima sive Онтология. Под ред. Жана Эколе.Gesammelte Werke. Подразделение 2: Латинские шрифты, Bd. 3. Хильдесхайм: Olms.
Я не могу понять, как заставить biblatex выдавать этот вывод. Я пробовал использовать поля "part" и "volume", как в ссылке ниже:
@Book{Wolff1962,
Title = {Philosophia prima sive Ontologia},
Author = {Wolff, Christian von},
Editor = {Jean Ecole},
Publisher = {Olms},
Address = {Hildesheim},
Year = {1962},
Part = {Abt. 2: Lateinische Schriften},
Maintitle = {Gesammelte Werke},
Volume = {3},
Language = {german}
}
К сожалению, biblatex, похоже, считает, что часть подчинена объему, и выдает совсем другой вывод. Более того, основное название печатается перед названием книги. Я бы также хотел иметь локализованное (немецкое) сокращение для Части и Объема для записей, подобных этой (язык документа английский), и я думал, что тег языка позаботится об этом, но, видимо, нет. Вот вывод:
Вольф, Кристиан фон (1962).Gesammelte Werke. Том. 3.2: Латинские шрифты:Философия prima sive Онтология. Ред. Жана Эколе. Хильдесхайм: Olms.
Предложения приветствуются.
Редактировать: MWE с латексом и (включенным) нагрудником ref:
\documentclass{article}
\usepackage[german,english]{babel}
\usepackage[backend=biber,natbib=true, indexing=cite, citestyle=authoryear-ibid, bibstyle=authoryear-ibid, sorting=nyt, indexing=cite]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@Book{Wolff1962,
Title = {Philosophia prima sive Ontologia},
Author = {Wolff, Christian von},
Editor = {Jean Ecole},
Publisher = {Olms},
Year = {1962},
Address = {Hildesheim},
Language = {German},
Volume = {3},
Maintitle = {Gesammelte Werke},
Owner = {stefano},
Part = {2: Lateinische Schriften}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
A citation of a multi-part work: \cite{Wolff1962}
\printbibliography
\end{document}
Окончательное редактирование: измененный MWE, включающий и слегка изменяющий решение Кэролса:
\documentclass{article}
\usepackage[german,english]{babel}
\usepackage[backend=biber,natbib=true, indexing=cite, citestyle=authoryear-ibid, bibstyle=authoryear-ibid, sorting=nyt, indexing=cite,autolang=other,language=autobib]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BookInGesamm{Wolff1962,
Title = {Philosophia prima sive Ontologia},
Author = {Wolff, Christian von},
Editor = {Jean Ecole},
Publisher = {Olms},
Year = {1962},
Address = {Hildesheim},
langid = {german},
Volume = {3},
Maintitle = {Gesammelte Werke},
Part = {2: Lateinische Schriften}
}
@Inbook{Pogliano2011,
Title = {At the Periphery of the Rising Empire: The Case of Italy (1945-1968)},
Author = {Claudio Pogliano},
Editor = {Stefano Franchi and Francesco Bianchini},
Pages = {119-147},
Publisher = {Rodopi},
Year = {2011},
Address = {Amsterdam},
Booktitle = {The Search for a Theory of Cognition: Early Mechanisms and New Ideas}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\DeclareFieldFormat[BookInGesamm]{title}{{\mkbibemph{#1}}}
\DeclareBibliographyDriver{bookingesamm}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/translator+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit
\usebibmacro{byeditor+others}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{bybookauthor}%
\newunit\newblock
\usebibmacro{maintitle+booktitle}%
\newunit\newblock
%\printlist{language}%
\newunit\newblock
\printfield{edition}%
\newunit
\iffieldundef{maintitle}
{\printfield{volume}%
\printfield{part}}
{}%
\newunit
\printfield{volumes}%
\newunit\newblock
\usebibmacro{series+number}%
\newunit\newblock
\printfield{note}%
\newunit\newblock
\usebibmacro{publisher+location+date}%
\newunit\newblock
\usebibmacro{chapter+pages}%
\newunit\newblock
\iftoggle{bbx:isbn}
{\printfield{isbn}}
{}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\newunit\newblock
\usebibmacro{addendum+pubstate}%
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}%
\newunit\newblock
\iftoggle{bbx:related}
{\usebibmacro{related:init}%
\usebibmacro{related}}
{}%
\usebibmacro{finentry}}
\newbibmacro*{maintitle+booktitle}{%
\iffieldundef{maintitle}
{}
{\usebibmacro{maintitle}%
\newunit\newblock
\iffieldundef{volume}
{}
{\printfield[default]{part}%
\setunit{\addcomma\space}
\printfield{volume}}}%
\usebibmacro{booktitle}%
\newunit}
\begin{document}
A citation of a multi-part work: \cite{Wolff1962} and a citation of a real inbook ref: \cite{Pogliano2011}
\printbibliography
\end{document}
решение1
Я думаю, лучше, чтобы вы использовали inbook
. Для использования другого языка в записи в библиографии необходимо добавить к записи langid
и в параметрах bibltex поставить autolang=other
и language=autobib
.
Я изменил inbook
порядок получения, который вам нужен. Но вы можете изменить драйвер, book
если считаете, что так лучше.
\documentclass{article}
\begin{filecontents}{wolff.bib}
@inBook{Wolff1962,
Title = {Philosophia prima sive Ontologia},
Author = {Wolff, Christian von},
Editor = {Jean Ecole},
Publisher = {Olms},
Address = {Hildesheim},
Year = {1962},
Part = {Abt. 2: Lateinische Schriften},
Maintitle = {Gesammelte Werke},
Volume = {3},
langid = {german}
}
\end{filecontents}
\usepackage[german,english]{babel}
\usepackage[backend=biber,natbib=true, indexing=cite, citestyle=authoryear-ibid, bibstyle=authoryear-ibid, sorting=nyt, indexing=cite,autolang=other,language=autobib]{biblatex}
\addbibresource{wolff.bib}
\DeclareFieldFormat[inbook]{title}{{\mkbibemph{#1}}}
\DeclareBibliographyDriver{inbook}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/translator+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit
\usebibmacro{byeditor+others}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{bybookauthor}%
\newunit\newblock
\usebibmacro{maintitle+booktitle}%
\newunit\newblock
%\printlist{language}%
\newunit\newblock
\printfield{edition}%
\newunit
\iffieldundef{maintitle}
{\printfield{volume}%
\printfield{part}}
{}%
\newunit
\printfield{volumes}%
\newunit\newblock
\usebibmacro{series+number}%
\newunit\newblock
\printfield{note}%
\newunit\newblock
\usebibmacro{publisher+location+date}%
\newunit\newblock
\usebibmacro{chapter+pages}%
\newunit\newblock
\iftoggle{bbx:isbn}
{\printfield{isbn}}
{}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\newunit\newblock
\usebibmacro{addendum+pubstate}%
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}%
\newunit\newblock
\iftoggle{bbx:related}
{\usebibmacro{related:init}%
\usebibmacro{related}}
{}%
\usebibmacro{finentry}}
\newbibmacro*{maintitle+booktitle}{%
\iffieldundef{maintitle}
{}
{\usebibmacro{maintitle}%
\newunit\newblock
\iffieldundef{volume}
{}
{\printfield[default]{part}%
\setunit{\addcomma\space}
\printfield{volume}}}%
\usebibmacro{booktitle}%
\newunit}
\begin{document}
\cite{Wolff1962}
\printbibliography
\end{document}
РЕДАКТИРОВАТЬ
Возможно, что окончательная правка даст проблему, потому что в моем ответе выше был переопределен макрос maintitle+booktitle
(ответ имеет ошибку better use \renewbibmacro
, а не \newbibmacro
потому, что макрос уже определен) и макрос maintitle+booktitle
используется с incollection
и inprocedings
тоже. Затем изменения влияют на другие драйверы (имеется в виду порядок в полях volume
и part
).
Вы можете использовать inbook
с german
и другими языками одновременно. Необходимо только добавить логическое, что если есть langid
: german
do some macro
, иначе: do another macro
. Ниже MWE с двумя inbook
записями. A в german
другой в english
.
\documentclass{article}
\begin{filecontents}{wolff.bib}
@inBook{Wolff1962,
Title = {Philosophia prima sive Ontologia},
Author = {Wolff, Christian von},
Editor = {Jean Ecole},
Publisher = {Olms},
Address = {Hildesheim},
Year = {1962},
Part = {Abt. 2: Lateinische Schriften},
Maintitle = {Gesammelte Werke},
Volume = {3},
langid = {german}
}
@inBook{other1999,
Title = {The title in english},
Author = {Last, Name},
Editor = {Editor Name},
Publisher = {Springer},
Address = {New York},
Year = {1999},
Part = {1},
Maintitle = {The Maintitle},
Volume = {3},
}
\end{filecontents}
\usepackage[german,english]{babel}
\usepackage[backend=biber,natbib=true, indexing=cite, citestyle=authoryear-ibid, bibstyle=authoryear-ibid, sorting=nyt, indexing=cite,autolang=other,language=autobib]{biblatex}
\addbibresource{wolff.bib}
\DeclareFieldFormat[inbook]{title}{%
\iffieldequalstr{langid}{german}{\mkbibemph{#1}}{\mkbibquote{#1}}}
\newbibmacro*{inbookgerman}{%
\usebibmacro{byeditor+others}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{bybookauthor}%
\newunit\newblock
\usebibmacro{maintitle+booktitle/german}%
\newunit\newblock
\printlist{language}%
}
\newbibmacro*{inbookother}{%
\printlist{language}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{in:}%
\usebibmacro{bybookauthor}%
\newunit\newblock
\usebibmacro{maintitle+booktitle}%
\newunit\newblock
\usebibmacro{byeditor+others}%
}
\newbibmacro*{maintitle+booktitle/german}{%
\iffieldundef{maintitle}
{}
{\usebibmacro{maintitle}%
\newunit\newblock
\iffieldundef{volume}
{}
{\printfield[default]{part}%
\setunit{\addcomma\space}
\printfield{volume}}}%
\usebibmacro{booktitle}%
\newunit}
\DeclareBibliographyDriver{inbook}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/translator+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit
\iffieldequalstr{langid}{german}{\usebibmacro{inbookgerman}}{\usebibmacro{inbookother}}
\newunit\newblock
\printfield{edition}%
\newunit
\iffieldundef{maintitle}
{\printfield{volume}%
\printfield{part}}
{}%
\newunit
\printfield{volumes}%
\newunit\newblock
\usebibmacro{series+number}%
\newunit\newblock
\printfield{note}%
\newunit\newblock
\usebibmacro{publisher+location+date}%
\newunit\newblock
\usebibmacro{chapter+pages}%
\newunit\newblock
\iftoggle{bbx:isbn}
{\printfield{isbn}}
{}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\newunit\newblock
\usebibmacro{addendum+pubstate}%
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}%
\newunit\newblock
\iftoggle{bbx:related}
{\usebibmacro{related:init}%
\usebibmacro{related}}
{}%
\usebibmacro{finentry}}
\begin{document}
\cite{Wolff1962}
\cite{other1999}
\printbibliography
\end{document}