1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
|
\documentstyle{article}
\textheight520pt
\textwidth349pt
\footskip15pt
\hoffset-35mm
\voffset-35mm
\title{User's guide for {\em Diagram 3}\thanks{With respect
to versions 1 and 2, the shape of arrows has been improved, the variety of
directions and arrows available has been more than doubled, all diagram arrows
admit an optional length argument, the typing of diagrams has been shortened, error
and help messages have been introduced. To typeset with {\em Diagram~3}, diagrams
prepared with versions~1 or~2, read the file {\em OldDiagram} after the file {\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{The {\em Diagram} macros}
The {\em Diagram macros} realize the construction of diagrams as
those appearing in category theory texts. The user gives the list
of vertices and arrows to be included, just as when composing a
matrix, and the program takes care of computing the dimensions of
the arrows and realizing the pagesetting. All the user has to do
about the arrows is precising their type (monomorphism, pair of
adjoint arrows,\ldots) and their direction (north,
south-east,\ldots): 12 types and 32 directions are available; see
figures~1 and~3 for exhaustive lists.
A file {\em MultipleArrows} exists, producing additional
triple, quadruple and quintuple arrows, parallel or adjoint, but
the size of those pictures is so big that severe restrictions apply
to them.
The {\em Diagram macros} make a big use of \LaTeX\ commands and
cannot work without \LaTeX\ being loaded.
Some small implementations of \TeX, essentially those limited to
$2^{16}$ words of memory, are unable to handle the {\em Diagram
macros}. For those cases, two levels of restricted files have been
created, where the restriction applies just to the number of types
of arrows:
\begin{itemize}
\item {\em MicroDiagram} is only able to design plain arrows;
\item {\em MiniDiagram} designs plain arrows, pairs of
plain arrows and adjoint pairs of plain arrows.
\end{itemize}
The restriction is even more subtle, since arrows are produced
here in a more economical way.
Big diagrams require much \TeX\ memory when typesetting; if you are
badly limited, try to produce them as separate one-page documents. To save
memory, you can also cancel from a file those macros you are not intending to
use. Do not copy macros from {\em Diagram} to {\em MiniDiagram} or {\em
MicroDiagram}\/: this would not work.
The {\em Diagram macros} have been designed to give optimal results
on printers with resolutions up to 300dpi. In the case of printers
with higher resolutions, the parameter {\em printerresolution}
given as a first instruction of the file {\em Diagram} must be changed
accordingly. Notice that reducing this parameter is another way of
saving \TeX\ memory. This parameter does not exist in the files
{\em MicroDiagram} and {\em Minidiagram}.
\section{Arrows in formulas}
Arrows can be introduced in formulas, thus in a line of
text between single dollars or in a displayed formula, between
double dollars. While the command to be given is the same, the
effect which is produced is different in the text and in a
displayed formula. The variety of arrows available is described in
figure~1.
\begin{figure}
\settextarrowlength{45}
\begin{center}
\begin{tabular}{|l|c|l|}
\hline
{\bf Name}&{\bf Arrow}&{\bf Code}\\
\hline\hline
plain arrow&$\ar$&ar\\
dotted arrow&$\dotar$&dotar\\
distributor&$\dist$&dist\\
monomorphism&$\mono$&mono\\
epimorphism&$\epi$&epi\\
bimorphism&$\bimo$&bimo\\
isomorphism&$\iso$&iso\\
equality&$\eql$&eql\\ & & \\
pair of arrows&$\biar$&biar\\ & & \\
adjoint arrows&$\adjar$&adjar\\ & & \\
pair of distributors&$\bidist$&bidist\\ & & \\
adjoint distributors&$\adjdist$&adjdist\\
\hline
\end{tabular}
\hspace{5mm}
\begin{minipage}{30mm}
The codes {\em iso, dist, bidist, adjdist} are generic:
the marks $\cong$, $\circ$ can be changed anywhere in the document via the
instructions \verb+\isomark{...}+, \verb+\distmark{...}+,
where \verb+...+ are the new marks. The default marks are \verb+\cong+ and
\verb+\distcircle+.
\end{minipage}
\end{center}
\caption{The various types of arrows.}
\settextarrowlength{20}
\end{figure}
\begin{itemize}
\item To produce a given type of formula arrow
in the forward direction (as in figure~1), just type a {\em
backslash} followed by the code for this type of arrow: thus
\verb+$f \colon A \mono B$+ will produce $f \colon A \mono B$.
\item To produce a given type of formula arrow in the ``backward'' direction, type a
command starting with \verb+\bk+ and ending with the code for the type of
arrow: thus \verb+$g \colon B \bkepi C$+ produces $g \colon B \bkepi C$.
\item To give an upper name to one of the previous arrows, just use
a first uppercase letter and give the name as an argument: thus
\verb+$C \Dist h D$+ will produce $C \Dist h D$. Of course, when
the picture consists of two arrows, two names must be given, first
the top one and next the bottom one; for example
\verb+$D \Bkadjar ij E$+ to produce $D \Bkadjar ij E$. As usual, when
the names are not single tokens, use curly brackets to delimit them.
\end{itemize}
To let you appreciate the difference between {\em textstyle} and
{\em displaystyle}, here are the previous arrows in {\em display
style}
$$ A \Mono f B \Bkepi g C \Dist h D \Bkadjar ij E $$
introduced via the commands
\begin{verbatim}
$$ A \Mono f B \Bkepi g C \Dist h D \Bkadjar ij E $$
\end{verbatim}
The default length of a {\em text arrow} is 20pt while the names
are processed in {\em scriptstyle}; the default length of a {\em display
arrow} is 30 pt and the names are processed in {\em textstyle}. The
default lengthes can be changed at any time in the document via
instructions of the form
\begin{verbatim}
\settextarrowlength{25}
\setdisplayarrowlength{40}
\end{verbatim}
where 25 and 40 express the new lengthes in points.
\section{Constructing a diagram}
To construct a 2-dimensional diagram, imagine a pattern of
points, visualized by circles and bullets as in 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{Conceiving a 2-dimensional diagram.}
\end{figure}
the bullets indicate the points of this pattern where vertices
could be expected. Each vertex and each arrow is attached by its center at a
point of the pattern. It suffices now to enumerate the items, line by line and
column by column, like for a matrix; in particular when all actual items of a
line have been enumerated, you can pass directly to the next line. All items are
processed in math mode. The program will take care of choosing correctly the
length of each arrow.
A vertex is typed as any mathematical formula. The rules for typing
an arrow are completely analogous to those of section~2:
the various types of arrows are again those of figure~1 while
the possible directions and their codes are given in 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{The 32 directions for {\em Diagram} arrows.}
\end{figure}
Taking some
liberty with geography and trigonometry, the 32 directions considered
by the {\em Diagram macros} are named after those of the compass card.
\begin{itemize}
\item To produce a type of arrow in a given direction, type a {\em
backslash} followed by the code of the direction and the code of
the arrow. For example \verb+\nemono+ draws a north-east
monomorphism.
\item To give an upper name to a diagram arrow, use a first upper case
letter and give the name as an argument. For example
\verb+\Ssedist f+ draws a south-sout-east distributor with upper
name $f$. Of course, when the picture consists in two arrows,
two names must be given: first the upper one and next the lower one.
In the case of vertical arrows, read {\em left} instead of {\em
upper}.
\item The procedure for giving a lower name is analogous, but uses
a last uppercase letter. Thus \verb+\wbimO f+ produces a west
bimorphism with lower name $f$. In the case of vertical arrows,
read {\em right} instead of {\em lower}. For two-arrow pictures,
both naming procedures are equivalent.
\end{itemize}
All 12 types of arrows exist in all 16 principal directions printed in bold
in figure~3; just plain arrows are provided in the 16 other
directions.
It remains to explain the syntax\footnote{This syntax uses the character \S. If
this is a problem for you, just replace \S\ by any character you are unlikely to
use in a digram, for example ?; you can safely make this change globally and
automatically in the file {\em Diagram}.} for typing diagrams. This is just
\begingroup%
\catcode`\¤=\active\def¤{{\S}}%
\begin{verbatim}
\begin{diagram}
...¤...¤...¤¤
...¤...¤...¤...¤¤
...¤...¤...¤...¤¤
\end{diagram}
\end{verbatim}%
\endgroup%
\noindent where \verb+...+ denote the various items of the diagram. So a
single \S\ is the delimiter between two items of a same line, while
a double \S\S\ indicate the end of a line. Typing the double \S\S\ at the end of the last line is
compulsory and nothing should stand between this double \S\S\ and the
\verb+\end{diagram}+ instruction (well, there is a single exception to this rule,
explained in section~6). Do not forget a blank space to indicate an empty item,
since two consecutive \S\S\ would be interpreted as an {\em end of line} symbol; of
course several blank spaces are always equivalent to a single one.
So diagram~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}
which has the precise shape of the diagram conceived in figure~2, is produced by
the following commands:
\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%
There is a second, completely analogous environment for producing
diagrams; it has the form
\begingroup%
\catcode`\¤=\active\def¤{{\S}}%
\begin{verbatim}
\begin{floatingdiagram}
...¤...¤...¤¤
...¤...¤...¤...¤¤
...¤...¤...¤...¤¤
\end{floatingdiagram}
\end{verbatim}%
\endgroup%
\noindent As the name indicates, the diagram is then introduced as
a floating body and will automatically receive a numbered label
(cf.~diagrams~1~to~3). The default is to number successively the
diagrams through all the document. You can prefer
a number 3.12 for, let us say, the twelfth diagram of chapter~3
(in a style which contains chapters!). This is forced
by the instruction
\begin{verbatim}
\setdiagramcounter{chapter}
\end{verbatim}
where, of course, {\em chapter} can be replaced by any sectioning
level, for example {\em part, section,\ldots} For non-English texts, you
will also want to ``translate'' the word {\em Diagram} in the label: this
is achieved by an instruction like
\begin{verbatim}
\diagramlabel{Diagramme}
\end{verbatim}
given anywhere in the text, but not inside a diagram.
Every diagram, floating or not, can be given a caption. This is done
by the instruction
\begin{verbatim}
\diagramcaption{...}
\end{verbatim}
which can be introduced anywhere in the diagram, but before the last two
\S\S. In the case of a floating diagram, this caption completes the automatic
label, as in diagram~4.
\section{Changing the sizes}
The step of the pattern
underlying a diagram is 40~units, where the default value of the unit is 1pt.
This default value can be ``scaled'' at any time in the document by giving an
instruction like
\begin{verbatim}
\setdefaultscale{75}
\end{verbatim}
(scaling factor of 75\%); this instruction applies to all subsequent diagrams
and must be given outside a diagram environment.
If you want to apply a scaling factor to just one specific diagram, give the
scaling factor as an optional argument of the corresponding environment; thus
type
\begin{verbatim}
\begin{diagram}[125]
........
\end{diagram}
\end{verbatim}
for an enlargement of 125\%, and correspondingly for floating diagrams. The
scaling factor given for a specific diagram overrides the {\em defaultscale}
value just for this specific diagram. For example, diagram~1 is not scaled and
diagram~2 is the same diagram, scaled at 75\%. Observe the precise
effect of the scaling option: this is by no way a brute homothetic process.
\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}
To motivate the next features, consider the conception of a
3-dimensional diagram, as in figure~4. Compare first the subpattern of bullets
with that of 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{Conceiving a 3-dimensional diagram}
\end{figure}
In this case, not only you must
``cross'' different arrows at a same point of the pattern,
but you must also consider arrows which cross several points
of the pattern before reaching the objects they connect. In fact, the {\em
Diagram macros} assume that an arrow attached at some point of the
pattern connects the two adjacent points of the pattern, in the direction of the
arrow. When this is not the case, it is left on you to determine the length of
the corresponding arrow.
To impose a specific length to a diagram arrow, just give the corresponding extent as
an optional argument\footnote{This argument should be an actual positive
integer; anything else, including the value of a counter, could put \TeX\ in
deep trouble. The formula arrows (section~2) do not admit this optional
argument.}:the extent of vertical and horizontal arrows is their length; the extent
of other arrows is the length of their horizontal projection (see \LaTeX\ manual,
{\em Picture environment}, for further explanations). Thus \verb+\Near[60]f+ draws a
north-east arrow of horizontal extent 60 units with upper name $f$. Here are
the basic default extents of diagram arrows: 50 in the directions n, s, e, w;
59 in the directions ne, nw, se, sw; 133 in the directions ene, ese, wnw,
wsw; 67 in the directions nne, sse, nnw, ssw; 211 in the directions
eene, eese, wwnw, wwsw; 71 in the directions nnne, ssse, nnnw,
sssw; 215 in the direction neene, seese, nwwnw, swwsw; 143 in the
directions nenne, sesse, nwnnw, swssw. In most circumstances, you will obtain
the required extent by augmenting the basic default extent by 40 for
each additional point of the formal pattern crossed by the arrow.
As far as ``crossing arrows'' is concerned, the command
\begin{verbatim}
\cross{item 1}{item 2}
\end{verbatim}
allows you to introduce at the same time {\em item~1} and {\em
item~2} at the same point of the pattern; those two items can be
indifferently vertices or arrows. Diagram~3,
conceived in figure~4, must thus be typed as
\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}
Finally you can change the thickness of a diagram arrow by typing first the command
\verb+\bold+; thus \verb+\bold\nar+ produces a bold north arrow. This
\verb+\bold+ option will be cancelled by the next \S\ sign; you can cancel its
effects earlier (for example during a \verb+\cross+ command) by the
instruction \verb+\unbold+. See figure~3 for examples of bold arrows.
\section{Curved arrows}
The {\em Diagram macros} provide also eight curved arrows which can be used
for connecting two rather distant points lying on a same edge of a diagram;
the code for curved arrows is {\em curvar}.
These arrows are presented in figure~5, scaled at 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{The eight curved arrows}
\end{figure}
together with the
corresponding direction codes. The first
letter of the direction code indicates the position of the arrow with respect to the
diagram; the second letter indicates the global direction of the arrow. So
\verb+\wscurvar+ draws a curved arrow, on the west side of the diagram, oriented
to the south. As for the other arrows, a first (or last) upper case letter allows you
to name the curved arrows.
Curved arrows are a typical example of items which are generally introduced
via the \verb+\cross+ command of section~4, at a formal point of the pattern
which they share with a vertex or another arrow. In figure~5, the bullets
indicate the formal ``center'' of the curved arrows; i.e.~the point of the
pattern where to attach them.
The default extent of curved arrows is 160 units, yielding the situation of
figure~5. As for other diagram arrows, an arbitary extent can be imposed as a
first optional argument (again an actual positive integer!).
Curved arrows are also part of the {\em MicroDiagram} and {\em Minidiagram}
packages.
\section{Spacing adjustments}
The {\em Diagram macros} determine the dimensions of a diagram by counting the
number of rows and columns in the formal pattern. When the actual dimensions
are rather different from those estimated in this way, for example when you
introduce curved arrows along a diagram, a spacing correction can be needed.
This is realized via the command \verb+\spacing(t,l,b)+
which must imperatively be given between the \S\S\ of the last line and the
instruction \verb+\end{diagram}+ (or \verb+\end{floatingdiagram}+). This
command\footnote{Do not
abbreviate that command, this would put \TeX\ in deep trouble.}
adds $t$ points space at the top of the diagram, $l$ points space at the left and
$b$ points space at the bottom. $t$, $l$, $b$ should be positive or negative
integers.
\begingroup%
\catcode`\¤=\active\def¤{{\S}}%
\begin{verbatim}
\begin{diagram}[80]
\diagramcaption{What a nice diagram!}
...¤...¤...¤¤
...¤...¤...¤...¤¤
...¤...¤...¤...¤¤
\spacing(10,-15,10)
\end{diagram}
\end{verbatim}%
\endgroup%
When using the \verb+\cross+ command, it can also happen that an arrow
collides with the name of another arrow. To take care of this and other
unusual situations, commands exist to move elements of a diagram without
disturbing the general construction.
\begin{itemize}
\item \verb+\movename(n,m){f}+ moves the name $f$ of an arrow $n$ points right
and $m$ points up.
\item \verb+\movearrow(n,m){\arrow}+ moves the arrow \verb+\arrow+ (and its
name when there is one) $n$ points right and $m$ points up.
\item \verb+\movevertex(n,m){XXX}+ moves the vertex $XXX$ $n$ points right and
$m$ points up.
\item \verb+\movevertexleft{XXX}+ moves a too long vertex $XXX$
positioned on the left edge of a diagram,
so that the next horizontal arrow keeps maximal length.
\item \verb+\movevertexright{XXX}+ moves a too long vertex $XXX$
positioned on the right edge of a diagram,
so that the previous horizontal arrow keeps a maximal length.
\end{itemize}
For example, diagram~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{Automatic and manual adjustments} ¤¤
\end{floatingdiagram}
has been obtained by just typing
\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{Automatic and manual adjustments}¤¤
\end{floatingdiagram}
\end{verbatim}
\endgroup
The upper square is thus produced automatically by the {\em Diagram macros},
while the lower square has been adjusted by the user. Make your choice.
\vfill
\mbox{}\hfill{\footnotesize Une version fran\c caise de ce mode d'emploi est
\'egalement disponible.}
\end{document}
|