BiblaTex で Babel を使用しないオーストラリアの日付範囲形式ですか?

BiblaTex で Babel を使用しないオーストラリアの日付範囲形式ですか?

babel または polyglossia がロードされていない場合でも、オーストラリア スタイルの日付と日付範囲を私のbiblatexスタイル ( biblatex-sbl) で使用したいです。次のコードは、範囲が 1 か月以内の場合に失敗します。「2016 年 1 月 1 日から 5 日」としたいのですが、代わりに「2016 年 1 月 1 日から 5 日」が表示されます。どなたか助けていただけませんか? (参考までに、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 日)。

要約すると、次のようになります。

  • australianBabelのバリアントとして 設定する\usepackage[australian]{babel}
  • biblatexオプションを使用するalldates=long
  • 必要に応じて他のオプションを設定します( を選択しましたdateabbrev=false)。

これにより、「1-5 January 2016」ではなく、「1 January 2016-5 January 2016」が返されます。ただし、「31 December 2016-5 January 2016」のような日付範囲には、指定した並べ替えと同等の圧縮された読み取り可能な形式がないため、前者の方が良いと思います。

これは、@Ross への返信であなたが表現した内容に関して、あなたが望んでいるものを与えているようにも見えます。

Biblatex の Polyglossia サポートは現在問題があります (特に polyglossia 言語バリアント設定)。解決策としては、今のところ polyglossia ではなく babel を使用することです。詳細については、http://tex.stackexchange.com > Polyglossia 言語バリアントを Biblatex 書誌で動作させるにはどうすればよいですか?

ただし、alldates=ymdISO のような形式 (ただし 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 をサポートするために多数の datetime 機能を導入したという警告です (例: 2016-07-22T22:12+10:00; 2016?; 1875~; -0379~)。リリースされた biblatex はかなり堅牢ですが、まだテスト中です (少なくとも LaTeX パッケージが最新であることを確認してください)。

関連情報