Biblatex: Часть перед томом

Biblatex: Часть перед томом

Мне нужно процитировать тома полных сочинений классических философов, которые часто делятся на несколько разделов (или частей), каждый из которых включает несколько томов. Вот правильно отформатированный пример:

Вольф, Кристиан фон (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: germando 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}

введите описание изображения здесь

Связанный контент