Concevoir une affiche scientifique avec Xfig et TeX

Gazette Linux n°96 — Décembre 2003

Isabelle Hurbain

Adaptation française

Joëlle Cornavin

Relecture de la version française

Article paru dans le n°96 de la Gazette Linux de décembre 2003.

Article publié sous Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.


Table des matières

1. Dessin : Xfig
2. Post-traitement
2.1. LaTeX
2.2. fig2dev
2.3. dvips
2.4. poster
2.5. psresize
2.6. bash
3. Exemple
4. Très grandes polices : il faut « bidouiller »

Une base d'utilisateurs traditionnellement « geek » a fourni au panorama du logiciel libre une grande quantité d'outils scientifiques. Une particularité clé du travail scientifique est la défense publique des méthodes de recherche et des résultats lors de conférences scientifiques : cette tâche est habituellement accomplie par le biais de présentations orales ou d'affiches. Toutes les deux exigent que les auteurs développent des supports visuels : des diaporamas pour les présentations orales, pour lesquels on dispose d'une pléthore d'outils (OpenOffice.org, LaTeX...) et une affiche propre aux sessions d'affichage. Ces affiches prennent la forme d'une feuille de papier au format A0, et une mise en valeur visuelle des éléments en cause est cruciale.

Un outil générique pour manipuler des images, comme The Gimp peut s'avérer très utile lorsque la plus grande partie de l'affiche doit être constituée de photos et d'images analogiques. Néanmoins, les graphiques scientifiques sont mieux gérés avec un outil graphique vectoriel. Cet article présentera une brève revue des outils utilisables pour incorporer des graphiques dans des affiches scientifiques.

1. Dessin : Xfig

The Gimp est un outil dédié aux images en mode point ou trame et, en tant que tel, destiné à traiter des pixels individuels. Cette approche convient pour des photos ou des documents artistiques. Les dessins techniques adoptent une approche assez différente : ils sont mieux décrits par leurs éléments géométriques que par les pixels qui les constituent. Cette approche « vectorielle » a l'avantage supplémentaire de produire des graphiques indépendamment de leur résolution, autorisant de ce fait des facteurs de zoom et d'agrandissement arbitraires.

Un certain nombre d'applications vectorielles libres sont disponibles actuellement : Sodipodi, Karbon14, Sketch... Certaines s'intègrent parfaitement avec les environnements de bureau Gnome et KDE. Même The Gimp, depuis la version 1.2, comporte un module externe (plug-in) rendant possible une conception vectorielle assez élaborée, Gfig ; elle se trouve dans le menu (Filtres -> Rendu). Toutefois, le grand classique des applications X Window reste Xfig.

Xfig est une application éprouvée qui utilise les composants graphiques X Athena. Il s'agit d'un produit très évolué et, conséquemment, sa stabilité est au-delà de tout doute. C'est une fonctionnalité extrêmement appréciée, puisque le travail sur les affiches se poursuit fréquemment jusqu'à la toute dernière minute.

Une autre conséquence de la maturité du projet est que Xfig s'est enrichi grâce aux contributions d'une vaste communauté d'utilisateurs. Ceci a produit un ensemble exhaustif de galeries pour divers domaines comme l'électronique, l'UML (Unified Modeling Language, langage de modélisation objet unifié), la musique, les cartes, etc.

C'est un programme fiable car il enregistre ses informations dans un format texte directement accessible, depuis lequel la récupération des informations est tout à fait naturelle. Ce type de format ne suit pas la tendance moderne, en d'autres termes, ce n'est pas un système basé sur le SGML. Il consiste plutôt en la quantité minimale d'informations nécraquore pour décrire l'image, enregistrée en tant que caractères ASCII. Une description précise du format est disponible, par exemple dans Le format de fichier FIG (en anglais) ou, sur un système Debian, dans le fichier /usr/share/doc/xfig/FORMAT3.2.gz. Sa régularité permet de le traiter avec les filtres de texte Unix/ UNIX/GNU classiques : sed, awk et assimilés. Il y a donc des chances pour que vous préfériez l'ASCII au format XML. Par ailleurs, des applications phares comme Gnuplot et plotutils de GNU peuvent produire des fichiers FIG : une liste complète est disponible dans le fichier FIGAPPS, inclus dans la distribution Xfig.

Une autre fonctionnalité agréable de Xfig tient à sa capacité à exporter à l'aide de formats compatibles avec LaTeX. Ceci est vrai à la fois pour les textes et les images. Un « drapeau spécial » est affecté à chaque morceau de texte, pour signaler s'il doit être exporté « brut » ou « en tant que TeX ». Les images sont codées en fonction des options du paquetage LaTeX que choisit l'utilisateur. Comme nous aborderons ce point ultérieurement, continuez à lire ou à consulter les fichiers LATEX.AND.XFIG et PDFLATEX.AND.XFIG dans la distribution Xfig.

Dans un esprit d'équité, il est maintenant temps d'exposer un certain nombre de limitations de Xfig. Il n'a pas mal vieilli, mais subit quelques inconvénients hérités d'anciennes technologies.

Les utilisateurs de programmes modernes seront certainement déçus par son unique niveau d'annulation. Il s'avère donc payant d'être un peu prudent lorsqu'on dessine.

Comme mentionné précédemment, Xfig utilise les widgets Athena et souffre de leurs limitations. Par exemple, il n'est pas aisé de gérer les caractères accentués dans les fenêtres de dialogue (et dans l'outil d'Édition), ce qui est très frustrant pour la plupart des utilisateurs européens. Notez qu'il autorise l'utilisation de la touche Meta en tant que touche Compose, permettant ainsi les caractères accentués lors de l'utilisation de l'outil Texte sur le canevas.

Par ailleurs, Xfig gère nombre de formats d'export. De facto, certains sont précieux pour les utilisateurs de LaTeX. Toutefois, sa gestion des formats graphiques modernes, comme le SVG (Scalable Vector Graphics) basé sur XML, est encore expérimental.

2. Post-traitement

2.1. LaTeX

LaTeX est un ensemble de macros construit au-dessus du système de composition TeX largement utilisé dans la publication d'articles scientifiques, de rapports et de livres. Bien que beaucoup d'utilisateurs n'en soient pas conscients, les diaporamas sont facilement composables également. En revanche, la conception d'une affiche complète avec LaTeX seul est une tâche impressionnante, car il faut placer de nombreux objets dans un espace 2D avec éventuellement des interconnexions complexes entre eux. La composition peut donc être visuellement disposée avec Xfig et affinée plus tard avec un éditeur TeX.

Pour faciliter l'intégration du travail visuel avec l'édition du code source TeX, les utilisateurs de Xfig disposent d'une large palette d'options. Premièrement, ils peuvent choisir d'exporter un fichier soit en tant que bloc LaTeX soit en tant que fichier LaTeX complet. Deuxièmement, un élément graphique donné est éventuellement traduit en plusieurs expressions TeX, selon la disponibilité des macros ou les préférences de l'utilisateur ; ce point est abordé dans le prochain paragraphe.

2.2. fig2dev

Le site web de Xfig héberge également transfig, qui comporte un programme pour exporter depuis le format Fig vers plusieurs « périphériques », fig2dev. Cette fonctionnalité est disponible dans l'interface graphique également, dans l'option Export du menu Fichier. Comme nous avons l'intention en dernier ressort d'automatiser la tâche complète autant que faire se peut, nous porterons notre attention sur le programme indépendant.

La transformation des documents Fig en éléments TeX peut être réalisée de plusieurs manières. Chaque méthode diffère dans le nombre d'éléments graphiques qu'elle peut gérer (par exemple la rotation des textes ou le remplissage des rectangles), au prix de nécessiter des paquetages LaTeX plus sophistiqués : epic, eepic, eepicemu, pictex. Les meilleurs résultats sont obtenus avec une combinaison de Postscript (ou PDF) et TeX : ceci garantit que tous les éléments affichés dans l'écran Xfig seront présents dans la sortie imprimable. Deux avertissements : les textes dotés de drapeaux spéciaux seront affichés sous forme de TeX brut dans Xfig, mais harmonieusement composés dans le document final ; et certains prévisualisateurs, comme Xdvi (distribué avec teTeX), n'étant pas capables de représenter certains types d'éléments, comme les textes ayant subi une rotation, il vaut mieux utiliser dvips et un visualisateur Postscript.

2.3. dvips

Le traitement d'un fichier TeX produit par défaut des fichiers au format DVI, qui signifie DeVice Independant (indépendant du périphérique). Ce format est prêt à être transformé pour obtenir un ensemble d'instructions d'affichage. Le format le plus répandu pour les documents finaux est PostScript, qui fournit un langage de programmation compris par presque toutes les imprimantes haut de gamme.

Le programme dvips convertit un fichier DVI en PostScript et est distrubué avec les principaux paquetages TeX, comme tetex. Il offre plusieurs options intéressantes qui donnent accès aux puissantes fonctionnalités de PostScript. L'une d'elles est la capacité de configurer la taille du papier, que ce soit dans une unité de mesure, comme le centimètre, ou un nom standard, comme A1. Cette fonction est accessible par les options -t et -T.

2.4. poster

La sortie de dvips est pratique si l'on dispose d'une imprimante acceptant le A0. Ce n'est pas souvent le cas. Une alternative acceptable serait d'imprimer 16 pages A4 ou 8 pages A3. Le paquetage poster découpe un PostScript d'une page en petits morceaux, que l'on peut coller ensemble pour former l'image complète. Des directives indiquant où massicoter sont imprimées également. Poster est disponible sur le site web de KDE et sous forme de paquetage Debian.

2.5. psresize

Pour distribuer de petites copies de notre affiche, psresize est l'outil idéal pour les créer. Il est inclus dans le paquetage Debian psutils.

2.6. bash

Le processus entier doit être répété pour toute modification du dessin Xfig. Prenez sérieusement en considération le petit travail supplémentaire que constitue l'assemblage de toutes les étapes mentionnées dans un script shell. Nous en présentons un ici, développé pour le shell le plus répandu, bash sous GNU. Lorsqu'on appelle le script suivant dans le répertoire contenant le fichier Fig, le processus entier est lancé. Notez qu'il ajoute les préambules et postambules LaTeX qu'exigent plusieurs fonctionnalités LaTeX utilisées par l'auteur, ainsi que quelques autres qu'exigent les exportations Xfig.

(Nous venons de réaliser l'inclusion d'un script simple utilisable pour effectuer la conversion du format Fig au format EPS, TeXfig2eps, dans la distribution Xfig. Comme notre étude le montre, il peut ne pas être suffisant dans certains cas).

#!/bin/bash
###############################################
# Traite le fichier source FIG pour l'affiche #
###############################################

######################################################
# Utilisation :                                      #
#         1. Concevez une affiche avec Xfig          #
#         2. Enregistrez-la sous forme de fichier    #
#            FIG normal, avec un nom, par exemple    #
#            'monfichier.fig'.                       #
#         3. Substituez 'BASE=poster' vers           #
#            'BASE=monfichier dans ce script         #
#         4. Lancez ce script au sein du répertoire  #
#            où se trouve 'monfichier.fig'           #
#         5. Les fichiers de sortie seront :         #
#            'monfichier-a0.ps' - une page de taille #
#            affiche                                 #
#            'monfichier-a4-1.ps' - une mini-affiche #
#            de taille A4                            #
#            'monfichier-a4-16.ps' - seize pages à   #
#            assembler                               #
#						     #
######################################################

# base du nom de fichier

BASE=poster

# convertit le FIG en LaTeX + PostScript

echo '
\documentclass{article}
\usepackage{amsmath}          % symboles et équations
\usepackage{amsfonts}         % nécraquore pour les caractères 'blackboard' (mathbb)
\usepackage[french]{babel}    % titres dans notre langue
\usepackage[latin9]{inputenc} % caractères accentués
\usepackage[a0paper,margin=0cm,nohead,nofoot]{geometry} % marges
\usepackage{graphicx}         % inclusion de figures
\usepackage{color}            % importation depuis Xfig
\usepackage{epic}             % complémente la suite
\usepackage{eepic}            % remplissage Xfig
\usepackage{rotating}         % texte dans les images
\usepackage{type1cm}          % polices de taille arbitraire
\begin{document}
' > $BASE.tex

fig2dev -L pstex $BASE.fig > $BASE.pstex

echo -n '
\begin{picture}(0,0)
\includegraphics{'$BASE'.pstex}
\end{picture}
' >> $BASE.tex

fig2dev -L pstex_t $BASE.fig >> $BASE.tex

echo '\end{document}' >> $BASE.tex

# compose le source LaTeX

latex $BASE

# transforme en un PostScript de taille presque DIN A0

dvips -o $BASE-a0.ps -T 84cm,118cm $BASE

# crée la petite version A4 de l'affiche

psresize -Pa0 -pa4 $BASE-a0.ps $BASE-a4-1.ps

# crée les 16 pages A4 qui constituent l'affiche

dvips -o $BASE.eps -T 84cm,118cm -E $BASE
poster -mA4 -pA0 $BASE.eps > $BASE-a4-16.ps

Certaines des commandes de ce script nécessitent des explications supplémentaires. Les paragraphes suivants tentent de clarifier ces aspects.

Le \usepackage{color} est conseillé dans /usr/share/doc/xfig/README.Debian dans les systèmes Debian. Les dernières versions du pstex de Xfig utilisent la commande \RGB pour changer la couleur du texte.

D'autres paquetages ont été inclus selon les besoins, souvent à l'aide d'une procédure « essai et erreur ». L'exemple ne les utilise pas tous, mais il peut être représentatif en tant que liste des paquetages dont nous avons déjà eu besoin pour nos propres affiches.

Notez que psresize fonctionne sur les fichiers .ps, et poster sur des fichiers .eps. dvips est donc exécuté deux fois, avec et sans l'option -E.

3. Exemple

Pour illustrer l'utilisation de ce script, créons d'abord la mise en page graphique avec Xfig. À l'aide de la commande suivante :


$ xfig -paper a0 -portrait

le canevas adopte la taille et l'orientation de l'affiche dont nous avons besoin. Dessinons un exemple d'affiche, présenté ici dans une capture d'écran et ici au format Fig. Enregistrons-le sous le nom poster.fig. La base du nom poster est affectée à la variable BASE dans les premières lignes du script. Après avoir lancé le script dans le répertoire où se trouve poster.fig, les fichiers de sortie suivants sont intéressants :

  • poster-a0.ps : contient le postscript de taille A0, prêt à être imprimé sur une imprimante ou un traceur acceptant le A0.

  • poster-a4-1.ps : l'affiche réduite au format A4, pour être imprimée et distribuée aux participants de la session d'affichage.

  • poster-a4-16.ps : un fichier postscript contenant 16 pages A4 qui, assemblées, forment l'affiche A0.

4. Très grandes polices : il faut « bidouiller »

La distribution tetex utilise des polices en mode point par défaut, ce qui nécessite des facteurs d'agrandissement (définis par \magstep) discrets. Ceci conduit à des avertissements comme :


LaTeX Font Warning: Font shape `OT1/cmr/m/n' in size <30> not available
(Font)              size <24.88> substituted on input line 5.

LaTeX Font Warning: Size substitutions with differences
(Font)              up to 5.12pt have occurred.

qui pourraient se traduire par :


Avertissement polices LaTeX : La forme de police 'OTI/cmr/m/n' n'est pas
(Polices)		      disponible en taille <30>
(Polices)		      La taille a été substituée en <24.88> à la ligne
(Polices)                     5 de l'entrée.

Avertissement polices LaTeX : Des substitutions de taille avec des différences
(Polices) 		      allant jusque 5.12pt ont été effectuées.

Comme décrit dans la documentation de tetex, \usepackage{type1cm} autorise l'utilisation de polices Computer Modern à des tailles de type arbitraire. Du fait que cette commande doit écraser les définitions les polices, il peut être nécraquore de l'inclure après les autres paquetages.

Notez que transfig utilise un ensemble fixe de tailles de polices, géré par la macro


#define TEXFONTSIZE(S)        (texfontsizes[((S) <= MAXFONTSIZE) ? round(S)\
                                                         : (MAXFONTSIZE-1))])

qui limite indirectement la taille maximale des polices à 41 points. Pour l'exemple que nous présentons, nous avons dû éditer les sources de transfig (dans le fichier texfonts.h) pour changer cette macro en

#define TEXFONTSIZE(S)        (S)

La méthode Debian :

$ su
Password:
# apt-get remove transfig
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
  transfig
0 packages upgraded, 0 newly installed, 1 to remove and 3  not upgraded.
Need to get 0B of archives. After unpacking 799kB will be freed.
Do you want to continue? [Y/n]
(Reading database ... 67797 files and directories currently installed.)
Removing transfig ...
# exit
$ apt-get source transfig
Reading Package Lists... Done
Building Dependency Tree... Done
Need to get 340kB of source archives.
Get:1 ftp://ftp.es.debian.org testing/main transfig 1:3.2.4-rel-4 (dsc) [652B]
Get:2 ftp://ftp.es.debian.org testing/main transfig 1:3.2.4-rel-4 (tar) [326kB]
Get:3 ftp://ftp.es.debian.org testing/main transfig 1:3.2.4-rel-4 (diff) [13.0kB]
Fetched 340kB in 1m51s (3062B/s)
dpkg-source: extracting transfig in transfig-3.2.4-rel
$ vi transfig-3.2.4-rel/fig2dev/dev/texfonts.h
$ cd transfig-3.2.4-rel/
$ dpkg-buildpackage -rfakeroot -uc -us
...
[lots of output]
...
$ cd ..
$ su
Password:
# dpkg -i transfig_3.2.4-rel-4_i386.deb
Selecting previously deselected package transfig.
(Reading database ... 67734 files and directories currently installed.)
Unpacking transfig (from transfig_3.2.4-rel-4_i386.deb) ...
Setting up transfig (3.2.4-rel-4) ...
# exit

Si vous trouvez cette méthode fastidieuse, jetez un coup d'œil à ce répertoire, où vous pourrez trouver un fichier de style utilisable pour produire des grandes polices pour de grandes pages (des affiches).

C.E.C Artime est un fan de GNU et plaide pour la cause du logiciel libre depuis 2000.

J.A. Baro est un utilisateur de Linux et un codeur Perl depuis 1996.

Adaptation française de la Gazette Linux

L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.

Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://wiki.traduc.org/Gazette_Linux.

Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.