我是新的 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}