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...
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}
-
-
@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
-
-
-