可能重复:
我如何“取消保护”某个论点?
我正在尝试将日期打印在文档的标题页上NOVEMBER 2012
。我使用datetime
包将日期格式化为月份名称-年份,但我无法将月份名称大写。
这是我的镜头:
\documentclass{minimal}
\usepackage{datetime}
\begin{document}
\newdateformat{mydate}{\monthname~\THEYEAR}
\MakeUppercase{\mydate\today}
\end{document}
这无法将月份名称大写。我猜原因是被重新定义为宏,并且在定义链中的某个地方\today
有一个。我意识到一个可能的解决方法是不使用并自行定义。但我想知道有人能想出一个使用 的简洁解决方案吗?\protect
datetime
\today
datetime
答案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}