Afficher/cacher Sommaire
- Introduction
- Avant-propos
- Quelques références
- Le langage Markdown
- Généralités
- Syntaxe de base du langage Markdown
- Paragraphes, sauts de ligne
- Titres
- Titre de niveau 3 incluant un lien
- Traits horizontaux
- Styles et blocs
- Liens
- Images inlines
- DĂ©finition de liens ou dâimages par rĂ©fĂ©rence implicite
- Listes
- Inclusion de code HTML dans un fichier Markdown
- Ăchappement de certains caractĂšres
- Installation et utilisation du convertisseur Markdown original
Introduction
Ălaboration et conversion de documents avec Markdown et Pandoc par Jean-Daniel Bonjour, EPFL-ENAC-IT, © Creative Commons BY-SA (rĂ©vision 16.12.2014)
Avant-propos
Cette page web dĂ©crit le langage de balisage lĂ©ger dâĂ©criture de documents Markdown (markup language) ainsi que lâutilisation du convertisseur Pandoc, notamment les trĂšs nombreuses, riches et utiles extensions apportĂ©es Ă la syntaxe Markdown par ce convertisseur.
Cette page a Ă©tĂ© elle-mĂȘme rĂ©digĂ©e en langage Markdown (vous pouvez examiner son code source) en faisant un large usage des extensions offertes par Pandoc (dont il faut utiliser une version â„ 1.11.1). Elle a Ă©tĂ© convertie en HTML avec la commande pandoc -s -N --toc --mathjax -c markdown-pandoc.css -o index.html index.md
. Son rendu web sâappuie en outre sur une feuille de style CSS spĂ©cifique que nous avons rĂ©alisĂ©e et qui est plutĂŽt orientĂ©e impression.
Vous pouvez aussi tĂ©lĂ©charger la [version e-book](index.epub) (au format ePub) de ce document, Ă consulter par exemple avec lâexcellente liseuse libre Calibre.
Une derniĂšre remarque : ne soyez pas effrayĂ© par le volume de cette documentation ! Ă lâusage, vous constaterez que les concepts prĂ©sentĂ©s ici sont finalement extrĂȘmement naturels, et que Markdown et Pandoc sont trĂšs faciles Ă mettre en oeuvre âș
Quelques références
Markdown
- définition originale de Markdown : home | syntaxe de base (ou en français) | convertisseur en ligne (ou en français) |
- projet CommonMark de standardisation de la syntaxe Markdown : site web | spécification |
- reference cards & cheat sheets relatifs Ă Markdown : Jeremy Stretch | HowTube | Ahren Code | warpedvision |
- sur Wikipedia : article Markdown avec brĂšve description de la syntaxe | extensions Ă Markdown |
- éditeurs Markdown en ligne avec rendu en temps réel : StackEdit | Dillinger | Hashify | InstantMark | JonCombe | Pioul | Showdown |
- article sur Markdown par Nicolas Borboën dans la revue Flash Informatique EPFL 1/2013
Pandoc
- site officiel Pandoc : home | les extensions apportées au langage Markdown | exemples de fichiers et conversions | convertisseur en ligne (limité à 1000 caractÚres) |
- reference cards & cheat sheets relatifs Ă Pandoc : DSanson |
- forum de discussion sur Pandoc : sur groups.google
- article sur Pandoc par Jean-Daniel Bonjour dans la revue Flash Informatique EPFL 4/2013 (aussi accessible ici)
Autres langages de balisage lĂ©gersâŠ
- article Wikipedia sur le sujet
- la syntaxe reST (reStructuredText) dont sâinspire parfois Pandoc : une comparaison entre Pandoc et reST |
- la syntaxe MediaWiki utilisée notamment par Wikipedia
- le format AsciiDoc : article de Pascal Fabbri dans la revue Flash Informatique EPFL 3/2012
- comparaison de langages de balisage légers : tableau de comparaison entre Markdown, MediaWiki, Wikidot, LaTeX | article de FGallaire |
Le langage Markdown
Généralités
«A Markdown-formatted document should be publishable as-is, as plain text, without looking like itâs been marked up with tags or formatting instructions.» (John Gruber)
Markdown est une syntaxe lĂ©gĂšre dâĂ©criture de documents dĂ©finie en 2004 par John Gruber avec la collaboration de Aaron Swartz. Elle a Ă©tĂ© conçue pour ĂȘtre aussi facile Ă lire et Ă Ă©crire que possible. Dâimportants outils (IPython NotebookâŠ) et de nombreux sites Internet (GitHub, StackExchange, Reddit, TumblrâŠ) lâutilisent comme syntaxe dâĂ©dition. Mais en raison du caractĂšre non formel de la dĂ©finition originale de cette syntaxe par Gruber, de certaines ambiguĂŻtĂ©s et du besoin dâĂ©volution de ce format, un projet de standardisation dĂ©bute en 2014 sous la dĂ©nomination CommonMark.
Bien que cette syntaxe permette la conversion en différents formats de documents, elle est principalement orientée vers la production de documents (X)HTML simples, raison pour laquelle nous indiquerons souvent dans ce document les balises (X)HTML résultant de la conversion Markdown dans ce format.
Syntaxe de base du langage Markdown
Paragraphes, sauts de ligne
Dans la syntaxe Markdown, un paragraphe (<p>...</p>
en HTML) est constituĂ© dâune ligne ou de plusieurs lignes consĂ©cutives. Le passage au paragraphe suivant sâeffectue en introduisant une ou plusieurs lignes vides.
Pour effectuer un saut de ligne Ă lâintĂ©rieur dâun paragraphe (<br />
en HTML), il faut introduire 2 ou davantage de caractĂšres espaces Ă la fin de la ligne (avant le saut Ă la ligne).
Voici un paragrapheâČ
de texte avecâââČ
un saut de ligne.âČ
âČ
Puis un autre paragraphe...
Voici un paragraphe
de texte avec
un saut de ligne.
Puis un autre paragrapheâŠ
Titres
Un titre consiste en un paragraphe débutant par 1 à 6 caractÚres diÚses #
suivi(s) de lâintitulĂ© proprement dit du titre. Le nombre de #
débutant la ligne spécifie le niveau du titre : par exemple ### Titre...
est un titre de 3e niveau (<h3>Titre...</h3>
). On peut facultativement terminer la ligne de titre par des diĂšses #
(peu importe leur nombre).
Une autre syntaxe peut ĂȘtre utilisĂ©e pour les titres de premier et second niveau. Pour le 1er niveau (<h1>
), on peut saisir le texte du Titre
directement suivi dâune ligne composĂ©e dâun ou plusieurs caractĂšres Ă©gal =
puis dâune ligne vide. Pour le 2Ăšme niveau (<h2>
), le titre sera suivi dâune ligne composĂ©e dâun ou plusieurs tirets -
Notez finalement que lâon peut faire usage de styles et liens (techniques prĂ©sentĂ©es plus bas) Ă lâintĂ©rieur des titres.
# Titre de niveau 1
Autre syntaxe pour niveau 1
===========================
## Titre de niveau 2
Syntaxe âŻalternative⯠pour niveau 2
-----------------------------------
### Titre de niveau 3 incluant [un lien](#)
#### Titre de niveau 4
Titre de niveau 3 incluant un lien
Traits horizontaux
Un trait horizontal (<hr />
) est dĂ©fini par un nouveau paragraphe (donc prĂ©cĂ©dĂ© et suivi dâ1 ligne vide au moins) comportant au minimum 3 caractĂšres de type tiret -
, souligné _
ou Ă©toile *
, optionnellement séparés par des espaces.
------------
Paragraphe...
*********
Paragraphe...
* * *
ParagrapheâŠ
ParagrapheâŠ
Styles et blocs
Les styles de base sont définis par la syntaxe suivante :
- une portion de texte en italique (
<em>
) sera bordée à gauche et à droite par le caractÚre_
ou*
- le texte en gras (
<strong>
) sera bordé à gauche et à droite par 2 caractÚres**
ou__
Pour insérer du code inline (<code>...</code>
â texte en chasse fixe), on placera celui-ci entre ` `
(accents graves,AltGr 7), et ceux-ci seront doublĂ©s si ce code contient lui-mĂȘme un ou plusieurs accents graves. Dans ce code inline, les directives de formatage Markdown _
*
ainsi que les balises HTML ne sont pas interprétées mais restituées telles quelles.
Mots en âŻitalique **gras**⯠ou en **gras âŻitaliqueâŻ**,
du `code contenant des
*balises* HTML, p.ex. <u> <span>` ...
Mais _ ceci _ ou ** cela ** ne va pas (en raison d'espaces) !
Mots en italique gras ou en gras italique, du code contenant des *balises*, p.ex. <u> <span>
âŠ
Mais _ ceci _ ou ** cela ** ne va pas (en raison dâespaces) !
Pour définir un bloc de code (structure <pre>...</pre>
en HTML), on fera précéder chaque ligne de 1 ou plusieurs tab ou de 4 espaces ou plus.
Notez que dĂšs le 2Ăšme tab ou le 5Ăšme espace, ces caractĂšres participent Ă lâindentation du code !
Dans un tel bloc, les directives de formatage Markdown _
*
, les balises HTML ainsi que les caractĂšres HTML (p.ex. é
, &
) ne sont pas non plus interprétées (les caractÚres <
>
&
étant affichés tels quels).
⌠Sur le pont d'Avignon
⌠ââL'on y danse, l'on y danse,
⌠Sur le pont d'Avignon
⌠ââL'on y danse tous en rond.
Sur le pont d'Avignon
L'on y danse, l'on y danse,
Sur le pont d'Avignon
L'on y danse tous en rond.
Pour dĂ©caler Ă droite un paragraphe (on appelle ça un bloc de âcitationâ, hĂ©ritĂ© de lâemail), on fera prĂ©cĂ©der la premiĂšre ligne du paragraphe (facultativement les suivantes) par le caractĂšre >
. En HTML cela générera un bloc <blockquote>
. On peut faire des citations/décalages de 2Úme niveau avec >>
ou > >
, de 3Ăšme niveau avec >>>
ou > > >
, et ainsi de suite.
Rien nâinterdit de faire usage de toute autre possibilitĂ© Markdown dans les citations (styles Markdown, titres, listes, blocs de code, ainsi que balises HTMLâŠ).
Paragraphe normal
> DĂ©but du bloc de citation
>
> * élément de liste
> * second élément
>
>> DĂ©calage de 2Ăšme niveau, usage de _styles_
Markdown, <u>balises</u> HTML
>
> ⌠Bloc de code dans la citation
Retour Ă l'alignement normal
Paragraphe normal
DĂ©but du bloc de citation
- élément de liste
- second élément
DĂ©calage de 2Ăšme niveau, usage de styles Markdown, balises HTML
Bloc de code dans la citation
Retour Ă lâalignement normal
Liens
Markdown propose deux techniques de définition de liens.
A) Pour dĂ©finir un lien inline (technique HTML classique du lien âau fil du texteâ) :
-
si lâ
URL
est ancrée à untexte
, on utilise la syntaxe :[texte](URL "titre optionnel")
âą notez bien lâusage respectif des crochets et parenthĂšses, ainsi que lâabsence dâespace entre]
et(
âą letitre optionnel
est le texte qui sâaffichera lorsque le curseur survole le lien
âą letexte
dâancrage peut bien entendu faire lâobjet dâun formatage Markdown (p.ex. gras, italiqueâŠ) -
si lâon veut insĂ©rer au fil du paragraphe une
URL
(non ancrée à un texte, mais présentée telle quelle et cliquable), on utilise simplement la syntaxe :<URL>
(donc entre signes<
et>
)
âą pour dĂ©finir des adresses emails cliquables, il nâest pas nĂ©cessaire de les prĂ©fixer parmailto:
Lien externe : l' [EPFL](http://www.epfl.ch "Ăcole polytechnique fĂ©dĂ©rale de Lausanne") se trouve...
Web: <http://www.epfl.ch>, Email: <accueil@epfl.ch>
Lien interne : vers le [haut de la page](#)
Lien externe : lâ EPFL se trouveâŠ
Web : http://www.epfl.ch, Email: accueil@epfl.ch
Lien interne : vers le haut de la page
Remarque : si vous examinez le code HTML, vous constaterez que les liens de type
<adresse_email>
sont automatiquement encodĂ©s (et mĂȘme associĂ©s par Pandoc Ă du JavaScript) et sont de ce fait relativement rĂ©sistant aux robots de spam !
B) Markdown offre en outre la possibilité trÚs intéressante de définir des liens par référence, explicite ou implicite. On réalise cela en deux étapes (ci-dessous la référenciation explicite) :
-
dâune part on dĂ©finit, nâimporte oĂč dans le fichier, lâ
URL
et un labelurlId
permettant de sây rĂ©fĂ©rer selon la syntaxe :[urlId]: URL "titre optionnel"
âą notez bien le double point:
suivant directement le crochet]
âą lâURL
peut optionnellement ĂȘtre Ă©crite entre< >
âą sachez aussi que le labelurlId
nâest pas case-sensitive et peut contenir des espaces !
âą ces 3 champs peuvent optionnellement ĂȘtre dĂ©finis sur 2-3 lignes (mais sans intercaler de ligne vide) -
au fil du texte (inline), on ancre simplement par référence cette
URL
Ă untexte
avec :[texte][urlId]
âą notez bien que lâon nâutilise ici que des crochets, ainsi que lâabsence dâespace entre]
et[
La [faculté **ENAC**][webEnac] forme des ing. et architectes...
L'[ENAC][webEnac] est constituée de...
[webEnac]: http://enac.epfl.ch "Environnement naturel..."
La facultĂ© ENAC forme des ing. et architectesâŠ
LâENAC est constituĂ©e deâŠ
Le grand intĂ©rĂȘt de cette seconde technique de âliens par rĂ©fĂ©renceâ est de pouvoir dĂ©porter les URLs en dehors du texte proprement dit (allĂ©geant la composition et la lecture de celui-ci), dâĂ©ventuellement regrouper toutes les URLs au mĂȘme endroit dans le fichier, et surtout de pouvoir partager la mĂȘme URL par plusieurs liens en ne la dĂ©finissant quâune fois dans le document !
Images inlines
Syntaxiquement, un lien Markdown prĂ©cĂ©dĂ© du caractĂšre point dâexclamation !
est considĂ©rĂ© comme une image. De la mĂȘme façon que pour les liens, il existe deux syntaxes dâinsertion dâimages au fil du texte.
A) Lâinsertion dâimage par rĂ©fĂ©rence inline sâeffectue selon la syntaxe : 
Notez donc bien le point dâexclamation dĂ©butant cette expression. Le titre optionnel
est le texte sâaffichant lorsque le curseur survole le lien. Quant au texte alternatif
, câest celui qui apparaĂźt lorsque le navigateur ne prend pas en charge lâaffichage des images.
B) Par ailleurs, et comme pour les liens, on peut également insérer une image par référence en deux étapes avec :
- dâune part la dĂ©finition de lâ
URL_IMAGE
, nâimporte oĂč dans le document, par :[imgId]: URL_IMAGE "titre optionnel"
(optionnellement dĂ©finis sur 2-3 lignes, mais sans intercaler de ligne vide) - dâautre part lâinsertion proprement dite, au fil du texte, de lâimage rĂ©fĂ©rencĂ©e avec :
![texte alternatif][imgId]
Le logo Markdown 
apparaĂźt parfois Ă©galement ainsi ![autre variante][imgMD]
[imgMD]: /images/markdown-logo.png "Markdown"
Le logo Markdown
apparaĂźt parfois Ă©galement ainsi
Le grand intĂ©rĂȘt de cette seconde technique rĂ©side notamment dans la possibilitĂ© dâinsĂ©rer de façon trĂšs concise la mĂȘme image (icĂŽne, logoâŠ) Ă plusieurs endroits dans le document !
DĂ©finition de liens ou dâimages par rĂ©fĂ©rence implicite
Lorsque lâon insĂšre par rĂ©fĂ©rence, dans un paragraphe, un lien ou une image dĂ©finis ailleurs dans le document, il est possible dâomettre le second champ [urlId]
ou [imgId]
! On parle dans ce cas de référence implicite, car cela revient à établir un lien vers une référence de nom identique à ce qui est défini dans le premier champ : ainsi [du texte]
renverrait vers la référence [du texte]: url
. Cette syntaxe apporte une concision extrĂȘme dans lâutilisation de liens et dâimages !
La [faculté ENAC] forme des ing. et architectes...
La syntaxe ![image] est super légÚre et concise !
[faculté enac]: <http://enac.epfl.ch> "Environnement naturel..."
[image]: /images/markdown-logo.png 'Markdown'
La facultĂ© ENAC forme des ing. et architectesâŠ
La syntaxe est super légÚre et concise !
Rappelons encore (ce qui est illustrĂ© dans lâexemple ci-dessus) que :
- les labels (
urlId
,imgId
) ne sont pas case-sensitive et peuvent contenir des espaces - dans les dĂ©finition de rĂ©fĂ©rences, lâ
URL
peut optionnellement ĂȘtre dĂ©finie entre< >
- le
titre optionnel
des liens et des images peut ĂȘtre dĂ©fini entre guillemets, apostrophes ou parenthĂšses
!!!ATTENTION , référence implicite problÚme avec les images pour des éditeurs avec aperçu (retext)
Listes
Pour définir une liste numérotée (<ol>
), il suffit de saisir, au dĂ©but de chaque Ă©lĂ©ment de la liste, un nombre quelconque suivi dâun point et de 1 ou plusieurs espaces ou tab. Si un paragraphe doit commencer par un nombre, il faut prĂ©fixer le point du nombre par \
afin quâil ne soit pas considĂ©rĂ© comme un dĂ©but de liste numĂ©rotĂ©e.
Pour définir une liste à puce (<ul>
), il suffit de dĂ©buter chaque item par lâun des caractĂšres *
, +
ou -
suivi dâ1 ou plusieurs espaces ou tab.
Le dĂ©but et la fin de la liste doivent ĂȘtre respectivement prĂ©cĂ©dĂ© et suivi dâ1 ligne vide au moins.
Il est possible de faire des listes imbriquĂ©es : pour cela la sous-liste devra ĂȘtre indentĂ©e Ă droite dâ1 tab ou de 4 espaces par rapport Ă lâĂ©lĂ©ment supĂ©rieur. Les sous-listes nâont pas besoin dâĂȘtre prĂ©cĂ©dĂ©es et suivies dâune ligne vide.
1. raisin
0. pomme
⌠* golden
⌠- granny smith
⌠+ boskoop
0. abricot
1291\. Signature du pacte fédéral Suisse
- raisin
- pomme
- golden
- granny smith
- boskoop
- abricot
1291. Signature du pacte fédéral Suisse
Si lâon dĂ©sire un espacement de paragraphe entre les Ă©lĂ©ments de la liste, on dĂ©finira ceux-ci comme des paragraphes câest-Ă -dire en intercalant des lignes vides.
* les éléments
* sont ici
* serrés
---
1. mais ici espacés
âČ
0. comme plusieurs
âČ
0. paragraphes consécutifs
- les éléments
- sont ici
- serrés
-
mais ici espacés
-
comme plusieurs
-
paragraphes consécutifs
Inclusion de code HTML dans un fichier Markdown
La plupart des balises HTML (y compris <span>
) peuvent ĂȘtre utilisĂ©es dans des paragraphes Markdown.
Les structures HTML de type bloc (<div>, <table>, <pre>
âŠ) doivent cependant ĂȘtre prĂ©cĂ©dĂ©es et suivies dâ1 ligne vide au moins, et les balises de dĂ©but et fin du bloc ne doivent pas ĂȘtre indentĂ©es (donc non prĂ©cĂ©dĂ©es dâespaces ou tab). Mais attention : sachez quâavec la syntaxe stricte Markdown (cette restriction ne sâapplique pas Ă Pandoc) le formatage Markdown nâest pas appliquĂ© Ă lâintĂ©rieur de tels blocs HTML !
Utilisation de balises HTML : <u>souligné</u>,
<span style="color: #f00;">couleur</span> ...
<table border="1" cellspacing="0" cellpadding="4" align="center">
<tr> <td>Tableau</td> <td>par balises HTML</td> </tr>
</table>
Paragraphe _normal_...
Utilisation de balises HTML : soulignĂ©, couleur âŠ
Tableau | par balises HTML |
Paragraphe normalâŠ
Ăchappement de certains caractĂšres
A lâextĂ©rieur des structures de type code inline ou bloc de code, si lâon veut afficher les caractĂšres ci-dessous (qui ont sinon une signification Markdown ou Pandoc) il peut ĂȘtre nĂ©cessaire de les âĂ©chapperâ en les prĂ©fixant par le caractĂšre backslash \
\ backslash
` accent grave
* étoile/astérisque
⯠souligné
+ plus
- tiret/moins
( ) parenthĂšses
[ ] parenthÚses carrées
{ } accolades
< > crochets pointus (de balises)
# diĂšse
@ arobase
~ tilde
. point
! point d'exclamation
Installation et utilisation du convertisseur Markdown original
Nous vous recommandons plutĂŽt dâutiliser le convertisseur Pandoc qui offre bien plus de possibilitĂ©s. Si vous tenez cependant Ă tester le convertisseur Markdown original, sachez quâil sâagit dâun simple script Perl sous license BSD tĂ©lĂ©chargeable via un lien au haut de la home-page du site Markdown. Il est donc nĂ©cessaire de disposer dâun interprĂ©teur Perl sur votre machine (ce qui est par dĂ©faut le cas sous Linux et Mac OS X, mais pas sous Windows oĂč vous pouvez utiliser le Strawberry Perl ou lâActivePerl). La conversion dâun fichier Markdown en HTML sâeffectue alors avec la commande : perl Markdown.pl fichier.md > fichier.html