
Я хотел бы язык дат в документе, контролируемом пакетом. Кажется, это datetime2
единственный современный пакет, который делает это. Однако иногда мне нужно отображать только день и месяц без года, т.е.
21th March
Возможно ли это? Я знаю, что есть недокументированный (!) showdayofmonth
флаг (Формат месяца/года в латексе), который делает это для дня, но я не смог найти ничего похожего для года.
Может мне попробовать другой пакет? Может быть babel
? Что бы вы посоветовали?
МВЭ
\documentclass{scrbook}
\usepackage[english,main=british]{babel}
\usepackage[useregional]{datetime2}
\begin{document}
\DTMDisplaydate{0}{2}{10}{-1}
\end{document}
решение1
Редактировать: есть недокументированный showyear
ключ. Вы можете применить его для одного языка, используя, например, \DTMsetbool{en-GB}{showyear}{false}
или для всех языков, используя \DTMlangsetup{showyear=false}
. Вторая версия выдает предупреждение, поскольку ключ не применим к некоторым регионам в иерархии, таким как english-base
. Это предупреждение можно отключить, используя \DTMlangsetup*
(см.datetime2 -- Предупреждения при использовании настройки showyear).
Этот параметр изменяет поведение \DTMDisplaydate
всего документа, но вы можете сбросить его после использования.
МВЭ:
\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
макроса.
МВЭ:
\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
Я представляюсь \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}