答案1
使用datetime
定义了一种新的日期格式
\newdateformat{〈name〉}{〈format〉}
在 〈format〉 中,你可以使用\THEDAY
、\THEMONTH
和\THEYEAR
来引用日、月和年数字。你还可以使用\twodigit
将数字转换为两位数。例如:
\newdateformat{dashdate}{%
\twodigit{\THEDAY}-\twodigit{\THEMONTH}-\THEYEAR}
使用新的datetime2
包,可以使用以下方法定义新的日期格式:
\DTMnewdatestyle{〈name〉}{〈definition〉}
这里的 〈定义〉部分应该重新定义两个命令\DTMdisplaydate
和\DTMDisplaydate
。这两个命令都有四个参数,分别代表年、月、日和星期几。如果星期几是 -1,样式应该忽略它,但是样式也可能忽略星期几,而不管它的值是什么。\twodigits
我们现在有了 而不是 ,\DTMtwodigits
它将用恰好两位数显示其(数字)参数。(因此,如果绝对值小于 10,它将在前导零中添加一个零,如果绝对值大于 99,它将修剪一个数字。)在定义日期样式时,还有另外两个命令可能会很有用:\DTMcentury
和\DTMdivhundred
。旧包中没有datetime
这两个命令的直接等效项。
要将旧dashdate
示例转换为新datetime2
格式:
\DTMnewdatestyle{dashdate}{%
\renewcommand*{\DTMdisplaydate}[4]{\DTMtwodigits{##3}-\DTMtwodigits{##2}-##1}%
\renewcommand*{\DTMDisplaydate}{\DTMdisplaydate}%
}
这里##3
是第三个参数\DTMdisplaydate
(日),##2
是第二个参数\DTMdisplaydate
(月),##1
是第一个参数\DTMdisplaydate
(年)。第四个参数被忽略。由于日期样式是数字,因此\DTMDisplaydate
设置为与相同,\DTMdisplaydate
无论日期是否出现在句子开头,样式都是相同的。
如果您想要文本日期样式,可以使用相关语言模块提供的附加命令。例如,如果您已加载英语模块您可以使用以下\DTMenglishmonthname
命令\DTMenglishordinal
的命令。(这些命令在“基本代码(datetime2-english-base.ldf)”部分中有描述。模块的文档。
手册中的例子如下datetime
:
\newdateformat{usvardate}{%
\monthname[\THEMONTH] \ordinaldate{\THEDAY}, \THEYEAR}
可以转换为datetime2
使用:
\DTMnewdatestyle{usvardate}{%
\renewcommand*{\DTMdisplaydate}[4]{\DTMenglishmonthname{##2} \DTMenglishordinal{##3}, ##1}%
\renewcommand*{\DTMDisplaydate}{\DTMdisplaydate}%
}
此样式仅在模块已加载时才有效datetime2-english
,否则命令\DTMenglishmonthname
和\DTMenglishordinal
将未定义。由于英文月份名称始终以大写字母开头,因此\DTMDisplaydate
再次设置为\DTMdisplaydate
。对于不是这种情况的语言,则\DTMDisplaydate
需要以大写字母开头。例如,使用模块datetime2-french
,您可以使用\DTMfrenchMonthname
以大写字母开头的月份名称和\DTMfrenchmonthname
小写字母开头的月份名称。
最后,使用datetime
创建\newdateformat{〈name〉}{〈format〉}
了一个名为\〈name〉
(所以\dashdate
在第一个示例和\usvardate
第二个示例中)的命令,该命令可用于切换到该格式,但使用(所以在第一个示例和第二个示例中)datetime2
设置日期格式。\DTMsetdatestyle{〈name〉}
\DTMsetdatestyle{dashdate}
\DTMsetdatestyle{usvardate}