这datetime
包裹现已过时,我想切换到较新的datetime2
包裹,但我无法重现使用该datetime
包所实现的行为。以下 MWE 适用于该datetime
包,但会导致该包出现各种问题datetime2
。
\documentclass{article}
\usepackage{datetime}
%\usepackage{datetime2}
\computedayofweek{19}{1}{2016}
\newcommand{\mydayname}{\dayofweeknameid{\the\dayofweek}}
\newcommand{\mydaynumber}{\ordinaldate{19}}
\newcommand{\mymonthname}{\monthname[1]}
\begin{document}
\mydayname, \mydaynumber \mymonthname
\end{document}
是否可以重新定义\mydayname
、\mydaynumber
和\mymonthname
(可以在定义之前/之后添加代码),以便它们产生与datetime2
包相同的结果?
答案1
如果您只需要复制,则应执行以下操作:
1月19 日星期二
\documentclass{article}
\usepackage[calc]{datetime2}
\usepackage{fmtcount}
\DTMsavedate{mydate}{2016-01-19}% \DTMsavenow{\mydate}
\newcommand{\mydayname}{\pgfcalendarweekdayname{\DTMfetchdow{mydate}}}
\newcommand{\mydaynumber}{\ordinalnum{\DTMfetchday{mydate}}}
\newcommand{\mymonthname}{\pgfcalendarmonthname{\DTMfetchmonth{mydate}}}
\begin{document}
\mydayname, \mydaynumber{} \mymonthname
\end{document}
datetime
用于加载(需要)fmtcount
,现在需要手动加载才能使用\ordinalnum
。此外,为了计算星期几的值,您需要添加calc
包选项。这将加载并允许您访问pgfcalender
模块,从中可以使用可扩展的\pgfcalendarweekdayname
和\pgfcalendarmonthname
(如果需要,包括其他模块)。
答案2
您可以使用以下提供的某一种小端日期样式来复制该格式:datetime2-english
。 例如:
\documentclass{article}
\usepackage[en-GB,showdow]{datetime2}
\DTMlangsetup[en-GB]{dowdaysep={,\space},ord=raise,showyear=false}
\begin{document}
\DTMdate{2016-01-19}
\end{document}
生成:
更一般地,datetime
提供datetime2
用于日期样式的特定语言命令(以确保单词与日期语法相匹配,而不管周围的语言如何)和用于独立使用的语言敏感命令。
特定语言
特定于语言的命令定义在dt-
方言.def
随附的文件datetime
和独立安装的文件datetime2-
语言提供的模块datetime2
。
月份名称
(也可以看看如何在 datetime2 中提取月份名称?)
datetime
每个文件
dt-
方言.def
提供命令\monthname
方言它采用可选参数,表示月份数。例如,使用dt-british.def
:\monthnamebritish[1]
(实际上,它使用了
\monthnameenglish
提供的datetime-defaults.sty
)。某些语言有替代的月份名称,可能已使用 实现
datetime
。例如,dt-usorbian.def
提供\monthnamenewusorbian
和\monthnameoldusorbian
并将其\monthnameusorbian
设置为 的同义词\monthnamenewusorbian
。datetime2
各语言文件
datetime2-
语言.ldf
(或者datetime2-
语言-
修饰符.ldf
)提供命令\DTM
语言monthname
它采用强制参数,表示月份数。例如,使用datetime2-english-base.ldf
:\DTMenglishmonthname{1}
同样,支持月份名称不同的地区。例如,
datetime2-usorbian
提供\DTMusorbiannewmonthname
并最初定义为\DTMusorbianoldmonthname
。此模块提供选项,可以取值或在样式之间切换。同样,\DTMusorbianmonthname
\DTMusorbiannewmonthname
style
new
old
datetime2-serbian
提供拉丁和西里尔字母的月份名称(datetime
'sdt-serbian.def
不提供)以及alphabet
在它们之间切换的选项。
月份名称缩写
一些但不是所有的语言日期样式提供缩写的月份名称。如果在 中支持它们,datetime
那么在 中也支持它们datetime2
。缺乏支持的原因很简单,因为我并不精通所有已知的语言,也不知道正确的缩写。 使用的模块化方法的优点datetime2
是每个语言模块都可以由熟悉该语言的人来维护,因此datetime2
已采用的模块现在可能添加了 中不存在的支持datetime
。
datetime
在得到支持的情况下,
dt-
方言.def
文件提供命令\shortmonthname
方言它接受一个可选参数。例如:\shortmonthnamebritish[1]
datetime2
在得到支持的情况下,
datetime2-
语言.ldf
文件提供命令\DTM
语言shortmonthname
接受一个强制参数。例如:\DTMenglishshortmonthname{1}
星期名称
与缩写的月份名称一样,并非所有语言设置都支持星期几名称(出于同样的原因)。
datetime
在支持的地方,
dt-
方言.def
提供\dayofweeknameid
方言,带有一个强制参数,该参数必须是从 1(星期日)到 7(星期六)的数字。例如\dayofweeknameidbritish{3}
与月份名称一样,也可能有缩写版本
\shortdayofweeknameid
方言。可以使用以下公式从当前日期计算星期几索引
\computedayofweek{
天}{
月}{
年}
结果存储在寄存器中\dayofweek
(就像在 MWE 中一样)。实现星期几的日期样式需要使用\computedayofweek
,这意味着它们必须很强大。datetime2
在支持的地方,
datetime2-
语言.ldf
提供\DTM
语言weekdayname
它接受一个强制参数,该参数必须在 0(星期一)到 6(星期日)的范围内。它使用与 不同的索引系统,以便datetime
与 兼容pgfcalendar
。例如\DTMenglishweekdayname{1}
与月份名称一样,也可能有缩写版本
\DTM
语言shortweekdayname
。与 不同
datetime
,datetime2
日期样式不会计算星期几索引,因为在传递给样式之前应该已经计算过了。这意味着像\today
和 这样的命令可以在可扩展的上下文中使用。当通过界面使用命令解析其参数时,\DTMdisplaydate
robust 命令\DTMdate
会在内部计算星期几索引,但可以使用 明确计算日期中的索引。例如:pgfcalendar
datetime2-calc.sty
\DTMcomputedayofweekindex
\DTMcomputedayofweekindex{2016-01-19}{\result} \DTMenglishweekdayname{\result}
月份日期
datetime
月份日期数字由命令格式化
\ordinaldate
方言假如dt-
方言.def
。 例如:\ordinaldatebritish{19}
在这种情况下,使用
fmtcount
's\ordinalnum
,它实际上是语言敏感的并且不可扩展。可以使用包选项raise
或来提升或降低后缀level
,但并非所有方言都能识别这些选项。datetime2
每个
datetime2-
语言.ldf
文件提供\DTM
语言ordinal
格式化月份中的日期数字。例如:\DTMenglishordinal{19}
这不使用
fmtcount
且可扩展。允许修改序数后缀格式的方言通常有一个ord
设置。这些设置特定于特定的日期样式,并在相关语言模块的文档中描述。例如,样式en-GB
(由datetime2-english
) 有一个设置,ord
允许值raise
、level
和。omit
sc
完整示例:
\documentclass{article}
\usepackage[en-GB,calc]{datetime2}
\DTMlangsetup[en-GB]{ord=raise}
\begin{document}
\DTMcomputedayofweekindex{2016-01-19}{\result}
\DTMenglishweekdayname{\result},
\DTMenglishordinal{19}
\DTMenglishmonthname{1}
\end{document}
语言敏感命令
有一些语言敏感的命令可用于独立使用日期的特定组件。使用datetime2
,您将需要datetime2-calc.sty
,它会通过calc
或包选项自动加载。(除非您只想使用 命令,否则showdow
请确保您至少拥有 v1.3 版)。datetime2
pgfcalendar
这些语言敏感的命令对于这两个包来说都是不可扩展的。
月份名称
datetime
语言敏感的命令
\monthname
接受一个可选参数,但它比简单地执行要复杂得多\monthname
方言因为它试图确保相关区域文件dt-
方言.def
已加载。如果 给出的控制序列monthname\languagename
不存在,则将返回\monthnameenglish
,它始终是定义的。此命令不能在可扩展上下文中使用。示例:\monthname[1]
在支持的地方,有类似的命令用于缩写和首字母大写使用。
datetime2
(datetime2-calc.sty
必需的)由于会
datetime2-calc
自动加载该pgfcalendar
包,因此你可以使用该包提供的命令,例如\pgfcalendarmonthname
。例如:\pgfcalendarmonthname{1}
从 v1.3 开始,
datetime2-calc
还提供了\DTMmonthname
。与 一样datetime
,\monthname
这比简单地执行要复杂得多\DTM
语言monthname
,但在这种情况下,您必须确保已加载相关语言模块,因为在文档中间动态加载模块可能会产生一些不愉快的副作用。例如:\DTMmonthname{1}
此命令用作
\pgfcalendarmonthname
后备。在支持的地方,有类似的命令用于缩写和首字母大写。
星期名称
datetime
可以使用命令获取当前语言的星期名称
\dayofweeknameid
。与 一样\monthname
,这将执行检查以确定是否已加载相关语言文件。如果 给出的控制序列dayofweeknameid\languagename
存在,则使用该序列,否则将其\dayofweeknameidenglish
用作后备。示例:\dayofweeknameid{3}
同样,在支持的地方,有针对缩写或首字母大写版本的类似命令。
datetime2
\pgfcalendarweekdayname
可以通过或 (datetime2
v1.3 及以上版本)获取星期名称\DTMweekdayname
,其行为方式与 类似\DTMmonthname
。pgfcalendar
如果当前语言不支持星期名称,则使用此命令作为后备。示例:\DTMweekdayname{1}
同样,在支持的地方,有针对缩写或首字母大写版本的类似命令。
月份日期
datetime
可以使用 显示语言敏感的月份日期
\ordinaldate
。同样,这会执行检查以确定是否已加载适当的语言文件。如果ordinaldate\languagename
定义了 给出的控制序列,则使用该控制序列,否则仅显示参数而不进行任何格式化。示例:\ordinaldate{19}
datetime2
该
datetime2-calc
软件包(v1.3 及以上版本)提供\DTMordinal
。例如:\DTMordinal{19}
如果不支持当前语言,这只会显示数字作为后备。
例子:
\documentclass{article}
\usepackage[en-GB,showdow]{datetime2}
\DTMlangsetup[en-GB]{ord=raise}
\begin{document}
\DTMcomputedayofweekindex{2016-01-19}{\result}
\DTMweekdayname{\result},
\DTMordinal{19}
\DTMmonthname{1}
\end{document}
比较
以下示例用于hyperref
说明书签中的效果,也\pagestyle{headings}
用于说明页眉中的效果。理想情况下,日期应出现在左侧的书签中,并以大写形式出现在顶部的页眉中。
datetime
使用特定的语言命令
\documentclass{article}
\usepackage[british]{babel}
\usepackage[colorlinks]{hyperref}
\usepackage{datetime}
\begin{document}
\tableofcontents
\pagestyle{headings}
\computedayofweek{19}{1}{2016}
\section{\dayofweeknameidbritish{\the\dayofweek},
\protect\ordinaldatebritish{19}
\monthnamebritish[1] (\languagename)}
\end{document}
生成:
datetime2
使用特定的语言命令
\documentclass{article}
\usepackage[british]{babel}
\usepackage[colorlinks]{hyperref}
\usepackage[en-GB,calc]{datetime2}
\DTMlangsetup[en-GB]{ord=raise}
\begin{document}
\tableofcontents
\pagestyle{headings}
\DTMcomputedayofweekindex{2016-01-19}{\result}
\section{\DTMenglishweekdayname{\result}, \DTMenglishordinal{19}
\DTMenglishmonthname{1} (\languagename)}
\end{document}
产生(最佳结果):
datetime
使用语言敏感的命令
\documentclass{article}
\usepackage[british]{babel}
\usepackage[colorlinks]{hyperref}
\usepackage{datetime}
\begin{document}
\tableofcontents
\pagestyle{headings}
\computedayofweek{19}{1}{2016}
\section{\dayofweeknameid{\the\dayofweek}, \ordinaldate{19}
\monthname[1] (\languagename)}
\end{document}
生成:
datetime2
使用语言敏感的命令
\documentclass{article}
\usepackage[british]{babel}
\usepackage[colorlinks]{hyperref}
\usepackage[en-GB,calc]{datetime2}
\DTMlangsetup[en-GB]{ord=raise}
\begin{document}
\tableofcontents
\pagestyle{headings}
\DTMcomputedayofweekindex{2016-01-19}{\result}
\section{\DTMweekdayname{\result}, \DTMordinal{19} \DTMmonthname{1}
(\languagename)}
\end{document}
生产