diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/kuvio/doc-src/tdwk.tex')
-rw-r--r-- | Master/texmf-dist/source/latex/kuvio/doc-src/tdwk.tex | 1743 |
1 files changed, 0 insertions, 1743 deletions
diff --git a/Master/texmf-dist/source/latex/kuvio/doc-src/tdwk.tex b/Master/texmf-dist/source/latex/kuvio/doc-src/tdwk.tex deleted file mode 100644 index a165a5e5fac..00000000000 --- a/Master/texmf-dist/source/latex/kuvio/doc-src/tdwk.tex +++ /dev/null @@ -1,1743 +0,0 @@ -% tdwk.tex -% Anders G S Svensson - -% Time-stamp: <1996/06/09 14:35:27 PDT agss@klagshamn> - -% $Revision: 2.5.0.12 $ -% $Date: 1996/06/09 21:43:53 $ - -\input carrot \usecarrot{sfss} \usefs{arrsy,bbm} -\input epsf -\input kuvio \arrsy -\input verbatim -\input listing -\input tdwk-r \kuviorequire\doclevel - -\let\bb\bbm - -\listingindent=10pt -\verbatimindent=10pt - -\autocompileto{tdwk/tdwk} - -{\escapechar=-1 - \xdef\AAAA{\expandafter\string\csname tdwk-A4\endcsname}\xdef\NAME{\jobname}} - -\newif\ifAAAA - -\ifx\AAAA\NAME -\AAAAtrue -\fi - -\ifAAAA -\special{papersize=210mm,297mm} -\hsize=15.9cm -\vsize=24.6cm -\kuviorevision{$Revision: 2.5.0.12 $ A4} -\else -\special{papersize=8.5in,11in} -\kuviorevision{$Revision: 2.5.0.12 $} -\fi - -\pagewidth\hsize \pageheight\vsize - -\def\verbatimit{\FontSize{9}\SelectTextFont{cmti}} -\let\verbatimtt\listingtt - -\newverbatim{code} -\def\everycode{\verbatimindent=25pt\everyverbatim} - -\newgroup*{indented} - {\par\parindent=25pt\leavevmode\parskip=0pt\obeylines} - {\par} - -\newwrite\tmpfile -\def\opentmp{\immediate\openout\tmpfile=\jobname.tmp } -\def\closetmp{\immediate\closeout\tmpfile} -\def\writetmp{\immediate\write\tmpfile} - -\newverbatim{eg} -\def\everyeg{\opentmp\obeyspaces} -\def\egline#1\egendline{\writetmp{#1}} -\def\endeg{\closetmp{\nolinenumbers\listing{\jobname.tmp}}% - \leavevmode\hskip\egindent - \vbox{\advance\hsize by -\egindent\leavevmode\input \jobname.tmp }\par} - -\def\egindent{10pt} - -\newverbatim{side} -\let\everyside\everyeg -\def\sideline#1\sideendline{\writetmp{#1}} -\def\endside{\closetmp\par\leavevmode - \hbox to \hsize{% - \hbox to \ifx\sideedge\empty .6\else\sideedge\fi\hsize{% - \vbox{\nolinenumbers\listing{\jobname.tmp}}% - \hss}% - \vbox{\leavevmode\tall\input \jobname.tmp }% - \hss}% - \par} - -\let\sideedge\empty -\def\edge#1{\def\sideedge{#1}} - -\let\stockepsffile\epsffile -\def\epsffile#1{\stockepsffile{eps/#1}} - -\def\csq#1{{\tt\string#1}} -\def\ch#1{{\escapechar=-1 \tt\string#1}} -\def\newpage{\vfill\eject} -\def\type{\emph{type}} -\def\name{\emph{name}} -\def\num{\emph{number}} -\def\BAR{\ch\|} - -\def\PS{{\sf PostScript}} -\def\LaTeXe{\LaTeX\kern.15em 2${}_{\textstyle\varepsilon}$} -\def\AMS{{$\cal A$\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em$\cal S$}} -\def\AMSLaTeX{\AMS-\LaTeX} -\def\LaTeX{L\kern-.36em\raise.3ex\hbox{\sc A}\kern-.15em\TeX}% - -% Indexing - -\let\sidx\index -\def\sidxe#1{\sidx{#1|emph}} -\def\sidxm#1#2{\sidx{#2@#1{#2}}} -\def\sidxme#1#2{\sidx{#2@#1{#2}|emph}} - -\def\index#1#2{\csname #1#2Idx\endcsname} -\def\iindex#1#2#3{\emph{\index#1#2{#3}}} -\def\sindex#1#2{\csname #1#2sIdx\endcsname} - -\def\tmsIdx{\sidxm\csqn}% text, macro -\def\tpsIdx#1#2{\sidxm\csQ{#1 #2}}% text, macro pair -\def\tcsIdx{\sidxm\ch}% text, character -\def\twsIdx{\sidx}% text, word - -\def\tmIdx#1{\csqn{#1}\tmsIdx{#1}} -\def\tpIdx#1#2{\csqqn#1 #2\tpsIdx{#1}#2} -\def\tcIdx#1{\ch#1\tcsIdx#1} -\def\twIdx#1{\EatAt#1@@\twsIdx{#1}} - -\def\mmsIdx{\sidxme\csqn}% main, macro -\def\mpsIdx#1#2{\sidxme\csQ{#1 #2}}% main, macro pair -\def\mcsIdx{\sidxme\ch} -\def\mwsIdx#1{\sidxe{#1}}% main, word - -\def\mmIdx#1{\csqn{#1}\mmsIdx{#1}} -\def\mpIdx#1#2{\csqqn#1 #2\mpsIdx{#1}#2} -\def\mcIdx#1{\ch#1\mcsIdx#1} -\def\mwIdx#1{\EatAt#1@@\mwsIdx#1} - -\def\EatAt#1@#2@{\def\Action{#2}% - \ifx\Action\empty\def\Action{#1}\else\def\Action{#2\Chomp}\fi - \Action} -\def\Chomp#1{} -\def\csqq#1#2{\csq#1\ \csq#2} -\def\csqn#1{{\tt\expandafter\string\csname #1\endcsname}} -\def\csQ#1{\csqqn#1} -\def\csqqn#1 #2{{\tt\expandafter\string\csname #1\endcsname}\ \csq#2} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\author{Anders G. S. Svensson} -\email{svensson@math.ubc.ca} -\title{Typesetting diagrams with kuvio.tex}\footnote{} -{\rcsrevision$Revision: 2.5.0.12 $ for patchlevel \doclevel. - \rcsdate$Date: 1996/06/09 21:43:53 $.\hfil\break} -\revision{\rcsrevision$Revision: 2.5.0.12 $} - -The macros in \kuvio\ use \PS\ code embedded in \csq{\special} control -sequences to perform rotations and reflections and to set graylevels. -The \csq{\special} syntax used is that of Tomas Rokicki's excellent -{\tt dvips}. Be forewarned that this is likely to confuse many {\tt -dvi} (not \PS) previewers. - -A summary contains details on the syntax of control sequences as well -as discussion of several points not covered in the main sections of -this manual. - -\tableofcontents - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Cell Macros} - -Let's start with a simple diagram. - -\eg -\Diagram -P' \aTo (2,-4) <{b'} \aTo (4,-2) >{a'} \\ - & \rdTo \\ - & & P & \rTo ^a & A \\ - & & \dTo <b & & \dTo \\ - & & B & \rTo & X \\ -\endDiagram -\endeg - -The control sequences \csq\rTo, \csq\dTo, -\csq\rdTo\ and \csq\aTo\ in this example each specify an arrow in the diagram. -These control sequences are called \sindex tw{cell macro}\emph{cell -macros} and, in this case, each is associated with the \iindex tw{cell -type} {\tt To}. Note that, except for \csq\aTo, the direction of the -arrow is built into the name of the cell macro: \csq\rTo\ for a -rightward {\tt To} cell, \csq\dTo\ for a downward {\tt To} cell, etc. -In the case of \csq\aTo, the arrow extends from the alignment entry in -which the macro was found to the alignment entry whose relative -position is specified by a parenthesized pair of integers. In our -example, the arrow specified by -\code -\aTo (2,-4) -\endcode -points to the alignment entry 2 columns to the right and 4 rows below -the entry in which this code is located. - -We shall soon see that there are many cell types predefined in \kuvio\ -and that other types can easily be defined by the user using the -control sequence \csq\newcell. The full list of cell macros -associated with a cell type \type\ is as follows. - -{\parindent=25pt\leavevmode -\vbox{\openup2pt\halign{#\hfil\qquad& #\hfil\cr -\csq\a\type& \type\ cell originating at an alignment entry\cr -\csq\b\type& \type\ cell terminating at an alignment entry\cr -\csq\ru\type& rightward and upward \type\ cell\cr -\csq\r\type& rightward \type\ cell\cr -\csq\rd\type& rightward and downward \type\ cell\cr -\csq\lu\type& leftward and upward \type\ cell\cr -\csq\l\type& leftward \type\ cell\cr -\csq\ld\type& leftward and downward \type\ cell\cr -\csq\u\type& upward \type\ cell\cr -\csq\d\type& downward \type\ cell\cr -\ch\\\type& \type\ cell typeset as a \emph{modification}\cr -}}} - -The last of these differs from the others in that it it not used in -alignments. This will be discussed in \ref{Modification Cells I}. The -\csq\b\type\ cell macro is similar to \csq\a\type\ except that the -required coordinate pair specifies the relative position of the tail -(rather than the head) of the arrow. - -\side -\Diagram -A \aTo (1,-1) & & A \\ - & B \bTo (1,1) \\ -\endDiagram -\endside - -Let us refer to cell macros which can be used in alignments as -\sindex tw{cell macro!alignment}\emph{alignment cell macros} -and all others as -\sindex tw{cell macro!modification}\emph{modification cell macros}. -Thus, associated with any cell type we have ten alignment cell macros -and one modification cell macro. - -Labels are tied to arrows using \index tc\<, \index tc\>, \index tc\_\ -and \index tc\^\ for labels to the left, right, below and above an -arrow respectively. Many characteristics of an arrow and its labels -can be modified using certain characters and control sequences, which -we will refer to as \sindex tw{modifier}\emph{modifiers}, following an -occurrence of a cell macro. The \index tc\:\ modifier can be used to -tie labels to a point other than the midpoint of an arrow. - -\side -\Diagram -A & \rTo ^f :{.75} & B \\ -\endDiagram -\endside - -The argument passed to {\tt :} is used to interpolate linearly between -the tail and head of an arrow, 0 being the tail and 1 being the head. -One can also use {\tt :} to move labels in a direction perpendicular -to that of an arrow by supplying it with a dimension rather than a -real number. - -\side -\Diagram -A & \rTo ^f :{5pt} & B \\ -\endDiagram -\endside - -To use both functions of the {\tt :} modifier, separate two arguments (in -either order) by a comma or semicolon. - -\side -\Diagram -A & \rTo ^f :{.75,5pt} & B \\ -\endDiagram -\endside - -Except for the \csq\a\type\ and \csq\b\type\ variants, arrows specified by -alignment cell macros, \sindex tw{alignment cell}\emph{alignment cells}, -stretch to meet non-empty alignment entries. - -\goodbreak -\side -\Diagram -A & \rTo & B \\ -C & & \rTo & D \\ -\endDiagram -\endside - -The control sequence \index tm{stop} can be used to stop an alignment cell -at an otherwise empty alignment entry. - -\side -\Diagram - & \rTo & \stop & \rTo & \stop \\ - & & \stop & \rTo & \stop & \rTo & \\ -\endDiagram -\endside - -\ifAAAA \newpage \fi -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Grid Lines} - -Each diagram is constructed on a grid, vertical grid lines -corresponding to columns in an alignment and horizontal grid lines to -rows. Tokens preceding the first occurrence of a cell macro in an -alignment entry are typeset at the intersection point of two grid -lines. - -There are two kinds of grid: \sindex tw{grid!rigid}\emph{rigid} and -\sindex tw{grid!flexible}\emph{flexible}. The grid lines of a rigid -grid will be uniformly spaced unless explicitly moved while those of a -flexible grid will be positioned using knowledge of the particular -vertices and arrows occurring in a diagram. The pair -\csqq\Diagram\endDiagram\ uses a rigid grid by default. Flexible -grids are enabled using the control sequence -\csq\flexible. These will be discussed in \ref{Flexible Grids}. - -Grid lines can be moved using any of the control sequences -\index tm{mx}, \index tm{my}, \index tm{dx}, \index tm{dy}, \index tm{ml}, -\index tm{mr}, \index tm{dl} and \index tm{dr}. -\index tm{mx} adjusts the position of the vertical grid line -associated with the column in which this control sequence occurs while -\csq\dx\ simultaneously adjusts the position of all grid lines -associated with columns lying to the right of the one in which it -occurs. The row in which either \csq\mx\ or \csq\dx\ occurs is -immaterial. - -\side -\gridlines -\Diagram -A & B \mx{-5mm} & C & D & E & F \\ -A & B & C & D & E \dx{5mm} & F \\ -\endDiagram -\endside - -The behaviour of \csq\my\ and \csq\dy\ on horizontal grid lines -corresponding to alignment rows is analogous, \csq\dy\ moving grid -lines associated with rows lying on or above a particular row. - -The control sequence \csq\ml\ moves a vertical grid line leftward so -that the alignment entry in which this control sequence occurs abuts -the next entry typesetting as a box of non-zero dimensions. - -\side -\gridlines -\Diagram -A & \rTo & B \\ -\dTo \\ -C & {} = D \ml \\ -\endDiagram -\endside - -Similarly, \csq\mr\ moves a vertical grid line rightward. -\csq\dl\ and \csq\dr\ have the same relation to \csq\ml\ and \csq\mr\ -that \csq\dx\ has to \csq\mx. - -The default \sindex tw{grid!spacing}spacing between grid lines can be -adjusted in two ways: By scaling the current values using \index -tm{xscale} and \index tm{yscale} or by explicitly setting new values -using \index tm{xgrid} and \index tm{ygrid}. - -\side -\gridlines \xgrid=2cm -\Diagram -A \\ - & \rdTo \\ - & & B \\ -\endDiagram -\endside - -The control sequence \index tm{scale} can be used to set both -\csq\xscale\ and \csq\yscale\ to the same value. Similarly, \index -tm{grid} can be used to set both \csq\xgrid\ and \csq\ygrid. - -\ifAAAA \newpage \fi -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Coordinates and Modifications} - -Grid lines provide us with a coordinate system in which points with -non-integral coordinates are obtained by linear interpolation between -grid lines. These coordinates can be used to typeset \sindex -tw{modification}\emph{modifications} at arbitrary locations on (or -outside) a diagram, following an occurrence of the control sequence -\index tm{Modify}. - -\side -\gridlines -\Diagram -A \\ - & \rdTo \\ - & & B \\ -\Modify -\Text{X} (2,1.5) -\endDiagram -\endside - -Here the control sequence \index tm{Text} takes a single argument, -the material to be typeset, and must also be supplied with a -parenthesized coordinate pair indicating a position on the diagram. - -Besides \csq\Text\ there are control sequences -\index tm{Txt}, \index tm{Math}, \index tm{Vertex} and \index tm{Label}. -The latter three typeset their argument in math mode: -\csq\Math\ in \csq\textstyle, and \csq\Vertex\ and \csq\Label\ -in the current values of \index tm{vertexstyle} and \index -tm{labelstyle}, the defaults being \csq\displaystyle\ and -\csq\scriptstyle\ respectively. These are the same styles in which -vertices and labels in the alignment part of a diagram are typeset. - -Control sequences which typeset modifications behave very much like -cell macros in that they are also affected by -\sindex tw{modifier}modifiers. The \index tc\:\ modifier can be used to -specify a position to \csq\Text, \csq\Txt, \csq\Math, \csq\Vertex\ and -\csq\Label\ as a fractional distance from a first coordinate to a -second. The fraction $.5$ is assumed if none is specified explicitly. - -\side -\gridlines -\Diagram -A \\ - \\ - & & B \\ -\Modify -\Text{X} (0,0) (1,1) -\Text{Y} (0,0) (2,2) :{.75} -\endDiagram -\endside - -The position indicated to \csq\Text\ and its siblings are those of the -\iindex tw{tag point}: The point on the typeset material which is -placed at the position in question. For \csq\Text\ the default tag -point lies at the midpoint of the baseline while for \csq\Txt, -\csq\Math, \csq\Vertex\ and \csq\Label\ it lies at the midpoint of the -math axis. The location of the tag point along the length of the -typeset material can be changed using the \index tc\*\ modifier. - -\side -\gridlines -\Diagram - \\ - & & \\ - \\ -\Modify -\Text{v\"anster} (0,0) *0 -\Text{h\"oger} (2,2) *1 -\endDiagram -\endside - -Modifications can be rotated using the \index tc\/\ modifier. -\sindex tw{modification!rotation} - -\side -\gridlines -\Diagram - \\ - & & \\ - \\ -\Modify -\Text{leftish} (0,0) *{.2} /{95} -\Text{rightish} (2,2) *{.8} /{45} -\endDiagram -\endside - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Modification Cells I} -\label{Modification Cells I} - -Modification cell macros typeset arrows as modifications. We refer to -such arrows as \sindex tw{modification cell}\emph{modification cells}. - -\side -\Diagram -xF & \rTo ^{fF} & yF \\ -\dTo <{x\eta} & & \dTo >{y\eta} \\ -xG & \rTo _{fG} & yG \\ -\Modify -\Para (1.5,.5) <{f\eta} /{-135} -\endDiagram -\endside - -The \sindex tw{modification cell!length}length of a modification cell -can be specified explicitly using the \sindex tw{"|@\BAR}{\tt |} -modifier. - -\side -\Diagram -xF & \rTo ^{fF} & yF \\ -\dTo <{x\eta} & & \dTo >{y\eta} \\ -xG & \rTo _{fG} & yG \\ -\Modify -\Para (1.3,.7) <{f\eta} /{-135} |{14mm} -\endDiagram -\endside - -The following alternative to the previous two examples will become -clear in \ref{Naming Points and Attaching Arrows}. - -\eg -\ptpush+=3pt -\Diagram -xF & \rTo ^{fF} & yF \\ -\dTo <{x\eta} & & \dTo >{y\eta} \pt{t} \\ -xG & \rTo _{fG} \pt{h} & yG \\ -\Modify -\Para \pt{t} \pt{h} <{f\eta} -\endDiagram -\endeg - -\newpage -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Figures and Graphs} - -Before continuing our discussion of modification cells, let us first -mention two variants of the \csqq\Diagram\endDiagram\ pair. The -first, \sindex tw{Figure}\index tp{Figure}\endFigure, can be used to -typeset modifications on top of any \TeX\ box. One use for this is for -typesetting \TeX\ labels on top of included \PS\ figures. - -\verbatim -\input epsf % from the dvips distribution -\endverbatim -\eg -\Figure -\epsfxsize=3in -\epsffile{plot.eps} -\Modify -\Math{x^2 + y^2 = 1} (.8,.55) *0 -\Math{z = 2\sqrt{x^2 + y^2}} (.6,.9) *0 -\endFigure -\endeg - -The second, \index tp{Graph}\endGraph, uses \csq\Figure\ to typeset -modifications on top of an empty box whose dimensions we specify. - -\eg -\Graph{\hsize}{1.5cm} -\Two (0,.5) -\Two /{45} (.25,.5) -\Two /{90} (.5,.5) -\Two /{135} (.75,.5) -\Two /{180} (1,.5) -\endGraph -\endeg - -The coordinate \sindex tw{modification!coordinate system}system used -for typesetting modifications on a \csq\Figure\ or \csq\Graph\ has its -origin at the bottom left corner of the box in question. There are -two ways of specifying units of length in the coordinate directions of -this coordinate system, the default units being chosen so that the top -right corner of the box has coordinates (1,1). First, the control -sequences \index tm{xrange}, \index tm{yrange} and \index tm{range} -can be used to divide the default units by any integer value. - -\ifAAAA \newpage \fi - -\eg -\xrange=5 \yrange=20 \gridlines -\Figure -\epsfxsize=3in -\epsffile{plot.eps} -\Modify -\Math{x^2 + y^2 = 1} (4,11) *0 -\Math{z = 2\sqrt{x^2 + y^2}} (3,18) *0 -\endFigure -\endeg - -Second, one can use \index tm{xunit}, \index tm{yunit} and \index -tm{unit} to explicitly specify units of length. - -\eg -\xunit=.25\hsize \yrange=2 \gridlines -\Graph{\hsize}{1.5cm} -\Two (0,1) \Two /{45} (1,1) \Two /{90} (2,1) \Two /{135} (3,1) \Two /{180} (4,1) -\endGraph -\endeg - -For any individual \csq\Graph, unit and range specifications can be -incorporated into the argument list. - -\eg -\gridlines -\Graph{\hsize,.25\hsize}{1.5cm,2} -\Two (0,1) \Two /{45} (1,1) \Two /{90} (2,1) \Two /{135} (3,1) \Two /{180} (4,1) -\endGraph -\endeg - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Modification Cells II} - -The modification cells shown above place the midpoint of an arrow at a -specified location on a diagram. Just as with ordinary modifications, -we can change the \index tw{tag point} using the \index tc\*\ -modifier. - -\side -\range=2 -\Graph{2cm}{2cm} -\To (1,1) *0 \To (1,1) *0 /{180} -\To (1,1) *0 /{90} \To (1,1) *0 /{270} -\endGraph -\endside - -There is another variant of modification cell in which we specify the -coordinates of the tail and head of an arrow rather the position of -the tag point. - -\side -\Graph{2cm,2}{15mm,2} -\Line (1,0) (1,2) -\Bar (0,1) (2,1) -\endGraph -\endside - -We will refer to modification cells as -\sindex tw{modification cell!type 1}\emph{type 1} or -\sindex tw{modification cell!type 2}\emph{type 2} -depending on whether they have been specified with one or two -coordinate pairs. - -Vertices can be attached to the tail and head of such a modification -cell using the modifiers \index tm{tl} and -\sindex tw{attaching!with \csq\hd\ or \csq\tl}\index tm{hd}. -In the case of \csq\Diagram\ \csq\endDiagram, if the coordinates of -either end of a type 2 \sindex tw{modification cell!type -2}modification cell are integral then an implicit \csq\tl\ or \csq\hd\ -is performed with the contents of the appropriate alignment entry -whenever a tail or head hasn't been explicitely attached. - -\side -\Diagram -A & & \\ - & & B \\ -\Modify -\To (0,1) (2,0) -\Line (0,0) (2,1) \tl{C} \hd{D} -\endDiagram -\endside - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Fudges and Moves} - -The length of individual arrows can be adjusted using the modifiers -\index tm{dt} and \index tm{dh} for the tail and head of an arrow -respectively. Passing a single dimension to one of these control -sequences lengthens the appropriate end of an arrow by the specified -amount. - -{\edge{.65} -\side -\let\b\bullet -\Diagram -\b & \rTo \dh{10pt} & \stop & \rTo \dt{-10pt} & \b \\ -\b & \rTo & \stop & \rTo & \b \\ -\b & \rTo \dh{-10pt} & \stop & \rTo \dt{10pt} & \b \\ -\endDiagram -\endside -} - -\index tm{tx}, \index tm{ty}, \index tm{hx} and \index tm{hy} -can be used to make an arrow point from or to a point other than the -midpoint of a vertex. - -\side -\Diagram -A\times B \\ -\dTo & \rdTo \tx{7pt} \\ -A & & B \\ -\endDiagram -\endside - -Length and positional adjustments with the aforementioned six control -sequences are referred to as \sindex tw{fudge}\emph{fudges}. - -The length of a positionally fudged arrow is adjusted to accommodate -the vertices at either end of the arrow. - -\side -\Diagram -X \\ - & \rdTo \hy{-20pt} - \rdTo - \rdTo \hx{20pt} \\ - & & A\times B\times C \\ -\endDiagram -\endside - -Arrows and modifications can be \sindex tw{move}\emph{moved} -using the modifiers \index tm{up} and \index tm{rt}. - -\side -\Diagram -X & \rTo \up{3pt} - \lTo \up{-2pt} & A \\ -\endDiagram -\endside - -Moves differ from fudges in that an entire arrow is literally just -moved: No length adjustments are made. Using the modifiers \index -tm{ru} and \index tm{rr}, moves can be made relative to a coordinate -system which has been rotated from the horizontal along with a -(rightward pointing) arrow or modification. - -\side -\Diagram -A \\ - & \rdTo ^f \ru{5pt} - \rdTo _g \ru{-5pt} \\ - & & B \\ -\endDiagram -\endside - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Defining New Cell Types} - -The control sequence \index tm{newcell} is used to define cell types. -For example, near the end of \kuvio\ we find the following two lines. -\code -\newcell{To} -\let\Tofill\rightarrowfill -\endcode -Expansion of \@\newcell{@\\type\@}@\ causes several control sequences -to be defined, one being the \iindex tw{box macro} \ch{\\\type box}. -\indented % -\@\def\@\\type\@box#1{\hbox to #1{\@\\type\@fill}}@\ -\endindented -This definition tells the macros in \kuvio\ how to typeset a rightward -arrow of cell type \type. As we can see, before using a cell macro -associated with this cell type we were required to either define the -\iindex tw{fill macro} \ch{\\\type fill} or else redefine \ch{\\\type -box}. - -\newcell{Eql} -\def\Eqlbox#1{\vcenter{\offinterlineskip - \hbox to #1{\rightarrowfill} - \vskip-2pt - \hbox to #1{\rightarrowfill}}} - -\side -\newcell{Eql} -\def\Eqlbox#1{\vcenter{\offinterlineskip - \hbox to #1{\rightarrowfill} \vskip-2pt \hbox to #1{\rightarrowfill}}} - -\Diagram -A & \rEql & B \\ -\endDiagram -\endside - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Pads and Pushes} - -Let us try placing labels on our newly defined {\tt Eql} cells. - -{\bpad=5pt -\side -\Diagram -X & \rEql ^{f_1} _{f_2} & A \\ -\endDiagram -\endside -} - -These labels are probably a little too close to the arrows for most -people's tastes. There are three \sindex tw{label pad}\emph{label -pads} associated with every arrow in a diagram. As we have already -seen, a pad which applies to only a single arrow can be specified with -the \index tc\:\ modifier. Global and type-specific label pads can be -assigned using \index tm{labelpad}. For any individual arrow, these -three label pads are summed to determine the distance at which a label -is placed from line joining its endpoints. - -{\bpad=8pt -\side -\labelpad=4pt \labelpad{Eql}=2.5pt -\Diagram -X & \rEql ^{f_1} _{f_2} & A & \rTo ^g & B \\ -\endDiagram -\endside -} - -Another kind of padding determines how much space will be placed -around the sides of a diagram. Assignments can be made to -\index tm{lpad} (left), \index tm{rpad} (right), \index tm{bpad} (bottom) -and \index tm{tpad} (top). Assignments can also be made to -\index tm{Diagrampad}, \index tm{Figurepad} -and \index tm{Graphpad} to add space to all four sides of a diagram. - -\eg -\framed -\Diagram A & \rTo & B \\ \endDiagram -\quad\Diagrampad=10pt -\Diagram A & \rTo & B \\ \endDiagram -\quad\lpad=-5pt -\Diagram A & \rTo & B \\ \endDiagram -\endeg - -\sindex tw{cell push}\emph{Cell pushes} determine the spacing between -an arrow and the vertices at its tail and head. As with label pads, -cell pushes are additive. Global and type-specific cell pushes are -assigned using \index tm{cellpush}, just as with \csq\labelpad. -Length fudges with \index tm{dt} and \index tm{dh} can be thought of -as arrow-specific pushes, although a positive fudge corresponds to a -negative push. - -\side -\cellpush{Eql}=3pt -\Diagram -X & \rEql & A & \rTo & B \\ -\endDiagram -\endside - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Naming Points and Attaching Arrows} -\label{Naming Points and Attaching Arrows} - -Modification cells can be \sindex tw{arrows!attaching}\emph{attached} -to points on other arrows by \sindex tw{points!naming}\emph{naming} -these points using the \index tm{pt} modifier. Once a point has been -named it can be referenced as a coordinate. - -\side -\Diagram -X & \rTo \up{10pt} \pt{a1,.2} \pt{b1,.8} - \rTo \up{-10pt} \pt{a2,.2} \pt{b2,.8} & Y \\ -\Modify -\Two \pt{a1} \pt{a2} -\Two \pt{b1} \pt{b2} -\endDiagram -\endside - -A point must be named \sindex tw{points!referencing}before it is -referenced. Note that cell macros are processed in order from left to -right and top to bottom. - -The form \csq{\pt\ch\{\name,\num\ch\}} can be shortened to -\csq\pt\ch\{\name\ch\} if \name\ has not already been named or if -another coordinate is not expected. In this case the default position -is chosen. Global and type-specific defaults can be set using \index -tm{ptpoint}. - -\side -\ptpoint=.75 \ptpoint{One}=.5 -\Diagram -X & \rTo \up{10pt} \pt1 - \rTo \up{-10pt} \pt2 & Y & \rOne \up{10pt} \pt3 - \rOne \up{-10pt} \pt4 & Z \\ -\Modify -\Two \pt1 \pt2 -\Two \pt3 \pt4 -\endDiagram -\endside - -A type-specific \csq\ptpoint\ can be unset, causing the global value -to be used, by making an empty assignment of the form -\csq{\ptpoint\ch\{\type\ch\}=\ch\{\ch\}}. - -Global and type-specific assignments can also be made with -\index tm{ptpush} and \index tm{atpush}. The ends of an arrow of cell -type \type\ attached to another arrow are shortened by the sum of the -global and type-specific \csq\ptpush. The ends of an arrow attached -to an arrow of cell type \type\ are shortened by the sum of the global -and type-specific \csq\atpush. - -\ifAAAA \else \newpage \fi -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Defining New Diagram Types} - -Before actually typesetting a diagram, \csq\Diagram\ begins a group and -expands \index tm{everyDiagram}. Similarly there a control sequences -\index tm{everyFigure} and \index tm{everyGraph}. The control -sequences \index tm{newDiagram}, \index tm{newFigure} and \index -tm{newGraph} allow one to further customize the setup for a named -class of diagrams. - -Expansion of -\@\newDiagram{@\\type\@}@\ is roughly equivalent to the following. -\indented % -\@\def\@\\type\@{\bgroup\everyDiagram\every@\\type\@\D@Diagram}@\ -\@\def\end@\\type\@{\D@endDiagram\egroup}@\ -\@\let\every@\\type\@\relax@\ -\endindented -Here \csq{\D@Diagram} and \csq{\D@endDiagram} are a pair of -inaccessible control sequences in terms of which \csq{\Diagram} and -\csq{\endDiagram} are similarly defined. Thus, the setup for diagrams -of type \type\ is customized by redefining -\csq\every\type. - -\eg -\newDiagram{Diag} -\def\everyDiag{\flexible \xgrid=0pt} - -\Diag -\cdots & \rTo & H_n A & \rTo & H_n X & \rTo & H_n(X,A) & \rTo & H_{n-1}A & \rTo & \cdots \\ -\endDiag -\endeg - -The diagram type \sindex tw{Diag@{\tt Diag}}{\tt Diag} is predefined in -\kuvio. The other predefined diagram types are \sindex tw{Dg@{\tt Dg}}{\tt Dg} -and \sindex tw{Long@{\tt Long}}{\tt Long}, both of which have \index -tm{flexible} and \csq{\xgrid=0pt} in addition to adjusting the values -of certain parameters. - -By a \iindex tw{Diagram} (capitalized) we will mean any diagram -typeset using \csqq\Diagram\endDiagram\ or any pair associated with a -diagram type defined using \index tm{newDiagram}. We will similarly -use the terms \iindex tw{Figure} and \iindex tw{Graph}. - -Rather than make global changes to the parameters available in \kuvio, -it is probably always best to identify the various kinds of diagrams -one is interested in and then define diagram types for each of -these. The predefined types have been set up with the author's -interests and tastes in mind but a little experimentation should yield -other useful possibilities. - -The following example uses \iindex tw{incremental assignment}, which -is available for all dimension assignments made available by \kuvio. - -\side -\newDiagram{Cat} -\def\everyCat{\everyDiag\cellwidth+=25pt\ygrid+=-1mm} - -\Cat - & & \stop & \rTo \pt t & \stop \\ - & \rTo _f & \stop & \rTo \pt m & \stop & \rTo _g & \\ - & & \stop & \rTo \pt b & \stop \\ -\Modify -\Two \pt t \pt m <\alpha -\Two \pt m \pt b <\beta -\endCat -\endside - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Flexible Grids} -\label{Flexible Grids} - -Expansion of the control sequence \index tm{flexible} alters the way -in which the macros in \kuvio\ position vertical grid lines in a -Diagram. Rather than simply spacing them uniformly, they are instead -placed using the knowledge of the particular vertices and arrows -occuring in the Diagram. - -The vertical grid lines in a flexible grid gravitate toward a single -column, the \iindex tw{gravitating column}. By default this will be -the centermost column, or columns in case of an even number, but the -gravitating column can also be set explicitly using the control -sequence \index tm{grav}. For many diagrams though, especially -simpler ones, the actual column will be immaterial. - -Columns gravitate in such a way as to ensure that the distance between -adjacent vertices which do not otherwise have a horizontal arrow -between them are at least \csq\xgrid\ apart. When \csq{\xgrid=0pt} -this behaviour can be used to make adjacent entries abut. - -\eg -\def\xc#1{#1\cdots#1} - -\Dg -v_1\xc\otimes v_k & \rMapsto & v_k\xc\otimes v_1 \\ -T(V) & \rTo & T(V) \\ -\dTo <\theta & & \dTo >\theta \\ -C(V,q) & \rTo & C(V,q) \\ -v_1\cdots v_k & \rMapsto & v_k\cdots v_1 & {} \equiv (v_1\cdots v_k)^* \\ -\endDg -\endeg - -Alignment entries are always centered on the column in which they -occur. Notice how the two rightmost entries in the following example -lie in different columns of the alignment. - -\eg -\Dg -A & & SO(4) & {} \approx S^3\times SO(3) \\ -\dMapsto & & \dTo \\ -[Ae_1] & \qquad & SO(4)/SO(3) & & {} \approx S^3 \\ -\endDg -\endeg - -The parameter \index tm{cellwidth} controls the minimum distance -between vertices the ends of a horizontal arrow. Other components of a -particular diagram may, of course, cause this distance to increase but -for Diagrams consisting of a single row arrows will be of a uniform -length. - -\eg -\cellwidth=25pt -\Diag -\cdots & \rTo & -\pi_j S^k & \rTo & \pi_j V(n,k) & \rTo & \pi_j V(n-1,k+1) & \rTo & \pi_{j-1} S^k & -\rTo & \cdots \\ -\endDiag -\endeg - -There are two parameters which control the distance between columns -containing the vertices at the ends of a diagonal arrow. Unless one of -the the \index tm{lb}, \index tm{rb} or \index tm{db} modifiers is -specified, the distance between the centers of the columns containing -the two vertices at either end of such an arrow will be at least -\index tm{columndist}. If one of these modifiers is specified, \index -tm{bracewidth} will instead be used to position columns in the -following manner. -$$ -\scale=1.5 -\let\labelstyle\textstyle -\Diagram -\frame\phantom{XXX}\endframe \\ - & \rdDashto \\ - & & \frame\phantom{XX}\endframe \\ -\Modify -\Line (2,0) (3.2,0) \tl\bullet \jt \hd{(R_r,C_r)} -\Math{(R_\ell,C_r)} (2,2) *{-.2} -\Line (0,2) (-1.3,2) \tl\bullet \jt \hd{(R_\ell,C_\ell)} -\Math{(R_r,C_\ell)} (0,0) *{1.2} -\Bij (0,0) (2,0) \tl\bullet _{d_\ell} -\Bij (0,2) (2,2) \hd\bullet ^{d_r} -\endDiagram -\qquad -\vcenter{\hsize=.4\ifAAAA 0\else 1\fi\hsize -Suppose the vertices at the two ends of a diagonal arrow have row and -column coordinates $(R_\ell,C_\ell)$ and $(R_r,C_r)$ with $C_\ell < -C_r$. If \csq\lb\ is specified then the distance $d_\ell$ from the -vertex at $(R_r,C_\ell)$ to the vertex at $(R_r,C_r)$ will be at least -\csq\bracewidth. If \csq\rb\ is specified then the distance $d_r$ -from the vertex at $(R_\ell,C_\ell)$ to the vertex at $(R_\ell,C_r)$ -will be at least \csq\bracewidth. If \csq\db\ is specified then both -requirements will be met.} -$$ -Note that specifying \index tm{db} is not equivalent to specifying -both \csq\lb\ and \csq\rb: The last modifier specified will take -precedence. - -We will refer to a diagonal arrow as being either \sindex -tw{arrows!braced}\emph{braced} or \sindex -tw{arrows!unbraced}\emph{unbraced} depending on whether -\csq\bracewidth\ or \csq\columndist\ has been used in positioning the columns -containing its head and tail vertices. We will also distinguish -between \sindex tw{arrows!fully braced}\emph{fully braced}, -\sindex tw{arrows!left braced}\emph{left braced} and -\sindex tw{arrows!right braced}\emph{right braced} -diagonal arrows, the latter two having been specified using the -\csq\lb\ and \csq\rb\ modifiers respectively. - -The control sequence \index tm{braced} causes all diagonal arrows to -be fully braced by default. It also inverts the action of \index -tm{db} so that diagonal arrows will be unbraced only when this -modifier is specified. The control sequence \index tm{loose} resets -the behaviour to the default and, additionally, sets -\csq{\columndist=0pt}. This may be appropriate for certain triangular -diagrams. - -\ifAAAA \newpage \fi - -The control sequence \csq\bb\ in the following (and other) examples invokes the -beautiful bbm family of fonts. - -\side -\loose -\Dg - & & {\bb R}^2 \\ - & \ldTo & & \rdTo \\ -C({\bb R}^2,-g)&& \rTo & & {\bb H} \\ -\endDg -\endside - -\ifAAAA \else \newpage \fi -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Predefined Cell Types} - -There are a number of fill macros defined in \kuvio. - -\def\testfill#1{\leavevmode\hbox to 8cm{\csq#1\hfil\hbox to 3cm{#1}}\par} - -\null{\parskip=0pt\parindent=25pt -%\testfill\leftarrowfill -%\testfill\rleftarrowfill -%\testfill\Leftarrowfill -%\testfill\leftharpoonupfill -%\testfill\leftharpoondownfill -%\testfill\hookleftarrowfill -%\testfill\leftintofill -%\testfill\lleftarrowfill -%\testfill\leftepifill -%\testfill\rlleftarrowfill -%\testfill\llleftarrowfill -%\testfill\rllleftarrowfill -%\testfill\rightarrowfill -\testfill\lrightarrowfill -%\testfill\Rightarrowfill -\testfill\rightharpoonupfill -\testfill\rightharpoondownfill -\testfill\hookrightarrowfill -\testfill\rightintofill -\testfill\rrightarrowfill -\testfill\rightepifill -\testfill\lrrightarrowfill -\testfill\rrrightarrowfill -\testfill\lrrrightarrowfill -%\testfill\relbarfill -\testfill\linefill -%\testfill\Relbarfill -\testfill\barfill -\testfill\cdotfill -\testfill\mapstofill -\testfill\leftrightarrowfill -\testfill\Leftrightarrowfill -%\testfill\leftarrowxfill -%\testfill\leftarrowxxfill -%\testfill\xleftarrowxfill -%\testfill\leftarrowxxxfill -%\testfill\xxleftarrowxfill -\testfill\rightarrowxfill -\testfill\rightarrowxxfill -\testfill\xrightarrowxfill -\testfill\rightarrowxxxfill -\testfill\xxrightarrowxfill -%\testfill\lleftarrowxfill -%\testfill\lleftarrowxxfill -%\testfill\xlleftarrowxfill -%\testfill\lleftarrowxxxfill -%\testfill\xxleftarrowxfill -\testfill\rrightarrowxfill -\testfill\rrightarrowxxfill -\testfill\xrrightarrowxfill -\testfill\rrightarrowxxxfill -\testfill\xxrrightarrowxfill -%\testfill\llleftarrowxfill -%\testfill\llleftarrowxxfill -%\testfill\xllleftarrowxfill -%\testfill\llleftarrowxxxfill -%\testfill\xxllleftarrowxfill -\testfill\rrrightarrowxfill -\testfill\rrrightarrowxxfill -\testfill\xrrrightarrowxfill -\testfill\rrrightarrowxxxfill -\testfill\xxrrrightarrowxfill -} - -Several of these also have leftward variants. -Of course, all can be used in diagrams, the nicest way -being to define a new cell type using \index tm{newcell}. - -The following cell types are predefined in \kuvio. - -\def\testcell#1{\leavevmode - \hbox to 6cm{{\tt #1}\hfil\csname #1box\endcsname{3cm}}\par} - -\null{\parskip=0pt\parindent=25pt -\testcell{To} -\testcell{Mapsto} -\testcell{Into} -\testcell{Epi} -\testcell{Line} -\testcell{Bij} -\testcell{Nul} -\testcell{Two} -\testcell{Bar} -\testcell{Eq} -\testcell{Null} -\testcell{Dots} -} - -The difference between a {\tt Nul} cell and a {\tt Null} cell is the -value of their respective label pads. The former acts like a phantom -{\tt To} cell, the latter like a phantom {\tt Two} cell. Phantom cells -can also be realized using the \csq{\nl} modifier. The type {\tt One} -can be used synonymously with {\tt To}. The type {\tt Impl} can be -used synonymously with {\tt Two}. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Another Font: arrsy10} -\label{Another Font: arrsy10} - -Expanding the control sequence \index tm{arrsy} -causes the author's \index tw{arrsy10} font to be -loaded.\footnote{$^\dagger$}% -{Use of this font is entirely optional and \csq\arrsy\ will result in an error -if arrsy10 has not been installed. Also, users of \LaTeX\ should use the {\tt -arrsy} option to the {\tt kuvio} package in place of the control sequence -\csq\arrsy, as described in \ref{Using kuvio with LaTeX}.} -The following fills then become available. - -\null{\parskip=0pt\parindent=25pt -%\testfill\Leftharpoonupfill -%\testfill\Leftparafill -%\testfill\Leftharpoondownfill -%\testfill\Leftallofill -\testfill\Rightharpoonupfill -%\testfill\Rightallofill -\testfill\Rightharpoondownfill -%\testfill\Rightparafill -%\testfill\Lleftarrowfill -\testfill\Rrightarrowfill -%\testfill\Rrelbarfill -\testfill\equivfill -%\testfill\Lleftrightarrowfill -%\testfill\dashbarfill -\testfill\dashfill -\testfill\rightdashfill -%\testfill\leftdashfill -\testfill\rightepifill -%\testfill\leftepifill -\testfill\rightmonofill -%\testfill\leftmonofill -\testfill\rightmonotailfill -%\testfill\leftmonotailfill -\testfill\rightisofill -%\testfill\leftisofill -\testfill\rightdashmonofill -%\testfill\leftdashmonofill -\testfill\rightdashmonotailfill -%\testfill\leftdashmonotailfill -\testfill\rightdashepifill -%\testfill\leftdashepifill -\testfill\rightdashisofill -%\testfill\leftdashisofill -\testfill\squigglefill -} - -The following cell types also become available. - -\null{\parskip=0pt\parindent=25pt -\testcell{Allo} -\testcell{Para} -\testcell{Three} -\testcell{Equiv} -\testcell{Nulll} -\testcell{Dash} -\testcell{Dashto} -\testcell{Mono} -\testcell{Tail} -\testcell{Iso} -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Fill Cells and Box Cells} - -Both fill and box macros can be used to specify arrows in a diagram -without defining a new cell type. This (especially the former) may be -useful for seldomly used arrows. The macros in question are used -exactly as if we had defined cell types {\tt Fillcell} and {\tt -Boxcell} except that the cell macros associated with these types -accept a single argument, a fill or box macro. - -\side -\Diagram -A & \rFillcell\lrightarrowfill ^f & B \\ -\endDiagram -\endside - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Breaking Arrows} - -White rules can be used to break arrows in a more general way than is -provided for by \csq{\stop}. The modifier \sindex -tw{arrows!breaking}\index tm{br} causes an arrow to be typeset on top -of a white rule. - -\side -\Graph{3cm,3}{2cm,2} -\To (2,2) (2,0) -\Line (0,1) (3,1) \br -\Two (1,2) (1,0) \br -\endGraph -\endside - -The order in which arrows are typeset here is significant: Cell macros -are processed from left to right and top to bottom. The \index -tm{pp} modifier can be used to change the order in which alignment -cells are typeset. - -The modifier \index tm{rl} causes a white rule to be -typeset in place of an arrow. - -Global and type-specific assignments made with \index tm{breakpad} -determine the width of the rule used with \csq\br\ or \csq\rl. The -width used with an arrow of cell type \type\ is twice the sum of an -optional dimension passed as an argument to \csq\br\ or \csq\rl\ and -the global and type-specific values of \csq{\breakpad}. - -The cell type \sindex tw{Rule@{\tt Rule}}{\tt Rule} can also used to -typeset rules as arrows in a diagram. In this case the \index tm{rw} -modifier can be used to set the width of the rule. The default width -can be set using \index tm{Rulewidth}. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Shades of Gray} - -The pair \index tp{gr}\endgr\ can be used to typeset material in -shades of gray. - -\side -\gr{.5}\vrule width 1cm height 12pt\endgr -\endside - -The \iindex tw{graylevel} should lie between 0 (black) and 1 (white) -inclusive. There are also pairs \index tp{gray}\endgray\ for a -graylevel which can be set using \index tm{graygray} (the predefined -value being .5), \index tp{black}\endblack\ for graylevel 0 and -\index tp{white}\endwhite\ for graylevel 1. Arrows and modifications -can be typeset in shades of gray using the first control sequence of -one of the above pairs as a modifier. - -\side -\Diagram -A & \rTo \gray & B \\ -\endDiagram -\endside - -Shades of gray may print unsatisfactorily on some printers. - -\ifAAAA \else \newpage \fi -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Frames and Shades} - -The pair \index tp{frame}\endframe\ can be used to put a frame around -the enclosed material. This material should not contain any vertical -commands (unless enclosed in a box). - -\eg -\input calc % my calculus macros - -Laplacian:\quad -\frame$\displaystyle - \Delta f = \p\wrt{x^i}\left( g^{ki} \p f\wrt{x^k} \right) - + g^{kj} \p f\wrt{x^k} \Gamma^i_{ij} -$\endframe -\endeg - -The thickness of the rule can be changed by making an assignment to -\index tm{framerulewidth} while the padding around the formula can be -changed by making an assignment to \index tm{framepad}. Padding can -also be applied selectively to the sides of the material being framed -using \index tm{lpad}, \index tm{rpad}, \index tm{bpad} and \index -tm{tpad}. The graylevel of the frame can be changed using -\index tm{framegray}. One can put a frame around a diagram using -\index tm{framed}. - -The pair \index tp{shade}\endshade\ places a shadow behind a frame. -The offsets of the bottom left and top right corners of the shadow -must be specified as two coordinate pairs. - -\eg -\framepad=1cm \shadegray=.5 -\shade{10pt,-10pt}{5pt,-5pt}\vbox{\hsize=.8\hsize -``Om man l\"aser svenska k\"arleks visor fr\aa n 1600--talet \"ar det -sl\aa ende hur vanligt det \"ar att de \"alskande drar sig undan och m\"ots i -den gr\"ona naturen. F\"or de allra flesta var det endast d\"ar som man kunde -uppn\aa\ n\aa gon sann avskildhet; under denna epok var sex en -syssels\"attning som i h\"og grad idkades under \"oppen himmel.''\par -Peter Englund, {\it F\"orflutenhetens Landskap}.}\endshade -\endeg - -Frames and solid boxes can be typeset as modifications using -\index tm{Frame} and \index tm{Box}. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Rotation and Reflection} - -There are several control sequence pairs in \kuvio\ for performing -rotations and reflections. The material enclosed by these pairs is -enclosed in an \csq\hbox\ and should not contain any vertical commands -unless enclosed in a \csq\vbox. - -Let us play with the following {\tt .eps} file. - -\eg -\epsffile{face.eps} -\endeg - -{\escapechar=-1 - \xdef\verbatimhook{\string\\vbhook} -} -{\catcode`\_=11 \catcode`\^^M=12 \endlinechar=-1 % - \gdef\hookedverbatim#1^^M{\def\_found{#1}% - \ifx\_found\_endverbatimverbatim - \def\_next{\egroup\endverbatim}% - \else - \ifx\_found\verbatimhook - \def\_next{\let\_everyline\verbatimline - \let\_everyendline\verbatimendline - \def\verbatimline{\leavevmode\bgroup\verbatimit}% - \def\verbatimendline{\egroup\par - \let\verbatimline\_everyline - \let\verbatimendline\_everyendline} - \hookedverbatim}% - \else - \def\_next{\verbatimline #1\verbatimendline\hookedverbatim}% - \fi - \fi - \_next} -} - -\ifAAAA -\newpage - -The pair \index tp{flip}\endflip\ rotates material by 180 degrees. - -\eg -\flip\epsffile{face.eps}\endflip -\endeg -\fi - -The pair \index tp{land}\endland\ rotates material by 90 degrees -counterclockwise. Similarly, the pair \index tp{opland}\endopland\ -rotates material by 90 degrees clockwise. - -\eg -\land\epsffile{face.eps}\endland \opland\epsffile{face.eps}\endopland -\endeg - -A diagram can be rotated using \index tm{landscape} or \index -tm{oplandscape}. - -{\expandafter\let\csname _verbatimverbatim\endcsname\hookedverbatim -\verbatim -{\bf George W. Whitehead}, {\it Elements of Homotopy Theory}, page 592. -\bigskip -$$ -\landscape \let\labelstyle\textstyle \cellpad=10pt -\Diagram -\vbhook -blah, blah, blah ... -\endDiagram -$$ -\endverbatim -} - -\newpage -{\bf George W. Whitehead}, \emph{Elements of Homotopy Theory}, page 592. -\bigskip -{\compileto{tdwk/eg03} - \input eg/eg03 -} -\newpage - -\ifAAAA -\else -The pair \index tp{flip}\endflip\ rotates material by 180 degrees. - -\eg -\flip\epsffile{face.eps}\endflip -\endeg -\fi - -Material can also be reflected across horizontal or vertical mirrors. - -\eg -\hmir\epsffile{face.eps}\endhmir -\endeg - -\side -\vmir Who me, get carried away?!\endvmir -\endside - -One can also rotate material by an arbitrary angle using \index -tp{rot}\endrot\ but be aware that this pair does not modify the -bounding box of the rotated material. - -\verbatim -\rot{45}\epsffile{face.eps}\endrot -\endverbatim -\vskip12mm -\rot{45}\epsffile{face.eps}\endrot -\vskip5mm - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Compilation} - -Due to the large number of computations being performed, typesetting -large diagrams can be rather time-consuming. The control sequence -\index tm{compileto} can be used to compile a diagram into a form -which the macros in \kuvio\ can typeset more quickly. The information -contained in a diagram is then written to two files having the -extensions {\tt .kdg} and {\tt .kuv}. - -\verbatim -\compileto{stable} -\endverbatim -\eg -\Long -0 & & & & & & 0 \\ -\dEq & & & & & & \dEq \\ -\pi_{n+1} S^k & \rTo & \pi_n O(k) & \rTo & \pi_n O(k+1) & \rTo & \pi_n S^k \\ -\endLong -\endeg - -Expansion of \@\compileto{@\\name\@}@\ causes the next diagram in the input -(at a given level of grouping) to be compiled to, or read from, the files -\sindex tw{kdg@{\tt\leavevmode\llap{.}kdg}}% -\sindex tw{kdg@{\tt\leavevmode\llap{.}kuv}}% -\name{\tt .kdg} and \name{\tt .kuv}. -If these files already exist, then the text of the diagram is compared -with the contents of \name{\tt .kdg} to determine whether or not the -diagram should be recompiled or read from -\name{\tt .kuv}. - -To force the recompilation of a diagram, \index tm{recompileto} can -be used in place of \csq{\compileto}. The control sequence \index -tm{recompile} can also be used to force recompilation at a given -level of grouping. The control sequence \index tm{nocompile} can be -used to turn off compilation at a given level of grouping. Note that -\csq\global\csq\recompile\ and \csq\global\csq\nocompile\ behave as expected. - -Compilation can be automated using \csq\autocompileto. Expansion of -\@\autocompileto{@\\name\@}@\ allocates a count register, \index -tm{autocompilecounter}, and causes the tokens -\indented % -\@\global\advance\autocompilecounter by 1@\ -\@\compileto{@\\name\@-\the\autocompilecounter}@\ -\endindented -to be expanded just prior to each expansion of \csq\everyDiagram, -\csq\everyFigure\ or \csq\everyGraph. -Each subsequent expansion of \csq\autocompileto\ resets -\csq\autocompilecounter\ to zero. -Note that \csq\autocompilecounter\ is incremented even if -\csq\nocompile\ has been specified. - -The control sequence \index tm{autocompile} is an abbreviation for -\@\autocompileto{.\jobname}@\. - -\verbatim -\input kuvio \autocompile -\endverbatim -\hskip\egindent{\verbatimit blah, blah, blah...} - -Be aware that compilation hard codes much information into {\tt .kuv} -files. While changes to diagram input are detected during future \TeX -ings, changes to many parameters which affect the layout of components -of a diagram are not. It may be necessary to use \index -tm{recompile} to have such changes propagate to compiled files. Note -that whether or not \csq\gridlines\ was specified when a diagram was -compiled will be detected by the macros. Also, parameters and control -sequences which affect only the box containing a diagram -(\csq\Diagrampad, \csq\lpad, \csq\landscape, \csq\deep, etc) can be -safely applied to a diagram which has already been compiled. - -\ifAAAA \else \newpage \fi -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Making Definitions} - -\TeX\ associates a category code with each character of input and once -a category code has been assigned it cannot be changed. Unfortunately, -since several category codes are changed between diagram delimiters -like \csqq\Diagram\endDiagram, an ordinary \index tm{def} having -diagram macros in the replacement text may not behave as expected. In -particular, the following characters require special consideration. -\code -( * / : < > ^ _ | -\endcode -Each of these should be preceded by a backslash when -used as a modifier in a macro definition. - -\eg -\def\ReallySimpleRightwardArrow#1#2#3{% - \Dg #1 & \rTo \^{#2} & #3 \\ \endDg} - -\ReallySimpleRightwardArrow{X^I}{e_0}X -\endeg - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Name Clashes} - -Macros are loaded safely from \kuvio. If a name conflict is detected -for an accessible control sequence (except for those having the string -``kuvio'' as part of their names), a message announces the -conflict. The control sequence is then either made available through -the control sequence \index tm{kuviocs}, or it is redefined and the -old definition is made available through the control sequence \index -tm{nonkuviocs}. - -For example, \index tw{LaTeX@\LaTeX} defines \index tm{center}. This -control sequence is not redefined by \kuvio: One must use -\@\kuviocs\center@\ to access the control sequence documented on page -\pageref{center def}. Also, {\tt plain.tex} defines \index -tm{land}. This control sequence {\sl is\/} redefined by -\kuvio: The version defined in {\tt plain.tex} can be accessed as -\@\nonkuviocs\land@\. (It is also available as -\csq\wedge\ since {\tt plain.tex} make this equivalent to \csq\land.) - -If a control sequence has not been defined by \kuvio, then prefixing -it by \csq\kuviocs\ or \csq\nonkuviocs\ does nothing. - -The control sequence \index tm{kuvioforce} can be used to force -redefinition of a control sequence which \kuvio\ makes available -through \csq\kuviocs. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Using kuvio.tex with \LaTeX} -\label{Using kuvio with LaTeX} - -Users of \sindex tw{LaTeX@\LaTeX!aka \LaTeXe}\LaTeX -\footnote{$^\dagger$}{\LaTeXe, not \LaTeX\ 2.09.} -can load \kuvio\ via the package file {\tt kuvio.sty} using the -\@\usepackage{kuvio}@\ declaration. This package provides the option -{\tt arrsy} which should be used in place of the control sequence -\csq\arrsy. This option causes the \LaTeX\ package file {\tt -arrsy.sty} to be loaded in place of its {\tt plain} \TeX\ counterpart -{\tt arrsy.tex}. - -\verbatim -\usepackage[arrsy]{kuvio} -\endverbatim - -There are also options {\tt autocompile}, {\tt gridlines}, {\tt -kuviofmt}, {\tt nocompile}, {\tt overgrid} and {\tt recompile} which -can be used in place of the corresponding control sequences to affect -global changes on a document, although none of these options offer any -additional functionality. - -Diagrams should still be input using the -\ch\\\emph{type} \csq\end\emph{\type} syntax and {\sl not\/} -the \LaTeX\ environment syntax, \@\begin{@\\emph{type}\@}@\ -\@\end{@\\emph{type}\@}@\. The latter may appear to work but will fail when -diagrams are being compiled. - -Several environments in the {\tt amsmath} package of -\sindex tw{AMSLaTeX@\AMSLaTeX}\AMSLaTeX\ read their -bodies as the argument of a delimited macro. This has the side effect -of setting the category codes of all the characters in the body before -its expansion. This is causes trouble for \kuvio\ since it wants to -change several catcodes between a pair of diagram delimiters. To get -around this the control sequence \index tm{forcekdg} will cause -diagrams at the same level of grouping that are not already being -compiled to be written to and then read from the file -\csq{\jobname.kdg}, thereby circumventing any catcode assignments -already made between a pair of diagram delimiters. This can be -affected globally in \LaTeX\ by loading the {\tt kuvio} package with -the {\tt forcekdg} option. - -\csq\forcekdg\ is expanded automatically if the {\tt amsmath} package -is being used. If you don't want this, load {\tt kuvio} with the {\tt -unforcekdg} option. - -The \LaTeX\ user should also aware of the following section when placing -diagrams in an alignment-like environment. - -%***************************************************************************** -\section{Specifying Diagrams in Alignments} -\label{Specifying Diagrams in Alignments} - -Due to the nature in which \TeX\ processes alignments, it is an -unfortunate necessity that a diagram specified inside an \index -tw{alignment} (\csq\halign, etc) be enclosed in a pair of braces. - -\eg -$$ -\eqalign{ - {\rm equalizer:}\qquad& {\Dg X & \rTo & Y & \rTo \up{3pt} - \rTo \up{-3pt} & Z \\ \endDg}\cr - \noalign{\medskip} - {\rm coequalizer:}\qquad& {\Dg X & \rTo \up{3pt} - \rTo \up{-3pt} & Y & \rTo & Z \\ \endDg}\cr -} -$$ -\endeg - -The same consideration should be bourn in mind by \LaTeX\ and \AMSLaTeX\ -users when using any {\tt array}-like environment. - -\newpage -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -{\input tdwk-s } - -\newpage -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\input tdwk-e - -\newpage -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Availability} - -Both \kuvio\ and {\tt arrsy10} are available -by anonymous ftp from the following location. -\code -ftp.math.ubc.ca:/pub/svensson -\endcode -They can also be found in -$\langle${\it tex-archive}$\rangle${\tt /macros/generic/diagrams/kuvio} -on any of the following CTAN hosts. -\code -ftp.dante.de (Deutschland) -ftp.tex.ac.uk (England) -ftp.cdrom.com (USA) -\endcode - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Copyright} - -The file \kuvio\ may be freely distributed and used, with the -following restrictions. - -{\leftskip=15pt -\def\pt#1 {\leavevmode\llap{\hbox to 15pt{#1.\hss}}} -\pt1 Substantial use of \kuvio\ in any published work should be suitably -acknowledged. - -\pt2 No changes or modifications are to be made to \kuvio. - -\pt3 The documentation, \emph{Typesetting diagrams with kuvio.tex}, -must be distributed with \kuvio. - -} - -I would enjoy receiving a copy of any book, journal -article or thesis prepared using \kuvio. - -Thank you. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Final Thoughts} - -This document was written using {\tt plain.tex}, {\tt epsf.tex} (from -the {\tt dvips} distribution) and homegrown macros. - -Remember to use grouping and diagram types to keep changes local to a -particular level (as was done with the examples in this manual). - -As noted earlier, \csq\special\ may wreak havoc with your {\tt dvi} -file previewer. On the NeXT, Rokicki's \TeX view\ has no trouble. -However, older versions of \TeX view may display rotated arrows -improperly. The version from February 1994 (last seen at {\tt -labrea.stanford.edu:/pub/texview.tar.Z}) has fixed this problem. - -If you have trouble previewing a {\tt dvi} file and can preview a \PS\ file, -the command -\code -dvips name.dvi -o -\endcode -generates the \PS\ file {\tt name.ps} from the {\tt dvi} file {\tt name.dvi}. -Save trees. Ghostview does an excellent job of previewing \PS\ under X. - -Two notable limitations of \kuvio: -(1) Diagrams cannot be nested and -(2) there are no helpful error messages if something goes wrong. -This will probably not change anytime soon, if ever. - -\opentmp\closetmp - -\def\csqn#1{\leavevmode\llap{\ch\\}{\tt #1}} -\def\csqqn#1 #2{\leavevmode\llap{\ch\\}{\tt #1} \csq#2} - -\newpage -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\section{Index} - -The page number of a Summary entry is set in italics. - -\printindex - -\bye - -% Local Variables: -% mode:TeX -% agss-tex-jobname:"tdwk" -% End: |