Previous Contents Next

Chapter 8   Gestion des figures

La gestion des figures est un peu particulière. Les points suivants décrivent la manière et les trucs pratiques à connaître pour rendre un document graphiquement agréable.

8.1   Comment inclure une figure ?

Remarque :
A. K. Goel a écrit un long document concernant les problèmes de gestion de figures et d'images dans LATEX. Ce dernier est disponible par ftp anonyme sur ftp://math.uwaterloo.ca/pub/figsInLatex.ps.Z ou sur ftp://ftp.fdn.org/pub/CTAN/info/figsinltx.ps
De même, K. Reckdahl a écrit "Using EPS Graphics in LATEX 2e Documents". Ce document est disponible sur ftp://ftp.fdn.org/pub/CTAN/info/epslatex.ps.

Sous LATEX 2e, il faut utiliser l'un des packages :

Exemple :
 
\begin{figure}[htbp] 
   
\begin{center} 
      
\includegraphics{images/fig1.ps} 
   
\end{center} 
   
\caption{\footnotesize blah blah blah} 
\end{figure} 
%%%% fin exemple %%%%
Exemple :
 
\includegraphics[width=\linewidth, draft=true]{figure.eps} 
%%%% fin exemple %%%%
\epsfbox{nom-figure.(e)ps}
\begin{figure}[htbp] 
   
\centerline{\epsfxsize=10cm \epsfbox{nom-figure.format}} 
 
\caption{.  \label{fig-}} 
\end{figure}
Exemple :
 
\begin{figure}[p] 
   
\centerline{\epsfig{file=nom_figure.eps, 
   width=largeur, 
   height=hauteur}} 
   
\caption{Titre.} 
   
\label{nom_label} 
\end{figure} 
%%%% fin exemple %%%%

8.2   Comment nommer une figure ?

C'est la commande \caption qui permet de faire cela. Par défaut le titre de la figure apparaîtra en dessous. Cf exemples ci-dessus. Pour que le titre apparaisse au dessus, il faut redéfinir les longueurs suivantes.

Exemple :
 
\setlength\abovecaptionskip{0pt} 
\setlength\belowcaptionskip{10pt}
puis appeler :
 
\begin{figure} 
\caption{... ... ...} 
\includegraphics{dessin.eps} 
\end{figure} 
%%%% fin exemple %%%%

8.3   Comment placer des figures côte à côte ?

Sous LATEX 2e, il faut utiliser le package 'graphics' ou 'graphicx' disponibles sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/required/graphics/.

Exemples :
 
\begin{figure} 
   
\begin{minipage}[c]{.46\linewidth} 
      
\includegraphics{figure1.format} 
   
\end{minipage} \hfill 
   
\begin{minipage}[c]{.46\linewidth} 
      
\includegraphics{figure2.format} 
   
\end{minipage} 
\end{figure}

 

\begin{figure} 
\includegraphics[width=5cm]{fig1.eps}\hfill 
\includegraphics[width=5cm]{fig2.eps} 
\caption{Titre commun}\label{fig:somefiglabel} 
\end{figure} 
%%%% fin exemple %%%%
Une autre solution consiste à mettre chaque figure dans une case d'un tableau.

Exemple (avec le package graphics ou graphicx) :
 
\begin{tabular}{cc} 
   
\includegraphics{figure1.eps} & 
   
\includegraphics{figure2.eps} \\ 
\end{tabular} 
%%%% fin exemple %%%%
LATEX2.09. Pour mettre des figures côte à côte, il suffit d'encapsuler leur appel dans des minipages.

Exemples :
 
\begin{minipage}[t]{.46\linewidth} 
   
\center\epsfxsize= 5cm \epsfbox{fig1.eps} 
\end{minipage} % ne pas sauter de ligne 
\begin{minipage}[t]{.46\linewidth} 
   
\center\epsfxsize= 5cm \epsfbox{fig2.eps} 
\end{minipage}
ou si l'on veut attacher des titres aux figures :

\begin{figure} 
 
\begin{minipage}[b]{.46\linewidth} 
  
\centering\epsfig{figure=fig1.ps,width=\linewidth} 
  
\caption{premiere figure \label{fig1}} 
 
\end{minipage} \hfill 
 
\begin{minipage}[b]{.46\linewidth} 
  
\centering\epsfig{figure=fig2.ps,width=\linewidth} 
  
\caption{deuxieme figure \label{fig2}} 
 
\end{minipage} 
\end{figure} 
%%%% fin exemple %%%%
Exemple :
 
\begin{figure}[ht] 
\begin{center} 
  
\subfigure[I]{\epsfig{figure=st1.ps,width=6.58cm}}\quad 
  
\subfigure[II]{\epsfig{figure=st2.ps,width=5.0cm}}\\ 
  
\subfigure[III]{\epsfig{figure=st3.ps,width=5.0cm}} 
\end{center} 
\caption{Impermeable surface treatments} 
\label{fig:inf} 
\end{figure} 
%%%% fin exemple %%%%
Une autre possibilité pour obtenir un titre par figure est d'utiliser le package 'epslatex' disponible sur ftp://ftp.fdn.org/pub/CTAN/info/.

8.4   Comment modifier le nombre de figures par page ?

En fait, on ne peut agir que globalement sur le nombre de flottants autorisé par page. Il n'y a pas de sélection figure/tables/....

Il arrive fréquemment que lorsqu'un flottant dépasse 60% d'une page, LATEX préfère changer de page plutôt que d'utiliser les 40% de l'espace restant.

La commande \floatpagefraction permet de redéfinir l'espace minimum que peuvent occuper des flottants. Cela permet de limiter le "blanc" sur une page contenant des flottants.

Exemple :
 
\renewcommand{\floatpagefraction}{.9} 
utilisée avec la commande : 
\renewcommand{\textfraction}{.1} 
permet de dire que le texte peut n'occuper que 10% d'une 
page, et donc que des flottants peuvent occuper les 90% restant. 
%%%% fin exemple %%%%
Il y a d'autres paramètres intéressants :

\setcounter{totalnumber}{4}
qui détermine le nombre de flottants autorisés par page,

\renewcommand{\topfraction}{.8} 
et

\renewcommand{\bottomfraction}{.8}
qui indiquent la fraction maximum du haut ou du bas de la page que peuvent occuper des flottants.

Remarque :
Il est recommandé de ne jamais mettre 100% comme paramètre.

8.5   Comment superposer du texte sur des figures ?

PSFrag (disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/psfrag/) donne cette possibilité. La solution consiste en fait à :

  1. faire le graphique .ps AVEC des textes et légendes MAIS approximatifs
  2. utiliser PSfrag pour qu'il remplace les textes approximatifs par des textes < < LATEX > >
  3. l'écriture < < par dessus > > (le remplacement en fait) est fait par PSfrag.
Pour plus de détails, consulter le document "Using EPS Graphics in LATEX 2e documents" disponible sur ftp://ftp.fdn.org/pub/CTAN/info/epslatex.ps.

On peut également générer une courbe dans un fichier .eps, qui peux ensuite être inclu dans un environnement "picture", dans lequel il est ensuite possible d'ajouter du texte avec des \put. Cela demande pas mal de mises au point.

Exemple :
 
\setlength\unitlength{1cm} 
\begin{picture}(10,10) 
\put(0,0){\includegraphics{mondessin.eps}} 
\put(10,10){Mon commentaire \LaTeX{} avec des $maths$} 
\end{picture} 
%%%% fin exemple %%%%
Cette technique permet de conserver la puissance de LATEX et d'avoir une typographie homogène mais elle a l'inconvenient d'être assez lourde.

PSTricks est un ensemble de macros TeX, disponible sur ftp://ftp.fdn.org/pub/CTAN/graphics/pstricks/, qui permet également de faire cela. Il nécessite un gros investissement (il y a une centaine de pages de documentation). Cependant, si l'on se limite à des commandes simples (comme par exemple écrire un programme en C qui trace le dessin, avec simplement des points, des droites, et un peu de texte), la liste sommaire des commandes suffit (6 pages).

Xfig offre une autre solution. Après avoir inclu un fichier postscript généré par un autre programme, on peut rajouter du texte ou des commandes LATEX dessus. xfig -sp Sauvegarder comme "combined PS/LATEX"

Metapost est un langage graphique très proche de Metafont, mais qui génère du postscript. Il permet de produire des figures avec du texte et est bien interfacé avec TeX (Knuth l'utilise). Metapost est integré dans web2c 7.0. Metapost a déjà été porté sous MS-DOS et Mac (CMacTeX). Pour plus d'informations, vous pouvez consulter la page de D. Roegel : http://www.loria.fr/ roegel/metapost.html.

pstoedit permet également de visualiser des fichiers postscript (sans bitmaps) et d'ajouter du texte ou des figures par dessus.

8.6   Comment réaliser des captures d'écran ?

Un outil très utile pour effectuer des captures d'écran sous Unix est xv. xv est un éditeur d'images écrit par J. Bradley disponible sous unix. xv est capable de gérer différents formats d'image (encodage PS, GIF, JPEG, TIFF,...). Il permet de visualiser des images et aussi de réaliser des captures d'écran, soit partielles définies à la souris, soit par fenêtre X Window. Il suffit ensuite de sauvegarder la saisie d'écran de xv en format postscript et de l'appeler sous LATEX.

xv est accessible par ftp sur ftp://ftp.lip6.fr/.

Sur PC il y a pcxdump disponible sur http://micros.hensa.ac.uk/. Le package 'verbtext', disponible sur CTAN, permet ensuite d'appeler la saisie réalisée.

De même, le package 'scrdumps' et l'utilitaire scr2tex.exe sous DOS permettent d'inclure des saisies d'écran dans un document LATEX.

8.7   Comment tracer une courbe ?

Xgraphic est un outil de tracé de courbes simple d'utilisation (les options sont accessibles en interactif) mais limité aux courbes 2D. Il est disponible avec une doc française à http://blanche.polytechnique.fr/ et ftp://barbes.polytechnique.fr/pub/Xgraphic/.

xmgr marche également très bien.

GNUplot est disponible sous Unix, sous Dos, sous Windows et sous macOS (http://www.ee.gatech.edu/users/schooley/gnuplot.html). Il possède une sortie LATEX (eepic). Il permet de tracer des courbes (2D et 3D) à partir de valeurs ou d'une fonction. Les formats de sortie sont LATEX ou postscript.

En outre, sous Unix, il est possible de récupérer des fichiers GNUplot exportés par

        set terminal fig 
        set output "graph.fig"
puis de les modifier.

La FAQ GNUplot est disponible à http://www.uni-karlsruhe.de/ ig25/gnuplot-faq/.

Xy-pic compatible plain TeX, LATEX2.09 et LATEX 2e permet de tracer des courbes, de réaliser des diagrammes commutatifs, des automates, et plein d'autres choses. Pour plus de renseignements, consulter :

  1. ftp://ftp.mpce.mq.edu.au/pub/maths/TeX/ ou
  2. http://www.mpce.mq.edu.au/ ross/Xy-pic.html ou
  3. http://www.brics.dk/ krisrose/Xy-pic.html
Le package 'xypic' est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/generic/diagrams/xypic/.

Sur PC grapher et surfer permettent également de tracer des courbes et des surfaces (ils sont indépendants de LATEX, mais une saisie d'écran est toujours possible).

Le package 'curves' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/curves/ permet de définir des courbes dans l'environnement picture.

Mathematica est également utilisable pour tracer des courbes 2D et 3D.

8.8   Comment est géré le positionnement des figures ?

Comme mentionné précédemment (??), il existe différentes options de placement des figures. Les plus classiques sont

\begin{figure}[htbp] 
pour laisser à LATEX la possibilité de placer les figures suivant ses critères de beauté. (h) impose si possible le placement de la figure à l'appel de la macro ci-dessus. Sinon la figure sera placée en haut de la page suivante (t) ou en bas (b), voire sur une page seule (p).

En revanche, pour forcer (dans la mesure du possible) LATEX à placer une figure là où elle a été appelée, il faut utiliser le package 'float', de A. Lingnau, (\usepackage{float}) et l'option H (\begin{figure}[H]). Ce package permet de définir un tel placement par défaut via la commande \floatplacement{figure}{H}. Il est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/float/. Voir la question ?? pour un exemple d'utilisation de ce package.

De même l'utilisation du caractère ! devant une option de placement permet de forcer LATEX 2e à effectuer son placement au plus tôt (suivant l'option choisie).

Remarque (D.Barbier) :
si un flottant ne peut pas être placé avec les paramètres indiqués , celui-ci et tous les flottants qui viennent après seront mis à la fin du chapitre (en fait, ils seront insérés grâce à la commande \clearpage).
Le package 'placeins' de D. Arsenau permet de mettre des garde-fous dans le texte. Par exemple, lorsqu'on place une figure en dur avec une commande du style :

%%%% debut macro %%%% 
\makeatletter 
\newenvironment{figureH}{\begin{center} 
   
\newcommand{\@captype}{figure}}{\end{center}} 
\makeatother 
%%%% fin macro %%%%
l'utilisation de \FloatBarrier juste avant, permet de vider le buffer de flottants actuellement stockés.

8.9   Comment placer une légende à côté d'une figure ?

Pour placer une légende à côté d'une figure, il faut utiliser l'environnement minipage.

Exemple (extrait du cahier GUTenberg 22 pour l'article sur esperluette) :
 
mettre dans le préambule :

%%%% debut macro %%%% 
\newlength\jataille 
\newcommand{\figgauche}[3]
{
\jataille=\textwidth\advance\jataille by -#1 
\advance\jataille by -.5cm 
\begin{minipage}[c]{#1} 
   
\includegraphics[width=#1]{#2} 
\end{minipage}\hfill 
\begin{minipage}[c]{\jataille} 
   
\footnotesize #3 \normalsize 
\end{minipage}} 
%%%% fin macro %%%%
puis utiliser :

\figgauche{5cm}{totor.eps}{Titre.}
On peut également utiliser des parbox.

Exemple :
 
\begin{figure} 
\parbox{7cm}{...figure}\parbox{7cm}{\caption{---}} 
\end{figure} 
%%%% fin exemple %%%%

8.10   Comment insérer des figures dans multicol ?

On ne peut insérer que des figures de la largeur de la page, et pas de la lageur d'une colonne, donc des figure* (resp. table*). Un flottant n'apparaîtra pas sur la page où il est défini, mais, au mieux, sur la page d'après. Le positionnement [h] n'a donc pas de sens.

Exemple (avec le package 'graphicx') :
 
\begin{figure*
    
\includegraphics[width=3cm]{totor.eps} 
\end{figure*
%%%% fin exemple %%%%
Remarque :
dans ce cas la gestion de \caption semble ne pas être correcte.

8.11   Comment faire apparaître toutes les figures en fin de document ?

Le package 'endfloat', disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/endfloat/, permet de reporter toutes les figures en fin de document.

ATTENTION :
les classes AMS ne définissent pas les environnements figure* et table*. En outre, le package 'endfloat' a le mauvais goût de supposer qu'ils sont définis. Un remède est de faire :
            \documentclass[a4paper,11pt]{amsart} 
            
\newenvironment{figure*}{\figure}{\endfigure} 
            
\usepackage{endfloat}

8.12   Comment insérer des images Mathematica ?

8.13   Comment modifier la taille d'une bounding box ?

En format eps (encapsulated postscript), la `bounding box` permet de préciser la taille d'une image. La syntaxe est la suivante :

%%BoundingBox: 0 0 507 257
Les coordonnées correspondent dans l'ordre :

Les coordonnées verticales étant prises à partir du bas, et celles horizontales à partir de la gauche.

De plus ces coordonnées sont exprimées en points PostScript, c'est à dire en soixante-douzième de pouce, i.e.:

1 pt PS = 1/72 pouce = 2.54/72 cm.
Malheureusement, il arrive parfois que la taille de la bounding box soit supérieure à celle de la taille réelle du dessin qu'elle contient (il n'y a pas de mise à l'échelle). Le package 'boxedepsf', de L. Siebenmann, offre les commandes \Trim qui permettent de résoudre le probleme.

A. J. Carr a adapté ce package à LATEX 2e. Son package s'appelle 'boxedeps'. Ce dernier est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/generic/boxed/ ou sur ftp://matups.math.u-psud.fr/pub/TeX/Graphics.dir/ArtIntegration.dir/boxedeps.dir/.

Exemple :
 
\TrimTop{15pct}\BoxedEPSF{toto} 
avec pct = pourcentage de la hauteur. 
%%%% fin exemple %%%%

8.14   Comment obtenir une figure avec un titre non numéroté ?

Il faut utiliser la commande \unnumberedcaption dont voici la définition :

%%%% debut macro %%%% 
\makeatletter    % <=== in a .sty file delete this 
  
\newcommand{\unnumberedcaption}% 
        {
\@dblarg{\@unnumberedcaption\@captype}} 
  
\newcommand{\@unnumberedcaption}{}% undefined yet 
\long\def\@unnumberedcaption#1[#2]#3{\par 
  
\addcontentsline{\csname ext@#1\endcsname}{#1}{% 
    % orig: 
\protect\numberline{\csname the#1\endcsname}% 
    %{
\ignorespaces #2} 
    
\protect\numberline{}{\ignorespaces #2}% 
    }% 
  
\begingroup 
    
\@parboxrestore 
    
\normalsize 
    % orig: 
\@makecaption{\csname fnum@#1\endcsname}% 
    %{
\ignorespaces #3}\par 
    
\@makeunnumberedcaption{\ignorespaces #3}\par 
  
\endgroup} 
  
% redefine 
\@makeunnumberedcaption (like \@makecaption) 
% for your own layout 
\newcommand{\@makeunnumberedcaption}[1]{% 
  
\vskip\abovecaptionskip 
  
\sbox\@tempboxa{#1}% 
  
\ifdim \wd\@tempboxa >\hsize 
    #1
\par 
  
\else 
    
\global \@minipagefalse 
    
\hbox to\hsize{\hfil\box\@tempboxa\hfil}% 
  
\fi 
  
\vskip\belowcaptionskip} 
  
% for LaTeX 2.09 compatibility, define 
\above/belowcaptionskip: 
\@ifundefined{abovecaptionskip}{% 
  
\newlength{\abovecaptionskip}% 
  
\setlength{\abovecaptionskip}{10pt}% 
}{} 
\@ifundefined{belowcaptionskip}{% 
  
\newlength{\belowcaptionskip}% 
  
\setlength{\belowcaptionskip}{0pt}% 
}{} 
   

\makeatother    % <=== in a .sty file delete this 
%%%% fin macro %%%%
Remarque :
le package 'french' V3,49 inclut cette macro.

8.15   Comment redéfinir le style de caption ?

Par exemple pour changer la fonte de Figure : en gras, il faut utiliser :

%%%% debut macro %%%% 
\makeatletter 
\renewcommand{\fnum@figure}{\small\textbf{\figurename\thefigure}} 
\makeatother 
%%%% fin macro %%%%
Pour agir sur les espaces horizontaux de part et d'autre de la légende d'un flottant, on peut utiliser caption2.sty, et définir la longueur \captionmargin qui sera insérée à gauche et à droite de la légende.

8.16   Comment numéroter les figures en fonction des sections ?

On peut déjà remarquer que la numérotation se fait automatiquement en fonction des chapitres lorsque l'on utilise la classe de document 'book'. Par contre, ce n'est pas le cas lorsque l'on utilise la classe 'article'. Ainsi, pour obtenir des figures numérotées 1.1, 1.2, 1.3, ... dans la section 1, 2.1, 2.2, 2.3, ... dans la section 2, etc..., il suffit de redéfinir la commande \thefigure et de remettre le compteur de figures à zéro lorsque l'on change de section :

%%%% debut macro %%%%

\makeatletter

\renewcommand{\thefigure}{\ifnum \c@section>\z@ \thesection.\fi

\@arabic\c@figure}

\@addtoreset{figure}{section}

\makeatother

%%%% fin macro %%%%
Remarque
: pour renuméroter les sous-figures de la même manière (avec le package 'subfigure'), il suffit de rajouter la ligne \let\p@subfigure\thefigure dans le préambule.

8.17   Comment fondre une image dans du texte ?

Le package 'floatfig', de T. Kneser, disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/other/floatfig/, permet d'entourer une figure de texte de manière très efficace grâce à l'environnement floatingfigure. Ce package a été conçu pour LATEX2.09, pour des documents sans colonnes.

Exemple :
 
\begin{floatingfigure}[l]{4cm} 
   
\includegraphics[width=4cm]{dessin} 
   
\caption{Titre} 
\end{floatingfigure} 
%%%% fin exemple %%%%
Remarque :
le [l] du \begin{float...} sert à mettre la figure à gauche. [r] permet de l'avoir à droite, [p] la met à gauche sur une page de gauche et à droite sur une page de droite.
Le package 'floatflt', de T. Kneser et M. Dahlgren, disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/other/floatflt/, a été écrit pour LATEX 2e. Il étend les possibilités de floatfig par de nombreuses options et est utilisable pour les figures et les tableaux.

Exemple :
 
\begin{floatingfigure}[options]{width of figure} 
   figure contents 
\end{floatingfigure} 
%%%% fin exemple %%%%
Le package 'picinpar' pour LATEX2.09 est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex209/contrib/picinpar/ et sur ftp://ftp.fdn.org/pub/CTAN/systems/msdos/4alltex/disk04/. Il permet de définir un nombre de lignes avant lequel la figure pourra être insérée dans le texte. La taille de la figure dépend de son contenu, sa position est variable, et peut s'étaler sur plusieurs paragraphes.

ATTENTION :
Ce package n'est pas compatible avec amstex.
Exemple :
 
\begin{window}[#lines before, l|r|c, picture contents, caption} 
   ... paragraph text ... 
\end{window} 
%%%% fin exemple %%%%
Mieux que le précédent, le package 'picins' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex209/contrib/picins/ permet d'inclure des figures dans des paragraphes.

Exemple :
 
\parpic(width,height)(x-off,y-off)[Options][Position]{Picture} 
    Paragraph text.... 
%%%% fin exemple %%%%
Le package 'wrapfig' permet de définir la hauteur de la figure, celle-ci ci peut apparaître à droite ou à gauche dans le texte ou encore dans une marge. Ce package n'est pas compatible avec les environnements de liste.

Exemple :
 
\begin{wrapfigure}[height in lines]{l|r}[overhang]{width} 
   {figure, caption etc.} 
\end{wrapfigure} 
%%%% fin exemple %%%%
Le package 'flow' met obligatoirement la figure dans une boîte avec un cadre et ne permet pas de définir de caption.

Exemple :
 
\flow[L|R]{paragraph text}{figure box} 
%%%% fin exemple %%%%
Le package 'window' de E. Schaluck, permet également d'intégrer une figure dans un paragraphe mais il n'est plus maintenu. Il a été écrit pour LATEX2.09 mais il est compatible LATEX 2e.

Exemple :
 
\windowbox[toplines][inwindow: contents][ratio: l r] 
... paragraph text ... 
\par 
%%%% fin exemple %%%%
Voici les résultats d'un test comparatif effectué par P. van Oostrum :

 

  A B C D E F G H I J K
picinipar + + +   + +   +      
wrapfig + + + +     + H - +  
flow - - +         +      
floatfig + - - +     +     -  
floatflt + + + +     +   -   +
window - - +   + +   +      
picins + - + +       + +    

Table 8.1: Résultat du test comparatif


 

avec :

A:
figure captions/counting/list of figures
B:
table captions/counting/list of tables
C:
Left/right possible (+ = both)
D:
Alternating left/right for twosided docs
E:
can be placed in the middle of text with twosided flowing
F:
possible to start after the beginning of paragraph
G:
can (more or less) float in the text
H:
auto detection of size of figure (H=height only)
I:
works with list environments
J:
works with twocolumn
K:
works with multicol
Les meilleurs packages semblent être : picins, floatflt et wrapfig.

Voici également une macro de C. Mercat :

%%%% debut macro %%%% 
\def\textdess#1#2 % #1={blabla} #2=\dessin{monbodessin} 
{
\hbox{

 

\setbox2=\hbox{#2} %c'est le dessin

 

\count2=\wd2 %c'est la largeur du dessin. 
%
\showthe\count2 
\multiply\count2 by-1 
\advance\count2 by\hsize %count2 vaut le reste de la page 
\advance\count2 by-2000000  %c'est pour la marge droite 
\count1=\count2 
\advance\count2 by-2000000  %c'est pour la marge du milieu 
\setbox1=\hbox to\count1sp{     %c'est le texte 
\vbox{\hsize=\count2sp  %c'est la largeur 
#1 
}
\hfill} 
\count1=\ht1  %c'est la hauteur 
\advance\count1 \dp1

 

\count2=\ht2 
\advance\count0 \dp2

 

 

\ifnum\count2<\count1 \count2=\count1 \fi 
%c'est la + grde des 2 hauteurs 
\vtop to \count2sp {\vfill \box1 \vfill} 
\vtop to \count2sp {\vfill \box2 \vfill} 
}} 
%%%% fin macro %%%%

8.18   Comment réaliser des diagrammes en bâtons ?

Il existe le package 'bar', disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex209/contrib/misc/, qui offre un environnement barenv.

8.19   Comment faire un organigramme ?

Il existe plusieurs contributions (toutes assez anciennes), disponibles sur CTAN, dédiées spécifiquement à la réalisation de différents types d'organigrammes :

  1. ftp://ftp.fdn.org/pub/CTAN/macros/latex209/contrib/nassflow/
  2. ftp://ftp.fdn.org/pub/CTAN/macros/latex209/contrib/rail/
  3. ftp://ftp.fdn.org/pub/CTAN/support/flow/
A priori, le dernier est le plus évolué et est basé sur un pré-processeur écrit en langage C, ce qui fait qu'il offre une interface souple et puissante.

8.20   Comment centrer une figure très large ?

Le package 'bigcenter' ci-dessous permet de centrer des figures très larges sans message d'erreur de type overful.

%%%% debut macro %%%% 
%%% ----------debut de bigcenter.sty--------------

 

%%% nouvel environnement bigcenter 
%%% pour centrer sur toute la page (sans overfull)

 

\newskip\@bigflushglue \@bigflushglue = -100pt plus 1fil

 

\def\bigcenter{\trivlist \bigcentering\item\relax} 
\def\bigcentering{\let\\\@centercr\rightskip\@bigflushglue% 
\leftskip\@bigflushglue 
\parindent\z@\parfillskip\z@skip} 
\def\endbigcenter{\endtrivlist}

 

%%% ----------fin de bigcenter.sty-------------- 
%%%% fin macro %%%%

8.21   Comment passer de ps à eps ?

S. Heiden :
Pour faire ce travail de transformation il faut interpréter TOUT le code PostScript d'un fichier PS (être une imprimante PS en gros), identifier la boîte englobante de ce qui est composé sur UNE page et insérer vers le début ou la fin du fichier PS original la fameuse ligne de la forme :
        %%BoundingBox: 72 246 522 597
qui renseigne les macros graphics, donc dvips, donc l'imprimante sur cette fenêtre de clipping.

Syntaxe :
 
%%BoundingBox: llx lly urx ury 
Qui sont deux points (lower left)(x,y) et (upper right)(x,y) définissant la fenêtre. Si on n'est pas, soi-meme, une imprimante PostScript on peut faire interpréter le code PS original par une imprimante qui produira une page. On peut alors mesurer la boîte englobante et la position de la figure dans la page (la portion de toner qui nous intéresse) et composer la ligne %%BoundingBox en s'exprimant en points d'1/72 de pouces et sachant que le système de coordonnées est :

En effet, une imprimante n'imprime jamais sur le bord réel d'une page. Il y a une fenêtre de clipping systématique matérielle plus petite que la page A4 et centrée. L'origine du système correspond au coin de la feuille ; le décalage du système de coordonnées arrive surtout sur les coordonnées Y qui dépendent de l'avancement du papier contrairement aux X, calés par les bords (qui n'a pas connu de vieille imprimante LaserWriter pouvant louper de 5 cm le bord inférieur d'une feuille A4 ?-).

Si on fait calculer et imprimer la bbox par l'imprimante (par le code de bbfig par ex.), ce problème ne se pose plus. Sans parler de ps2epsi qui est la meilleure solution mais alors il faut distinguer l'environnement de chaque système d'exploitation (Unix, Mac, PC) et les outils correspondants.

Remarque :
Si on a plus d'une figure, que l'on s'intéresse à la forêt amazonnienne où que l'on est un peu riche, on peut acheter Adobe Distiller ou autre pour faire ce genre de travail. Par ailleurs Ghostview peut jouer le rôle de l'imprimante si l'écran est correctement calibré (à vérifier avec xdpyinfo et une règle...). En gros il faut un outil qui sait composer du PostScript. Après, tout dépend de ce qu'il propose.
Suggestions :
 
Le document "Using EPS graphics in latex2e documents" de K. Reckdahl répond également à cette question cf section ?? Converting PS files to EPS.

ps2epsi, qui est livré avec GhostScript permet de convertir du postscript en postscript encapsulé.

8.22   Comment changer l'orientation d'une figure ?

Le package 'rotfloat' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/rotfloat/ permet de gérer la rotation des flottants.

On peut utiliser la commande \rotatebox du package 'graphics' de D. Carlisle. Ce package est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/required/graphics/.

Exemple :
 
\rotatebox{90}{ 
\includegraphics{dessin1.eps} 

%%%% fin exemple %%%%
La commande \includegraphics du package 'graphicx' peut prendre comme paramètre un angle de rotation.

Exemple :
 
\begin{figure} 
   
\centering 
      
\includegraphics[angle=90,width=\textwidth]{dessin.eps} 
\end{figure} 
%%%% fin exemple %%%%

8.23   Comment gérer des sous-figures sur plusieurs pages ?

Un seul environnement figure ne peut pas s'étendre sur plusieurs pages, il faut donc gérer le problème à la main en instanciant les numéros "à la main".

Exemple :
 
\documentclass{article} 
\usepackage{graphicx,subfigure} 
\begin{document}

 

  
\begin{figure} 
    
\centering 
    
\subfigure[First Part]{% 
       
\label{fig:graphics:a}% label for subfigure 
       
\includegraphics[width=\textwidth]{box.eps}}% 
    
\caption{Large Graphics}% 
    
\label{fig:graphics}% label for figure 
  
\end{figure}

 

  
\addtocounter{figure}{-1} 
  
\begin{figure} 
    
\addtocounter{subfigure}{1} 
    
\centering 
    
\subfigure[Second Part]{% 
       
\label{fig:graphics:b}% label for subfigure 
       
\includegraphics[width=\textwidth]{box.eps}}% 
    
\caption{Large Graphics (con't)}% 
  
\end{figure}

 

\end{document} 
%%%% fin exemple %%%%

8.24   Comment générer une liste des figures d'un document ?

Il existe pour cela la commande \listoffigures. Elle collecte tous les numéros de figures ainsi que leur titre et le numéro de la page ou elles apparaissent.

Remarque :
une bonne mise à jour de cette liste nécessite au moins deux compilations successives.

8.25   Comment faire une figure sous LATEX ?

On distingue deux techniques majeures :

  1. soit on utilise un logiciel de dessin et on inclut une figure sous un format défini (en général postscript ou encapsulated postscript). Pour une liste de logiciels, voir la question ??.
  2. on utilise les commandes LATEX disponibles. L'environnement picture permet ainsi de composer des figures comprenant du texte, des segments de droites, des cercles et des figures géométriques.
Les commandes LATEX les plus courantes pour le dessin sont :

Exemple :
 
\begin{picture}(largeur, hauteur) 
   
\put(0,0){\line(1,0){3}} 
   
\put(0,3){\line(1,1){4}} 
\end{picture} 
%%%% fin exemple %%%%
Le package epic définit un ensemble de commandes plus complet que l'ensemble par défaut de LATEX. Il s'agit des commandes : \multiputlist, \matrixput, \grid, \dottedline, \dashline, \drawline, \jput, \picsquare et \putfile, ainsi que des environnements : dottedjoin, dashjoin et drawjoin.

Exemple :
 
\matrixput(0,0)(10,0){6}(0,10){3}{\circle{4}} 
\matrixput(2,0)(10,0){5}(0,10){3}{\line(1,0){6}} 
\matrixput(0,2)(10,0){6}(0,10){2}{\line(0,1){6}} 
%%%% fin exemple %%%%
PSTricks de T. Van Zandt propose un ensemble très complet de macros TeX qui permettent de jouer avec des dessins (dessin, couleur, rotation, superposition, ...). L'ensemble PSTricks est composé de plusieurs packages : pstricks, pst-plot, multido, pst-node, pst-coil, gradient, colortab, textpath, charpath et pst2eps. Une documentation d'une centaine de page est également fournie et nécessaire.

ATTENTION :
PSTricks fait appel à des macros postscript qui ne sont donc pas toujours visibles dans les previewer de .dvi.
Exemple :
 
\psellipse(.5,0)(1.5,1)

 

\parametricplot[plotstyle=dots,plotpoints=13]
        {-6}{6}{1.2 t exp 1.2 t neg exp}

 

\psshadowbox{\textbf Grest!!}

 

\pszigzag[coilarm=.5,linearc=.1{<->}(4,0) 
%%%% fin exemple %%%%

8.26   Comment mettre un commentaire à côté d'une figure ?

Pour mettre un commentaire à côté d'une figure et pour que le texte soit centré verticalement par rapport à la figure, il faut utiliser des \parbox.

Exemple :
 
\begin{tabular}{lc} 
$M=0{,}01$ & 
\parbox[c]{12cm}{\includegraphics[width=12cm]{fig6a.eps}} \\ 
$M=0{,}1$  & 
\parbox[c]{12cm}{\includegraphics[width=12cm]{fig6b.eps}} 
% etc... 
\end{tabular} 
%%%% fin exemple %%%%

Previous Contents Next