我正在编写一个文档类,该类使用该datetime2
包在文档标题中写入月年日期。以下是 MWE:
\begin{filecontents}[overwrite]{customclass.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{customclass}[2014/12/16 Custom class]
\LoadClassWithOptions{article}
\RequirePackage{babel}
\RequirePackage[useregional]{datetime2}
\DTMlangsetup*{showdayofmonth=false}
\renewcommand{\maketitle}[0]{\today}
\end{filecontents}
\documentclass[<language>]{customclass}
\begin{document}
\maketitle
\end{document}
我遇到的问题是,许多语言不将月份名称大写,而理想的行为是将其大写,因为它是一个标题(例如“Marzo de 2022”而不是“marzo de 2022”)。
我已经尝试使用\expandafter\MakeUppercase
并mfirstuc
按照说明使用包这里,但这些都不起作用(我猜是因为\today
命令非常复杂,所以不容易扩展?)。我也不能硬编码月份名称,因为我希望这个类能够独立于语言工作,而且我经常使用四种语言来排版文档(法语、意大利语、西班牙语和英语,其中三种显示此问题)。
我非常希望得到一点帮助!
答案1
通过创建一个新样式(例如mydate
),以大写字母(带有\DTMMonthname
)显示月份日期,您可以实现目标。我们还需要包日期时间计算将当前月份日期的数值转换为字母表示的月份。
在 中\DTMdisplaydate
,第二个参数是月份数字(3 表示三月),第一个参数是年份。
编辑:修复了意大利语中存在的错误datetime2包不提供大写的月份名称。
编辑2:我还处理了西班牙语的情况,将“Month Year”输出替换为“Month de Year”(例如 Marzo de 2023)。
\begin{filecontents}[overwrite]{customclass.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{customclass}[2014/12/16 Custom class]
\LoadClassWithOptions{article}
\RequirePackage{babel}
\RequirePackage{datetime2}
\RequirePackage{datetime2-calc}
%% Correction of a bug: in italian, Uppercase months are missing in datetime2
\newcommand*{\DTMitalianMonthname}[1]{%
\ifcase#1
\or
Gennaio%
\or
Febbraio%
\or
Marzo%
\or
Aprile%
\or
Maggio%
\or
Giugno%
\or
Luglio%
\or
Agosto%
\or
Settembre%
\or
Ottobre%
\or
Novembre%
\or
Dicembre%
\fi
}
%% End of bug correction
\DTMnewdatestyle{mydate}{%
\renewcommand*{\DTMdisplaydate}[4]{%
\DTMMonthname{##2} \iflanguage{spanish}{de }{}##1%
}}
\DTMsetdatestyle{mydate}
\renewcommand{\maketitle}{\today}
\end{filecontents}
\documentclass[french]{customclass}
\begin{document}
\maketitle
\end{document}
和\documentclass[spanish]{customclass}
:
和\documentclass[english]{customclass}
: