\documentstyle{article}

\textheight532pt
\textwidth355pt
\footskip15pt

\hoffset-35mm
\voffset-35mm

\language=1
\hyphenation{dia-gram-me}
\diagramlabel{Diagramme}

\title{Mode d'emploi de {\em Diagram 3}\thanks{Par rapport aux versions~1 et
~2, le dessin des flèches a été amélioré, la variété de directions et de
flèches disponibles a été plus que doublée, toutes les flèches pour diagrammes
admettent un argument optionnel de longueur, la frappe des diagrammes a été
simplifiée, des messages d'erreur et d'aide ont été introduits. Pour compiler
avec {\em Diagram~3}, des documents préparés avec les versions~1 ou~2, lire le
fichier {\em OldDiagram} après le fichier {\em Diagram}.}}   
\author{Francis Borceux, Louvain-la-Neuve} 
\date{borceux@agel.ucl.ac.be}

\font\bldfc=cmmib10
\def\boldface#1{\mbox{\bldfc#1}}

\newcommand{\XA}%
{\truex{300}%
\begin{picture}(0,0)%
\put(0,0){\circle{\value{x}}}%
\end{picture}}

\newcommand{\XB}%
{\truex{500}%
\begin{picture}(0,0)%
\put(0,0){\circle*{\value{x}}}%
\end{picture}}

\newcommand{\V}[3]{\cross{\XB}{\movevertex(#1,#2){\scriptstyle#3}}}

\begin{document}

\maketitle

\section{A propos de {\em Diagram}}

Le fichier {\em Diagram} réalise la construction de diagrammes du type de ceux
apparaissant dans les textes de théorie des catégories. L'utilisateur donne la
liste des objets et des flèches constituant le diagramme, comme s'il composait
une matrice, et le programme prend soin de calculer les dimensions des flèches
et de réaliser la mise en page. Tout ce que l'utilisateur doit faire en ce qui
concerne les flèches est préciser leur type (monomorphisme, paire de flèches,
\ldots) et leur direction (nord, sud-est,\ldots): 12 types de flèches et 32
directions sont disponibles; voir figures~1 et~3 pour des listes exhaustives.

Un fichier {\em MultipleArrows} existe également: il produit des flèches
triples, quadruples et quintuples, parallèles ou adjointes. La taille de ces
éléments est telle que de sévères restrictions s'appliquent à ceux-ci.

{\em Diagram} fait un usage abondant des commandes \LaTeX\ et ne peut donc
fonctionner sans \LaTeX.

Certaines implémentations de \TeX, surtout celles limitées à $2^{16}$ mots de
mé\-moi\-re, sont incapables de manipuler {\em Diagram}. Pour ces situations,
deux fichiers réduits de macros ont été créés; la restriction s'applique
uniquement aux types de flèches disponibles.
\begin{itemize}
\item {\em MicroDiagram} ne dessine que des flèches simples;
\item {\em MiniDiagram} dessine des flèches simples, des paires de flèches et
des flèches adjointes.
\end{itemize}
La restriction est d'ailleurs plus subtile, car les flèches sont produites ici
d'une manière plus économique.

Compiler de grands diagrammes requiert beaucoup de mémoire \TeX; si vous êtes
fortement limité à cet égard, esssayez de produire ces diagrammes commes
documents séparés. Pour économiser de la mémoire, vous pouvez aussi supprimer
du fichier les macros que vous n'envisagez pas d'utiliser. Ne copiez pas des
macros de {\em Diagram} vers {\em MiniDiagram} ou {\em MicroDiagram}: cela ne
fonctionnerait pas.

{\em Diagram} a été conçu pour fournir des résultats optimaux sur les
imprimantes avec une résolution allant jusque 300dpi. Dans le cas d'imprimantes
à plus haute résolution, il convient d'adapter en conséquence le paramètre {\em
printerresolution} donné comme première instruction du fichier {\em Diagram}.
Notez en passant que diminuer ce paramètre est une autre manière d'économiser
de la mémoire.

\section{Les flèches dans les formules}

Des flèches peuvent être introduites dans les formules, donc dans une ligne de
texte entre simples dollars ou dans une formule hors-texte, entre doubles
dollars. La commande est la même dans les deux cas, mais l'effet produit est
différent. La variété de flèches disponibles est donnée à la figure~1.
\begin{figure}
\settextarrowlength{45}
\begin{center}
\begin{tabular}{|l|c|l|}
\hline
{\bf Nom}&{\bf Flèche}&{\bf Code}\\
\hline\hline
flèche simple&$\ar$&ar\\
flèche pointillée&$\dotar$&dotar\\
distributeur&$\dist$&dist\\
monomorphisme&$\mono$&mono\\
épimorphisme&$\epi$&epi\\
bimorphisme&$\bimo$&bimo\\
isomorphisme&$\iso$&iso\\
égalité&$\eql$&eql\\ & & \\
paire de flèches&$\biar$&biar\\ & & \\
flèches adjointes&$\adjar$&adjar\\ & & \\
paire de distributeurs&$\bidist$&bidist\\ & & \\
distributeurs adjoints&$\adjdist$&adjdist\\
\hline
\end{tabular}
\hspace{5mm}
\begin{minipage}{30mm}
Les codes {\em iso, dist, bidist, adjdist} sont gé\-né\-ri\-ques:
les mar\-ques $\cong$, $\circ$ peu\-vent être chan\-gées a tout mo\-ment
par les ins\-truc\-tions \verb+\isomark{...}+, \verb+\distmark{...}+
où \verb+...+ sont les nou\-vel\-les mar\-ques. Les mar\-ques par dé\-faut sont
\verb+\cong+ et \verb+\distcircle+.
\end{minipage}
\end{center}
\caption{Les divers types de flèches.}
\settextarrowlength{20}
\end{figure}
\begin{itemize}
\item Pour produire un type donné de flèche dans le sens direct (comme à la
figure~1), il suffit de frapper un {\em backslash} suivi du code pour ce type
de flèche: donc
\verb+$f \colon A \mono B$+ produit $f \colon A \mono B$.
\item Pour produire un type donné de flèche dans le sens opposé, frappez une
commande commençant par \verb+\bk+ et se terminant par le code pour ce type de
flèche: donc
\verb+$g \colon B \bkepi C$+ produit $g \colon B \bkepi C$.
\item Pour donner un nom à l'une des flèches précédentes, il suffit de frapper
en majuscule la première lettre de la commande et de donner le nom comme
argument: donc
\verb+$C \Dist h D$+ produit $C \Dist h D$. 
Bien entendu, dans le cas de doubles flèches, il faut donner deux noms:
d'abord celui de la flèche supérieure puis celui de la flèche inférieure:
par exemple 
\verb+$D \Bkadjar ij E$+ produit $D \Bkadjar ij E$. Comme d'habitude, quand les
noms ne sont pas des caractères uniques, utilisez des accolades pour les
délimiter. 
\end{itemize}
Pour vous permettre de juger la différence entre les flèches 
dans le texte et les flèches hors-texte, voici les flèches précédentes
produites hors-texte
$$ A \Mono f B \Bkepi g C \Dist h D \Bkadjar ij E $$
via les commandes
\begin{verbatim}
$$ A \Mono f B \Bkepi g C \Dist h D \Bkadjar ij E $$
\end{verbatim}

La longueur par défaut d'une flèche dans le texte est 20pt et son nom éventuel
est produit en taille {\em scriptstyle}; la longueur par défaut d'une flèche
hors-texte est 30pt et son nom éventuel est produit en taille {\em textstyle}.
Ces longueurs par défaut peuvent être modifiées à tout moment via des
instructions
\begin{verbatim}
\settextarrowlength{25}
\setdisplayarrowlength{40}
\end{verbatim}
où 25 et 40 expriment les nouvelles longueurs en points.

\section{Construire un diagramme}

Pour construire un diagramme bi-dimensionnel, imaginez un réseau de points,
visualisé par des cercles et des ``boulets'' dans la figure~2:
\begin{figure}
\begin{diagram} 
\XB§\XA§\XB§\XA§\XB§\XA§\XB§§ 
\XA§\cross{\XA}{\sear}§\cross{\XA}{\esear}§\cross{\XA}{\eesear}§\XA§\XA§\XA§§
\XB§\cross{\XA}{\ssear}§\XB§\cross{\XA}{\ear}§\XB§\cross{\XA}{\ear}§\XB§§       
\XA§\XA§\cross{\XA}{\sar}§\XA§\cross{\XA}{\sar}§\XA§\cross{\XA}{\sar}§§
\XB§\XA§\XB§\cross{\XA}{\ear}§\XB§\cross{\XA}{\ear}§\XB§§ 
\end{diagram} 
\caption{Conception d'un diagramme bi-dimensionnel.} 
\end{figure}
les boulets indiquent les points du réseau où l'on peut s'attendre à trouver un
objet. Chaque objet et chaque flèche est attaché par son centre en un point du
réseau. Il suffit maintenant d'énumérer les éléments, ligne par ligne et
colonne par colonne, comme pour une matrice; en particulier quand tous les
éléments non vides d'une ligne ont été énumérés, on peut passer directement à
la ligne suivante. Tous les éléments sont traités automatiquement en mode
mathématique. Le programme prend soin de choisir correctement la longueur de
chaque flèche.

Un objet se frappe comme n'importe quelle formule mathématique. Les règles pour
introduire une flèche sont complètement analogues à celles de la section~2: les
divers types de flèches sont de nouveau ceux de la figure ~1 tandis que les
directions possibles et leur code sont données à la figure~3.
\begin{figure}
\begin{diagram}[60]
\XB§\XA§\V{0}{10}{nwnnw}§\XA§\V{0}{10}{nnnw}§\XA§\XB§\XA§\V{0}{10}{nnne}§
\XA§\V{0}{10}{nenne}§\XA§\XB§§
\XA§\XA§\XA§\XA§\XA§\XA§\XA§\XA§\XA§\XA§\XA§\XA§\XA§§
\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle nwwnw$}}§\XA§\XB§\XA§
\V{-5}{10}{\boldface{nnw}}§\XA§\XB§\XA§\V{5}{10}{\boldface{nne}}§\XA§\XB§\XA§
\V{10}{0}{\makebox[0pt][l]{$\scriptstyle
neene$}}§§
\XA§\XA§\XA§\XA§\cross{\XA}{\nwnnwar}§\cross{\XA}{\nnnwar}§\XA§\cross{\XA}{\nnnear}§
\cross{\XA}{\nennear}§\XA§\XA§\XA§\XA§§
\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle
wwnw$}}§\XA§\V{-10}{10}{\boldface{wnw}}§\cross{\XA}{\nwwnwar}§
\V{-5}{10}{\boldface{nw}}§\cross{\XA}{\bold\nnwar}§\V{0}{10}{\boldface{n}}§
\cross{\XA}{\bold\nnear}§\V{5}{10}{\boldface{ne}}§\cross{\XA}{\neenear}§
\V{10}{10}{\boldface{ene}}§\XA§\V{10}{0}{\makebox[0pt][l]{$\scriptstyle
eene$}}§§
\XA§\XA§\XA§\cross{\XA}{\wwnwar}§\cross{\XA}{\bold\wnwar}§\cross{\XA}{\bold\nwar}§
\cross{\XA}{\bold\nar}§\cross{\XA}{\bold\near}§\cross{\XA}{\bold\enear}§
\cross{\XA}{\eenear}§\XA§\XA§\XA§§
\XB§\XA§\XB§\XA§\V{-10}{0}{\boldface{w}}§\cross{\XA}{\bold\war}§\XB§
\cross{\XA}{\bold\ear}§\V{10}{0}{\boldface{e}}§\XA§\XB§\XA§\XB§§
\XA§\XA§\XA§\cross{\XA}{\wwswar}§\cross{\XA}{\bold\wswar}§\cross{\XA}{\bold\swar}§
\cross{\XA}{\bold\sar}§\cross{\XA}{\bold\sear}§\cross{\XA}{\bold\esear}§
\cross{\XA}{\eesear}§\XA§\XA§\XA§§
\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle
wwsw$}}§\XA§\V{-10}{-10}{\boldface{wsw}}§\cross{\XA}{\swwswar}§
\V{-5}{-10}{\boldface{sw}}§\cross{\XA}{\bold\sswar}§\V{0}{-10}{\boldface{s}}§
\cross{\XA}{\bold\ssear}§\V{5}{-10}{\boldface{se}}§\cross{\XA}{\seesear}§
\V{10}{-10}{\boldface{ese}}§\XA§\V{10}{0}{\makebox[0pt][l]{$\scriptstyle
eese$}}§§
\XA§\XA§\XA§\XA§\cross{\XA}{\swsswar}§\cross{\XA}{\ssswar}§\XA§\cross{\XA}{\sssear}§
\cross{\XA}{\sessear}§\XA§\XA§\XA§\XA§§
\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle
swwsw$}}§\XA§\XB§\XA§\V{-5}{-10}{\boldface{ssw}}§\XA§\XB§\XA§
\V{5}{-10}{\boldface{sse}}§\XA§\XB§\XA§
\V{10}{0}{\makebox[0pt][l]{$\scriptstyle seese$}}§§
\XA§\XA§\XA§\XA§\XA§\XA§\XA§\XA§\XA§\XA§\XA§\XA§\XA§§
\XB§\XA§\V{0}{-10}{swssw}§\XA§\V{0}{-10}{sssw}§\XA§\XB§\XA§\V{0}{-10}{ssse}§
\XA§\V{0}{-10}{sesse}§\XA§\XB§§
\end{diagram} 
\caption{Les 32 directions de flèches dans un diagramme.}
\end{figure} 
Prenant une certaine liberté avec la géographie et la trigonométrie,
les 32 directions considérées ont reçu les noms habituels dans
la rose des vents.
\begin{itemize}
\item Pour produire un type de flèche dans une direction donnée, frappez un
{\em backslash} suivi du code de la direction et du code de la flèche.
Par exemple
\verb+\nemono+ founit un monomorphisme orienté au nord-est.
\item Pour mettre un nom au-dessus d'une flèche, frappez la première lettre de
la commande en majuscule et donnez le nom comme argument. Par exemple
\verb+\Ssedist f+ fournit un distributeur $f$ orienté au sud-sud-est. Bien
entendu dans le cas de doubles flèches il faut donner deux noms: d'abord celui
de la flèche supérieure puis celui de la flèche inférieure. Dans le cas de
flèches verticales, le nom apparaît à gauche de la flèche. 
\item La procédure pour mettre un nom en-dessous d'une flèche est analogue:
frappez cette fois la dernière lettre de la commande en majuscule et donnez le
nom comme argument. Donc \verb+\wbimO f+ produit un bimorphisme $f$ orienté à
l'ouest. Dans le cas de flèches verticales, le nom apparaît cette fois à
droite. Pour les doubles flèches, les deux procédures pour insérer les noms
sont équivalentes.
\end{itemize}
Les 12 types de flèches de la figure~1 existent dans les 16 directions
principales, imprimées en gras à la figure~3; dans les 16 autres directions,
seules les flèches simples existent.

Il reste à expliquer la syntaxe pour frapper un diagramme. C'est simplement
\begingroup%
\catcode`\§=\active\def§{{\S}}%       
\begin{verbatim}
\begin{diagram}
...§...§...§§
...§...§...§...§§
...§...§...§...§§
\end{diagram}
\end{verbatim}%
\endgroup%
\noindent où \verb+...+ indiquent les éléments successifs. Donc un simple \S\
est le délimiteur entre deux éléments d'une même ligne, tandis qu'un double
\S\S\ indique la fin d'une ligne\footnote{Si l'utilisation du symbole \S\ vous
cause un problème, remplacez-le par n'importe quel symbole que vous ne risquez
guère d'utiliser dans un diagramme, par exemple ?; vous pouvez effectuer ce
changement de manière globale et automatique dans le fichier {\em Diagram}.}. Il
est impératif de frapper le double \S\S\ à la fin de la dernière ligne et rien ne
peut se trouver entre ce double \S\S\ et l'instruction \verb+\end{diagram}+ (il
y a une seule exception, exposée dans la section~6). N'oubliez pas un espace
blanc pour indiquer un élément vide, car deux \S\S\ consécutifs seraient
interprétés comme la fin de la ligne. Plusieurs blancs sont, comme toujours,
équivalents à un seul.


Donc le diagramme~1, 
\begin{floatingdiagram}
A§§
 §\Sedotar x§\eseaR y  §\Eesear z§§
 §\sseaR u  §A         §\Eepi a  §B         §\Emono b§C         §§
 §          §\saR c    §         §\Sadjar de§        §\seqL{1_C}§§  
 §          §D         §\waR g   §D\oplus E §\eaR h  §C         §§
\end{floatingdiagram}
qui a exactement la forme évoquée par la figure ~2, est produit
par les instructions suivantes:
\begingroup%
\catcode`\§=\active\def§{{\S}}%      
\begin{verbatim}
\begin{diagram}
A§§
 §\Sedotar x§\eseaR y  §\Eesear z§§
 §\sseaR u  §A         §\Eepi a  §B         §\Emono b§C         §§
 §          §\saR c    §         §\Sadjar de§        §\seqL{1_C}§§  
 §          §D         §\waR g   §D\oplus E §\eaR h  §C         §§
\end{diagram}
\end{verbatim}%
\endgroup%

Il existe un second environnement, parfaitement analogue, pour produire des
diagrammes; il prend la forme
\begingroup%
\catcode`\§=\active\def§{{\S}}%       
\begin{verbatim}
\begin{floatingdiagram}
...§...§...§§
...§...§...§...§§
...§...§...§...§§
\end{floatingdiagram}
\end{verbatim}%
\endgroup%
\noindent Comme son nom l'indique, le diagramme est cette fois introduit comme
corps flottant et se trouve numéroté automatiquement (cf.~diagrammes~1 à~3). Le
choix par défaut est de numéroter successivement les diagrammes à travers tout
le document. Vous pouvez préférer un numéro 3.12 pour, par exemple, le douzième
diagramme du chapitre~3 (dans un style avec des chapitres!). Ceci s'obtient par
l'instruction
\begin{verbatim}
\setdiagramcounter{chapter}
\end{verbatim}
où bien entendu {\em chapter} peut être remplacé par tout autre niveau de
sectionnement: {\em part, section,\ldots} Pour des textes rédigés dans une
autre langue que l'anglais, vous pouvez traduire le mot {\em Diagram}
précédant le numéro en donnant, par exemple, l'instruction
\begin{verbatim}
\diagramlabel{Diagramme}
\end{verbatim}
n'importe où dans le texte, mais pas à l'intérieur d'un diagramme.

Chaque diagramme, flottant ou non, peut en outre recevoir une légende.
Cela se fait via une instruction
\begin{verbatim}
\diagramcaption{...}
\end{verbatim}
qui peut se donner n'importe où dans le diagramme, mais avant les derniers
\S\S. Dans le cas d'un diagramme flottant, cette légende complète la
numérotation automatique, comme au diagramme~4.

\section{Modifications de tailles}

Le pas du réseau formel de points sous-tendant un diagramme est de 40 unités,
où l'unité par défaut est le point. Un facteur d'échelle peut être 
appliqué à cette valeur par défaut, via une instruction
\begin{verbatim}
\setdefaultscale{75}
\end{verbatim}
(facteur d'échelle 75\%); cette instruction s'applique à tous les diagrammes
ul\-té\-rieurs et doit être donnée en dehors de tout environnement {\em
diagram} ou {\em floatingdiagram}. Si vous souhaitez appliquer un facteur
d'échelle à un seul diagramme, donnez ce facteur d'échelle comme argument
optionnel de l'environnement correspondant; par exemple
\begin{verbatim}
\begin{diagram}[125]
........
\end{diagram}
\end{verbatim}
pour un agrandissement de 125\%, et de manière analogue pour les diagrammes
flottants. Le facteur d'échelle donné ainsi pour un diagramme spécifique se
subsitue à la valeur par défaut en vigueur, juste le temps du digramme
concerné. Par exemple le digramme~1 est à l'échelle 100\% et le diagramme~2 à
l'échelle 75\%. Observez l'effet précis d'un tel facteur d'échelle, qui n'est
en rien une homthétie brutale.
\begin{floatingdiagram}[75]
A§§
 §\Sedotar x§\eseaR y  §\Eesear z§§
 §\sseaR u  §A         §\Eepi a  §B         §\Emono b§C         §§
 §          §\saR c    §         §\Sadjar de§        §\seqL{1_C}§§  
 §          §D         §\waR g   §D\oplus E §\eaR h  §C         §§
\end{floatingdiagram}

Pour motiver les notions suivantes, considérons la conception d'un diagramme
tri-dimensionnel, comme à la figure~4. Comparez tout d'abord la dispositon
des ``boulets'' par rapport à celle de la figure~2.
\begin{figure}
\begin{diagram}[50]
\XB§\XA§\cross{\XA}{\ear[130]}§\XA§\XB§\XA§\cross{\XA}{\ear[130]}§\XA§\XB§\XA§\XA§§
\XA§\cross{\XA}{\sear}§\XA§\XA§\XA§\cross{\XA}{\sear}§\XA§\XA§\XA§\cross{\XA}{\sear}§\XA§§
\cross{\XA}{\sar[130]}§\XA§\XB§\XA§\cross{\XA}{\cross{\ear[130]}{\sar[130]}}§\XA 
   §\XB§\XA§\cross{\XA}{\cross{\ear[130]}{\sar[130]}}§\XA§\XB§§ 
\XA§\XA§\XA§\XA§\XA§\XA§\XA§\XA§\XA§\XA§\XA§§
\XB§\XA§\cross{\XA}{\cross{\ear[130]}{\sar[130]}}§\XA§\XB§ 
   §\cross{\XA}{\cross{\ear[130]}{\sar[130]}}§\XA§\XB§\XA§\cross{\XA}{\sar[130]}§§
\XA§\cross{\XA}{\sear}§\XA§\XA§\XA§\cross{\XA}{\sear}§\XA§\XA§\XA§\cross{\XA}{\sear}§\XA§§ 
\XA§\XA§\XB§\XA§\cross{\XA}{\ear[130]}§\XA§\XB§\XA§\cross{\XA}{\ear[130]}§\XA§\XB§§
\end{diagram}
\caption{Conception d'un diagramme tri-dimensionnel}
\end{figure}
Dans ce cas non seulement il faut ``croiser'' des flèches en un même point du
réseau formel, mais il faut aussi considérer des flèches traversant plusieurs
points du réseau avant d'atteindre les objets qu'elles relient. En fait {\em
Diagram} suppose toujours qu'une flèche relie les deux points adjacents du
réseau dans la direction de la flèche. Si ce n'est pas le cas, c'est à vous de
déterminer la longueur de la flèche correspondante.

Pour imposer une longueur spécifique à une flèche d'un diagramme, donnez
l'étendue correspondante de la flèche comme argument optionnel\footnote{Cet
argument doit impérativement être un nombre entier positif; toute autre chose, y
compris la valeur d'un compteur, troublerait profondément \TeX. Les flèches à
inclure dans le texte (section~2) n'admettent pas cet argument optionnel.}:
l'étendue d'une flèche horizontale ou verticale est sa longueur; l'étendue des
autres flèches est la longueur de leur projection horizontale (voir le manuel
\LaTeX, {\em Picture environment}, pour de plus amples détails). Donc
\verb+\Near[60]f+ dessine une flèche $f$ d'étendue 60 unités, orientée au
nord-est. Voici les valeurs par défaut des étendues des diverses flèches: 50
dans les directions n, s, e, w; 59 dans les directions ne, nw, se, sw; 133 dans
les directions ene, ese, wnw, wsw; 67 dans les directions nne, sse, nnw, ssw;
211 dans les directions eene, eese, wwnw, wwsw; 71 dans les directions nnne,
ssse, nnnw, sssw; 215 dans les direction neene, seese, nwwnw, swwsw; 143 dans
les directions nenne, sesse, nwnnw, swssw. Dans la plupart des cas, vous
obtiendrez l'étendue requise en augmentant la valeur par défaut d'autant de fois
40 que la flèche traverse de points supplémentaires du réseau.

En ce qui concerne les flèches ``croisées'', la commande 
\begin{verbatim}
\cross{element 1}{element 2}
\end{verbatim}
vous permet d'introduire simultanément {\em element 1} et {\em element 2}
en un même point du réseau, sans perturber la construction générale
du diagramme; ces deux {\em elements} peuvent être indifféremment des
objets ou des flèches.
Le diagramme~3, conçu à la figure~4, peut donc s'obtenir comme
\begingroup
\catcode`\§=\active\def§{{\S}}       
\begin{verbatim}
\begin{floatingdiagram}[50]
A§ §\ear[130]§ §B§ §\ear[130]§ §C§§
§\sear§ § § §\sear§ § § §\sear §§ 
\sar[130]§ §D§ §\cross{\ear[130]}{\sar[130]}§ 
           §E§ §\cross{\ear[130]}{\sar[130]}§ §F§§ §§
G§ §\cross{\ear[130]}{\sar[130]}§ §H§ 
   §\cross{\ear[130]}{\sar[130]}§ §I§ §\sar[130]§§
§\sear§ § § §\sear§ § § §\sear§§ 
§ §J§ §\ear[130]§ §K§ §\ear[130]§ §L§§
\end{floatingdiagram}
\end{verbatim}
\endgroup
\begin{floatingdiagram}[50]
A§ §\ear[130]§ §B§ §\ear[130]§ §C§§
§\sear§ § § §\sear§ § § §\sear §§ 
\sar[130]§ §D§ §\cross{\ear[130]}{\sar[130]}§ 
           §E§ §\cross{\ear[130]}{\sar[130]}§ §F§§ §§
G§ §\cross{\ear[130]}{\sar[130]}§ §H§ 
   §\cross{\ear[130]}{\sar[130]}§ §I§ §\sar[130]§§
§\sear§ § § §\sear§ § § §\sear§§ 
§ §J§ §\ear[130]§ §K§ §\ear[130]§ §L§§
\end{floatingdiagram}

Enfin vous pouvez modifier l'épaisseur du trait d'une flèche en frappant
d'abord la commande \verb+\bold+; donc \verb+\bold\nar+ produit une flèche
grasse orientée au nord. Cette option \verb+\bold+ est supprimée
automatiquement par le symbole \S\ suivant; vous pouvez aussi l'annuler plus
tôt (par exemple dans une commande \verb+\cross+) par l'instruction
\verb+\unbold+. Voyez la figure~3 pour des exemples de flèches grasses.


\section{Les flèches courbes}

{\em Diagram} fournit également huit flèches courbes pouvant être utilisées
pour relier des points distants le long d'un bord d'un diagramme;
le code pour une flèche courbe est {\em curvar}. Ces flèches sont présentées à
la figure ~5, à l'échelle 50\%, 
\begin{figure}
\begin{diagram}[50]
\cdot§\ear§\cross{\XB}{\Necurvar{ne}}§\ear§\cdot§ § § § §
\cdot§\ear§\cross{\XB}{\Nwcurvar{nw}}§\ear§\cdot§§
\sar§ §\sar§ §\sar§ § § § §\sar§ §\sar§ §\sar§§
\cross{\XB}{\Wncurvar{wn}}§\ear§\cdot§\ear§\cross{\XB}{\Escurvar{es}}§ § § § §
\cross{\XB}{\Wscurvar{ws}}§\ear§\cdot§\ear§\cross{\XB}{\Encurvar{en}}§§
\sar§ §\sar§ §\sar§ § § § §\sar§ §\sar§ §\sar§§
\cdot§\ear§\cross{\XB}{\Swcurvar{sw}}§\ear§\cdot§ § § § §
\cdot§\ear§\cross{\XB}{\Securvar{se}}§\ear§\cdot§§
\spacing(15,0,15)
\end{diagram}
\caption{Les huit flèches courbes.}
\end{figure}
avec les codes de direction correspondants. La première lettre du code de
direction indique la position de la flèche par rapport au diagramme; la seconde
lettre précise l'orientation globale de la flèche. Ainsi \verb+\wscurvar+
dessine une flèche courbe, à l'ouest du diagramme, orientée au sud. Comme pour
les autres flèches, une première (ou dernière) lettre majuscule permet
d'affubler la flèche d'un nom.

Les flèches courbes sont des exemples typiques d'éléments qui sont
gé\-né\-ra\-le\-ment introduits via la commande \verb+\cross+ de la section~4, en
un point du réseau partagé avec un objet ou une autre flèche. Dans la figure~5,
les ``boulets'' indiquent le centre formel des flèches courbes, c'est-à-dire le
point du réseau en lequel elles sont attachées.

La longueur par défaut des flèches courbes est 160 unités, fournissant la
situation de la figure~5. Comme les autres flèches introduites dans un
diagramme, une longueur arbitraire peut être imposée comme premier argument
optionnel.

Les flèches courbes sont également incluses dans {\em MiniDiagram} et {\em
MicroDiagram}.


\section{Corrections d'espacements}

{\em Diagram} détermine les dimensions d'un diagramme en comptant le nombre de
lignes et de colonnes. Quand les dimensions réelles diffèrent sensiblement de
celles estimées par ce procédé, par exemple quand vous introduisez des flèches
courbes le long d'un diagramme, une correction d'espacement peut être
nécessaire. Elle se réalise via l'instruction \verb+\spacing(t,b,l)+ qui doit
im\-pé\-ra\-ti\-ve\-ment être donnée entre les derniers \S\S\ et l'instruction
\verb+\end{diagram}+ (ou \verb+\end{floatingdiagram}+). Cette
commande\footnote{N'abbréviez pas cette commande, cela troublerait profondément
\TeX.} ajoute un espacement de $t$ points au dessus du diagramme, $l$ points à
gauche et $b$ points en dessous. $t$, $l$, $b$ sont des entiers positifs ou
négatifs.

\begingroup%
\catcode`\§=\active\def§{{\S}}%       
\begin{verbatim}
\begin{diagram}[80]
\diagramcaption{What a nice diagram!}
...§...§...§§
...§...§...§...§§
...§...§...§...§§
\spacing(10,-15,10)
\end{diagram}
\end{verbatim}%
\endgroup%

L'usage de la commande \verb+\cross+ peut provoquer des collisons
entre une flèche et le nom d'une autre flèche. Ceci et d'autres situations
inhabituelles peuvent être corrigées par les instructions suivantes,
qui ne perturbent pas la construction générale du diagramme.
\begin{itemize}
\item \verb+\movename(n,m){f}+ déplace le nom $f$ d'une flèche $n$ points vers
la droite et  $m$ points vers le haut. 
\item \verb+\movearrow(n,m){\arrow}+ déplace la flèche \verb+\arrow+ (et son
nom éventuel) $n$ points vers la droite et $m$ points vers le haut. 
\item
\verb+\movevertex(n,m){XXX}+ déplace l'objet $XXX$ $n$ points vers la droite et
$m$ points vers le haut. 
\item \verb+\movevertexleft{XXX}+ déplace un trop long objet $XXX$ situé à
gauche d'un diagramme de sorte que la flèche horizontale suivante garde une
longueur maximale. 
\item \verb+\movevertexright{XXX}+ déplace un trop long objet $XXX$
situé à droite d'un diagramme de sorte que la flèche horizontale
précédente garde une longueur maximale.
\end{itemize}

Par exemple, le diagramme~4 
\begin{floatingdiagram}
(A\oplus B)\otimes(C\oplus D) § \Ear f§ X\oplus V §§
\Sar g§ § \saR h§§
Y\oplus W § \eaR i§ (E\oplus F)\otimes(G\oplus H) §§ 
\movevertexleft{(A\oplus B)\otimes(C\oplus D)} § \Ear f§ X\oplus V §§
\Sar g§ § \saR h§§
Y\oplus W § \eaR i§ \movevertexright{(E\oplus F)\otimes(G\oplus H)} 
\diagramcaption{Ajustements automatiques et manuels.} §§
\end{floatingdiagram}
a été obtenu en frappant
\begingroup
\catcode`\§=\active\def§{{\S}}       
\begin{verbatim}
\begin{floatingdiagram}
(A\oplus B)\otimes(C\oplus D)§\Ear f§X\oplus V§§
\Sar g§ §\saR h§§
Y\oplus W§\eaR i§(E\oplus F)\otimes(G\oplus H)§§ 
\movevertexleft{(A\oplus B)\otimes(C\oplus D)}§\Ear f§X\oplus V§§
\Sar g§ §\saR h§§
Y\oplus W§\eaR i§\movevertexright{(E\oplus F)\otimes(G\oplus H)} 
\diagramcaption{Ajustements automatiques et manuels.}§§
\end{floatingdiagram}
\end{verbatim}
\endgroup
Le carré supérieur est donc produit automatiquement par {\em Diagram}
tandis que le carré inférieur a été ajusté par l'utilisateur. A vous de
choisir.\vfill

\mbox{}\hfill{\footnotesize An English version of this user's guide is also
available.}


\end{document}