将 \today 提前 x 天

将 \today 提前 x 天

我是新的 LaTex 用户,希望您能帮助我。

我正在起草一封信,尚不清楚提交日期。因此\today,我使用 来标注日期。但在信函正文中,我想指定一个比 提前两周的日期\today。换句话说,有一个 [提前日期] 和一个 [提前日期 II],后者指定前者之后 14 天的日期。

我找到了这个advdate包,但是,如果我没记错的话,它不允许设置两个单独的假设日期。有没有一种不太复杂的方法来实现这一点?

感谢您的帮助。

答案1

该包advdate为命令提供了\AdvanceDate[]一个可选参数,默认为1(day)。但是,它会更改输出的日期\today。可以使用新命令来防止这种情况,例如\advanceday使用内部组,这样寄存器只会在本地更改,这显示在输出中,其中第二次调用\today(在第一次调用之后)\advanceday仍然显示当前日期(2014 年 7 月 9 日),因此它不受\advanceday外界影响!

我使用了一个可选参数\advanceday,默认为 14 天,并添加了一个命令\evenmoreadvanceday,可选参数默认为 28 天,但实际上,\evenmoreadvanceday这是多余的,因为\advancedays[28]它做同样的工作。它的目的是让代码中的第二个日期更加突出。

\today您可以通过使用包及其各种选项/命令来更改输出格式datetime(这里不做)

\documentclass{article}%

\usepackage{advdate}

\newcommand{\advanceday}[1][14]{%
\begingroup
\AdvanceDate[#1]%
\today%
\endgroup
}%

\newcommand{\evenmoreadvanceday}[1][28]{%
\advanceday[#1]%
}%


\begin{document}

Today is \today~and in 14 days it is \advanceday, but today is still \today~and in 28 days it is \evenmoreadvanceday%

\end{document}

在此处输入图片描述

答案2

变体为advdate

\documentclass{article}
\usepackage{xstring}% Needed for \IfStrEqCase
\usepackage{datenumber}% Date formatting
\usepackage{advdate}% Needed for \AdvanceDate
\usepackage{pgf}% For math

\newcounter{dateOffset}%
\newcommand*{\SetDateOffsetForNext}[1]{%
\pgfmathsetcounter{dateOffset}{7-int(\the\value{datedayname})}% Initialize
\IfStrEqCase{#1}{%
    {mon}{\pgfmathsetcounter{dateOffset}{int(mod(\the\value{dateOffset}+8,14))}}%
    }[\PackageError{\SetDateOffsetForNext}{Do not know "#1" as day of week}{}]%
    \IfEq{\the\value{dateOffset}}{0}{\pgfmathsetcounter{dateOffset}{7}}{}%
}%

\newcommand*{\PrintDateForNext}[1]{%
    \SetDateOffsetForNext{#1}% Determine date offset
    \AdvanceDate[\value{dateOffset}]% Advance to specified day
    \today% Print specified date
    \AdvanceDate[-\value{dateOffset}]% Restore current day
    is #1day 2 weeks later% debug output
}

\begin{document}
Today is \today\par
\PrintDateForNext{mon}\par
\end{document} 

在此处输入图片描述

相关内容