Haupttext und Bibliographie in zwei Sprachen, aber mit alternativem Datumsformat

Haupttext und Bibliographie in zwei Sprachen, aber mit alternativem Datumsformat

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 autolangund langiddurch „“ ersetzen \usepackage[backend=biber,language=australian{biblatex}, obwohl sich dadurch auch der Stil der Silbentrennung, Zitate, Kommas usw. im Literaturverzeichnis in „ australianStil“ ä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 australianBabel hinzufügen und dann die Sprache ändern, australianbevor 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 USenglishverwenden 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 australianFormat 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}

Der englischsprachige Eintrag folgt den englischen Silbentrennungsregeln. Der deutschsprachige Eintrag folgt den deutschen Silbentrennungsregeln. Beide Einträge folgen dem australischen Datumsformat.

Wenn das langidFeld 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.lbxsein 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 americanBelieben 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 \ProvidesFileoben und \endinputunten 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.lbxund 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.ldfSprachdefinitionsdatei \english@ordinalmonthdayauf „false“ gesetzt (und \if@british@localeist auch „false“, also \todaywird es als amerikanisches Format neu definiert).

Biblatex betrachtet es in jedem Fall englishals 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.ldfmit 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, australianwas das DMY-Format in Biblatex ergibt, mit datetime2Paket zum Zurücksetzen \todayauf den ursprünglichen Wert (für den Titel) und csquotesPaket 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}

Ergebnis: australische Datteln

Durch Ändern der Sprache wird englishdas Cite/Bib-Format MDY erzeugt.

\setmainlanguage{english}

Englisch ist standardmäßig amerikanisch

verwandte Informationen