Texto principal y bibliografía en dos idiomas pero con formato de fecha alternativo.

Texto principal y bibliografía en dos idiomas pero con formato de fecha alternativo.

Estoy escribiendo un texto en inglés americano y alemán (nueva ortografía), así que uso \usepackage[ngerman,USenglish]{babel}. La bibliografía biblatex también contiene referencias en inglés y alemán. Necesito las reglas de separación de palabras de cada idioma en la bibliografía, por lo que uso \usepackage[backend=biber,language=autobib,autolang=hyphen]{biblatex}y luego especifico el idioma de las entradas de la bibliografía individuales de esta manera: langid = {ngerman}.

Sin embargo, me gustaría que todas las fechas estuvieran en formato australiano (dd lunes AAAA). ¿Cómo puedo obtener este formato de fecha (especialmente en la bibliografía)?

(Si no necesitara reglas de separación de palabras en alemán en la bibliografía, simplemente eliminaría autolangy langidy usaría \usepackage[backend=biber,language=australian{biblatex}, aunque esto también cambiaría el estilo de separación de palabras, citas, comas, etc. en la bibliografía al australianestilo).

Respuesta1

No conozco una manera fácil de hacer que todas las fechas de todo el documento sigan el formato australiano, pero sé cómo aplicar el formato de fecha australiano a la bibliografía sin afectar el estilo de separación de palabras.

Puede agregar australiana babel y luego cambiar el idioma australianantes de imprimir la bibliografía. Entonces todas las fechas de la bibliografía serán al estilo australiano.

Tenga en cuenta que esta solución también afecta a otros factores de estilo dentro de la bibliografía, como las comas seriales (como se describe aquí) y formato de comillas. Por ejemplo, las referencias a artículos impresos en USenglishformato utilizan comillas dobles y mantienen la puntuación final dentro de las comillas, mientras que las impresas en australianformato utilizan comillas simples y mantienen la puntuación final fuera de las comillas:

"Título del artículo en inglés americano".
"Título del artículo en inglés australiano".

El siguiente código ejemplifica el resultado:

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

La entrada en inglés sigue las reglas de separación de palabras en inglés. La entrada en alemán sigue las reglas de separación de palabras alemanas. Ambas entradas siguen el formato de fecha australiano.

Cuando se omite el langidcampo, el estilo de separación de palabras se establece de forma predeterminada en el idioma seleccionado actualmente (en este ejemplo, australian).

Respuesta2

Gracias ala respuesta de moewe aquí, pude descubrir cómo cambiartodas las fechas largas en todo el documentoal formato australiano. Luego descubrí cómo mostrartodas las citas cortasen formato d/m/y (usando el código que se encuentra en british.lbx, que es de donde australian.lbxhereda su formato de fecha corta). Esta respuesta cambia los formatos de fecha (tanto cortos como largos)y nada más. Aplica el estilo de día antes de mes a un documento completo escrito en inglés americano.

La forma más sencilla es insertar esto en el preámbulo:

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

Escribí el código con el alias USenglish, pero puedes reemplazarlo americansi lo deseas. Son dos nombres para un mismo estilo. Sin embargo , debes asegurarte de que sea el mismo alias que se usa al llamar \usepackage{babel}. (Si cambia las propiedades de USenglish, ¡no espere que los cambios se transfieran a american!)

Una solución más elegante es crear un archivo .lbx para estar más organizado y hacer que este estilo sea fácilmente accesible en documentos futuros. El código sólo difiere al principio y al final. Necesitas agregar \ProvidesFilearriba y \endinputabajo. Luego agregue dos \Inherit...comandos y cambie los \Define...comandos a Declare...comandos.

\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

Guarde esto como USenglish-dmy.lbxy luego agréguelo en su preámbulo: \DeclareLanguageMapping{USenglish}{USenglish-dmy}. ¡Eso es todo! Ahora todas las fechas deben tener el día anterior al mes y nada más (por ejemplo, separación de palabras o estilos de comillas) se ve afectado.

Respuesta3

Tuve que usarlo \DefineBibliographyExtras{english}para que la solución funcionara en mi configuración (Biblatex + Polyglossia).

Polyglossia, a través del procesamiento de opciones, entiende el australiano como una variante del inglés.

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

pero eso no cambia nada. La variante no ingresa a Biblatex y, desafortunadamente, el gloss-english.ldfarchivo de definición de idioma se establece \english@ordinalmonthdayen falso (y también \if@british@localees falso, por lo que \todayse redefine como formato americano).

En cualquier caso, Biblatex lo ve englishcomo el idioma poliglosia, por lo que las fechas en las citas y referencias aparecen tipografiadas en formato americano (que es el predeterminado para english).

Biblatex por sí solo, sin poliglosia, entiende los dátiles australianos.

Entonces: dado que la composición tipográfica en un idioma es, al final, un conjunto de opciones de usuario o de diseño, como un 'estilo' o un 'tema' (patrones de separación de palabras, nombres de meses y partes de documentos, comillas y puntuación, páginas geometría), y dado que la documentación de Biblatex cree que el australiano es un idioma ("conocido por Polyglossia"), ¿por qué no convertirlo en uno?

gloss-australian.ldf, que tiene solo gloss-english.ldfalgunos ajustes menores:

\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, idioma configurado australianen Polyglossia que proporciona el formato DMY en Biblatex, con datetime2paquete para restablecer \todaylo que debería ser (para el título) y csquotespaquete para las comillas.

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

Resultado: fechas australianas

Cambiar el idioma para englishdar el formato MDY de cita/bib

\setmainlanguage{english}

El inglés por defecto es americano.

información relacionada