特定语言

特定语言

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}

生成:

1 月 19 日,星期二

更一般地,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\DTMusorbiannewmonthnamestylenewolddatetime2-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

    与 不同datetimedatetime2日期样式不会计算星期几索引,因为在传递给样式之前应该已经计算过了。这意味着像\today和 这样的命令可以在可扩展的上下文中使用。当通过界面使用命令解析其参数时, \DTMdisplaydaterobust 命令\DTMdate会在内部计算星期几索引,但可以使用 明确计算日期中的索引。例如:pgfcalendardatetime2-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允许值raiselevel和。omitsc

完整示例:

\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 版)。datetime2pgfcalendar这些语言敏感的命令对于这两个包来说都是不可扩展的。

月份名称

  • datetime

    语言敏感的命令\monthname接受一个可选参数,但它比简单地执行要复杂得多\monthname方言因为它试图确保相关区域文件dt-方言.def已加载。如果 给出的控制序列monthname\languagename不存在,则将返回\monthnameenglish,它始终是定义的。此命令不能在可扩展上下文中使用。示例:

    \monthname[1]
    

    在支持的地方,有类似的命令用于缩写和首字母大写使用。

  • datetime2datetime2-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可以通过或 ( datetime2v1.3 及以上版本)获取星期名称\DTMweekdayname,其行为方式与 类似\DTMmonthnamepgfcalendar如果当前语言不支持星期名称,则使用此命令作为后备。示例:

    \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}

生产

带有错误书签和页眉的页面图像

相关内容