# **texecole 1.0 — Guide de l'utilisateur**

**Des fiches d'exercices prêtes à imprimer, sans écrire de LaTeX.**

> *Un petit langage de balises, cohérent, pour les documents qu'un enseignant fabrique réellement.*

[![CTAN](https://img.shields.io/badge/CTAN-texecole-d35400?style=flat-square)](https://ctan.org/pkg/texecole)
[![Version](https://img.shields.io/badge/version-1.0-2980b9?style=flat-square)](https://ctan.org/pkg/texecole)
[![Engine](https://img.shields.io/badge/engine-LuaLaTeX-1F3A5F?style=flat-square)](https://www.luatex.org/)
[![TeX Live](https://img.shields.io/badge/TeX_Live-included-27ae60?style=flat-square)](https://tug.org/texlive/)
[![License](https://img.shields.io/badge/license-GPL_v3+-8e44ad?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0)

---


## Avant de commencer : installation

**L'éditeur recommandé est TeXstudio**, pour ses paramétrages de compilation : la ligne de commande LuaLaTeX s'y règle une fois pour toutes, et les deux flèches vertes font le reste.

**Configurer TeXstudio.** Ouvrir le menu **« Préférences »**, puis l'onglet **« Compilation »**, et remplacer le contenu de la ligne **LuaLaTeX** par :

```
lualatex --shell-escape -synctex=1 -interaction=nonstopmode %.tex
```

L'option `--shell-escape` autorise l'appel de Python (nécessaire aux calculs formels et numériques confiés à SymPy et SciPy) ; `-synctex=1` relie le PDF au source (clic pour naviguer) ; `-interaction=nonstopmode` évite que la compilation s'arrête sur une invite.

**Installer Python.** Le calcul formel et numérique demandent **Python 3 avec SymPy et SciPy**. Quel que soit le système d'exploitation, récupérer l'installeur officiel sur **[python.org](https://www.python.org/downloads/)** et l'exécuter (sous Windows, cocher **« Add Python to PATH »**), puis dans un terminal :

```
python3 -m pip install sympy scipy
```

Sous Windows, la commande est `py -m pip install sympy scipy`. texecole trouve la commande Python tout seul : il essaie dans l'ordre `python3`, `python` puis `py`, et garde la première qui répond.

Sans SymPy, texecole fonctionne intégralement avec son moteur de calcul interne — seuls les calculs automatiques (variations, dérivées, zéros, primitives, lois de probabilité) demandent le moteur externe.

**Précharger les bibliothèques.** texecole s'accompagne d'un programme minimal, `precharge.tex`, à compiler **une seule fois** après l'installation : il charge toutes les bibliothèques employées par texecole (tcolorbox, pgfplots, tkz-tab, fontspec...), construit les caches — en particulier celui des polices, dont la première génération est longue — et vérifie que la distribution TeX est complète. Les compilations suivantes de n'importe quel document en profitent. Le programme signale aussi, sans faire échouer la compilation, si Python et SymPy sont prêts pour les calculs automatiques :

```
lualatex --shell-escape -interaction=nonstopmode precharge.tex
```

## **📚 Sommaire détaillé**

1. [Qu'est-ce que texecole ?](#quest-ce-que-texecole)
2. [Fonctionnalités clés](#fonctionnalités-clés)
3. [Pourquoi texecole ?](#pourquoi-texecole)
4. [Ce dont vous avez besoin](#ce-dont-vous-avez-besoin)
5. [Premiers documents](#premiers-documents)
6. [La syntaxe](#la-syntaxe)
7. [Les objets](#les-objets) — cadres, tableaux, images, listes, grilles, sections
8. [Les actions](#les-actions) — `Soit`, `Trace` : figures, repère, solides, mode analytique
9. [Les styles et la mise en forme](#les-styles-et-la-mise-en-forme)
10. [Les graphiques de fonctions](#les-graphiques-de-fonctions)
11. [Les mathématiques](#les-mathématiques)
12. [La géométrie](#la-géométrie)
13. [Les statistiques](#les-statistiques) — diagrammes, arbres de probabilités, droite graduée
14. [Les documents complexes](#les-documents-complexes)
15. [Référence complète](#référence-complète) — couleurs et options de classe
16. [Bonnes pratiques](#bonnes-pratiques)
17. [Feuille de route](#feuille-de-route) — ce que prépare la prochaine version

*Annexes, index alphabétique et index thématique : pas encore rédigés dans cette version, à venir.*

> 🌱 **texecole 1.0 est une première mouture.** Le langage et le moteur de calcul sont utilisables en l'état pour la quasi-totalité des documents scolaires du secondaire, mais le projet est actif et continuera de s'étoffer — en particulier du côté des sciences et des mathématiques (géométrie 3D interactive, calcul formel et numérique étendus). Voir le chapitre [Feuille de route](#feuille-de-route) pour le détail.

---

## **📖 Qu'est-ce que texecole ?**

**Texecole est un langage de composition documentaire.**  
Il permet de **créer simplement des documents de grande qualité** tout en bénéficiant de **toute la puissance de LaTeX**.

⚠️ **Texecole n'a pas pour objectif de remplacer LaTeX.** Bien au contraire. Son objectif est **d'en faciliter l'accès** et **d'en permettre l'apprentissage progressif**.

Chaque document écrit en texecole est **traduit en code LaTeX**.

### **🎯 L'objectif double de texecole**

- ✅ **Produire rapidement de beaux documents** ;
- ✅ **Découvrir progressivement LaTeX**.

### **👥 À qui s'adresse texecole ?**

Texecole s'adresse **à tous** : Collégiens, Lycéens, Étudiants, Enseignants, Chercheurs, Ingénieurs, Auteurs de documentation, et plus généralement à toute personne souhaitant produire des documents scientifiques, techniques ou pédagogiques.

### **📖 Comment lire ce manuel**

Ce manuel suit une **progression logique** :

1. Les premiers chapitres posent les fondations (le premier document, la syntaxe, les quatre familles de commandes).
2. Les chapitres suivants explorent chaque domaine (styles, tableaux, images, dessins, mathématiques, géométrie, statistiques).
3. Les derniers chapitres forment un **appareil de référence** : la liste complète des commandes, des annexes de tableaux, un index alphabétique et un index thématique.

**Chaque construction est présentée de la même façon :**

1. **L'écriture texecole** (ce que **vous écrivez**) ;
2. **Le code LaTeX généré** (ce que texecole **produit pour vous**) ;
3. **Une explication** de ce que fait ce code.

> 💡 **Vous pouvez lire ce manuel dans l'ordre**, ou **sauter directement au chapitre qui vous intéresse** et revenir aux fondations en cas de besoin.

### **📜 Une convention de lecture**

Dans tout ce manuel :

- Un bloc marqué **`texecole`** est ce que **vous écrivez** ;
- Le bloc **`latex`** qui le suit est ce que texecole **produit pour vous**.

**Vous n'avez jamais à écrire le second** : il est montré **uniquement pour que vous compreniez, peu à peu, la mécanique de LaTeX**.

---

## **✨ Fonctionnalités clés**


| **Fonctionnalité**                  | **Description**                                                                                                           | **Exemples**                                       |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- |
| **🏷️ Une seule syntaxe de balise** | `<attributs>{contenu}` couvre texte, tableaux, images, maths, cadres, listes et mises en page pleine page                 | `<Affiche un cadre avec une bordure bleue>{Texte}`, `<Dresse un tableau [mc]>{...}` |
| **🎨 147 couleurs**                 | La palette CSS/svgnames complète en **français** | `rouge`, `bleu foncé` |
| **📐 Un mini-langage mathématique** | Fractions, racines, sommes, produits, intégrales, dérivées, trigonométrie, matrices et systèmes, **le tout dans `$...$`** | `$somme(k=1;n) k^2$`, `$intégrale(x=a;b) f(x)$`    |
| **📦 Cadres et grilles**            | Panneaux `<Affiche un cadre>` colorés et mises en page à zones nommées **façon CSS Grid**                                            | `<Affiche une grille avec les zones:[...]>`, `<Affiche un cadre avec des coins arrondis de 5 mm>`       |
| **📊 Des tableaux sans douleur**    | Placement de cellule en **deux lettres**, fusions, en-têtes, bordures, **aucun `&` à compter**                            | `<Dresse un tableau [mc, mg] bordures entête>`                |
| **♻️ Alias et macros**              | Factorisez un style **une fois**, nommez-le partout ; **une seule retouche restyle tout le document**                     | `soit titre = <gras 18pt>`, `soit exercice{n} = ...` |
| **🔁 Structures de contrôle**       | Boucles, conditionnelles et interpolation **`#{...}`** dans le corps du document                                          | `pour n de 1 à 5`, `si note >= 10`                 |


---

## **🎯 Pourquoi texecole ?**

De nombreux utilisateurs rédigent aujourd'hui leurs documents à l'aide de **traitements de texte**, de logiciels de présentation ou de publication assistée par ordinateur. Ces outils permettent **d'obtenir rapidement un résultat**. **En revanche**, lorsque les documents deviennent **plus longs ou plus complexes**, leur mise en page demande **beaucoup de manipulation manuelle** (réglages de marges, alignements, numérotations...).

### **💡 Texecole adopte une approche radicalement différente**

> **L'utilisateur ne construit pas son document en déplaçant des objets ou en ajustant visuellement la mise en page.** **Il décrit simplement le document qu'il souhaite obtenir.** **La composition est ensuite entièrement confiée à LaTeX.**

### **✅ Les avantages de cette approche**


| **Avantage**                                     | **Bénéfice concret**                              |
| ------------------------------------------------ | ------------------------------------------------- |
| ✅ **Mise en page homogène**                      | Cohérence parfaite sur tout le document           |
| ✅ **Numérotation automatique**                   | Sections, figures, tableaux numérotés sans effort |
| ✅ **Références croisées fiables**                | Liens internes toujours synchronisés              |
| ✅ **Table des matières générée automatiquement** | Mise à jour instantanée                           |
| ✅ **Typographie de qualité professionnelle**     | Niveau LaTeX pour tous vos documents              |
| ✅ **Maintenance facilitée**                      | Même pour des documents volumineux                |


---

## **🛠️ Ce dont vous avez besoin**

### **Installation**

`texecole` est sur CTAN et livré avec TeX Live. Sur une distribution TeX Live ou MacTeX à jour, il est déjà là — compilez avec `lualatex`.

```bash
tlmgr update --all
tlmgr install texecole
```

Sous macOS/Linux : préfixez par `sudo`. Sous Windows : utilisez *TeX Live Command-Line*. Pour MiKTeX : *MiKTeX Console* → *Packages* → chercher `texecole` → *Install*, ou `mpm --install=texecole`.

Vérifiez l'installation :

```bash
kpsewhich texecole.cls
```

### **Installation manuelle**

```bash
mkdir -p ~/texmf/tex/luatex/latex/texecole
cp texecole.cls texecole.lua texecole-*.lua ~/texmf/tex/luatex/latex/texecole/
mktexlsr ~/texmf
```

**Prérequis :** LuaLaTeX (`lualatex`) — **ne compile pas** avec `pdflatex` ni `xelatex`.

### **💻 Éditeurs recommandés**


| **Éditeur**   | **Plateformes**       | **Pourquoi ?**                                                                       |
| ------------- | --------------------- | ------------------------------------------------------------------------------------ |
| **TeXstudio** | Windows, macOS, Linux | ✅ Recommandé pour débuter, coloration syntaxique, compilation en un clic, aperçu PDF |
| TeXShop       | macOS                 | Intégration native                                                                   |
| VS Code       | Toutes                | Avec l'extension **LaTeX Workshop**                                                  |


### **⚙️ Configuration de l'éditeur**

Ajoutez systématiquement en première ligne :

```latex
% !TeX program = lualatex
```

---

## **🚀 Premiers documents**

### **📄 Le document minimal**

**texecole**

```texecole
% !TeX program = lualatex
\documentclass[]{texecole}
\begin{document}
Bonjour le monde !
\end{document}
```

> Ces trois lignes (`% !TeX program`, `\documentclass`, `\begin{document}` / `\end{document}`) ne changent presque jamais : copiez-collez-les une fois et n'y touchez plus. Tout ce que vous allez apprendre dans ce manuel se passe **entre** `\begin{document}` et `\end{document}` — considérez-les comme l'en-tête d'un fichier, pas comme du code à comprendre.

**latex**

```latex
% !TeX program = lualatex
\documentclass[]{texecole}
\begin{document}
Bonjour le monde ! \par
\end{document}
```

### **⚙️ Les options de la classe**

**Toutes les options avec descriptions et exemples :**

**texecole**

```texecole
\documentclass[
  % ===== Marges externes (le « margin » anglais) =====
  marges=20,                      % 20 mm sur les quatre côtés
  % marges={25;20;25;20},         % ou quatre valeurs : haut;droite;bas;gauche

  % ===== Espacements internes (le « padding » anglais) =====
  espacements=2,                  % 2 mm entre le contenu et le bord des cadres
  % espacements={4;2;4;2},        % ou quatre valeurs : haut;droite;bas;gauche
  
  % ===== Polices =====
  police=Latin Modern Roman,      % Police du texte (MAJUSCULES)
  math=Latin Modern Math,         % Police mathématique (MAJUSCULES)
  
  % ===== Taille et espacement =====
  taille=11,                     % Corps de base (pt)
  interligne={1,2},              % Coefficient d'interligne (accolades : voir note)
  tabulation=8,                  % Largeur tabulation (mm)
  hauteur=8,                     % Hauteur saut de ligne (mm)
  décalage=100,                  % Décalage exposants/indices (%)

  % ===== Calculs =====
  précision=3,                   % Décimales pour arrondi (-1 = pas d'arrondi)
]{texecole}
```

> **⚠️ Virgule décimale dans les options de classe.** Les options de `\documentclass[...]` sont séparées par des virgules selon la convention LaTeX (règle n°8, exception d'imbrication). Une valeur qui contient elle-même une virgule décimale (`interligne`, ou toute autre valeur non entière) doit donc être **protégée par des accolades** : écrivez `interligne={1,2}`, jamais `interligne=1,2` — sans accolades, LaTeX lirait deux options distinctes (`interligne=1` puis `2`) et la compilation échouerait. C'est la même protection que celle appliquée à `marges={25;20;25;20}` et `espacements={4;2;4;2}`. **Cette règle ne vaut qu'à l'intérieur des options de classe** ; partout ailleurs dans le corps du document, la virgule décimale s'écrit nue (`3,5`), texecole la distingue d'une énumération par l'absence d'espace après elle.

**Tableau récapitulatif :**


| **Option**   | **Type**           | **Défaut**           | **Description**                |
| ------------ | ------------------ | -------------------- | ------------------------------ |
| `marges`     | nombre ou 4 valeurs | `20`                | Marges externes (mm) — `20` ou `{25;20;25;20}` (haut;droite;bas;gauche) |
| `espacements`| nombre ou 4 valeurs | `2`                 | Espacements internes des cadres, tableaux et zones (mm) — `2` ou `{4;2;4;2}` |
| `police`     | texte (MAJUSCULES) | `Latin Modern Roman` | Police du texte                |
| `math`       | texte (MAJUSCULES) | `Latin Modern Math`  | Police mathématique            |
| `taille`     | nombre             | `11`                 | Taille de base (pt)            |
| `interligne` | nombre             | `1,0`                | Coefficient d'interligne       |
| `tabulation` | nombre             | `8`                  | Largeur tabulation (mm)        |
| `hauteur`    | nombre             | `8`                  | Hauteur saut de ligne (mm)     |
| `décalage`   | nombre             | `100`                | Décalage exposants/indices (%) |
| `précision`  | nombre             | `-1`                 | Décimales pour arrondi         |

### **📝 Écrire plusieurs paragraphes**

Un simple passage à la ligne sépare deux paragraphes.

**texecole**

```texecole
Premier paragraphe.
Deuxième paragraphe.
```

### **🏷️ Le titre du document**

**texecole**

```texecole
soit titre = <rouge gras 18pt centre>

<titre>Ma feuille d'exercices
```

**latex**

```latex
{\centering \textcolor{Red}{\textbf{\fontsize{18}{21.6}\selectfont Ma feuille d'exercices}}\par}
```

---

## **📝 La syntaxe**

La syntaxe de texecole repose sur **quatre familles de commandes** :


| **Famille**    | **Rôle**             | **Exemples**                      |
| -------------- | -------------------- | --------------------------------- |
| **Actions**    | Opérations           | `<Trace>`, `<Soit>`, `<Affiche>`, `<Dresse>`  |
| **Objets**     | Éléments du document | `un cadre`, `un tableau`, `une image`      |
| **Propriétés** | Personnalisation     | `rouge`, `gras`, `14pt`, `centre` |
| **Valeurs**    | Paramètres           | `oui`, `non`, `30`, `bleu foncé`  |

**Une seule façon de parler à texecole : la phrase.** Une balise se lit dans l'ordre où elle s'écrit — l'**action** d'abord (le verbe, entre chevrons), puis l'**objet** qu'elle concerne, avec son article et ses attributs en prose, puis enfin le **contenu**, entre accolades : `<Action>objet avec propriétés{contenu}`. Le chevron se referme le plus souvent tout de suite après l'objet et ses attributs — `<Affiche un cadre avec ...>{...}` — mais pour les objets qui se nomment en vue d'un calcul ultérieur (une matrice, un système), le chevron peut aussi se refermer tout de suite après le verbe seul, l'objet et son nom suivant en toutes lettres : `<Soit>la matrice M{...}` (voir la section **Matrices et systèmes**) ; les deux s'y compilent de façon identique. Toute balise commence par un **verbe d'action à l'impératif présent** — jamais par l'objet nu (règle n°12). Les attributs se disent **en prose**, introduits par `avec`, avec le nom et son article (`avec une bordure rouge, un fond jaune clair et des coins arrondis de 5 mm`) — l'ancienne écriture en couples `attribut:valeur` n'existe plus, hors des rares réglages techniques signalés comme tels (`x:{...}` des tableaux de signes, par exemple). Convention du manuel : quand un chapitre étudie un objet en particulier, la tête de balise s'écrit soit avec un verbe (`<Dresse un tableau ...>`), soit avec trois points qui tiennent la place de n'importe quel verbe d'action : `<... un tableau ...>`.

### **📌 Les règles de base**

1. **Les balises** sont entre **chevrons** et commencent par un **verbe** : `<Affiche un cadre>`, `<Dresse un tableau>`, `<Insère une image avec une largeur de 30 mm, dans le dossier {IMAGES}>{photo.png}`  (règle n°12)
2. **Le contenu** est entre **accolades** : `<Affiche un cadre>{Du texte ici}`
3. **Les noms composés** utilisent des **espaces** : `<table des matières>`
4. **Les propriétés** s'écrivent **en français** : `<bleu foncé centre 14pt>{Titre}`
5. **Les couleurs** : `rouge`, `bleu foncé` (français)
6. **Les polices** : en **MAJUSCULES** : `<ARIAL>`
7. **Échappement** : doublez les caractères spéciaux pour les afficher littéralement : `<<` → `<`, `>>` → `>`, `{{` → `{`, `}}` → `}`, `##` → `#`, `$$` → `$`.
8. **Les séparateurs** : le point-virgule `;` sépare **les nombres, et rien d'autre** — coordonnées (`A(2;3)`), bornes d'intervalles (`[-5 ; 5]`), séries de données (`{12 ; 15 ; 9}`), arguments numériques (`arrondi(5/3; 2)`). La virgule `,` sépare les fragments de prose (règle n°10) et reste la virgule décimale à l'intérieur d'un nombre (`3,5`). La barre `|` sépare les paires `clé: valeur` des données nommées (`{Marche: 5 | Bus: 3}`) et les colonnes des rangées saisies. Trois séparateurs, trois usages, aucune exception.

9. **Majuscule de phrase** : **Seules** les actions dont l'écriture se lit comme une phrase française (`<Soit>`, `<Trace>`, etc.) commencent par une majuscule. Les **mots-clés techniques** (`soit`, `pour`, `si`, `fonction`) restent en minuscules.
10. **Article + prose** : toute action-phrase (`<Soit>`, `<Trace>`) désigne ses objets avec un article et décrit leurs attributs en prose. En détail :

   - **L'article porte l'intention.** `<Soit>` introduit du nouveau : article **indéfini** (`un point A(2;7)`). Au pluriel, l'article **factorise** : `<Soit>les points A(-1,5;3), B(2;5) et C(0;-4,3)` — une seule phrase pour trois points. Un **nombre** peut tenir lieu d'article pluriel (`<Soit>3 points A(1;2), B(-1;2) et C(-1;-2)`) : texecole vérifie alors que le compte annoncé correspond au nombre de points décrits. Enfin, la **distribution respective** — l'idiome des énoncés du secondaire et du supérieur (« de coordonnées respectives », « d'unités respectives ») — sépare les noms des valeurs et les apparie dans l'ordre : `<Soit>les points A, B et C de coordonnées respectives (1;2), (-1;2) et (-1;-2)`. `<Trace>` prend l'article **défini** pour un objet déjà posé (`le point A`) et l'**indéfini** quand il crée la figure au moment du tracé (`un triangle ABC équilatéral, de côté 5 cm`). Les deux formes produisent le même tracé. L'article se met devant chaque nom — objets compris : `<un cadre avec une bordure rouge...>`, `<une grille...>`.
   - **Les qualificatifs** restent accolés au nom sans « de » : `équilatéral`, `rectangle en A`.
   - **Les propriétés à antonyme court** se disent en prose : `avec les marques` / `sans marques`, `avec les valeurs` / `sans valeurs`. `avec` prend l'article, `sans` ne le prend pas — comme en français (`avec du sucre` / `sans sucre`). `avec` sert aussi à introduire un groupe d'attributs : `<un tableau [...] avec bordures et entête>`, `avec un fond jaune clair, des coins arrondis de 5 mm et un titre {Attention}`.
   - **La couleur** se dit avec `en` : `en bleu`, `en rouge foncé`.
   - **L'épaisseur du trait** se dit `de trait N mm` (`de trait 0,5 mm`) — c'est une mesure : son unité est obligatoire, comme toutes les unités de longueur.

11. **Les attributs d'un objet s'ouvrent par « avec »**, se séparent par une virgule, et les deux derniers se relient par « et ». C'est la seule forme admise ; écrire les attributs sans `avec` est refusé avec un message qui rappelle la règle. Chaque attribut porte de préférence son **nom précédé d'un article** — plus proche du langage naturel que l'adjectif seul :

    ```texecole
    <Affiche un cadre avec un fond vert menthe, une bordure bleu canard,
        des coins arrondis de 3 mm et un titre {Théorème}>{ ... }
    ```

    L'adjectif `bordé de` n'existe plus : la couleur de bordure se dit `une bordure bleu canard`, comme le fond se dit `un fond vert menthe` — le nom précédé de son article (`une bordure`, `un fond`) se lit mieux que l'adjectif, et texecole ne garde qu'une forme canonique par concept. Les qualificatifs qui font corps avec l'objet restent des adjectifs (`un triangle rectangle`, `un triangle équilatéral`). Un objet **sans** attribut s'écrit nu (`<Affiche un cadre>{...}`), et un placement seul entre crochets (`<Dresse un tableau [mc, mg]>{...}`) ne demande pas de `avec`.
   - **Le connecteur est obligatoire** entre deux attributs de prose : une virgule entre fragments, ou `et` au sein d'un fragment — `en rouge et de trait 0,5 mm`, jamais la juxtaposition nue. Seule la charnière vers un réglage `clé:valeur` s'accroche sans connecteur.
   - **Les unités de longueur** (`cm`, `mm`) sont **obligatoires** : `de côté 5,3 cm`, jamais `de côté 5,3`. Une longueur sans unité est une erreur, dite en français. *Seule exception :* dans un repère, les longueurs se comptent en **graduations** et s'écrivent sans unité.
   - **Le clé:valeur** ne garde que les réglages purement techniques sans tournure française courante. Chaque fois qu'un nom français existe, la prose gagne : `avec 200 échantillons` plutôt qu'un réglage abstrait, `un pas de $pi/6$` plutôt qu'un `step:`.

12. **Une balise commence toujours par un verbe d'action à l'impératif présent** — `<Dresse un tableau ...>`, `<Affiche un cadre ...>`, `<Insère une image ...>`, `<Construis un arbre ...>`, `<Trace ...>`, `<Soit>` — **jamais par l'objet nu**. L'objet porte toujours son article, et l'article suit un verbe : `<Affiche un cadre>` et non `<cadre>`. Écrire l'objet nu est refusé avec un message qui rappelle la règle. Trois familles seulement échappent au verbe, parce qu'elles ne posent aucun objet dans le document : les **styles** (`<gras rouge 14pt>`), les **commandes structurelles** (`<section>`, `<sous-section>`, `<table des matières>`) et les **définitions d'alias** (`soit exo{n} = <Affiche un cadre avec ...>`, où le membre droit décrit un objet sans encore l'afficher — le verbe y est le bienvenu mais la définition seule ne produit rien). Les verbes d'objet interchangeables sont `Affiche`, `Dresse`, `Construis` et `Insère` ; le manuel écrit `<... un tableau ...>` quand le verbe importe peu.


### **🔹 Structure d'une balise**

```texecole
<OBJET PROPRIÉTÉS>{
  CONTENU
}
```

**Exemple :**

```texecole
<un cadre avec une bordure rouge, un fond jaune clair, des coins arrondis de 5 mm et un titre {Attention}>{
  <gras 14pt>{Exercice important !}
}
```

---

## **📦 Les objets**

### **1️⃣ `<Affiche un cadre>` — Mettre en valeur du contenu**

**Syntaxe :** `<Affiche un cadre PROSE>{CONTENU}`

**Propriétés complètes :**


| **Propriété**            | **S'écrit**                          | **Défaut**       | **Description**                          |
| ------------------------ | ------------------------------------- | ------------------ | ----------------------------------------- |
| Couleur de la bordure     | `une bordure <couleur>`              | `gris`              | Couleur de la bordure                     |
| Couleur du texte / fond   | `texte <couleur>`, `fond <couleur>`  | `texte noir, fond blanc` | Couleur du texte et du fond du cadre |
| Coins arrondis            | `coins arrondis de <N>mm`            | pas d'arrondi       | Rayon des coins                           |
| Largeur                   | `large de <N>mm` / `large de N%`     | auto                | Largeur du cadre                          |
| Épaisseur de la bordure   | `bordure épaisse de <N>mm`           | `0,4mm`             | Épaisseur du trait                        |
| Marge intérieure          | `marge de <N>mm`                     | `3mm`               | Marge intérieure                          |
| Titre                     | `avec un titre {...}`                        | pas de titre        | Titre affiché en haut du cadre            |
| Couleur du titre          | `titre en <couleur texte> sur fond <couleur fond>` | -      | Couleur du texte et du fond du titre      |
| Coupure entre pages       | `avec coupure de page` / `sans coupure de page` | sans     | Autorise le cadre à être coupé entre deux pages |


`texte <couleur>` et `fond <couleur>` sont deux fragments indépendants de la même prose, séparés par une virgule (règle n°8) : on peut n'écrire que l'un des deux, l'autre garde sa valeur par défaut. Même principe pour `titre en ... sur fond ...`.

**Un cadre recto/verso.** Une ligne ne contenant que `---` coupe le cadre en deux parties, l'énoncé au-dessus, la solution en dessous — pratique pour une fiche de révision ou une carte question/réponse :

```texecole
<Affiche un cadre avec une bordure bleu marine et un titre {Question}>{
  Quelle est la dérivée de $x \mapsto x^2$ ?
  ---
  $2x$
}
```

**Exemples :**

```texecole
% Cadre simple
<Affiche un cadre avec une bordure bleue, un fond bleu Alice et des coins arrondis de 4 mm>{
  <gras 14pt centre>{Exercice 1}
  Résoudre $x^2 - 5x + 6 = 0$.
}

% Cadre avec titre
<Affiche un cadre avec une bordure rouge foncé, un fond blanc, des coins arrondis de 6 mm,
  un titre {Théorème de Pythagore} et un titre en blanc sur fond rouge foncé>{
  Dans un triangle rectangle...
}
```

### **2️⃣ `<Dresse un tableau>` — Tableaux simplifiés**

**Syntaxe de base :**

```texecole
<Dresse un tableau OPTIONS>{
	Nom	Âge
	Alice	18
}
```

Chaque **tabulation** sépare deux colonnes, chaque **saut de ligne** sépare deux lignes.

**Codes de placement (2 lettres, avec alias en toutes lettres) :**

- Vertical : `h` (haut), `m` (milieu), `b` (bas)
- Horizontal : `g` (gauche), `c` (centre), `d` (droite)

**Tous les codes et leurs alias :**

| Code | Alias complet |
| ---- | -------------- |
| `hg` | `haut gauche`  |
| `hc` | `haut centre`  |
| `hd` | `haut droite`  |
| `mg` | `milieu gauche` |
| `mc` | `milieu centre` |
| `md` | `milieu droite` |
| `bg` | `bas gauche`   |
| `bc` | `bas centre`   |
| `bd` | `bas droite`   |

La forme en toutes lettres fonctionne toujours et n'est jamais moins correcte que le code à deux lettres — c'est un raccourci, pas une syntaxe distincte :

```texecole
<Dresse un tableau [milieu centre, milieu gauche, milieu centre] bordures entête>{
	Jour	Matière	Note
	Lundi	Mathématiques	15
}
```

Une fois l'habitude prise, `[mc, mg, mc]` dit exactement la même chose, plus vite à écrire.

**Options :**


| **Option**              | **S'écrit**                          | **Défaut**    | **Description**                              |
| ----------------------- | -------------------------------------- | ------------- | ---------------------------------------------- |
| `[codes]`               | `[mc, mc, ...]`                       | `[mc, mc, ...]` | Placement des colonnes                          |
| Bordures                 | `bordures` (flag, sans valeur)        | absentes      | Affiche toutes les bordures                     |
| Entête                   | `entête` (flag, sans valeur)          | non           | Première ligne en gras                          |
| Couleur de la bordure    | `une bordure <couleur>`               | `gris`        | Couleur des bordures                            |
| Couleur des cellules     | `texte <couleur>`, `fond <couleur>`   | -             | Couleur du texte et du fond des cellules        |
| Couleur de l'entête      | `entête en <couleur texte> sur fond <couleur fond>` | -   | Couleur du texte et du fond de l'en-tête        |
| Écart entre cellules     | `écart de <N>mm`                      | `0mm`         | Espacement entre cellules                       |


Même convention que pour `<Affiche un cadre>` : `texte <couleur>` / `fond <couleur>`, chaque partie facultative.

**Fusion de cellules :**

```texecole
<Dresse un tableau [mc, mg, md, md] bordures entête>{
	<dans une cellule qui occupera 4 colonnes, en mc, avec une entête>{Relevé de notes}
	Jours	Matières	Notes	Coefficients
	<2 lignes mc entête>{lundi}	Maths	15	4
		Français	12	3
	<2 lignes mc entête>{mardi}	Histoire	13,5	3
		Anglais	18	2
}
```

Une case laissée vide entre deux tabulations correspond simplement à la suite d'une fusion verticale au-dessus.

**Exemple complet :**

```texecole
<Dresse un tableau [mc, mg, mc] avec bordures, entête, un écart de 3 mm,
  une bordure bleu marine, un fond bleu Alice et un entête en blanc, sur fond bleu marine>{
	Jour	Matière	Note
	Lundi	Mathématiques	15
	Mardi	Français	12
}
```

### **3️⃣ `<Insère une image>` — Insertion d'images**

**Syntaxe :** `<Insère une image avec ATTRIBUTS, dans le dossier {DOSSIER}>{FICHIER}` — les dimensions se disent **en prose**, comme tout attribut (règle n°11), l'unité (mm) obligatoire. **Le dossier est obligatoire, sur chaque image, sans exception** : texecole ne cherche jamais dans un dossier par défaut (ni le dossier courant, ni un dossier `IMG` implicite) — omettre `dans le dossier {...}` est refusé avec un message qui le rappelle. Le chemin est relatif au fichier `.tex` :

- `avec une largeur de 30 mm` — 30 mm de large, hauteur proportionnelle ;
- `avec une hauteur de 20 mm` — 20 mm de haut, largeur proportionnelle ;
- `avec une largeur de 40 mm et une hauteur de 25 mm` — l'image tient dans 40 × 25 mm, proportions gardées ;
- `avec un côté de 30 mm` — l'image tient dans un carré de 30 mm ;
- `avec une largeur de 50 %` — la moitié de la largeur de la ligne.

**Autres attributs :**

| **Attribut** | **S'écrit**              | **Description**       | **Obligatoire** |
| ------------ | ------------------------ | ---------------------- | ---------------- |
| Dossier      | `dans le dossier {...}`  | Chemin vers l'image    | oui, toujours     |
| Légende      | `la légende {...}`       | Légende sous l'image   | non               |

**Exemples :**

```texecole
<Insère une image avec une largeur de 50 mm, dans le dossier {IMAGES}>{diagramme.png}
<Insère une image avec une largeur de 80 mm, une hauteur de 60 mm et la légende {Figure 1}, dans le dossier {IMAGES}>{photo.png}
<Insère une image avec un côté de 30 mm, dans le dossier {IMAGES/GEOMETRIE}>{cercle.png}
```

### **4️⃣ `<Dresse une liste ADJECTIF>` — Listes variées**

**Styles disponibles :**


| **S'écrit**             | **Résultat**  |
| ------------------------ | ------------- |
| `liste sans puce`        | Texte brut    |
| `liste à puces`          | •             |
| `liste à puces vides`    | ∘             |
| `liste à puces carrées`  | ▪             |
| `liste numérotée`        | 1., 2., 3.    |
| `liste alphabétique`     | a., b., c.    |
| `liste alphabétique majuscule` | A., B., C. |
| `liste en chiffres romains` | i., ii., iii. |
| `liste en chiffres romains majuscules` | I., II., III. |
| `liste à cocher`         | □             |


**Exemples :**

```texecole
<Dresse une liste à puces>{
pommes
poires
<gras>{cerises}
}

<Dresse une liste numérotée Rouge 14pt>{
Premier point
Deuxième point
}
```

### **5️⃣ `<Affiche une grille>` — Mise en page avancée**

**Syntaxe :**

```texecole
<Affiche une grille avec les zones:[DISPOSITION], les colonnes: ..., les lignes: ... et OPTIONS>{
  [NOM PROPRIÉTÉS]{CONTENU}
}
```

**Propriétés :**


| **Propriété**            | **S'écrit**                          | **Défaut** | **Description**                                                  |
| ------------------------- | --------------------------------------| ---------- | ------------------------------------------------------------------|
| Zones                      | `zones:[DISPOSITION]` ou bloc visuel  | -          | Disposition des zones (technique — voir plus bas)                  |
| Colonnes                   | `colonnes: ...`                      | `max`      | Largeur de chaque colonne, séparées par des virgules : `min`, `max`, ou valeur fixe (`3cm`) |
| Lignes                     | `lignes: ...`                        | `max`      | Hauteur de chaque ligne, séparées par des virgules : `min`, `max`, ou valeur fixe (`15cm`) |
| Bordures                   | `bordures` (flag, sans valeur)       | absentes   | Affiche une bordure autour de chaque zone                          |
| Couleur de la bordure      | `une bordure <couleur>`              | `gris`     | Couleur des bordures (par défaut, surchargeable par zone)          |
| Couleur du contenu         | `texte <couleur>`, `fond <couleur>`  | `texte noir, fond blanc` | Couleur du contenu (par défaut, surchargeable par zone) |
| Écart                      | `écart de <N>mm`                     | `0mm`      | Espacement entre zones                                              |
| Largeur totale             | `large de <N>mm`                     | auto       | Largeur totale                                                     |
| Hauteur totale             | `haut de <N>mm`                      | auto       | Hauteur totale                                                     |


`zones:`, `colonnes:` et `lignes:` décrivent le plan de la grille (un peu comme des coordonnées) : ce sont des données de structure, pas des réglages de style, elles restent donc en clé:valeur. `colonnes:` et `lignes:` mélangent des mots-clés (`min`, `max`) et des longueurs (`3cm`) — ce n'est pas une liste purement numérique, donc la règle n°8 impose la **virgule** comme séparateur, et les crochets ne sont pas nécessaires : `colonnes: 3cm, auto`, `lignes: min, 15cm, min`. Les crochets `[...]` restent réservés à `zones:`, seule donnée réellement bidimensionnelle de la grille.

Chaque zone s'écrit `[nom en mc avec attributs]` : le **placement** s'introduit par `en` (`en mc`, `en j` pour justifié, ou en toutes lettres : `en haut, à gauche`), puis les **attributs** par `avec`, séparés par des virgules, `et` avant le dernier — la même convention que `<Affiche un cadre>` et `<Dresse un tableau>` (règle n°11). Une zone peut ainsi surcharger `une bordure <couleur>` et ajouter `un texte <couleur>, un fond <couleur>`.

**Exemple simple :**

```texecole
<Affiche une grille avec les zones:["titre titre logo", "info info logo", "corps corps corps"], des bordures et un écart de 5 mm>{
  [titre en mc avec une bordure bleu marine, un fond bleu Alice et des coins arrondis de 2mm]{
    <bleu marine gras 20pt centre>Devoir de Maths
  }
  [logo en mc]{
    <Insère une image avec une largeur de 40 mm, dans le dossier {IMAGES}>{logo.png}
  }
  [info]{
    Nom: _______ Prénom: _______
  }
  [corps en j]{
    <section>Exercice 1
    Résoudre $x^2 = 4$.
  }
}
```

**Exemple avec largeurs et hauteurs fixées (`min` / `max` / valeur fixe), et `zones:` en bloc visuel :**

Pour une disposition à plat, `zones:` accepte un **bloc indenté**, sans guillemets ni virgules ni crochets : chaque ligne du bloc est une ligne de la grille, chaque mot séparé par des espaces est une zone — la disposition se lit à l'œil, exactement comme un plan tracé à la main.

```texecole
<Affiche une grille
        zones:
          haut haut
          nav  corps
          bas  bas
        colonnes: 3cm, max
        lignes: min, 15cm, min
        haut de 20cm, écart de 5mm>{

  [haut]{
    % Contenu du header (prendra sa hauteur minimale : min)
  }

  [nav]{
    % Menu / Navigation (largeur fixe : 3cm)
  }

  [corps]{
    % Zone principale (prend tout l'espace restant : max)
  }

  [bas]{
    % Pied de page
  }
}
```

La forme équivalente en tableau de chaînes reste valable, utile quand la grille est écrite en une seule ligne plutôt qu'en bloc :

```texecole
<Affiche une grille avec les zones:["haut haut", "nav corps", "bas bas"], les colonnes: 3cm, max et les lignes: min, 15cm, min>{ ... }
```

### **6️⃣ Sections — Structuration du document**

**Syntaxe :**

```texecole
<section>Titre principal
<sous-section>Sous-titre
<sous-sous-section>Sous-sous-titre
```

**Table des matières :** `<table des matières>`

**Styles de numérotation :** `num`, `roman`, `ROMAN`, `alpha`, `ALPHA`

**Exemple :**

```texecole
soit partie = <bleu marine gras section ROMAIN>
soit chapitre = <bleu gras sous-section decimal>

<partie>Algèbre
<chapitre>Équations
```

---

## **✏️ Les actions**

### **`<Soit>` — Poser des hypothèses de départ**

**Rôle :** `<Soit>` déclare un ou plusieurs éléments ou hypothèses d'un coup (points, valeurs, fonctions, champs, systèmes...) *et les affiche* dans le document sous la forme d'un énoncé « Soit ... ». `soit` en minuscule, lui, assigne silencieusement, sans rien afficher (voir « Alias et macros »). C'est le même verbe sous deux formes — la casse suit la règle n°9.

**Syntaxe (plusieurs éléments) :**

```texecole
<Soit>{
	un point A(2;-1,5)
	un point B(-4,1;3,4)
}
```

**Syntaxe (un seul élément) :** comme pour `<Trace>`, le contenu suit directement le chevron fermant sans accolades — celles-ci ne servent qu'à regrouper plusieurs lignes.

```texecole
<Soit>un point A(2;-1,5)
```

**Affiche :**

```
Soit un point A(2;-1,5)
```

La forme en bloc, elle, affiche un énoncé par ligne :

```
Soit
	un point A(2;-1,5)
	un point B(-4,1;3,4)
```

Les points ainsi déclarés peuvent ensuite être repris par `<Trace>` (voir plus bas) sans qu'il soit nécessaire de redonner leurs coordonnées.

**La factorisation plurielle, sous quatre formes équivalentes.** Une seule phrase déclare plusieurs points ; l'article pluriel (`les`, `des`) ou un **nombre** ouvre la liste, et les coordonnées se donnent soit accolées à chaque nom, soit regroupées en fin de phrase par la **distribution respective** — la tournure des énoncés de collège, de lycée et du supérieur (« de coordonnées respectives », « de rayons respectifs », « de probabilités respectives ») :

```texecole
<Soit>les points A(1;2), B(-1;2) et C(-1;-2)
<Soit>3 points A(1;2), B(-1;2) et C(-1;-2)
<Soit>les points A, B et C de coordonnées respectives (1;2), (-1;2) et (-1;-2)
<Soit>3 points A, B et C de coordonnées respectives (1;2), (-1;2) et (-1;-2)
```

Les quatre phrases posent exactement les trois mêmes points. Deux garde-fous, dits en français : le **compte** annoncé par le nombre doit correspondre au nombre de points décrits, et la distribution respective exige **autant de couples de coordonnées que de noms**, appariés dans l'ordre. La factorisation vaut aussi pour les **fonctions** — une seule phrase les pose toutes :

```texecole
<Soit>les fonctions f(x) = exp(-x^2), g(x) = -x^4 + 2x^2 + 1 et h(x) = (x+1)/(x-2)
```

et chacune est enregistrée comme si elle avait été posée seule (tableaux de variations, dérivées, zéros, tracé : tout suit). Les coefficients décimaux s'écrivent à la française (`-4,9t^2 + 20t`) : la virgule décimale, encadrée de chiffres, n'est jamais confondue avec la virgule qui sépare les fonctions. Elle vaut de même pour les **phrases calculantes** — `<Calcule la dérivée de f, g et h>` vaut trois calculs, un par fonction, et de même pour la dérivée seconde, la primitive, les zéros... — et pour le **tracé** : `<Représente graphiquement les fonctions f, g et h pour x dans [-2 ; 2] et y dans [-3 ; 3]>` dessine les trois courbes dans le même repère, chacune avec sa couleur et sa légende. La distribution respective sert aussi au repère (`avec des unités respectives de 2 cm et 0,5 cm`, voir `<Trace>`) ; son extension aux autres objets (sphères, événements) suivra au fil des versions.

> **Règle de l'article :** indéfini à la déclaration (`<Soit>` : `un point A`), défini à toute reprise ultérieure (`<Trace>` ou une autre action : `le point A`).

**Le champ de vecteurs.** Pour les classes préparatoires, `<Soit>` sait déclarer un champ :

```texecole
<Soit>un champ de vecteurs F de RR^3 dans RR^3 défini par F(x, y, z) = (x^2, yz, sin(z))
```

qui s'affiche « Soit un champ de vecteurs F : ℝ³ → ℝ³ défini par F(x, y, z) = (x², yz, sin(z)) ». Les doubles lettres `RR`, `NN`, `ZZ`, `QQ`, `CC` produisent les ensembles en gras de tableau, comme partout dans les zones mathématiques. La déclaration est **purement notationnelle** en version 1.0 : un champ vectoriel n'a ni courbe ni tableau de variations associables, il n'est donc pas enregistré comme les fonctions scalaires le sont.


### **`<Trace>` — Dessiner tout type de figure**

**Une seule action pour :** figures géométriques, courbes de fonctions, repères, cercles trigonométriques, solides 3D.

#### **🔺 Figures géométriques planes**

**Formes disponibles :**


| **Forme** | **Syntaxe**         | **Propriétés clés**                              |
| --------- | ------------------- | ------------------------------------------------ |
| Triangle  | `le triangle ABC équilatéral`, `le triangle ABC rectangle en A, de côté AB 3 et de côté AC 4` | qualificatif accolé, attributs en `de...` |
| Carré     | `le carré ABCD, de côté 4 cm`        | `de côté N`                                         |
| Rectangle | `le rectangle ABCD, de côté AB 3 et de côté BC 5`    | `de côté AB N`, `de côté BC N`                      |
| Losange   | `le losange ABCD, de côté 4 cm et d'angle 60`      | `de côté N`, `d'angle N`                            |
| Cercle    | `le cercle O, de rayon 3 cm`  | `de centre A`, `de rayon N`, `de diamètre N`          |
| Disque    | `le disque O, de rayon 3 cm, rempli`  | `de centre A`, `de rayon N`, `de diamètre N`, `rempli` (flag) |
| Polygone  | `le polygone ABCD, de centre O et de rayon 3 cm` | `de centre A`, `de rayon N`                                         |


**Propriétés communes :**  
en prose — unité accolée au nombre (`5 cm`), couleur avec `en` (`en bleu`), épaisseur avec `de trait N` (`de trait 0,5 mm`), `avec les marques`, `sans labels` ;  
en clé:valeur (le seul réglage technique restant à ce niveau) — `rotation:N`

**Convention pour les longueurs :** toute propriété de longueur (`côté`, `rayon`, `diamètre`, `AB`, etc.) accepte soit un nombre suivi de son unité **obligatoire** (`5 cm`, `30 mm`), soit le nom d'un segment déjà défini entre deux points existants (ex. `de rayon AB`). Une longueur numérique sans unité n'est acceptée qu'à l'intérieur d'un repère, où elle se lit en graduations (règle n°10).

**Exemples :**

```texecole
<Trace>le triangle ABC équilatéral, de côté 5 cm, avec les marques
<Trace>le carré ABCD, de côté 4 cm, avec les marques
<Trace>le triangle ABC rectangle en A, de côté AB 3 mm et de côté AC 4 mm, avec les marques
```

**Le cercle en détail :**

```texecole
<Trace>le cercle O, de rayon 3 cm                 % rayon en cm
<Trace>le cercle O, de rayon AB                  % rayon = longueur du segment AB
<Trace>le cercle O, de diamètre 6 cm             % via le diamètre plutôt que le rayon
<Trace>le cercle, de centre O et de rayon 4 cm   % centre nommé, sans coordonnées
<Trace>le cercle, de centre (2;3) et de rayon 4 cm  % centre positionné explicitement
<Trace>le disque O, de rayon 3 cm, rempli
```

Mêmes options pour `disque` (`de centre A`, `de rayon N` ou `de diamètre N`, `rempli`) et pour `polygone` (`de centre A`, `de rayon N` pour un polygone régulier inscrit).

#### **📊 Repère orthonormé**

**Syntaxe :** `un repère où l'abscisse appartient à [-5 ; 5] et l'ordonnée à [-5 ; 5]`. Le repère est **orthonormé** par défaut : une graduation vaut la même longueur sur les deux axes (1 cm si rien n'est précisé), et l'adjectif `orthonormé` peut se dire explicitement.

**L'unité se règle en prose**, et son unité de longueur (cm ou mm) est obligatoire, comme pour toute mesure (règle n°10) :

- `avec une unité de 1,5 cm` — la même unité sur les deux axes, le repère reste orthonormé ;
- `avec des unités respectives de 2 cm et 0,5 cm` — la première pour l'axe des abscisses, la seconde pour celui des ordonnées (**distribution respective**, règle n°10) : le repère est alors **orthogonal**, et se dit tel.

**Exemples :**

```texecole
<Trace>un repère où l'abscisse appartient à [-5 ; 5] et l'ordonnée à [-5 ; 5]
<Trace>un repère orthonormé où l'abscisse appartient à [-4 ; 4] et l'ordonnée à [-3 ; 3], avec une unité de 1,5 cm
<Trace>un repère orthogonal où l'abscisse appartient à [-3 ; 3] et l'ordonnée à [-3 ; 3], avec des unités respectives de 2 cm et 0,5 cm
```

Déclarer un repère `orthonormé` avec deux unités distinctes est une contradiction : texecole la refuse et rappelle la forme `orthogonal`. *(L'ancien réglage `unité:N` en clé:valeur, comme les réglages d'affichage `avec le quadrillage`, `avec les axes` et `avec les noms`, n'existent plus : l'unité est une grandeur qui se dit en prose, et les axes gradués sont constitutifs du repère.)*

#### **🎡 Cercle trigonométrique**

**Syntaxe :** `le cercle trigonométrique, de rayon 4 cm`, suivi du réglage d'affichage `avec les valeurs` / `sans valeurs`, et des réglages techniques `pas:N`, `plage:A;B` en clé:valeur.

**Exemple :**

```texecole
<Trace>le cercle trigonométrique, de rayon 4 cm, avec les valeurs
<Trace>le cercle trigonométrique, de rayon 3,2 cm, avec les valeurs et un pas de $pi/6$
```

#### **🎲 Solides en 3D**

**Formes :** `le cube`, `le pavé`, `la pyramide`, `le cylindre`, `le cône`, `la sphère`

**Attributs constitutifs (en prose « de... ») :** `d'arête N`, `de côté N;N;N`, `de base N`, `de hauteur N`, `de rayon N`, `de diamètre N`, `d'angle N`, `de coefficient N`

Même convention que pour les figures planes : `arête`, `rayon`, `diamètre`, `hauteur` acceptent une valeur en cm ou le nom d'un segment déjà défini.

> ✅ **Arêtes cachées calculées automatiquement !**

**Exemple :**

```texecole
<Trace>{
    le solide cube ABCDEFGH, d'arête 3 cm
    le solide pyramide SABCD, de base 3 cm et de hauteur 4 cm
    le solide cylindre, de rayon 1,5 cm et de hauteur 3 cm
    le solide sphère, de centre (0;0;0) et de rayon 2 cm
    le solide cône, de rayon 2 cm et de hauteur 5 cm
}
```

#### **📍 Points, droites, demi-droites et segments**

Pour tracer un élément isolé, sans ouvrir un repère complet :

```texecole
<Trace le point A>                    % A doit avoir été défini au préalable (ex. via <Soit>)
<Trace le point A(2;-1,5)>            % définit A et le trace
<Trace la droite (AB)>
<Trace la demi-droite [AB)>
<Trace la demi-droite (AB]>
<Trace le segment de droite [AB]>
```

**Convention pour les droites :** `[` / `]` = point inclus, `(` / `)` = point exclu — la même convention que pour la [droite graduée](#📏-droite-graduée).

La même prose (`la droite (AB)`, `la demi-droite [AB)`, `le segment de droite [AB]`) fonctionne aussi bien **dans un repère**, dès que les points portent des coordonnées connues (posés par `<Soit>`, ou placés dans le même bloc) : la droite et la demi-droite s'arrêtent alors au bord du repère plutôt qu'à une longueur fixe, et le segment relie exactement les deux points. C'est la même phrase, seul le contexte — avec ou sans repère ouvert — décide de l'échelle.

**Construction avec longueur imposée.** Le geste de base au collège — tracer un segment ou une demi-droite d'une longueur donnée — s'écrit avec la clause `tel que` (ou `telle que`), suivie de la longueur avec son unité :

```texecole
<Trace le segment de droite [AB] tel que AB = 4 cm>
<Trace le segment [CD] tel que CD = 28 mm>
<Trace la demi-droite (AB] telle que AB = 3,5 cm>
```

Le segment est dessiné à l'échelle (1 cm = 1 cm sur le papier), ses extrémités nommées et pointées, la longueur inscrite au-dessus. L'unité (`cm` ou `mm`) est **obligatoire** : `tel que AB = 5` seul est refusé, avec un message qui le rappelle. Sans clause `tel que`, le segment garde une longueur d'affichage par défaut.

#### **📐 Mode analytique**

Pour construire une figure complète dans une partie (ou un cadre) — plusieurs points, droites, courbes, vecteurs liés entre eux — **avec ou sans repère**, on ouvre un bloc `<Trace>{...}` : tout ce qui se trouve entre les accolades sera dessiné dans le même canevas. Si la première phrase du bloc est **le repère lui-même** — `un repère où l'abscisse appartient à [a ; b] et l'ordonnée à [c ; d]` — ses bornes fixent le canevas, et tout ce qui suit s'y inscrit ; sans cette phrase, la figure se construit librement, hors de tout repère. Le repère se dit `orthonormé` explicitement si l'on veut le préciser (c'est le défaut) ; le repère `orthogonal` prend des unités distinctes sur les deux axes : `un repère orthogonal où ..., avec des unités respectives de 2 cm et 0,5 cm` (abscisses puis ordonnées).

**Syntaxe :**

```texecole
<Trace>{
    un repère où l'abscisse appartient à [xmin ; xmax] et l'ordonnée à [ymin ; ymax]
    le point A(x;y)
    la droite y = mx + b
    la droite passant par A et B
    le vecteur u(x;y)
    le cercle C, de centre (x;y) et de rayon r
    la tangente au cercle C, au point T
    la région y > x+1
}
```

**Médiatrice, bissectrice et angle.** Trois constructions de collège s'écrivent dans le repère, en prose ordinaire, à condition que les points concernés y soient posés :

```texecole
<Trace un repère où l'abscisse appartient à [-5 ; 5] et l'ordonnée à [-5 ; 5]>{
    un point A(-3;1)
    un point B(3;-1)
    un point C(2;4)
    la médiatrice de [AB], en bleu
    la bissectrice de l'angle ABC, avec les marques
    l'angle BAC, en vert
}
```

- **La médiatrice** se dit `la médiatrice de [AB]` — le segment entre crochets, notation française, cohérente avec la droite `(AB)`. Elle se trace comme droite complète, coupée aux bords du repère. `avec les marques` ajoute le codage d'égalité sur les deux moitiés du segment et le petit carré de l'angle droit au milieu.
- **La bissectrice** se dit `la bissectrice de l'angle ABC` — le **sommet est la lettre centrale** (ici `B`), convention géométrique française. Elle se trace comme demi-droite issue du sommet, prolongée jusqu'au bord du repère. `avec les marques` ajoute les deux arcs égaux de part et d'autre.
- **L'angle** seul, `l'angle BAC`, trace la marque d'arc au sommet (lettre centrale) — utile pour désigner un angle sur une figure sans le bissecter. Ne pas confondre avec l'*attribut* `d'angle N` (une mesure, en degrés) du losange ou du parallélogramme.

> Les points posés par un `<Soit>` antérieur — au singulier (`un point A(2;7)`) comme au pluriel factorisé (`les points A(-3;1), B(3;-1) et C(2;4)`) — **persistent** : tout bloc `<Trace>` qui les nomme les reçoit automatiquement. La médiatrice et la bissectrice sur figure métrique (hors repère, `le triangle ABC...`) restent prévues pour une version ultérieure.

**L'angle sous toutes ses formes.** Au-delà de `l'angle BAC` (trois points, sommet central), le repère accepte :

```texecole
<Trace un repère où l'abscisse appartient à [-2 ; 2] et l'ordonnée à [-2 ; 2]>{
    un point O(0;0)
    un point A(1;0)
    un point B(0;1)
    un point C(1;1)
    l'angle AOB, en bleu et de mesure 90°
    l'angle orienté (OA;OB), en vert
    l'angle entre OA et OC, en rouge
    le vecteur u(1;0)
    le vecteur v(0;1)
    l'angle entre le vecteur u et le vecteur v, en orange et de mesure 90°
}
```

- **`de mesure 90°`** pose la mesure en étiquette, sur la direction médiane de l'arc, un peu au-delà. La valeur est reprise telle quelle (`90°`, `pi/3`, `60°`...) — texecole ne vérifie pas qu'elle est exacte : c'est une annotation, pas un calcul.
- **`l'angle orienté (OA;OB)`** — deux demi-droites de même origine, notation française du couple — trace l'arc **fléché** de la première vers la seconde. Les deux origines doivent coïncider, sinon l'erreur le dit.
- **`l'angle entre OA et OC`** est la forme non orientée de la même construction.
- **`le vecteur u(1;0)`** pose un vecteur libre, tracé depuis l'origine ; **`l'angle entre le vecteur u et le vecteur v`** marque l'arc entre leurs directions, au point de départ du premier. Les deux vecteurs doivent avoir été tracés dans le même bloc.

> **Périmètre de la version 1.0 — et feuille de route.** Le moteur de figures est un moteur **plan**. L'angle dièdre entre deux plans, le plan défini par trois points de l'espace, l'angle entre une droite et un plan — toutes les constructions qui exigent une vraie troisième dimension — sont notés pour une version ultérieure dotée d'un moteur 3D (les solides actuels sont des projections câblées, pas un espace calculé). De même, `la droite d, passant par A et B` comme objet *nommé* réutilisable attend le mécanisme d'alias de figures (`soit d = ...`), prévu avec la persistance des points entre blocs.

> **Un seul verbe, une seule prose.** Le mode analytique n'introduit aucune syntaxe nouvelle : c'est un `<Trace le repère, ...>` ordinaire (règle n°10, article défini, bornes en prose `où l'abscisse appartient à [a ; b] et l'ordonnée à [c ; d]`) dont le contenu entre accolades énumère les objets à inscrire dans ce repère, chacun à son tour avec sa propre prose. Une ébauche antérieure du langage ouvrait ce mode par un réglage `axes:{...}` en clé:valeur ; mais les bornes décrivent *ce que montre* la figure, au même titre qu'un rayon ou un côté — elles sont donc en prose, et le mot `axes:` n'existe pas. On n'écrit jamais `<Trace, où l'abscisse ...>` (virgule après un verbe sans objet, incorrecte en français) : le repère est toujours nommé (`le repère`), exactement comme on nomme `le cercle` ou `la fonction`. Le même repère se dit aussi bien `<Représente graphiquement le repère, ...>` dès que son contenu relève de l'analyse (courbes de fonctions) plutôt que de la géométrie plane — voir l'encadré ci-dessous.

**Le repère est un objet : il accueille des courbes de fonctions.** Une fonction posée par `<Soit>` se trace *dans* un repère qui contient aussi des points, des droites ou des vecteurs — la courbe est un habitant du repère parmi les autres :

```texecole
<Soit>les fonctions f(x) = x^2 - 2 et g(x) = -x^2 + 3

<Représente graphiquement un repère où l'abscisse appartient à [-3 ; 3] et l'ordonnée à [-4 ; 4]>{
    les courbes des fonctions f et g
    la droite d'équation y = x
    le point A(-2 ; 3,5)
}
```

Chaque courbe reçoit sa couleur et son nom en étiquette. Trois proses équivalentes pour la courbe : `la fonction f`, `la courbe de la fonction f`, et au pluriel factorisé `les courbes des fonctions f et g` (ou `les fonctions f et g`). La droite se dit par son équation, `la droite d'équation y = ...`, avec n'importe quelle expression au second membre. La fenêtre et les unités viennent du repère englobant — la courbe n'en redit rien.

**La forme académique du repère.** Les énoncés du secondaire et du supérieur nomment le repère et détaillent chaque axe ; texecole les lit tels quels :

```texecole
<Représente graphiquement dans un repère orthogonal (O, i, j) pour x appartient à [-3 ; 3] et y à [-9 ; 9] avec des unités graphiques de 1,5 cm pour l'axe des abscisses et de 0,5 cm pour l'axe des ordonnées>{
    les courbes des fonctions f et g
    la droite d'équation y = x
    le point A(-2 ; 3,5)
}
```

- **`<Représente graphiquement ...>`** est le verbe de l'**analyse** : fonction, courbe, diagramme en escalier d'une suite, statistique (voir plus loin) — la représentation d'un concept abstrait, avec ou sans repère explicite. `<Trace>` reste le verbe de la **géométrie**, plane ou dans l'espace : triangle, cercle, droite, polygone, médiatrice, bissectrice, solide — le tracé concret d'une figure, **même posée dans un repère** (un point, une droite ou une médiatrice entre coordonnées se trace, elle ne se représente pas graphiquement). Les deux verbes peuvent ouvrir le même mode analytique et les mêmes blocs ; seul le contenu — fonction ou figure — décide lequel s'emploie. Une figure mixte (une droite tracée à côté d'une courbe, par exemple) se range du côté de son objet principal.

| Domaine | Verbe | Exemples |
| --- | --- | --- |
| Analyse | `<Représente graphiquement>` | fonctions, courbes, diagrammes en escalier, statistiques |
| Géométrie plane | `<Trace>` | triangles, cercles, droites, polygones, médiatrices |
| Géométrie dans l'espace | `<Trace>` | cubes, pyramides, sphères |
| Probabilités | `<Construis>` | arbres de probabilités |
| Algèbre linéaire | `<Affiche>` | matrices, tableaux |

- **`dans un repère ...`** : le `dans` de la tournure académique se lit naturellement après le verbe.
- **`(O, i, j)`** nomme le repère — la notation est acceptée et consommée ; elle n'ajoute rien au tracé en version 1.0 (l'origine s'appelle toujours O).
- **`pour x appartient à [a ; b] et y à [c ; d]`** est l'équivalent de `où l'abscisse appartient à ... et l'ordonnée à ...` — les deux tournures se valent.
- **`avec des unités graphiques de 1,5 cm pour l'axe des abscisses et de 0,5 cm pour l'axe des ordonnées`** est la forme longue, chaque axe nommé en toutes lettres, de `avec des unités respectives de 1,5 cm et 0,5 cm` — l'ordre des axes peut être inversé, les valeurs se remettent d'elles-mêmes dans le bon ordre.

---

## **🎨 Les styles et la mise en forme**

### **🎨 Styles en ligne**


| **Style**           | **Abréviation** | **Résultat**      |
| ------------------- | --------------- | ----------------- |
| `gras`              | `g`             | **gras**          |
| `italique`          | `i`             | *italique*        |
| `souligné`          | `s`             | ++souligné++      |
| `barré`             | —               | ~~barré~~         |
| `sans empattements` | `sans`          | sans empattements |
| `petites capitales` | `capitales`     | Petites Capitales |


**Combinaison :** `<gras italique rouge>{texte}` ou `<g i s>{texte}`

### **🎨 Couleurs et tailles**

**Couleurs :** `rouge`, `bleu foncé`, `vert forêt` — les 147 noms français listés dans la [référence des couleurs](#-référence-des-couleurs-147-disponibles).

**Filet de sécurité — teinte absente de la palette française :** les 147 noms français couvrent l'intégralité de la palette CSS/svgnames usuelle ; il ne devrait donc en pratique jamais être nécessaire d'en sortir. Si toutefois une teinte précise venait à manquer, tout nom `xcolor` reconnu par LuaLaTeX reste techniquement utilisable, écrit avec une majuscule initiale pour le distinguer d'un mot-clé français (par exemple `<Affiche un cadre avec une bordure NomXcolor>`). Ce n'est qu'un secours de dernier recours : dans un document destiné à d'autres enseignants francophones, la palette française suffit dans l'immense majorité des cas, et aucun exemple de ce guide n'utilise de nom anglais — TEXECOLE.md se lit et s'écrit intégralement en français.

**Tailles :** `12pt`, `14pt`

**Polices :** `<ARIAL>`, `<TIMES NEW ROMAN 12pt>`

### **📏 Alignements**

**Horizontal :** `gauche`, `centre`, `droite`, `justifie`

**Vertical (dans cellules) :** `hg`, `hc`, `hd`, `mg`, `mc`, `md`, `bg`, `bc`, `bd` (alias en toutes lettres : voir [Les objets - le tableau](#2️⃣-tableau--tableaux-simplifiés))

### **📄 Tabulations et sauts**


| **Balise**        | **Description**              |
| ----------------- | ---------------------------- |
| `<tabulation>`    | Indentation de 1 tabulation  |
| `<Ntabulations>`  | Indentation de N tabulations |
| `<ligne>`         | Saut d'une ligne             |
| `<Nlignes>`       | Saut de N lignes             |
| `<page suivante>` | Saut de page                 |


### **📌 Exposants et indices**

```texecole
x<exposant>{2}      % x² (décalage par défaut de la classe)
y<indice>{1}        % y₁
H<indice>{2}O       % H₂O
x<exposant 4mm>{2}  % x² avec exposant relevé de 4 mm (mesure explicite)
```

> **Nombre collé ou séparé ?** Deux familles, deux conventions, une seule logique. Quand le nombre **compte des objets** (une multiplicité), il est **collé** au mot : `<4 colonnes>`, `<2 lignes>`, `<3 tabulations>` (voir « Fusion de cellules » et « Tabulations et sauts »). Quand le nombre est une **mesure** avec une unité (mm), il est **séparé** et porte son unité : `<exposant 4mm>`. Sans nombre, `<exposant>` et `<indice>` prennent le décalage par défaut fixé par l'option de classe `décalage` — c'est la forme courante, le nombre n'étant utile que pour un ajustement ponctuel.

### **📎 `<note>` — Notes de bas de page**

Une note de bas de page s'insère au fil du texte avec la balise `<note>` suivie de son contenu entre accolades. L'appel de note (le petit numéro en exposant) se place exactement là où figure la balise ; le texte de la note descend automatiquement en bas de la page, numéroté en continu :

```texecole
Selon Bourdieu<note>{BOURDIEU Pierre, La distinction : critique sociale
du jugement, Paris, Éditions de Minuit, 1979}, les habitus structurent
les pratiques.
```

Trois points d'usage, hérités de la typographie française :

- **Placement de la balise :** collée au mot qu'elle annote, *avant* la ponctuation (`...Bourdieu<note>{...},` et non `...Bourdieu,<note>{...}`) — c'est la convention française de l'appel de note.
- **Contenu :** tout ce que le corps du texte accepte est admis dans la note — styles (`<italique>`), mathématiques (`$...$`), calculs (`#{...}`). Une référence bibliographique s'écrit naturellement : NOM Prénom, *Titre*, Ville, Éditeur, année.
- **Longueur :** une note tient sur son accolade, même répartie sur plusieurs lignes du fichier source (l'accolade fermante marque la fin, comme partout ailleurs — règle n°2).

> **Pourquoi `<note>` et pas « note de bas de page » en toutes lettres ?** Le mot seul suffit : il n'existe qu'une sorte de note dans un document scolaire, et la brièveté compte pour une balise appelée au fil de la phrase. La marge (`marginpar`) et les notes de fin de document, plus rares, ne sont pas retenues dans texecole 1.0.

### **🔖 Alias et macros avec `soit`**

> **⚠️ Distinction importante :**
> - `soit` (minuscule) : **Mot-clé technique** pour les assignations (invisible dans le PDF).
>   Exemple : `soit x = 5`
> - `<Soit>` (majuscule) : **Action-phrase** qui affiche un énoncé dans le PDF.
>   Exemple : `<Soit>un point A`
>
> Cette distinction suit la **règle n°9** : seules les actions-phrases (qui s’écrivent comme des phrases françaises) commencent par une majuscule.

**Mauvaise et bonne pratiques**
```texecole
-- ❌ MAUVAIS : "Soit" en majuscule pour une assignation
Soit titre = <gras 18pt centre>  % → Erreur : ce n'est pas une action-phrase !

-- ✅ BON : majuscule uniquement pour l'action
soit titre = <gras 18pt centre>
<Soit>un point A(2;3)  % → Correct : action-phrase
```

**Définir un style :**

```texecole
soit titre = <bleu marine gras 18pt centre>
soit important = <gras souligné rouge>
```

**Variables numériques :**

```texecole
soit pi = 3,14159
soit rayon = 5
soit aire = #{pi * rayon^2}
L'aire vaut #aire cm².
```

**Macros avec paramètres :**

```texecole
soit bonjour{nom} = Bonjour #nom !
soit carre{x} = #{x^2}

<bonjour{Jean}>    % → Bonjour Jean !
<carre{5}>        % → 25
```

**Exemple complet**
```texecole
-- Assignation silencieuse (mot-clé technique)
soit titre = <gras 18pt centre>
soit pi = 3,14159
soit bonjour{nom} = Bonjour #nom !

-- Action-phrase (affiche dans le PDF)
<Soit>un point A(2;3)
<Trace>le cercle, de centre A et de rayon 5 cm
```

### **🔁 Structures de contrôle**

**Boucles `pour` :**

```texecole
pour n de 1 à 5 {
  <gras>Exercice #n
}
```

**Les deux bornes sont incluses** : `pour n de 1 à 5` parcourt 1, 2, 3, 4 **et** 5 (cinq passages), exactement comme on le lirait à voix haute. Contrairement à la plupart des langages de programmation (où une borne « à N » exclut souvent N), texecole ne demande pas à un professeur de compter « il faut mettre 6 pour aller jusqu'à 5 » — la phrase française fait foi.

```texecole
pour f dans [chat.png, chien.png] {
  <Insère une image avec une largeur de 20 mm, dans le dossier {IMAGES}>{#f}
}
```

**Le pas** se règle en prose, comme tout réglage : `avec un pas de p`. Les bornes et le pas acceptent les **décimaux**, virgule française comprise :

```texecole
pour i de 0,5 à 2,5 avec un pas de 0,5 {
  Valeur : #i
}
```

**Boucles `tant que` :** la condition est vérifiée **avant** chaque passage ; le mot `faire` devant l'accolade est facultatif mais recommandé — il se lit mieux.

```texecole
soit n = 0
tant que n < 3 faire {
  Passage numéro #n
  soit n = n + 1
}
```

**Boucles `faire ... tant que` :** le corps s'exécute **au moins une fois**, la condition est vérifiée **après** chaque passage.

```texecole
soit n = 0
faire {
  Passage numéro #n
  soit n = n + 1
} tant que n < 3
```

> **Compteurs et portées.** `soit n = 0` posé **avant** la boucle déclare le compteur ; le `soit n = n + 1` **dans** la boucle retrouve ce nom déjà visible et le **réaffecte** — c'est ce qui fait avancer la boucle. Un nom posé pour la première fois *à l'intérieur* d'un bloc, lui, reste local au bloc (règle des portées, plus bas) : ce qu'on pose en tête sert partout, ce qu'on pose dans un tiroir reste dans le tiroir.

**Conditions `si` :**

```texecole
soit note = 15

si note >= 10 {
  <vert gras>Admis !
} sinon {
  <rouge gras>Échoué.
}
```

Les opérateurs symboliques (`>=`, `<=`, `==`, `!=`) ont chacun un synonyme en toutes lettres, interchangeable au choix :

| Symbole | Synonyme       | Symbole | Synonyme     |
| ------- | -------------- | ------- | ------------ |
| `>=`    | `au moins`     | `<=`    | `au plus`    |
| `==`    | `égal à`       | `!=`    | `différent de` |

```texecole
si note au moins 10 {          % strictement équivalent à : si note >= 10
  <vert gras>Admis !
}
```

Les conditions se **combinent** avec les connecteurs du français, `et` et `ou`, et s'enchaînent avec `sinon si` :

```texecole
soit note = 12
soit rattrapage = 8

si note >= 10 et rattrapage >= 10 {
  <vert gras>Admis sans réserve.
} sinon si note >= 10 ou rattrapage >= 12 {
  <orange gras>Admis de justesse.
} sinon {
  <rouge gras>Échoué.
}
```

### **➗ Calculs dans le texte : `#{...}`**

**Fonctions disponibles :**

- Algébriques : `abs`, `racine`, `defaut`, `signe`, `min`, `max`
- Exponentielles : `exp`, `ln`, `log`, `log2`, `logb(x;base)`
- Trigonométriques : `sin`, `cos`, `tan`, `cot`, `sinus en degrés`, `cosinus en degrés`, `tangente en degrés`
- Inverses : `arcsin`, `arccos`, `arctan`
- Hyperboliques : `sinh`, `cosh`, `tanh`, `coth`
- Arrondi : `arrondi(x;d)`, `defaut(x:pas)`, `exces(x:pas)`
- Constantes : `pi`, `e`

**Exemples :**

```texecole
Le carré de 5 vaut #{5^2}.
La racine de 16 vaut #{racine(16)}.
La valeur de π est environ #{arrondi(pi;4)}.
```

---

## **📊 Les graphiques de fonctions**

### **Déclaration d'une fonction**

Déclarer une fonction, c'est **poser un objet nouveau** — exactement ce que fait `<Soit>` pour un point. On emploie donc la même action, avec l'article indéfini (règle n°10) :

```texecole
<Soit>une fonction f(x) = x^2 - 2
<Soit>une fonction g(t) = sin(t) + cos(t)
```

> **Pourquoi `<Soit>` et non un objet `<fonction>` ?** Une fonction est une **hypothèse de départ** au même titre qu'un point : elle se *pose*, elle ne se *dessine* pas (c'est `<Représente graphiquement>` qui la dessinera ensuite). La formule scolaire canonique est d'ailleurs « **Soit** f la fonction définie par… ». Unifier toute déclaration sous le verbe `<Soit>` (points, valeurs, fonctions) évite d'avoir à retenir un objet spécial `<fonction>` : un seul verbe pour tout ce qu'on pose, un seul verbe de graphage (`<Représente graphiquement>`) pour tout ce qu'on représente dans un repère.

Comme pour un point, plusieurs déclarations se regroupent entre accolades :

```texecole
<Soit>{
    une fonction f(x) = x^2 - 2
    une fonction g(t) = sin(t) + cos(t)
}
```

### **Tracé de la courbe**

```texecole
<Représente graphiquement la fonction f>
<Représente graphiquement la fonction f pour x appartient à [-5 ; 5] et y à [-10 ; 10]>
<Représente graphiquement la fonction f, en rouge et de trait 0,5 mm>
```

**Bornes d'affichage :** `pour x appartient à [A ; B] et y à [C ; D]`, en prose — même convention que le repère (voir règle n°10). Les variantes `pour x dans [A ; B]` et `sur [A ; B]` (abscisse seule) sont acceptées.

**En prose :** couleur (`en rouge`), épaisseur (`de trait 0,5 mm`), bornes d'affichage (`pour x appartient à [A ; B] et y à [C ; D]`), finesse (`avec 200 échantillons`).

**Plusieurs courbes dans le même repère** (factorisation plurielle, règle n°10) : `<Représente graphiquement les fonctions f, g et h pour x dans [-2 ; 2] et y dans [-3 ; 3]>` — article pluriel (`les`, `des`) ou nombre (`3 fonctions f, g et h`, le compte est vérifié). Chaque courbe reçoit sa couleur et son entrée de légende ; les fonctions doivent avoir été posées par `<Soit>` auparavant.

**En prose également :** finesse (`avec 200 échantillons`), aire sous la courbe (`avec l'aire entre A et B`), aire entre deux courbes (`avec l'aire jusqu'à g`), et le tracé en escalier d'une suite récurrente : `avec le diagramme en escalier depuis U0 sur N termes` (N vaut 8 si omis).

### **Analyse et algèbre du supérieur**

Chaque construction se pose en une phrase, sur une fonction ou une matrice déjà introduite par `<Soit>` ; le calcul est formel (SymPy), le rendu suit les notations du supérieur.

```texecole
<Soit>une fonction f(x) = sin(x)/x

<Calcule la limite de f en 0>                              % lim f(x) = 1, x -> 0
<Calcule la limite de f en +infini>                        % ... et -infini
<Calcule la limite de f en 0 à droite>                     % ... ou à gauche

<Calcule le développement limité de f en 0 à l'ordre 4>    % avec le o(x^4) français

<Calcule les racines cinquièmes de l'unité>     % S = {1, e^(2ipi/5), ...}
<Calcule les racines cubiques de 8i>            % racines n-ièmes complexes

<Factorise x^2 - 5x + 6>                        % (x - 2)(x - 3)
<Simplifie (x^2 - 1)/(x - 1)>                   % x + 1
<Résous l'équation x^2 = 2x + 1>                % S = {1 - rac(2), 1 + rac(2)}

<Soit la matrice M>{
    2 ; 1
    1 ; 1
}
<Calcule le déterminant de M>                              % det(M) = 1 (exact)
<Calcule l'inverse de M>                                  % M^(-1), fractions exactes
```

Le développement limité s'écrit avec le petit o de l'usage français (`+ o(x^n)`), les solutions d'équations sortent en radicaux exacts, le déterminant et l'inverse en fractions. Une matrice non inversible ou une fonction non posée sont dites en français.

### **Poser et résoudre un système**

Le système se pose par `<Soit>`, qui l'affiche et le mémorise, puis se résout par `<Résous>` — en **calcul exact** : coefficients entiers, décimaux ou fractions `p/q`, solutions rendues en fractions irréductibles. Le solveur dit aussi, en français, quand le système n'a aucune solution ou en admet une infinité.

```texecole
<Soit le système s>{
    a + b + c = 2
    4a + 2b + c = 3
    9a + 3b + c = 6
}

<Résous s>              % La solution du système est (1, -2, 3).

<Résous s, pas à pas>    % ... déroulé au pivot de Gauss, étape par étape.
```

> **Les deux moteurs de calcul.** texecole calcule à deux niveaux, sans option à régler : le **moteur interne** — arithmétique exacte et Gauss-Jordan embarqués en Lua pur, rien à installer, `<Résous>` et `#{...}` fonctionnent partout — et **SymPy**, sollicité automatiquement par les constructions de calcul formel (dérivées, zéros exacts, variations automatiques, [sympy.org](https://www.sympy.org)). SymPy demande trois choses, une seule fois : Python 3 installé, `python3 -m pip install sympy`, et la compilation avec `--shell-escape` (TeXstudio : Options → Configurer TeXstudio → Production, remplacer la commande LuaLaTeX par `lualatex --shell-escape -synctex=1 -interaction=nonstopmode %.tex`). texecole trouve la commande Python tout seul (`python3`, `python` puis `py`). Chaque requête passe par un fichier temporaire (jamais par la ligne de commande : pas d'injection), est mise en cache (l'expression répétée est gratuite), et remonte ses erreurs en français — rien n'est avalé.

### **Tableau de variations**

Si Python et SymPy sont installés, le tableau de variations **se calcule tout seul** — dérivée, zéros réels, signes et valeurs exactes. La fonction doit avoir été posée par `<Soit>` auparavant : le tableau retrouve sa définition et l'affiche en tête.

```texecole
<Soit>une fonction q(x) = -x^4 + 2x^2 + 1

<Dresse le tableau de variations de q>
```

C'est la seule forme : on nomme la fonction, texecole fait le reste. `<Étudie les variations de q>` en est le synonyme conjugué.

Les compagnons du calcul formel s'écrivent tous par une **action** — un verbe à l'impératif, jamais un nom seul : `<Calcule la dérivée de q>` (et `<Calcule la dérivée seconde de q>`) affiche la dérivée simplifiée ; `<Détermine les zéros de q>` l'ensemble exact des solutions de q(x) = 0, radicaux compris ; `<Calcule la primitive de q>` une primitive (avec sa constante). Les verbes interchangeables sont `Calcule`, `Détermine`, `Donne`, `Cherche`, `Trouve`, `Établis`, `Évalue`. Ces phrases se **factorisent** au pluriel (règle n°10) : `<Calcule la dérivée de f, g et h>` affiche les trois dérivées, une par ligne — l'argument doit être une pure liste de noms, virgules entre eux, « et » avant le dernier. Le tracé de la même fonction se fait par une phrase en langage naturel :

```texecole
<Représente graphiquement la fonction q pour x appartient à [-2 ; 2] et y à [-3 ; 3], avec 200 échantillons>
```

### **Tableau de signes**

```texecole
<Soit>une fonction f(x) = (x+2)(x-3)
<Dresse le tableau de signes de f>
```

---

## **🔢 Les mathématiques**

> **Le cœur de texecole** : Un mini-langage mathématique puissant.

**Syntaxe :** `$EXPRESSION MATHÉMATIQUE$`

### **Fractions et racines**

```texecole
$1/2 + 1/3$        % Fractions enchaînées
$racine(2)$        % Racine carrée
$racine[3](8)$     % Racine cubique
```

### **Puissances et indices**

```texecole
$x^2$              % x²
$x^(a+b)$          % x^(a+b) - parenthèses importantes !
$u_n$               % uₙ
$u_(n-1)$           % uₙ₋₁
```

### **Ensembles de nombres**

Chaque ensemble s'écrit soit avec l'abréviation à double lettre (usage mathématique courant), soit en toutes lettres — les deux formes sont équivalentes :

```texecole
$NN$ ou $naturels$      % ℕ
$ZZ$ ou $entiers$       % ℤ
$DD$ ou $décimaux$      % 𝔻
$QQ$ ou $rationnels$    % ℚ
$RR$ ou $réels$         % ℝ
$CC$ ou $complexes$     % ℂ
$PP$ ou $probabilité$   % ℙ
$KK$ ou $corps$         % 𝕂
$HH$ ou $quaternions$   % ℍ
```

### **Quantificateurs et logique**

```texecole
$pour tout x dans RR$           % ∀x ∈ ℝ
$il existe x$                   % ∃x
$il n'existe pas de x$          % ∄x
$x appartient à NN$             % x ∈ ℕ
$x n'appartient pas à NN$       % x ∉ ℕ
$(P et Q) ou négation de P$     % (P ∧ Q) ∨ ¬P
```

Dans une zone mathématique, `et` et `ou` sont les connecteurs logiques (∧, ∨) ; `négation de` donne ¬. Le mot `non` sert au **complémentaire** d'un ensemble ou d'un événement : `non(A)` s'affiche $\overline{A}$.

### **Opérations sur les ensembles**

Chaque opération se dit en toutes lettres, en français :

```texecole
$A inclus dans B$               % A ⊂ B
$A inclus dans ou égal à B$     % A ⊆ B
$A union B$                     % A ∪ B
$A inter B$                     % A ∩ B
$A privé de B$                  % A \ B
$vide$                          % ∅
$non(A union B) = non(A) inter non(B)$   % loi de De Morgan
$parties de(A)$                 % 𝒫(A)
$cardinal(A)$                   % card(A)
$a congru à b modulo n$         % a ≡ b [n]
```

Les grands opérateurs indexés se disent `réunion de` et `intersection de` :

```texecole
$réunion de(i=1;n) A_i$         % ⋃ de i=1 à n
$intersection de(i=1;n) A_i$    % ⋂ de i=1 à n
```

### **Probabilités : conditionnement et complémentaire**

```texecole
$PP(A sachant B)$               % P(A | B)
$PP(non(B))$                    % P(B̄)
$répartition de(X; x)$          % F_X(x)
$densité de(X; t)$              % f_X(t)
```

### **Algèbre linéaire**

Les opérateurs suivent les usages du supérieur ; les majuscules sont celles de la tradition (Vect, Tr, Ker...) :

```texecole
$engendré par(u, v)$            % Vect(u, v)
$trace(A)$                      % Tr(A)
$déterminant(A)$                % det(A)
$^t{A}$                         % transposée
$A^{-1}$                        % inverse
$comatrice(A)$                  % Com(A)
$spectre(A)$                    % Sp(A)
$A^*$                           % adjoint
$noyau(A)$                      % Ker(A)
$image(A)$                      % Im(A)
$rang(A)$                       % rg(A)
```

### **Fonctions mathématiques**

```texecole
$sin(x)^2 + cos(x)^2 = 1$
$arcsin(1/2) = pi/6$
$sinus en degrés(30) = 0,5$          % Sinus en degrés
$exp(1) = e$
$ln(e) = 1$
$abs(-5) = 5$
$norme(vecteur(AB))$
```

### **Sommes et produits**

```texecole
$somme(k=1;n) k^2$       % ∑ₖ=₁ⁿ k²
```

**Les opérateurs différentiels, en toutes lettres.** Le gradient, la divergence, le rotationnel et le laplacien s'écrivent comme ils se disent — et sortent dans les notations françaises (`grad`, `div`, `rot`, `Δ`) :

```texecole
$gradient(f)$                    % grad f
$divergence(F)$                  % div F
$rotationnel(F)$                 % rot F
$laplacien f$                    % Δf   (préfixe, sans parenthèses obligatoires)
$partielle f / partielle x$      % ∂f/∂x
$nabla f$                        % ∇f, pour qui préfère la notation nabla
```

Le laplacien suit la convention du symbole préfixe : `laplacien f` se lit comme `nabla f`, les parenthèses éventuelles appartiennent à l'opérande. La dérivée partielle s'obtient par la fraction : le mot `partielle` (ou `partiel`) devant chaque membre — le moteur compose alors la fraction aux ∂ droits. Les notations alternatives que vous citeriez dans un énoncé (« noté ∇f ou grad f ») s'écrivent naturellement : `$nabla f$ ou $gradient(f)$`.

```texecole
$produit(k=1;n) k$      % ∏ₖ=₁ⁿ k
```

### **Limites et intégrales**

```texecole
$lim(x->0) sin(x)/x = 1$          % limₓ→₀
$intégrale(x=a;b) f(x)$         % ∫ₐᵇ f(x) dx
$intégrale(x) f(x)$              % ∫ f(x) dx (primitive)
$intégrale contour(C) f(z)$             % ∮_C
$intégrale valeur principale(x=a;b) f(x)$             % Valeur principale
$intégrale moyenne(x=a;b) f(x)$             % ⨍ₐᵇ (moyenne)
```

**Intégrales multiples :**

```texecole
$intégrale(x=a;b ; y=c;d) f(x;y)$    % ∬ₐᵇᶜᵈ f(x,y) dy dx
$intégrale(x=a;b ; y=c;d ; z=e;g) f$ % ∭ₐᵇᶜᵈᵉᵍ f dz dy dx
$intégrale surface(S)$                     % ∯_S (surface)
$intégrale volume(V)$                      % ∭_V (volume)
```

### **Dérivées**

```texecole
$dy/dx$                          % dy/dx
$(d^2 y)/(dx^2)$                 % d²y/dx²
$partielle f / partielle x$          % ∂f/∂x
$(partielle u)/(partielle t) = (partielle^2 u)/(partielle x^2)$  % Équation chaleur
```

### **Matrices et systèmes**

**Formule compacte, en ligne :**

```texecole
$matrice(1 2 ; 3 4)$      % Matrice avec parenthèses
$matrice crochets(1 2 ; 3 4)$ % Matrice avec crochets
$det(1 2 ; 3 4)$          % Déterminant
```

**Bloc, sur plusieurs lignes — parenthèses ou crochets comme délimiteur :**

```texecole
<Affiche>la matrice(
	1	2	3
	-x	0	x^2
)

<Affiche>la matrice[
	1	0
	0	1
]
```

Parenthèses ou crochets s'écrivent une fois, à l'ouverture, et referment le bloc eux-mêmes — ce que l'on tape est ce que l'on voit au rendu. Le verbe seul, suivi de l'objet en toutes lettres (`<Affiche>la matrice(`, refermé par `)` seul — la même convention qui referme `<Trace>le cercle...`), sépare nettement la consigne de l'objet qu'elle concerne ; verbe et objet dans un seul chevron (`<Affiche la matrice(`, refermé par `)>`) reste équivalent pour qui préfère tout tenir entre les chevrons.

La même forme scindée s'applique aux objets **nommés**, gardés pour un calcul ultérieur — la matrice ou le système reçoit alors son nom avant l'ouverture, et les accolades neutres restent le délimiteur (les rangées contiennent déjà des parenthèses ou des crochets, dans une équation ou un coefficient) :

```texecole
<Soit>la matrice M {
	2	1
	1	1
}

<Soit>le système s {
	2x + 3y = 7
	x - y = 1
}
```

équivalent à `<Soit la matrice M>{...}` et `<Soit le système s>{...}`.

Pour qui préfère les accolades neutres, la forme équivalente reste disponible :

```texecole
<matrice>{
	1	2	3
	-x	0	x^2
}

<système>{
	2x	+ 3y	= 7
	x	- y	= 1
}
```

Comme tous les objets, `<matrice>` et `<système>` s'écrivent entre chevrons et en minuscules, accents compris (voir règle n°8). Dans ces blocs, la **tabulation** sépare les colonnes et le **saut de ligne** sépare les lignes ; avec parenthèses ou crochets, c'est le **point-virgule** qui sépare les colonnes (voir plus haut). Pour `<système>`, découper la ligne en plusieurs colonnes permet d'aligner sur plusieurs points à la fois (ici le signe `+` et le signe `=`), pas seulement sur le `=`.

### **Opérateurs avancés**

```texecole
$grad(f)$        % ∇f (gradient)
$div(F)$         % ∇·F (divergence)
$rot(F)$         % ∇×F (rotationnel)
$laplacien(f)$         % Δf (laplacien)
$dérivée directionnelle(f ; u)$ % ∇ᵤf (dérivée directionnelle)
```

### **Probabilités et statistiques**

```texecole
$C(n ; k)$        % Coefficient binomial ⁽ⁿₖ⁾
$A(n ; k)$        % Arrangement Aₙᵏ
$factorielle(n)$ % Factorielle n!
$n!$             % Factorielle (alternative)
$PP(A)$          % ℙ(A) Probabilité
$PP(A sachant B)$ % ℙ(A∣B) Probabilité conditionnelle
$EE(X)$ ou $espérance(X)$          % 𝔼(X) Espérance
$variance(X)$         % Var(X) Variance
$écart type(X)$   % σ(X) Écart-type
$covariance(X ; Y)$      % Cov(X,Y) Covariance
$normal(mu ; sigma)$     % 𝒩(μ,σ²) Loi normale
$poisson(lambda)$       % 𝒫(λ) Loi de Poisson
$binomiale(n ; p)$        % ℬ(n,p) Loi binomiale
$fonction de répartition(X ; x)$           % F_X(x) Fonction de répartition
$densité(X ; x)$          % f_X(x) Densité
```

---

## **📐 La géométrie**

Toute la géométrie — plane, dans l'espace, avec ou sans repère — se trace avec l'action [**`<Trace>`**](#les-actions) : figures planes, cercle trigonométrique, solides en 3D, points/droites/segments/médiatrices, y compris posés dans un repère. L'analyse se représente graphiquement avec [**`<Représente graphiquement>`**](#les-actions) : courbes de fonctions, diagrammes en escalier, statistiques, et le mode analytique dès que son contenu relève de l'analyse. Voir le chapitre **Les actions** pour le détail de chaque cas.

---

## **📊 Les statistiques**

### **📈 Diagrammes statistiques**

**Syntaxe :** `<Représente graphiquement une statistique TYPE données:DONNÉES>` — le type se met directement, sans préfixe `type:` (comme `<Dresse une liste à puces>` ou les figures de `<Trace>`). `données:` reste en clé:valeur : ce sont de vraies données structurées, pas un réglage de style.


| **Type**             | **Description**      | **Format données**          | **Exemple**                    |
| -------------------- | -------------------- | --------------------------- | ------------------------------ |
| `barres`             | Diagramme en bâtons  | \`clé:valeur                | clé:valeur\`                   |
| `histogramme`        | Histogramme          | `bornes:{...} effectifs:{...}` | `bornes:{0;5;10} effectifs:{3;7}` |
| `camembert`          | Diagramme circulaire | \`clé:valeur                | clé:valeur\`                   |
| `boite a moustaches` | Boîte à moustaches   | `valeur1 ; valeur2 ; ...`     | `données:{12 ; 15 ; 9 ; 21}`            |
| `nuage`              | Nuage de points      | `(x1;y1) (x2;y2) ...`       | `données:{(1;2) (2;3)}`           |


**Option :** `avec ajustement` (trace la droite de régression pour les nuages)

**Exemples :**

```texecole
<Représente graphiquement une statistique barres données:{1: 4 | 2: 7 | 3: 2}>
<Représente graphiquement une statistique camembert données:{Pommes: 5 | Poires: 3 | Bananes: 2}>
<Représente graphiquement une statistique histogramme bornes:{0 ; 5 ; 10 ; 20} effectifs:{3 ; 7 ; 2}>
<Représente graphiquement une statistique nuage données:{(1 ; 2,1) (2 ; 2,6) (3 ; 3,4)}, avec ajustement>
<Représente graphiquement une statistique boite a moustaches données:{12 ; 15 ; 9 ; 21 ; 14 ; 15 ; 18 ; 11 ; 16}>
```

**Avec variables Lua :**

```texecole
soit notes = {
    Mathematiques = 15,5;
    Francais = 12,0;
    Histoire = 14,0
}
<Représente graphiquement une statistique barres données:notes>
<Représente graphiquement une statistique camembert données:notes>
```

### **🌳 Arbres de probabilités**

**Syntaxe :**

```texecole
<Construis un arbre PROSE>{
    ÉTIQUETTE PROBABILITÉ {
        SOUS-ÉTIQUETTE PROBABILITÉ
        ...
    }
    ...
}
```

**Options :**

- `avec les produits` — Affiche P(A ∩ B) au bout de chaque feuille
- `horizontal` (flag, sans valeur) — Affiche l'arbre horizontalement

**Exemples :**

```texecole
<Construis un arbre>{
    A 0,3 {
        B 0,6
        !B 0,4
    }
    !A 0,7 {
        B 0,1
        !B 0,9
    }
}

<Construis un arbre horizontal, avec les produits>{
    A 0,3 {
        B 0,6
    }
    !A 0,7
}
```

**Règles :**

- `!` devant une étiquette = événement contraire
- Si une branche unique, le complément est ajouté automatiquement
- Les probabilités peuvent être des nombres ou des symboles

### **📏 Droite graduée**

**Syntaxe résolue (inéquation) :**

```texecole
<Représente graphiquement la droite graduée x:{-5 ; 5}>{
    abs(x - 1/2) >= 5/2
}
```

**Syntaxe déclarée (ensemble donné) :**

```texecole
<Représente graphiquement la droite graduée x:{-5 ; 5} intervalle:{[-2 ; 3) union (4 ; inf)} points:{-4}>
```

**Symboles :** `[`/`]` = inclus, `(`/`)` = exclu, `union`, `inf`, `-inf`

---

## **📄 Les documents complexes**

### **Exemple complet : Fiche d'exercices**

```texecole
% !TeX program = lualatex
\documentclass[marges=20, taille=12, précision=2]{texecole}

\begin{document}

% ===== Styles réutilisables =====
soit titre = <bleu marine b 18pt c>
soit sous-titre = <bleu marine b 14pt>
soit exercice = <bleu marine b subsection>
soit cadre-ex = <cadre avec une bordure bleu marine, un fond bleu Alice et des coins arrondis de 4mm>
soit important = <gras rouge souligné>
soit indication = <italique bleu>

% ===== En-tête =====
<Affiche une grille avec les zones:["titre titre logo", "info info logo"] et un écart de 5 mm>{
  [titre en mc]{
    <titre>Fiche d'Exercices - Équations et Fonctions
  }
  [logo en mc]{
    <Insère une image avec une largeur de 40 mm, dans le dossier {IMAGES}>{logo.png}
  }
  [info]{
    Nom: _______________ Prénom: _______________
    <ligne>
    Classe: _______ Date: ___________
  }
}

% ===== Table des matières =====
<table des matières>

% ===== Exercices =====
<exercice>Exercice 1 : Équations du second degré

<Affiche un cadre-ex>{
  Résoudre :
  <Dresse une liste numérotée>{
    $x^2 - 5x + 6 = 0$
    $2x^2 - 8x = 0$
    $x^2 - 7 = 0$
  }
  <indication>Indice :</indication> Utilisez $x = (-b +- racine(b^2 - 4ac))/(2a)$.
}

<exercice>Exercice 2 : Géométrie

<Affiche un cadre-ex>{
  <Trace>le triangle ABC rectangle en A, de côté AB 3 cm et de côté AC 4 cm, avec les marques
  
  Calculer :
  <Dresse une liste numérotée>{
    La longueur de l'hypoténuse BC = #{racine(3^2 + 4^2)} cm
    Le périmètre = #{3 + 4 + racine(3^2 + 4^2)} cm
    L'aire = #{3*4/2} cm²
  }
}

<exercice>Exercice 3 : Étude de fonction

<Affiche un cadre-ex>{
  <Soit>une fonction f(x) = x^2 - 4x + 3
  
  <Dresse le tableau de variations de f, x:{-infini | 2 | +infini},
      dérivée:{- | +}, variations:{+infini \ -1 / +infini}>
  <Représente graphiquement la fonction f pour x appartient à [-1 ; 5] et y à [-2 ; 4], en bleu, avec 200 échantillons>  % Courbe
}

<exercice>Exercice 4 : Statistiques

<Affiche un cadre-ex>{
  Notes : 12 (3x), 14 (12x), 16 (5x)
  
  <Représente graphiquement une statistique barres données:{12: 3 | 14: 12 | 16: 5}>
  
  Moyenne = #{ (12*3 + 14*12 + 16*5) / (3+12+5) }
}

\end{document}
```

---

## **🧭 Comprendre les erreurs et les cas particuliers**

Ce chapitre rassemble les points de détail qui, une fois compris, évitent la plupart des blocages. Il répond aux questions que se pose tout utilisateur dès son premier document un peu long.

### **🚦 Les messages d'erreur**

Quand texecole rencontre une faute, il l'annonce **en français**, en désignant la balise et la ligne fautives, plutôt que de laisser remonter le message LaTeX brut (souvent illisible). Les erreurs les plus fréquentes :

| **Ce que vous écrivez**              | **Message texecole**                                              |
| ------------------------------------ | ----------------------------------------------------------------- |
| `<Trace le point A>` sans avoir défini A | *Le point A n'a pas été défini. Déclarez-le d'abord avec `<Soit>un point A(...)`.* |
| `<Représente graphiquement la fonction f>` sans `<Soit>une fonction f` | *La fonction f n'a pas été déclarée.*                     |
| `Soit titre = ...` (majuscule pour une assignation) | *« Soit » avec majuscule est une action-phrase. Pour une assignation, écrivez `soit` en minuscule.* |
| `<Affiche un cadre>{...` (accolade non refermée) | *Accolade ouverte à la ligne N jamais refermée.*                  |
| `<Trace>un carré ABCD, de côté 5` (unité manquante) | *Longueur sans unité : écrivez « de côté 5 cm » ou « de côté 50 mm ». L'unité est obligatoire hors d'un repère.* |
| `données:{12, 15}` (virgule dans une liste numérique) | *Liste numérique : utilisez le point-virgule (`12 ; 15`).*  |

> **Pourquoi c'est important.** Un enseignant qui découvre LaTeX abandonnera au premier mur d'erreurs incompréhensibles. Des messages en français, qui nomment la cause et proposent la correction, sont ce qui distingue un outil pédagogique d'un compilateur. Si malgré tout un message LaTeX brut apparaît, c'est un cas non intercepté : signalez-le, il a vocation à être traduit.

### **🔭 La portée des `soit`**

Une assignation `soit x = ...` est **visible depuis sa déclaration jusqu'à la fin du document**, y compris à l'intérieur des blocs (`<Affiche un cadre>`, boucles `pour`, conditions `si`) ouverts *après* elle. À l'inverse, une variable déclarée **à l'intérieur** d'un bloc ne vit que dans ce bloc :

```texecole
soit tva = 0,2          % visible partout ensuite

<Affiche un cadre>{
  soit prix = 100       % visible seulement dans ce cadre
  Total : #{prix * (1 + tva)} €
}

% Ici, tva existe encore ; prix, non.
```

La variable d'une boucle (`pour n de 1 à 5`) ne vit que le temps de la boucle. Cette règle est celle qu'on attend naturellement : ce qu'on pose « en tête » sert partout, ce qu'on pose « dans un tiroir » reste dans le tiroir.

### **🔢 Calculs `#{...}` et virgule décimale**

Un calcul `#{...}` rend son résultat avec une **virgule décimale** (règle d'affichage française), arrondi selon l'option `précision` de la classe :

```texecole
#{5/2}        % → 2,5
#{1/3}        % → 0,333  (avec précision=3)
#{3*4/2}      % → 6      (résultat entier : pas de virgule)
```

**Attention à la collision avec les séparateurs.** Le résultat `2,5` contient une virgule *sans espace après* : le lexer la reconnaît comme décimale, jamais comme énumération (règle n°8). Vous pouvez donc écrire sans crainte `#{5/2}` dans une phrase. En revanche, si vous insérez un calcul **dans une liste numérique** (séparée par `;`), le résultat garde sa virgule décimale et le point-virgule reste le séparateur de liste — aucune ambiguïté :

```texecole
données:{#{5/2} ; #{7/2} ; 4}   % → 2,5 ; 3,5 ; 4
```

---

## **📚 Référence complète**

### **🎨 Référence des couleurs (147 disponibles)**

**Noirs, gris et blancs**
```
noir, blanc, gris, gris clair, gris foncé, gris perle, gris anthracite, gris souris, gris souris clair, gris souris foncé,
blanc fumé, blanc antique, blanc ivoire, blanc navajo, blanc fantôme, blanc neige, blanc lin, blanc coquillage, blanc vieille dentelle
```

**Rouges**
```
rouge, rouge clair, rouge foncé, rouge sang, rouge brique, rouge tomate, rouge corail, rouge indien,
rouge cramoisi, rouge saumon, rouge saumon foncé, rouge orange, rouge rosé, brique de feu
```

**Bleus**
```
bleu, bleu ciel, bleu clair, bleu azur, bleu canard, bleu turquoise, bleu marine, bleu nuit,
bleu foncé, bleu acier, bleu acier clair, bleu royal, bleu cornflower, bleu dodger, bleu poudre,
bleu Alice, bleu aigue-marine, bleu aigue-marine moyen, bleu slate, bleu slate clair, bleu slate foncé,
bleu slate moyen, bleu violet, bleu indigo, bleu lavande, bleu lavande rosé, bleu ciel profond
```

**Verts**
```
vert, vert clair, vert foncé, vert forêt, vert sapin, vert pomme, vert olive, vert olive foncé,
vert menthe, vert printanier, vert printanier moyen, vert de mer, vert de mer clair, vert de mer foncé,
vert de mer moyen, vert honeydew, vert pale, vert lawn, vert citron, vert lime, vert lime clair,
vert chartreuse, vert jaunâtre
```

**Jaunes et oranges**
```
jaune, jaune clair, jaune paille, jaune citron, jaune moutarde, jaune doré, jaune khaki, jaune khaki foncé,
orange, orange clair, orange corail, orange foncé, orange brique, orange rouge, orange sable,
verge d'or, verge d'or pâle, verge d'or clair, mousseline de citron
```

**Violets et magentas**
```
violet, violet clair, violet foncé, violet moyen, violet rouge, violet rouge moyen,
violet rouge pâle, violet orchidée, violet orchidée foncé, magenta, fuchsia, chardon
```

**Marrons et terres**
```
marron, brun, brun clair, brun foncé, brun chocolat, brun rosé, brun peru, tan,
marron selle, marron sable, terre de Sienne, olive, olive terne
```

**Autres couleurs**
```
cyan, cyan clair, cyan foncé, aigue-marine, aigue-marine moyen, turquoise, turquoise clair,
turquoise foncé, turquoise moyen, turquoise pâle, corail, corail clair, saumon, saumon clair,
saumon foncé, or, argent, rose, rose clair, rose profond, rose vif, rose brumeux,
pêche duveteuse, prune, bleu poudre, pourpre, fouet de papaye, coquillage, soie de maïs,
biscuit, cramoisi, lavande, vieille dentelle, lin, mocassin, neige, blé
```

### **Options de classe**


| **Option**   | **Type**           | **Défaut**           | **Description**                |
| ------------ | ------------------ | -------------------- | ------------------------------ |
| `marges`     | nombre/tableau     | `20;2`               | Marges en mm                   |
| `police`     | texte (MAJUSCULES) | `Latin Modern Roman` | Police du texte                |
| `math`       | texte (MAJUSCULES) | `Latin Modern Math`  | Police mathématique            |
| `taille`     | nombre             | `11`                 | Taille de base (pt)            |
| `interligne` | nombre             | `1,0`                | Coefficient d'interligne       |
| `tabulation` | nombre             | `8`                  | Largeur tabulation (mm)        |
| `hauteur`    | nombre             | `8`                  | Hauteur saut de ligne (mm)     |
| `décalage`   | nombre             | `100`                | Décalage exposants/indices (%) |
| `précision`  | nombre             | `-1`                 | Décimales pour arrondi         |

---

## **💡 Bonnes pratiques**

1. **Structurez** : Définissez vos styles en tête avec `soit`
2. **Factorisez** : Utilisez `soit` pour éviter la répétition
3. **Nommez clairement** : Utilisez des noms explicites
4. **Documentez** : Commentez les parties complexes
5. **Testez** : Vérifiez les calculs `#{...}`
6. **Organisez** : regroupez vos images dans un dossier de votre choix (`IMAGES`, `FIGURES`...), avec des noms clairs, et indiquez ce dossier à chaque insertion — texecole n'en cherche jamais un par défaut

## **🧮 Le calcul scientifique étendu**

Ce chapitre détaille tout ce que débloque le second moteur de calcul,
SymPy — le premier moteur, le moteur interne (sans rien à installer),
est présenté dans
[Poser et résoudre un système](#poser-et-résoudre-un-système) ; il
couvre l'arithmétique exacte, les systèmes linéaires et l'évaluation
numérique `#{...}`.

Dès que Python 3 et SymPy sont installés (et la compilation lancée
avec `lualatex --shell-escape`), texecole confie automatiquement les
calculs symboliques à SymPy et les calculs numériques avancés à SciPy
— aucune option à activer, les phrases de calcul formel appellent le
moteur externe d'elles-mêmes. Chaque résultat s'affiche en notation
française, virgule décimale comprise.

### Le calcul formel (SymPy)

| Phrase | Effet |
|---|---|
| `<Factorise EXPR>` | Factorisation |
| `<Développe EXPR>` ou `<Développe et réduis EXPR>` | Développement |
| `<Simplifie EXPR>` | Simplification |
| `<Décompose en éléments simples EXPR>` | Éléments simples |
| `<Calcule la forme canonique de EXPR>` ou `<Mets EXPR sous forme canonique>` | Trinôme canonique |
| `<Résous l'équation EXPR = EXPR>` | Résolution dans ℝ |
| `<Résous dans CC l'équation ...>` | Domaine : `RR`, `CC`, `ZZ`, `NN`, `QQ` ou `les complexes`, `les entiers`... |
| `<Calcule la somme de EXPR pour k de a à b>` | Forme close de la somme |
| `<Calcule le produit de EXPR pour k de a à b>` | Forme close du produit |
| `<Calcule la dérivée de f>` / `<Calcule la dérivée seconde de f>` | Dérivées (fonction posée par `<Soit>`) |
| `<Calcule la primitive de f>` | Primitive |
| `<Détermine les zéros de f>` | Ensemble des zéros |
| `<Calcule la limite de f en a>` (+ `à droite` / `à gauche`) | Limite |
| `<Calcule le développement limité de f en a à l'ordre n>` | DL avec reste de Landau |
| `<Calcule les racines n-ièmes de z>` | Racines complexes, ordinal en toutes lettres (`carrées`... `douzièmes`), `l'unité` admis pour 1 |
| `<Calcule l'intégrale numérique de f entre a et b>` | Valeur approchée |

### Les équations différentielles

La notation prime se lit telle quelle ; l'inconnue et sa variable se
déclarent au besoin :

```
<Résous l'équation différentielle y'' + 4y = 0>
<Résous l'équation différentielle N' = -0,12N, d'inconnue N(t)>
```

Les équations aux dérivées partielles du premier ordre linéaire
s'écrivent en notation indicée (`u_x`, `u_y`, `u_xx`...) :

```
<Résous l'équation aux dérivées partielles u_x + u_y = u>
```

Au-delà du premier ordre, SymPy ne sait pas résoudre symboliquement et
texecole le dit en français.

### L'algèbre linéaire calculée

Une matrice posée par `<Soit la matrice M>{...}` accepte, outre
`<Calcule le déterminant de M>` et `<Calcule l'inverse de M>` :

```
<Calcule les valeurs propres de M>
<Diagonalise M>
```

Les valeurs propres s'affichent avec leurs multiplicités ; la
diagonalisation donne P et D avec M = P D P⁻¹, ou explique pourquoi la
matrice n'est pas diagonalisable.

### Le calcul numérique (SciPy)

| Phrase | Effet |
|---|---|
| `<Résous numériquement l'équation EXPR = EXPR sur [a ; b]>` | Racine par dichotomie de Brent — l'intervalle doit encadrer un changement de signe |
| `<Calcule la probabilité que X <= a pour la loi normale(m ; s)>` | Probabilité ; opérateurs `<=`, `>=`, `=`, `<`, `>` |
| `<Calcule le quantile d'ordre p de la loi ...>` | Quantile |
| `<Calcule l'espérance de la loi ...>` / `<Calcule l'écart type de la loi ...>` | Moments |
| `<Ajuste f(x) = a*exp(b*x) aux données {(0;1) (1;2,7) ...}>` | Moindres carrés non linéaires ; paramètres libres a, b, c, d |

Les lois reconnues : `normale(m ; s)`, `binomiale(n ; p)`,
`poisson(l)`, `uniforme(a ; b)`, `exponentielle(l)` (paramètre λ, à la
française), `student(k)`, `khi-deux(k)`.

## **🖋️ Les tournures et le placement**

### Les verbes d'objets

Chaque phrase peut commencer par un verbe : `<Affiche ...>`,
`<Dresse ...>`, `<Construis ...>` et `<Insère ...>` s'acceptent devant
tout objet, article compris.

```
<Dresse un tableau bordures entête>{ ... }
<Affiche une liste à puces>{ ... }
<Insère une image avec une largeur de 30 mm, dans le dossier {IMAGES}>{photo.png}
<Dresse le tableau de signes de f>
```

### Les tournures du supérieur

`<On pose>`, `<On considère>` et `<On note>` sont synonymes de `<Soit>`
et s'affichent avec leur verbe. `<Étudie les variations de f>` vaut le
tableau de variations.

### La factorisation des points

Les points se regroupent sous un article pluriel :
`<Soit>les points A(2;3) et B(-1;4)` — la forme « un point... et un
point... » est refusée avec un rappel de la règle.

### Les bornes naturelles

```
<Représente graphiquement la fonction f sur [-2 ; 5], en ordonnée [0 ; 3], en bleu>
<Représente graphiquement la droite graduée sur [-3 ; 4], d'intervalle {[-2, 3)} et de points {1}>
```

### Les réglages en toutes lettres

`avec 200 échantillons`, `avec l'aire entre 0 et 1`,
`avec l'aire jusqu'à g`, `de 4 colonnes`, `de 2 lignes`,
`de bornes {0 ; 5 ; 10}`, `d'effectifs {3 ; 7}`.

### Le placement en langage naturel

Dans les cellules et les zones, les codes deux lettres demeurent
(`mc`, `hg`...) et se doublent des mots : `en haut`, `au milieu`,
`en bas` pour la verticale ; `à gauche`, `au centre`, `à droite` pour
l'horizontale — combinables (`en haut, à gauche`). Hors cellule, un
paragraphe s'aligne par `<à gauche>`, `<au centre>`, `<à droite>`.

### Les zones de grille

Le plan `zones:["titre titre logo", "corps corps logo"]` nomme les
zones ; chaque zone s'écrit `[nom, propriétés]{contenu}` ou
`[nom : propriétés]{contenu}`, les propriétés en toutes lettres :

```
[titre : en haut, à gauche, une bordure bleu marine, un fond bleu Alice]{ ... }
[corps en mc]{ ... }
```

Au niveau de la grille, `bordures`, `une bordure <couleur>`,
`fond <couleur>` et `texte <couleur>` posent les défauts que chaque
zone peut surcharger. Une rangée de cadres côte à côte s'obtient par
`<Affiche une rangée, écart de 5 mm>{ ... }`.

### Les données nommées

Une table de données se déclare et se réutilise par son nom, ses
entrées en `clé: valeur` comme les données en ligne :

```
soit sondage = {
	Jeudi: 8
	Lundi: 5
	Mardi: 3
}

<Représente graphiquement une statistique en barres horizontal données:sondage>
```

---

## **🗺️ Feuille de route**

**texecole 1.0 est une première mouture.** Le langage, la syntaxe en prose française et le moteur de calcul (`interne` comme `sympy`) sont stables et couvrent déjà la quasi-totalité des besoins d'un enseignant du secondaire et du début du supérieur. Le projet continue cependant d'évoluer, avec deux grands chantiers en vue :

- **La géométrie et les sciences en 3D.** `<Trace>` sait aujourd'hui construire quelques solides usuels (voir [Solides en 3D](#solides-en-3d)) ; les prochaines versions viseront des scènes 3D plus riches et davantage interactives, pensées pour la physique-chimie autant que pour la géométrie dans l'espace.
- **Un calcul scientifique étendu.** Au-delà de ce que couvrent aujourd'hui le moteur interne et SymPy (voir [Le calcul scientifique étendu](#le-calcul-scientifique-étendu)), davantage de possibilités de calcul sont prévues, en mathématiques comme dans les autres sciences enseignées.

Ces évolutions se feront sans rien retirer : la syntaxe en prose française et la compatibilité des documents existants restent la priorité à chaque nouvelle version. Les retours d'usage (bugs, tournures manquantes, besoins non couverts) sont les bienvenus sur le dépôt du projet.

