2

Working a lot with @set containters recently I stumbled across this question: why do entrytypes like @mvbook not accept entryset = {...} like @set? For me that would make sense - one bibliogrphy entry working as a container with one volume after another like @set, something like the examples in additional fields for biblatex/biber “set” but with the option to provide extended data...

5

Answering the why conclusively is probably not possible without asking Philipp Lehman, but here are some thoughts.

For the standard styles @mvbook/@mvcollection is essentially the same as @book/@collection. The idea behind @mvbook/@mvcollection would be that it can be used as an 'umbrella entry' for multi-volume works if it makes sense to mention the entire work in the bibliography and not each constituent separately. If one refers to multi-volume reference works like the Encyclopedia Britannica regularly it might be useful to just cite the entire work once and not have to add each volume to the bibliography separately. Once can then use the \volcite command to cite a specific volume of the @mvbook/@mvcollection. Note that usually the data of the @mv... entry itself does not refer to its constituent 'child' volumes. These entry types were introduced in biblatex v1.2 together with an enhanced data inheritance scheme.

@set entries are a concept of some numeric citation styles (I believe mainly from chemistry and physics) that allows to combine several references into one parent reference, since it is assumed that those references are either always cited together or are related in such a way that it makes sense to keep them together in not only the citation, but also a bibliography entry. The @set concept does not assume additional relations between the data of the set entries and has no way to deal with special relationship between child entry data (for example with cases where all entries have the same set of authors). biblatex just incorporated functionalities of the mcite package here. The specific behaviour of @set and its entryset field is hard-coded in Biber and can not be changed with datamodel macros from biblatex.

At the moment types other than @set are not set up to consume an entryset field and work analogous to @set – I assume mainly because no one asked for that to happen until now. The entire framework is not set up to deal with entryset for arbitrary entry types: Presumably those children could not be just processed with the full bibliography driver for each entry, instead a very intricate handling of certain parent-child relations would have to be implemented. There is something that almost does this, but not quite.

In version 2.0 biblatex added the related functionality that can be used to describe certain types of relations between bibliography entries. Usually these relations are implemented in such a way that one 'parent' entry has related entries, that are then shown together with the parent entry. Usually related entries do not appear in the bibliography in their own right, they can't be cited (if they can be cited, they appear in the bibliography separately from their parent). With very little work related does almost everything you want, except for the set citations. Since the related children can't be cited themselves, you have to use \volcite.

Your additional fields for biblatex/biber "set" from could then look like

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[babel,german=quotes]{csquotes}
\usepackage[doi=false,backend=biber,subentry,sorting=nyt,style=numeric-comp]{biblatex}


\renewbibmacro*{related:multivolume}[1]{%
  \entrydata*{#1}{%
    \printtext{%
      \printfield{volume}%
      \printfield{part}}%
    \setunit*{\addcolon\space}%
    \usebibmacro{title}%
    \ifboolexpr{
      test {\ifnamesequal{author}{savedauthor}}
      or
      test {\ifnameundef{author}}
    }
      {}
      {\usebibmacro{bytypestrg}{author}{author}%
       \setunit{\addspace}%
       \printnames[byauthor]{author}
       \newunit\newblock}%
    \ifboolexpr{
      test {\ifnamesequal{editor}{savededitor}}
      or
      test {\ifnameundef{editor}}
    }
      {}
      {\usebibmacro{byeditor+others}%
       \newunit\newblock}%
    \ifboolexpr{
      test {\iflistsequal{location}{savedlocation}}
      or
      test {\iflistundef{location}}
    }
      {}
      {\printlist{location}}%<- typo
    \ifboolexpr{
      test {\iflistsequal{publisher}{savedpublisher}}
      or
      test {\iflistundef{publisher}}
    }
      {\setunit*{\addcomma\space}}
      {\setunit*{\addcolon\space}%
       \printlist{publisher}%
       \setunit*{\addcomma\space}}%
  \printdate%
  \newunit\newblock
  \ifboolexpr{
    test {\iffieldsequal{isbn}{savedisbn}}
    or
    not togl {bbx:isbn}
  }
    {}
    {\printfield{isbn}}}}


\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@mvbook{A,
  author      = {René Goscinny and Albert Uderzo},
  sorttitle   = {Asterix und Obelix 00},
  sortyear    = {1959},
  maintitle   = {Asterix und Obelix},
  location    = {Paris},
  related     = {A:V1,A:V2,A:V3,A:V4,A:V5},
  relatedtype = {multivolume},
}
@Book{A:V1,
  crossref    = {A},
  volume      = {1},
  title       = {Asterix der Gallier},
  sorttitle   = {Asterix und Obelix 01},
  year        = {1959},
  publisher   = {Dargaud},
  options     = {dataonly},
}
@Book{A:V2,
  crossref    = {A},
  title       = {Asterix und Kleopatra},
  volume      = {2},
  sorttitle   = {Asterix und Obelix 02},
  year        = {1968},
  publisher   = {Dargaud},
  options     = {dataonly},
}
@Book{A:V3,
  crossref    = {A},
  title       = {Asterix als Gladiator},
  volume      = {3},
  sorttitle   = {Asterix und Obelix 03},
  year        = {1969},
  publisher   = {Dargaud},
  options     = {dataonly},
}
@Book{A:V4,
  crossref    = {A},
  title       = {Der Kampf der Häuptlinge},
  volume      = {4},
  msorttitle  = {Asterix und Obelix 04},
  year        = {1969},
  publisher   = {Dargaud},
  options     = {dataonly},
}
@Book{A:V5,
  crossref    = {A},
  title       = {Die goldene Sichel},
  volume      = {5},
  sorttitle   = {Asterix und Obelix 05},
  year        = {1970},
  publisher   = {Ehapa-Verlag},
  options     = {dataonly},
}
@Book{A:VX,
  crossref    = {A},
  title       = {Tour de France},
  volume      = {6},
  sorttitle   = {Asterix und Obelix 06},
  year        = {1970},
  publisher   = {Ehapa-Verlag},
  location    = {Berlin},
}
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}
\volcite{1}{A}

\cite{A,A:VX}
\printbibliography
\end{document}

Citations only show as "1", "2" or "1, vol. 1". The bibliography looks almost as desired.

| improve this answer | |
  • +1 for Astérix et Obélix – DG' Dec 2 '18 at 14:28
  • @DG' Not my idea, unfortunately. All credits for that go to the OP's MWE from tex.stackexchange.com/q/459759/35864 (edited the answer to clarify). – moewe Dec 2 '18 at 14:33
  • I see. So it's just a good answer... – DG' Dec 2 '18 at 14:37
  • @DG' Sorry to disappoint you ;-) – moewe Dec 2 '18 at 14:39
  • I will, eventually, get over it. Or, at least, hope, to do so ;) – DG' Dec 2 '18 at 14:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.