~rom1v/blog { un blog libre }

Des slides Beamer en Markdown

Pour produire des slides propres pour une présentation, j’aime beaucoup Beamer (basé sur LaTeX). Mais la syntaxe est un peu lourde et la configuration est parfois inutilement compliquée (fonts, encodage, compilation multipasse…).

Est-il possible d’avoir les avantages de Beamer sans ses inconvénients ? La réponse est oui, grâce à pandoc et son Markdown étendu.

Beamer

Voici le code d’un exemple très simple de présentation Beamer :

\documentclass[hyperref={pdfpagelabels=false}]{beamer}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}

\title{Exemple}
\author{Romain Vimont}
\date{15 février 2014}

\begin{document}

\begin{frame}
\titlepage
\end{frame}

\section{Ma section}

\begin{frame}{Ma première frame}
\begin{itemize}
 \item c'est bien
 \item mais c'est verbeux
\end{itemize}
\end{frame}

\end{document}

Le code source est, il faut bien l’avouer, assez rebutant, et le rapport signal/bruit assez faible.

Une fois les paquets pdflatex, textlive-latex-base et latex-beamer installés (sous Debian), vous pouvez le compiler avec :

pdflatex fichier.tex

Markdown

Voici maintenant l’équivalent en Pandoc-Markdown :

% Exemple
% Romain Vimont
% 15 février 2014

# Ma section

## Ma première frame

 - c'est bien
 - et en plus ce n'est pas verbeux

Indiscutablement, c’est beaucoup plus lisible !

Avec le paquet pandoc (en plus des paquets latex déjà installés), vous pouvez le compiler avec :

pandoc -st beamer fichier.md -o fichier.pdf

Notez que le résultat n’est pas strictement identique, la version compilée avec pandoc ajoute une frame de section, mais il ne s’agit que d’une différence de template par défaut.

Démo

J’ai créé une présentation d’exemple avec un thème personnalisé.

beamer

Le résultat est disponible ici, mais c’est surtout la source (raw) qui est intéressante. Pour récupérer le projet et générer le pdf :

git clone https://github.com/rom1v/mdbeamer
cd mdbeamer
make

Ce projet a vocation à être utilisé comme base pour mes futures présentations (et les vôtres si vous le désirez). Chacune d’entre elles sera sur une branche git et sur un remote différents.

Injection de version

Pour pouvoir distinguer rapidement différentes versions d’une même présentation, j’ai également ajouté au Makefile une commande pour injecter un identifiant de version à côté de la date (donc à la fin de la 3e ligne du code source). Il s’agit du résultat de git describe (contenant le nom du dernier tag annoté) ou à défaut simplement le numéro de commit actuel.

Pour l’utiliser :

make withversion

Un format pivot

J’utilise ici le Pandoc-Markdown pour écrire du Beamer plus simplement.

Mais son intérêt est beaucoup plus général : il s’agit d’un véritable format pivot, compilable vers de nombreux formats.

Pour de la documentation par exemple, il suffit de l’écrire en Pandoc-Markdown et de la compiler, grâce à pandoc, en :

C’est d’ailleurs très pratique quand quelqu’un vous demande une documentation dans un format totalement inadapté (type docx), à rédiger de manière collaborative : il suffit alors d’utiliser Pandoc-Markdown, git et un Makefile.

Pour les slides, pandoc supporte, en plus de Beamer, la compilation vers des slides HTML :

Cette généricité a bien sûr des limites : l’utilisation de code spécifique à un format particulier (tel que j’en utilise dans mon exemple) empêche de le compiler correctement vers d’autres formats.

Conclusion

Le language Markdown (étendu par pandoc) permet de combiner la généricité, la simplicité et la _git_abilité pour écrire des documents ou des slides, ce qui en fait un outil absolument indispensable.

Commentaires

Cool merci pour cette découverte :)

À part d’éventuelles présentations à réaliser, peu d’intérêt de faire du Latex pour moi (pas de rédaction hors wiki ^^). À tester sous peu.

Super article, très intéressant. Merci. :-)

[…] discover it with the post of ®om’s blog. Thanks to him […]

Super intéressant, je vais adopter tout ça pour ma prochaine présentation ! Merci !

greg

Merci c’est vraiment du bon boulot. Je galérais à mettre un thème nickel pour du beamer. GG!

Thomas B

Merci Romain pour ce super tutoriel!!!

Je cherchais un exemple très pratique et je l’ai trouve ;-)

Boussekey

J’ai quelques questions subsidiaires:

  • comment fais-tu pour que ton fichier beamerthemeCustom.sty soit pris en compte au build de ton fichier beamer?
  • Est-ce que tu utilises pandoc pour build un fichier TEX à partir de ton fichier markdown, et tu crées le PDF à partir d’un éditeur latex?
  • Utilises-tu la commande latex-engine ?

Merci d’avance, Thomas

®om

comment fais-tu pour que ton fichier beamerthemeCustom.sty soit pris en compte au build de ton fichier beamer?

Par convention, beamer utilise le fichier beamerthemeXXX.sty. Le nom du thème est passé en paramètre de pandoc dans le Makefile :

pandoc -st beamer -V theme:$(THEME) -V lang:fr-FR $(INPUT) -o $(OUTPUT)

Est-ce que tu utilises pandoc pour build un fichier TEX à partir de ton fichier markdown, et tu crées le PDF à partir d’un éditeur latex?

Non, pandoc crée le fichier pdf tout seul avec cette commande.

Utilises-tu la commande latex-engine ?

Non. Pas explicitement en tout cas.

Thomas B

Bonjour Romain,

Je n’arrive pas à localiser le bon répertoire pour le fichier sty

Je travaille sous Fedora25, et l’installation de texlive n’est pas super aisée, ce serait plus simple dans un environnement DEBIAN ;-)

J’ai réinstallé texlive et pandoc à partir des RPMs (car j’avais tenté les installations des dernières versions, mais cela n’a pas amélioré le comportement).

Voici la trace de mes derniers tests:

sudo cp /usr/share/lyx/templates/beamerthemeCustom.sty
/usr/share/texlive/texmf-dist/tex/latex/beamer/themes/theme/
 🐳 🔑 
pandoc -st beamer --toc -V theme:Custom -V lang:fr-FR
20171030_PGCONF2017_posdata.work.md -o 20171030_PGCONF2017_posdata.work.pdf
 🐳 🔑 

J’obtiens le message d’erreur suivant:

! LaTeX Error: File `beamerthemeCustom.sty' not found.

Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)

Enter file name: 
! Emergency stop.
<read *> 
        
l.21 \usetheme{Custom}

pandoc: Error producing PDF
sudo cp /usr/share/lyx/templates/beamerthemeCustom.sty
/usr/local/texlive/2017/texmf-dist/tex/latex/beamer/themes/theme/
 🐳 🔑 
pandoc -st beamer --toc -V theme:Custom -V lang:fr-FR
20171030_PGCONF2017_posdata.work.md -o 20171030_PGCONF2017_posdata.work.pdf
 🐳 🔑 

Et j’obtiens encore le même message d’erreur

! LaTeX Error: File `beamerthemeCustom.sty' not found.

Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)

Enter file name: 
! Emergency stop.
<read *> 
        
l.21 \usetheme{Custom}

pandoc: Error producing PDF

Si tu as une idée, je suis preneur ;-)

Merci d’avance,
Thomas

®om

Je n’arrive pas à localiser le bon répertoire pour le fichier sty

Dans le répertoire courant, chez moi ça marche.

Ça ne marche pas chez toi par défaut:

git clone https://github.com/rom1v/mdbeamer.git
cd mdbeamer
make

?

Thomas B

Bonjour Romain,

Ca a très bien fonctionné!!

Reste plus quà le décliner pour ma présentation!

J’ai été très heureux que la première tentative échoue pour l’erreur suivante:

! Package babel Error: Unknown option `french'. Either you misspelled it

J’ai alors compris que ton fichier beamerthemeCustom.sty était bien pris en compte ;-)

J’ai installé ce qui manquait en me basant sur le post suivant à l’aide de la commande suivante (sous Fedora):

dnf install texlive*french

Les commentaires sont fermés.