\documentclass[a4paper,french,10pt]{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{babel}
\usepackage[margin=1.8cm,head=.9cm,headsep=10pt,foot=.9cm]{geometry}
\usepackage{cahierprof}
% Extensions pour la présentation de cahierprof-doc.tex
\usepackage{tcolorbox}
\usepackage[framemethod=TikZ]{mdframed}
\usepackage{minted}
\usepackage{xcolor}
\usepackage[colorlinks]{hyperref}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% En tête du document
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\title{
  cahierprof.sty\\
  Un cahier de textes en \LaTeX{} pour les professeurs
}
\author{
  Raphaël Giromini\\
  \mil|raphael.giromini -- at -- gmail.com|
}
\date{Version \cahierprofversion{} -- \cahierprofdate{}}

\setminted{frame=single,linenos,numbersep=6pt}
\newcommand{\mil}{\mintinline{latex}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Début du document
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}

\maketitle

\section*{Résumé}
\noindent
L'extension \mil|cahierprof.sty| permet de créer un cahier de texte du
professeur, constitué de trois éléments:
\begin{itemize}
  \item un calendrier scolaire annuel (de septembre à juillet) avec une semaine
    par par page;
  \item un tableau des élèves répartis par classe (pour les appels et/ou les
    notes).
  \item une liste des élèves, qui créé un fichier supplémentaire
    \mil|ListeEleves.tex| à partir des listes des élèves dans les tableaux
    des classes. 
\end{itemize}
Merci à Frédéric Bréal pour ses conseils, ses idées et ses relectures attentives
de cette extension. Merci à F. Pantigny pour ses conseils et exemples sur
l'utilisation de l'extension \mil|nicematrix.sty|.

% \smallskip
% \noindent
% Le paquet \mil|cahierprof| charge les paquets \mil|geometry|,
% \mil|tikz| (avec les biliothèques \mil|math| et \mil|calc|),
% \mil|microtype| (avec les options \mil|babel=true| et
% \mil|kerning=true|), \mil|ifthen|, \mil|nicematrix|, \mil|xparse|,
% \mil|xstring| et \mil|listofitems|.

\subsection*{Nouveautés de la version 1.3}
\begin{itemize}
  \item Possibilité de créer des blocs de 1h30 dans l'emploi du temps avec la
    command \mil|\TP|.
  \item Redéfinition de la commande \mil|\Classe| pour y intégrer le nombre de
    colonne par tableau d'appel. La commande \mil|\setNombreColonnes| disparait.
  \item Correction de bugs mineurs de la version 1.2.
\end{itemize}

\vfil
\begin{center}
  \begin{minipage}{.8\linewidth}
    \begin{tcolorbox}[colback=white, colframe=green!75!black]
      \tableofcontents
    \end{tcolorbox}
  \end{minipage}
\end{center}
\vfil

\newpage

\section{
  Calendrier des semaines de cours -- \texttt{\textbackslash{}EmploiDuTemps}
}

Pour créer un calendrier scolaire hebdomadaire, il faut définir en préambule la
date du premier lundi de l'année scolaire, avec la commande 
\mil|\setLundiRentree{<JJ>}{<MM>}{<YYYY>}|, où \mil|<JJ>| est le
quantième du mois; \mil|<MM>| est le mois et \mil|<YYYY>| est l'année de la
rentrée.
\begin{minted}{latex}
% Le lundi de la semaine de la rentrée est le 2 septembre 2024 
\setLundiRentree{2}{9}{2024}
\end{minted}

La commande \mil|\EmploiDuTemps{<Tableau_hebdomadaire>}| génère 36 tableaux
hebdomadaires à compter du premier lundi de l'année scolaire.
La clé \mil|<Tableau_hebdomadaire>| est un tableau de la
semaine (sous la forme d'un \mil|niceTabularX|) avec 6 colonnes.
\begin{minted}{latex}
\EmploiDuTemps{
  %     & Lundi      & Mardi        & Merc. & Jeudi      & Vend.                 \\
  8h    &            &              &       &            & \DeuxH{1G}            \\[1.5cm]
  9h    & \Sem{1G}{} &              &       & \TP{1G}    &                       \\[1.5cm]
  10h   &            & \DeuxH{2nde} & 1G    & \TP*{2nde} & 1STMG                 \\[1.5cm]
  11h   &            &              &       &            &                       \\[1.5cm]
  \hline\hline
  13h30 & 2nde       & 1STMG        & 1STMG &            & 2nde (Gr.~\Sem{A}{B}) \\[1.5cm]
  14h30 &            &              &       &            & 2euro                 \\[1.5cm]
  15h30 &            &              &       &            &                       \\[1.5cm]
  16h30 &            &              &       &            &                       \\[1.5cm]
}
\end{minted}

La commande \mil|\setNombreSemaines{<N>}| permet d'afficher un nombre différent
de semaines, où \mil|<N>| est le nombre entier de semaines à générer.
Cette commande doit être placée avant la commande \mil|\EmploiDuTemps|.
\begin{minted}{latex}
% Un emploi du temps avec 10 semaines de cours.
\setNombreSemaines{10}
\end{minted}

\subsection{
  Emploi du temps du lundi au samedi -- 
  option \texttt{samedi} ou \texttt{\textbackslash{}setSamedi}
}

Par défaut, l'emploi du temps est du lundi au vendredi. Mais il est possible
d'avoir un emploi du temps du lundi au samedi (7 colonnes) avec l'option
\mil|samedi|, dans la déclaration de l'extension.
\begin{minted}{latex}
\usepackage[samedi]{cahierprof}
\end{minted}
Cette option peut également être activée par la commande \mil|\setSamedi|,
placée avant la commande \mil|\EmploiDuTemps|. 
\begin{minted}{latex}
% Déclaration du samedi (sans utiliser l'option de l'extension)
\setSamedi
% Emploi du temps sur sept colonnes.
\EmploiDuTemps{
  %     & Lundi      & Mardi & Merc. & Jeudi      & Vend.      & Samedi           \\
  8h    &            &       &       &            & \DeuxH{1G} &                  \\[1.5cm]
  9h    & \Sem{1G}{} &       &       & \TP{1G}    &            & \Heure{3}{TSTMG} \\[1.5cm]
  10h   &            & 2nde  & 1G    & \TP*{2nde} & 1STMG      &                  \\[1.5cm]
  11h   &            &       &       &            &            &                  \\[1.5cm]
  \hline\hline
  13h30 & 2nde       & 1STMG & 1STMG &            &            &                  \\[1.5cm]
  14h30 &            &       &       &            & 2euro      &                  \\[1.5cm]
  15h30 &            &       &       &            &            &                  \\[1.5cm]
  16h30 &            &       &       &            &            &                  \\[1.5cm]
}
\end{minted}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Saut de page manuel.
\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\subsection{
  Séance bimensuelle -- \texttt{\textbackslash{}Sem}
}

La commande \mil|\Sem{<S1>}{<S2>}| permet de définir des séances bimensuelles
(tous les 15 jours), suivant la parité de la semaine. \mil|<S1>| est le contenu
de la séance en semaine impaire et \mil|<S2>| est le contenu de la séance en
semaine paire.

\begin{minted}{latex}
% Les 1G ont cours uniquement en semaine impaire. 
\Sem{1G}{}
% Les 2nde sont en groupe (A et B) bimensuels. 
2nde (Gr.~\Sem{A}{B})
\end{minted}

\subsection{
  Bloc d'heures de cours -- \texttt{\textbackslash{}DeuxH} ou
  \texttt{\textbackslash{}Heures}
}

Pour les séances qui durent plus d'une heure, il est possible de créer un bloc
sur plusieurs heures.
\begin{itemize}
  \item La commande \mil|\DeuxH{<classe>}| crée un bloc de deux heures
    pour la classe \mil|<classe>|.
  \item La commande \mil|\Heures{<N>}{<classe>}| crée un bloc de \mil|<N>|
    heures pour la classe \mil|<classe>|.
\end{itemize}

\begin{minted}{latex}
% Bloc de deux heures de Seconde
\DeuxH{2nde}
% Bloc de trois heures de Terminale STMG
\Heures{3}{TSTMG}
\end{minted}

\subsection{
  Bloc d'une heure et demi de cours -- \texttt{\textbackslash{}TP}
}

Il est possible de créer un bloc de 1h30 avec la commande
\mil|\TP<*>{<classe>}|.
\begin{itemize}
  \item La commande \mil|\TP{<classe>}| crée un bloc de 1h30 pour la classe
    \mil|<classe>| qui commence à l'heure entière.
  \item La commande \mil|\TP*{<classe>}| crée un bloc de 1h30 pour la classe
    \mil|<classe>| qui commence à la demi de l'heure.
\end{itemize}

\begin{minted}{latex}
% Bloc de 1h30 pour les 1G, début du bloc à l'heure. 
\TP{1G}
% Bloc de 1h30 pour les 2nde, début du bloc à la demi de l'heure.
\TP*{2nde}
\end{minted}

\subsection{
  Gestion des vacances scolaires
}

Les vacances scolaires zonées (Toussaint, Noël, hiver et printemps) peuvent se
définir en préambule sous la forme \mil|\setDebutToussaint{<JJ>}{<MM>}| où
\mil|<JJ>| est le quantième du samedi du début des vacances et \mil|<MM>| le
mois. 
Chacune de ces vacances dure automatiquement 15 jours.
\begin{minted}{latex}
% Début de chaque vacances scolaire pour l'année en cours (le samedi).
\setDebutToussaint{19}{10}
\setDebutNoel{21}{12}
\setDebutHiver{15}{2}
\setDebutPrintemps{12}{4}
\end{minted}

\subsection{
  Gestion des examens -- \texttt{\textbackslash{}setDNB} et
  \texttt{\textbackslash{}setBac}
}

Dans le préambule, il est possible de définir les dates du  diplôme national du
brevet (DNB), de l'épreuve de philosophie, de l'épreuve de français, des
épreuves de spécialités et la période du grand oral. 
\begin{itemize}
  \item La commande \mil|\setDNB[<couleur>]{<JD>}{<JF>}{YY}| définie les dates
    des épreuves du DNB, où \mil|<JD>| est le quantième du début, \mil|<JF>| est
    le quantième de la fin et \mil|<MM>| est le mois.
  \item La commande \mil|\setBacPhilo[<couleur>]{<JJ>}{<MM>}| définie la date de
    l'épreuve de philosophie du baccalauréat, où \mil|<JJ>| est le
    quantième et \mil|<MM>| est le mois.
  \item La commande \mil|\setBacFrancais[<couleur>]{<JJ>}{<MM>}| définie la date
    de l'épreuve anticipée de français du baccalauréat, où \mil|<JJ>| est le
    quantième et \mil|<MM>| est le mois.
  \item La commande \mil|\setBac[<couleur>]{<JD>}{<JF>}{<MM>}| définie les dates
    des épreuves de spécialité du baccalauréat, où \mil|<JD>| est le quantième
    du début, \mil|<JF>| est le quantième de la fin et \mil|<MM>| est le mois.
  \item La commande \mil|\setGO[<couleur>]{<JD>}{<JF>}{<MM>}| définie la période
    des épreuves du grand oral du baccalauréat, où \mil|<JD>| est le quantième
    du début, \mil|<JF>| est le quantième de la fin et \mil|<MM>| est le
    mois.
\end{itemize}
Pour les jours d'examens, la colonne du tableau hebdomadaire aura un fond gris
clair.  La clé optionnelle \mil|<couleur>| permet de changer la couleur du fond
de la colonne. Les couleurs possibles sont les mêmes que celles gérées par
PGF/TiKZ.
\begin{minted}{latex}
% Le DNB a lieu les 26 et 27 juin.
\setDNB{26}{27}{6}
% Les épreuves finales du bac ont lieu du 17 au 19 juin sur fond blue!30
\setBac[blue!30]{17}{19}{6}
% L'épreuve de philosophie a lieu le 16 juin sur fond green!50
\setBacPhilo[green!50]{16}{6}
% L'épreuve de français a lieu le 13 jun sur fond red!50
\setBacFrancais[red!50]{13}{6}
% Le Grand Oral a lieu du 24 au 30 juin sur fond lightgray (par défaut)
\setGO{24}{30}{6}
\end{minted}

\subsection{
  Gestion des jours fériés
}

Les jours fériés sont les jours de fêtes légales énumérés par l’article
L.~3133-1 du code du travail: 1\textsuperscript{er}~janvier, lundi de Pâques,
1\textsuperscript{er}~mai, 8~mai, Ascension, lundi de Pentecôte, 14~juillet,
Assomption (15~août), Toussaint (1\textsuperscript{er}~novembre), 11~novembre et
25~décembre. Le vendredi de l'Ascension est également considéré comme férié.
Les jours fériés sont signalés dans l'emploi du temps par un fond gris clair.

La date du lundi de Pâques est celle du calendrier grégorien
occidental (utilisé par l'éducation nationale), calculée par la méthode de
Butcher-Meeus. L'Ascension (38~jours après le lundi de Pâques) et le lundi
de Pentecôte (10~jours après le vendredi de l'ascension) sont calculées
automatiquement.

La commande \mil|\setLundiPaques{<JJ>}{<MM>}| (dans le préambule) permet de
changer la date du lundi de Pâques, où \mil|<JJ>| est le quantième et \mil|<MM>|
est le mois.

\begin{minted}{latex}
% Et si le lundi de Pâques était un 17 mars?
\setLundiPaques{17}{3}
\end{minted}

\section{
  Tableau d'appel et de notes des classes -- \texttt{\textbackslash{}Classe}
}

La commande \mil|\Classe<*>[<N>]{<Nom>}{<Frequence>}{<Liste_eleves>}|
permet de générer des tableaux d'appel des classes.
Cette commande prend quatre arguments.
\begin{itemize}
  \item l'étoile \mil|*| signale que le tableau a des séances bimensuelles
    («\emph{quinzomadaires}»).
  \item La clé optionnelle \mil|<N>| donne le nombre de colonne par tableau. 
    Par défaut cette clé vaut 18.
  \item La clé \mil|<Nom>| de la classe, dans la première case d'en-tête du
    tableau.
  \item La clé \mil|<Frequence>| des séances (voir ci-dessous).
  \item la liste \mil|<Liste_eleves>| séparés par des virgules, constitue la
    première colonne des tableaux d'appel.
\end{itemize}

\subsection{
  Commande \texttt{\textbackslash{}Classe} avec le nombre de séances
}

La commande \mil|\Classe{<Nom>}{<F>}{<Liste_eleves>}| crée des tableaux pour la
classe \mil|<Nom>|, à en-tête vide, pour une fréquence de \mil|<F>| séances par
semaines (\mil|<F>| peut être un entier ou un nombre décimal).
\begin{minted}{latex}
% La classe de Seconde euro a 1,5 séance dans la semaine.
% Les tableaux ont 18 colonnes (valeur par défaut).
\Classe{2 euro}{1.5}{
  Élève Euro 1,
  Élève Euro 2,
  Élève Euro 3,
  Élève Euro 4,
  Élève Euro 5
}
\end{minted}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Saut de page manuel.
\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\subsection{
  Commande \texttt{\textbackslash{}Classe} avec la liste des jours
}

La commande \mil|\Classe{<Nom>}{<Liste_jours>}{<Liste_eleves>}|
crée des tableaux pour la classe \mil|<Nom>|. Les en-têtes des colonnes
correspondent aux dates de la liste \mil|<Liste_jours>| (sans les jours
fériés).\\
Les valeurs possibles de \mil|<Liste_jours>| sont: \mil|L| (lundi), \mil|M|
(mardi), \mil|W| (mercredi), \mil|J| (jeudi), \mil|V| (vendredi) ou \mil|S|
(samedi). Les valeurs sont séparées par des virgules.
\begin{minted}{latex}
% La classe de Seconde a cours le mardi, le jeudi et le vendredi.
% Les tableaux ont 19 colonnes pour éviter un tableau presque vide.
\Classe[19]{Seconde}{M,J,V}{
  Élève Seconde 1,
  Élève Seconde 2,
  Élève Seconde 3,
  Élève Seconde 4,
  Élève Seconde 5
}
\end{minted}

\subsection{
  Commande \texttt{\textbackslash{}Classe*} avec des séances bimensuelles
}

L'étoile \mil|*| permet de définir des séances bimensuelles
(\emph{quinzomadaires}).\\ 
La commande \mil|{\Classe*{<Nom>}{<Liste_J/P>}{<Liste_eleves>}| permet de
définir en en-tête les jours \mil|J| suivant leur fréquence \mil|P|: 
\begin{itemize}
  \item \mil|0|: toutes les séances du jour \mil|J|. 
  \item \mil|1|: uniquement les semaines impaires du jour \mil|J|.
  \item \mil|2|: uniquement les semaines impaires du jour \mil|J|.
\end{itemize}
La parité \mil|P| correspond à la parité de la semaine de \mil|\EmploiDuTemps|. 
\begin{minted}{latex}
% La classe de Première G a cours en semaine impaire les lundis, tous les
% mercredis et tous les vendredis.
% Les tableaux ont 16 colonnes pour éviter un tableau presque vide.
\Classe*[16]{Première G}{L/1,W/0,V/0}{
  Élève Première 1,
  Élève Première 2,
  Élève Première 3,
  Élève Première 4,
  Élève Première 5
}
\end{minted}

\subsection{
  Date de fin des cours -- 
  \texttt{\textbackslash{}setFinCours}
}
Dans le préambule, la commande \mil|\setFinCours{<JJ>}{<MM>}| indique le dernier
jour pour les en-tête des tableaux de classe, où \mil|<JJ>|
est le quantième du dernier jour de cours et \mil|<MM>| est le mois du dernier
jour de l'année.

\begin{minted}{latex}
% Fin des cours le 7 juin. 
\setFinCours{7}{6}
\end{minted}

\section{
  Liste des élèves -- \texttt{\textbackslash{}ListeEleves}
}

La commande \mil|\ListeEleves{<fichier>}| permet d'insérer le
contenu du \mil|<fichier>|. Si aucun fichier n'est spécifié, un fichier
\mil|ListeEleves.tex| est créé avec la liste (numérotés) de l'ensemble des
élèves réparti par classe, puis inséré dans le cahier de texte cette liste
(penser à compiler deux fois).

\begin{minted}{latex}
% Liste des élèves créée à partir des \Classe
\ListeEleves{}
% Liste des élèves créée à partir d'un fichier personnel. 
\ListeEleves{ListeElevesPerso.tex}
\end{minted}

\newpage
\section{Un exemple complet}
L'exemple ci-dessous du cahier de texte est compilé dans
\mil|cahierprof-doc.pdf|

\inputminted{latex}{cahierprof-exemple.tex}

\newpage
\section{Versions antérieures}

\subsection*{Nouveautés de la version 0.92}
\begin{itemize}
  \item Correction de la gestion des années bissextiles.
  \item Correction de l'affichage de la semaine lorsque le quantième du lundi
    est 29.
  \item Création de la commande \mil|\setNombreSemaines| pour
    fixer le nombre de semaines à afficher.\\
    Si cette commande n'est pas utilisée, 36 semaines sont affichées par défaut.
  \item Création de la commandes \mil|\setLundiRentree| pour
    configurer le lundi de la rentrée scolaire.
  \item Création des commandes \mil|\setDebut|\mil|*|, où
    \mil|*| correspond à \mil|Toussaint|, \mil|Noel|, \mil|Hiver| ou
    \mil|Printemps| et gestion automatique de la date de la fin des petites
    vacances.
  \item Création de la commande \mil|\setLundiPaques| pour
    fixer la date du lundi de Pâques et gestion automatique des dates du jeudi
    de l'Ascension et du lundi de Pentecôte en fonction de la date du lundi de
    Pâques.\\
    À noter: jusqu'à l'année 2040, la date du lundi de Pâques est gérée
    automatiquement.
\end{itemize}

\subsection*{Nouveautés de la version 1.0}
\begin{itemize}
  \item La date du lundi de Pâques se calcule automatiquement par la méthode de
    Butcher-Meeus.
  \item Option \mil|samedi|, qui permet d'afficher un emploi du temps
    hebdomadaire du lundi au samedi.
  \item Possibilité d'utiliser un fichier personnel dans la commande
    \mil|\ListeEleves|.
  % \item Création des commandes \mil|\setFin{*}|, où \mil|*| correspond à
  %   \mil|Toussaint|, \mil|Noel|, \mil|Hiver| ou \mil|Printemps|, qui permet de
  %   définir des dates spécifiques de fin de vacances. 
  \item Création de commandes pour définir les dates du diplôme national du
    brevet et du baccalauréat: \mil|\setDNB|,
    \mil|\setBac|, \mil|\setBacPhilo|,
    \mil|\setBacFrancais|, \mil|\setGO|.
\end{itemize}

\subsection*{Nouveautés de la version 1.1}
\noindent
Le principal changement de cette version est l'utilisation de l'extension
\mil|niceMatrix| pour les tableaux des semaines et les tableaux
d'appel.
\begin{itemize}
  \item Dans les tableaux de semaine, les colonnes des jours fériés et des
    examens sont grisées. 
  \item Les séances bimensuelles s'intitulent maintenant
    \mil|\Sem| dans un souci d'uniformité des commandes.
  \item Création des commandes \mil|\DeuxH| et  
    \mil|\Heures| pour définir des blocs de plusieurs heures de
    cours. 
  \item Dans les tableaux d'appel (commande \mil|\Classe|), on
    peut mettre soit le nombre de séances hebdomadaires, soit la liste des jours
    des séances dans la semaine. 
  \item Création de la commande \mil|\setNombreColonnes| pour
    régler le nombre de colonnes dans les tableaux d'appel. 
\end{itemize}

\subsection*{Nouveautés de la version 1.2}
\begin{itemize}
  \item Possibilité de mettre un fond de couleur aux jours d'examens dans les
    tableaux hebdomadaires.
  \item Affichage par défaut de 18 colonnes (au lieu de 20) dans les tableaux
    d'élèves.
  \item Suppression des jours fériés dans les colonnes des tableaux d'élèves. 
  \item Possibilité de définir des dates bimensuelles dans les tableaux
    d'appels.
\end{itemize}
\end{document}
