%% Informations générales
%% Dernière modification le 2023-08-10 at 16:16
\NeedsTeXFormat{LaTeX2e}[1999/01/01]
\ProvidesPackage{cahierprof}
  [2023/08/10 v0.92 Les commandes pour le cahier Professeur]
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Options du package commande
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Pas d'options
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Chargement des extensions
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{geometry}
\RequirePackage{tabularx}
\RequirePackage{colortbl}
\RequirePackage{tikz}
  \usetikzlibrary{math}  
  \usetikzlibrary{calc}
\RequirePackage[babel=true,kerning=true]{microtype}
\RequirePackage{ifthen}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Définitions des compteurs
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Compteurs day/month/year pour la date courante
\newcounter{day}
\newcounter{month}
\newcounter{year}
%
% Compteurs pour la rentrée
\newcounter{lundiRentree}
\newcounter{monthRentree}
\newcounter{yearRentree}
%
% Compteurs pour les vacances scolaires
% Toussaint
\newcounter{dayToussaint}
\newcounter{monthToussaint}
\newcounter{dayToussaintFin}
\newcounter{monthToussaintFin}
% Noel
\newcounter{dayNoel}
\newcounter{monthNoel}
\newcounter{dayNoelFin}
\newcounter{monthNoelFin}
% Hiver
\newcounter{dayHiver}
\newcounter{monthHiver}
\newcounter{dayHiverFin}
\newcounter{monthHiverFin}
% Printemps
\newcounter{dayPrintemps}
\newcounter{monthPrintemps}
\newcounter{dayPrintempsFin}
\newcounter{monthPrintempsFin}
% Jours Feriés 
\newcounter{dayPaques}
\newcounter{monthPaques}
\newcounter{dayAscension}
\newcounter{dayAscensionPont}
\newcounter{monthAscension}
\newcounter{dayPentecote}
\newcounter{monthPentecote}
%
% Définition de nouveaux compteurs pour Vendredi Jour/Mois/Année
\newcounter{friday}
\newcounter{frimonth}
\newcounter{friyear}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Liste des macros pour le calendrier.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% - \nextday : pour passer au jour d'après
% - \weekend : pour passer les week-ends ou les vacances scolaires 
% - \getdate : afficher la date au format day/month/year
% - \getWeek : afficher la semaine au format
%
%%%% Passer au jour d'après
\newcommand{\nextday}%
{% 
  % Les mois à 30 jours : Avril, Juin, Septembre, Novembre
  % Les mois à 31 jours : Janvier, Mars, Mai, Juillet, Août, Octobre, Décembre
  % Février à \theFinFevrier jours.
  \ifthenelse{
      \(\theday=30 \and \(\themonth=4 \or \themonth=6 \or \themonth=9 \or \themonth=11\)\)
  \or \(\theday=31 \and \(\themonth=1 \or \themonth=3 \or \themonth=5 \or \themonth=7 \or
        \themonth=8 \or \themonth=10 \or\themonth=12\)\) 
  \or \(\theday=\theFinFevrier \and \themonth=2\)}%
  {
    % Si on est en décembre, on change d'année et month=1, day=1
    \ifthenelse{\themonth=12}%
    {
      \stepcounter{year}
      \setcounter{month}{1}
      \setcounter{day}{1}
    }{
      % Dans les autres cas, on change de mois et on recommence à day= 1
      \stepcounter{month}%
      \setcounter{day}{1}%
    }%
  }{
    % Sinon, on augmente juste le compteur jour
    \stepcounter{day}%
  }%
}%
%%%% Gestions des vacances et week-end
\newcommand{\weekend}{
  % Vacances de Toussaint 
  \ifthenelse{ \theday=\thedayToussaint \and \themonth=\themonthToussaint}
  {
    % 15 jours de vacances, bien mérités !
    \foreach \jour in {1,...,16}{\nextday}
    Vacances de la Toussaint
  }{
    % Vacances de Noël
    \ifthenelse{ \theday=\thedayNoel \and \themonth=\themonthNoel}
    {
      % 15 jours de vacances, bien mérités !
      \foreach \jour in {1,...,16}{\nextday}%
      Vacances de Noël
    }{
      % Vacances d'Hiver
      \ifthenelse{ \theday=\thedayHiver \and \themonth=\themonthHiver}
      {
        % 15 jours de vacances, bien mérités !
        \foreach \jour in {1,...,16}{\nextday}%
        Vacances d'hiver 
      }{
        % Vacances de Printemps
        \ifthenelse{ \theday=\thedayPrintemps \and \themonth=\themonthPrintemps}
        {
          % 15 jours de vacances, bien mérités !
          \foreach \jour in {1,...,16}{\nextday}%
          Vacances de printemps
        }{
          % sinon c'est juste un week-end
          \nextday\nextday
        }%
      }%
    }%
  }%
}
%%%% Obtenir la date
\newcommand{\getDate}{%
  % On affiche la date
  \theday/\themonth/\theyear%
  % On affiche $\star$Ferié$\star$ si le jour est ferié.
  \ifthenelse{%
    % Jour de l'an, 1er janvier
    \(\theday=1 \and \themonth=1\)%
    % Lundi de Paques
    \or\(\theday=\thedayPaques \and \themonth=\themonthPaques\)%
    % Fête du travail, le 1er mai
    \or\(\theday=1 \and \themonth=5\)%
    % Victoire 1945, le 8 mai
    \or\(\theday=8 \and \themonth=5\)%
    % Jeudi de l'ascension
    \or\(\theday=\thedayAscension \and \themonth=\themonthAscension\)%
    % Pont du vendredi de l'ascension
    \or\(\theday=\thedayAscensionPont \and \themonth=\themonthAscension\)%
    % Lundi de Pentecote
    \or\(\theday=\thedayPentecote \and \themonth=\themonthPentecote\)%
    % Fête Nationale, le 14 juillet
    \or\(\theday=14 \and \themonth=7\)%
    % Assomption, le 15 août
    \or\(\theday=15 \and \themonth=8\)%
    % Toussaint, le 1er novembre
    \or\(\theday=1 \and \themonth=11\)%
    % Armistice 1914-1918, le 11 novembre
    \or\(\theday=11 \and \themonth=11\)%
    % Noël, le 25 décembre
    \or\(\theday=25 \and \themonth=12\)%
  }{
    \cellcolor[gray]{.9} \hfil $\star$Ferié$\star$%
  }{}%
}%
%
%%%% Affichage de la semaine.
\newcommand{\getWeek}{%
  \setcounter{friday}{\theday}%
  \setcounter{frimonth}{\themonth}%
  \setcounter{friyear}{\theyear}%
  % Si le mois a 31 jours.%
  % Les mois à 31 jours : Janvier, Mars, Mai, Juillet, Août, Octobre, Décembre%
  \ifthenelse{\themonth=1 \or \themonth=3 \or \themonth=5 \or \themonth=7 \or \themonth=8 \or \themonth=10 \or \themonth=12}%
  {%
    % Alors si on est avant le 28 du mois, on ajoute 4 jours%
    \ifthenelse{\theday < 28}%
    {%
      \addtocounter{friday}{4}%
    }{%
      % Sinon, on change de mois %
      \stepcounter{frimonth}%
      % Changement d'année pour décembre%
      \ifthenelse{\themonth=12}{\stepcounter{friyear}}{}%
      % Lundi 31 - Mar 1, Mer 2, Jeu 3, Ven 4%
      \ifthenelse{\theday=31}{\setcounter{friday}{4}}{}%
      % Lundi 30 - Mar 31, Mer 1, Jeu 2, Ven 3%
      \ifthenelse{\theday=30}{\setcounter{friday}{3}}{}%
      % Lundi 29 - Mar 30, Mer 31, Jeu 1, Ven 2%
      \ifthenelse{\theday=29}{\setcounter{friday}{2}}{}%
      % Lundi 28 - Mar 29, Mer 30, Jeu 31, Ven 1%
      \ifthenelse{\theday=28}{\setcounter{friday}{1}}{}%
    }%
  }{%
    % Sinon, si on est au mois de février%
    \ifthenelse{\themonth=2}%
    {%
      % Si le mois de février a 28 jours%
      \ifthenelse{\theFinFevrier=28}%
      {%
        % Si on est avant le 25%
        \ifthenelse{\theday < 25}%
        {%
          % Alors on ajoute 4 jours%
          \addtocounter{friday}{4}%
        }{%
          % Sinon, on change de mois%
          \stepcounter{frimonth}%
          % Lundi 28 - Mar 1, Mer 2, Jeu 3, Ven 4%
          \ifthenelse{\theday=28}{\setcounter{friday}{4}}{}%
          % Lundi 27 - Mar 28, Mer 1, Jeu 2, Ven 3%
          \ifthenelse{\theday=27}{\setcounter{friday}{3}}{}%
          % Lundi 26 - Mar 27, Mer 28, Jeu 1, Ven 2%
          \ifthenelse{\theday=26}{\setcounter{friday}{2}}{}%
          % Lundi 25 - Mar 26, Mer 27, Jeu 28, Ven 1%
          \ifthenelse{\theday=25}{\setcounter{friday}{1}}{}%
        }%
      }{%
        % sinon le mois de février a 29 jours%
        % si on est avant le 26%
        \ifthenelse{\theday < 26}%
        {%
          % alors on ajoute 4 jours%
          \addtocounter{friday}{4}%
        }{%
          % sinon, on change de mois%
          \stepcounter{frimonth}%
          % lundi 29 - mar 1, mer 2, jeu 3, ven 4%
          \ifthenelse{\theday=29}{\setcounter{friday}{4}}{}%
          % lundi 28 - mar 29, mer 1, jeu 2, ven 3%
          \ifthenelse{\theday=28}{\setcounter{friday}{3}}{}%
          % lundi 27 - mar 28, mer 29, jeu 1, ven 2%
          \ifthenelse{\theday=27}{\setcounter{friday}{2}}{}%
          % lundi 26 - mar 27, mer 28, jeu 29, ven 1%
          \ifthenelse{\theday=26}{\setcounter{friday}{1}}{}%
        }%
      }%
    }{%
      % Sinon le mois a 30 jours%
      % Les mois de 30 jours : Avril, Juin, Septembre, Novembre%
      % Si on est avant le 27, on ajoute 4 jours%
      \ifthenelse{\theday < 27}%
      {%
        \addtocounter{friday}{4}%
      }{%
        % Sinon, on change de mois%
        \stepcounter{frimonth}%
        % Lundi 30 - Mar 1, Mer 2, Jeu 3, Ven 4%
        \ifthenelse{\theday=30}{\setcounter{friday}{4}}{}%
        % Lundi 29 - Mar 30, Mer 1, Jeu 2, Ven 3%
        \ifthenelse{\theday=29}{\setcounter{friday}{3}}{}%
        % Lundi 28 - Mar 29, Mer 30, Jeu 1, Ven 2%
        \ifthenelse{\theday=28}{\setcounter{friday}{2}}{}%
        % Lundi 27 - Mar 28, Mer 29, Jeu 30, Ven 1%
        \ifthenelse{\theday=27}{\setcounter{friday}{1}}{}%
      }%
    }%
  }%
  Du lundi \theday{}
  \ifthenelse{\themonth=1}{janvier}{}%
  \ifthenelse{\themonth=2}{février}{}%
  \ifthenelse{\themonth=3}{mars}{}%
  \ifthenelse{\themonth=4}{avril}{}%
  \ifthenelse{\themonth=5}{mai}{}%
  \ifthenelse{\themonth=6}{juin}{}%
  \ifthenelse{\themonth=7}{juillet}{}%
  \ifthenelse{\themonth=8}{août}{}%
  \ifthenelse{\themonth=9}{septembre}{}%
  \ifthenelse{\themonth=10}{octobre}{}%
  \ifthenelse{\themonth=11}{novembre}{}%
  \ifthenelse{\themonth=12}{décembre}{}
  \theyear{}
  au vendredi
  \thefriday{}
  \ifthenelse{\thefrimonth=1}{janvier}{}%
  \ifthenelse{\thefrimonth=2}{février}{}%
  \ifthenelse{\thefrimonth=3}{mars}{}%
  \ifthenelse{\thefrimonth=4}{avril}{}%
  \ifthenelse{\thefrimonth=5}{mai}{}%
  \ifthenelse{\thefrimonth=6}{juin}{}%
  \ifthenelse{\thefrimonth=7}{juillet}{}%
  \ifthenelse{\thefrimonth=8}{août}{}%
  \ifthenelse{\thefrimonth=9}{septembre}{}%
  \ifthenelse{\thefrimonth=10}{octobre}{}%
  \ifthenelse{\thefrimonth=11}{novembre}{}%
  \ifthenelse{\thefrimonth=12}{décembre}{}
  \thefriyear
}%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Liste des macros pour les jours spéciaux
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% - \setLundiRentree   : définir le lundi de rentrée au format DD-MM-YYYY
% - \setDebutToussaint : définir le début (samedi) des vacances de Toussaint
% - \setDebutNoel      : définir le début (samedi) des vacances de Noel
% - \setDebutHiver     : définir le début (samedi) des vacances d'hiver
% - \setDebutPrintemps : définir le début (samedi) des vacances de Printemps
% - \setLundiPaques    : définir le lundi de Paques au format DD-MM-YYYY
% - \setJoursFeries    : définir les dates de l'ascension, du pont de
%   l'ascension et de la Pentecôte à partir de la date du lundi de Pâques.
%
%%%% Définir le lundi de la rentrée
% \setLundiRentree a 3 arguments :
% - #1 Le jourde la rentrée
% - #2 Le Mois de la rentrée
% - #3 L'annéede la rentrée
\newcommand{\setLundiRentree}[3]%
{%
  \setcounter{lundiRentree}{#1}%
  \setcounter{monthRentree}{#2}%
  \setcounter{yearRentree}{#3}%
  % Gestion des années bissextiles.
  \setcounter{year}{\theyearRentree}
  \stepcounter{year}
  \newcounter{FinFevrier}%
  % Est-ce que l'année est bissextile?%
  \pgfmathparse{int(mod(\theyear,4))}%
  \ifthenelse{\pgfmathresult>0}%
  {%
    % if (year is not divisible by 4) then (it is a common year)%
    \setcounter{FinFevrier}{28}%
  }{%
    % else if (year is not divisible by 100) then (it is a leap year)%
    \pgfmathparse{int(mod(\theyear,100))}%
    \ifthenelse{\pgfmathresult>0}%
    {%
      \setcounter{FinFevrier}{29}%
    }{%
      % else if (year is not divisible by 400) then (it is a common year)%
      \pgfmathparse{int(mod(\theyear,400))}%
      \ifthenelse{\pgfmathresult>0}%
      {%
        \setcounter{FinFevrier}{28}%
      }{%
        % else (it is a leap year)%
        \setcounter{FinFevrier}{29}%
      }%
    }%
  }%
}%
%%%% Définir le début des vacances de Toussaint
% Les commandes \set*Vacances* ont 2 arguments :
% - #1 Le jourde la rentrée
% - #2 Le Mois de la rentrée
\newcommand{\setDebutToussaint}[2]%
{%
  \setcounter{dayToussaint}{#1}%
  \setcounter{monthToussaint}{#2}%
}%
%%%% Définir le début des vacances de Noel
\newcommand{\setDebutNoel}[2]%
{%
  \setcounter{dayNoel}{#1}%
  \setcounter{monthNoel}{#2}%
}%
%%%% Définir le début des vacances d'hiver
\newcommand{\setDebutHiver}[2]%
{%
  \setcounter{dayHiver}{#1}%
  \setcounter{monthHiver}{#2}%
}%
%%%% Définir le début des vacances de Printemps
\newcommand{\setDebutPrintemps}[2]%
{%
  \setcounter{dayPrintemps}{#1}%
  \setcounter{monthPrintemps}{#2}%
}%
%%%% Définir le Lundi de Paques
\newcommand{\setLundiPaques}[2]%
{%
  \setcounter{dayPaques}{#1}%
  \setcounter{monthPaques}{#2}%
}%
%%%% Trouver les dates des jours fériés variables 
\newcommand{\setJoursFeries}{%
  % Si \setLundiPaques n'est pas utilisé (valable jusqu'en 2040)...
  \ifthenelse{\equal{\thedayPaques}{0}}%
  {%
    \setcounter{year}{\theyearRentree}%
    \stepcounter{year}%
    \ifthenelse{\equal{\theyear}{2024}}{\setcounter{dayPaques}{1}\setcounter{monthPaques}{4}}{}
    \ifthenelse{\equal{\theyear}{2025}}{\setcounter{dayPaques}{21}\setcounter{monthPaques}{4}}{}
    \ifthenelse{\equal{\theyear}{2026}}{\setcounter{dayPaques}{6}\setcounter{monthPaques}{4}}{}
    \ifthenelse{\equal{\theyear}{2027}}{\setcounter{dayPaques}{29}\setcounter{monthPaques}{3}}{}
    \ifthenelse{\equal{\theyear}{2028}}{\setcounter{dayPaques}{17}\setcounter{monthPaques}{4}}{}
    \ifthenelse{\equal{\theyear}{2029}}{\setcounter{dayPaques}{2}\setcounter{monthPaques}{4}}{}
    \ifthenelse{\equal{\theyear}{2030}}{\setcounter{dayPaques}{22}\setcounter{monthPaques}{4}}{}
    \ifthenelse{\equal{\theyear}{2031}}{\setcounter{dayPaques}{14}\setcounter{monthPaques}{4}}{}
    \ifthenelse{\equal{\theyear}{2032}}{\setcounter{dayPaques}{29}\setcounter{monthPaques}{3}}{}
    \ifthenelse{\equal{\theyear}{2033}}{\setcounter{dayPaques}{18}\setcounter{monthPaques}{4}}{}
    \ifthenelse{\equal{\theyear}{2034}}{\setcounter{dayPaques}{10}\setcounter{monthPaques}{4}}{}
    \ifthenelse{\equal{\theyear}{2035}}{\setcounter{dayPaques}{26}\setcounter{monthPaques}{3}}{}
    \ifthenelse{\equal{\theyear}{2036}}{\setcounter{dayPaques}{14}\setcounter{monthPaques}{4}}{}
    \ifthenelse{\equal{\theyear}{2037}}{\setcounter{dayPaques}{6}\setcounter{monthPaques}{4}}{}
    \ifthenelse{\equal{\theyear}{2038}}{\setcounter{dayPaques}{26}\setcounter{monthPaques}{4}}{}
    \ifthenelse{\equal{\theyear}{2039}}{\setcounter{dayPaques}{11}\setcounter{monthPaques}{4}}{}
    \ifthenelse{\equal{\theyear}{2040}}{\setcounter{dayPaques}{2}\setcounter{monthPaques}{4}}{}
    \setcounter{year}{\theyearRentree}%
  }{}
  % On fixe la date au lundi de Pâques
  \setcounter{day}{\thedayPaques}%
  \setcounter{month}{\themonthPaques}%
  % Jeudi de l'ascension = 38 jours après le lundi de Paques
  \foreach \jour in {1,...,38}{\nextday}%
  \setcounter{dayAscension}{\theday}%
  \setcounter{monthAscension}{\themonth}%
  % Vendredi, pont de l'ascension
  \nextday%
  \setcounter{dayAscensionPont}{\theday}%
  % Lundi de Pentecote = 10 jours après le vendredi de l'ascension
  \foreach \jour in {1,...,10}{\nextday}%
  \setcounter{dayPentecote}{\theday}%
  \setcounter{monthPentecote}{\themonth}%
  % Remettre la date au jour de la rentrée
  \setcounter{day}{\thelundiRentree}%
  \setcounter{month}{\themonthRentree}%
  \setcounter{year}{\theyearRentree}%
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Liste des macros pour l'affichage de la semaine
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% - \Semaine : afficher la première ligne du tableau du cahier de texte (Lundi
%   day/month, Mardi day/month, etc)
%
%%%% Affichage de la semaine
\newcommand{\Semaine}%
{%
  & Lundi \getDate\nextday%
  & Mardi \getDate\nextday%
  & Mercredi \getDate\nextday%
  & Jeudi \getDate\nextday%
  & Vendredi \getDate\nextday%
}%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Liste des macros pour l'emploi du temps
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% - \setNombreSemaines[1] : définir le nombre N de semaines à afficher.
% - \EmploiDuTemps[1] : afficher N fois le tableau #1, 
% - \sem[2] : Séances bimensuelle.
%
%%% Nombre de semaine à afficher 
% #1 est le nombre N de semaines à afficher.
% Si \setSemaines n'est pas utilisé, alors N=36 semaines.
\newcounter{nombreSemaines}
\newcommand{\setNombreSemaines}[1]%
{%
    \setcounter{nombreSemaines}{#1}
}%
%%%% Affichage de l'emploi du temps
\newcommand{\EmploiDuTemps}[1]%
{%
  \setJoursFeries%
  \ifthenelse{\equal{\thenombreSemaines}{0}}%
  {%
    \tikzmath{\NbSem=int(36);}%
  }{%
    \tikzmath{\NbSem=int(\thenombreSemaines);}%
  }%
  \foreach \n in {1,...,\NbSem}%
  {%
    {\Large\textsc{Semaine \no\n{} --- \getWeek}}%
    \vfil%
    \begin{tabularx}{\linewidth}{|c||X|X|X|X|X|} \hline%
      \Semaine \\ \hline%
      #1%
    \end{tabularx}%
    \vfil%
    \hfil \weekend \hfil%
    \newpage%
  }%
}%
%
%%%% Séance bimestrielle
% Affiche #1 si le numéro de la semaine est impair.
% Affiche #2 si le numéro de la semaine est pair.
\newcommand{\sem}[2]%
{%
  \pgfmathparse{int(mod(\n,2))}%
  \ifthenelse{\pgfmathresult=1}{#1}{#2}%
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Liste des macros pour les tableaux des classes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% - \TableauClasse : Afficher un tableau pour la classe.
% - \Classe        : Afficher 8 tableaux de classe.
% - \ListeEleves   : Insère la liste des élèves 
%
%%%% Réaliser un tableau pour une classe
% TableauClasse a deux arguments:
% - #1 : la classe.
% - #2 la liste des élèves, séparée par des virgules (sauf le dernier).
\newcommand{\TableauClasse}[2]%
{%
  \begin{tikzpicture}%
    % En tête et nom de la classe.
    \tikzmath{\largeurLigne=18; \largeurNom=3.5;\largeurColonne=\largeurLigne-\largeurNom;}%
    \draw[fill=gray!50] (0,-.5)  rectangle (\largeurLigne,.5);%
    \draw ({\largeurNom/2},0) node{\Large #1};%
    \draw[shift={(\largeurNom,-.5)}] (0,0) grid[xstep=\largeurColonne/20] %
    ++(\largeurColonne,1);%
    \foreach[count=\n] \NomPrenom in {#2}%
    {%
      % Griser une ligne sur 2 (les lignes paires)
      \pgfmathparse{int(mod(\n,2))}%
      \ifnum0=\pgfmathresult\relax%
        \fill[gray!25] (0,{-.5*\n}) rectangle ++(\largeurLigne,-.5);%
      \fi%
      % Ecrire le numéro de l'élève et son nom
      \draw (0,{-.5*\n}) node[text width=3.5cm,below right]%
      {\tiny \n. \NomPrenom} rectangle ++(\largeurNom,-.5);%
      \draw[shift={(\largeurNom,-.5*\n)}] (0,0) grid[xstep=14.5/20,ystep=.5]%
      (\largeurColonne,-.5);%
    }%
  \end{tikzpicture}%
}%
%%%% Réaliser les tableaux de classe.
% \Classe a 3 arguments:
% - #1 : la classe
% - #2 : le nombre de fois qu'on voit la classe par semaine
% - #3 : la liste des élèves
% Il y a 20 colonnes par tableaux. Il faut à peu près 2 tableaux pour faire 36
% semaines Le nombre de tableaux est donc deux fois le nombre de fois qu'on voit
% les élèves par semaine.
\newcommand{\Classe}[3]%
{%
  \immediate\write\outputstream{#1}%
  \immediate\write\outputstream{\string \begin{enumerate}}%
      % Ecrire les noms des élèves dans le bon fichier
      \foreach \i in {#3}%
      {%
      \immediate\write\outputstream{\string\item\space \i}%
      }%
  \immediate\write\outputstream{\string \end{enumerate}}%
  \begin{center}%
    \tikzmath{\NbTableaux=2*#2;}%
    \foreach \i in {1,...,\NbTableaux}%
    {%
      \TableauClasse{#1}{#3} \\[.50cm]%
    }%
  \end{center}%
  \newpage%
}%
%
%%%% Liste des élèves
% \ListeEleves va créer un fichier ListeEleves.tex qui contient la liste des
% élèves puis insère le fichier (compiler deux fois, comme \tableofcontents).
\newcommand{\ListeEleves}%
{%
  %insère le fichier ListeEleves.tex s'il existe
  \IfFileExists{ListeEleves.tex}{%
    \input{ListeEleves.tex}%
  }{%
    % Else : do nothing.%
  }%
  % Stocker le nom des élèves dans un fichier externe.
  \newwrite\outputstream%
  \immediate\openout\outputstream=ListeEleves.tex
}%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Divers 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Pas d'indentation des paragraphes
\setlength{\parindent}{0pt}
%
% Fin du package.
\endinput
