\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}