datetime приводит к неправильному формату даты, даже если babel загружен первым

datetime приводит к неправильному формату даты, даже если babel загружен первым

Согласно руководству по пакету, datetimeподдерживает форматы даты, зависящие от языка, при условии, что babelон загружен первым. Пример на странице 2:

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

Однако следующий код дает неверные результаты:

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

\begin{document}

  \today

\end{document}

Не совсем валлийский свидание

Удаление datetimeдает результат, который, хотя и не совсем правильный, по крайней мере менее неверный:

Неполная валлийская дата

Я предполагаю, что это ошибка. Но это ошибка в datetimeподдержке 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

РЕДАКТИРОВАТЬ:Чтобы исправить возникшую ранее проблему с ложными интервалами, измените имя файла \ProvidesFileнаdt-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.

Насколько я могу судить, здесь правильно отображаются стандартные форматы дат, а также длинные и короткие формы:

фиксированные даты для валлийцев

Связанный контент