Version 2025-06
Licence CC–BY–NC–ND
LANGAGE : MARKDOWN
Christophe Schlick
schlick ಄ u-bordeaux • fr
Comme indiqué dans le chapitre d'introduction, les cellules de texte présentes dans un notebook Jupyter, vont être écrites et formatées en utilisant la syntaxe du langage Markdown. La documentation complète du langage Markdown se trouve le site markdownguide.org, mais une copie locale est directement accessible dans le menu Help de JupyterLab, sous le titre Markdown Reference.
En pratique, il s'avère que ce langage est tellement simple que la lecture d'un simple exemple commenté (comme celui présenté dans ce notebook) permet de comprendre la quasi-totalité de ses fonctionnalités. Pour étudier le contenu du notebook et comprendre les commandes Markdown mises en oeuvre, l'idéal est de sélectionner chaque cellule à tour de rôle (clic sur la marge gauche) puis d'alterner entre le mode edit (appui sur ENTER ) pour voir la syntaxe du document Markdown, et le mode view (appui sur CTRL + ENTER ) pour voir le résultat visuel.
Ceci est un titre de niveau 1
= ligne préfixée par #
Ceci est un titre de niveau 2
= ligne préfixée par ##
Ceci est un titre de niveau 3
= ligne préfixée par ###
Ceci est un titre de niveau 4
= ligne préfixée par ####
Ceci est un titre de niveau 5
= ligne préfixée par #####
Ceci est un paragraphe standard aligné à gauche et libre à droite. Toutes les lignes attenantes sont insérées dans le même paragraphe. Seul un saut de ligne permet de créer un nouveau paragraphe. Ceci est un paragraphe standard aligné à gauche et libre à droite. Toutes les lignes attenantes sont insérées dans le même paragraphe. Seul un saut de ligne permet de créer un nouveau paragraphe. Ceci est un paragraphe standard aligné à gauche et libre à droite.
Ceci est un nouveau paragraphe qui sert d'entête à une citation :
= ligne préfixée par >
Ceci est une citation qui va être indentée à gauche et à droite. Toutes les lignes attenantes sont insérées dans la même citation. Seul un saut de ligne permet de créer un nouveau paragraphe ou une nouvelle citation
Ceci est une nouvelle citation qui sert d'entête à une citation secondaire :
Ceci est une citation secondaire qui va donc être doublement indentée à gauche et à droite Toutes les lignes attenantes sont insérées dans la même citation. Seul un saut de ligne permet de créer un nouveau paragraphe ou une nouvelle citation
Ceci est un nouveau paragraphe qui sert d'entête à une énumération :
= suite de lignes préfixées par 1.
- Mon premier est une boisson
- Mon second est une boisson
- Mon troisième est une boisson
- Mon tout est une boisson
Ceci est un nouveau paragraphe qui sert d'entête à une liste :
= suite de lignes préfixées par * ou -
- Elément contenant du texte en italique
= texte encadré par * ... * ou _ ... _ - Elément contenant du texte en gras
= texte encadré par ** ... ** ou __ ... __ - Elément contenant du texte en italique gras
= texte encadré par *** ... *** ou ___ ... ___ - Elément contenant du
texte barré
= texte encadré par ~ ... ~ ou ~~ ... ~~ - Elément contenant une case cochée
= texte préfixé par un [X] - Elément contenant une case non cochée
= texte préfixé par un [ ]
Ceci est un nouveau paragraphe qui sert d'entête à une autre liste :
= suite de lignes préfixées par * ou -
- Elément contenant des caractères Unicode quelconques : 🙂👍🌞⛔
= faire un copier-coller depuis un document contenant le caractère souhaité - Elément contenant des caractères Unicode quelconques : ♠ ♣ ♥ ♦
= code décimal du caractère encadré par &# ... ; (syntaxe HTML) - Elément contenant une équation mathématique : $e^{\,i\pi} + 1 = 0$
= texte encadré par $ ... $ (syntaxe LaTeX) - Elément contenant un extrait de code source :
x, y = minmax(x, y)
= texte encadré par ` ...` ou`` ... `` - Elément contenant un lien hypertexte local : Jupyter Logo
= texte encadré par [ ... ] et adresse encadrée par ( ... ) - Elément contenant un lien hypertexte distant : Jupyter Website
= adresse préfixée par 'http://' ou autre protocole standard - Elément contenant lui-même une liste :
= suite de lignes indentées, préfixées par * ou -- aaa
- bbb
- ccc
- Element contenant lui-même une énumération :
= suite de lignes indentées, préfixées par 1.- aaa
- bbb
- ccc
Ceci est un nouveau paragraphe qui sert d'entête à un bloc d'équations :
= bloc encadré par $$ ... $$
$$\left\{\begin{align} e^{\,i\pi} + 1 &= 0 &&\textrm{(identité d'Euler)}\\ F(\omega) &= \int_{-\infty}^{+\infty} f(t)\,e^{-2\pi i\, \omega t}\, dt &&\textrm{(transformée de Fourier continue)}\\ S_m &= \sum_{n\,=\,0}^{N-1} s_n\, e^{-2\pi i\frac{m\,n}{N}} &&\textrm{(transformée de Fourier discrète)} \end{align}\right.$$
Ceci est un nouveau paragraphe qui sert d'entête à un bloc de code :
= bloc encadré par ``` ... ``` ou ~~~ ... ~~~
def fibo(n):
a, b = 0, 1
for loop in range(n):
a, b = b, a + b
return a
Ceci est un nouveau paragraphe qui sert d'entête à une image :
= lien hypertexte préfixé par !
Avec la syntaxe Mardown, les images matricielles (formats PNG, JPG, GIF...) sont insérées avec une taille par défaut correspondant à leur résolution en pixels, et sont systématiquement alignées sur la marge gauche du notebook :

Pour changer la taille ou l'alignement des images, il faut passer par la syntaxe HTML :
Avec la syntaxe Mardown, les images vectorielles (formats SVG, VL, EPS...) sont insérées avec une taille par défaut correspondant à la largeur de page du notebook (il ne peut donc y avoir qu'une image sur une même ligne) :
Pour afficher plusieurs images vectorielles sur une même ligne, changer leur taille ou leur alignement, il faut passer par la syntaxe HTML :
Ceci est un nouveau paragraphe qui sert d'entête à une table :
= cellules encadrées par | ... |
| Titre A | Titre B | Titre C |
|---|---|---|
| aa | aa | aa |
| bbbb | bbbb | bbbb |
| cccccc | cccccc | cccccc |
| dddddddd | dddddddd | dddddddd |
| colonne alignée à gauche | colonne centrée | colonne alignée à droite |
On peut mélanger arbitrairement du texte, du code, des équations, des images et des liens hypertextes dans une table :
| Jupyter | Python | Numpy | Scipy | Sympy | Pandas | Matplotlib |
|---|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Si on souhaite créer des tables avec une mise en page plus complexe, il faut à nouveau passer par la syntaxe HTML :
| Colonne A | Colonne B | Colonne C | Colonne D | |
|---|---|---|---|---|
| Ligne 1 | aa | ♠ ♣ |
♥ ♦ |
aa |
| Ligne 2 | bbbb | bbbb | ||
| Ligne 3 | cccccc | cccccc | ||
| Ligne 4 | dddddddd | $e^{\,i\pi} + 1 = 0$ | dddddddd | |
| Ligne 5 | |
|
||
Comme on l'a vu ci-dessus pour le cas des images et des tables, l'inclusion de code HTML dans une cellule de texte écrite en Markdown permet d'obtenir un contrôle beaucoup plus précis de la mise en page, ce qui peut s'avérer utile de temps en temps. Néanmoins, pour ne pas alourdir la structure des cellules de texte, il faut veiller à ce que le recours au code HTML reste assez rare dans les notebooks. Habituellement, on considère que l'inclusion de code HTML n'est judicieux que pour les quatre situations suivantes :
- mettre en forme les titres des chapitres et des sections d'un notebook
- inclure des images dont on souhaite modifier la taille et/ou la position
- inclure des éléments audio ou vidéo
- créer des tables avec une composition complexe (les tables qui ne sont pas de simples matrices)
La plupart du temps, les balises HTML incluses dans les cellules de texte vont utiliser la propriété style=... qui donne accès aux différents paramètres standards fournis par le langage CSS (Cascading Style Sheets). Par exemple, on peut intégrer directement une ligne ou un paragraphe formaté par des paramètres CSS, comme dans cet exemple déjà rencontré à la fin du chapitre 1 :
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Les balises <audio> et <video> sont également utilisables, mais (à cause d'un bug dans l'interpréteur Markdown) ces balises doivent impérativement être la dernière instruction de la cellule de texte.
Inclusion d'un fichier audio dans une cellule de texte (via la balise <audio>) :
Inclusion d'un fichier vidéo dans une cellule de texte (via la balise <video>) :
Par contre, la balise <style> ne peut être directement utilisée dans une cellule de texte, ce qui signifie qu'il sera impossible de créer et nommer un style pour le réutiliser à plusieurs endroits. De même, la balise <iframe> est également interdite dans les cellules de texte, ce qui empêche d'y intégrer directement des vidéos en streaming ou des extraits d'un site web existant. Pour ces cas de figure, la mise en oeuvre d'une cellule de code contenant la commande magique %html (comme on l'a vu au chapitre 1) ou utilisant le module display (comme nous le verrons au chapitre 4) restent les seules options fonctionnelles.






