%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Fichier : cal.tex
% Auteur : Sébastien Beaugrand
% Date : 14 Nov 2009
% Url : http://beaugrand.chez.com/
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass[a4paper]{article}
\usepackage{vmargin}
\setmarginsrb{13mm}{20mm}{13mm}{20mm}{0mm}{0mm}{0mm}{0mm}
\renewcommand\normalsize{%
\usefont{T1}{ptm}{m}{n}\fontsize{8pt}{9pt}\selectfont}
\usepackage[francais]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\pagestyle{empty}
\usepackage{colortbl}
\def\grey{\rowcolor[gray]{0.75}}
\def\greyII{\rowcolor[gray]{0.85}}
\definecolor{tgrey}{gray}{0.5}
\usepackage{graphics}
% Année
\def\annee{2010}
% Vacances
\def\vOOIddOOI{01} \def\vOOIdmOOI{01} \def\vOOIfdOOI{03} \def\vOOIfmOOI{01}
\def\vOIIddOOI{14} \def\vOIIdmOOI{02} \def\vOIIfdOOI{28} \def\vOIIfmOOI{02}
\def\vOIIddOII{07} \def\vOIIdmOII{02} \def\vOIIfdOII{21} \def\vOIIfmOII{02}
\def\vOIIddIII{21} \def\vOIIdmIII{02} \def\vOIIfdIII{07} \def\vOIIfmIII{03}
\def\vIIIddOOI{11} \def\vIIIdmOOI{04} \def\vIIIfdOOI{25} \def\vIIIfmOOI{04}
\def\vIIIddOII{04} \def\vIIIdmOII{04} \def\vIIIfdOII{18} \def\vIIIfmOII{04}
\def\vIIIddIII{18} \def\vIIIdmIII{04} \def\vIIIfdIII{02} \def\vIIIfmIII{05}
\def\vOIVddOOI{03} \def\vOIVdmOOI{07} \def\vOIVfdOOI{01} \def\vOIVfmOOI{09}
\def\vOOVddOOI{24} \def\vOOVdmOOI{10} \def\vOOVfdOOI{03} \def\vOOVfmOOI{11}
\def\vOVIddOOI{19} \def\vOVIdmOOI{12} \def\vOVIfdOOI{31} \def\vOVIfmOOI{12}
\input{calend0.tex}
\input{sun.tex}
\setyear{\annee}
% Saisons
\newcount\winterday \linY 365.242.756+355784. \caldate \winterday=\Day
\newcount\springday \linY 365.242.365+ 79573. \caldate \springday=\Day
\newcount\summerday \linY 365.241.628+172405. \caldate \summerday=\Day
\newcount\fallday \linY 365.242.045+266014. \caldate \fallday=\Day
% Phases de la lune
\input{moon.tex}
\newcount\moon
\def\moonphasenumber{%
\count0=\moonno \count1=\moonno
\divide\count0 by4\multiply\count0 by4
\advance\count1 by-\count0
\global\moon=\count1
}
\def\nextmoonphasenumber{%
\moondate \moonphasenumber
\global\advance\moonno by1
\caldate
}
\firstmoon \moonphasenumber
\global\advance\moonno by1
\caldate
\font\moonfont=moonphase at 7pt
\setlength{\unitlength}{1pt}
\newcommand\ligne{%
\ifnum\jour=7
\grey
\else
\ifnum\jourdumois=\paquesjour \ifnum\mois=\paquesmois \greyII \fi \fi
\ifnum\jourdumois=\ascensjour \ifnum\mois=\ascensmois \greyII \fi \fi
\ifnum\jourdumois=\pentecjour \ifnum\mois=\pentecmois \greyII \fi \fi
\ifnum\jourdumois=1 \ifnum\mois=1 \greyII \fi \fi
\ifnum\jourdumois=1 \ifnum\mois=5 \greyII \fi \fi
\ifnum\jourdumois=8 \ifnum\mois=5 \greyII \fi \fi
\ifnum\jourdumois=14 \ifnum\mois=7 \greyII \fi \fi
\ifnum\jourdumois=15 \ifnum\mois=8 \greyII \fi \fi
\ifnum\jourdumois=1 \ifnum\mois=11 \greyII \fi \fi
\ifnum\jourdumois=11 \ifnum\mois=11 \greyII \fi \fi
\ifnum\jourdumois=25 \ifnum\mois=12 \greyII \fi \fi
\fi
\number\jourdumois&
\ifcase\jour \or L \or M \or M \or J \or V \or S \or D \fi&
% Numéros des semaines
\ifnum\jour=1
\textcolor{tgrey}{\number\week} \global\advance\week1
\else \ifnum\jourdumois=1 \ifnum\mois=1
\textcolor{tgrey}{1}
\fi \fi \fi
% Changements d'heure
\ifnum\mois=3 \ifnum\jour=7 \ifnum\jourdumois>24 +1h \fi \fi \fi
\ifnum\mois=10 \ifnum\jour=7 \ifnum\jourdumois>24 -1h \fi \fi \fi
% Fêtes païennes
\ifnum\jourdumois=\winterday \ifnum\mois=12 \tiny{Jul} \fi \fi
\ifnum\jourdumois=\springday \ifnum\mois=3 \tiny{Ostara} \fi \fi
\ifnum\jourdumois=\summerday \ifnum\mois=6 \tiny{Litha} \fi \fi
\ifnum\jourdumois=\fallday \ifnum\mois=9 \tiny{Mabon} \fi \fi
\ifnum\jourdumois=2 \ifnum\mois=2 \tiny{Imbolc} \fi \fi
\ifnum\jourdumois=30 \ifnum\mois=4 \tiny{Beltaine} \fi \fi
\ifnum\jourdumois=1 \ifnum\mois=8 \tiny{Lughnasadh} \fi \fi
\ifnum\jourdumois=31 \ifnum\mois=10 \tiny{Samhain} \fi \fi
% Phases de la lune
\ifnum\jourdumois=\Day \ifnum\mois=\Month
\hspace{\stretch{1}}
\begin{picture}(7,7)(0,1.5){\moonfont\char\moon}\end{picture}
$\nextmoonphasenumber$
\fi \fi
&
\ifnum\mois=\vOOIdmOOI \ifnum\jourdumois=\vOOIddOOI
\global\zoneOOI=1 \global\zoneOII=1 \global\zoneIII=1 \fi \fi
\ifnum\mois=\vOIIdmOOI \ifnum\jourdumois=\vOIIddOOI \global\zoneOOI=1 \fi \fi
\ifnum\mois=\vOIIdmOII \ifnum\jourdumois=\vOIIddOII \global\zoneOII=1 \fi \fi
\ifnum\mois=\vOIIdmIII \ifnum\jourdumois=\vOIIddIII \global\zoneIII=1 \fi \fi
\ifnum\mois=\vIIIdmOOI \ifnum\jourdumois=\vIIIddOOI \global\zoneOOI=1 \fi \fi
\ifnum\mois=\vIIIdmOII \ifnum\jourdumois=\vIIIddOII \global\zoneOII=1 \fi \fi
\ifnum\mois=\vIIIdmIII \ifnum\jourdumois=\vIIIddIII \global\zoneIII=1 \fi \fi
\ifnum\mois=\vOIVdmOOI \ifnum\jourdumois=\vOIVddOOI
\global\zoneOOI=1 \global\zoneOII=1 \global\zoneIII=1 \fi \fi
\ifnum\mois=\vOOVdmOOI \ifnum\jourdumois=\vOOVddOOI
\global\zoneOOI=1 \global\zoneOII=1 \global\zoneIII=1 \fi \fi
\ifnum\mois=\vOVIdmOOI \ifnum\jourdumois=\vOVIddOOI
\global\zoneOOI=1 \global\zoneOII=1 \global\zoneIII=1 \fi \fi
\ifnum\zoneOOI=1 \textcolor{red} {\vline width 1pt}
\else \phantom{\textcolor{red} {\vline width 1pt}} \fi
\ifnum\zoneOII=1 \textcolor{blue} {\vline width 1pt}
\else \phantom{\textcolor{blue} {\vline width 1pt}} \fi
\ifnum\zoneIII=1 \textcolor{green}{\vline width 1pt}
\else \phantom{\textcolor{green}{\vline width 1pt}} \fi
\ifnum\mois=\vOOIfmOOI \ifnum\jourdumois=\vOOIfdOOI
\global\zoneOOI=0 \global\zoneOII=0 \global\zoneIII=0 \fi \fi
\ifnum\mois=\vOIIfmOOI \ifnum\jourdumois=\vOIIfdOOI \global\zoneOOI=0 \fi \fi
\ifnum\mois=\vOIIfmOII \ifnum\jourdumois=\vOIIfdOII \global\zoneOII=0 \fi \fi
\ifnum\mois=\vOIIfmIII \ifnum\jourdumois=\vOIIfdIII \global\zoneIII=0 \fi \fi
\ifnum\mois=\vIIIfmOOI \ifnum\jourdumois=\vIIIfdOOI \global\zoneOOI=0 \fi \fi
\ifnum\mois=\vIIIfmOII \ifnum\jourdumois=\vIIIfdOII \global\zoneOII=0 \fi \fi
\ifnum\mois=\vIIIfmIII \ifnum\jourdumois=\vIIIfdIII \global\zoneIII=0 \fi \fi
\ifnum\mois=\vOIVfmOOI \ifnum\jourdumois=\vOIVfdOOI
\global\zoneOOI=0 \global\zoneOII=0 \global\zoneIII=0 \fi \fi
\ifnum\mois=\vOOVfmOOI \ifnum\jourdumois=\vOOVfdOOI
\global\zoneOOI=0 \global\zoneOII=0 \global\zoneIII=0 \fi \fi
\ifnum\mois=\vOVIfmOOI \ifnum\jourdumois=\vOVIfdOOI
\global\zoneOOI=0 \global\zoneOII=0 \global\zoneIII=0 \fi \fi
\global\advance\jourdumois1
\ifnum\jour<7 \global\advance\jour1 \else \global\advance\jour-6 \fi
\\ \hline
}
\newcommand\semestre[1]{%
\begin{minipage}{520pt}
\begin{center}
\loop
\newcount\jourdumois \jourdumois=1
\newcount\last
\ifcase\mois
\or \last=31 \or \last=28 \or \last=31 \or \last=30
\or \last=31 \or \last=30 \or \last=31 \or \last=31
\or \last=30 \or \last=31 \or \last=30 \or \last=31
\fi
\ifnum\mois=2
\tmp=\annee
\divide\tmp4 \multiply\tmp4
\ifnum\tmp=\annee \last=29 \fi
\fi
\begin{tabular}[t]{|c|c|p{45pt}r|}
\multicolumn{4}{p{81pt}}{}\\ \hline
\multicolumn{4}{|@{}c@{}|}{\textbf{
\ifcase\mois
\or JANVIER \or FÉVRIER \or MARS \or AVRIL
\or MAI \or JUIN \or JUILLET \or AOÛT
\or SEPTEMBRE \or OCTOBRE \or NOVEMBRE \or DÉCEMBRE
\fi
\phantom{É}\annee}}\\ \hline \hline
\ligne \ligne \ligne \ligne \ligne \ligne \ligne
\ligne \ligne \ligne \ligne \ligne \ligne \ligne
\ligne \ligne \ligne \ligne \ligne \ligne \ligne
\ligne \ligne \ligne \ligne \ligne \ligne \ligne
\ifnum\last>28 \ligne \fi
\ifnum\last>29 \ligne \fi
\ifnum\last>30 \ligne \fi
\end{tabular}
\global\advance\mois1
\ifnum\mois<#1 \repeat
\newline
\par
\textcolor{red}{Zone A :}
Caen, Clermont-Ferrand, Grenoble, Lyon, Montpellier,
Nancy-Metz, Nantes, Rennes, Toulouse -
\textcolor{blue}{Zone B :}
Aix-Marseille, Amiens, Besançon, Dijon, Lille, Limoges,
Nice, Orléans-Tours, Poitiers, Reims, Rouen, Strasbourg -
\textcolor{green}{Zone C :}
Bordeaux, Créteil, Paris, Versailles -
L. de Pâques : \number\paquesjour/\number\paquesmois,
Pentecôte : \number\pentecjour/\number\pentecmois
\newline
\end{center}
\end{minipage}
}
\begin{document}
% Calcul du premier jour de la première semaine
\newcount\jour \jour=2
\newcount\tmp
\tmp=\annee \advance\tmp-1 \multiply\tmp5 \divide\tmp4 \advance\jour\tmp
\tmp=\annee \advance\tmp-1 \divide\tmp100 \advance\tmp-7 \multiply\tmp3
\divide\tmp4 \advance\jour-\tmp
\tmp=\jour \divide\tmp7 \multiply\tmp7 \advance\jour-\tmp
\ifnum\jour=0 \jour=7 \fi
% Calcul du lundi de Pâques
\newcount\pm \pm=\annee \divide\pm19 \multiply\pm19 \pm=-\pm \advance\pm\annee
\newcount\pi \pi=\pm \multiply\pi19 \advance\pi24
\newcount\pt \pt=\pi \divide\pt30 \multiply\pt30 \advance\pi-\pt
\newcount\pu \pu=\pi \advance\pu1 \pt=29 \divide\pt\pu
\pu=21 \advance\pu-\pm \divide\pu11 \multiply\pt\pu
\pu=\pi \divide\pu28 \multiply\pt\pu \advance\pt-1
\multiply\pt\pu \advance\pi\pt
\newcount\pj \pj=\annee \divide\pj4
\advance\pj\annee \advance\pj\pi \advance\pj-13
\pt=\pj \divide\pt7 \multiply\pt7 \advance\pj-\pt
% Jour de Pâques
\advance\pi-\pj
% Lundi de Pâques
\advance\pi1
% Mois du lundi de Pâques
\newcount\paquesmois \paquesmois=\pi \advance\paquesmois40
\divide\paquesmois44 \advance\paquesmois3
% Jour du lundi de Pâques
\newcount\paquesjour \paquesjour=\paquesmois \divide\paquesjour4
\multiply\paquesjour31 \paquesjour=-\paquesjour \advance\paquesjour\pi
\advance\paquesjour28
\ifnum\paquesmois=4 \ifnum\paquesjour>25 \advance\paquesjour-7 \fi \fi
\ifnum\paquesmois=3 \ifnum\paquesjour=32 \paquesmois=4 \paquesjour=1 \fi \fi
% Calcul du jeudi de l'Ascension
\newcount\ascensmois \ascensmois=\paquesmois \advance\ascensmois1
\newcount\ascensjour \ascensjour=\paquesjour
\advance\ascensjour\paquesmois \advance\ascensjour4
\newcount\nbrjours \nbrjours=\ascensmois \advance\nbrjours26
\ifnum\ascensjour>\nbrjours
\advance\ascensjour-\nbrjours \advance\ascensmois1
\fi
% Calcul du lundi de Pentecôte
\newcount\pentecmois \pentecmois=\ascensmois
\newcount\pentecjour \pentecjour=\ascensjour \advance\pentecjour11
\nbrjours=\pentecmois \advance\nbrjours26
\ifnum\pentecjour>\nbrjours
\advance\pentecjour-\nbrjours \advance\pentecmois1
\fi
\newcount\cnt \cnt=1
\newcount\mois \mois=1
\newcount\week \week=1 \ifnum\jour>1 \advance\week1 \fi
\newcount\zoneOOI \zoneOOI=0
\newcount\zoneOII \zoneOII=0
\newcount\zoneIII \zoneIII=0
\tabcolsep=2pt
\begin{center}
\rotatebox{180}{
\semestre{7}}
\semestre{13}
\end{center}
\end{document}
% Fin du fichier cal.tex