¿Formato de rango de fechas australiano sin babel en biblatex?

¿Formato de rango de fechas australiano sin babel en biblatex?

Quiero que se utilicen fechas y rangos de fechas de estilo australiano en mi biblatexestilo ( biblatex-sbl) incluso cuando babel o poliglosia no estén cargados. El siguiente código falla en los casos en que el rango se encuentra dentro de un mes. Quiero "del 1 al 5 de enero de 2016", pero en su lugar aparece "del 1 de enero al 5 de enero de 2016". Alguien puede ayudarme porfavor? (FWIW, biblatex-chicagotambién falla en esta situación).

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

Respuesta1

Ah, lo tengo. Necesito este:

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

Editar

En realidad, lo anterior no es suficiente. Para poder dar una respuesta adecuada a esta pregunta, en realidad necesitaba lo siguiente. Esto también tiene en cuenta biblatexlas funciones extendidas de fecha/hora.

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

Respuesta2

Hay un enfoque simple (probado con xelatex y 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}

Eso produce, en la sección de bibliografía/referencias:

TítuloA (2 de enero de 2016).
Título B (2 de enero de 2016-5 de febrero de 2016).
TítuloC (1 de enero de 2016-5 de enero de 2016).

En resumen usted:

  • Establecer australiancomo su variante de Babel \usepackage[australian]{babel}
  • Utilice la opción biblatexalldates=long
  • Configure otras opciones como desee (usted ha elegido dateabbrev=false).

Esto le da "del 1 de enero de 2016 al 5 de enero de 2016" en lugar de "del 1 al 5 de enero de 2016". Pero sugeriría que lo primero es mejor dado que un rango de fechas como "31 de diciembre de 2016-5 de enero de 2016" no tendrá un equivalente comprimido y legible del tipo que usted especificó.

Esto también parece darle lo que desea en términos de lo que expresó en respuesta a @Ross.

El soporte de Biblatex para Polyglossia es actualmente un problema (específicamente para la configuración de la variante del idioma Polyglossia). La solución es utilizar babel, no poliglosia, por el momento. Para más detalles verhttp://tex.stackexchange.com > ¿Cómo conseguimos que las variantes del idioma Polyglossia funcionen con las bibliografías de Biblatex?.

Sin embargo, le recomendaría alldates=ymdque le brinde un formato similar al ISO (pero con opciones de personalización que ISO no permite). En la era de Internet, lo correcto es hacer que sus citas sean amigables a nivel mundial. En ese caso, al usar alldates=ymd, el comando \usepackage[australian]{babel}se vuelve irrelevante y podría eliminarse (para propósitos de biblatex). Eso producirá:

TítuloA (2016-01-02).
TítuloB (2016-01-02/2016-02-05).
TítuloC (2016-01-01/2016-01-05).

Una advertencia de que Biblatex ha introducido recientemente una serie de funciones de fecha y hora para admitir EDTF para ingresar fechas (por ejemplo, 2016-07-22T22:12+10:00; 2016?; 1875~; -0379~). Aunque el biblatex lanzado es bastante robusto, todavía se está probando (al menos me aseguraría de que sus paquetes de látex estén actualizados).

información relacionada