Ich schreibe einen Text in amerikanischem Englisch und Deutsch (neue Rechtschreibung), also verwende ich \usepackage[ngerman,USenglish]{babel}
. Die Bibliographie von biblatex enthält auch englische und deutsche Referenzen. Ich brauche die Silbentrennungsregeln für jede Sprache in der Bibliographie, also verwende ich \usepackage[backend=biber,language=autobib,autolang=hyphen]{biblatex}
und gebe dann die Sprache der einzelnen Bibliographieeinträge wie folgt an: langid = {ngerman}
.
Ich möchte jedoch alle Daten im australischen Format (TT. Mo. JJJJ) haben. Wie kann ich dieses Datumsformat (insbesondere in der Bibliographie) erhalten?
(Wenn ich die deutschen Silbentrennungsregeln im Literaturverzeichnis nicht bräuchte, würde ich einfach „und“ entfernen autolang
und langid
durch „“ ersetzen \usepackage[backend=biber,language=australian{biblatex}
, obwohl sich dadurch auch der Stil der Silbentrennung, Zitate, Kommas usw. im Literaturverzeichnis in „ australian
Stil“ ändern würde.)
Antwort1
Ich kenne keine einfache Möglichkeit, alle Daten im gesamten Dokument dem australischen Format anzupassen, aber ich weiß, wie man das australische Datumsformat auf die Bibliografie anwendet, ohne den Silbentrennungsstil zu beeinträchtigen.
Sie können australian
Babel hinzufügen und dann die Sprache ändern, australian
bevor Sie die Bibliographie drucken. Dann werden alle Daten in der Bibliographie im australischen Stil angezeigt.
Beachten Sie, dass diese Lösung auch andere Stilfaktoren innerhalb der Bibliographie beeinflusst, wie z. B. Serienkommas (wie hier beschrieben) und Anführungszeichenformatierung. Beispielsweise USenglish
verwenden Verweise auf Artikel, die im Format gedruckt werden, doppelte Anführungszeichen und behalten die Schlusszeichensetzung innerhalb der Anführungszeichen, während Verweise auf Artikel, die im australian
Format gedruckt werden, einfache Anführungszeichen verwenden und die Schlusszeichensetzung außerhalb der Anführungszeichen behalten:
„Artikeltitel in amerikanischem Englisch.“
„Artikeltitel in australischem Englisch“.
Der folgende Code veranschaulicht das Ergebnis:
\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}
Wenn das langid
Feld weggelassen wird, wird standardmäßig der Silbentrennungsstil der aktuell ausgewählten Sprache verwendet (in diesem Beispiel australian
).
Antwort2
Dank anmoewes Antwort hier, konnte ich herausfinden, wie ich mich ändern kannalle langen Datumsangaben im gesamten Dokumentins australische Format. Dann habe ich herausgefunden, wie manalle Kurztermineim d/m/y-Format (unter Verwendung des in gefundenen Codes british.lbx
, von dem es australian.lbx
sein kurzes Datumsformat erbt). Diese Antwort ändert die Datumsformate (sowohl kurz als auch lang)und sonst nichts. Es wendet den Tag-vor-Monat-Stil auf ein gesamtes Dokument an, das in amerikanischem Englisch verfasst ist.
Am einfachsten geht das, indem man in die Präambel Folgendes einfügt:
\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}}}}%
}
Ich habe den Code mit dem Alias geschrieben USenglish
, aber Sie können diesen nach american
Belieben durch ersetzen. Es sind zwei Namen für denselben Stil. Sie müssen \usepackage{babel}
jedoch sicherstellen, dass beim Aufruf von derselbe Alias verwendet wird. (Wenn Sie die Eigenschaften von ändern USenglish
, erwarten Sie nicht, dass die Änderungen auf übertragen werden american
!)
Eine elegantere Lösung besteht darin, eine .lbx-Datei zu erstellen, um übersichtlicher zu bleiben und diesen Stil in zukünftigen Dokumenten leicht zugänglich zu machen. Der Code unterscheidet sich nur am Anfang und am Ende. Sie müssen \ProvidesFile
oben und \endinput
unten hinzufügen. Fügen Sie dann zwei \Inherit...
Befehle hinzu und ändern Sie alle \Define...
Befehle in Declare...
Befehle.
\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
Speichern Sie dies unter USenglish-dmy.lbx
und fügen Sie dann Folgendes in Ihre Präambel ein: \DeclareLanguageMapping{USenglish}{USenglish-dmy}
. Das war‘s! Jetzt sollte bei allen Daten der Tag vor dem Monat stehen und nichts anderes (z. B. Silbentrennung oder Anführungszeichen) wird dadurch beeinflusst.
Antwort3
Musste es verwenden \DefineBibliographyExtras{english}
, damit der Workaround auf meinem Setup (Biblatex + Polyglossia) funktionierte.
Polyglossie versteht über die Optionsverarbeitung Australisch als eine Variante des Englischen,
\setmainlanguage[variant=australian,ordinalmonthday=true]{english}
aber das ändert nichts. Die Variante gelangt nicht in Biblatex und leider wird die gloss-english.ldf
Sprachdefinitionsdatei \english@ordinalmonthday
auf „false“ gesetzt (und \if@british@locale
ist auch „false“, also \today
wird es als amerikanisches Format neu definiert).
Biblatex betrachtet es in jedem Fall english
als eine polyglossische Sprache, und daher werden die Daten in Zitaten und Referenzen im amerikanischen Format (das für die Standardeinstellung ist) ausgegeben english
.
Biblatex allein, ohne Polyglossie, versteht australische Daten.
Also: Da der Schriftsatz in einer Sprache letzten Endes eine Reihe von Benutzeroptionen oder Designentscheidungen ist, wie ein „Stil“ oder ein „Thema“ (Silbentrennungsmuster, Monatsnamen und Dokumentteile, Anführungszeichen und Satzzeichen, Seitengeometrie), und da die Biblatex-Dokumentation davon ausgeht, dass Australisch eine Sprache ist („bei Polyglossia bekannt“), warum sollte man es dann nicht zu einer machen?
gloss-australian.ldf
, gloss-english.ldf
mit einigen geringfügigen Änderungen:
\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, Sprache in Polyglossia eingestellt, australian
was das DMY-Format in Biblatex ergibt, mit datetime2
Paket zum Zurücksetzen \today
auf den ursprünglichen Wert (für den Titel) und csquotes
Paket für die Anführungszeichen.
\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}
Durch Ändern der Sprache wird english
das Cite/Bib-Format MDY erzeugt.
\setmainlanguage{english}