Дата без года

Sep 20 2020

Мне нужен язык дат в документе, управляемом package. Похоже, что datetime2это единственный современный пакет, делающий это. Однако иногда мне нужно только отображать день и месяц без года, т.е.

21th March

Это возможно? Я знаю, что есть недокументированный (!) showdayofmonthФлаг ( формат месяца / года в латексе ), который делает это для дня, но я не мог найти аналогичного для года.

Может стоит попробовать другой пакет? Может быть babel? Что ты предлагаешь?

MWE

\documentclass{scrbook}
\usepackage[english,main=british]{babel}
\usepackage[useregional]{datetime2}

\begin{document}

\DTMDisplaydate{0}{2}{10}{-1}

\end{document}

Ответы

4 Marijn Sep 20 2020 at 20:56

Изменить: есть недокументированный showyearключ. Вы можете применить это, например, для одного языка, \DTMsetbool{en-GB}{showyear}{false}или для всех языков, использующих \DTMlangsetup{showyear=false}. Вторая версия выдает предупреждение, потому что ключ не применим к некоторым регионам в иерархии, например к english-base. Это предупреждение можно подавить с помощью \DTMlangsetup*(см. Datetime2 - Предупреждения при использовании параметра showyear ).

Этот параметр изменяет поведение \DTMDisplaydateво всем документе, но вы можете сбросить его после использования.

MWE:

\documentclass{scrbook}
\usepackage[english,main=british]{babel}
\usepackage[useregional]{datetime2}

\begin{document}

\DTMlangsetup*{showyear=false}
\DTMDisplaydate{2020}{2}{10}{-1} is the date

\DTMlangsetup*{showyear=true}
\DTMDisplaydate{2020}{2}{10}{-1} is the date

\end{document}

Результат:


Оригинальный ответ:

Вы можете определить новый формат даты без года, как описано в руководстве (например, стр. 96 и далее).

Если вы хотите использовать новый формат, вам необходимо установить его, используя \DTMsetdatestyleкоторый будет влиять \DTMDisplaydate. Не представляется возможным установить его только для одноразового использования, поэтому после этого вам нужно сбросить стиль до того, что было раньше, в MWE это en-GB(из-за main=british). Обратите внимание, что calcдля datetime2использования \DTMmonthnameмакроса необходимо добавить параметр пакета .

MWE:

\documentclass{scrbook}
\usepackage[english,main=british]{babel}
\usepackage[useregional,calc]{datetime2}

\begin{document}

\DTMnewdatestyle{noyear}{%
\renewcommand{\DTMdisplaydate}[4]{%
\DTMenglishordinal{##3} \DTMmonthname{##2}}%
}
\DTMsetdatestyle{noyear}
\DTMDisplaydate{2020}{2}{10}{-1}

\DTMsetdatestyle{en-GB}
\DTMDisplaydate{2020}{2}{10}{-1}

\end{document}

Результат:

Обратите внимание, что переопределение включает \DTMenglishordinalв себя , чтобы порядковый номер (th) не печатался как надстрочный индекс. Более международная версия находится \ordinalnumв fmtcountпакете (который поддерживает ряд европейских языков), но, насколько мне известно, только в виде надстрочного индекса.

2 StevenB.Segletes Sep 20 2020 at 21:25

Представляю \stripyearв помощь.

\documentclass{scrbook}
\usepackage[english,main=british]{babel}
\usepackage[useregional]{datetime2}
\newcommand\stripyear[1]{%
  \edef\tmp{#1}\expandafter\stripyearaux\tmp\relax}
\def\stripyearaux#1 #2 #3\relax{#1 #2}
\begin{document}
\stripyear{\DTMDisplaydate{2020}{2}{10}{-1}}.
\end{document}