![在同一文档中混合使用日期格式](https://linux22.com/image/478238/%E5%9C%A8%E5%90%8C%E4%B8%80%E6%96%87%E6%A1%A3%E4%B8%AD%E6%B7%B7%E5%90%88%E4%BD%BF%E7%94%A8%E6%97%A5%E6%9C%9F%E6%A0%BC%E5%BC%8F.png)
我想在我的 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
), 你得到