\documentclass[
    french,
    11pt,
    margin=3cm,
    inlinecodebox,
    compacttoc,
    twocolumntoc,
    apmep,
    faketext,
    mainface=Zilla Slab,
    sansface=Source Sans 3,
    sansfaceoptions={Scale=0.92},
    monoface=IBM Plex Mono,
    monofaceoptions={Scale=0.88},
]{neoschool}

\title{La classe \texttt{neoschool}}
\author{Version : 1.1.0 \quad\textemdash{}\quad Auteur : Razik Ikhlef\\[\baselineskip]
  {\normalsize\href{mailto:razik.ikhlef@csilyon.fr}{razik.ikhlef@csilyon.fr}}}
\date{25 octobre 2025}

\begin{document}

\maketitle

\begin{abstract}
  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 onze 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.
\end{abstract}

\tableofcontents

\section{Extensions chargées}

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

\begin{multicols}{4}
  \begin{itemize}[label={}]
    \item \texttt{adforn}
    \item \texttt{adjustbox}
    \item \texttt{algpseudocode}
    \item \texttt{amssymb}
    \item \texttt{babel}
    \item \texttt{bookmark}
    \item \texttt{calc}
    \item \texttt{changespace}
    \item \texttt{cuted}
    \item \texttt{environ}
    \item \texttt{fancyvrb}
    \item \texttt{fontawesome5}
    \item \texttt{forest}
    \item \texttt{iftex}
    \item \texttt{ifthen}
    \item \texttt{kvoptions}
    \item \texttt{lastpage}
    \item \texttt{listings}
    \item \texttt{marginnote}
    \item \texttt{mathtools}
    \item \texttt{microtype}
    \item \texttt{minted}
    \item \texttt{mismath}
    \item \texttt{multicol}
    \item \texttt{needspace}
    \item \texttt{pdftexcmds}
    \item \texttt{pgffor}
    \item \texttt{pgfplots}
    \item \texttt{qrcode}
    \item \texttt{scrlayer-scrpage}
    \item \texttt{silence}
    \item \texttt{siunitx}
    \item \texttt{tabularray}
    \item \texttt{tasks}
    \item \texttt{tcolorbox}
    \item \texttt{textcase}
    \item \texttt{tikz}
    \item \texttt{tikzpagenodes}
    \item \texttt{tikzsymbols}
    \item \texttt{ulem}
    \item \texttt{xcolor}
    \item \texttt{xhfill}
    \item \texttt{xkeyval}
    \item \texttt{xsim}
    \item \texttt{xstring}
  \end{itemize}
\end{multicols}

La compilation en \texttt{pdflatex} charge les extensions \texttt{fontenc} (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'option \textbf{graphics} charge les extensions \texttt{graphicx} et \texttt{wrapfig}.
L'option \textbf{faketext} (anciennement \texttt{draft}) charge les extensions \texttt{blindtext} et \texttt{lipsum}.
L'option \textbf{mathastext} charge l'extension \texttt{mathastext}.

L'option \textbf{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 \textbf{notes=\textit{longueur}} permet d'afficher des notes encadrées (\texttt{todonotes}) dans les marges gauche et droite, de façon alternée, et définit leur largeur. Elle charge l'extension \texttt{todonotes}.

L'option \textbf{apmep}, qui permet de compiler directement les sujets d'annales de l'association du même nom, définit un ensemble de commandes mathématiques et charge les extensions \texttt{esvect}, \texttt{fourier-orns}, \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 \textbf{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 (ajout de ponctuation finale et majuscule initiale).
    \item \textbf{frenchmath} : applique les conventions mathématiques françaises (majuscules et lettres grecques droites en maths).
\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{classic} (thème par défaut), \texttt{abyss}, \texttt{aether}, \texttt{atlantic}, \texttt{autumn}, \texttt{blossom}, \texttt{botanical}, \texttt{burgundy}, \texttt{cyprus}, \texttt{day}, \texttt{deepocean}, \texttt{duo}, \texttt{eagle}, \texttt{foresthues}, \texttt{frost}, \texttt{glacier}, \texttt{goldensummer}, \texttt{graphite}, \texttt{heather}, \texttt{heritage}, \texttt{kassio}, \texttt{magma}, \texttt{purplebliss}, \texttt{retrocafe}, \texttt{saffronsky}, \texttt{scribe}, \texttt{sepia}, \texttt{summer}, \texttt{winkle} et \texttt{midnight} (thème sombre).

\begin{code}{latex}
\documentclass[theme=retrocafe]{neoschool}
\end{code}

\subsubsection{Modes de couleur}

Ces options modifient la façon dont les couleurs du thème sont appliquées.
\begin{itemize}
    \item \textbf{unicolor} : utilise une couleur unique (basée sur la couleur du titre) pour tous les environnements, avec variations par transparence.
    \item \textbf{emphasis} : met l'accent sur la théorie (théorèmes, définitions colorés ; reste en gris).
    \item \textbf{practical} : met l'accent sur la pratique (méthodes, applications, code colorés ; théorie en gris).
    \item \textbf{academic} : deux familles de couleurs (théorie et pratique distinctes, reste en gris).
    \item \textbf{print} : convertit toutes les couleurs en noir et blanc pour l'impression.
\end{itemize}

\subsubsection{Personnalisation des couleurs}

Permet de surcharger les couleurs du thème choisi.
\begin{itemize}
    \item \textbf{globalcolor} = \texttt{couleur} : couleur du texte principal.
    \item \textbf{titlecolor} = \texttt{couleur} ou \textbf{titlehexcolor} = \texttt{code hex} : couleur du titre principal.
    \item \textbf{headcolor} = \texttt{couleur} : couleur des titres de section (\texttt{\textbackslash section}).
    \item \textbf{subcolor} = \texttt{couleur} : couleur des titres de sous-section (\texttt{\textbackslash subsection}).
    \item \textbf{subsubcolor} = \texttt{couleur} : couleur des titres de sous-sous-section (\texttt{\textbackslash subsubsection}).
    \item \textbf{headfootcolor} = \texttt{couleur} : couleur du texte des en-têtes et pieds de page.
\end{itemize}

\subsubsection{Options d'affichage}

\begin{itemize}
    \item \textbf{noframe} : supprime les cadres autour des environnements (théorèmes, exercices...).
    \item \textbf{noback} : supprime les fonds colorés des environnements.
    \item \textbf{nocodeframe} : supprime les cadres autour des blocs de code.
    \item \textbf{scale} : harmonise la taille des polices lors de la compilation avec \texttt{lualatex}.
    \item \textbf{inlinecodebox} : affiche le code en ligne (\texttt{\textbackslash texttt}) dans une boîte encadrée et colorée.
\end{itemize}

\subsection{Personnalisation du résumé}

L'option \texttt{abstracttitle} permet de changer le titre de l'environnement \texttt{abstract}.
\begin{code}{latex}
\documentclass[abstracttitle=Synthèse]{neoschool}
\end{code}

\subsection{Typographie}

\begin{itemize}
    \item \textbf{sfbody} : utilise la police sans empattements (\textit{sans serif}) pour le corps du texte.
    \item \textbf{sfall} : utilise la police sans empattements pour tout le document (titres, texte, etc.).
    \item \textbf{mathastext} : utilise la police de caractères du texte courant pour les mathématiques.
    \item \textbf{mainface} = \texttt{NomPolice} : définit la police principale (avec empattements).
    \item \textbf{mainfaceoptions} = \texttt{options} : options pour la police principale (ex: \texttt{Scale=MatchLowercase}).
    \item \textbf{sansface} = \texttt{NomPolice} : définit la police sans empattements.
    \item \textbf{sansfaceoptions} = \texttt{options} : options pour la police sans empattements.
    \item \textbf{monoface} = \texttt{NomPolice} : définit la police à chasse fixe (pour le code).
    \item \textbf{monofaceoptions} = \texttt{options} : options pour la police à chasse fixe.
    \item \textbf{mathface} = \texttt{NomPoliceMath} : définit la police mathématique.
    \item \textbf{mathfaceoptions} = \texttt{options} : options pour la police mathématique (\texttt{pdflatex} uniquement).
    \item \textbf{facefamily} = \texttt{NomFamille} : définit une famille complète de polices (ex: \texttt{fira}).
    \item \textbf{facefamilyoptions} = \texttt{options} : options pour la famille de polices.
\end{itemize}

\begin{code}{latex}
% Exemple avec Fira Sans
\documentclass[
    facefamily=Fira Sans,
    facefamilyoptions={%
        sfdefault,
        lining
      },
    monoface=Fira Mono,
    monofaceoptions={Scale=0.85}
]{neoschool}
\end{code}

\subsection{Mise en page}

\subsubsection{Marges et espacement}

\begin{itemize}
    \item \textbf{margin} = \texttt{longueur} : définit la largeur des marges horizontales (par défaut: \texttt{2cm}). Les marges verticales sont ajustées automatiquement.
    \item \textbf{notes} = \texttt{longueur} : active les notes marginales (\texttt{todonotes}) et définit leur largeur.
    \item \textbf{noindent} : supprime l'indentation en début de paragraphe.
    \item \textbf{indent} = \texttt{longueur} : définit la taille de l'indentation (par défaut: \texttt{1em}).
    \item \textbf{compact} : active un mode compact:
    \begin{itemize}
        \item réduit l'espacement vertical (paragraphes, listes, titres, environnements) ;
        \item diminue les marges internes des environnements ;
        \item compresse l'interligne.
    \end{itemize}
\end{itemize}

\subsubsection{Options de sortie (Mise en page multiple)}

Ces options permettent d'imprimer plusieurs pages logiques sur une seule page physique.
\begin{itemize}
    \item \textbf{2a5toa4} : imprime 2 fois la même page A5 sur une feuille A4 paysage.
    \item \textbf{2a4toa3} : imprime 2 fois la même page A4 sur une feuille A3 paysage.
    \item \textbf{4a5toa3} : imprime 4 fois la même page A5 sur une feuille A3.
    \item \textbf{2toa3} : imprime 2 pages A4 différentes sur une feuille A3 paysage.
    \item \textbf{bookleta5} : crée un livret A5 (pages A5 sur feuilles A4 pliées).
    \item \textbf{bookleta4} : crée un livret A4 (pages A4 sur feuilles A3 pliées).
\end{itemize}

\subsubsection{Table des matières}

\begin{itemize}
    \item \textbf{compacttoc} : réduit les espacements dans la table des matières.
    \item \textbf{monotoc} : la table des matières utilise la couleur du texte (\texttt{globalcolor}).
    \item \textbf{twocolumntoc} : affiche la table des matières sur deux colonnes.
\end{itemize}

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

\begin{itemize}
    \item \textbf{fullheader} : active un en-tête et pied de page complets (type de document, titre, niveau / date, établissement, pagination). s'utilise conjointement avec \texttt{\textbackslash neoheader}.
    \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} : ajoute les deux filets.
\end{itemize}

\section{Styles de document}

\subsection{Styles de titre (\texttt{\textbackslash maketitle})}

Ces options modifient radicalement l'apparence de la première page et du titre.

\subsubsection{Styles d'examen}
Idéal pour les devoirs surveillés, examens blancs.
\begin{itemize}
    \item \textbf{exam} : style complet avec tableau pour nom, classe, date, etc., et bandeau de notation. Nécessite \texttt{\textbackslash neoheader}.
    \item \textbf{shortexam} : style plus compact pour examens, avec informations essentielles. Nécessite \texttt{\textbackslash neoheader}.
    \item \textbf{mockexam} : style spécifique pour épreuves type Bac/Brevet blanc, avec page de garde normalisée (France). Nécessite \texttt{\textbackslash neoheader}.
\end{itemize}

\begin{code}{latex}
\documentclass[exam]{neoschool}
\neoheader{
  type = Devoir Surveillé n°1,
  school = Lycée Imaginaire,
  level = Terminale Spé Maths,
  duration = 2h,
  calculator = exam % ou true/false
}
\title{Suites numériques}
\date{21 octobre 2025}
\subject{Mathématiques} % Optionnel
\begin{document}
\maketitle
...
\end{code}

\subsubsection{Styles d'évaluation}
Adaptés aux contrôles, interrogations rapides.
\begin{itemize}
    \item \textbf{eval} : style standard, informations réparties dans les coins. Nécessite \texttt{\textbackslash neoheader}.
    \item \textbf{evalicons} : style \texttt{eval} avec icônes personnalisables via \texttt{\textbackslash neoheader}.
    \item \textbf{evalgrade} : style \texttt{eval} avec bandeau de notation ajouté automatiquement.
    \item \textbf{evaliconsgrade} : combine \texttt{evalicons} et \texttt{evalgrade}.
    \item \textbf{shorteval} : style compact sur une seule ligne en haut de page. Nécessite \texttt{\textbackslash neoheader}.
\end{itemize}

\subsubsection{Styles avec bulles}
Effets visuels pour des documents moins formels.
\begin{itemize}
    \item \textbf{bubbles} : titre centré sur fond de bulles colorées.
    \item \textbf{topbubbles} : bulles confinées en haut de la page, titre en dessous.
    \item \textbf{shortbubbles} : version compacte de \texttt{bubbles}.
\end{itemize}

\subsubsection{Autres styles de titre}
Options plus classiques ou minimalistes.
\begin{itemize}
    \item \textbf{titleornament} : ajoute des ornements sous le titre.
    \item \textbf{titlerule} : ajoute un petit filet sous le titre.
    \item \textbf{titlemidrule} : ajoute un filet centré de largeur moyenne sous le titre.
    \item \textbf{titlefullrule} : ajoute un filet sur toute la largeur sous le titre.
    \item \textbf{fancybox} : titre dans un bandeau coloré rotaté en haut à gauche.
    \item \textbf{onlytitleleft} / \textbf{onlytitle} / \textbf{onlytitleright} : affiche uniquement le titre, aligné à gauche / centré / à droite. Ignore auteur, date, etc.
    \item \textbf{shorttitle} : style compact, titre centré sur une ligne en haut de page.
    \item \textbf{shortlesson} : style compact pour fiches de cours, avec type, titre et niveau sur une ligne. Nécessite \texttt{\textbackslash neoheader}.
\end{itemize}

\subsection{Configuration de l'en-tête (\texttt{\textbackslash neoheader})}

Cette commande configure les informations utilisées par les styles \texttt{exam}, \texttt{eval}, \texttt{mockexam}, \texttt{shortlesson} et l'option \texttt{fullheader}.
\begin{code}{latex}
\neoheader{
  type = {Interrogation de cours}, % Type de document
  school = {Collège A. Turing},    % Nom de l'établissement
  academy = {Lyon},                % Nom de l'académie (pour mockexam)
  level = {Quatrième},             % Niveau de classe
  duration = {20 minutes},         % Durée (pour exam, mockexam)
  calculator = {false},            % Calculatrice: true / false / exam
  leftcontent = {\faFlask},        % Icône gauche (pour evalicons)
  rightcontent = {\faCalculator}   % Icône droite (pour evalicons)
}
\end{code}

\subsection{Options de formatage des titres}

Ces options contrôlent l'apparence (police, graisse, forme, alignement) des différents titres du document.

\subsubsection{Styles globaux}
S'appliquent par défaut à tous les titres (sections, théorèmes, exercices...).
\begin{itemize}
    \item \textbf{headstyle} = \texttt{style} (\texttt{sffamily} par défaut) : famille de police (ex: \texttt{rmfamily}, \texttt{sffamily}).
    \item \textbf{headweight} = \texttt{graisse} (\texttt{bfseries} par défaut) : graisse (ex: \texttt{mdseries}, \texttt{bfseries}, \texttt{sbseries} pour semi-gras si disponible).
    \item \textbf{headshape} = \texttt{forme} (\texttt{scshape} par défaut) : forme (ex: \texttt{upshape}, \texttt{itshape}, \texttt{scshape} pour petites capitales).
\end{itemize}

\subsubsection{Style du titre principal (\texttt{\textbackslash maketitle})}
Surcharge les styles globaux pour le titre principal.
\begin{itemize}
    \item \textbf{titlestyle} = \texttt{style} (hérite de \texttt{headstyle}).
    \item \textbf{titleweight} = \texttt{graisse} (hérite de \texttt{headweight}).
    \item \textbf{titleshape} = \texttt{forme} (\texttt{upshape} par défaut).
    \item \textbf{titlealign} = \texttt{alignement} (\texttt{center} par défaut) : \texttt{left}, \texttt{center}, \texttt{right}.
\end{itemize}

\subsubsection{Style des sections (\texttt{\textbackslash section})}
Options spécifiques pour les titres de section.
\begin{itemize}
    \item \textbf{sectionnumstyle} = \texttt{style} (\texttt{circle} par défaut) : apparence du numéro (\texttt{circle}, \texttt{box}, \texttt{dash}, \texttt{plain}).
    \item \textbf{sectiontextstyle} = \texttt{style} (\texttt{sc} par défaut) : casse du texte (\texttt{sc}, \texttt{upper}, \texttt{lower}).
    \item \textbf{sectionstyle} = \texttt{style} (\texttt{normal} par défaut) : style visuel global (\texttt{ornaments}, \texttt{underline}, \texttt{normal}, \texttt{highlighted}, \texttt{shadedline}).
    \item \textbf{sectionalign} = \texttt{alignement} (\texttt{center} par défaut) : \texttt{left}, \texttt{center}, \texttt{right}.
\end{itemize}

\subsubsection{Style des en-têtes et des pieds de page}
\begin{itemize}
    \item \textbf{headfootstyle} = \texttt{style} (hérite de \texttt{titlestyle}) : style de police pour le texte des en-têtes et pieds de page.
\end{itemize}

\subsubsection{Exemple complet de configuration}
\begin{code}{latex}
\documentclass[
    % Style global
    headstyle=sffamily,
    headweight=bfseries,
    headshape=scshape,
    % Titre principal
    titlestyle=rmfamily,
    titleweight=bfseries,
    titleshape=upshape,
    titlealign=left,
    % Sections
    sectionnumstyle=box,
    sectiontextstyle=upper,
    sectionstyle=underline,
    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\{\textit{x}\}\{\textit{y}\}\{\textit{scale}\}\{\textit{contenu}\}} place \textit{contenu} aux coordonnées (\textit{x}, \textit{y}) depuis le coin supérieur gauche de la page, avec un facteur d'\textit{échelle}.

\begin{code}{latex}
% Logo en haut à droite
\positionobject{15cm}{1cm}{0.5}{%
  \includegraphics[width=3cm]{logo.png}%
}

% Texte en bas à gauche
\positionobject{2cm}{25cm}{1.2}{%
  \textit{Note importante}%
}
\end{code}

\subsection{Mise en page à deux colonnes}

La commande \texttt{\textbackslash splitcontent[\textit{w1}][\textit{gap}]\{\textit{col1}\}\{\textit{col2}\}} divise l'espace horizontal.
\begin{itemize}
    \item \textit{w1} : largeur de la première colonne (défaut : 0.5 pour 50 \%).
    \item \textit{gap} : espace entre les colonnes (défaut : 0.02 pour 2 \%).
    \item \textit{col1}, \textit{col2} : contenu des colonnes.
\end{itemize}

\begin{sidebyside}[righthand width=.54\linewidth]
\begin{code}[numbers=none]{latex}
\splitcontent[0.45][0.03]{%
  Contenu colonne 1 (40 (*@\%@*)) \lipsum[1][1-2]
}{%
  Contenu colonne 2 (52 (*@\%@*)) \lipsum[1][1-2]
}
\end{code}
\tcblower
\splitcontent[0.45][0.03]{%
  Contenu colonne 1 (45 \%) \lipsum[1][1-2]
}{%
  Contenu colonne 2 (52 \%) \lipsum[2][1-2]
}
\end{sidebyside}

\subsection{Mise en page côte à côte (environnement \texttt{sidebyside})}

Crée deux boîtes \texttt{tcolorbox} côte à côte. Utiliser \texttt{\textbackslash tcblower} pour passer de la boîte gauche à la droite. Accepte les options de \texttt{tcolorbox}.

\begin{sidebyside}[righthand width=.55\linewidth]
\begin{code}[numbers=none]{latex}
\begin{sidebyside}[
  title=\centering Comparaison,
]
  Avantages
  \begin{itemize}
    \item Point 1
  \end{itemize}
\tcblower % Sépare les deux colonnes
  Inconvénients
  \begin{itemize}
    \item Point A
  \end{itemize}
\end{sidebyside}
\end{code}
\tcblower
\begin{sidebyside}[
  title=\centering Comparaison,
]
  Avantages
  \begin{itemize}
    \item Point 1
  \end{itemize}
\tcblower % Sépare les deux colonnes
  Inconvénients
  \begin{itemize}
    \item Point A
  \end{itemize}
\end{sidebyside}
\end{sidebyside}

\subsection{Association texte et image}

La commande \texttt{\textbackslash textwithimage[*]\{\textit{w\_img}\}\{\textit{s\_img}\}\{\textit{texte}\}\{\textit{chemin\_img}\}} combine du texte et une image.
\begin{itemize}
    \item \texttt{*} : si présent, met l'image à gauche (droite par défaut).
    \item \textit{w\_img} : largeur relative de l'image (ex: 0.3 pour 30%).
    \item \textit{s\_img} : échelle de l'image dans sa boîte (ex: 0.95).
    \item \textit{texte} : le texte.
    \item \textit{chemin\_img} : chemin vers le fichier image.
\end{itemize}
\begin{sidebyside}
\begin{code}[numbers=none]{latex}
% Image à droite (30 % de la largeur)
\textwithimage{0.3}{1}{%
  Description de l'image qui
  sera affichée à droite.
}{example-image-a} % image fictive
\end{code}
\tcblower
% Simulation visuelle
\textwithimage{0.3}{1}{%
  Description de l'image qui sera affichée à droite.
}{example-image-a}
\end{sidebyside}
\begin{sidebyside}
\begin{code}[numbers=none]{latex}
% Image à gauche (40 % de la largeur)
\textwithimage*{0.4}{0.9}{%
  Description à droite de l'image.
}{example-image-b} % image fictive
\end{code}
\tcblower
% Simulation visuelle
\textwithimage*{0.4}{0.9}{%
  Description à droite de l'image.
}{example-image-b}
\end{sidebyside}

\subsection{QR codes et contenus}

La commande \texttt{\textbackslash withqrcode[*][\textit{taille}]\{\textit{url}\}\{\textit{contenu}\}} intègre un QR code à côté d'un contenu.
\begin{itemize}
    \item \texttt{*} : place le QR code à droite (gauche par défaut).
    \item \textit{taille} : taille du QR code (défaut: 2cm).
    \item \textit{url} : url ou texte à encoder dans le QR code.
    \item \textit{contenu} : texte ou autre contenu à afficher à côté.
\end{itemize}
\begin{sidebyside}
\begin{code}[numbers=none]{latex}
% QR code à gauche (défaut 2cm)
\withqrcode{https://www.google.com}{
  Scannez pour visiter Google.
}
\end{code}
\tcblower
\withqrcode{https://www.google.com}{
  Scannez pour visiter Google.
}
\end{sidebyside}
\begin{sidebyside}
\begin{code}[numbers=none]{latex}
% QR code à droite (3cm)
\withqrcode*[3cm]{https://fr.wikipedia.org}{
  Plus d'informations sur Wikipedia.
}
\end{code}
\tcblower
\withqrcode*[3cm]{https://fr.wikipedia.org}{
  Plus d'informations sur Wikipedia.
}
\end{sidebyside}

\subsection{Grilles et papiers}

\subsubsection{Grilles personnalisables}
Commandes pour dessiner des zones quadrillées.
\begin{itemize}
    \item \texttt{\textbackslash grid[\textit{couleur}]\{\textit{largeur}\}\{\textit{hauteur}\}} : grille à petits carreaux (5mm x 5mm).
    \item \texttt{\textbackslash customgrid[\textit{couleur}][\textit{dx}][\textit{dy}]\{\textit{largeur}\}\{\textit{hauteur}\}} : grille avec espacement personnalisé (\textit{dx}, \textit{dy}).
    \item \texttt{\textbackslash frenchgrid[\textit{coul\_p}][\textit{coul\_g}]\{\textit{largeur}\}\{\textit{hauteur}\}} : grille à grands carreaux de type Seyès. La version étoilée \texttt{\textbackslash frenchgrid*} centre la grille horizontalement.
\end{itemize}

\begin{sidebyside}
\begin{code}[numbers=none]{latex}
\customgrid[blue!50][2mm][2mm]{6cm}{3cm}
\end{code}
\tcblower
\begin{center}
\customgrid[blue!50][2mm][2mm]{6cm}{3cm}
\end{center}
\end{sidebyside}

\begin{sidebyside}
\begin{code}[numbers=none]{latex}
\frenchgrid{7.5cm}{3cm}
\end{code}
\tcblower
\begin{center}
\frenchgrid{7.5cm}{3cm}
\end{center}
\end{sidebyside}

\begin{sidebyside}
\begin{code}[numbers=none]{latex}
\frenchgrid*{5cm}{2cm} % centrée
\end{code}
\tcblower
\frenchgrid*{5cm}{2cm}
\end{sidebyside}

\subsubsection{Remplissage automatique}

La commande \texttt{\textbackslash gridfill} remplit l'espace vertical restant sur la page avec une grille \texttt{customgrid} (5mm par défaut). La version étoilée \texttt{\textbackslash gridfill*} utilise \texttt{frenchgrid}.

\begin{code}{latex}
% Syntaxe : \gridfill[*][couleur][dx][dy]

% Remplit avec une grille customgrid bleue 2mm x 2mm
\gridfill[blue][2mm][2mm]

% Remplit avec une grille frenchgrid (par défaut)
\gridfill*
\end{code}

\subsubsection{Pages entières (styles de fond)}
Applique un style de fond à la page courante.
\begin{itemize}
    \item \texttt{\textbackslash notebook} : style cahier ligné avec marge rouge.
    \item \texttt{\textbackslash nbminorgrid} : fond quadrillé petits carreaux (5mm).
    \item \texttt{\textbackslash nbmajorgrid} : fond quadrillé Seyès.
\end{itemize}
\begin{code}{latex}
\nbminorgrid % Applique le quadrillage fin à toute la page
\end{code}

\subsection{Boîtes simples (\texttt{neobox})}

Environnement pour créer des boîtes \texttt{tcolorbox} simples, avec ou sans cadre. Accepte les options de \texttt{tcolorbox}.
\begin{itemize}
    \item \texttt{neobox} : boîte avec cadre.
    \item \texttt{neobox*} : boîte sans cadre visible (mais fond possible).
\end{itemize}
\begin{sidebyside}
\begin{code}[numbers=none]{latex}
\begin{neobox}[
  title=Boîte standard
]
Contenu...
\end{neobox}
\end{code}
\tcblower
\begin{neobox}[
  title=Boîte standard
]
Contenu...
\end{neobox}
\end{sidebyside}
\begin{sidebyside}
\begin{code}[numbers=none]{latex}
\begin{neobox*}
Contenu sans cadre visible...
\end{neobox*}
\end{code}
\tcblower
\begin{neobox*}
Contenu sans cadre visible...
\end{neobox*}
\end{sidebyside}

\section{Exercices}

Basé sur l'extension \texttt{xsim}.

\subsection{Environnements \texttt{exercise} et \texttt{solution}}

\subsubsection{Configuration d'un exercice}
Options disponibles dans \texttt{\textbackslash begin\{exercise\}[options]}.
\begin{itemize}
    \item \textbf{points} = \texttt{nombre} : nombre de points.
    \item \textbf{bonus-points} = \texttt{nombre} : points bonus.
    \item \textbf{level} = \texttt{nombre} : niveau de difficulté (1 à 5, affiché en étoiles $\star$).
    \item \textbf{subtitle} = \texttt{texte} : sous-titre ou description brève.
    \item \textbf{icon} = \texttt{nom-icone-fa} : icône FontAwesome (ex: \texttt{pencil-alt}). Nécessite l'option de classe \texttt{exerciseicons}.
    \item \textbf{topic} = \texttt{thème} : thème/chapitre (pour tri/sélection future).
    \item \textbf{subject} = \texttt{matière} : matière (pour tri/sélection).
    \item \textbf{ID} = \texttt{identifiant} : identifiant unique pour référencer l'exercice (\texttt{\textbackslash exercisenumber\{id\}}).
    \item \textbf{template} = \texttt{nom-template} : style d'affichage spécifique pour cet exercice (voir liste ci-dessous). Surcharge le style global.
\end{itemize}

\begin{sidebyside}
\begin{code}[numbers=none]{latex}
\begin{exercise}[
  points=3,
  bonus-points=1,
  level=2,
  subtitle={Application},
  ID=calc01,
  template=sober-box
]
  Calculer $3 \times (5+2)$.
\end{exercise}

\begin{solution}
  $3 \times (5+2) = 3 \times 7 = 21$.
\end{solution}

Voir exercice \exercisenumber{calc01}.
\end{code}
\tcblower
\xsimsetup{
  exercise/template = sober-box,
  solution/print = true} % Pour afficher la solution ici
\begin{exercise}[
    points=3,
    bonus-points=1,
    level=2,
    subtitle={Application},
    ID=calc01,
    template=sober-box
]
  Calculer $3 \times (5+2)$.
\end{exercise}
\begin{solution}
  $3 \times (5+2) = 3 \times 7 = 21$.
\end{solution}
Voir exercice \exercisenumber{calc01}.
\xsimsetup{
  exercise/template = inline,
  solution/print = false} % Retour au défaut
\end{sidebyside}

\subsubsection{Options globales (\texttt{\textbackslash xsimsetup})}
À placer dans le préambule pour affecter tout le document.
\begin{itemize}
    \item \textbf{exercise/template} = \texttt{nom-template} : définit le style par défaut pour tous les exercices.
    \item \textbf{solution/template} = \texttt{nom-template-sol} : définit le style par défaut pour toutes les solutions (ex: \texttt{sol-inline}, \texttt{sol-block}, \texttt{sol-dotted}).
    \item \textbf{solution/print} = \texttt{true/false} : affiche ou masque globalement les solutions. Peut être surchargé par l'option de classe \textbf{answers}.
\end{itemize}
Autres options de classe affectant les exercices :
\begin{itemize}
    \item \textbf{exerciseicons} : active l'affichage des icônes pour tous les exercices.
    \item \textbf{answers} / \textbf{answersonly} : affiche les solutions après chaque exercice / Affiche uniquement les solutions.
    \item \textbf{shuffle} : mélange aléatoirement les réponses dans les QCM (\texttt{choices}, \texttt{checkboxes}).
    \item \textbf{sectionthmcounter} : numérote les exercices (et théorèmes) par section (ex: Ex 1.1, Ex 1.2, Ex 2.1...).
    \item \textbf{sharedexcounter} : partage le même compteur entre exercices et théorèmes (combiné avec \texttt{sharedthmcounter}).
    \item \textbf{blocksol} : utilise le template \texttt{sol-block} pour les solutions.
\end{itemize}

\subsubsection{Templates d'exercices (styles d'affichage)}
Valeurs possibles pour \texttt{template} (option d'exercice ou \texttt{xsimsetup}).
\begin{itemize}
    \item \textbf{box}, \textbf{elegant-box}, \textbf{shaded-box}, \textbf{slanted-box}, \textbf{sober-box}, \textbf{classic-box}, \textbf{classy-box} : différents styles de boîtes encadrées avec titre.
    \item \textbf{rect-box}, \textbf{rect-box-out} : boîtes rectangulaires simples, avec ou sans contour.
    \item \textbf{num-box}, \textbf{num-box-out} : boîtes compactes affichant juste le numéro.
    \item \textbf{ex-num-box}, \textbf{ex-num-box-out} : comme \texttt{num-box} mais avec "Ex." avant le numéro.
    \item \textbf{box-hrule}, \textbf{box-hrule-out}, \textbf{box-hrule-in} : titre dans une boîte suivi d'une ligne horizontale.
    \item \textbf{boxed}, \textbf{boxed-out} : titre dans une petite boîte (remplie ou contour).
    \item \textbf{inline} (défaut si \texttt{amslikethm}) : style simple en ligne, comme un paragraphe.
    \item \textbf{section}, \textbf{subsection} : style comme un titre de section/sous-section.
    \item \textbf{terminal} : style imitant une console, avec icône \faTerminal.
    \item \textbf{block} : style minimaliste sans boîte ni décoration.
    \item \textbf{hrule} : style avec une simple ligne horizontale sous le titre.
\end{itemize}

\begin{sidebyside}
\begin{code}[numbers=none]{latex}
\xsimsetup{exercise/template=box-hrule-out}
\begin{exercise}[points=2]
 Style box-hrule-out.
\end{exercise}
\xsimsetup{exercise/template=inline} % Retour au défaut
\end{code}
\tcblower
\xsimsetup{exercise/template=box-hrule-out}
\begin{exercise}[points=2]
 Style box-hrule-out.
\end{exercise}
\xsimsetup{exercise/template=inline} % Retour au défaut
\end{sidebyside}

\subsubsection{QCM et choix multiples}
Environnements à utiliser à l'intérieur d'un exercice.
\begin{itemize}
    \item \textbf{choices}\texttt{(\textit{n})} : pour QCM à réponse unique. \texttt{\textbackslash choice} pour une réponse, \texttt{\textbackslash choice[\textbackslash correct]} pour la bonne réponse. \textit{n} est le nombre de colonnes.
  \item \textbf{checkboxes}\texttt{(\textit{n})} : pour QCM à réponses multiples. \texttt{\textbackslash checkbox} pour une réponse,\\
        \texttt{\textbackslash checkbox[\textbackslash correct*]} pour une bonne réponse. \textit{n} est le nombre de colonnes.
\end{itemize}
\begin{sidebyside}
\begin{code}[numbers=none]{latex}
\begin{exercise}[ID=qcm-deriv, points=1]
 Quelle est la dérivée de $f(x)=x^2$ ?
 \begin{choices}(2) % Sur 2 colonnes
  \choice[\correct] $x\mapsto 2x$
  \choice $x\mapsto x$
  \choice $x\mapsto x^2$
  \choice $x\mapsto 2$
 \end{choices}
\end{exercise}
\end{code}
\tcblower
\begin{exercise}[ID=qcm-deriv, points=1]
 Quelle est la dérivée de $f(x)=x^2$ ?
 \begin{choices}(2) % Sur 2 colonnes
  \choice[\correct] $x\mapsto 2x$
  \choice $x\mapsto x$
  \choice $x\mapsto x^2$
  \choice $x\mapsto 2$
 \end{choices}
\end{exercise}
\end{sidebyside}

\begin{sidebyside}[righthand width=0.4\linewidth]
\begin{code}[numbers=none]{latex}
\begin{exercise}[ID=qcm-props, points=2]
 Cochez les propriétés vraies.
 \begin{checkboxes}(1) % Sur 1 colonne
  \checkbox[\correct*] $1+1=2$
  \checkbox $\sqrt{2}$ est rationnel.
  \checkbox[\correct*] $0 \times 5 = 0$
 \end{checkboxes}
\end{exercise}
\end{code}
\tcblower
\begin{exercise}[ID=qcm-props, points=2]
 Cochez les propriétés vraies.
 \begin{checkboxes}(1) % Sur 1 colonne
  \checkbox[\correct*] $1+1=2$
  \checkbox $\sqrt{2}$ est rationnel.
  \checkbox[\correct*] $0 \times 5 = 0$
 \end{checkboxes}
\end{exercise}
\end{sidebyside}

\section{Environnements mathématiques (Théorèmes, Définitions, etc.)}

Basés sur \texttt{tcolorbox}.

\subsection{Styles de théorèmes (options de classe)}

Ces options de classe définissent l'apparence par défaut de tous les environnements de type théorème.
\begin{itemize}
    \item \textbf{classythm}, \textbf{soberthm}, \textbf{elegantthm}, \textbf{classicthm}, \textbf{slantedthm}, \textbf{shadedthm}, \textbf{boxedthm} : Styles variés avec boîtes, couleurs, etc.
    \item \textbf{amslikethm} (défaut) : Style minimaliste similaire aux environnements standard de l'AMS.
\end{itemize}

\begin{code}{latex}
% Applique le style \texttt{elegantthm} à tous les environnements mathématiques.
\documentclass[elegantthm]{neoschool}
\end{code}

\subsection{Options communes des environnements}
Passées entre crochets : \texttt{\textbackslash begin\{theorem\}[options]}.
\begin{itemize}
    \item \textbf{title} = \texttt{texte} : titre personnalisé (ex: \texttt{title=Théorème de Pythagore}).
    \item \textbf{label} = \texttt{nom} : étiquette pour référencement (\texttt{\textbackslash ref}, \texttt{\textbackslash nameref}).
    \item \textbf{colback} = \texttt{couleur} : couleur de fond spécifique.
    \item \textbf{colframe} = \texttt{couleur} : couleur du cadre spécifique.
    \item \textbf{coltitle} = \texttt{couleur} : couleur du titre spécifique.
    \item \textbf{fonttitle} = \texttt{commandes} : commandes de formatage pour le titre (ex: \texttt{fonttitle=\textbackslash sffamily\textbackslash bfseries}).
\end{itemize}

\subsection{Options de numérotation (options de classe)}

\begin{itemize}
    \item \textbf{sectionthmcounter} : les compteurs sont relatifs à chaque section (ex: Thm 1.1, Def 1.2, Thm 2.1...).
    \item \textbf{sharedthmcounter} : un seul compteur est partagé entre tous les environnements (Thm 1, Def 2, Lem 3...).
    \item \textbf{theoremgroup} : regroupe certains environnements (théorème, lemme, corollaire, proposition, propriété) sous un même compteur s'ils ne sont pas déjà partagés par \texttt{sharedthmcounter}.
    \item \textbf{thmgroupcounter} : active un compteur spécifique pour le groupe \texttt{theoremgroup}.
\end{itemize}

\subsection{Environnements mathématiques disponibles}

\begin{itemize}
    \item \textbf{theorem} (référence : \texttt{thm})
    \item \textbf{lemma} (référence : \texttt{lem})
    \item \textbf{corollary} (référence : \texttt{cor})
    \item \textbf{proposition} (référence : \texttt{propo})
    \item \textbf{property} (référence : \texttt{prop})
    \item \textbf{definition} (référence : \texttt{def})
    \item \textbf{method} (référence : \texttt{meth})
    \item \textbf{activity} (référence : \texttt{act})
    \item \textbf{application} (référence : \texttt{appl})
    \item \textbf{remark} (non numéroté)
    \item \textbf{remarks} (non numéroté, pour plusieurs remarques)
    \item \textbf{example} (référence : \texttt{ex})
    \item \textbf{examples} (non numéroté, pour plusieurs exemples)
    \item \textbf{proof} : environnement pour les démonstrations.
\end{itemize}
\begin{sidebyside}
\begin{code}[numbers=none]{latex}
\begin{definition}[
  title=Nombre premier,
  label=premier
]
Un entier naturel est dit premier
s'il admet exactement deux diviseurs
distincts : 1 et lui-même.
\end{definition}

Voir la définition~\ref{def:premier}.
\end{code}
\tcblower
\begin{definition}[
  title=Nombre premier,
  label=premier
]
Un entier naturel est dit premier
s'il admet exactement deux diviseurs
distincts : 1 et lui-même.
\end{definition}
Voir la définition~\ref{def:premier}.
\end{sidebyside}
\begin{sidebyside}
\begin{code}[numbers=none]{latex}
\begin{proof}
  La preuve est triviale et laissée
  en exercice au lecteur.
\end{proof}
\end{code}
\tcblower
\begin{proof}
  La preuve est triviale et laissée
  en exercice au lecteur.
\end{proof}
\end{sidebyside}

\section{Code informatique}

Deux systèmes sont disponibles via les options de classe \textbf{listings} (défaut) ou \textbf{minted}.

\subsection{Option \texttt{listings}}

Utilise l'extension \texttt{listings}.

\subsubsection{Styles de code disponibles}

L'option de classe \textbf{lststyle} = \texttt{style} définit le style de coloration par défaut pour l'environnement \texttt{code} lorsque l'option \texttt{listings} est active. Les styles de base sont~:
\begin{itemize}
    \item \texttt{colorful} : coloration syntaxique complète. C'est la base du style par défaut.
    \item \texttt{minimal} : style très simple, peu de couleurs, principalement gras/normal.
    \item \texttt{academic} : style avec numéros de ligne et une ligne verticale à gauche.
    \item \texttt{modern} : style avec fond légèrement coloré et un cadre simple.
\end{itemize}

Les styles \texttt{colorful} et \texttt{minimal} possèdent des variantes en ajoutant des suffixes~:
\begin{itemize}
    \item \texttt{b} : ajoute un fond coloré (\texttt{backgroundcolor=\textbackslash color\{codebackColor\}}).
    \item \texttt{n} : ajoute les numéros de ligne à gauche (\texttt{numbers=left}). Le style par défaut pour \texttt{lststyle} est en fait \texttt{colorfuln}.
    \item \texttt{f} : ajoute un cadre simple autour du bloc (\texttt{frame=single}).
\end{itemize}
Ces suffixes peuvent être combinés (par ordre alphabétique), par exemple : \texttt{colorfulbfn} (fond coloré, cadre et numéros), \texttt{minimalbn} (minimaliste avec fond et numéros), etc.

\subsubsection{Changer le style par défaut en cours de document}

La commande \texttt{\textbackslash setcodestyle\{\textit{style}\}} permet de modifier le style \texttt{listings} par défaut pour tous les environnements \texttt{code} qui suivent cette commande dans le document. Les noms de \textit{style} sont les mêmes que ceux utilisés pour l'option \texttt{lststyle} (y compris les variantes avec \texttt{b}, \texttt{n}, \texttt{f}).

\begin{sidebyside}
\begin{codeside}[numbers=none]{latex}
\begin{code}{python}
# Style par défaut (colorfuln)
def fact(n):
    if n ==0:
        return 1
    return n * fact(n - 1)
\end{code}

\setcodestyle{minimal} % Change le style

\begin{code}{python}
# Style minimal appliqué
def fact(n):
    if n ==0:
        return 1
    return n * fact(n - 1)
\end{code}

\setcodestyle{colorfuln} % Retour au style initial
\end{codeside}
\tcblower
\begin{code}[numbersep=8pt]{python}
# Style par défaut (colorfuln)
def fact(n):
    if n ==0:
        return 1
    return n * fact(n - 1)
\end{code}
\vspace{1em}
\setcodestyle{minimal}
\begin{code}{python}
# Style minimal appliqué
def fact(n):
    if n ==0:
        return 1
    return n * fact(n - 1)
\end{code}
\setcodestyle{colorfuln}
\end{sidebyside}

\subsubsection{Environnement \texttt{code}}
Affiche un bloc de code. L'environnement \texttt{code} affiche les numéros de ligne par défaut.
\begin{codeside}[numbers=none]{latex}
\begin[options]{code}{langage}[titre][style-boite]
... code ...
\end{code}
\end{codeside}
\begin{itemize}
    \item \texttt{options} : options de \texttt{listings} (ex: \texttt{numbers=none}, \texttt{frame=single}).
    \item \texttt{langage} : langage du code (ex: \texttt{python}, \texttt{latex}, \texttt{c++}...).
    \item \texttt{titre} : titre optionnel pour la boîte.
    \item \texttt{style-boite} : style de la boîte \texttt{tcolorbox} (voir ci-dessous).
    \item \texttt{code*} : variante sans numérotation automatique du listing.
\end{itemize}
Styles de boîtes disponibles : \texttt{box-minimal}, \texttt{box-fancy}, \texttt{box-elegant}, \texttt{box-diagonal}, \texttt{box-bevel}, \texttt{box-corner}, \texttt{box-rounded}, \texttt{box-downhill}, \texttt{box-bottomtitle}, \texttt{box-bottomtitlef}.

\begin{sidebyside}
\begin{codeside}[numbers=none]{latex}
\begin{code}{python}[Fonction Carre][box-elegant]
def square(x):
  """Calcule le carré de x."""
  return x * x
\end{code}
\end{codeside}
\tcblower
\begin{code}{python}[Fonction Carre][box-elegant]
def square(x):
  """Calcule le carré de x."""
  return x * x
\end{code}
\end{sidebyside}

\subsubsection{Langages préconfigurés}
  \texttt{Python}, \texttt{Java}, \texttt{C++}, \texttt{JavaScript}, \texttt{SQL}, \texttt{LaTeX}, \texttt{Bash}, \texttt{Assembly}, \texttt{Lisp}, \texttt{JSON}, \texttt{YAML}, \texttt{TOML}, \texttt{CSV}, \texttt{Markdown}.

\subsubsection{Commandes additionnelles}
\begin{itemize}
    \item \texttt{\textbackslash codeinline[\textit{lang}]\{\textit{code}\}} : affiche du \textit{code} en ligne avec coloration (\textit{lang} optionnel).
    \item \texttt{\textbackslash codeinput[\textit{opt}]\{\textit{lang}\}\{\textit{fichier}\}[\textit{titre}][\textit{style}]} : importe et affiche le code depuis un \textit{fichier}.
\end{itemize}
\begin{sidebyside}
\begin{code}[numbers=none]{latex}
Le code \codeinline[python]{x = 5} initialise x.
\end{code}
\tcblower
Le code \codeinline[python]{x = 5} initialise x.
\end{sidebyside}

\subsection{Option \texttt{minted}}

Utilise l'extension \texttt{minted}, nécessitant Python et Pygments installés, ainsi qu'une compilation avec l'option \texttt{--shell-escape}. Offre une coloration syntaxique plus riche.

L'environnement \texttt{code}, \texttt{code*}, \texttt{\textbackslash codeinline} et \texttt{\textbackslash codeinput} fonctionnent de manière similaire, mais les options passées sont celles de \texttt{minted} (ex: \texttt{linenos}, \texttt{highlightlines=\{2,3\}}, \texttt{style=tango}). Les styles de boîtes restent les mêmes.
\begin{sidebyside}
\begin{codeside}[numbers=none]{latex}
\documentclass[minted]{neoschool}
...
\usemintedstyle{friendly}
\begin{code}[linenos]{python}[Exemple Minted]
import math

def circle_area(radius):
  return math.pi * radius**2
\end{code}
\end{codeside}
\tcblower
% Simulation (ne compile pas sans minted et shell-escape)
\begin{code}[numbers=left]{python}[Exemple Minted][box-fancy]
import math

def circle_area(radius):
  return math.pi * radius**2
\end{code}
\end{sidebyside}

\subsection{Algorithmes et pseudocode}

La classe fournit un environnement \texttt{pseudocode} basé sur \texttt{algpseudocode} et \texttt{tcolorbox} pour afficher des algorithmes. Il est automatiquement numéroté et titré.

\begin{sidebyside}
\begin{code}[numbers=none]{latex}
\begin{pseudocode}{Algorithme Exemple}
\Require $n \ge 0$
\Ensure $y = x^n$
\State $y \Gets 1$
\If{$n < 0$}
    \State $X \Gets 1/x$
    \State $N \Gets -n$
\Else
    \State $X \Gets x$
    \State $N \Gets n$
\EndIf
\While{$N \neq 0$}
    \If{$N$ is even}
        \State $X \Gets X \times X$
        \State $N \Gets N/2$
    \Else[$N$ is odd]
        \State $y \Gets y \times X$
        \State $N \Gets N-1$
    \EndIf
\EndWhile
\end{pseudocode}
\end{code}
\tcblower
\begin{pseudocode}{Algorithme Exemple}
\Require $n \ge 0$
\Ensure $y = x^n$
\State $y \Gets 1$
\If{$n < 0$}
    \State $X \Gets 1/x$
    \State $N \Gets -n$
\Else
    \State $X \Gets x$
    \State $N \Gets n$
\EndIf
\While{$N \neq 0$}
    \If{$N$ is even}
        \State $X \Gets X \times X$
        \State $N \Gets N/2$
    \Else[$N$ is odd]
        \State $y \Gets y \times X$
        \State $N \Gets N-1$
    \EndIf
\EndWhile
\end{pseudocode}
\end{sidebyside}

\section{Notes et annotations}

\subsection{Notes marginales (\texttt{todonotes})}

Activées par l'option de classe \texttt{notes=\textit{longueur}}.
\begin{itemize}
    \item \texttt{\textbackslash tdnote[\textit{options}]\{\textit{texte}\}} : Crée une note dans la marge. Les notes alternent côté gauche/droit. Les options (\texttt{backgroundcolor}, \texttt{linecolor}, etc.) sont celles de \texttt{todonotes}.
    \item \texttt{\textbackslash boxnote[\textit{label}]\{\textit{texte}\}} + \texttt{\textbackslash tdmark[\textit{label}]} : Permet de placer une \texttt{tdnote} (\texttt{boxnote}) ancrée à un endroit précis (\texttt{tdmark}) même à l'intérieur d'environnements où \texttt{todonotes} échoue. Le \textit{label} doit être identique.
\end{itemize}

\begin{code}{latex}
Ceci est un texte\tdnote{Point important!}.

\boxnote[thm-imp]{Ne pas oublier cette hypothèse.}
\begin{theorem}
  \tdmark[thm-imp] Si $x>0$, alors...
\end{theorem}
\end{code}

\subsection{Admonitions}

Boîtes colorées avec icônes pour attirer l'attention sur certains points.
\begin{itemize}
    \item \texttt{note} : remarques générales (\faEdit).
    \item \texttt{info} : informations complémentaires (\faInfoCircle).
    \item \texttt{warning} : avertissements (\faExclamationTriangle).
    \item \textbf{important} : points essentiels (\faExclamationCircle).
    \item \textbf{tip} : conseils, astuces (\faLightbulb).
    \item \textbf{reminder} : à retenir, mémoriser (\faBookmark).
    \item \textbf{summary} : résumé, en bref (\faClipboardList).
    \item \textbf{toolbox} : liste de matériel, prérequis (\faTools).
\end{itemize}
Chaque environnement accepte \texttt{[\textit{Titre optionnel}][\textit{Icône optionnelle}]}.
L'option de classe \textbf{inlineadmonition} affiche le titre et le contenu sur la même ligne.

\begin{sidebyside}
\begin{code}[numbers=none]{latex}
\begin{warning}[Attention][\faSkull]
  Ne pas diviser par zéro !
\end{warning}

\begin{tip}
  Penser à factoriser d'abord.
\end{tip}
\end{code}
\tcblower
\begin{warning}[Attention][\faSkull]
  Ne pas diviser par zéro !
\end{warning}
\begin{tip}
  Penser à factoriser d'abord.
\end{tip}
\end{sidebyside}

\section{Notation et correction}

\subsection{Outils de notation}

\begin{itemize}
    \item \texttt{\textbackslash gradingstrip[\textit{total}]} : affiche un bandeau pour la note et l'appréciation. \textit{total} optionnel surcharge le total défini par l'option de classe \texttt{totalpoints} (défaut: 20).
    \item \texttt{\textbackslash mrk[*][\textit{comm}]\{\textit{pts}\}}, \texttt{\textbackslash mrks[*][\textit{comm}]\{\textit{pts}\}} : affiche (\textit{pts} pt) ou (\textit{pts} pts) dans la marge. \texttt{*} place à gauche, \textit{comm} ajoute un commentaire.
\end{itemize}

\begin{sidebyside}[righthand width=.55\linewidth]
\begin{code}[numbers=none]{latex}
\gradingstrip[10] % Barème sur 10

Question 1 \mrks*[Détail du barème ici... lorem ipsum dolor sit amet]{3}
\end{code}
\tcblower
\gradingstrip[10]
Question 1 \mrks*[Détail du barème ici... lorem ipsum dolor sit amet]{3}
\end{sidebyside}

\subsection{Zones de réponse}

\begin{itemize}
    \item \texttt{\textbackslash answerfield[\textit{largeur}]\{\textit{lignes}\}} : crée une zone de réponse avec fond coloré, d'une hauteur de \textit{lignes} lignes de texte et d'une \textit{largeur} (défaut: \texttt{0.975\textbackslash linewidth}).
    \item \texttt{\textbackslash answerframe[\textit{largeur}]\{\textit{lignes}\}[\textit{options}]} : crée une zone de réponse encadrée, d'une hauteur de \textit{lignes} et d'une \textit{largeur} (défaut: \texttt{\textbackslash linewidth}).
    \item \texttt{\textbackslash vardots[\textit{longueur}]} : dessine une ligne pointillée de \textit{longueur} (défaut: \texttt{\textbackslash linewidth}).
\end{itemize}

\begin{sidebyside}
\begin{code}[numbers=none]{latex}
Réponse : \answerfield[6cm]{1}
\end{code}
\tcblower
Réponse : \answerfield[6cm]{1}
\end{sidebyside}

\begin{sidebyside}
\begin{code}[numbers=none]{latex}
Réponse : \answerframe{1}
\end{code}
\tcblower
Réponse : \answerframe{1}
\end{sidebyside}

\begin{sidebyside}
\begin{code}[numbers=none]{latex}
Signature : \vardots[4cm]
\end{code}
\tcblower
Signature : \vardots[4cm]
\end{sidebyside}

\subsection{Marqueurs et symboles}

\begin{multicols}{2}
  \begin{itemize}
    \item \texttt{\textbackslash cmark} : $\checkmark$ (vert).
    \item \texttt{\textbackslash xmark} : $\times$ (rouge).
    \item \texttt{\textbackslash unchecked} : $\square$ (pour listes).
    \item \texttt{\textbackslash done} : $\rlap{$\square$}{\raisebox{1pt}{\large\hspace{1pt}\cmark}\hspace{-2.5pt}}$ (pour listes).
    \item \texttt{\textbackslash wontfix} : $\rlap{$\square$}{\large\hspace{1pt}\color{red}\boldsymbol{\times}}$ (pour listes).
  \end{itemize}
\end{multicols}

\begin{sidebyside}
\begin{code}[numbers=none]{latex}
\begin{itemize}
 \unchecked Tâche 1
 \done Tâche 2
 \wontfix Tâche 3
\end{itemize}
\end{code}
\tcblower
\begin{itemize}
 \unchecked Tâche 1
 \done Tâche 2
 \wontfix Tâche 3
\end{itemize}
\end{sidebyside}

\subsection{Évaluation par compétences}

\texttt{\textbackslash competencies\{\textit{Comp1}\textbackslash\textbackslash \textit{Comp2}...\}} : crée un tableau pour évaluer des compétences selon 4 niveaux de maîtrise (avec emojis).

\begin{sidebyside}[righthand width=.55\linewidth]
\begin{code}[numbers=none]{latex}
\competencies{
  Maîtriser les fractions \\
  Résoudre une équation du 1er degré \\
  Calculer une dérivée
}
\end{code}
\tcblower
\competencies{
  Maîtriser les fractions \\
  Résoudre une équation du 1er degré \\
  Calculer une dérivée
}
\end{sidebyside}

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

\subsection{Commandes mathématiques}

\subsubsection{Mise en valeur et coloration}

\begin{itemize}
    \item \texttt{\textbackslash mhl[\textit{couleur}]\{\textit{expr}\}} : surligne l'expression mathématique \textit{expr} avec la \textit{couleur} (défaut: couleur spécifique du thème).
    \item \texttt{\textbackslash mc[\textit{couleur}]\{\textit{expr}\}} : colore l'expression mathématique \textit{expr} avec la \textit{couleur} (défaut: couleur spécifique du thème).
    \item \texttt{\textbackslash mathbox<fond>[bordure]\{contenu\}} : encadre rapidement du \textit{contenu} mathématique dans une boîte \texttt{tcolorbox}. La couleur de \textit{fond} (défaut : blanc) et de \textit{bordure} (défaut : couleur spécifique du thème) sont personnalisables.
\end{itemize}

\begin{sidebyside}[righthand width=.3\linewidth]
\begin{code}[numbers=none]{latex}
$f(x) = \mhl[cyan!20]{x^2} + \mc[blue]{3x} - 1$
\end{code}
\tcblower
$f(x) = \mhl[cyan!20]{x^2} + \mc[blue]{3x} - 1$
\end{sidebyside}

\begin{sidebyside}[righthand width=.25\linewidth]
\begin{code}[numbers=none]{latex}
$\mathbox{E=mc^2}$ % Fond blanc, bordure theme

$\mathbox<yellow!20>[red]{a^2+b^2=c^2}$ % Perso
\end{code}
\tcblower
$\mathbox{E=mc^2}$ \\[1ex]
$\mathbox<yellow!20>[red]{a^2+b^2=c^2}$
\end{sidebyside}

\subsubsection{Support APMEP}
Commandes disponibles avec l'option de classe \texttt{apmep}.
\begin{itemize}
    \item Vecteurs : \texttt{\textbackslash vect\{u\}}, \texttt{\textbackslash vectt\{AB\}}.
    \item Repères : \texttt{\textbackslash Oij}, \texttt{\textbackslash Oijk}, \texttt{\textbackslash Ouv}.
    \item Symboles/Commandes : \texttt{\textbackslash euro} (€), \texttt{\textbackslash cg} (]), \texttt{\textbackslash cd} ([), \texttt{\textbackslash pg} ($\ge$), \texttt{\textbackslash pp} ($\le$), \texttt{\textbackslash barre\{x\}} ($\overline{x}$), \texttt{\textbackslash ds} (\texttt{\textbackslash displaystyle}).
\end{itemize}

\subsection{Outils spéciaux}

\subsubsection{Arbres et graphes}

\begin{itemize}
    \item \textbf{Arbres} (environnement \texttt{neotree}) : utilise \texttt{forest}. La syntaxe est celle de \texttt{forest}, avec des options passées à l'environnement. L'option \texttt{w=\textit{val}} ajoute un poids sur une branche.
    \item \textbf{Graphes} (commande \texttt{\textbackslash neograph}, \texttt{lualatex} requis) : utilise TikZ \texttt{graphs}. La syntaxe est celle de TikZ pour les graphes.
\end{itemize}

\begin{sidebyside}[righthand width=.4\linewidth]
\begin{code}[numbers=none]{latex}
\begin{neotree}[l=2cm, s sep=1cm]
  A [B, w=\frac{1}{3} [D] [\overline{D}]]
    [C, w=\frac{2}{3} [D] [\overline{D}]]
\end{neotree}
\end{code}
\tcblower
\begin{center}
\begin{neotree}[l=2cm, s sep=1cm]
  A [B, w=\frac{1}{3} [D] [\overline{D}]]
    [C, w=\frac{2}{3} [D] [\overline{D}]]
\end{neotree}
\end{center}
\end{sidebyside}
\begin{sidebyside}
\begin{code}[numbers=none]{latex}
% Nécessite lualatex
\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}
\tcblower
\begin{center}
  \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{center}
\end{sidebyside}

\subsubsection{Grille mathématique (\texttt{mathgrid})}

Environnement pour aligner des blocs d'équations (\texttt{align*}) en grille.
\begin{itemize}
    \item \texttt{\textbackslash begin\{mathgrid\}\{\textit{n}\}} : démarre une grille à \textit{n} colonnes.
    \item \texttt{\textbackslash neoline} : commence une nouvelle ligne dans la grille.
    \item \texttt{\textbackslash neocol[\textit{span}]\{\textit{contenu}\}} : ajoute une colonne contenant \textit{contenu} (un bloc \texttt{align*}). \textit{span} (optionnel, défaut 1) indique sur combien de colonnes s'étend le contenu.
\end{itemize}
\begin{sidebyside}[righthand width=.5\linewidth]
\begin{code}[numbers=none]{latex}
\begin{mathgrid}{2} % 2 colonnes
 \neoline % Ligne 1
 \neocol{ % Col 1
  A &= 1+1 \\  A &= 2
 }
 \neocol{ % Col 2
  B &= 3 \times 4 \\ B &= 12
 }
 \neoline % Ligne 2
 \neocol[2]{ % Colonne unique (span=2)
  C &= A+B \\ C &= 2+12 \\ C &= 14
 }
\end{mathgrid}
\end{code}
\tcblower
\begin{mathgrid}{2} % 2 colonnes
 \neoline % Ligne 1
 \neocol{ % Col 1
  A &= 1+1 \\ A &= 2
 }
 \neocol{ % Col 2
  B &= 3 \times 4 \\ B &= 12
 }
 \neoline % Ligne 2
 \neocol[2]{ % Colonne unique (span=2)
  C &= A+B \\ C &= 2+12 \\ C &= 14
 }
\end{mathgrid}
\end{sidebyside}

\end{document}
