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 autolang
y langid
y 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 australian
estilo).
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 australian
a babel y luego cambiar el idioma australian
antes 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 USenglish
formato utilizan comillas dobles y mantienen la puntuación final dentro de las comillas, mientras que las impresas en australian
formato 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}
Cuando se omite el langid
campo, 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.lbx
hereda 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 american
si 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 \ProvidesFile
arriba y \endinput
abajo. 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.lbx
y 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.ldf
archivo de definición de idioma se establece \english@ordinalmonthday
en falso (y también \if@british@locale
es falso, por lo que \today
se redefine como formato americano).
En cualquier caso, Biblatex lo ve english
como 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.ldf
algunos 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 australian
en Polyglossia que proporciona el formato DMY en Biblatex, con datetime2
paquete para restablecer \today
lo que debería ser (para el título) y csquotes
paquete 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}
Cambiar el idioma para english
dar el formato MDY de cita/bib
\setmainlanguage{english}