大写月份名称

大写月份名称

可能重复:
我如何“取消保护”某个论点?

我正在尝试将日期打印在文档的标题页上NOVEMBER 2012。我使用datetime 包将日期格式化为月份名称-年份,但我无法将月份名称大写。

这是我的镜头:

\documentclass{minimal}
\usepackage{datetime}

\begin{document}
\newdateformat{mydate}{\monthname~\THEYEAR}
\MakeUppercase{\mydate\today}
\end{document}

这无法将月份名称大写。我猜原因是被重新定义为宏,并且在定义链中的某个地方\today有一个。我意识到一个可能的解决方法是不使用并自行定义。但我想知道有人能想出一个使用 的简洁解决方案吗?\protectdatetime\todaydatetime

答案1

\MakeUppercase需要可扩展的命令。的宏远datetime不能扩展(保护宏、可选参数、赋值等)。如果您不需要可扩展上下文中的日期,那么月份名称可以重新定义为大写字符串,例如:

\documentclass{minimal}
\usepackage{datetime}

\begin{document}
\newdateformat{mydate}{\monthname~\THEYEAR}
\begingroup
  \makeatletter
  \renewcommand*{\monthnameenglish}[1][\month]{%
    \@orgargctr=#1\relax
    \ifcase\@orgargctr
      \PackageError{datetime}%
        {Invalid Month number \the\@orgargctr}%
        {Month numbers should go from 1 (January) to 12 (December)}%
    \or JANUARY\or FEBRUARY\or MARCH\or APRIL\or MAY\or JUNE\or JULY%
    \or AUGUST\or SEPTEMBER\or OCTOBER\or NOVEMBER\or DECEMBER%
    \else
      \PackageError{datetime}%
        {Invalid Month number \the\@orgargctr}%
        {Month numbers should go from 1 (January) to 12 (December)}%
    \fi
  }%
  \mydate\today
\endgroup
\end{document}

结果

相关内容