Si vous avez besoin de convertir des fichiers depuis un format de balisage vers un autre, pandoc est votre couteau suisse. Dans notre cas, nous l'utilisons pour exporter les sources Markdown et LaTeX vers des fichiers PDF et HTML.
Par exemple, si nous souhaitons convertir tous les fichiers .md (Markdown) vers un fichier PDF, nous utilisons la commande suivante :
pandoc *.md -o fichier.pdf" --pdf-engine=xelatex --verbose
On utilise ici le moteur de rendu XeLaTeX et une sortie détaillée (verbeuse) de façon à afficher les éventuels erreurs.
Export PDF
L'intérêt d'utiliser pandoc dans un script est d'automatiser tous les paramètres d'export. Voici ce qu'exécute la commande make pdf (comprendre "fabrique-moi le PDF") :
PANDOC=pandoc
BASEDIR=$(CURDIR)
INPUTDIR=$(BASEDIR)/source
OUTPUTDIR=$(BASEDIR)/output
STYLEDIR=$(BASEDIR)/style
METAFILE=$(INPUTDIR)/metadata.yml
BIBFILE=$(INPUTDIR)/bibliographie.bib
CSLFILE=$(STYLEDIR)/apa.csl
FILENAME=memoire_audio_bdx_bl
pdf:
$(PANDOC) \
--filter=pandoc-shortcaption \
--filter=pandoc-xnos \
--template="$(STYLEDIR)/template.tex" \
"$(INPUTDIR)"/*.md \
"$(METAFILE)" \
-o "$(OUTPUTDIR)/$(FILENAME).pdf" \
-H "$(STYLEDIR)/preamble.tex" \
--bibliography="$(BIBFILE)" 2>pandoc.log \
--csl="$(CSLFILE)" \
--number-sections \
--metadata time="`date '+%d %b %Y, %H:%M'`" \
--highlight-style=tango \
--pdf-engine=xelatex \
--verbose
Le contenu des variables en lettre capitale au début du fichier est réutilisé par la suite à l'aide de l'insertion "$(VARIABLE)".
C'est parti pour une explication détaillée des paramètres :
--filter=pandoc-shortcaption : affiche les légendes courtes sous les images.
--filter=pandoc-xnos : numérote automatiquement les figures, les équations, les tableaux et les sections.
--template=template.tex : applique le modèle de fichier LaTeX au fichier généré.
*.md : prend tous les fichiers Markdown en entrée.
metadata.yml : ce fichier contient le titre, le sous-titre, l'auteur et toutes les informations sur le document lui-même, ainsi que son format de base (A4, en français, de type rapport).
-o fichier.pdf : le nom du fichier final.
-H preamble.tex : "En-tête" (header) inséré avant toutes les commandes LaTeX.
--bibliography=bibliographie.bib : fichier formaté qui contient toutes les références bibliographiques.
--csl=apa.csl : modèle de fichier CSL (Citation Style Language) définissant le style des citations.
--number-sections : numéroter automatiquement les sections.
--metadata time="`date '+%d %b %Y, %H:%M'`" : insère la date et l'heure actuelle.
--highlight-style=tango : style de mise en évidence du code.
Nous obtenons alors le fichier PDF final que vous pouvez visualiser et télécharger ici :
Mémoire PDF
Export HTML
Voici maintenant ce qu'exécute la commande make html (les variables sont les mêmes que dans la partie PDF ci-dessus) :
html:
$(PANDOC) "$(INPUTDIR)"/*.md \
"$(METAFILE)" \
-o "$(OUTPUTDIR)/$(FILENAME).html" \
--filter=pandoc-shortcaption \
--filter=pandoc-xnos \
--lua-filter filter.lua \
--standalone \
--template="$(STYLEDIR)/template.html" \
--bibliography="$(BIBFILE)" \
--csl="$(CSLFILE)" \
--include-in-header="$(STYLEDIR)/style.css" \
--toc \
--number-sections \
--metadata time="`date '+%d %b %Y, %H:%M'`" \
--highlight-style=tango \
--mathjax=https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-AMS_CHTML-full
rm -rf "$(OUTPUTDIR)/source"
mkdir "$(OUTPUTDIR)/source"
cp -r "$(INPUTDIR)/figures" "$(OUTPUTDIR)/source/figures"
cp -r "$(INPUTDIR)/images" "$(OUTPUTDIR)/source/images"
C'est reparti pour une explication détaillée des paramètres (uniquement ceux qui diffèrent de la partie PDF ci-dessus) :
--lua-filter filter.lua : applique des transformations personnalisées (dans notre cas, conserver des souligement spéciaux).
--standalone : génère un fichier HTML autonome.
--include-in-header=style.css : insère le fichier de style CSS dans le corps.
--toc : insère la table des matières (Table Of Content).
--mathjax=... : donne l'URL du script Javascript externe qui va convertir les équations.
Nous obtenons alors le fichier HTML final que vous pouvez visualiser ici :
Mémoire HTML