%% Informations générales %% Dernière modification le 2025-08-14 at 11:32 \NeedsTeXFormat{LaTeX2e}[1999/01/01]% \ProvidesPackage{cahierprof}% [2025-08-14 v1.3 Les commandes pour le cahier Professeur]% \def\cahierprofversion{1.3}% \def\cahierprofdate{14 août 2025}% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Sommaire % 0.1. Chargement des extensions % 0.2. Options % 0.3. Définition des compteurs % 0.4. Commandes pour le calendrier % 0.5. Commandes pour les jours spéciaux (rentrée, fériés, examens) % 0.6. Commandes pour l'affichage de la semaine % 1. Commandes pour l'emploi du temps % 2. Commandes pour les tableaux des classes % 3. Commandes pour la Liste des élèves % 4. Au début du document % 5. À la fin du document % 6. Divers %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 0.1. Chargement des extensions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \RequirePackage{tikz}% \usetikzlibrary{math}% \usetikzlibrary{calc}% \RequirePackage[babel=true,kerning=true]{microtype}% \RequirePackage{nicematrix}% \RequirePackage{ifthen}% % \RequirePackage{xparse}% \RequirePackage{xstring}% \RequirePackage{listofitems}% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 0.2. Options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Option samedi pour un emploi du temps du lundi au samedi \newboolean{Samedi}% \setboolean{Samedi}{false}% \tikzmath{\LastDay=int(5);}% \DeclareOption{samedi}{% \setboolean{Samedi}{true}% \tikzmath{\LastDay=int(6);}% }% \ProcessOptions% % \setSamedi : Déclare le samedi dans l'emploi du temps. \NewDocumentCommand \setSamedi{ }{% \setboolean{Samedi}{true}% \tikzmath{\LastDay=int(6);}% }% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 0.3. 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}% %% Compteur pour la fin Février \newcounter{FinFevrier}% %% Compteurs pour les vacances scolaires % Toussaint \newcounter{dayToussaint}% \newcounter{monthToussaint}% \newcounter{dayToussaintFin}% \newcounter{monthToussaintFin}% % Noel \newcounter{dayNoel}% \newcounter{monthNoel}% % Hiver \newcounter{dayHiver}% \newcounter{monthHiver}% % Printemps \newcounter{dayPrintemps}% \newcounter{monthPrintemps}% %% Compteurs pour les Jours Fériés \newcounter{dayPaques}% \newcounter{monthPaques}% \newcounter{dayAscension}% \newcounter{dayAscensionPont}% \newcounter{monthAscension}% \newcounter{dayPentecote}% \newcounter{monthPentecote}% %% Compteurs pour les Examens \newcounter{dayDNBDebut}% \newcounter{dayDNBFin}% \newcounter{monthDNB}% \newcounter{dayBacDebut}% \newcounter{dayBacFin}% \newcounter{monthBac}% \newcounter{dayBacPhilo}% \newcounter{monthBacPhilo}% \newcounter{dayBacFrancais}% \newcounter{monthBacFrancais}% \newcounter{dayGODebut}% \newcounter{dayGOFin}% \newcounter{monthGO}% %% Compteurs pour le dernier jours de classe \newcounter{dayFin}\setcounter{dayFin}{32}% \newcounter{monthFin}\setcounter{monthFin}{13}% %% Définition de compteurs pour gérer l'affichage de la semaine (\getWeek) \newcounter{dayRemember}% \newcounter{monthRemember}% \newcounter{yearRemember}% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 0.4. Commandes pour le calendrier %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % - \nextday : pour passer au jour d'après % - \weekend : pour passer les week-ends ou les vacances scolaires % - \isFerie : Si le jour est férié alors le fond de la colonne est coloré % - \isExamen: Si le jour est un jour d'examen, alors le fond de la colonne est coloré % - \getdate : afficher la date au format day/month/year % - \getWeek : afficher la semaine au format %%%% Passer au jour d'après \NewDocumentCommand \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 \NewDocumentCommand \weekend{ }{% \ifthenelse{\theday=\thedayToussaint \and \themonth=\themonthToussaint}{% % Vacances de Toussaint : 15 jours de vacances, bien mérités ! \foreach \jour in {1,...,16}{\nextday}% Vacances de la Toussaint% }{% \ifthenelse{\theday=\thedayNoel \and \themonth=\themonthNoel}{% % Vacances de Noël : 15 jours de vacances, bien mérités ! \foreach \jour in {1,...,16}{\nextday}% Vacances de Noël% }{% \ifthenelse{\theday=\thedayHiver \and \themonth=\themonthHiver}{% % Vacances d'Hiver : 15 jours de vacances, bien mérités ! \foreach \jour in {1,...,16}{\nextday}% Vacances d'hiver% }{% \ifthenelse{\theday=\thedayPrintemps \and \themonth=\themonthPrintemps}{% % Vacances de Printemps : 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% }% }% }% }% }% %%%% Gestion des jours fériés \NewDocumentCommand \isFerie{ }{% \ifthenelse{% Jour de l'an, 1er janvier \(\theday=1 \and \themonth=1\)% \or% Lundi de Pâques \(\theday=\thedayPaques \and \themonth=\themonthPaques\)% \or% Fête du travail, le 1er mai \(\theday=1 \and \themonth=5\)% \or% Victoire 1945, le 8 mai \(\theday=8 \and \themonth=5\)% \or% Jeudi de l'ascension \(\theday=\thedayAscension \and \themonth=\themonthAscension\)% \or% Pont du vendredi de l'ascension \(\theday=\thedayAscensionPont \and \themonth=\themonthAscension\)% \or% Lundi de Pentecôte \(\theday=\thedayPentecote \and \themonth=\themonthPentecote\)% \or% Fête Nationale, le 14 juillet \(\theday=14 \and \themonth=7\)% \or% Assomption, le 15 août \(\theday=15 \and \themonth=8\)% \or% Toussaint, le 1er novembre \(\theday=1 \and \themonth=11\)% \or% Armistice 1914-1918, le 11 novembre \(\theday=11 \and \themonth=11\)% \or% Noël, le 25 décembre \(\theday=25 \and \themonth=12\)% }{% Si le jour est férié : la colonne est grisée % \Block[r]{1-1}{$\star$Ferié$\star$}% \columncolor{lightgray}% }{}% }% %%%% Gestion des jours d'examens \NewDocumentCommand \isExamen{ }{% \ifthenelse{% Les jours du DNB \(\theday=\thedayDNBDebut \or \theday>\thedayDNBDebut\)% \and\(\theday<\thedayDNBFin \or \theday=\thedayDNBFin\)% \and \themonth=\themonthDNB% }{% Couleur du fond de la colonne du DNB \bgDNB% % \Block[r]{1-1}{$\star$DNB$\star$}% }{}% \ifthenelse{% Les jours du Bac \(\theday=\thedayBacDebut \or \theday>\thedayBacDebut\)% \and\(\theday<\thedayBacFin \or \theday=\thedayBacFin\)% \and \themonth=\themonthBac% }{% Couleur du fond de la colonne du bac \bgBac% % \Block[r]{1-1}{$\star$Spé$\star$}% }{}% % Le jour du Bac Philo \ifthenelse{\theday=\thedayBacPhilo \and \themonth=\themonthBacPhilo% }{% Couleur du fond de la colonne du bac philo \bgBacPhilo% % \Block[r]{1-1}{$\star$Philo$\star$}% }{}% % Le jour du Bac Français \ifthenelse{\theday=\thedayBacFrancais \and \themonth=\themonthBacFrancais% }{% Couleur du fond de la colonne Bac Français \bgBacFrancais% % \Block[r]{1-1}{$\star$EAF$\star$} }{}% % Les jours du GO \ifthenelse{% \(\theday=\thedayGODebut \or \theday>\thedayGODebut\)% \and\(\theday<\thedayGOFin \or \theday=\thedayGOFin\)% \and \themonth=\themonthGO% }{% Couleur du fond de la colonne du Grand Oral \bgGO% \Block[r]{1-1}{$\star$GO$\star$}% }{}% }% %%%% Obtenir la date dans la première ligne du tableau \NewDocumentCommand \getDate{ }{% \theday/\themonth/\theyear% On affiche la date \isFerie% Est-ce que le jour \theday/\themonth est férié? \isExamen% Est-ce que le jour \theday/\themonth est un jour d'examen? }% %%%% Affichage de la semaine. \NewDocumentCommand \getWeek{ }{% \setcounter{dayRemember}{\theday}% \setcounter{monthRemember}{\themonth}% \setcounter{yearRemember}{\theyear}% Du lundi \theday{} \IfStrEqCase{\themonth}{% {1}{janvier}% {2}{Février}% {3}{mars}% {4}{avril}% {5}{mai}% {6}{juin}% {7}{juillet}% {8}{août}% {9}{septembre}% {10}{octobre}% {11}{novembre}% {12}{décembre}% }\space\theyear{} au \nextday\nextday\nextday\nextday% \ifthenelse{\boolean{Samedi}}{samedi\nextday}{vendredi} \theday{} \IfStrEqCase{\themonth}{% {1}{janvier}% {2}{Février}% {3}{mars}% {4}{avril}% {5}{mai}% {6}{juin}% {7}{juillet}% {8}{août}% {9}{septembre}% {10}{octobre}% {11}{novembre}% {12}{décembre}% }\space\theyear \setcounter{day}{\thedayRemember}% \setcounter{month}{\themonthRemember}% \setcounter{year}{\theyearRemember}% }% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 0.5. Commandes pour les jours spéciaux (rentrée, fériés, examens) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % - \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 Pâques au format DD-MM % - \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. % - \setDNB : Définir les dates de début et fin des épreuves du DNB % - \setBac : Définir les dates de début et fin des épreuves du Bac % - \setBacPhilo : Définir le jour du Bac philo % - \setBacFrancais : Définir le jour du Bac français % - \setGO : Définir les dates de début et fin du Grand Oral %%%% Définir le lundi de la rentrée \NewDocumentCommand \setLundiRentree{ m m m }{% % #1 = Le jour ; #2 = Le mois ; #3 = L'année de la rentrée \setcounter{lundiRentree}{#1}% \setcounter{monthRentree}{#2}% \setcounter{yearRentree}{#3}% % Gestion des années bissextiles. \setcounter{year}{\theyearRentree}% % Si la rentrée est après la fin de Février, alors on prend en compte l'année suivante. \ifthenelse{\themonthRentree>2}{\stepcounter{year}}{}% % 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, de noël, d'hiver et de printemps \NewDocumentCommand \setDebutToussaint{ m m }{% % #1 = Le jour (samedi) des vacances ; #2 = Le mois des vacances \setcounter{dayToussaint}{#1}% \setcounter{monthToussaint}{#2}% }% %%%% Définir le début des vacances de Noel \NewDocumentCommand \setDebutNoel{ m m }{% % #1 = Le jour (samedi) des vacances ; #2 = Le mois des vacances \setcounter{dayNoel}{#1}% \setcounter{monthNoel}{#2}% }% %%%% Définir le début des vacances d'hiver \NewDocumentCommand \setDebutHiver{ m m }{% % #1 = Le jour (samedi) des vacances ; #2 = Le mois des vacances \setcounter{dayHiver}{#1}% \setcounter{monthHiver}{#2}% }% %%%% Définir le début des vacances de Printemps \NewDocumentCommand \setDebutPrintemps{ m m }{% % #1 = Le jour (samedi) des vacances ; #2 = Le mois des vacances \setcounter{dayPrintemps}{#1}% \setcounter{monthPrintemps}{#2}% }% %%%% Définir le Lundi de Pâques \NewDocumentCommand \setLundiPaques{ m m }{% % #1 = Le jour ; #2 = Le mois du lundi de Pâques. \setcounter{dayPaques}{#1}% \setcounter{monthPaques}{#2}% }% %%%% Calculer les dates des jours fériés variables (Pâques, Ascension, Pentecôte) \NewDocumentCommand \setJoursFeries{ }{% \ifthenelse{\thedayPaques=0}{% Si le lundi de Pâques n'est pas défini. \setcounter{year}{\theyearRentree}% \stepcounter{year}% % Calcul du Dimanche de Pâques, par la méthode de Butcher-Meeus. \tikzmath{% \n=int(mod(\theyear,19)); % cycle de Méton \cc=int(div(\theyear,100)); % centaine l'année \u=int(mod(\theyear,100)); % rang de l'année \s=int(div(\cc,4)); % siècle bissextile \t=int(mod(\cc,4)); % siècle bissextile \p=int(div(\cc+8,25)); % cycle de proemptose \q=int(div(\cc-\p+1,3)); % proemptose \e=int(mod(19*\n+\cc-\s-\q+15,30)); % épacte \b=int(div(\u,4)); % année bissextile \d=int(mod(\u,4)); % année bissextile \LL=int(mod(2*\t+2*\b-\e-\d+32,7)); % lettre dominicale \h=int(div(\n+11*\e+22*\LL,451)); % correction \m=int(div(\e+\LL-7*\h+114,31)); % mois du dimanche de Pâques \j=int(mod(\e+\LL-7*\h+114,31)+1); % jour du dimanche de Pâques }% % Dimanche de Pâques \setcounter{day}{\j}% \setcounter{month}{\m}% % lundi de Pâques, immédiatement après le dimanche de Pâques. \nextday% \setcounter{dayPaques}{\theday}% \setcounter{monthPaques}{\themonth}% }{} % Jeudi de l'ascension = 38 jours après le lundi de Pâques \foreach \jour in {1,...,38}{\nextday}% \setcounter{dayAscension}{\theday}% \setcounter{monthAscension}{\themonth}% % Vendredi, pont de l'ascension \nextday% \setcounter{dayAscensionPont}{\theday}% % Lundi de Pentecôte = 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}% }% %%%% Définir le début et la fin du DNB \NewDocumentCommand \setDNB{ O{lightgray} m m m }{% % #1 = couleur du fond ; #2 = jour début ; #3 = jour fin ; #4 = mois \def\bgDNB{\columncolor{#1}}% \setcounter{dayDNBDebut}{#2}% \setcounter{dayDNBFin}{#3}% \setcounter{monthDNB}{#4}% }% %%%% Définir le jour du Bac Français \NewDocumentCommand \setBacFrancais{ O{lightgray} m m }{% % #1 = couleur du fond ; #2 = jour ; #3 = mois \def\bgBacFrancais{\columncolor{#1}}% \setcounter{dayBacFrancais}{#2}% \setcounter{monthBacFrancais}{#3}% }% %%%% Définir le jour du Bac Philo \NewDocumentCommand \setBacPhilo{ O{lightgray} m m }{% % #1 = couleur du fond ; #2 = jour ; #3 = mois \def\bgBacPhilo{\columncolor{#1}}% \setcounter{dayBacPhilo}{#2}% \setcounter{monthBacPhilo}{#3}% }% %%%% Définir le début et la fin du Bac \NewDocumentCommand \setBac{ O{lightgray} m m m }{% % #1 = couleur du fond ; #2 = jour début ; #3 = jour fin ; #4 = mois \def\bgBac{\columncolor{#1}}% \setcounter{dayBacDebut}{#2}% \setcounter{dayBacFin}{#3}% \setcounter{monthBac}{#4}% }% %%%%%%% Définir le début et la fin du Grand Oral \NewDocumentCommand \setGO{ O{lightgray} m m m }{% % #1 = couleur du fond ; #2 = jour début ; #3 = jour fin ; #4 = mois \def\bgGO{\columncolor{#1}}% \setcounter{dayGODebut}{#2}% \setcounter{dayGOFin}{#3}% \setcounter{monthGO}{#4}% }% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 0.6. Commandes pour l'affichage de la semaine %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \Semaine : afficher la première ligne du tableau du cahier de texte de la % forme Lundi day/month, Mardi day/month, etc. \NewDocumentCommand \Semaine{ }{% & Lundi \getDate\nextday% & Mardi \getDate\nextday% & Mercredi \getDate\nextday% & Jeudi \getDate\nextday% & Vendredi \getDate\nextday% \ifthenelse{\boolean{Samedi}}{& Samedi\ \getDate}{}% }% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 1. Commandes pour l'emploi du temps %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % - \setNombreSemaines : définir le nombre N de semaines à afficher. % - \EmploiDuTemps : afficher N fois le tableau hebdomadaire. % - \Sem : Séances bimensuelle. % - \DeuxH : Bloc de 2h de cours. % - \Heures : Bloc de plusieures heures de cours. % - \TP : Bloc de 1h30 de cours. %%% Nombre de semaine à afficher % Par défaut on affiche 36 semaines. \tikzmath{\NbSem=int(36);}% % Si on définit \setNombreSemaines, alors on affiche #1 semaine. \NewDocumentCommand \setNombreSemaines{ m }{% \tikzmath{\NbSem=int(#1);}% }% %%%% Affichage de l'emploi du temps \NewDocumentCommand \EmploiDuTemps{ m }{% % #1 = Tableau hebdomadaire \foreach \n in {1,...,\NbSem}{% {\Large\textsc{Semaine \n{} --- \getWeek}}% \vfil% \begin{NiceTabularX}{\linewidth}{l||*{\LastDay}{X}}[hvlines]% \CodeBefore [create-cell-nodes] \Body \Semaine \\% #1% \end{NiceTabularX}% \vfil% \hfil \weekend \hfil% \newpage% }% }% %%%% Séances bimestrielles \NewDocumentCommand \Sem{ m m }{% % #1 = Contenu de la semaine impair ; #2 = contenu de la semaine paire \pgfmathparse{int(mod(\n,2))}% \ifthenelse{\pgfmathresult=1}{#1}{#2}% }% %%%% Heures de cours multiples % Bloc de 2h. \NewDocumentCommand \DeuxH{ m }{% % #1 = Contenu des 2h de cours. \Block[t,l]{2-1}{#1}% }% % Bloc de plusieurs heures \NewDocumentCommand \Heures{ m m }{% % #1 = Nombre d'heures du bloc ; #2 = Contenu du bloc. \Block[t,l]{#1-1}{#2}% }% % Bloc de 1h30 \ExplSyntaxOn% \cs_new_protected:Nn \__filet_fin:nn{ % Filet au bout de 1h30 \tikz \draw% (\fp_eval:n{#1+1.5} -| #2) -- (\fp_eval:n{#1+1.5} -| \int_eval:n{#2+1});% }% \NewDocumentCommand \FiletFin{ }{% Filet au bout de 1h30. \tl_gput_right:Nx \g_nicematrix_code_before_tl{% \__filet_fin:nn{\arabic{iRow}}{\arabic{jCol}}% }% }% \cs_new_protected:Nn \__filet_demi:nnn{% Filet au bout de 30 min \tikz \draw% (\fp_eval:n{#1+.5} -| #2) -- (\fp_eval:n{#1+.5} -| \int_eval:n{#2+1}) ;% % Nom de la classe à la demi. \tikz \draw (\fp_eval:n{#1+.5} -| #2) node[below=5.5pt,right=2.5pt]{#3};% }% \NewDocumentCommand \FiletDemi{ m }{% Filet à 30 min % #1 = Nom de la classe. \tl_gput_right:Nx \g_nicematrix_code_before_tl{% \__filet_demi:nnn{\arabic{iRow}}{\arabic{jCol}}{\exp_not:n{#1}}% }% }% \ExplSyntaxOff% \NewDocumentCommand \TP{ s m }{% % #1 = star : TP à la demi heure ; #2 = nom de la classe \IfBooleanTF{#1}{% \Block[t,l]{2-1}{}% \FiletDemi{#2}% }{% \Block[t,l]{2-1}{#2}% \FiletFin{}% }% }% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 2. Commandes pour les tableaux des classes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % - \setFinCours : Fixe la fin des cours % - \setNombreColonnes : Le nombre de colonne par tableau de classe. % - \Classe : Afficher les tableaux de classe. %%%%% Fixer la fin des cours \NewDocumentCommand \setFinCours{ m m }{% % #1 = jour ; #2 = mois de la fin des cours \setcounter{dayFin}{#1}% \setcounter{monthFin}{#2}% }% %%% Commande pour répliquer le nombre de colonnes dans le tableau. \ExplSyntaxOn% \newcommand*\replicate{\prg_replicate:nn}% \ExplSyntaxOff% %%% Compteur pour la position de la date dans le tableau \newcounter{ypos}% %%% Commande Classe. \makeatletter% \NewDocumentCommand \Classe{ s O{18} m m m }{% % #1 = star : si séance bimestrielle. % #2 = optionnel : nombre de colonne (par défaut = 18). % #3 = nom de la classe % #4 = - soit un entier qui correspond au nombre de fois où l'on voit la % classe dans la semaine, % - soit une liste qui correspond aux jours où l'on voit la classe dans % la semaine (par exemple L,L,M pour Lundi, Lundi et Mardi), % - soit une liste Jour/Parité (nécessite l'étoile) qui correspond au % jour et à la parité où l'on voit la classe. % #5 = la liste des élèves. %%% Nombre de colonnes dans le tableau \tikzmath{\NbColonnes=int(#2);}% %%% Écrire le nom des élèves dans le fichier ListeEleves.aux_LE : \immediate\write\tempfile{\string \subsection*{#3}}% Nom de la classe \immediate\write\tempfile{\string \begin{enumerate}}% \foreach \i in {#5}{% \immediate\write\tempfile{\string\item\space \i}% Liste des élèves }% \immediate\write\tempfile{\string \end{enumerate}}% %%% Imprimer les tableaux d'appel \def\tabledata{}% initialisation du tableau. \foreach[count=\n] \NomPrenom in {#5}{% Corps du tableau avec la liste des élèves \protected@xappto\tabledata{{\tiny\n. \NomPrenom} \replicate{\NbColonnes}{&} \\}% }% %%% Combien de tableaux à imprimer ? \IfDecimal{#4}{% Si #4 est un entier, Le nombre hebdo où l'on voit la classe est #4 \pgfmathtruncatemacro\NbTableaux{ceil(#4*\NbSem/\NbColonnes)-1}% }{% Sinon #4 est une liste et on compte le nombre de fois où l'on voit la classe \IfBooleanTF{#1}{% Si star = liste #4 du type L/1,M/2,W/0. \pgfmathsetmacro{\p}{0}% \foreach \J/\P in{#4}{% On va calculer Les parités de la liste % 0 --> Toutes les semaines ; 1 ou 2 --> 0,5 semaine. \ifthenelse{\P=0}{\pgfmathparse{\p+1}}{\pgfmathparse{\p+.5}}% \xdef\p{\pgfmathresult}% }% \pgfmathtruncatemacro\NbTableaux{ceil(\p*\NbSem/\NbColonnes)-1}% }{% Sinon liste #4 du type L,M,W \readlist{\listeJours}{#4}% \pgfmathtruncatemacro\NbTableaux{ceil(\listeJourslen*\NbSem/\NbColonnes)-1}% }% }% \foreach \i in {0,...,\NbTableaux}{% Pour chaque tableau à imprimer % Si on imprime les dates, savoir où commencer et où finir. \pgfmathtruncatemacro\debut{1+\i*\NbColonnes}% \pgfmathtruncatemacro\fin{2+\NbColonnes+\i*\NbColonnes}% % La postion de la date est initialisée à 1 \setcounter{ypos}{1}% % Corps du tableau. \begin{NiceTabularX}{\linewidth}{l*{\NbColonnes}{X|}}[hvlines]% \CodeBefore% \rowcolors{2}{lightgray}{}% Alternance des couleurs du tableau blanc/gris. \Body% \rowcolor{lightgray}{\Large\strut #3} \replicate{\NbColonnes}{&\NotEmpty} \\% \tabledata% \CodeAfter% \IfDecimal{#4}{% Si on veut un tableau sans date, la clé #3 est un entier. % Le tableau est fini. }{% Si on veut un tableau avec les dates la clé #4 est une liste du type L,M,W \IfBooleanTF{#1}{% Si star : la liste des de la forme L/1,M,2,W0 \foreach \Day/\Parite/\Date in \ListeJours {% On récupère chaque jour de l'année \foreach \J/\P in {#4}{% Pour les jours/Parite de la liste #3 \ifthenelse{% Si ça correspond à un jour de #1 \equal{\Day}{\J}\AND\(\equal{\P}{0}\OR\equal{\P}{\Parite}\)}{% \stepcounter{ypos}% On place la date à la bonne position. \ifthenelse{\theypos>\debut\AND\theypos<\fin}{% \pgfmathtruncatemacro\position{\theypos-\i*\NbColonnes}% \tikz[remember picture,overlay]\path (1-\position) node{\tiny \Date};}{}% }{}% }% }% }{% Si pas star : la liste des de la forme L,M,W \foreach \Day/\Parite/\Date in \ListeJours {% On récupère chaque jour de l'année \foreach \J/\P in {#4}{% Pour les jours/parité de la liste #4 \ifthenelse{\equal{\Day}{\J}}{% Si ça correspond à un jour de #3 \stepcounter{ypos}% On place la date à la bonne position. \ifthenelse{\theypos>\debut\AND\theypos<\fin}{% \pgfmathtruncatemacro\position{\theypos-\i*\NbColonnes}% \tikz[remember picture,overlay]\path (1-\position) node{\tiny \Date};}{}% }{}% }% }% }% }% \end{NiceTabularX}\par% \vspace{4ex}% }% }% \makeatother% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 3. Commandes pour la Liste des élèves %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Écrire la liste des élèves \NewDocumentCommand \ListeEleves{ m }{% % #1 = le nom du fichier à insérer. \ifthenelse{\equal{#1}{}}{% % Si #1 est vide, on insère le fichier ListeEleves.tex \IfFileExists{ListeEleves.tex}{\input{ListeEleves.tex}}{}% }{% Sinon, on utilise le fichier #1 (s'il existe) \IfFileExists{#1}{\input{#1}}{}% }% }% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 4. Au début du document %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \AtBeginDocument{% %%% Stocker le nom des élèves dans un fichier externe. \newwrite\tempfile% \immediate\openout\tempfile=\jobname.aux_LE% %%% Création de la liste \ListeJours qui contient les jours de l'année \setJoursFeries% les jours fériés sont définis \setcounter{day}{\thelundiRentree}% On fixe les compteurs à la rentrée. \setcounter{month}{\themonthRentree}% \setcounter{year}{\theyearRentree}% %%% Commande locale pour savoir si #3-#4 est un jour ouvré \NewDocumentCommand \isJourOuvre{ m m m m }{% % #1 = jour ; #2 = parité ; #3 = quantième ; #4 = mois. \IfStrEqCase{#3-#4}{% Si la date est un jour férié, on ne fait rien. {1-1}{}% 1er janvier {\thedayPaques-\themonthPaques}{}% Lundi de Pâques {1-5}{}% 1er mai {1-8}{}% 8 mai {\thedayAscension-\themonthAscension}{}% Ascension {\thedayAscensionPont-\themonthAscension}{}% Pont de l'ascension {\thedayPentecote-\themonthPentecote}{}% Pentecôte {14-17}{}% 14 juillet {15-8}{}% 15 août {1-11}{}% 1er novembre {11-11}{}% 11 novembre {25-12}{}% 25 décembre {\thedayFin-\themonthFin}{}% Jours de la fin des cours }% [\ifthenelse{\(\themonthFin<13\) \AND% \(% Si la date est après \thedayFin-\themonthFin, on ne fait rien. \(#3>\thedayFin \and #4=\themonthFin\) \OR \(#4>\themonthFin \and #4<\themonthRentree\)% \)% Sinon, on ajoute le jour à la liste des jours... }{}{\xdef\ListeJours{\ListeJours #1/#2/#3-#4,}}]% }% %%% Définition de \ListeJours \gdef\ListeJours{}% \foreach \n in {1,...,\NbSem}{% \pgfmathtruncatemacro\parite{2-int(mod(\n,2))}% Calcul de la parité de la semaine \isJourOuvre{L}{\parite}{\theday}{\themonth}\nextday% Lundi \isJourOuvre{M}{\parite}{\theday}{\themonth}\nextday% Mardi \isJourOuvre{W}{\parite}{\theday}{\themonth}\nextday% Mercredi \isJourOuvre{J}{\parite}{\theday}{\themonth}\nextday% Jeudi \isJourOuvre{V}{\parite}{\theday}{\themonth}\nextday% Vendredi \isJourOuvre{S}{\parite}{\theday}{\themonth}% Samedi \ifthenelse{% Si on est au samedi de vacances \(\theday=\thedayToussaint \and \themonth=\themonthToussaint\)% \OR \(\theday=\thedayNoel \and \themonth=\themonthNoel\)% \OR \(\theday=\thedayNoel \and \themonth=\themonthNoel\)% \OR \(\theday=\thedayHiver \and \themonth=\themonthHiver\)% \OR \(\theday=\thedayPrintemps \and \themonth=\themonthPrintemps\)% }{% On avance de 15 jours \foreach \m in {1,...,16}{\nextday}% }{% Sinon C'est un week-end \nextday\nextday% }% }% \StrGobbleRight{\ListeJours}{1}[\ListeJours]% Suppression de la dernière virgule \setcounter{day}{\thelundiRentree}% On fixe les compteurs à la rentrée. \setcounter{month}{\themonthRentree}% \setcounter{year}{\theyearRentree}% }% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 5. À la fin du document %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \AtEndDocument{% \immediate\closeout\tempfile% Close the temp file % Copy the temp file to ListeEleves.tex \newwrite\copyfile% open the file to write to \immediate\openout\copyfile=ListeEleves.tex% \newread\file% open the file to read from \openin\file=\jobname.aux_LE \begingroup\endlinechar=-1% \loop\unless\ifeof\file% \read\file to\fileline% Read one line and store it into \fileline % print the content to copy.txt \immediate\write\copyfile{\unexpanded\expandafter{\fileline}}% \repeat% \endgroup% \closein\file% \closeout\tempfile% }% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 6. Divers %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Pas d'indentation des paragraphes \setlength{\parindent}{0pt}% % Fin du package. \endinput