Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 417 minDébutant

Markdown : la syntaxe pour écrire sa documentation

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • expliquer ce qu'est Markdown et pourquoi il sert à documenter ;
  • écrire titres, listes, liens, images, tableaux et blocs de code ;
  • utiliser les extensions de GitHub : alertes, cases à cocher, Mermaid ;
  • éviter les erreurs de rendu les plus fréquentes.

4 exercices corrigés1 schéma

Markdown est un langage de balisage léger : tu écris du texte brut avec quelques symboles (#, *, -, `), et un logiciel les transforme en titres, listes, liens, tableaux et blocs de code. Créé en 2004 par John Gruber, il est devenu le format des fichiers README.md, des wikis, des générateurs de sites de documentation et de la plupart des outils de développement. Ce chapitre donne toute la syntaxe utile, les extensions de GitHub et les pièges qui cassent un rendu.

Pourquoi documenter en Markdown

  • Le fichier reste lisible sans rendu. Un # devant un titre, des tirets devant une liste : même ouvert dans le Bloc-notes ou avec cat, le texte se comprend.
  • Il se versionne avec Git. C'est du texte : git diff montre exactement les lignes modifiées, une pull request permet de relire une documentation comme du code. Un fichier .docx est une archive binaire, dont Git ne sait pas montrer les différences.
  • Il s'affiche partout. GitHub et GitLab l'affichent dans le navigateur, VS Code a un aperçu intégré, les wikis BookStack et Wiki.js ont un éditeur Markdown, et les générateurs de sites de documentation (chapitre 6) le transforment en site web.
  • Il se convertit. Un outil comme Pandoc produit un fichier Word, HTML ou PDF à partir du même fichier.

Sa limite : il n'existe pas un Markdown. La spécification de référence s'appelle CommonMark (version 0.31.2, publiée en janvier 2024) ; GitHub l'étend avec le GitHub Flavored Markdown (GFM), qui ajoute les tableaux, les cases à cocher, le texte barré et les liens automatiques. Chaque outil ajoute ensuite ses propres extensions. Ce chapitre signale ce qui n'est pas du CommonMark de base.

Ce que tu écris (README.md)Ce qui s'affiche## Installation1. Clone le dépôt : `git clone …`2. Lance `npm ci` **une fois**.| Variable | Rôle ||---|---|| PORT | port d'écoute |> Ne commite pas le> fichier .env.Installation1. Clone le dépôt : git clone …2. Lance npm ci une fois.VariableRôlePORTport d'écouteNe commite pas lefichier .env.
Le même fichier : le texte brut que tu écris, et ce qu'affichent GitHub, VS Code ou un wiki

Titres et paragraphes

Un titre commence par un à six #, suivis d'une espace. Un paragraphe est un bloc de lignes séparé des autres par une ligne vide.

markdown
# Wiki interne de Sorbier Logistique

Le wiki rassemble les procédures et les guides du service informatique.
Cette phrase, écrite à la ligne, appartient au même paragraphe.

## Installation

### Prérequis
  • Un seul titre de niveau 1 par document : le nom du projet ou du document. Les sections sont en ##, les sous-sections en ###.
  • Pas de saut de niveau : un ### vient sous un ##, jamais directement sous un #.
  • Un retour à la ligne simple ne crée pas de nouvelle ligne dans le rendu : les deux lignes du paragraphe ci-dessus s'affichent bout à bout. Pour forcer un retour à la ligne sans changer de paragraphe, termine la ligne par une barre oblique inverse \ (ou par deux espaces, invisibles et donc fragiles). Le plus souvent, une ligne vide pour un nouveau paragraphe est la meilleure solution.

Mettre en forme le texte

markdown
Le service **doit** être redémarré. Le terme *idempotent* est défini plus bas.
Tape `systemctl status nginx` pour vérifier. ~~Ancienne adresse~~ (GFM)
Pour afficher un astérisque littéral, échappe-le : 5 \* 3.
Tu écrisTu obtiensUsage en documentation
**texte**texte en grasLes éléments d'interface, un mot important
*texte*texte en italiqueUn terme défini, un mot étranger
`texte`texte en police à chasse fixeCommande, nom de fichier, valeur à saisir
~~texte~~texte barré (GFM)Rare : une information obsolète laissée visible
\*un astérisque littéralAfficher un symbole que Markdown interpréterait

Les listes

markdown
Prérequis :

- un compte d'administration Proxmox ;
- le modèle 9000 ;
- une adresse réservée dans le plan d'adressage.

1. Crée le clone.
2. Branche la carte dans le VLAN 21.
   - Le modèle est dans le VLAN 20 : ne saute pas cette étape.
3. Démarre la VM.
  • Une liste à puces commence par - (ou *, ou + : choisis un symbole et garde-le).
  • Une liste numérotée commence par 1. ; le rendu renumérote tout seul, mais écris les vrais numéros : le fichier brut doit rester lisible.
  • Une sous-liste est indentée pour s'aligner sous le texte de l'élément parent : trois espaces sous 1. , deux sous - .
  • Laisse une ligne vide avant une liste : collée à un paragraphe, elle s'affiche bien sur GitHub, mais Zensical, MkDocs et certains wikis la collent au paragraphe, comme du texte ordinaire.

Liens et images

markdown
Voir la [procédure de déploiement](docs/exploitation/deploiement.md).
Voir la section [Installation](#installation) de ce document.
Documentation officielle : [Proxmox VE](https://pve.proxmox.com/pve-docs/).

![Onglet Hardware de la VM 190 : la carte net0 est sur vmbr0 avec le tag 21](img/vm190-hardware.png)
  • [texte](adresse) crée un lien. Le texte doit dire où mène le lien : « procédure de déploiement », jamais « ici ».
  • Un lien relatif (docs/exploitation/deploiement.md) pointe vers un fichier du même dépôt : il continue de fonctionner quand le dépôt est cloné, déplacé ou publié. Sur GitHub, il suit la branche que tu consultes.
  • #installation pointe vers un titre du même document : les outils fabriquent l'ancre à partir du texte du titre, en minuscules, les espaces remplacées par des tirets.
  • Une image s'écrit comme un lien précédé de ! ; le texte entre crochets est le texte alternatif, qui décrit l'image pour ceux qui ne la voient pas (chapitre 2). Range les images dans un dossier img/ ou docs/img/ à côté des fichiers Markdown.

Les blocs de code

Tout ce qui se tape ou se copie va dans un bloc de code, entouré de trois accents graves, avec le nom du langage pour la coloration :

markdown
```bash
qm clone 9000 190 --name srv-wiki --full --storage truenas-nfs
```

```powershell
Resolve-DnsName srv-wiki.ad.sorbier.example
```

```yaml
openapi: 3.1.2
```

Les noms de langage les plus utiles : bash, powershell, sql, python, javascript, csharp, php, yaml, json, ini, nginx, et text pour un contenu sans coloration (une sortie de commande, un fichier de journal). Pour montrer un bloc de code à l'intérieur d'un exemple Markdown, comme ci-dessus, entoure le tout de quatre accents graves.

Les tableaux

Les tableaux viennent du GitHub Flavored Markdown ; la plupart des outils les acceptent.

markdown
| VLAN | Nom    | Réseau            | Passerelle     |
|-----:|--------|-------------------|----------------|
| 20   | SERVEURS | 192.168.10.176/28 | 192.168.10.190 |
| 21   | APPLIS | 192.168.21.0/24   | 192.168.21.254 |
  • La deuxième ligne, faite de tirets, transforme la première en ligne d'en-tête ; elle doit avoir le même nombre de colonnes.
  • Les deux-points règlent l'alignement : :--- à gauche, :---: au centre, ---: à droite (utile pour les nombres).
  • Les colonnes n'ont pas besoin d'être alignées dans le fichier brut : c'est plus joli, pas obligatoire.
  • Une barre verticale dans une cellule s'écrit \|.
  • Pas de cellules fusionnées ni de retour à la ligne dans une cellule : si ton tableau en a besoin, c'est qu'il faut le découper ou en faire une liste.

Citations, alertes et autres extensions

markdown
> Une citation : un message d'erreur, la demande d'un utilisateur.

> [!WARNING]
> L'étape suivante redémarre le serveur.

- [x] Plan d'adressage mis à jour
- [ ] VM ajoutée à la supervision

La sauvegarde suit la règle 3-2-1[^1].

[^1]: Trois copies, deux supports, une copie hors site.

---
  • > crée une citation.
  • > [!NOTE] en première ligne d'une citation crée une alerte sur GitHub, qui en connaît cinq : NOTE (une information utile), TIP (un conseil), IMPORTANT (une information nécessaire pour réussir), WARNING (un risque à connaître tout de suite) et CAUTION (les conséquences négatives d'une action). GitHub recommande d'en mettre peu, une ou deux par page, et jamais l'une dans l'autre. D'autres outils ont leur propre syntaxe : !!! note pour Zensical et MkDocs, :::note pour Docusaurus.
  • - [ ] et - [x] font des cases à cocher (GFM), pratiques pour une liste de contrôle.
  • [^1] crée une note de bas de page (GFM).
  • --- seul sur sa ligne, entre deux lignes vides, trace une ligne horizontale.

Des diagrammes en texte avec Mermaid

GitHub, GitLab et la plupart des outils de documentation affichent un bloc de code marqué mermaid comme un diagramme. Le schéma vit dans le fichier, se versionne et se modifie comme du texte :

markdown
```mermaid
flowchart LR
    P["Postes<br/>VLAN 10"] --> F["pfSense pf1"]
    F --> W["srv-wiki<br/>VLAN 21"]
    F --> AD["srv-ad, srv-ad2<br/>VLAN 20"]
    W -. "authentification LDAPS" .-> AD
```

Mermaid est idéal pour un petit schéma de flux ou un diagramme de séquence dans un README. Pour un schéma réseau complet, avec des icônes et une mise en page soignée, draw.io reste plus adapté (chapitre 9). Le cours UML compare Mermaid, PlantUML et draw.io.

Les pièges du Markdown

SymptômeCauseCorrection
La liste s'affiche sur une seule ligne, collée au paragraphePas de ligne vide avant la liste (exigée par Zensical, MkDocs et certains wikis ; pas par GitHub)Ajoute une ligne vide
Le bloc de code ne s'affiche pas, les commandes sont en texte normalTrois apostrophes ''' au lieu de trois accents gravesL'accent grave est sur AltGr + 7 sur un clavier français
La sous-liste remonte au niveau principalIndentation insuffisanteAligne la sous-liste sous le texte de l'élément parent
Le tableau s'affiche en texte brutLigne de tirets absente, ou nombre de colonnes différentVérifie la deuxième ligne et compte les barres verticales
Un mot apparaît en italique sans raisonUn _ ou un * dans un nom (mon_fichier_test)Mets le nom en code, ou échappe le caractère
Le lien vers un fichier du dépôt renvoie une erreur 404 sur GitHubCasse différente (Docs/ au lieu de docs/)Respecte la casse exacte ; nomme les fichiers en minuscules, avec des tirets
Le lien s'affiche en texte brut, crochets comprisUne espace dans l'adresseEncode-la en %20, ou renomme le fichier sans espace
Une ligne commençant par un nombre devient une liste2026. Une année chargée.Échappe le point : 2026\. Une année chargée.

Les outils

  • VS Code : ouvre l'aperçu avec Ctrl + Maj + V, ou à côté du fichier avec Ctrl + K puis V. L'extension markdownlint signale les erreurs de structure au fil de la frappe (saut de niveau de titre, ligne vide manquante autour d'un titre ou d'une liste).
  • Pandoc convertit un fichier Markdown dans de nombreux formats : pandoc guide.md -o guide.docx produit un document Word, utile quand un client exige ce format. La conversion en PDF passe par un moteur PDF à installer en plus.
  • Les wikis et les générateurs de sites ont leur éditeur ou leur aperçu ; ils ajoutent souvent leurs propres extensions, à vérifier dans leur documentation avant de s'en servir.

Exercices

Exercice 1 sur 4 Écrire en Markdown Réussi À revoir

Écris le Markdown qui produit ce contenu : un titre de niveau 2 « Variables d'environnement » ; une phrase qui dit que le fichier .env.example sert de modèle, avec le nom du fichier en police à chasse fixe ; un tableau de trois colonnes (Variable, Rôle, Exemple) avec deux lignes : PORT, port d'écoute de l'API, 3000 ; DB_HOST, adresse du serveur MySQL, 192.168.21.23 ; puis la commande cp .env.example .env dans un bloc de code Bash.

Voir la réponseMasquer la réponse de l'exercice 1
markdown
## Variables d'environnement

Le fichier `.env.example` sert de modèle : copie-le, puis remplis tes valeurs.

| Variable | Rôle | Exemple |
|---|---|---|
| `PORT` | Port d'écoute de l'API | `3000` |
| `DB_HOST` | Adresse du serveur MySQL | `192.168.21.23` |

```bash
cp .env.example .env
```

Vérifie les lignes vides : avant et après le tableau, avant et après le bloc de code.

Tu avais trouvé ?

Exercice 2 sur 4 Trouver les erreurs Réussi À revoir

Ce fichier contient quatre erreurs : deux cassent son affichage sur GitHub, les deux autres faussent sa structure ou cassent l'affichage dans d'autres outils (Zensical, MkDocs). Trouve-les.

markdown
# Wiki de Sorbier
### Sauvegarde
Les étapes :
1. Arrêter le service
2. Lancer le script
'''bash
sudo /opt/wiki/sauvegarde.sh
'''
| Fichier | Rôle |
| sauvegarde.sh | Sauvegarde la base et les pièces jointes |
Voir la réponseMasquer la réponse de l'exercice 2
  1. Saut de niveau : ### directement sous #. Il faut ## Sauvegarde. GitHub l'affiche, mais la hiérarchie est fausse (lecteurs d'écran, sommaire) ; markdownlint le signale.
  2. Pas de ligne vide avant la liste : « Les étapes : » et la liste sont collées. GitHub affiche quand même la liste, mais Zensical et MkDocs (qui utilisent Python-Markdown) la collent au paragraphe : ajoute une ligne vide.
  3. Trois apostrophes au lieu de trois accents graves : le bloc de code ne s'ouvre pas. Il faut ```bash et ```, avec une ligne vide avant.
  4. Le tableau n'a pas de ligne de séparation (|---|---|) sous l'en-tête : il s'affiche en texte brut.

Tu avais trouvé ?

Exercice 3 sur 4 Un lien qui casse Réussi À revoir

Dans le dépôt de l'intranet, le README contient [guide de déploiement](Docs/deploiement.md). Le fichier existe bien : docs/deploiement.md. Sur le poste Windows de Chloé, le lien fonctionne dans l'aperçu de VS Code ; sur GitHub, il renvoie une erreur 404. Explique et corrige.

Voir la réponseMasquer la réponse de l'exercice 3

La casse : le dossier s'appelle docs, le lien dit Docs. Windows ne distingue pas les majuscules des minuscules dans les noms de fichiers, d'où le lien qui marche chez Chloé ; GitHub, si. Corrige le lien : [guide de déploiement](docs/deploiement.md). Pour ne plus tomber dans le piège, nomme fichiers et dossiers en minuscules, sans espace ni accent ; un renommage se fait avec git mv pour que Git le suive.

Attention aussi aux espaces : [texte](Docs/Déploiement Intranet.md) n'est même pas reconnu comme un lien, ni sur GitHub ni dans VS Code, car une adresse ne peut pas contenir d'espace ; il faudrait l'encoder en %20 ou l'entourer de chevrons <…>.

Tu avais trouvé ?

Exercice 4 sur 4 Un petit diagramme Réussi À revoir

Écris un bloc Mermaid de type flowchart LR qui montre le circuit d'un ticket chez Sorbier : « Ouvert », puis « En cours », puis « Résolu », avec une flèche de retour de « Résolu » vers « En cours » étiquetée « l'utilisateur conteste ».

Voir la réponseMasquer la réponse de l'exercice 4
markdown
```mermaid
flowchart LR
    O["Ouvert"] --> C["En cours"]
    C --> R["Résolu"]
    R -- "l'utilisateur conteste" --> C
```

Les guillemets autour des libellés évitent les erreurs quand un libellé contient une espace, une apostrophe ou un accent. Les trois statuts sont ceux de la colonne statut de la table ticket de la base parc (ouvert, en_cours, resolu).

Tu avais trouvé ?

Chapitre terminé !

Fais les 4 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : README et CHANGELOG : écrire et versionnerRevoir le sommaire du cours