\documentclass[
    french,
    margin=2cm
]{neoschool}

\title{La classe \texttt{neoschool}}
\author{Version : 1.0.0 \quad\textemdash{}\quad Auteur : Razik Ikhlef}
\date{04/01/2025}

\begin{document}

\maketitle

La classe \texttt{neoschool} propose aux enseignants du secondaire un
ensemble d'outils pour concevoir leurs documents pédagogiques (évaluations,
supports de cours, fiches d'exercices avec leur correction, etc). Pour répondre
aux différents besoins, elle propose huit thèmes de couleurs prédéfinis, des
options de classe variées pour la mise en page et la typographie, des
environnements spécialisés, des commandes dédiées et différents styles
d'en-têtes préformatés pour chaque type de document. Elle intègre plusieurs
dizaines d'extensions LaTeX couramment utilisées (voir la liste ci-dessous), ce
qui allège considérablement le préambule et évite autant que possible les
incompatibilités. Multilingue, elle prend en charge le français, l'anglais et
l'allemand.

\tableofcontents

\section{Extensions chargées}

Les extensions suivantes sont automatiquement chargées par la classe \texttt{neoschool}.

\texttt{adforn}, \texttt{adjustbox}, \texttt{algpseudocode}, \texttt{amssymb}, \texttt{babel}, \texttt{bookmark}, \texttt{calc}, \texttt{changespace}, \texttt{cuted}, \texttt{environ}, \texttt{fancyvrb}, \texttt{fontawesome5}, \texttt{forest}, \texttt{iftex}, \texttt{ifthen}, \texttt{kvoptions}, \texttt{lastpage}, \texttt{marginnote}, \texttt{microtype}, \texttt{mismath} (qui charge \texttt{mathtools}), \texttt{multicol}, \texttt{needspace}, \texttt{pdftexcmds}, \texttt{pgffor}, \texttt{pgfplots}, \texttt{qrcode}, \texttt{scrlayer-scrpage}, \texttt{silence}, \texttt{siunitx}, \texttt{tabularray}, \texttt{tasks}, \texttt{tcolorbox} (avec l'option \texttt{most} qui charge les extensions \texttt{listings} et \texttt{minted}), \texttt{textcase}, \texttt{tikz}, \texttt{tikzpagenodes}, \texttt{tikzsymbols}, \texttt{ulem} (avec l'option \texttt{normalem}), \texttt{xcolor} (avec les options \texttt{table}, \texttt{svgnames}, \texttt{dvipsnames} et \texttt{x11names}), \texttt{xhfill}, \texttt{xkeyval}, \texttt{xsim} (avec les options \texttt{use-files} et \texttt{clear-aux}), \texttt{xstring}.

La compilation en \texttt{pdflatex} charge les extensions \texttt{fonttenc} (avec l'option \texttt{T1}), \texttt{inputenc} (avec l'option \texttt{utf8}), \texttt{newpxtext} et \texttt{newpxmath}. La compilation en \texttt{lualatex} rend disponible les extensions \texttt{fontspec}, \texttt{luacas}, \texttt{lua-ul}, \texttt{luacolor} et applique les polices \texttt{TeX Gyre PagellaX} et \texttt{TeX Gyre Heros} en plus de \texttt{newpxmath}.

L'options \texttt{graphics} charge les extensions \texttt{graphicx} et \texttt{wrapfig}, l'option \texttt{draft} les extensions \texttt{blindtext} et \texttt{lipsum} et l'option \texttt{mathastext} l'extension \texttt{mathastext}.

L'option \texttt{math} charge les extensions \texttt{annotate-equations}, \texttt{bm}, \texttt{cancel}, \texttt{mathrsfs}, \texttt{nncomma}, \texttt{numprint}, \texttt{tdsfrmath} (avec les options \texttt{suite} et \texttt{taupe}), \texttt{tkz-euclide}, \texttt{witharrows} et \texttt{xlop}.

L'option \texttt{notes} permet d'afficher des notes encadrées et à fond coloré dans les marges gauche et droite, de façon alternée. Elle charge l'extension \texttt{todonotes}.

L'option \texttt{apmep}, qui permet de compiler directement les sujets d'annales de l'association du même nom, définit une ensemble de commandes mathématiques et charge les extensions \texttt{esvect}, \texttt{fourier-ons}, \texttt{numprint} (avec l'option \texttt{np}), \texttt{pstricks} (et de nombreux paquets de l'écosystème \texttt{pstricks}), \texttt{tabularx} et \texttt{textcomp}.

L'option \texttt{mathics} permet de faire du calcul formel via \texttt{mathics} (version libre de \texttt{mathematica}) et charge les extensions \texttt{asymptote} et \texttt{latexalpha2}.

\section{Options de configuration}

\subsection{Langue}

\begin{itemize}
\item
  \textbf{english, french, german} : active les traductions et
  conventions liées à chaque langue. Ces options affectent les intitulés des théorèmes et environnements, la typographie et les conventions mathématiques.
\item
  \textbf{nofrenchlist} : désactive le style français des listes (remet
  des points à la place des tirets).
\item
  \textbf{frenchlistaspar} : traite les listes comme des paragraphes en
  français.
\item
  \textbf{frenchmath} : applique les conventions mathématiques
  françaises (majuscules et lettres grecques droites).
\end{itemize}

\subsection{Apparence globale}

\subsubsection{Thèmes prédéfinis}

L'option \textbf{theme} = \texttt{nom-du-theme} définit
le thème de couleurs du document. Les thèmes disponibles sont : \texttt{cyprus}, \texttt{kassio}, \texttt{frost}, \texttt{spring}, \texttt{arbutus}, \texttt{duo}, \texttt{navy}, \texttt{royal}. La plupart d'entre eux sont inspirés des \textit{ef-themes} pour \textit{emacs} de Protesilaos Stavrou.

\subsubsection{Modes de couleur}

\begin{itemize}
\item \textbf{normal} : utilise des couleurs différentes pour chaque type
  d'environnement.
\item \textbf{unicolor} : utilise une couleur unique pour tous les
  environnements :
  \begin{itemize}
  \item la couleur du titre est utilisée comme base ;
  \item les variations sont obtenues par transparence.
  \end{itemize}
\item \textbf{print} : convertit toutes les couleurs en noir pour
  l'impression.
\item \textbf{gradientheadpalette} : utilise un dégradé de la couleur du titre pour les autres titres (sections, sous-sections, titre de théorèmes,  etc.).
\end{itemize}

\subsubsection{Personnalisation des couleurs}

\begin{itemize}
\item \textbf{globalcolor} = \texttt{couleur} : définit la
  couleur du texte.
\item \textbf{titlecolor} = \texttt{couleur} ou \textbf{titlehexcolor} = \texttt{code hex} : définit la
  couleur du titre.
\item \textbf{headcolor} = \texttt{couleur} : définit la
  couleur des en-têtes de section.
\item \textbf{subcolor} = \texttt{couleur} : définit la
  couleur des sous-sections.
\item \textbf{subsubcolor} = \texttt{couleur} : définit la
  couleur des sous-sous-sections.
\item \textbf{headfootcolor} = \texttt{couleur} : définit
  la couleur des en-têtes et pieds de page.
\end{itemize}

\subsubsection{Options d'affichage}

\begin{itemize}
\item \textbf{noframe} : supprime les cadres des environnements.
\item \textbf{noback} : supprime les fonds colorés.
\item \textbf{nocodeframe} : supprime les cadres des blocs de code.
\item \textbf{scale} : harmonise les dimensions des polices en \texttt{lualatex}.
\end{itemize}

\subsection{Personnalisation du résumé}

L'option \texttt{abstracttitle} permet de personnaliser
le titre de l'environnement \texttt{abstract} :

\begin{code}{latex}
% Dans le préambule
\documentclass[abstracttitle=Résumé]{neoschool}

% Dans le document
\begin{abstract}
    Contenu du résumé...
\end{abstract}
\end{code}

\subsection{Typographie}

\begin{itemize}
\item \textbf{sfbody} : active la police sans empattements pour le corps du
  texte.
\item \textbf{sfall} : active la police sans empattements pour tout le
  document.
\item \textbf{mathastext} : utilise la police de texte pour les
  mathématiques.
\item \textbf{mainface} = \texttt{police} : police
  principale du document.
\item \textbf{mainfaceoptions} = \texttt{options} : options
  de la police principale.
\item \textbf{sansface} = \texttt{police} : police sans
  empattements.
\item \textbf{sansfaceoptions} = \texttt{options} : options
  de la police sans empattements.
\item \textbf{monoface} = \texttt{police} : police à chasse
  fixe.
\item \textbf{monofaceoptions} = \texttt{options} : options
  de la police à chasse fixe.
\item \textbf{mathface} = \texttt{police} : police
  mathématique.
\item \textbf{mathfaceoptions} = \texttt{options} : options
  de la police mathématique (uniquement en \texttt{pdflatex}).
\item \textbf{facefamily} = \texttt{famille} : famille de
  polices complète.
\item \textbf{facefamilyoptions} = \texttt{options} :
  options de la famille de polices.
\end{itemize}

\subsection{Mise en page}

\subsubsection{Marges et espacement}

\begin{itemize}
\item \textbf{margin} = \texttt{longueur} : définit la
  largeur des marges horizontales (2,5 cm par défaut) ; les marges verticales s'adaptent en conséquence.
\item \textbf{notes} = \texttt{longueur} : active les \textit{todonotes}
  dans les marges et définit leur largeur.
\item \textbf{noindent} : supprime l'indentation des paragraphes.
\item \textbf{indent} = \texttt{longueur} : définit la
  largeur de l'indentation (1 em par défaut).
\item \textbf{compact} :
  \begin{itemize}
  \item réduit l'espacement entre les paragraphes ;
  \item diminue les marges des environnements ;
  \item compresse l'interligne.
  \end{itemize}
\end{itemize}

\subsubsection{Options de sortie}

\begin{itemize}
\item \textbf{2a5toa4} : affiche deux fois la même page A5 sur une page A4 en mode paysage.
\item \textbf{2a4toa3} : affiche deux fois la même page A4 sur une page A3 en mode paysage.
\item \textbf{4a5toa3} : affiche quatre fois la même page A5 sur une page A3.
\item \textbf{2toa3} : affiche deux pages A4 quelconques sur une page A3 en mode paysage.
\item \textbf{bookleta5} : génère un livret en A5 (quatre pages par feuille A4).
\item \textbf{bookleta4} : génère un livret en A4 (quatre pages par feuille A3).
\end{itemize}

\subsubsection{En-têtes et pieds de page}

\begin{itemize}

\item
  \textbf{fullheader} : active l'en-tête et le pied de page complets.
  \begin{itemize}
  \item En-tête : type de document à gauche, titre au centre et niveau de classe à
    droite.
  \item Pied de page : date à gauche, établissement au centre et pagination
    à droite.
  \end{itemize}
\item \textbf{headrule} : ajoute un filet sous l'en-tête.
\item \textbf{footrule} : ajoute un filet au-dessus du pied de page.
\item \textbf{headfootrule} : active les deux filets.
\end{itemize}

\section{Styles de document}

\subsection{Styles de titre}

\subsubsection{Styles d'examen}

\begin{itemize}

\item \textbf{exam} : style complet pour examens avec en-tête détaillé.
\end{itemize}

\begin{code}{latex}
\documentclass[exam]{neoschool}

\neoheader{
    type = Devoir surveillé,
    school = Lycée Poincarré,
    level = Terminale,
    duration = 2h,
    calculator = true  % ou false ou exam
}
\end{code}

\begin{itemize}

\item \textbf{shortexam} : style compact pour examens avec en-tête simplifié.
\item \textbf{mockexam} : style pour épreuves type baccalauréat ou brevet blancs
  avec page de garde normalisée.
\end{itemize}

\subsubsection{Styles d'évaluation}

\begin{itemize}

\item \textbf{eval} : style standard pour évaluations.
\end{itemize}

\begin{code}{latex}
\documentclass[eval]{neoschool}

\neoheader{
    type = Contrôle,
    school = Collège Alan Turing,
    level = Quatrième
}
\end{code}

\begin{itemize}
\item \textbf{evalicons} : ajoute des icônes à l'en-têtes \texttt{evel}.
\item \textbf{evalgrade} : ajoute un bandeau de notation.
\item \textbf{evaliconsgrade} : style complet avec icônes et notation.
\item \textbf{shorteval} : style compact pour évaluations.
\end{itemize}

\subsubsection{Styles avec bulles}

\begin{itemize}
\item \textbf{bubbles} : style avec fond à bulles colorées.
\item \textbf{shortbubbles} : version compacte du style bulles.
\end{itemize}

\subsubsection{Autres styles de titre}

\begin{itemize}
\item \textbf{titleornament} : ajoute des ornements en-dessous du titre.
\item \textbf{titlerule} : ajoute un filet sous le titre.
\item \textbf{titlemidrule} : ajoute un filet central sous le titre.
\item \textbf{titlefullrule} : ajoute un filet en pleine largeur sous le titre.
\item \textbf{fancybox} : titre avec boîte grise élégante.
\item \textbf{onlytitleleft} : affiche uniquement le titre, aligné à gauche.
\item \textbf{onlytitle} : affiche uniquement le titre, centré.
\item \textbf{onlytitleright} : affiche uniquement titre, aligné à droite.
\item \textbf{shorttitle} : style de titre compact.
\item \textbf{shortlesson} : style compact pour les leçons.
\end{itemize}

\subsection{Configuration de l'en-tête}

L'en-tête du document peut être configuré avec la commande
\texttt{\textbackslash neoheader} :

\begin{code}{latex}
\neoheader{
    type = {Type de document},
    school = {Nom de l'établissement},
    academy = {Nom de l'académie},
    level = {Niveau de classe},
    duration = {Durée},
    calculator = {true/false/exam},
    leftcontent = {\faIcon{...}},
    rightcontent = {\faIcon{...}},
}
\end{code}

\subsection{Options de formatage des titres}

\subsubsection{Styles globaux}

\begin{itemize}
\item \textbf{headstyle} = \texttt{style} : style de police
  pour tous les en-têtes (\texttt{sffamily} par défaut).
  \begin{itemize}
  \item Sections, sous-sections, etc.
  \item En-têtes de théorèmes et exercices.
  \end{itemize}
\begin{code}{latex}
\documentclass[headstyle=rmfamily]{neoschool}
\end{code}
\item \textbf{headweight} = \texttt{graisse} : graisse pour
  tous les en-têtes (\texttt{bfseries} par défaut).
\begin{code}{latex}
\documentclass[
  headstyle=sffamily,
  headweight=mdseries
]{neoschool}
\end{code}
\item \textbf{headshape} = \texttt{forme} : forme pour tous
  les en-têtes (\texttt{scshape} par défaut).
\begin{code}{latex}
\documentclass[
  headstyle=sffamily,
  headshape=upshape
]{neoschool}
\end{code}
\end{itemize}

\subsubsection{Style du titre principal}

\begin{itemize}
\item \textbf{titlestyle} = \texttt{style} : style pour le
  titre principal (hérite de \texttt{headstyle}).
\item \textbf{titleweight} = \texttt{graisse} : graisse du
  titre principal (hérite de \texttt{headweight}).
\item \textbf{titleshape} = \texttt{forme} : forme du titre
  principal (\texttt{upshape} par défaut).
\item \textbf{titlealign} = \texttt{alignement} :
  alignement du titre (\texttt{center} par défaut).
\end{itemize}

\begin{code}{latex}
\documentclass[
    titlestyle=sffamily,
    titleweight=bfseries,
    titleshape=upshape,
    titlealign=left
]{neoschool}
\end{code}

\subsubsection{Style des sections}

\begin{itemize}
\item \textbf{sectionnumstyle} = \texttt{style} : style de
  numérotation.
  \begin{itemize}
  \item \texttt{circle} : numéro encerclé.
  \item \texttt{box} : numéro encadré.
  \item \texttt{dash} : tiret après le numéro.
  \item \texttt{plain} : numéro simple.
  \end{itemize}
\item \textbf{sectiontextstyle} = \texttt{style} : style du
  texte.
  \begin{itemize}
  \item \texttt{sc} : petites capitales.
  \item \texttt{upper} : majuscules.
  \item \texttt{lower} : minuscules.
  \end{itemize}
\item \textbf{sectionstyle} = \texttt{style} : style global
  de la section.
  \begin{itemize}
  \item \texttt{ornaments} : avec ornements décoratifs.
  \item \texttt{underline} : souligné.
  \item \texttt{normal} : style simple.
  \item \texttt{highlighted} : avec surlignage.
  \item \texttt{shadedline} : avec ligne ombrée.
  \end{itemize}
\item \textbf{sectionalign} = \texttt{alignement} :
  alignement des sections.
  \begin{itemize}
  \item \texttt{left} : à gauche.
  \item \texttt{center} : centré
  \item \texttt{right} : à droite.
  \end{itemize}
\end{itemize}

\begin{code}{latex}
\documentclass[
    sectionnumstyle=circle,
    sectiontextstyle=upper,
    sectionstyle=highlighted,
    sectionalign=left
]{neoschool}
\end{code}

\subsubsection{Style des en-têtes/pieds de page}

\begin{itemize}
\item \textbf{headfootstyle} = \texttt{style} : style des
  en-têtes/pieds de page (basé sur \texttt{headstyle}).
\end{itemize}

\begin{code}{latex}
\documentclass[headfootstyle=sffamily]{neoschool}
\end{code}

\subsubsection{Exemple complet de configuration}

\begin{code}{latex}
\documentclass[
    % Style global
    headstyle=sffamily,
    headweight=bfseries,
    headshape=scshape,
    
    % Titre principal
    titlestyle=sffamily,
    titleweight=bfseries,
    titleshape=upshape,
    titlealign=center,
    
    % Sections
    sectionnumstyle=circle,
    sectiontextstyle=upper,
    sectionstyle=highlighted,
    sectionalign=left,
    
    % En-têtes/pieds de page
    headfootstyle=sffamily
]{neoschool}
\end{code}

\section{Disposition des contenus}

\subsection{Positionnement absolu d'objets}

La commande \texttt{\textbackslash positionobject} permet de placer
précisément un élément sur la page :

\begin{code}{latex}
% Syntaxe
\positionobject{x-shift}{y-shift}{scale}{contenu}

\begin{itemize}
\item \texttt{x-shift} : décalage horizontal depuis le coin
  supérieur gauche.
\item \texttt{y-shift} : décalage vertical depuis le coin
  supérieur gauche.
\item \texttt{scale} : facteur d'échelle pour le contenu.
\item \texttt{contenu} : élément à positionner (image,
  texte, etc.).
\end{itemize}

% Exemple : Image en haut à droite
\positionobject{15cm}{1cm}{0.5}{\includegraphics{logo.png}}

% Exemple : Texte en bas de page
\positionobject{2cm}{25cm}{1}{Note de bas de page spéciale}
\end{code}

\subsection{Mise en page à deux colonnes}

La commande \textbf{\textbackslash splitcontent} permet de diviser le
contenu horizontalement :

\begin{code}{latex}
% Syntaxe : \splitcontent[largeur1][espace]{contenu1}{contenu2}

% Exemple avec valeurs personnalisées
\splitcontent[0.6][0.05]{
    Cette partie occupe 60 %
    de la largeur totale
}{
    Cette partie occupe 35 %
    (5 % d'espace entre les deux)
}

% Exemple avec valeurs par défaut (50 % / 50 %)
\splitcontent{
    Première colonne
}{
    Seconde colonne
}
\end{code}

\subsection{Environnements côte à côte}

L'environnement \texttt{sidebyside} permet de créer des
boîtes à deux colonnes avec des styles cohérents :

\begin{code}{latex}
\begin{sidebyside}[options]
    % Contenu gauche
    \tcblower
    % Contenu droit
\end{sidebyside}
\end{code}

Les options sont celles de \texttt{tcolorbox}.

\begin{code}{latex}
\begin{sidebyside}[
    title=Comparaison,
    colback=exampleColor!5,
    colbacklower=exampleColor!10
]
    Première version
    \tcblower
    Version améliorée
\end{sidebyside}
\end{code}

\subsection{Association texte et image}

La commande \textbf{\textbackslash textwithimage} combine texte et image~:

\begin{code}{latex}
% Syntaxe : \textwithimage[*]{largeur_image}{échelle_image}{texte}{chemin_image}
% L'étoile (*) inverse la position de l'image (droite par défaut)

% Image à droite (30 % de la largeur)
\textwithimage{0.3}{0.95}{
    Ce texte décrit l'image ci-contre...
}{images/figure.png}

% Image à gauche (40 % de la largeur)
\textwithimage*{0.4}{0.9}{
    Description à droite de l'image...
}{images/schema.png}
\end{code}

\subsection{QR codes et contenus}

La commande \textbf{\textbackslash withqrcode} intègre un QR code avec
du contenu associé :

\begin{code}{latex}
% Syntaxe : \withqrcode[*][taille]{url}{contenu}
% L'étoile (*) place le QR code à droite (gauche par défaut)

% QR code à gauche (2 cm par défaut)
\withqrcode{https://example.com}{
    Scanner pour plus d'informations
}

% QR code de 3cm à droite
\withqrcode*[3cm]{https://exercises.com}{
    Accéder aux exercices en ligne
}
\end{code}

\subsection{Grilles et papiers}

\subsubsection{Grilles personnalisables}

\begin{itemize}
\item \textbf{\textbackslash grid} : grille à petits carreaux.
\end{itemize}

\begin{code}{latex}
\grid[blue]{10cm}{5cm}  % Grille bleue de 10 x 5 cm
\end{code}

\begin{itemize}
\item \textbf{\textbackslash customgrid} : grille avec espacement.
  personnalisé
\end{itemize}

\begin{code}{latex}
\customgrid[red][4mm][4mm]{12cm}{8cm}  % Grille rouge, mailles de 4 mm
\end{code}

\begin{itemize}
\item \textbf{\textbackslash frenchgrid} : grille à grands carreaux de type Seyès.
\end{itemize}

\begin{code}{latex}
\frenchgrid{15cm}{10cm}  % Grille de type cahier français
\end{code}

\subsubsection{Pages entières}

\begin{itemize}
\item \textbf{\textbackslash notebook} : page de type cahier avec lignes horizontales et
  marge rouge.
\end{itemize}

\begin{code}{latex}
\notebook  % Active le style cahier ligné
\end{code}

\begin{itemize}
\item \textbf{\textbackslash nbminorgrid} : page entièrement recouverte de petits carreaux.
\end{itemize}

\begin{code}{latex}
\nbminorgrid  % Active le quadrillage fin
\end{code}

\begin{itemize}
\item \textbf{\textbackslash nbmajorgrid} : page entièrement recouverte de grands carreaux.
\end{itemize}

\begin{code}{latex}
\nbmajorgrid  % Active le quadrillage Seyès
\end{code}

\subsection{Boîtes simples}

L'environnement \texttt{neobox} permet de créer rapidement des boîtes simples. Il existe en deux variantes : \texttt{neobox} avec cadre et \texttt{neobox*} sans cadre visible :

\begin{code}{latex}
% Boîte standard
\begin{neobox}[colframe=blue,colback=blue!5]
    Texte dans une boîte...
\end{neobox}

% Boîte sans cadre avec fond coloré
\begin{neobox*}[colback=gray!10]
    Texte sur fond gris...
\end{neobox*}
\end{code}

\section{Exercices}

\subsection{Exercices et évaluations}

\subsubsection{Configuration des exercices}

L'environnement \texttt{exercise} accepte les options
suivantes.

\begin{itemize}
\item \textbf{points} = \texttt{nombre} : nombre de points
  de l'exercice.
\item \textbf{level} = \texttt{nombre} : niveau de
  difficulté (affiché sous forme d'étoiles).
\item \textbf{subtitle} = \texttt{texte} : sous-titre ou
  description de l'exercice.
\item \textbf{icon} = \texttt{icône} : icône personnalisée
  (utilise la bibliothèque d'icônes \textit{Font Awesome}).
\item \textbf{topic} = \texttt{thème} : thème ou chapitre
  concerné.
\item \textbf{subject} = \texttt{matière} : matière
  concernée.
\item \textbf{ID} = \texttt{identifiant} : identifiant
  unique pour référencement.
\item \textbf{template} = \texttt{style} : style
  d'affichage spécifique pour cet exercice.
\end{itemize}

\begin{code}{latex}
\begin{exercise}[
    points=4,
    level=2,
    subtitle=Dérivation,
    icon=\faPencil,
    topic=Analyse,
    subject=Mathématiques,
    ID=der01,
    template=elegant-box
]
    Calculer la dérivée de la fonction $f$ définie sur $]0 ; +\infty[$
    par $f(x)=x^2\ln(x)$.
\end{exercise}

L'environnement \texttt{solution} doit immédiatement suivre l'environnement \texttt{exercise} correspondant. La correction des exercices ne s'affiche pas par défaut.

\begin{solution}
    On utilise la formule du produit...
\end{solution}

% Pour référencer l'exercice ailleurs :
Comme vu dans l'exercice~\exercisenumber{der01}.
\end{code}

\subsubsection{Options globales}

\begin{itemize}
\item \textbf{exerciseicons} : active les icônes pour tous les exercices.
\item \textbf{answers} : affiche automatiquement toutes les corrections des exercices.
\item \textbf{shuffle} : mélange les choix de réponse dans les QCM.
\item \textbf{sectionthmcounter} : numérote les exercices par section.
\item \textbf{sharedexcounter} : partage le compteur avec les théorèmes.
\end{itemize}

\subsubsection{Templates d'exercices}

La classe offre de nombreux styles prédéfinis pour les exercices.

\begin{itemize}
\item \textbf{box} : boîte standard avec bordure et titre.
\item \textbf{elegant-box} : boîte avec barre latérale colorée.
\item \textbf{shaded-box} : boîte avec ombrage et titre en bannière.
\item \textbf{slanted-box} : boîte avec titre en bandeau incliné.
\item \textbf{sober-box} : boîte minimaliste avec titre en couleur.
\item \textbf{classic-box} : boîte classique avec titre en bandeau.
\item \textbf{classy-box} : boîte sophistiquée avec titre décoratif.
\item \textbf{rect-box} : boîte rectangulaire simple.
\item \textbf{rect-box-outlined} : boîte rectangulaire avec contour.
\item \textbf{num-box} : boîte numérotée compacte.
\item \textbf{num-box-outlined} : boîte numérotée avec contour.
\item \textbf{ex-num-box} : boîte ``Ex.'' numérotée.
\item \textbf{ex-num-box-outlined} : boîte ``Ex.'' numérotée avec contour.
\item \textbf{box-hrule} : boîte avec règle horizontale.
\item \textbf{box-hrule-out} : boîte avec règle horizontale et contour.
\item \textbf{box-hrule-in} : boîte avec règle horizontale intérieure.
\item \textbf{boxed} : simple boîte avec titre.
\item \textbf{boxed-out} : boîte avec contour et titre.
\item \textbf{inline} : texte en ligne avec titre.
\item \textbf{section} : titre de type section.
\item \textbf{subsection} : titre de type sous-section.
\item \textbf{terminal} : style console avec icône terminal.
\item \textbf{block} : style minimaliste.
\item \textbf{hrule} : avec règle horizontale.
\end{itemize}

Pour définir un template pour tout le document, il suffit d'utiliser la commande \texttt{\textbackslash xsimsetup} dans la préambule :

\begin{code}{latex}
\xsimsetup{
    exercise/template = elegant-box,    % template des exercices
    solution/template = sol-box         % template des solutions
}
\end{code}

\subsubsection{QCM et choix multiples}

\begin{itemize}
\item \textbf{choices} : pour les QCM à réponse unique.
\end{itemize}

\begin{code}{latex}
\begin{exercise}[points=2,ID=qcm01]
    Quelle est la dérivée de $e^x$ ?
    \begin{choices}
        \choice $x e^x$
        \choice[\correct] $e^x$
        \choice $e^{x-1}$
        \choice $\ln(x)$
    \end{choices}
\end{exercise}
\end{code}

\begin{itemize}

\item
  \textbf{checkboxes} : pour les QCM à réponses multiples.
\end{itemize}

\begin{code}{latex}
\begin{exercise}[points=3,ID=qcm02]
    Parmi ces nombres, lesquels sont premiers ?
    \begin{checkboxes}
        \checkbox[\correct*] 2
        \checkbox[\correct*] 3
        \checkbox 4
        \checkbox[\correct*] 5
    \end{checkboxes}
\end{exercise}
\end{code}

\section{Environnements mathématiques}

\subsection{Styles de théorèmes}

Les styles suivants sont disponibles pour tous les environnements de
type théorème : \textbf{amslikethm} (style minimaliste), \textbf{boxedthm}, \textbf{classicthm}, \textbf{classythm}, \textbf{elegantthm}, \textbf{shadedthm}, \textbf{slantedthm}, \textbf{soberthm}.

Options communes :

\begin{itemize}
\item \textbf{title} = \texttt{texte} : titre du théorème.
\item \textbf{label} = \texttt{nom} : étiquette pour
  référencement.
\item \textbf{colback} = \texttt{couleur} : couleur de fond.
\item \textbf{colframe} = \texttt{couleur} : couleur du
  cadre.
\item \textbf{coltitle} = \texttt{couleur} : couleur du
  titre.
\item \textbf{fonttitle} = \texttt{commandes} : style du
  titre.
\end{itemize}

\subsection{Options de numérotation}

\begin{itemize}
\item \textbf{sectionthmcounter} : compteurs relatifs à chaque section.
\item \textbf{sharedthmcounter} : compteur partagé entre tous les
  environnements.
\item \textbf{theoremgroup} : regroupe certains environnements de théorèmes.
\item \textbf{thmgroupcounter} : active un compteur pour les groupes.
\end{itemize}

\subsection{Environnements mathématiques}

\begin{itemize}
\item \textbf{theorem} : pour les théorèmes.
\end{itemize}

\begin{code}{latex}
\begin{theorem}[title=Théorème de Pythagore,label=pyth]
    Dans un triangle rectangle, le carré de
    l'hypoténuse est égal à la somme des carrés
    des deux autres côtés.
\end{theorem}

% Référencement :
D'après le théorème~\ref{thm:pyth}
\end{code}

\begin{itemize}
\item
  \textbf{lemma} : pour les lemmes.
\end{itemize}

\begin{code}{latex}
\begin{lemma}[title=Lemme préparatoire,label=prep]
    Contenu du lemme...
\end{lemma}

% Référencement :
Selon le lemme~\ref{lem:prep}
\end{code}

\begin{itemize}
\item
  \textbf{corollary} : pour les corollaires.
\end{itemize}

\begin{code}{latex}
\begin{corollary}[
    title=Réciproque de Pythagore,
    label=pythrecip
]
    Si $a^2 + b^2 = c^2$, alors le triangle est
    rectangle en $A$.
\end{corollary}

% Référencement :
Selon le corollaire~\ref{cor:pythrecip}
\end{code}

\begin{itemize}
\item \textbf{proposition} : pour les propositions (\textbf{propo} pour le
  référencement).
\item \textbf{property} : pour les propriétés (\textbf{prop} pour le
  référencement).
\item \textbf{definition} : pour les définitions (\textbf{def} pour le
  référencement).
\item \textbf{method} : pour les méthodes (\textbf{meth} pour le
  référencement).
\item \textbf{activity} : pour les activités (\textbf{act} pour le
  référencement).
\item \textbf{application} : pour les applications (\textbf{appl} pour le
  référencement).
\item \textbf{remark} : pour les remarques.
\item \textbf{remarks} : pour une série de remarques.
\item \textbf{example} : pour les exemples.
\item \textbf{examples} : pour une série d'exemples.
\end{itemize}

\section{Code informatique}

La classe \texttt{neoschool} propose deux options pour la
gestion du code.

\begin{itemize}
\item \textbf{listings} (par défaut) : utilise l'extension \texttt{listings}.
\item \textbf{minted} : utilise l'extension \texttt{minted} (qui nécessite le langage \textit{Python} et sa bibliothèque
  \texttt{Pygments}).
\end{itemize}

\subsection{Option listings}

\subsubsection{Styles de code disponibles}

\begin{itemize}
\item \textbf{lststyle} = \texttt{style} : style de
  coloration.
  \begin{itemize}
  \item \texttt{colorful} : coloration complète (par défaut).
  \item \texttt{minimal} : style minimaliste.
  \item \texttt{academic} : style ``académique'' avec numéros de ligne.
  \item \texttt{modern} : style ``moderne'' avec fond coloré.
  \end{itemize}
\end{itemize}

\subsubsection{Boîtes de code personnalisées}

La classe définit l'environnement \texttt{code} dont la structure est la suivante :

\begin{lstlisting}[style=latex]
\begin{code}[options]{langage}[titre][style-boite]
    code source...
\end{code}
\end{lstlisting}

Styles de boîtes : \textbf{box-minimal}, \textbf{box-fancy}, \textbf{box-classic}, \textbf{box-elegant}, \textbf{box-diagonal}, \textbf{box-bevel}, \textbf{box-corner}, \textbf{box-rounded}, \textbf{box-downhill}, \textbf{box-bottomtitle}, \textbf{box-bottomtitlef}.

\begin{lstlisting}[language=TeX]
\begin{code}[numbers=left]{python}[Exemple de fonction][box-fancy]
def hello(name):
    print(f"Hello, {name}!")
\end{code}
\end{lstlisting}

\subsubsection{Langages et styles préconfigurés}

\begin{itemize}
\item Python
\item Java
\item C++
\item JavaScript
\item SQL
\item LaTeX
\item Bash
\item Assembly
\item Lisp
\item JSON
\item YAML
\item TOML
\item CSV
\item Markdown
\end{itemize}

\subsubsection{Commandes additionnelles}

\begin{itemize}
\item \textbf{\textbackslash codeinline} : code en ligne.
\end{itemize}

\begin{code}{latex}
\codeinline[python]{print("Hello")}
\end{code}

\begin{itemize}

\item \textbf{\textbackslash codeinput} : code chargé depuis un fichier.
\end{itemize}

\begin{code}{latex}
\codeinput[options]{langage}{fichier.py}[titre][style-boite]
\end{code}

\subsection{Option minted}

Lorsque l'option \textbf{minted} est activée, les environnements de code utilisent \texttt{Pygments} pour la coloration
syntaxique. L'environnement \texttt{code} est également disponible avec l'option \texttt{minted}, avec la même syntaxe :

\begin{lstlisting}[language=TeX]
\usemintedstyle{tango}
\begin{code}[linenos,highlightlines={2,3}]{python}[Fonction][box-fancy]
def greet(name):
    message = f"Hello, {name}!"
    print(message)
    return message
\end{code}
\end{lstlisting}

\section{Notes et annotations}

\subsection{Notes marginales}

Les notes peuvent être placées dans la marge avec différentes options :

\begin{itemize}
\item \textbf{\textbackslash tdnote} : notes colorées et encadrées dans la
  marge, alternant entre gauche et droite.
\end{itemize}

\begin{code}{latex}
\tdnote{Point important à retenir}
\tdnote[backgroundcolor=blue!5]{Note avec fond bleu clair}
\end{code}

\begin{itemize}
\item \textbf{\textbackslash boxnote/\textbackslash tdmark} : l'extension \texttt{todonote} ne permettant pas de placer des notes directement dans des environnements, il est nécessaire d'utiliser un point d'ancrage (\textbf{\textbackslash tdmark}) ayant le même label que le contenu de la note proprement dite (\textbf{\textbackslash boxnote}).
\end{itemize}

\begin{code}{latex}
\boxnote[thm1]{Ce théorème est important}
\begin{theorem}
    \tdmark[thm1]  % Point de référence pour la note (même label)
    Contenu du théorème...
\end{theorem}
\end{code}

Les options possibles pour les notes sont les suivantes.

\begin{itemize}
\item \textbf{backgroundcolor} = \texttt{couleur} : couleur
  de fond.
\item \textbf{color} = \texttt{couleur} : couleur du texte.
\item \textbf{bordercolor} = \texttt{couleur} : couleur de
  la bordure.
\item \textbf{width} = \texttt{longueur} : largeur de la
  note.
\item \textbf{linecolor} = \texttt{couleur} : couleur de la
  ligne de référence.
\end{itemize}

\subsection{Admonitions}

Les environnements d'admonition permettent de mettre en avant des
informations importantes. Chaque type a sa propre couleur et icône par
défaut.

\begin{itemize}
\item \textbf{note} : remarques générales.
\end{itemize}

\begin{code}{latex}
\begin{note}[Remarque importante][\faInfo]
    Points à retenir...
\end{note}
\end{code}

\begin{itemize}
\item \textbf{info} : informations complémentaires.
\end{itemize}

\begin{code}{latex}
\begin{info}[Pour aller plus loin]
    Informations additionnelles...
\end{info}
\end{code}

\begin{itemize}
\item \textbf{warning} : avertissements.
\end{itemize}

\begin{code}{latex}
\begin{warning}[Attention !][\faExclamationTriangle]
    Points critiques à ne pas oublier...
\end{warning}
\end{code}

\begin{itemize}
\item \textbf{important} : points essentiels.
\end{itemize}

\begin{code}{latex}
\begin{important}[Point clé]
    Concept fondamental...
\end{important}
\end{code}

\begin{itemize}
\item \textbf{tip} : conseils et astuces.
\end{itemize}

\begin{code}{latex}
\begin{tip}[Astuce de calcul][\faLightbulb]
    Une méthode plus rapide...
\end{tip}
\end{code}

\begin{itemize}
\item
  \textbf{reminder} : points à retenir.
\end{itemize}

\begin{code}{latex}
\begin{reminder}[À mémoriser]
    Formules essentielles...
\end{reminder}
\end{code}

\begin{itemize}
\item \textbf{summary} : résumés.
\end{itemize}

\begin{code}{latex}
\begin{summary}[En bref]
    Points principaux du chapitre...
\end{summary}
\end{code}

\begin{itemize}
\item \textbf{toolbox} : boîte à outils.
\end{itemize}

\begin{code}{latex}
\begin{toolbox}[Outils nécessaires]
  \begin{itemize}
    \item Calculatrice
    \item Règle graduée
    \item Compas
  \end{itemize}
\end{toolbox}
\end{code}

Toutes les admonitions acceptent trois paramètres optionnels :

\begin{itemize}
\item un titre optionnel ;
\item une icône personnalisée ;
\item des options de personnalisation (couleurs, bordures).
\end{itemize}

\section{Notation et correction}

\subsection{Outils de notation}

\begin{itemize}
\item \textbf{\textbackslash gradingstrip} : bandeau de notation (note et appréciation).
\end{itemize}

\begin{code}{latex}
% Bandeau simple
\gradingstrip

% Bandeau avec total spécifié
\gradingstrip[20]
\end{code}

L'option \textbf{totalpoints} définit le nombre total de points par défaut.

\begin{code}{latex}
\documentclass[totalpoints=20]{neoschool}
\end{code}

\begin{itemize}

\item \textbf{\textbackslash mrk, \textbackslash mrks} : points dans la
  marge.
\end{itemize}

\begin{code}{latex}
% Un point
\mrk[Bien vu !]{1}     % Marge droite avec commentaire
\mrk*{1}               % Marge gauche

% Plusieurs points
\mrks{3}               % 3 points marge droite
\mrks*[Barème]{3}      % 3 points marge gauche avec texte
\end{code}

\subsection{Zones de réponse}

\begin{itemize}
\item
  \textbf{\textbackslash answerfield} : zone de réponse avec fond coloré.
\end{itemize}

\begin{code}{latex}
% Zone pleine largeur, 3 lignes
\answerfield{3}

% Zone 80% largeur, 5 lignes
\answerfield[0.8\linewidth]{5}
\end{code}

\begin{itemize}
\item
  \textbf{\textbackslash answerframe} : zone de réponse encadrée.
\end{itemize}

\begin{code}{latex}
% Cadre pleine largeur, 3 lignes
\answerframe{3}

% Cadre 80% largeur, 5 lignes
\answerframe[0.8\linewidth]{5}
\end{code}

\begin{itemize}
\item
  \textbf{\textbackslash vardots} : ligne pointillée de longueur
  variable.
\end{itemize}

\begin{code}{latex}
% Ligne pointillée pleine largeur
\vardots

% Ligne pointillée de 5cm
\vardots[5cm]
\end{code}

\subsection{Marqueurs et symboles}

\begin{itemize}
\item
  \textbf{\textbackslash cmark} : symbole de validation (\cmark)
\item
  \textbf{\textbackslash xmark} : symbole d'erreur (\xmark)
\item
  \textbf{\textbackslash unchecked} : case à cocher vide \unchecked
\item
  \textbf{\textbackslash done} : case cochée avec \done
\item
  \textbf{\textbackslash wontfix} : case cochée avec \wontfix
\end{itemize}

\begin{code}{latex}
\begin{itemize}
    \unchecked Objectif 1 à réaliser
    \done      Objectif 2 terminé
    \wontfix   Objectif 3 abandonné
\end{itemize}
\end{code}

\subsection{Compétences et évaluation}

\begin{itemize}
\item
  \textbf{\textbackslash competencies} : tableau d'évaluation par
  compétences.
\end{itemize}

\begin{code}{latex}
\competencies{
    Calculer une dérivée\\
    Étudier les variations\\
    Résoudre une équation
}
\end{code}

Le tableau affiche automatiquement :
\begin{itemize}
\item 4 niveaux de maîtrise avec émojis ;
\item des cases à cocher pour l'évaluation.
\end{itemize}

\section{Commandes mathématiques et outils spéciaux}

\subsection{Commandes
mathématiques}\label{commandes-mathuxe9matiques}

\subsubsection{Mise en valeur et
coloration}\label{mise-en-valeur-et-coloration}

\begin{itemize}
\item
  \textbf{\textbackslash mhl} : surlignage d'expressions mathématiques.
\end{itemize}

\begin{code}{latex}
% Surlignage jaune par défaut
$\mhl{x^2}$

% Surlignage personnalisé
$\mhl[blue!20]{f'(x)}$

% Dans une équation sur plusieurs lignes
\begin{align*}
    f(x) &= x^2 + \mhl{2x} + 1 \\
    f'(x) &= 2x + \mhl{2}
\end{align*}
\end{code}

\begin{itemize}

\item
  \textbf{\textbackslash mc} : coloration d'expressions mathématiques.
\end{itemize}

\begin{code}{latex}
% Couleur du thème par défaut
$\mc{f(x)}$

% Couleur personnalisée
$\mc[red]{g(x)}$

% Dans une équation
\[ \mc{f'(x)} = \lim_{h \to 0} \mc[blue]{\frac{f(x+h)-f(x)}{h}} \]
\end{code}

\subsubsection{Support APMEP}

Lorsque l'option \textbf{apmep} est activée, les commandes suivantes sont disponibles.
\begin{itemize}
\item Commandes de vecteurs :
\end{itemize}

\begin{code}{latex}
\vect{u}         % Vecteur u avec flèche
\vectt{AB}       % Vecteur AB avec espacement
\end{code}

\begin{itemize}
\item Repères et coordonnées :
\end{itemize}

\begin{code}{latex}
\Oij             % Repère (O; i,j)
\Oijk            % Repère (O; i,j,k)
\Ouv             % Repère (O; u,v)
\end{code}

\begin{itemize}
\item Commandes spéciales :
\end{itemize}

\begin{code}{latex}
\euro            % Symbole euro
\cg              % Crochet gauche
\cd              % Crochet droit
\pg              % Plus grand ou égal
\pp              % Plus petit ou égal
\barre{x}        % x surligné
\ds              % \displaystyle
\end{code}

\subsection{Outils spéciaux}

\subsubsection{Arbres et graphes}

\begin{itemize}
\item
  Arbres avec \emph{l}xtension \texttt{forest} :
\end{itemize}

\begin{code}{latex}
\begin{neotree}
A
    [B
        [D]
        [E]
    ]
    [C
        [F]
        [G]
    ]
\end{neotree}

% Avec poids sur les arêtes
\begin{neotree}
A
    [B, w=\frac{1}{3}
        [D]
        [E]
    ]
    [C, w=\frac{2}{3}]
\end{neotree}
\end{code}

\begin{itemize}
\item
  Graphes (uniquement avec une compilation en \texttt{lualatex}) :
\end{itemize}

\begin{code}{latex}
\neograph{
    A -- {B, C, D, F},
    B -- {C, D, F},
    C -> ["3"] D,
    D -- [bend left=10] {E},
    E -- [bend left=10] {D},
    E -- [bend left=10] {F},
    F -- [bend left=10] {E},
    A -- [loop] A
}
\end{code}

\subsubsection{Grille mathématique}

L'environnement \texttt{mathgrid} permet de disposer
des équations en grille :

\begin{code}{latex}
\begin{mathgrid}{3}
    \neoline
    \neocol{
        T &= 7xx+9x\\
          &= (7+9)x \\
          &= 16x
    }
    \neocol{
        U &= 8x^{2}-5x^{2}+x^{2}\\
          &= (8-5+1)x^{2} \\
          &= 4x^{2}
    }
    \neocol{
        V &= 5a^{2}-6a\\
          &= a(5a-6)
    }
    \neoline
    \neocol[2]{
        W &= 5a^{2}-6a+3+7a^{2}+a-6\\
          &= (5+7)a^{2}+(-6+1)a+(3-6)\\
          &= 12a^{2}-5a-3
    }
    \neocol{
        A &= 2x + 3x\\
          &= 5x
    }
\end{mathgrid}
\end{code}

\end{document}
