ここでの質問に追記します。私の主な目的は、休日を考慮して特定の曜日にのみ開催されるクラスのシラバスとスケジュールを作成することです。質問、M または W 以外の平日をスキップする方法について質問しました。
現在の授業日が休日の場合は、次の授業日にスキップしたいと思います。休日のリスト {13/1/2014、22/1/2014} があるとします。次のコードの mydate または today がこれらのいずれかの日に当たるかどうかを確認し、状況に応じて次の授業日 (M または W) にスキップします。たとえば、3 回目の授業が 1/15 に、6 回目の授業が 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