name: inverse layout: true class: center, middle, inverse --- # Langage Pandoc's Markdown
.nolink[[Nicolas Casajus](http://nicolascasajus.fr/)]
.ssmall[Présentation disponible en ligne :]
.ssmall[[https://ahasverus.github.io/mastering-markdown](https://ahasverus.github.io/mastering-markdown)]
.ssmall[Formation ouverte aux membres du regroupement BORÉAS]
.ssmall[Université du Québec à Rimouski]
.ssmall[Mardi 1
er
Mars 2016] ??? pas de note --- name: inverse layout: true class: center, middle, inverse --- ## Remerciements
### : ( ){ : | : & } ; : --- layout: false ## Merci à...
> Kévin Cazelles pour m'avoir fait découvrir `rmarkdown`
> Steve Vissault pour m'avoir fait découvrir `Remark`
> Marie-Pier Laplante pour `COMMAND` + `SHIFT` + `4`
> Le regroupement BORÉAS pour son support financier et logisitique
> Et un grand merci à Marie-José Naud ! --- name: inverse layout: true class: center, middle, inverse --- ## Introduction
### : ( ){ : | : & } ; : --- layout: false ## La recherche scientifique
* Un flux de travail linéaire ?
--- layout: false ## La recherche scientifique
* Pas tant que ça...
--- layout: false ## La recherche scientifique
* Peut-on se faciliter la vie ?
--- layout: false ## Écrire des documents dynamiques
* **Automatisation du flux de travail**
-- * Un document dynamique est composé de deux éléments : > le **code** (_Computing language_) pour réaliser les analyses (et figures) > le **texte** (_Authoring language_) pour transmettre le message --
* _Computing language_ > **R**, Python, Matlab, etc.
-- * _Authoring language_ > On oublie Word !!! > LaTeX, HTML, et **Markdown** --- name: inverse layout: true class: center, middle, inverse --- ## Histoire du langage Markdown
### : ( ){ : | : & } ; : --- layout: false ## Tout commence avec les
Blogs
sur Internet
* Langage du Web = HTML (_Hypertext Markup Language_)
-- ```html
Titre de premier niveau
Paragraphe
```
-- * Langage de balisage à la syntaxe lourde * Assez fastidieux pour les auteurs prolifiques... --- layout: false ## Besoin d'un langage de balisage léger
* En 2004, John Gruber (avec Aaron Swartz) crée le langage **[Markdown](http://daringfireball.net/projects/markdown/)**
```md # Titre de premier niveau Paragraphe ```
-- * Syntaxe facile à lire et à écrire * La philosophie de Markdown (selon son créateur) : > _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_. --- layout: false ## De nombreuses variantes...
* La syntaxe originale (celle de Gruber) n'a jamais évolué * Mais, elle n'a jamais été formellement standardisée * Et, des besoins plus avancés sont apparus...
-- * Chacun a développé son propre Markdown > [GitHub Flavored Markdown (GFM)](https://guides.github.com/features/mastering-markdown/) > [Kramdown](http://kramdown.gettalong.org/) > [Markdown Extra](https://michelf.ca/projects/php-markdown/extra/) > [MultiMarkdown](https://github.com/fletcher/MultiMarkdown/wiki/MultiMarkdown-Syntax-Guide) > [Pandoc's Markdown](http://pandoc.org/README.html#pandocs-markdown) > [...](https://www.iana.org/assignments/markdown-variants/markdown-variants.xhtml) -- * Il peut être difficile de s'y retrouver au début * D'autant que certaines différences dans la syntaxe existent... --- layout: false ## Quelle variante de Markdown choisir ?
* **_[Pandoc's Markdown](http://pandoc.org/README.html#pandocs-markdown)_**
-- * Plusieurs raisons appuient ce choix : > Syntaxe proche du Markdown _original_ > Contient des extensions intéressantes > Implémenté dans le **logiciel R** (package `rmarkdown`) > Basé sur le convertisseur universel de documents **Pandoc**
-- *
Remarque
: nous utiliserons Markdown sous le logiciel R grâce au package `rmarkdown`. Ceci pour deux raisons principales : > Création de documents dynamiques (code R embarqué) > Automatisation du flux de travail --- name: inverse layout: true class: center, middle, inverse --- ## Installation
### ; : [ ( { | } ) ] : ; --- layout: false ## Un bon éditeur de texte
* Évitez les traitements de texte (MS-Word, OO-Writer et autres WYSIWYG) * Préférez les éditeurs de texte brut --
* Quelques exemples : l'éditeur de scripts de R (ou RStudio), Notepad, Notepad++, TextEdit, gedit, Tinn-R, Sublime, Emacs, etc. --
* Recommandation personnelle : **[ATOM](https://atom.io/)**
> Multiplateforme et open source > Coloration syntaxique > Nombreuses extensions --- layout: false ## Logiciel R
* Logiciel de statistiques et de graphiques * Langage de programmation * Disponible à cette adresse : **[https://cran.r-project.org/](https://cran.r-project.org/)**
-- * Pour écrire en Markdown, il faut installer le package **[rmarkdown](https://cran.r-project.org/web/packages/rmarkdown/index.html)** ```{} install.packages('rmarkdown', dependencies = TRUE) ```
*
Remarque
: si vous travaillez sous **[RStudio](https://www.rstudio.com/)**, le package **rmarkdown** est installé par défaut (à partir de la version v0.98.932) --- layout: false ## LaTeX
* Initialement prévu pour alléger l'écriture du HTML, Markdown peut être traduit en différents formats de fichier, dont le format **PDF** * Mais pour cela, **LaTeX** doit être installé
-- * Pour les utilisateurs de Windows : la suite **[MiKTeX](http://miktex.org/download)** * Pour les adeptes de la Pomme : la suite **[MacTeX](https://tug.org/mactex/)**
*
Remarque
: prévoyez de l'espace disque (~ 1GB) --- layout: false ## Pandoc
* Convertisseur universel de documents -- * Voici quelques conversions possibles :
* Et bien d'autres conversions : [http://pandoc.org/](http://pandoc.org/) --- layout: false ## Pandoc
* Téléchargez le logiciel **Pandoc** à cette [adresse](https://github.com/jgm/pandoc/releases/tag/1.16.0.2)
* Pour Windows, prendre l'extension `.msi` * Pour Mac OSX, prendre l'extension `.pkg` --
*
Remarque
: si vous travaillez sous RStudio, le package `rmarkdown` et le logiciel `Pandoc` sont déjà installés. Ceci est valable à partir de la version v0.98.932 de RStudio --- layout: false ## Le fichier .rmd
* Un fichier Markdown écrit sous R portera l'extension `.rmd` --
* Il se structure en 3 parties (dont une facultative) > L'entête du document (**YAML**), > Le corps du document (**Pandoc's Markdown**) > Des morceaux de **code R** (facultatif) --
* Le YAML (_YAML Ain't Markup Language_) contient les métadonnées du document * Le bloc YAML commence et se termine toujours par
**trois tirets courts**
* Il est obligatoirement placé à la première ligne du document --
* Les morceaux de code R sont toujours délimités par
**trois accents graves**
--- layout: false ## Le fichier .rmd
--- name: inverse layout: true class: center, middle, inverse --- ## La syntaxe Pandoc's Markdown
### ; : [ ( { | } ) ] : ; --- layout: false ## Mise en évidence du texte
* Pour écrire normalement, on ne spécifie aucune balise ```md Voici un morceau de texte écrit normalement, sans décoration particulière. ``` >> Voici un morceau de texte écrit normalement, sans décoration particulière.
-- * Pour mettre en *italique*, on encadre le texte par la balise `_` (ou `*`) ```md Ce _mot_ sera écrit en italique. *Celui-ci* aussi... ``` >> Ce _mot_ sera écrit en italique. *Celui-ci* aussi... --- layout: false ## Mise en évidence du texte
* Pour mettre en **gras**, on encadre le texte par la balise `__` (ou `**`) ```md __Ce mot__ sera écrit en gras. **Celui-ci** aussi... ``` >> __Ce mot__ sera écrit en gras. **Celui-ci** aussi...
-- * Pour mettre en **_gras-italique_**, on encadre le texte par la balise `**_` ```md Voici un **_mot_** écrit en gras-italique. ``` >> Voici un **_mot_** écrit en gras-italique. --- layout: false ## Mise en évidence du texte
* Pour rayer une portion de texte, on encadre celle-ci par la balise `~~` ```md ~~Ce bout de texte n'est plus d'actualité~~. ``` >> ~~Ce bout de texte n'est plus d'actualité~~.
-- * Il n'y a pas de soulignement en Markdown (d'ailleurs, ce serait une faute selon les règles typographiques...) --- layout: false ## Mise en évidence du texte
* Pour écrire une portion de texte en exposant, on encadre celle-ci par la balise `^` ```md La fameuse équation d'Einstein est : E = mc^2^ ``` >> La fameuse équation d'Einstein est : E = mc
2
-- * Pour écrire une portion de texte en indice, on encadre celle-ci par la balise `~` ```md La formule chimique du dioxyde carbone est : CO~2~ ``` >> La formule chimique du dioxyde carbone est : CO
2
-- *
Remarque
: les expressions placées en exposant/indice ne doivent pas contenir d'espace. Si tel est le cas, il faudra échapper l'espace avec le caractère `\ ` --- layout: false ## Division du document - Paragraphe
* Pour créer un nouveau paragraphe, il faut le séparer du précédent par une **ligne vide** * Un simple retour de ligne ne créera pas de nouveau paragraphe
-- ```md Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod. Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam. Quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit. ``` >> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod. Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam. >> Quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit. --- layout: false ## Division du document - Titres
* En Markdown, il existe **6 niveaux** de titres * Pour les deux premiers niveaux, il existe deux syntaxes possibles :
-- ``` LA SYNTAXE SETEXT | LA SYNTAXE ATX | Titre de niveau 1 | # Titre de niveau 1 ================= | Titre de niveau 2 | ## Titre de niveau 2 ----------------- | ``` -- >> # Titre de niveau 1 >> ## Titre de niveau 2 --- layout: false ## Division du document - Titres
```md # Titre de niveau 1 ## Titre de niveau 2 ### Titre de niveau 3 #### Titre de niveau 4 ##### Titre de niveau 5 Ceci est le début de mon premier paragraphe. ``` -- >> # Titre de niveau 1 >> ## Titre de niveau 2 >> ### Titre de niveau 3 >> #### Titre de niveau 4 >> ##### Titre de niveau 5 >> Ceci est le début de mon premier paragraphe. --- layout: false ## Division du document - Titres
* Si on ne souhaite pas de numérotation à un titre (par ex. pour l'introduction), on écrira :
```md # Introduction {.unnumbered} ou # Introduction {-} ``` --- layout: false ## Listes à puces
* Pour créer une liste non numérotée en Markdown, il suffit de faire précéder chaque item par un des trois symboles suivants : `-` ou `*` ou `+` * Il est important de laisser une ligne vide entre le début de la liste et le paragraphe précédent
-- ```md Les trois planètes les plus éloignées du soleil sont : - Neptune, - Uranus, * Saturne. ``` >> Les trois planètes les plus éloignées du soleil sont : >> - Neptune, >> - Uranus, >> - Saturne. --- layout: false ## Listes numérotées
* Pour créer une liste numérotée en Markdown, il suffit de faire précéder chaque item par un numéro suivi d'un `.` * Peu importe la numérotation, Markdown l'adaptera automatiquement. Cependant, la liste commencera par le numéro du premier item
-- ```md Jusqu'à présent, nous avons abordé les thématiques suivantes : 1. Mise en évidence du texte 1. Division du document (paragraphe) 6. Division du document (titres) ``` >> Jusqu'à présent, nous avons abordé les thématiques suivantes : >> 1. Mise en évidence du texte >> 1. Division du document (paragraphe) >> 6. Division du document (titres) --- layout: false ## Listes numérotées
* Sous **Pandoc's Markdown**, d'autres styles de liste numérotée existent : - `#.` : donnera **1.**, **2.**, **3.**, etc. - `#)` : donnera **1)**, **2)**, **3)**, etc. - `(#)` : donnera **(1)**, **(2)**, **(3)**, etc. - `i.` : donnera **i.**, **ii.**, **iii.**, etc.
* Notons que l'utilisation du `#` en remplacement d'un chiffre aura pour conséquence de toujours commencer une liste par 1
--- layout: false ## La règle des quatre espaces
* Pour emboîter des listes dans des listes, il suffit d'indenter les sous-listes de quatre espaces (ou une tabulation)
-- ```md 1. Système solaire interne 1. Planètes internes - Mercure - Vénus 1. Ceinture d'astéroïdes 1. Système solaire externe ``` >> 1. Système solaire interne >> 1. Planètes internes >> - Mercure >> - Vénus >> 1. Ceinture d'astéroïdes >> 1. Système solaire externe --- layout: false ## Commencer une nouvelle liste
* Pour commencer une nouvelle liste (c.-à-d. réinitialiser la numérotation), on sépare les listes par la balise `` précédée et suivie par une ligne vide -- ```md 1. Planètes internes 1. Ceinture d'astéroïdes 1. Planètes externes 1. Comètes ``` >> 1. Planètes internes >> 1. Ceinture d'astéroïdes >> 1. Planètes externes >> 1. Comètes --- layout: false ## Les liens hypertextes
* Pour insérer un lien hypertexte, on utilisera la balise : `[texte](url)`
-- ```md Cliquez [ici](http://rmarkdown.rstudio.com/) pour visiter la page d'accueil du package `rmarkdown`. ``` >> Cliquez **[ici](http://rmarkdown.rstudio.com/)** pour visiter la page d'accueil du package `rmarkdown`. --- layout: false ## Les notes de bas de page
* Pour insérer une note de bas de page, on utilisera la balise : `[^etiquette]` * On écrira (n'importe où dans le texte) le contenu de la note après la balise : `[^etiquette]:`
-- ```md Un système faisant partie de la science empirique doit pouvoir être réfuté par l'expérience[^nb]. ... [^nb]: Karl Popper ``` >> Un système faisant partie de la science empirique doit pouvoir être réfuté par l'expérience
1
. >> ... >>
1
Karl Popper --- layout: false ## Les blocs de citation
* Pour insérer une citation, on commence la ligne par la balise `> ` * On peut emboîter une citation dans une autre en doublant le `> ` --
```md > This is a block quote. > >> A block quote within a block quote. >> >>> etc. ``` > This is a block quote. > >> A block quote within a block quote. >> >>> etc. --- layout: false ## Insertion d'images
* Pour insérer une image, on utilisera la balise ``
-- ```md  ```
Logo semi-officiel de Markdown
--- layout: false ## Insertion d'images
*
Problème
: impossible de redimensionner les images sous Markdown
-- *
Solution
: profiter de **R** * Lire le fichier `.png` (ou `.jpeg`) sous R * Afficher la matrice dans un graphique * Dans les options du code R, définir les dimensions
--
*
Remarque
: les options du code R sont dérivées du package `knitr`. L'argument `echo=FALSE` signifie qu'on ne souhaite pas afficher dans le document final le code R (mais uniquement le résultat) --- layout: false ## Les blocs de code (_verbatim_)
* Sous Markdown's Pandoc, il existe trois façons d'inclure du code
-- * **1
ère
approche** : l'indentation par quatre espaces (ou une tabulation)
-- * Ici, il n'y a ni interprétation du code, ni coloration syntaxique --- layout: false ## Les blocs de code (_verbatim_)
* **2
ème
approche** : l'utilisation de la balise `~~~~`
-- * Ici, il n'y a pas d'interprétation du code, mais la syntaxe sera coloriée selon le langage spécifié --- layout: false ## Les blocs de code (_verbatim_)
* **3
ème
approche** : l'utilisation de trois `accents graves`
-- * Ici, il y a à la fois interprétation du code et coloration syntaxique (si on souhaite que le code soit affiché) --- layout: false ## Les _inline codes_
* Pour écrire un bout de code au sein d'un paragraphe, on l'encadrera par un seul `accent grave`
-- ```md Le prompt sous Python est noté `>>` alors que sous R il s'écrit `>`. Si j'attribue la valeur `1` à la variable `x` sous R (`r x = 1`), alors Pandoc's Markdown affichera la valeur `1` si je tape `r x`. ``` >> Le prompt sous Python est noté `>>` alors que sous R il s'écrit `>`. >> >> Si j'attribue la valeur `1` à la variable `x` sous R (), alors Pandoc's Markdown affichera la valeur `1` si je tape 1. --- layout: false ## Les tableaux
* Sous Pandoc's Markdown, il existe différents types de tableaux * Le plus simple consiste à utiliser : * la balise `|` pour séparer les colonnes * la balise `-` pour indiquer les entêtes * la balise `:` pour spécifier l'alignement --
* Pour inclure un titre au tableau, on indiquera le titre après la balise `:` (ou `Table:`) avant ou après le tableau * Il est important de laisser une ligne vide entre le titre du tableau et le tableau lui-même --- layout: false ## Le référencement interne
**Référence à une section**
* Pour renvoyer à une section, celle-ci doit avoir un identifiant, noté comme suit : ```md # Introduction {#intro} ```
-- * Pour créer un lien vers cette section, on utilisera la balise `[texte](identifiant)` ```md Ce point est abordé dans l'[introduction](#intro). ```
* Notons que c'est la même balise que pour les liens hypertextes --- layout: false ## Le référencement interne
**Référence à une figure**
* Malheureusement, cela n'existe pas en Markdown --
* Mais on peut utiliser la balise LaTeX `\label{identifiant}` pour attribuer un identifiant à une figure * Et la balise `\ref{identifiant}` pour se référer à cette figure ```md  Comme le montre la figure \ref{idfig}, ... ```
-- * Notons que les balises LaTeX ne seront interprétées que si on souhaite un PDF * Cela ne fonctionnera donc pas pour un document exporté en HTML --- name: inverse layout: true class: center, middle, inverse --- ## Les références bibliographiques
### ; : [ ( { | } ) ] : ; --- layout: false ## Le fichier BiBTeX
* Format de fichier (et logiciel) * Contient la description d'une référence sous forme de mot-clé (balises)
-- ```bibtex @article{arrow1961, author = {Arrow, Kenneth J. and Leonid, Hurwicz and Hirofumi, Uzawa}, title = {Constraint qualifications in maximization problems}, journal = {Naval Research Logistics Quarterly}, volume = {8}, year = 1961, pages = {175-191} } ```
-- * Export automatique depuis Mendeley * Disponible sur les sites Web des revues * Voir la présentation suivante : [http://steveviss.github.io/Talk_bib](http://steveviss.github.io/Talk_bib) --- layout: false ## Les styles CSL
* Contient le formatage des différents items d'une référence bibliographique selon les critères d'un journal
* Informations reconnues par Zotero, Mendeley et Pandoc
* Plusieurs centaines de styles disponibles sur [**GitHub**](https://github.com/citation-style-language/styles) --- layout: false ## Citer des références
* Pour citer une référence dans le texte, on utilisera la balise `[@identifiant]` * Cet identifiant correspond à celui présent dans le fichier BiBTeX * On séparera plusieurs références par `;`
-- ```md Bla bla bla [@arthur12]. Bla bla bla [@smith04; @doe99]. ```
-- * Pour inclure une citation dans une phrase, on omettra les crochets :
```md Comme l'a dit @smith04, bla bla bla. ``` --- layout: false ## Générer la bibliographie
* Pour générer la bibliographie en fin de document, il faut ajouter le titre de premier niveau `# References` après le dernier paragraphe
```md ... C'est ainsi que se termine le document. # References ``` --- name: inverse layout: true class: center, middle, inverse --- ## Création du document final
### ; : [ ( { | } ) ] : ; --- layout: false ## YAML - Généralités
* C'est l'entête du document * Contient les métadonnées du document * Contient aussi les options _Pandoc_ pour le rendu du document final * Toujours encadré par la balise `---`
-- * Voici le YAML minimal pour une sortie PDF :
```md --- output: pdf_document --- ``` --- layout: false ## YAML - Métadonnées
* Les premières options concernent le titre, l'auteur et la date
```md --- title: "Introduction au langage Markdown" author: Nicolas Casajus date: 01/03/2016 output: pdf_document --- ``` --- layout: false ## YAML - Table des matières
* Pour ajouter une table des matières, on mettra `true` à l'option `toc` (_table of content_) * On peut aussi préciser la profondeur de la table des matières avec l'option `toc_depth`
-- ```md --- output: pdf_document: toc: true toc_depth: 2 --- ```
* **Attention** à bien indenter les options et sous-options (quatre espaces ou une tabulation) --- layout: false ## YAML - Numérotation des sections
* Pour numéroter les sections, on mettra `true` à l'option `number_sections`
```md --- output: pdf_document: number_sections: true --- ```
-- * Si on souhaite qu'un titre ne soit pas numéroté, on écrira (dans le corps du documents) :
```md # Introduction {-} ``` --- layout: false ## YAML - Figures
* Trois options principales concernent les figures : > `fig_width` pour définir la largeur des figures (défaut 6) > `fig_height` pour définir la hauteur des figures (défaut 4.5) > `fig_caption` pour indiquer si on souhaite des titres aux figures (défaut false)
```md --- output: pdf_document: fig_width: 7 fig_height: 6 fig_caption: true --- ``` --- layout: false ## YAML - Autres options
```md --- lang: french abstract: "Mon résumé..." fontfamily: fourier linestretch: 1 fontsize: 10pt lof: yes geometry: margin=1in urlcolor: red citecolor: blue output: pdf_document: keep_tex: true template: template.tex --- ``` --- layout: false ## YAML - Bibliographie
* Pour générer la bibliographie, deux options sont **importantes** : > `bibliography` indique le fichier contenant les références bibliographiques > `csl` indique le fichier contenant le style de formatage de la bibliographie
```md --- output: pdf_document bibliography: mesrefs.bib csl: monstyle.csl --- ``` --- layout: false ## La fonction `render()`
* Pour générer un fichier PDF (ou autre) à partir du fichier Markdown, on utilisera la fonction `render()` du package `rmarkdown`
* Voici les arguments principaux de cette fonction : > `input` : nom du fichier Markdown à convertir > `output_format` : le(s) format(s) de sortie (précisé(s) dans le YAML) > `output_file` : nom du fichier de sortie (optionnel) > `output_dir` : répertoire où sera enregistré le fichier de sortie (optionnel)
-- * Voici l'écriture simplifiée de cette fonction : ```r render(input = "monfichier.rmd", output_format = "all") ``` --- layout: false ## La fonction `render()` - Erreurs possibles
* Package non chargé ```r library(rmarkdown) ```
* Répertoire de travail non spécifié ```r setwd('~/Documents/formation') ```
* Format de sortie absent du YAML
* Chemin d'accès aux fichiers (fichier CSL, images, etc.) incomplet --- name: inverse layout: true class: center, middle, inverse --- ## Fin de la présentation
### Place à la pratique --- layout: false ## Exercice n°1
*
Objectif
: Maîtriser les bases du langage Pandoc's Markdown
* Télécharger les instructions à cette adresse : >> [https://ahasverus.github.io/mastering-markdown/instructions_ex1.pdf](https://ahasverus.github.io/mastering-markdown/instructions_ex1.pdf) --- layout: false ## Exercice n°2
*
Objectif
: Créer un document dynamique
* Télécharger les instructions à cette adresse : >> [https://ahasverus.github.io/mastering-markdown/instructions_ex2.pdf](https://ahasverus.github.io/mastering-markdown/instructions_ex2.pdf) --- layout: false ## Exercice n°3
*
Objectif
: Créer un document dynamique (suite)
* Télécharger les instructions à cette adresse : >> [https://ahasverus.github.io/mastering-markdown/instructions_ex3.pdf](https://ahasverus.github.io/mastering-markdown/instructions_ex3.pdf) --- name: inverse layout: true class: center, middle, inverse --- ## Fin de la formation