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