Introduction à DocBook sous Linux

Parce qu\’il n\’y a pas que le LaTeX pour écrire de bons documents, je vais vous présenter rapidement les bases de DocBook 5.0. Mais d\’abord, qu\’est-ce que DocBook?

DocBook

DocBook peut se résumer dans un premier temps à un schéma XML définissant un standard de création de documents (concrètement un DTD, un XSD, …). Il offre un grand nombre de balises pour écrire un document. C\’est un \ »format\ » très utilisé pour les documentations de projets open-source par exemple. Par abus de langage, nous parlerons de \ »fichier DocBook\ » durant le reste de cet article pour parler d\’un fichier XML écrit en suivant le schéma DocBook.

Du fait qu\’il soit standardisé, un même fichier DocBook peut servir de base à plein de rendu différents (HTML, PDF, …).

Enfin, à la base de DocBook, il y a le célèbre éditeur d\’ouvrages consacrés à l\’informatique : O\’Reilly (qui a malheureusement mis la clé sous la porte…).

Créer son premier document

Nous allons donc créer notre premier document à base de DocBook. Pour commencer, il faut installer le paquet suivant :

$ sudo apt-get install docbook-xsl-ns

Ce paquet ajoute des fichiers XSL qui sont des feuilles de style pour document XML. Elles permettent, à partir d\’un fichier basé sur DocBook, de lui appliquer un style pour un rendu spécifique. C\’est en quelque sorte le même principe que le CSS appliqué au HTML.

Dans un premier temps, nous allons écrire un fichier XML, essai.xml, basé sur le schéma DocBook.

<?xml version=\"1.0\" encoding=\"UTF-8\"?>
 <article version=\"5.0\" xmlns=\"http://docbook.org/ns/docbook\">
   <title>Premier document DocBook</title>
   <articleinfo>
     <author>
       <firstname>John</firstname>
       <surname>Doe</surname>
     </author>
     <copyright>
       <year>2010</year>
       <holder>One More Blog</holder>
     </copyright>
   </articleinfo>
   <sect1>
      <title>Section de premier niveau</title>
      <para>
        Ce texte est dans un paragraphe.
      </para>
      <itemizedlist>
        <listitem>
          premier item d\'une liste;
        </listitem>
        <listitem>
          et le second item.
        </listitem>
      </itemizedlist>
   </sect1>
 </article>

Les noms des balises font que le code est très compréhensible et, du coup, rapide à intégrer. Ce petit morceau de code n\’est qu\’un aperçu minime de ce qu\’il est possible de faire avec DocBook. Bref, nous allons maintenant appliquer à ce fichier un style afin de créer un rendu. En HTML d\’abord, puis en PDF.

$ xsltproc -o essai.html /usr/share/xml/docbook/stylesheet/docbook-xsl-ns/xhtml/docbook.xsl essai.xml

La syntaxe est très simple. On spécifie le nom du fichier en sortie grâce à l\’option -o. On donne ensuite une feuille de style XSL et le fichier XML en entrée. Le résultat est le suivant :

\"Exemple

Un peu comme en LaTeX, tout est géré. Une table des matières est générée en fonction des sections et sous-sections avec les liens qui vont bien. Des id et class sont ajoutés à toutes les balises HTML de façon à éventuellement rajouter une feuille de style, …

Nous allons maintenant, à partir du même code XML, générer une version PDF de ce DocBook. Cependant, cela nécessite l\’installation de quelques outils supplémentaires. Dans un premier temps, nous allons ajouter les feuilles de styles prévue pour le PDF :

$ sudo apt-get install docbook-xsl-doc-pdf

Il nous faut ensuite récupérer l\’utilitaire FOP (Formatting Objects Processor). Il s\’agit d\’un programme écrit en Java qui permet de générer entre autres des fichiers PDF à partir de XML et XSD. Cet utilitaire est présent dans les dépôts d\’Ubuntu – et des autres distributions j\’imagine – mais dans sa version 0.95. Or, est sortie depuis quelques mois une version 1.0 plus aboutie. Nous allons donc récupérer cette version et y ajouter une librairie, Offo, qui gère les découpages de mot (hyphenation ou trait d\’union si fin de ligne) et qui évitera des erreurs lors de la génération du document.

$ wget http://apache.crihan.fr/dist//xmlgraphics/fop/binaries/fop-1.0-bin.tar.gz
$ tar -xvzf fop-1.0-bin.tar.gz
$ cd fop-1.0/
$ wget http://freefr.dl.sourceforge.net/project/offo/offo-hyphenation/1.2/offo-hyphenation-fop-stable_v1.2.zip
$ unzip offo-hyphenation-fop-stable_v1.2.zip
$ cp offo-hyphenation-fop-stable/fop-hyph.jar lib/

Lançons maintenant la création de notre document PDF :

$ ./fop -xml ../essai.xml -xsl /usr/share/xml/docbook/stylesheet/docbook-xsl-ns/fo/docbook.xsl -pdf ../essai.pdf

Là encore c\’est très simple. L\’option -xml doit être suivie du fichier DocBook, l\’option -xsl d\’une feuille de style spécifique au PDF et enfin la dernière option défini le fichier en sortie. Le résultat est très satisfaisant : \"PDF

Ce n\’est là qu\’un tout petit aperçu de ce qu\’il est possible de faire avec DocBook. Comme pour LaTeX, il existe plusieurs classes (ici nous avons testé la classe article) pour différents usages. Je vous laisse fouiller un peu et trouver votre bonheur dans la documentation. Je vous propose quelques sites intéressants qui d\’une part m\’ont aidé à écrire ce premier article sur le sujet et qui d\’autre part proposent de la documentation de qualité pour approfondir tout ça :

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.