\documentclass[a4paper,french,10pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{commandes}
\usepackage{tcolorbox}
\usepackage[framemethod=TikZ]{mdframed}
\usepackage{minted}
\usepackage{xcolor}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% En tête du document
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%% Les marges de mon document.
\geometry{margin=1.2cm,head=0.6cm,headsep=10pt,foot=.6cm}

\title{
  cahierprof.sty\\
  Un cahier de textes en \LaTeX{} pour les professeurs
}
\author{
  Raphaël Giromini\\
  \texttt{raphael.giromini -- at -- gmail.com}
}
\date{Version 1.1 -- 16 juin 2025}

\setminted{frame=single,linenos,numbersep=6pt}

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

\maketitle

\section*{Résumé}
\noindent
Le paquet \texttt{cahierprof} 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 absences et/ou les
    notes).
  \item une liste des élèves, qui créé un fichier supplémentaire
    \texttt{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
du package.

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


\subsection*{Nouveautés de la version 1.1}
\noindent
Le principal changement de cette version est l'utilisation de l'extension
\mintinline{latex}|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 bimestrielles s'intitulent maintenant
    \mintinline{latex}|\Sem| dans un souci d'uniformation des commandes.
  \item Création des commandes \mintinline{latex}|\DeuxH| et  
    \mintinline{latex}|\Heures| pour définir des blocs de plusieurs heures de
    cours. 
  \item Dans les tableaux d'absences (commande \mintinline{latex}|\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 \mintinline{latex}|\setNombreColonnes| pour
    régler le nombre de colonnes dans les tableaux d'absences. 
\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 -- 
  commande \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 
\mintinline{latex}|\setLundiRentree{JJ}{MM}{YYYY}|, où \texttt{JJ} est le
quantième du mois; \texttt{MM} est le mois et \texttt{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 \mintinline{latex}|\EmploiDuTemps| va permettre de de créer le
tableau de la semaine. Cette commande a un seul argument qui contient la
description d'une semaine type (sous la forme d'un \texttt{niceTabularX}) comme
dans l'exemple ci-dessous:
\begin{minted}{latex}
\EmploiDuTemps{
    %     & Lundi & Mardi        & Merc.      & Jeudi & Vend.        \\
    8h    &       &              &            &       & \DeuxH{1G}   \\[1.5cm]
    9h    &       &              &            & 1STMG &              \\[1.5cm]
    10h   & 1G    & \DeuxH{2nde} & \DeuxH{1G} &       & 1STMG        \\[1.5cm]
    11h   &       &              &            & 2nde  & 2 euro       \\[1.5cm] \hline\hline
    13h30 &       &              & 1STMG      &       & \Sem{2nde}{} \\[1.5cm]
    14h30 &       &              &            &       &              \\[1.5cm]
    15h30 &       &              &            &       &              \\[1.5cm]
    16h30 &       &              &            &       &              \\[1.5cm]
}
\end{minted}
Cette commande va générer 36 semaines de cours à compter du premier lundi de
l'année scolaire.

Pour afficher un nombre différent de semaines, il faut passer dans le préambule
la commande \mintinline{latex}|\setNombreSemaines{N}|, où \texttt{N} est le
nombre entier de semaines.
\begin{minted}{latex}
% On ne veut que 10 semaines de cours ! 
\setNombreSemaines{10}
\end{minted}

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

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 avec l'option \texttt{samedi},
dans la déclaration du package.
\begin{minted}{latex}
\usepackage[samedi]{cahierprof}
\end{minted}
Cette option peut également être activée par la commande
\mintinline{latex}|\setSamedi|. Ne pas oublier de déclarer un Emploi du temps à
sept colonnes
\begin{minted}{latex}
% Déclaration du samedi (sans utiliser l'option du package)
\setSamedi
% Emploi du temps sur sept colonnes.
\EmploiDuTemps{
%         & Lundi & Mardi        & Merc.      & Jeudi & Vend.        & Sam. \\
    8h    &       &              &            &       & \DeuxH{1G}   & \Heures{3}{TSTMG} \\[1.5cm]
    9h    &       &              &            & 1STMG &              & \\[1.5cm]
    10h   & 1G    & \DeuxH{2nde} & \DeuxH{1G} &       & 1STMG        & \\[1.5cm]
    11h   &       &              &            & 2nde  & 2 euro       & \\[1.5cm] \hline\hline
    13h30 &       &              & 1STMG      &       & \Sem{2nde}{} & \\[1.5cm]
    14h30 &       &              &            &       &              & \\[1.5cm]
    15h30 &       &              &            &       &              & \\[1.5cm]
    16h30 &       &              &            &       &              & \\[1.5cm]
}
\end{minted}

\subsection{Séance bimestrielles -- commande \texttt{\textbackslash{}Sem}}

Certaines séances sont bimestriels (tous les 15 jours), suivant la parité de la
semaine. Pour cela il existe la commande \mintinline{latex}|\Sem| qui prend
deux arguments: la séance en semaine impair, puis la séance en semaine pair.

\begin{minted}{latex}
% L'aide personnalisée en seconde n'a lieu que les semaines impaires
\Sem{2nde (A.P.)}{}
% L'aide personnalisée en première est divisée en deux groupes bimestiels. 
1G A.P. (Groupe~\Sem{A}{B})
\end{minted}

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

Si une séance de cours dure plus d'une heure, il est possible de créer un bloc
d'heure de cours:
\begin{itemize}
  \item soit par la commande \mintinline{latex}|DeuxH| qui prend un seul
    argument: le nom de la classe;
  \item soit par la commande \mintinline{latex}|Heures| qui prend deux
    arguments: le nombre d'heures de cours et le nom de la 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{Gestion des vacances scolaires}

Le package \texttt{cahierprof} permet de gérer les vacances scolaires
Les vacances scolaires (de Toussaint, de Noel, d'hiver et de printemps). Selon
les zones (et les années) il faut définir en préambule le premier samedi de
chaque vacances, sous la formme \mintinline{latex}|\setDebutToussaint{JJ}{MM}|
où \texttt{JJ} est le quantième du samedi du début des vacances et \texttt{MM}
le mois du début des vacances. 
\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}
Chacune de ces petites vacances dure automatiquement 15 jours. Cependant, il est
possible de définir des dates spécifiques, sous la forme
\mintinline{latex}|\setFinToussaint{JJ}{MM}| où \texttt{JJ} est le quantième du
lundi de la fin des vacances et \texttt{MM} le mois de la fin des vacances.
\begin{minted}{latex}
% Fin de chaque vacances scolaire pour l'année en cours (le lundi).
% Optionnel
\setFinToussaint{6}{11}
\setFinNoel{8}{1}
\setFinHiver{26}{2}
\setFinPrintemps{22}{4}
\end{minted}

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

On peut définir des dates pour les examens: diplôme national du brevet (DNB), le
les épreuves finales du baccalauréat, l'épreuve de philosophie, l'épreuve de
français et le grand oral. 

Pour le diplôme national du brevet (DNB), les dates des épreuves sont définies
par la commande \mintinline{latex}|\setDNB{JD}{JF}{YY}|, où \texttt{JD} est le
quantième du début du DNB, \texttt{JF} est le quantième de la fin du DNB et
\texttt{MM} est le mois du DNB.
\begin{minted}{latex}
% Le DNB a lieu les 26 et 27 juin.
\setDNB{26}{27}{6}
\end{minted}
Pour les épreuves du baccalauréat:
\begin{itemize}
  \item les jours des épreuves finales du baccalauréat sont définie par la
    commande \mintinline{latex}|\setBac{JD}{JF}{MM}|, où \texttt{JD} est le
    quantième du début des épreuves, \texttt{JF} est le quantième de la fin des
    épreuves et \texttt{MM} est le mois des épreuves;
  \item le jour de l'épreuve de philosophie est définie par la commande
    \mintinline{latex}|\setBacPhilo{JJ}{MM}|, où \texttt{JJ} est le quantième et
    \texttt{MM} est le mois de l'épreuve de philosophie;
  \item le jour de l'épreuve de français est définie par la commande
    \mintinline{latex}|\setBacfrancais{JJ}{MM}|, où \texttt{JJ} est le quantième
    et \texttt{MM} est le mois de l'épreuve de français.
  \item Les jours des épreuves de grand oral sont définie par la commande
    \mintinline{latex}|\setGO{JD}{JF}{MM}|, où \texttt{JD} est le quantième du
    début des épreuves, \texttt{JF} est le quantième de la fin des épreuves et
    \texttt{MM} est le mois des épreuves.
\end{itemize}
\begin{minted}{latex}
% Les épreuves finales du bac ont lieu du 17 au 19 juin
\setBac{17}{19}{6}
% L'épreuve de philosophie a lieu le 16 juin
\setBacPhilo{16}{6}
% L'épreuve de français a lieu le 13 jun
\setBacFrancais{13}{6}
%Le Grand Oral a lieu du 24 au 30 juin
\setGO{24}{30}{6}
\end{minted}

\noindent
Pour les jours d'examens, la colonne du tableau hébdomadaire aura un fond gris
clair.

\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: 1er janvier, lundi de Pâques, 1er mai, 8 mai,
Ascension, lundi de Pentecôte, 14 juillet, Assomption (15 août), Toussaint, 11
novembre et 25 décembre.

La date du lundi de Pâques est définie par celle du calendrier grégorien
occidental (utilisée par l'éducation nationale), calculé automatiquement
par la méthode de Butcher-Meeus. Cependant, il est possible de fixer un autre
lundi de Pâques, en utilisant, dans le préambule, la commande
\mintinline{latex}|\setLundiPaques{JJ}{MM}| où \texttt{JJ} est le jour et
\texttt{MM} est le mois du lundi de Pâques. L'ascension a lieu 38 jours après le
lundi de Pâques. Par défaut, le vendredi de l'ascension est considéré comme
férié. Le lundi de Pentecôte a lieu 10 jours après le vendredi de l'ascension.

Dans tous les cas, les dates de l'ascension et de la Pentecôte sont
automatiquement calculées à partir de la date du lundi de Pâques.

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

\noindent
Pour les jours fériés, la colonne du tableau hébdomadaire aura un fond gris
clair.


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

La commande \mintinline{latex}|\Classe| permet de générer des tableaux
d'appels des classes.\\
Cette commande prend trois arguments:
\begin{itemize}
  \item le nom de la classe;
  \item le nombre de fois que l'on voit les élèves dans la semaine ou bien la
    liste des jours où l'on voit les élèves;
  \item la liste des élèves séparés par des virgules.
\end{itemize}

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

Si le second argument est un entier, la commande \mintinline{latex}|\Classe| va
créer des tableaux à en-tête vide.
\begin{minted}{latex}
% La classe de Seconde euro a une séance dans la semaine.
\Classe{2 euro}{1}{
  Élève Euro 1,
  Élève Euro 2,
  Élève Euro 3
}
\end{minted}

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

En deuxième argument, on peut définir les jours dans la semaine où l'on voit la
classe, avec les clés suivantes: \texttt{L} (lundi), \texttt{M} (mardi),
\texttt{W} (mercredi), \texttt{J} (jeudi), \texttt{V} (vendredi) ou \texttt{S}
(samedi) séparées par des virgules.
\begin{minted}{latex}
% La classe de Seconde a des séances mardi et vendredi.
\Classe{Seconde}{M,V}{
  Élève Seconde 1,
  Élève Seconde 2,
  Élève Seconde 3
}
% La classe de première G a deux séances lundi et une séance vendredi.
\Classe{Première G}{L,L,V}{
  Élève Première 1,
  Élève Première 2,
  Élève Première 3
}
% La classe de première STMG a des séances mercredi, jeudi et vendredi
\Classe{1 STMG}{W,J,V}{
  Élève 1STMG 1,
  Élève 1STMG 2,
  Élève 1STMG 3
}
\end{minted}

\subsection{Nombre de colonne pour les tableaux d'absences
  -- \texttt{\textbackslash{}setNombreColonnes}
}

Pour les tableaux d'absence, on peut régler dans l'en-tête le nombre de colonnes
par tableau avec la commande \mintinline{latex}|\setNombreColonnes| qui prend un
argument: le nombre de colonne à définir.
\begin{minted}{latex}
% Nombre de colonne par tableau d'absence
\setNombreColonnes{12}
\end{minted}

\noindent
Cette commande est facultative, par défaut le nombre de colonne par tableau
d'absence est 20.

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

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

\begin{minted}{latex}
% Liste des élèves, sauvée dans le fichier ListeEleves.tex,
% créée à partir des \Classe{}{}{}. Penser à compiler deux fois.
\ListeEleves{}
\end{minted}

\section{Un exemple complet}

L'exemple ci-dessous du cahier de texte est compilé dans
\texttt{cahierprof-doc.pdf}

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

\section{Versions antérieures}

\subsection*{Nouveautés de la version 1.0}
\begin{itemize}
  \item La date du lundi de Pâques se calcule automatiquement.
  \item Option \texttt{samedi}, qui permet d'afficher un emploi tu temps
    hebdomadaire du lundi au samedi.
  \item Possiblité d'utiliser un fichier personnel dans la commande
    \mintinline{latex}|\ListeEleves|.
  \item Création des commandes \mintinline{latex}|\setFin|\texttt{*}, où
    \texttt{*} correspond à \texttt{Toussaint}, \texttt{Noel}, \texttt{Hiver} ou
    \texttt{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: \mintinline{latex}|\setDNB|,
    \mintinline{latex}|\setBac|, \mintinline{latex}|\setBacPhilo|,
    \mintinline{latex}|\setBacFrancais|, \mintinline{latex}|\setGO|.
\end{itemize}


\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 \mintinline{latex}|\setNombreSemaines| pour
    fixer le nombre de semaine à afficher.\\
    Si cette commande n'est pas utilisée, 36 semaines sont affichées par défaut.
  \item Création de la commandes \mintinline{latex}|\setRentree| pour configurer
    le lundi de la rentrée scolaire.
  \item Création des commandes \mintinline{latex}|\setDebut|\texttt{*}, où
    \texttt{*} correspond à \texttt{Toussaint}, \texttt{Noel}, \texttt{Hiver} ou
    \texttt{Printemps} et gestion automatique de la date de la fin des petites
    vacances.
  \item Création de la commande \mintinline{latex}|\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âque est gérée
    automatiquement.
\end{itemize}

\end{document}