datetime causa un formato de fecha incorrecto incluso cuando babel se carga primero

datetime causa un formato de fecha incorrecto incluso cuando babel se carga primero

Según el manual del paquete, datetimeadmite formatos de fecha sensibles al idioma siempre que babelse cargue primero. El ejemplo de la página 2 es:

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

Sin embargo, el siguiente código produce resultados incorrectos:

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

\begin{document}

  \today

\end{document}

Cita no del todo galesa

La eliminación datetimeproduce un resultado que, si bien no es realmente correcto, es al menos menos incorrecto:

Fecha galesa incompleta

Supongo que esto es un error. Pero, ¿se trata de un error en datetimeel babelsoporte del galés o de ambos? (O algo más, pero esas parecen las posibilidades más probables).

Aclaración: el problema aquí es por qué obtengo resultados diferentes en los dos casos. El hecho de que babella traducción de 's no sea perfecta es una simple cuestión de localización incompleta. Lo que pregunto es por qué a vizse agrega cuando datetimese carga. Ciertamente no es galés, ya que el alfabeto no contiene ni 'v' ni 'z' y, aunque 'a' es una palabra galesa, no pertenece aquí.

Mi hipótesis actual es que el error es un esfuerzo conjunto. En primer lugar, babelaparentemente omite definir los ordinales galeses. En segundo lugar, datetimeno maneja adecuadamente los casos de empobrecimiento del apoyo lingüístico. (O simplemente no hay forma de datetimehacer esto. Pero espero que no sea así).

Respuesta1

El archivo dt-welsh.defparece tener la culpa, ya que no

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

Si redefino \datewelshen el documento como en el siguiente ejemplo

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

yo obtengo

ingrese la descripción de la imagen aquí

Sin saber cómo deberían aparecer las fechas galesas, esto es lo mejor que puedo hacer.

La parte “a viz” parece provenir del bretón (ver dt-breton.def).

Respuesta2

EDITAR:Para solucionar el problema anterior con espacios falsos, cambie el nombre del archivo \ProvidesFiley dt-welsh.defcambie el nombre del archivo en sí (La respuesta de egreg a mi pregunta sobre esto.):

Esta es una versión fija dt-welsh.defbasada enla respuesta de egreg,comentario de egregy la actualizada gloss-welsh.ldfdesde la nueva versión de polyglossia.

La licencia no me permite publicar una versión modificada dt-welsh.defy no puedo encontrar una manera limpia de cargar un archivo con un nombre diferente. Por lo tanto, esto se llama dt-cymraeg.defperofuncionará sólo si se le cambia el nombre a dt-welsh.def.No se puede distribuir de esa forma, pero se puede utilizar de esa forma en su propio sistema.

Con suerte, datetimeeventualmente se solucionará para hacer algo un poco más cercano a producir una salida correcta sin la necesidad de esto. Ciertamente, el paquete se ha actualizado para no incluir el a viz, que ya es algo. Los errores actuales se han copiado babely creo que el autor está al tanto de ellos. Quizás esto ayude al proporcionar patrones correctos para el 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.

Si desea utilizar esta versión, copie el contenido a un archivo en su sistema. Guarde el archivo como dt-welsh.defy colóquelo en su árbol TEXMF personal o en su directorio de trabajo.Tome nota de no redistribuir sin cambiar el nombre del archivo.Entonces las cosas deberían funcionar bien.Tome otra nota para recordar que está utilizando una versión modificada que, por lo tanto, no se beneficiará de ninguna actualización o corrección de errores del paquete.

En particular,NO informe errores al datetimeautor de sin comprobar que puede producirlos SIN este archivo en su árbol TEXMF.

Hasta donde puedo decir, esto hace que los formatos de fecha estándar sean correctos, así como los formularios largos y cortos:

fechas fijas para galés

información relacionada