diff options
Diffstat (limited to 'Master/texmf-dist/doc/latex/barr/diaxydoc.tex')
-rw-r--r-- | Master/texmf-dist/doc/latex/barr/diaxydoc.tex | 1342 |
1 files changed, 1342 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/barr/diaxydoc.tex b/Master/texmf-dist/doc/latex/barr/diaxydoc.tex new file mode 100644 index 00000000000..07ea061fb6e --- /dev/null +++ b/Master/texmf-dist/doc/latex/barr/diaxydoc.tex @@ -0,0 +1,1342 @@ + +\documentclass[12pt]{article} + \input diagxy + \xyoption{curve} + \textwidth 6in + \oddsidemargin 0pt + \makeindex +\begin{document} +\def\xypic{\hbox{\rm\Xy-pic}} + +\title{A new diagram package (Version \thedate)} +\author{Michael Barr\\Dept of Math and Stats\\McGill University\\805 +Sherbrooke St. W\\Montreal, QC Canada H3A 2K6\\[5pt] barr@barrs.org} + \date{} + \maketitle + +\makeatletter +\contentsline {section}{\numberline {1}Why another diagram package?}{2} +\contentsline {subsection}{\numberline {1.1}The latest version}{3} +\contentsline {subsection}{\numberline {1.2}Main features}{3} +\contentsline {subsection}{\numberline {1.3}Compatibility}{3} +\contentsline {subsection}{\numberline {1.4}Errant spaces}{4} +\contentsline {subsection}{\numberline {1.5}Font sizes}{4} +\contentsline {subsection}{\numberline {1.6}On \LaTeX \ 2.09 and \LaTeX \ 2e}{5} +\contentsline {subsection}{\numberline {1.7}Acknowledgments}{5} +\contentsline {subsection}{\numberline {1.8}License}{6} +\contentsline {section}{\numberline {2}The basic syntax}{6} +\contentsline {subsection}{\numberline {2.1}A word about parameters}{7} +\contentsline {section}{\numberline {3}Defined diagrams}{8} +\contentsline {section}{\numberline {4}Examples}{10} +\contentsline {subsection}{\numberline {4.1}Complex diagrams}{19} +\contentsline {subsection}{\numberline {4.2}Empty placement and moving labels}{23} +\contentsline {subsection}{\numberline {4.3}Inline macros}{25} +\contentsline {subsubsection}{\numberline {4.3.1}Added:}{26} +\contentsline {subsection}{\numberline {4.4}2-arrows}{26} +\contentsline {subsection}{\numberline {4.5}Mixing \hbox {\rm \unhbox \voidb@x \hbox {\kern -.1em X\kern -.3em\lower .4ex\hbox {Y\kern -.15em}}-pic}\ code}{27} +\contentsline {subsection}{\numberline {4.6}Diagram from TTT}{29} +\makeatother + +\kern 40pt +{\narrower +For the fashion of Minas Tirith was such that it was built on seven levels, +each delved into a hill, and about each was set a wall, and in each wall +was a gate. + +-- J.R.R.\ Tolkien, ``The Return of the King''\footnote{These macros are +at the seventh level of nesting. The first level is the code actually +executed directly by the processor. The second is the microcode, burned +into the chip, that interprets the assembly language instructions into +the ones that are directly executed. Level three is the language, +usually C, but originally Pascal, into which the Web code, the fourth +level, is compiled. The fifth level is \TeX\ itself, which is best seen +as a high level programming language for mathematical text processing. +Level six is the \xypic\ code in which these macros, level seven, are +written.} + +} + + +\kern 5pt + Note: This is the first increase in functionality since the original +general release. The macros \index{\backslash to}\verb.\to. and +\index{\backslash two}\verb.\two. that make inline arrows and pairs of arrows now +accept an option to vary the types of the arrow, for example to get a +pair of adjoints going in opposite directions. A macro that makes three +arrows has been added as well as a macro for a 3 x 3 diagram that can be +expanded into a map between two exact sequences. A new optional +parameter has been added to \index{\backslash to}\verb.\to., +\index{\backslash two}\verb.\two. and \index{\backslash three}\verb.\three. to allow the +user to override the automatic computation of the arrow size. See the +sections on inline arrows, page~\pageref{added} and +page~\pageref{complex} for details. + +\section{Why another diagram package?} + +This started when a user of my old package, diagram, wrote to ask me if +dashed lines were possible. The old package had dashed lines for +horizontal and vertical arrows, but not any other direction. The reason +for this was that \LaTeX\ used rules for horizontal and vertical arrows, +but had its own fonts for other directions. While rules could be made +any size, the smallest lines in other directions were too long for +decent looking dashes. Presumably, Lamport was worried about compile +time and file size if the lines were too short, considerations that have +diminished over the years since. Also arrows could be drawn in only 48 +different directions, which is limiting. My macros were not very well +implemented for slopes like 4 and 1/4, since I never used such lines. + +There was certainly an alternative, \xypic, for those who wanted +something better. But it was hard to learn and I was not entirely happy +with the results. The basic interface used an +\index{\backslash halign}\verb.\halign.. This +meant that no extra space was allotted to an arrow that had a large +label. In addition, the different slots could have different horizontal +size, which could result in a misshapen diagram. I used it in a paper +that had a `W' shaped diagram whose nodes had different widths and the +result was quite obviously misshapen. On the other hand, the graphics +engine underlying \xypic\ is really quite remarkable and it occurred to +me that I could try to redraft diagram as a front end. The result is +the current package. It has been tested mainly with version 3.7, so +there is no guarantee it would work with any earlier version (or, for +that matter, later). A limited amount of testing with version 3.6 +suggests that the only thing that does not work is the 2-arrows; these +come out vanishingly short. + +So despite the desire for logical programming, it still seems that for +some purposes, it is desirable to have a system in which you specify +what goes where and where the arrows are drawn. + +\subsection{The latest version} +The latest version can be downloaded at +\verb,ftp://ftp.math.mcgill.ca/pub/barr/diagxy.zip, or by anonymous ftp +from \verb,ftp.math.mcgill.ca//pub/barr/diagxy.zip,. + + +\subsection{Main features} + +\begin{itemize} + \item A general arrow drawing function +\index{\backslash morphism}\verb.\morphism.. + \item Various common diagram shapes such as squares, triangles, etc. + \item A few special shapes such as cube and $3\times3$ diagrams. + \item Small 2-arrows that can be placed anywhere in a diagram, much +like \LaTeX's +picture + environment. + \item A uniform syntax, while allowing access to all of \xypic's +capabilities + \item Never expires and does not request acknowledgment. +\end{itemize} + +\subsection{Compatibility} +The syntax described below is not compatible with the original diagram +package. Every front end of this sort represents a trade-off between +simplicity and utility. A package that simply upgraded the syntax to +allow more dashed (and dotted) lines would have been just as easy to +implement, but would have made poor use of the wonderful possibilities +of the underlying \xypic\ package. Also there would have been too many +different arrow specifications (they would have had to go at least in +the range $[-9,9]$) for easy memory) and still would not have included +things like inclusion arrows. To those who would have liked a simpler +syntax, I apologize. Those who would want more flexibility, I remind +that the entire \xypic\ package is there for use. + +\subsection{Errant spaces} + There is one point that cannot be made too strongly. {\em Watch for +errant spaces.} Unlike the old diagram package, which was carried out in +math mode so that spaces were ignored, \xypic\ is not in math mode and +spaces will mess up your diagrams. On the other hand, it will not be +necessary to enclose duplicate nodes inside +\index{\backslash phantom}\verb.\phantom., since the +registration between different nodes is perfect. In the old package, +for reasons that I now understand, objects did not always register +properly. This was a flaw built in to the very heart of the package and +is not worth correcting, although it could have been done better in the +first place. If you see an object in double vision, then the almost +certain cause is that a space has gotten in there somewhere. I have +attempted to prevent this by liberal use of +\index{\backslash ignorespaces}\verb.\ignorespaces. in the +definitions, but one cannot always be sure and while testing, I found a +number seemingly innocuous spaces that messed up diagrams. When in +doubt, always terminate a specification with a +\index{%}\verb.%.. See the +examples. + +\subsection{Font sizes} + According to the documentation of \xypic, the declarations +\begin{verbatim} +\xyoption{tips} +\SelectTips{xy}{12} +\end{verbatim} + \index{tips} will cause 12 point tips to be used. This does not appear +to be the case. The only way I can seem to get larger font sizes is to +add \index{\backslash fontscale{x}}\verb.\fontscale{x}., with \index{x}\verb.x. +taking on the values \verb.0,h,1,2,3,4,5., after \xypic\ is loaded. +With \verb.11pt. you will want \verb.h. and with \verb.12pt. you will +want 1. The others are in case you use larger sizes for transparencies +or for later reduction. While on the subject, I might mention that if +you want thicker arrow shafts without enlarging anything else you could +add the declaration +\begin{verbatim} +\font\xydashfont=xydash scaled \magstep1 +\end{verbatim} +or even larger. However, this does not thicken the arrow tips and is +not really recommended. There is probably no way (short of creating +your own fonts) to thicken the tips without also lengthening them. + + +\subsection{On \LaTeX\ 2.09 and \LaTeX\ 2e} + Since I have no other forum to do so, I use this space to indulge in a +personal rant, which you may skip since it has nothing to do with the +package (except periphally, since it explains why I have not made 14, +17, and 20 point style files for \LaTeX\ 2e). Recent distributions of +\TeX\ have omitted latex.tex, the source file for \LaTeX\ 2.09. If you +make a posting on comp.text.tex, admitting to using the older version, +you are certain to get one or more replies admonishing you that \LaTeX\ +2.09 is obsolete and should not be used. There are at least a couple of +good reasons for continuing to use the older version (along with some +reasons for switching, especially if you are using a language other than +English). For one thing, the compatibility mode is useless if you have +used additional fonts, as I have (most importantly, cmssbx, where many +use bbbold, one of the ugliest fonts to see the light of day). In fact, +the most significant change in \LaTeX\ 2e is that it uses the new font +selection system and the compatibility mode makes no attempt to be +compatible with the old one. The second reason for not switching is +that, ``If it ain't broke, don't fix it.'' For many the old \LaTeX\ +worked fine, why change? If you want to use new fonts in \LaTeX\ 2e it +is certainly possible, but the instructions for doing so are embedded +holographically in Chapter 7 of The \LaTeX\ Companion and took me days +to decipher. I am still not convinced that I am doing it right, +although it seems to work. The third---and to me most important---is +that the file latex.tex is extensively documented internally and it is +relatively easy to make whatever changes one wants. I have never +changed the source, but always put the changes in another file. In this +way, I have changed, for example, +\index{\backslash @startsection}\verb.\@startsection. in various ways. +It is clear that Lamport intended that his version of \LaTeX\ be +user-modifiable. It is equally clear that the implementers of the new +version had no interest in that. They didn't go out of their way to +make it hard, but they did nothing to encourage it and the documentation +is entirely on how to use it. + +\subsection{Acknowledgments} + First, I would like to thank Kris Rose for a superb programming job +that made this package possible. The original versions of \xypic\ were +based on matrices, but this version includes code to place an arrow with +two nodes (more precisely, their centers) a user-definable distance +apart and that is exactly what I needed. Second I would like to thank +Ross Moore who answered innumerable questions about the use of the +macros that the documentation did not answer or at least I could not +understand what it said. I thank Donald Arsenau answered several of my +questions about the internals of \TeX\ that I did not understand +clearly and Steve Bloom who found a couple +of typos in the first version of these notes. Finally, I would like to +thank all those, but especially Charles Wells, who gave me opinions on +the best syntax. But I made the final decisions and if you have any +complaints, you can direct them to me. Not that I am likely to change +anything at this date. + +\subsection{License} + The use of this package is unrestricted. It may be freely distributed, +unchanged, for non-commercial or commercial use. If changed, it must be +renamed. Inclusion in a commercial software package is also permitted, +but I would appreciate receiving a free copy for my personal examination +and use. There are no guarantees that this package is good for +anything. I have tested it with LaTeX 2e, LaTeX 2.09 and Plain TeX. +Although I know of no reason it will not work with AMSTeX, I have not +tested it. + + +\section{The basic syntax} + +The basic syntax is built around an operation +\index{\backslash morphism}\verb.\morphism. that is +used as \index{\backslash morphism} + \begin{verbatim} + \morphism(x,y)|p|/{sh}/<dx,dy>[N`N;L] + \end{verbatim} + The last group of parameters is required. They are the source and +target nodes of the arrow and the label. The remaining parameters are +optional and default to commonly used values. Currently, the +\verb.L.\index{label} is set in \index{\backslash scriptstyle}\verb.\scriptstyle. +size, but this can easily be changed by putting +\index{\backslash let\backslash labelstyle=\backslash textstyle} +\verb.\let\labelstyle=\textstyle. in +your file. + + The parameters \verb.x. and \verb.y. give the location of the source +node within a fixed local coordinate system and \verb-x+dx- and +\verb-y+dy- locate the target. To be precise, the first coordinate is +the horizontal center of the node and the second is that of the base +line. These distances are given in terms of \index{\backslash ul}\verb.\ul.'s, +(for unitlength), which is user assignable, but currectly is .01em. The +placement parameter \verb.p. is one of \verb.a,b,l,r,m. that stand for +above, below, left, right, or mid and describe the positioning of the +arrow label on the arrow. If it is given any value other than those +five, it is ignored. We describe below why you might want it ignored. +The label \index{m}\verb.m. stands for a label positioned in the middle +of a split arrow. When used on a non-vertical arrow, \index{a}\verb.a. +positions the label above the arrow and \index{b}\verb.b. positions it +below. On a vertical arrow, the positioning depends on whether the +arrow points up or down. Similarly, when used on a non-horizontal +arrow, \index{l}\verb.l. positions the label to the left and +\index{r}\verb.r. positions it to the right, while on a horizontal arrow +it depends on which way it points. + +The shape parameter \verb.sh. describes the shape of the arrow. An +arrow is thought of as consisting of three parts, the tail, the shaft +and the head. You may specify just the head, in which case the shaft +will be an ordinary line, or all three. However, since the tail can be +(and usually is) empty, in practice you can also describe the shaft and +tail. In addition, it is possible to modify the arrow in various ways. +Although the parameter is shown within braces, the braces can be omitted +unless one of the modifier characters is \verb./., in which case, {\em +the entire parameter} must be put in braces. It is important to note +that it will not work just to put the \verb./. inside the braces, since +this will interfere with the internal parsing of \xypic. The head and +tail shapes are basically one of \index{>}\verb.>., \index{>>}\verb.>>., +\verb.(., \verb.)., \index{>}\verb*+>+, and \index{<}\verb*+<+. Each of +these may also be preceded by \index{^}\verb.^. or \index{_}\verb._. and +others are user definable. For details, see the \xypic\ reference +manual. The first of these is an ordinary head, while the second is for +an epic arrow. The third is not much used, but the superscripted +version makes and inclusion tail, as will be illustrated below. The +reverse ones give reversed arrowheads. The sign \verb*+ + stands for an +obligatory space and it leaves extra space for a tailed (monic) arrow, +which otherwise runs into the source node. Although there are many +possibilities for shafts, including alphanumeric characters, the ones +that mainly interest us are: \index{-}\verb.-., which is an ordinary +shaft, \index{--}\verb.--., which produces a dashed arrow, +\index{=}\verb.=., which gives a double arrow (although with only one +arrowhead), and ., which makes a dotted arrow. Thus \index{>}\verb.>. +or \index{->}\verb.->. will produce an ordinary arrow, +\index{->>}\verb.->>. an epic arrow, \index{ >->}\verb*+ >->+ makes a +monic arrow, and \index{-->>}\verb.-->>. would make a dashed epic arrow. +The descriptions \index{<-}\index{<<-}\verb.<-,<<-,. \index{<-< +}\verb*+<-< +, and \index{<<--}\verb.<<--. give the reversed versions. +Note that \index{<}\verb.<. does not give a reversed arrow, since +\xypic\ interprets that as a reversed head, not a tail. + +If the shape parameter begins with an \index{@}\verb.@., it is +interpreted differently. In that case, it has the form +\index{@{shape}@}\verb.@{shape}@. modifier, where the modifier is as +described in the \xypic\ reference guide. I just mention a couple of +them. The parameter \index{@{->}@<3pt>}\verb.@{->}@<3pt>., for example, +would give an ordinary arrow moved three points in the direction +perpendicular to that of the arrow. If you give +\index{{@{-->}@/^5pt/}}\verb.{@{-->}@/^5pt/}., you will get an epic +arrow that is curved in the direction perpendicular to the direction of +the arrow by five points. It is imperative that a specification such as +\index{@{>}@/5pt/}\verb.@{>}@/5pt/. be enclosed in braces because of the +\index{/}\verb./.s. + +\subsection{A word about parameters} + I have already mentioned the necessity of enclosing certain arrow shape +specifications in braces. Because of the way \TeX\ operates, I have +used a number of different delimiters: \index{(}\verb.(., +\index{)}\verb.)., \index{|}\verb.|., \index{/}\verb./., +\index{<}\verb.<., \index{>}\verb.>., \index{[}\verb.[., +\index{]}\verb.]., \index{`}\verb.`., and \index{;}\verb.;.. Any of +these that appear inside an argument could conceivably cause problems. +They were chosen as the least likely to appear inside mathematics +(except for \index{(,)}\verb.(,). which appear in positions that are +unlikely to cause problems). However, be warned that this is a possible +cause of mysterious error messages. If this happens, enclosing the +offending parameter in braces should cure the problem. The exceptions +come when the braces interfere with \xypic's somewhat arcane parsing +mechanism. One place it imperative to use braces is if you attempt to +use a disk as a tip. Although most tips do not have to be enclosed in +braces, you get a small solid disk tip from \index{{*}}\verb.{*}. and +not from \index{*}\verb.*. (see the note at the bottom of the first +column of page 42 in the reference manual. The first three of +\begin{verbatim} +\morphism(0,300)|a|/-*/<500,0>[A`B;f] +\morphism(0,0)|a|/{-*}/<500,0>[A`B;f] +\morphism(0,0)|a|/{*}/<500,0>[A`B;f] +\morphism(0,0)|a|/-{*}/<500,0>[A`B;f] +\end{verbatim} + give error messages. Only the fourth works: + $$\bfig +\morphism(0,0)|a|/-{*}/<500,0>[A`B;f] + \efig$$ + +In addition to the diagrams, there are macros that are intended to be +used inline to make horizontal arrows, pointing left or right, plain, +monic, epic, or user-definable shapes, and calculating their own length +to fit the label. Finally, there is a macro for making short 2-arrows +that may be placed (actually, \index{\backslash place}\verb.\place.d) anywhere in +a diagram. + + +\section{Defined diagrams} + +Using the basic +\index{\backslash morphism}\verb.\morphism. macro, I have a defined a number of +diagrams: squares (really rectangles) and variously oriented triangles +and a few compound diagrams. The basic shapes are exactly the same as +in the old diagram package, but the options are done entirely +differently. Here is the syntax of the +\index{\backslash square}\verb.\square. macro: + \begin{verbatim} + \square(x,y)|pppp|/{sh}`{sh}`{sh}`{sh}/<dx,dy>[N`N`N`N;L`L`L`L] + \end{verbatim} + Each of the first four sets of parameters is optional and any subset of +them can be omitted. (Note that only the sets can be omitted, once you +give \index{dx}\verb.dx., you also have to give \index{dy}\verb.dy. and +so on.) The first set gives the horizontal and vertical position (in a +local coordinate system) of the lower left corner of the square, the +next four give the label placements using the same five characters +previously described. The next four give the shapes of the arrows using +the same syntax as discussed above. The last group is horizontal and +vertical size of the square. More precisely, the \index{x}\verb.x. +coordinate is that of the midpoint of the node, while the +\index{y}\verb.y. coordinate is that of the baseline of the node. This +is entirely based on \xypic. + +In the case of other shapes, discussed below, the positioning parameter +may be different. The \index{x}\verb.x. coordinate is the midpoint of +the leftmost node and the \index{y}\verb.y. coordinate is the baseline +of the lowest node. In the case of the +\index{\backslash qtriangle}\verb.\qtriangle., +\index{\backslash Vtriangle}\verb.\Vtriangle., and +\index{\backslash Ctriangle}\verb.\Ctriangle. described below, these are different +nodes. What this positioning means is that if you specify the +coordinates and sizes correctly the shapes will automatically fit +together. The last example on Page~\pageref{TTTdiag} illustrates this. + +Here is a listing of the shapes, together with the groups of parameters. +In all cases, the first four groups are optional and any subset of them +will work. However, they must come in the order given. Note that the +names of the triangles are related to the shape as the shape that best +approximates the shape of the letter. For example, a +\index{\backslash ptriangle}\verb.\ptriangle. is a right triangle that has its +hypotenuse going from upper right to lower left. Triangles with lower +case names have their legs horizontal and vertical and the dimension +parameters are the lengths of the legs. Those with capitalized names +have their hypotenuse horizontal or vertical. In those cases, one of +\index{dx}\verb.dx. or \index{dy}\verb.dy. is the length of a leg and +the other is {\em half} the length of the hypotenuse. In all cases, the +order of the nodes and of the arrows is linguistic, first moving from +left to right and then down. The defaults are reasonable, but with +triangles, there is not always a natural direction for arrows. I always +made mistakes in the order with my macros and this is certainly a +defect. But the order is the same. In every case the braces around the +shape specification can be removed unless it includes the following +delimiter (that is, \index{`}\verb.`. or \index{/}\verb./., as the case +may be.) + \begin{verbatim} +\square(x,y)|pppp|/{sh}`{sh}`{sh}`{sh}/<dx,dy>% + [N`N`N`N;L`L`L`L] +\ptriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L] +\qtriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L] +\dtriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L] +\btriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L] +\Atriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L] +\Vtriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L] +\Ctriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L] +\Dtriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L] +\Atrianglepair(x,y)|ppppp|/{sh}`{sh}`{sh}`{sh}`{sh}/% +<dx,dy>[N`N`N`N;L`L`L`L`L] +\Vtrianglepair(x,y)|ppppp|/{sh}`{sh}`{sh}`{sh}`{sh}/% +<dx,dy>[N`N`N`N;L`L`L`L`L] +\Ctrianglepair(x,y)|ppppp|/{sh}`{sh}`{sh}`{sh}`{sh}/% +<dx,dy>[N`N`N`N;L`L`L`L`L] +\Dtrianglepair(x,y)|ppppp|/{sh}`{sh}`{sh}`{sh}`{sh}/% +<dx,dy>[N`N`N`N;L`L`L`L`L] +\end{verbatim} + \index{\backslash square} \index{\backslash ptriangle} \index{\backslash qtriangle} \index{\backslash dtriangle} +\index{\backslash btriangle} \index{\backslash Atriangle} \index{\backslash Vtriangle} +\index{\backslash Ctriangle} \index{\backslash Dtriangle} \index{\backslash Atrianglepair} +\index{\backslash Vtrianglepair} \index{\backslash Ctrianglepair} \index{\backslash Dtrianglepair} +Note that the +\verb.%. signs are required if you break the +macro at such points. See also the discussion of errant spaces above. + +To make a diagram, you have to enclose it inside \index{\backslash xy ... +\backslash endxy}.\verb,\xy ... \endxy,. You will usually want it +displayed, +for which the simplest way is to enclose it in \index{$$\xy ... +\endxy$$}\verb,$$\xy...\endxy$$,. For old times' sake, I have also let +\index{\backslash bfig}\verb.\bfig. and \index{\backslash efig}\verb.\efig. be synonyms for +\index{\backslash xy}\verb.\xy. and \index{\backslash endxy}\verb.\endxy., resp. (In case +you wonder, these go all the way back to a main frame formatter running +at McGill when Charles Wells and I were first writing TTT, where +\verb,.BFIG, and \verb,.EFIG, were used to make display---at least as +far as that primitive formatter was capable of.) + +\section{Examples} + +Many people---including me---learn mainly by example and +I will give a number of examples here. The formal +syntax that is not given here can be learned in the \xypic\ reference +manual. More samples from an actual paper can be found in +\verb,ftp.math.mcgill.ca/pub/barr/derfun.tex,. If you want to compile +that paper, you will need \verb,tac.cls,, available from \verb,tac.ca,. +We begin with \index{\backslash morphism} +\begin{verbatim} + $$\bfig + \morphism[A`B;f] + \morphism(0,300)[A`B;f] + \morphism(0,600)|m|[A`B;f] + \morphism(0,900)/<-/[A`B;f] + \morphism(900,500)<0,-500>[A`B;f] + \morphism(1200,0)<0,500>[A`B;f] + \efig$$ +\end{verbatim} +which gives the diagram + $$\bfig + \morphism[A`B;f] + \morphism(0,300)[A`B;f] + \morphism(0,600)|m|[A`B;f] + \morphism(0,900)/<-/[A`B;f] + \morphism(900,500)<0,-500>[A`B;f] + \morphism(1200,0)<0,500>[A`B;f] + \efig$$ +\begin{verbatim} + $$\bfig +\square[A`B`C`D;e`f`g`m] + \efig$$ +\end{verbatim} + produces + $$\bfig +\square[A`B`C`D;e`f`g`m] + \efig$$ + This can be modified, for example +\begin{verbatim} + $$\bfig +\square/>>`>`>` >->/[A`B`C`D;e`f`g`m] + \efig$$ +\end{verbatim} + produces + $$\bfig +\square/>>`>`>` >->/[A`B`C`D;e`f`g`m] + \efig$$ + This can be put together with a morphism as follows: +\begin{verbatim} + $$\bfig +\square/>>`>`>` >->/[A`B`C`D;e`f`g`m] + \morphism(500,500)|m|/.>/<-500,-500>[B`C;h] + \efig$$ +\end{verbatim} + \index{\backslash square} + which makes a familiar diagram: + $$\bfig +\square/>>`>`>` >->/[A`B`C`D;e`f`g`m] + \morphism(500,500)|m|/.>/<-500,-500>[B`C;h] + \efig$$ + The same diagram could have been made by +\begin{verbatim} + $$\bfig + \ptriangle|alm|/>>`>`.>/[A`B`C;e`f`h] + \dtriangle/`>` >->/[B`C`D;`g`m] + \efig$$ +\end{verbatim} +\index{\backslash ptriangle} \index{\backslash dtriangle} + +There are four macros for making pairs of triangles put together: + $$\bfig + \Vtrianglepair[A`B`C`D;f`g`h`k`l] + \efig$$ + comes from +\begin{verbatim} + $$\bfig + \Vtrianglepair[A`B`C`D;f`g`h`k`l] + \efig$$ +\end{verbatim} + \index{\backslash Vtrianglepair} + \index{\backslash Atrianglepair} + \index{\backslash Ctrianglepair} + \index{\backslash Dtrianglepair} + + The other three are called \verb.\Atrianglepair., +\verb.\Ctrianglepair., and \verb.\Dtrianglepair.. + + You can fit two squares together, horizontally: +\begin{verbatim} + $$\bfig +\square|almb|[A`B`C`D;f`g`h`k] +\square(500,0)/>``>`>/[B`E`D`F;l``m`n] + \efig$$ +\end{verbatim} + $$\bfig +\square|almb|[A`B`C`D;f`g`h`k] +\square(500,0)/>``>`>/[B`E`D`F;l``m`n] + \efig$$ + or vertically +\begin{verbatim} + $$\bfig +\square(0,500)|alrm|[A`B`C`D;f`g`h`k] +\square/`>`>`>/[C`D`E`F;`l`m`n] + \efig$$ +\end{verbatim} + $$\bfig +\square(0,500)|alrm|[A`B`C`D;f`g`h`k] +\square/`>`>`>/[C`D`E`F;`l`m`n] + \efig$$ +or a square and a triangle +\begin{verbatim} + $$\bfig +\Ctriangle/<-`>`>/<400,400>[\hbox{\rm rec}(A,B)`B`X;r_0(A,B)`f`t_0] + \square(400,0)/<-``>`<-/<1000,800>[\hbox{\rm rec}(A,B)`A\times\hbox{\rm + rec}(A,B)`X`A\times X;r(A,B)``\hbox{\rm id}_A\times f`t] + \efig$$ +\end{verbatim} + gives the diagram + $$\bfig +\Ctriangle/<-`>`>/<400,400>[\hbox{\rm rec}(A,B)`B`X;r_0(A,B)`f`t_0] + \square(400,0)/<-``>`<-/<1000,800>[\hbox{\rm rec}(A,B)`A\times\hbox{\rm + rec}(A,B)`X`A\times X;r(A,B)``\hbox{\rm id}_A\times f`t] + \efig$$ + This diagram is on page 361 of the third edition of Category Theory for +Computing Science to describe recursion. + Here is an example using the procedure for sliding an arrow sideways. +This one could even be used in a text, + \index{sliding arrows} +$\xy \morphism(0,0)|a|/@{>}@<3pt>/<400,0>[A`B;d] +\morphism(0,0)|b|/@{>}@<-3pt>/<400,0>[A`B;e]\endxy$ + which was made using +\begin{verbatim} +$\xy \morphism(0,0)|a|/@{>}@<3pt>/<400,0>[A`B;d] +\morphism(0,0)|b|/@{>}@<-3pt>/<400,0>[A`B;e]\endxy$ +\end{verbatim} + Indidentally, if you don't put this in math mode, the diagram will come +out too low, for reasons I do not understand but must be buried within +the \xypic\ code. +Later we will introduce a number of inline procedures. + +Something a bit different that illustrates the use of another shaft + +\index{=}\verb.=. that gives a 2-arrow, as well as curved arrows: +\begin{verbatim} + $$\bfig +\morphism(0,0)|a|/{@{>}@/^1em/}/<500,0>[A`B;f] +\morphism(0,0)|b|/{@{>}@/_1em/}/<500,0>[A`B;g] +\morphism(250,50)|a|/=>/<0,-100>[``] + \efig$$ +\end{verbatim} + $$\bfig +\morphism(0,0)|a|/{@{>}@/^1em/}/<500,0>[A`B;f] +\morphism(0,0)|b|/{@{>}@/_1em/}/<500,0>[A`B;g] +\morphism(250,50)|a|/=>/<0,-100>[`;] + \efig$$ + In order to use curved arrows, you must insert +\index{\backslash xyoption{curve}}\verb.\xyoption{curve}. +into your file. Here are two ways of doing three arrows between two +objects, depending on what you like: +\begin{verbatim} + $$\bfig + \morphism(0,0)|a|/@{>}@<5pt>/<500,0>[A`B;f] + \morphism(0,0)|m|/@{>}/<500,0>[A`B;g] + \morphism(0,0)|b|/@{>}@<-5pt>/<500,0>[A`B;h] + \efig$$ +\end{verbatim} + which gives + $$\bfig + \morphism(0,0)|a|/@{>}@<5pt>/<500,0>[A`B;f] + \morphism(0,0)|m|/@{>}/<500,0>[A`B;g] + \morphism(0,0)|b|/@{>}@<-5pt>/<500,0>[A`B;h] + \efig$$ +and +\begin{verbatim} + $$\bfig + \morphism(0,0)|a|/{@{>}@/^5pt/}/<500,0>[A`B;f] + \morphism(0,0)|m|/@{>}/<500,0>[A`B;g] + \morphism(0,0)|b|/{@{>}@/^-5pt/}/<500,0>[A`B;h] + \efig$$ +\end{verbatim} + which gives + $$\bfig + \morphism(0,0)|a|/{@{>}@/^5pt/}/<500,0>[A`B;f] + \morphism(0,0)|m|/@{>}/<500,0>[A`B;g] + \morphism(0,0)|b|/{@{>}@/^-5pt/}/<500,0>[A`B;h] + \efig$$ + Either of these could also be used inline. + + There is a macro +\index{\backslash place}\verb.\place. +that places that object anywhere. I have changed the name from +\verb.\put. in order to avoid clashing with the \LaTeX\ picture mode's +\index{\backslash put}\verb.\put.. +Here is an example that uses a construction that is undocumented here, +but uses a documented \Xy\ construction: +\begin{verbatim} +\newbox\anglebox +\setbox\anglebox=\hbox{\xy \POS(75,0)\ar@{-} (0,0) \ar@{-} (75,75)\endxy} + \def\angle{\copy\anglebox} + $$\bfig + \square[A`B`C`D;f`g`h`k] + \place(100,400)[\angle] + \efig$$ +\end{verbatim} +\newbox\anglebox +\setbox\anglebox=\hbox{\xy \POS(75,0)\ar@{-} (0,0) \ar@{-} (75,75)\endxy} + \def\angle{\copy\anglebox} + $$\bfig + \square[A`B`C`D;f`g`h`k] + \place(100,400)[\angle] + \efig$$ + Notice that you get a headless arrow by using +\index{\backslash ar@{-}}\verb.\ar@{-}.. + +Here is a special code installed at the request of Jonathon Funk: +\begin{verbatim} + $$\bfig +\pullback|brrb|<800,800>[P`X`Y`Z;t`u`v`w]% +|amb|/>`-->`>/<500,500>[A;f`g`h] + \efig$$ +\end{verbatim} + \index{\backslash pullback} + $$\bfig +\pullback|brrb|<800,800>[P`X`Y`Z;t`u`v`w]% +|amb|/>`-->`>/<500,500>[A;f`g`h] + \efig$$ +The full syntax for this is +\begin{verbatim} +\pullback(x,y)|pppp|/{sh}`{sh}`{sh}`{sh}/<dx`dy>[N`N`N`N;L`L`L]% + |ppp|/{sh}`{sh}`{sh}/<dx,dy>[N;L`L`L] +\end{verbatim} + Of these only the nodes placed inside brackets are obligatory. The +first sets of parameters are exactly as for +\index{\backslash square}\verb.\square. and the +remaining parameters are for the nodes and labels of the outer arrows. +There is no positioning parameters for them; rather you set the +horizontal and vertical separations of the outer node from the square. + +Here are some more special constructions. In general, if you are doing +a square, you should use +\index{\backslash Square}\verb.\Square. instead of +\index{\backslash square}\verb.\square. +because if figures its own width. The syntax is almost the same, except +that +\index{dx}\verb.dx. is omitted. For example, +\begin{verbatim} + $$\bfig + \Square/^{ (}->`>`>`^{ (}->/<350>[{\rm Hom}(A,2^B)`{\rm Sub}(A\times B)` + {\rm Hom}(A',2^{B'})`{\rm Sub}(A'\times B');\alpha(A,B)```\alpha(A',B')] + \efig$$ +\end{verbatim} + will produce the square + $$\bfig + \Square/^{ (}->`>`>`^{ (}->/<350>[{\rm Hom}(A,2^B)`{\rm Sub}(A\times B)` + {\rm Hom}(A',2^{B'})`{\rm Sub}(A'\times B');\alpha(A,B)```\alpha(A',B')] + \efig$$ + There are a couple of points to note here. Note the use of the +argument +\index{^{ (}->}\verb.^{ (}->. to get the inclusion arrow. The +complication is +created by the necessity of adding a bit of extra space before the hook. +You get pretty much the same effect by putting a bit of extra space +after the node: +\begin{verbatim} + $$\bfig + \Square/^(->`>`>`^(->/<350>[{\rm Hom}(A,2^B)\,`{\rm Sub}(A\times B)` + {\rm Hom}(A',2^{B'})\,`{\rm Sub}(A'\times B');\alpha(A,B)```\alpha(A',B')] + \efig$$ +\end{verbatim} + The full syntax is +\begin{verbatim} + \Square(x,y)|pppp|/{sh}`{sh}`{sh}`{sh}/<dy>[N`N`N`N;L`L`L`L] +\end{verbatim} + +There are also macros for placing two +\index{\backslash Square}\verb.\Square.s together +horizontally or vertically. The first is +\index{\backslash hSquares}\verb.\hSquares. with the +syntax +\begin{verbatim} +\hSquares(x,y)|ppppppp|/{sh}`{sh}`{sh}`{sh}`{sh}`{sh}`{sh}/% +<dy>[N`N`N`N`N`N;L`L`L`L`L`L`L] +\end{verbatim} +The second is +\index{\backslash vSquares}\verb.\vSquares. with a similar syntex except that there +are two +\index{dy}\verb.dy. parameters, one for each square: +\begin{verbatim} +\hSquares(x,y)|ppppppp|/{sh}`{sh}`{sh}`{sh}`{sh}`{sh}`{sh}/% +<dy,dy>[N`N`N`N`N`N;L`L`L`L`L`L`L] +\end{verbatim} + Similarly, there are four macros for making pairs of triangles put +together. For example, + $$\bfig + \Vtrianglepair[A`B`C`D;f`g`h`k`l] + \efig$$ + comes from +\begin{verbatim} + $$\bfig + \Vtrianglepair[A`B`C`D;f`g`h`k`l] + \efig$$ +\end{verbatim} + +There is a macro for making cubes\index{\backslash cube}. The syntax is +\begin{verbatim} + \cube(x,y)|pppp|/{sh}`{sh}`{sh}`{sh}/<dx,dy>[N`N`N`N;L`L`L`L]% + (x,y)|pppp|/{sh}`{sh}`{sh}`{sh}/<dx,dy>[N`N`N`N;L`L`L`L]% + |pppp|/{sh}`{sh}`{sh}`{sh}/[L`L`L`L] +\end{verbatim} + The first line of parameters is for the outer square and the second for +the inner square, while the remaining parameters are for the arrows +between the squares. Only the parameters in square brackets are +required; there are defaults for the others. Here is an example: +\begin{verbatim} + $$\bfig +\cube(0,0)|arlb|/ >->` >->`>`>/<1500,1500>[A`B`C`D;f`g`h`k]% +(300,300)|arlb|/>`>`>`>/<400,400>[A'`B'`C'`D';f'`g'`h'`k']% + |mmmm|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta] + \efig$$ +\end{verbatim} + gives the somewhat misshapen diagram + $$\bfig +\cube(0,0)|arlb|/ >->` >->`>`>/<1500,1500>[A`B`C`D;f`g`h`k]% +(300,300)|arlb|/>`>`>`>/<400,400>[A'`B'`C'`D';f'`g'`h'`k']% + |mmmm|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta] + \efig$$ + because the parameters were oddly chosen. The defaults center the +squares. I discovered accidently, while debugging the cube that what I +thought was an out-of-range choice of parameters would produce an offset +cube: +\begin{verbatim} + $$\bfig +\cube|arlb|/ >->` >->`>`>/<1000,1000>[A`B`C`D;f`g`h`k]% +(400,400)|arlb|/>`>`>`>/<900,900>[A'`B'`C'`D';f'`g'`h'`k']% + |rrrr|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta] + \efig$$ +\end{verbatim} + gives + $$\bfig +\cube|arlb|/ >->` >->`>`>/<1000,1000>[A`B`C`D;f`g`h`k]% +(400,400)|arlb|/>`>`>`>/<900,900>[A'`B'`C'`D';f'`g'`h'`k']% + |r`r`r`r|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta] + \efig$$ + + +\subsection{Complex diagrams}\label{complex} +In homological algebra one often has a $3\times3$ diagram, with or +without 0's on the margins. There is a macro to do that: + \index{3 by 3}\index{\backslash iiixiii} +\begin{verbatim} + $$\bfig +\iiixiii(0,0)|aammbblmrlmr|/>`>`>`>`>`>`>`>`>`>`>`>/<500,500>{'5436}% + <400,400>[A'`B'`C'`A`B`C`A''`B''`C'';f'`g'`f`g`f''`g''`u`v`w`u'`v'`w'] + \efig$$ +\end{verbatim} + that gives + $$\bfig +\iiixiii(0,0)|aammbblmrlmr|/>`>`>`>`>`>`>`>`>`>`>`>/<500,500>{'5436}% + <400,400>[A'`B'`C'`A`B`C`A''`B''`C'';f'`g'`f`g`f''`g''`u`v`w`u'`v'`w'] + \efig$$ + Here is the explanation. The arrow parameters are not given in the +usual order, but rather first all the horizontal arrows and then all the +vertical ones, each in their usual order. The nodes are given in the +usual order. The fifth parameter is the octal number +\verb.`5436. (In +\TeX, the +\verb.'. introduces octal numbers and +\verb.". introduces +hexadecimal numbers) which corresponds to the binary number +101,100,011,110 that describes the distribution of the 0's around the +margins. The same results would have been obtained if the number had +been the hexadecimal number +\verb."B1E. or the decimal number + +\verb.2846.. The sixth parameter gives the horizontal and vertical +offset of the 0's, which you often want smaller than the others. You +must not give the sixth parameter unless you have given a value (which +could be 0) to the fifth or an error condition will result. Note that +the positioning parameters ignore the 0's so that it is the lower left +node that appears at the position +\verb.(x,y).. As usual, there are +defaults. + \begin{verbatim} + $$\bfig +\iiixiii[A'`B'`C'`A`B`C`A''`B''`C'';f'`g'`f`g`f''`g''`u`v`w`u'`v'`w'] + \efig$$ + $$\bfig +\iiixiii% + {'5436}[A'`B'`C'`A`B`C`A''`B''`C'';f'`g'`f`g`f''`g''`u`v`w`u'`v'`w'] + \efig$$ + $$\bfig +\iiixiii{'5436}<250,450>[A'`B'`C'`A`B`C`A''`B''`C'';% +f'`g'`f`g`f''`g''`u`v`w`u'`v'`w'] + \efig$$ +\end{verbatim} + $$\bfig +\iiixiii[A'`B'`C'`A`B`C`A''`B''`C'';f'`g'`f`g`f''`g''`u`v`w`u'`v'`w'] + \efig$$ + $$\bfig +\iiixiii% + {'5436}[A'`B'`C'`A`B`C`A''`B''`C'';f'`g'`f`g`f''`g''`u`v`w`u'`v'`w'] + \efig$$ + $$\bfig +\iiixiii{'5436}<250,450>[A'`B'`C'`A`B`C`A''`B''`C'';% +f'`g'`f`g`f''`g''`u`v`w`u'`v'`w'] + \efig$$ + +A similar macro\index{3 by 2}% +\index{\backslash iiixii}\verb.\iiixii. has been added for a map between exact +sequences, with parameters similar to the above. An actual example is +\begin{verbatim} + $$\bfig + \iiixii|aaaalmr|<1000,800>[H`G`F`H\oplus H_0`G\oplus H_0\oplus F_0` +F\oplus F_0; f`g`\pmatrix{f&0\cr0&1\cr0&0}`\pmatrix{g&0&0\cr0&0&1}` + \pmatrix{1\cr0}`\pmatrix{1\cr0\cr0}`\pmatrix{1\cr0}] +\efig$$ +\end{verbatim} + which gives + $$\bfig + \iiixii|aaaalmr|<1000,800>[H`G`F`H\oplus H_0`G\oplus H_0\oplus F_0` +F\oplus F_0; f`g`\pmatrix{f&0\cr0&1\cr0&0}`\pmatrix{g&0&0\cr0&0&1}` + \pmatrix{1\cr0}`\pmatrix{1\cr0\cr0}`\pmatrix{1\cr0}] +\efig$$ + The general syntax is +\begin{verbatim} + \iiixii(x,y)|ppppppp|/1`2`3`4`5`6`7/<dx,dy>{n}<dx'>[...] +\end{verbatim} + with the usual meaning. The number n is a number between 0 and 15 +(default 15) that specifies whether and where 0's appear (think binary, +with the high bit at the upper left) and dx' specifies the separation of +the zeroes. You get two squares side by side if both n and dx' are 0. + +\subsection{Empty placement and moving labels} + The label placements within \verb.|p|. is valid only for +\verb.x=a,b,r,l,m.. If you use any other value (or leave it empty) the +label entry is ignored, but you can use any valid \xypic\ label, as +described in Figure 13 of the reference manual. One place you might +want to use this is for the placement of the labels along an arrow. In +\xypic\ the default placement of the label is midway between the +midpoints of the nodes. If the two nodes are of widely different sizes, +this can result in strange placements; therefore I always place them +midway along the arrow. However, as the following illustrates, this can +be changed. + \begin{verbatim} + $$\bfig +\morphism(0,900)||/@{->}^<>(0.7){f}/<800,0>[A^B\times B^C\times C`C;] +\morphism(0,600)||/@{->}^<(0.7){f}/<800,0>[A^B\times B^C\times C`C;] +\morphism(0,300)||/@{->}^>(0.7){f}/<800,0>[A^B\times B^C\times C`C;] +\morphism(0,0)||/@{->}^(0.7){f}/<800,0>[A^B\times B^C\times C`C;] + \efig$$ +\end{verbatim} + which produces + $$\bfig +\morphism(0,900)||/@{->}^<>(0.7){f}/<800,0>[A^B\times B^C\times C`C;] +\morphism(0,600)||/@{->}^<(0.7){f}/<800,0>[A^B\times B^C\times C`C;] +\morphism(0,300)||/@{->}^>(0.7){f}/<800,0>[A^B\times B^C\times C`C;] +\morphism(0,0)||/@{->}^(0.7){f}/<800,0>[A^B\times B^C\times C`C;] + \efig$$ + Here is the explanation. The label placement argument is empty (it +cannot be omitted) and the arrow entry is empty. However, placing +\verb.^(0.7){f}. inside the arrow shape places the label $f$ 7/10 of the +way between the nodes. Unmodified, this places it 7/10 of the way +between the centers of the nodes. This may be modified by +\index{<}\verb.<., which moves the first (here the left) reference point +to the beginning of the arrow, \index{>}\verb.>. which moves the second +reference point to the end of the arrow, or by both, which moves both +reference points. In most cases, you will want both. Incidentally, +\index{-}\verb.-. is a synonym for the sequence +\index{<>(}5).\verb.<>(.5). and that is the default placement in my +package. + +Here are some more examples that illustrates the special sequence +\index{\backslash hole}\verb.\hole. used in conjunction with \index{|}\verb.|. +that implements \index{m}\verb.m. as well as the fact that these things +can be stacked. For more details, I must refer you to the \xypic\ +reference manual. + \begin{verbatim} + $$\bfig +\morphism(0,600)||/@{->}|-\hole/<800,0>[A^B\times B^C\times C`C;] +\morphism(0,300)||/@{->}|-\hole^<>(.7)f/<800,0>[A^B\times B^C\times C`C;] +\morphism(0,0)||/@{->}|-\hole^<>(.7)f_<>(.3)g/<800,0>[A^B\times +B^C\times C`C;] + \efig$$ +\end{verbatim} + produces + $$\bfig +\morphism(0,600)||/@{->}|-\hole/<800,0>[A^B\times B^C\times C`C;] +\morphism(0,300)||/@{->}|-\hole^<>(.7)f/<800,0>[A^B\times B^C\times C`C;] +\morphism(0,0)||/@{->}|-\hole^<>(.7)f_<>(.3)g/<800,0>[A^B\times +B^C\times C`C;] + \efig$$ + +Here is another version of the cube we looked at above, using these +special placements and\index{\backslash cube} +\index{\backslash hole}\verb.\hole.'s to break some lines and make it +neater. +\begin{verbatim} + $$\bfig +\cube|arlb|/@{ >->}^<>(.6){f}` >->`@{>}_<>(.4){h}`>/% +<1000,1000>[A`B`C`D;`g``k]% +(400,400)|axxb|/>`@{>}|!{(300,1000);(500,1000)}\hole^<>(.6){g'}`>`@{>}% +|!{(1000,500);(1000,300)}\hole_<>(.4){k'}/<900,900>[A'`B'`C'`D';f'``h'`]% + |rrrr|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta] + \efig$$ +\end{verbatim} + $$\bfig +\cube|arlb|/@{ >->}^<>(.6){f}` >->`@{>}_<>(.4){h}`>/% +<1000,1000>[A`B`C`D;`g``k]% +(400,400)|axxb|/>`@{>}|!{(300,1000);(500,1000)}\hole^<>(.6){g'}`>`@{>}% +|!{(1000,500);(1000,300)}\hole_<>(.4){k'}/<900,900>[A'`B'`C'`D';f'``h'`]% + |rrrr|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta] + \efig$$ + This one is probably worth saving as a template. Later I will explain +the meaning of the strings \verb.!{(300,1000);(500,1000)}\hole. and + \verb.!{(1000,500);(1000,300)}\hole. along with a caveat on their use. +If the nodes are unusually large, the cube may be magnified using +\index{\backslash scalefactor}\verb.\scalefactor. . + +\subsection{Inline macros} + Here we illustrate a few of the macros for inline---or +displayed---equations the package contains. In each case, the macro may +have a superscript or subscript or both (in which case the superscript +must come first) and the arrow(s) grow long enough to hold the super- or +subscript. If you type\par\noindent +\verb.$A\to B\to^f C\to_g D\to^h_{{\rm Hom}(X,Y)} E$., you get + $A\to B\to^f C\to_g D\to^h_{{\rm Hom}(X,Y)} E$. Similarly, the macro +\index{\backslash toleft}\verb.\toleft. reverses the arrows. The remaining macros +of this sort are \index{\backslash mon}\verb.\mon. which gives a monic arrow, +\index{\backslash epi}\verb.\epi. which gives an epic arrow, +\index{\backslash two}\verb.\two. that gives a pair of arrows, as well as +leftwards pointing versions, \index{\backslash monleft}\verb.\monleft., +\index{\backslash epileft}\verb.\epileft., and \index{\backslash twoleft}\verb.\twoleft. of +each of them. Here is one more example: +\begin{verbatim} + $A\twoleft B\twoleft^f C\twoleft_g D\twoleft^h_{{\rm Hom}(X,Y)} E$ +\end{verbatim} + gives $A\twoleft B\twoleft^f C\twoleft_g D\twoleft^h_{{\rm Hom}(X,Y)} E$. +There is an almost unlimited variety of such procedures possible. The +ones that are provided can be used as templates to define new ones with, +say, curved arrows or three arrows or whatever a user might have need +of. + +\subsubsection{Added:}\label{added} The macros \index{\backslash to}\verb.\to. and +\index{\backslash two}\verb.\two. can each have optional parameters of the form +\index{/{sh}/<dx>}\verb./{sh}/<dx>. and +\index{/{sh}`{sh}/<dx>}\verb./{sh}`{sh}/<dx>., resp. that allow you to +specify the shapes of the arrows and to override the automatic +computation of the lengths of the arrows. For example, + \begin{verbatim} +$$A\to/<-/ B\to^f C \to/ >->/<500>_g D\to/<-< /^f_g E$$ +$$A\two/<-`->/<100> B\two^f C \two/ >->` >->/_g D\two/<-< `<-< /^f_g E$$ +\end{verbatim} + gives +$$A\to/<-/ B\to^f C \to/ >->/<500>_g D\to/<-< /^f_g E$$ +$$A\two/<-`->/<100> B\two^f C \two/ >->` >->/_g D\two/<-< `<-< /^f_g E$$ + This renders \index{\backslash mon}\verb.\mon., \index{\backslash epi}\verb.\epi., +\index{\backslash toleft}\verb.\toleft., \index{\backslash monleft}\verb.\monleft., +\index{\backslash epileft}\verb.\epileft., and \index{\backslash twoleft}\verb.\twoleft. +obsolete, but they have been retained for back compatibility and +convenience. A three arrow macro that works similarly has been added. +For example + \begin{verbatim} + $$A\threepppp/>`<-`>/<400>^{d^0}|{s^0}_{d^1}B\three<100> +C\three/->>`<-< `->>/ D$$ +\end{verbatim} + gives + $$A\threepppp/>`<-`>/<400>^{d^0}|{s^0}_{d^1}B\three<100> +C\three/->>`<-< `->>/ D$$ + +\subsection{2-arrows} + There is a macro for making 2-arrows of a fixed size, but varying +orientation. They should be put at the appropriate position in a +diagram. The two parameters are two integers \index{dx}\verb.dx. and +\index{dy}\verb.dy. whose ratio is the slope of the arrow. They need +not be relatively prime, but arithmetic overflow could occur if they are +too large. Note that although \index{(dx,dy)}\verb.(dx,dy). and +\index{(-dx,-dy)}\verb.(-dx,-dy). describe the same slope, the arrows +point in opposite directions. Here is a sampler + \begin{verbatim} + $$\bfig + \place(0,0)[\twoar(1,0)] + \place(200,0)[\twoar(0,1)] + \place(400,0)[\twoar(1,1)] + \place(600,0)[\twoar(0,-1)] + \place(800,0)[\twoar(1,2)] + \place(1000,0)[\twoar(1,3)] + \place(1200,0)[\twoar(1,-3)] + \place(1400,0)[\twoar(-3,1)] + \place(1600,0)[\twoar(-1,-3)] + \place(1800,0)[\twoar(255,77)] + \efig$$ +\end{verbatim} + $$\bfig + \place(0,0)[\twoar(1,0)] + \place(200,0)[\twoar(0,1)] + \place(400,0)[\twoar(1,1)] + \place(600,0)[\twoar(0,-1)] + \place(800,0)[\twoar(1,2)] + \place(1000,0)[\twoar(1,3)] + \place(1200,0)[\twoar(1,-3)] + \place(1400,0)[\twoar(-3,1)] + \place(1600,0)[\twoar(-1,-3)] + \place(1800,0)[\twoar(255,77)] + \efig$$ + +Here is little amusement. +\begin{verbatim} + $$\bfig + \square/@3{->}`~)`=o`--x/[A`B`C`D;```] + \place(400,100)[\twoar(-1,-1)] + \place(100,400)[\twoar(1,1)] + \morphism(500,500)||/{*}.{*}/<-500,-500>[B`C;] + \efig$$ +\end{verbatim} + $$\bfig + \square/@3{->}`~)`=o`--x/[A`B`C`D;```] + \place(400,100)[\twoar(-1,-1)] + \place(100,400)[\twoar(1,1)] + \morphism(500,500)||/{*}.{*}/<-500,-500>[B`C;] + \efig$$ + +\subsection{Mixing \xypic\ code} + Here is a sample in which I have mixed code from \xypic\ with my own. +\let\tilde\widetilde +\let\hat\widehat +\begin{verbatim} + $$\bfig + \square(1500,500)/>`>`>`@{>}^<>(.2){r_{n-1}}/[T_{n-1}`T_{n-2}`R_{n-1} +`R_{n-2}; t_{n-1}``\sigma_{n-2}`] + \square(1500,0)/`>`>`>/[R_{n-1}`R_{n-2}`S_{n-1}`S_{n-2}; +`f_{n-1}`f_{n-2}`s_{n-1}] + \morphism|b|[\tilde S_{n+1}`S_n;\tilde s_{n+1}] + \square(1000,500)/>`>`>`>/[\tilde T_n`T_{n-1}`\tilde +R_n`{R_{n-1}};\tilde t_n`\tilde \sigma_n`\sigma_{n-1}`] + \square(1000,0)/>`>``>/[\tilde R_n`R_{n-1}`\tilde S_n`{S_{n-1}};\tilde +r_n\quad ```\tilde s_n] + \square(500,0)/>`>``>/[R_n`{R_n}`{S_n}`{S_{n}}; +\hat r_n`f_n`\tilde f_n`\hat s_n] + \POS(1500,1000)*+!!<0ex,.75ex>{T_{n-1}} + \ar@{-}|!{(1000,500);(1500,500)}\hole(1167,334)% + \POS(1167,334)\ar|!{(1000,500);(1000,0)}\hole_<>(.6){h_{n-1}} + (500,0)*+!!<0ex,.75ex>{S_n} + \morphism(2000,1000)/@{>}|\hole^<>(.8){h_{n-2}}/% + <-500,-1000>[T_{n-2}`S_{n-1};] + \efig$$ +\end{verbatim} + $$\bfig + \square(1500,500)/>`>`>`@{>}^<>(.2){r_{n-1}}/[T_{n-1}`T_{n-2}`R_{n-1} +`R_{n-2}; t_{n-1}``\sigma_{n-2}`] + \square(1500,0)/`>`>`>/[R_{n-1}`R_{n-2}`S_{n-1}`S_{n-2}; +`f_{n-1}`f_{n-2}`s_{n-1}] + \morphism|b|[\tilde S_{n+1}`S_n;\tilde s_{n+1}] + \square(1000,500)/>`>`>`>/[\tilde T_n`T_{n-1}`\tilde +R_n`{R_{n-1}};\tilde t_n`\tilde \sigma_n`\sigma_{n-1}`] + \square(1000,0)/>`>``>/[\tilde R_n`R_{n-1}`\tilde S_n`{S_{n-1}};\tilde +r_n\quad ```\tilde s_n] + \square(500,0)/>`>``>/[R_n`{R_n}`{S_n}`{S_{n}}; +\hat r_n`f_n`\tilde f_n`\hat s_n] + \POS(1500,1000)*+!!<0ex,.75ex>{T_{n-1}} + \ar@{-}|!{(1000,500);(1500,500)}\hole(1167,334)% + \POS(1167,334)\ar|!{(1000,500);(1000,0)}\hole_<>(.6){h_{n-1}} + (500,0)*+!!<0ex,.75ex>{S_n} + \morphism(2000,1000)/@{>}|\hole^<>(.8){h_{n-2}}/% + <-500,-1000>[T_{n-2}`S_{n-1};] + \efig$$ + There are three points to note here in connection with the two lines +that begin with \index{\backslash POS}\verb.\POS. First the objects that are the +source of the first and the target of the second are preceded by +\verb;!!<0ex,.75ex>;\verb;!!<0ex,.75ex>;. The effect is to reset the +baseline to the baseline of the object (rather than the vertical center) +and then to lower that by 3/4 of xheight so that the arrow goes in the +right place. This string precedes all objects. Without that, an object +like $\tilde R $ would be set lower that $R$. Second, the first arrow +has no target and the second no source. This does not give the same +result as empty source and target since in the latter cases, there would +be spaces allowed around them and then the two lines would not meet. It +would be possible to add code that tests for empty nodes, but it comes +up so seldom that I have refrained. In the meantime, the only recourse +is to revert to the underlying \xypic\ code. Thirdly the string +\verb.|!{(1000,500);(1500,500)}\hole. specifies that the line should be +broken at the place where the current arrow intersects the line between +the nodes located at (1000,500) and (1500,500). One must be careful +using this construction, however, as it does not seem to work correctly +if the line segment fails to intersect the current line, or if it does +intersect, but happens to be too long. I have not worked out how long +is too long, but you can get odd results. I assume that this bug will +be fixed eventually. (Ross Moore says that it works correctly in the +version he has, which, however, has not been released.) There is a +similar string, with similar effect, in the following line. The last +line uses simply \index{|\hole}\verb.|\hole. which positions the gap in +the middle of the arrow. + +\subsection{Diagram from TTT} + The last example is a complicated diagram from TTT. If you have the +documentation from the old diagram macros (or the errata from TTT), you +can see how much easier it is to describe this diagram with these +macros. Note the use of \index{\backslash scalefactor}\verb.\scalefactor. to +change the default length from 500 to 700 that made it unnecessary to +specify the scales on the squares and triangles. + \begin{verbatim} + $$\bfig + \scalefactor{1.4}% + \qtriangle(0,1000)/>`>`/[TT`T`TTT';\mu`TT\eta'`]% + \btriangle(500,1000)/`>`@<-14\ul>/[T`TTT'`TT';`T\eta`T\sigma]% + \morphism(0,1500)|l|/>/<0,-1000>[TT`TT'T;T\eta'T]% + \square(500,500)|ammx|/@<14\ul>`>`>`/[TTT'`TT'`TT'TT'`TT'T';% + \mu T'`T\eta'TT'`T\eta'T'`]% + \morphism(1000,1000)|r|/>/<500,-500>[TT'`TT';\hbox{\rm id}]% + \square/>`>``>/[TT'T`TT'TT'`T'T`T'TT';TT'T\eta'`\sigma T``T'T\eta']% + \square(500,0)|ammb|[TT'TT'`TT'T'`T'TT'`T'T';% + TT'\sigma`\sigma TT'`\sigma T'`T'\sigma T']% + \square(1000,0)/>``>`>/[TT'T'`TT'`T'T'`T';T\mu'``\sigma`\mu']% +\place(500,1250)[1]\place(215,1000)[2]\place(750,750)[3]% +\place(215,250)[4]\place(750,250)[5]\place(1140,750)[6]% +\place(1250,250)[7]% + \efig$$ +\end{verbatim} + $$\bfig\label{TTTdiag} + \scalefactor{1.4}% + \qtriangle(0,1000)/>`>`/[TT`T`TTT';\mu`TT\eta'`]% + \btriangle(500,1000)/`>`@<-14\ul>/[T`TTT'`TT';`T\eta`T\sigma]% + \morphism(0,1500)|l|/>/<0,-1000>[TT`TT'T;T\eta'T]% + \square(500,500)|ammx|/@<14\ul>`>`>`/[TTT'`TT'`TT'TT'`TT'T';\mu T'`% + T\eta'TT'`T\eta'T'`]% + \morphism(1000,1000)|r|/>/<500,-500>[TT'`TT';\hbox{\rm id}]% + \square/>`>``>/[TT'T`TT'TT'`T'T`T'TT';TT'T\eta'`\sigma T``T'T\eta']% + \square(500,0)|ammb|[TT'TT'`TT'T'`T'TT'`T'T';TT'\sigma`\sigma TT'% + `\sigma T'`T'\sigma T']% + \square(1000,0)/>``>`>/[TT'T'`TT'`T'T'`T';T\mu'``\sigma`\mu']% +\place(500,1250)[1]\place(215,1000)[2]\place(750,750)[3]% +\place(215,250)[4]\place(750,250)[5]\place(1140,750)[6]% +\place(1250,250)[7]% + \efig$$ + + +\begin{theindex} + + \item \verb@%@, 3 + \item \verb@(@, 7 + \item \verb@(@,), 7 + \item \verb@(-dx@,-dy), 25 + \item \verb@(dx@,dy), 25 + \item \verb@)@, 7 + \item \verb@*@, 7 + \item \verb@-@, 6, 23 + \item \verb@--@, 6 + \item \verb@-->>@, 7 + \item \verb@->@, 7 + \item \verb@->>@, 7 + \item \verb@/@, 7, 9 + \item \verb@/{sh}/<dx>@, 25 + \item \verb@/{sh}`{sh}/<dx>@, 25 + \item \verb@;@, 7 + \item \verb@<@, 6, 7, 22 + \item \verb@<-@, 7 + \item \verb@<-< @, 7 + \item \verb@<<-@, 7 + \item \verb@<<--@, 7 + \item \verb@<>(@, 23 + \item \verb@=@, 6, 13 + \item \verb@>@, 6, 7, 22 + \item \verb@>>@, 6 + \item \verb@[@, 7 + \item \verb@\startsection@, 5 + \item \verb@\Atriangle@, 9 + \item \verb@\Atrianglepair@, 9, 12 + \item \verb@\Ctriangle@, 8, 9 + \item \verb@\Ctrianglepair@, 9, 12 + \item \verb@\Dtriangle@, 9 + \item \verb@\Dtrianglepair@, 9, 12 + \item \verb@\POS@, 27 + \item \verb@\Square@, 15, 16 + \item \verb@\Vtriangle@, 8, 9 + \item \verb@\Vtrianglepair@, 9, 12 + \item \verb@{-}@, 14 + \item \verb@\bfig@, 9 + \item \verb@\btriangle@, 9 + \item \verb@\cube@, 16, 23 + \item \verb@\dtriangle@, 9, 11 + \item \verb@\efig@, 9 + \item \verb@\endxy@, 9 + \item \verb@\epi@, 24, 25 + \item \verb@\epileft@, 24, 25 + \item \verb@\fontscale{x}@, 4 + \item \verb@\hSquares@, 16 + \item \verb@\halign@, 2 + \item \verb@\hole@, 23 + \item \verb@\ignorespaces@, 3 + \item \verb@\iiixii@, 21 + \item \verb@\iiixiii@, 18 + \item \verb@\let\labelstyle=\textstyle@, 6 + \item \verb@\mon@, 24, 25 + \item \verb@\monleft@, 24, 25 + \item \verb@\morphism@, 2, 5, 8, 10 + \item \verb@\phantom@, 3 + \item \verb@\place@, 8, 14 + \item \verb@\ptriangle@, 8, 9, 11 + \item \verb@\pullback@, 15 + \item \verb@\put@, 14 + \item \verb@\qtriangle@, 8, 9 + \item \verb@\scalefactor@, 24, 28 + \item \verb@\scriptstyle@, 6 + \item \verb@\square@, 8, 9, 11, 15 + \item \verb@\three@, 1 + \item \verb@\to@, 1, 25 + \item \verb@\toleft@, 24, 25 + \item \verb@\two@, 1, 24, 25 + \item \verb@\twoleft@, 24, 25 + \item \verb@\ul@, 6 + \item \verb@\vSquares@, 16 + \item \verb@\xy@, 9 + \item \verb@\xy ... \endxy@, 9 + \item \verb@\xyoption{curve}@, 13 + \item \verb@]@, 7 + \item \verb@^@, 6 + \item \verb@^{ (}->@, 16 + \item \verb@_@, 6 + \item \verb@`@, 7, 9 + \item \verb@{*}@, 7 + \item \verb@3 by 2@, 21 + \item \verb@3 by 3@, 18 + + \indexspace + + \item \verb@ >->@, 7 + + \indexspace + + \item \verb@a@, 6 + + \indexspace + + \item \verb@b@, 6 + + \indexspace + + \item \verb@dx@, 8, 15, 25 + \item \verb@dy@, 8, 16, 25 + + \indexspace + + \item \verb@l@, 6 + \item \verb@label@, 6 + + \indexspace + + \item \verb@m@, 6, 23 + + \indexspace + + \item \verb@r@, 6 + + \indexspace + + \item \verb@sliding arrows@, 13 + + \indexspace + + \item \verb@tips@, 4 + + \indexspace + + \item \verb@x@, 4, 8 + + \indexspace + + \item \verb@y@, 8 + +\end{theindex} + + +\end{document} + + + + |