
Quero que datas e intervalos de datas no estilo australiano sejam usados no meu biblatex
estilo ( 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-chicago
també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 biblatex
os 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
australian
como sua variante babel\usepackage[australian]{babel}
- Use a opção biblatex
alldates=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=ymd
que 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).