Texto principal e bibliografia em dois idiomas, mas com formato de data alternativo

Texto principal e bibliografia em dois idiomas, mas com formato de data alternativo

Estou escrevendo um texto em inglês americano e alemão (nova ortografia), então uso \usepackage[ngerman,USenglish]{babel}. A bibliografia do biblatex também contém referências em inglês e alemão. Preciso das regras de hifenização de cada idioma na bibliografia, então uso \usepackage[backend=biber,language=autobib,autolang=hyphen]{biblatex}e depois especifico o idioma das entradas bibliográficas individuais como este: langid = {ngerman}.

Gostaria que todas as datas, entretanto, estivessem no formato australiano (dd seg. AAAA). Como posso obter esse formato de data (principalmente na bibliografia)?

(Se eu não precisasse das regras de hifenização alemã na bibliografia, simplesmente removeria autolangand langidand use \usepackage[backend=biber,language=australian{biblatex}, embora isso também mudasse o estilo de hifenização, citações, vírgulas, etc. na bibliografia para australianstyle.)

Responder1

Não conheço uma maneira fácil de fazer com que todas as datas de todo o documento sigam o formato australiano, mas sei como aplicar o formato de data australiano à bibliografia sem afetar o estilo de hifenização.

Você pode adicionar australianao babel e depois mudar o idioma australianantes de imprimir a bibliografia. Então todas as datas na bibliografia serão no estilo australiano.

Esteja ciente de que esta solução também afeta outros fatores de estilo na bibliografia, como vírgulas seriais (como descrito aqui) e formatação de aspas. Por exemplo, referências a artigos impressos em USenglishformato usam aspas duplas e mantêm a pontuação final dentro das aspas, enquanto aqueles impressos em australianformato usam aspas simples e mantêm a pontuação final fora das aspas:

"Título do artigo em inglês americano."
'Título do artigo em inglês australiano'.

O código a seguir exemplifica o 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}

A entrada em inglês segue as regras de hifenização do inglês. A entrada em alemão segue as regras de hifenização alemãs. Ambas as entradas seguem o formato de data australiano.

Quando o langidcampo é omitido, o estilo de hifenização é padronizado para o idioma atualmente selecionado (neste exemplo, australian).

Responder2

Graças aresposta de moewe aqui, consegui descobrir como mudartodas as datas longas em todo o documentopara o formato australiano. Eu então descobri como exibirtodas as datas curtasno formato d/m/y (usando o código encontrado em british.lbx, de onde australian.lbxherda seu formato de data abreviada). Esta resposta altera os formatos de data (curta e longa)e nada mais. Aplica o estilo do dia anterior ao mês a um documento inteiro escrito em inglês americano.

A maneira mais simples é inserir isto no 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}}}}%
}

Eu escrevi o código com o alias USenglish, mas você pode substituí-lo por, americanse desejar. São dois nomes para o mesmo estilo. Você precisa ter certeza de que é o mesmo alias usado ao chamar \usepackage{babel}. (Se você alterar as propriedades de USenglish, não espere que as alterações sejam transferidas para american!)

Uma solução mais elegante é criar um arquivo .lbx para ficar mais organizado e tornar esse estilo facilmente acessível em documentos futuros. O código difere apenas no início e no final. Você precisa adicionar \ProvidesFilena parte superior e \endinputinferior. Em seguida, adicione dois \Inherit...comandos e altere quaisquer \Define...comandos para 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

Salve como USenglish-dmy.lbxe adicione em seu preâmbulo: \DeclareLanguageMapping{USenglish}{USenglish-dmy}. É isso! Agora todas as datas devem ter o dia anterior ao mês e nada mais (por exemplo, hifenização ou estilos de cotação) é afetado.

Responder3

Tive que usar \DefineBibliographyExtras{english}para que a solução alternativa funcionasse na minha configuração (Biblatex + Polyglossia).

A Polyglossia, via processamento de opções, entende o australiano como uma variante do inglês,

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

mas isso não muda nada. A variante não entra no Biblatex e, infelizmente, o gloss-english.ldfarquivo de definição de idioma é definido \english@ordinalmonthdaycomo falso (e também \if@british@localeé falso, então \todayé redefinido como formato americano).

Em qualquer caso, o Biblatex é visto englishcomo uma linguagem poliglossia e, portanto, as datas nas citações e referências aparecem no formato americano (que é o padrão para english).

O Biblatex por si só, sem poliglossia, entende as datas australianas.

Então: como a composição tipográfica em uma linguagem é, no final das contas, um conjunto de opções do usuário ou escolhas de design, como um 'estilo' ou um 'tema' (padrões de hifenização, nomes de meses e partes de documentos, aspas e pontuação, página geometria), e uma vez que a documentação do Biblatex pensa que o australiano é uma língua ("conhecida pela Polyglossia"), por que não torná-lo uma?

gloss-australian.ldf, que é apenas gloss-english.ldfcom alguns pequenos ajustes:

\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 definido australianem Polyglossia dando o formato DMY em Biblatex, com datetime2pacote para voltar \todayao que deveria ser (para o título) e csquotespacote para as aspas.

\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: datas australianas

Alterar o idioma para englishfornece o formato cite/bib MDY

\setmainlanguage{english}

inglês padrão é americano

informação relacionada