2

My documents are often referring to articles that span several issues of the same journal, as in the following example. In building the file, biber complains that this would not be a correct date format and accordingly, the date is omitted from the reference output.

This is kind of an expected behaviour since the bibtex date format has to be YYYY-MM-DD, as I understand it.

But: is there a way to include several dates for an article?

Here is the example:

@ARTICLE{Lazarus1856,
  author = {Lazarus},
  title = {Hebräische Poesie},
  journal = {Literaturblatt des Deutschen Kunstblatts},
  volume = {3},
  year = {1856},
  pages = {6-8, 11-12},
  number = {2,3},
  date = {1856-01-24,1856-02-07},
  timestamp = {2011.12.12}
}

I'm using JabRef, TexLive, Kile, XeLaTex, Biblatex-Biber.

7
  • There's an eventdate field. I've never used though, and the documentation for biblatex doesn't say much about it. Mar 11 '15 at 13:20
  • Welcome to TeX.SX! I would be inclined to make an EntrySet out of the different parts. Mar 11 '15 at 13:25
  • @Gonzalo Medina: If I understand it correctly, you can have date spans, but not several separated dates - notwithstanding if it's ´date´, ´eventdate´ or ´origdate´.
    – shevek
    Mar 11 '15 at 13:26
  • You can have date spans, but not two dates in the date fields. The (maybe in some cases too simplifying) idea being that a particular work will have been published at one exact date (spans then are for multi-volumes, or for conference dates etc.). In your case, however I would go for two different .bib entries, both works are separated by the fact that they appeared in different numbers of a journal (not even on consecutive pages), maybe combined into one @set.
    – moewe
    Mar 11 '15 at 15:41
6

There is no way to add multiple dates to any of biblatex's standard date fields. date fields must be populated in ISO 8601/EDTF format and Biber will ignore malformed fields. That means you can add a date span (interval), but that is not what we want here.

Normally, a work is published on one specific date and there is no need for multiple dates. One of the few cases where this is actually a problem is in cases of multiple instalments of an article or multi-volume books. biblatex can deal with multi-volume books quite well out of the box, so we will focus on adding a similar support for series articles.

We will have a look at how biblatex handles multi-volume books first. In biblatex-examples.bib you will find

@book{knuth:ct:related,
  author       = {Knuth, Donald E.},
  title        = {Computers \& Typesetting},
  date         = {1984/1986},
  volumes      = 5,
  publisher    = {Addison-Wesley},
  location     = {Reading, Mass.},
  sortyear     = {1984-0},
  related      = {knuth:ct:a,knuth:ct:b,knuth:ct:c,knuth:ct:d,knuth:ct:e},
  relatedtype  = {multivolume},
}

And then separate entries for all the volumes knuth:ct:a etc.

Some time ago there was a feature request about this on the biblatex bugtracker. We will follow the idea there. Analogously to the multivolume approach above we create a relatedtype serialarticle. For related serialarticles only volume, number, (eid, issue), date and the pages are printed (of course this could be extended to print additional fields, such as DOIs and URLs).

\DeclareFieldFormat{related:serialarticle}{#1}
\renewcommand*{\relateddelim}{\adddot\par\nobreak}
\newcommand*{\relateddelimserialarticle}{\addcomma\space}

\newbibmacro*{related:serialarticle}[1]{%
  \entrydata{#1}{%
  \usebibmacro{volume+number+eid}%
  \setunit{\addspace}%
  \usebibmacro{issue+date}%
  \setunit{\addcolon\space}%
  \iffieldundef{pages}
    {}
    {\setunit{\bibpagespunct}%
     \printfield{pages}}}}

Your example then would look like this

@article{Lazarus1856,
  author      = {Lazarus},
  title       = {Hebräische Poesie},
  journal     = {Literaturblatt des Deutschen Kunstblatts},
  volume      = {3},
  date        = {1856},
  related     = {Lazarus1856-1,Lazarus1856-2},
  relatedtype = {serialarticle},
}
@article{Lazarus1856-1,
  crossref  = {Lazarus1856},
  pages     = {6-8},
  number    = {2},
  date      = {1856-01-24},
  options   = {dataonly},
}
@article{Lazarus1856-2,
  crossref  = {Lazarus1856},
  pages     = {11-12},
  number    = {3},
  date      = {1856-02-07},
  options   = {dataonly},
}

It consist of a "main" entry that contains the invariants (author, title, also volume, should also have a date/year) and two dataonly entries for the actual parts that contains the number, date and pages (we also crossref it back to Lazarus1856 such that the two entries could also stand on their own). The main entry relates back to its parts just like a multi-volume book does

  related     = {Lazarus1856-1,Lazarus1856-2},
  relatedtype = {serialarticle},

MWE

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[style=authortitle,backend=biber]{biblatex}

\DeclareFieldFormat{related:serialarticle}{#1}
\renewcommand*{\relateddelim}{\adddot\par\nobreak}
\newcommand*{\relateddelimserialarticle}{\addcomma\space}

\newbibmacro*{related:serialarticle}[1]{%
  \entrydata{#1}{%
  \usebibmacro{volume+number+eid}%
  \setunit{\addspace}%
  \usebibmacro{issue+date}%
  \setunit{\addcolon\space}%
  \iffieldundef{pages}
    {}
    {\setunit{\bibpagespunct}%
     \printfield{pages}}}}

\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@article{Lazarus1856,
  author      = {Lazarus},
  title       = {Hebräische Poesie},
  journal     = {Literaturblatt des Deutschen Kunstblatts},
  volume      = {3},
  date        = {1856},
  related     = {Lazarus1856-1,Lazarus1856-2},
  relatedtype = {serialarticle},
}
@article{Lazarus1856-1,
  crossref  = {Lazarus1856},
  pages     = {6-8},
  number    = {2},
  date      = {1856-01-24},
  options   = {dataonly},
}
@article{Lazarus1856-2,
  crossref  = {Lazarus1856},
  pages     = {11-12},
  number    = {3},
  date      = {1856-02-07},
  options   = {dataonly},
}
\end{filecontents*}

\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}

\begin{document}
  \nocite{Lazarus1856,knuth:ct:related}
  \printbibliography
\end{document}

Lazarus. “Hebräische Poesie”. In: Literaturblatt des Deutschen Kunstblatts 3 (1856). 3.2 (Jan. 24, 1856), pp. 6–8, 3.3 (Feb. 7, 1856), pp. 11–12.

3
  • This awesome answer resolves my question. One small additional question: Where would I put a nobreak or the like, in order to have the serial entries on the same line as the main entry, just separated by semicolons or commata?
    – shevek
    Mar 13 '15 at 11:34
  • @shevek This is done with \relateddelim, I have added a solution to my answer that adds a comma.
    – moewe
    Mar 13 '15 at 11:47
  • Great, that is exactly the solution for my problem. Thank you, moewe, for your great help, and sorry, I have to express my appreciation this way because I do not have enough repution yet to vote your answer up.
    – shevek
    Mar 13 '15 at 11:53
0

This is fiendishly clever. But isn't it also a bit insane?

If I'm cataloguing a two-volume book, where each volume was published in a different year, then it should be possible to say "date = {1996, 1997}". It's that simple. It's common sense. Rather than the verbose solution given above, biber/biblatex should be altered slightly to accomodate the real-world situation.

I guess the workaround is to use the year field.

4
  • Actually, a multi-volume book is handled out of the box by biblatex, as is shown with the Knuth book case in moewe's answer. It is enough to use the existing related field and relatedtype = {multivolume}.
    – gusbrs
    Jan 3 '18 at 9:35
  • It is possible to say date = {1996/1997} for date ranges (following ISO 8601/EDTF standard). The date field needs to be a valid date range, it can not be arbitrary input as it needs to be parsed.
    – moewe
    Jan 4 '18 at 20:22
  • sure. But that gives "1993-1997" instead of "1993, 1997". Two volumes are not published across several years, but at specific dates. A better example would be three or more volumes.
    – Dominik
    Jan 5 '18 at 21:32
  • Thank you, @gusbrs, this does work. But the output is like the Knuth volumes above, with a new block for each volume. In Humanities, one typically wants bibliography entries like this: Ram, Labhu and Bala Sahai Shastri (1932, 1941). Catalogue of Sanskrit Manuscripts in the Panjab University Library. 2 vols. Lahore: Labhu Ram, Librarian for the University of the Panjab.
    – Dominik
    Sep 6 '18 at 19:28
0

Treating the years as string literals could work, although the effect when there are many of them is not elegant. Such a construct could be used to list all the editions of a work, for example.

===

It is possible to get Biblatex to print a sequence of "years" in a citation

multi years

but it means not using date fields at all and treating the years as a list of one-word literals.

In Biblatex, date fields, like date, are a datetime, or a datetime span, and are automatically parsed into day, month, year (and hour, minute, second) components (and endday, endmonth, etc).

Name lists, like author and editor, are lists of names separated by " and ", and are parsed into name-parts (given name, family name, etc). A one-word name, like "Aristotle", is treated as a family name.

So if we have an entry like this

@book{twee,Author ={Foo Barnum Tweedledee and Bar Bailey Tweedledum},date ={1873},title={A Series of Peripatetic Encounters with Interesting People},location={London and New York},}

the family names are printed in the citation (using an author-title style like ext-authortitle):

family name

If we have a multi-author work like this

@book{ancgreek,Title ={The IP of Classical Greece\textsuperscript{ver1}},date={-0500/-0300},author={Aristotle and Plato and  Socrates and Archimedes and Euclid and Pericles and Aristophanes and Pindar and Homer},}

et al (or and others) truncates the author list when there are more than the default of 3

Aristotle and friends

We can adjust the et al threshold with the maxnames and related options (here in the entry itself),

@book{ancgreek2,Title ={The IP of Classical Greece\textsuperscript{ver2}},date={-0499/-0299},author={Aristotle and Plato and  Socrates and Archimedes and Euclid and Pericles and Aristophanes and Pindar and Homer},options = {maxnames=50},}

to get the fuller list of (comma-separated) names.

Aristotle and everyone else

A third Biblatex datatype is a literal list, which is a list of names (such as publishers, or locations) which are separated by " and " and are not split into name parts and stored in name part fields.

Back to our years:

We'll use a literal list to store our string of years. Let's call it datestext.

We need to add the field to the datamodel, with

\DeclareDatamodelFields[type=list, datatype=literal]{
  datestext,
}

which has to live in a .dbx file. Let's call the file dmf_dt.dbx and tell Biblatex about it with the datamodel option:

datamodel=dmf_dt,

Now we need a new bibmacro that will print the list and enclose it in parentheses.

But: \mkbibparens{\printlist{datestext}} lives under the spell of the et al threshold

years et al

and not even a maxnames counterspell will remove it. (Publisher and location suffer the same et al fate.)

Fortunately, \printlist can do loops, from 1 to the end of the list: \printlist[][1-\value{listtotal}]{datestext}.

Lastly, we need a \DeclareCiteCommand to define a new cite command (call it citedatestext) that will invoke the bibmacro. For convenience, we'll also print the title field at the same time (with \printfield{title}, rather than a usebibmacro{title} which introduces space and punctuation).

looping through the Chronicles

Of course, the years only look like dates. They are not "real" dates where Biblatex can apply its powerful date and era calculations. Any sequence of strings can go into the literal list.

arbitrary strings

Note: just the citation command has been defined in this thought experiment; the references print "as normal" in the bibliography. A new or modified bibliography driver would be needed to handle the new field.

DBX:

\DeclareDatamodelFields[type=list, datatype=literal]{
  datestext,
}

MWE:

% arara: xelatex
% arara: biber
% arara: xelatex 
\RequirePackage{filecontents}


\begin{filecontents*}{\jobname.bib}

@book{lewis,Author ={C S Lewis},date ={1898/1963},}


@book{twee,Author ={Foo Barnum Tweedledee and Bar Bailey Tweedledum},date ={1873},title={A Series of Peripatetic Encounters with Interesting People},location={London and New York},}

@book{twee2,Author ={Foo Barnum Tweedledee and Bar Bailey Tweedledum and Alice Goldilocks},date ={1876},title={Further Peripatetic Encounters with Interesting People},location={London and New York and Paris and Rome},}

%@book{chroniclesofnarnia,Title ={The Chronicles of Narnia},crossref ={lewis},sortkey ={Chronicles of Narnia},keywords ={series, school},}
%
%@book{chroniclesofnarnia2,Title ={The Chronicles of Narnia2},date={1950/1956},sortkey ={Chronicles of Narnia},keywords ={series, school},}

@book{ancgreek,Title ={The IP of Classical Greece\textsuperscript{ver1}},date={-0500/-0300},author={Aristotle and Plato and  Socrates and Archimedes and Euclid and Pericles and Aristophanes and Pindar and Homer},}

@book{ancgreek2,Title ={The IP of Classical Greece\textsuperscript{ver2}},date={-0499/-0299},author={Aristotle and Plato and  Socrates and Archimedes and Euclid and Pericles and Aristophanes and Pindar and Homer},options = {maxnames=50},}

@book{ancgreek3,Title ={IP of Classical Greece -- the Reflowering},subtitle={The Renaissance},date={1400/1500},author={Aristotle and Plato and  Socrates and Archimedes and Euclid and Pericles and Aristophanes and Pindar and Homer},options = {maxnames=50},}

@book{chroniclesofnarnia3a,Title ={The Chronicles of Narnia\textsuperscript{ver3a}},date={1950/1956},sortkey ={Chronicles of Narnia},crossref ={lewis},keywords ={series, school},
datestext={1950 and 1951 and 1952 and 1953 and 1954 and 1955 and 1956},
%options = {maxnames=999},
}

@book{chroniclesofnarnia3a1,Title ={The Chronicles of Narnia},date={1950/1956},sortkey ={Chronicles of Narnia},crossref ={lewis},keywords ={series, school},
datestext={1950 and 1951 and 1952 and 1953 and 1954 and 1955 and 1956},
options = {maxnames=999},
}


@book{chroniclesofnarnia3b,Title ={The Chronicles of Narnia\textsuperscript{ver3b}},date={1950/1956},sortkey ={Chronicles of Narnia},crossref ={lewis},keywords ={series, school},
datestext={1950 and 1951 and 1952 and 1953 and 1954 and 1955 and 1956},
options = {maxnames=999},
}

@book{chroniclesofnarnia3c,Title ={The Chronicles of Narnia\textsuperscript{ver3c}},date={1950/1956},sortkey ={Chronicles of Narnia},crossref ={lewis},keywords ={series, school},
datestext={1950 and 1951 and 1952 and 1953 and 1954 and 1955 and 1956},
%options = {maxnames=999},
}
@book{chroniclesofnarnia4,Title ={The Chronicles of Narnia\textsuperscript{ver4}},date={1950/1956},sortkey ={Chronicles of Narnia},crossref ={lewis},keywords ={series, school},
datestext={book 1 and {Susan and Peter} and something about a chair and string and string and string and book 7},options = {maxnames=999},
}


@book{bsm27,Title ={The Lion, the Witch and the Wardrobe },Date ={1950},Series ={Chronicles of Narnia},Number ={1},xref ={chroniclesofnarnia},sortkey ={Chronicles of Narnia01},shorthand ={CSL--N1},keywords ={series},}
@book{bsm28,Title ={Prince Caspian },Date ={1951},Series ={Chronicles of Narnia},Number ={2},xref ={chroniclesofnarnia},sortkey ={Chronicles of Narnia02},shorthand ={CSL--N2},keywords ={series},}
@book{bsm29,Title ={The Voyage of the Dawn Treader },Date ={1952},Series ={Chronicles of Narnia},Number ={3},xref ={chroniclesofnarnia},sortkey ={Chronicles of Narnia03},shorthand ={CSL--N3},keywords ={series},}
@book{bsm30,Title ={The Silver Chair },Date ={1953},Series ={Chronicles of Narnia},Number ={4},xref ={chroniclesofnarnia},sortkey ={Chronicles of Narnia04},shorthand ={CSL--N4},keywords ={series},}
@book{bsm31,Title ={The Horse and His Boy },Date ={1954},Series ={Chronicles of Narnia},Number ={5},xref ={chroniclesofnarnia},sortkey ={Chronicles of Narnia05},shorthand ={CSL--N5},keywords ={series},}
@book{bsm32,Title ={The Magician's Nephew },Date ={1955},Series ={Chronicles of Narnia},Number ={6},xref ={chroniclesofnarnia},sortkey ={Chronicles of Narnia06},shorthand ={CSL--N6},keywords ={series},}
@book{bsm33,Title ={The Last Battle },Date ={1956},Series ={Chronicles of Narnia},Number ={7},xref ={chroniclesofnarnia},sortkey ={Chronicles of Narnia07},shorthand ={CSL--N7},keywords ={series},}

\end{filecontents*}


\documentclass[12pt]{article}
\usepackage{fontspec}
\setmainfont{Noto Serif}
\usepackage[british]{babel}
\usepackage{csquotes}
\newcommand\abibname{ext-authortitle}
\newcommand\abibstyle{style=\abibname}
\usepackage[
    datamodel=dmf_dt,
    \abibstyle , 
%maxnames=99,
%minnames=99,
%maxcitenames=99,
%mincitenames=99,   
dateera=christian,
        ]{biblatex}
\newcommand\mynote{biblatex option used: \texttt{\abibstyle}.}
\defbibnote{abibnote}{\mynote}


\usepackage{xcolor}
\pagecolor{red!3}


\addbibresource{\jobname.bib}

%\ExecuteBibliographyOptions[book]{maxnames=99}

\newbibmacro*{possum}{%
\mkbibparens{\printlist[][1-\value{listtotal}]{datestext}}}    


\newbibmacro*{possum2}{%
\mkbibparens{\printlist{datestext}}}    




\DeclareCiteCommand{citedatestext}[]{}{%
\printfield{title}  \usebibmacro{possum}}{}{}

\DeclareCiteCommand{citedatestextb}[]{}{%
\printfield{title}  \usebibmacro{possum2}}{}{}

%  \DeclareCiteCommand{\longcite}
%  {\usebibmacro{prenote}}%
%  {\usebibmacro{citeindex}%
%   \defcounter{maxnames}{99}%
%   \usebibmacro{cite}}
%  {\multicitedelim}
%  {\usebibmacro{postnote}}

%  \newtoggle{bbx:allnames}
%\togglefalse{bbx:allnames}
%\AtEveryBibitem{\iftoggle{bbx:allnames}{\defcounter{maxnames}{999}}{}}


\begin{document}

\citedatestext{chroniclesofnarnia3a1}
\vskip1em

\cite{twee}
\vskip1em

%\cite{twee2}

 \cite{ancgreek}
\vskip1em

 \cite{ancgreek2}
\vskip1em 

% \cite{ancgreek3}

 \citedatestextb{chroniclesofnarnia3a} -- without maxnames=, with plain \textbackslash \texttt{printlist}
\vskip1em

\citedatestextb{chroniclesofnarnia3b} -- with maxnames=,with plain \textbackslash \texttt{printlist}
\vskip1em

\citedatestext{chroniclesofnarnia3c} -- with looping \textbackslash \texttt{printlist}
\vskip1em

\citedatestext{chroniclesofnarnia4} -- arbitrary strings





\printbibliography[prenote=abibnote]


\begin{center}
\textemdash
\textemdash
\end{center}
\end{document}
1
  • 1
    Since datestext is a list and not a name list, the counterspell that would help here is maxitems instead of maxnames. Of course one could turn datestext directly into a normal literal field instead of a list and would not have to worry about that at all. As you mention one would have to modify the bibliography style to honour datestext and one would also have to make sure that sorting works as expected. This is quite tricky since Biber usually expects the year of a date to be an integer and it can't sort integers and strings at the same time.
    – moewe
    Apr 4 '19 at 11:45

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.