如何将日期时间月份名称转换为大写?

如何将日期时间月份名称转换为大写?

我正在尝试创建一个日期样式,其结果是

2020 年 6 月 1 日

\documentclass{article}
\usepackage[USenglish]{babel}
\usepackage[showseconds=false,useregional=text,calc]{datetime2}
\DTMnewdatestyle{mydatestyle}
{
    \renewcommand*{\DTMdisplaydate}[4]{
        \DTMtwodigits{##3} \MakeUppercase{\DTMshortmonthname{##2}} ##1}
    \renewcommand*{\DTMDisplaydate}{\DTMdisplaydate}
}
\begin{document}

\DTMsetdatestyle{mydatestyle}
\today

\end{document}

但无论我把\MakeUppercase它绕到哪里,它都会给我

2020 年 6 月 1 日

有没有办法简单地改变日期的大小写而不需要重新定义月份名称?(我无法用我的例子来解决这个问题datetime2,但那里的答案却是开箱即用的。

答案1

这是因为\DTMshortmonthname(像许多其他人一样)是通过datetime2-calc包定义的,并且强壮的。您可以使用特定于语言的替代方案\DTMenglishshortmonthname,也可以定义自己的替代\MYshortmonthname方案,该方案并不强大,但可以与以下方案一起使用\MyUppercase

在此处输入图片描述

\documentclass{article}

\usepackage[USenglish]{babel}
\usepackage[showseconds=false,useregional=text,calc]{datetime2}

\DTMnewdatestyle{mydatestyle}{%
  \renewcommand*{\DTMdisplaydate}[4]{%
    \DTMtwodigits{##3} \MakeUppercase{\MYshortmonthname{##2}} ##1}% ...or \DTMenglishshortmonthname
  \renewcommand*{\DTMDisplaydate}{\DTMdisplaydate}%
}

\newcommand{\MYshortmonthname}[1]{%
  \ifcase#1% 0
    \or Jan%
    \or Feb%
    \or Mar%
    \or Apr%
    \or May%
    \or Jun%
    \or Jul%
    \or Aug%
    \or Sep%
    \or Oct%
    \or Nov%
    \or Dec%
  \fi
}

\begin{document}

\DTMsetdatestyle{mydatestyle}
\today

\end{document}

相关内容