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.

Compilation LaTeX avec Rubber et TeXlipse

Rubber est un programme qui se propose de simplifier la compilation de documents LaTeX. Il permet au moyen d\’une seule commande d\’appeler les programmes nécessaires à la création d\’un document final. De plus, et c\’est ce qui m\’a convaincu de l\’essayer, il se charge de la double compilation nécessaire pour mettre à jour les références dans un document.

Suite à un article précédent où je présentais Eclipse comme éditeur de document LaTeX, je vais tenter de vous détailler la procédure d\’installation de Rubber et la configuration de TeXlipse pour qu\’il l\’utilise pour compiler un projet.

Installation de Rubber et première utilisation

Rubber est présent dans les dépôts d\’Ubuntu. Son installation sur cette distribution est donc aussi simple que :

$ sudo apt-get install rubber

Pour compiler ensuite un document .tex depuis le terminal et en PDF, il suffit d\’exécuter la commande suivante :

$ rubber --pdf document.tex

De base, Rubber compilera le document en DVI. Il faut donc lui spécifier grâce à –pdf qu\’on souhaite un document PDF en sortie.

Nous allons voir maintenant comment intégrer ceci dans Eclipse muni du plugin TeXlipse.

Utilisation de Rubber dans Eclipse + TeXlipse

La solution que je vous propose n\’est pas vraiment optimale puisqu\’on va plus ou moins court-circuiter TeXlipse mais c\’est pour le moment le moyen le plus propre que j\’ai pu trouver. En effet, bien que ce plugin soit assez complet, il ne permet pas de spécifier le programme qui compilera le document LaTeX. TeXlipse dispose, de base, d\’une liste prédéfinie de compilateurs qu\’on ne peut pas modifier. En revanche, on peut éditer les propriétés de chacun d\’entre eux et en particulier le chemin de l\’exécutable et les arguments qui lui sont passés. L\’astuce que je vais vous détailler consiste donc à modifier ces propriétés pour le compilateur que vous utilisez. Vous allez comprendre!

Dans un premier temps, nous allons donc tenter de voir quelle compilateur vous avez choisi lors de la création de votre projet LaTeX. Si vous avez choisi le PDF en sortie, il y a de grandes chances pour que vous utilisiez PdfLatex. Pour en être convaincu, faites un clic droit sur votre projet dans Eclipse puis ouvrez la fenêtre properties. Dans le menu LaTeX Project Properties vous pouvez voir l\’exécutable utilisé pour compiler votre document. Dans l\’exemple suivant, il s\’agit de pdflatex.

\"Project

Ceci signifie qu\’à chaque fois que vous modifiez votre fichier .tex, la commande suivante sera exécutée :

$ /usr/bin/pdflatex -interaction=nonstopmode --src-specials document.tex

Or, nous voulons maintenant que Rubber prenne la place de PdfLatex. Pour ce faire, dans Eclipse faites Window > Preferences > TeXlipse > Builder Settings. Dans la liste proposée, séléctionnez votre compilateur (dans notre cas PdfLatex program) puis cliquez sur le bouton Edit… Dans la fenêtre qui s\’est ouverte, nous allons changer le chemin de l\’exécutable par celui de Rubber (fourni par la commande which rubber dans un terminal) puis nous allons adapter les arguments en conséquence :

\"Edit

La mention Program file ok indique que l\’executable /usr/bin/rubber existe bien. Il ne reste plus qu\’à valider et sauvegarder tout ça. Si vous faites maintenant une modification de votre fichier LaTeX dans votre projet, vous remarquerez que la commande de compilation devient alors

$ /usr/bin/rubber --pdf document.tex

Juste au cas où vous soyez contraint de remettre les paramètres d\’origine de PdfLatex, je vous les remets ici :

  • Program file : /usr/bin/pdflatex
  • Arguments : -interaction=nonstopmode –src-specials %input

Si quelqu\’un a une autre solution, je suis preneur… J\’ai eu beau fouiller, je n\’ai pas trouvé mieux.

NB : Merci à Charly pour l\’info sur Rubber!

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.

Environnement LaTeX sous Ubuntu

On m\’a fait remarquer il y a peu de temps que j\’avais publié un article sur comment écrire son CV en LaTeX sans expliquer comment faire du LaTeX… Remarque très pertinente! Du coup, je vais tenter de faire un rapide tutoriel permettant de se lancer rapidement et sans trop de difficultés dans l\’aventure LaTeX. Je laisserai de côté la syntaxe qui est déjà très bien documentée sur de nombreux sites (celui-ci étant mon favori) pour me concentrer plus spécifiquement sur l\’environnement nécessaire pour créer et compiler du LaTeX.

Installer LaTeX

Dans un premier temps, nous allons installer les bibliothèques et executables permettant de compiler des documents en LaTeX (que ce soit en DVI, PS ou encore PDF). Le plus simple, si on a un bon giga-octet de libre sur son disque, est d\’installer le paquet texlive-full. C\’est certes assez lourd en terme d\’espace mais on est sûr de ne rien oublier. Si en revanche on veut s\’éviter l\’installation de la prise en charge du grec ou du letton et économiser ainsi 300Mo je vous conseille plutôt d\’exécuter la commande suivante qui n\’installera que le nécessaire :

$ sudo apt-get install texlive texlive-lang-french texlive-latex-extra

En fonction de votre connexion, cette installation peut prendre un certain temps. Elle demande en effet de prendre plus de 400Mo dans les dépôts. Une fois ceci fait, vous devriez être en mesure de compiler votre premier document. Pour en être convaincu, créez un document doc.tex avec le premier éditeur de texte venu et écrivez dedans :

\\documentclass{article}
\\begin{document}
Premier test de compilation d\'un document \\LaTeX\\ en PDF.
\\end{document}

La compilation en PDF se fait ensuite simplement de cette manière :

$ pdflatex doc.tex

Dans le même dossier sera créé le fichier doc.pdf (mais aussi des fichiers temporaires que vous pouvez supprimer sans problème à savoir doc.aux et doc.log).

Seulement, écrire un document en LaTeX n\’est pas si évident à l\’aide d\’un simple éditeur de texte. Un peu d\’auto-complétion et de compilation automatique peut vite s\’avérer pratique si on veut gagner du temps et se consacrer exclusivement au contenu.

Éditeur LaTeX

Je ne connais pas vraiment les différents IDE (si on peut parler d\’IDE…) aidant à la rédaction de documents LaTeX donc je n\’oserai pas prétendre que ma solution est la meilleure. Cependant, je vais vous faire partager les outils que j\’utilise et qui pour le moment me conviennent parfaitement : Eclipse et le plugin TeXlipse.

Installation d\’Eclipse

Eclipse est un IDE open-source très connu écrit en Java fonctionnant essentiellement grâce à un système de plugins. Une communauté très active gravite autour de ce projet et propose des modules pour à peu près tout et en particulier pour le LaTeX. J\’utilise Eclipse aussi pour coder en Java et en C++. Du coup, pour éviter un nombre incalculable d\’applications et parce que je suis familier avec son interface, je l\’ai choisi aussi pour le LaTeX.

\ »Installation\ » est un bien grand mot puisque Eclipse n\’en nécessite justement pas! Pour pouvoir l\’utiliser, il faut dans un premier temps récupérer la dernière version disponible à cette adresse :

http://www.eclipse.org/downloads/packages/eclipse-classic-360/heliosr

Une fois l\’archive téléchargée, décompressez-là et lancez l\’exécutable eclipse. Si vous n\’avez pas de JRE (Java Runtime Environment), Eclipse vous le spécifiera puisqu\’il ne pourra tout simplement pas démarrer! vous pouvez remédier à ça en installant une implémentation libre du JRE d\’Oracle, OpenJDK :

$ sudo apt-get install openjdk-6-jre

Le lancement d\’Eclipse devrait ensuite ne plus poser de problèmes. Nous allons maintenant ajouter le plugin aidant à la création de documents LaTeX.

Ajout du plugin TeXlipse

Dans Eclipse, ouvrez Help > Install New Software. Dans le fenêtre qui s\’affiche, cliquez sur le bouton Add, ajoutez les informations suivantes puis validez :

  • Name : TeXlipse
  • Location : http://texlipse.sourceforge.net/
\"Add

Un item \ »TeXlipse\ » est alors proposé dans la liste. Cochez-le et cliquez sur Next. Il ne reste plus qu\’à suivre les instructions. Quelques questions sont posées durant le processus (accepter les conditions de licence, valider l\’installation) auxquelles vous devez bien entendu répondre par la positive.

Un redémarrage d\’Eclipse plus tard, le plugin est bien installé. On peut maintenant créer un projet LaTeX. Pour cela, File > New > Project… puis dans la fenêtre qui s\’est ouverte, séléctionnez LaTeX project dans le sous-menu de TeXlipse.

\"new

Attribuez un nom au projet et sélectionnez le format de sortie du document une fois le .tex compilé (par exemple PDF). Cet écran permet également de choisir le template qui sera utilisé pour mettre du contenu par défaut dans votre fichier LaTeX. Ça n\’a pas grand intérêt si ce n\’est de \ »pré-écrire\ » la balise \\documentclass{}. L\’étape suivante permet en particulier de renommer le fichier .tex principal et surtout le fichier de sortie (par exemple CV.pdf).

Et voilà! Il n\’y a plus qu\’à écrire son document. A chaque sauvegarde d\’un fichier du projet dans Eclipse, le LaTeX sera recompilé. Plus besoin de la ligne de commande, tout est automatique. Petite précision pour vous éviter des frayeurs, l\’instruction \\tableofcontents nécessite une double compilation pour que la table des matières du document soit mise à jour.

Créer son CV en LaTeX avec moderncv

moderncv est une classe de document pour LaTeX permettant de mettre en forme son CV de façon propre, lisible et dans un design moderne (d\’où son nom!). Cette classe est disponible dans le paquet TeXlive. Par rapport à d\’autres classes de ce type, elle a l\’avantage de supporter quelques options intéressantes comme deux mises en page différentes (version \ »casual\ » ou \ »classic\ ») ou un choix de couleur de bordures parmi le bleu, le vert, l\’orange, le rouge ou le gris. L\’exemple fourni par l\’auteur de cette classe est bien documenté et permet de réaliser rapidement son CV en s\’en inspirant. En version \ »classic bleu\ », le mien ressemble à ça :

\"CV\"

Autant dire que j\’en ai définitivement fini avec les CV créés sous Word (ou Open Office) ! Encore une preuve de la puissance de LaTeX.

[EDIT ] : Voir comment mettre à jour le package moderncv pour avoir accès à toutes les balises de l\’exemple.

[EDIT 2] : A la demande générale (!!), je mets en ligne le .tex de mon CV : cv.tex.