# Biblatex: Part before volume

I need to cite volumes of classic philosophers' complete works, which often come divided in several sections (or parts) each including several volumes. Here is a correctly formatted example:

Wolff, Christian von (1962). Philosophia prima sive Ontologia. Ed. by Jean Ecole. Gesammelte Werke. Abteilung 2: Lateinische Schriften, Bd. 3. Hildesheim: Olms.

I cannot figure out how to instruct biblatex to produce this output. I tried using the "part" and "volume" fields as in the ref below:

@Book{Wolff1962,
Title                    = {Philosophia prima sive Ontologia},
Author                   = {Wolff, Christian von},
Editor                   = {Jean Ecole},
Publisher                = {Olms},
Year                     = {1962},
Part                     = {Abt. 2: Lateinische Schriften},
Maintitle                = {Gesammelte Werke},
Volume                   = {3},
Language                 = {german}
}


Unfortunately, biblatex seems to think that part is subordinated to volume, and produces a very different output. Moreover, the maintitle is printed before the book title. I would also like to have localized (German) abbreviation for Part and Volume for entries like this one (the document language is English), and I though the language tag would take care of it, but apparently not. Here is the output:

Wolff, Christian von (1962). Gesammelte Werke. Vol. 3.2: Lateinische Schriften: Philosophia prima sive Ontologia. Ed. by Jean Ecole. Hildesheim: Olms.

Suggestions appreciated.

Edit: MWE with Latex and (included) bib 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},

Language                 = {German},
Volume                   = {3},

Maintitle                = {Gesammelte Werke},
Owner                    = {stefano},
Part                     = {2: Lateinische Schriften}
}
\end{filecontents}
\begin{document}
A citation of a multi-part work: \cite{Wolff1962}
\printbibliography
\end{document}


Final edit: modified MWE incorporating and slightly modifying Carols's solution:

\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},
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},
Booktitle                = {The Search for a Theory of Cognition: Early Mechanisms and New Ideas}
}
\end{filecontents}
\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
\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}%
\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}

• Please, post a MWE. What style are you using? I think is authoryear. – Carlos Lanziano Sep 25 '14 at 16:47
• @CarlosLanziano: I added a MWE.The style is indeed authoryear (or authoryear-ibid, to be precise) – stefano Sep 25 '14 at 17:31

I think is better that you use inbook. For use other language in a entry in the bibliography is necessary add to entry the langid and in the bibltex options put autolang=other and language=autobib.

I modified the inbook for get the order that you need. But you can modify the book driver if you think that is better.

\documentclass{article}
\begin{filecontents}{wolff.bib}
@inBook{Wolff1962,
Title                    = {Philosophia prima sive Ontologia},
Author                   = {Wolff, Christian von},
Editor                   = {Jean Ecole},
Publisher                = {Olms},
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}

\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
\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}%
\printfield{volume}}}%
\usebibmacro{booktitle}%
\newunit}

\begin{document}
\cite{Wolff1962}

\printbibliography

\end{document}


EDIT

It's possible that the final edit give a problem, because in my above answer was redefined the maintitle+booktitle macro (The answer has a mistake is better use \renewbibmacro and not \newbibmacro because the macro is already defined) and the maintitle+booktitle macro is used with incollection and inprocedings too. Then the changes affect the others drivers (it means the order in the volume and part fields).

You can use the inbook with the german and other languages at the same time. Only is necessary add a logical that if the langid is german: do some macro, else: do another macro. Below a MWE with two inbook entry. A in german the other in english.

\documentclass{article}
\begin{filecontents}{wolff.bib}
@inBook{Wolff1962,
Title                    = {Philosophia prima sive Ontologia},
Author                   = {Wolff, Christian von},
Editor                   = {Jean Ecole},
Publisher                = {Olms},
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},
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}

\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}%
\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
\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}


• Thanks for the info on proper language settings. Works as a charm. As for the main issue, though, I cannot use your solution as is: if I tinker with the inbook driver as you suggested, biblatex will screw up all the other true inbook refs (of which I have many). However, it works like a charm if I just create a new bibtex type (say: BookInGesamm) and a related driver. Thanks! – stefano Sep 25 '14 at 20:33
• For an alternative tot create a new bibtex type have a look at this solution tex.stackexchange.com/a/195910/16895. You can use a guard/conditional to limit modification to a single entry. I – Guido Sep 25 '14 at 20:46
• @Guido: Thanks for the suggestion, I didn't know biblatex could be that flexible. In my case, I think it's better to create a new entry type, as I have several entries with the same problem I mentioned (it can't be helped, in my line of work). But I can see the usefulness of your approach and I'm sure it'll be handy in the future. – stefano Sep 25 '14 at 21:03
• Another alternative is to add a field that signal that the entry is somehow special, and then to use a conditional checking that that special field is not empty. – Guido Sep 26 '14 at 7:52