我希望在由包控制的文档中使用日期语言。这似乎datetime2
是目前唯一一个可以做这件事的包。但是,有时我只需要显示日期和月份而不显示年份,即
21th March
这可能吗?我知道有一个未记录的(!)showdayofmonth
标志(Latex 中的月/年格式) 可以实现当天的功能,但我找不到一年的类似功能。
也许我应该尝试另一个包?也许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}