Formato de intervalo de datas australiano sem babel no biblatex?

Formato de intervalo de datas australiano sem babel no biblatex?

Quero que datas e intervalos de datas no estilo australiano sejam usados ​​no meu biblatexestilo ( biblatex-sbl), mesmo quando babel ou polyglossia não estiverem carregados. O código a seguir falha nos casos em que o intervalo está dentro de um mês. Quero “1 a 5 de janeiro de 2016”, mas em vez disso recebo “1 a 5 de janeiro de 2016”. Alguém pode ajudar? (FWIW, biblatex-chicagotambém falha nesta situação.)

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

Responder1

Ah, entendi. Eu preciso disso:

\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

Na verdade, o que foi dito acima não é suficiente. Para fornecer uma resposta adequada a esta pergunta, eu realmente precisava do seguinte. Isso também leva em consideração biblatexos recursos estendidos de data/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}}}}%
}

Responder2

Existe uma abordagem simples (testada com xelatex e 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}

Isso produz, na seção bibliografia/referências:

TítuloA (2 de janeiro de 2016).
Título B (2 de janeiro de 2016 a 5 de fevereiro de 2016).
TítuloC (1º de janeiro de 2016 a 5 de janeiro de 2016).

Em resumo você:

  • Defina australiancomo sua variante babel \usepackage[australian]{babel}
  • Use a opção biblatexalldates=long
  • Defina outras opções conforme desejado (você escolheu dateabbrev=false).

Isso fornece "1 a 5 de janeiro de 2016" em vez de "1 a 5 de janeiro de 2016". Mas eu sugiro que o primeiro seja melhor, já que um intervalo de datas como "31 de dezembro de 2016 a 5 de janeiro de 2016" não terá um equivalente compactado e legível do tipo que você especificou.

Isso também parece dar a você o que você deseja em termos do que você expressou ao responder a @Ross.

O suporte do Biblatex para Polyglossia é atualmente um problema (especificamente para configuração de variante de idioma polyglossia). A solução é usar babel, e não poliglossia, por enquanto. Para detalhes vejahttp://tex.stackexchange.com > Como fazemos com que as variantes da linguagem Polyglossia funcionem com as bibliografias do Biblatex?.

No entanto, eu recomendo a você alldates=ymdque oferece um formato semelhante ao ISO (mas com opções de personalização que o ISO não permite). Na era da Internet, é certo tornar seus encontros globalmente amigáveis. Nesse caso, ao usar alldates=ymd, o comando \usepackage[australian]{babel}torna-se irrelevante e pode ser removido (para fins de biblatex). Isso produzirá:

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

Um aviso de que o Biblatex introduziu recentemente uma série de recursos de data e hora para suportar EDTF na inserção de datas (por exemplo, 2016-07-22T22:12+10:00; 2016?; 1875~; -0379~). Embora o biblatex lançado seja bastante robusto, ele ainda está em testes (pelo menos eu garantiria que seus pacotes de látex estejam atualizados).

informação relacionada