biblatex에 바벨이 없는 호주 날짜 범위 형식이 있습니까?

biblatex에 바벨이 없는 호주 날짜 범위 형식이 있습니까?

바벨이나 폴리글로시아가 로드되지 않은 경우에도 내 biblatex스타일( ) 에 사용되는 호주식 날짜와 날짜 범위를 원합니다. biblatex-sbl범위가 한 달 이내인 경우 다음 코드는 실패합니다. "2016년 1월 1~5일"을 원하지만 대신 "2016년 1월 1일~52016년"이 표시됩니다. 누구든지 도와주실 수 있나요? (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}

참고문헌/참고자료 섹션에서는 다음과 같은 결과가 나옵니다.

TitleA(2016년 1월 2일).
TitleB(2016년 1월 2일~2016년 2월 5일).
TitleC(2016년 1월 1일~2016년 1월 5일).

요약하면 다음과 같습니다.

  • australian바벨 변형으로 설정\usepackage[australian]{babel}
  • biblatex 옵션을 사용하세요alldates=long
  • 원하는 대로 다른 옵션을 설정합니다(선택함 dateabbrev=false).

이렇게 하면 "2016년 1월 1일~5일"이 아닌 "2016년 1월 1일~2016년 1월 5일"이 됩니다. 하지만 "2016년 12월 31일~2016년 1월 5일"과 같은 기간에는 지정한 종류와 동일하게 압축되어 읽을 수 있는 항목이 없다는 점을 고려하면 전자가 더 나을 것 같습니다.

이는 또한 @Ross에 대한 응답으로 표현한 측면에서 원하는 것을 제공하는 것으로 보입니다.

Polyglossia에 대한 Biblatex 지원은 현재 문제입니다(특히 Polyglossia 언어 변형 설정의 경우). 해결책은 현재로서는 폴리글로시아가 아닌 바벨을 사용하는 것입니다. 자세한 내용은 참조http://tex.stackexchange.com > Biblatex 참고문헌과 함께 작동하도록 Polyglossia 언어 변형을 얻으려면 어떻게 해야 합니까?.

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는 상당히 강력하지만 아직 테스트 중입니다(적어도 라텍스 패키지가 최신인지 확인하고 싶습니다).

관련 정보