使用 advdate 和 datetime2

使用 advdate 和 datetime2

我想将 advdate 包用于相对日期,将 datetime2 包用于自定义格式。但是,datetime2 包似乎会撤消 advdate 所做的一切。我在这里只找到了使用 datetime 包的示例,但我不想依赖这个(现已过时的)包。有办法实现这一点吗?

MWE:(请注意,当我注释掉第二行时,日期才符合预期。)

\usepackage{advdate} 
\usepackage{datetime2} 

\begin{document}
 Today is \today.
 \SetDate[01/01/2022]
 But January 1st, 2022 is not \today.
\end{document}````

答案1

这两个软件包使用非常不同的操作方式。执行 时\SetDate,内部寄存器\day\month\year会设置为请求的值。

另一方面,datetime2重新定义\today为使用自己的方法;具体来说,它确实

\newcommand*{\DTMtoday}{%
 \DTMdisplaydate
  {\@dtm@currentyear}%
  {\@dtm@currentmonth}%
  {\@dtm@currentday}%
  {\@dtm@currentdow}%
}
\let\today\DTMtoday

您可以通过添加一些代码来连接这两个包\FixDate

\documentclass{article}
\usepackage{advdate}
\usepackage{datetime2}
\usepackage{etoolbox}

\makeatletter
\appto\FixDate{%
  \edef\@dtm@currentyear{\the\year}%
  \edef\@dtm@currentmonth{\the\month}%
  \edef\@dtm@currentday{\the\day}%
}
\makeatother

\begin{document}

Today is \today.

\SetDate[01/01/2022]

And January 1st, 2022 is \today.

\end{document}

在此处输入图片描述

相关内容