Beamer et verbatim

Comment intégrer du texte non formaté (verbatim) et de taille raisonnable dans des slides générées en LaTeX et utilisant la classe Beamer?

C\’est une question que j\’ai eu à me poser il y a quelques jours. Et il se trouve qu\’il y a de petites astuces à connaître.

Intégrer du texte non formaté dans une diapositive

En LaTeX, pour insérer du texte ayant un formatage particulier, il existe le package et la balise verbatim. Dans quel cas peut-on en avoir besoin? Par exemple pour insérer du code non pris en charge par listings. Dans mon cas, il s\’agissait d\’intégrer du YAML. Le premier réflexe serait donc d\’ajouter le package verbatim et le texte mis en forme entre les balises correspondantes comme pour un document classique type \ »article\ » ou \ »report\ ».

\\documentclass{beamer}
\\mode
{
  \\usetheme{Warsaw}
  \\setbeamercovered{transparent}
}
\\usepackage[utf8]{inputenc}
\\usepackage{verbatim}

\\begin{document}

\\begin{frame}
  \\begin{itemize}
    \\item Essai d\'insertion de texte non formaté (verbatim)
  \\end{itemize}
  \\begin{verbatim}
# test.yml
premierNiveau:
  deuxièmeNiveau:
  	cle1 : valeur1
  	cle2 : valeur2
  \\end{verbatim}
\\end{frame}

\\end{document}

Or, si vous compilez ceci le résultat n\’est pas du tout satisfaisant!

\"Erreur

Je dois dire que je ne sais pas vraiment pourquoi on obtient ce résultat. J\’ai par contre la solution pour y remédier, ce qui est déjà bien! L\’astuce consiste à dire à la diapositive (frame) qu\’elle contient du texte non formaté (dit fragile) grâce à l\’option [containsverbatim]. On aura alors ce code-ci pour la diapositive:

\\begin{frame}[containsverbatim]
  \\begin{itemize}
    \\item Essai d\'insertion de texte non formaté (verbatim)
  \\end{itemize}
  \\begin{verbatim}
# test.yml
premierNiveau:
  deuxièmeNiveau:
  	cle1 : valeur1
  	cle2 : valeur2
  \\end{verbatim}
\\end{frame}

Et donc le résultat suivant :

\"Exemple

L\’autre problème qui s\’est alors présenté concerne la taille du texte. En effet, il me fallait insérer pas mal de code YAML et si possible sur la même diapositive. Or, le package verbatim ne permet pas de définir la taille des caractères. Pour combler ce manque, j\’ai eu recours au package fancyvrb.

Réduire la taille des caractères d\’un texte entre les balises verbatim

Le package fancyvrb propose une version améliorée de verbatim et s\’en différencie en mettant le \ »v\ » en majuscule dans la balise. Je ne vais pas m\’étendre sur toutes les possibilités de ce package, la documentation fournie s\’en charge parfaitement. Voici juste un exemple de code permettant de réduire la taille des caractères :

\\documentclass{beamer}
\\mode

{
\\usetheme{Warsaw}
\\setbeamercovered{transparent}
}
\\usepackage[utf8]{inputenc}
\\usepackage{fancyvrb}

\\begin{document}

\\begin{frame}[containsverbatim]
	\\begin{itemize}
      \\item Essai d\'insertion de texte non formaté (verbatim)
    \\end{itemize}
\\begin{Verbatim}[fontsize=\\scriptsize]
# test.yml
premierNiveau:
  deuxièmeNiveau:
  	cle1 : valeur1
  	cle2 : valeur2
\\end{Verbatim}
\\end{frame}

\\end{document}

Qui produit alors le résultat suivant :

\"Verbatim

Bien entendu, les packages verbatim et fancyvrb sont contenus dans TeXLive.

Ajouter ou mettre à jour un package LaTeX manuellement (texlive)

Cet article fait en particulier suite à celui concernant la création de son CV en LaTeX avec moderncv. Pour ceux d\’entre vous qui ont essayé, vous êtes probablement tombé sur un os en tentant d\’ajouter votre page web dans vos coordonnées :

\\documentclass[10pt,a4paper]{moderncv}
% .....
\\homepage{www.francoistessier.info/blog}

Une erreur sur cette balise empêche la compilation. En y regardant de plus près, on peut s\’apercevoir dans /usr/share/doc/texlive-latex-extra-doc/latex/moderncv/CHANGELOG.gz (pour une installation de texlive sous Ubuntu) que la version installé de moderncv est la 0.7. Or, il y a eu quelques mises à jour depuis (version 0.11) permettant entre autres d\’utiliser la balise /homepage{} comme dans l\’exemple fourni par l\’auteur. Mais comment utiliser la dernière version?

Une solution consisterai à écraser la version actuelle par la nouvelle. Certes, ça semble efficace mais c\’est trop \ »risqué\ », pas propre, et on perdrait cette modification à la prochaine mise à jour de texlive.

Heureusement pour nous, LaTeX a tout prévu! Il existe en effet une variable TEXMFHOME dans sa configuration qui correspond en général au chemin du dossier $HOME/texmf. Ce dossier, s\’il existe, est parcouru par LaTeX lors de la compilation d\’un document pour y chercher l\’existence de la classe utilisée. Deuxième point important, c\’est la classe trouvée dans ce dossier (en suivant une arborescence précise), si elle existe, qui est choisie en priorité pour compiler le document. Donc pour utiliser, par exemple, la dernière version de moderncv, on procèdera de cette façon :

  1. On exécute dans un premier temps la commande suivante pour connaître le dossier correspondant à la variable TEXMFHOME :
    $ texconfig conf | grep TEXMFHOME
    TEXMFHOME=/home/login/texmf
    
  2. En fonction du repertoire fourni précédemment, on crée l\’arborescence dont à besoin LaTeX pour trouver et utiliser notre package :
    $ mkdir -p /home/login/texmf/tex/latex
    
  3. On y copie le package téléchargé et décompressé
    $ cd /home/login/texmf/tex/latex
    $ wget http://mirror.ctan.org/macros/latex/contrib/moderncv.zip
    $ unzip moderncv.zip
    $ rm moderncv.zip
    
  4. En fonction de comment est organisé le package, il sera peut-être nécessaire de faire des manipulations supplémentaires (je pense en particulier aux packages contenant des .ins et .dtx) mais je n\’ai pas encore été confronté à ce type de cas…
  5. On execute la commande sudo texhash qui mettra à jour la base de données de LaTeX. Cette commande ne semble pas nécessaire dans le cas d\’une autre version d\’un package existant (par exemple moderncv).

Et voilà! Si tout va bien, le package est accessible et, dans le cas de moderncv, il sera utilisé à la place de la version installée avec texlive.

Pour récupérer la dernière version des packages les plus populaires ou en trouver de nouveau, je vous renvoie vers ce site.