本文と参考文献は2つの言語で書かれていますが、日付の形式が異なります。

本文と参考文献は2つの言語で書かれていますが、日付の形式が異なります。

私はアメリカ英語とドイツ語 (新正書法) でテキストを書いているので、 を使用します\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

文書全体のすべての日付をオーストラリアの形式に合わせる簡単な方法はわかりませんが、ハイフネーション スタイルに影響を与えずにオーストラリアの日付形式を参考文献に適用する方法はわかっています。

babel に追加し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必要に応じて に置き換えることができます。これらは同じスタイルに対する 2 つの名前です。\usepackage{babel}ただし、 を呼び出すときに使用するエイリアスと同じであることを確認する必要があります。( のプロパティを変更した場合USenglish、その変更が に引き継がれるとは思わないでくださいamerican。)

より洗練された解決策は、.lbx ファイルを作成して、より整理された状態を維持し、将来のドキュメントでこのスタイルに簡単にアクセスできるようにすることです。コードは最初と最後だけが異なります。\ProvidesFile先頭と\endinput末尾に追加する必要があります。次に、2 つのコマンドを追加し、任意のコマンドをコマンドに\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) で回避策を機能させるために使用する必要がありました。

ポリグロッシアはオプション処理によりオーストラリア語を英語の変種として理解し、

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

しかし、何も変わりません。このバリアントは Biblatex に取り込まれず、残念ながらgloss-english.ldf言語定義ファイルは\english@ordinalmonthdayfalse に設定されます (これも\if@british@localefalse なので、\todayアメリカ形式として再定義されます)。

いずれにせよ、Biblatex は をenglish多言語言語と見なすため、引用と参照の日付はアメリカ形式 ( のデフォルトenglish) で出力されます。

Biblatex は、多言語対応でなくても、オーストラリアの日付を単独で理解します。

つまり、言語の組版は、結局のところ、「スタイル」や「テーマ」(ハイフネーション パターン、月の名前やドキュメント部分、引用符と句読点、ページ ジオメトリ)などの一連のユーザー オプションまたはデザイン選択であり、Biblatex のドキュメントではオーストラリア語は言語(「Polyglossia で知られている」)であると考えられているので、オーストラリア語を言語にしないのはなぜでしょうか。

gloss-australian.ldfgloss-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

MWE、australianPolyglossia で言語を設定すると Biblatex で DMY 形式になり、datetime2パッケージは\today(タイトル用に) 本来あるべき状態にリセットされ、csquotesパッケージは引用符用になります。

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

英語はアメリカ英語にデフォルト設定されます

関連情報