biblatex 中没有 babel 的澳大利亚日期范围格式?

biblatex 中没有 babel 的澳大利亚日期范围格式?

biblatex我希望我的样式 ( )中使用澳大利亚风格的日期和日期范围,biblatex-sbl即使未加载 babel 或 polyglossia。当范围在一个月内时,以下代码会失败。我想要“2016 年 1 月 1 日至 5 日”,但我得到的却是“2016 年 1 月 1 日至 5 日”。有人可以帮忙吗?(FWIW,biblatex-chicago在这种情况下也会失败。)

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

答案1

啊,明白了。我需要这个:

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

编辑

实际上,以上还不够。为了给这个问题提供一个合适的答案,我实际上需要以下内容。这还考虑到了biblatex的扩展日期/时间功能。

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

答案2

有一个简单的方法(用 xelatex 和 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}

在参考书目/参考文献部分,结果如下:

标题 A(2016 年 1 月 2 日)。
标题 B(2016 年 1 月 2 日至 2016 年 2 月 5 日)。
标题 C(2016 年 1 月 1 日至 2016 年 1 月 5 日)。

总结一下:

  • 设置australian为你的 babel 变体 \usepackage[australian]{babel}
  • 使用 biblatex 选项alldates=long
  • 根据需要设置其他选项(您已选择dateabbrev=false)。

这样得到的结果是“2016 年 1 月 1 日至 2016 年 1 月 5 日”,而不是“2016 年 1 月 1 日至 5 日”。但我建议前者更好,因为像“2016 年 12 月 31 日至 2016 年 1 月 5 日”这样的日期范围没有您指定的压缩和可读的等效项。

就您对@Ross 的回应而言,这似乎也给了您想要的东西。

Biblatex 对 Polyglossia 的支持目前存在问题(特别是 polyglossia 语言变体设置)。解决方案是暂时使用 babel,而不是 polyglossia。有关详细信息,请参阅http://tex.stackexchange.com > 我们如何使 Polyglossia 语言变体与 Biblatex 书目兼容?

但是,我推荐你使用alldates=ymd,它提供了类似 ISO 的格式(但具有 ISO 不允许的自定义选项)。在互联网时代,让你的日期在全球范围内友好是正确的。在这种情况下,当使用 时alldates=ymd,该命令\usepackage[australian]{babel}变得无关紧要,可以删除(出于 biblatex 目的)。这将产生:

标题 A(2016-01-02)。
标题 B(2016-01-02/2016-02-05)。
标题 C(2016-01-01/2016-01-05)。

警告:Biblatex 最近引入了大量日期时间功能,以支持使用 EDTF 输入日期(例如 2016-07-22T22:12+10:00;2016?;1875~;-0379~)。尽管发布的 biblatex 相当强大,但仍在测试中(我至少要确保您的 latex 包是最新的)。

相关内容