Arabic Exam Kit est un package Typst pour construire des contrôles, examens, feuilles d’exercices et supports de mathématiques en arabe — en version nette ou dessinée à la main (rough).
Il rassemble plusieurs familles cohérentes :
- cartes pédagogiques et composants « mathématiques faciles » ;
- boîtes d’exercices numérotées ;
- modèle d’examen rouge à rubans superposés ;
- modèle sobre noir et blanc inspiré de CTAN
sexam; - modèle 2AM bleu étoilé ;
- fiche pédagogique complète et responsive
worksheet(...); - figures géométriques
ctz-euclide; - taches de café, éclaboussures et décorations vectorielles.
Le package est pensé pour les débutants : chaque famille a un style commun, des dimensions relatives, un exemple complet et une version rough.
Sommaire
- Installation
- Premier document
- Les deux modes : normal et rough
- Choisir une famille
- Examen rouge
- Modèle sexam noir et blanc
- Modèle 2AM bleu étoilé
- Figures géométriques
- Boîtes d’exercices et effets
- FAQ de dépannage
La documentation détaillée et imprimable est disponible dans :
docs/guide.typ/guide.pdf— guide débutant français enrichi ;docs/guide-ar.typ/guide-ar.pdf— الدليل العربي للمبتدئ ;docs/gallery.typ/gallery.pdf— galerie visuelle de toutes les familles.
Installation
Il suffit d’ajouter la ligne suivante au début de votre fichier
#import "@preview/arabic-exam-kit:0.1.0": *
C’est la méthode la plus simple pendant l’apprentissage : aucun réglage Typst n’est nécessaire.
Police arabe
Le package utilise la police Amiri téléchargeable depuis https://fonts.google.com/specimen/Amiri. Dans le document, activez la police :
#set text(font: "Amiri", lang: "ar")
Vous pouvez utiliser d’autres polices si vous le souhaitez. il suffit de remplacer ‘Amiri’ par le nom de votre police. Par exemple, pour utliser Estedad :
#set text(font: "Estedad", lang: "ar")
Premier document
Copiez ce fichier minimal :
#import "@preview/arabic-exam-kit:0.1.0": *
#set page(paper: "a4", margin: 1cm)
#set text(font: "Amiri", lang: "ar", size: 12pt)
#let wx = wexam-style(dir: rtl)
#wexam-header(..wx)
#v(4mm)
#wexam-exercise-heading(title: [التمرين الأول], points: [3 ن], ..wx)
#wexam-question(number: 1, ..wx)[
احسب $m = (+5) + (-7)$.
]
Les arguments entre parenthèses règlent le composant ; le contenu entre crochets est le texte de l’exercice.
mf-card[...]est désormais RTL par défaut : un texte arabe nu est donc aligné à droite. Pour une carte latine, écrire explicitementdir: ltr.
Lire une fonction Typst
#wexam-question(number: 1, ..wx)[
احسب $m = (+5) + (-7)$.
]
wexam-questionest le nom du composant ;number: 1affiche la petite boîte numérotée ;..wxapplique un style commun ;[...]est le contenu affiché dans la question.
Fiche pédagogique responsive complète
La fonction worksheet(...) inclut la fiche pédagogique complète : bande
d’identité, zone de contexte, barres de compétences, tableau de déroulement et
encadré de notes pédagogiques. Contrairement à une image, tout le contenu est
vectoriel et le design se redimensionne pour A4, A5, Letter ou un format
personnalisé.
#import "@preview/arabic-exam-kit:0.1.0": *
#set page(paper: "a4", margin: 0pt)
#set text(font: "Amiri", lang: "ar")
#worksheet(mode: "normal")
// ou : #worksheet(mode: "rough", roughness: 1.25)
Les marges internes de la fiche se règlent sans toucher aux coordonnées :
#worksheet(
mode: "rough",
roughness: 1.15,
outer-x: 4%,
outer-y: 3.5%,
)
L’exemple complet est examples/05-pedagogical-sheet.typ.
Les deux modes : normal et rough
Chaque famille accepte un dictionnaire de style :
#let clean = wexam-style(mode: "normal", dir: rtl, seed: 10)
#let hand = wexam-style(mode: "rough", roughness: 1.15, dir: rtl, seed: 10)
| Paramètre | Rôle |
|---|---|
mode: "normal" |
règles nettes, rendu d’impression classique |
mode: "rough" |
contours légèrement manuscrits |
roughness: 0.7 |
effet très discret |
roughness: 1.15 |
réglage conseillé |
roughness: 1.8 |
effet nettement dessiné à la main |
seed |
stabilise le dessin rough d’une compilation à l’autre |
dir: rtl |
arabe / contenu aligné à droite |
dir: ltr |
français, anglais ou contenu latin |
Le texte reste lisible : seul le tracé vectoriel devient irrégulier.
Choisir une famille
| Besoin | Composants à utiliser |
|---|---|
| Contrôle rouge à rubans | exam-header, exam-exercise-box, exam-circle-geometry |
| Sujet sobre type lycée | sexam-header, sexam-exercise-heading, sexam-part |
| Sujet 2AM bleu étoilé | wexam-header, wexam-question, wexam-house-figure |
| Fiche pédagogique structurée | `worksheet(mode: “normal” |
| Cartes pédagogiques | mf-card, mf-grid-box, mf-choice, mf-ribbon-flat |
| Exercices colorés numérotés | exercise-1 à exercise-10 |
| Effets décoratifs | mf-coffee-stain, mf-coffee-blot, mf-paint-splat |
Examen rouge à rubans
#let exam = exam-style(mode: "normal", dir: rtl)
#exam-page-frame(height: 95%, ..exam)[
#exam-header(..exam)
#v(.8mm)
#exam-meta-line()
#v(4mm)
#exam-exercise-box(title: [التمرين الأول], points: [3 ن], ..exam)[
اكتب العدد $2025 / 100$ كتابة عشرية.
]
]
Points importants
exam-page-frame(height: 95%)donne un cadre couvrant presque toute la page ; laissez le footer à l’extérieur si vous désirez reproduire les sujets algériens classiques.exam-headeraccepteschool,year,title,level-labeletlevel-value.exam-meta-lineplace la durée à gauche et l’avertissement au centre.arrow-gap: 3mmrègle la séparation colorée des flèches.
Pour une figure :
#exam-circle-geometry(width: 42%, ..exam)
Cette figure utilise ctz-euclide pour les points, segments, cercle, angle
droit et doubles marques d’égalité.
Modèle sexam noir et blanc
#let sx = sexam-style(mode: "normal", dir: rtl)
#sexam-page(
height: 100%,
footer: sexam-footer(
footer-left: [اقلب الورقة],
footer-center: [صفحة 1 من 2],
footer-right: [ركز جيدًا],
..sx,
),
..sx,
)[
#sexam-header(..sx)
#v(1cm)
#sexam-exercise-heading(title: [التمرين الأول], points: [6 نقاط], ..sx)
#sexam-part(score: "2", ..sx)[
اكتب الحل بالتفصيل.
]
]
Les petites cases de barème sont automatiquement composées avec ن à gauche
du nombre. Donnez seulement le nombre :
#sexam-part(score: "2")[نص السؤال]
Modèle 2AM bleu étoilé
#let wx = wexam-style(mode: "normal", dir: rtl)
#wexam-header(
school: [متوسطة : عيسات إيدير],
level: [🎓 المستوى : السنة ② متوسط],
title: [اختبار الفصل الثاني في الرياضيات],
year: [2023 – 2024],
duration: [المدة : 02 سا],
..wx,
)
#v(5mm)
#wexam-exercise-heading(title: [التمرين الأول], points: [3 ن], ..wx)
#wexam-question(number: 1, ..wx)[
احسب العبارة $m = (+5) + (-7)$.
]
Numéros de question
#wexam-question(number: 3)[
اشرح خطوات الإنشاء.
]
Pour masquer le numéro, omettez l’argument :
#wexam-question[
سؤال أو ملاحظة دون رقم.
]
Figures géométriques
Le package télécharge automatiquement @preview/ctz-euclide:0.3.0 au premier
build qui utilise une figure.
#wexam-angle-figure(width: 35%, mode: "rough", roughness: 1.15)
#wexam-house-figure(width: 48%)
#exam-circle-geometry(width: 42%)
Les figures restent des constructions vectorielles modifiables : elles ne sont pas des images PDF ou PNG.
Boîtes d’exercices et effets
Exercices numérotés
#let cards = exercise-style(mode: "normal", color_mode: "color", dir: rtl)
#exercise-3(title: [ضرب قوى لها نفس الأساس], ..cards)[
احسب: $2^3 times 2^5 = dots$
]
Taches de café
#mf-coffee-stain(
size: 4.5cm,
variant: "ring",
rotation: -12deg,
)
#mf-coffee-blot(width: 2cm, height: 3cm)
Éclaboussures sélectionnables
#mf-paint-splat(
model: 5, // de 1 à 9
width: 5cm,
height: 4cm,
fill: rgb("#008DAA"),
)
FAQ de dépannage
« unknown font family: Amiri »
Installez la police ‘Amiri’ ou bien ajoutez le chemin vers les polices :
typst compile --font-path chemin/vers/les/polices mon-fichier.typ
Ou bien utilisez une autre police de votre choix (disponible dans votre système).
Les nombres ن2 s’inversent
Avec sexam-part, donnez le score comme une chaîne numérique :
#sexam-part(score: "2")[...]
Le package place le ن et le nombre dans deux boîtes distinctes pour éviter
les ambiguïtés BiDi.
Une figure ne compile pas
Vérifiez la connexion lors du premier build : ctz-euclide et CeTZ doivent
être téléchargés une seule fois. Ensuite, relancez simplement la compilation.
Le contenu sort d’une page
- réduisez
size:ou la taille globale du texte ; - utilisez
width: 90%pour une figure ; - ajoutez
#pagebreak()avant le grand exercice ; - évitez les longueurs de page fixes dans un composant réutilisable.
Exemples prêts à compiler
| Fichier | Contenu |
|---|---|
examples/01-minimal-wexam.typ |
premier sujet bleu très simple |
examples/02-red-exam.typ |
cadre rouge et rubans d’exercices |
examples/03-sexam.typ |
sujet noir et blanc avec scores ن |
examples/04-effects.typ |
café, éclaboussures et cadres décoratifs |
examples/05-pedagogical-sheet.typ |
fiche pédagogique responsive complète |
docs/guide.typ |
manuel PDF illustré pour débuter |
Consultez aussi les fichiers demo-*.typ du projet parent pour des sujets
complets de plusieurs pages.
FERGOUS Abdelhak.