在同一文档中混合使用日期格式

在同一文档中混合使用日期格式

我想在我的 CV 制服中制作日期,所以我想到使用该datetime2软件包。问题是,有时我有完整的日期,有时有年份和月份,有时只有月份。我找不到使用该软件包提供的命令来执行此操作的方法。我想要完成的是这样的:

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage[USenglish]{babel}
\usepackage[useregional]{datetime2}
\selectlanguage{USenglish}

\begin{document}    
\DTMdate{2019-1-15}
\DTMdate{2019-1} % <- error here
2019 % I don't need special command here

\end{document}

有没有办法扩展包来实现这一点?或者有没有更好的包可以正确地做到这一点?我还需要数据范围。

答案1

定义你自己的函数,可以处理只提供年份、年份和月份或完整日期(年、月、日)。下面我使用xparse将表单输入拆分<year>-<month>-<day>为 3 个独立组件。缺少的组件接收-NoValue-可用于测试\IfValueTF{.}{<true>}{<false>}

在此处输入图片描述

\documentclass{article}

\usepackage{xparse}
\usepackage[USenglish]{babel}
\usepackage[useregional]{datetime2}
\selectlanguage{USenglish}

\makeatletter
\NewDocumentCommand{\setdate}{> { \SplitArgument { 2 } { - } } m}{%
  \@setdate#1}
\NewDocumentCommand{\@setdate}{ m m m }{%
  \IfValueTF{#2}
    {\IfValueTF{#3}
      {\DTMdate{#1-#2-#3}}% Year, month and day
      {\DTMdate{#1-#2-1}}% Year and month only
    }%
    {\DTMdate{#1-1-1}}% Year only
}
\makeatother

\begin{document}

\setdate{2019-1-15}

\setdate{2019-1}

\setdate{2019}

\end{document}

如果您想要打印/处理仅年份或仅年份和月份的输出,您可以更新上面的组件(注释)并将其替换为新函数。例如,使用

% ...
\usepackage[useregional,calc]{datetime2}
% ...

\makeatletter
\NewDocumentCommand{\setdate}{> { \SplitArgument { 2 } { - } } m}{%
  \@setdate#1}
\NewDocumentCommand{\@setdate}{ m m m }{%
  \IfValueTF{#2}
    {\IfValueTF{#3}
      {\DTMdate{#1-#2-#3}}% Year, month and day
      {\DTMmonthname{#2} \number#1}% Year and month only
    }%
    {#1}% Year only
}
\makeatother

(请注意添加的calc组件datetime2), 你得到

在此处输入图片描述

相关内容