La classe neoschool

14 novembre 2025 — v1.1.3 — Razik Ikhlef [razik.ikhlef@csilyon.fr]

Fichier cls : neoschool.cls
Documentation au format PDF : neoschool.pdf (source : neoschool.tex)

La classe 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 trente-six 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.

Exemples

Sommaire

Extensions chargées

Les extensions suivantes sont automatiquement chargées par la classe neoschool.

adforn, adjustbox, algpseudocode, amsmath, babel, bookmark, calc, changepage, cuted, environ, fontawesome5, forest, iftex, ifthen, kvoptions, lastpage, listings, marginnote, microtype, multicol, nccmath, needspace, pdftexcmds, pgffor, pgfplots, pifont, qrcode, scrlayer-scrpage, setspace, silence, siunitx, tabularray, tasks, tcolorbox, textcase, tikz, tikzpagenodes, tikzsymbols, ulem, xcolor, xhfill, xkeyval, xsim, xstring.

La compilation en pdflatex charge les extensions fontenc (avec l’option T1), inputenc (avec l’option utf8), newpxtext et newpxmath. La compilation en lualatex rend disponible les extensions fontspec, luacas, lua-ul, luacolor et applique les polices TeX Gyre Pagella et TeX Gyre Heros en plus de newpxmath.

L’option graphics charge les extensions graphicx et wrapfig. L’option faketext (anciennement draft) charge les extensions blindtext et lipsum. L’option mathastext charge l’extension mathastext.

L’option math charge les extensions annotate-equations, bm, breqn, cancel, mathrsfs, ncccomma, numprint, tdsfrmath (avec les options suite et taupe), tkz-euclide, witharrows et xlop.

L’option notes=longueur permet d'afficher des notes encadrées (todonotes) dans les marges gauche et droite, de façon alternée, et définit leur largeur. Elle charge l'extension todonotes.

L’option 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 esvect, fourier-orns, numprint (avec l’option np), pstricks (et de nombreux paquets de l’écosystème pstricks), tabularx, textcomp, tkz-tab et enumitem.

L’option mathics permet de faire du calcul formel via mathics (version libre de mathematica) et charge les extensions asymptote et latexalpha2.

Options de configuration

Langue

Apparence globale

Thèmes prédéfinis

L’option theme = nom-du-theme définit le thème de couleurs du document. Les thèmes disponibles sont : classic (thème par défaut), abyss, aether, atlantic, autumn, blossom, botanical, burgundy, coral, cyprus, day, deepocean, duo, eagle, earth, foresthues, frost, glacier, goldensummer, graphite, heather, heritage, kassio, magma, modern, neon, nordic, purplebliss, retrocafe, saffronsky, scribe, sepia, summer, twilight, winkle et midnight (thème sombre).

\documentclass[theme=retrocafe]{neoschool}

Modes de couleur

Ces options modifient la façon dont les couleurs du thème sont appliquées.

Personnalisation des couleurs

Permet de surcharger les couleurs du thème choisi.

Options d’affichage

Options d'arrondi des boîtes

Ces options (de type option=longueur) permettent de personnaliser le rayon des coins arrondis pour différents types d'environnements.

Personnalisation du résumé

L’option abstracttitle permet de changer le titre de l’environnement abstract.

\documentclass[abstracttitle=Synthèse]{neoschool}

Typographie

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

Mise en page

Marges et espacement

Options de sortie (Mise en page multiple)

Ces options permettent d'imprimer plusieurs pages logiques sur une seule page physique.

Table des matières

En-têtes et pieds de page

Styles de document

Styles de titre (\maketitle)

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

Styles d’examen

Idéal pour les devoirs surveillés, examens blancs.

\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{document}

Styles d’évaluation

Adaptés aux contrôles, interrogations rapides.

Styles avec bulles

Effets visuels pour des documents moins formels.

Autres styles de titre

Options plus classiques ou minimalistes.

Configuration de l’en-tête (\neoheader)

Cette commande configure les informations utilisées par les styles exam, eval, mockexam, shortlesson et l'option fullheader.

\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) 
  leftcontentfill = {true},         % (pour evalicons, booléen)
  rightcontentfill = {true}         % (pour evalicons, booléen)
      

Options de formatage des titres

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

Styles globaux

S'appliquent par défaut à tous les titres (sections, théorèmes, exercices...).

Style du titre principal (\maketitle)

Surcharge les styles globaux pour le titre principal.

Style des sections (\section)

Options spécifiques pour les titres de section.

Style des en-têtes et des pieds de page

Exemple complet de configuration

\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}

Disposition des contenus

Positionnement absolu d’objets

La commande \positionobject{x}{y}{scale}{contenu} place contenu aux coordonnées (x, y) depuis le coin supérieur gauche de la page, avec un facteur d'échelle.

% 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}%
}

Mise en page à deux colonnes

La commande \splitcontent[w1][gap]{col1}{col2} divise l'espace horizontal.

\splitcontent[0.45][0.03]{%
  Contenu colonne 1 (45 (*@\%@*)) \lipsum[1][1-2]
}{%
  Contenu colonne 2 (52 (*@\%@*)) \lipsum[1][1-2]
}

Mise en page côte à côte (environnement sidebyside)

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

\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}

Association texte et image

La commande \textwithimage[*]{w_img}{s_img}{texte}{chemin_img} combine du texte et une image.

% Image à droite (30 % de la largeur)
\textwithimage{0.3}{1}{%
  Description de l'image qui
  sera affichée à droite.
}{example-image-a} % image fictive

% Image à gauche (40 % de la largeur)
\textwithimage*{0.4}{0.9}{%
  Description à droite de l'image.
}{example-image-b} % image fictive

QR codes et contenus

La commande \withqrcode[*][taille]{url}{contenu} intègre un QR code à côté d'un contenu.

% QR code à gauche (défaut 2cm)
\withqrcode{https://www.google.com}{
  Scannez pour visiter Google.
}

% QR code à droite (3cm)
\withqrcode*[3cm]{https://fr.wikipedia.org}{
  Plus d'informations sur Wikipedia.
}

Grilles et papiers

Grilles personnalisables

Commandes pour dessiner des zones quadrillées.

\customgrid[blue!50][2mm][2mm]{6cm}{3cm}
\frenchgrid{7.5cm}{3cm}
\frenchgrid*{5cm}{2cm} % centrée

Remplissage automatique

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

% 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*

Pages entières (styles de fond)

Applique un style de fond à la page courante.

\nbminorgrid % Applique le quadrillage fin à toute la page

Boîtes simples (neobox)

Environnement pour créer des boîtes tcolorbox simples, avec ou sans cadre. Accepte les options de tcolorbox.

\begin{neobox}[
  title=Boîte standard
]
Contenu...
\end{neobox}

\begin{neobox*}
Contenu sans cadre visible...
\end{neobox*}

Exercices

Basé sur l'extension xsim.

Environnements exercise et solution

Configuration d'un exercice

Options disponibles dans \begin{exercise}[options].

\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}. 

Options globales (\xsimsetup)

À placer dans le préambule pour affecter tout le document.

Autres options de classe affectant les exercices :

Templates d’exercices (styles d'affichage)

Valeurs possibles pour template (option d'exercice ou xsimsetup).

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

QCM et choix multiples

Environnements à utiliser à l'intérieur d'un exercice.

\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}
\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}

Environnements mathématiques (théorèmes, Définitions, etc.)

Basés sur tcolorbox.

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.

% Applique le style 'elegant' à tous les environnements mathématiques.
\documentclass[thmstyle=elegant]{neoschool}

Options communes des environnements

Passées entre crochets : \begin{theorem}[options].

Options de numérotation (options de classe)

Environnements mathématiques disponibles

\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}.
\begin{proof}
  La preuve est triviale et laissée
  en exercice au lecteur. 
\end{proof}

Code informatique

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

Option listings

Utilise l'extension listings. La coloration syntaxique est définie par le thème de couleurs choisi.

Environnement code

Affiche un bloc de code.

\begin[options]{code}{langage}[titre][style-boite]
    ... code ...
\end{code}

L'option de classe codestyle=[style] (par défaut box-elegant) permet de définir le style de boîte pour l'ensemble du document. Le paramètre [style-boite] de l'environnement permet de surcharger ce choix localement.

Styles de boîtes disponibles : box-minimal, box-subtle, box-fancy, box-elegant, box-sober, box-academic, box-diagonal, box-bevel, box-corner, box-rounded, box-downhill, box-toptitle, box-bottomtitle.

\begin{code}{python}[Fonction Carre][box-minimal]
def square(x):
  """Calcule le carré de x."""
  return x * x
\end{code}

Langages préconfigurés

Python, Java, C++, JavaScript, SQL, LaTeX, Bash, Assembly, Lisp, JSON, YAML, TOML, CSV, Markdown.

Commandes additionnelles

Le code \codeinline[python]{x = 5} initialise x. 

Autres options de classe pour le code

Option minted

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

L'environnement code, code*, \codeinline et \codeinput fonctionnent de manière similaire, mais les options passées sont celles de minted (ex: linenos, highlightlines={2,3}, style=tango). Les styles de boîtes restent les mêmes.

\documentclass[minted]{neoschool}
...
\usemintedstyle{friendly}
\begin{code}[linenos]{python}[Exemple Minted]
import math

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

Algorithmes et pseudocode

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

\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}

Notes et annotations

Notes marginales (todonotes)

Activées par l'option de classe notes=longueur.

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}

Admonitions

Boîtes colorées avec icônes pour attirer l'attention sur certains points.

Chaque environnement accepte [Titre optionnel][Icône optionnelle]. L'option de classe inlineadmonition (activée par défaut) affiche le titre et le contenu sur la même ligne. Pour désactiver ce comportement et forcer le contenu à s'afficher sous le titre, utilisez l'option blockadmonition

\begin{warning}[Attention][\faSkull]
  Ne pas diviser par zéro !
\end{warning}

\begin{tip}
  Penser à factoriser d'abord. 
\end{tip}

Notation et correction

Outils de notation

\gradingstrip[10] % Barème sur 10

Question 1 \mrk*[Détail du barème...]{3}

Zones de réponse

Réponse : \answerfield[6cm]{1}
Signature : \vardots[4cm]

Marqueurs et symboles

\begin{itemize}
 \unchecked Tâche 1
 \done Tâche 2
 \wontfix Tâche 3
\end{itemize}

Évaluation par compétences

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

\competencies{
  Maîtriser les fractions \\
  Résoudre une équation du 1er degré \\
  Calculer une dérivée
}

Commandes mathématiques et outils spéciaux

Commandes mathématiques

Mise en valeur et coloration

$f(x) = \mhl[cyan!20]{x^2} + \mc[blue]{3x} - 1$
$\mathbox{E=mc^2}$ % Fond blanc, bordure theme
$\mathbox<yellow!20>[red]{a^2+b^2=c^2}$ % Perso

Support APMEP

Commandes disponibles avec l'option de classe apmep.

Outils spéciaux

Arbres et graphes

\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}
% 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
}

Grille mathématique (mathgrid)

Environnement pour aligner des blocs d'équations (align*) en grille.

\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}