datetime causa formato de data incorreto mesmo quando o babel é carregado primeiro

datetime causa formato de data incorreto mesmo quando o babel é carregado primeiro

De acordo com o manual do pacote, datetimesuporta formatos de data sensíveis ao idioma, desde que babelseja carregado primeiro. O exemplo na página 2 é:

\usepackage[francais]{babel}
\usepackage{datetime}

No entanto, o código a seguir produz resultados incorretos:

\documentclass{article}
\usepackage[welsh]{babel}
\usepackage{datetime}

\begin{document}

  \today

\end{document}

Data não inteiramente galesa

A remoção datetimeproduz um resultado que, embora não seja realmente correto, é pelo menos menos incorreto:

Data galesa incompleta

Presumo que isso seja um bug. Mas é um bug no datetimesuporte babeldo Welsh ou ambos? (Ou qualquer outra coisa, mas essas parecem ser as possibilidades mais prováveis.)

Esclarecimento: a questão aqui é por que obtenho resultados diferentes nos dois casos. O fato de babela tradução de não ser perfeita é uma questão simples de localização incompleta. O que estou perguntando é por que a vizé adicionado quando datetimeé carregado. Certamente não é galês, pois o alfabeto não contém nem 'v' nem 'z' e, embora 'a' seja uma palavra galesa, não pertence aqui.

Minha hipótese atual é que o bug é um esforço conjunto. Primeiro, babelaparentemente omite a definição dos ordinais galeses. Em segundo lugar, datetimenão trata adequadamente os casos de suporte linguístico deficiente. (Ou simplesmente não há como datetimefazer isso. Mas espero que não seja assim.)

Responder1

O arquivo dt-welsh.defparece ser o culpado, pois isso acontece

\DeclareRobustCommand*\datewelsh{%
\renewcommand{\formatdate}[3]{%
\@day=##1\relax\@month=##2\relax\@year=##3\relax
\ifnum\@day=1\relax 1\/$^{\mathrm{a\tilde{n}}}$\else
\number\@day\fi \space a\space viz\space
\monthnamewelsh[\@month]\space\number\@year}}%

Se eu redefinir \datewelshno documento como no exemplo a seguir

\documentclass{article}
\usepackage[welsh]{babel}
\usepackage{datetime}

\makeatletter
\DeclareRobustCommand*\datewelsh{%
\renewcommand{\formatdate}[3]{%
\@day=##1\relax\@month=##2\relax\@year=##3\relax
\ifnum\@day=1\relax 1\/$^{\mathrm{a\tilde{n}}}$\else
\number\@day\fi \space %a\space viz\space
\monthnamewelsh[\@month]\space\number\@year}}%
\makeatother

\begin{document}
\day=0
\loop\ifnum\day<10
  \advance\day by 1
  \today\endgraf
\repeat

\end{document}

eu recebo

insira a descrição da imagem aqui

Não sabendo como as datas galesas deveriam aparecer, isso é o melhor que posso fazer.

A parte “a viz” parece vir do bretão (ver dt-breton.def).

Responder2

EDITAR:Para corrigir o problema anterior com espaçamento falso, altere o nome do arquivo \ProvidesFilepara dt-welsh.defe também renomeie o próprio arquivo (a resposta do egreg à minha pergunta sobre isso):

Esta é uma versão fixa dt-welsh.defbaseada emresposta da egrégia,comentário de egrege o atualizado gloss-welsh.ldfda nova versão do polyglossia.

A licença não me permite publicar uma versão modificada dt-welsh.defe não consigo descobrir uma maneira limpa de carregar um arquivo com nome diferente. Este é, portanto, nomeado dt-cymraeg.def, masfuncionará apenas se renomeado para dt-welsh.def.Ele não pode ser distribuído dessa forma, mas pode ser usado dessa forma em seu próprio sistema.

Esperançosamente, datetimeeventualmente será corrigido para fazer algo um pouco mais próximo de produzir a saída correta sem a necessidade disso. Certamente, o pacote foi atualizado para não incluir o a viz, o que é alguma coisa. Os bugs atuais foram copiados babele o autor, acredito, está ciente deles. Talvez isso ajude, fornecendo padrões corretos para o galês.

%% dt-cymraeg.def
%% Additions and changes are copyright 2015 Clea F. Rees
%% Code from dt-welsh.def copyright 2015 Nicola Talbot (see below)
%% Code from gloss-welsh.ldf copyright 2008-2010 François Charette,
%% 2013 Élie Roux, 2011-2015 Arthur Reutenauer
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
%
% The Current Maintainer of this work is Clea F. Rees.
%
% This work consists of the file dt-cymraeg.def
%
% The file dt-cymraeg.def is a derived work under the terms of the
% LPPL. It is based on dt-welsh.def which is part of the datetime
% package by Nicola Talbot. A copy of datetime, including the
% unmodified version of dt-welsh.def is available from
% http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=datetime.
%
% The modifications are also derivative under the terms of the LPPL. They
% are based on code modified from gloss-welsh.ldf which is part of
% polyglossia 2015/08/06 v1.42.0 by François Charette, Élie Roux
% and Arthur Reutenauer. A copy of polyglossia, including gloss-welsh.ldf
% is available
% from http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=polyglossia.
%%
\ProvidesFile{dt-cymraeg.def}[$Id: dt-cymraeg.def 3789 2015-08-31 02:01:23Z cfrees $]
\providecommand*\dt@cymraeg@neges{%
  \PackageWarning{dt-cymraeg.def}{This is a MODIFIED version of dt-welsh.def. Breakage should under no circumstances be blamed on the author of the original file.}}
\dt@cymraeg@neges
\renewcommand*\dt@cymraeg@neges{\relax}
\providecommand*\ordinaldatewelsh[1]{%
  #1\ifcase#1\relax%
  \or\textsuperscript{af}%
  \or\textsuperscript{ail}%
  \or\textsuperscript{ydd}%
  \or\textsuperscript{ydd}%
  \or\textsuperscript{ed}%
  \or\textsuperscript{ed}%
  \or\textsuperscript{fed}%
  \or\textsuperscript{fed}%
  \or\textsuperscript{fed}%
  \or\textsuperscript{fed}%
  \or\textsuperscript{eg}%
  \or\textsuperscript{fed}%
  \or\textsuperscript{eg}%
  \or\textsuperscript{eg}%
  \or\textsuperscript{fed}%
  \or\textsuperscript{eg}%
  \or\textsuperscript{eg}%
  \or\textsuperscript{fed}%
  \or\textsuperscript{eg}%
  \or\textsuperscript{fed}%
  \else\textsuperscript{ain}\fi}%
\global\let\ordinaldatewelsh\ordinaldatewelsh
\providecommand\dayofweeknameidwelsh[1]{%
dydd\space%
\ifcase#1\relax
\or Sul%
\or Llun%
\or Mawrth%
\or Mercher%
\or Iau%
\or Gwener%
\or Sadwrn%
\fi}%
\global\let\dayofweeknameidwelsh\dayofweeknameidwelsh
\providecommand{\shortdayofweeknameidwelsh}[1]{%
\ifcase#1\relax%
\or Sul%
\or Llun%
\or Maw.%
\or Mer.%
\or Iau%
\or Gwen.%
\or Sad.%
\fi}%
\global\let\shortdayofweeknameidwelsh\shortdayofweeknameidwelsh
\providecommand{\monthnamewelsh}[1][\month]{%
\@orgargctr=#1\relax%
\ifcase\@orgargctr%
\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
Month numbers should go from 1 to 12}%
\or Ionawr%
\or Chwefror%
\or Mawrth%
\or Ebrill%
\or Mai%
\or Mehefin%
\or Gorffennaf%
\or Awst%
\or Medi%
\or Hydref%
\or Tachwedd%
\or Rhagfyr%
\else%
\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
Month numbers should go from 1 to 12}%
\fi}%
\global\let\monthnamewelsh\monthnamewelsh
\DeclareRobustCommand*\datewelsh{%
\renewcommand{\formatdate}[3]{%
  \@day=##1\relax\@month=##2\relax\@year=##3\relax
  \number\@day%
  \ifcase\@day\relax%
  \or\textsuperscript{af}%
  \or\textsuperscript{ail}%
  \or\textsuperscript{ydd}%
  \or\textsuperscript{ydd}%
  \or\textsuperscript{ed}%
  \or\textsuperscript{ed}%
  \or\textsuperscript{fed}%
  \or\textsuperscript{fed}%
  \or\textsuperscript{fed}%
  \or\textsuperscript{fed}%
  \or\textsuperscript{eg}%
  \or\textsuperscript{fed}%
  \or\textsuperscript{eg}%
  \or\textsuperscript{eg}%
  \or\textsuperscript{fed}%
  \or\textsuperscript{eg}%
  \or\textsuperscript{eg}%
  \or\textsuperscript{fed}%
  \or\textsuperscript{eg}%
  \or\textsuperscript{fed}%
  \else\textsuperscript{ain}%
  \fi%
  \space%
  \monthnamewelsh[\@month]\space\number\@year}%
}%
\global\let\datewelsh\datewelsh
\providecommand{\shortmonthnamewelsh}[1][\month]{%
\@orgargctr=#1\relax%
\ifcase\@orgargctr%
\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
Month numbers should go from 1 (jan.) to 12 (dec.)}% rhai o Yale ond 'dw i ddim yn cytuno â'i rhai Saesneg chwaith! (efaillai bod nhw'n safonol a ffurfiol?)
\or Ion.%
\or Chwe.% Chwef. yn ôl Yale??!!
\or Maw.%
\or Ebr.%
\or Mai%
\or Meh.%
\or Gorff.%
\or Awst.%
\or Medi%
\or Hyd.%
\or Tach.%
\or Rhag.%
\else%
\PackageError{datetime}{Invalid Month number \the\@orgargctr}{%
Month numbers should go from 1 (jan.) to 12 (dec.)}%
\fi}
\endinput
%%
%% End of file dt-cymraeg.def.

Se quiser usar esta versão, copie o conteúdo para um arquivo em seu sistema. Salve o arquivo como dt-welsh.defe coloque-o em sua árvore TEXMF pessoal ou em seu diretório de trabalho.Anote para não redistribuir sem renomear o arquivo.Então as coisas devem funcionar bem.Faça outra observação para lembrar que você está usando uma versão modificada que, portanto, não se beneficiará de nenhuma atualização ou correção de bugs no pacote.

Em particular,NÃO relate bugs ao datetimeautor do sem verificar se você pode produzi-los SEM este arquivo na sua árvore TEXMF.

Até onde eu sei, isso acerta os formatos de data padrão, bem como os formatos longo e curto:

datas fixas para galês

informação relacionada