\chapter{Graphisme}\label{chap-graphix}
\index{graphique}
\index{dessin}
\index{figure}
\index{image}
\begin{epigraphe}{Le Deutéronome Dt \textbf{5} 8}
  Tu ne te feras aucune image sculptée de rien \\
  qui ressemble à ce qui est dans les cieux là-haut [...]\\
  Tu ne te prosterneras pas devant ces images ni ne les serviras.
\end{epigraphe}


\begin{introchap}{Aujourd'hui} 
  il est tout à fait naturel d'insérer des dessins, figures et autres
  images dans un document. Ceci est dû aux imprimantes de plus en plus
  performantes et bon marché.  Il faut cependant se replacer dans le
  contexte des années 80 à l'essor de \TeX{}. C'est l'époque de
  l'apparition des imprimantes et le matériel de qualité
  professionnelle n'était pas accessible au particulier. Cependant
  beaucoup de solutions d'impression émergeront s'appuyant la plupart
  sur le langage \postscript{} devenu \emph{ipso facto} un standard.
\end{introchap}


Il existe plusieurs solutions autour de \LaTeX{} pour
insérer des graphiques dans un document. Parmi elles on notera
l'utilisation de \soft{metafont} (l'utilitaire qui gère les fontes de
\LaTeX{}), la programmation d'un environnement \ltxenv{picture} ou la
mise en \oe{}uvre d'un code PIC\TeX{}. Ces solutions ne seront pas
décrites ici car nous considérons qu'elles sont d'une utilisation un
peu déroutante au premier abord ; il est tout de même bon de connaître
leur existence.  L'approche adoptée dans ce manuel pour manipuler des
graphiques est d'in\-sé\-rer dans le source \LaTeX{} un fichier au
format \postscript{} encapsulé contenant le graphique en question, ce
dernier ayant été créé par un logiciel de dessin tel que \soft{xfig},
\soft{gnuplot}, \soft{gimp}, etc.
% Le prix des imprimantes
% \postscript{} et la diffusion d'émulateur fait que cette solution est
% tout à fait envisageable quel que soit le système d'impression.

\section{Apéritifs}
\index{traits} Il n'est pas inutile de connaître la commande
\ltxcom{rule} qui permet de faire des traits :
\begin{ltxcode}
  \rule[ø\marg{hpos}ø]{ø\marg{largeur}ø}{ø\marg{hauteur}ø}
\end{ltxcode}
où \marg{hpos} impose une éventuelle translation verticale du trait,
les deux autres arguments ont un nom suffisamment explicite :
\begin{ltxexemple}
  Voici quelques \og traits \fg{} :
  \begin{center}
    \rule[1ex]{1mm}{5mm}
    \quad\rule{1in}{0.4pt}
    \quad\rule[-0.5em]{1em}{1em}
  \end{center}
\end{ltxexemple}

\section{Du format des fichiers graphiques}
\index{format!fichiers graphiques}
\index{fichier!graphique}
Pour inclure des dessins ou des images dans vos documents, il faut
insérer un \emph{fichier}.  La configuration de \LaTeX{} permet
d'incorporer des fichiers de type PS pour \postscript{} et EPS pour
Encapsuled \postscript{}. Ce fichier peut être généré par n'importe quel
programme. Si le format \postscript{} vous semble contraignant, sachez
que :
\begin{itemize}
\item tout \emph{bon} logiciel de dessin « vectoriel » vous 
permet d'exporter vos schémas au format EPS. Ce format est
devenu la référence en matière d'impression.
\item toute image peut être convertie au format EPS. Sur un système
  \unix, le programme \soft{convert} permet d'effectuer cette
  opération\footnote{Cherchez du côté de la suite « ImageMagick »
    pour obtenir ce programme s'il n'est pas présent sur votre
    système.}. On pourra aussi recourir au logiciel \soft{gimp}
  (logiciel libre de retouche et de création d'image numérique),
  présent également sur d'autres systèmes d'exploitation. \index{image}
\end{itemize}
% Nous donnerons plus loin un moyen permettant de générer les fichiers
% EPS, de manière automatique à l'aide d'un \texttt{makefile}.

\section{Le package \ltxpackwi{graphicx}}
\LaTeX{}, ou plutôt \TeX{}, n'a pas été initialement conçu pour
manipuler des graphiques (images, dessins,...). De ce fait, une
multitude d'extensions ont été proposées, aucune n'ayant vraiment
réussi à s'imposer ou à être vraiment indépendante des systèmes
d'exploitation.

\subsection{Un standard}
Aujourd'hui, les concepteurs de \LaTeX{} semblent s'être mis d'accord
pour standardiser une extension \emph{graphique}. Deux extensions ont
donc vu le jour à fin de l'année 1994 :
\begin{itemize}
\item \ltxpack{graphics} l'extension « standard » ;
\item \ltxpack{graphicx} l'extension « plus plus ».
\end{itemize}
Nous avons choisi de vous présenter \ltxpack{graphicx}. Il faut bien
comprendre que si l'interface de cette extension est indépendante du
système d'exploitation, la partie du code gérant les différent types
de fichiers graphiques est dépendante du système sous-jacent. Aussi,
est-il nécessaire de préciser un \emph{driver} de package. Les drivers
existants correspondent aux implantations connues de \TeX{} sur des
plate-formes diverses\footnote{On notera entre autres : \soft{xdvi} et
  \soft{dvips} pour le monde \unix, \soft{texture} et \OzTeX{}
  pour le Mac, \emTeX{} et \soft{dviwin} pour windows.}. Sous \unix, le
driver utilisé est généralement \soft{dvips}, il est choisi par défaut
dans la distribution te\TeX{}, si bien que la ligne :
\begin{ltxcode}
  \usepackage{graphicx}
\end{ltxcode}
suffit pour mettre en route l'extension \ltxpack{graphicx}.
La commande pour inclure un dessin ou une figure est la
suivante :
\index{inclusion!d'images}
\index{inclusion!de graphiques}
\begin{ltxcode}
  \includegraphics[ø\marg{option}ø]{ø\marg{fichier}ø}
\end{ltxcode}
où \marg{fichier} est un fichier contenant votre figure, et
\marg{option} est une liste d'options sépar{\'ees} par des virgules.
\verb+\includegraphics+ ne crée pas de mise en page particulière, elle
insère juste une boîte contant le graphique dans le texte. Ainsi :
\begin{ltxexempleenv}
  \begin{ltxexempleinput}
    avant 
    \includegraphics{punch}
    et après.
  \end{ltxexempleinput}
  \setlength{\hauteurdutrait}{1.3cm}%
  \dessinemoiletrait%
  \begin{ltxexempleoutput}
    avant 
    \includegraphics[scale=.2]{punch}
    et après.
  \end{ltxexempleoutput}
\end{ltxexempleenv}
\begin{nota}
  Pour assurer la portabilité de vos sources et ainsi pouvoir insérer
  des fichiers graphiques dans des formats différents, il est
  impératif de \emph{ne pas préciser l'extension du fichier dans la
    commande} \ltxcom{includegraphics}.
\end{nota}

En général, on combine \ltxcom{includegraphics} avec un environnement
\voir{sec-flottants}{\ltxenv{figure}}. Par exemple, la figure
\ref{fig-exemple} a été produite grâce au code suivant :
\begin{verbatim}
   \begin{figure}
      \centering\includegraphics[width=5cm]{punch}
      \caption{Robert (après quelques bières).}
      \label{fig-exemple}
   \end{figure}
\end{verbatim}
\begin{figure}
   \centering\includegraphics[width=5cm]{punch}
   \caption{Robert (après quelques bières).}\label{fig-exemple}
\end{figure}
\begin{nota}
  Notez bien que l'environnement \ltxenv{figure} assure que le
  graphisme « flotte » dans la page et non la commande
  \ltxcom{includegraphics}. Au cas où ça aurait
  échappé à certains :
  \begin{center}\bfseries
    L'environnement \ltxenv{figure}\\
    assure que le graphisme « flotte » dans la page ;\\
    ça n'est pas la commande \ltxcom{includegraphics}\\
    qui assure ce rôle.
  \end{center}
\end{nota}


\subsection{Options}
\index{options!de \texttt{graphicx}}
Le package \ltxpack{graphicx} possède plusieurs options 
permettant de contrôler l'insertion des graphiques.
Parmi les options disponibles voici les plus utilisées~:


\subsubsection{Changement d'échelle}
\index{taille!des graphiques}
Il existe trois manières d'agir sur la taille d'un graphique.
\begin{itemize}
\item \texttt{scale=}\marg{ratio}, où \marg{ratio} est un nombre
  positif ou négatif,
  % L'option scale n'est pas limitée à un ratio entre 0 et 1.
  permet de changer la taille globale de la figure ;
\item \texttt{width=}\marg{dimen} permet d'imposer la largeur du
graphique ;
\item \texttt{height=}\marg{dimen} permet d'imposer la hauteur du 
graphique.
\end{itemize}

\index{magma@Magma}
\begin{ltxexemple}
  \begin{center}
    \includegraphics[scale=0.2]{magma}\\
    \includegraphics[width=8.5mm]{magma}\\
    \includegraphics[width=2cm,
                     height=3mm]{magma}
  \end{center}
\end{ltxexemple}

\subsubsection{Rotation}
\index{rotation!de graphiques}
Vous pouvez si vous le désirez, faire effectuer une rotation 
à votre figure en utilisant l'option \texttt{angle}, dont la 
syntaxe est la suivante :
\begin{ltxcode}
  angle=ø\marg{ndegre}ø
\end{ltxcode}
où \marg{ndegre} est un angle précisé en degrés dans le sens
trigonométrique.
\begin{ltxexemple}
  \includegraphics[angle=45,
                   scale=0.2]{magma}
\end{ltxexemple}
On trouvera dans le fichier \texttt{grfguide.pdf}\footnote{Utiliser
  \texttt{locate} ou \texttt{find} pour le trouver sur votre système.}
une description détaillée de cette extension. On pourra également
consulter une documentation nommée 
\texttt{fepslatex.pdf}\footnote{\url{http://tug.ctan.org/tex-archive/info/epslatex/french/fepslatex.pdf}}.
% Pourquoi ne pas citer plutôt la version .pdf du même fichier ou,
% plutôt, celui-ci :
% http://tug.ctan.org/tex-archive/info/epslatex/french/fepslatex.pdf ?

\subsubsection{Mode brouillon}
\index{mode!brouillon} 
L'option \texttt{draft} permet de produire les figures en mode 
 \emph{brouillon} : seul  un cadre avec le nom du fichier
 inclus est produit dans le document final.
\begin{ltxexemple}
  avant 
  \includegraphics[draft,scale=.2]{punch}
  et après.
\end{ltxexemple}
Le mode \texttt{draft} est enclenché par défaut lorsque l'option de
document \texttt{draft} est spécifiée. Si vous voulez contrer l'effet
de l'option de document%
\footnote{Par exemple, si vous voulez voir vos figures mais aussi les
  « OverfullBoxMark. »}, il est possible d'utiliser l'option
\texttt{final} de la commande \ltxcom{includegraphics} ou au moment
d'inclure l'extension avec \ltxcom{usepackage}.

\section{Quelques extensions utiles}
Voici dans les paragraphes qui suivent trois extensions utiles pour la
production de documents contenant des graphiques.

\subsection{\ltxpack{subfig}}
\index{sous-figures}
Cette extension permet de gérer des figures comportant plusieurs
sous-figures, avec numérotation automatique et possibilité de faire
référence aux sous-figures elles-mêmes. Par exemple :
\begin{figure}[htbp]
  \begin{center}
    \begin{tabular}{cc}
    \subfloat[Magma]{%
      \label{fig-uniweria-magma}
      \includegraphics[height=2.8cm]{magma}}&
    \hspace{2cm}
    \subfloat[UZMK]{%
      \label{fig-uniweria-uzmk}
      \includegraphics[height=2.8cm]{uzmk}}
  \end{tabular}
\caption{Uniweria Zëkt}
    \label{fig-uniweria}
  \end{center}
\end{figure}
\small
\begin{ltxcode}
  \begin{figure}[htbp]
    \begin{center}
      \leavevmode
      \subfloat[Magma]{%
        \label{fig-uniweria-magma}
        \includegraphics[width=2cm]{magma}}
      \hspace{2cm}
      \subfloat[UZMK]{%
        \label{fig-uniweria-uzmk}
        \includegraphics[height=2cm]{uzmk}}
      \caption{Uniweria Zëkt}
      \label{fig-uniweria}
    \end{center}
  \end{figure}
\end{ltxcode}
\normalsize \index{référence!aux \texttt{subfigure}s} Pour ce qui
concerne les références, on peut soit référencer la figure globale par
\verb+\ref{fig-uniweria}+ qui donne : \ref{fig-uniweria}, soit les
sous-figures par leur label respectif :
\verb+\ref{fig-uniweria-magma}+ d'une part et
\verb+\ref{fig-uniweria-uzmk}+ d'autre part, qui donnent :
\ref{fig-uniweria-magma} et \ref{fig-uniweria-uzmk}.
\begin{note}
  Une manière élégante de gérer les \ltxcom{subfigure}s est
  d'encapsuler chacune d'elles dans un environnement
  \ltxenv{minipage}. Le fichier \texttt{subfig.pdf} accompagnant la
  distribution, montre comment personnaliser l'environnement
  \ltxenv{subfigure}, notamment les espaces inter-légendes.
\end{note}

\subsection{Le package \ltxpackwi{wrapfig}}
\label{graphics-wrapfig}

\index{figure!incrustée} Le package \ltxpack{wrapfig} propose
l'environnement \ltxenv{wrapfigure} permettant de faire flotter une
figure dans un paragraphe. Il ne s'agit pas d'un environnement
flottant au sens de l'environnement \ltxenv{figure} de \LaTeX{}
puisqu'on spécifie la position de la figure dans le paragraphe. La
syntaxe est la suivante :
\begin{ltxcode}
  \begin{wrapfigure}{ø\marg{position}ø}{ø\marg{largeur}ø}
    ...
  \end{wrapfigure}
\end{ltxcode}
où \marg{position} est la position de la figure
(\texttt{l} ou \texttt{r}) et \marg{largeur} la largeur de la figure à
insérer. Voici un exemple :
\small
\begin{ltxcode}
  \begin{wrapfigure}{r}{1.5cm}
    \includegraphics[width=1cm]{polygons}
  \end{wrapfigure}
  Le package \ltxcom{wrapfig} n'est ---~à ma connaissance~--- pas  
  documenté sous la forme d'un fichier \texttt{dvi} ; par contre 
  il est possible...
\end{ltxcode}
\normalsize 

\begin{wrapfigure}{r}{1.5cm}
    \includegraphics[width=1.5cm]{polygons}
\end{wrapfigure}
Le package \ltxcom{wrapfig} n'est ---~à ma connaissance~--- pas documenté
sous la forme d'un fichier \texttt{dvi} ; par contre il est possible
de trouver des informations très détaillées dans le fichier
\texttt{.sty} lui-même qui se trouve dans l'arborescence \TeX{} dans :
\verb+[...]/misc/wrapfig.sty+.  On notera au passage ---~car
il faut parler pour faire un paragraphe un peu long~--- que la règle
veut que tout package soit « auto-documenté » grâce à une extension
connue sous le nom de \ltxpack{docstrip}. Ainsi toute
extension ---~\emph{package} en anglais~--- contient aussi bien le code
que la documentation. Une procédure d'installation permet d'extraire
l'un et l'autre. L'auteur de \ltxpack{wrapfig} n'a vraisemblablement
pas suivi cette règle, tant pis...

\subsection{Le package \ltxpackwi{psfrag}}
\index{graphique!et mathématiques} \index{figure!et mathématiques} Une
autre extension intéressante est l'extension \ltxpack{psfrag}.  Elle a
pour but de pouvoir réunir la puissance d'un fichier \postscript{} et
la beauté des équations de \LaTeX{}. Un problème se pose en effet
lorsque l'on veut intégrer des formules à un dessin, car la génération
d'équations n'est pas prévue dans la plupart de ces logiciels.  La
solution adoptée par les auteurs de \ltxpack{psfrag} est d'utiliser la
commande \ltxcom{psfrag} pour insérer les formules à la place de
chaînes de caractères présentes dans le dessin.  Ainsi, pour avoir la
figure~\ref{fig-psfrag-apres} au lieu de la
figure~\ref{fig-psfrag-avant}, on a procédé comme suit :
\begin{enumerate}
\item ajout avant le \verb+\includegraphics{courbe}+ la ligne :
\begin{ltxcode}
  \psfrag{exp(-x)*sin(10*x)}[r][r]{$e^{-x}\sin(10x)$}
\end{ltxcode}
  qui permet de remplacer la chaîne de caractères faisant office de
  légende par une belle équation ;
\item le résultat n'est pas visible dans le fichier \texttt{.dvi}, par
  contre \soft{dvips} se charge d'exploiter les instructions
  précédentes pour modifier le fichier \postscript{} généré.
\end{enumerate}
\begin{figure}[tb]
  \begin{center}
    \begin{tabular}{cc}
      \subfloat[avant]{%
        \label{fig-psfrag-avant}%
        \includegraphics[width=.45\textwidth]{courbe-sans-psfrag}}
      &\subfloat[après]{%
        \label{fig-psfrag-apres}%
        \includepsfraggraphics[width=.45\textwidth]{courbe-avec-psfrag}}   
    \end{tabular}
    \caption[Utilisation de \ltxpack{psfrag}]{Utilisation de
        \ltxpack{psfrag}, à gauche la figure originale, à droite la
        figure avec un remplacement par une équation \LaTeX{}.}
    \label{fig-psfrag}
  \end{center}
\end{figure}
Le positionnement de la formule se fait en faisant correspondre deux
points de référence, l'un appartenant à l'équation, l'autre à la
chaîne de caractères à remplacer. C'est à l'utilisateur d'indiquer où
se trouve ces points de référence, par l'intermédiaire de deux
arguments optionnels à la commande \ltxcom{psfrag}. Supposons qu'on
définisse ces points de référence comme suit :
\begin{ltxcode}
  \psfrag{chaîne}[l][c]{ø\marg{equation}ø}
\end{ltxcode}
On aura alors l'assemblage suivant :
\begin{center}
  \newlength{\zob}
  \settowidth{\zob}{\boxdemo{14pt}{c}{$\bullet$}{t}{\chaine}}
  \boxdemo{14pt}{c}{$\bullet$}{t}{\chaine}\quad et\quad
  \boxdemo[-7pt]{18pt}{l}{$\odot$}{b}{\ekouation} \quad donne \quad
  \boxdemo{14pt}{c}{$\bullet$}{t}{\chaine}\kern-.5\zob%
  \boxdemo[-7pt]{18pt}{l}{$\odot$}{b}{\ekouation}
\end{center}
De même en écrivant :
\begin{ltxcode}
  \psfrag{chaîne}[r][l]{ø\marg{equation}ø}  
\end{ltxcode}
on aura :
\begin{center}
  \boxdemo{14pt}{l}{$\bullet$}{t}{\chaine}\quad et\quad
  \boxdemo[-7pt]{18pt}{r}{$\odot$}{b}{\ekouation} \quad donne \quad
  \boxdemo[-7pt]{18pt}{r}{$\odot$}{b}{\ekouation}\kern-\fboxrule%
  \boxdemo{14pt}{l}{$\bullet$}{t}{\chaine}
\end{center}
Dans l'exemple de la figure~\ref{fig-psfrag-apres}, on a fait
correspondre le côté droit de l'équation (1\ier{} argument
optionnel~\texttt{r)} avec le côté droit de la chaîne (2\ieme{}
argument optionnel~\texttt{r}). La documentation du package est très
instructive à ce sujet...
\begin{nota}
  Attention, si on génère un document pdf à partir du source \LaTeX{},
  on ne peut utiliser le package \ltxpack{psfrag} qu'au prix de
  manipulations un \voir[ch.][-15pt]{chap-pdf}{peu tordues}.
\end{nota}

\subsection{Le package \ltxpack{xcolor}}

L'extension \ltxpack{xcolor} est mise au point par l'équipe qui a
développé le package \ltxpack{graphicx}. Il peut être
intéressant ---~par exemple pour produire des transparents~--- de générer
du texte en couleur. Le package \ltxpack{xcolor} permet les
constructions suivantes :
\begin{ltxexemple}
  Du texte {en \color{red}rouge} et 
  \textcolor{cyan}{en cyan}.

  Une boîte \colorbox{green}{Verte}.

  Une \fcolorbox{blue}{yellow}{autre boîte}.
\end{ltxexemple}
On aura compris qu'on dispose pour le texte :
\begin{itemize}
\item de la déclaration :
  \begin{ltxcode}
    \color{ø\marg{couleur}ø}
  \end{ltxcode}
\item et de la commande :
  \begin{ltxcode}
    \textcolor{ø\marg{couleur}ø}{ø\marg{texte}ø}
  \end{ltxcode}
\end{itemize}
et pour les boîtes :
\begin{itemize}
\item sans bordure :
  \begin{ltxcode}
    \colorbox{ø\marg{couleur du fond}ø}{ø\marg{contenu}ø}
  \end{ltxcode}
\item avec bordure :
  \begin{ltxcode}
    \fcolorbox{ø\marg{couleur bordure}ø}{ø\marg{couleur fond}ø}{ø\marg{contenu}ø}
  \end{ltxcode}
\end{itemize}
Les deux commandes pour les boîtes en couleur sont sensibles à la
longueur \ltxlen{fboxsep}. « \emph{Quid} des couleurs qui n'ont pas de
nom ? » vous entends-je marmonner \emph{in petto}...  Ce à quoi je
réponds sur le champ :
\begin{ltxexemple}
  Voici un 
  {\color[rgb]{.2,.4,.5}\bfseries 
   bleu gris}...
\end{ltxexemple}
Il est aussi possible de donner un « petit nom » à cette dernière couleur :
\begin{ltxexemple}
  \definecolor{bleugris}{rgb}{.2,.4,.5}
  Voici un
  {\color{bleugris}\bfseries bleu gris}...
\end{ltxexemple}
\begin{note}
  Vous noterez qu'en lieu et place du modèle de couleur « \texttt{rgb}
  » il est possible d'utiliser le modèle \texttt{gray} de manière à
  définir des nuances de gris. De même, en utilisant le modèle
  \texttt{html}, on pourra utiliser la syntaxe du langage Html pour
  spécifier les couleurs.
\end{note}

\section{Utiliser \soft{make}}
\label{sec-graphics-make}
\index{makefile@\texttt{makefile}} 

\begin{nota}
  Ce paragraphe est destiné aux utilisateurs d'un système
  d'exploitation disposant de l'utilitaire Gnu \soft{make} (pour de
  plus amples informations sur cet utilitaire, n'hésitez pas lire
  à l'incontournable~\cite{lozano-unix}). Les autres peuvent passer leur
  chemin...
\end{nota}
Voici donc une idée de makefile qui vous permettra d'automatiser la
génération :
\begin{itemize}
\item des fichiers au format Eps à partir des images « bitmaps » ;
\item des fichiers au format Eps à partir de fichiers stockés dans le
  format d'un logiciel de dessin vectoriel.
\end{itemize}
On souhaite pour ce faire, élaborer une cible que l'on précisera en
ligne de commande :
\begin{unixcom}
  make figs
\end{unixcom}
On suppose que les images et les fichiers de dessins sont
respectivement stockés dans les sous-répertoire \texttt{Imgs} et
\texttt{Figs} du répertoire contenant le document maître et que les
fichiers Eps fabriqués seront également stockés dans un
sous-répertoire \texttt{Epss} (voir la
figure~\vref{fig-graphics-dir}).
\begin{figure}
  \centering
  \includegraphics[width=.85\textwidth]{graphics-path}
  \caption[Proposition d'arborescence pour stocker les fichiers
  graphiques]{Proposition d'arborescence pour stocker les fichiers
    graphiques : un répertoire pour les images et  un répertoire
    pour les graphiques vectoriels. Les fichiers au format Eps sont
    enregistrés dans un répertoire à part.}
  \label{fig-graphics-dir}
\end{figure}
On commencera donc par définir un ensemble de variables précisant les
différents répertoires à utiliser :
\begin{makefile}
  FIGSDIR=Figs
  EPSSDIR=Epss
  IMGSDIR=Imgs
\end{makefile}


\subsection{Convertir les images}
\label{sec-graphics-make-img}

Tout d'abord on fait la liste des fichiers au format Jpeg et Png
(c'est un exemple) en stockant cette liste dans deux variables comme
suit :
\begin{makefile}
  PNGS=$(notdir $(wildcard $(IMGSDIR)/*.png))
  JPGS=$(notdir $(wildcard $(IMGSDIR)/*.jpg))
\end{makefile}
La fonction \texttt{wildcard} permet d'obtenir la liste des fichiers
contenu dans le dossier \verb+$(IMGSDIR)+ tandis que la fonction
\texttt{notdir} supprime la partie « répertoire » de chacun des
fichiers. Finalement la variable %$
\texttt{PNGS} contiendra :
\begin{verbatim}
  i.png j.png
\end{verbatim}
et \texttt{JPGS} :
\begin{verbatim}
  k.jpg
\end{verbatim}
On peut ensuite à partir de ces deux variables créer la liste des fichiers Eps
à fabriquer (rappelez-vous qu'ils doivent résider dans un répertoire à
part) :
\begin{makefile}
  IMGS2EPSS=$(patsubst %,$(EPSSDIR)/%,\
               $(PNGS:.png=.eps) $(JPGS:.jpg=.eps))
\end{makefile}
L'expression à droite de l'affectation permet de changer l'extension
en \texttt{eps} dans les deux listes précédentes et de préfixer chaque
nom par le répertoire de stockage des fichiers Eps. \texttt{IMG2EPSS}
contiendra donc :
\begin{verbatim}
  Epss/i.eps Epss/j.eps Epss/k.eps
\end{verbatim}
Cette liste constitue les « prérequis » (au sens de \soft{make}) pour
fabriquer les images. On définit donc la cible \texttt{figs} comme
suit :
\begin{makefile}
  figs : $(IMGS2EPSS)
\end{makefile}
Il faudra également expliquer à \soft{make} comment on peut fabriquer
un fichier au format postscript encapsulé à partir d'une image. Ceci
pourra s'écrire à l'aide de la règle suivante :
\begin{makefile}
  $(EPSSDIR)/%.eps : $(IMGSDIR)/%.png
  ø$\longmapsto$ø convert  $<  EPS:$@
  $(EPSSDIR)/%.eps : $(IMGSDIR)/%.jpg
  ø$\longmapsto$ø convert  $<  EPS:$@
\end{makefile}
qui précise qu'on utilisera l'utilitaire \soft{convert}\footnote{Du
  package ImageMagick disponible à \url{http://www.imagemagick.org},
  qui convertit à peu près tout format d'images} pour convertir un
fichier Png ou Jpeg en Eps.

\subsection{Convertir les fichiers de dessin}
\label{sec-graphics-make-fig}

La conversion des fichiers de dessins suit exactement le même
principe. Supposons qu'on dispose de sources au format Fig provenant de
\soft{xfig} et au format Svg provenant de \soft{Inkscape}. On aura
alors dans le \texttt{makefile} :
\begin{makefile}
  FIGS=$(notdir $(wildcard $(FIGSDIR)/*.fig))
  SVGS=$(notdir $(wildcard $(FIGSDIR)/*.svg))
  FIGS2EPSS=$(patsubst %,$(EPSSDIR)/%,\
              $(FIGS:.fig=.eps) $(SVGS:.svg=.eps))
\end{makefile}
Les règles de conversion sont bien sûr différentes puisqu'elles
font appel l'une à \soft{fig2dev} (utilitaire connexe à \soft{xfig})
et à \soft{Inkscape} lui-même pour l'autre :
\begin{makefile}
  $(EPSSDIR)/%.eps : $(FIGSDIR)/%.fig
  ø$\longmapsto$ø fig2dev -L eps  $< > $@
  $(EPSSDIR)/%.eps : $(FIGSDIR)/%.svg
  ø$\longmapsto$ø inkscape -E $@ $<
\end{makefile}
La cible permettant de fabriquer les fichiers de dessins et les images
devient finalement :
\begin{makefile}
  figs : $(IMGS2EPSS) $(FIGS2EPSS)
\end{makefile}


\section{À part ça}
On peut trouver un grand nombre d'extensions permettant de produire
des graphiques correspondant à un besoin particulier (circuits
électroniques, histogrammes, arbres...). Vous pouvez en effet avoir besoin,
un jour, de générer des graphiques de manière automatique à partir
d'une commande. Jetez alors un coup d'oeil sur les différentes
extensions disponibles (\ltxpack{pstricks}, \MP{},...)  ainsi que sur
l'environnement \ltxenv{picture} et ses extensions \ltxpack{epic} et
\ltxpack{eepic}. Bon courage !
% Le package mflogo fournit la commande \MP{} pour obtenir le logo «
% officiel » de METAPOST...
\begin{note}
  Un package ayant aujourd'hui le vent en poupe est le package
  \ltxpack{TikZ}. Il offre à ses valeureux utilisateurs la possibilité
  de créer des dessins dans un langage s'appuyant sur \LaTeX{}. C'est
  une solution très intéressante lorsque dans un document, des schémas
  reviennent sous des formes équivalentes à plusieurs reprises. Ce
  package sera présenté dans la prochaine édition de ce manuel.
\end{note}





%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "../framabook"
%%% End: 
