diff options
author | Karl Berry <karl@freefriends.org> | 2007-12-26 00:46:06 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2007-12-26 00:46:06 +0000 |
commit | 09c2e34333852c976a2bfb988393426be3139ea5 (patch) | |
tree | 39fa7de8c6977e71c7da74c78cc463b0a7b8463d /Master | |
parent | 8622f0261b07f52a9363d670b16759eb4b3523e1 (diff) |
barr update (2005-12-13)
git-svn-id: svn://tug.org/texlive/trunk@5911 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r-- | Master/texmf-dist/doc/generic/barr/diaxydoc.pdf | bin | 0 -> 238311 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/generic/barr/diaxydoc.tex (renamed from Master/texmf-dist/doc/latex/barr/diaxydoc.tex) | 542 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/barr/diagdoc.tex | 422 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/barr/diagxy.tex (renamed from Master/texmf-dist/tex/latex/barr/diagxy.tex) | 659 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/barr/diagram.tex | 1048 | ||||
-rwxr-xr-x | Master/tlpkg/bin/ctan2tds | 20 | ||||
-rwxr-xr-x | Master/tlpkg/bin/place | 9 |
7 files changed, 801 insertions, 1899 deletions
diff --git a/Master/texmf-dist/doc/generic/barr/diaxydoc.pdf b/Master/texmf-dist/doc/generic/barr/diaxydoc.pdf Binary files differnew file mode 100644 index 00000000000..d9994f8920a --- /dev/null +++ b/Master/texmf-dist/doc/generic/barr/diaxydoc.pdf diff --git a/Master/texmf-dist/doc/latex/barr/diaxydoc.tex b/Master/texmf-dist/doc/generic/barr/diaxydoc.tex index 07ea061fb6e..38c94d4ff28 100644 --- a/Master/texmf-dist/doc/latex/barr/diaxydoc.tex +++ b/Master/texmf-dist/doc/generic/barr/diaxydoc.tex @@ -1,7 +1,5 @@ - \documentclass[12pt]{article} \input diagxy - \xyoption{curve} \textwidth 6in \oddsidemargin 0pt \makeindex @@ -9,33 +7,12 @@ \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} +\author{Michael Barr\\Dept of Math and Stats, McGill University +\\barr@barrs.org} \date{} \maketitle +\tableofcontents -\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 @@ -58,18 +35,13 @@ 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. + Note: This is the first increase in functionality in a couple years. +Following a suggestion of Gerd Zeibig (who implemented this in a very +different way), I have added a new feature wherein you can create simple +identifiers for nodes and then describe arrows between those nodes using +the identifiers. See~\ref{nodes&arrows} for details, syntax and +examples. I have also recently added support for loops, both inline and +in diagrams. \section{Why another diagram package?} @@ -174,7 +146,8 @@ 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 +or for later reduction, in conjunction with extarticle.cls. 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} @@ -184,6 +157,10 @@ 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. +I had some trouble generating the font files at the larger sizes, so the +file xyfonts.zip, found at my ftp site (ftp.math.mcgill.ca/pub/barr) has +fonts for the ljfour generated at all sizes from 10--20 points. + \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 @@ -324,7 +301,7 @@ 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 +\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 @@ -456,13 +433,16 @@ 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 +\endxy$$}\verb,$$\xy...\endxy$$,. In previous versions of this, the +macros \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.) + were synonyms for +\index{\backslash xy}\verb.\xy. and \index{\backslash endxy}\verb.\endxy., +resp. They have now been redefined to also put the box produced by +\verb.\xy. into a \verb.\vcenter. box. The effect of this is that when +\index{\backslash eqno}\verb.\eqno. is used with a diagram, the +resulting equation number will be vertically centered. + \section{Examples} @@ -656,7 +636,12 @@ and \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.. +\index{\backslash put}\verb.\put.. The syntax is +\verb.\place(x,y)[object]. that places the object at \verb.(x,y).. +There is also an optional parameter that can be used to add any of +\xypic's positioning parameters. For example +\verb.\place[L](x,y)[object]. will left align the object. The default +is to center align it. Here is an example that uses a construction that is undocumented here, but uses a documented \Xy\ construction: \begin{verbatim} @@ -809,6 +794,48 @@ cube: \efig$$ +\subsection{Nodes and arrows}\label{nodes&arrows} +Following a suggestion of Gerd Zeibig, who has implemented this in a +very different way, I have added a feature wherein you can specify nodes +and arrows between them. The nodes can be given simple identifiers and +those used to specify the source and target of the arrows. The way it +works is that \verb.\node id(x,y)[N]. assigns the node \verb.N. at +position \verb.(x,y). to the identifier \verb.id. which is then used +to refer to that node. Then \verb.\arrow[id`id;L]. is used to place +arrows at the nodes identified by the identifiers and with label +\verb.L.. There are also optional arguments for label position and +arrowhead shape, so the full macro looks like \verb.|p|/sh/[id`id;L].. +Here is an example. The code +\begin{verbatim} +$$\bfig +\node a(0,0)[A\otimes B] +\node 3b(700,300)[A'\otimes B'] +\node @(0,-500)[A''\otimes B''] +\node xyzzy(500,0)[C\otimes D] +\arrow/->>/ [a`3b;f] +\arrow|l|[a`@;g] +\arrow|b|/<-/[xyzzy`@;i\otimes j] +\efig$$ +\end{verbatim} +produces the diagram +$$\bfig +\node a(0,0)[A\otimes B] +\node 3b(700,300)[A'\otimes B'] +\node @(0,-500)[A''\otimes B''] +\node xyzzy(500,0)[C\otimes D] +\arrow/->>/[a`3b;f] +\arrow|l|[a`@;g] +\arrow|b|/<-/[xyzzy`@;i\otimes j] +\efig$$ + +Notice, incidentally, that the nodes can be defined either inside or +outside math mode. If it is done outside, the definitions will persist +(unless redefined) and may be reused. This is useful when there are two +very similar diagrams. Also note that the identifiers can be any +string. + +An example of a large diagram done this way appears in~ + \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: @@ -1156,7 +1183,31 @@ 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} + +\subsection{loops} + Two new procedures \verb.\Loop. and \verb.\iloop. have been added, the +latter for inline loops. (Note: \verb.\loop. was changed to +\verb.\Loop. as the former conflicted with amstex.) Here are +examples: +\begin{verbatim} + $$\bfig + \morphism[A`B;f] + \Loop(0,0)A(ur,ul)_g + \Loop(500,0)B(dl,dr)_h + \efig$$ +\end{verbatim} + $$\bfig + \morphism[A`B;f] + \Loop(0,0)A(ur,ul)_g + \Loop(500,0)B(dl,dr)_h + \efig$$ + +Inline: Either \verb.$A\iloop B(ur,ul)C$. +or \verb.$\xy\Loop(0,0)A(ur,ul)\endxy$. gives the output $\xy + \Loop(0,0)A(ur,ul)\endxy$. The direction indicators show what +direction the loops start and end in. + +\subsection{Diagram from TTT}\label{tttdiag} 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 @@ -1198,141 +1249,268 @@ specify the scales on the squares and triangles. \place(1250,250)[7]% \efig$$ +Here is code that produces the same diagram using the new \verb.\arrow. +feature: +\begin{verbatim} +\node a(0,1500)[TT]% +\node b(500,1500)[T]% +\node c(500,1000)[TTT']% +\node d(1000,1000)[TT']% +\node e(0,500)[TT'T]% +\node f(500,500)[TT'TT']% +\node g(1000,500)[TT'T']% +\node h(1500,500)[TT']% +\node i(0,0)[T'T]% +\node j(500,0)[T'TT']% +\node k(1000,0)[T'T']% +\node l(1500,0)[T']% + $$\bfig +\scalefactor{1.4}% +\arrow[a`b;\mu]% +\arrow|l|[a`e;T\eta'T]% +\arrow|l|[a`c;TT\eta]% +\arrow[b`d;T\eta]% +\arrow/@<14\ul>/[c`d;\mu T']% +\arrow|b|/@<-14\ul>/[c`d;T\sigma]% +\arrow[d`h;\mbox{id}]% +\arrow|m|[c`f;T\eta'TT']% +\arrow|m|[d`g;T\eta'T']% +\arrow[e`f;TT'T\eta']% +\arrow[f`g;TT'\sigma]% +\arrow[g`h;T\mu']% +\arrow|l|[e`i;\sigma T]% +\arrow|m|[f`j;\sigma TT']% +\arrow|m|[g`k;\sigma T']% +\arrow[h`l;\sigma]% +\arrow|b|[i`j;T'T\eta']% +\arrow|b|[j`k;T'\sigma T']% +\arrow[k`l;\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} + It is in some ways easier than the other, but more verbose. In the end +it comes down to a matter of preference. + + + +\clearpage +\def\lab(#1,#2)[#3]{\place(#1,#2)[\backslash\hbox{\texttt#3}]} +\def\Lab[#1]{{\backslash\hbox{\texttt#1}}} + + +\section{A few comparisons with {\tt xymatrix}} + +We give here a few diagrams to contrast the predefined shapes of +\verb.diagxy. with those produced by \verb.xymatrix.. These are not +intended to be invidious, but they are chosen to show \verb.xymatrix. in +the worst light. The diagrams can be improved by using special options +of \verb.xymatrix. but the second diagrams are the default in +\verb.diagxy.. Of course, \verb.diagxy. uses \verb.xypic. but not the +\verb.xymatrix. option., so this is not meant as a putdown of +\verb.xypic., only as a comparison if you are trying to decide which to +use. In the end, though you will probably decide on the basis of which +you feel most comfortable with. Users of \verb.diagxy. like the +predefined shapes and others find the native syntax of \verb.xypic. more +comfortable. + +\xyoption{matrix} +The first one illustrates what happens when the nodes are vertically +unbalanced. Changing \verb.\xymatrix. to \verb.\xymatrix1@. improves +the appearance, but it is still not perfect. + +\begin{verbatim} +$$\xymatrix {A^{X^Y}\ar[r]&B_{Z_W}\ar[r]&C} +\qquad A^{X^Y}\to B_{Z_W}\to C$$ +\end{verbatim} + produces +$$\xymatrix {A^{X^Y}\ar[r]&B_{Z_W}\ar[r]&C} +\qquad A^{X^Y}\to B_{Z_W}\to C$$ + +The next sample shows what happens to the label when the nodes are of +quite different length. Putting a - after the \verb.^. fixes this. +\begin{verbatim} +$$\xymatrix{A\ar[r]^{(f,g,h)}&B\times C\times D}\qquad +A\to^{(f,g,h)}B\times C\times D$$ +\end{verbatim} + produces +$$\xymatrix{A\ar[r]^{(f,g,h)}&B\times C\times D}\qquad +A\to^{(f,g,h)}B\times C\times D$$ + + +However, it doesn't fix the problem of too short an arrow. Replacing +\verb.[r]. by \verb.[rr]. and the \verb.&. by \verb.&&. fixes this. +\begin{verbatim} +$$\xymatrix{A\ar[r]^-{(f_1,g_2,h_3)}&B\times C\times D}\qquad +A\to^{(f_1,g_2,h_3)}B\times C\times D$$ +\end{verbatim} + produces +$$\xymatrix{A\ar[r]^-{(f_1,g_2,h_3)}&B\times C\times D}\qquad +A\to^{(f_1,g_2,h_3)}B\times C\times D$$ + +Unbalanced nodes in a triangle result in an unbalanced triangle. I do +not know how to fix this one up, although \verb.xypic. has so many +options that there is probably some way. +\begin{verbatim} +$$\xymatrix{A\ar[rr]\ar[dr]&&B\times C\times D\ar[dl]\\&E}$$ +$$\xy\Vtriangle[A`B\times C\times D`E;``]\endxy$$ +\end{verbatim} + produces +$$\xymatrix{A\ar[rr]\ar[dr]&&B\times C\times D\ar[dl]\\&E}$$ +$$\xy\Vtriangle[A`B\times C\times D`E;``]\endxy$$ + +\clearpage +\section{Thumbnails} + +This page shows all the shapes that have been defined so far. In all +cases, consult the documentation for the syntax and a discussion of the +optional parameters. Note that \verb.\Square., along with +\verb.\hSquares. and \verb.\vSquares. grow in width to accomodate the +nodes and labels. + +\scalefactor{.4} + % \fontscale{} +\let\.\cdot +$\.\to_{\Lab[to]}\.\toleft_{\Lab[toleft]}\. +\mon_{\Lab[mon]}\.\monleft_{\Lab[monleft]}\.\epi_{\Lab[epi]}\.\epileft_{\Lab[epileft]}\. +\two_{\Lab[two]}\.\three_{\Lab[three]}\.$ + + $$\bfig + \square[\.`\.`\.`\.;```] + \lab(200,-250)[square] + \Atriangle(1000,0)[\.`\.`\.;``] + \lab(1400,-250)[Atriangle] + \Vtriangle(2500,0)[\.`\.`\.;``] + \lab(2900,-250)[Vtriangle] + \Ctriangle(4000,0)[\.`\.`\.;``] + \lab(4400,-250)[Ctriangle] + \Dtriangle(5000,0)[\.`\.`\.;``] + \lab(5400,-250)[Dtriangle] +\def\ru{\.\.\.\.\.} + \square(0,-1500)<1000,500>[\ru`\ru`\ru`\ru;```] + \lab(400,-1750)[Square] + \ptriangle(1800,-1500)[\.`\.`\.;``] + \lab(2000,-1750)[ptriangle] + \qtriangle(2900,-1500)[\.`\.`\.;``] + \lab(3100,-1750)[qtriangle] + \dtriangle(4000,-1500)[\.`\.`\.;``] + \lab(4200,-1750)[dtriangle] + \btriangle(5100,-1500)[\.`\.`\.;``] + \lab(5400,-1750)[btriangle] + \Atrianglepair(0,-3000)[\.`\.`\.`\.;````] + \lab(400,-3250)[Atrianglepair] + \Vtrianglepair(1500,-3000)[\.`\.`\.`\.;````] + \lab(1900,-3250)[Vtrianglepair] + \Ctrianglepair(3500,-3000)[\.`\.`\.`\.;````] + \lab(3400,-3250)[Ctrianglepair] + \Dtrianglepair(4500,-3000)[\.`\.`\.`\.;````] + \lab(4900,-3250)[Dtrianglepair] + \hSquares(0,-4500)[\ru`\ru`\ru`\ru`\ru`\ru;``````] + \lab(600,-4750)[hSquares] + \pullback(2700,-4500)[\.`\.`\.`\.;```][\.;``] + \lab(3000,-4750)[pullback] + \iiixii(4000,-4500){15}<400>[\.`\.`\.`\.`\.`\.;``````] + \lab(4800,-4750)[iiixii] + \cube(0,-7000)[\.`\.`\.`\.;```](500,-6500)[\.`\.`\.`\.;```][```] + \lab(700,-7250)[cube] + \iiixiii(2500,-7000)[\.`\.`\.`\.`\.`\.`\.`\.`\.;```````````] + \lab(3000,-7250)[iiixiii] + \vSquares(4500,-7000)[\ru`\ru`\ru`\ru`\ru`\ru;``````] + \lab(4800,-7250)[vSquares] + \efig$$ + + \clearpage +\section{Command summary} + +\def\v#1.{{\texttt{#1}}} + Below is a summary of the syntax of the supplied shapes. In this +summary, optional parameters are enclosed in braces (\verb/{}/) because +the more usual brackets are too much used. In only two cases below are +braces to be used and they will be made clear. In all cases it is the +set of parameters that is optional; you must accept the default for all, +or set them all. But the different sets of parameters are independent. +Note that continuation lines are marked with a \verb.%. sign. If you +break one of these macros be sure to end the line with \verb.%., unless +you are inside the \verb/[...]/, where everything is done in math mode +and space characters are ignored. +\begin{trivlist} + \item[\v(x,y).:] The coordinates of the lower left corner of the +smallest rectangle that encloses the figure, whether or not that corner +is actually in the shape. + +\item[\v p.:] +One of the letters \v a., \v b., \v l., +\v m., or \v x. and describe the placement of an arrow label as above, +below, right, left,in the middle of an arrow, or no label, resp. + +\item[\v a.:] The shape of the arrow. + +\item[\v <dx,dy>.:] The horizontal and vertical extent of the diagram. +In a couple cases only one is specified. + +\item[\v O.:] An object or node. + +\item[\v L.:] An arrow label. + +\item[\v N.:] A number in the range 0..15. If it has more than one +digit, must be placed inbraces. + +\item[\v M.:] A number in the range 0.."7777. Also in braces. + +\end{trivlist} + + +\begin{verbatim} +\to{/a/}{^A}{|A}{_A} +\xar{^A}{|A}{_A}(xar = mon, epi, toleft, monleft, epileft) +\square{(x,y)}{|pppp|}{/a`a`a`a/}{<dx,dy>}[O`O`O`O;L`L`L`L] +\Ltriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L] +\Vtriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L] +\Ctriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L] +\Dtriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L] +\Square{(x,y)}{|pppp|}{/a`a`a`a/}{<dy>}[O`O`O`O;L`L`L`L] +\ptriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L] +\qtriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L] +\dtriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L] +\btriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L] +\Ltrianglepair{(x,y)}{|ppppp|}{/a`a`a`a`a/}{<dx,dy>}% + [O`O`O`O;L`L`L`L`L] +\Vtrianglepair{(x,y)}{|ppppp|}{/a`a`a`a`a/}{<dx,dy>}% + [O`O`O`O;L`L`L`L`L] +\Ctrianglepair{(x,y)}{|ppppp|}{/a`a`a`a`a/}{<dx,dy>}% + [O`O`O`O;L`L`L`L`L] +\Dtrianglepair{(x,y)}{|ppppp|}{/a`a`a`a`a/}{<dx,dy>}% + [O`O`O`O;L`L`L`L`L] +\hSquares{(x,y)}{|ppppppp|}{/a`a`a`a`a`a`a/}{<dx,dy>}% + [O`O`O`O`O`O;L`L`L`L`L`L`L] +\pullback{(x,y)}{|pppp|}{/a`a`a`a/}{<dx,dy>}[O`O`O`O;L`L`L`L] + {|ppp|}{/a`a`a/}{<#7,#8>}[O;L`L`L] +\iiixii{(x,y)}{|ppppppp|}{/a`a`a`a`a`a`a/}{<dx,dy>}% + {N{<dx,dy>}}[O`O`O`O`O`O;L`L`L`L`L`L`L] +\cube{(x,y)}{|pppp|}{/a`a`a`a/}{<dx,dy>}[O`O`O`O;L`L`L`L]% + {(x,y)}{|pppp|}{/a`a`a`a/}{<dx,dy>}[O`O`O`O;L`L`L`L]% + {|pppp|}{/a`a`a`a/}[L`L`L`L] +\iiixiii{(x,y)}{|pppppppppppp|}{/a`a`a`a`a`a`a`a`a`a`a`a/}% + {<dx,dy>}{M{<dx>}}% + [O`O`O`O`O`O`O`O`O;L`L`L`L`L`L`L`L`L`L`L`L`L`L`L] +\vSquares{(x,y)}{|ppppppp|}{/a`a`a`a`a`a`a/}{<dx,dy>}% + [O`O`O`O`O`O;L`L`L`L`L`L`L] +\end{verbatim} + -\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} +\edef\backslash{\ensuremath{\backslash}} +\catcode`\<=\active +\catcode`\>=\active +\catcode`\^=\active +\catcode`\_=\active +\def<{\mathhexbox13C} +\def>{\mathhexbox13E} +\def^{\mathhexbox362} +\def_{\vrule width 10pt height .4pt depth 0pt} +\addcontentsline{toc}{section}{Index} +\newpage +\input diaxydoc.ind \end{document} diff --git a/Master/texmf-dist/doc/latex/barr/diagdoc.tex b/Master/texmf-dist/doc/latex/barr/diagdoc.tex deleted file mode 100644 index 5dd69eb2c58..00000000000 --- a/Master/texmf-dist/doc/latex/barr/diagdoc.tex +++ /dev/null @@ -1,422 +0,0 @@ -\documentstyle[12pt]{article} -\input diagram -\textheight=9in \topmargin=0pt\headheight=0pt\headsep=0pt -\textwidth=6.5in \oddsidemargin=0pt -\begin{document} -{\catcode`\ =13\global\let =\ \catcode`\^^M=13 -\gdef^^M{\par\noindent}} -\def\verbatim{\tt -\catcode`\^^M=13 -\catcode`\ =13 -\catcode`\\=12 -\catcode`\{=12 -\catcode`\}=12 -\catcode`\_=12 -\catcode`\^=12 -\catcode`\&=12 -\catcode`\~=12 -\catcode`\#=12 -\catcode`\%=12 -\catcode`\$=12 -\catcode`|=0 -} - -All commercial rights reserved. May be freely distributed -and used with the following exceptions:\\ -1. No commercial use without explicit permission.\\ -2. It may not be distributed without this notice. - -\def\\{{\tt \char 92}} - -\section*{The diagram macros} -The file diagram includes a number of macros for drawing commutative -diagrams in special shapes as well as more flexible macros to paste -together more complicated diagrams. - -In general, there are two kinds of macros. The first kind has the -following form -{\tt \\shape\-name[shape\_\-parameters]} and is intended to be used in -the following way: -{\verbatim -$$ -\shapename[shape_parameters] -$$ -|egroup - -This will create a shape with the given parameters. It operates by -building its own picture environment. - -The second kind of procedure must be used inside a picture environment -and allows the user to put a diagram of a given size and shape at a -given place. The usual way in which this is used is: - -{\verbatim -$$ -\bfig -\putshape1<optional parameters>(x1,y1)[shape_parameters1] -|dots -\putshape(xn,yn)<optional parameters>[shape_parametersn] -\efig -$$ -|egroup - -Here is an example of the first kind of macro. I will have to explain a -few details before giving examples of the second. The code -{\verbatim -$$ -\square[A`B`C`D;f`g`h`k] -$$ -|egroup -produces the diagram -$$ -\square[A`B`C`D;f`g`h`k] -$$ -and the code -{\verbatim -$$ -\Atriangle[A`B`C;f`g`h] -$$ -|egroup -produces the diagram -$$ -\Atriangle[A`B`C;f`g`h] -$$ -The reason for the shape name will be explained later. - -If an arrow label extends especially high or low, the space -automatically expands to match. For example, -{\verbatim -$$ -\square[A`B`C`D;\sum_{i=1}^{\infty}`g`h`\Psi^A_k] -$$ -|egroup -will get the diagram -$$ -\square[A`B`C`D;\sum_{i=1}^{\infty}`g`h`\Psi^A_k] -$$ -and so on. - -Before going on, I will explain about the parameters. Any shape will -have one or two parameters for height and/or length as well as one -parameter for each arrow in the diagram. These are in addition to the -parameters used in the actual procedures. For example, the procedure -{\verbatim -$$ -\square<-1`0`2`-3;1000`700>[A`B`C`D;f`g`h`k] -$$ -|egroup -gives the square: -$$ -\square<-1`0`2`-3;1000`700>[A`B`C`D;f`g`h`k] -$$ -The meaning is as follows. The first four parameters refer to four -arrows in linguistic order (top, left, right, bottom). A negative -number gives a backward arrow, while a zero causes it to be omitted. A -parameter with an absolute value of 1 is ordinary, while 2 gives an -arrow with a tail (monomorphism) and 3 a double headed arrow -(epimorphism). The last two parameters determine the width and height, -respectively, in units of 0.01 em (an em is the width of an M, the -widest letter in a font). It should be noted that it is not -possible to give only some of the optional parameters; either all -must be given or none is. - -Here are the shapes. We have already seen the shape {\tt \\square}. -There are eight different triangles, all isoceles right triangles in -different orientations. The names all have the form {\tt -\\xtriangle}, where x is the letter that most closely resembles the -actual shape of the triangle. - -Here are the names, followed by a sample of each one: -\begin{list}{}{} -\item{\tt \\btriangle}\samepage -$$ -\btriangle[A`B`C;f`g`h] -$$ -\pagebreak[0] -\item{\tt \\dtriangle}\samepage -$$ -\dtriangle[A`B`C;f`g`h] -$$ -\pagebreak[0] -\item{\tt \\ptriangle}\samepage -$$ -\ptriangle[A`B`C;f`g`h] -$$ -\pagebreak[0] -\item{\tt \\qtriangle}\samepage -$$ -\qtriangle[A`B`C;f`g`h] -$$ -\pagebreak[0] -\item{\tt \\Atriangle}\samepage -$$ -\Atriangle[A`B`C;f`g`h] -$$ -\pagebreak[0] -\item{\tt \\Vtriangle}\samepage -$$ -\Vtriangle[A`B`C;f`g`h] -$$ -\pagebreak[0] -\item{\tt \\Ctriangle}\samepage -$$ -\Ctriangle[A`B`C;f`g`h] -$$ -\pagebreak[0] -\item{\tt \\Dtriangle}\samepage -$$ -\Dtriangle[A`B`C;f`g`h] -$$ -\end{list} - -In addition, there are two special diagrams that come up often enough to -be worth having a special macros for. -\begin{list}{}{} -\item{\tt \\Atrianglepair}\samepage -$$ -\Atrianglepair[A`B`C`D;f`g`h`k`l] -$$ -\item{\tt \\Vtrianglepair}\samepage -$$ -\Vtrianglepair[A`B`C`D;f`g`h`k`l] -$$ -\end{list} -Finally, there is one special shape that is probably not used by very -many mathematicians. Still I have it and the user might as well share -it. - -{\verbatim -\recurse[A`B`R`C;s`f_0`f`t_0`t] -|egroup -$$ -\recurse[A`B`R`C;s`f_0`f`t_0`t] -$$ - -Notice what happens if the first parameter is empty: -{\verbatim -\recurse[`B`R`C;s`f_0`f`t_0`t] -|egroup -$$ -\recurse[`B`R`C;s`f_0`f`t_0`t] -$$ - -This takes care of the simple procedures. The remaining procedures are -there as building blocks for more complicated diagrams. - -These take the form -\vskip0pt\noindent -{\tt \\putshape(xpos,ypos)[shape\_parameters]} -\vskip0pt\noindent -where -shape is one of the 11 shapes (excluding {\tt \\recurse}) described -above -and the parms are as described there. The parameters {\tt xpos} and -{\tt ypos} are the offsets from the lower left corner of the picture -measured in umits of .01 em in the usual \LaTeX\ fashion. - -There is one -more shape which is simply an arrow with an attached label. This is -called {\tt \\putmorphism} and it is used with the syntax -\vskip0pt\noindent -{\tt -\\putmorphism(xpos,ypos)(run,rise)[node1`node2`label]\{dist\}\{type\}\{loc\}} -\vskip0pt\noindent -Here the parameters {\tt xpos} and -{\tt ypos} are as above. The slope is {\tt rise/run} where {\tt rise} -and {\tt run} are two numbers that give the slope in accordance with the -\LaTeX\ rules. That is rise and run must have no common divisor and -must not exceed 4 in absolute value. In addition, these procedures are -defined so that rise must not be positive and if it is zero, then run -must be positive. In other words, all arrows must go in the linguistic -direction, downwards or to the right. Arrows can be made to go in the -reverse direction as explained below. - -The next three parameters are the node that appears first (in linguistic -order), the one that appears second and the arrow label. The next -paramater is the distance in the sense of \LaTeX\ between the centers of -the nodes. This means it is the horizontal component of the distance, -unless that is negative, in which case it is the vertical distance. The -second parameter is the code for the arrowtype, an integer between -3 -and 3 with the same meaning as explained above. Using negative values -of this parameter allows one to draw an arrow that goes upwards or left. -Note, however, that node1 is always the node that is above or to the -left of node2. The last parameter should have the value a,b,l,r or m. -The values a and b are used only for horizontal arrows and direct the -arrow label to be placed above or below the arrow. The values l and r -are used for all other arrows and direct the label to be left or right -of the arrow. Finally, a vertical arrow only can be given the parameter -m, in which case the arrow will be gapped and the label placed in the -middle of the gap. - -In general, the simple macros are designed to be used as indicated -either in the display -environment or in one of the others, usually -{\verbatim -\begin{equation}\begin{array}{c} -|dots -\end{array}\end{equation}|egroup - -The \\putshape macros must be used inside a picture environment that is -normally placed inside a display or similar environment. The -reference point for the positioning parameters is determined as the -lower left corner of the smallest rectangle with sides parallel to the -coordinate axes that includes the center points of all nodes on its -border. This rectangle will be degenerate in the case of a horizontal -or vertical morphism. The reference point may either be on or outside -the actual figure. For example, in the case of the btriangle, it is the -center of the lower left node, while for a qtriangle it is outside the -triangle itself being the fourth corner of the enclosing square. - -The macros are made so that they fit together well. That is why all -distances are from node centers to node centers. If a vertex is part of -two shapes, it is probably best not to repeat it, since it is -conceivable that round-off errors will cause its two appearances to be -slightly offset. It can either be omitted or, since the width is used -to determine the amount to shorten horizontal arrows, replaced by {\tt -\\phantom} versions. Both methods are illustrated in the example given -at the end. - -A somewhat baroque (but taken from an actual text) example illustrates -most of these points. -{\verbatim -$$ -\bfig -\putmorphism(0,2100)(0,-1)[``T\eta'T]{1400}1l -\putmorphism(0,2100)(1,0)[TT`T`\mu]{700}1a -\putmorphism(0,2100)(1,-1)[`TTT'`TT\eta']{700}1l -\putmorphism(700,2100)(1,-1)[`TT'`T\eta]{700}1r -\put(700,1750){\makebox(0,0){1}} -\putmorphism(700,1420)(1,0)[\phantom{TTT'}`\phantom{TT'}`\mu - T']{700}1a -\putmorphism(700,1380)(1,0)[\phantom{TTT'}`% - \phantom{TT'}`T\sigma]{700}1b -\putsquare<0`1`1`1;700`700>(700,700)[TTT'`TT'`TT'TT'`TT'T';`T\eta'TT'``] -\putmorphism(700,700)(1,0)[\phantom{TT'TT'}`% - \phantom{TT'T'}`TT'\sigma]{700}1a -\put(300,1400){\makebox(0,0){2}} -\put(950,1050){\makebox(0,0){3}} -\putbtriangle<0`1`0;700>(1400,700)[``TT';T\eta'T'`id`] -\putmorphism(1400,700)(1,0)[\phantom{TT'T'}`% - \phantom{TT'}`T\mu']{700}1a -\put(1600,1050){\makebox(0,0){6}} -\putsquare<1`1`0`1;700`700>(0,0)[TT'T`\phantom{TT'TT'}`T'T`T'TT';% - TT'T\eta'`\sigma T``T'T\eta'] -\putmorphism(700,0)(1,0)[\phantom{T'TT'}`% - \phantom{T'T'}`T'\sigma]{700}1b -\putsquare<0`0`1`1;700`700>(1400,0)[``T'T'`T';``\sigma`\mu'] -\putmorphism(700,700)(0,-1)[``\sigma TT']{700}1m -\putmorphism(1400,700)(0,-1)[``\sigma T']{700}1m -\put(300,350){\makebox(0,0){4}} -\put(1050,350){\makebox(0,0){5}} -\put(1750,350){\makebox(0,0){7}} -\efig -$$ -|egroup -which produces -$$ -\bfig -\putmorphism(0,2100)(0,-1)[``T\eta'T]{1400}1l -\putmorphism(0,2100)(1,0)[TT`T`\mu]{700}1a -\putmorphism(0,2100)(1,-1)[`TTT'`TT\eta']{700}1l -\putmorphism(700,2100)(1,-1)[`TT'`T\eta]{700}1r -\put(700,1750){\makebox(0,0){1}} -\putmorphism(700,1420)(1,0)[\phantom{TTT'}`\phantom{TT'}`\mu - T']{700}1a -\putmorphism(700,1380)(1,0)[\phantom{TTT'}`% - \phantom{TT'}`T\sigma]{700}1b -\putsquare<0`1`1`1;700`700>(700,700)[TTT'`TT'`TT'TT'`TT'T';`T\eta'TT'``] -\putmorphism(700,700)(1,0)[\phantom{TT'TT'}`% - \phantom{TT'T'}`TT'\sigma]{700}1a -\put(300,1400){\makebox(0,0){2}} -\put(950,1050){\makebox(0,0){3}} -\putbtriangle<0`1`0;700>(1400,700)[``TT';T\eta'T'`id`] -\putmorphism(1400,700)(1,0)[\phantom{TT'T'}`% - \phantom{TT'}`T\mu']{700}1a -\put(1600,1050){\makebox(0,0){6}} -\putsquare<1`1`0`1;700`700>(0,0)[TT'T`\phantom{TT'TT'}`T'T`T'TT';% - TT'T\eta'`\sigma T``T'T\eta'] -\putmorphism(700,0)(1,0)[\phantom{T'TT'}`% - \phantom{T'T'}`T'\sigma]{700}1b -\putsquare<0`0`1`1;700`700>(1400,0)[``T'T'`T';``\sigma`\mu'] -\putmorphism(700,700)(0,-1)[``\sigma TT']{700}1m -\putmorphism(1400,700)(0,-1)[``\sigma T']{700}1m -\put(300,350){\makebox(0,0){4}} -\put(1050,350){\makebox(0,0){5}} -\put(1750,350){\makebox(0,0){7}} -\efig -$$ - -Here is a page of samples of the results from the various -{\tt\\putshapes}. The code -{\verbatim -$$ -\bfig -\putsquare(0,0)[A`B`C`D;f`g`h`k] -\putbtriangle(0,1500)[A`B`C;f`g`h] -\putdtriangle(2200,1500)[A`B`C;f`g`h] -\putptriangle(0,3000)[A`B`C;f`g`h] -\putqtriangle(1000,500)[A`B`C;f`g`h] -\putCtriangle(1500,750)[A`B`C;f`g`h] -\putDtriangle(700,1000)[A`B`C;f`g`h] -\putAtriangle(2000,2200)[A`B`C;f`g`h] -\putAtrianglepair(0,2500)[A`B`C`D;f`g`h`k`l] -\putVtriangle(2000,3000)[A`B`C;f`g`h] -\putVtrianglepair(1000,2500)[A`B`C`D;f`g`h`k`l] -\efig -$$ -|egroup -produces the diagram: -$$ -\bfig -\putsquare(0,0)[A`B`C`D;f`g`h`k] -\putbtriangle(0,1500)[A`B`C;f`g`h] -\putdtriangle(2200,1500)[A`B`C;f`g`h] -\putptriangle(0,3000)[A`B`C;f`g`h] -\putqtriangle(1000,500)[A`B`C;f`g`h] -\putCtriangle(1500,750)[A`B`C;f`g`h] -\putDtriangle(700,1000)[A`B`C;f`g`h] -\putAtriangle(2000,2200)[A`B`C;f`g`h] -\putAtrianglepair(0,2500)[A`B`C`D;f`g`h`k`l] -\putVtriangle(2000,3000)[A`B`C;f`g`h] -\putVtrianglepair(1000,2500)[A`B`C`D;f`g`h`k`l] -\efig -$$ - -Added: For horizontal and vertical lines only, arrow parameters of -$\pm4$, $\pm5$ and $\pm6$ will give dashed lines. - -Here is a double cube: -{\verbatim -$$ -\bfig -\putsquare(0,750)[A`B`C`D;```] -\putsquare(0,250)[\phantom{C}`\phantom{D}`E`F;```] -\putsquare(250,500)[A'`B'`C'`D';```] -\putsquare(250,0)[\phantom{C'}`\phantom{D'}`E'`F';```] -\putmorphism(0,1250)(1,-1)[```]{250}1a -\putmorphism(500,1250)(1,-1)[```]{250}1a -\putmorphism(0,750)(1,-1)[```]{250}1a -\putmorphism(500,750)(1,-1)[```]{250}1a -\putmorphism(0,250)(1,-1)[```]{250}1a -\putmorphism(500,250)(1,-1)[```]{250}1a -\efig -$$ -|egroup -$$ -\bfig -\putsquare(0,750)[A`B`C`D;```] -\putsquare(0,250)[\phantom{C}`\phantom{D}`E`F;```] -\putsquare(250,500)[A'`B'`C'`D';```] -\putsquare(250,0)[\phantom{C'}`\phantom{D'}`E'`F';```] -\putmorphism(0,1250)(1,-1)[```]{250}1a -\putmorphism(500,1250)(1,-1)[```]{250}1a -\putmorphism(0,750)(1,-1)[```]{250}1a -\putmorphism(500,750)(1,-1)[```]{250}1a -\putmorphism(0,250)(1,-1)[```]{250}1a -\putmorphism(500,250)(1,-1)[```]{250}1a -\efig -$$ - - - -\end{document} diff --git a/Master/texmf-dist/tex/latex/barr/diagxy.tex b/Master/texmf-dist/tex/generic/barr/diagxy.tex index 5fc36e7cf54..b71b70e50bf 100644 --- a/Master/texmf-dist/tex/latex/barr/diagxy.tex +++ b/Master/texmf-dist/tex/generic/barr/diagxy.tex @@ -1,61 +1,70 @@ - \def\dated#1{\def\thedate{#1}} - \dated{2001-10-14} - % This is a package of commutative diagram macros built on top of Xy-pic - % by Michael Barr (email: barr@barrs.org). Its use 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. + \def\dated#1{\def\thedate{#1}}% + \dated{2004-12-08}% + % This is a package of commutative diagram macros built on top of Xy-pic% + % by Michael Barr (email: barr@barrs.org). Its use 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.% + % Added 2003-05-10: I now know that the only clash is with \square in% + % amssymb, which should therefore be loaded first. If the amssymb% + % \square is required, you can \let\box\square and use \box instead.% +\newcount\atcode \atcode=\catcode`\@% +\catcode`\@=12% \input xy \xyoption{arrow} +\xyoption{curve} -\newdir{ >}{{ }*!/-9pt/@{>}} -\newdir{ (}{{ }*!/-5pt/@{(}} -\newdir^{ (}{{ }*!/-5pt/@^{(}} -\newdir{< }{!/9pt/@{<}*{ }} +\newdir{ >}{{ }*!/-.9em/@{>}}% +\newdir{ (}{{ }*!/-.5em/@{(}}% +\newdir^{ (}{{ }*!/-.5em/@^{(}}% +\newdir{< }{!/.9em/@{<}*{ }}% -\newbox\Label% \newdimen\high% -\newdimen\deep% \newdimen\ul% \newcount\deltax% \newcount\deltay% \newcount\deltaX% +\newcount\deltaXprime% \newcount\deltaY% +\newcount\deltaYprime% -\newdimen\wdth +\newdimen\wdth% \newcount\xend% \newcount\yend% -\newcount\Xend -\newcount\Yend +\newcount\Xend% +\newcount\Yend% \newcount\xpos% \newcount\ypos% \newcount\default \default=500% -\newcount\defaultmargin \defaultmargin=150 +\newcount\defaultmargin \defaultmargin=150% \newcount\topw% \newcount\botw% \newcount\Xpos% \newcount\Ypos% \def\ratchet#1#2{\ifnum#1<#2\global #1=#2\fi}% -\newcount\atcode \atcode=\catcode`\@% -\catcode`\@=11 -\expandafter\ifx\csname @ifnextchar\endcsname\relax -\def\ifnextchar#1#2#3{\let\@tempe -#1\def\@tempa{#2}\def\@tempb{#3}\futurelet +\catcode`\@=11% +\expandafter\ifx\csname @ifnextchar\endcsname\relax% +\def\ifnextchar#1#2#3{\let\@tempe% +#1\def\@tempa{#2}\def\@tempb{#3}\futurelet% \@tempc\@ifnch}% -\def\@ifnch{\ifx \@tempc \@sptoken \let\@tempd\@xifnch - \else \ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi +\def\@ifnch{\ifx \@tempc \@sptoken \let\@tempd\@xifnch% + \else \ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi% \fi \@tempd}% -\def\:{\let\@sptoken= } \: % this makes \@sptoken a space token +\def\:{\let\@sptoken= } \: % this makes \@sptoken a space token% \def\:{\@xifnch} \expandafter\def\: {\futurelet\@tempc\@ifnch}% -\else -\let\ifnextchar\@ifnextchar -\fi +\else% +\let\ifnextchar\@ifnextchar% +\fi% +\ifx\check@mathfonts\undefined% +\else \check@mathfonts% +\fi% +\newdimen\axis \axis=\fontdimen22\textfont2% \ul=.01em% \X@xbase =.01em% \Y@ybase =.01em% @@ -63,22 +72,22 @@ \catcode`\@=12% \def\fontscale#1{% -\if#1h\relax -\font\xydashfont=xydash10 scaled \magstephalf -\font\xyatipfont=xyatip10 scaled \magstephalf -\font\xybtipfont=xybtip10 scaled \magstephalf -\font\xybsqlfont=xybsql10 scaled \magstephalf -\font\xycircfont=xycirc10 scaled \magstephalf -\else +\if#1h\relax% +\font\xydashfont=xydash10 scaled \magstephalf% +\font\xyatipfont=xyatip10 scaled \magstephalf% +\font\xybtipfont=xybtip10 scaled \magstephalf% +\font\xybsqlfont=xybsql10 scaled \magstephalf% +\font\xycircfont=xycirc10 scaled \magstephalf% +\else% \font\xydashfont=xydash10 scaled \magstep#1% \font\xyatipfont=xyatip10 scaled \magstep#1% \font\xybtipfont=xybtip10 scaled \magstep#1% \font\xybsqlfont=xybsql10 scaled \magstep#1% \font\xycircfont=xycirc10 scaled \magstep#1% -\fi} +\fi}% -\let\bfig\xy% -\let\efig\endxy% +\def\bfig{\vcenter\bgroup\xy}% +\def\efig{\endxy\egroup}% \def\car#1#2\nil{#1}% @@ -93,97 +102,91 @@ \def\morphismpppp(#1,#2)|#3|/#4/<#5,#6>[#7`#8;#9]{% \xend#1\advance \xend by #5% \yend#2\advance \yend by #6% -\domorphism(#1,#2)|#3|/#4/<#5,#6>[#7`#8;#9]} +\domorphism(#1,#2)|#3|/#4/<#5,#6>[{#7}`{#8};{#9}]}% + \def\domorphism(#1,#2)|#3|/#4/<#5,#6>[#7`#8;#9]{% -\edef\next{#4}% -\ifx\next\empty\relax - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{} (\xend,\yend)*+!!<0ex,.75ex>{#8}% -\else \def\next{\car#4\nil}\fi -\if@\next\relax + % Check if arrow arg has an @; then don't add it.% +\def\next{\car#4.\nil}% +\if@\next\relax% \if#3l% \ifnum #6>0% - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% \else% - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% \fi% \else \if#3m% \setbox0\hbox{$#9$}% - \ifdim \wd0=0pt - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4 (\xend,\yend)*+!!<0ex,.75ex>{#8}% - \else - \setbox\Label=\hbox{\kern .5pt $\labelstyle #9$\kern .5pt}% - \high=\ht\Label \advance\high by 2pt \ht\Label=\high% - \deep=\dp\Label \advance\deep by 2pt \dp\Label=\deep% - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4|-{\box\Label} (\xend,\yend)*+!!<0ex,.75ex>{#8}% - \fi + \ifdim \wd0=0pt% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4 (\xend,\yend)*+!!<0ex,\axis>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4|-*+<1pt,4pt>{\labelstyle#9}% + (\xend,\yend)*+!!<0ex,\axis>{#8}% + \fi% \else \if#3r% \ifnum #6<0% - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% \else% - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% \fi% \else \if#3a% \ifnum #5>0% - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% \else% - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% \fi% \else \if#3b% \ifnum #5<0% - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% \else% - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% \fi% - \else - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar#4 (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4 (\xend,\yend)*+!!<0ex,\axis>{#8}% \fi\fi\fi\fi\fi% + %% Otherwise, have to add @{..}% \else% -\edef\next{#4}% - \ifx\next\empty\relax - \POS(#1,#2)*+!!<0ex,.75ex>{#7}; (\xend,\yend)*+!!<0ex,.75ex>{#8}% - \else \edef\next{#4}% - \ifx\next\empty\relax - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar (\xend,\yend)*+!!<0ex,.75ex>{#8}% - \else \if#3l% + \if#3l% \ifnum #6>0% - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% \else% - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% \fi% \else \if#3m% \setbox0\hbox{$#9$}% - \ifdim \wd0=0pt - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,.75ex>{#8}% - \else - \setbox\Label=\hbox{\kern .5pt $\labelstyle #9$\kern .5pt}% - \high=\ht\Label \advance\high by 2pt \ht\Label=\high% - \deep=\dp\Label \advance\deep by 2pt \dp\Label=\deep% - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}|-{\box\Label} (\xend,\yend)*+!!<0ex,.75ex>{#8}% - \fi + \ifdim \wd0=0pt% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}|-*+<1pt,4pt>{\labelstyle#9}% + (\xend,\yend)*+!!<0ex,\axis>{#8}% + \fi% \else \if#3r% \ifnum #6<0% - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% \else% - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% \fi% \else \if#3a% \ifnum #5>0% - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% \else% - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% \fi% \else \if#3b% \ifnum #5<0% - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% \else% - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,.75ex>{#8}% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% \fi% - \else - \POS(#1,#2)*+!!<0ex,.75ex>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,.75ex>{#8}% - \fi\fi\fi\fi\fi\fi\fi% + \else% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \fi\fi\fi\fi\fi% \fi\ignorespaces}% +\def\vect(#1,#2)/#3/<#4,#5>{% + \xend#1 \yend#2 \advance\xend by #4 \advance\yend by #5% + \POS(#1,#2)\ar#3 (\xend,\yend)}% + \def\squarepppp(#1,#2)|#3|/#4`#5`#6`#7/<#8>[#9]{% \xpos#1\ypos#2% \def\next|##1##2##3##4|{% @@ -289,7 +292,7 @@ \next[#8]% \multiply\deltax by 2% \morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]% -\divide\deltax by 2 +\divide\deltax by 2% \advance\ypos by \deltay\advance\xpos by \deltax% \morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]% \morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]% @@ -309,7 +312,7 @@ \morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]% \multiply\deltax by 2% \morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]% -\advance\xpos by \deltax \divide \deltax by 2 +\advance\xpos by \deltax \divide \deltax by 2% \morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]% \ignorespaces}% @@ -502,7 +505,6 @@ \advance\xpos by \deltax% \morphism(\xpos,\ypos)|\xe|/{#7}/<-\deltax,-\deltay>[\nodec`\noded;\labele]% \ignorespaces}% - \def\Atrianglepair{\ifnextchar({\Atrianglepairp}{\Atrianglepairp(0,0)}}% \def\Atrianglepairp(#1){\ifnextchar|{\Atrianglepairpp(#1)}% {\Atrianglepairpp(#1)|lmrbb|}}% @@ -539,7 +541,9 @@ \ifnextchar<{\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}% {\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}% -\def\place(#1,#2)[#3]{\POS(#1,#2)*+!!<0ex,.75ex>{#3}\ignorespaces}% +\def\pplace[#1](#2,#3)[#4]{\POS(#2,#3)*+!!<0ex,\axis>!#1{#4}\ignorespaces}% +\def\cplace(#1,#2)[#3]{\POS(#1,#2)*+!!<0ex,\axis>{#3}\ignorespaces}% +\def\place{\ifnextchar[{\pplace}{\cplace}}% \def\pullback#1]#2]{\square#1]\trident#2]\ignorespaces}% @@ -585,6 +589,41 @@ \ifnextchar<{\Squarepppp(#1)|#2|/#3`#4`#5`#6/}% {\Squarepppp(#1)|#2|/#3`#4`#5`#6/<\default>}}% +\def\hsquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{% +\Xpos=#1\Ypos=#2% +\def\next|##1##2##3##4##5##6##7|{% + \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}% + \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}% +\next|#3|% +\def\next<##1,##2,##3>{\deltaX=##1\deltaXprime=##2\deltaY=##3}% +\next<#5>% +\def\next[##1`##2`##3`##4`##5`##6]{% + \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}% + \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}% +\next[#6]% +\def\next[##1`##2`##3`##4`##5`##6`##7]{% + \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}% + \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}% +\next[#7]% +\dohsquares/#4/}% + +\def\dohsquares/#1`#2`#3`#4`#5`#6`#7/{% +\squarepppp(\Xpos,\Ypos)|\Xa\Xc\Xd\Xf|/#1`#3`#4`#6/<\deltaX,\deltaY>% + [\Nodea`\Nodeb`\Noded`\Nodee;\Labela`\Labelc`\Labeld`\Labelf]% + \advance \Xpos by \deltaX% +\squarepppp(\Xpos,\Ypos)|\Xb\Xd\Xe\Xg|/#2``#5`#7/<\deltaXprime,\deltaY>% +[\Nodeb`\Nodec`\Nodee`\Nodef;\Labelb``\Labele`\Labelg]% +\ignorespaces}% + +\def\hsquares{\ifnextchar({\hsquaresp}{\hsquaresp(0,0)}}% +\def\hsquaresp(#1){\ifnextchar|{\hsquarespp(#1)}{\hsquarespp% +(#1)|aalmrbb|}}% +\def\hsquarespp(#1)|#2|{\ifnextchar/{\hsquaresppp(#1)|#2|}% + {\hsquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}% +\def\hsquaresppp(#1)|#2|/#3/{% + \ifnextchar<{\hsquarespppp(#1)|#2|/#3/}% + {\hsquarespppp(#1)|#2|/#3/<\default,\default,\default>}}% + \def\hSquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{% \Xpos=#1\Ypos=#2% \def\next|##1##2##3##4##5##6##7|{% @@ -605,7 +644,7 @@ \def\dohSquares/#1`#2`#3`#4`#5`#6`#7/{% \Squarepppp(\Xpos,\Ypos)|\Xa\Xc\Xd\Xf|/#1`#3`#4`#6/<\deltaY>% [\Nodea`\Nodeb`\Noded`\Nodee;\Labela`\Labelc`\Labeld`\Labelf]% - \advance \Xpos by \topw + \advance \Xpos by \topw% \Squarepppp(\Xpos,\Ypos)|\Xb\Xd\Xe\Xg|/#2``#5`#7/<\deltaY>% [\Nodeb`\Nodec`\Nodee`\Nodef;\Labelb``\Labele`\Labelg]% \ignorespaces}% @@ -619,6 +658,42 @@ \ifnextchar<{\hSquarespppp(#1)|#2|/#3/}% {\hSquarespppp(#1)|#2|/#3/<\default>}}% +\def\vsquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{% +\Xpos=#1\Ypos=#2% +\def\next|##1##2##3##4##5##6##7|{% + \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}% + \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}% +\next|#3|% +\def\next<##1,##2,##3>{\deltaX=##1\deltaY=##2\deltaYprime=##3}% +\next<#5>% +\def\next[##1`##2`##3`##4`##5`##6]{% + \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}% + \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}% +\next[#6]% +\def\next[##1`##2`##3`##4`##5`##6`##7]{% + \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}% + \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}% +\next[#7]% +\dovsquares/#4/}% + +\def\dovsquares/#1`#2`#3`#4`#5`#6`#7/{% +\squarepppp(\Xpos,\Ypos)|\Xd\Xe\Xf\Xg|/`#5`#6`#7/<\deltaX,\deltaYprime>% +[\Nodec`\Noded`\Nodee`\Nodef;`\Labele`\Labelf`\Labelg]% + \advance\Ypos by \deltaYprime% +\squarepppp(\Xpos,\Ypos)|\Xa\Xb\Xc\Xd|/#1`#2`#3`#4/<\deltaX,\deltaY>% + [\Nodea`\Nodeb`\Nodec`\Noded;\Labela`\Labelb`\Labelc`\Labeld]% +\ignorespaces}% + +\def\vsquares{\ifnextchar({\vsquaresp}{\vsquaresp(0,0)}}% +\def\vsquaresp(#1){\ifnextchar|{\vsquarespp(#1)}{\vsquarespp% +(#1)|aalmrbb|}}% +\def\vsquarespp(#1)|#2|{\ifnextchar/{\vsquaresppp(#1)|#2|}% + {\vsquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}% +\def\vsquaresppp(#1)|#2|/#3/{% + \ifnextchar<{\vsquarespppp(#1)|#2|/#3/}% + {\vsquarespppp(#1)|#2|/#3/<\default,\default,\default>}}% + + \def\vSquarespppp(#1,#2)|#3|/#4/<#5,#6>[#7;#8]{% \Xpos=#1\Ypos=#2% \def\next|##1##2##3##4##5##6##7|{% @@ -663,7 +738,7 @@ (#1)|#2|/#3`#4`#5`#6/<#7>[#8]% \let\Nodea\nodea\let\Nodeb\nodeb% \let\Nodec\nodec\let\Noded\noded\Xpos=\xpos\Ypos=\ypos% -\deltaX=\deltax \deltaY=\deltay \isquare} +\deltaX=\deltax \deltaY=\deltay \isquare}% \def\cube{\ifnextchar({\osquarep}{\osquarep(0,0)}}% \def\osquarep(#1){\ifnextchar|{\osquarepp(#1)}{\osquarepp(#1)|alrb|}}% @@ -679,7 +754,7 @@ \def\cubep|#1|{\ifnextchar/{\cubepp|#1|}{\cubepp|#1|/>`>`>`>/}}% \def\isquare{\ifnextchar({\isquarep}{\isquarep(\default,\default)}}% -\def\isquarep(#1){\ifnextchar|{\isquarepp(#1)}{\isquarepp(#1)|alrb|}} +\def\isquarep(#1){\ifnextchar|{\isquarepp(#1)}{\isquarepp(#1)|alrb|}}% \def\isquarepp(#1)|#2|{\ifnextchar/{\isquareppp(#1)|#2|}% {\isquareppp(#1)|#2|/>`>`>`>/}}% \def\isquareppp(#1)|#2|/#3`#4`#5`#6/{% @@ -689,114 +764,115 @@ \def\cubepp|#1#2#3#4|/#5`#6`#7`#8/[#9]{% \def\next[##1`##2`##3`##4]{\gdef\Labela{##1}% \gdef\Labelb{##2}\gdef\Labelc{##3}\gdef\Labeld{##4}}\next[#9]% -\xend\xpos \yend\ypos -\Xend\xend\advance\Xend by -\Xpos -\Yend\yend\advance\Yend by -\Ypos +\xend\xpos \yend\ypos% +\Xend\xend\advance\Xend by -\Xpos% +\Yend\yend\advance\Yend by -\Ypos% \domorphism(\Xpos,\Ypos)|#2|/#6/<\Xend,\Yend>[\Nodeb`\nodeb;\Labelb]% -\advance\Xpos by-\deltaX -\advance\xend by-\deltax -\Xend\xend\advance\Xend by -\Xpos +\advance\Xpos by-\deltaX% +\advance\xend by-\deltax% +\Xend\xend\advance\Xend by -\Xpos% \domorphism(\Xpos,\Ypos)|#1|/#5/<\Xend,\Yend>[\Nodea`\nodea;\Labela]% -\advance\Ypos by-\deltaY -\advance\yend by-\deltay -\Yend\yend\advance\Yend by -\Ypos +\advance\Ypos by-\deltaY% +\advance\yend by-\deltay% +\Yend\yend\advance\Yend by -\Ypos% \domorphism(\Xpos,\Ypos)|#3|/#7/<\Xend,\Yend>[\Nodec`\nodec;\Labelc]% -\advance\Xpos by\deltaX -\advance\xend by\deltax -\Xend\xend\advance\Xend by -\Xpos +\advance\Xpos by\deltaX% +\advance\xend by\deltax% +\Xend\xend\advance\Xend by -\Xpos% \domorphism(\Xpos,\Ypos)|#4|/#8/<\Xend,\Yend>[\Noded`\noded;\Labeld]% -\ignorespaces} +\ignorespaces}% -\def\setwdth#1#2{\setbox0\hbox{$\labelstyle#1$}\wdth=\wd0 -\setbox0\hbox{$\labelstyle#2$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi} +\def\setwdth#1#2{\setbox0\hbox{$\labelstyle#1$}\wdth=\wd0% +\setbox0\hbox{$\labelstyle#2$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi}% -\def\topppp/#1/<#2>^#3_#4{\allowbreak\mathrel{% -\ifnum#2=0 - \setwdth{#3}{#4}\deltax=\wdth \divide \deltax by \ul +\def\topppp/#1/<#2>^#3_#4{\:% +\ifnum#2=0% + \setwdth{#3}{#4}\deltax=\wdth \divide \deltax by \ul% \advance \deltax by \defaultmargin \ratchet{\deltax}{200}% -\else \deltax #2 -\fi -\xy\ar@{#1}^{#3}_{#4}(\deltax,0) \endxy -\ignorespaces}} - -\def\toppp/#1/<#2>^#3{\ifnextchar_{\topppp/#1/<#2>^{#3}}{\topppp/#1/<#2>^{#3}_{}}} -\def\topp/#1/<#2>{\ifnextchar^{\toppp/#1/<#2>}{\toppp/#1/<#2>^{}}} -\def\top/#1/{\ifnextchar<{\topp/#1/}{\topp/#1/<0>}} -\def\to{\ifnextchar/{\top}{\top/>/}} - -\def\mon{\to/ >->/} -\def\epi{\to/->>/} -\def\toleft{\to/<-/} -\def\monleft{\to/<-< /} -\def\epileft{\to/<<-/} - - -\def\twopppp/#1`#2/<#3>^#4_#5{\allowbreak\mathrel{% -\ifnum0=#3 - \setwdth{#4}{#5}\deltax=\wdth \divide \deltax by \ul \advance \deltax +\else \deltax #2% +\fi% +\xy\ar@{#1}^{#3}_{#4}(\deltax,0) \endxy% +\:}% + +\def\toppp/#1/<#2>^#3{\ifnextchar_{\topppp/#1/<#2>^{#3}}{\topppp/#1/<#2>^{#3}_{}}}% +\def\topp/#1/<#2>{\ifnextchar^{\toppp/#1/<#2>}{\toppp/#1/<#2>^{}}}% +\def\toop/#1/{\ifnextchar<{\topp/#1/}{\topp/#1/<0>}}% +\def\to{\ifnextchar/{\toop}{\toop/>/}}% + + +\def\mon{\to/ >->/}% +\def\epi{\to/->>/}% +\def\toleft{\to/<-/}% +\def\monleft{\to/<-< /}% +\def\epileft{\to/<<-/}% + + +\def\twopppp/#1`#2/<#3>^#4_#5{\:% +\ifnum0=#3% + \setwdth{#4}{#5}\deltax=\wdth \divide \deltax by \ul \advance \deltax% by \defaultmargin \ratchet{\deltax}{200}% -\else \deltax#3 \fi +\else \deltax#3 \fi% \xy\ar@{#1}@<2.5pt>^{#4}(\deltax,0)% -\ar@{#2}@<-2.5pt>_{#5}(\deltax,0)\endxy\ignorespaces}} +\ar@{#2}@<-2.5pt>_{#5}(\deltax,0)\endxy\:}% \def\twoppp/#1`#2/<#3>^#4{\ifnextchar_{\twopppp/#1`#2/<#3>^{#4}}% - {\twopppp/#1`#2/<#3>^{#4}_{}}} -\def\twopp/#1`#2/<#3>{\ifnextchar^{\twoppp/#1`#2/<#3>}{\twoppp/#1`#2/<#3>^{}}} -\def\twop/#1`#2/{\ifnextchar<{\twopp/#1`#2/}{\twopp/#1`#2/<0>}} -\def\two{\ifnextchar/{\twop}{\twop/>`>/}} - -\def\twoleft{\two/<-`<-/} - -\def\threeppppp/#1`#2`#3/<#4>^#5|#6_#7{\allowbreak\mathrel{% -\ifnum0=#4 -\setbox0\hbox{$\labelstyle#5$}\wdth=\wd0 -\setbox0\hbox{$\labelstyle#6$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi -\setbox0\hbox{$\labelstyle#7$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi -\deltax=\wdth \divide \deltax by \ul \advance \deltax by + {\twopppp/#1`#2/<#3>^{#4}_{}}}% +\def\twopp/#1`#2/<#3>{\ifnextchar^{\twoppp/#1`#2/<#3>}{\twoppp/#1`#2/<#3>^{}}}% +\def\twop/#1`#2/{\ifnextchar<{\twopp/#1`#2/}{\twopp/#1`#2/<0>}}% +\def\two{\ifnextchar/{\twop}{\twop/>`>/}}% + +\def\twoleft{\two/<-`<-/}% + +\def\threeppppp/#1`#2`#3/<#4>^#5|#6_#7{\:% +\ifnum0=#4% +\setbox0\hbox{$\labelstyle#5$}\wdth=\wd0% +\setbox0\hbox{$\labelstyle#6$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi% +\setbox0\hbox{$\labelstyle#7$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi% +\deltax=\wdth \divide \deltax by \ul \advance \deltax by% \defaultmargin \ratchet{\deltax}{300}% -\else\deltax#4 \fi - \xy \ifnum\wd0=0 \ar@{#2}(\deltax,0) - \else \ar@{#2}|{#6}(\deltax,0)\fi -\ar@{#1}@<4.5pt>^{#5}(\deltax,0) -\ar@{#3}@<-4.5pt>_{#7}(\deltax,0)\endxy\ignorespaces}} - -\def\threepppp/#1`#2`#3/<#4>^#5|#6{\ifnextchar_{\threeppppp - /#1`#2`#3/<#4>^{#5}|{#6}}{\threeppppp/#1`#2`#3/<#4>^{#5}|{#6}_{}}} -\def\threeppp/#1`#2`#3/<#4>^#5{\ifnextchar|{\threepppp - /#1`#2`#3/<#4>^{#5}}{\threepppp/#1`#2`#3/<#4>^{#5}|{}}} +\else\deltax#4 \fi% + \xy \ifnum\wd0=0 \ar@{#2}(\deltax,0)% + \else \ar@{#2}|{#6}(\deltax,0)\fi% +\ar@{#1}@<4.5pt>^{#5}(\deltax,0)% +\ar@{#3}@<-4.5pt>_{#7}(\deltax,0)\endxy\:}% + +\def\threepppp/#1`#2`#3/<#4>^#5|#6{\ifnextchar_{\threeppppp% + /#1`#2`#3/<#4>^{#5}|{#6}}{\threeppppp/#1`#2`#3/<#4>^{#5}|{#6}_{}}}% +\def\threeppp/#1`#2`#3/<#4>^#5{\ifnextchar|{\threepppp% + /#1`#2`#3/<#4>^{#5}}{\threepppp/#1`#2`#3/<#4>^{#5}|{}}}% \def\threepp/#1`#2`#3/<#4>{\ifnextchar^{\threeppp/#1`#2`#3/<#4>}% - {\threeppp/#1`#2`#3/<#4>^{}}} + {\threeppp/#1`#2`#3/<#4>^{}}}% \def\threep/#1`#2`#3/{\ifnextchar<{\threepp/#1`#2`#3/}% - {\threepp/#1`#2`#3/<0>}} -\def\three{\ifnextchar/{\threep}{\threep/>`>`>/}} + {\threepp/#1`#2`#3/<0>}}% +\def\three{\ifnextchar/{\threep}{\threep/>`>`>/}}% \def\twoar(#1,#2){{% - \scalefactor{0.1} + \scalefactor{0.1}% \deltax#1\deltay#2% - \deltaX=\ifnum\deltax<0-\fi\deltax - \deltaY=\ifnum\deltay<0-\fi\deltay - \Xend\deltax \multiply \Xend by \deltax - \Yend\deltay \multiply \Yend by \deltay - \advance\Xend by \Yend \multiply \Xend by 3 - \ifnum \deltaX > \deltaY - \multiply \deltaX by 3 \advance \deltaX by \deltaY - \else - \multiply \deltaY by 3 \advance \deltaX by \deltaY - \fi - \multiply\deltax by 500 - \multiply\deltay by 500 - \xpos\deltax \multiply \xpos by 3 \divide\xpos by \deltaX - \Xpos\deltax \multiply \Xpos by \deltaX \divide \Xpos by \Xend - \advance \xpos by \Xpos - \ypos\deltay \multiply \ypos by 3 \divide\ypos by \deltaX - \Ypos\deltay \multiply \Ypos by \deltaX \divide \Ypos by \Xend - \advance \ypos by \Ypos - \xy \ar@{=>}(\xpos,\ypos) \endxy -}\ignorespaces} + \deltaX=\ifnum\deltax<0-\fi\deltax% + \deltaY=\ifnum\deltay<0-\fi\deltay% + \Xend\deltax \multiply \Xend by \deltax% + \Yend\deltay \multiply \Yend by \deltay% + \advance\Xend by \Yend \multiply \Xend by 3% + \ifnum \deltaX > \deltaY% + \multiply \deltaX by 3 \advance \deltaX by \deltaY% + \else% + \multiply \deltaY by 3 \advance \deltaX by \deltaY% + \fi% + \multiply\deltax by 500% + \multiply\deltay by 500% + \xpos\deltax \multiply \xpos by 3 \divide\xpos by \deltaX% + \Xpos\deltax \multiply \Xpos by \deltaX \divide \Xpos by \Xend% + \advance \xpos by \Xpos% + \ypos\deltay \multiply \ypos by 3 \divide\ypos by \deltaX% + \Ypos\deltay \multiply \Ypos by \deltaX \divide \Ypos by \Xend% + \advance \ypos by \Ypos% + \xy \ar@{=>}(\xpos,\ypos) \endxy% +}\ignorespaces}% \def\iiixiiipppppp(#1,#2)|#3|/#4/<#5>#6<#7>[#8;#9]{% - \xpos#1\ypos#2\relax + \xpos#1\ypos#2\relax% \def\next|##1##2##3##4##5##6##7|{\def\xa{##1}\def\xb{##2}% \def\xc{##3}\def\xd{##4}\def\xe{##5}\def\xf{##6}\nextt|##7|}% \def\nextt|##1##2##3##4##5##6|{\def\xg{##1}\def\xh{##2}% @@ -806,7 +882,7 @@ \next<#5>% \def\next<##1,##2>{\deltaX##1\deltaY##2}% \next<#7>% - \def\next##1{\topw##1\relax + \def\next##1{\topw##1\relax% \ifodd\topw \def\zl{}\else\def\zl{\relax}\fi \divide\topw by 2 \ifodd\topw \def\zk{}\else\def\zk{\relax}\fi \divide\topw by 2 \ifodd\topw \def\zj{}\else\def\zj{\relax}\fi \divide\topw by 2 @@ -834,45 +910,45 @@ \next[#9]% \def\next/##1`##2`##3`##4`##5`##6`##7/{% \morphism(\xpos,\ypos)|\xe|/{##5}/<\deltax,0>[\nodeg`\nodeh;\labele]% - \ifx\zi\empty\relax \morphism(\xpos,\ypos)||/<-/<-\deltaX,0>[\nodeg`0;]\fi - \ifx\zd\empty\relax \morphism(\xpos,\ypos)||<0,-\deltaY>[\nodeg`0;]\fi - \advance\xpos by \deltax + \ifx\zi\empty\relax \morphism(\xpos,\ypos)||/<-/<-\deltaX,0>[\nodeg`0;]\fi% + \ifx\zd\empty\relax \morphism(\xpos,\ypos)||<0,-\deltaY>[\nodeg`0;]\fi% + \advance\xpos by \deltax% \morphism(\xpos,\ypos)|\xf|/{##6}/<\deltax,0>[\nodeh`\nodei;\labelf]% - \ifx\ze\empty\relax \morphism(\xpos,\ypos)||<0,-\deltaY>[\nodeh`0;]\fi - \advance\xpos by \deltax - \ifx\zf\empty\relax \morphism(\xpos,\ypos)||<0,-\deltaY>[\nodei`0;]\fi - \ifx\zl\empty\relax \morphism(\xpos,\ypos)||<\deltaX,0>[\nodei`0;]\fi - \advance\ypos by \deltay - \ifx\zk\empty\relax \morphism(\xpos,\ypos)||<\deltaX,0>[\nodef`0;]\fi - \advance\xpos by -\deltax + \ifx\ze\empty\relax \morphism(\xpos,\ypos)||<0,-\deltaY>[\nodeh`0;]\fi% + \advance\xpos by \deltax% + \ifx\zf\empty\relax \morphism(\xpos,\ypos)||<0,-\deltaY>[\nodei`0;]\fi% + \ifx\zl\empty\relax \morphism(\xpos,\ypos)||<\deltaX,0>[\nodei`0;]\fi% + \advance\ypos by \deltay% + \ifx\zk\empty\relax \morphism(\xpos,\ypos)||<\deltaX,0>[\nodef`0;]\fi% + \advance\xpos by -\deltax% \morphism(\xpos,\ypos)|\xd|/{##4}/<\deltax,0>[\nodee`\nodef;\labeld]% - \advance\xpos by -\deltax + \advance\xpos by -\deltax% \morphism(\xpos,\ypos)|\xc|/{##3}/<\deltax,0>[\noded`\nodee;\labelc]% - \ifx\zh\empty\relax \morphism(\xpos,\ypos)||/<-/<-\deltaX,0>[\noded`0;]\fi - \advance\ypos by \deltay + \ifx\zh\empty\relax \morphism(\xpos,\ypos)||/<-/<-\deltaX,0>[\noded`0;]\fi% + \advance\ypos by \deltay% \morphism(\xpos,\ypos)|\xa|/{##1}/<\deltax,0>[\nodea`\nodeb;\labela]% - \ifx\zg\empty\relax \morphism(\xpos,\ypos)||/<-/<-\deltaX,0>[\nodea`0;]\fi - \ifx\za\empty\relax \morphism(\xpos,\ypos)||/<-/<0,\deltaY>[\nodea`0;]\fi - \advance\xpos by \deltax + \ifx\zg\empty\relax \morphism(\xpos,\ypos)||/<-/<-\deltaX,0>[\nodea`0;]\fi% + \ifx\za\empty\relax \morphism(\xpos,\ypos)||/<-/<0,\deltaY>[\nodea`0;]\fi% + \advance\xpos by \deltax% \morphism(\xpos,\ypos)|\xb|/{##2}/<\deltax,0>[\nodeb`\nodec;\labelb]% - \ifx\zb\empty\relax \morphism(\xpos,\ypos)||/<-/<0,\deltaY>[\nodeb`0;]\fi - \advance\xpos by \deltax - \ifx\zc\empty\relax \morphism(\xpos,\ypos)||/<-/<0,\deltaY>[\nodec`0;]\fi - \ifx\zj\empty\relax \morphism(\xpos,\ypos)||<\deltaX,0>[\nodec`0;]\fi + \ifx\zb\empty\relax \morphism(\xpos,\ypos)||/<-/<0,\deltaY>[\nodeb`0;]\fi% + \advance\xpos by \deltax% + \ifx\zc\empty\relax \morphism(\xpos,\ypos)||/<-/<0,\deltaY>[\nodec`0;]\fi% + \ifx\zj\empty\relax \morphism(\xpos,\ypos)||<\deltaX,0>[\nodec`0;]\fi% \nextt/##7/}% \def\nextt/##1`##2`##3`##4`##5`##6/{% \morphism(\xpos,\ypos)|\xi|/{##3}/<0,-\deltay>[\nodec`\nodef;\labeli]% - \advance\xpos by -\deltax + \advance\xpos by -\deltax% \morphism(\xpos,\ypos)|\xh|/{##2}/<0,-\deltay>[\nodeb`\nodee;\labelh]% - \advance\xpos by -\deltax + \advance\xpos by -\deltax% \morphism(\xpos,\ypos)|\xg|/{##1}/<0,-\deltay>[\nodea`\noded;\labelg]% - \advance\ypos by -\deltay + \advance\ypos by -\deltay% \morphism(\xpos,\ypos)|\xj|/{##4}/<0,-\deltay>[\noded`\nodeg;\labelj]% - \advance\xpos by \deltax + \advance\xpos by \deltax% \morphism(\xpos,\ypos)|\xk|/{##5}/<0,-\deltay>[\nodee`\nodeh;\labelk]% - \advance\xpos by \deltax + \advance\xpos by \deltax% \morphism(\xpos,\ypos)|\xl|/{##6}/<0,-\deltay>[\nodef`\nodei;\labell]}% - \next/#4/\ignorespaces} + \next/#4/\ignorespaces}% \def\iiixiii{\ifnextchar({\iiixiiip}{\iiixiiip(0,0)}}% \def\iiixiiip(#1){\ifnextchar|{\iiixiiipp(#1)}% @@ -889,7 +965,7 @@ {\iiixiiipppppp(#1)|#2|/#3/<#4>{#5}<400,400>}}% \def\iiixiipppppp(#1,#2)|#3|/#4/<#5>#6<#7>[#8;#9]{% - \xpos#1\ypos#2\relax + \xpos#1\ypos#2\relax% \def\next|##1##2##3##4##5##6##7|{\def\xa{##1}\def\xb{##2}% \def\xc{##3}\def\xd{##4}\def\xe{##5}\def\xf{##6}\def\xg{##7}}% \next|#3|% @@ -898,11 +974,11 @@ \deltaX#7 \topw#6 \def\next{% - \ifodd\topw \def\zd{}\else\def\zd{\relax}\fi \divide\topw by 2 - \ifodd\topw \def\zc{}\else\def\zc{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\za{}\else\def\za{\relax}\fi \divide\topw by 2 \ifodd\topw \def\zb{}\else\def\zb{\relax}\fi \divide\topw by 2 - \ifodd\topw \def\za{}\else\def\za{\relax}\fi}% - \next + \ifodd\topw \def\zc{}\else\def\zc{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\zd{}\else\def\zd{\relax}\fi}% + \next% \def\next[##1`##2`##3`##4`##5`##6]{% \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% \def\noded{##4}\def\nodee{##5}\def\nodef{##6}}% @@ -912,26 +988,26 @@ \def\labeld{##4}\def\labele{##5}\def\labelf{##6}\def\labelg{##7}}% \next[#9]% \def\next/##1`##2`##3`##4`##5`##6`##7/{% - \ifx\zc\empty\relax\morphism(\xpos,\ypos)<\deltaX,0>[0`\noded;]\fi - \advance\xpos by\deltaX + \ifx\zc\empty\relax\morphism(\xpos,\ypos)<\deltaX,0>[0`\noded;]\fi% + \advance\xpos by\deltaX% \morphism(\xpos,\ypos)|\xc|/##3/<\deltax,0>[\noded`\nodee;\labelc]% - \advance\xpos by \deltax + \advance\xpos by \deltax% \morphism(\xpos,\ypos)|\xd|/##4/<\deltax,0>[\nodee`\nodef;\labeld]% - \advance\xpos by \deltax - \ifx\zd\empty\relax \morphism(\xpos,\ypos)<\deltaX,0>[\nodef`0;]\fi + \advance\xpos by \deltax% + \ifx\zd\empty\relax \morphism(\xpos,\ypos)<\deltaX,0>[\nodef`0;]\fi% \advance\xpos by -\deltaX \advance\xpos by -\deltax \advance\xpos by -\deltax \advance\ypos by \deltay - \ifx\za\empty\relax\morphism(\xpos,\ypos)<\deltaX,0>[0`\nodea;]\fi - \advance\xpos by\deltaX + \ifx\za\empty\relax\morphism(\xpos,\ypos)<\deltaX,0>[0`\nodea;]\fi% + \advance\xpos by\deltaX% \morphism(\xpos,\ypos)|\xa|/##1/<\deltax,0>[\nodea`\nodeb;\labela]% \morphism(\xpos,\ypos)|\xe|/##5/<0,-\deltay>[\nodea`\noded;\labele]% - \advance\xpos by \deltax + \advance\xpos by \deltax% \morphism(\xpos,\ypos)|\xb|/##2/<\deltax,0>[\nodeb`\nodec;\labelb]% \morphism(\xpos,\ypos)|\xf|/##6/<0,-\deltay>[\nodeb`\nodee;\labelf]% - \advance\xpos by \deltax + \advance\xpos by \deltax% \morphism(\xpos,\ypos)|\xg|/##7/<0,-\deltay>[\nodec`\nodef;\labelg]% \ifx\zb\empty\relax \morphism(\xpos,\ypos)<\deltaX,0>[\nodec`0;]\fi}% - \next/#4/\ignorespaces} + \next/#4/\ignorespaces}% \def\iiixii{\ifnextchar({\iiixiip}{\iiixiip(0,0)}}% @@ -946,7 +1022,128 @@ <#4>{0}<0>}{\iiixiippppp(#1)|#2|/#3/<#4>}}% \def\iiixiippppp(#1)|#2|/#3/<#4>#5{\ifnextchar<% {\iiixiipppppp(#1)|#2|/#3/<#4>{#5}}% - {\iiixiipppppp(#1)|#2|/#3/<#4>{#5}<0>}}% + {\iiixiipppppp(#1)|#2|/#3/<#4>{#5}<400>}}% + +\def\node#1(#2,#3)[#4]{% +\expandafter\gdef\csname x@#1\endcsname{#2}% +\expandafter\gdef\csname y@#1\endcsname{#3}% +\expandafter\gdef\csname ob@#1\endcsname{#4}% +\ignorespaces}% + +\newcount\xfinish% +\newcount\yfinish% +\def\arrow{\ifnextchar|{\arrowp}{\arrowp|a|}}% +\def\arrowp|#1|{\ifnextchar/{\arrowpp|#1|}{\arrowpp|#1|/>/}}% +\def\arrowpp|#1|/#2/[#3`#4;#5]{% +\xfinish=\csname x@#4\endcsname% +\yfinish=\csname y@#4\endcsname% +\advance\xfinish by -\csname x@#3\endcsname% +\advance\yfinish by -\csname y@#3\endcsname% +\morphism(\csname x@#3\endcsname,\csname y@#3\endcsname)|#1|/{#2}/% +<\xfinish,\yfinish>[\csname ob@#3\endcsname`\csname ob@#4\endcsname;#5]% +}% + + +\def\Loop(#1,#2)#3(#4,#5){\POS(#1,#2)*+!!<0ex,\axis>{#3}\ar@(#4,#5)}% +\def\iloop#1(#2,#3){\xy\Loop(0,0)#1(#2,#3)\endxy}% + \catcode`\@=\atcode% -\endinput +\endinput% +\entrymodifiers={+!!<0pt,\fontdimen22\textfont2>}% + + + + the \xybox does not allow control over *where*,% +inside the <object> that it builds,% +the reference point is to be located.% + +Accordingly, I've just devised a variant that builds% +the same kind of compound <object>, but also sets% +its reference-point to be at the <coord> of the% +last <POS> within the box; i.e., the <coord> for% +the <object> that has been built is at the current% +<POS> when the Xy-pic parsing has been completed.% +The LRUD extents are the size of the complete box;% +i.e., *not* the extents of the final <POS>.% + +Here is coding that should go in your document's% +preamble -- eventually it should be added to xy.tex% + + + +--------- start of new Xy-pic definitions -------% + + +> \makeatletter % adjust the \catcode of @% + + this is a better definition for the new \xyobjbox% + + \xydef@\xyobjbox#1{\xy% + \let \PATHafterPOS\PATHafterPOS@default% + \let \arsavedPATHafterPOS@@\relax% + \let\afterar@@\relax% + \POS#1\endxyobj\Edge@c={\rectangleEdge}\computeLeftUpness@}% + +> \xydef@\endxyobj{\if\inxy@\else\xyerror@{Unexpected \string\endxy}{}\fi% +> \relax% +> \dimen@=\Y@max \advance\dimen@-\Y@min% +> \ifdim\dimen@<\z@ \dimen@=\z@ \Y@min=\z@ \Y@max=\z@ \fi% +> \dimen@=\X@max \advance\dimen@-\X@min% +> \ifdim\dimen@<\z@ \dimen@=\z@ \X@min=\z@ \X@max=\z@ \fi% +> \edef\tmp@{\egroup% +> \setboxz@h{\kern-\the\X@min \boxz@}% +> \ht\z@=\the\Y@max \dp\z@=-\the\Y@min \wdz@=\the\dimen@% +> \noexpand\maybeunraise@ \raise\dimen@\boxz@% +> \noexpand\recoverXyStyle@ \egroup \noexpand\xy@end% +> \U@c=\the\Y@max \advance\U@c-\the\Y@c% +> \D@c=-\the\Y@min \advance\D@c\the\Y@c% +> \L@c=-\the\X@min \advance\L@c\the\X@c% +> \R@c=\the\X@max \advance\R@c-\the\X@c% +> }\tmp@}% +>% +> \makeatother % revert \catcode of @% +>% +> --------- end of new Xy-pic definitions -------% +\makeatletter% +\gdef\xymerge@MinMax{}% +\xydef@\twocell{\hbox\bgroup\xysave@MinMax\@twocell}% +\xydef@\uppertwocell{\hbox\bgroup\xysave@MinMax\@uppertwocell}% +\xydef@\lowertwocell{\hbox\bgroup\xysave@MinMax\@lowertwocell}% +\xydef@\compositemap{\hbox\bgroup\xysave@MinMax\@compositemap}% +\xydef@\twocelll#1#{\hbox\bgroup\xysave@MinMax\xy@\save\save@\@twocelll{% +#1}}% + +\xydef@\xysave@MinMax{\xdef\xymerge@MinMax{% + \noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi% + \noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi% + \noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi% + \noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi% + }}% +\xydef@\drop@Twocell{\boxz@ \xymerge@MinMax}% + + +\xydef@\twocell@DONE{% + \edef\tmp@{\egroup% + \X@min=\the\X@min \X@max=\the\X@max% + \Y@min=\the\Y@min \Y@max=\the\Y@max}\tmp@% + \L@c=\X@c \advance\L@c-\X@min \R@c=\X@max \advance\R@c-\X@c% + \D@c=\Y@c \advance\D@c-\Y@min \U@c=\Y@max \advance\U@c-\Y@c% + \ht\z@=\U@c \dp\z@=\D@c \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@% + \computeLeftUpness@% + \setboxz@h{\kern-\X@p \raise-\Y@c\boxz@ }% + \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \ht\z@=\U@c \dp\z@=\D@c% + \Edge@c={\rectangleEdge}\Invisible@false \Hidden@false% + \edef\Drop@@{\noexpand\drop@Twocell% + \noexpand\def\noexpand\Leftness@{\Leftness@}% + \noexpand\def\noexpand\Upness@{\Upness@}}% + \edef\Connect@@{\noexpand\connect@Twocell% + \noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi% + \noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi% + \noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi% + \noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi }% + \xymerge@MinMax% +}% +\makeatother% + + diff --git a/Master/texmf-dist/tex/latex/barr/diagram.tex b/Master/texmf-dist/tex/latex/barr/diagram.tex deleted file mode 100644 index 2a322759d3b..00000000000 --- a/Master/texmf-dist/tex/latex/barr/diagram.tex +++ /dev/null @@ -1,1048 +0,0 @@ -% This should appear in a file named diagram.tex -% Copyright 1988,1989 Michael Barr -% Department of Mathematics and Statistics -% McGill University -% 805 Sherbrooke St., W -% Montreal, Quebec, Canada -% H3P 1S4 -% -% barr@triples.math.mcgill.ca -% -% All commercial rights reserved. May be freely distributed -% and used with the following exceptions: -% 1. No commercial use without explicit permission. -% 2. It may not be used by any employee of a telephone -% company. -% 3. It may not be distributed without this notice. -% -% Last revised 91-05-04 - -% Ascii character test: -% 32: 33: ! 34: " 35: # 36: $ 37: % 38: & 39: ' -% 40: ( 41: ) 42: * 43: + 44: , 45: - 46: . 47: / -% 48: 0 49: 1 50: 2 51: 3 52: 4 53: 5 54: 6 55: 7 -% 56: 8 57: 9 58: : 59: ; 60: < 61: = 62: > 63: ? -% 64: @ 65: A 66: B 67: C 68: D 69: E 70: F 71: G -% 72: H 73: I 74: J 75: K 76: L 77: M 78: N 79: O -% 80: P 81: Q 82: R 83: S 84: T 85: U 86: V 87: W -% 88: X 89: Y 90: Z 91: [ 92: \ 93: ] 94: ^ 95: _ -% 96: ` 97: a 98: b 99: c 100: d 101: e 102: f 103: g -% 104: h 105: i 106: j 107: k 108: l 109: m 110: n 111: o -% 112: p 113: q 114: r 115: s 116: t 117: u 118: v 119: w -% 120: x 121: y 122: z 123: { 124: | 125: } 126: ~ - - -\makeatletter - -\def\diagram{\m@th\leftwidth=\z@ \rightwidth=\z@ \topheight=\z@ -\botheight=\z@ \setbox\@picbox\hbox\bgroup} - -\def\enddiagram{\egroup\wd\@picbox\rightwidth\unitlength -\ht\@picbox\topheight\unitlength \dp\@picbox\botheight\unitlength -\hskip\leftwidth\unitlength\box\@picbox} - -\def\bfig{\begin{diagram}} -\def\efig{\end{diagram}} -\newcount\wideness \newcount\leftwidth \newcount\rightwidth -\newcount\highness \newcount\topheight \newcount\botheight - -\def\ratchet#1#2{\ifnum#1<#2 \global #1=#2 \fi} - -\def\putbox(#1,#2)#3{% -\horsize{\wideness}{#3} \divide\wideness by 2 -{\advance\wideness by #1 \ratchet{\rightwidth}{\wideness}} -{\advance\wideness by -#1 \ratchet{\leftwidth}{\wideness}} -\vertsize{\highness}{#3} \divide\highness by 2 -{\advance\highness by #2 \ratchet{\topheight}{\highness}} -{\advance\highness by -#2 \ratchet{\botheight}{\highness}} -\put(#1,#2){\makebox(0,0){$#3$}}} - -\def\putlbox(#1,#2)#3{% -\horsize{\wideness}{#3} -{\advance\wideness by #1 \ratchet{\rightwidth}{\wideness}} -{\ratchet{\leftwidth}{-#1}} -\vertsize{\highness}{#3} \divide\highness by 2 -{\advance\highness by #2 \ratchet{\topheight}{\highness}} -{\advance\highness by -#2 \ratchet{\botheight}{\highness}} -\put(#1,#2){\makebox(0,0)[l]{$#3$}}} - -\def\putrbox(#1,#2)#3{% -\horsize{\wideness}{#3} -{\ratchet{\rightwidth}{#1}} -{\advance\wideness by -#1 \ratchet{\leftwidth}{\wideness}} -\vertsize{\highness}{#3} \divide\highness by 2 -{\advance\highness by #2 \ratchet{\topheight}{\highness}} -{\advance\highness by -#2 \ratchet{\botheight}{\highness}} -\put(#1,#2){\makebox(0,0)[r]{$#3$}}} - - -\def\adjust[#1]{} % For compatibility - -\newcount \coefa -\newcount \coefb -\newcount \coefc -\newcount\tempcounta -\newcount\tempcountb -\newcount\tempcountc -\newcount\tempcountd -\newcount\xext -\newcount\yext -\newcount\xoff -\newcount\yoff -\newcount\gap% -\newcount\arrowtypea -\newcount\arrowtypeb -\newcount\arrowtypec -\newcount\arrowtyped -\newcount\arrowtypee -\newcount\height -\newcount\width -\newcount\xpos -\newcount\ypos -\newcount\run -\newcount\rise -\newcount\arrowlength -\newcount\halflength -\newcount\arrowtype -\newdimen\tempdimen -\newdimen\xlen -\newdimen\ylen -\newsavebox{\tempboxa}% -\newsavebox{\tempboxb}% -\newsavebox{\tempboxc}% - -\newdimen\w@dth - -\def\setw@dth#1#2{\setbox\z@\hbox{\m@th$#1$}\w@dth=\wd\z@ -\setbox\@ne\hbox{\m@th$#2$}\ifnum\w@dth<\wd\@ne \w@dth=\wd\@ne \fi -\advance\w@dth by 1.2em} - -%The definitions below look more elaborate than they need to be. -%The reason is that an empty asscript will still cause extra vertical -%spacing and the only way to avoid ugly extra space seems to be using -%some such method as this. - -\def\t@^#1_#2{\allowbreak\def\n@one{#1}\def\n@two{#2}\mathrel -{\setw@dth{#1}{#2} -\mathop{\hbox to \w@dth{\rightarrowfill}}\limits -\ifx\n@one\empty\else ^{\box\z@}\fi -\ifx\n@two\empty\else _{\box\@ne}\fi}} -%\def\t@^#1_#2{\mathrel{\mathop{\hbox{\rightarrowfill}}\limits -%^{\mkern12mu#1\mkern12mu}_{\mkern12mu#2\mkern12mu}}} -\def\t@@^#1{\@ifnextchar_{\t@^{#1}}{\t@^{#1}_{}}} -\def\to{\@ifnextchar^{\t@@}{\t@@^{}}} - -\def\t@left^#1_#2{\def\n@one{#1}\def\n@two{#2}\mathrel{\setw@dth{#1}{#2} -\mathop{\hbox to \w@dth{\leftarrowfill}}\limits -\ifx\n@one\empty\else ^{\box\z@}\fi -\ifx\n@two\empty\else _{\box\@ne}\fi}} -%\def\t@left^#1_#2{\mathrel{\mathop{\hbox{\leftarrowfill}}\limits -%^{\mkern12mu#1\mkern12mu}_{\mkern12mu#2\mkern12mu}}} -\def\t@@left^#1{\@ifnextchar_{\t@left^{#1}}{\t@left^{#1}_{}}} -\def\toleft{\@ifnextchar^{\t@@left}{\t@@left^{}}} - -\def\two@^#1_#2{\allowbreak -\def\n@one{#1}\def\n@two{#2}\mathrel{\setw@dth{#1}{#2} -\mathop{\vcenter{\lineskip\z@\baselineskip\z@ - \hbox to \w@dth{\rightarrowfill}% - \hbox to \w@dth{\rightarrowfill}}% - }\limits -\ifx\n@one\empty\else ^{\box\z@}\fi -\ifx\n@two\empty\else _{\box\@ne}\fi}} -\def\tw@@^#1{\@ifnextchar _{\two@^{#1}}{\two@^{#1}_{}}} -\def\two{\@ifnextchar ^{\tw@@}{\tw@@^{}}} - -\def\tofr@^#1_#2{\def\n@one{#1}\def\n@two{#2}\mathrel{\setw@dth{#1}{#2} -\mathop{\vcenter{\hbox to \w@dth{\rightarrowfill}\kern-1.7ex - \hbox to \w@dth{\leftarrowfill}}% - }\limits -\ifx\n@one\empty\else ^{\box\z@}\fi -\ifx\n@two\empty\else _{\box\@ne}\fi}} -\def\t@fr@^#1{\@ifnextchar_ {\tofr@^{#1}}{\tofr@^{#1}_{}}} -\def\tofro{\@ifnextchar^ {\t@fr@}{\t@fr@^{}}} - -\def\epi{\mathop{\mathchar"221\mkern -12mu\mathchar"221}\limits} -\def\leftepi{\mathop{\mathchar"220\mkern -12mu\mathchar"220}\limits} -\def\mon{\mathop{\m@th\hbox to - 14.6\P@{\lasyb\char'51\hskip-2.1\P@$\arrext$\hss -$\mathord\rightarrow$}}\limits} % width of \epi -\def\leftmono{\mathrel{\m@th\hbox to -14.6\P@{$\mathord\leftarrow$\hss$\arrext$\hskip-2.1\P@\lasyb\char'50% -}}\limits} % width of \epi -\mathchardef\arrext="0200 % amr minus for arrow extension (see \into) - - -\setlength{\unitlength}{.01em}% -\def\settypes(#1,#2,#3){\arrowtypea#1 \arrowtypeb#2 \arrowtypec#3} -\def\settoheight#1#2{\setbox\@tempboxa\hbox{#2}#1\ht\@tempboxa\relax}% -\def\settodepth#1#2{\setbox\@tempboxa\hbox{#2}#1\dp\@tempboxa\relax}% -\def\settokens`#1`#2`#3`#4`{% - \def\tokena{#1}\def\tokenb{#2}\def\tokenc{#3}\def\tokend{#4}} -\def\setsqparms[#1`#2`#3`#4;#5`#6]{% -\arrowtypea #1 -\arrowtypeb #2 -\arrowtypec #3 -\arrowtyped #4 -\width #5 -\height #6 -} -\def\setpos(#1,#2){\xpos=#1 \ypos#2} - - - -\def\settriparms[#1`#2`#3;#4]{\settripairparms[#1`#2`#3`1`1;#4]}% - -\def\settripairparms[#1`#2`#3`#4`#5;#6]{% -\arrowtypea #1 -\arrowtypeb #2 -\arrowtypec #3 -\arrowtyped #4 -\arrowtypee #5 -\width #6 -\height #6 -} - -\def\resetparms{\settripairparms[1`1`1`1`1;500]\width 500}%default values% - -\resetparms - -\def\mvector(#1,#2)#3{%% -\put(0,0){\vector(#1,#2){#3}}% -\put(0,0){\vector(#1,#2){26}}% -} -\def\evector(#1,#2)#3{{%% -\arrowlength #3 -\put(0,0){\vector(#1,#2){\arrowlength}}% -\advance \arrowlength by-30 -\put(0,0){\vector(#1,#2){\arrowlength}}% -}} - -\def\horsize#1#2{% -\settowidth{\tempdimen}{$#2$}% -#1=\tempdimen -\divide #1 by\unitlength -} - -\def\vertsize#1#2{% -\settoheight{\tempdimen}{$#2$}% -#1=\tempdimen -\settodepth{\tempdimen}{$#2$}% -\advance #1 by\tempdimen -\divide #1 by\unitlength -} - -\def\putvector(#1,#2)(#3,#4)#5#6{{% -\ifnum3<\arrowtype -\putdashvector(#1,#2)(#3,#4)#5\arrowtype -\else -\ifnum\arrowtype<-3 -\putdashvector(#1,#2)(#3,#4)#5\arrowtype -\else -\xpos=#1 -\ypos=#2 -\run=#3 -\rise=#4 -\arrowlength=#5 -\ifnum \arrowtype<0 - \ifnum \run=0 - \advance \ypos by-\arrowlength - \else - \tempcounta \arrowlength - \multiply \tempcounta by\rise - \divide \tempcounta by\run - \ifnum\run>0 - \advance \xpos by\arrowlength - \advance \ypos by\tempcounta - \else - \advance \xpos by-\arrowlength - \advance \ypos by-\tempcounta - \fi - \fi - \multiply \arrowtype by-1 - \multiply \rise by-1 - \multiply \run by-1 -\fi -\ifcase \arrowtype -\or \put(\xpos,\ypos){\vector(\run,\rise){\arrowlength}}% -\or \put(\xpos,\ypos){\mvector(\run,\rise)\arrowlength}% -\or \put(\xpos,\ypos){\evector(\run,\rise){\arrowlength}}% -\fi\fi\fi -}} - -\def\putsplitvector(#1,#2)#3#4{%% -\xpos #1 -\ypos #2 -\arrowtype #4 -\halflength #3 -\arrowlength #3 -\gap 140 -\advance \halflength by-\gap -\divide \halflength by2 -\ifnum\arrowtype>0 - \ifcase \arrowtype - \or \put(\xpos,\ypos){\line(0,-1){\halflength}}% - \advance\ypos by-\halflength - \advance\ypos by-\gap - \put(\xpos,\ypos){\vector(0,-1){\halflength}}% - \or \put(\xpos,\ypos){\line(0,-1)\halflength}% - \put(\xpos,\ypos){\vector(0,-1)3}% - \advance\ypos by-\halflength - \advance\ypos by-\gap - \put(\xpos,\ypos){\vector(0,-1){\halflength}}% - \or \put(\xpos,\ypos){\line(0,-1)\halflength}% - \advance\ypos by-\halflength - \advance\ypos by-\gap - \put(\xpos,\ypos){\evector(0,-1){\halflength}}% - \fi -\else \arrowtype=-\arrowtype - \ifcase\arrowtype - \or \advance \ypos by-\arrowlength - \put(\xpos,\ypos){\line(0,1){\halflength}}% - \advance\ypos by\halflength - \advance\ypos by\gap - \put(\xpos,\ypos){\vector(0,1){\halflength}}% - \or \advance \ypos by-\arrowlength - \put(\xpos,\ypos){\line(0,1)\halflength}% - \put(\xpos,\ypos){\vector(0,1)3}% - \advance\ypos by\halflength - \advance\ypos by\gap - \put(\xpos,\ypos){\vector(0,1){\halflength}}% - \or \advance \ypos by-\arrowlength - \put(\xpos,\ypos){\line(0,1)\halflength}% - \advance\ypos by\halflength - \advance\ypos by\gap - \put(\xpos,\ypos){\evector(0,1){\halflength}}% - \fi -\fi -} - -\def\putmorphism(#1)(#2,#3)[#4`#5`#6]#7#8#9{{% -\run #2 -\rise #3 -\ifnum\rise=0 - \puthmorphism(#1)[#4`#5`#6]{#7}{#8}#9% -\else\ifnum\run=0 - \putvmorphism(#1)[#4`#5`#6]{#7}{#8}#9% -\else -\setpos(#1)% -\arrowlength #7 -\arrowtype #8 -\ifnum\run=0 -\else\ifnum\rise=0 -\else -\ifnum\run>0 - \coefa=1 -\else - \coefa=-1 -\fi -\ifnum\arrowtype>0 - \coefb=0 - \coefc=-1 -\else - \coefb=\coefa - \coefc=1 - \arrowtype=-\arrowtype -\fi -\width=2 -\multiply \width by\run -\divide \width by\rise -\ifnum \width<0 \width=-\width\fi -\advance\width by60 -\if l#9 \width=-\width\fi -\putbox(\xpos,\ypos){#4}% %node 1 -{\multiply \coefa by\arrowlength% %node 2 -\advance\xpos by\coefa -\multiply \coefa by\rise -\divide \coefa by\run -\advance \ypos by\coefa -\putbox(\xpos,\ypos){#5} }% -{\multiply \coefa by\arrowlength% %label -\divide \coefa by2 -\advance \xpos by\coefa -\advance \xpos by\width -\multiply \coefa by\rise -\divide \coefa by\run -\advance \ypos by\coefa -\if l#9% - \putrbox(\xpos,\ypos){#6}% -\else\if r#9% - \putlbox(\xpos,\ypos){#6}% -\fi\fi }% -{\multiply \rise by-\coefc% %arrow -\multiply \run by-\coefc -\multiply \coefb by\arrowlength -\advance \xpos by\coefb -\multiply \coefb by\rise -\divide \coefb by\run -\advance \ypos by\coefb -\multiply \coefc by70 -\advance \ypos by\coefc -\multiply \coefc by\run -\divide \coefc by\rise -\advance \xpos by\coefc -\multiply \coefa by140 -\multiply \coefa by\run -\divide \coefa by\rise -\advance \arrowlength by\coefa -\ifcase\arrowtype -\or \put(\xpos,\ypos){\vector(\run,\rise){\arrowlength}}% -\or \put(\xpos,\ypos){\mvector(\run,\rise){\arrowlength}}% -\or \put(\xpos,\ypos){\evector(\run,\rise){\arrowlength}}% -\fi}\fi\fi\fi\fi}} - - -\newcount\numbdashes \newcount\lengthdash \newcount\increment - -\def\howmanydashes{% Actually returns both number and length -\numbdashes=\arrowlength \lengthdash=40 -\divide\numbdashes by \lengthdash -\lengthdash=\arrowlength -\divide\lengthdash by \numbdashes -%This futzing around is to minimize round-off error. -\increment=\lengthdash -\multiply\lengthdash by 3 -\divide\lengthdash by 5 -} - -\def\putdashvector(#1)(#2,#3)#4#5{% -\ifnum#3=0 \putdashhvector(#1){#4}#5 -\else -\ifnum#2=0 -\putdashvvector(#1){#4}#5\fi\fi} - -\def\putdashhvector(#1,#2)#3#4{{% -\arrowlength=#3 \howmanydashes -\multiput(#1,#2)(\increment,0){\numbdashes}% -{\vrule height .4pt width \lengthdash\unitlength} -\arrowtype=#4 \xpos=#1 -\ifnum\arrowtype<0 \advance\arrowtype by 7 \fi -\ifcase\arrowtype -\or \advance\xpos by 10 - \put(\xpos,#2){\vector(-1,0){\lengthdash}} - \advance\xpos by 40 - \put(\xpos,#2){\vector(-1,0){\lengthdash}} -\or \advance \xpos by 10 - \put(\xpos,#2){\vector(-1,0){\lengthdash}} - \advance\xpos by \arrowlength - \advance\xpos by -50 - \put(\xpos,#2){\vector(-1,0){\lengthdash}} -\or \advance\xpos by 10 - \put(\xpos,#2){\vector(-1,0){\lengthdash}} -\or \advance\xpos by \arrowlength - \advance\xpos by -\lengthdash - \put(\xpos,#2){\vector(1,0){\lengthdash}} -\or {\advance\xpos by 10 - \put(\xpos,#2){\vector(1,0){\lengthdash}}} - \advance\xpos by \arrowlength - \advance\xpos by -\lengthdash - \put(\xpos,#2){\vector(1,0){\lengthdash}} -\or \advance\xpos by \arrowlength - \advance\xpos by -\lengthdash - \put(\xpos,#2){\vector(1,0){\lengthdash}} - \advance\xpos by -40 - \put(\xpos,#2){\vector(1,0){\lengthdash}} - \fi -}} - -\def\putdashvvector(#1,#2)#3#4{{% -\arrowlength=#3 \howmanydashes -\ypos=#2 \advance\ypos by -\arrowlength -\multiput(#1,#2)(0,\increment){\numbdashes}% - {\vrule width .4pt height \lengthdash\unitlength} -\arrowtype=#4 \ypos=#2 -\ifnum\arrowtype<0 \advance\arrowtype by 7 \fi -\ifcase\arrowtype -\or \advance\ypos by \arrowlength \advance\ypos by -40 - \put(#1,\ypos){\vector(0,1){\lengthdash}} - \advance\ypos by -40 - \put(#1,\ypos){\vector(0,1){\lengthdash}} -\or \advance\ypos by 10 - \put(#1,\ypos){\vector(0,1){\lengthdash}} - \advance\ypos by \arrowlength \advance\ypos by -40 - \put(#1,\ypos){\vector(0,1){\lengthdash}} -\or \advance\ypos by \arrowlength \advance\ypos by -40 - \put(#1,\ypos){\vector(0,1){\lengthdash}} -\or \advance\ypos by 10 - \put(#1,\ypos){\vector(0,-1){\lengthdash}} -\or \advance\ypos by 10 - \put(#1,\ypos){\vector(0,-1){\lengthdash}} - \advance\ypos by \arrowlength \advance\ypos by -40 - \put(#1,\ypos){\vector(0,-1){\lengthdash}} -\or \advance\ypos by 10 - \put(#1,\ypos){\vector(0,-1){\lengthdash}} - \advance\ypos by 40 - \put(#1,\ypos){\vector(0,-1){\lengthdash}} -\fi -}} - -\def\puthmorphism(#1,#2)[#3`#4`#5]#6#7#8{{% -\xpos #1 -\ypos #2 -\width #6 -\arrowlength #6 -\arrowtype=#7 -\putbox(\xpos,\ypos){#3\vphantom{#4}}% -{\advance \xpos by\arrowlength -\putbox(\xpos,\ypos){\vphantom{#3}#4}}% -\horsize{\tempcounta}{#3}% -\horsize{\tempcountb}{#4}% -\divide \tempcounta by2 -\divide \tempcountb by2 -\advance \tempcounta by30 -\advance \tempcountb by30 -\advance \xpos by\tempcounta -\advance \arrowlength by-\tempcounta -\advance \arrowlength by-\tempcountb -\putvector(\xpos,\ypos)(1,0)\arrowlength\arrowtype -\divide \arrowlength by2 -\advance \xpos by\arrowlength -\vertsize{\tempcounta}{#5}% -\divide\tempcounta by2 -\advance \tempcounta by20 -\if a#8 % - \advance \ypos by\tempcounta - \putbox(\xpos,\ypos){#5}% -\else - \advance \ypos by-\tempcounta - \putbox(\xpos,\ypos){#5}% -\fi}} - -\def\putvmorphism(#1,#2)[#3`#4`#5]#6#7#8{{% -\xpos #1 -\ypos #2 -\arrowlength #6 -\arrowtype #7 -\settowidth{\xlen}{$#5$}% -\putbox(\xpos,\ypos){#3}% -{\advance \ypos by-\arrowlength -\putbox(\xpos,\ypos){#4}}% -{\advance\arrowlength by-140 -\advance \ypos by-70 -\ifdim\xlen>0pt - \if m#8% - \putsplitvector(\xpos,\ypos)\arrowlength\arrowtype - \else - \putvector(\xpos,\ypos)(0,-1)\arrowlength\arrowtype - \fi -\else - \putvector(\xpos,\ypos)(0,-1)\arrowlength\arrowtype -\fi}% -\ifdim\xlen>0pt - \divide \arrowlength by2 - \advance\ypos by-\arrowlength - \if l#8% - \advance \xpos by-40 - \putrbox(\xpos,\ypos){#5}% - \else\if r#8% - \advance \xpos by40 - \putlbox(\xpos,\ypos){#5}% - \else - \putbox(\xpos,\ypos){#5}% - \fi\fi -\fi -}} - -\def\putsquarep<#1>(#2)[#3;#4`#5`#6`#7]{{% -\setsqparms[#1]% -\setpos(#2)% -\settokens`#3`% -\puthmorphism(\xpos,\ypos)[\tokenc`\tokend`{#7}]{\width}{\arrowtyped}b% -\advance\ypos by \height -\puthmorphism(\xpos,\ypos)[\tokena`\tokenb`{#4}]{\width}{\arrowtypea}a% -\putvmorphism(\xpos,\ypos)[``{#5}]{\height}{\arrowtypeb}l% -\advance\xpos by \width -\putvmorphism(\xpos,\ypos)[``{#6}]{\height}{\arrowtypec}r% -}} - -\def\putsquare{\@ifnextchar <{\putsquarep}{\putsquarep% - <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped;\width`\height>}} -\def\square{\@ifnextchar< {\squarep}{\squarep - <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped;\width`\height>}} - % #6 -\def\squarep<#1>[#2`#3`#4`#5;#6`#7`#8`#9]{{% % #2------>#3 -\setsqparms[#1]% % | | -\diagram% % | | -\putsquarep<\arrowtypea`\arrowtypeb`\arrowtypec`% % #7| |#8 -\arrowtyped;\width`\height>% % | | -(0,0)[#2`#3`#4`{#5};#6`#7`#8`{#9}]% % | | -\enddiagram% % v v -}} % #4------>#5 - % #9 -\def\putptrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{% -\settriparms[#1]% -\xpos=#2 \ypos=#3 -\advance\ypos by \height -\puthmorphism(\xpos,\ypos)[#4`#5`{#7}]{\height}{\arrowtypea}a% -\putvmorphism(\xpos,\ypos)[`#6`{#8}]{\height}{\arrowtypeb}l% -\advance\xpos by\height -\putmorphism(\xpos,\ypos)(-1,-1)[``{#9}]{\height}{\arrowtypec}r% -}} - -\def\putptriangle{\@ifnextchar <{\putptrianglep}{\putptrianglep - <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}} -\def\ptriangle{\@ifnextchar <{\ptrianglep}{\ptrianglep - <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}} - % #5 -\def\ptrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % #2----->#3 -\settriparms[#1]% % | / -\diagram% % | / -\putptrianglep<\arrowtypea`\arrowtypeb`% % #6| /#7 -\arrowtypec;\height>% % | / -(0,0)[#2`#3`#4;#5`#6`{#7}]% % | / -\enddiagram%% % v v -}} % #4 - -\def\putqtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{% -\settriparms[#1]% -\xpos=#2 \ypos=#3 -\advance\ypos by\height -\puthmorphism(\xpos,\ypos)[#4`#5`{#7}]{\height}{\arrowtypea}a% -\putmorphism(\xpos,\ypos)(1,-1)[``{#8}]{\height}{\arrowtypeb}l% -\advance\xpos by\height -\putvmorphism(\xpos,\ypos)[`#6`{#9}]{\height}{\arrowtypec}r% -}} - -\def\putqtriangle{\@ifnextchar <{\putqtrianglep}{\putqtrianglep - <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}} -\def\qtriangle{\@ifnextchar <{\qtrianglep}{\qtrianglep - <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}} - % #5 -\def\qtrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % #2----->#3 -\settriparms[#1]% % \ | -\width=\height % \ | -\diagram% % #6\ |#7 -\putqtrianglep<\arrowtypea`\arrowtypeb`% % \ | -\arrowtypec;\height>% % \ | -(0,0)[#2`#3`#4;#5`#6`{#7}]% % v v -\enddiagram%% % #4 -}} - -\def\putdtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{% -\settriparms[#1]% -\xpos=#2 \ypos=#3 -\puthmorphism(\xpos,\ypos)[#5`#6`{#9}]{\height}{\arrowtypec}b% -\advance\xpos by \height \advance\ypos by\height -\putmorphism(\xpos,\ypos)(-1,-1)[``{#7}]{\height}{\arrowtypea}l% -\putvmorphism(\xpos,\ypos)[#4``{#8}]{\height}{\arrowtypeb}r% -}} - -\def\putdtriangle{\@ifnextchar <{\putdtrianglep}{\putdtrianglep - <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}} -\def\dtriangle{\@ifnextchar <{\dtrianglep}{\dtrianglep - <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}} - % #2 -\def\dtrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % / | -\settriparms[#1]% % / | -\width=\height % #5/ |#6 -\diagram% % / | -\putdtrianglep<\arrowtypea`\arrowtypeb`% % / | -\arrowtypec;\height>% % v v -(0,0)[#2`#3`#4;#5`#6`{#7}]% % #3----->#4 -\enddiagram%% % #7 -}} - -\def\putbtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{% -\settriparms[#1]% -\xpos=#2 \ypos=#3 -\puthmorphism(\xpos,\ypos)[#5`#6`{#9}]{\height}{\arrowtypec}b% -\advance\ypos by\height -\putmorphism(\xpos,\ypos)(1,-1)[``{#8}]{\height}{\arrowtypeb}r% -\putvmorphism(\xpos,\ypos)[#4``{#7}]{\height}{\arrowtypea}l% -}} - -\def\putbtriangle{\@ifnextchar <{\putbtrianglep}{\putbtrianglep - <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}} -\def\btriangle{\@ifnextchar <{\btrianglep}{\btrianglep - <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}} - % #2 -\def\btrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % | \ -\settriparms[#1]% % | \ -\width=\height % #5| \#6 -\diagram% % | \ -\putbtrianglep<\arrowtypea`\arrowtypeb`% % | \ -\arrowtypec;\height>% % v v -(0,0)[#2`#3`#4;#5`#6`{#7}]% % #3----->#4 -\enddiagram%% % #7 -}} - -\def\putAtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{% -\settriparms[#1]% -\xpos=#2 \ypos=#3 -{\multiply \height by2 -\puthmorphism(\xpos,\ypos)[#5`#6`{#9}]{\height}{\arrowtypec}b}% -\advance\xpos by\height \advance\ypos by\height -\putmorphism(\xpos,\ypos)(-1,-1)[#4``{#7}]{\height}{\arrowtypea}l% -\putmorphism(\xpos,\ypos)(1,-1)[``{#8}]{\height}{\arrowtypeb}r% -}} - -\def\putAtriangle{\@ifnextchar <{\putAtrianglep}{\putAtrianglep - <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}} -\def\Atriangle{\@ifnextchar <{\Atrianglep}{\Atrianglep - <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}} - % #2 -\def\Atrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % / \ -\settriparms[#1]% % / \ -\width=\height % #5/ \#6 -\diagram% % / \ -\putAtrianglep<\arrowtypea`\arrowtypeb`% % / \ -\arrowtypec;\height>% % v v -(0,0)[#2`#3`#4;#5`#6`{#7}]% % #3------------>#4 -\enddiagram%% % #7 -}} - -\def\putAtrianglepairp<#1>(#2)[#3;#4`#5`#6`#7`#8]{{% -\settripairparms[#1]% -\setpos(#2)% -\settokens`#3`% -\puthmorphism(\xpos,\ypos)[\tokenb`\tokenc`{#7}]{\height}{\arrowtyped}b% -\advance\xpos by\height -\puthmorphism(\xpos,\ypos)[\phantom{\tokenc}`\tokend`{#8}]% -{\height}{\arrowtypee}b% -\advance\ypos by\height -\putmorphism(\xpos,\ypos)(-1,-1)[\tokena``{#4}]{\height}{\arrowtypea}l% -\putvmorphism(\xpos,\ypos)[``{#5}]{\height}{\arrowtypeb}m% -\putmorphism(\xpos,\ypos)(1,-1)[``{#6}]{\height}{\arrowtypec}r% -}} - -\def\putAtrianglepair{\@ifnextchar <{\putAtrianglepairp}{\putAtrianglepairp% - <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped`\arrowtypee;\height>}} -\def\Atrianglepair{\@ifnextchar <{\Atrianglepairp}{\Atrianglepairp% - <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped`\arrowtypee;\height>}} - -\def\Atrianglepairp<#1>[#2;#3`#4`#5`#6`#7]{{% % #2a -\settripairparms[#1]% % / | \ -\settokens`#2`% % / | \ -\width=\height % #3/ #4 \#5 -\diagram% % / | \ -\putAtrianglepairp % / | \ -<\arrowtypea`\arrowtypeb`\arrowtypec`% % v v v -\arrowtyped`\arrowtypee;\height>% % #2b---->#2c---->#2d -(0,0)[{#2};#3`#4`#5`#6`{#7}]% % #6 #7 -\enddiagram%% -}} - -\def\putVtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{% -\settriparms[#1]% -\xpos=#2 \ypos=#3 -\advance\ypos by\height -{\multiply\height by2 -\puthmorphism(\xpos,\ypos)[#4`#5`{#7}]{\height}{\arrowtypea}a}% -\putmorphism(\xpos,\ypos)(1,-1)[`#6`{#8}]{\height}{\arrowtypeb}l% -\advance\xpos by\height -\advance\xpos by\height -\putmorphism(\xpos,\ypos)(-1,-1)[``{#9}]{\height}{\arrowtypec}r% -}} - -\def\putVtriangle{\@ifnextchar <{\putVtrianglep}{\putVtrianglep - <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}} -\def\Vtriangle{\@ifnextchar <{\Vtrianglep}{\Vtrianglep - <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}} - % #5 -\def\Vtrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % #2------------->#3 -\settriparms[#1]% % \ / -\width=\height % \ / -\diagram% % #6\ /#7 -\putVtrianglep<\arrowtypea`\arrowtypeb`% % \ / -\arrowtypec;\height>% % \ / -(0,0)[#2`#3`#4;#5`#6`{#7}]% % v v -\enddiagram%% % #4 -}} - -\def\putVtrianglepairp<#1>(#2)[#3;#4`#5`#6`#7`#8]{{ -\settripairparms[#1]% -\setpos(#2)% -\settokens`#3`% -\advance\ypos by\height -\putmorphism(\xpos,\ypos)(1,-1)[`\tokend`{#6}]{\height}{\arrowtypec}l% -\puthmorphism(\xpos,\ypos)[\tokena`\tokenb`{#4}]{\height}{\arrowtypea}a% -\advance\xpos by\height -\puthmorphism(\xpos,\ypos)[\phantom{\tokenb}`\tokenc`{#5}]% -{\height}{\arrowtypeb}a% -\putvmorphism(\xpos,\ypos)[``{#7}]{\height}{\arrowtyped}m% -\advance\xpos by\height -\putmorphism(\xpos,\ypos)(-1,-1)[``{#8}]{\height}{\arrowtypee}r% -}} - -\def\putVtrianglepair{\@ifnextchar <{\putVtrianglepairp}{\putVtrianglepairp% - <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped`\arrowtypee;\height>}} -\def\Vtrianglepair{\@ifnextchar <{\Vtrianglepairp}{\Vtrianglepairp% - <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped`\arrowtypee;\height>}} - % #3 #4 -\def\Vtrianglepairp<#1>[#2;#3`#4`#5`#6`#7]{{% % #2a---->#2b---->#2c -\settripairparms[#1]% % \ | / -\settokens`#2`% % \ | / -\diagram% % #5\ #6 /#7 -\putVtrianglepairp % \ | / -<\arrowtypea`\arrowtypeb`\arrowtypec`% % \ | / -\arrowtyped`\arrowtypee;\height>% % v v v -(0,0)[{#2};#3`#4`#5`#6`{#7}]% % #2d -\enddiagram%% -}} - - -\def\putCtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{% -\settriparms[#1]% -\xpos=#2 \ypos=#3 -\advance\ypos by\height -\putmorphism(\xpos,\ypos)(1,-1)[``{#9}]{\height}{\arrowtypec}l% -\advance\xpos by\height -\advance\ypos by\height -\putmorphism(\xpos,\ypos)(-1,-1)[#4`#5`{#7}]{\height}{\arrowtypea}l% -{\multiply\height by 2 -\putvmorphism(\xpos,\ypos)[`#6`{#8}]{\height}{\arrowtypeb}r}% -}} - -\def\putCtriangle{\@ifnextchar <{\putCtrianglep}{\putCtrianglep - <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}} -\def\Ctriangle{\@ifnextchar <{\Ctrianglep}{\Ctrianglep - <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}} - % #2 -\def\Ctrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % / | -\settriparms[#1]% % #5/ | -\width=\height % / | -\diagram% % v | -\putCtrianglep<\arrowtypea`\arrowtypeb`% % #3 |#6 -\arrowtypec;\height>% % \ | -(0,0)[#2`#3`#4;#5`#6`{#7}]% % #7\ | -\enddiagram%% % \ | -}} % v v - % #4 -\def\putDtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{% -\settriparms[#1]% -\xpos=#2 \ypos=#3 -\advance\xpos by\height \advance\ypos by\height -\putmorphism(\xpos,\ypos)(-1,-1)[``{#9}]{\height}{\arrowtypec}r% -\advance\xpos by-\height \advance\ypos by\height -\putmorphism(\xpos,\ypos)(1,-1)[`#5`{#8}]{\height}{\arrowtypeb}r% -{\multiply\height by 2 -\putvmorphism(\xpos,\ypos)[#4`#6`{#7}]{\height}{\arrowtypea}l}% -}} - -\def\putDtriangle{\@ifnextchar <{\putDtrianglep}{\putDtrianglep - <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}} -\def\Dtriangle{\@ifnextchar <{\Dtrianglep}{\Dtrianglep - <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}} - % #2 -\def\Dtrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% % | \ -\settriparms[#1]% % | \#6 -\width=\height % | \ -\diagram% % | v -\putDtrianglep<\arrowtypea`\arrowtypeb`% % #5| #3 -\arrowtypec;\height>% % | / -(0,0)[#2`#3`#4;#5`#6`{#7}]% % | /#7 -\enddiagram%% % | / -}} % v v - % #4 -\def\setrecparms[#1`#2]{\width=#1 \height=#2}% -% #4 -% #3b<-------#3a x #3b -% ^ | | -% / | | -% #5/ | | -% / | | -% / | | -% / | | -% #3c |#6 |#3a x #5 -% \ | | -% \ | | -% #8\ | | -% \ | | -% \ | | -% v v v -% #3d<-------#3a x #3d -% #8 - -\def\recursep<#1`#2>[#3;#4`#5`#6`#7`#8]{{\m@th -\width=#1 \height=#2 -\settokens`#3` -\settowidth{\tempdimen}{$\tokena$} -\ifdim\tempdimen=0pt - \savebox{\tempboxa}{\hbox{$\tokenb$}}% - \savebox{\tempboxb}{\hbox{$\tokend$}}% - \savebox{\tempboxc}{\hbox{$#6$}}% -\else - \savebox{\tempboxa}{\hbox{$\hbox{$\tokena$}\times\hbox{$\tokenb$}$}}% - \savebox{\tempboxb}{\hbox{$\hbox{$\tokena$}\times\hbox{$\tokend$}$}}% - \savebox{\tempboxc}{\hbox{$\hbox{$\tokena$}\times\hbox{$#6$}$}}% -\fi -\ypos=\height -\divide\ypos by 2 -\xpos=\ypos -\advance\xpos by \width -\bfig -\putCtrianglep<-1`1`1;\ypos>(0,0)[`\tokenc`;#5`#6`{#7}]% -\puthmorphism(\ypos,0)[\tokend`\usebox{\tempboxb}`{#8}]{\width}{-1}b% -\puthmorphism(\ypos,\height)[\tokenb`\usebox{\tempboxa}`{#4}]{\width}{-1}a% -\advance\ypos by \width -\putvmorphism(\ypos,\height)[``\usebox{\tempboxc}]{\height}1r% -\efig -}} - -\def\recurse{\@ifnextchar <{\recursep}{\recursep<\width`\height>}} - -\def\puttwohmorphisms(#1,#2)[#3`#4;#5`#6]#7#8#9{{% -% 1 and 2 are position, 3 and 4 are the nodes, 5 and 6 the labels, -% 7 the distance between node centers and 8 & 9 are the arrow types. -% #5 -% #3 ===========> #4 -% #6 -% -\puthmorphism(#1,#2)[#3`#4`]{#7}0a -\ypos=#2 -\advance\ypos by 20 -\puthmorphism(#1,\ypos)[\phantom{#3}`\phantom{#4}`#5]{#7}{#8}a -\advance\ypos by -40 -\puthmorphism(#1,\ypos)[\phantom{#3}`\phantom{#4}`#6]{#7}{#9}b -}} - -\def\puttwovmorphisms(#1,#2)[#3`#4;#5`#6]#7#8#9{{% -% 1 and 2 are position, 3 and 4 are the nodes, 5 and 6 the labels, -% 7 the distance between node centers and 8 & 9 are the arrow types. -% -% #3 -% || -% || -% #5 || #6 -% || -% || -% vv -% #4 -% -\putvmorphism(#1,#2)[#3`#4`]{#7}0a -\xpos=#1 -\advance\xpos by -20 -\putvmorphism(\xpos,#2)[\phantom{#3}`\phantom{#4}`#5]{#7}{#8}l -\advance\xpos by 40 -\putvmorphism(\xpos,#2)[\phantom{#3}`\phantom{#4}`#6]{#7}{#9}r -}} - -\def\puthcoequalizer(#1)[#2`#3`#4;#5`#6`#7]#8#9{{% -% #1 is (\xpos,\ypos), the next 6 are the nodes and arrow labels -% #8 is the distance between each pair of nodes and #9 is the pos of #7 -% either a (above) or b (below) -% #5 #7 -% #2 ===========> #3 --------> #4 -% #6 -% -\setpos(#1)% -\puttwohmorphisms(\xpos,\ypos)[#2`#3;#5`#6]{#8}11% -\advance\xpos by #8 -\puthmorphism(\xpos,\ypos)[\phantom{#3}`#4`#7]{#8}1{#9} -}} - -\def\putvcoequalizer(#1)[#2`#3`#4;#5`#6`#7]#8#9{{% -% #1 is (\xpos,\ypos), the next 6 are the nodes and arrow labels -% #8 is the distance between each pair of nodes and #9 is the pos of #7 -% either l (left) or r (right) -% -% #2 -% | | -% | | -% #5 | | #6 -% | | -% | | -% v v -% #3 -% | -% | -% #7 | -% | -% v -% #4 -% -\setpos(#1)% -\puttwovmorphisms(\xpos,\ypos)[#2`#3;#5`#6]{#8}11% -\advance\ypos by -#8 -\putvmorphism(\xpos,\ypos)[\phantom{#3}`#4`#7]{#8}1{#9} -}} - -\def\putthreehmorphisms(#1)[#2`#3;#4`#5`#6]#7(#8)#9{{% -% Use: \putthreehmorphisms(xpos,ypos)[lnode`rnode;toplabel`midlabel% -% botlabel]{distance}(toparrowtype,midarrowtype,botarrowtype){position} -\setpos(#1) \settypes(#8) -\if a#9 % - \vertsize{\tempcounta}{#5}% - \vertsize{\tempcountb}{#6}% - \ifnum \tempcounta<\tempcountb \tempcounta=\tempcountb \fi -\else - \vertsize{\tempcounta}{#4}% - \vertsize{\tempcountb}{#5}% - \ifnum \tempcounta<\tempcountb \tempcounta=\tempcountb \fi -\fi -\advance \tempcounta by 60 -\puthmorphism(\xpos,\ypos)[#2`#3`#5]{#7}{\arrowtypeb}{#9} -\advance\ypos by \tempcounta -\puthmorphism(\xpos,\ypos)[\phantom{#2}`\phantom{#3}`#4]{#7}{\arrowtypea}{#9} -\advance\ypos by -\tempcounta \advance\ypos by -\tempcounta -\puthmorphism(\xpos,\ypos)[\phantom{#2}`\phantom{#3}`#6]{#7}{\arrowtypec}{#9} -}} - -\def\setarrowtoks[#1`#2`#3`#4`#5`#6]{% -\def\toka{#1} -\def\tokb{#2} -\def\tokc{#3} -\def\tokd{#4} -\def\toke{#5} -\def\tokf{#6} -} -\def\hex{\@ifnextchar <{\hexp}{\hexp<1000`400>}} -\def\hexp<#1`#2>[#3`#4`#5`#6`#7`#8;#9]{% -\setarrowtoks[#9] -\yext=#2 \advance \yext by #2 -\xext=#1 \advance\xext by \yext -\bfig -\putCtriangle<-1`0`1;#2>(0,0)[`#5`;\tokb``\tokd] -\xext=#1 \yext=#2 \advance \yext by #2 -\putsquare<1`0`0`1;\xext`\yext>(#2,0)[#3`#4`#7`#8;\toka```\tokf] -\advance \xext by #2 -\putDtriangle<0`1`-1;#2>(\xext,0)[`#6`;`\tokc`\toke] -\efig -} -%\def\doublecomplex[#1`#2`#3`#4`#5`#6`#7`#8`#9]{% -%\bfig -%\putsquare<0`0`1`1;500`500>(0,1700)[`\vdots`\cdots`{#1};```] -%\puthmorphism(500,1700)[\ph{#1}`\cdots`]{500}1a -%\puthmorphism(1000,1700)[\ph{\cdots}`\ph{#2}`]{500}1a -%\putsquare<0`1`1`1;700`500>(1500,1700)[\vdots`\vdots`{#2}`{#3};```] -%\puthmorphism(2200,1700)[\ph{#3}`0`]{500}1a -%\putvmorphism(500,1700)[`\vdots`]{400}1a \putvmorphism(500,1300)[``]{400}1a -%\putvmorphism(1500,1700)[`\vdots`]{400}1a \putvmorphism(1500,1300)[``]{400}1a -%\putvmorphism(2200,1700)[`\vdots`]{400}1a \putvmorphism(2200,1300)[``]{400}1a -%\putsquare<1`0`1`1;500`500>(0,400)[\cdots`{#4}`\cdots`{#7};```] -%\puthmorphism(500,900)[\ph{#1}`\cdots`]{500}1a -%\puthmorphism(1000,900)[\ph{\cdots}`\ph{#2}`]{500}1a -%\puthmorphism(500,400)[\ph{#1}`\cdots`]{500}1a -%\puthmorphism(1000,400)[\ph{\cdots}`\ph{#2}`]{500}1a -%\putsquare<1`1`1`1;700`500>(1500,400)[{#5}`{#6}`{#8}`{#9};```] -%\puthmorphism(2200,900)[\ph{#6}`0`]{500}1a -%\puthmorphism(2200,400)[\ph{#9}`0`]{500}1a -%\putvmorphism(500,400)[`0`]{400}1a -%\putvmorphism(1500,400)[`0`]{400}1a -%\putvmorphism(2200,400)[`0`]{400}1a -%\efig -%} -% -%\def\doublecocomplex[#1`#2`#3`#4`#5`#6`#7`#8`#9]{% -%\bfig -%\putsquare<0`0`-1`-1;500`500>(0,1700)[`\vdots`\cdots`{#1};```] -%\puthmorphism(500,1700)[\ph{#1}`\cdots`]{500}{-1}a -%\puthmorphism(1000,1700)[\ph{\cdots}`\ph{#2}`]{500}{-1}a -%\putsquare<0`-1`-1`-1;500`500>(1500,1700)[\vdots`\vdots`{#2}`{#3};```] -%\puthmorphism(2000,1700)[\ph{#3}`0`]{500}{-1}a -%\putvmorphism(500,1700)[`\vdots`]{400}{-1}a \putvmorphism(500,1300)[``]{400}{-1}a -%\putvmorphism(1500,1700)[`\vdots`]{400}{-1}a \putvmorphism(1500,1300)[``]{400}{-1}a -%\putvmorphism(2000,1700)[`\vdots`]{400}{-1}a \putvmorphism(2000,1300)[``]{400}{-1}a -%\putsquare<-1`0`-1`-1;500`500>(0,400)[\cdots`{#4}`\cdots`{#7};```] -%\puthmorphism(500,900)[\ph{#1}`\cdots`]{500}{-1}a -%\puthmorphism(1000,900)[\ph{\cdots}`\ph{#2}`]{500}{-1}a -%\puthmorphism(500,400)[\ph{#1}`\cdots`]{500}{-1}a -%\puthmorphism(1000,400)[\ph{\cdots}`\ph{#2}`]{500}{-1}a -%\putsquare<-1`-1`-1`-1;500`500>(1500,400)[{#5}`{#6}`{#8}`{#9};```] -%\puthmorphism(2000,900)[\ph{#6}`0`]{500}{-1}a -%\puthmorphism(2000,400)[\ph{#9}`0`]{500}{-1}a -%\putvmorphism(500,400)[`0`]{400}{-1}a -%\putvmorphism(1500,400)[`0`]{400}{-1}a -%\putvmorphism(2000,400)[`0`]{400}{-1}a -%\efig -%} -\makeatother diff --git a/Master/tlpkg/bin/ctan2tds b/Master/tlpkg/bin/ctan2tds index c34e64e033c..b35a9f1a05c 100755 --- a/Master/tlpkg/bin/ctan2tds +++ b/Master/tlpkg/bin/ctan2tds @@ -73,7 +73,6 @@ chdir $startdir || die "chdir($startdir) failed: $!"; # back to raw 'babel', "&MAKEcopy", # we use latex-tds/babel.zip 'bangtex', "&MAKEflatten", 'bardiag', "&MAKEbardiag", - 'barr', "&MAKEbarr", # bbm is split into bbm (fonts) and bbm-macros (macros) # 'bbm', "&MAKEbbm", 'beamer', "&MAKEbeamer", @@ -84,7 +83,9 @@ chdir $startdir || die "chdir($startdir) failed: $!"; # back to raw 'biblatex', "die 'skipping, still experimental'", 'bibleref', "&MAKEflatten", 'bibtopicprefix', "&MAKEflatten", + 'blanks', "die 'skipping, unknown license (and c.1992)'", 'blockdraw_mp',"&MAKEflatten", + 'bnf-plain', "die 'skipping, unknown license (and c.1992)'", 'bookhands', "&MAKEwilson", 'borceux', "&MAKEborceux", 'burmese', "&MAKEflatten", @@ -543,6 +544,7 @@ $standardsourcefmt='latex'; 'arabxetex', 'xelatex', 'arrayjob', 'generic', 'babel', 'generic', + 'barr', 'generic', 'bghyphen', 'generic', 'bidi', 'xelatex', 'cirth', 'generic', @@ -601,6 +603,7 @@ $standardfmt='latex'; 'automata', 'metapost', 'ascii', 'fonts', 'babel', 'generic', + 'barr', 'generic', 'bbm', 'fonts', 'beamer-tut-pt','portuguese', 'bera', 'fonts', @@ -752,7 +755,7 @@ $standardtex='\.cfg|\.sty|\.clo|\.ldf|\.cls|\.def|\.fd$'; 'babel', 'b.*plain.tex|\.ldf|\.ltx|\.cfg|\.sty|\.clo|\.cls|\.def|\.fd$', 'babelbib', '\.bdf|\.sty', 'bardiag', '\.bar|\.sty|\.cfg', - 'barr', 'diagram.tex', + 'barr', 'diagxy.tex', 'base', 'idx.tex|lablst.tex|latexbug.tex|lablst.tex|docstrip.tex|nfssfont.tex|sample2e.tex|small2e.tex|testpage.tex|ltxcheck.tex|\.cfg|\.fd$|\.cls|\.clo|\.ltx|\.sty|\.def|^\.', 'bbold', 'bbold.sty|\.fd', # no fonttabl.sty 'bghyphen', '\.tex', @@ -2225,19 +2228,6 @@ sub MAKEborceux { &SYSTEM("$MV -f * $DEST/tex/$whichformat/$package"); } -sub MAKEbarr { - &setup; - chdir("$DEST/doc/$whichdocformat/$package"); - &SYSTEM("rm *.zip"); - &buildfilelist; - &dodvi; -# rebuild again, as we have .dvi files now - &buildfilelist; - &domakeindex; - &dotex; - &dosource; -} - sub MAKEconcmath { &setup; chdir("$DEST/doc/$whichdocformat/$package"); diff --git a/Master/tlpkg/bin/place b/Master/tlpkg/bin/place index d194119554c..421ab4137b1 100755 --- a/Master/tlpkg/bin/place +++ b/Master/tlpkg/bin/place @@ -128,7 +128,14 @@ if (!defined($tlpold)) { $sum += $#foo; # zero-based, so first line doesn't count. } my $nrcommfiles = @difffiles; - chomp (my $identical = `grep --text 'are identical' $diff_file | wc -l`); + # + my $identical; + if (-s $diff_file) { + chomp ($identical = `grep --text 'are identical' $diff_file | wc -l`); + } else { + $identical = 0; + } + # my $changed = $nrcommfiles - $identical; print "$nrcommfiles common files, $changed changed, ~$sum lines different ($diff_file)\n\n\f\n"; #`rm -f $TMP/tlplace.new $TMP/tlplace.old $TMP/tlplace.diff`; |