The neoschool Class

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

Class file: neoschool.cls
PDF documentation: neoschool.pdf (source: neoschool.tex)

The neoschool class provides secondary school teachers with a set of tools for creating educational materials (assessments, course notes, exercise sheets with solutions, and more). To meet various needs, it offers thirty-six predefined color themes, a range of class options for layout and typography, specialized environments, dedicated commands, and preformatted header styles for different document types. It incorporates dozens of commonly used LaTeX packages (see the list below), which significantly lightens the preamble and minimizes compatibility issues. Multilingual support includes French, English, and German.

Examples

Contents

Loaded Packages

The following packages are automatically loaded by the neoschool class.

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.

Compiling with pdflatex loads the packages fontenc (with the T1 option), inputenc (with the utf8 option), newpxtext, and newpxmath. Compiling with lualatex makes available the packages fontspec, luacas, lua-ul, luacolor and applies the fonts TeX Gyre Pagella and TeX Gyre Heros in addition to newpxmath.

The graphics option loads the packages graphicx and wrapfig. The faketext option (formerly draft) loads the packages blindtext and lipsum. The mathastext option loads the mathastext package.

The math option loads the packages annotate-equations, bm, breqn, cancel, mathrsfs, ncccomma, numprint, tdsfrmath (with the options suite and taupe), tkz-euclide, witharrows, and xlop.

The notes=length option enables framed notes (todonotes) in the left and right margins, alternating, and sets their width. It loads the todonotes package.

The apmep option, which allows direct compilation of exam archives from the association of the same name, defines a set of mathematical commands and loads the packages esvect, fourier-orns, numprint (with the np option), pstricks (and many packages from the pstricks ecosystem), tabularx, textcomp, tkz-tab, and enumitem.

The mathics option enables symbolic computation via mathics (an open-source alternative to mathematica) and loads the packages asymptote and latexalpha2.

Configuration Options

Language

Overall Appearance

Predefined Themes

The theme = theme-name option sets the document's color theme. Available themes include: classic (default), 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, and midnight (dark theme).

\documentclass[theme=retrocafe]{neoschool}

Color Modes

These options adjust how the theme's colors are applied.

Customizing Colors

Allows overriding the selected theme's colors.

Display Options

Box Rounding Options

These options (in the form option=length) customize the corner radius for various environment types.

Abstract Customization

The abstracttitle option changes the title of the abstract environment.

\documentclass[abstracttitle=Summary]{neoschool}

Typography

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

Layout

Margins and Spacing

Output Options (Multi-Page Layout)

These options allow printing multiple logical pages on a single physical sheet.

Table of Contents

Headers and Footers

Document Styles

Title Styles (\maketitle)

These options dramatically change the appearance of the first page and title.

Exam Styles

Ideal for supervised tests, practice exams.

\documentclass[exam]{neoschool}
\neoheader{
  type = Supervised Test No.1,
  school = Imaginary High School,
  level = Senior Math Specialty,
  duration = 2h,
  calculator = exam % or true/false
}
\title{Numerical Sequences}
\date{October 21, 2025}
\subject{Mathematics} % Optional
\begin{document}
\maketitle
\end{document}

Assessment Styles

Suitable for quizzes, homework assignments.

Bubble Styles

Visual effects for less formal documents.

Other Title Styles

More classic or minimalist options.

Header Configuration (\neoheader)

This command configures the information used by the styles exam, eval, mockexam, shortlesson, and the fullheader option.

\neoheader{
  type = {Course Quiz},          % Document type
  school = {A. Turing College},   % Institution name
  academy = {Lyon},               % Academy name (for mockexam)
  level = {Eighth Grade},         % Class level
  duration = {20 minutes},        % Duration (for exam, mockexam) 
  calculator = {false},           % Calculator: true / false / exam 
  leftcontent = {\faFlask},       % Left icon (for evalicons) 
  rightcontent = {\faCalculator}, % Right icon (for evalicons) 
  leftcontentfill = {true},       % (for evalicons, boolean)
  rightcontentfill = {true}       % (for evalicons, boolean)
}

Title Formatting Options

These options control the appearance (font, weight, shape, alignment) of the various titles in the document.

Global Styles

Apply by default to all titles (sections, theorems, exercises...).

Main Title Style (\maketitle)

Overrides global styles for the main title.

Section Style (\section)

Specific options for section headings.

Complete configuration example

\documentclass[
    % Global Style
    headstyle=sffamily,
    headweight=bfseries,
    headshape=scshape,
    % Main Title
    titlestyle=rmfamily,
    titleweight=bfseries,
    titleshape=upshape,
    titlealign=left,
    % Sections
    sectionnumstyle=box,
    sectiontextstyle=upper,
    sectionstyle=underline,
    sectionalign=left,
    % Headers/Footers
    headfootstyle=sffamily
]{neoschool}

Content Layout

Absolute Positioning of Objects

The command \positionobject{x}{y}{scale}{content} places content at coordinates (x, y) from the top left corner of the page, with a scale factor.

% Logo top right
\positionobject{15cm}{1cm}{0.5}{%
  \includegraphics[width=3cm]{logo.png}%
}

% Text bottom left
\positionobject{2cm}{25cm}{1.2}{%
  \textit{Important note}%
}

Two-Column Layout

The command \splitcontent[w1][gap]{col1}{col2} divides the horizontal space.

\splitcontent[0.45][0.03]{%
  Column 1 content (45%) \lipsum[1][1-2]
}{%
  Column 2 content (52%) \lipsum[1][1-2]
}

Side-by-Side Layout (sidebyside Environment)

Creates two tcolorbox boxes side by side. Use \tcblower to switch from the left box to the right. Accepts tcolorbox options.

\begin{sidebyside}[
  title=\centering Comparison,
]
  Advantages
  \begin{itemize}
    \item Point 1
  \end{itemize}
\tcblower % Separates the two columns
  Disadvantages
  \begin{itemize}
    \item Point A
  \end{itemize}
\end{sidebyside}

Text and Image Pairing

The command \textwithimage[*]{w_img}{s_img}{text}{img_path} combines text and an image.

% Image on the right (30% width)
\textwithimage{0.3}{1}{%
  Description of the image which
  will be displayed on the right.
}{example-image-a} % dummy image

% Image on the left (40% width)
\textwithimage*{0.4}{0.9}{%
  Description to the right of the image.
}{example-image-b} % dummy image

QR Codes and Content

The command \withqrcode[*][size]{url}{content} integrates a QR code next to content.

% QR code on the left (default 2cm)
\withqrcode{https://www.google.com}{
  Scan to visit Google.
}

% QR code on the right (3cm)
\withqrcode*[3cm]{https://en.wikipedia.org}{
  More information on Wikipedia.
}

Grids and Papers

Customizable Grids

Commands for drawing gridded areas.

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

Automatic Filling

The command \gridfill fills the remaining vertical space on the page with a customgrid (5mm by default). The starred version \gridfill* uses frenchgrid.

% Syntax : \gridfill[*][color][dx][dy]

% Fills with a blue 2mm x 2mm customgrid
\gridfill[blue][2mm][2mm]

% Fills with a (default) frenchgrid
\gridfill*

Full Pages (Background Styles)

Applies a background style to the current page.

\nbminorgrid % Applies the fine grid to the whole page

Simple Boxes (neobox)

Environment for creating simple tcolorbox boxes, with or without a frame. Accepts tcolorbox options.

\begin{neobox}[
  title=Standard Box
]
Content...
\end{neobox}

\begin{neobox*}
Content without a visible frame...
\end{neobox*}

Exercises

Based on the xsim package.

exercise and solution Environments

Configuring an Exercise

Options available in \begin{exercise}[options].

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

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

See exercise \exercisenumber{calc01}.

Global Options (\xsimsetup)

Place in the preamble to affect the entire document.

Other class options affecting exercises:

Exercise Templates (Display Styles)

Possible values for template (exercise option or xsimsetup).

\xsimsetup{exercise/template=box-hrule-out}
\begin{exercise}[points=2]
 box-hrule-out style.
\end{exercise}
\xsimsetup{exercise/template=inline} % Back to default

Multiple Choice and Quizzes

Environments to use inside an exercise.

\begin{exercise}[ID=qcm-deriv, points=1]
 What is the derivative of $f(x)=x^2$? 
 \begin{choices}(2) % On 2 columns
  \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]
 Check the true properties. 
 \begin{checkboxes}(1) % On 1 column
  \checkbox[\correct*] $1+1=2$
  \checkbox $\sqrt{2}$ is rational.
  \checkbox[\correct*] $0 \times 5 = 0$ 
 \end{checkboxes}
\end{exercise}

Mathematical Environments (Theorems, Definitions, etc.)

Based on tcolorbox.

Theorem Styles (Class Options)

These class options define the default appearance for all theorem-like environments.

% Applies the 'elegant' style to all mathematical environments.
\documentclass[thmstyle=elegant]{neoschool}

Common Environment Options

Passed in brackets: \begin{theorem}[options].

Numbering Options (Class Options)

Available Mathematical Environments

\begin{definition}[
  title=Prime Number,
  label=prime
]
A natural number is called prime
if it has exactly two distinct divisors: 1 and itself. 
\end{definition}

See definition~\ref{def:prime}.
\begin{proof}
  The proof is trivial and left
  as an exercise for the reader. 
\end{proof}

Code Listings

Two systems are available via the class options listings (default) or minted.

listings Option

Uses the listings package. Syntax highlighting is defined by the chosen color theme.

Code Environment

Displays a code block.

\begin[options]{code}{language}[title][box-style]
    ... code ...
\end{code}

The class option codestyle=[style] (default box-elegant) sets the box style for the entire document. The environment's [box-style] parameter overrides this locally.

Available box styles: 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}[Square Function][box-minimal]
def square(x):
  """Computes the square of x."""
  return x * x
\end{code}

Preconfigured Languages

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

Additional Commands

The code \codeinline[python]{x = 5} initializes x. 

Other class options for code

minted Option

Uses the minted package, requiring Python and Pygments installed, along with compilation using --shell-escape. Provides richer syntax highlighting.

The code, code*, \codeinline, and \codeinput work similarly, but options are those of minted (e.g., linenos, highlightlines={2,3}, style=tango). Box styles remain the same.

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

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

Algorithms and Pseudocode

The class provides a pseudocode environment based on algpseudocode and tcolorbox for displaying algorithms. It is automatically numbered and titled.

\begin{pseudocode}{Example Algorithm}
\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 and Annotations

Margin Notes (todonotes)

Enabled by the class option notes=length.

This is some text\tdnote{Important point!}. 
\boxnote[thm-imp]{Don't forget this assumption.}
\begin{theorem}
  \tdmark[thm-imp] If $x>0$, then...
\end{theorem}

Admonitions

Colored boxes with icons to highlight key points.

Each environment accepts [Optional Title][Optional Icon]. The class option inlineadmonition (enabled by default) displays the title and content on the same line. To disable this behavior and force content below the title, use the blockadmonition option.

\begin{warning}[Caution][\faSkull]
  Do not divide by zero!
\end{warning}

\begin{tip}
  Remember to factor first. 
\end{tip}

Grading and Correction

Grading Tools

\gradingstrip[10] % Out of 10
    
    Question 1 \mrk*[Scoring details...]{3}

Answer Areas

Answer: \answerfield[6cm]{1}
Signature: \vardots[4cm]

Markers and Symbols

\begin{itemize}
 \unchecked Task 1
 \done Task 2
 \wontfix Task 3
\end{itemize}

Competency-Based Assessment

\competencies{Comp1\\ Comp2...}: creates a table to assess competencies across 4 mastery levels (with emojis).

\competencies{
  Master fractions \\
  Solve a first-degree equation \\
  Compute a derivative
}

Mathematical Commands and Special Tools

Mathematical Commands

Highlighting and Coloring

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

APMEP Support

Commands available with the class option apmep.

Special Tools

Trees and Graphs

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

Math Grid (mathgrid)

Environment for aligning equation blocks (align*) in a grid.

\begin{mathgrid}{2} % 2 columns
 \neoline % Row 1
 \neocol{ % Col 1
  A &= 1+1 \\  A &= 2
 }
 \neocol{ % Col 2
  B &= 3 \times 4 \\ B &= 12
 }
 \neoline % Row 2
 \neocol[2]{ % Single column (span=2)
  C &= A+B \\ C &= 2+12 \\ C &= 14
 }
\end{mathgrid}