La classe neoschool

20/07/2025 — v1.0.4 — Razik Ikhlef

Fichier cls : neoschool.cls

Documentation au format PDF : neoschool.pdf

Source LaTeX : 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 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.

Exemples

Sommaire

Extensions chargées

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

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

La compilation en pdflatex charge les extensions fonttenc (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 PagellaX et TeX Gyre Heros en plus de newpxmath.

L’options graphics charge les extensions graphicx et wrapfig, l’option draft les extensions blindtext et lipsum et l’option mathastext l’extension mathastext.

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

L’option 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 todonotes.

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

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 : cyprus, kassio, frost, spring, arbutus, duo, navy, royal. La plupart d'entre eux sont inspirés des ef-themes pour emacs de Protesilaos Stavrou.

Modes de couleur

Personnalisation des couleurs

Options d’affichage

Personnalisation du résumé

L’option abstracttitle permet de personnaliser le titre de l’environnement abstract :

\documentclass[abstracttitle=Résumé]{neoschool}

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

Typographie

Mise en page

Marges et espacement

Options de sortie

En-têtes et pieds de page

Styles de document

Styles de titre

Styles d’examen

\documentclass[exam]{neoschool}

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

Styles d’évaluation

\documentclass[eval]{neoschool}

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

Styles avec bulles

Autres styles de titre

Configuration de l’en-tête

L’en-tête du document peut être configuré avec la commande \neoheader :

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

Options de formatage des titres

Styles globaux

Style du titre principal

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

Style des sections

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

Style des en-têtes/pieds de page

\documentclass[headfootstyle=sffamily]{neoschool}

Exemple complet de configuration

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

Disposition des contenus

Positionnement absolu d’objets

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

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

Mise en page à deux colonnes

La commande \splitcontent permet de diviser le contenu horizontalement :


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

Environnements côte à côte

L’environnement sidebyside permet de créer des boîtes à deux colonnes avec des styles cohérents :

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

Les options sont celles de tcolorbox.

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

Association texte et image

La commande \textwithimage combine texte et 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}

QR codes et contenus

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

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

Grilles et papiers

Grilles personnalisables

\grid[blue]{10cm}{5cm}  % Grille bleue de 10 x 5 cm
\customgrid[red][4mm][4mm]{12cm}{8cm}  % Grille rouge, mailles de 4 mm
\frenchgrid{15cm}{10cm}  % Grille de type cahier français

Pages entières

\notebook  % Active le style cahier ligné
\nbminorgrid  % Active le quadrillage fin
\nbmajorgrid  % Active le quadrillage Seyès

Boîtes simples

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

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

Exercices

Exercices et évaluations

Configuration des exercices

L’environnement exercise accepte les options suivantes.

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

Options globales

Templates d’exercices

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

Pour définir un template pour tout le document, il suffit d’utiliser la commande \xsimsetup dans la préambule :

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

QCM et choix multiples

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

Environnements mathématiques

Styles de théorèmes

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

Options communes :

Options de numérotation

Environnements mathématiques

\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}
\begin{lemma}[title=Lemme préparatoire,label=prep]
    Contenu du lemme...
\end{lemma}

% Référencement :
Selon le lemme~\ref{lem:prep}
\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}

Code informatique

La classe neoschool propose deux options pour la gestion du code.

Option listings

Styles de code disponibles

Boîtes de code personnalisées

La classe définit l’environnement code dont la structure est la suivante :

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

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

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

Langages et styles préconfigurés

Commandes additionnelles

\codeinline[python]{print("Hello")}
\codeinput[options]{langage}{fichier.py}[titre][style-boite]

Option minted

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

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

Notes et annotations

Notes marginales

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

\tdnote{Point important à retenir}
\tdnote[backgroundcolor=blue!5]{Note avec fond bleu clair}
\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}

Les options possibles pour les notes sont les suivantes.

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{note}[Remarque importante][\faInfo]
    Points à retenir...
\end{note}
\begin{info}[Pour aller plus loin]
    Informations additionnelles...
\end{info}
\begin{warning}[Attention !][\faExclamationTriangle]
    Points critiques à ne pas oublier...
\end{warning}
\begin{important}[Point clé]
    Concept fondamental...
\end{important}
\begin{tip}[Astuce de calcul][\faLightbulb]
    Une méthode plus rapide...
\end{tip}
\begin{reminder}[À mémoriser]
    Formules essentielles...
\end{reminder}
\begin{summary}[En bref]
    Points principaux du chapitre...
\end{summary}
\begin{toolbox}[Outils nécessaires]
  \begin{itemize}
    \item Calculatrice
    \item Règle graduée
    \item Compas
  \end{itemize}
\end{toolbox}

Toutes les admonitions acceptent trois paramètres optionnels :

Notation et correction

Outils de notation

\gradingstrip

% Bandeau avec total spécifié
\gradingstrip[20]

L’option totalpoints définit le nombre total de points par défaut.

\documentclass[totalpoints=20]{neoschool}
\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

Zones de réponse

\answerfield{3}

% Zone 80% largeur, 5 lignes
\answerfield[0.8\linewidth]{5}
\answerframe{3}

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

% Ligne pointillée de 5cm
\vardots[5cm]

Marqueurs et symboles

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

Compétences et évaluation

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

Le tableau affiche automatiquement :

Commandes mathématiques et outils spéciaux

Commandes mathématiques

Mise en valeur et coloration

$\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*}
$\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}} \]

Support APMEP

Lorsque l’option apmep est activée, les commandes suivantes sont disponibles.

\vect{u}         % Vecteur u avec flèche
\vectt{AB}       % Vecteur AB avec espacement
\Oij             % Repère (O; i,j)
\Oijk            % Repère (O; i,j,k)
\Ouv             % Repère (O; u,v)
\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

Outils spéciaux

Arbres et graphes

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

L’environnement mathgrid permet de disposer des équations en grille :

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