我正在跟进这个问题。我的主要目的是为一个只在一周的某些日子上课的课程编写教学大纲和时间表,考虑到一些假期。在这个问题,我曾询问过如何跳过非 M 或 W 的工作日。
现在,如果当前上课日恰逢假日,我想跳到下一个上课日。假设我有一个假日列表 {13/1/2014, 22/1/2014}。我想检查以下代码中的 mydate 或 today 是否落在其中的某一天,并根据情况跳到下一个上课日(M 或 W)。例如,我希望第三节课在 1 月 15 日,第六节课在 1 月 27 日。如果它不是完全通用的(即不需要检查年份,我可以确保数组中列出的假日是 M 或 W),那也没关系。
\documentclass{article}
\usepackage[ddmmyyyy]{datetime}% http://ctan.org/pkg/datetime
\usepackage{advdate}% http://ctan.org/pkg/advdate
\newdateformat{syldate}{\THEMONTH/\THEDAY/\THEYEAR}%(\shortdayofweekname%{\THEDAY}{\THEMONTH} {\THEYEAR})}
\newsavebox{\MONDAY}\savebox{\MONDAY}{Mon}% Mon
\makeatletter
\newcommand{\cleardate}[1]{%
\expandafter\let\csname date@#1@d\endcsname\relax% Clear day
\expandafter\let\csname date@#1@m\endcsname\relax% Clear month
\expandafter\let\csname date@#1@y\endcsname\relax% Clear year
}
\makeatother
\newcommand{\class}[1]{%
\cleardate{mydate}% Clear date
\newdate{mydate}{\the\day}{\the\month}{\the\year}% Store date
\section*{\displaydate{mydate} \quad #1}% Set heading
\setbox1=\hbox{\shortdayofweekname{\getdateday{mydate}}{\getdatemonth{mydate}}{\getdateyear{mydate}}}%
\ifdim\wd1=\wd\MONDAY
\AdvanceDate[2]
\else
\AdvanceDate[5]
\fi%
}
\SetDate[06/01/2014]
\begin{document}
\class{First class}
\class{Second class}
\class{Third class}
\class{Fourth class}
\class{Fifth class}
\class{Sixth class}
\class{Seventh class}
\end{document}
我原本想使用\foreach
,但那行不通,因为foreach
会跳过列表中的每个元素。我以为\AdvanceDate[0]
会起作用,但它似乎不会\today
在退出循环后存储。任何帮助都值得感激。