私はアメリカ英語とドイツ語 (新正書法) でテキストを書いているので、 を使用します\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@ordinalmonthday
false に設定されます (これも\if@british@locale
false なので、\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
MWE、australian
Polyglossia で言語を設定すると 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}
言語を変更すると、english
cite/bib MDY形式になります
\setmainlanguage{english}