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

Le modèle que j'ai utilisé a été créé par Tom Pollard et al. en 2016 et publié sous licence MIT.

Tom Pollard et al. (2016). Template for writing a PhD thesis in Markdown. Zenodo. dx.doi.org/10.5281/zenodo.58490

Une fois modifiée pour mes propres besoins, l'architecture des fichiers devient celle-ci :

├── filter.lua
├── install.sh
├── Makefile
├── output
│   ├── index.html
│   ├── memoire_audio_bdx_bl.docx
│   ├── memoire_audio_bdx_bl.html
│   ├── memoire_audio_bdx_bl.pdf
│   ├── memoire_audio_bdx_bl.tex
│   └── source
│       ├── figures
│       │   ├── [...].jpg
│       │   ├── [...].png
│       └── images
│           ├── department_logo.jpg
│           └── univ_logo.png
├── pandoc.log
├── README.md
├── source
│   ├── 01_remerciements.md
│   ├── 02_avant-propos.md
│   ├── 03_table_matieres.md
│   ├── 04_liste_figures.md
│   ├── 05_liste_tableaux.md
│   ├── 06_liste_sigles_abreviations.md
│   ├── 07_chapitre_1.md
│   ├── 08_chapitre_2.md
│   ├── 09_chapitre_3.md
│   ├── 10_chapitre_4.md
│   ├── 11_chapitre_5.md
│   ├── 12_conclusion.md
│   ├── 13_annexe_1.md
│   ├── 14_annexe_2.md
│   ├── 15_annexe_3.md
│   ├── 16_bibiographie.md
│   ├── bibliographie.bib
│   ├── figures
│   │   ├── [...].jpg
│   │   ├── [...].png
│   ├── images
│   │   ├── department_logo.jpg
│   │   └── univ_logo.png
│   └── metadata.yml
└── style
    ├── apa.csl
    ├── department_logo.jpg
    ├── preamble.tex
    ├── style.css
    ├── template.html
    ├── template.tex
    └── univ_logo.eps

Contenu en LaTeX

Remarquons que la page de garde et la quatrième de couverture n'ont pas de fichiers Markdown associés, car elles sont formatées en LaTeX dans le modèles style/template.tex.

Voici la partie de ce fichier qui débute le document, définit les marges puis affiche le titre et le sous-titre :

\begin{document}
\newgeometry{top=1cm,bottom=2cm,left=1.5cm,right=1.5cm}
\begin{titlepage}
    \begin{center}

    % logos université
    \includegraphics[width=0.45\textwidth]{style/univ_logo.eps}
    \hfill
    \includegraphics[width=0.45\textwidth]{style/department_logo.jpg}

        \vspace*{1.5cm}

        \huge
        \definecolor{bleu}{rgb}{0, 0.61, 0.88}
        \textcolor{bleu}{$title$}

        $if(subtitle)$
        \vspace{.5cm}

Contenu en Markdown

Dans le dossier source, les fichiers sont numérotés car ils seront insérés dans cet ordre dans le fichier final. Prenons l'exemple du fichier 07_chapitre_1.md, dont voici les premières lignes :

\newpage
\setcounter{page}{1} 
\pagenumbering{arabic}

# Introduction

> Afin d’introduire le contexte et le sujet de recherche développés dans ce mémoire, nous allons présenter le plan des chapitres qui répond aux questions du sous-titre. Les deux premières questions vont permettre de situer l'étude dans la littérature actuelle ; les deux questions suivantes aboutiront à la confrontation d'études cliniques.

## Contexte

\hypertarget{pourquoi}{%
\noindent\textbf{Pourquoi ?} Pour quelles raisons physiologiques cherche-t-on à améliorer le RSB ?}\label{pourquoi}
\addcontentsline{toc}{subsubsection}{Pourquoi ?}
 

On comprend que les sources Markdown peuvent contenir directement des commandes LaTeX à l'intérieur. Voyons en détail ce que signifient ces commandes qui débutent par un backslash :

  • \newpage : créer nouvelle page (!),
  • \setcounter{page}{1} : redémarrer le comptage des pages à 1,
  • \pagenumbering{arabic} : utiliser des chiffres arabes à partir d'ici (les pages précédentes étaient numérotées en chiffres romains),
  • \hypertarget(pourquoi) : générer une ancre et la nommer,
  • \noindent\textbf{Pourquoi ?} Pour quelles raisons [...]}\label{pourquoi} : écrire le titre en gras et y associer le label,
  • \addcontentsline{toc}{subsubsection}{Pourquoi ?} : ajouter la section dans la table des matières au niveau N-2.

Voilà à quoi ressemblent toutes les sources du mémoire en Markdown. Le fichiers .md peuvent être édités avec un éditeur de texte simple ou dédié, avec un aperçu direct du rendu. Une liste des logiciels libres compatibles peut être trouvée sur Framalibre.

Moi, j'ai tout écrit sous vim !

Le sujet de recherche du mémoire "Amélioration du RSB en sortie d’aides auditives" s'est fondé sur la lecture d'un poster de Christophe Lesimple, alors chercheur en audiologie clinique au sein de Bernafon. Il a depuis intégré le groupe Sonova pendant la rédaction du mémoire.

Voir le poster

Ce poster est intitulé :

"Hearing aid performance characterized by apparent SNR estimation to predict speech intelligibility in noise with hearing impaired listeners"

que je traduirais par :

"Performance des aides auditives caractérisée par l'estimation du RSB apparent pour prédire l'intelligibilité de la parole dans le bruit par les malentendants".


Xavier Delerce en avait fait le sujet du fameux article de blog "Les Aventuriers de la cible perdu". Cette notion de "Target Loss", présente dans les deux sources et que j'ai traduit par "perte de gain cible", représente la difficulté - à cause de la compression - à maintenir un gain correct sur le signal dans des situations peu bruyantes.

Christophe Lesimple faisait cette conclusion :

"The SNR range where the test HA reduces the target loss corresponds to the SNR range where the differences in intelligibility are maximized."

Ce qui donne :

"La gamme de RSB dans laquelle l'aide auditive testée réduit la perte de gain cible correspond à la gamme de RSB dans laquelle la différence en intelligibilité est maximisée."

Cette légère ambivalence sur la signification du terme "Target Loss" a été le déclencheur de mes recherches, pour en savoir plus.

Plan du mémoire

Ce n'est qu'en élargissant mes recherches sur la base PubMed que j'ai décidé de synthétiser le sujet autour de l'amélioration du RSB. Il en ressortait :

  • une immense quantité de résultats,
  • des conclusions très variables et subjectives,
  • peu de standard dans les méthodes.

La question du "Target Loss" est logiquement devenue une sous-partie du plan.

Amélioration du RSB en sortie d’aides auditives :

Pourquoi – pour quelles raisons physiologiques la cherche-t-on ?

Comment – par quels moyens techniques y parvient-on ?

Combien – quelles sont les métriques cliniques et techniques utilisées pour la mesurer ?

Jusqu’où – quelles en sont les limites objectives et subjectives ?