Ich gehe hier auf die Frage ein. Mein Hauptziel ist es, einen Lehrplan und einen Stundenplan für einen Kurs zu schreiben, der nur an bestimmten Wochentagen stattfindet, unter Berücksichtigung einiger Feiertage. In diesemFrage, ich habe gefragt, wie man Wochentage überspringen kann, die weder M noch W sind.
Jetzt möchte ich zum nächsten Unterrichtstag springen, wenn der aktuelle Unterrichtstag auf einen Feiertag fällt. Angenommen, ich habe eine Liste mit Feiertagen {13.01.2014, 22.01.2014}. Ich möchte prüfen, ob mydate oder today im folgenden Code auf einen dieser Tage fällt, und je nach Fall zum nächsten Unterrichtstag (Montag oder Mittwoch) springen. Beispielsweise möchte ich, dass die dritte Klasse auf den 15.01. und die sechste Klasse auf den 27.01. fällt. Ich bin einverstanden, wenn es nicht perfekt verallgemeinerbar ist (d. h. ich muss nicht nach dem Jahr suchen und kann sicherstellen, dass die im Array aufgelisteten Feiertage entweder Montag oder Mittwoch sind).
\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}
Ich dachte daran, es zu verwenden, \foreach
aber das funktioniert nicht, da foreach
jedes Element der Liste übersprungen wird. Ich dachte, es \AdvanceDate[0]
würde funktionieren, aber es scheint das \today
nach dem Verlassen der Schleife nicht zu speichern. Jede Hilfe ist willkommen.