주요 텍스트와 참고문헌은 두 가지 언어로 작성되지만 날짜 형식은 대체됩니다.

주요 텍스트와 참고문헌은 두 가지 언어로 작성되지만 날짜 형식은 대체됩니다.

저는 미국 영어와 독일어(새로운 철자법)로 텍스트를 작성하고 있으므로 \usepackage[ngerman,USenglish]{babel}. Biblatex 참고문헌에는 영어와 독일어 참고문헌도 포함되어 있습니다. 참고문헌의 각 언어에 대한 하이픈 규칙이 필요하므로 \usepackage[backend=biber,language=autobib,autolang=hyphen]{biblatex}개별 참고문헌 항목의 언어를 다음과 같이 사용하고 지정합니다 langid = {ngerman}.

그러나 모든 날짜를 호주 형식(dd Mon. YYYY)으로 표시하고 싶습니다. 이 날짜 형식(특히 참고문헌에서)을 어떻게 얻을 수 있나요?

(참고문헌에 독일어 하이픈 넣기 규칙이 필요하지 않은 경우 간단히 제거 autolang하고 langid를 사용하면 됩니다 \usepackage[backend=biber,language=australian{biblatex}. 단, 이렇게 하면 참고문헌의 하이픈 넣기, 인용문, 쉼표 등의 스타일도 australian스타일로 변경됩니다.)

답변1

전체 문서의 모든 날짜를 호주식 형식으로 만드는 쉬운 방법은 모르지만 하이픈 스타일에 영향을 주지 않고 참고문헌에 호주식 날짜 형식을 적용하는 방법은 알고 있습니다.

참고문헌을 인쇄하기 전에 australian바벨에 추가한 다음 언어를 전환 할 수 있습니다 . australian그러면 참고문헌의 모든 날짜가 호주 스타일이 됩니다.

이 해결 방법은 일련의 쉼표(여기에 설명된 대로) 및 따옴표 형식입니다. 예를 들어 USenglish형식으로 인쇄된 기사에 대한 참조는 큰따옴표를 사용하고 따옴표 안에 끝 구두점을 유지하는 반면, australian형식으로 인쇄된 기사는 작은따옴표를 사용하고 따옴표 외부에 끝 구두점을 유지합니다.

"미국 영어로 된 기사 제목."
'호주 영어로 된 기사 제목'.

다음 코드는 결과를 보여줍니다.

\documentclass{article}
\usepackage[ngerman,australian,USenglish]{babel}
\usepackage[autostyle]{csquotes}
\usepackage[backend=biber,language=autobib,autolang=hyphen,sorting=none]{biblatex}
\addbibresource{testbib.bib}

\begin{filecontents}{testbib.bib}
@article{default2014,
  author = {Vorname Nachname},
  title = {The German Rindfleischetikettierungs\"uberwachungsaufgaben\"ubertragungsgesetz},
  journaltitle = {Default Journal of Gastroenterology},
  date = {2014-03-20},
}
@article{au2014,
  author = {Vorname Nachname},
  title = {The German Rindfleischetikettierungs\"uberwachungsaufgaben\"ubertragungsgesetz},
  journaltitle = {Australian Journal of Gastroenterology},
  date = {2014-03-20},
  langid = {australian},
}
@article{us2014,
  author = {Vorname Nachname},
  title = {The German Rindfleischetikettierungs\"uberwachungsaufgaben\"ubertragungsgesetz},
  journaltitle = {American Journal of Gastroenterology},
  date = {2014-03-20},
  langid = {USenglish},
}
@article{de2014,
  author = {Vorname Nachname},
  title = {Das deutsche Rindfleischetikettierungs\"uberwachungsaufgaben\"ubertragungsgesetz},
  journaltitle = {Zeitschrift f\"ur Gastroenterologie},
  date = {2014-03-20},
  langid = {ngerman},
}
\end{filecontents}

\begin{document}
% main text here in USenglish (switch to ngerman when necessary)
The hyphenation rules of Australian English, American English, and German are\
different~\cite{default2014,au2014,us2014,de2014}.

\selectlanguage{australian} % for proper day/month order
\printbibliography
\end{document}

영어 항목은 영어 하이픈 규칙을 따릅니다. 독일어 항목은 독일어 하이픈 넣기 규칙을 따릅니다. 두 항목 모두 호주 날짜 형식을 따릅니다.

필드를 생략 하면 langid하이픈 넣기 스타일이 기본적으로 현재 선택된 언어(이 예에서는 australian)로 설정됩니다.

답변2

덕분에Moewe의 답변은 여기에 있습니다., 변경 방법을 알아낼 수 있었습니다.전체 문서의 모든 긴 날짜호주 형식으로. 그런 다음 표시하는 방법을 알아 냈습니다.모든 짧은 데이트d/m/y 형식( 짧은 날짜 형식을 상속하는 에 있는 코드 사용) british.lbx. australian.lbx이 답변은 날짜 형식(짧은 형식과 긴 형식 모두)을 변경합니다.그리고 아무것도. 미국 영어로 작성된 전체 문서에 전월 스타일을 적용합니다.

가장 간단한 방법은 이것을 프리앰블에 삽입하는 것입니다.

\DefineBibliographyExtras{USenglish}{%

  % d-m-y format for long dates
  \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}}}}%

  % d-m-y format for short dates
  \protected\def\mkbibdateshort#1#2#3{%
    \iffieldundef{#3}
      {}
      {\mkdatezeros{\thefield{#3}}%
       \iffieldundef{#2}{}{/}}%
    \iffieldundef{#2}
      {}
      {\mkdatezeros{\thefield{#2}}%
       \iffieldundef{#1}{}{/}}%
    \iffieldbibstring{#1}{\bibstring{\thefield{#1}}}{\mkdatezeros{\thefield{#1}}}}%
}

나는 별칭을 사용하여 코드를 작성했지만 원하는 경우 USenglish이를 별칭으로 바꿀 수 있습니다 . american그들은 같은 스타일의 두 가지 이름입니다. 하지만 를 호출할 때 사용된 것과 동일한 별칭인지 확인해야 합니다 \usepackage{babel}. ( 의 속성을 변경하는 경우 USenglish변경 사항이 로 전달될 것이라고 기대하지 마세요 american!)

보다 세련된 솔루션은 .lbx 파일을 보다 체계적으로 유지하고 향후 문서에서 이 스타일에 쉽게 액세스할 수 있도록 만드는 것입니다. 코드는 시작과 끝만 다릅니다. \ProvidesFile상단과 \endinput하단에 추가해야합니다 . 그런 다음 두 개의 \Inherit...명령을 추가 하고 모든 \Define...명령을 명령으로 변경하십시오 Declare....

\ProvidesFile{USenglish-dmy.lbx}[USenglish localization with d-m-y format for dates]

\InheritBibliographyExtras{USenglish}
\DeclareBibliographyExtras{%

  % d-m-y format for long dates
  \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}}}}%

  % d-m-y format for short dates
  \protected\def\mkbibdateshort#1#2#3{%
    \iffieldundef{#3}
      {}
      {\mkdatezeros{\thefield{#3}}%
       \iffieldundef{#2}{}{/}}%
    \iffieldundef{#2}
      {}
      {\mkdatezeros{\thefield{#2}}%
       \iffieldundef{#1}{}{/}}%
    \iffieldbibstring{#1}{\bibstring{\thefield{#1}}}{\mkdatezeros{\thefield{#1}}}}%
}

\InheritBibliographyStrings{USenglish}
\endinput

이것을 다른 이름으로 저장 USenglish-dmy.lbx한 다음 서문에 추가하십시오: \DeclareLanguageMapping{USenglish}{USenglish-dmy}. 그게 다야! 이제 모든 날짜에는 해당 월의 전일이 포함되어야 하며 다른 항목(예: 하이픈 넣기 또는 인용 스타일)은 영향을 받지 않습니다.

답변3

\DefineBibliographyExtras{english}내 설정(Biblatex + Polyglossia)에서 작동하는 해결 방법을 얻으려면 사용해야 했습니다 .

Polyglossia는 옵션 처리를 통해 호주어를 영어의 변형으로 이해하고,

\setmainlanguage[variant=australian,ordinalmonthday=true]{english}

하지만 그것은 아무것도 바꾸지 않습니다. 변형은 Biblatex에 적용되지 않으며 불행하게도 gloss-english.ldf언어 정의 파일이 \english@ordinalmonthdayfalse로 설정됩니다(또한 \if@british@localefalse이므로 \today미국 형식으로 재정의됩니다).

어쨌든 Biblatex는 english다언어 언어로 간주하므로 인용 및 참고 문헌의 날짜는 미국 형식(기본값은 english)으로 표시됩니다.

다언어 없이 Biblatex 자체는 호주 날짜를 이해합니다.

따라서 언어의 조판은 결국 '스타일'이나 '테마'(하이픈 연결 패턴, 월 이름 및 문서 부분 이름, 인용 부호 및 구두점, 페이지)와 같은 사용자 옵션 또는 디자인 선택의 집합이기 때문입니다. 기하학) 그리고 Biblatex 문서에서는 호주어가 언어("Polyglossia에 알려진")라고 생각하므로 그것을 하나로 만드는 것은 어떨까요?

gloss-australian.ldf, gloss-english.ldf약간의 수정이 필요합니다.

\ProvidesFile{gloss-australian.ldf}[polyglossia: module for australian english]%<=== changed for australian
\PolyglossiaSetup{australian}{%<=== changed for australian
  hyphennames={english,australian,american,usenglish,USenglish},%<=== changed for australian
  hyphenmins={2,3},
  fontsetup=true,
}

\newif\if@british@locale
\@british@localetrue %<=== changed for australian
\providebool{@british@hyphen}
\providebool{english@ordinalmonthday}

\define@boolkey{english}[english@]{ordinalmonthday}[true]{}

%% English is a special case in that \l@english is reserved for US English, so
%% we need to handle it differently
\define@key{english}{variant}{%
  %needs to be reset for loop over hyphennames below:
  \def\do##1{%
      \xpg@ifdefined{#1}%
        {\csletcs{l@english}{l@#1}\listbreak}%
        {}%
  }%
  \ifstrequal{#1}{uk}%
    {\@british@localetrue
     \xpg@info{Option: english variant=british}}%
    {\ifstrequal{#1}{british}%
      {\@british@localetrue
      \xpg@info{Option: english variant=british}}%
        {\ifstrequal{#1}{us}% these patterns are the default so we don't need to reset them
          {\@british@hyphenfalse\english@ordinalmonthdayfalse
           \xpg@info{Option: english variant=american}}%
          {\ifstrequal{#1}{american}%
            {\@british@hyphenfalse\english@ordinalmonthdayfalse
            \xpg@info{Option: english variant=american}}%
            {\ifstrequal{#1}{usmax}%
              {\@british@hyphenfalse\english@ordinalmonthdayfalse
                \ifluatex\else\setkeys[xpg@setup]{english}{hyphennames={usenglishmax}}\fi
                \xpg@info{Option: english variant=american (with additional patterns)}%
                \xpg@ifdefined{usenglishmax}{}%
                  {\xpg@warning{No hyphenation patterns were loaded for "US English Max"\MessageBreak
                    I will use the standard patterns for US English instead}%
                  \adddialect\l@usenglishmax\l@english\relax}%
                \gdef\english@language{\language=\l@usenglishmax}}%
                {\ifstrequal{#1}{australian}%
                  {\@british@hyphentrue\english@ordinalmonthdaytrue %<=== changed for australian
                  \xpg@info{Option: english variant=australian}}%
                  {\ifstrequal{#1}{newzealand}%
                    {\@british@hyphentrue\english@ordinalmonthdayfalse
                      \xpg@info{Option: english variant=newzealand}}%
                      {\xpg@warning{Unknown English variant `#1'}}%
  }}}}}}%
  \if@british@locale\@british@hyphentrue\english@ordinalmonthdaytrue\fi
  \if@british@hyphen
    \ifluatex\else\setkeys[xpg@setup]{english}{hyphennames={ukenglish,british,UKenglish}}\fi
    \xpg@ifdefined{ukenglish}{}%
      {\xpg@warning{No hyphenation patterns were loaded for British English\MessageBreak
         I will use the patterns for US English instead}%
       \adddialect\l@ukenglish\l@english\relax}%
    \gdef\english@language{\language=\l@ukenglish\xpg@set@language@luatex@ii{ukenglish}}%
  \fi
  % and we reset \do to its previous definition here:
  \def\do##1{\setotherlanguage{#1}}%
}

\def\captionsenglish{%
   \def\prefacename{Preface}%
   \def\refname{References}%
   \def\abstractname{Abstract}%
   \def\bibname{Bibliography}%
   \def\chaptername{Chapter}%
   \def\appendixname{Appendix}%
   \def\contentsname{Contents}%
   \def\listfigurename{List of Figures}%
   \def\listtablename{List of Tables}%
   \def\indexname{Index}%
   \def\figurename{Figure}%
   \def\tablename{Table}%
   \def\partname{Part}%
   \def\enclname{encl}%
   \def\ccname{cc}%
   \def\headtoname{To}%
   \def\pagename{Page}%
   \def\seename{see}%
   \def\alsoname{see also}%
   \def\proofname{Proof}%
}
\def\dateenglish{%
   \def\english@day{%
     \ifenglish@ordinalmonthday
       \ifcase\day\or
        1st\or 2nd\or 3rd\or 4th\or 5th\or
        6th\or 7th\or 8th\or 9th\or 10th\or
        11th\or 12th\or 13th\or 14th\or 15th\or
        16th\or 17th\or 18th\or 19th\or 20th\or
        21st\or 22nd\or 23rd\or 24th\or 25th\or
        26th\or 27th\or 28th\or 29th\or 30th\or
        31st\fi
     \else\number\day\fi}%
     \def\english@month{\ifcase\month\or
      January\or February\or March\or April\or May\or June\or
      July\or August\or September\or October\or November\or December\fi}%
   \def\today{%
    \if@british@locale
      \english@day\space\english@month\space\number\year
    \else
    \ifenglish@ordinalmonthday%<=== inserted for australian
        \english@day\space\english@month\space\number\year%<=== inserted for australian
    \else%<=== inserted for australian
      \english@month\space\english@day,\space\number\year
    \fi%<=== inserted for australian
    \fi}%
}

\endinput

australianMWE, Biblatex에서 DMY 형식을 제공하는 Polyglossia로 설정된 언어 , 원래 상태로 datetime2재설정되는 패키지 (제목용) 및 따옴표용 패키지.\todaycsquotes

\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@periodical{jtest,journaltitle={The Martian Chronicle},location={Mars},date={2148-03-26},}
@article{atest,author={AI Author},title={Human professor explores Olympus},crossref={jtest},pages={para 9},}
\end{filecontents*}

\documentclass[12pt]{article}

% SETTINGS
%  ===================================
\newcommand\mytitle{A Title}
\newcommand\myauthorname{An Author}
\newcommand\mybibfilename{\jobname.bib}
%  ===================================
\usepackage{fontspec}
\setmainfont{Noto Serif} %arbitrary font
\usepackage{polyglossia}
\setmainlanguage{australian}
\usepackage[british]{datetime2} % for date formatting of \today: put after polyglossia

\usepackage[style=british]{csquotes}
\usepackage[style=oxnotes,    citereset=section, 
ibidtracker=true,    
sortlocale=en_AU,
scnames=true, 
%annotation = true,
indexing=cite,     
mincrossrefs=20,    
backend=biber, 
isbn=false,       
%backref=true,
language=australian,
abbreviate=true,
date=long,
%babel=hyphen
%autolang=true
]{biblatex}

\addbibresource{\mybibfilename}

\title{\mytitle} % provide title info
\author{\myauthorname}          % provide author info
\date{\today}           % provide date

\begin{document}
\maketitle 
Text\cite{atest}.
\printbibliography
\end{document}

결과: 호주 날짜

englishcite/bib MDY 형식을 제공 하도록 언어를 변경합니다.

\setmainlanguage{english}

영어는 미국식으로 기본 설정되어 있습니다

관련 정보