Я продолжаю вопрос здесь. Моя главная цель — написать программу и расписание для класса, который собирается только в определенные дни недели, учитывая некоторые праздники. В этомвопрос, Я спрашивал о том, как пропустить будние дни, которые не являются понедельником или неделей недели.
Теперь я хочу перейти к следующему учебному дню, если текущий учебный день приходится на праздник. Допустим, у меня есть список праздников {13/1/2014, 22/1/2014}. Я хочу проверить, попадает ли mydate или today в следующем коде на какой-либо из этих дней, и перейти к следующему учебному дню (M или W) в зависимости от того, какой случай. Например, я хочу, чтобы третий класс пришелся на 15/1, а шестой класс — на 27/1. Я не против, если это не совсем обобщаемо (т. е. нет необходимости проверять год, и я могу убедиться, что праздники, перечисленные в массиве, являются 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
после выхода из цикла. Любая помощь приветствуется.