即使首先加载了 babel,datetime 也会导致日期格式不正确

即使首先加载了 babel,datetime 也会导致日期格式不正确

根据包手册,datetime只要先加载,即可支持语言敏感的日期格式babel。第 2 页的示例为:

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

但是,以下代码会产生不正确的结果:

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

\begin{document}

  \today

\end{document}

并非完全是威尔士约会

删除datetime会产生一个结果,尽管它实际上并不正确,但至少不那么错误:

不完整的威尔士日期

datetime我认为这是一个错误。但是,这是or对威尔士语的支持中的错误,babel还是两者兼而有之?(或者是其他原因,但这些似乎是最有可能的。)

澄清:这里的问题是为什么我在两种情况下得到不同的输出。babel的翻译不完美,这直接是由于本地化不完整。我问的是为什么在加载a viz时添加datetime。这肯定不是威尔士语,因为字母表中既不包含“v”也不包含“z”,尽管“a”是威尔士语单词,但它不属于这里。

我目前的假设是,这个错误是双方共同努力的结果。首先,babel它似乎忽略了定义威尔士语序数词。其次,datetime它没有适当地处理语言支持不足的情况。(或者根本就没有办法datetime做到这一点。但我希望事实并非如此。)

答案1

该文件dt-welsh.def似乎有问题,因为它确实

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

如果我\datewelsh在文档中重新定义,如以下示例所示

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

我明白了

在此处输入图片描述

不知道威尔士的日期应该如何出现,这是我能做的最好的。

“a viz”部分似乎来自布列塔尼语(参见dt-breton.def)。

答案2

编辑:要修复先前出现的虚假间距问题,请将 中的文件名称更改\ProvidesFiledt-welsh.def,并重命名文件本身(egreg 对我这个问题的回答):

dt-welsh.def这是基于的修复版本egreg 的回答egreg 的评论gloss-welsh.ldf以及从新版本更新的polyglossia

许可证不允许我发布修改后的版本dt-welsh.def,我无法找到一种干净的方式来加载不同名称的文件。因此,它被命名dt-cymraeg.def为但仅当重命名为 时才有效dt-welsh.def它不能以该形式分发,但可以在您自己的系统上以该形式使用。

希望datetime最终能修复,以便更接近于生成正确的输出,而无需这样做。当然,该软件包已更新为不包含a viz,这是件好事。当前的错误是从中复制而来的babel,我相信作者知道这些错误。也许这会通过为威尔士语提供正确的模式有所帮助。

%% 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.

如果您想使用此版本,请将内容复制到系统上的文件中。将文件另存为dt-welsh.def并将其放在您的个人 TEXMF 树或工作目录中。请注意不要在未重命名文件的情况下重新分发。那么一切就都应该正常了。再提醒一下,您使用的是一个修改版本,因此它不会从软件包的任何更新或错误修复中受益。

尤其,在没有确认你可以产生错误之前,不要向datetime作者报告错误 没有 您的 TEXMF 树中的此文件

据我所知,这可以正确获取标准日期格式以及长格式和短格式:

威尔士语的固定日期

相关内容