% ---------------------------------------------------------------------------- %
%% \file cal.tex
%% \author Sebastien Beaugrand
%% \sa http://beaugrand.chez.com/
%% \copyright CeCILL 2.1 Free Software license
% ---------------------------------------------------------------------------- %
\documentclass[a4paper]{article}
\usepackage{vmargin}
\newlength{\width}
\setlength{\width}{297mm}
\newlength{\height}
\setlength{\height}{210mm}
\newlength{\margin}
\setlength{\margin}{7mm}
\setpapersize{custom}{\width}{\height}
\setmarginsrb{\margin}{10mm}{\margin}{10mm}{0mm}{0mm}{0mm}{0mm}
\renewcommand\normalsize{%
\usefont{T1}{phv}{m}{n}\fontsize{8pt}{9pt}\selectfont}
\usepackage[french]{babel}
\usepackage[utf8]{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}
\usepackage{setspace}
\tabcolsep=1pt
\parindent0pt
\parskip0pt
% ---------------------------------------------------------------------------- %
% Paramètres
% ---------------------------------------------------------------------------- %
% Année
\input{year.tex}
% Latitude et longitude
\input{lat.tex}
\input{lon.tex}
% h0
\input{h0.tex}
% Vacances
\input{vacances\annee.tex}
% ---------------------------------------------------------------------------- %
% Lunes
% ---------------------------------------------------------------------------- %
\input{calendar/calend0.tex}
\input{calendar/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{calendar/moon.tex}
\def\modulo#1#2{%
\count0=#1
\divide\count0 by #2
\multiply\count0 by #2
\multiply\count0 by -1
\advance\count0 by #1
}
\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
}
\def\initmoon{%
\firstmoon \moonphasenumber
\global\advance\moonno by1
\caldate
\ifnum\Month=12 \nextmoonphasenumber \fi
}
\initmoon
\font\moonfont=moonphase at 7pt
\setlength{\unitlength}{1pt}
% ---------------------------------------------------------------------------- %
% Vacances scolaires
% ---------------------------------------------------------------------------- %
\newcommand\vacancesScolaires{%
\ifnum\mois=\vAsmZoneA \ifnum\jourdumois=\vAsdZoneA
\global\zoneA=1 \global\zoneB=1 \global\zoneC=1 \fi \fi
\ifnum\mois=\vBsmZoneA \ifnum\jourdumois=\vBsdZoneA \global\zoneA=1 \fi \fi
\ifnum\mois=\vBsmZoneB \ifnum\jourdumois=\vBsdZoneB \global\zoneB=1 \fi \fi
\ifnum\mois=\vBsmZoneC \ifnum\jourdumois=\vBsdZoneC \global\zoneC=1 \fi \fi
\ifnum\mois=\vCsmZoneA \ifnum\jourdumois=\vCsdZoneA \global\zoneA=1 \fi \fi
\ifnum\mois=\vCsmZoneB \ifnum\jourdumois=\vCsdZoneB \global\zoneB=1 \fi \fi
\ifnum\mois=\vCsmZoneC \ifnum\jourdumois=\vCsdZoneC \global\zoneC=1 \fi \fi
\ifnum\mois=\ascensmois \ifnum\jourdumois=\ascensjour
\global\zoneA=1 \global\zoneB=1 \global\zoneC=1 \global\ascens=1 \fi \fi
\ifnum\mois=\vDsmZoneA \ifnum\jourdumois=\vDsdZoneA
\global\zoneA=1 \global\zoneB=1 \global\zoneC=1 \fi \fi
\ifnum\mois=\vEsmZoneA \ifnum\jourdumois=\vEsdZoneA
\global\zoneA=1 \global\zoneB=1 \global\zoneC=1 \fi \fi
\ifnum\mois=\vFsmZoneA \ifnum\jourdumois=\vFsdZoneA
\global\zoneA=1 \global\zoneB=1 \global\zoneC=1 \fi \fi
\ifnum\zoneA=1 \textcolor{red} {\vline width 1pt}%
\else \phantom{\textcolor{red} {\vline width 1pt}}\fi
\hspace*{2pt}%
\ifnum\zoneB=1 \textcolor{blue} {\vline width 1pt}%
\else \phantom{\textcolor{blue} {\vline width 1pt}}\fi
\hspace*{2pt}%
\ifnum\zoneC=1 \textcolor{green} {\vline width 1pt}%
\else \phantom{\textcolor{green}{\vline width 1pt}}\fi
\hspace*{1pt}
\ifnum\mois=\vAemZoneA \ifnum\jourdumois=\vAedZoneA
\global\zoneA=0 \global\zoneB=0 \global\zoneC=0 \fi \fi
\ifnum\mois=\vBemZoneA \ifnum\jourdumois=\vBedZoneA \global\zoneA=0 \fi \fi
\ifnum\mois=\vBemZoneB \ifnum\jourdumois=\vBedZoneB \global\zoneB=0 \fi \fi
\ifnum\mois=\vBemZoneC \ifnum\jourdumois=\vBedZoneC \global\zoneC=0 \fi \fi
\ifnum\mois=\vCemZoneA \ifnum\jourdumois=\vCedZoneA \global\zoneA=0 \fi \fi
\ifnum\mois=\vCemZoneB \ifnum\jourdumois=\vCedZoneB \global\zoneB=0 \fi \fi
\ifnum\mois=\vCemZoneC \ifnum\jourdumois=\vCedZoneC \global\zoneC=0 \fi \fi
\ifnum\ascens=1
\ifnum\jour=1
\global\zoneA=0 \global\zoneB=0 \global\zoneC=0 \global\ascens=0 \fi \fi
\ifnum\mois=\vDemZoneA \ifnum\jourdumois=\vDedZoneA
\global\zoneA=0 \global\zoneB=0 \global\zoneC=0 \fi \fi
\ifnum\mois=\vEemZoneA \ifnum\jourdumois=\vEedZoneA
\global\zoneA=0 \global\zoneB=0 \global\zoneC=0 \fi \fi
\ifnum\mois=\vFemZoneA \ifnum\jourdumois=\vFedZoneA
\global\zoneA=0 \global\zoneB=0 \global\zoneC=0 \fi \fi
}
% ---------------------------------------------------------------------------- %
% ligne
% ---------------------------------------------------------------------------- %
\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
\centerline{\number\jourdumois}
\tiny
\setstretch{0}
\IfFileExists{sun}{%
\immediate\write18{sun
\number\annee-\number\mois-\number\jourdumois{}
\number\latitude{} \number\longitude{} \number\h0{} h
| sed 's/:/$:$/g' >meridien-h.txt}
}{}
\IfFileExists{meridien-h.txt}{%
\textcolor{tgrey}{\vspace*{-3pt}\hspace*{3.0pt}\input{meridien-h.txt}}
}{}
\normalsize
&
\centerline{\ifcase\jour \or L \or M \or M \or J \or V \or S \or D \fi}
\tiny
\setstretch{0}
\IfFileExists{sun}{%
\immediate\write18{sun
\number\annee-\number\mois-\number\jourdumois{}
\number\latitude{} \number\longitude{} \number\h0{} m
| sed 's/:/$:$/g' >meridien-m.txt}
}{}
\IfFileExists{meridien-m.txt}{%
\textcolor{tgrey}{\vspace*{-3pt}\hspace*{1.0pt}\input{meridien-m.txt}}
}{}
\normalsize
&
% 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 Jul \fi \fi
\ifnum\jourdumois=\springday \ifnum\mois=3 Ostara \fi \fi
\ifnum\jourdumois=\summerday \ifnum\mois=6 Litha \fi \fi
\ifnum\jourdumois=\fallday \ifnum\mois=9 Mabon \fi \fi
\ifnum\jourdumois=2 \ifnum\mois=2 Imbolc \fi \fi
\ifnum\jourdumois=30 \ifnum\mois=4 Beltaine \fi \fi
\ifnum\jourdumois=1 \ifnum\mois=8 Lughnasadh \fi \fi
\ifnum\jourdumois=31 \ifnum\mois=10 Samhain \fi \fi
\ifnum\mois=\fetemmois \ifnum\fetemmois=5 \ifnum\jour=7 \ifnum\jourdumois>24
Fête des mères \fi \fi \fi \fi
\ifnum\mois=\fetemmois \ifnum\fetemmois=6 \ifnum\jour=7 \ifnum\jourdumois<8
Fête des mères \fi \fi \fi \fi
\ifnum\mois=6 \ifnum\jour=7 \ifnum\jourdumois>14 \ifnum\jourdumois<22
Fête des pères \fi \fi \fi \fi
\ifnum\mois=3 \ifnum\jour=7 \ifnum\jourdumois<8
Fête des grand-mères \fi \fi \fi
\ifnum\mois=10 \ifnum\jour=7 \ifnum\jourdumois<8
Fête des grand-pères \fi \fi \fi
% Lever et coucher du soleil
\tiny
\IfFileExists{sun}{%
\immediate\write18{sun
\number\annee-\number\mois-\number\jourdumois{}
\number\latitude{} \number\longitude{} \number\h0{}
| sed 's/:/$:$/g' >sun.txt}
}{}
\IfFileExists{sun.txt}{%
~\vspace*{-3pt}\newline\input{sun.txt}
}{}
% Apogée, périgée, noeuds, déclinaisons et theme de la lune
\IfFileExists{moon-events}{%
\immediate\write18{moon-events
\number\annee-\number\mois-\number\jourdumois{}
| dd ibs=20 count=1 2>/dev/null
| sed 's/:/$:$/' >moon.txt && test -s moon.txt || rm moon.txt}%
}{}%
\IfFileExists{moon.txt}{%
\textcolor{tgrey}{\input{moon.txt}}
}{%
\IfFileExists{moon-themes}{%
\immediate\write18{moon-themes
\number\annee-\number\mois-\number\jourdumois{}
| sed 's/:/$:$/' >moon.txt && test -s moon.txt || rm moon.txt}%
}{}%
\IfFileExists{moon.txt}{%
\textcolor{tgrey}{\input{moon.txt}}
}{%
~
}
}
\normalsize
&
% Phases de la lune
\ifnum\jourdumois=\Day \ifnum\mois=\Month
\begin{picture}(7,7)(0,1.5){\moonfont\char\moon}\end{picture}
$\nextmoonphasenumber$
\fi \fi
&
% Vacances scolaires
\vacancesScolaires
\global\advance\jourdumois1
\ifnum\jour<7 \global\advance\jour1 \else \global\advance\jour-6 \fi
\\ \hline
}
% ---------------------------------------------------------------------------- %
% semestre
% ---------------------------------------------------------------------------- %
\newcommand\semestre[1]{%
\begin{minipage}{\dimseme}
\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]{|p{10pt}|p{10pt}|p{\dimjour}@{}p{10pt}@{}r|}
\multicolumn{5}{p{\dimmois}}{}\\ \hline
\multicolumn{5}{|@{}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\\
% Bas de page
\scriptsize
\begin{tabular}{lllr}
\textcolor{red}{Zone A :}
Besançon, Bordeaux, Clermont-Ferrand, Dijon,
Grenoble, Limoges, Lyon, Poitiers&&&
\IfFileExists{moon-events}{
AL: Apogée lunaire, PL: Périgée lunaire
}{}\\
\textcolor{blue}{Zone B :}
Aix-Marseille, Amiens, Caen, Lille, Nancy-Metz, Nantes,
Nice, Orléans-Tours, Reims, Rennes, Rouen, Strasbourg&
\IfFileExists{moon-events}{
\IfFileExists{moon-themes}{
\texttt{PO SC CN} : jour feuilles&
\texttt{VE BA GE} : jour fleurs&
}{&&}
NA: N\oe{}ud ascendant, ND: N\oe{}ud descendant
}{}\\
\textcolor{green}{Zone C :}
Créteil, Montpellier, Paris, Toulouse, Versailles --
Lundi de Pâques: \number\paquesjour/\number\paquesmois,
Lundi de Pentecôte: \number\pentecjour/\number\pentecmois&
\IfFileExists{moon-events}{
\IfFileExists{moon-themes}{
\texttt{CA VI TA} : jour racines&
\texttt{SA LI BE} : jour graines et fruits&
}{&&}
LM: Lune montante, LD: Lune descendante
}{}\\
\multicolumn{4}{@{}p{\dimseme}@{}}{}
\end{tabular}
\normalsize
\end{center}
\end{minipage}
}
% ---------------------------------------------------------------------------- %
% main
% ---------------------------------------------------------------------------- %
\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
% Lundi de paques, jeudi de l'ascension, lundi de pentecote
\input paques.tex
\paques
\ascension
\pentecote
% Fête des mères
\newcount\fetemmois \fetemmois=\pentecmois
\newcount\fetemjour \fetemjour=\pentecjour
\ifnum \fetemjour=1
\advance\fetemmois-1 \advance\fetemjour\fetemmois \advance\fetemjour25
\else
\advance\fetemjour-1
\fi
\ifnum \fetemmois=5
\ifnum\fetemjour>24
\fetemmois=6
\fi
\else
\fetemmois=5
\fi
\newcount\mois
\newcount\week
\newcount\zoneA
\newcount\zoneB
\newcount\zoneC
\newcount\ascens
\newlength{\dimseme}
\newlength{\dimmois}
\newlength{\dimjour}
\begin{center}
\mois=1
\week=1 \ifnum\jour>1 \advance\week1 \fi
\zoneA=0
\zoneB=0
\zoneC=0
\ascens=0
\setlength{\dimseme}{\width}
\addtolength{\dimseme}{-\margin}
\addtolength{\dimseme}{-\margin}
\newlength{\diviseur}
\setlength{\diviseur}{6pt}% 6 mois
\setlength{\dimmois}{\dimseme}
\addtolength{\dimmois}{-24pt}% marges
\setlength{\dimmois}{\dimexpr \numexpr \dimmois / \diviseur \relax pt\relax}
\setlength{\dimjour}{\dimmois}
\addtolength{\dimjour}{-10pt}% jour
\addtolength{\dimjour}{-10pt}% jour
\addtolength{\dimjour}{-10pt}% lune
\addtolength{\dimjour}{-8pt}% vacances
\addtolength{\dimjour}{-6pt}% marges
\semestre{7}
\newpage
\semestre{13}
\end{center}
\end{document}