De nombreux utilisateurs de GNU/Linux se recrutent dans le milieu universitaire, et une large proportion d'entre eux utilise LaTeX pour rédiger leurs publications: articles, thèses, rapports..., etc. Dans cet article, nous allons découvrir qu'Emacs fournit un environnement très confortable et productif pour utiliser LaTeX et son compagnon, BibTex.
LaTeX est un programme qui, à l'instar de PageMaker ou QuarkXpress, fait de la mise en page de documents. Cependant LaTeX n'est pas un programme interactif. Son principe consiste à rédiger le document avec un éditeur de texte tel que vi ou emacs, et à insérer les ordres de mise en page directement à l'intérieur du texte. Ceux-ci sont ensuite interprétés par un programme qui compose le document final. LaTeX, quand il est correctement utilisé, permet d'obtenir des documents d'une qualité typographique largement supérieure à celle des logiciels de traitement de texte tels que Word et consorts. Il est idéal pour créer des document complexes ou bien des séries de documents qui doivent avoir une mise en page identique. LaTeX excelle particulièrement dans la mise en forme d'articles ou de livres scientifiques (D. Knuth, l'inventeur du programme TeX sur lequel est fondé LaTeX, l'avait conçu pour obtenir une mise en page parfaite pour ses célèbres livres ``The Art of Computer Programming'').
BibTeX est un programme associé à LaTeX, qui fournit une assistance précieuse pour réaliser des bibliographies semblables à celles qui terminent tout ouvrage scientifique qui se respecte. La rédaction d'une bibliographie est un travail laborieux et plusieurs logiciels commerciaux existent pour faciliter ce travail. Nous verrons que BibTeX, associé à Emacs, tient la comparaison avec les meilleurs d'entre eux (Endnote, Procite...).
La rédaction de documents avec LaTeX et BibTeX s'apparente quelque peu à de la programmation, et c'est ici qu'intervient Emacs: avec les modules auctex et reftex, celui-ci fournit un environnement très puissant. Par exemple, Emacs colore syntaxiquement les commandes latex, indente automatiquement le texte pour augmenter la lisibilité, et si latex détecte des erreurs lors de la compilation, Emacs positionne automatiquement le curseur sur les lignes problématiques. Il est également possible d'afficher le document en mode plan, de suivre les cross-références, de faire des recherches dans les bases de références bibtex, et encore bien d'autres choses. Mais avant tout, LaTeX est-il installé sur votre ordinateur?
Les distributions récentes GNU/Linux comprennent généralement le package tetex qui inclue LaTeX. Sinon, l'association Gutenberg des utilisateurs francophones de TeX [1] fournit un CD-ROM contenant une distribution tex complète. Vous pouvez vérifier si LaTeX est correctement installé et configuré sur votre système en tapant, dans un terminal sous X-Window:
latex sample2e # compilation xdvi sample2e # affichage dvips sample2e -o # vers postscript lpr sample2e.ps # impression
La première commande produit le fichier sample2e.dvi, et la seconde prévisualise celui-ci (après avoir créer les fonts si nécessaire). Les deux dernières convertissent en postscript et impriment le fichier. Le fichier source, sample2e.tex, est distribué avec LaTeX (localisez-le avec `locate sample2e.tex') et fournit un exemple de base que les débutants étudierons avec profit (ceux qui désirent apprendre LaTeX trouveront des informations utiles sur le site du (La)TeX Navigator [2]).
La distribution de base d'Emacs dispose d'un mode d'édition des documents latex. Toutefois, une extension nommée `AUC TeX', accroît considérablement les possibilités d'Emacs dans ce domaine. Dans la suite, nous supposerons que vous disposez de ce module. Pour le vérifier, tapez `M-x latex-mode', puis `C-h m' qui affiche l'aide du mode: si vous voyez apparaître `See info under AUC TeX' dans les premières lignes, tout va bien. Sinon, il vous faudra installer AUC TeX [3].
Ouvrez Emacs et créez un fichier test.tex (C-x C-f test.tex). `LaTeX' s'affiche dans la ligne de mode. Entrez `C-c C-e', puis acceptez les défauts proposés en appuyant sur la touche `Entrée'. Cela fait apparaître les trois lignes suivantes:
\documentclass{article}
\begin{document}
\end{document}
Editez ce fichier pour qu'il devienne:
\documentclass[a4paper,12pt]{article}
\usepackage[latin1]{inputenc}
\usepackage{french}
\begin{document}
\title{Essai de \LaTeX}
\author{Harry Cover\thanks{harry.cover@fbi.usa}}
\maketitle
\begin{abstract}
LaTeX c'est le pied!
\end{abstract}
\section*{Je suis un titre}
Et Voilà!
\end{document}
Une fois l'édition terminée, tapez `C-c C-c'. Emacs propose de sauver le fichier puis affiche `Command: (Default LaTeX)'. Acceptez. Quelques instants plus tard doit s'afficher `LaTeX: successfully formatted {1} page' (Toutefois, si vous avez fait une erreur dans le source LaTeX, un message vous préviendra et `C-`' permettra de la localiser). Tapez à nouveau `C-c C-c'. Cette fois-ci la commande proposée sera `View', qui lance le visualiseur xdvi: le document, mis en page, s'affiche dans une fenêtre séparée.
Voilà donc le principe de base: on édite le document dans un buffer d'Emacs, puis on appuie sur `C-c C-c' pour lancer latex. Si l'on n'a pas fermé le visualiseur xdvi, il suffit de remettre le focus sur celui-ci et de cliquer sur `reread' pour visualiser la nouvelle version du document. Sinon, un second appui sur `C-c C-c' ouvre une nouvelle fenêtre de prévisualisation. Petit exercice: copiez le fichier sample2e.tex dans un répertoire personnel, ouvrez-le avec Emacs, et utilisez `C-c C-c' pour lancer latex, puis xdvi.
Si le document contient des commandes de citations bibliographiques (\cite), il est nécessaire de générer la bibliographie en lançant BibTeX après la première passe de latex. Cela s'effectue en tapant `C-c C-c Bib TAB', ou en sélectionnant `bibtex' dans le menu `Command'. Quand le document est parfait, vous pourrez l'imprimer, en postscript, avec `C-c C-c Print'.
Dans le cas de documents complexes, il est usuel que le source soit réparti dans plusieurs fichiers (par exemple un par chapitre). Ces fichiers sont inclus dans un fichier maître. AUCTeX sauve dans chaque fichier du projet le nom du fichier maître, ce qui permet de recompiler le projet à partir d'un fichier inclu, sans avoir à basculer vers le maître.
Pendant la phase d'édition du texte, Emacs utilise des couleurs pour distinguer les commandes LaTeX du texte proprement dit. La lisibilité de ce dernier peut être améliorée grâce aux commandes `LaTeX-fill-buffer' et `LaTex-fill-paragraph' (M-q) qui formattent, respectivement, le buffer entier ou le paragraphe courant. L'algorithme de reformattage est assez intelligent pour ne pas reformatter les commentaires ou les environnements qui ne doivent pas l'être, par exemple `verbatim'.
AucTeX fournit un grand nombre de fonctions qui insèrent des commandes LaTeX dans le document. Vous pouvez les lister par `C-h a latex'. Une description des commandes latex de base est disponible sous forme `info' (accessible par `C-h i m latex'). Certaines commandes apparaissent dans le menu `LaTeX' et sont associées à des raccourcis clavier. Les plus utiles sont peut-être celles qui permettent de changer le style de caractère du texte sélectionné (`C-c C-f ...'), ou d'insérer un nouvel environnement (figure, itemize, verbatim, center...): `C-c C-e'.
En déclenchant le mode inférieur RefTeX par `M-x reftex-mode', vous aurez accès à des fonctions supplémentaires. Par exemple, vous pourrez afficher et vous déplacer dans le plan de votre document avec la fonction reftex-toc liée aux touches `C-c ='.
Nous vous laissons découvrir les autres fonctionnalités de auctex et reftex en consultant leurs documentations, accessibles par `C-h i m auctex' et `C-h i m reftex' (en supposant que votre système est bien configuré; ils ne le sont pas tous, hélas! Vous pouvez toujours localiser auctex.info et reftex.info et utiliser `info -f' en ligne de commande pour les lire). Nous allons maintenant détailler les fonctions qui concernent l'emploi de BibTeX.
Pour utiliser BibTeX, il faut d'abord créer un fichier de bibliographie contenant des références. Sous Emacs, créez un fichier mesrefs.bib. Le mode BibTex et le menu entry-type doivent apparaitre. Sélectionnez `book', ou bien tapez `C-c C-e b', et éditez le texte pour qu'il devienne:
@Book{,
ALTauthor = {D. Knuth},
ALTeditor = {},
title = {The TeXbook},
publisher = {Addison Wesley},
year = {1983},
OPTkey = {},
OPTvolume = {},
OPTnumber = {},
OPTseries = {},
OPTaddress = {},
OPTedition = {},
OPTmonth = {},
OPTnote = {},
OPTannote = {}
}
Tapez `C-c C-c' et acceptez l'identifiant par défaut (`knuth83:_texbook'), l'entrée est nettoyée et devient:
@Book{knuth83:_texbook,
author = {D. Knuth},
title = {The TeXbook},
publisher = {Addison Wesley},
year = 1983
}
Vous pouvez ainsi ajouter autant de références que vous le désirez, chacune devant avoir un `identifiant' unique. Les différents types d'entrées et leurs formats sont documentés dans le manuel btxdoc (localisable par `locate btxdoc'). Quand votre fichier de bibliographie aura grandi de façon anarchique, et que vous désirez le trier, aligner proprement les références..., etc, vous pourrez employer l'excellent outil bibtool [4]. Mais nous n'en somme pas encore là!
Il s'agit maintenant de créer un document LaTeX incorporant cette référence. Par exemple:
\documentclass[a4paper]{article}
\begin{document}
\ldots \cite{knuth83:_texbook} \ldots
\bibliographystyle{plain}
\bibliography{myrefs.bib}
\end{document}
Pour traiter un tel fichier, il faut lancer successivement: latex, bibtex et encore une fois latex (par des `C-c C-c' successifs). La première passe de latex sauve les identifiants de citation dans le fichier file.aux. Bibtex lit ce fichier, recherche les références correspondantes dans le fichier myrefs.bib, les formatte en fonction du style requis (ici `plain'), et les sauve dans le fichier file.bbl. La seconde passe de latex inclue ce fichier dans la génération du document final.
Cet exemple emploie le style `plain'. Vous pouvez également essayer les styles standards `unsrt' et `abbrv'. Il existe en fait de nombreux styles (cf. figure 1), chacun étant décrit dans un fichier d'extension `.bst' qui est rédigé dans un language inspiré du Forth (documenté dans btxhak). Il y a quelques années, le choix des styles était encore restreint et il m'est arrivé de devoir modifier un de ces fichiers pour obtenir précisement le résultat voulu par l'éditeur. Néamoins, la situation s'est améliorée ces dernières années et des styles puissants, tels que apacite et natbib ont vu le jour. Natbib est particulièrement impressionnant: il peut gérer à la fois les types de citation numériques et par nom d'auteur; il trie automatiquement et comprime les listes de numéros dans les renvois de citations; il est compatible avec chapterbib qui autorise des listes de références séparées par chapitre. Pour voir toutes les possibilités qu'il offre, le lecteur devra consulter natbib.tex (si natbib est absent de votre système, vous pouvez le récupérer sur le CTAN [5]).
Pour citer un article, il faut se souvenir de son identifiant. Bien entendu il est possible d'ouvrir les fichiers biblios dans plusieurs buffers et d'utiliser une commande de recherche (C-s) pour localiser un article, cependant il existe une méthode bien plus efficace. Lorsqu'on travaille sur un document qui contient un appel à `\bibliography', le mode reftex fournit deux fonctions ``spectaculaires'': `C-[' (reftex-citation) et `C-&' (reftex-view-crossref).
Reftex-citation demande une expression régulière et liste dans une nouvelle fenêtre toutes les références qui lui correspondent. Cela permet de localiser tous les articles écrits par un auteur, ou bien tous ceux qui contiennent un mot-clé dans le titre. Emacs permet de se déplacer de référence en référence, d'en voir les détails, et de sélectionner celle à inclure dans le texte.
Réciproquement, quand le texte contient un appel à citation (\cite{identifiant}), la commande reftex-view-crossref permet d'afficher l'entrée bibliographique correspondante : le curseur étant placé sur l'identifiant, appuyer sur `C-&' provoque l'affichage de la référence complète dans une autre fenêtre (voir figure 2).
Les versions récentes des logiciels commerciaux de bibliographie ont une une fonctionnalité très appréciée par les utilisateurs: l'importation transparente de référence à partir du web. Un simple clic de souris permet d'ajouter les résultats d'une recherche effectuée sur un site bibliographique dans sa base personnelle. Dans le cas de la base Medline, une solution existe pour BibTeX. Celle-ci a été imaginée par Tom Schneider: il a écrit un script perl qui test régulièrement si un fichier donné a été modifié et, si c'est le cas, lance une commande [5]. Or, lorsqu'on clique sur le bouton "Save" d'un écran de recherche Medline, les résultats de la recherche sont sauvés dans un fichier sur le disque local (query.fcgi par défaut). Il suffit donc de déclencher automatiquement un convertisseur ``Medline - > bibtex'' pour que les références soient ajoutées à la fin d'un fichier bibtex personnel. Cette solution est simple et générale: il ``suffit'' de savoir convertir au format BibTeX les références produites par le serveur web.
LaTeX et BibTeX sont des outils puissants, mais d'un emploi quelque peu spartiate en ligne de commande. Emacs améliore nettement leur confort d'utilisation, notamment en permettant de facilement naviguer dans un document complexe ou de retrouver très rapidement des références bibliographiques. Nous n'avons pas évoqué d'autres outils, tels que `makeindex' qui aide à la création d'un index, `ispell' qui détecte les fôtes d'orthographe, ou encore le système de contrôle de version qui permet de conserver la trace des versions successives d'un document. Pour dompter Emacs ou LaTeX, la patience est une qualité indispensable.
[1] Association Gutenberg: http://www.gutenberg.eu.org
[2] LateX Navigator: http://www.loria.fr/services/tex
[3] AUC TeX: http://www.iesd.auc.dk/ amanda/auctex
[4] bibtool: ftp://ftp.tex.ac.uk:/tex-archive/biblio/bibtex/utils/bibtool
[5] Comprehensive TeX Archive Network: http://www.ctan.org
[6] Site de Tom Schneider (atchange): http://www.lmmb.ncifcrf.gov/~ toms/
1Copyright (c) 2000 Christophe Pallier. Permission est donnée
de copier, distribuer et modifier ce document selon les termes de la
licence GNU pour les documentations libres, version 1.1, publiée par la
Free Software Fondation (www.fsf.org/copyleft/fdl.html). L'original de ce
texte est accessible sur http://www.pallier.org.