summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/generic/xypic/xyknot.doc
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/generic/xypic/xyknot.doc')
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyknot.doc2014
1 files changed, 0 insertions, 2014 deletions
diff --git a/Master/texmf-dist/source/generic/xypic/xyknot.doc b/Master/texmf-dist/source/generic/xypic/xyknot.doc
deleted file mode 100644
index e3c3f132b92..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyknot.doc
+++ /dev/null
@@ -1,2014 +0,0 @@
-%% $Id: xyknot.doc,v 3.4 1997/05/18 01:13:24 ross Exp $
-%%
-%% Xy-pic ``Knots and Links'' feature.
-%% Copyright (c) 1994-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this macro package; if not, write to the Free Software Foundation,
-%% Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{knot}{Knots and Links feature}{\stripRCS$Revision: 3.4 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\noindent
- This feature provides a language for specifying knots, links and
- general arrangements of crossing strings.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\TODO: Document this feature!
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\DOCMODE(
-\message{knots and links,}
-\DOCMODE)
-
-This |knot| feature is really a `construction kit', providing pieces which
-may be placed appropriately to form knots and links.
-The types of pieces provided are of two kinds: the ``crossings'',
-representing one string crossing over or under another;
-and ``joins'' which are used to connect what would otherwise be loose ends.
-Several types of each are provided, along with a simple way of specifying
-where to place arrowheads and labels.
-
-\begin{figure*}[tb]
-\begin{syntax}
-%
- <knot-piece>
- &\iss & <piece><scale><knot-labels>
- & interpret knot-piece
-\cr
-\noalign{\smallskip}
-%
- <piece>
- &\iss & <crossing>\orr<join>
- & piece is a ??!^[crossing] or a ??!^[join]
-\cr
-\noalign{\smallskip}
-%
- <scale>
- &\iss & <empty>\orr~|-|~\orr |[|<num>|]|
- & invert or ??!^[scale the knot piece]; \cr
-& & \orr |~|<pos><pos><pos><pos>
- & ??!^[alter size and shape] using the <pos>s
-\cr
-%
-\noalign{\smallskip}
-<knot-labels>
- &\iss & <empty>\orr <knot-tips><knot-labels>
- & arrowtips at ends, aligned with orientation
-\cr
-%
-\noalign{\smallskip}
- & & \orr <where><what><knot-labels>
- & list??^[knot-labels] of ??!^[arrowtips, breaks and labels]
-\cr
-%
-\noalign{\smallskip}
- & & \orr |@|<adjust><knot-labels>
- & ??!^[adjust hole] position for a <crossing>;
- \newline adjust other parameter??^[join control] for a <join>.
-\cr
-%
-\noalign{\smallskip}
- <knot-tips>
- & \iss &~~~|==|\orr|=!| & ??!^[arrowtips] at both/neither end
- \cr
- & & \orr|=<|\orr|=>| & ??!^[arrowtips] also at start/finish
-\cr
-\noalign{\smallskip}
-%
- <where>
- & \iss &~~~||||\orr||||<adjust> & `over' string on a <crossing>;%
- ??^[which string]
- \newline middle??^[join places] place on a <join>.
-\cr
- & & \orr|<|\orr|<|<adjust> & initial portion of `under' string
- on a <crossing>;??^[which string]
- \newline earlier??^[join places] place on a <join>.
-\cr
- & & \orr|>|\orr|>|<adjust> & final portion of `under' string
- on a <crossing>;??^[which string]
- \newline later??^[join places] place on a <join>.
-\cr
-%
-\noalign{\smallskip}
- <adjust>
- & \iss &~~~|(+|<num>|)|\orr|(-|<num>|)|
- & ??!^[adjustment] from current value of parameter
-\cr
- & & \orr|(=|<num>|)|\orr|(|<num>|)| & set parameter value??^[adjustment]
-\cr
-\noalign{\smallskip}
-%
- <what>
- &\iss & ~~~|>|\orr|<| & arrowhead aligned with/against ??!^[orientation]
-\cr
- & & \orr|\knothole|\orr|\khole| & leave ??!^[hole in the string]
-\cr
- & & \orr|{|<text>|}| & set??^[simple label] <text> as label,
- using |\labelstyle|
-\cr
- & & \orr|{*|<object>|}| & drop <object>??^[knot object]
-\cr
- & & \orr|{|<anchor><it>|}| & <break> or label??^[knot object]
- as on an <arrow>
-\cr
- & & \orr|||| & ??!^[null-break]
-\cr
-%
-\end{syntax}
-\caption{\protect<knot-piece> construction set}
-??=[f.path]
-\end{figure*}
-
-
-All the pieces ultimately use curves from the |curve| extension, usually
-indirectly via the |arrow| feature.
-As such, processing can be memory-intensive and may seem rather slow.
-All the warnings and advice given elsewhere on techniques to handle pages
-and individual diagrams with many curves are especially applicable when
-using this feature.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-Most constructions use |\ar| so make sure this feature is loaded.
-
-\DOCMODE(
-\xyrequire{arrow}\xycatcodes
-\DOCMODE)
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\centerline{
-%
-\UseComputerModernTips
-\vtop{\vbox{\xygraph{!{0;/r1.5pc/:} !{\vover}[u]
- !{\hcap[-2]<<} [d] !{\vover-} [ruu] !{\hcap[2]><}}\smallskip}
-\hbox{\qquad\ \small simple link}}\hfil
-%
-% Figure-eight
-%
-\vtop{\vbox{\xygraph{!{0;/r1.5pc/:}
- [u] !{\vloop<(-.005)\khole||\vcrossneg \vunder- }
- [] !{\ar @{-}@'{p-(1,0)@+}+(-1,1)}
- [ul] !{\vcap[3]>\khole}
- [rrr] !{\ar @{-}@'{p-(0,1)@+}-(1,1)}
-}\smallskip}\hbox{\small figure-8 knot}}\hfil\quad
-%
-% cinque-foil
-%
-\vtop{\vbox{\xygraph{!{0;/r1.25pc/:}
- !P5"a"{~>{}} !P10"b"{~:{(1.7487,0):}~>{}}
- !P20"c"{~={-9}~:{(2.2,0):}~>{}}
- !{\xunderv~{"b3"}{"b2"}{"a2"}{"a1"}}
- !{\xunderv~{"b5"}{"b4"}{"a3"}{"a2"}}
- !{\xunderv~{"b7"}{"b6"}{"a4"}{"a3"}}
- !{\xunderv~{"b9"}{"b8"}{"a5"}{"a4"}}
- !{\xunderv~{"b1"}{"b10"}{"a1"}{"a5"}}
- !{\vloop~{"c3"}{"c2"}{"b2"}{"b1"}<<}
- !{\vloop~{"c7"}{"c6"}{"b4"}{"b3"}<<}
- !{\vloop~{"c11"}{"c10"}{"b6"}{"b5"}<<}
- !{\vloop~{"c15"}{"c14"}{"b8"}{"b7"}<<}
- !{\vloop~{"c19"}{"c18"}{"b10"}{"b9"}<<}
-}\smallskip}\hbox{\quad\ \small cinquefoil}}
-}%
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection*{Crossings}
-
-A ``crossing'' is intended to represent two strings passing close by,
-but not meeting. The macros provided specify typesetting within a square
-cell of coordinate values; using a non-square basis alters this shape,
-but see also note~??[alter size and shape] below, for the technique
-that was used in the ``cinquefoil'' example above.
-
-\begin{notes}
-\note??=[crossing]
-Several families of crossing are provided. Those having names as |\v...|
-and |\h...| are designed to stack respectively vertically and
-horizontally. More precisely the current <pos> starts at the top-left
-corner and finishes at either the bottom-left or top-right.
-Say that a crossing is either a `vertical crossing' or `horizontal
-crossing' respectively.
-
-This certainly applies to the |\..cross..| and |\..twist..| families,
-see figure~??[f.crossings] in which the strings enter and leave the
-square all with vertical tangents or all with horizontal tangents.
-Indeed {\em all} crossings are either vertical or horizontal, with
-the final letter indicating which for the |\xover..| families.
-
-Furthermore there is a natural {\em orientation\/} for each crossing,
-as well as along each strand. This corresponds to the order in which ink
-is applied to the printed page, following the natural parametrization of
-each strand as a curved connection or arrow.
-This orientation determines whether a crossing is `over' (mathematically,
-positive or right-handed) or `under' (mathematically, negative or
-left-handed). It is used in determining the location of labels and the
-direction of arrowheads placed along the strings.
-Note that |\..cross..| and |\..twist..| crossings may set the same
-curves, but with different orientation and label-positioning.
-
-\begin{figure*}[ht]
-$$
-\knotholesize{5pt}\UseComputerModernTips
- \xygraph{!{0;/r2pc/:}="O"
- [] !{\vcross<>|>>><{x}|{y}>{z}}
- [rur]!{\vcrossneg<>|>>><{x}|{y}>{z}}
- [rur]!{\vuncross<>|>>><{x}|{y}>{z}}
- [urrr]!{\hcross<>|>>><{x}|{y}>{z}}
- [r]!{\hcrossneg<>|>>><{x}|{y}>{z}}
- [r]!{\huncross<>|>>><{x}|{y}>{z}}
- "O" !{+(.5,-1.5)}
- [] !{*\txt\small\tt{\string\vcross}}
- [rr]!{*\txt\small\tt{\string\vcrossneg}}
- [rr]!{*\txt\small\tt{\string\vuncross}}
- [rrr]!{*\txt\small\tt{\string\hcross}}
- [rr]!{*\txt\small\tt{\string\hcrossneg}}
- [rr]!{*\txt\small\tt{\string\huncross}}
- "O" !{+(0,-3)}
- [] !{\vtwist<>|>>><{x}|{y}>{z}}
- [rur]!{\vtwistneg<>|>>><{x}|{y}>{z}}
- [rur]!{\vuntwist<>|>>><{x}|{y}>{z}}
- [urrr]!{\htwist<>|>>><{x}|{y}>{z}}
- [r]!{\htwistneg<>|>>><{x}|{y}>{z}}
- [r]!{\huntwist<>|>>><{x}|{y}>{z}}
- "O" !{+(.5,-4.5)}
- !{*\txt\small\tt{\string\vtwist}}
- [rr]!{*\txt\small\tt{\string\vtwistneg}}
- [rr]!{*\txt\small\tt{\string\vuntwist}}
- [rrr]!{*\txt\small\tt{\string\htwist}}
- [rr]!{*\txt\small\tt{\string\htwistneg}}
- [rr]!{*\txt\small\tt{\string\huntwist}}
- "O" !{+(0,-6)}
- []!{\xoverv<>|>>><{x}|{y}>{z}}
- [urr]!{\xunderv<>|>>><{x}|{y}>{z}}
- [urr]!{\xunoverv<>|>>><{x}|{y}>{z}}
- [urrr]!{\xoverh<>|>>><{x}|{y}>{z}}
- [r]!{\xunderh<>|>>><{x}|{y}>{z}}
- [r]!{\xunoverh<>|>>><{x}|{y}>{z}}
- "O" !{+(.5,-7.5)}
- !{*\txt\small\tt{\string\xoverv}}
- [rr]!{*\txt\small\tt{\string\xunderv}}
- [rr]!{*\txt\small\tt{\string\xunoverv}}
- [rrr]!{*\txt\small\tt{\string\xoverh}}
- [rr]!{*\txt\small\tt{\string\xunderh}}
- [rr]!{*\txt\small\tt{\string\xunoverh}}
- "O" !{+(0,-9)}
- !{\vover<>|>>><{x}|{y}>{z}}
- [rur]!{\vunder<>|>>><{x}|{y}>{z}}
- [rur]!{\vunover<>|>>><{x}|{y}>{z}}
- [urrr]!{\hover<>|>>><{x}|{y}>{z}}
- [r]!{\hunder<>|>>><{x}|{y}>{z}}
- [r]!{\hunover<>|>>><{x}|{y}>{z}}
- "O" !{+(.5,-10.5)}
- !{*\txt\small\tt{\string\vover}}
- [rr]!{*\txt\small\tt{\string\vunder}}
- [rr]!{*\txt\small\tt{\string\vunover}}
- [rrr]!{*\txt\small\tt{\string\hover}}
- [rr]!{*\txt\small\tt{\string\hunder}}
- [rr]!{*\txt\small\tt{\string\hunover}}
-}$$
-\caption{knot crossings with orientations and label positions}%
-??=[f.crossings]
-\end{figure*}
-
-\noindent
-Figure~??[f.crossings] displays the orientation on all the crossings,
-grouping them into subfamilies consisting of right-handed, left-handed
-and non-crossings. Also indicated are the default positions for labels
-and arrow-tips; each piece uses the same code for tips and labels,
-e.g. |\vover<>||>>><{x}||{y}>{z}|.
-
-The |\x...| crossings do not stack easily since their tangents are at
-$45^\circ$ to the coordinate axes. It is the last letter in the name
-which denotes whether the particular crossing is vertical or horizontal.
-On the other hand |\vover|\,, |\vunder| etc. stack vertically on top of
-a |\vcross|\,, |\vtwist| etc.; similarly |\hover| stacks at the left
-of |\hcross|\,, |\htwist| etc.
-
-\begin{code}
-$$\xy 0;/r1pc/:
- ,{\vunder\vtwist\vtwist\vunder-}\endxy
-\qquad\qquad\qquad \xy 0;/r1pc/:+(0,-1.5)
- ,{\hover\hcross\hcross\hover-}\endxy$$
-\end{code}
-\docode
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{Parsing}
-
-\DOCMODE(
-\xydef@\xykparsecross@{%
- \def\xykSCALE@@{}\edef\xyknotPLACE{\xykmidPLACE@}%
- \let\xykparser@=\xykparsecross@@
- \def\xykdefaultbreak@{\let\xykbreak@=\xykforetemp@
- \def\xyknotPLACE{(.5)}\appendtoholder@}%
- \xyFN@\xykparsescale@ }
-
-{\xyuncatcodes \catcode`@=11
-\gdef\next{%
- \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsecross@@}%
- \else\addLT@\ifx\next \addLT@\DN@{\xyprecross@}%
- \else\addGT@\ifx\next \addGT@\DN@{\xypostcross@}%
- \else\addEQ@\ifx\next \addEQ@\DN@{\xyFN@\xykparsetips@@}%
- \else\ifx|\next\DN@|{\xymidcross@}%
- \else\addAT@\ifx\next \addAT@\DN@(##1){%
- \xyadjustBREAK@i##1@@\xyFN@\xykparsecross@@}%
- \else\DN@{\afterknot@}%
- \fi\fi\fi\fi\fi\fi \next@ }}
-\xylet@\xykparsecross@@=\next
-\DOCMODE)
-
-\DOCMODE(
-\xydef@\xyprecross@{%
- \def\xykholder@{\xykprebreak@@}%
- \edef\xyknotPLACE{\xykprePLACE@}%
- \xyFN@\xykparsebreak@}
-
-\xydef@\xypostcross@{%
- \def\xykholder@{\xykpostbreak@@}%
- \edef\xyknotPLACE{\xykpostPLACE@}%
- \xyFN@\xykparsebreak@}
-
-\xydef@\xymidcross@{%
- \def\xykholder@{\xykmidbreak@@}%
- \edef\xyknotPLACE{\xykmidPLACE@}%
- \xyFN@\xykparsebreak@}
-\DOCMODE)
-
-These macros are common to most crossings.
-
-\DOCMODE(
-\xydef@\xykcross@#1{\xykcheckTIPS@
- \expandafter\toks@\expandafter{\expandafter#1\knotSTYLE}}
-
-\xydef@\xykoverstring@{\addtotoks@{{}}\xykmidbreak@ \xyknottips@}
-\xydef@\xykunderstring@{\xykprebreak@ \xykpostbreak@ \xyknottips@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{``cross'' crossings:}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The initialisation\dots
-
-\DOCMODE(
-\xydef@\vcross{\begingroup\def\afterknot@{\xyvcross}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-\xydef@\hcross{\begingroup\def\afterknot@{\xyhcross}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-\xydef@\vcrossneg{\begingroup\def\afterknot@{\xyvcrossneg}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-\xydef@\hcrossneg{\begingroup\def\afterknot@{\xyhcrossneg}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-\xydef@\vuncross{\begingroup\def\afterknot@{\xyvuncross}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{}%
- \xyFN@\xykparsecross@ }%
-\xydef@\huncross{\begingroup\def\afterknot@{\xyhuncross}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{}%
- \xyFN@\xykparsecross@ }%
-\DOCMODE)
-
-The interface\dots
-
-\DOCMODE(
-\xydef@\xyvcross{\xykcross@\xykcrossv
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyhcross{\xykcross@\xykcrossh
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
-
-\xydef@\xyvcrossneg{\xykcross@\xykcrossv
- \xykunderstring@ \xykoverstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyhcrossneg{\xykcross@\xykcrossh
- \xykunderstring@ \xykoverstring@ \xykhvobject@{+(1,0)}}
-
-\xydef@\xyvuncross{\xykcross@\xykuncrossv
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyhuncross{\xykcross@\xykuncrossh
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
-\DOCMODE)
-
-The drawing code\dots
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<",{\xykz_\ar #1@'{"_<"**{}?(.25)@+,?+(.375,0)@+,
- "_>";"^>"**{}?-(.375,0)@+,?(.25)@+}"_>"#3#4#5},
- "_<",{\xykz^\ar #2@'{"^<"**{}?(.25)@+,?+(.375,0)@+,
- "^>";"_>"**{}?-(.375,0)@+,?(.25)@+}"^>"#6#7#8}
- \restore\POS #9}}
-\xylet@\xykcrossv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "_<",{\xykz_\ar #1@'{"_>"**{}?(.25)@+,?+(0,.375)@+,
- "^>";"^<"**{}?-(0,.375)@+,?(.25)@+}"^>"#3#4#5},
- "_>",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?+(0,.375)@+,
- "^<";"^>"**{}?-(0,.375)@+,?(.25)@+}"^<"#6#7#8}
- \restore\POS #9}}
-\xylet@\xykcrossh=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<",{\xykz^\ar #1@'{"_<"**{}?(.25)@+,?(.375)+(.375,0)@+,
- "^>";"_>"**{}?(.375)-(.375,0)@+,?(.25)@+}"^>"#3#4#5},
- "_<",{\xykz^\ar #2@'{"^<"**{}?(.25)@+,?(.375)+(.375,0)@+,
- "_>";"^>"**{}?(.375)-(.375,0)@+,?(.25)@+}"_>"#6#7#8}
- \restore\POS #9}}
-\xylet@\xykuncrossv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "_<",{\xykz^\ar #1@'{"_>"**{}?(.25)@+,?(.375)+(0,.375)@+,
- "^<";"^>"**{}?(.375)-(0,.375)@+,?(.25)@+}"^<"#3#4#5},
- "_>",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?(.375)+(0,.375)@+,
- "^>";"^<"**{}?(.375)-(0,.375)@+,?(.25)@+}"^>"#6#7#8}
- \restore\POS #9}}
-\xylet@\xykuncrossh=\next
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{``over'' crossings:}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The initialisation\dots
-
-\DOCMODE(
-\xydef@\vover{\begingroup\def\afterknot@{\xyvover}%
- \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{|(.725)\knothole}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\hover{\begingroup\def\afterknot@{\xyhover}%
- \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{|(.725)\knothole}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\vunder{\begingroup\def\afterknot@{\xyvunder}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.8)}%
- \def\xykmidPLACE@{(.2)}\def\xykpostbreak@@{|(.275)\knothole}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\hunder{\begingroup\def\afterknot@{\xyhunder}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.8)}%
- \def\xykmidPLACE@{(.2)}\def\xykpostbreak@@{|(.275)\knothole}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\vunover{\begingroup\def\afterknot@{\xyvunover}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\hunover{\begingroup\def\afterknot@{\xyhunover}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{}%
- \xyFN@\xykparsecross@ }%
-
-
-\xydef@\xoverv{\begingroup\def\afterknot@{\xyxoverv}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
- \def\xykmidPLACE@{(.15)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\xunderv{\begingroup\def\afterknot@{\xyxunderv}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
- \def\xykmidPLACE@{(.15)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\xoverh{\begingroup\def\afterknot@{\xyxoverh}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
- \def\xykmidPLACE@{(.15)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\xunderh{\begingroup\def\afterknot@{\xyxunderh}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
- \def\xykmidPLACE@{(.85)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\xunover{\begingroup\def\afterknot@{\xyxunover}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
- \def\xykmidPLACE@{(.15)}\def\xykpostbreak@@{}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\xunoverv{\begingroup\def\afterknot@{\xyxunoverv}%
- \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.8)}%
- \def\xykmidPLACE@{(.2)}\def\xykpostbreak@@{}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\xunoverh{\begingroup\def\afterknot@{\xyxunoverh}%
- \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.8)}%
- \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{}%
- \xyFN@\xykparsecross@ }%
-\DOCMODE)
-
-The interface\dots
-
-\DOCMODE(
-\xydef@\xyvover{\xykcross@\xykoverv
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyhover{\xykcross@\xykoverh
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
-
-\xydef@\xyvunder{\xykcross@\xykoverv
- \xykunderstring@ \xykoverstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyhunder{\xykcross@\xykoverh
- \xykunderstring@ \xykoverstring@ \xykhvobject@{+(1,0)}}
-
-\xydef@\xyvunover{\xykcross@\xykunoverv
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyhunover{\xykcross@\xykunoverh
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
-
-
-\xydef@\xyxoverv{\xykcross@\xykxoverv
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyxunderv{\xykcross@\xykxoverv
- \xykunderstring@ \xykoverstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyxoverh{\xykcross@\xykxoverh
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
-
-\xydef@\xyxunderh{\xykcross@\xykxoverh
- \xykunderstring@ \xykoverstring@ \xykhvobject@{+(1,0)}}
-
-\xydef@\xyxunover{\xykcross@\xykxoverv
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
-
-\xydef@\xyxunoverv{\xykcross@\xykxunoverv
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyxunoverh{\xykcross@\xykxunoverh
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
-
-\DOCMODE)
-
-The drawing code\dots
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<",{\xykz^\ar #1@'{"^>"**{}?(.25)@+,?(.625)+(0,-.125)@+,
- "_>";"^>"**{}?(.625)-(.125,0)@+,?(.25)@+}"_>"#3#4#5},
- "_<",{\xykz^\ar #2@'{"^<"**{}?(.25)@+,?(.625)+(.125,0)@+,
- "^>";"^<"**{}?(.625)-(0,.125)@+,?(.25)@+}"^>"#6#7#8},\restore\POS#9}}
-\xylet@\xykoverv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "_<",{\xykz^\ar #1@'{"^<"**{}?(.25)@+,?(.625)+(.125,0)@+,
- "^>";"^<"**{}?(.625)-(0,.125)@+,?(.25)@+}"^>"#3#4#5},
- "_>",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?(.625)+(0,.125)@+,
- "^<";"_<"**{}?(.625)+(.125,0)@+,?(.25)@+}"^<"#6#7#8},\restore\POS#9}}
-\xylet@\xykoverh=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<",{\xykz^\ar #1@'{"^>"**{}?(.25)@+,?-(0,.175)@+,?(.75)@+}
- "^>"#3#4#5},
- "_<",{\xykz^\ar #2@'{"^<"**{}?(.25)@+,?+(.125,0)@+,
- "_>"**{}?+(0,.7)@+,"_>";"^>"**{}?-(.125,0)@+,?(.25)@+}
- "_>"#6#7#8},\restore\POS#9}}
-\xylet@\xykunoverv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "_<",{\xykz^\ar #1@'{"^<"**{}?(.25)@+,?+(.175,0)@+,?(.75)@+}
- "^<"#3#4#5},
- "_>",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?+(0,.125)@+,
- "^>"**{}?-(.7,0)@+,"^>";"^<"**{}?-(0,.125)@+,?(.25)@+}
- "^>"#6#7#8},\restore\POS#9}}
-\xylet@\xykunoverh=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<";"^>"**{}?="^_","_<";"_>"**{}?;"^_",**{}?="^_",
- "^>",{\xykz^\ar #1@'{"^_"@+}"_<"#3#4#5},
- "^<",{\xykz_\ar #2@'{"^_"@+}"_>"#6#7#8},\restore\POS#9}}
-\xylet@\xykxoverv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<";"_<"**{}?="^_","^>";"_>"**{}?;"^_",**{}?="^_",
- "^<",{\xykz_\ar #1@'{"^_"@+}"_>"#3#4#5},
- "_<",{\xykz_\ar #2@'{"^_"@+}"^>"#6#7#8},\restore\POS#9}}
-\xylet@\xykxoverh=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<";"^>"**{}?="^_","_<";"_>"**{}?;"^_",**{}?="^_",
- "^>",{\xykz^\ar #1@'{"^_"@+}"_>"#3#4#5},
- "^<",{\xykz^\ar #2@'{"^_"@+}"_<"#6#7#8},\restore\POS#9}}
-\xylet@\xykxunoverv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<";"_<"**{}?="^_","^>";"_>"**{}?;"^_",**{}?="^_",
- "^<",{\xykz^\ar #1@'{"^_"@+}"^>"#3#4#5},
- "_<",{\xykz^\ar #2@'{"^_"@+}"_>"#6#7#8},
- \restore\POS#9}}
-\xylet@\xykxunoverh=\next
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{``twist'' crossings:}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The initialisation\dots
-
-\DOCMODE(
-\xydef@\vtwist{\begingroup\def\afterknot@{\xyvtwist}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-\xydef@\htwist{\begingroup\def\afterknot@{\xyhtwist}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-\xydef@\vtwistneg{\begingroup\def\afterknot@{\xyvtwistneg}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-\xydef@\htwistneg{\begingroup\def\afterknot@{\xyhtwistneg}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-\xydef@\vuntwist{\begingroup\def\afterknot@{\xyvuntwist}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
- \def\xykmidPLACE@{(.85)}\def\xykpostbreak@@{}%
- \xyFN@\xykparsecross@ }%
-\xydef@\huntwist{\begingroup\def\afterknot@{\xyhuntwist}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
- \def\xykmidPLACE@{(.85)}\def\xykpostbreak@@{}%
- \xyFN@\xykparsecross@ }%
-\DOCMODE)
-
-The interface\dots
-
-\DOCMODE(
-\xydef@\xyvtwist{\xykcross@\xyktwistv
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyvtwistneg{\xykcross@\xyktwistv
- \xykunderstring@ \xykoverstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyvuntwist{\xykcross@\xykuntwistv
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyhtwist{\xykcross@\xyktwisth
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
-
-\xydef@\xyhuntwist{\xykcross@\xykuntwisth
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
-
-\xydef@\xyhtwistneg{\xykcross@\xyktwisth
- \xykunderstring@ \xykoverstring@ \xykhvobject@{+(1,0)}}
-\DOCMODE)
-
-The drawing code\dots
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^>",{\xykz_\ar #1@'{"_>"**{}?(.25)@+,?-(.375,0)@+,
- "_<";"^<"**{}?+(.375,0)@+,?(.25)@+}"_<"#3#4#5},
- "^<",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?+(.375,0)@+,
- "_>";"^>"**{}?+(-.375,0)@+,?(.25)@+}"_>"#6#7#8}
- \restore\POS #9}}
-\xylet@\xyktwistv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^>",{\xykz^\ar #1@'{"_>"**{}?(.125)@+,?(.375)-(.25,0)@+,
- ?(.625)-(.25,0)@+,?(.875)@+}"_>"#3#4#5},
- "^<",{\xykz^\ar #2@'{"_<"**{}?(.125)@+,?(.375)+(.25,0)@+,
- ?(.625)+(.25,0)@+,?(.875)@+}"_<"#6#7#8}
- \restore\POS #9}}
-\xylet@\xykuntwistv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<",{\xykz_\ar #1@'{"^>"**{}?(.25)@+,?+(0,-.375)@+,
- "_>";"_<"**{}?+(0,.375)@+,?(.25)@+}"_>"#3#4#5},
- "_<",{\xykz^\ar #2@'{"_>"**{}?(.25)@+,?+(0,.375)@+,
- "^>";"^<"**{}?-(0,.375)@+,?(.25)@+}"^>"#6#7#8}
- \restore\POS #9}}
-\xylet@\xyktwisth=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<",{\xykz^\ar #1@'{"^>",**{}?(.125)@+,?(.375)+(0,-.25)@+,
- ?(.625)+(0,-.25)@+,?(.875)@+}"^>"#3#4#5},
- "_<",{\xykz^\ar #2@'{"_>",**{}?(.125)@+,?(.375)+(0,.25)@+,
- ?(.625)+(0,.25)@+,?(.875)@+}"_>"#6#7#8},\restore\POS #9}}
-\xylet@\xykuntwisth=\next
-
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[scale the knot piece]
-The above examples also show how to use |-| to get the mirror-image of a
-particular crossing. Any numerical scale factor can be used by enclosing
-it within |[..]| e.g. |[2.3]| scaling a single piece without affecting
-the rest of the picture. The scale-factor {\em must\/} occur before any
-label or arrow-tip specifiers, see below). Vertical crossings remain
-vertical under scalings; the current <pos> still moves by 1 coordinate
-unit in the `down' direction. Similarly horizontal crossings remain
-horizontal. The single character |-| is a shorthand version for |[-1]|,
-effectively giving a half-turn rotation in a rectangular basis.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xydef@\xykparsescale@{%
- \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsescale@}%
- \else\addDASH@\ifx\next \addDASH@\DN@{\def\xykSCALE@@{-1}%
- \xyFN@\xykparser@}%
- \else\ifx[\next \DN@[##1]{\dimen@=##1\p@
- \ifdim\dimen@=\z@\xywarning@{\xykscaleerror@}%
- \else\edef\xykSCALE@@{\expandafter\removePT@\the\dimen@}\fi
- \xyFN@\xykparser@}%
- \else\ifx~\next \DN@~##1##2##3##4{%
- \def\xykSCALE@@{@{##1}{##2}{##3}{##4}}\xyFN@\xykparser@}%
- \else\DN@{\xyFN@\xykparser@}%
- \fi\fi\fi\fi \next@}
-
-\xydef@\xykscaleerror@{Ignoring zero scale factor}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[alter size and shape]
-A knot-piece need not be rectangular. By specifying
-|~|<pos>$_1$<pos$_2$><pos$_3$><pos$_4$> the four corners |UL|, |UR|,
-|DL|, |DR| are set to the given <pos>s respectively.
-The local basis is established so that
-\begin{eqnarray*}
-r\hbox{--hop}&\!\!\leftrightarrow\!\!&
-{\textstyle{1\over2}}\bigl(\hbox{<pos$_2$>}-\hbox{<pos$_1$>}
-+\hbox{<pos$_4$>} -\hbox{<pos$_3$>}\bigr) \\
-u\hbox{--hop}&\!\!\leftrightarrow\!\!&
-{\textstyle{1\over2}}\bigl(\hbox{<pos$_1$>}-\hbox{<pos$_3$>}
-+\hbox{<pos$_2$>} -\hbox{<pos$_1$>}\bigr)\;.
-\end{eqnarray*}
-
-\note??=[adjust hole]
-With a non-rectangularly shaped piece it will usually be necessary to
-adjust the place where the `hole' occurs in the `under' string. This is
-done by specifying |@(|<num>|)|, with $0\le <num>\le1$ being the parameter
-value of the new location for the hole.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-%\xydef@\xykobject@{%
-% \ifx\xykSCALE@@\empty\DN@{\xykkeepscale@}%
-% \else \DN@{\xyksavescale@{}}%
-% \fi \next@ }
-
-\xydef@\xykhobject@{\aftergroup\xykhadjust@
- \ifx\xykSCALE@@\empty\DN@{\xykkeepscale@}%
- \else \DN@{\xyksavescale@{}}%
- \fi \next@ }
-
-\xydef@\xykvobject@{\aftergroup\xykvadjust@
- \ifx\xykSCALE@@\empty\DN@{\xykkeepscale@}%
- \else \DN@{\xyksavescale@{}}%
- \fi \next@ }
-
-\xydef@\xykhvobject@{\aftergroup\xykhvadjust@
- \ifx\xykSCALE@@\empty\DN@{\xykkeepscale@}%
- \else \DN@{\xyksavescale@{}}%
- \fi \next@ }
-
-\xydef@\xykhuobject@{\aftergroup\xykhuadjust@
- \ifx\xykSCALE@@\empty\DN@{\xykkeepscale@}%
- \else \DN@{\xyksavescale@{}}%
- \fi \next@ }
-\DOCMODE)
-
-\DOCMODE(
-\xydef@\xyksavescale@#1#2{%
- \expandafter\ifx\the\Edge@c\zeroEdge\relax \def\xyksaveEdgec{}%
- \else
- \edef\xyksaveEdgec{\noexpand\Edge@c={\expandafter\noexpand\the\Edge@c}%
- \L@c=\the\L@c \R@c=\the\R@c \D@c=\the\D@c \U@c=\the\U@c}%
- \fi
-%
- \edef\next@##1##2{\endgroup
- \def\noexpand\xyksaveEdgec{}%
- \def\noexpand\xykSCALE@@\noexpand{##1}%
- \def\noexpand\xykjoincontrol\noexpand{\xykjoincontrol}%
- \noexpand\toks@\noexpand{##2}%
- \noexpand\xy@@{\def\noexpand\xyksaveEdgec{}%
- \def\noexpand\xykSCALE@@{##1}%
- \def\noexpand\xykjoincontrol{\xykjoincontrol}}}%
- \expandafter\expandafter\expandafter\next@
- \expandafter\expandafter\expandafter{\expandafter\xykSCALE@@\expandafter}%
- \expandafter{\the\toks@}%
-%
- \xykrescale@ #1\the\toks@\restore\POS#2}
-
-\xydef@\xykkeepscale@{%
- \edef\next@##1{\endgroup \noexpand\toks@={##1}%
- \def\noexpand\xykjoincontrol{\xykjoincontrol}}%
- \expandafter\next@\expandafter{\the\toks@}%
- \def\xykSCALE@@{}\def\xyksaveEdgec{}%
- \xy@@{\def\xykSCALE@@{}\def\xyksaveEdgec{}}%
- \edef\next@{\def\noexpand\xykjoincontrol{\xykjoincontrol}}%
- \expandafter\xy@@\expandafter{\next@}%
- \xyknoflexscale@ \the\toks@}
-\DOCMODE)
-
-\DOCMODE(
-\xydef@\xykrescale@{\expandafter\xykcheckscale@\xykSCALE@@ !}%
-
-\xydef@\xykcheckscale@#1#2!{%
- \expandafter\DN@\expandafter{\codeof{#1}}%
- \expandafter\DNii@\expandafter{\codeof{@}}%
- \ifx\next@\nextii@\relax\DN@{\xykflexiscale@#2%
- \xy@@{\divide\X@xbase2\divide\X@ybase2\divide\Y@xbase2\divide\Y@ybase2%
- \def\xykSCALE@@{}}\def\xykSCALE@@{}%
- \expandafter\toks@\expandafter{\afterFLEX@}}%
- \else\DN@{\save \xykrescale@@}\fi \next@ }
-
-\xydef@\xykflexiscale@{%
- \expandafter\def\expandafter\afterFLEX@\expandafter{\the\toks@}%
- \xykflexiscale@@ }
-
-\xydef@\xykrescale@@{%
- \edef\next@{\X@xbase=\xykSCALE@@\X@xbase \X@ybase=\xykSCALE@@\X@ybase
- \Y@xbase=\xykSCALE@@\Y@xbase \Y@ybase=\xykSCALE@@\Y@ybase}%
- \expandafter\xy@@\expandafter{\next@}%
- \ifdim\xykSCALE@@\p@<\z@\relax \DN@{\xyknegflexscale@}%
- \else\DN@{\xyknoflexscale@}\fi \next@ }
-\DOCMODE)
-
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4{\save="@",
- #1,="^<",\POS"@",#2,="^>",\POS"@",#3,="_<",\POS"@",#4,="_>",
- (0,0);"^>"-"^<"+"_>"-"_<":"^<"-"_<"+"^>"-"_>"::}}
-\xylet@\xykflexiscale@@=\next
-
-{\xyuncatcodes \gdef\next{\save ="^<",
- +(1,0)="^>",-(1,1)="_<",+(1,0)="_>"\restore }}
-\xylet@\xyknoflexscale@@=\next
-\xylet@\xyknoflexscale@=\next
-
-{\xyuncatcodes \gdef\next{\save ="_>",
- +(-1,1)="^<",+(1,0)="^>",-(1,1)="_<"\restore }}
-\xylet@\xyknegflexscale@@=\next
-\xylet@\xyknegflexscale@=\next
-
-{\xyuncatcodes \gdef\next{\save ="_<",
- +(1,0)="_>",+(-1,1)="^<",+(1,0)="^>"\restore }}
-\xylet@\xykhscale@@=\next
-
-{\xyuncatcodes \gdef\next{\save ="^>",
- -(1,0)="^<",+(1,-1)="_>",-(1,0)="_<"\restore }}
-\xylet@\xykvscale@@=\next
-\DOCMODE)
-
-
-\DOCMODE(
-\xydef@\xykhadjust@{%
- \let\xyknoflexscale@=\xykhscale@@
- \let\xyknegflexscale@=\xyknegflexscale@@ }
-
-\xydef@\xykvadjust@{%
- \let\xyknoflexscale@=\xyknoflexscale@@
- \let\xyknegflexscale@=\xykhscale@@ }
-
-\xydef@\xykhvadjust@{%
- \let\xyknoflexscale@=\xyknoflexscale@@
- \let\xyknegflexscale@=\xyknegflexscale@@ }
-
-\xydef@\xykhuadjust@{%
- \let\xyknoflexscale@=\xykhscale@@
- \let\xyknegflexscale@=\xykvscale@@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[arrowtips, breaks and labels]
-The |knot| feature allows for the easy placement of the following objects
-along the strings of a crossing:\par
-\begin{itemize}
-\item labels on the strings;
-\item arrowheads for direction or orientation;
-\item holes in strings, allowing another string to be drawn passing over.
-\end{itemize}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note ??=[which string]
-The characters |<|, |>| and |||| are used to indicate to which string
-portion the object is associated; with |||| denoting the string which
-crosses the other, while |<| and |>| denote the initial and final
-portions of the `crossed' string.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xydef@\xykprebreak@{%
- \ifx\xykprebreak@@\empty\addtotoks@{{}}\else
- \expandafter\addtotoks@\expandafter{\expandafter{\xykprebreak@@}}\fi}
-
-\xydef@\xykpostbreak@{%
- \ifx\xykpostbreak@@\empty\addtotoks@{{}}\else
- \expandafter\addtotoks@\expandafter{\expandafter{\xykpostbreak@@}}\fi}
-
-\xydef@\xykmidbreak@{%
- \ifx\xykmidbreak@@\empty\addtotoks@{{}}\else
- \expandafter\addtotoks@\expandafter{\expandafter{\xykmidbreak@@}}\fi}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note ??=[simple label]
-A simple label enclosed in braces, for example |\vcross>{x}|, is set in
-math-mode using the |\labelstyle|, at a pre-determined place on the string
-portion, shifted in either the `above' or `below' direction from the curve
-at this point. (For each crossing depicted in figure~??[f.crossings] only
-default values are used for the place and shift-direction.)
-
-\note ??=[knot object]
-If the first character within the braces |{..}| is |*| e.g.
-|\htwist>{*|<object>|}|, then a general <object> may be placed as a label.
-Furthermore if the first character is |^| or |_| or ||||, then
-the interpretation is, e.g. |\vtwist<{^|<anchor><it>|}|,
-as in ??g[xyarrow.doc:f.arrow]
-to place <it> as a label along an |\ar| of the |arrow| feature.
-
-\note ??=[orientation]
-A second character |<| or |>| specifies that an arrowhead should appear
-at the pre-determined place on the chosen string.
-Here |>| denotes an arrowhead pointing with the natural orientation,
-while |<| points against. Due to the curvature of the strings, it is
-usually best to |\UseComputerModernTips| rather than normal arrow-tips.
-
-\note ??=[hole in the string]
-To generate a `hole' use |\knothole|, or simply |\khole|, as following
-token. This generates a `break', in the sense of
-??g[xyarrow.doc:break with <it>].
-Indeed such a `hole' is used to separate the two portions of the `crossed'
-string. Default size for the hole is 5pt, which is alterable via
-|\knotholesize{|<dimen>|}|; normally used to set the size for {\em all}\/
-holes in a diagram.
-
-\note ??=[null-break]
-If the resulting |\khole| is either too large or perhaps non-existent,
-this could be due to a technicality in the way breaks in curves are
-handled. This problem should not occur with the standard crossings, using
-a rectangular basis, but it may occur with non-rectangular bases.
-An easy `fix' is to include an extra {\em null-break}\ on the string,
-using |<|||, |>||| or ||||||, which should place the zero-sized break at
-parameter value .5 on the curve. The specification should precede a
-|\khole| at a higher parameter value, or come after one at a lower value.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The aim of the above `fix' is to position the null-break as close as
-possible to where the curve is farthest from the line joining its
-end-points, which is usually at parameter value |(.5)|.
-
-\DOCMODE(
-\xydef@\xykparsebreak@{%
- \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsebreak@}%
- \else \addLT@\ifx\next
- \expandafter\appendtoholder@\xykbacktemp@\next@
- \addLT@\DN@{\xyFN@\xykparser@}%
- \else \addGT@\ifx\next
- \expandafter\appendtoholder@\xykforetemp@\next@
- \addGT@\DN@{\xyFN@\xykparser@}%
- \else \ifx|\next
- \expandafter\appendtoholer@\xyknulltemp@\next@
- \DN@|{\xyFN@\xykparser@}%
- \else \ifx\next \bgroup\DN@##1{\checkgroupbreak@##1@}%
- \else \ifx (\next\DN@(##1){\xyadjustknotPLACE@i##1@@%
- \xyFN@\xykparsebreak@}%
- \else \ifx\next \knothole@\DN@##1{\expandafter\appendtoholder@@
- \expandafter{\expandafter|\xyknotPLACE\knothole}\next@
- \xyFN@\xykparser@}%
- \else
- \expandafter\xykdefaultbreak@\xykbreak@\next@
- \DN@{\xyFN@\xykparser@}%
- \fi\fi\fi\fi\fi\fi\fi \next@ }
-\DOCMODE)
-
-Templates for arrowheads.
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next{^>*\dir{>}}}
-\xylet@\xykforetips@=\next
-
-{\xyuncatcodes \gdef\next{^<*\dir{<}}}
-\xylet@\xykbacktips@=\next
-
-{\xyuncatcodes \gdef\next{*!/-1pt/=0\dir{>}}}
-\xylet@\xykforetemp@=\next
-
-{\xyuncatcodes \gdef\next{*!/1pt/=0\dir{<}}}
-\xylet@\xykbacktemp@=\next
-
-{\xyuncatcodes \gdef\next{*=<\xykholesize>[o]{}}}
-\xylet@\xykholetemp@=\next
-\xydef@\knothole@{\hbox to\xykholesize{%
- \dimen@=\xykholesize \divide\dimen@\tw@
- \hfill \vrule height\dimen@ depth\dimen@ width\z@ }}
-\xylet@\knothole=\knothole@
-\xylet@\khole=\knothole@
-
-{\xyuncatcodes \gdef\next{*=<0pt>{}}}
-\xylet@\xyknulltemp@=\next
-\xylet@\xykbreak@=\xyknulltemp@
-\DOCMODE)
-
-When the next token is a begin-group character |{| then look at the first
-token inside the group. If it is |^|,|_| or |||| then the group contents
-will be an <anchor> for user-chosen places along the string.
-Otherwise the place is taken to be the already specified |\xyknotPLACE|
-and the group contains a label, to be set in the usual way for labels,
-using |_| due to the orientation of the curve.
-However if the first token is |*| then the user is assumed to be
-dropping his own label, possibly with <object> modifiers.
-
-\DOCMODE(
-\xydef@\checkgroupbreak@#1#2@{%
- \ifx|#1\DN@{\appendtoholder@@#1#2\next@ \xyFN@\xykparser@}%
- \else \ifx_#1\DN@{\appendtoholder@@_#2\next@ \xyFN@\xykparser@}%
- \else \ifx^#1\DN@{\appendtoholder@@^#2\next@ \xyFN@\xykparser@}%
- \else
- \def\next##1\next{\expandafter\DNii@\expandafter{\xyk@@##1}}%
- \expandafter\next\xyknotPLACE\next
- \ifx*#1%
- \expandafter\DN@\expandafter{%
- \expandafter\appendtoholder@@\nextii@#1#2\next@ \xyFN@\xykparser@}%
- \else %\expandafter\DNii@\expandafter{\expandafter\xyk@@\xyknotPLACE}%
- \expandafter\DN@\expandafter{%
- \expandafter\appendtoholder@@\nextii@{#1#2}\next@ \xyFN@\xykparser@}%
- \fi\fi\fi\fi \next@ }
-\DOCMODE)
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next{%
- \expandafter{\expandafter^\xyknotPLACE##1}}}%
- \DN@{\xydef@\xykholder@@##1}\DNii@{\expandafter\toks@}%
- \expandafter\expandafter\expandafter\next@
- \expandafter\expandafter\expandafter{\expandafter\nextii@\next}
-
-\xydef@\appendtoholder@#1\next@{\xykholder@@{#1}%
- \DN@##1{\expandafter\DN@\expandafter{\xykholder@##1}}%
- \expandafter\next@\expandafter{\the\toks@}\appendtoholder@@@ }
-
-\xydef@\appendtoholder@@#1\next@{%
- \DN@##1\next@{\expandafter\DN@\expandafter{\xykholder@##1}}%
- \next@#1\next@ \appendtoholder@@@}%
-
-\xydef@\appendtoholder@@@{%
- \expandafter\expandafter\expandafter\DN@
- \expandafter\expandafter\expandafter{\next@}%
- \DNii@{\expandafter\def\xykholder@}%
- \expandafter\nextii@\expandafter{\next@}}
-\DOCMODE)
-
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next{%
- \expandafter{\expandafter|\xyknotPLACE##1}}}%
-\DN@{\xydef@\xykholer@@##1}\DNii@{\expandafter\toks@}%
- \expandafter\expandafter\expandafter\next@
- \expandafter\expandafter\expandafter{\expandafter\nextii@\next}
-
-\xydef@\appendtoholer@#1\next@{\xykholer@@{#1}%
- \DN@##1{\expandafter\DN@\expandafter{\xykholder@##1}}%
- \expandafter\next@\expandafter{\the\toks@}\appendtoholder@@@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-??=[knot-labels]
-Multiple breaks, arrow-heads and labels may be specified along the
-two strings of a crossing; simply place their specifications one after
-another; e.g. |<>||>>><{x}||{y}>{z}| was used in figure~??[f.crossings].
-
-The only proviso is that all `breaks' along a single strand must occur
-with increasing order of parameter position. On the `crossed' string
-this includes the automatic `hole' to create space for the other string.
-Hence it is advisable to use just the |(+..)| and |(-..)| variants for
-small adjustments, and to keep these correctly ordered.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xydef@\xykz#1{\let\xyk@@=#1\xy@@{\let\xyk@@=#1}}
-{\xyuncatcodes \global\let\next=_}
-\xylet@\xyk@@=\next
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-??=[adjustment]
-Adjustment of position along the strings can be achieved using a <factor>,
-as in |\vover||(+.1)>|. Allowed syntax is |(|<sign><num>|)| where <sign>
-is |+| or |-| to increment or decrement from the pre-defined value.
-Also allowable are |=| or <empty> to set the parameter position to <num>,
-which must lie between 0 and 1 to have any meaning.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This parses adjustments of the |\xyknotPLACE|.
-
-\DOCMODE(
-\xydef@\xyadjustknotPLACE@i{%
- \ifx\xyknotPLACE\empty\DN@{\dimen@=.5\p@}%
- \else\DN@{\expandafter\xygetknotPLACE@@\xyknotPLACE}%
- \fi \next@ \relax \let\xywhichknotPLACE@@=\xysetknotPLACE@@
- \xyFN@\xyadjustknotPLACE@}
-
-\xydef@\xyadjustknotPLACE@{\expandafter\ifx\space@\next
- \expandafter\DN@\space{\xyFN@\xyadjustknotPLACE@}%
- \else\addDASH@\ifx\next\DN@{\xyadjustknotPLACE@@}%
- \else\addPLUS@\ifx\next\DN@{\xyadjustknotPLACE@@}%
- \else\addEQ@\ifx\next\addEQ@\DN@{\dimen@=\z@ \xyadjustknotPLACE@@}%
- \else \DN@{\dimen@=\z@ \xyadjustknotPLACE@@}%
- \fi\fi\fi\fi \next@}
-
-\xydef@\xyadjustknotPLACE@@#1@@{\advance\dimen@#1\p@
- \expandafter\xysetknotPLACE@\expandafter{\the\dimen@}}
-
-\xydef@\xysetknotPLACE@#1{%
- \expandafter\xywhichknotPLACE@@\expandafter{\removePT@#1}}
-
-{\xyuncatcodes\gdef\next#1{\def\xyknotPLACE{(#1)}}}%
-\xylet@\xysetknotPLACE@@=\next
-
-{\xyuncatcodes \catcode`@=11
- \gdef\next(#1){\DN@\next@{#1}\ifx\next@\empty
- \dimen@=\z@\else\dimen@=#1\p@ \fi}}%
-\xylet@\xygetknotPLACE@@=\next
-\DOCMODE)
-
-These use the same mechanism to adjust parameters stored in
-|\xykpostbreak@@| and |\xykjoincontrol@@|.
-
-\DOCMODE(
-%\xydef@\xyadjustJOIN@i#1@@{\xykjoincontrol@i{#1}}%
-\xydef@\xyadjustJOIN@i{%
- \ifx\xykjoincontrol\empty\DN@{\dimen@=.75\p@}%
- \else\DN@{\expandafter\xygetknotPLACE@@\expandafter(\xykjoincontrol)}%
- \fi \next@ \relax \let\xywhichknotPLACE@@=\xysetjoincontrol@
- \xyFN@\xyadjustknotPLACE@}
-
-%\xydef@\xyadjustBREAK@i#1@@{\def\xykpostbreak@@{|(##1)\knothole}}%
-\xydef@\xyadjustBREAK@i{%
- \ifx\xykpostbreak@@\empty\DN@{\dimen@=.5\p@}%
- \else\DN@{\expandafter\xygetpostBREAK@\xykpostbreak@@}%
- \fi \next@ \relax \let\xywhichknotPLACE@@=\xysetpostbreak@
- \xyFN@\xyadjustknotPLACE@}
-
-\xydef@\xygetpostBREAK@|#1\knothole{\DN@{#1}%
- \ifx\next@\empty\dimen@=.5\p@\else \xygetknotPLACE@@#1\fi}
-
-\xydef@\xysetpostbreak@#1{\def\xykpostbreak@@{|(#1)\knothole}}
-\xydef@\xysetjoincontrol@#1{\edef\xykjoincontrol{#1}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-??=[arrowtips]
-Arrowheads can also be placed at either, or both, ends of of the strings
-forming a crossing. This is governed by a pair of booleans,
-initially |{FF}|.
-It is changed for {\em all}\/ subsequent strings in a diagram by
-|\knottips{..}| where the recognised values are |{FF}|, |{FT}|, |{TF}|
-and |{TT}|, denoting tips (|T|) or not (|F|) at the start and end of each
-string. To add arrowtips at the start of strings in a particular crossing,
-append the 2-character combination |=<|\,; similarly |=>| adds tips at the
-ends, if not already requested. The combinations |==| and |=!| specify
-both (|{TT}|) and none (|{FF}|) respectively.
-These 2-character pairs can be mixed in with any specifications for labels
-and breaks, etc. Multiple pairs compound their effect; in particular
-|=<=>| gives the same result as |==|, while |=!=<| is needed to change
-|{FT}| into |{TF}|.
-
-These are best used with single pieces, as in the following equation.
-%
-\begin{code}
-\UseComputerModernTips \knottips{FT}
-\def\Conway#1{\mathord{\nabla\Bigl[\,
- \raise5pt\xybox{0;/r1pc/:#1}\,\Bigr]}}
-$$
-\Conway\htwist - \Conway\htwistneg
- \;=\; -z\,\Conway\huntwist $$
-\end{code}
-\docode
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xydef@\xykparsetips@{%
- \def\xyknotTIPS@@{}\def\xyknotPLACE{}%
- \let\xykparser@=\xykparsetips@@
- \xyFN@\xykparser@ }
-
-\xydef@\xykparsetips@@{%
- \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsetips@@}%
- \else\addLT@\ifx\next
- \ifx\xyknotTIPS@@\empty \def\xyknotTIPS@@{TF}%
- \else\DN@{FF}\ifx\next@\xyknotTIPS@@ \def\xyknotTIPS@@{TF}%
- \else\DN@{FT}\ifx\next@\xyknotTIPS@@ \def\xyknotTIPS@@{TT}%
- \fi\fi\fi
- \addLT@\DN@{\xyFN@\xykparser@}%
- \else\addGT@\ifx\next
- \ifx\xyknotTIPS@@\empty \def\xyknotTIPS@@{FT}%
- \else\DN@{FF}\ifx\next@\xyknotTIPS@@ \def\xyknotTIPS@@{FT}%
- \else\DN@{TF}\ifx\next@\xyknotTIPS@@ \def\xyknotTIPS@@{TT}%
- \fi\fi\fi
- \addGT@\DN@{\xyFN@\xykparser@}%
- \else\addEQ@\ifx\next \def\xyknotTIPS@@{TT}%
- \addEQ@\DN@{\xyFN@\xykparser@}%
- \else \ifx!\next \def\xyknotTIPS@@{FF}\DN@!{\xyFN@\xykparser@}%
- \else\DN@{\xyFN@\xykparser@}%
- \fi\fi\fi\fi\fi \next@ }
-\DOCMODE)
-
-This reads the setting for tips on string ends.
-
-\DOCMODE(
-\xydef@\xykcheckTIPS@{%
- \ifx\xyknotTIPS@@\empty \edef\xyknotTIPS@@{\xyknotTIPS@}\fi
- \DN@{FF}\ifx\next@\xyknotTIPS@@\def\tmp@{}%
- \else\DN@{FT}\ifx\next@\xyknotTIPS@@
- \expandafter\def\expandafter\tmp@\expandafter{\xykforetips@}%
- \else\DN@{TF}\ifx\next@\xyknotTIPS@@
- \expandafter\def\expandafter\tmp@\expandafter{\xykbacktips@}%
- \else
- \DN@##1\next@{\DN@{\xykforetips@##1}}%
- \expandafter\next@\xykbacktips@\next@
- \DNii@{\expandafter\def\expandafter\tmp@\expandafter}%
- \expandafter\nextii@\expandafter{\next@}%
- \fi\fi\fi \def\xyknotTIPS@@{}}
-
-\xydef@\xyknottips@{%
- \ifx\tmp@\empty\addtotoks@{{}}\else
- \expandafter\addtotoks@\expandafter{\expandafter{\tmp@}}\fi}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%\end{notes}
-
-\subsection*{Joins}
-\note??=[join]
-The ``joins'' are used to connect the loose ends of crossing strings.
-In particular ``loops'' and ``caps'' are for placing on ends of
-horizontal or vertical `twist' and `cross' crossings, leaving the
-current <pos> fixed. The ``bends'' join non-adjacent crossings of
-the same type, either horizontal or vertical.
-
-The |\xcap..| pieces are designed to join adjacent |\xover..| pieces;
-they move $c$ either vertically or horizontally,
-as appropriate. Finally the |\xbend..| pieces allow for smooth joins
-of $45^\circ$ slopes to horizontal or vertical slopes. For these the
-actual positioning of the piece, see figure~??[f.knotjoins],
-is not entirely obvious.
-
-\begin{figure*}[ht]
-$$
-\knotholesize{5pt}\UseComputerModernTips
-\xygraph{!{0;/r2pc/:}="O" %[]!{\NoPSspecials}
- [ll] !{*=0\dir{o},{\vloop<>|>>><{x}|{y}>{z}},*=0\dir{x}}
- [rr]!{*=0\dir{o},{\vcap<>|>>><{x}|{y}>{z}},*=0\dir{x}}
- [urr]!{*=0\dir{o},{\vcap-<>|>>><{x}|{y}>{z}},*=0\dir{x}}
- [u(.5)rr]!{*=0\dir{o},{\vloop-<>|>>><{x}|{y}>{z}},*=0\dir{x}}
- [d(.5)rr]!{*=0\dir{o},{\hloop<>|>>><{x}|{y}>{z}},*=0\dir{x}}
- [rr]!{*=0\dir{o},{\hcap<>|>>><{x}|{y}>{z}},*=0\dir{x}}
- [rrr]!{*=0\dir{o},{\hcap-<>|>>><{x}|{y}>{z}},*=0\dir{x}}
- [rr]!{*=0\dir{o},{\hloop-<>|>>><{x}|{y}>{z}},*=0\dir{x}}
- "O"!{+(.5,-.5)}
- [ll]!{*\txt\small\tt{\string\vloop}} [rr]!{*\txt\small\tt{\string\vcap}}
- [rr]!{*\txt\small\tt{\string\vcap-}}[rr]!{*\txt\small\tt{\string\vloop-}}
- [rr]!{*\txt\small\tt{\string\hloop}}[rr]!{*\txt\small\tt{\string\hcap}}
- [rr]!{*\txt\small\tt{\string\hcap-}}[rr]!{*\txt\small\tt{\string\hloop-}}
- "O"!{-(1,3)} %[]!{\NoPSspecials}
- [ur]!{*=0\dir{o},{\xcapv<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [urr]!{*=0\dir{o},{\sbendv<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [r] !{*=0\dir{o},{\zbendv<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [dr] !{*=0\dir{o},{\sbendh<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [r] !{*=0\dir{o},{\zbendh<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [r] !{*=0\dir{o},{\xcaph<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- "O"!{-(1.5,3.5)}
- [rr]!{*\txt\small\tt{\string\xcapv}}
- [rr]!{*\txt\small\tt{\string\sbendv}}
- [rr]!{*\txt\small\tt{\string\zbendv}}
- [rr]!{*\txt\small\tt{\string\sbendh}}
- [rr]!{*\txt\small\tt{\string\zbendh}}
- [rr]!{*\txt\small\tt{\string\xcaph}}
-"O"!{+(0,-5)} %[]!{\NoPSspecials}
- [ll] !{*=0\dir{o},{\xbendr<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [ur] !{*=0\dir{o},{\xbendl<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [urr]!{*=0\dir{o},{\xbendu<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [r] !{*=0\dir{o},{\xbendd<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- "O"!{-(3.5,6.5)}
- [rr]!{*\txt\small\tt{\string\xbendr}}
- [rr]!{*\txt\small\tt{\string\xbendl}}
- [rr]!{*\txt\small\tt{\string\xbendu}}
- [rr]!{*\txt\small\tt{\string\xbendd}}
- "O"!{+(2,-5)} %[]!{\NoPSspecials}
- [r(4)] !{*=0\dir{o},{\xbendd-<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [ur] !{*=0\dir{o},{\xbendu-<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [r] !{*=0\dir{o},{\xbendl-<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [urr] !{*=0\dir{o},{\xbendr-<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- "O"!{+(4.5,-6.5)}
- [rr]!{*\txt\small\tt{\string\xbendd-}}
- [rr]!{*\txt\small\tt{\string\xbendu-}}
- [rr]!{*\txt\small\tt{\string\xbendl-}}
- [rr]!{*\txt\small\tt{\string\xbendr-}}
-}$$
-\caption{knot joins, with orientations, labels and shifts}%
- ??=[f.knotjoins]
-\end{figure*}
-
-\noindent
-Figure~??[f.knotjoins] displays the orientation on the joins.
-Also indicated are default positions for labels and arrow-tips;
-each piece uses the same code,
-e.g. |\vloop|\ |<>||>>><{x}||{y}>{z}|. Furthermore the current <pos>
-before the piece is drawn is marked using $\;^{_{\xybox{*\dir{o}}}}\;$;
-that afterwards is indicated by
-$\;^{_{\xybox{*\dir{x}}}}\;$ or $\;^{_{\xybox{*\dir{+}}}}\;$.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The ability to scale in size and place arrow-tips, breaks, labels etc.
-apply also to <join> pieces. The only difference is\dots
-
-\note??=[join places]
-The three places referred to by |<|\,,||||\,,|>| are all on a single
-string. In particular |||| is always at the middle of the <join>,
-whereas |<| and |>| are at {\em earlier} and {\em later} parameter
-values respectively. Any adjustments??^[adjustment] involving breaks
-should occur in increasing parameter order.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{Parsing}
-
-\DOCMODE(
-\xydef@\xykparsejoin@{%
- \def\xykSCALE@@{}%
- \edef\xyknotPLACE{\xykmidPLACE@}%
- \let\xykparser@=\xykparsejoin@@
- \def\xykdefaultbreak@{\let\xykbreak@=\xykforetemp@
- \def\xyknotPLACE{(.5)}\appendtoholder@}%
-% \edef\xyknotPLACE{\xykmidPLACE@}\appendtoholder@}%
- \xyFN@\xykparsescale@ }
-\DOCMODE)
-
-\DOCMODE(
-{\xyuncatcodes \catcode`@=11
-\gdef\next{%
- \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsejoin@@}%
- \else\addLT@\ifx\next \let\xykbreak@=\xykbacktemp@
- \def\xykdefaultbreak@{\def\xyknotPLACE{(.5)}%
-% \def\xykdefaultbreak@{\edef\xyknotPLACE{\xykmidPLACE@}%
- \appendtoholder@}\addLT@\DN@{\xyprecross@}%
- \else\addGT@\ifx\next \let\xykbreak@=\xykforetemp@
- \def\xykdefaultbreak@{\def\xyknotPLACE{(.5)}%
-% \def\xykdefaultbreak@{\edef\xyknotPLACE{\xykmidPLACE@}%
- \appendtoholder@}\addGT@\DN@{\xypostcross@}%
- \else\ifx|\next \let\xykbreak@=\xyknulltemp@
-% \else\ifx|\next \let\xykbreak@=\xykholetemp@
- \def\xykdefaultbreak@{\def\xyknotPLACE{(.5)}%
-% \def\xykdefaultbreak@{\edef\xyknotPLACE{\xykmidPLACE@}%
- \appendtoholer@}\DN@|{\xymidcross@}%
- \else\addEQ@\ifx\next \addEQ@\DN@{\xyFN@\xykparsetips@@}%
-% \else\addAT@\ifx\next \addAT@\DN@{\xykjoincontrol@}%
- \else\addAT@\ifx\next \addAT@\DN@(##1){%
- \xyadjustJOIN@i##1@@\xyFN@\xykparsejoin@@}%
- \else\DN@{\afterknot@}%
- \fi\fi\fi\fi\fi\fi \next@ }}
-\xylet@\xykparsejoin@@=\next
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[join control]
-A parameter can be altered, using |@|<adjust>, to effect subtle
-adjustments to the shape of any join. Within a rectangular basis the
-horizontal or vertical tangents are preserved and overall reflection
-or rotation symmetry is preserved. Thus this parameter affects the
-`flatness' of a cap or loop, or the amount of curvature is s-bends and
-z-bends. For |\xcap..|s and |\xbend..|s the $45^\circ$ angle is altered;
-this is especially useful to match the tangents when a knot-piece
-has been specified using the technique of note~??[alter size and shape].
-
-The normal range for these parameters is between 0 and 1. Other values
-can be used with interesting results---the parameter determines the
-location of control points for a B\'ezier cubic curve.
-
-\begin{tabular}{ccl}
-piece & value & effect on\dots \\
-\noalign{\hrule}
-|\..cap| & .25 & flatness of cap;\\
-|\..loop| & .75 & flatness of loop;\\
-|\sbend..| & .75 & curvature in the `s';\\
-|\zbend..| & .75 & curvature in the `z';\\
-|\xcap..| & .5 & height of cap, slope at base;\\
-|\xbend..| & .5 & curvature, slope at base.\\
-\noalign{\hrule}
-\end{tabular}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{notes}
-
-The following example gives three ways of specifying a `trefoil' knot,
-using the |poly| feature to establish the location of the vertices for
-knot-pieces. In each the <crossing>s are calculated to fit together
-smoothly; a different way of creating <join>s is used in each.
-Also the third displays subtle changes of the ??^![join control].
-
-\begin{code}
-\def\TrefoilA{\xygraph{!{0;/r.75pc/:}
- !P3"a"{~>{}}!P9"b"{~:{(1.3288,0):}~>{}}
- !P3"c"{~:{(2.5,0):}~>{}}
- !{\vover~{"b2"}{"b1"}{"a1"}{"a3"}}
- !{"b4";"b2"**\crv{"c1"}}
- !{\vover~{"b5"}{"b4"}{"a2"}{"a1"}}
- !{"b7";"b5"**\crv{"c2"}}
- !{\vover~{"b8"}{"b7"}{"a3"}{"a2"}}
- !{"b1";"b8"**\crv{"c3"}}}}
-%
-\def\TrefoilB{\xygraph{!{0;/r.75pc/:}
- !P3"a"{~>{}}!P9"b"{~:{(1.3288,0):}~>{}}
- !P3"c"{~:{(2.5,0):}~>{}}
- !{\vover~{"b2"}{"b1"}{"a1"}{"a3"}}
- !{\vcap~{"c1"}{"c1"}{"b4"}{"b2"}@(+.1)}
- !{\vover~{"b5"}{"b4"}{"a2"}{"a1"}}
- !{\vcap~{"c2"}{"c2"}{"b7"}{"b5"}@(+.2)}
- !{\vover~{"b8"}{"b7"}{"a3"}{"a2"}}
- !{\vcap~{"c3"}{"c3"}{"b1"}{"b8"}}}}
-%
-\def\TrefoilC{\xygraph{!{0;/r.75pc/:}
- !P3"a"{~>{}}
- !P12"b"{~:{(1.414,0):}~>{}}
- !{\vover~{"b2"}{"b1"}{"a1"}{"a3"}}
- !{\save 0;"b2"-"b5":"b5",
- \xcaph @(+.1)\restore}
- !{\vover~{"b6"}{"b5"}{"a2"}{"a1"}}
- !{\save 0;"b6"-"b9":"b9",
- \xcaph @(+.2)\restore}
- !{\vover~{"b10"}{"b9"}{"a3"}{"a2"}}
- !{\save 0;"b10"-"b1":"b1",
- \xcaph @(+.3)\restore} }}
-$$\TrefoilA\quad\TrefoilB
- \quad\TrefoilC$$
-\end{code}
-\docode
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xydef@\xykjoincontrol@@{.75}%
-\xydef@\xyk@joincontrol@#1{\DN@{#1}%
- \ifx\next@\empty\edef\xykjoincontrol@@{.75}%
- \else\dimen@=#1\p@
- \edef\xykjoincontrol@@{\expandafter\removePT@\the\dimen@}\fi}
-\xylet@\xykjoincontrol\empty %\xyk@joincontrol@
-
-\xydef@\xykjoincontrol@(#1){\DN@{#1}%
- \ifx\next@\empty\edef\xykjoincontrol{\xykjoincontrol@@}%
- \else\dimen@=#1\p@
- \edef\xykjoincontrol{\expandafter\removePT@\the\dimen@}%
- \fi \xyFN@\xykparsejoin@@ }
-
-\xydef@\xykjoincontrol@i#1{\DN@{#1}%
- \ifx\next@\empty\edef\xykjoincontrol{\xykjoincontrol@@}%
- \else\dimen@=#1\p@
- \edef\xykjoincontrol{\expandafter\removePT@\the\dimen@}\fi}
-\DOCMODE)
-
-These macros are common to most joins.
-
-\DOCMODE(
-\xydef@\xykjoin@#1{%
- \expandafter\toks@\expandafter{\expandafter#1\knotSTYLE}}
-
-\xydef@\xyksetjoin@{\xykcheckTIPS@
- \xykprebreak@ \xykmidbreak@ \xykpostbreak@ \xyknottips@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{``cap'' joins:}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The initialisation\dots
-
-\DOCMODE(
-\xydef@\hcap{\begingroup\def\afterknot@{\xyhcap}%
- \def\xykprePLACE@{(.385)}\def\xykpostPLACE@{(.615)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.25}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\vcap{\begingroup\def\afterknot@{\xyvcap}%
- \def\xykprePLACE@{(.385)}\def\xykpostPLACE@{(.615)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.25}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\xcapv{\begingroup\def\afterknot@{\xyxcapv}%
- \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.8)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\xcaph{\begingroup\def\afterknot@{\xyxcaph}%
- \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.8)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
- \xyFN@\xykparsejoin@ }%
-\DOCMODE)
-
-The interface\dots
-
-\DOCMODE(
-\xydef@\xyvcap{\xykjoin@\xykcapv \xyksetjoin@ \xykhobject@{}}
-\xydef@\xyhcap{\xykjoin@\xykcaph \xyksetjoin@ \xykvobject@{}}
-\xydef@\xyxcapv{\xykjoin@\xykxcapv \xyksetjoin@ \xykvobject@{+(0,-1)}}
-\xydef@\xyxcaph{\xykjoin@\xykxcaph \xyksetjoin@ \xykhobject@{+(1,0)}}
-\DOCMODE)
-
-The drawing code\dots
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "_>",{\xyksaveEdgec},{\xykz_\ar #1@'{"^>"**{}?(\xykjoincontrol)@+
- ,?-(.25,0)@+,"_<";"^<"**{}?+(.25,0)@+,?(\xykjoincontrol)@+}
- "_<"#3#4#5#6},\restore \POS#7}}
-\xylet@\xykcapv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "_<",{\xyksaveEdgec},{\xykz_\ar #1@'{"_>"**{}?(\xykjoincontrol)@+,
- ?+(0,.25)@+,"^<";"^>"**{}?-(0,.25)@+,?(\xykjoincontrol)@+}
- "^<"#3#4#5#6}
- \restore \POS#7}}
-\xylet@\xykcaph=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "^>";"_>"**{}?="^_","^<";"_<"**{}?;"^_",**{}?(\xykjoincontrol)="^_",
- "_<",{\xyksaveEdgec},{\xykz_\ar #1@'{"^_"@+}
- "^<"#3#4#5#6},\restore \POS#7}}
-\xylet@\xykxcapv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "^<";"^>"**{}?="^_","_<";"_>"**{}?;"^_",**{}?(\xykjoincontrol)="^_",
- "_>",{\xyksaveEdgec},{\xykz_\ar #1@'{"^_"@+}
- "_<"#3#4#5#6},\restore \POS#7}}
-\xylet@\xykxcaph=\next
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{``loop'' joins:}
-
-The initialisation and interface\dots
-
-\DOCMODE(
-\xydef@\hloop{\begingroup\def\afterknot@{\xyhloop}%
- \def\xykprePLACE@{(.07)}\def\xykpostPLACE@{(.93)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.75}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\vloop{\begingroup\def\afterknot@{\xyvloop}%
- \def\xykprePLACE@{(.07)}\def\xykpostPLACE@{(.93)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.75}%
- \xyFN@\xykparsejoin@ }%
-
-\xydef@\xyvloop{\xykjoin@\xykloopv \xyksetjoin@ \xykhobject@{}}
-\xydef@\xyhloop{\xykjoin@\xyklooph \xyksetjoin@ \xykvobject@{}}
-\DOCMODE)
-
-The drawing code\dots
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "_>",{\xykz_\ar #1@'{"^>"**{}?(\xykjoincontrol)@+,?(1.25)-(.25,0)@+,
- "_<";"^<"**{}?(1.25)+(.25,0)@+,?(\xykjoincontrol)@+}"_<"#3#4#5#6}
- \restore \POS#7}}
-\xylet@\xykloopv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "_<",{\xykz_\ar #1@'{"_>"**{}?(\xykjoincontrol)@+,?(1.25)+(0,.25)@+,
- "^<";"^>"**{}?(1.25)+(0,-.25)@+,?(\xykjoincontrol)@+}"^<"#3#4#5#6}
- \restore \POS#7}}
-\xylet@\xyklooph=\next
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{``bend'' joins:}
-
-The initialisation\dots
-
-\DOCMODE(
-\xydef@\zbendh{\begingroup\def\afterknot@{\xyzbendh}%
- \def\xykprePLACE@{(.25)}\def\xykpostPLACE@{(.75)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{\xykjoincontrol@@}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\sbendv{\begingroup\def\afterknot@{\xysbendv}%
- \def\xykprePLACE@{(.25)}\def\xykpostPLACE@{(.75)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{\xykjoincontrol@@}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\sbendh{\begingroup\def\afterknot@{\xysbendh}%
- \def\xykprePLACE@{(.25)}\def\xykpostPLACE@{(.75)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{\xykjoincontrol@@}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\zbendv{\begingroup\def\afterknot@{\xyzbendv}%
- \def\xykprePLACE@{(.25)}\def\xykpostPLACE@{(.75)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{\xykjoincontrol@@}%
- \xyFN@\xykparsejoin@ }%
-
-
-\xydef@\xbendr{\begingroup\def\afterknot@{\xyxbendr}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.75)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\xbendl{\begingroup\def\afterknot@{\xyxbendl}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.75)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\xbendu{\begingroup\def\afterknot@{\xyxbendu}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.75)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\xbendd{\begingroup\def\afterknot@{\xyxbendd}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.75)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
- \xyFN@\xykparsejoin@ }%
-\DOCMODE)
-
-
-The interface\dots
-
-\DOCMODE(
-\xydef@\xyzbendh{\xykjoin@\xykzbendh \xyksetjoin@ \xykhvobject@{+(1,-1)}}
-\xydef@\xysbendv{\xykjoin@\xyksbendv \xyksetjoin@ \xykhvobject@{+(1,-1)}}
-\xydef@\xysbendh{\xykjoin@\xyksbendh \xyksetjoin@ \xykhuobject@{+(1,1)}}
-\xydef@\xyzbendv{\xykjoin@\xykzbendv \xyksetjoin@ \xykhuobject@{+(1,1)}}
-
-\xydef@\xyxbendr{\xykjoin@\xykxbendr \xyksetjoin@ \xykhvobject@{+(1,-1)}}
-\xydef@\xyxbendl{\xykjoin@\xykxbendl \xyksetjoin@ \xykhvobject@{+(0,-1)}}
-\xydef@\xyxbendu{\xykjoin@\xykxbendu \xyksetjoin@ \xykhvobject@{+(1,0)}}
-\xydef@\xyxbendd{\xykjoin@\xykxbendd \xyksetjoin@ \xykhvobject@{+(1,-1)}}
-\DOCMODE)
-
-
-The implementation\dots
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "^<",{\xyksaveEdgec},
- {\xykz^\ar #1@'{"^>"**{}?(\xykjoincontrol)@+,
- "_>";"_<"**{}?(\xykjoincontrol)@+}"_>"#3#4#5#6}%
- \restore \POS#7}}
-\xylet@\xykzbendh=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "^<",{\xyksaveEdgec},
- {\xykz_\ar #1@'{"_<"**{}?(\xykjoincontrol)@+,
- "_>";"^>"**{}?(\xykjoincontrol)@+}"_>"#3#4#5#6}%
- \restore \POS#7}}
-\xylet@\xyksbendv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "_<",{\xyksaveEdgec},
- {\xykz_\ar #1@'{"_>"**{}?(\xykjoincontrol)@+,
- "^>";"^<"**{}?(\xykjoincontrol)@+}"^>"#3#4#5#6}%
- \restore \POS#7}}
-\xylet@\xyksbendh=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "_<",{\xyksaveEdgec},
- {\xykz^\ar #1@'{"^<"**{}?(\xykjoincontrol)@+,
- "^>";"_>"**{}?(\xykjoincontrol)@+}"^>"#3#4#5#6}%
- \restore \POS#7}}
-\xylet@\xykzbendv=\next
-
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "^<"-(0,.5),{\xyksaveEdgec},
- {\xykz_\ar #1@'{"_<";"_>"**{}?(\xykjoincontrol)@+,}"_>"#3#4#5#6}%
- \restore \POS#7}}
-\xylet@\xykxbendr=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "^>"-(0,.5),{\xyksaveEdgec},
- {\xykz^\ar #1@'{"_>";"_<"**{}?(\xykjoincontrol)@+,}"_<"#3#4#5#6}%
- \restore \POS#7}}
-\xylet@\xykxbendl=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "_<"+(.5,0),{\xyksaveEdgec},
- {\xykz_\ar #1@'{"_>";"^>"**{}?(\xykjoincontrol)@+,}"^>"#3#4#5#6}%
- \restore \POS#7}}
-\xylet@\xykxbendu=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "^<"+(.5,0),{\xyksaveEdgec},
- {\xykz^\ar #1@'{"^>";"_>"**{}?(\xykjoincontrol)@+,}"_>"#3#4#5#6}%
- \restore \POS#7}}
-\xylet@\xykxbendd=\next
-
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{Changing the string-style}
-%
-It is not necessary to use solid curves; any style available to curves
-and arrows can be chosen using\dots
-%
-\begin{defs}
-|\knotstyle{|<char>|}| & use |\dir{|<char>|}| \cr
-|\knotstyles{|<char>|}{|<char>|}| & two styles \cr
-|\knotSTYLE{|<code>|}| & use <code> \cr
-\end{defs}
-%
-In each case the new style applies to {\em all} subsequent knot pieces,
-except that the two styles apply only to crossings.
-The latter case allows use of object <modifier>s. The <code> consists of
-two groups |{..}{..}|\,, each containing <arrow> forms, as in
-??g[xyarrow.doc:f.arrow] and notes~??g[xyarrow.doc:build arrow],
-??g[xyarrow.doc:object <modifier>s].
-Only the first <arrow> form is used with <join>s whereas the two forms
-are used respectively with the two strings of a <crossing> in the order
-that they are drawn.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next{{@{-}}{@{-}}}}
-\xylet@\knotSTYLE=\next
-
-{\xyuncatcodes \gdef\next#1{\def\knotSTYLE{{@{#1}}{@{#1}}}}}
-\xylet@\knotstyle=\next
-
-{\xyuncatcodes \gdef\next#1#2{\def\knotSTYLE{{@{#1}}{@{#2}}}}}
-\xylet@\knotstyles=\next
-
-{\xyuncatcodes \gdef\next#1{\def\knotSTYLE{#1}}}
-\xylet@\KNOTstyle=\next
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Initialisation:}\ default values for the methods.
-
-\DOCMODE(
-\xydef@\knotholesize@#1{\def\xykholesize{#1}}
-\xydef@\xykholesize{5pt}
-\xylet@\knotholesize=\knotholesize@
-\xylet@\holesize=\knotholesize@
-
-\xydef@\knottips#1{\def\xyknotTIPS@{#1}}
-\xydef@\xyknotTIPS@{FF}
-\xydef@\xyknotTIPS@@{}
-
-\xydef@\xykSCALE@@{}
-
-%\xydef@\xyknotbreak@@{}%
-\xydef@\xykprebreak@@{}%
-\xydef@\xykpostbreak@@{}%
-\xydef@\xykmidbreak@@{}%
-
-\xydef@\xykprePLACE@{(.25)}%
-\xydef@\xykpostPLACE@{(.75)}%
-\xydef@\xykmidPLACE@{}%
-\xylet@\xykPLACE@=\xykmidPLACE@
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%\subsection*{Flexible crossings}
-
-%Xtwist
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-{\gdef\next#1#2#3#4{%\message{#1:#2:#3:#4}%
- \save(0,0);"#2"-"#1"+"#4"-"#3":(.5,0):
- "#3"-"#1"+"#4"-"#2"::(0,.5)::}}
-\xylet@\xykflexbase@=\next
-\xylet@\xykflexbase=\xykflexbase@
-\DOCMODE)
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8{\xykflexbase{#1}{#2}{#3}{#4}%
-% \save(0,0);"#2"-"#1"+"#4"-"#3":(.5,0):
-% "#3"-"#1"+"#4"-"#2"::(0,.5)::
- "#1",{\ar @{#5}@'{"#1"+(0,.125)@++(.1875,.125)@+,
- "#4"-(.1875,.25)@++(.1875,.125)@+}"#4" #6},
- "#2",{\ar @{#5}@'{"#2"+(0,.125)@++(-.1875,.125)@+,
- "#3"+(.1875,-.25)@++(-.1875,.125)@+}"#3" #7}%
-\restore \POS#8}}
-\xylet@\Xtwist=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8{\xykflexbase{#1}{#2}{#3}{#4}%
-% \save(0,0);"#2"-"#1"+"#4"-"#3":(.5,0):
-% "#3"-"#1"+"#4"-"#2"::(0,.5)::
- "#1",{\ar @{#5}@'{"#1"+(0,.0625)@++(.1875,.0625)@+,
- "#3"+(.1875,-.125)@++(-.1875,.0625)@+}"#3" #6},
- "#2",{\ar @{#5}@'{"#2"+(0,.0625)@++(-.1875,.0625)@+,
- "#4"-(.1875,.125)@++(.1875,.0625)@+}"#4" #7}%
-\restore \POS#8}}
-\xylet@\Xuntwist=\next
-\DOCMODE)
-
-
-%Xover
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\xykflexbase{#1}{#2}{#3}{#4}%
-% \save(0,0);"#2"-"#1"+"#4"-"#3":(.5,0):
-% "#3"-"#1"+"#4"-"#2"::(0,.5)::
- "#1",{\ar @{#5}@'{"#1"+(.1875,.0625)@++(.1875,.1875)@+,
- "#4"+(-#9,-.125)@+}"#4" #6},
- "#2",{\ar @{#5}@'{"#2"+(-.1875,.0625)@++(-.1875,.1875)@+,
- "#3"+(#9,-.125)@+}"#3" #7}%
-\restore \POS#8}}
-\xylet@\Xover=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\xykflexbase{#1}{#2}{#3}{#4}%
-% \save(0,0);"#2"-"#1"+"#4"-"#3":(.5,0):
-% "#3"-"#1"+"#4"-"#2"::(0,.5)::
- "#1",{\ar @{#5}@'{"#1"+(.1875,.0625)@++(.1875,.1875)@+,
- "#2"+(-.1875,.0625)@+}"#2" #6},
-% "#3"+(#9,-.125)@+}"#3" #6},
- "#3",{\ar @{#5}@'{"#3"+(#9,-.125)@+,"#3"+(.25,-.25)@+,
-% "#2",{\ar @{#5}@'{"#2"+(-.1875,.0625)@++(-.1875,.1875)@+,
- "#4"+(-#9,-.125)@+}"#4" #7}%
-\restore \POS#8}}
-\xylet@\Xunover=\next
-\DOCMODE)
-
-
-%Xcap
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\xykflexbase{#1}{#2}{#3}{#4}%
-% \save(0,0);"#2"-"#1"+"#3"-"#4":(.5,0):
-% "#4"-"#1"+"#3"-"#2"::(0,.5)::
- "#1",{\ar @{#5}@'{"#1"+(0,.125)@++(.125,.25)@+,
- "#4"+(-.125,.375)@++(.125,-.25)@+}"#4" #6},
-\restore \POS#7}}
-\xylet@\Xcap=\next
-\DOCMODE)
-
-
-%XXover
-
-\DOCMODE(
-{\xyuncatcodes \catcode`@=11
- \gdef\next#1#2#3#4#5#6#7#8#9{\dimen@=#1\p@
- \ifdim\dimen@=\z@ \DN@{\Xunover{#2}{#3}{#4}{#5}{#8}{#6}{#7}{"#5"}}%
- \else\ifdim\dimen@>\z@
- \DNii@{#6}\ifx\nextii@\empty
- \DN@{\Xover{#2}{#3}{#4}{#5}{#8}{|(.45)\knothole}{#7}{"#5"}}%
- \else \DN@{\Xover{#2}{#3}{#4}{#5}{#8}{#6}{#7}{"#5"}}\fi
- \else
- \DNii@{#7}\ifx\nextii@\empty
- \DN@{\Xover{#2}{#3}{#4}{#5}{#8}{#6}{|(.45)\knothole}{"#5"}}%
- \else\DN@{\Xover{#2}{#3}{#4}{#5}{#8}{#6}{#7}{"#5"}}\fi
- \fi\fi
- \def\tmp@{{#9}}\ifx\tmp@\empty\def\tmp@{{0}}\else\dimen@=#9\p@\fi
- \expandafter\next@\tmp@ }}
-\xylet@\XXover=\next
-
-{\xyuncatcodes \catcode`@=11
- \gdef\next#1#2#3#4#5#6#7#8{\dimen@=#1\p@
- \ifdim\dimen@=\z@ \DN@{\Xuntwist{#2}{#4}{#3}{#5}{#8}{#6}{#7}{"#5"}}%
- \else\ifdim\dimen@>\z@
- \DNii@{#6}\ifx\nextii@\empty
- \DN@{\Xtwist{#2}{#4}{#3}{#5}{#8}{|(.45)\knothole}{#7}{"#5"}}%
- \else \DN@{\Xtwist{#2}{#4}{#3}{#5}{#8}{#6}{#7}{"#5"}}\fi
- \else
- \DNii@{#7}\ifx\nextii@\empty
- \DN@{\Xtwist{#2}{#4}{#3}{#5}{#8}{#6}{|(.45)\knothole}{"#5"}}%
- \else\DN@{\Xtwist{#2}{#4}{#3}{#5}{#8}{#6}{#7}{"#5"}}\fi
- \fi\fi \next@ }}
-\xylet@\XXtwist=\next
-
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
- simplified switch-like interface
-
-
-\DOCMODE(
-{\xyuncatcodes \catcode`@=11
- \gdef\next#1#2#3#4{\dimen@=#1\p@
- \ifdim\dimen@=\z@ \DN@{\xykuncrossv{#4}{#2}{#3}{+(0,-1)}}%
- \else\ifdim\dimen@>\z@
- \DNii@{#2}\ifx\nextii@\empty
- \DN@{\xyktwistv{#4}{|\knothole}{#3}{+(1,0)}}%
- \else \DN@{\xyktwistv{#4}{#2}{#3}{+(1,0)}}\fi
- \else
- \DNii@{#3}\ifx\nextii@\empty
- \DN@{\xyktwistv{#4}{#2}{|\knothole}{+(0,-1)}}%
- \else\DN@{\xyktwistv{#4}{#2}{#3}{+(0,-1)}}\fi
- \fi\fi \next@ }}
-\xylet@\Vcross=\next
-
-{\xyuncatcodes \catcode`@=11
- \gdef\next#1#2#3#4{\dimen@=#1\p@
- \ifdim\dimen@=\z@ \DN@{\xykuncrossh{#4}{#2}{#3}{+(0,-1)}}%
- \else\ifdim\dimen@<\z@
- \DNii@{#2}\ifx\nextii@\empty
- \DN@{\xyktwisth{#4}{|\knothole}{#3}{+(1,0)}}%
- \else \DN@{\xyktwisth{#4}{#2}{#3}{+(1,0)}}\fi
- \else
- \DNii@{#3}\ifx\nextii@\empty
- \DN@{\xyktwisth{#4}{}{|\knothole}{+(1,0)}}%
- \else\DN@{\xyktwisth{#4}{#2}{#3}{+(1,0)}}\fi
- \fi\fi \next@ }}
-\xylet@\Hcross=\next
-
-{\xyuncatcodes \catcode`@=11
- \gdef\next#1#2#3{\dimen@=#1\p@ \save
- \ifdim\dimen@<\z@
- \DN@{\POS="@",p="@@",(0,0);(-1,0):(0,-1)::"@@";"@",}%
- \else\DN@{}\fi
- \next@ \xykcaph{#3}{#2}\restore }}
-\xylet@\Hcap=\next
-
-{\xyuncatcodes \catcode`@=11
- \gdef\next#1#2#3{\dimen@=#1\p@ \save
- \ifdim\dimen@<\z@
- \DN@{\POS="@",p="@@",(0,0);(0,-1)::"@@";"@",}%
- \else\DN@{}\fi
- \next@ \xykcapv{#3}{#2}\restore }}
-\xylet@\Vcap=\next
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xyknot.doc,v $
-% Revision 3.4 1997/05/18 01:13:24 ross
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/18 09:20:49 ross
-% no changes
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% Created by Ross Moore, September 1994.
-\DOCMODE)