Australisches Datumsbereichsformat ohne Babel in Biblatex?

Australisches Datumsbereichsformat ohne Babel in Biblatex?

Ich möchte australische Datumsangaben und Datumsbereiche in meinem biblatexStil ( biblatex-sbl) verwenden, auch wenn Babel oder Polyglossia nicht geladen sind. Der folgende Code schlägt fehl, wenn der Bereich innerhalb eines Monats liegt. Ich möchte „1.–5. Januar 2016“, aber stattdessen bekomme ich „1.–5. Januar 2016“. Kann mir bitte jemand helfen? (FWIW, biblatex-chicagoschlägt in dieser Situation ebenfalls fehl.)

\documentclass{article}
\usepackage[backend=biber,dateabbrev=false]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{a,
  title = {TitleA},
  date = {2016-01-02}
}
@book{b,
  title = {TitleB},
  date = {2016-01-02/2016-02-05}
}
@book{c,
  title = {TitleC},
  date = {2016-01-01/2016-01-05}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\DefineBibliographyExtras{english}{%
  \protected\def\mkbibdatelong#1#2#3{%
    \iffieldundef{#3}
      {}
      {\stripzeros{\thefield{#3}}%
       \iffieldundef{#2}{}{\nobreakspace}}%
    \iffieldundef{#2}
      {}
      {\mkbibmonth{\thefield{#2}}%
       \iffieldundef{#1}{}{\space}}%
    \iffieldbibstring{#1}{\bibstring{\thefield{#1}}}{\stripzeros{\thefield{#1}}}}%
}
\begin{document}
\cite{a}, \cite{b}, \cite{c}
\printbibliography
\end{document}

Antwort1

Ah, verstanden. Ich brauche das hier:

\DefineBibliographyExtras{english}{%
  \restorecommand\mkdaterangecomp
  \restorecommand\mkdaterangecompextra
  \restorecommand\mkdaterangeterse
  \restorecommand\mkdaterangeterseextra
  \protected\def\mkbibdatelong#1#2#3{%
    \iffieldundef{#3}
      {}
      {\stripzeros{\thefield{#3}}%
       \iffieldundef{#2}{}{\nobreakspace}}%
    \iffieldundef{#2}
      {}
      {\mkbibmonth{\thefield{#2}}%
       \iffieldundef{#1}{}{\space}}%
    \iffieldbibstring{#1}{\bibstring{\thefield{#1}}}{\stripzeros{\thefield{#1}}}}%
}

Bearbeiten

Eigentlich reicht das oben Gesagte nicht aus. Um eine richtige Antwort auf diese Frage zu geben, brauchte ich eigentlich Folgendes. Dabei werden auch biblatexdie erweiterten Datums-/Uhrzeitfunktionen berücksichtigt.

\DefineBibliographyExtras{english}{%
  \protected\def\mkdaterangecomp{%
    \mkdaterangetrunc{long}}%
  \protected\def\mkdaterangeterse{%
    \mkdaterangetrunc{short}}%
  \protected\def\mkdaterangecompextra{%
    \mkdaterangetruncextra{long}}%
  \protected\def\mkdaterangeterseextra{%
    \mkdaterangetruncextra{short}}%
  \protected\def\mkbibdatelong#1#2#3{%
    \iffieldundef{#3}
      {}
      {\thefield{#3}%
       \iffieldundef{#2}{}{\nobreakspace}}%
    \iffieldundef{#2}
      {}
      {\mkbibmonth{\thefield{#2}}%
       \iffieldundef{#1}{}{\space}}%
    \iffieldbibstring{#1}
      {\bibstring{\thefield{#1}}}
      {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
}

Antwort2

Es gibt einen einfachen Ansatz (getestet mit xelatex und pdflatex) …

\documentclass{article}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{a,
  title = {TitleA},
  date = {2016-01-02}
}
@book{b,
  title = {TitleB},
  date = {2016-01-02/2016-02-05}
}
@book{c,
  title = {TitleC},
  date = {2016-01-01/2016-01-05}
}
\end{filecontents}

\usepackage[australian]{babel}

% Polyglossia variants don't quite work with biblatex at the moment 
%\usepackage{polyglossia}
%\setdefaultlanguage[variant=british]{english}

\usepackage[%
%
% Basics
%
style=authoryear,
alldates=long,
dateabbrev=false,
%alldates=ymd, % ISO like, but customizable format (Recommended)
% 
% Unecessary to set
%
% [default] autobib=try to get main document 
% language from babel/polyglossia
%language=autobib, 
%autolang=langname, % Don't worry about this.  
% 
% Other (new) settings you might like to play with
%
%  alldatesusetime=true,
%  alltimes=24h,
%  seconds=true,
%  timezones=true,
%  datezeros=true,
%  dateera=secular,
%  datecirca=true,
%  dateuncertain=true,
]{biblatex}

\addbibresource{\jobname.bib}

\begin{document}

Current language: \currentlang\\

\autocite{a}\\
\autocite{b}\\
\autocite{c}\\

\printbibliography
\end{document}

Das ergibt im Abschnitt Bibliographie/Referenzen:

TitelA (2. Januar 2016).
TitelB (2. Januar 2016 – 5. Februar 2016).
TitelC (1. Januar 2016 – 5. Januar 2016).

Zusammenfassend können Sie:

  • australianAls Ihre Babel-Variante festlegen\usepackage[australian]{babel}
  • Verwenden Sie die Option „biblatex“alldates=long
  • Stellen Sie die weiteren Optionen nach Wunsch ein (Sie haben gewählt dateabbrev=false).

Dies ergibt „1. Januar 2016–5. Januar 2016“ statt „1.–5. Januar 2016“. Ich würde jedoch vorschlagen, dass ersteres besser ist, da ein Datumsbereich wie „31. Dezember 2016–5. Januar 2016“ kein komprimiertes und lesbares Äquivalent der von Ihnen angegebenen Art hat.

Dies scheint Ihnen auch das zu geben, was Sie im Hinblick auf Ihre Antwort an @Ross zum Ausdruck gebracht haben möchten.

Die Unterstützung von Polyglossia durch Biblatex ist derzeit ein Problem (insbesondere bei der Einstellung von Polyglossia-Sprachvarianten). Die Lösung besteht derzeit darin, Babel und nicht Polyglossia zu verwenden. Weitere Informationen finden Sie unterhttp://tex.stackexchange.com > Wie können wir Polyglossia-Sprachvarianten mit Biblatex-Bibliografien kompatibel machen?.

Ich würde Ihnen jedoch empfehlen, alldates=ymddass Sie ein ISO-ähnliches Format erhalten (allerdings mit Anpassungsoptionen, die ISO nicht zulässt). Im Internetzeitalter ist es richtig, Ihre Daten global verwendbar zu machen. In diesem Fall wird alldates=ymdder Befehl bei Verwendung \usepackage[australian]{babel}irrelevant und könnte entfernt werden (für Biblatex-Zwecke). Das ergibt:

TitelA (02.01.2016).
TitelB (02.01.2016/05.02.2016).
TitelC (01.01.2016/05.01.2016).

Eine Warnung, dass Biblatex kürzlich eine Reihe von Datums- und Uhrzeitfunktionen eingeführt hat, um EDTF für die Eingabe von Daten zu unterstützen (z. B. 2016-07-22T22:12+10:00; 2016?; 1875~; -0379~). Obwohl das veröffentlichte Biblatex ziemlich robust ist, wird dies noch getestet (ich würde zumindest sicherstellen, dass Ihre Latex-Pakete auf dem neuesten Stand sind).

verwandte Informationen