From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/generic/diagrams/xypic/texinputs/movie.cls | 333 +++ macros/generic/diagrams/xypic/texinputs/xy.sty | 137 + macros/generic/diagrams/xypic/texinputs/xy.tex | 2694 +++++++++++++++++++ .../diagrams/xypic/texinputs/xy16textures.tex | 122 + .../generic/diagrams/xypic/texinputs/xy17oztex.tex | 121 + .../generic/diagrams/xypic/texinputs/xy2cell.tex | 668 +++++ macros/generic/diagrams/xypic/texinputs/xyall.tex | 36 + macros/generic/diagrams/xypic/texinputs/xyarc.tex | 683 +++++ .../generic/diagrams/xypic/texinputs/xyarrow.tex | 538 ++++ macros/generic/diagrams/xypic/texinputs/xybarr.tex | 1016 ++++++++ .../generic/diagrams/xypic/texinputs/xycmactex.tex | 28 + .../generic/diagrams/xypic/texinputs/xycmtip.tex | 29 + .../generic/diagrams/xypic/texinputs/xycolor.tex | 112 + .../generic/diagrams/xypic/texinputs/xycrayon.tex | 32 + .../generic/diagrams/xypic/texinputs/xycurve.tex | 2702 ++++++++++++++++++++ .../generic/diagrams/xypic/texinputs/xydummy.tex | 30 + .../generic/diagrams/xypic/texinputs/xydvidrv.tex | 36 + .../generic/diagrams/xypic/texinputs/xydvips.tex | 154 ++ .../generic/diagrams/xypic/texinputs/xydvitops.tex | 179 ++ .../generic/diagrams/xypic/texinputs/xyemtex.tex | 101 + .../generic/diagrams/xypic/texinputs/xyframe.tex | 537 ++++ .../generic/diagrams/xypic/texinputs/xygraph.tex | 219 ++ .../generic/diagrams/xypic/texinputs/xyidioms.tex | 72 + .../generic/diagrams/xypic/texinputs/xyimport.tex | 68 + macros/generic/diagrams/xypic/texinputs/xyknot.tex | 901 +++++++ macros/generic/diagrams/xypic/texinputs/xyline.tex | 237 ++ .../generic/diagrams/xypic/texinputs/xymacpat.xyp | 60 + .../generic/diagrams/xypic/texinputs/xymatrix.tex | 500 ++++ .../generic/diagrams/xypic/texinputs/xymovie.tex | 75 + .../generic/diagrams/xypic/texinputs/xynecula.tex | 330 +++ .../generic/diagrams/xypic/texinputs/xyoztex.tex | 130 + .../generic/diagrams/xypic/texinputs/xypdf-co.tex | 129 + .../generic/diagrams/xypic/texinputs/xypdf-cu.tex | 1187 +++++++++ .../generic/diagrams/xypic/texinputs/xypdf-fr.tex | 438 ++++ .../generic/diagrams/xypic/texinputs/xypdf-li.tex | 69 + .../generic/diagrams/xypic/texinputs/xypdf-ro.tex | 133 + macros/generic/diagrams/xypic/texinputs/xypdf.tex | 522 ++++ macros/generic/diagrams/xypic/texinputs/xypic.sty | 32 + macros/generic/diagrams/xypic/texinputs/xypic.tex | 24 + .../generic/diagrams/xypic/texinputs/xypicture.tex | 55 + macros/generic/diagrams/xypic/texinputs/xypoly.tex | 609 +++++ macros/generic/diagrams/xypic/texinputs/xyps-c.tex | 69 + .../generic/diagrams/xypic/texinputs/xyps-col.tex | 97 + macros/generic/diagrams/xypic/texinputs/xyps-f.tex | 127 + macros/generic/diagrams/xypic/texinputs/xyps-l.tex | 68 + .../generic/diagrams/xypic/texinputs/xyps-pro.tex | 173 ++ .../generic/diagrams/xypic/texinputs/xyps-ps.tex | 280 ++ macros/generic/diagrams/xypic/texinputs/xyps-r.tex | 61 + macros/generic/diagrams/xypic/texinputs/xyps-s.tex | 51 + macros/generic/diagrams/xypic/texinputs/xyps-t.tex | 64 + macros/generic/diagrams/xypic/texinputs/xyps.tex | 367 +++ .../generic/diagrams/xypic/texinputs/xypsdict.tex | 241 ++ .../generic/diagrams/xypic/texinputs/xypspatt.tex | 104 + .../generic/diagrams/xypic/texinputs/xyrecat.tex | 36 + .../generic/diagrams/xypic/texinputs/xyrotate.tex | 161 ++ .../generic/diagrams/xypic/texinputs/xysmart.tex | 320 +++ .../diagrams/xypic/texinputs/xytextures.tex | 123 + macros/generic/diagrams/xypic/texinputs/xytile.tex | 125 + macros/generic/diagrams/xypic/texinputs/xytips.tex | 81 + macros/generic/diagrams/xypic/texinputs/xytp-f.tex | 174 ++ macros/generic/diagrams/xypic/texinputs/xytpic.tex | 228 ++ macros/generic/diagrams/xypic/texinputs/xyv2.tex | 277 ++ macros/generic/diagrams/xypic/texinputs/xyweb.tex | 94 + macros/generic/diagrams/xypic/texinputs/xyxdvi.tex | 138 + 64 files changed, 19537 insertions(+) create mode 100644 macros/generic/diagrams/xypic/texinputs/movie.cls create mode 100644 macros/generic/diagrams/xypic/texinputs/xy.sty create mode 100644 macros/generic/diagrams/xypic/texinputs/xy.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xy16textures.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xy17oztex.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xy2cell.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyall.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyarc.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyarrow.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xybarr.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xycmactex.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xycmtip.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xycolor.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xycrayon.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xycurve.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xydummy.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xydvidrv.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xydvips.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xydvitops.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyemtex.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyframe.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xygraph.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyidioms.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyimport.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyknot.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyline.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xymacpat.xyp create mode 100644 macros/generic/diagrams/xypic/texinputs/xymatrix.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xymovie.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xynecula.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyoztex.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xypdf-co.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xypdf-cu.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xypdf-fr.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xypdf-li.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xypdf-ro.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xypdf.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xypic.sty create mode 100644 macros/generic/diagrams/xypic/texinputs/xypic.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xypicture.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xypoly.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyps-c.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyps-col.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyps-f.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyps-l.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyps-pro.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyps-ps.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyps-r.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyps-s.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyps-t.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyps.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xypsdict.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xypspatt.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyrecat.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyrotate.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xysmart.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xytextures.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xytile.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xytips.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xytp-f.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xytpic.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyv2.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyweb.tex create mode 100644 macros/generic/diagrams/xypic/texinputs/xyxdvi.tex (limited to 'macros/generic/diagrams/xypic/texinputs') diff --git a/macros/generic/diagrams/xypic/texinputs/movie.cls b/macros/generic/diagrams/xypic/texinputs/movie.cls new file mode 100644 index 0000000000..6486901aa8 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/movie.cls @@ -0,0 +1,333 @@ +%% $Id: movie.cls,v 3.7 2011/03/14 20:14:00 krisrose Exp $ -*-latex-*- +%% +%% ``LaTeX Movie'' document class for DVI animations. +%% Copyright (c) 1994-1997 Kristoffer H. Rose +%% +%% This file is part of the Xy-pic package for graphs and diagrams in TeX. +%% Copyright (c) 1991-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi + +\NeedsTeXFormat{LaTeX2e} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Version. + +\def\next$#1: #2 #3${#2} +\edef\next{\noexpand\ProvidesClass{movie}% + [\next$Date: 2011/03/14 20:14:00 $ + Movies in LaTeX v.\next$Revision: 3.7 $.]}\next + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Options. + +% nocaption (omit caption at lower left; default) +% caption (include caption) +\newif\ifm@caption +\DeclareOption{nocaption}{\m@captionfalse} +\DeclareOption{caption}{\m@captiontrue} + +% nocount (omit count at lower left; default) +% count (include count) +\newif\ifm@count +\DeclareOption{nocount}{\m@countfalse} +\DeclareOption{count}{\m@counttrue} + +% notime (omit elapsed time in "seconds"; default) +% time (include elapsed time) +\newif\ifm@time +\DeclareOption{notime}{\m@timefalse} +\DeclareOption{time}{\m@timetrue} + +% loop (make the animation loop; default) +% once (don't loop) +\def\loop@@{-ns2} +\DeclareOption{loop}{\def\loop@@{-ns2}} +\DeclareOption{once}{\def\loop@@{-once}} + +% Paper size (ignored since result is never printed). +\DeclareOption{a4paper}{} +\DeclareOption{a5paper}{} +\DeclareOption{b5paper}{} +\DeclareOption{letterpaper}{} +\DeclareOption{legalpaper}{} +\DeclareOption{executivepaper}{} +\DeclareOption{landscape}{} + +%\vsize=9in \voffset=0in +%\hsize=7in \hoffset=0in % safe? :) + +\newdimen\textheight \textheight=\vsize +\newdimen\textwidth \textwidth=\hsize + +% Font size. +\renewcommand\normalsize{\fontsize{10}{12}\selectfont} +\DeclareOption{10pt}{\renewcommand\normalsize{\fontsize{10}{12}\selectfont}} +\DeclareOption{11pt}{\renewcommand\normalsize{\fontsize{11}{13}\selectfont}} +\DeclareOption{12pt}{\renewcommand\normalsize{\fontsize{12}{14}\selectfont}} + +% Driver (passed on to packages). +\DeclareOption{cmactex}{\OptionNotUsed} +\DeclareOption{dvips}{\OptionNotUsed} +\DeclareOption{dvitops}{\OptionNotUsed} +\DeclareOption{emtex}{\OptionNotUsed} +\DeclareOption{ln}{\OptionNotUsed} +\DeclareOption{oztex}{\OptionNotUsed} +\DeclareOption{textures}{\OptionNotUsed} +\DeclareOption{xdvi}{\OptionNotUsed} + +% ...remaining options are numeric assignments... +\def\m@keys{} +\def\add@m@keys#1{\expandafter\def\expandafter\m@keys\expandafter{\m@keys,#1}} +\DeclareOption*{\expandafter\add@m@keys\expandafter{\CurrentOption}} + +\ProcessOptions* + +\LoadClass{article} +\pagestyle{empty} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Dependencies. + +\RequirePackage{keyval} % key=value pair support +\input xy % Xy-pic kernel (not package to prevent clash) + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Parameters (set via options or the setup). + +% pixel= (makes \pixels{} a valid ; default: 1in/300) +% dpi= (dots per inch ~ pixel=1in/number) +\newdimen\m@pixel \m@pixel=0.0033333333in +\define@key{movie}{pixel}{\m@pixel=#1\relax} +\define@key{movie}{dpi}{\m@pixel=1in \divide \m@pixel by #1\relax} + +% height= +% width= +\newdimen\m@height \m@height=2in +\newdimen\m@width \m@width=2in +\define@key{movie}{height}{\m@height=#1\relax} +\define@key{movie}{width}{\m@width=#1\relax} + +% tick= (set the duration of each frame to seconds) +% fps= (frames per second ~ tick=1/number) +\newdimen\m@tick \m@tick=0.083333333pt +\define@key{movie}{tick}{\m@tick=#1pt\relax} +\define@key{movie}{fps}{\m@tick=1pt \divide \m@tick by #1\relax} + +\def\next#1{\setkeys{movie}{#1}} +\expandafter\next\expandafter{\m@keys} +\let\m@keys=\undefined + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Setting parameters explicitly... + +\def\MovieSetup#1{\setkeys{movie}{#1}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Internals. + +\def\m@caption{} + +\countdef\m@scene=1 % count1 = scene# +\countdef\m@frame=2 % count2 = frame# (in scene) + +\font\fiverm=cmr5 % safe small font + +\newdimen\m@total \m@total=0pt % total elapsed time + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% User accessible progress macros: + +\def\theFrame{0} +\def\theScene{0} + +\def\theF{0} +\def\theFr{1} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% User command: \scene [] {...} +% +% Produce scene of seconds (default: 1.0) with each frame produced +% by ... centered in vertical mode. + +\newif\iflastframe@ +\newdimen\m@length % duration of scene +\newdimen\m@init % start of zoom + +\newcommand\scene{% + \@ifnextchar*{\lastframe@true \DN@*{\scene@i}\next@}% + {\lastframe@false \scene@i}} + +\newcommand\scene@i[1][1]{\scene@ii{#1}} + +\def\setm@caption#1{\xdef\m@caption{#1}} + +\long\def\scene@ii#1#2{{% + \let\caption=\setm@caption + \global\advance\m@scene\@ne \edef\theScene{\the\m@scene}% + \global\m@frame=\z@ \m@length=#1pt \m@init=\z@ + \loop + \dimen@=\m@frame\m@tick + \ifdim\dimen@<\m@length + \scene@frame{#2}% + \repeat + \iflastframe@ \scene@frame{#2}\fi + \dimen@=#1pt \advance\dimen@ by -\m@frame\m@tick + \ifdim.1\m@tick<\ifdim\dimen@<\z@-\fi\dimen@ + \dimen@=\m@frame\m@tick + \@warning{scene \the\m@scene\space rounded from #1 to + \expandafter\unPT@\the\dimen@\space seconds}% + \fi}\ignorespaces} + +\def\scene@frame#1{\frame@compute + \null + \vfill + \hrule width\m@width + \hbox to\m@width{\hss + \vbox to\m@height{\hsize=\m@width \null\vfil{#1}\vfil\null}% + \hss}% + \setbox0=\hbox{% + \setbox0=\hbox to\m@width{\hss\fiverm\strut + \ifm@caption \m@caption \fi + \ifm@time \quad \m@nicetotal s \fi + \ifm@count \quad \the\m@scene.% + \ifnum\m@frame<100 0\ifnum\m@frame<10 0\fi\fi\the\m@frame\fi}% + \dimen0=\dp0 \ht0=0pt \dp0=0pt \raise\dimen0\box0}% + \ht0=0pt \dp0=0pt \box0\relax + \hrule width\m@width + \global\advance\m@frame\@ne + \global\advance\m@total\m@tick + \eject} + +\def\frame@compute{% + \edef\theFrame{\the\m@frame}% + \dimen@=\m@frame\m@tick \advance\dimen@-\m@init + \ifdim\dimen@<\z@ \dimen@=\z@ \fi + \ifdim\dimen@>\m@length \dimen@=\m@length \fi + \quotient@\theF\dimen@\m@length + \dimen@=-\dimen@ \advance\dimen@\m@length + \quotient@\theFr\dimen@\m@length} + +\def\m@nicetotal{% + \edef\tmp{\expandafter\removePT@\the\m@total}% + \expandafter\twodecimals@\tmp 00@} +\def\twodecimals@#1.#2#3#4@{#1.#2#3} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Triggers. +% +% Triggers are used to make the individual frames in a scene different! :) + +% \F{C} expands to C(F) where F = (#frames / frame#) ; 0.0 < F <= 1.0 . +% \Fr{C} expands to C(Fr) where Fr = 1 - F . + +\def\F{\expandafter\F@\expandafter{\theF}} +\def\Fr{\expandafter\F@\expandafter{\theFr}} + +\def\F@#1#2{#2(#1)} + +% \Zoom[A;B]{C} expands C zooming onto the interval [A;B], i.e., within C the +% interval [0;1] really denotes the (current) interval [A;B] ... + +% Specifically: F F inside [A;B] +% 0;A 0 +% A;B F-A / B-A +% B;1 1 + +\newcommand\Zoom[1][0;1]{\Zoom@#1;} +\def\Zoom@#1;#2;#3{{% + \dimen@=#1\m@length \advance\dimen@\m@init + \m@length=#2\m@length \advance\m@length\m@init + \advance\m@length-\dimen@ \m@init=\dimen@ + \frame@compute #3}} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Preliminary FADING support... +% +% by Ross Moore; depends on Xy-pic `ps' backend... +% +% use as a modifier: \drop[][!\F\lighten] +% use as a modifier: \drop[][!\F\darken}] +% +% \lighten(1) = white \lighten(0) = natural colour +% \darken (1) = black \darken (0) = natural colour +% +\def\lighten@(#1){/@col #1 def{1 sub 1 @col sub mul 1 add}settransfer} +\def\darken@(#1){/@col #1 def{1 @col sub mul}settransfer} + +\xywithoption{ps}{\let\lighten=\lighten@ \let\darken=\darken@} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Dump size file. +% +\AtEndDocument{\dumpsizefile} + +\newwrite\m@write + +{\catcode`p=12 \catcode`t=12 \gdef\unPT@#1pt{#1}} + +\def\dumpsizefile{\immediate\openout\m@write=\jobname.size +% + \dimen@=1in \divide\dimen@\m@pixel + \immediate\write\m@write{dpi=\number\dimen@}% +% + \dimen@=\m@tick \multiply\dimen@ by 1000\advance\dimen@.5\m@tick + \divide\dimen@\p@ \immediate\write\m@write{delay=\number\dimen@}% +% + \immediate\write\m@write{loop=\loop@@}% +% + \immediate\closeout\m@write} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Misc. class-provided commands... + +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% The End. + +\endinput + +% $Log: movie.cls,v $ +% Revision 3.7 2011/03/14 20:14:00 krisrose +% Preparing for release 3.8.6. +% +% Revision 3.6 2010/06/10 18:45:49 krisrose +% Reference to GPL by URL. +% +% Revision 3.5 2010/04/16 06:06:51 krisrose +% Preparing for a new release... +% +% Revision 3.4 1997/05/18 01:14:25 krisrose +% Essential bugfixes. +% +% Revision 1.5 1997/05/13 12:36:26 krisrose +% Intermediate version; factors function nicely. +% +% Revision 1.4 1997/05/01 21:55:44 krisrose +% Works again. +% +% Revision 1.3 1997/02/11 04:20:19 krisrose +% Fits new dvitogif89a 1.1 :) +% +% Moved to Xy-pic hierarchy. diff --git a/macros/generic/diagrams/xypic/texinputs/xy.sty b/macros/generic/diagrams/xypic/texinputs/xy.sty new file mode 100644 index 0000000000..29218a0a26 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xy.sty @@ -0,0 +1,137 @@ +%% $Id: xy.sty,v 3.10 2011/03/14 20:14:00 krisrose Exp $ +%% +%% ``Xy-pic as LaTeX 2.09 style option and LaTeX 2e package''. +%% Copyright (c) 1993-1996 Kristoffer H. Rose +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. + +% Load Xy-pic with catcode of @ set as it will be in user text: +\count255=\the\catcode`\@ {\catcode`\@=11 \xdef\xystycatcode{\the\count255}} +\makeatletter + +% REPAIR bug of the 2e version of AMS-LaTeX where \makeatother is broken... +\ifx\@ifpackageloaded\undefined \makeatother +\else \@ifpackageloaded{amstex}{\catcode`\@=\active}{\makeatother}\fi + +\input xy + +% That is all unless this is called as a LaTeX2e `native mode' package. Is +% there an official way to check this? Anyway, this seems to work: +\makeatletter +\ifx\if@compatibility\undefined \catcode`\@=\xystycatcode \endinput \fi + +% Ensure that we are *really* running LaTeX2e...! +\NeedsTeXFormat{LaTeX2e} + +% So we can check for pdfTeX. +\RequirePackage{ifpdf} + +% This file provides the current version of Xy-pic! +\edef\next{% + \noexpand\ProvidesPackage{xy}[\xydate\space Xy-pic version \xyversion]}\next + +% Recognise some standard LaTeX2e class options (cf. old `LaTeX Companion' p.317): +\DeclareOption{cmactex}{\xyoption{dvips}} % Thomas Kiffe's CMacTeX uses dvips +\DeclareOption{dvips}{\xyoption{dvips}\xyoption{ps}} +\DeclareOption{dvitops}{\xyoption{dvitops}\xyoption{ps}} +\DeclareOption{emtex}{\xyoption{emtex}} +\DeclareOption{ln}{\xywarning@{`ln' DVI driver not yet fully supported}} +\DeclareOption{oztex}{\xyoption{oztex}} +\DeclareOption{textures}{\xyoption{textures}} +\DeclareOption{xdvi}{\xyoption{xdvi}} + +% Recognise standard aliases for the pdf option. +\DeclareOption{pdftex}{\xyoption{pdf}} +\DeclareOption{dvipdfm}{\xyoption{pdf}} +\DeclareOption{dvipdfmx}{\xyoption{pdf}} + +% This is special. +\DeclareOption{colour}{\xyoption{color}} % :-) + +% This (obsolete) cmtip style option should be activated after loading: +\DeclareOption{cmtip}{\xyoption{cmtip}\UseComputerModernTips} + +% Pass the desired tip size if defined +\DeclareOption{10pt}{\xywithoption{tips}{\def\tipsize@@{10}}} +\DeclareOption{11pt}{\xywithoption{tips}{\def\tipsize@@{11}}} +\DeclareOption{12pt}{\xywithoption{tips}{\def\tipsize@@{12}}} + +% Other options are just loaded. +\DeclareOption*{\edef\next{\noexpand\xyoption{\CurrentOption}}\next} + +% Reinstall catcode of @... +\catcode`\@=\xystycatcode + +% ...and process the options. +\ProcessOptions\relax + +% Now, if no backend is loaded but we can generate PDF, do. +\ifpdf\makeatletter + \ifx\xydriversloaded@@\xydriversloaded@none + \makeatother\xyoption{pdf}\fi\fi + +% That's all. +\endinput + +% $Log: xy.sty,v $ +% Revision 3.10 2011/03/14 20:14:00 krisrose +% Preparing for release 3.8.6. +% +% Revision 3.9 2010/06/10 18:45:49 krisrose +% Reference to GPL by URL. +% +% Revision 3.8 2010/04/28 07:14:30 krisrose +% New Xy-pic home page installed. +% +% Revision 3.7 2010/04/26 01:45:23 krisrose +% First proper integration of xypdf into Xy-pic "make dist". +% +% Revision 3.6 2010/04/25 21:48:06 krisrose +% First proper integration of xypdf into Xy-pic "make dist". +% +% Revision 3.5 2010/04/20 20:36:43 krisrose +% Documentation updates. +% +% Revision 3.4 2010/04/16 06:06:52 krisrose +% Preparing for a new release... +% +% Revision 3.3 1996/12/19 03:31:56 krisrose +% Maintenance release +% +% Revision 3.1 1995/09/05 20:31:32 kris +% Releasing! +% +% Revision 3.0 1995/07/07 20:14:21 kris +% Major release w/new User's Guide! +% +% Revision 2.13 1995/07/04 15:11:17 kris +% Ready to release v3? +% +% Revision 2.12 1994/10/25 11:34:25 kris +% Interim release just before v3 [works with AMS-LaTeX 1.2]... +% +% Revision 2.9 1994/06/09 14:59:19 kris +% Release 3beta. +% +% Revision 2.8 1994/04/08 04:30:00 kris +% Second (bug fix) 3alpha release. +% +% Revision 2.7 1994/03/08 02:06:01 kris +% Release 3alpha. +% +% New for version 2.7. diff --git a/macros/generic/diagrams/xypic/texinputs/xy.tex b/macros/generic/diagrams/xypic/texinputs/xy.tex new file mode 100644 index 0000000000..0ea737b2ab --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xy.tex @@ -0,0 +1,2694 @@ +%% xy.tex from $Id: xy.doc,v 3.35 2013/10/06 01:14:17 krisrose Exp $ +%% +%% Basic Xy-pictures: Xy-pic bootstrap and kernel macros. +%% Copyright (c) 1991-2011 Kristoffer H. Rose +%% +%% This file is part of the Xy-pic package for graphs and diagrams in TeX. +%% Copyright (c) 1991-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined\else\message{not reloaded}\endinput\fi +\let\xyloaded=\relax +\message{Bootstrap\string'ing\string:} +{\catcode96 12\catcode`\#6\catcode`\.12\catcode`\:12\catcode`\'12\catcode`\@11 +\ifx\xywarnifdefined\undefined\else \immediate\write16{}% + \immediate\write16{Xy-pic Warning: \string\xywarnifdefined\space redefined.}% + \immediate\write16{}\fi +\gdef\xywarnifdefined#1{\ifx#1\undefined\else \immediate\write16{}% + \immediate\write16{Xy-pic Warning: `\string#1' redefined.}% + \immediate\write16{}\fi} +\xywarnifdefined\xydef@ \gdef\xydef@#1{\xywarnifdefined#1\gdef#1} +\xywarnifdefined\xylet@ \gdef\xylet@#1{\xywarnifdefined#1\global\let#1} +\xywarnifdefined\xynew@ + \gdef\xynew@#1#2{\xywarnifdefined#2\csname new#1\endcsname#2}} +\message{catcodes\string,} +\xywarnifdefined\xyuncatcodes +\xywarnifdefined\xyreuncatcodes \def\xyreuncatcodes{\edef\xyuncatcodes{% + \catcode92 0 \catcode123 1 \catcode125 2 \catcode37 14 + \catcode 9 \the\catcode 9 \catcode10 \the\catcode10 \catcode12 \the\catcode12 + \catcode35 \the\catcode35 \catcode36 \the\catcode36 \catcode38 \the\catcode38 + \catcode43 \the\catcode43 \catcode45 \the\catcode45 \catcode46 \the\catcode46 + \catcode47 \the\catcode47 + \catcode60 \the\catcode60 \catcode61 \the\catcode61 \catcode62 \the\catcode62 + \catcode64 \the\catcode64 \catcode96 \the\catcode96 + \newlinechar \the\newlinechar \endlinechar \the\endlinechar }} +\xyreuncatcodes +\xywarnifdefined\xycatcodes \def\xycatcodes{% + \catcode 9 10 + \catcode 35 6 \catcode 36 3 \catcode 38 4 + \catcode 43 12 \catcode 45 12 \catcode 46 12 \catcode 47 12 + \catcode 60 12 \catcode 61 12 \catcode 62 12 + \catcode 64 11 \catcode 96 12 } +\xycatcodes +\message{docmode,} +{\catcode`\|0 \xywarnifdefined|DOCMODE +\gdef|DOCMODE#1{\ifx(#1\relax \xycatcodes \expandafter\ignorespaces + \else \skipspecials@ \expandafter\docm@\fi}% +\xywarnifdefined\skipspecials@ +\gdef\skipspecials@{% + \catcode`\\12 \catcode`\{12 \catcode`\}12 \catcode`\#12 \catcode`\%12 + \catcode`\^^L12 \endlinechar`\^^J }% +\catcode`\/=12 \lccode`\/`\\% +\lccode`\D`\D \lccode`\O`\O \lccode`\C`\C \lccode`\M`\M \lccode`\E`\E +\lowercase{% +\xywarnifdefined\docm@ \gdef\docm@{\docm@i}% +\xywarnifdefined\docm@i \gdef\docm@i#1^^J{\docm@ii#1/DOCMODE\docm@iii}% +\xywarnifdefined\docm@ii + \gdef\docm@ii#1/DOCMODE{\def\next@{#1}\futurelet\next\docm@iii}% +\xywarnifdefined\docm@iii \gdef\docm@iii#1\docm@iii{% + \ifx\next\docm@iii \let\next\next@ \docecho@ \let\next@\docm@ + \else\ifx\next@\empty \let\next@\docfinish@ + \else \edef\next@{\noexpand\docm@iv\next@/DOCMODE#1\noexpand\docm@iv}% + \fi\fi \next@}% +\xywarnifdefined\docm@iv + \gdef\docm@iv#1/DOCMODE\docm@iv{\def\next{#1}\docecho@ \docm@}}% +\xywarnifdefined\docecho@ \global\let\docecho@\relax +\xywarnifdefined\docfinish@ \gdef\docfinish@{\xyuncatcodes|DOCMODE\next}} +\xydef@\xydefcsname@#1{\DN@{#1}\DNii@##1{% + \ifx ##1\relax\else \xywarning@{\string`\string##1\string' redefined}\fi + \def##1}% + \expandafter\nextii@\csname\codeof\next@\endcsname} +\xydef@\xyletcsnamecsname@#1#2{\def\1{#1}\def\2{#2}\DN@##1##2{% + \ifx ##1\relax\else \xywarning@{`\string##1\string' redefined}\fi + \let##1=##2}% + \expandafter\expandafter\expandafter\next@ + \expandafter\csname\expandafter\codeof\expandafter\1\expandafter\endcsname + \csname\codeof\2\endcsname} +\xywarnifdefined\codeof +\xywarnifdefined\codeof@ +{\catcode`\:=12 + \gdef\codeof#1{\expandafter\codeof@\meaning#1<-:} + \gdef\codeof@#1:->#2<-:{#2}} +\xywarnifdefined\addAT@ +\xywarnifdefined\addHASH@ +\xywarnifdefined\addDOLL@ +\xywarnifdefined\addAND@ +\xywarnifdefined\addRQ@ +\xywarnifdefined\addPLUS@ +\xywarnifdefined\addDASH@ +\xywarnifdefined\addDOT@ +\xywarnifdefined\addLT@ +\xywarnifdefined\addEQ@ +\xywarnifdefined\addGT@ +\xywarnifdefined\addLQ@ +\xydef@\xymakeADD@#1#2 #3 {\ifnum\catcode#3=6 \def#1##1{##1#2#2}% + \else \def#1##1{##1#2}\fi} +\xydef@\xyrecat@{\xymakeADD@\addAT@} +\xydef@\xyrecat{\xyrecat@} +\xydef@\xyresetcatcodes{\def\xyrecat{\xyrecat@}\xyreuncatcodes + \input xyrecat \relax \xyuncatcodes} +\xyuncatcodes \xyresetcatcodes \xycatcodes +\xydef@\testAND@{{\aftergroup\ifx + \addAND@\ifx\next\addFalse@\else\addTrue@\fi}} +\xydef@\addFalse@{\aftergroup\iffalse} +\xydef@\addTrue@{\aftergroup\iftrue} +\input xyidioms +\xydef@\stripRCS$#1${\stripRCS@#1: @@ @@@} +\xydef@\stripRCS@#1: #2@ #3@@@{% + \ifx @#2\string?\else\ifx :#2\else\stripRCS@@#2\fi\fi} +\xydef@\stripRCS@@#1 #2: @{#1} +\xydef@\xyversion{3.8.9} +\edef\next{\stripRCS$Date: 2013/10/06 01:14:17 $} +\xylet@\xydate=\next +\xydef@\Xygreet@{% + \W@{}% + \W@{ Xy-pic version \xyversion\space<\xydate>}% + \W@{ Copyright (c) 1991-2013 by Kristoffer H. Rose and others}% + \W@{ Xy-pic is free software: see the User\string's Guide for details.}% + \W@{}} +\Xygreet@ +\expandafter\everyjob\expandafter{\the\everyjob\Xygreet@} +\message{Loading kernel:} +\xydef@\Xy@{\leavevmode + \hbox{\kern-.1em X\kern-.3em\lower.4ex\hbox{Y\kern-.15em}}} +\ifx\undefined\DeclareRobustCommand\let\Xy=\Xy@ +\else\DeclareRobustCommand{\Xy}{\Xy@}\fi +\message{messages;} +\xywarnifdefined\thelineno@ +\ifx\inputlineno\undefined \edef\thelineno@{\string?} +\else \def\thelineno@{\the\inputlineno}\fi +\xydef@\xytracelineno@{ \string[\jobname:\thelineno@\string]} +\xydef@\xywarning@#1{{\newlinechar=10 + \W@{}\W@{Xy-pic Warning: #1\xytracelineno@.}\W@{}}} +\xydef@\xyerror@#1#2{\if\inxy@\xy@{ERROR #1}{}\fi + {\def\2{#2}\newlinechar=10 + \ifx\2\empty \errhelp{See the Xy-pic manual for further information.}% + \else \errhelp{#2}\fi + \errmessage{Xy-pic error: #1}}} +\xydef@\xybug@#1{{\newlinechar=10 + \errhelp{This is a bug in Xy-pic and should not happen!^^J% +If it did then please send a bug report with the offending Xy-pic code^^J% +to the author of Xy-pic, krisrose@tug.org.}% + \errmessage{Xy-pic BUG: #1 -- notify krisrose@tug.org.}}} +\message{fonts;} +\xydef@\xyfont@#1{\ifx#1\undefined \DN@{\global\font#1}\expandafter\next@ + \else \xywarning@{Using previously loaded \string#1\space font}\fi} +\xyfont@\xydashfont=xydash10 +\xydef@\xydashl@{\fontdimen6\xydashfont} +\xydef@\xydashh@{\fontdimen5\xydashfont} +\xydef@\xydashw@{\fontdimen8\xydashfont} +\xyfont@\xyatipfont=xyatip10 +\xyfont@\xybtipfont=xybtip10 +\xyfont@\xybsqlfont=xybsql10 +\xydef@\xybsqll@{\fontdimen6\xybsqlfont} +\xydef@\xybsqlh@{\fontdimen5\xybsqlfont} +\xydef@\xybsqlw@{\fontdimen8\xybsqlfont} +\xyfont@\xycircfont=xycirc10 +\message{allocations:} +\message{state,} +\xynew@{dimen}\X@c +\xynew@{dimen}\Y@c +\xynew@{dimen}\U@c +\xynew@{dimen}\D@c +\xynew@{dimen}\L@c +\xynew@{dimen}\R@c +\xynew@{toks}\Edge@c +\xynew@{dimen}\X@p +\xynew@{dimen}\Y@p +\xynew@{dimen}\U@p +\xynew@{dimen}\D@p +\xynew@{dimen}\L@p +\xynew@{dimen}\R@p +\xynew@{toks}\Edge@p +\xynew@{dimen}\X@origin \X@origin=\z@ +\xynew@{dimen}\Y@origin \X@origin=\z@ +\xynew@{dimen}\X@xbase \X@xbase=1mm +\xynew@{dimen}\Y@xbase \Y@xbase=\z@ +\xynew@{dimen}\X@ybase \X@ybase=\z@ +\xynew@{dimen}\Y@ybase \Y@ybase=1mm +\xynew@{dimen}\X@min +\xynew@{dimen}\Y@min +\xynew@{dimen}\X@max +\xynew@{dimen}\Y@max +\xynew@{box}\lastobjectbox@ +\xynew@{box}\zerodotbox@ +\setbox\zerodotbox@=\hbox{\dimen@=.5\xydashw@ + \kern-\dimen@ \vrule width\xydashw@ height\dimen@ depth\dimen@} +\wd\zerodotbox@=\z@ \ht\zerodotbox@=\z@ \dp\zerodotbox@=\z@ +\xynew@{dimen}\almostz@ \almostz@=50sp +\xydef@\zz@#1{\ifdim#1<\z@-\fi#1<\almostz@\relax} +\xynew@{if}\iftmp@ +\message{direction,} +\xynew@{dimen}\d@X +\xynew@{dimen}\d@Y +\xydef@\sd@X{} +\xydef@\sd@Y{} +\xynew@{count}\K@ \K@=1024 +\xynew@{count}\KK@ \KK@=32 +\xynew@{count}\Direction +\xynew@{dimen}\K@dXdY +\xynew@{dimen}\K@dYdX +\xydef@\cosDirection{} +\xydef@\sinDirection{} +\xywarnifdefined\DirectionChar +\xywarnifdefined\SemiDirectionChar +\xynew@{read}\xyread@ +\xynew@{write}\xywrite@ +\xynew@{count}\csp@ +\xynew@{dimen}\quotPTK@ +\message{utility macros;} +\xydef@\addtotoks@#1{\toks@=\expandafter{\the\toks@#1}} +\xydef@\xyinputorelse@#1#2{% + \expandafter\let\expandafter\next@\csname#1loaded\endcsname + \ifx\next@\empty \else + \DN@{\xyinputorelse@@{#1}{\xyinputorelse@@{#1.doc}{#2}}}% + \fi \next@} +\xydef@\xyinputorelse@@#1#2{\openin\xyread@=#1 + \ifeof\xyread@ \DN@{#2}\else \DN@{\closein\xyread@\input#1 }\fi \next@} +\global\csp@=\z@ +\xydef@\enter@#1{\global\advance\csp@\@ne + \expandafter\xdef\csname cs@\number\csp@\endcsname{#1}\ignorespaces} +\xydef@\nter@#1{\global\advance\csp@\@ne + \expandafter\gdef\csname cs@\number\csp@\endcsname{#1}\ignorespaces} +\xydef@\dontleave@{\csname cs@\number\csp@\endcsname} +\xydef@\unenter@{\global\advance\csp@\m@ne} +\xydef@\leave@{\expandafter\unenter@\csname cs@\number\csp@\endcsname} +\quotPTK@=\p@ \divide\quotPTK@\K@ +\xylet@\quotsign@@=\empty +\xywarnifdefined\removePT@ +{\catcode`p=12 \catcode`t=12 \gdef\removePT@#1pt{#1}} +\xydef@\quotient@#1#2#3{\A@=#2\relax \B@=#3\relax + \ifdim\A@<\z@\def\quotsign@@{-}\else\def\quotsign@@{+}\fi + \ifdim\quotsign@@\A@<15pt \multiply\A@\K@ + \else\ifdim\quotsign@@\A@<511pt \multiply\A@\KK@ + \advance\B@\ifdim\B@<\z@-\fi 16sp \divide\B@\KK@ + \else + \advance\B@\ifdim\B@<\z@-\fi 512sp \divide\B@\K@ + \fi\fi + \ifdim\ifdim\B@<\z@-\fi\B@<\quotPTK@ \xywarning@{division overflow}% + \else \advance\A@.5\B@ \divide\A@\B@ \fi + \multiply\A@\quotPTK@ \edef#1{\expandafter\removePT@\the\A@}} +\xydef@\quotient@@#1#2#3{\A@=#2\relax \B@=#3\relax \multiply\A@\KK@ + \advance\B@\ifdim\B@<\z@-\fi 128sp \divide\B@\KK@ \divide\B@ 8 + \ifdim\B@=\z@\else \advance\A@.5\B@ \divide\A@\B@ \fi + \B@=.125\quotPTK@ \multiply\A@\B@ \edef#1{\expandafter\removePT@\the\A@}} +\xydef@\loop@#1\repeat@{\def\body@{#1}\iterate@}\xylet@\repeat@=\fi +\xydef@\iterate@{\body@\expandafter\iterate@\else\fi} +\xydef@\xyinitial@#1#2{\DN@{#1}% + \xyerror@{command used out of context: \codeof\next@}{}} +\xylet@\xy@=\xyinitial@ +\xylet@\oxy@=\xy@ +\xydef@\change@oxy@#1{\let\oxy@=#1\relax +} +\xydef@\inxy@{T\ifx\xy@\xyinitial@ F\else T\fi} +\xydef@\xyxy@@ix@{\begingroup + \xyuncatcodes\afterassignment\endgroup\global\toks9=} +\xydef@\xy@@{\xy@{}} +\xydef@\plainxy@{\let\xy@=\xyxy@ \change@oxy@\xy@ \let\xy@@ix@=\xyxy@@ix@} +\message{pictures: \string\xy,} +\xydef@\xy{\ifmmode\expandafter\xymath@\else\expandafter\xynomath@\fi} +\xydef@\xymath@{\hbox\bgroup \dimen@=\the\fontdimen22\textfont\tw@ \xyinside@} +\xydef@\xynomath@{\hbox\bgroup \dimen@=\z@ \xyinside@} +\xydef@\xyinside@{% + \saveXyStyle@ \aftergroup\xycheck@end + \setboxz@h\bgroup + \plainxy@ + \X@c=\z@ \Y@c=\z@ \czeroEdge@ + \X@p=\z@ \Y@p=\z@ \U@p=\z@ \D@p=\z@ \L@p=\z@ \R@p=\z@ \Edge@p={\zeroEdge}% + \X@min=\hsize \X@max=-\hsize \Y@min=\hsize \Y@max=-\hsize + \mathsurround=\z@ + \expandafter\POS\everyxy@@} +\xydef@\czeroEdge@{\U@c=\z@ \D@c=\U@c \L@c=\U@c \R@c=\U@c \Edge@c={\zeroEdge}} +\xydef@\xyxy@#1#2{#2} +\xywarnifdefined\everyxy +\expandafter\def\addEQ@\everyxy#1{\def\everyxy@@{#1}\ignorespaces} +\xylet@\everyxy@@=\empty +\xydef@\endxy{\if\inxy@\else\xyerror@{Unexpected \string\endxy}{}\fi + \relax + \dimen@=\Y@max \advance\dimen@-\Y@min + \ifdim\dimen@<\z@ \dimen@=\z@ \Y@min=\z@ \Y@max=\z@ \fi + \dimen@=\X@max \advance\dimen@-\X@min + \ifdim\dimen@<\z@ \dimen@=\z@ \X@min=\z@ \X@max=\z@ \fi + \edef\tmp@{\egroup + \setboxz@h{\kern-\the\X@min\boxz@}% + \ht\z@=\the\Y@max \dp\z@=-\the\Y@min \wdz@=\the\dimen@ + \noexpand\maybeunraise@ \raise\dimen@\boxz@ + \noexpand\recoverXyStyle@ \egroup \noexpand\xy@end + \U@c=\the\Y@max \D@c=-\the\Y@min \L@c=-\the\X@min \R@c=\the\X@max}\tmp@} +\xydef@\maybeunraise@{\if\inxy@\else \dimen@ii=\dp\z@ + \ifdim\dimen@ii<\z@ \advance\dimen@\dimen@ii \fi\fi} +\xydef@\xycheck@end{\xyFN@\xycheck@end@} +\xydef@\xycheck@end@{\ifx\next\xy@end\DN@\xy@end{}\else\DN@{\xy@end}\fi\next@} +\xydef@\xy@end{% + \xyerror@{An \string\xy\space environment is not closed correctly.}% + {I expected \string\endxy. You probably have an umatched {} grouping.}} +\message{positions,} +\xydef@\POS{\afterPOS{}} +\xydef@\afterPOS#1{% + \DN@##1{\def\afterPOS@{\def\afterPOS@{##1}#1}}% + \expandafter\next@\expandafter{\afterPOS@}% + \afterCOORD{\xyFN@\POS@}} +\xylet@\afterPOS@=\empty +\xydef@\afterCOORD#1{% + \DN@##1{\def\afterCOORD@{\def\afterCOORD@{##1}#1}}% + \expandafter\next@\expandafter{\afterCOORD@}% + \afterVECTORorEMPTY{\xy@@\czeroEdge@ \afterCOORD@}{\xyFN@\COORD@}} +\xylet@\afterCOORD@=\empty +\xydef@\afterVECTORorEMPTY#1#2{% + \DN@##1{\def\afterVECTOR@{\def\afterVECTOR@{##1}% + \ifVECTORempty@\DN@{#2}\else\DN@{#1}\fi \next@}}% + \expandafter\next@\expandafter{\afterVECTOR@}% + \xyFN@\VECTOR@} +\xynew@{if}\ifVECTORempty@ +\xylet@\afterVECTOR@=\empty +\xydef@\xyVECTOR@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\VECTOR@}% + \else \ifcat A\noexpand\next \let\next@=\VECTOR@letter + \else \let\next@=\VECTOR@other \fi\fi \next@} +\xylet@\VECTOR@=\xyVECTOR@ +\def\notrelaxorelse@#1#2{\ifx#1\relax \expandafter#2\else\expandafter#1\fi} +\xydef@\VECTOR@letter{% + \ifx a\next \expandafter\VECTOR@a \else \expandafter\CORNER@ \fi} +\xydef@\VECTOR@a a(#1){\xy@{a(#1)}{\vfromcartesianangle@{#1}}% + \VECTORempty@false \afterVECTOR@} +\xydef@\CORNER@{% + \xy@{}{\A@=-.5\L@c \advance\A@.5\R@c \B@=-.5\D@c \advance\B@.5\U@c + \let\nextii@=\zeroit@}% + \VECTORempty@true\CORNER@i} +\xydef@\zeroit@#1{#1=\z@} +\xydef@\CORNER@i{% + \ifx D\next \DN@ D{\xy@{D}{\Y@c=-\D@c \nextii@\X@c \B@=\Y@c}\CORNER@ii}% + \else\ifx U\next \DN@ U{\xy@{U}{\Y@c= \U@c \nextii@\X@c \B@=\Y@c}\CORNER@ii}% + \else\ifx L\next \DN@ L{\xy@{L}{\X@c=-\L@c \nextii@\Y@c \A@=\X@c}\CORNER@ii}% + \else\ifx R\next \DN@ R{\xy@{R}{\X@c= \R@c \nextii@\Y@c \A@=\X@c}\CORNER@ii}% + \else\ifx C\next \DN@ C{\xy@{C}{\X@c= \A@ \Y@c= \B@}\CORNER@ii}% + \else\ifx E\next \DN@ E{\xy@{E}{% + \A@=\X@c \B@=\Y@c \the\Edge@c\z@ \advance\X@c-\A@ \advance\Y@c-\B@}% + \CORNER@ii}% + \else\ifx P\next \DN@ P{\xy@{P}{% + \A@=\X@c \B@=\Y@c \the\Edge@c\thr@@ \advance\X@c-\A@ \advance\Y@c-\B@}% + \CORNER@ii}% + \else\ifx (\next + \DN@(##1){\xy@{(##1)}{\X@c=##1\X@c \Y@c=##1\Y@c}\afterVECTOR@}% + \else\ifx A\next \DN@ A{\xy@{A}{\Y@c=\fontdimen22\textfont\tw@ \nextii@\X@c \B@=\Y@c}\CORNER@ii}% + \else\ifx V\next \DN@ V{\xy@{V}{\nextii@\X@c \Y@c=\U@p}\CORNER@ii}% + \else\ifx H\next \DN@ H{\xy@{H}{\nextii@\Y@c \X@c=\R@p}\CORNER@ii}% + \else \let\next@=\afterVECTOR@ + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@} +\xydef@\CORNER@ii{\xy@@{\let\nextii@=\eat@}% + \VECTORempty@false \xyFN@\CORNER@i} +\xydef@\VECTOR@other{% + \addLT@\ifx \next + \addGT@{\addLT@\DN@##1}{\xy@{<##1>}{\vfromabsolute@{##1}}% + \VECTORempty@false\afterVECTOR@}% + \else\ifx (\next + \DN@({\xyFN@\VECTOR@other@open}% + \else\ifx /\next + \DN@/##1/{\xy@@ix@{{##1}}% + \xy@{/##1/}{\expandafter\vfromslide@\the\toks9 }% + \VECTORempty@false\afterVECTOR@}% + \else\ifx 0\next + \DN@ 0{\xy@{0}{\X@c=\z@ \Y@c=\z@}\VECTORempty@false\afterVECTOR@}% + \else + \DN@{\VECTORempty@true\afterVECTOR@}% + \fi\fi\fi\fi \next@} +\xydef@\VECTOR@other@open{% + \ifx *\next \DN@{\VECTORempty@true \xyFN@\afterVECTOR@(}% + \else + \DN@##1){\xy@{(##1)}{\vfromcartesian@{##1}}\VECTORempty@false\afterVECTOR@}% + \fi \next@} +\xydef@\xyCOORD@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\COORD@}% + \else \ifcat A\noexpand\next \let\next@=\xyCOORD@letter + \else \let\next@=\xyCOORD@other \fi\fi \next@} +\xylet@\COORD@=\xyCOORD@ +\xydef@\xyCOORD@letter{% + \ifx c\next + \DN@ c{\xy@{c}{}\afterCOORD@}% + \else\ifx p\next + \DN@ p{\xy@{p}\cfromp@ \afterCOORD@}% + \else\ifx x\next + \DN@ x{\xy@{x}{\R@c=\X@xbase \U@c=\Y@xbase \intersect@}\afterCOORD@}% + \else\ifx y\next + \DN@ y{\xy@{y}{\R@c=\X@ybase \U@c=\Y@ybase \intersect@}\afterCOORD@}% + \else\ifx s\next + \DN@ s##1{\xy@{s{##1}}{\cfroms@{##1}}\afterCOORD@}% + \else \let\next@=\afterCOORD@ \fi\fi\fi\fi\fi \next@} +\xydef@\xyCOORD@other{% + \ifx "\next + \DN@"##1"{\xy@{"##1"}{\cfromid@{##1}}\afterCOORD@}% + \else\ifx \bgroup\next + \DN@##1{\xy@{{##1}}{\enter@{\pfromthep@\basefromthebase@}}% + \silencexy@ \POS##1\relax \unsilencexy@ \xy@@\leave@ \afterCOORD@}% + \else\ifx (\next + \DN@({\xyFN@\xyCOORD@other@open}% + \else \let\next@=\afterCOORD@ \fi\fi\fi \next@} +\xynew@{if}\ifsilentxy@ +\xydef@\silencexy@{% + \ifsilentxy@ \nter@{}% + \else \nter@{\silentxy@false \let\xy@=\unsilent@@xy@} + \silentxy@true \let\unsilent@@xy@=\xy@ \def\xy@##1##2{\unsilent@@xy@{}{##2}}% + \fi} +\xydef@\unsilencexy@{\leave@} +\xydef@\xyCOORD@other@open{% + \ifx *\next + \DN@*##1*){\xy@{(*}{\enter@{\pfromthep@\basefromthebase@}}% + \POS##1\relax \xy@{*)}\leave@ \afterCOORD@}% + \else \DN@{\xyFN@\afterCOORD@(}% + \fi \next@} +\xydef@\xyPOS@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\POS@}% + \else\addPLUS@\ifx \next + \addPLUS@\DN@{\xy@+{\enter@\cplusthec@}% + \afterCOORD{\xy@@\leave@ \xyFN@\POS@}}% + \else\addDASH@\ifx \next + \addDASH@\DN@{\xy@-{\enter@\cplusthec@}% + \afterCOORD{\xy@@{\X@c=-\X@c \Y@c=-\Y@c\leave@}\xyFN@\POS@}}% + \else\ifx !\next + \DN@ !{\xy@!{\enter@\cskewthec@}\afterCOORD{\xy@@\leave@ \xyFN@\POS@}}% + \else\addDOT@\ifx \next + \addDOT@\DN@{\xy@.{\enter@\cmergethec@}\afterCOORD{\xy@@\leave@ \xyFN@\POS@}}% + \else\ifx ,\next + \DN@ ,{\xy@,{\comma@@}\afterCOORD{\xyFN@\POS@}}% + \else\ifx ;\next + \DN@ ;{\xy@;{\swap@}\afterCOORD{\xyFN@\POS@}}% + \else\ifx :\next + \DN@ :{\xyFN@\POS@colon}% + \else\addEQ@\ifx \next + \addEQ@\DN@{\xyFN@\saveid@}% + \else\ifx *\next + \DN@ *{\xyFN@\POS@star}% + \else\ifx ?\next + \DN@ ?{\xy@?{}\afterPLACE{\xyFN@\POS@}}% + \else \addAT@\ifx \next + \addAT@\DN@{\xyFN@\STACK@}% + \else + \let\next@=\afterPOS@ + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@} +\xylet@\comma@@=\relax +\xylet@\POS@=\xyPOS@ +\xydef@\POS@colon{\DNii@{\afterCOORD{\xyFN@\POS@}}% + \ifx :\next \xy@{::}{\setbase@@\X@c\Y@c}\DN@:{\nextii@}% + \else \xy@:{\setbase@\X@p\Y@p\X@c\Y@c}\let\next@=\nextii@ \fi + \next@} +\xydef@\POS@star{% + \ifx *\next + \DN@*##1##{\nextii@{##1}}% + \DNii@##1##2{\xy@@ix@{{##1}{##2}}% + \xy@{**##1{##2}}{\expandafter\connect@\the\toks9 }\xyFN@\POS@}% + \else + \DN@##1##{\nextii@{##1}}% + \DNii@##1##2{\xy@@ix@{{##1}{##2}}% + \xy@{*##1{##2}}{\expandafter\drop@\the\toks9 }\xyFN@\POS@}% + \fi + \next@} +\xydef@\cfromp@{\X@c=\X@p \Y@c=\Y@p \U@c=\U@p \D@c=\D@p \L@c=\L@p \R@c=\R@p + \Edge@c=\expandafter{\the\Edge@p}} +\xydef@\pfromc@{\X@p=\X@c \Y@p=\Y@c \U@p=\U@c \D@p=\D@c \L@p=\L@c \R@p=\R@c + \Edge@p=\expandafter{\the\Edge@c}} +\xydef@\swapdimen@#1#2{\dimen@=#1\relax #1=#2\relax #2=\dimen@} +\xynew@{toks}\swaptoks@@ +\xydef@\swap@{\swapdimen@\X@c\X@p \swapdimen@\Y@c\Y@p + \swapdimen@\U@c\U@p\swapdimen@\D@c\D@p \swapdimen@\L@c\L@p\swapdimen@\R@c\R@p + \swaptoks@@=\Edge@c \Edge@c=\Edge@p \Edge@p=\swaptoks@@} +\xydef@\vfromabsolute@#1{\vfromabsolute@@#1,@} +\xydef@\vfromabsolute@@#1,#2@{\X@c=#1\relax + \DN@{#2}\ifx\next@\empty \Y@c=\X@c + \else \DN@##1,{\Y@c=##1}\next@#2\relax \fi +} +\xydef@\cfromthec@{\X@c=\the\X@c \Y@c=\the\Y@c + \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c + \Edge@c={\expandafter\noexpand\the\Edge@c}} +\xydef@\cfromthep@{\X@c=\the\X@p \Y@c=\the\Y@p + \U@c=\the\U@p \D@c=\the\D@p \L@c=\the\L@p \R@c=\the\R@p + \Edge@c={\expandafter\noexpand\the\Edge@p}} +\xydef@\pfromthep@{\X@p=\the\X@p \Y@p=\the\Y@p + \U@p=\the\U@p \D@p=\the\D@p \L@p=\the\L@p \R@p=\the\R@p + \Edge@p={\expandafter\noexpand\the\Edge@p}} +\xydef@\pfromthec@{\X@p=\the\X@c \Y@p=\the\Y@c + \U@p=\the\U@c \D@p=\the\D@c \L@p=\the\L@c \R@p=\the\R@c + \Edge@p={\expandafter\noexpand\the\Edge@c}} +\xydef@\cplusthec@{\advance\X@c\the\X@c \advance\Y@c\the\Y@c} +\xydef@\cskewthec@{% + \noexpand\cskew@{\the\Y@c}{\the\X@c}{\the\D@c}{\the\U@c}{\the\L@c}{\the\R@c}} +\xydef@\cskew@#1#2#3#4#5#6{% + \D@c=#3\advance\D@c \Y@c \ifdim\D@c<\z@ \D@c=\z@ \fi + \U@c=#4\advance\U@c-\Y@c \ifdim\U@c<\z@ \U@c=\z@ \fi + \advance\Y@c#1% + \L@c=#5\advance\L@c \X@c \ifdim\L@c<\z@ \L@c=\z@ \fi + \R@c=#6\advance\R@c-\X@c \ifdim\R@c<\z@ \R@c=\z@ \fi + \advance\X@c#2% + \Edge@c={\rectangleEdge}} +\xydef@\cmergethec@{% + \noexpand\cmerge@{\the\Y@c}{\the\X@c}{\the\D@c}{\the\U@c}{\the\L@c}{\the\R@c}} +\xydef@\cmerge@#1#2#3#4#5#6{\the\Edge@c4% + \A@=#2\advance\A@-\X@c \B@=#1\advance\B@-\Y@c + \dimen@=#5\advance\L@c \A@ \ifdim\L@c<\dimen@ \L@c=\dimen@ \fi + \dimen@=#6\advance\R@c-\A@ \ifdim\R@c<\dimen@ \R@c=\dimen@ \fi + \dimen@=#3\advance\D@c \B@ \ifdim\D@c<\dimen@ \D@c=\dimen@ \fi + \dimen@=#4\advance\U@c-\B@ \ifdim\U@c<\dimen@ \U@c=\dimen@ \fi + \advance\X@c\A@ \advance\Y@c\B@} +\xydef@\halfroottwo{.70710678} +\xydef@\partroottwo{.29289322} +\xydef@\halfrootthree{.8660254} +\xydef@\vfromcartesian@#1{\vfromcartesian@@#1@} +\xydef@\vfromcartesian@@#1,#2@{% + \X@c=\X@origin \advance\X@c#1\X@xbase \advance\X@c#2\X@ybase + \Y@c=\Y@origin \advance\Y@c#1\Y@xbase \advance\Y@c#2\Y@ybase} +\xydef@\setbase@#1#2#3#4{% + \X@origin=#1\relax \Y@origin=#2\relax + \X@xbase=#3\relax \advance\X@xbase-\X@origin + \Y@xbase=#4\relax \advance\Y@xbase-\Y@origin + \X@ybase=-\Y@xbase \Y@ybase=\X@xbase} +\xydef@\setbase@@#1#2{% + \X@ybase=#1\relax \advance\X@ybase-\X@origin + \Y@ybase=#2\relax \advance\Y@ybase-\Y@origin} +\xydef@\basefromthebase@{\X@origin=\the\X@origin \Y@origin=\the\Y@origin + \X@xbase=\the\X@xbase \Y@xbase=\the\Y@xbase + \X@ybase=\the\X@ybase \Y@ybase=\the\Y@ybase} +\xydef@\vfromcartesianangle@#1{\enter@\basefromthebase@ \R@=#1\p@ + \B@=360\p@ + \loop@ \ifdim\R@<\z@ \advance\R@\B@ \repeat@ + \loop@ \ifdim\R@>\B@ \advance\R@-\B@ \repeat@ + \ifdim\R@<.5\B@\else \R@=-\R@ \advance\R@\B@ + \X@ybase=-\X@ybase \Y@ybase=-\Y@ybase \fi + \B@=180\p@ + \ifdim\R@<.5\B@\else \R@=-\R@ \advance\R@\B@ + \X@xbase=-\X@xbase \Y@xbase=-\Y@xbase \fi + \B@=90\p@ + \ifdim\R@<.5\B@ \let\nextiii@=\literal@ + \else \R@=-\R@ \advance\R@\B@ \def\nextiii@##1,##2@{##2,##1@}\fi + \dimen@=\z@ \DN@{1,0@}% + \dimen@ii=45\p@ \DNii@{.70710678,.70710678@}% + \chooseangleinterval@ + {\chooseangleinterval@ + {\chooseangleinterval@ + {\chooseangleinterval@ + {\chooseangleinterval@ + {}% + {4.090909}{.99677570,.08023846@}% + {}}% + {6}{.99452190,.10452846@}% + {\chooseangleinterval@ + {}% + {8.181818}{.98982144,.14231484@}% + {}}}% + {10}{.98480775,.17364818@}% + {\chooseangleinterval@ + {}% + {12.857143}{.97492791,.22252093@}% + {}}}% + {15}{.96592583,.25881905@}% + {\chooseangleinterval@ + {\chooseangleinterval@ + {}% + {16.363636}{.95949297,.28173256@}% + {}}% + {18}{.95105652,.30901699@}% + {\chooseangleinterval@ + {}% + {20}{.93969262,.34202014@}% + {}}}}% + {22.5}{.92387953,.38268343@}% + {\chooseangleinterval@ + {\chooseangleinterval@ + {\chooseangleinterval@ + {}% + {24.545455}{.90963200,.41541501@}% + {}}% + {25.714286}{.90096887,.43388374@}% + {}}% + {30}{.86602540,.5@}% + {\chooseangleinterval@ + {\chooseangleinterval@ + {}% + {32.727273}{.84125353,.54064082@}% + {}}% + {36}{.80901699,.58778525@}% + {\chooseangleinterval@ + {\chooseangleinterval@ + {}% + {38.571429}{.78183148,.62348980@}% + {}}% + {40.909091}{.75574957,.65486073@}% + {\chooseangleinterval@ + {}% + {40}{.76604444,.64278761@}% + {}}}}}% + \A@=\R@ \advance\A@-\dimen@ + \ifdim\ifdim\A@<\z@-\fi\A@<.01\p@ \edef\next@{\expandafter\nextiii@\next@}% + \else \B@=\dimen@ii \advance\B@-\R@ + \ifdim\A@<\B@ \dimen@=\toradians@\A@ + \edef\next@{\next@ \expandafter\removePT@\the\dimen@ @}% + \else \dimen@=-\toradians@\B@ + \edef\next@{\nextii@ \expandafter\removePT@\the\dimen@ @}% + \fi + \expandafter\interpolatepoint@\next@ + \edef\next@{\expandafter\nextiii@\next@}% + \fi + \expandafter\vfromcartesian@@\next@ + \leave@} +\xydef@\chooseangleinterval@#1#2#3#4{% + \B@=#2\p@ \def\next{#3}% + \ifdim\R@<\B@ \dimen@ii=\B@ \let\nextii@=\next #1% + \else \dimen@=\B@ \let\next@=\next \ifdim\B@<\R@ #4\fi\fi} +\xydef@\interpolateinterval@#1,#2@#3,#4@{% + \A@=#1\p@ \dimen@=#3\p@ \advance\dimen@-\A@ \advance\A@\next\dimen@ + \B@=#2\p@ \dimen@=#4\p@ \advance\dimen@-\B@ \advance\B@\next\dimen@ + \edef\next@{\expandafter\removePT@\the\A@,\expandafter\removePT@\the\B@ @}} +\xydef@\toradians@{0.01745329} +\xydef@\interpolatepoint@#1,#2@#3@{% + \A@=#1\p@ \dimen@ii=#3\A@ \dimen@ii=-.5\dimen@ii \advance\A@#3\dimen@ii + \dimen@=-#2\p@ \advance\A@#3\dimen@ + \B@=#2\p@ \dimen@ii=#3\B@ \dimen@ii=-.5\dimen@ii \advance\B@#3\dimen@ii + \dimen@=#1\p@ \advance\B@#3\dimen@ + \edef\next@{\expandafter\removePT@\the\A@,\expandafter\removePT@\the\B@ @}} +\xydef@\drop@#1#2{% + \global\setbox\lastobjectbox@=\object#1{#2}% + \ifHidden@ \dimen@=\X@c \advance\dimen@-\L@c \else + \dimen@=\Y@c \advance\dimen@ \U@c \ifdim\Y@max<\dimen@ \Y@max=\dimen@ \fi + \dimen@=\Y@c \advance\dimen@-\D@c \ifdim\dimen@<\Y@min \Y@min=\dimen@ \fi + \dimen@=\X@c \advance\dimen@ \R@c \ifdim\X@max<\dimen@ \X@max=\dimen@ \fi + \dimen@=\X@c \advance\dimen@-\L@c \ifdim\dimen@<\X@min \X@min=\dimen@ \fi + \fi + \ifInvisible@\else + \setboxz@h{\kern\dimen@ \raise\Y@c\box\lastobjectbox@}% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ {\Drop@@}\fi} +\xydef@\connect@#1#2{\setupDirection@ \enter@{\cfromthec@}% + \global\setbox\lastobjectbox@=\object#1{#2}\leave@ + \Connect@@} +\xydef@\preconnect@#1#2{\setupDirection@ \enter@{\cfromthec@}% + \global\setbox\lastobjectbox@=\object#1{#2}\leave@ \connectStore@ + \ifInvisible@ \Connect@@ \else \Invisible@true\Connect@@\Invisible@false \fi} +\xynew@{box}\connectobjectbox@@ +\xylet@\connectDrop@@=\empty +\xylet@\connectpreXY@style@=\empty +\xylet@\connectpostXY@style@=\empty +\xylet@\connectRest@@=\empty +\xydef@\connectStore@{% + \global\setbox\connectobjectbox@@=\copy\lastobjectbox@ + \let\connectDrop@@=\Drop@@ + \let\connectpreXY@style@ =\preXY@style@ + \let\connectpostXY@style@=\postXY@style@ + \xdef\connectRest@@{% + \def\noexpand\Upness@{\Upness@}% + \def\noexpand\Leftness@{\Leftness@}% + \ifInvisible@ \noexpand\Invisible@true \else \noexpand\Invisible@false \fi + \ifHidden@ \noexpand\Hidden@true \else \noexpand\Hidden@false \fi}} +\xydef@\connectRestore@{% + \ifvbox\connectobjectbox@@ + \setbox\lastobjectbox@=\copy\voidb@x + \else + \global\setbox\lastobjectbox@=\copy\connectobjectbox@@ + \fi + \let\Drop@@=\connectDrop@@ + \global\let\preXY@style@ =\connectpreXY@style@ + \global\let\postXY@style@=\connectpostXY@style@ + \connectRest@@} +\xydef@\afterPLACE#1{% + \DN@##1{\def\afterPLACE@{\xy@@\leave@ \def\afterPLACE@{##1}#1}}% + \expandafter\next@\expandafter{\afterPLACE@}% + \def\PLACEf@{{.5}}% + \xy@@{\enter@{\pfromthep@}% + \Creset@@ \def\PLACEf@{{.5}}% + \let\PLACEedgep@@=\PLACEedgep@ \let\PLACEedgec@@=\PLACEedgec@}% + \xyFN@\PLACE@} +\xydef@\PLACEf@{} +\xydef@\PLACEedgep@@{} +\xydef@\PLACEedgec@@{} +\xydef@\PLACEedgep@{\Cshavep@@ \def\PLACEedgep@@{\Cslidep@@\jot}} +\xydef@\PLACEedgec@{\Cshavec@@ \def\PLACEedgec@@{\Cslidec@@{-\jot}}} +\xylet@\afterPLACE@=\empty +\xydef@\PLACE@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\PLACE@}% + \else\addLT@\ifx \next + \addLT@\DN@{\addLT@\xy@{\def\PLACEf@{{0}}\PLACEedgep@@}\xyFN@\PLACE@}% + \else\addGT@\ifx \next + \addGT@\DN@{\addGT@\xy@{\def\PLACEf@{{1}}\PLACEedgec@@}\xyFN@\PLACE@}% + \else\ifx (\next + \DN@(##1){\def\PLACEf@{{##1}}\xy@{(##1)}{\def\PLACEf@{{##1}}}\xyFN@\PLACE@}% + \else\ifx !\next + \DN@!{\xyFN@\PLACE@intercept}% + \else + \DN@{\xy@@{\expandafter\Calong@@\PLACEf@ \czeroEdge@}\PLACE@@}% + \fi\fi\fi\fi\fi \next@} +\xydef@\PLACE@intercept{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\PLACE@intercept}% + \else\ifx \bgroup\next + \DN@##1{\xy@{!{##1}}{}\PLACE@intercept@{##1}}% + \else\ifx (\next + \DN@(*##1*){\xy@{!(*##1*)}{}\PLACE@intercept@{##1}}% + \else \DN@{\xyerror@{{} expected after ! in }{}}% + \fi\fi\fi \next@} +\xydef@\PLACE@intercept@#1{% + \xy@@{\enter@{\pfromthep@\basefromthebase@}\begingroup}% + \xy@@ix@{#1}\xy@@{\plainxy@ \expandafter\POS\the\toks9\relax + \edef\next@{\endgroup + \X@c =\the\X@c \Y@c=\the\Y@c \X@p=\the\X@p \Y@p=\the\Y@p}% + \next@ \Cintercept@@ \leave@}% + \PLACE@@} +\xydef@\PLACE@@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\PLACE@@}% + \else\ifx /\next \DN@/##1/{\xy@{/##1/}{\Cslidec@@{##1}}\afterPLACE@}% + \else \let\next@=\afterPLACE@ + \fi\fi \next@} +\xydef@\intersect@{% + \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p + \A@=\X@c \advance\A@-\X@origin \B@=\Y@c \advance\B@-\Y@origin + \edef\next@{\expandafter\removePT@\the\R@c}% + \edef\nextii@{\expandafter\removePT@\the\U@c}% + \D@c=\next@\d@Y \advance\D@c-\nextii@\d@X \divide\D@c\KK@ + \L@c=\next@\B@ \advance\L@c-\nextii@\A@ \divide\L@c\KK@ + \ifdim\D@c=\z@\zeroDivide@\else \quotient@\next@\L@c\D@c \fi + \advance\X@c-\next@\d@X \advance\Y@c-\next@\d@Y + \czeroEdge@} +\xydef@\zeroDivide@@{\zeroDivide@message{\intersect@}{treated as 0}\DN@{0}} +\xydef@\zeroDivide@message#1#2{\xywarning@{division by 0 in \string#1, #2}} +\xylet@\zeroDivide@=\zeroDivide@@ +\xydef@\zeroDivideLimit@@{\ifdim\L@c=\z@ \DN@{0}% + \else\ifdim\L@c<\z@\DN@{-\zeroDivide@Limit}% + \else\DN@{\zeroDivide@Limit}\fi\fi + \zeroDivide@message{\intersect@}{replaced by \zeroDivide@Limit}} +\xydef@\zeroDivideLimit@#1{\edef\zeroDivide@Limit{#1}% + \let\zeroDivide@=\zeroDivideLimit@@} +\xylet@\zeroDivideLimit=\zeroDivideLimit@ +\xydef@\vfromslide@#1{\enter@\DirectionfromtheDirection@ \begingroup + \plainxy@\afterDIRECTIONorEMPTY\vfromslide@i\vfromslide@i#1@} +\xydef@\vfromslide@i#1@{\DN@{#1}% + \edef\next{\endgroup + \ifx\next@\empty \dimen@=.5pc \else \dimen@=#1\relax \fi + \X@c=\cosDirection\dimen@ \Y@c=\sinDirection\dimen@}\next + \leave@} +\xydef@\s@bot{-1} +\xydef@\s@top{-1} +\xydef@\cfroms@#1{\tests@{#1}\runs@\outofranges@} +\xydef@\tests@#1#2#3{\DN@{#3}% + \count@=\s@top \advance\count@-#1\relax + \ifnum\count@>\s@bot\relax \ifnum\count@>\s@top\else\DN@{#2}\fi\fi + \next@} +\xydef@\runs@{\csname S@\the\count@\endcsname} +\xydef@\outofranges@{\count@=\s@top \advance\count@-\s@bot + \xyerror@{stack index out of range (should be 0..\the\count@)}{}} +\xydef@\STACK@{% + \addPLUS@\ifx\next + \addPLUS@\DN@{\xy@{@+}{}\afterCOORD{\xy@@\spushc@ \xyFN@\POS@}}% + \else\addDASH@\ifx\next + \addDASH@\DN@{\xy@{@-}{}\afterCOORD{\xy@@\spop@ \xyFN@\POS@}}% + \else \ifx i\next \DN@ i{\xy@{@i}\sinit@ \xyFN@\POS@}% + \else \ifx (\next \DN@ ({\xy@{@(}\senter@ \xyFN@\POS@}% + \else \ifx )\next \DN@ ){\xy@{@)}\sleave@ \xyFN@\POS@}% + \else\addEQ@\ifx\next \addEQ@\DN@{\STACK@load}% + \else\addAT@\ifx\next \addAT@\DN@{\xy@{@@}{}\smap@}% + \else \DN@##1{\xyerror@{illegal stack command ##1}{}\afterCOORD{\xyFN@\POS@}}% + \fi\fi\fi\fi\fi\fi\fi \next@} +\xydef@\STACK@load{\xy@{@=}{% + \if\sempty@\else \xywarning@{loading on top of non-empty stack}\sinit@ \fi + \let\comma@@=\spushc@}% + \afterCOORD{\xy@@{\spushc@ \let\comma@@=\relax}\xyFN@\POS@}} +\xydef@\spushc@{% + \count@=\s@top \advance\count@\@ne \edef\s@top{\the\count@}% + \expandafter\edef\csname S@\s@top\endcsname{\cfromthec@}} +\xydef@\spushid@#1{\DNii@{#1}\edef\nextii@{\codeof\nextii@}% + \expandafter\let\expandafter\next@\csname Q@\nextii@\endcsname + \ifx\next@\relax \xyerror@{ \string"\nextii@\string" not defined}{}% + \else + \count@=\s@top \advance\count@\@ne \edef\s@top{\the\count@}% + \DNii@##1{\expandafter\def\csname S@\s@top\endcsname{##1}}% + \expandafter\nextii@\expandafter{\next@}% + \fi} +\xydef@\idfroms@#1#2{% + \tests@{#2}{\DN@{\idfromxy@{#1}}% + \expandafter\expandafter\expandafter\next@ + \expandafter\expandafter\expandafter{\csname S@\the\count@\endcsname}% + }\outofranges@} +\xydef@\spop@{\count@=\s@top + \ifnum\count@>\s@bot \advance\count@\m@ne \edef\s@top{\the\count@}% + \else \xyerror@{nothing to pop from stack}{}\fi} +\xydef@\sinit@{\edef\s@top{\s@bot}} +\xydef@\senter@{% + \count@=\s@top \advance\count@\@ne + \expandafter\edef\csname S@\the\count@\endcsname{\s@bot}% + \edef\s@bot{\the\count@}\edef\s@top{\the\count@}} +\xydef@\sleave@{% + \ifnum\s@bot=\s@top\else \xywarning@{leaving non-empty stack}\sinit@ \fi + \ifnum\s@bot>\m@ne \edef\s@bot{\csname S@\s@top\endcsname}% + \count@=\s@top \advance\count@\m@ne \edef\s@top{\the\count@}% + \edef\sbot{\the\count@}\fi} +\xydef@\sempty@{\ifnum\s@top=\s@bot TT\else TF\fi} +\xydef@\xytotoks@#1#2{\addtotoks@{#2}} +\xydef@\xytotoks@@toksix@#1{\addtotoks@{\toks9={#1}}} +\xydef@\smap@{% + \begingroup \toks@={}\let\xy@=\xytotoks@ \change@oxy@\xy@ + \let\xy@@ix@=\xytotoks@@toksix@ + \afterCOORD{\expandafter\endgroup + \expandafter\smapxy@@\expandafter{\the\toks@}\xyFN@\POS@}} +\xydef@\smapxy@@#1{\xy@@{\edef\smapp@@{\s@bot}\smapxy@i{#1}}} +\xylet@\smapp@@=\empty +\xydef@\smapxy@i#1{% + \ifnum\smapp@@<\s@top + \count@=\smapp@@ \advance\count@\@ne \edef\smapp@@{\the\count@}% + \DN@{\csname S@\smapp@@\endcsname #1\relax \smapxy@i{#1}}% + \else \let\next@=\relax + \fi \next@} +\xydef@\saveid@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\saveid@}% + \else \ifx "\next\DN@"##1"{\xy@{="##1"}{\idfromc@{##1}}\xyFN@\POS@}% + \else \ifx :\next\DN@:##1"##2"{\xy@{=:"##2"}{\idfrombase@{##2}}\xyFN@\POS@}% + \else\addAT@\ifx\next + \addAT@\DN@"##1"{\xy@{=@"##1"}{\idfromstack@{##1}}\xyFN@\POS@}% + \else \ifx s\next + \DN@ s##1"##2"{\xy@{=s##1"##2"}{\idfroms@{##2}{##1}}\xyFN@\POS@}% + \else\addEQ@\ifx\next \let\saveid@COORD@@=\saveid@COORDii + \addEQ@\DN@{\xyFN@\saveid@COORD}% + \else \let\saveid@COORD@@=\saveid@COORDi \let\next@=\saveid@COORD + \fi\fi\fi\fi\fi\fi \next@} +\xylet@\saveid@COORD@@=\relax +\xydef@\idfromc@#1{\DN@{#1}% + \expandafter\edef\csname Q@\codeof\next@\endcsname{\cfromthec@}} +\xydef@\idfrombase@#1{\DN@{#1}% + \expandafter\edef\csname Q@\codeof\next@\endcsname{\basefromthebase@}} +\xydef@\idfromstack@#1{% + \toks@={\if\sempty@\else + \xywarning@{loading on top of non-empty stack}\sinit@ \fi}% + \count@=\s@bot \advance\count@\@ne + \ifnum\count@>\s@top\else + \loop@ + \expandafter\let\expandafter\next@\csname S@\the\count@\endcsname + \expandafter\addtotoks@\expandafter{\next@}% + \ifnum\count@<\s@top \advance\count@\@ne \addtotoks@{\spushc@}\repeat@ + \fi + \DN@{#1}\edef\next@##1{% + \def\expandafter\noexpand\csname Q@\codeof\next@\endcsname{##1}}% + \expandafter\next@\expandafter{\the\toks@}} +\xydef@\saveid@COORD{% + \begingroup \toks@={}\let\xy@=\xytotoks@ \change@oxy@\xy@ + \let\xy@@ix@=\xytotoks@@toksix@ + \afterCOORD{\expandafter\saveid@COORDi\expandafter{\the\toks@}}} +\xydef@\saveid@COORDi#1#2"#3"{\endgroup \xy@@{\idfromxy@{#3}{#1}}\xyFN@\POS@} +\xydef@\saveid@COORDii#1#2"#3"{\endgroup \xy@@{\idfromcxy@{#3}{#1}}\xyFN@\POS@} +\xydef@\idfromxy@#1#2{\DN@{#1}% + \expandafter\def\csname Q@\codeof\next@\endcsname{#2}} +\xydef@\idfromcxy@#1#2{\DN@{#1}% + \expandafter\edef\csname Q@\codeof\next@\endcsname{\cfromthec@#2}} +\xydef@\cfromid@#1{\DNii@{#1}\edef\nextii@{\codeof\nextii@}% + \expandafter\let\expandafter\next@\csname Q@\nextii@\endcsname + \ifx\next@\relax \xyerror@{ \string"\nextii@\string" not defined}{}% + \else \expandafter\next@\fi} +\message{objects,} +\xydef@\OBJECT@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\OBJECT@}% + \else\ifcat A\noexpand\next \let\next@=\OBJECT@letter + \else \let\next@=\OBJECT@other \fi\fi \next@} +\xydef@\OBJECT@letter{% + \ifx i\next \DN@ i{\addtotoks@\Invisible@true \xyFN@\OBJECT@}% + \else\ifx h\next\DN@ h{\addtotoks@\Hidden@true \xyFN@\OBJECT@}% + \else\ifx o\next\DN@ o{\xywarning@{Obsolete o modifier used}\OBJECT@shape{o}}% + \else\ifx x\next\DN@ x{\xywarning@{Obsolete x modifier used}\OBJECT@shape{}}% + \else\ifx @\next\DN@ @##1##{% +\xywarning@{Impossible @ (letter) should not be here!!} + \OBJECT@@{\dir##1}}% + \else \let\next@=\OBJECT@direction + \fi\fi\fi\fi\fi \next@} +\xydef@\OBJECT@other{% + \ifx !\next \DN@!{\OBJECT@shift}% + \else\addPLUS@\ifx \next \DN@{\OBJECT@change}% + \else\addDASH@\ifx \next \DN@{\OBJECT@change}% + \else\addEQ@\ifx \next \DN@{\OBJECT@set}% + \else\ifx [\next + \DN@[##1]{\xy@{[##1]}{\OBJECT@shape{##1}}}% + \else\ifx ^\next \let\next@=\OBJECT@direction + \else\ifx _\next \let\next@=\OBJECT@direction + \else\ifx :\next \let\next@=\OBJECT@direction + \else\ifx ?\next + \DN@ ?{\xywarning@{\string? modifier used}\xyFN@\OBJECT@direction}% + \else\ifx (\next + \let\next@=\OBJECT@direction + \else\addAT@\ifx\next \addAT@\DN@##1##{\OBJECT@@{\dir##1}}% + \else \DN@##1##{\OBJECT@@{##1}}% + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@} +\xydef@\prevEdge@@{\zeroEdge} +\xydef@\OBJECT@@#1#2{% + \expandafter\def\expandafter\prevEdge@@\expandafter{\the\Edge@c}% + \expandafter\Edge@c\expandafter{\objectEdge}% + \Invisible@false\Hidden@false + \def\Leftness@{.5}\def\Upness@{.5}% + \gdef\preXY@style@{}\gdef\postXY@style@{}% + \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\relax}% + \DN@{#1}\ifx\next@\empty \DNii@{#2}% + \ifx\nextii@\empty \DN@{\hbox\bgroup\no@}\else \let\next@=\objectbox \fi\fi + \setbox\z@=\next@{#2}\L@c=\Leftness@\wdz@ \R@c=\wdz@ \advance\R@c-\L@c + \D@c=\dp\z@ \advance\D@c\ht\z@ \U@c=\Upness@\D@c \advance\D@c-\U@c + \R@p=\z@ \L@p=\L@c \U@p=\U@c \advance\U@p-\ht\z@ \D@p=-\U@p + \the\toks@\toks@={}\setboxz@h{\kern\R@p \raise\U@p\boxz@}% + \checkZeroEdge@ + \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \ht\z@=\U@c \dp\z@=\D@c \boxz@ + \OBJECT@x} +\xydef@\adjustLR@{% + \ifdim\zz@\wdz@ \L@c=\z@ \R@c=\z@ \dimen@=\Leftness@\p@ + \ifdim\dimen@<\z@ \L@c=\dimen@ \R@c=-\L@c + \else\ifdim\dimen@>\p@ \L@c=\dimen@ \advance\L@c-\p@ \R@c=-\L@c \fi\fi + \else \L@c=\Leftness@\wdz@ \R@c=\wdz@ \advance\R@c-\L@c \fi} +\xydef@\adjustUD@{\dimen@=\ht\z@ \advance\dimen@\dp\z@ + \ifdim\zz@\dimen@ \U@c=\z@ \D@c=\z@ \dimen@=\Upness@\p@ + \ifdim\dimen@<\z@ \U@c=\dimen@ \D@c=-\L@c + \else\ifdim\dimen@>\p@ \U@c=\dimen@ \advance\U@c-\p@ \D@c=-\L@c \fi\fi + \else \D@c=\dimen@ \U@c=\Upness@\dimen@ \advance\D@c-\U@c \fi} +\def\checkZeroEdge@{% + \expandafter\DN@\expandafter{\the\Edge@c}\def\nextii@{\zeroEdge}% + \ifx\next@\nextii@\Edge@c={\rectangleEdge}\fi + \DN@{}\def\nextii@{}% + \ifdim\zz@\L@c \ifdim\zz@\R@c \ifdim\zz@\U@c \ifdim\zz@\D@c + \DN@{\Edge@c={\zeroEdge}}\fi\fi\fi\fi + \next@} +\xydef@\OBJECT@x{\toks@={\egroup\def\Drop@@}% + \expandafter\addtotoks@\expandafter{\expandafter{\Drop@@}\def\Connect@@}% + \expandafter\addtotoks@\expandafter{\expandafter{\Connect@@}}% + \edef\tmp@{\D@c=\the\D@c \U@c=\the\U@c \L@c=\the\L@c \R@c=\the\R@c + \Edge@c={\expandafter\noexpand\the\Edge@c}% + \ifInvisible@\noexpand\Invisible@true\else\noexpand\Invisible@false\fi + \ifHidden@\noexpand\Hidden@true\else\noexpand\Hidden@false\fi + \def\noexpand\Leftness@{\Leftness@}\def\noexpand\Upness@{\Upness@}}% + \expandafter\addtotoks@\expandafter{\tmp@}\the\toks@} +\xynew@{if}\ifInvisible@ +\xynew@{if}\ifHidden@ +\xydef@\Leftness@{} +\xydef@\Upness@{} +\xydef@\Drop@@{\styledboxz@} +\xydef@\Connect@@{} +\xydef@\objectbox#1{\hbox{$\m@th\objectstyle{#1}$}} +\xylet@\objectstyle=\textstyle +\xydef@\object{\hbox\bgroup\resetStyle@\object@} +\xydef@\object@{% + \edef\next@{={\DirectionfromtheDirection@}}\expandafter\toks@\next@ + \plainxy@ \xyFN@\OBJECT@} +\xydef@\composite#1#{\hbox\bgroup\composite@{#1}} +\xydef@\composite@#1#2{% + \DN@{#1}\ifx\next@\empty\else\xywarning@{no variants of + \string\composite\space allowed}\fi + \global\setbox9=\hbox\bgroup + \D@p=-\maxdimen \U@p=-\maxdimen \L@p=-\maxdimen \R@p=-\maxdimen + \xyFN@\composite@i#2@} +\xydef@\composite@i{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\composite@i}% + \else\ifx *\next \DN@ *{\xyFN@\composite@i}% + \else\ifx @\next \DN@ @{\composite@x}% + \xyerror@{ object expected}{}\czeroEdge@ + \else \DN@{\composite@ii}\fi\fi\fi \next@} +\xydef@\composite@ii#1#{\composite@iii{#1}} +\xydef@\composite@iii#1#2{% + \setbox\z@=\object#1{#2}% + \ifInvisible@ \setboxz@h{}\else + \setboxz@h{\kern-\L@c \boxz@}\ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ {\Drop@@}\fi + \ifHidden@\else + \ifdim\U@p<\U@c \U@p=\U@c \fi \ifdim\D@p<\D@c \D@p=\D@c \fi + \ifdim\R@p<\R@c \R@p=\R@c \fi \ifdim\L@p<\L@c \L@p=\L@c \fi + \fi + \xyFN@\composite@iv} +\xydef@\composite@iv{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\composite@iv}% + \else \ifx @\next \DN@ @{\composite@x}% + \else \let\next@=\composite@i \fi\fi \next@} +\xydef@\composite@x{% + \edef\tmp@{\egroup + \D@c=\the\D@p \U@c=\the\U@p \L@c=\the\L@p \R@c=\the\R@p}\tmp@ + \setboxz@h{\kern\L@c\box9}\ht\z@=\U@c \dp\z@=\D@c + \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ + \Edge@c={\rectangleEdge}\computeLeftUpness@ \boxz@ + \OBJECT@x} +\xydef@\computeLeftUpness@{% + \dimen@=\L@c \advance\dimen@\R@c + \ifdim\zz@\dimen@ \def\Connect@@{\straight@{\dottedSpread@\jot}}% + \ifdim\zz@\L@c\else + \DN@{\zeroEdge}\expandafter\DNii@\expandafter{\the\Edge@c}% + \ifx\next@\nextii@\Edge@c={\rectangleEdge}\fi\fi + \else \quotient@\Leftness@\L@c\dimen@ \fi + \dimen@=\U@c \advance\dimen@\D@c + \ifdim\zz@\dimen@ \def\Connect@@{\straight@{\dottedSpread@\jot}}% + \ifdim\zz@\U@c\else + \DN@{\zeroEdge}\expandafter\DNii@\expandafter{\the\Edge@c}% + \ifx\next@\nextii@\Edge@c={\rectangleEdge}\fi\fi + \else \quotient@\Upness@\U@c\dimen@ \fi} +\xydef@\xybox#1{\xy#1\endxy \Edge@c={\rectangleEdge}\computeLeftUpness@} +\xydef@\OBJECT@shift{% + \let\xy@=\xytotoks@ \afterVECTORorEMPTY + {\OBJECT@shift@}% + {\addtotoks@{\X@c=-\L@c \advance\X@c\R@p \advance\X@c\L@p \Y@c=\U@p}% + \OBJECT@shift@}} +\xydef@\OBJECT@shift@{% + \addtotoks@{\advance\U@p-\Y@c + \advance\L@c\X@c \advance\R@c-\X@c \advance\D@c\Y@c \advance\U@c-\Y@c + \computeLeftUpness@}% + \let\xy@=\oxy@ \xyFN@\OBJECT@} +\xylet@\objectmargin@=\jot +\xylet@\objectwidth@=\z@ +\xylet@\objectheight@=\z@ +\xydef@\objectmargin{\afterADDOP{\Addop@@\objectmargin@}} +\xydef@\objectwidth{\afterADDOP{\Addop@@\objectwidth@}} +\xydef@\objectheight{\afterADDOP{\Addop@@\objectheight@}} +\xydef@\OBJECT@change{% + \afterADDOP{% + \addEQ@\ifx \next + \addtotoks@{\X@c=\D@c \advance\X@c\U@c \Y@c=\L@c \advance\Y@c\R@c}% + \else + \addtotoks@{\X@c=\objectmargin@ \advance\X@c\X@c \Y@c=\X@c}% + \fi + \let\xy@=\xytotoks@ + \afterVECTORorEMPTY\OBJECT@change@\OBJECT@change@}} +\xydef@\OBJECT@set{% + \afterADDOP{% + \let\xy@=\xytotoks@ \afterVECTORorEMPTY\OBJECT@change@ + {\addtotoks@{\X@c=\objectwidth@ \Y@c=\objectheight@}\OBJECT@change@}}} +\xydef@\OBJECT@change@{% + \addtotoks@{\advance\R@c\L@c \advance\R@p-\L@c \let\tmp@=\R@c}% + \expandafter\addtotoks@\expandafter{\Addop@@\tmp@\X@c\R@c=\tmp@ + \L@c=\Leftness@\R@c \advance\R@p\L@c \advance\R@c-\L@c}% + \addtotoks@{\advance\D@c\U@c \let\tmp@=\D@c}% + \expandafter\addtotoks@\expandafter{\Addop@@\tmp@\Y@c\D@c=\tmp@ + \U@c=\Upness@\D@c \advance\D@c-\U@c}% + \let\xy@=\oxy@ \xyFN@\OBJECT@} +\xydef@\afterADDOP#1{\def\afterADDOP@{#1}\xyFN@\ADDOP@} +\xylet@\afterADDOP@=\empty +\xydef@\ADDOP@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\ADDOP@}% + \else\addPLUS@\ifx \next \addPLUS@\DN@{\xyFN@\ADDOP@plus}% + \else\addDASH@\ifx \next \addDASH@\DN@{\xyFN@\ADDOP@minus}% + \else\addEQ@\ifx \next + \addEQ@\DN@{\def\Addop@@{\Addop@0+=}\afterADDOP@}% + \else + \DN@{\def\Addop@@{\Addop@0+=}\afterADDOP@}% + \fi\fi\fi\fi \next@} +\xydef@\ADDOP@plus{% + \addEQ@\ifx \next + \addEQ@\DN@{\def\Addop@@{\Addop@0+<}\afterADDOP@}% + \else + \DN@{\def\Addop@@{\Addop@1+=}\afterADDOP@}% + \fi \next@} +\xydef@\ADDOP@minus{% + \addEQ@\ifx \next + \addEQ@\DN@{\def\Addop@@{\Addop@0+>}\afterADDOP@}% + \else + \DN@{\def\Addop@@{\Addop@1-=}\afterADDOP@}% + \fi \next@} +\xydef@\Addop@#1#2#3#4#5{% + \dimen@=#4\relax \edef#4{\the\dimen@}% + \dimen@=#1\dimen@ \advance\dimen@#2#5\relax + \ifdim\dimen@#3#4\else \edef#4{\the\dimen@}\fi + \ifx\xy@\xyinitial@\else \DN@##1{\xy@@{\edef#4{##1}\checkZeroEdge@}}% + \expandafter\next@\expandafter{#4}\fi} +\xydef@\objectEdge{\rectangleEdge} +\xydefcsname@{shape [r]}{\advance\U@p\D@c \centerobject@ + \ifdim\L@c>\D@c + \advance\R@c\L@c \L@c=.5\U@c \advance\L@c.5\D@c \advance\R@c-\L@c \fi + \advance\U@p-\D@c} +\xydefcsname@{shape [l]}{\advance\U@p\D@c \centerobject@ + \ifdim\L@c>\D@c + \advance\L@c\R@c \R@c=.5\U@c \advance\R@c.5\D@c \advance\L@c-\R@c \fi + \advance\U@p-\D@c} +\xydefcsname@{shape [u]}{\advance\U@p\D@c \centerobject@ + \ifdim\D@c>\L@c + \advance\U@c\D@c \D@c=.5\L@c \advance\D@c.5\R@c \advance\U@c-\D@c \fi + \advance\U@p-\D@c} +\xydefcsname@{shape [d]}{\advance\U@p\D@c \centerobject@ + \ifdim\D@c>\L@c + \advance\D@c\U@c \U@c=.5\L@c \advance\U@c.5\R@c \advance\D@c-\U@c \fi + \advance\U@p-\D@c} +\xydefcsname@{shape [c]}{\advance\U@p\D@c \centerobject@ \advance\U@p-\D@c} +\xydef@\centerobject@{% + \advance\D@c\U@c \D@c=.5\D@c \U@c=\D@c \advance\L@c\R@c \L@c=.5\L@c \R@c=\L@c} +\xydef@\OBJECT@shape#1{\DN@{shape [#1]}% + \expandafter\let\expandafter\nextii@\csname\codeof\next@\endcsname + \ifx\nextii@\relax\DN@{style [#1]}% + \expandafter\let\expandafter\nextii@\csname\codeof\next@\endcsname + \ifx\nextii@\relax \DN@{\OBJECT@shapei[#1]}% + \else\DN@{\nextii@\xyFN@\OBJECT@}\fi + \else \expandafter\addtotoks@\expandafter{\nextii@}% + \DN@{\xyFN@\OBJECT@}% + \fi \next@} +\xydefcsname@{shape []}{\the\Edge@c5\relax}% +\xydefcsname@{shape [Outer]}{\the\Edge@c5\relax}% +\xydefcsname@{shape [Inner]}{\the\Edge@c4\relax}% +\xydefcsname@{shape [o]}{\Edge@c={\circleEdge}\the\Edge@c5\relax + \Edge@c={\circleEdge}\def\prevEdge@@{\circleEdge}} +\xydefcsname@{shape [.]}{\czeroEdge@} +\def\OBJECT@shapei[#1#2]{\DN@{shape [#1...]}% + \expandafter\let\expandafter\next\csname\codeof\next@\endcsname + \ifx\next\relax\DN@{*stylechar@#1@}% + \expandafter\let\expandafter\next\csname\codeof\next@\endcsname + \ifx\next\relax\DNii@{shape [#1#2]}% + \xywarning@{illegal [] ignored: \codeof\nextii@\space not defined}% + \DN@{\xyFN@\OBJECT@}% + \else% Delete this: \expandafter\addtotoks@\expandafter{\next{#2}}% + \DN@{\next{#2}\xyFN@\OBJECT@}% + \fi + \else +\expandafter\addtotoks@\expandafter{\next{#2}}\DN@{\next{#2}\xyFN@\OBJECT@}% + \fi \next@} +\xydef@\preXY@style@{} +\xydef@\postXY@style@{} +\xydef@\resetStyle@{\gdef\preXY@style@{}\gdef\postXY@style@{}} +\xynew@{toks}{\styletoks@} +\xydef@\addtostyletoks@#1{% + \expandafter\styletoks@\expandafter{\the\styletoks@#1}} +\xydef@\styledboxz@{% + \xypre@Style@@ + \boxz@ + \xypost@Style@@} +\xydef@\xypre@Style@{\styletoks@={}\saveXyStyle@\preXY@style@ + \expandafter\DN@\expandafter{\the\styletoks@}% + \ifx\next@\empty \DN@{\let\xypre@Style@@=\relax + \let\xypost@Style@@=\relax \xypre@skipStyle@}% + \else + \let\xypre@Style@@=\relax \let\xypost@Style@@=\xypost@Style@ + \DN@{\expandafter\xydoprestyles@\expandafter{\the\styletoks@}}% + \fi \next@ } +\xydef@\xypost@Style@{\styletoks@={}\postXY@style@ + \expandafter\xydopoststyles@\expandafter{\the\styletoks@}% + \let\xypost@Style@@=\relax \let\xypre@Style@@=\xypre@Style@ } +\xydef@\xypre@skipStyle@#1\xypost@Style@@{#1\relax + \let\xypre@Style@@=\xypre@Style@ } +\xydef@\xydoprestyles@@{\literal@} +\xydef@\xydopoststyles@@{\literal@} +\xylet@\xydoprestyles@=\xydoprestyles@@ +\xylet@\xydopoststyles@=\xydopoststyles@@ +\xydef@\modXYstyle@{% + \ifx\xy@style@\empty\resetStyle@\fi \checkXyStyle@ + \expandafter\expandafter\expandafter\DN@ + \expandafter\expandafter\expandafter{\preXYstyle@@}% + \ifx\next@\empty\else\DN@{\modXYstyle@@}\fi \next@ } +\xydef@\modXYstyle@@{% + \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{##1}}% + \expandafter\next@\expandafter{\preStyle@@}% + \DN@##1{\expandafter\gdef\expandafter\preXY@style@\expandafter{% + \preXY@style@ ##1}}\expandafter\next@\expandafter{\tmp@}% + \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{##1}}% + \expandafter\next@\expandafter{\postStyle@@}% + \DN@##1{\expandafter\gdef\expandafter\postXY@style@\expandafter{% + \tmp@ ##1}}\expandafter\next@\expandafter{\postXY@style@}} +\xydef@\xy@style@{} +\xydef@\checkXyStyle@{\ifx\xy@style@\empty\resetStyle@\fi + \let\xy@style@=\relax} +\xydef@\preStyle@@{} +\xydef@\postStyle@@{} +\xydef@\preXYstyle@@{\relax} +\xydef@\loadxystyle@{% + \let\xypre@Style@@=\xypre@Style@ \def\preXYstyle@@{\preStyle@@}} +\loadxystyle@ +\xydef@\Unloadstyle@{% + \let\xypre@Style@@=\relax \let\xypost@Style@@=\relax + \def\preXYstyle@@{\relax}} +\xydefcsname@{shape [=...]}#1{\checkXyStyle@ \addtotoks@{\xynamestyle@{#1}}} +\xydef@\xynamestyle@#1{\checkXyStyle@ + \expandafter\DNii@\expandafter{\csname shape [#1]\endcsname}% + \expandafter\ifx\nextii@\relax + \else\xywarning@{Redefining style [#1]}\fi + \expandafter\xynamestyle@@\csname shape [#1]\endcsname } +\xydef@\xynamestyle@@#1{% + \expandafter\def\expandafter\tmp@\expandafter{\preXY@style@}% + \DN@##1{\def\tmp@{\checkXyStyle@\gdef\preXY@style@{##1}}}% + \expandafter\next@\expandafter{\preXY@style@}% + \DN@##1{\expandafter\gdef\expandafter#1\expandafter{\tmp@ + \gdef\postXY@style@{##1}}}% + \expandafter\next@\expandafter{\postXY@style@}\DN@{}} +\xydef@\prevXypreStyle@@{} +\xydef@\prevXypostStyle@@{} +\xydef@\saveXyStyle@{\expandafter + \def\expandafter\prevXypreStyle@@\expandafter{\preXY@style@}% + \expandafter\def\expandafter\prevXypostStyle@@\expandafter{% + \postXY@style@}} +\xydef@\recoverXyStyle@{\expandafter + \gdef\expandafter\preXY@style@\expandafter{\prevXypreStyle@@}% + \expandafter\gdef\expandafter\postXY@style@\expandafter{% + \prevXypostStyle@@}} +\xydef@\newxystyle#1#2#3{% + \DN@{#3}\ifx\next@\empty + \xydefcsname@{shape [#1]}{\csname xyshape@#1@\endcsname}% + \else \expandafter\def\csname shape [#1]\endcsname{% + \csname xyshape@#1@\endcsname}\fi + \DN@{#2}\ifx\next@\empty + \expandafter\def\csname xyshape@#1@\endcsname{% + \xyundefinedStyle@{#1}{}@@}% + \else \expandafter\def\csname xyshape@#1@\endcsname{#2}\fi} +\xydef@\xyundefinedStyle@#1#2@@{% + \xywarning@{style #1 not defined, nothing to apply}} +\xydef@\applyFIFOstyle@#1#2#3#4{\bgroup + \styletoks@={\egroup\gdef\preXY@style@}% + \expandafter\toks@\expandafter{\preXY@style@}% + \expandafter\addtotoks@\expandafter{\expandafter#1\expandafter{#2}}% + \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}% + \gdef\postXY@style@}% + \expandafter\toks@\expandafter{\expandafter#3\expandafter{#4}}% + \expandafter\addtotoks@\expandafter{\postXY@style@}% + \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}}% + \the\styletoks@ } +\xydef@\applyLIFOstyle@#1#2#3#4{\bgroup + \styletoks@={\egroup\gdef\preXY@style@}% + \expandafter\toks@\expandafter{\expandafter#1\expandafter{#2}}% + \expandafter\addtotoks@\expandafter{\preXY@style@}% + \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}% + \gdef\postXY@style@}% + \expandafter\toks@\expandafter{\postXY@style@}% + \expandafter\addtotoks@\expandafter{\expandafter#3\expandafter{#4}}% + \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}}% + \the\styletoks@ } +\xydef@\OBJECT@direction{\afterDIRECTIONorEMPTY{% + \edef\next@{{\DirectionfromtheDirection@}}\expandafter\addtotoks@\next@ + \xyFN@\OBJECT@}% + {\xyFN@\OBJECT@}} +\xydef@\afterDIRECTIONorEMPTY#1#2{% + \DN@##1{\def\afterDIRECTION@{\def\afterDIRECTION@{##1}% + \ifDIRECTIONempty@\DN@{#2}\else\DN@{#1}\fi \next@}}% + \expandafter\next@\expandafter{\afterDIRECTION@}% + \xyFN@\DIRECTION@} +\xylet@\afterDIRECTION@=\empty +\xynew@{if}\ifDIRECTIONempty@ +\xydef@\DIRECTION@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\DIRECTION@}% + \else\ifx v\next \DN@ v{\DIRECTION@v}% + \else\ifx \bgroup\next \let\next@=\DIRECTION@group + \else\ifx (\next \DN@({\xyFN@\DIRECTION@open}% + \else + \DN@{\count@=8 + \afterDIAG{\ifnum\count@=8 \DN@{\DIRECTIONempty@true \xyFN@\DIRECTION@i}% + \else \DN@{\xy@@{\dimen@=\xydashl@}\Directionfromdiag@}\fi \next@}}% + \fi\fi\fi\fi \next@} +\xydef@\DIRECTION@open{% + \ifx *\next \DN@*##1*){\DIRECTION@group{##1}}% + \else \DN@{\xyerror@{(* *) expected}{} \xyFN@\DIRECTION@i}% + \fi \next@} +\def\afterDIAG#1{\def\afterDIAG@{#1}\xyFN@\DIAG@} +\xydef@\DIAG@{% + \ifx d\next \DN@ d{\count@=1 \xyFN@\DIAG@@}% + \else\ifx r\next \DN@ r{\count@=3 \xyFN@\DIAG@@}% + \else\ifx u\next \DN@ u{\count@=5 \xyFN@\DIAG@@}% + \else\ifx l\next \DN@ l{\count@=7 \xyFN@\DIAG@@}% + \else \let\next@=\afterDIAG@ + \fi\fi\fi\fi \next@} +\xydef@\DIAG@@{\ifcase\count@ \or + \DIAG@@@ l0r2\or\or \DIAG@@@ d2u4\or\or \DIAG@@@ r4l6\or\or \DIAG@@@ u6d0% + \else\xybug@{impossible number}\fi + \next@} +\xydef@\DIAG@@@#1#2#3#4{% + \ifx #1\next \count@=#2\DN@#1{\afterDIAG@}% + \else \ifx #3\next \count@=#4\DN@#3{\afterDIAG@}% + \else \let\next@=\afterDIAG@ \fi\fi} +\xydef@\Directionfromdiag@{\ifcase\count@ + \xy@@{\dlDirection@\dimen@}% + \or \xy@@{\dDirection@\dimen@}% + \or \xy@@{\drDirection@\dimen@}% + \or \xy@@{\rDirection@\dimen@}% + \or \xy@@{\urDirection@\dimen@}% + \or \xy@@{\uDirection@\dimen@}% + \or \xy@@{\ulDirection@\dimen@}% + \or \xy@@{\lDirection@\dimen@}% + \or + \else\xybug@{impossible }\fi + \DIRECTIONempty@false \xyFN@\DIRECTION@i} +\xydef@\DIRECTION@v{% + \xy@{v}{\enter@{\cfromthec@ \X@origin=\the\X@origin \Y@origin=\the\Y@origin + \X@p=\the\X@p \Y@p=\the\Y@p}% + \X@origin=\z@ \Y@origin=\z@}% + \afterVECTORorEMPTY + {\xy@@{\X@p=\z@ \Y@p=\z@ \setupDirection@ \leave@}% + \DIRECTIONempty@false \xyFN@\DIRECTION@i}% + {\xy@@\leave@ \xyerror@{ expected after v}{}% + \DIRECTIONempty@false \xyFN@\DIRECTION@i}} +\xydef@\DIRECTION@group#1{% + \xy@@{\begingroup}\xy@@ix@{#1}\xy@@{\plainxy@\expandafter\POS\the\toks9\relax + \setupDirection@\edef\next@{\endgroup \DirectionfromtheDirection@}\next@}% + \DIRECTIONempty@false \xyFN@\DIRECTION@i} +\xydef@\DIRECTION@i{% + \ifx ^\next \DN@ ^{\xy@^{\aboveDirection@\xydashl@}% + \DIRECTIONempty@false \xyFN@\DIRECTION@i}% + \else\ifx _\next \DN@ _{\xy@_{\belowDirection@\xydashl@}% + \DIRECTIONempty@false \xyFN@\DIRECTION@i}% + \else\ifx :\next \DN@ :{% + \xy@{:}{\enter@{\cfromthec@ \basefromthebase@ \X@p=\the\X@p \Y@p=\the\Y@p}% + \X@origin=\z@ \Y@origin=\z@ + \X@xbase=\cosDirection\xydashl@ \Y@xbase=\sinDirection\xydashl@ + \X@ybase=-\Y@xbase \Y@ybase=\X@xbase}% + \afterVECTORorEMPTY + {\xy@@{\X@p=\z@ \Y@p=\z@ \setupDirection@ \leave@}% + \DIRECTIONempty@false \xyFN@\DIRECTION@i}% + {\xy@@\leave@ \xyerror@{ expected after :}{}% + \DIRECTIONempty@false \xyFN@\DIRECTION@i}}% + \else + \let\next@=\afterDIRECTION@ + \fi\fi\fi \next@} +\message{decorations;} +\xydef@\drop#1#{\DN@##1{\xy@@ix@{{#1}{##1}}% + \xy@{\drop#1{##1}}{\expandafter\drop@\the\toks9 }\ignorespaces}\next@} +\xydef@\connect#1#{\DN@##1{\xy@@ix@{{#1}{##1}}% + \xy@{\connect#1{##1}}{\expandafter\connect@\the\toks9 }\ignorespaces}\next@} +\xydef@\preconnect#1#{\DN@##1{\xy@@ix@{{#1}{##1}}% + \xy@{\connect#1{##1}}{\expandafter\preconnect@\the\toks9 }\ignorespaces}\next@} +\xydef@\save{\relax\saveC} +\xydef@\saveC{\xy@\save\save@ \POS} +\xydef@\save@{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}} +\xydef@\restore{\xy@\restore\leave@ \ignorespaces} +\xydef@\xyecho{% + \xy@\xyecho{\let\xy@=\xyecho@ \message{\string\xyecho}}\POS} +\xydef@\xyecho@#1#2{{\def\1{#1}\ifx\1\empty\else\message{\codeof\1}\fi}% + \oxy@{#1}{#2}} +\xydef@\xyverbose{% + \xy@\xyverbose{\let\xy@=\xyverbose@ + \W@{Xy: \string\xyverbose\xytracelineno@}}\POS} +\xydef@\xyverbose@#1#2{% + {\def\1{#1}\ifx\1\empty\else\W@{Xy: \codeof\1\xytracelineno@}\fi}% + \oxy@{#1}{#2}} +\xydef@\xytracing{% + \xy@\xytracing{\let\xy@=\xytracing@ + \W@{Xy TRACE: \string\xytracing\xytracelineno@}\xystatus@:}\POS} +\xydef@\xytracing@#1#2{{\def\1{#1}\def\2{#2}% + \W@{Xy TRACE: \codeof\1 {\codeof\2}\xytracelineno@}}\oxy@{#1}{#2}\xystatus@:} +\xydef@\xystatus@#1{\xystatus@cp{#1}% + \W@{#1 d=<\the\d@X,\the\d@Y> + Direction=\the\Direction=\string(\cosDirection,\sinDirection\string)}% + \W@{#1 base=<\the\X@origin,\the\Y@origin>+% + <\the\X@xbase,\the\Y@xbase>x+<\the\X@ybase,\the\Y@ybase>y}% + \W@{#1 min/max=<\the\X@min,\the\Y@min>/<\the\X@max,\the\Y@max> + S=\the\csp@}} +\xydef@\xystatus@cp#1{% + \W@{#1 c=<\the\X@c,\the\Y@c> \expandafter\string\the\Edge@c + \string[\the\L@c+\the\R@c,\the\D@c+\the\U@c\string] + \ifInvisible@ I\fi\ifHidden@ H\fi}% + \W@{#1 p=<\the\X@p,\the\Y@p> \expandafter\string\the\Edge@p + \string[\the\L@p+\the\R@p,\the\D@p+\the\U@p\string]}} +\xydef@\xystatus@c#1{% + \W@{#1<\the\X@c,\the\Y@c> \expandafter\string\the\Edge@c + \string[\the\L@c+\the\R@c,\the\D@c+\the\U@c\string]}} +\xydef@\xyquiet{\xy@\xyquiet{\let\xy@=\oxy@}} +\xydef@\xyignore#1{\xy@\xyignore{\xyignore@{#1}}\ignorespaces} +\xydef@\xyignore@#1{{\let\xy@=\xyeat@ \change@oxy@\xy@ \POS#1\relax}} +\xydef@\xyeat@#1#2{} +\xydef@\xycompile@@{\jobname-} +\xydef@\xycompileno@@{0} +\xydef@\CompilePrefix#1{% + \def\xycompile@@{#1}\xdef\xycompile@@{\codeof\xycompile@@}% + \xdef\xycompileno@@{0}} +\xydef@\xycompile{% + \count@=\xycompileno@@ \advance\count@\@ne + \xdef\xycompileno@@{\ifnum10>\count@ 0\fi \the\count@}% + \edef\next{\noexpand\xycompileto{\xycompile@@\xycompileno@@}}\next} +\xylet@\compilename@@=\empty +\xylet@\xyrecompile@@=\relax +\xydef@\xycompileto#1#2{% + \if\inxy@ \DN@{\xy@@{\nter@{}}}% + \else \DN@{\xy \xy@@{\nter@{\endxy}}}\fi \next@ + \ifxysaving@ \xyerror@{Compilations can not be nested}{}\fi + \DN@{#1}\edef\compilename@@{\codeof\next@}\DNii@{#2}% + \def\xyrecompile@@{recompiling TRUNCATED}% + \expandafter\xyinputorelse@@\expandafter{\compilename@@.xyc}% + {\def\xyrecompile@@{compiling to}}% + \ifx\xyrecompile@@\relax \else \expandafter\xyrecompile@ \fi + \xy@@\leave@ \ignorespaces} +\xydef@\xyrecompile@{% + \message{(\xyrecompile@@\space\string`\compilename@@.xyc\string'}% + \DN@{\immediate\openout\xywrite@=}\expandafter\next@\compilename@@.xyc + \immediate\write\xywrite@{% + \string\xycompiled{\compilename@@}% + {\the\year/\the\month/\the\day\string:\the\time\xytracelineno@}% + {Xy-pic \xyversion}\xycomment@}% + \immediate\write\xywrite@{{\codeof\nextii@}\relax}% + {\xysaving@ \expandafter\POS\nextii@ \relax}% + \immediate\write\xywrite@{\string\xyendcompiled}% + \immediate\closeout\xywrite@ \message{done)}% + \expandafter\input\compilename@@.xyc + \outlines@@\writeoutline@\writeoutline@} +\xydef@\xysaving@{\let\xy@=\xysave@ \change@oxy@\xy@ + \let\xy@@ix@=\xysave@@toksix@ \xysaving@true} +\xynew@{if}\ifxysaving@ \xysaving@false +\xydef@\xysave@#1#2{{\DN@{{#1}{#2}}% + \immediate\write\xywrite@{\string\xy@\codeof\next@\xycomment@}}} +\xydef@\xysave@@toksix@#1{{\DN@{{#1}}% + \immediate\write\xywrite@{\string\xy@@ix@\codeof\next@\relax}}} +\xywarnifdefined\xycomment@ +{\catcode`\%=12 \catcode`\(=1 \catcode`\)=2 \gdef\xycomment@(%)} +\xydef@\xycompiled#1#2#3#4{\DN@{#1}\edef\next@{\codeof\next@}% + \ifx\next@\compilename@@\else + \xywarning@{This file does not contain the result of + \string\xycompileto{\compilename@@}{...}^^J% + but of \string\xycompileto{\next@}}\fi + \edef\next{Xy-pic \xyversion}\DN@{#3}\ifx\next\next@ + \DN@{#4}\ifx\next@\nextii@ \xycatcodes \outlines@@\relax\readoutline@ + \else \def\xyrecompile@@{recompiling to}\endinput \fi + \else \def\xyrecompile@@{Xy-pic version change - recompiling}\endinput \fi} +\xydef@\xyendcompiled{\let\xyrecompile@@=\relax \xyuncatcodes\endinput} +\xydef@\CompileFixPoint#1{% + \expandafter\ifx\csname#1FIX@@\endcsname\relax + \expandafter\xdef\csname#1FIX@@\endcsname{\xycompileno@@}% + \else + \xdef\xycompileno@@{\csname#1FIX@@\endcsname}\fi} +\xydef@\outlines@no#1#2{} +\xydef@\outlines@make#1#2{#1} +\xydef@\outlines@only#1#2{#2} +\xylet@\outlines@@=\outlines@no +\xylet@\writeoutline@@=\relax +\xylet@\readoutline@@=\relax +\xydef@\MakeOutlines{\let\outlines@@=\outlines@make} +\xydef@\OnlyOutlines{\xywarning@{Compiled pictures only shown as outlines}% + \let\outlines@@=\outlines@only} +\xydef@\ShowOutlines{\let\readoutline@@=\typesetoutline@} +\xydef@\NoOutlines{\let\outlines@@=\outlines@no} +\xydef@\writeoutline@{% + \DN@{\immediate\openout\xywrite@=}\expandafter\next@\compilename@@.xyd + \immediate\write\xywrite@{\xycomment@\space\compilename@@.xyd} + \immediate\write\xywrite@{% + \string\X@min=\the\X@min \string\X@max=\the\X@max + \string\Y@min=\the\Y@min \string\Y@max=\the\Y@max \string\relax}% + \writeoutline@@ + \immediate\closeout\xywrite@} +\xynew@{if}\ifoutlineread@ +\xydef@\readoutline@{\outlineread@true + \expandafter\xyinputorelse@@\expandafter{\compilename@@.xyd}% + {\def\xyrecompile@@{outline missing - recompiling to}\outlineread@false}% + \ifoutlineread@ \readoutline@@ + \writeoutline@\expandafter\xyendcompiled\fi} +\xydef@\typesetoutline@{% + \xy@@{\czeroEdge@ \U@p=\z@ \D@p=\z@ \L@p=\z@ \R@p=\z@ \Edge@p={\zeroEdge}% + \X@p=\X@min \Y@p=\Y@min \X@c=\X@min \Y@c=\Y@max \connect@\dir{.}% + \X@p=\X@c \Y@p=\Y@c \X@c=\X@max \Y@c=\Y@max \connect@\dir{.}% + \X@p=\X@c \Y@p=\Y@c \X@c=\X@max \Y@c=\Y@min \connect@\dir{.}% + \X@p=\X@c \Y@p=\Y@c \X@c=\X@min \Y@c=\Y@min \connect@\dir{.}}} +\message{kernel objects:} +\message{directionals,} +\xydef@\dir{\hbox\bgroup\xyFN@\dir@i} +\xydef@\dir@i{\ifx *\next \DN@*{\resetStyle@\object@}% + \else \let\next@=\dir@ii \fi \next@} +\xydef@\dir@ii#1#{\dir@{#1}} +\xydef@\dir@#1#2{\DN@{dir#1{#2}}% + \expandafter\let\expandafter\next\csname\codeof\next@\endcsname + \ifx\next\relax \DN@{dir{#2}}% + \expandafter\let\expandafter\next\csname\codeof\next@\endcsname + \ifx\next\relax \DN@{\dir#1{#2}}% + \xyerror@{illegal : \codeof\next@\space not defined}{}% + \let\next=\no@ \fi\fi \next} +\xydefcsname@{dir{}}{\no@} +\xyletcsnamecsname@{dir0{}}{dir{}} +\xyletcsnamecsname@{dir1{}}{dir{}} +\xyletcsnamecsname@{dir^{}}{dir{}} +\xyletcsnamecsname@{dir_{}}{dir{}} +\xyletcsnamecsname@{dir2{}}{dir{}} +\xyletcsnamecsname@{dir3{}}{dir{}} +\xyletcsnamecsname@{dir{ }}{dir{}} +\xydef@\no@{\egroup \czeroEdge@ + \def\Leftness@{.5}\def\Upness@{.5}% + \def\Drop@@{\setbox\z@=\copy\voidb@x}\def\Connect@@{\no@@}} +\xydefcsname@{dir1{-}}{\line@} +\xydefcsname@{dir2{-}}{\line@ \double@\xydashh@} +\xydefcsname@{dir3{-}}{\line@ \triple@\xydashh@} +\xyletcsnamecsname@{dir0{-}}{dir{}} +\xyletcsnamecsname@{dir{-}}{dir1{-}} +\xyletcsnamecsname@{dir{=}}{dir2{-}} +\xydef@\line@{\dimen@=\sd@Y\sinDirection\xydashl@ + \ifnum\SemiDirectionChar<31 \D@c=\z@ \U@c=\dimen@ \DN@{\d@Y<\z@}% + \else\ifnum\SemiDirectionChar<64 \D@c=\dimen@ \U@c=\z@ \DN@{\z@<\d@Y}% + \else\ifnum\SemiDirectionChar<96 \D@c=\dimen@ \U@c=\z@ \DN@{\d@X<\z@}% + \else \D@c=\z@ \U@c=\dimen@ \DN@{\d@X<\z@}\fi\fi\fi + \setboxz@h{\line@@}\ht\z@=\U@c \dp\z@=\D@c + \L@c=\z@ \R@c=\wdz@ + \ifdim\next@ \dimen@=\R@c \R@c=\L@c \L@c=\dimen@ + \dimen@=\U@c \U@c=\D@c \D@c=\dimen@ \advance\dimen@-\U@c + \lower\dimen@\boxz@ + \else \boxz@ \fi + \edef\tmp@{\egroup \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c}% + \tmp@ + \Edge@c={\rectangleEdge}% + \ifdim\z@<\U@c \def\Upness@{1}\else \def\Upness@{0}\fi + \ifdim\z@<\L@c \def\Leftness@{1}\else \def\Leftness@{0}\fi + \def\Drop@@{\styledboxz@}\def\Connect@@{\solid@}} +\xydef@\line@@{{\xydashfont\SemiDirectionChar\/}} +\xydef@\solid@{% + \checkXy@rules@\solidhrule@\solidvrule@{\straight@\solidSpread@}} +\xydef@\checkXy@rules@#1#2#3{% + \dimen@=\Y@c \advance\dimen@-\Y@p + \ifjusthvtest@.05pt>\ifdim\dimen@<\z@-\fi\dimen@ \DN@{#1}% + \else \dimen@=\X@c \advance\dimen@-\X@p + \ifjusthvtest@.05pt>\ifdim\dimen@<\z@-\fi\dimen@ \DN@{#2}% + \else \DN@{#3}\fi\fi \next@} +\xydef@\solidSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi} +\xylet@\ifjusthvtest@=\ifdim +\xydef@\NoRules{\let\ifjusthvtest@=\iffalse} +\xydef@\UseRules{\let\ifjusthvtest@=\ifdim} +\xydef@\solidvrule@{\no@@ \solidvrule@typeset \ifHidden@\else\noinsert@\fi + \solidvrule@pre} +\xydef@\solidvrule@pre{% + \def\Cbreak@@{% + \connectRestore@ \swap@\lastbreak@@\swap@ + \solidvrule@typeset \edef\lastbreak@@{\cfromthec@}\Creset@@}% + \def\Clast@@{% + \connectRestore@ \Creset@@\swap@\lastbreak@@\swap@ + \solidvrule@typeset \Creset@@ \edef\lastbreak@@{\cfromthep@}}% +} +\xydef@\solidvrule@typeset{% + \ifInvisible@ \let\next@=\relax \else \let\next@=\solidvrule@typeset@ \fi + \checkoverlap@@ \next@} +\xydef@\solidvrule@typeset@{{% + \advance\X@c\X@p \X@c=.5\X@c \X@p=\X@c + \advance\X@c-.5\xydashw@ \advance\X@p.5\xydashw@ + \ifdim\Y@c<\Y@p \advance\Y@c\U@c \advance\Y@p-\D@p + \else \swapdimen@\Y@c\Y@p \advance\Y@c\U@p \advance\Y@p-\D@c \fi + \Droprule@}} +\xydef@\solidhrule@{\no@@ \solidhrule@typeset \ifHidden@\else\noinsert@\fi + \solidhrule@pre} +\xydef@\solidhrule@pre{% + \def\Cbreak@@{% + \connectRestore@ \swap@\lastbreak@@\swap@ + \solidhrule@typeset \edef\lastbreak@@{\cfromthec@}\Creset@@}% + \def\Clast@@{% + \connectRestore@ \Creset@@\swap@\lastbreak@@\swap@ + \solidhrule@typeset \Creset@@ \edef\lastbreak@@{\cfromthep@}}% +} +\xydef@\solidhrule@typeset{% + \ifInvisible@ \let\next@=\relax \else \let\next@=\solidhrule@typeset@ \fi + \checkoverlap@@ \next@} +\xydef@\solidhrule@typeset@{{% + \ifdim\X@c<\X@p \advance\X@c\R@c \advance\X@p-\L@p + \else \swapdimen@\X@c\X@p \advance\X@c\R@p \advance\X@p-\L@c \fi + \advance\Y@c\Y@p \Y@c=.5\Y@c \Y@p=\Y@c + \advance\Y@c-.5\xydashw@ \advance\Y@p.5\xydashw@ + \Droprule@}} +\xydef@\Droprule@{\advance\X@p-\X@c + \setboxz@h{\kern\X@c \vrule width\X@p depth-\Y@c height\Y@p}% + \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ \Drop@@} +\xydef@\zerodot{\copy\zerodotbox@} +\xydefcsname@{dir1{.}}{\point@} +\xydefcsname@{dir2{.}}{\point@ \double@\xydashh@} +\xydefcsname@{dir3{.}}{\point@ \triple@\xydashh@} +\xyletcsnamecsname@{dir0{.}}{dir{}} +\xyletcsnamecsname@{dir{.}}{dir1{.}} +\xyletcsnamecsname@{dir{:}}{dir2{.}} +\xydef@\point@{\pointlike@\zerodot\p@} +\xydef@\pointlike@#1#2{% + \setboxz@h{#1}\wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@\egroup + \def\Leftness@{.5}\def\Upness@{.5}\ctipEdge@ + \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@{#2}}}} +\xydef@\dottedSpread@#1{% + \dimen@=#1\relax \DN@{\A@=2\A@ \B@=2\B@ \dottedSpread@i}% + \A@=\sd@X\cosDirection\dimen@ \B@=\sd@Y\sinDirection\dimen@ + \dimen@=\A@ \advance\dimen@\B@ + \dimen@ii=\sd@X\d@X \advance\dimen@ii\sd@Y\d@Y + \ifdim\dimen@>\dimen@ii \DN@{\count@@=\z@}\fi + \next@} +\xydef@\dottedSpread@i{% + \global\setbox8=\hbox to\A@{\hss + \kern.5\A@\box\lastobjectbox@\kern.5\A@\hss}\dp8=.5\B@ \ht8=.5\B@ + \advance\d@X\sd@X\A@ \advance\d@Y\sd@Y\B@ + \advance\X@c\sd@X.5\A@ \advance\Y@c\sd@Y.5\B@ + \ifdim\sd@Y\d@Y<\sd@X\d@X \dimen@=\sd@X\d@X + \ifdim\zz@\A@\else \divide\dimen@\A@ \fi \count@@=\dimen@ + \else \dimen@=\sd@Y\d@Y + \ifdim\zz@\B@\else \divide\dimen@\B@ \fi \count@@=\dimen@ + \fi \advance\count@@\@ne} +\xydefcsname@{dir1{~}}{\squiggle@} +\xydefcsname@{dir2{~}}{\squiggle@ \double@\xybsqlh@} +\xydefcsname@{dir3{~}}{\squiggle@ \triple@\xybsqlh@} +\xyletcsnamecsname@{dir0{~}}{dir{}} +\xyletcsnamecsname@{dir{~}}{dir1{~}} +\xydef@\squiggle@{\xybsqlfont + \dimen@=\sd@X\cosDirection\xybsqll@ \advance\dimen@.1\p@ + \dimen@ii=\sd@Y\sinDirection\xybsqll@ + \kern\dimen@\squiggle@@ + \edef\tmp@{\egroup \U@c=\the\dimen@ii \L@c=\the\dimen@}\tmp@ + \wdz@=2\L@c \R@c=\L@c \ht\z@=\U@c \D@c=\U@c \dp\z@=\U@c + \Edge@c={\rectangleEdge}% + \def\Leftness@{.5}\def\Upness@{.5}% + \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\squiggledSpread@}} +\xydef@\squiggle@@{\DirectionChar \count@=\DirectionChar + \advance\count@-64 \ifnum\count@<\z@ \advance\count@128 \fi \char\count@} +\xydef@\squiggledSpread@{% + \dimen@=\d@X \advance\dimen@-\sd@X\count@@\A@ \advance\dimen@\sd@X.3\p@ + \advance\X@c-.5\dimen@ \advance\d@X-\dimen@ + \dimen@=\d@Y \advance\dimen@-\sd@Y\count@@\B@ \advance\dimen@\sd@Y.3\p@ + \advance\Y@c-.5\dimen@ \advance\d@Y-\dimen@} +\xydef@\double@#1{\edef\Drop@@{\dimen@=#1\relax + \dimen@=.5\dimen@ \A@=-\sinDirection\dimen@ \B@=\cosDirection\dimen@ + \setboxz@h{\setbox2=\hbox{\kern\A@\raise\B@\copy\z@}% + \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2 + \setbox2=\hbox{\kern-\A@\raise-\B@ \noexpand\boxz@}% + \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2 }% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \noexpand\styledboxz@}} +\xydef@\triple@#1{\edef\Drop@@{\dimen@=#1\relax + \A@=-\sinDirection\dimen@ \B@=\cosDirection\dimen@ + \setboxz@h{\setbox2=\hbox{\kern\A@\raise\B@\copy\z@}% + \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2 + \setbox2=\hbox{\kern-\A@\raise-\B@\copy\z@}% + \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2 + \dp\z@=\z@ \ht\z@=\z@ \wdz@=\z@ \noexpand\boxz@}% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \noexpand\styledboxz@}} +\xydefcsname@{dir1{--}}{\dash@} +\xydefcsname@{dir2{--}}{\dash@ \double@\xydashh@} +\xydefcsname@{dir3{--}}{\dash@ \triple@\xydashh@} +\xyletcsnamecsname@{dir0{--}}{dir{}} +\xyletcsnamecsname@{dir{--}}{dir1{--}} +\xyletcsnamecsname@{dir{==}}{dir2{--}} +\xydef@\dash@{\line@ \wdz@=2\wdz@ \ht\z@=2\ht\z@ \dp\z@=2\dp\z@ + \multiply\D@c\tw@ \multiply\U@c\tw@ \multiply\L@c\tw@ \multiply\R@c\tw@ + \def\Connect@@{\straight@\dashedSpread@}} +\xydef@\dashedSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi + \advance\d@X\sd@X.5\A@ \advance\d@Y\sd@Y.5\B@ + \ifdim\z@<\d@X \advance\X@c.5\A@ \fi \advance\Y@c\sd@Y.5\B@} +\xydefcsname@{dir1{~~}}{\dashsquiggle@} +\xydefcsname@{dir2{~~}}{\dashsquiggle@ \double@\xybsqlh@} +\xydefcsname@{dir3{~~}}{\dashsquiggle@ \triple@\xybsqlh@} +\xyletcsnamecsname@{dir0{~~}}{dir{}} +\xyletcsnamecsname@{dir{~~}}{dir1{~~}} +\xydef@\dashsquiggle@{\squiggle@ + \multiply\D@c\tw@ \multiply\U@c\tw@ \multiply\L@c\tw@ \multiply\R@c\tw@ + \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \ht\z@=\U@c \dp\z@=\D@c + \def\Connect@@{\straight@\dashsquiggledSpread@}} +\xydef@\dashsquiggledSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi + \advance\X@c.5\A@ \advance\d@X.5\A@ \advance\Y@c.25\B@ \advance\d@Y.5\B@} +\xyletcsnamecsname@{dir1{..}}{dir{.}} +\xyletcsnamecsname@{dir2{..}}{dir2{.}} +\xyletcsnamecsname@{dir3{..}}{dir3{.}} +\xyletcsnamecsname@{dir{..}}{dir1{.}} +\xyletcsnamecsname@{dir{::}}{dir2{.}} +\xylet@\ctipEdge@=\czeroEdge@ +\xydefcsname@{dir1{>}}{\tip@} +\xydefcsname@{dir^{>}}{\atip@} +\xydefcsname@{dir_{>}}{\btip@} +\xyletcsnamecsname@{dir0{>}}{dir{}} +\xyletcsnamecsname@{dir{>}}{dir1{>}} +\xydefcsname@{dir1{<}}{\reverseDirection@\tip@} +\xydefcsname@{dir^{<}}{\reverseDirection@\btip@} +\xydefcsname@{dir_{<}}{\reverseDirection@\atip@} +\xyletcsnamecsname@{dir0{<}}{dir{}} +\xyletcsnamecsname@{dir{<}}{dir1{<}} +\xydef@\tip@{\tip@x\tip@@} +\xydef@\atip@{\tip@x\atip@@} +\xydef@\btip@{\tip@x\btip@@} +\xydef@\tip@x#1{#1\egroup + \ctipEdge@ + \def\Leftness@{.5}\def\Upness@{.5}% + \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}} +\xydef@\tip@@{\atip@@\btip@@} +\xydef@\atip@@{\xyatipfont\DirectionChar} +\xydef@\btip@@{\xybtipfont\DirectionChar} +\xydefcsname@{dir2{>}}{\Tip@} +\xydefcsname@{dir2{<}}{\reverseDirection@\Tip@} +\xydef@\Tip@{\kern2.5pt \vrule height2.5pt depth2.5pt width\z@ + \Tip@@ \kern2.5pt \egroup + \U@c=2.5pt \D@c=2.5pt \L@c=2.5pt \R@c=2.5pt \Edge@c={\circleEdge}% + \def\Leftness@{.5}\def\Upness@{.5}% + \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}} +\xydef@\Tip@@{\count@=\DirectionChar + \advance\count@-4 \ifnum\count@<\z@ \advance\count@128 \fi + \xyatipfont\char\count@ + \advance\count@ 8 \ifnum127<\count@ \advance\count@-128 \fi + \xybtipfont\char\count@} +\xydefcsname@{dir3{>}}{\Ttip@} +\xydefcsname@{dir3{<}}{\composite@{}{:(-1,0)\dir3{>}}} +\xydef@\Ttip@{\kern3.2pt \vrule height3.2pt depth3.2pt width\z@ + \Ttip@@ \kern3.2pt \egroup + \U@c=3.2pt \D@c=3.2pt \L@c=3.2pt \R@c=3.2pt \Edge@c={\circleEdge}% + \def\Leftness@{.5}\def\Upness@{.5}% + \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}} +\xydef@\Ttip@@{% + \setboxz@h\bgroup\reverseDirection@\line@ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ + \kern-\L@c \boxz@ \kern\L@c + {\vDirection@(1,-.31)\xydashl@ \xyatipfont\char\DirectionChar}% + {\vDirection@(1,+.31)\xydashl@ \xybtipfont\char\DirectionChar}} +\xydefcsname@{dir1{|}}{\stopper@} +\xydefcsname@{dir^{|}}{\aboveDirection@\xydashl@ + \shiftdir@\line@\z@ \pointlike@{}\xydashh@} +\xydefcsname@{dir_{|}}{\belowDirection@\xydashl@ + \shiftdir@\line@\z@ \pointlike@{}\xydashh@} +\xydefcsname@{dir2{|}}{\stopper@ \double@\xydashh@} +\xydefcsname@{dir3{|}}{\stopper@ \double@{2\xydashh@}} +\xyletcsnamecsname@{dir0{|}}{dir{}} +\xyletcsnamecsname@{dir{|}}{dir1{|}} +\xydef@\stopper@{\tip@x\stopper@@} +\xydef@\stopper@@{\setboxz@h{\count@=\SemiDirectionChar \advance\count@64 + \ifnum127<\count@ \advance\count@-128 \fi \xydashfont\char\count@\/}% + \setboxz@h{\kern-.5\wdz@ \dimen@=\sd@Y\cosDirection\xydashl@ + \ifnum\SemiDirectionChar=95 \dimen@=\sd@X\sd@Y\dimen@ \fi + \raise.5\dimen@\boxz@}% + \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} +\xydefcsname@{dir1{(}}{\hook@} +\xydefcsname@{dir^{(}}{\ahook@} +\xydefcsname@{dir_{(}}{\bhook@} +\xyletcsnamecsname@{dir0{(}}{dir{}} +\xyletcsnamecsname@{dir{(}}{dir1{(}} +\xydefcsname@{dir1{)}}{\reverseDirection@\hook@} +\xydefcsname@{dir^{)}}{\reverseDirection@\bhook@} +\xydefcsname@{dir_{)}}{\reverseDirection@\ahook@} +\xyletcsnamecsname@{dir0{)}}{dir{}} +\xyletcsnamecsname@{dir{)}}{dir1{)}} +\xydef@\hook@{\tip@x\hook@@} +\xydef@\hook@@{\setboxz@h{\xybsqlfont + \vDirection@(1,-1){.707107\xybsqll@}% + \hbox{\DirectionChar + \kern-\d@Y\raise\d@X\hbox{\count@=\DirectionChar \advance\count@-32 + \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}}}% + \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} +\xydef@\ahook@{\tip@x\ahook@@} +\xydef@\ahook@@{\setboxz@h{\xybsqlfont + \vDirection@(1,-1){.707107\xybsqll@}\kern-\d@X + \lower\d@Y\hbox{\DirectionChar + \kern-\d@Y\raise\d@X\hbox{\count@=\DirectionChar \advance\count@-32 + \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}}}% + \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} +\xydef@\bhook@{\tip@x\bhook@@} +\xydef@\bhook@@{\setboxz@h{\xybsqlfont + \vDirection@(-1,-1){.707107\xybsqll@}\DirectionChar + \kern\d@X\raise\d@Y\hbox{\count@=\DirectionChar \advance\count@-96 + \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}}% + \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} +\xydefcsname@{dir^{'}}{\reverseDirection@\bturn@} +\xydefcsname@{dir_{'}}{\reverseDirection@\aturn@} +\xydefcsname@{dir^{`}}{\aturn@} +\xydefcsname@{dir_{`}}{\bturn@} +\xydef@\aturn@{\tip@x\aturn@@} +\xydef@\aturn@@{\setboxz@h{\xybsqlfont + \vDirection@(1,-1){.707107\xybsqll@}\kern-\d@X + \lower\d@Y\hbox{\DirectionChar}}% + \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} +\xydef@\bturn@{\tip@x\bturn@@} +\xydef@\bturn@@{\setboxz@h{\xybsqlfont + \vDirection@(-1,-1){.707107\xybsqll@}\DirectionChar}% + \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} +\xydef@\newdir#1#{\newdir@{#1}} +\xydef@\newdir@#1#2#3{\xydefcsname@{dir#1{#2}}{\composite@{}{#3}}} +\xydef@\shiftdir@#1#2{% + \setbox\z@=\hbox\bgroup#1\relax + \setboxz@h{\dimen@ii=#2\relax + \dimen@=-\cosDirection\dimen@ii \advance\dimen@-\L@c + \kern\dimen@ \lower\sinDirection\dimen@ii\boxz@}% + \wdz@\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} +\xylet@\tipjot@=\jot +\xydefcsname@{dir1{>>}}{\shiftdir@\tip@\tipjot@ \tip@} +\xydefcsname@{dir^{>>}}{\shiftdir@\atip@\tipjot@ \atip@} +\xydefcsname@{dir_{>>}}{\shiftdir@\btip@\tipjot@ \btip@} +\xydefcsname@{dir2{>>}}{\composite@{}{h!/\tipjot@/\dir2{>}*\dir2{>}}} +\xydefcsname@{dir3{>>}}{\composite@{}{h!/\tipjot@/\dir3{>}*\dir3{>}}} +\xyletcsnamecsname@{dir0{>>}}{dir{}} +\xyletcsnamecsname@{dir{>>}}{dir1{>>}} +\xydefcsname@{dir1{<<}}{\reverseDirection@ \shiftdir@\tip@\tipjot@ \tip@} +\xydefcsname@{dir^{<<}}{\reverseDirection@ \shiftdir@\btip@\tipjot@ \btip@} +\xydefcsname@{dir_{<<}}{\reverseDirection@ \shiftdir@\atip@\tipjot@ \atip@} +\xydefcsname@{dir2{<<}}{\composite@{}{h!/-\tipjot@/\dir2{<}*\dir2{<}}} +\xydefcsname@{dir3{<<}}{\composite@{}{h!/-\tipjot@/\dir3{<}*\dir3{<}}} +\xyletcsnamecsname@{dir0{<<}}{dir{}} +\xyletcsnamecsname@{dir{<<}}{dir1{<<}} +\xydefcsname@{dir1{||}}{\shiftdir@\stopper@\xydashh@ \shiftdir@\stopper@\z@ + \pointlike@{}\jot} +\xydefcsname@{dir^{||}}{\shiftdir@{\aboveDirection@\xydashl@\line@}\xydashh@ + \shiftdir@{\aboveDirection@\xydashl@\line@}\z@ \pointlike@{}\jot} +\xydefcsname@{dir_{||}}{\shiftdir@{\belowDirection@\xydashl@\line@}\xydashh@ + \shiftdir@{\belowDirection@\xydashl@\line@}\z@ \pointlike@{}\jot} +\xydefcsname@{dir2{||}}{\shiftdir@\stopper@\xydashh@ \shiftdir@\stopper@\z@ + \pointlike@{}\jot \double@\xydashh@} +\xydefcsname@{dir3{||}}{\shiftdir@\stopper@\xydashh@ \shiftdir@\stopper@\z@ + \pointlike@{}\jot \double@{2\xydashh@}} +\xyletcsnamecsname@{dir0{||}}{dir{}} +\xyletcsnamecsname@{dir{||}}{dir1{||}} +\xydefcsname@{dir1{>|}}{\shiftdir@\stopper@\z@ \tip@} +\xydefcsname@{dir2{>|}}{\composite@{}{\dir2{>}*\dir2{|}}} +\xydefcsname@{dir3{>|}}{\composite@{}{\dir3{>}*\dir3{|}}} +\xyletcsnamecsname@{dir0{>|}}{dir{}} +\xyletcsnamecsname@{dir{>|}}{dir1{>|}} +\xydefcsname@{dir1{>>|}}{\shiftdir@\stopper@\z@ \shiftdir@\tip@\tipjot@ \tip@} +\xydefcsname@{dir2{>>|}}{\composite@{}{h!/\tipjot@/\dir2{>}*\dir2{>}*\dir2{|}}} +\xydefcsname@{dir3{>>|}}{\composite@{}{h!/\tipjot@/\dir3{>}*\dir3{>}*\dir3{|}}} +\xyletcsnamecsname@{dir0{>>|}}{dir{}} +\xyletcsnamecsname@{dir{>>|}}{dir1{>>|}} +\xydefcsname@{dir1{|<}}{\reverseDirection@ \shiftdir@\stopper@\z@ \tip@} +\xydefcsname@{dir2{|<}}{\reverseDirection@ \shiftdir@\stopper@\z@ \Tip@} +\xydefcsname@{dir3{|<}}{\reverseDirection@ \shiftdir@\stopper@\z@ \Ttip@} +\xyletcsnamecsname@{dir0{|<}}{dir{}} +\xyletcsnamecsname@{dir{|<}}{dir1{|<}} +\xydefcsname@{dir1{|<<}}{\reverseDirection@ + \shiftdir@\stopper@\z@ \shiftdir@\tip@\tipjot@ \tip@} +\xydefcsname@{dir2{|<<}}{% + \composite@{}{h!/-\tipjot@/\dir2{<}*\dir2{<}*\dir2{|}}} +\xydefcsname@{dir3{|<<}}{% + \composite@{}{h!/-\tipjot@/\dir3{<}*\dir3{<}*\dir3{|}}} +\xyletcsnamecsname@{dir0{|<<}}{dir{}} +\xyletcsnamecsname@{dir{|<<}}{dir1{|<<}} +\xydefcsname@{dir1{|-}}{\shiftdir@\stopper@\z@ + \shiftdir@\line@\z@ \pointlike@{}\jot} +\xydefcsname@{dir^{|-}}{\shiftdir@{\aboveDirection@\xydashl@ \line@}\z@ + \shiftdir@\line@\z@ \pointlike@{}\jot} +\xydefcsname@{dir_{|-}}{\shiftdir@{\belowDirection@\xydashl@ \line@}\z@ + \shiftdir@\line@\z@ \pointlike@{}\jot} +\xydefcsname@{dir2{|-}}{\shiftdir@\stopper@\z@ + \shiftdir@\line@\z@ \pointlike@{}\jot \double@\xydashh@} +\xydefcsname@{dir3{|-}}{\shiftdir@\stopper@\z@ + \shiftdir@\line@\z@ \pointlike@{}\jot \triple@\xydashh@} +\xyletcsnamecsname@{dir0{|-}}{dir{}} +\xyletcsnamecsname@{dir{|-}}{dir1{|-}} +\xyletcsnamecsname@{dir{|=}}{dir2{|-}} +\xydefcsname@{dir{+}}{% + \DN@##1{\composite@{}{##10\dir{|}*!C##10\dir{-}}}\addEQ@\next@} +\xyletcsnamecsname@{dir0{+}}{dir{}} +\xydefcsname@{dir{x}}{\vDirection@(1,1)\jot + \DN@##1{\composite@{}{##10\dir{|}*!C##10\dir{-}}}\addEQ@\next@} +\xyletcsnamecsname@{dir0{x}}{dir{}} +\xydefcsname@{dir{/}}{\vDirection@(1,-.3)\jot \stopper@} +\xyletcsnamecsname@{dir0{/}}{dir{}} +\xydefcsname@{dir{//}}{\vDirection@(1,-.3)\jot + \shiftdir@\stopper@\xydashh@ \stopper@} +\xyletcsnamecsname@{dir0{//}}{dir{}} +\xydefcsname@{dir{*}}{\solidpoint@} +\xydef@\solidpoint@{% + \pointlike@{\kern-1.8pt\lower1.8pt\hbox{$\scriptstyle\bullet$}}\jot} +\xyletcsnamecsname@{dir0{*}}{dir{}} +\xydefcsname@{dir{o}}{\hollowpoint@} +\xydef@\hollowpoint@{% + \pointlike@{\kern-1.8pt\lower1.8pt\hbox{$\scriptstyle\circ$}}\jot} +\xyletcsnamecsname@{dir0{o}}{dir{}} +\message{circles,} +\xydef@\cir#1#{\hbox\bgroup + \afterVECTORorEMPTY{\xy@@{\R@=\X@c}\cir@}{\xy@@{\R@=\R@c}\cir@}#1@} +\xydef@\cir@#1@#2{% + \DN@{#1}\ifx\next@\empty\else \xyerror@{illegal circle : must be + or }{}\fi + \afterCIRorDIAG{\xyFN@\cir@cir}{\xyFN@\cir@diag}#2@} +\xydef@\cir@cir{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\cir@cir}% + \else \ifx @\next \DN@ @{\cir@i}% + \else \xyerror@{illegal : must have form or + }{}% + \fi\fi \next@} +\xydef@\cir@diag{% + \DN@{\xyerror@{illegal : must have form or + }{}}% + \ifx @\next \ifnum\count@=8 + \DN@ @{\def\CIRin@@{0}\def\CIRorient@@{\CIRfull@}\def\CIRout@@{7}\cir@i}% + \fi\fi \next@} +\xydef@\cir@i{% + \ifnum\CIRin@@=8 \xyerror@{incomplete specification}{% +The you specified as is not sufficiently specific.}% + \def\CIRin@@{0}\fi + \ifdim\R@<.5\p@ \R@=\z@ \zerodot + \else \CIRorient@@ \cirbuild@ \fi + \L@c=\R@ \R@c=\R@ \D@c=\R@ \U@c=\R@ \def\Leftness@{.5}\def\Upness@{.5}% + \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\relax}% + \Edge@c={\circleEdge}\OBJECT@x} +\xydef@\CIRin@@{3} +\xydef@\CIRout@@{3} +\xylet@\CIRorient@@=\empty +\xydef@\afterCIRorDIAG#1#2{\def\afterCIR@{#1}\def\afterCIRDIAG@{#2}\xyFN@\CIR@} +\xylet@\afterCIR@=\empty +\xylet@\afterCIRDIAG@=\empty +\xydef@\CIR@{\count@=8 \afterDIAG{\edef\CIRin@@{\the\count@}\xyFN@\CIR@@}} +\xydef@\CIR@@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\CIR@@}% + \else\ifx ^\next + \DN@ ^{\def\CIRorient@@{\CIRacw@}% + \afterDIAG{\edef\CIRout@@{\the\count@}\afterCIR@}}% + \else\ifx _\next + \DN@_{\def\CIRorient@@{\CIRcw@}% + \afterDIAG{\edef\CIRout@@{\the\count@}\afterCIR@}}% + \else + \DN@{\def\CIRorient@@{\relax}\afterCIRDIAG@}% + \fi\fi\fi \next@} +\xylet@\CIRtest@@=\relax +\xydef@\CIRlo@@{0} +\xydef@\CIRhi@@{0} +\xydef@\CIRfull@{\def\CIRtest@@##1##2{##2}} +\xydef@\cirbuild@{\cirrestrict@@ \multiply\count@8 + \circhar@0\circhar@7\kern\dimen@ + \circhar@1\circhar@6\kern\dimen@ + \circhar@2\circhar@5\kern\dimen@ + \circhar@3\circhar@4\kern\dimen@} +\xydef@\circhar@#1{% + \setboxz@h{\circhar@@{#1}}\dimen@=\wdz@ \wdz@=\z@ \ht\z@=\R@ \dp\z@=\R@ + \CIRtest@@#1{\styledboxz@}\setbox\z@=\copy\voidb@x} +\xydef@\circhar@@#1{{\xycircfont \advance\count@#1\relax \char\count@}} +\xydef@\cirrestrict@@{\begingroup \dimen@=\R@ + \setboxz@h{\xycircfont\char\z@\char\@ne}\A@=\wdz@ + \ifdim\R@<8\A@ \count@=\dimen@ \divide\count@\A@ \advance\count@\m@ne + \else\ifdim\R@<16\A@ \count@=\dimen@ + \dimen@=2\A@ \divide\count@\dimen@ \advance\count@3 + \else\ifdim\R@<32\A@ \count@=\dimen@ + \dimen@=4\A@ \divide\count@\dimen@ \advance\count@7 + \else \count@=15 \fi\fi\fi + \R@=\A@ + \ifnum\count@<8 \multiply\R@\count@ \advance\R@\A@ + \else\ifnum\count@<12 \multiply\R@\count@ \multiply\R@\tw@ \advance\R@-6\A@ + \else\ifnum\count@<16 \multiply\R@\count@ \multiply\R@ 4 \advance\R@-28\A@ + \else \multiply\R@ 32 \fi\fi\fi + \edef\@tmp{\endgroup \R@=\the\R@ \count@=\the\count@}\@tmp} +\xydef@\CIRacw@{\count@@=\CIRin@@ \count@=\CIRout@@ + \ifnum\count@=8 \count@=\count@@ + \ifnum\count@<6 \advance\count@\tw@ \else \advance\count@-6 \fi \fi + \ifnum\count@@<\@ne \advance\count@@7 \else \advance\count@@\m@ne \fi + \ifnum\count@<\@ne \advance\count@7 \else \advance\count@\m@ne \fi + \ifnum\count@@>\count@ \let\CIRtest@@=\CIRtest@outside + \edef\CIRlo@@{\the\count@}\edef\CIRhi@@{\the\count@@}% + \else \let\CIRtest@@=\CIRtest@inside + \edef\CIRlo@@{\the\count@@}\edef\CIRhi@@{\the\count@}% + \fi} +\xydef@\CIRcw@{\count@@=\CIRin@@ \count@=\CIRout@@ + \ifnum\count@=8 \count@=\count@@ + \ifnum\count@>\@ne \advance\count@-\tw@ \else \advance\count@6 \fi \fi + \ifnum\count@@<5 \advance\count@@\thr@@ \else \advance\count@@-5 \fi + \ifnum\count@<5 \advance\count@\thr@@ \else \advance\count@-5 \fi + \ifnum\count@@<\count@ \let\CIRtest@@=\CIRtest@outside + \edef\CIRlo@@{\the\count@@}\edef\CIRhi@@{\the\count@}% + \else \let\CIRtest@@=\CIRtest@inside + \edef\CIRlo@@{\the\count@}\edef\CIRhi@@{\the\count@@}% + \fi} +\xydef@\CIRtest@inside#1#2{\let\next@=\relax + \ifnum\CIRlo@@>#1\else \ifnum#1<\CIRhi@@\DN@{#2}\fi\fi \next@} +\xydef@\CIRtest@outside#1#2{\let\next@=\relax + \ifnum\CIRlo@@>#1\DN@{#2}\else \ifnum#1<\CIRhi@@\else\DN@{#2}\fi\fi \next@} +\message{text;} +\xydef@\txt{\hbox\bgroup \xyFN@\txt@} +\xydef@\txt@{% + \addLT@\ifx\next \addGT@{\addLT@\DN@##1}{\A@=##1\txt@i}% + \else \DN@{\A@=\maxdimen \txt@i}\fi \next@} +\xydef@\txt@i#1#{% + \setboxz@h{#1\mathstrut}\dimen@=\ht\z@ \advance\dimen@\dp\z@ + \baselineskip=1.1\dimen@ \lineskip=.2\dimen@ \lineskiplimit=\lineskip + \def\txtline@@##1{\txtline@{#1}{##1}}\object@\txt@ii} +\xylet@\txtline@@=\eat@ +\xydef@\txtline@#1#2{\relax\setboxz@h{#1{\ignorespaces #2\unskip}}% + \ifdim\A@<\wdz@ \setboxz@h{\hsize=\A@ + \leftskip=0pt plus4em \rightskip=\leftskip + \parfillskip=0pt \parindent=0pt + \spaceskip=.3333em \xspaceskip=.5em + \pretolerance=9999 \tolerance=9999 + \hyphenpenalty=9999 \exhyphenpenalty=9999 + \vbox{#1\noindent\ignorespaces #2\unskip}}% + \else\ifdim\A@<\maxdimen\setboxz@h to\A@{\hfil\boxz@\hfil}\fi\fi + \boxz@} +\xydef@\txt@ii#1{\vbox{% + \let\\=\cr + \tabskip=\z@skip \halign{\relax\hfil\txtline@@{##}\hfil\cr\leavevmode#1\crcr}}} +\message{options;} +\xylet@\xyoption@@=\relax +\xydef@\xyoption#1{\DN@{#1}\edef\next@{\codeof\next@}% + \csname xyeveryrequest@\next@ @\endcsname + \xyinputorelse@{xy#1}{\xyoption@truncated#1@@@@@@@@@,#1@}% + \def\xyoption@@{#1}\edef\xyoption@@{\codeof\xyoption@@} + \expandafter\let\expandafter\next@\csname xy\xyoption@@ version\endcsname + \expandafter\let\csname xy\xyoption@@ loaded\endcsname=\next@ + \runxywith@ \ignorespaces} +\xydef@\xyoption@truncated#1#2#3#4#5#6#7@#8,#9@{% + \DN@{#7}\ifx\next@\empty \DN@##1##2{##2}\else\let\next@=\xyinputorelse@ \fi + \next@{xy#1#2#3#4#5#6}% + {\DN@{#1#2#3#4#5#6}\edef\next@{\codeof\next@}% + \xyerror@{No `\next@' option}{% +Your \xyoption{#9} request could not be granted: the required^^J% +file `xy#9.tex' could not be located. Please make sure that it is^^J% +properly installed before continuing.}}} +\xydef@\xyrequire#1{\DN@{#1}\edef\next@{\codeof\next@}% + \csname xyeveryrequest@\next@ @\endcsname + \expandafter\let\expandafter\next@\csname xy\codeof\next@ loaded\endcsname + \ifx \next@\relax \DN@{\xyoption{#1}}\else \DN@{\ignorespaces}\fi \next@} +\xylet@\xywith@@=\empty +\xydef@\runxywith@{\let\xywithdo@@=\xywithtest@ \xywith@@} +\xydef@\xywithoption#1#2{\DN@{#1}\edef\next@{\codeof\next@}% + \expandafter\let\expandafter\nextii@\csname xy\next@ loaded\endcsname + \ifx \nextii@\relax + \expandafter\def\expandafter\xywith@@\expandafter{\xywith@@ + \xywithdo@@{#1}{#2}}% + \else \expandafter\xywithrun@\expandafter{\next@}{#2}\fi} +\xydef@\xywithtest@#1#2{\DN@{#1}\edef\next@{\codeof\next@}% + \ifx\next@\xyoption@@ \expandafter\xywithrun@\expandafter{\next@}{#2}\fi} +\xydef@\xywithrun@#1#2{\csname xyeverywithoption@#1@\endcsname #2} +\xydef@\xyevery@#1#2#3{\DN@{#2}\edef\next@{\codeof\next@}% + \expandafter\ifx\csname xyevery#1@\next@ @\endcsname\relax + \expandafter\let\csname xyevery#1@\next@ @\endcsname=\empty \fi + \DNii@##1{\expandafter\def\expandafter##1\expandafter{##1#3}}% + \expandafter\nextii@\csname xyevery#1@\next@ @\endcsname} +\xydef@\xyeveryrequest{\xyevery@{request}} +\xydef@\xyeverywithoption{\xyevery@{withoption}} +\xydef@\xyprovide#1#2#3#4#5#6{% + \def\xyoption@@{#1}\edef\xyoption@@{\codeof\xyoption@@}\edef\next@{#3}% + \message{ Xy-pic option: #2 v.\next@}% + \expandafter\let\expandafter\nextii@\csname xy\xyoption@@ loaded\endcsname + \ifx \next@\nextii@ \message{not reloaded}\endinput + \else + \ifx \nextii@\relax\else \xyerror@{Option `\xyoption@@' version mismatch}{% +You previously loaded, or the format has preloaded, a different version^^J% +of this option. Just continue to try to load this version instead (and^^J% +be prepared for a lot of warnings about redefinitions).}% + \fi + \expandafter\let\csname xy\xyoption@@ version\endcsname=\next@ + \expandafter\let\expandafter\xyenddocmode@\csname DOCMODE\endcsname + \expandafter\let\csname DOCMODE\endcsname\xyprovidedocmode@ + \xycatcodes + \fi \ignorespaces} +\xydef@\xyendinput{\expandafter\let\csname DOCMODE\endcsname=\xyenddocmode@ + \message{loaded}\xyuncatcodes\endinput} +\expandafter\xylet@\expandafter\xyprovidedocmode@\csname DOCMODE\endcsname +\xylet@\xyenddocmode@=\relax +\xydef@\xydriversloaded@none{\do{unload}} +\xylet@\xydriversloaded@@=\xydriversloaded@none +\xylet@\xydriversselected@@=\empty +\xylet@\xydriver@unload@support@@=\empty +\xydef@\selectdriver@#1{\DN@{#1}\edef\next@{\codeof\next@}% + \expandafter\selectdriver@@\expandafter{\next@}} +\xydef@\selectdriver@single#1{\xysetup@@{\def\xydriversselected@@{\do{#1}}% + \xyLoadDrivers@}\let\selectdriver@@=\changedriver@single} +\xydef@\changedriver@single#1{\xysetup@@{\def\xydriversselected@@{\do{#1}}% + \xyReloadDrivers@}} +\xydef@\selectdriver@multiple#1{\expandafter\xysetup@@\expandafter{% + \expandafter\def\expandafter\xydriversselected@@\expandafter{% + \xydriversselected@@ \do{#1}}% + \let\do=\activatedriver@ \xydriversselected@@}} +\xydef@\UseSingleDriver{\let\selectdriver@@=\selectdriver@single} +\xydef@\MultipleDrivers{\let\selectdriver@@=\selectdriver@multiple} +\xydef@\xyLoadDrivers@{\let\do=\activatedriver@ \xydriversselected@@} +\xydef@\xyReloadDrivers@{\activatedriver@{unload}\xyLoadDrivers@} +\xylet@\xyReloadDrivers=\xyReloadDrivers@ +\xydef@\activatedriver@#1{% + \let\doii=\activatedriversupport@ \csname xydriver@#1@support@@\endcsname} +\xydef@\activatedriversupport@#1#2{% + \expandafter\ifx\csname xy#1loaded\endcsname\relax\DN@{}% + \else\DN@{#2}\fi \next@} +\UseSingleDriver +\xydef@\xyselectoptionsupport@{\let\do=\activatedriver@ \xydriversselected@@} +\xydef@\xyShowDrivers{{\W@{Loaded:}\let\do=\doShow \xydriversloaded@@ + \let\next@=\empty + \def\do##1{\ifx\next@\empty \DN@{##1}% + \else \expandafter\DN@\expandafter{\next@, ##1}\fi}% + \xydriversselected@@\W@{Selected: \next@.}}} +\def\doShow#1{\let\next@=\empty + \def\doii##1##2{\ifx\next@\empty \DN@{##1}% + \else \expandafter\DN@\expandafter{\next@, ##1}\fi}% + \csname xydriver@#1@support@@\endcsname + \W@{ #1 supports \next@.}} +\xydef@\newdriver#1{% + \def\nextiii@##1{% + \expandafter\def\expandafter\xydriversloaded@@ + \expandafter{\xydriversloaded@@\do{##1}}% + \expandafter\let\csname xydriver@\xyoption@@ @support@@\endcsname=\empty}% + \def\do##1{\DNii@{##1}\ifx\xyoption@@\nextii@ \let\nextiii@=\eat@ \fi}% + \xydriversloaded@@ \expandafter\nextiii@\expandafter{\xyoption@@}% + #1\relax + \DN@##1{\xywithoption{##1}{% + \selectdriver@{##1}\xyeveryrequest{##1}{\selectdriver@{##1}}}}% + \expandafter\next@\expandafter{\xyoption@@}\ignorespaces} +\xydef@\xyaddsupport{\expandafter\xyadddriversupport@\expandafter{\xyoption@@}} +\xydef@\xyaddunsupport{\xyadddriversupport@{unload}} +\xydef@\xyadddriversupport@#1#2#3{% + \DNii@{#1}\edef\nextii@{\codeof\nextii@}% + \def\nextiii@{#2}\edef\nextiii@{\codeof\nextiii@}% +\def\next{\xybug@{ \nextii@\space not loaded}}% +\def\do##1{\DN@{##1}\edef\next@{\codeof\next@}% + \ifx\next@\nextii@ \let\next=\relax \fi}\xydriversloaded@@ \next +\def\next{\xybug@{ \nextii@\space already supports \nextiii@}}% +\def\doii##1##2{\DN@{##1}\edef\next@{\codeof\next@}% + \ifx\next@\nextiii@ \let\next=\relax \fi}\xydriversloaded@@ \next + \DN@##1##2{\ifx##1\relax \let##1=\empty \fi + \expandafter\def\expandafter##1\expandafter{##1\doii{##2}{#3}}}% + \expandafter\expandafter\expandafter\next@ + \expandafter\expandafter\csname xydriver@\nextii@ @support@@\endcsname + \expandafter{\nextiii@}% + \DN@##1{\expandafter\xyeverywithoption\expandafter{\nextiii@}{% + \xytestforsupport@{##1}}}% + \expandafter\next@\expandafter{\nextii@}\xydriversloaded@@ + \ignorespaces} +\xydef@\xytestforsupport@#1{\def\do##1{\DN@{##1}\DNii@{#1}% + \ifx\next@\nextii@ \expandafter\xyselectoptionsupport@ \fi}} +\xynew@{if}\ifunsupportwarnings@ +\xydef@\xyunsupportwarning@#1#2{{% + \DN@{#1}\edef\next@{\codeof\next@} + \expandafter\ifx\csname xywarn@unload@\next@ @\endcsname\relax + \expandafter\gdef\csname xywarn@unload@\next@ @\endcsname{}% + \ifunsupportwarnings@ \xyclosedown@@\xyunsupportwarnings@@ \fi + \global\unsupportwarnings@true + \expandafter\gdef\expandafter\xyunsupportwarnings@@\expandafter{% + \xyunsupportwarnings@@ \W@{ #2.}}% + \W@{}% + \W@{Xy-pic Warning: `\next@' reproduction is NOT EXACT\xytracelineno@:}% + \W@{ #2.}% + \W@{}% + \fi}} +\xydef@\xyunsupportwarnings@@{\W@{}% + \W@{Xy-pic Warning: The produced DVI file is NOT EXACT:}} +\xynew@{if}\ifsupportwarnings@ +\xydef@\xysupportwarning@#1#2{{% + \DN@{#1}\edef\next@{\codeof\next@}\DNii@{#2}\edef\nextii@{\codeof\nextii@}% + \expandafter\ifx\csname xywarn@\next@ @\nextii@ @\endcsname\relax + \expandafter\gdef\csname xywarn@\next@ @\nextii@ @\endcsname{}% + \ifsupportwarnings@ \xyclosedown@@\xysupportwarnings@@ \fi + \global\supportwarnings@true + \expandafter\gdef\expandafter\xysupportwarnings@@\expandafter{% + \xysupportwarnings@@ \driverextensioncomplain@{#1}{#2}}% + \W@{}% + \W@{Xy-pic Warning: The produced DVI file is NOT PORTABLE\xytracelineno@:}% + \driverextensioncomplain@{#1}{#2}% + \W@{}% + \fi}} +\xydef@\xysupportwarnings@@{% + \W@{Xy-pic Warning: The produced DVI file is NOT PORTABLE:}} +\xydef@\driverextensioncomplain@#1#2{% + \DN@{#1}\edef\next@{\codeof\next@}\DNii@{#2}\edef\nextii@{\codeof\nextii@}% + \W@{ It contains `\next@' \string\special s for the `\nextii@' + extension.}} +\xydef@\dvimessage@#1#2{\xysupportwarning@{#1}{#2}} +\xynew@{if}\ifxydrivernoloads@ +\xydef@\xydrivernoload@#1{\xyerror@{Could not load xy#1.tex}{}% + \xydrivernoloads@true} +\xydef@\xydriverfail@#1{\xyerror@{Sorry, #1 not supported.}{}} +\xydef@\xyunload@#1{\xywarning@{Unloading #1.}} +\message{algorithms: directions,} +\xydef@\DirectionfromtheDirection@{\noexpand\Direction=\the\Direction + \noexpand\d@X=\the\d@X \noexpand\d@Y=\the\d@Y + \def\noexpand\sd@X{\sd@X}\def\noexpand\sd@Y{\sd@Y}% + \noexpand\K@dXdY=\the\K@dXdY \noexpand\K@dYdX=\the\K@dYdX + \chardef\noexpand\DirectionChar=\the\DirectionChar + \chardef\noexpand\SemiDirectionChar=\the\SemiDirectionChar + \def\noexpand\cosDirection{\cosDirection}% + \def\noexpand\sinDirection{\sinDirection}% + \noexpand\resetupDirection@} +\xydef@\Directiontest@@#1#2{#2} +\xydef@\setupDirection@{% + \d@X=\X@c\advance\d@X-\X@p \d@Y=\Y@c\advance\d@Y-\Y@p + \Directiontest@@\relax\setupDirection@i} +\xydef@\setupDirection@i{\DN@{\setupDirection@ii}% + \ifdim\d@X=\d@Y + \ifdim\zz@\d@Y \DN@{}% + \else\ifdim\d@X<\z@ \DN@{\dlDirection@{-1.4142\d@X}}% + \else \DN@{\urDirection@{1.4142\d@X}}\fi\fi + \else\ifdim\d@X<\d@Y + \ifdim\zz@\d@X \DN@{\uDirection@\d@Y}% + \else\ifdim\zz@\d@Y \DN@{\lDirection@{-\d@X}}% + \else\ifdim-\d@X=\d@Y \DN@{\ulDirection@{-1.4142\d@X}}\fi\fi\fi + \else + \ifdim\zz@\d@X \DN@{\dDirection@{-\d@Y}}% + \else\ifdim\zz@\d@Y \DN@{\rDirection@\d@X}% + \else\ifdim\d@X=-\d@Y \DN@{\drDirection@{1.4142\d@X}}\fi\fi\fi + \fi\fi \next@} +\xydef@\dlDirection@{\Direction=\z@ + \def\cosDirection{-.7071}\def\sinDirection{-.7071}\def\sd@X{-}\def\sd@Y{-}% + \chardef\DirectionChar=127\relax\chardef\SemiDirectionChar=127\relax + \K@dXdY=1\K@ \K@dYdX=1\K@ \fixedDirection@} +\xydef@\dDirection@{\Direction=\K@ + \def\cosDirection{0}\def\sinDirection{-1}\def\sd@Y{-}% + \edef\sd@X{\ifdim\X@c<\X@p-\else+\fi}% + \chardef\DirectionChar=15\relax\chardef\SemiDirectionChar=31\relax + \K@dXdY=\z@ \K@dYdX=\KK@\K@ \fixedDirection@} +\xydef@\drDirection@{\dimen@ii=2\K@ \Direction=\dimen@ii + \def\cosDirection{+.7071}\def\sinDirection{-.7071}\def\sd@X{+}\def\sd@Y{-}% + \chardef\DirectionChar=31\relax\chardef\SemiDirectionChar=63\relax + \K@dXdY=-1\K@ \K@dYdX=-1\K@ \fixedDirection@} +\xydef@\rDirection@{\dimen@ii=3\K@ \Direction=\dimen@ii + \def\cosDirection{+1}\def\sinDirection{0}\def\sd@X{+}% + \edef\sd@Y{\ifdim\Y@c<\Y@p-\else+\fi}% + \chardef\DirectionChar=47\relax\chardef\SemiDirectionChar=95\relax + \K@dXdY=\KK@\K@ \K@dYdX=\z@ \fixedDirection@} +\xydef@\urDirection@{\dimen@ii=4\K@ \Direction=\dimen@ii + \def\cosDirection{+.7071}\def\sinDirection{+.7071}\def\sd@X{+}\def\sd@Y{+}% + \chardef\DirectionChar=63\relax\chardef\SemiDirectionChar=127\relax + \K@dXdY=1\K@ \K@dYdX=1\K@ \fixedDirection@} +\xydef@\uDirection@{\dimen@ii=-3\K@ \Direction=\dimen@ii + \def\cosDirection{0}\def\sinDirection{+1}\def\sd@Y{+}% + \edef\sd@X{\ifdim\X@c<\X@p-\else+\fi}% + \chardef\DirectionChar=79\relax\chardef\SemiDirectionChar=31\relax + \K@dXdY=\z@ \K@dYdX=\KK@\K@ \fixedDirection@} +\xydef@\ulDirection@{\dimen@ii=-2\K@ \Direction=\dimen@ii + \def\cosDirection{-.7071}\def\sinDirection{+.7071}\def\sd@X{-}\def\sd@Y{+}% + \chardef\DirectionChar=95\relax\chardef\SemiDirectionChar=63\relax + \K@dXdY=-1\K@ \K@dYdX=-1\K@ \fixedDirection@} +\xydef@\lDirection@{\Direction=-\K@ + \def\cosDirection{-1}\def\sinDirection{0}\def\sd@X{-}% + \edef\sd@Y{\ifdim\Y@c<\Y@p-\else+\fi}% + \chardef\DirectionChar=111\relax\chardef\SemiDirectionChar=95\relax + \K@dXdY=\KK@\K@ \K@dYdX=\z@ \fixedDirection@} +\xydef@\fixedDirection@#1{\dimen@ii=#1\relax + \d@X=\cosDirection\dimen@ii \d@Y=\sinDirection\dimen@ii + \resetupDirection@} +\xydef@\setupDirection@ii{% + \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi + \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi + \K@dXdY=\sd@X\d@X \ifdim\K@dXdY<500pt \multiply\K@dXdY\KK@ \fi + \dimen@=\sd@Y\d@Y + \advance\dimen@\ifdim\dimen@<\z@-\fi.5\KK@ \divide\dimen@\KK@ + \ifdim\dimen@=\z@\else + \advance\K@dXdY by.5\dimen@\relax \divide\K@dXdY\dimen@ + \fi \K@dXdY=\sd@X\sd@Y\K@dXdY + \K@dYdX=\sd@Y\d@Y \ifdim\K@dYdX<500pt \multiply\K@dYdX\KK@ \fi + \dimen@=\sd@X\d@X + \advance\dimen@\ifdim\dimen@<\z@-\fi.5\KK@ \divide\dimen@\KK@ + \ifdim\dimen@=\z@\else + \advance\K@dYdX by.5\dimen@\relax \divide\K@dYdX\dimen@ + \fi \K@dYdX=\sd@X\sd@Y\K@dYdX + \Direction=\maxdimen + \ifnum\K@dXdY<-\K@ \else \ifnum\K@<\K@dXdY \else + \ifdim \d@Y<\z@ + \Direction=\K@ \advance\Direction-\K@dXdY + \else + \Direction=\K@ \multiply\Direction-\thr@@ \advance\Direction-\K@dXdY + \fi\fi\fi + \ifnum-\K@<\K@dYdX \ifnum\K@dYdX<\K@ + \ifdim \d@X<\z@ + \Direction=-\K@ \advance\Direction\K@dYdX + \else + \Direction=\K@ \multiply\Direction\thr@@ \advance\Direction\K@dYdX + \fi\fi\fi + \ifnum\Direction=\maxdimen + \Direction=\K@dYdX \advance\Direction-\K@dXdY + \advance\Direction\ifnum\Direction<\z@-\fi\@ne \divide\Direction\tw@ + \ifnum\K@dXdY<\z@ \advance\Direction\K@ \advance\Direction\K@ + \else \advance\Direction-\K@ \advance\Direction-\K@ \fi + \fi + \imposeDirection@i + \resetupDirection@ + } +\xydef@\imposeDirection@{\count@@=\Direction + \loop@\ifnum\count@@>4096 \advance\count@@-8192 \repeat@ + \loop@\ifnum\count@@<-4096 \advance\count@@8192 \repeat@ + \def\sd@X{+}\ifnum\count@@<\K@ \relax + \ifnum\count@@>-3072 \def\sd@X{-}\fi\fi + \def\sd@Y{+}\ifnum\count@@<3072 \relax + \ifnum\count@@>-\K@ \relax\def\sd@Y{-}\fi\fi + \imposeDirection@i + \d@X=\cosDirection\xydashl@ \d@Y=\sinDirection\xydashl@ + \resetupDirection@} +\xydef@\imposeDirection@i{% + \count@@=\K@ \multiply\count@@ by8 \advance\count@@\Direction + \count@=\count@@ \advance\count@\KK@ \divide\count@64 \advance\count@\m@ne + \loop@\ifnum127<\count@ \advance\count@-128 \repeat@ + \chardef\DirectionChar\count@ + \advance\count@@16 \divide\count@@\KK@ \advance\count@@\m@ne + \loop@\ifnum127<\count@@ \advance\count@@-128 \repeat@ + \chardef\SemiDirectionChar\count@@ + \setbox8=\hbox{\xydashfont\SemiDirectionChar\/}% + \quotient@@\cosDirection{\sd@X\wd8}\xydashl@ + \setbox8=\hbox{\xydashfont\count@=\SemiDirectionChar\advance\count@-64 + \ifnum\count@<\z@ \advance\count@128 \fi \char\count@\/}% + \quotient@@\sinDirection{\sd@Y\wd8}\xydashl@} +\xydef@\getxyDirection@#1{\xy@@\bgroup\xy@@ix@{#1}% + \xy@@{\expandafter\POS\the\toks9\relax\setupDirection@ + \edef\next@{\egroup \Direction=\the\Direction}\next@ \imposeDirection@ }} +\xydef@\reverseDirection@{% + \d@X=-\d@X \d@Y=-\d@Y + \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi + \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi + \dimen@=4\K@ \ifnum\Direction<\z@ \advance\Direction\dimen@ + \else \advance\Direction-\dimen@ \fi + \count@=\DirectionChar \ifnum\count@<64 \advance\count@64 + \else \advance\count@-64 \fi \chardef\DirectionChar=\count@ + \edef\cosDirection{\if-\cosDirection\else-\cosDirection\fi}% + \edef\sinDirection{\if-\sinDirection\else-\sinDirection\fi}% + \resetupDirection@} +\xydef@\aboveDirection@#1{% + \dimen@=\d@X \d@X=-\d@Y \d@Y=\dimen@ + \dimen@=\K@dXdY \K@dXdY=-\K@dYdX \K@dYdX=-\dimen@ + \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi + \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi + \dimen@=2\K@ \ifdim 1\Direction<\dimen@\else \dimen@=-6\K@ \fi + \advance\Direction\dimen@ + \count@=\DirectionChar \ifnum\count@<96 \advance\count@32 + \else \advance\count@-96 \fi \chardef\DirectionChar=\count@ + \count@=\SemiDirectionChar \ifnum\count@<64 \advance\count@64 + \else \advance\count@-64 \fi \chardef\SemiDirectionChar=\count@ + \let\tmp@=\cosDirection + \edef\cosDirection{\if-\sinDirection\else-\sinDirection\fi}% + \let\sinDirection=\tmp@ + \dimen@=#1\relax \d@X=\cosDirection\dimen@ \d@Y=\sinDirection\dimen@ + \resetupDirection@} +\xydef@\belowDirection@#1{% + \dimen@=\d@X \d@X=\d@Y \d@Y=-\dimen@ + \dimen@=\K@dXdY \K@dXdY=-\K@dYdX \K@dYdX=-\dimen@ + \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi + \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi + \dimen@=-2\K@\ifdim 1\Direction<\dimen@\dimen@=6\K@\fi + \advance\Direction\dimen@ + \count@=\DirectionChar \ifnum\count@<32 \advance\count@96 + \else \advance\count@-32 \fi \chardef\DirectionChar=\count@ + \count@=\SemiDirectionChar \ifnum\count@<64 \advance\count@64 + \else \advance\count@-64 \fi \chardef\SemiDirectionChar=\count@ + \let\tmp@=\sinDirection + \edef\sinDirection{\if-\cosDirection\else-\cosDirection\fi}% + \let\cosDirection=\tmp@ + \dimen@=#1\relax \d@X=\cosDirection\dimen@ \d@Y=\sinDirection\dimen@ + \resetupDirection@} +\xydef@\vDirection@(#1,#2)#3{\dimen@ii=#3\relax + \dimen@=#1\dimen@ii \dimen@ii=#2\dimen@ii + \d@X=\cosDirection\dimen@ \advance\d@X-\sinDirection\dimen@ii + \d@Y=\sinDirection\dimen@ \advance\d@Y \cosDirection\dimen@ii + \X@p=\X@c \advance\X@p-\d@X \Y@p=\Y@c \advance\Y@p-\d@Y + \setupDirection@\ignorespaces} +\xydef@\resetDirection@{% + \d@X=\X@c\advance\d@X-\X@p \d@Y=\Y@c\advance\d@Y-\Y@p + \let\next@=\resetupDirection@ + \ifdim\sd@X\d@X<\z@ \let\next@=\setupDirection@i \fi + \ifdim\sd@Y\d@Y<\z@ \let\next@=\setupDirection@i \fi + \next@} +\xydef@\resetupDirection@{% + \edef\Directiontest@@##1##2{\noexpand\DN@{##2}% + \noexpand\ifdim\noexpand\d@X=\the\d@X\relax + \noexpand\ifdim\noexpand\d@Y=\the\d@Y\relax \noexpand\DN@{##1}% + \noexpand\fi\noexpand\fi \noexpand\next@}} +\xydef@\unsetupDirection@{\def\Directiontest@@##1##2{##2}} +\uDirection@\xydashl@ +\message{edges,} +\xynew@{if}\ifInside@ +\xydef@\zeroEdge#1{% + \ifcase#1\relax \or \Inside@false \or \dimen@=\z@ + \or \else \Edge@c={\rectangleEdge}\fi} +\xydef@\circleEdge#1{\ifcase#1\expandafter\circleEdge@ + \or \expandafter\circleUnder@ \or \dimen@=\R@c + \or \expandafter\circleProp@ \or \expandafter\circleInner@ + \else \expandafter\circleOuter@ \fi} +\xydef@\circleEdge@{\DN@{\ellipseEdge@}% + \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax + \ifdim\R@c=\U@c\DN@{\circlecentredEdge@}% + \else\DN@{\ellipsecentredEdge@}\fi + \fi\fi \next@} +\xydef@\circleProp@{\DN@{\reverseDirection@\ellipseEdge@}% + \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax + \ifdim\R@c=\U@c\DN@{\reverseDirection@\circlecentredEdge@}% + \else\DN@{\reverseDirection@\ellipsecentredEdge@}\fi + \fi\fi \next@} +\xydef@\circleUnder@{\Inside@false + \ifdim\X@p=\X@c \relax \ifdim\Y@p=\Y@c \Inside@true \fi \fi + \ifInside@ \else \expandafter \circleCentre@ \fi} +\xydef@\circleCentre@{{% + \ifdim\L@c=\R@c \relax\else + \dimen@=\R@c\advance\dimen@-\L@c \divide\dimen@\tw@ + \advance\X@c\dimen@ \advance\R@c-\dimen@ \fi + \d@X=\X@c \advance\d@X-\X@p \d@X=\ifdim\d@X<\z@-\fi\d@X + \ifdim\U@c=\D@c\relax \else + \dimen@=\U@c\advance\dimen@-\D@c \divide\dimen@\tw@ + \advance\Y@c\dimen@ \advance\U@c-\dimen@ \fi + \d@Y=\Y@c \advance\d@Y-\Y@p \d@Y=\ifdim\d@Y<\z@-\fi\d@Y + \DN@{}\ifdim\d@X>\R@c \relax \else \ifdim\d@Y>\U@c \relax + \else \ifdim\U@c=\R@c \DN@{\circlecentredUnder@}% + \else \DN@{\ellipsecentredUnder@}\fi + \fi\fi \next@}} +\xydef@\circleInner@{\DN@{\ellipseInner@}% + \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax + \ifdim\R@c=\U@c\DN@{\circlecentredInner@}% + \else\DN@{\ellipsecentredInner@}\fi + \fi\fi \next@} +\xydef@\circleOuter@{\DN@{\ellipseOuter@}% + \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax + \ifdim\R@c=\U@c\DN@{\circlecentredOuter@}% + \else\DN@{\ellipsecentredOuter@}\fi + \fi\fi \next@} +\xydef@\circlecentredEdge@{% + \dimen@=-\cosDirection\R@c \advance\X@c\dimen@ + \dimen@=-\sinDirection\R@c \advance\Y@c\dimen@} +\xydef@\circlecentredUnder@{% + \loop\ifdim\R@c>100\p@ \circlescale@ \repeat + \edef\tmp@{\expandafter\removePT@\the\R@c}\dimen@=\tmp@\R@c + \edef\tmp@{\expandafter\removePT@\the\d@X}\advance\dimen@-\tmp@\d@X + \edef\tmp@{\expandafter\removePT@\the\d@Y}\advance\dimen@-\tmp@\d@Y + \ifdim\dimen@>\z@ \aftergroup\Inside@true \fi} +%%\xydef@\circlescale@{\divide\R@c\KK@ \divide\d@X\KK@ \divide\d@Y\KK@ } +\xydef@\circlescale@{\divide\R@c\KK@ \divide\d@X\KK@ \divide\d@Y\KK@ } +\xydef@\circlecentredInner@{% + \L@c=\sd@X\cosDirection\R@c \D@c=\sd@Y\sinDirection\R@c + \R@c=\L@c \U@c=\D@c \Edge@c={\rectangleEdge}} +\xydef@\circlecentredOuter@{% + \L@c=\R@c \D@c=\R@c \U@c=\D@c \Edge@c={\rectangleEdge}} +\xydef@\ellipsecentredEdge@{\bgroup \X@p=\X@c \Y@p=\Y@c + \ifdim\U@c>\R@c + \X@c=\cosDirection\U@c \Y@c=\sinDirection\U@c + \quotient@\tmp@\U@c\R@c \X@c=\tmp@\X@c \R@c=\U@c + \else + \X@c=\cosDirection\R@c \Y@c=\sinDirection\R@c + \quotient@\tmp@\R@c\U@c \Y@c=\tmp@\Y@c + \fi + \advance\X@c\X@p \advance\Y@c\Y@p + \setupDirection@ \X@c=\X@p \Y@c=\Y@p \circlecentredEdge@ + \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p + \ifdim\U@c>\L@c \quotient@\tmp@\L@c\U@c \d@X=\tmp@\d@X + \else \quotient@\tmp@\U@c\R@c \d@Y =\tmp@\d@Y \fi + \X@c=\X@p \advance\X@c\d@X \Y@c=\Y@p \advance\Y@c\d@Y + \edef\next@{\egroup \X@c=\the\X@c \Y@c=\the\Y@c}\next@ }% +\xydef@\ellipsecentredUnder@{% + \ifdim\R@c>64\p@ \circlescale@ \divide\U@c\KK@ + \else \ifdim\U@c>64\p@ \circlescale@ \divide\U@c\KK@ \fi\fi + \edef\tmp@{\expandafter\removePT@\the\R@c}\d@Y=\tmp@\d@Y + \edef\tmp@{\expandafter\removePT@\the\U@c}\d@X=\tmp@\d@X + \R@c=\tmp@\R@c \circlecentredUnder@ } +\xydef@\ellipsecentredOuter@{\Edge@c={\rectangleEdge}} +\xydef@\ellipsecentredInner@{% + \bgroup \X@p=\X@c \Y@p=\Y@c \ellipsecentredEdge@ + \advance\X@c-\X@p \L@c=\ifdim\X@c<\z@-\fi\X@c + \advance\Y@c-\Y@p \D@c=\ifdim\Y@c<\z@-\fi\Y@c + \edef\next@{\egroup \L@c=\the\L@c \D@c=\the\D@c}\next@ + \R@c=\L@c \U@c=\D@c \Edge@c={\rectangleEdge}} +\xydef@\ellipseEdge@{\bgroup + \A@=\R@c \B@=\U@c + \ifdim\R@c=\L@c \d@X=\z@ + \else \d@X=.5\R@c \advance\d@X-.5\L@c + \advance\A@\L@c \divide\A@\tw@ \fi + \ifdim\U@c=\D@c \d@Y=\z@ + \else \d@Y=.5\U@c \advance\d@Y-.5\D@c + \advance\B@\D@c \divide\B@\tw@ \fi + \bgroup + \L@c=\A@ \U@c=\B@ + \R@p=\U@c \advance\R@p\L@c \multiply\R@p\tw@ + \ifdim\B@<\A@ \quotient@\tmp@\U@c\L@c \R@c=\tmp@\p@ \D@c=\p@ + \quotient@\tmp@\R@p\L@c \R@p=\tmp@\p@ + \else + \ifdim\A@<\B@ \quotient@\tmp@\L@c\U@c \D@c=\tmp@\p@ \R@c=\p@ + \quotient@\tmp@\R@p\U@c \R@p=\tmp@\p@ + \else + \R@c=\p@ \D@c=\p@ \quotient@\tmp@\R@p\U@c \R@p=\tmp@\p@ + \fi\fi + \quotient@\sd@X\d@X\L@c \d@X=\sd@X\p@ + \quotient@\sd@Y\d@Y\U@c \d@Y=\sd@Y\p@ + \loop + \bgroup \U@p=-\p@ \D@p=\z@ + \ifdim\R@c<\p@ + \edef\tmp@{\expandafter\removePT@\the\R@c}\dimen@=\tmp@\R@p + \advance\d@X\cosDirection\dimen@ + \else \advance\d@X\cosDirection\R@p \fi + \edef\sd@X{\expandafter\removePT@\the\d@X}% + \advance\U@p\sd@X\d@X + \ifdim\R@c<\p@ + \edef\tmp@{\expandafter\removePT@\the\R@c}\dimen@=\tmp@\d@X + \advance\D@p\cosDirection\dimen@ + \else \advance\D@p\cosDirection\d@X \fi + \ifdim\D@c<\p@ + \edef\tmp@{\expandafter\removePT@\the\D@c}\dimen@=\tmp@\R@p + \advance\d@Y\sinDirection\dimen@ + \else \advance\d@Y\sinDirection\R@p \fi + \edef\sd@Y{\expandafter\removePT@\the\d@Y}% + \advance\U@p\sd@Y\d@Y + \ifdim\D@c<\p@ + \edef\tmp@{\expandafter\removePT@\the\D@c}\dimen@=\tmp@\d@Y + \advance\D@p\sinDirection\dimen@ + \else \advance\D@p\sinDirection\d@Y \fi + \multiply\D@p\tw@ + \dimen@=\ifdim\U@p<\z@-\fi\U@p + \ifdim\dimen@<.01\p@ \U@p=\z@ + \else + \quotient@\tmp@\U@p\D@p \U@p=\tmp@\p@ + \ifdim\U@p<\z@\xywarning@{poor convergence}\U@p=\z@ + \else \advance\R@p-\U@p \U@p=\ifdim\U@p<\z@-\fi\U@p + \fi \fi + \edef\next@{\egroup \R@p=\the\R@p \U@p=\the\U@p \D@p=\the\D@p}\next@ + \ifdim\U@p>\z@ \repeat + \edef\next@{\egroup \dimen@=\the\R@p}\next@ + \edef\tmp@{\expandafter\removePT@\the\dimen@}% + \ifdim\B@<\A@ \dimen@=\tmp@\B@ \else \dimen@=\tmp@\A@ \fi + \dimen@=-\dimen@ + \advance\X@c\cosDirection\dimen@ + \advance\Y@c\sinDirection\dimen@ + \edef\next@{\egroup \X@c=\the\X@c \Y@c=\the\Y@c}\next@ }% +\xydef@\ellipseOuter@{\Edge@c={\rectangleEdge}} +\xydef@\ellipseInner@{% + \bgroup \X@p=\X@c \Y@p=\Y@c \ellipseEdge@ + \d@X=\X@c\advance\d@X-\X@p + \ifdim\d@X>\z@ \R@p=\d@X \L@p=\R@p + \ifdim\L@c=\R@c\else\advance\L@p\L@c \advance\L@p-\R@c \fi + \else \L@p=-\d@X \R@p=\L@p + \ifdim\L@c=\R@c \else\advance\R@p\R@c \advance\R@p-\L@c \fi + \fi + \d@Y=\Y@c\advance\d@Y-\Y@p + \ifdim\d@Y>\z@ \U@p=\d@Y \D@p=\U@p + \ifdim\D@c=\U@c\else\advance\D@p\D@c \advance\D@p-\U@c \fi + \else \D@p=-\d@Y \U@p=\D@p + \ifdim\D@c=\U@c\else\advance\U@p\U@c \advance\U@p-\D@c \fi + \fi + \edef\next@{\egroup + \L@c=\the\L@p \D@c=\the\D@p \R@c=\the\R@p \U@c=\the\U@p}% + \next@ \Edge@c={\rectangleEdge}} +\xydef@\rectangleEdge#1{\ifcase#1\expandafter\rectangleEdge@ + \or \expandafter\rectangleUnder@ \or \expandafter\rectangleDist@ + \or \expandafter\rectangleProp@ + \else \relax \fi} +\xydef@\rectangleEdge@{% + \ifdim\d@Y<-.05\p@ \rectangleEdge@i + \else\ifdim\d@Y<.05\p@ \rectangleEdge@ii + \else \rectangleEdge@iii\fi\fi + \resetupDirection@} +\xydef@\rectangleEdge@i{% + \ifdim\d@X<-.05\p@ + \settomin@\X@c+\R@c\U@c\d@X\d@Y \settomin@\Y@c+\U@c\R@c\d@Y\d@X%1a + \else\ifdim\d@X<.05\p@ \advance\Y@c\U@c + \else \settomin@\X@c-\L@c\U@c\d@X\d@Y \settomin@\Y@c+\U@c\L@c\d@Y\d@X + \fi\fi} +\xydef@\rectangleEdge@ii{% + \ifdim\d@X<-.05\p@ \advance\X@c\R@c + \else\ifdim\d@X<.05\p@ + \else \advance\X@c-\L@c + \fi\fi} +\xydef@\rectangleEdge@iii{% + \ifdim\d@X<-.05\p@ + \settomin@\X@c+\R@c\D@c\d@X\d@Y \settomin@\Y@c-\D@c\R@c\d@Y\d@X%3a + \else\ifdim\d@X<.05\p@ \advance\Y@c-\D@c + \else \settomin@\X@c-\L@c\D@c\d@X\d@Y \settomin@\Y@c-\D@c\L@c\d@Y\d@X + \fi\fi} +\xydef@\settomin@#1#2#3#4#5#6{% + \edef\nextii@{\A@=\the\A@ \B@=\the\B@}\quotient@\next@{#5}{#6}\nextii@ + \dimen@=\sd@X\sd@Y\next@#4\relax + \ifdim#3<\dimen@ \dimen@=#3\fi \advance#1#2\dimen@} +\xydef@\rectangleUnder@{\Inside@false + \ifdim\X@p=\X@c \ifdim\Y@p=\Y@c \Inside@true \fi\fi + \ifInside@ \else + \dimen@=\X@p \advance\dimen@-\X@c + \ifdim \dimen@>-\L@c \relax \ifdim\dimen@<\R@c + \dimen@=\Y@p \advance\dimen@-\Y@c + \ifdim \dimen@>-\D@c \relax \ifdim\dimen@<\U@c + \Inside@true + \fi\fi\fi\fi\fi } +\xydef@\rectangleDist@{\let\next@=\rectangleDist@i + \ifdim\d@X<-.05\p@ \dimen@=\R@c + \else\ifdim\d@X<.05\p@ \dimen@=\z@ \DN@{\dimen@=\dimen@ii}% + \else \dimen@=\L@c \fi\fi + \ifdim\d@Y<-.05\p@ \dimen@ii=\U@c + \else\ifdim\d@Y<.05\p@ \DN@{}% + \else \dimen@ii=\D@c \fi\fi + \next@} +\xydef@\rectangleDist@i{% + \begingroup \quotient@\next\p@{\sd@X\cosDirection\p@}% + \edef\next{\endgroup \dimen@=\next\dimen@}\next + \begingroup \quotient@\next\p@{\sd@Y\sinDirection\p@}% + \edef\next{\endgroup \dimen@ii=\the\dimen@ii}\next + \ifdim\dimen@ii<\dimen@ \dimen@=\dimen@ii \fi} +\xydef@\rectangleProp@{% + \enter@{\A@=\the\A@ \B@=\the\B@ \DirectionfromtheDirection@}% + \reverseDirection@ + \dimen@=1\Direction \count@=\K@ \multiply\count@\tw@ + \ifnum \Direction>\count@ + \DN@{0}% + \advance\dimen@-2\K@ \quotient@\nextii@{\dimen@}{2\K@}% + \else\ifnum \Direction>\z@ + \dimen@=-\dimen@ \advance\dimen@2\K@ \quotient@\next@{\dimen@}{2\K@}% + \DNii@{0}% + \else\ifnum \Direction>-\count@ + \DN@{1}% + \quotient@\nextii@{-\dimen@}{2\K@}% + \else + \advance\dimen@4\K@ \quotient@\next@{\dimen@}{2\K@}% + \DNii@{1}% + \fi\fi\fi + \advance\X@c-\L@c \dimen@=\L@c \advance\dimen@\R@c + \ifdim\dimen@=\z@ \advance\X@c 2\L@c \else \advance\X@c\next@\dimen@ \fi + \advance\Y@c+\U@c \dimen@=\D@c \advance\dimen@\U@c + \ifdim\dimen@=\z@ \advance\Y@c-2\U@c \advance\Y@c\Upness@\U@c + \else \advance\Y@c-\nextii@\dimen@ \fi + \leave@} +\message{connections;} +\xydef@\Creset@@{} +\xydef@\Cshavep@@{\noCshavep@@} +\xydef@\Cshavec@@{\noCshavec@@} +\xydef@\Cslidep@@{\noCslidep@@} +\xydef@\Cslidec@@{\noCslidec@@} +\xydef@\Calong@@{\noCalong@@} +\xydef@\Cintercept@@{\noCintercept@@} +\xydef@\Cbreak@@{\noCbreak@@} +\xydef@\Clast@@{\noClast@@} +\xylet@\lastbreak@@=\empty +\xydef@\noCshavep@@{\setupDirection@ + \enter@{\cfromthec@ \DirectionfromtheDirection@}% + \reverseDirection@ \cfromp@ \the\Edge@c\z@ + \pfromc@ \leave@ \resetDirection@} +\xydef@\noCshavec@@{\setupDirection@ \the\Edge@c\z@ \resetDirection@} +\xydef@\noCslidep@@#1{\dimen@=#1\relax + \advance\X@p\cosDirection\dimen@ \advance\Y@p\sinDirection\dimen@ + \resetDirection@} +\xydef@\noCslidec@@#1{\dimen@=#1\relax + \advance\X@c\cosDirection\dimen@ \advance\Y@c\sinDirection\dimen@ + \resetDirection@} +\xydef@\noCalong@@#1{% + \d@X=#1\d@X \d@Y=#1\d@Y \X@c=\X@p \Y@c=\Y@p \advance\X@c\d@X \advance\Y@c\d@Y + \resetupDirection@} +\xydef@\noCintercept@@{\enter@{\pfromthep@}% + \begingroup\Creset@@ \edef\tmp@{\endgroup + \X@origin=\the\X@p \Y@origin=\the\Y@p \R@c=\the\d@X \U@c=\the\d@Y}\tmp@ + \loop@\dimen@=\ifdim\R@c<\z@-\fi\R@c \advance\dimen@\ifdim\U@c<\z@-\fi\U@c + \ifdim\dimen@>10\p@ \advance\R@c \ifdim\R@c<\z@-\fi 16sp \divide\R@c\KK@ + \advance\U@c \ifdim\U@c<\z@-\fi 16sp \divide\U@c\KK@ \repeat@ + \intersect@ \leave@} +\xydef@\noCbreak@@{\edef\lastbreak@@{\cfromthec@}} +\xydef@\noClast@@{\Creset@@ \edef\lastbreak@@{\cfromthep@}} +\xydef@\no@@{\setupDirection@ \edef\lastbreak@@{\cfromthep@}% + \enter@{\cfromthec@\pfromthep@\DirectionfromtheDirection@}% + \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}% + \edef\next@{{\sd@X}{\sd@Y}}\expandafter\straightcheckoverlap@\next@ + \setupDirection@ \the\Edge@c\z@ + \swap@\reverseDirection@\the\Edge@c\z@\swap@\reverseDirection@ + \resetDirection@ + \edef\Cshavep@@{\DirectionfromtheDirection@ + \pfromthep@\noexpand\resetDirection@}% + \edef\Cshavec@@{\DirectionfromtheDirection@ + \cfromthec@\noexpand\resetDirection@}% + \leave@ + \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}% + \def\Calong@@{\noCalong@@}\def\Cintercept@@{\noCintercept@@}% + \def\Cbreak@@{\noCbreak@@}\def\Clast@@{\noClast@@}\noinsert@} +\xydef@\noinsert@{\ifHidden@\else + \ifdim\Y@c>\Y@max \Y@max=\Y@c \fi \ifdim\Y@p>\Y@max \Y@max=\Y@p \fi + \ifdim\Y@c<\Y@min \Y@min=\Y@c \fi \ifdim\Y@p<\Y@min \Y@min=\Y@p \fi + \ifdim\X@c>\X@max \X@max=\X@c \fi \ifdim\X@p>\X@max \X@max=\X@p \fi + \ifdim\X@c<\X@min \X@min=\X@c \fi \ifdim\X@p<\X@min \X@min=\X@p \fi + \fi} +\xydef@\Spread@@{} +\xydef@\checkoverlap@@{} +\xydef@\straight@#1{\setupDirection@ \def\Spread@@{#1}% + \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}% + \edef\lastbreak@@{\cfromthep@}% + \edef\next@{{\sd@X}{\sd@Y}}\expandafter\straightcheckoverlap@\next@ + \setupDirection@ \the\Edge@c\z@ + \swap@\reverseDirection@\the\Edge@c\z@\swap@\reverseDirection@ + \resetDirection@ + \edef\Cshavep@@{\DirectionfromtheDirection@ + \pfromthep@\noexpand\resetDirection@}% + \edef\Cshavec@@{\DirectionfromtheDirection@ + \cfromthec@\noexpand\resetDirection@}% + \noinsert@ + \straight@typeset + \def\Cbreak@@{\straightCbreak@}\def\Clast@@{\straightClast@}% + \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}% + \def\Calong@@{\noCalong@@}\def\Cintercept@@{\noCintercept@@}% + \Creset@@} +\xydef@\straightcheckoverlap@#1#2{\def\checkoverlap@@{% + \ifdim#1\X@p>#1\X@c \let\next@=\relax \fi + \ifdim#2\Y@p>#2\Y@c \let\next@=\relax \fi}} +\xydef@\straight@typeset{% + \ifInvisible@ \let\next@=\relax + \else\ifdim 1\Direction<-2\K@ \DN@{\straightv@}% + \else\ifdim 1\Direction<\z@ \DN@{\straighth@}% + \else\ifdim 1\Direction<2\K@ \DN@{\straightv@}% + \else \DN@{\straighth@}% + \fi\fi\fi\fi \checkoverlap@@ \next@} +\xylet@\nextbreak@@=\empty +\xydef@\straightCbreak@{\connectRestore@ + \edef\nextbreak@@{\cfromthec@}% + \Creset@@ \swap@ \the\Edge@c4\enter@{\cmergethec@}\lastbreak@@ \leave@ + \swap@ \the\Edge@c4\enter@{\cmergethec@}\nextbreak@@ \leave@ + \setupDirection@ + \the\Edge@c\z@ + \swap@ \reverseDirection@ \the\Edge@c\z@ \swap@ \reverseDirection@ + \resetDirection@ \noinsert@ \straight@typeset + \Creset@@ \let\lastbreak@@=\nextbreak@@} +\xydef@\straightClast@{\connectRestore@ + \Creset@@ \swap@ \the\Edge@c4\enter@{\cmergethec@}\lastbreak@@ \leave@ + \swap@ + \setupDirection@ + \the\Edge@c\z@ + \swap@\reverseDirection@ \the\Edge@c\z@ \swap@\reverseDirection@ + \resetDirection@ \noinsert@ \straight@typeset + \Creset@@ \edef\lastbreak@@{\cfromthep@}} +\xydef@\straighth@{\setbox\z@=\hbox{% + \setbox8=\copy\lastobjectbox@ + \A@=\wd8\relax \B@=\dp8\relax \advance\B@\ht8\relax + \ifdim \A@=\z@ \count@@=\m@ne + \else \dimen@=\sd@X\d@X \divide\dimen@\A@ \count@@=\dimen@ \fi + \Spread@@ + \ifdim\d@X>\z@ \advance\X@c-\wd8\relax\fi + \dimen@=-\sd@X\wd8\relax + \multiply\dimen@\K@dYdX \divide\dimen@\K@ + \ifdim\d@X>\z@ \advance\Y@c\dimen@ \advance\Y@c-\Leftness@\dimen@ + \else \advance\Y@c\Leftness@\dimen@ \fi + \dimen@=\wd8\relax \A@=\sd@X\d@X \advance\A@-\dimen@ + \B@=\sd@X\dimen@ \multiply\B@\K@dYdX \divide\B@\K@ + \advance\B@-\d@Y \B@=\sd@Y\B@ + \count@=\count@@ \advance\count@\m@ne + \ifnum\z@<\count@ \divide\A@\count@ \divide\B@\count@ \fi + \A@=-\sd@X\A@ \B@=\sd@Y\B@ \wd8=\A@ + \kern\X@c \count@=\z@ + \loop@\ifnum\count@<\count@@ \advance\count@\@ne + \raise\Y@c\copy8\relax \advance\Y@c\B@ \repeat@}% + \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}} +\xydef@\straightv@{\setbox\z@=\vtop{% + \setbox8=\copy\lastobjectbox@ + \A@=\wd8\relax \B@=\dp8\relax \advance\B@\ht8\relax + \ifdim \B@=\z@ \count@@=\m@ne + \else \dimen@=\sd@Y\d@Y \divide\dimen@\B@ \count@@=\dimen@ \fi + \Spread@@ + \dimen@=\dp8\relax \advance\dimen@\ht8\relax + \B@=\sd@Y\d@Y \advance\B@-\dimen@ + \A@=\sd@Y\dimen@ \multiply\A@\K@dXdY \divide\A@\K@ \advance\A@-\d@X + \A@=\sd@X\A@ \count@=\count@@ \advance\count@\m@ne + \ifnum\z@<\count@ \divide\B@\count@ \divide\A@\count@ \fi + \B@=\sd@Y\B@ \A@=\sd@X\A@ \ht8=\B@ \dp8=\z@ + \ifdim\d@Y<\z@ + \advance\Y@c\dimen@ \advance\Y@c\Upness@\B@ + \else + \advance\dimen@\Upness@\B@ \advance\Y@c-\dimen@ \advance\Y@c\B@ + \fi + \advance\Y@c\B@ + \ifdim\d@X<\z@ \else \advance\X@c-\wd8\relax \fi + \null \kern-\Y@c \count@=\z@ + \loop@\ifnum\count@<\count@@ \advance\count@\@ne + \nointerlineskip \moveright\X@c\copy8\relax \advance\X@c\A@ + \repeat@}% + \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}} +\message{ Xy-pic loaded}\xyuncatcodes \endinput diff --git a/macros/generic/diagrams/xypic/texinputs/xy16textures.tex b/macros/generic/diagrams/xypic/texinputs/xy16textures.tex new file mode 100644 index 0000000000..79b773b025 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xy16textures.tex @@ -0,0 +1,122 @@ +%% xy16textures.tex from $Id: xy16textures.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Textures v1.6'' driver interface option. +%% Copyright (c) 1995-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{16textures}{Textures v1.6 driver}{\stripRCS$Revision: 3.7 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xydef@\oldTextures@@#1{\dvimessage@{Textures v1.6}{#1}} +\newdriver{% + \xyaddsupport{color}\oldtexturesColor@@ + \xyaddsupport{crayon}\oldtexturesCrayon@@ + \xyaddsupport{ps}\oldtexturesPS@@ + \xyaddsupport{rotate}\oldtexturesRotate@@ + \xyaddsupport{line}\oldtexturesLine@@ + \xyaddsupport{frame}\oldtexturesFrames@@ + \xyaddsupport{tile}\oldtexturesTiles@@ + \xyaddsupport{cmtip}\relax +} +\xydef@\oldTexturesColours@{\oldtexturesPStypes@ + \let\xylocalColor@=\xyNoColor@@ \def\xycolor@{\xycolor@@}% + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}% + \installPScolor@ }\else\DN@{}\fi \next@ + \ifx\xycolor@@\xyNoColor@ \let\xycolor@@=\xycolor@raw@@\fi + \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\oldtexturesCrayon@@{}}% + \else\let\next@=\xystandardcolors@ \fi \next@ + \let\xycolorwarning@=\relax + \let\oldtexturesColor@@=\relax + \let\UnloadColor@@=\NooldTexturesColor@ + } +\xydef@\oldtexturesColor@@{\oldTexturesColours@} +\xydef@\NooldTexturesColor@{% + \let\xylocalColor@=\xyNoColor@@ + \let\xycolor@=\xyNoColor@ + \let\xycolorwarning@=\xycolorwarning@@ + \let\oldtexturesColor@@=\oldTexturesColours@ + \let\UnloadColor@@=\UnloadColor@ + } +\xydef@\oldtexturesCrayon@@{\oldtexturesColor@@\oldtexturesCrayon@} +\xydef@\oldtexturesCrayon@{\installCrayolaColors@}% +\xydef@\oldtexturesPS@@{\oldtexturesPS@} +\xydef@\oldtexturesPSunload@{\UnloadPS@ + \ifx\xyrealshipout@\undefined\else + \ifx\shipout\xyrealshipout@ + \else \let\shipout=\xyrealshipout@\fi\fi + \let\installxyps@@=\relax + \let\UnloadPS@@=\UnloadPS@ + \let\oldtexturesPS@@=\oldtexturesPS@ } +\xydef@\oldTexturesSpecial@#1{\firstPS@@\special{postscript #1}} +\xydef@\oldTexturesMacro@#1{\special{postscript {#1}xy}} +\xydef@\oldTexturesInclude@#1{\firstPS@@\special{rawpostscriptfile #1}} +\xydef@\oldTexturesRaw@#1{\firstPS@@\special{rawpostscript #1}} +\xydef@\oldtexturesPStypes@{% + \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}% + \ifx\PSspecial@@\oldTexturesSpecial@\else + \let\PSspecial@@=\oldTexturesSpecial@ + \let\PSmacro@@=\oldTexturesMacro@ + \let\PSdict@@=\oldTexturesRaw@ + \let\PSraw@@=\oldTexturesRaw@ + \let\PSinclude@@=\oldTexturesInclude@ + \let\PSspecialdict@@=\oldTexturesRaw@ + \let\xyPSobeylines@@=\obeyoldTextureslines@ + \oldTextures@@{PostScript}% + \fi + \oldtexturesCurrpt@ \@PSshipout } +{\catcode`\^^M=\active + \gdef\next{\catcode`\^^M=\active \let^^M=\par \obeyspaces}} +\xylet@\obeyoldTextureslines@=\next +\xydef@\oldtexturesCurrpt@{\let\xyPScurrpt@@=\oldtexturesCurrpt@@}% +\xydef@\oldtexturesCurrpt@@{\PSspecial@@{xyi}\PSraw@@{userdict begin xyx end}} +\xydef@\oldtexturesPS@{\oldtexturesPStypes@ + \let\oldtexturesPS@@=\relax + \let\UnloadPS@@=\oldtexturesPSunload@ + \let\installxyps@@=\@PSshipout \installxyps@ } +\xydef@\oldtexturesRotate@@{\oldtexturesRotate@} +\xydef@\oldtexturesRotate@{\oldtexturesPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}% + \xyRotScale@@ \installPSrotscale@ }% + \else\DN@{\xydriverfail@{rotations are}\UnloadRotate@\relax}\fi + \next@ } +\xydef@\oldtexturesLine@@{\oldtexturesLine@} +\xydef@\oldtexturesLine@{\oldtexturesPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}% + \installPSline@ }% + \else\DN@{\xydriverfail@{line-styles are}\UnloadLine@\relax}\fi + \next@ } +\xydef@\oldtexturesFrames@@{\oldtexturesFrames@} +\xydef@\oldtexturesFrames@{\oldtexturesPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}% + \installPSframes@ }% + \else\DN@{\xydriverfail@{frames are}\UnloadPSFrames@\relax}\fi + \next@ } +\xydef@\oldtexturesTiles@@{\oldtexturesTiles@} +\xydef@\oldtexturesTiles@{\oldtexturesPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}% + \installPSpatterns@ \xystandardpatterns@}% + \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi + \next@ } +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xy17oztex.tex b/macros/generic/diagrams/xypic/texinputs/xy17oztex.tex new file mode 100644 index 0000000000..fed8bf2a6a --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xy17oztex.tex @@ -0,0 +1,121 @@ +%% xy17oztex.tex from $Id: xy17oztex.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``OzTeX v1.7'' driver interface option. +%% Copyright (c) 1995-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{17oztex}{OzTeX v1.7 driver}{\stripRCS$Revision: 3.8 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xydef@\OzTeX@@#1{\dvimessage@{OzTeX v1.7}{#1}} +\newdriver{% + \xyaddsupport{color}\oldoztexColor@@ + \xyaddsupport{crayon}\oldoztexCrayon@@ + \xyaddsupport{ps}\oldoztexPS@@ + \xyaddsupport{rotate}\oldoztexRotate@@ + \xyaddsupport{line}\oldoztexLine@@ + \xyaddsupport{frame}\oldoztexFrames@@ + \xyaddsupport{tile}\oldoztexTiles@@ + \xyaddsupport{cmtip}\relax +} +\xydef@\oldoztexColor@@{\oldOzTeXColours@} +\xydef@\oldOzTeXColours@{\oldOzTeXPStypes@ + \let\xylocalColor@=\xyNoColor@@ \def\xycolor@{\xycolor@@}% + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}% + \installPScolor@ }\else\DN@{}\fi \next@ + \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\oldOzTeXCrayon@@{}}% + \else\let\next@=\xystandardcolors@\fi \next@ + \let\xycolorwarning@=\relax + \let\oldoztexColor@@=\relax + \let\UnloadColor@@=\NooldOzTeXColor@ + } +\xydef@\NooldOzTeXColor@{% + \let\xylocalColor@=\xyNoColor@@ + \let\xycolor@=\xyNoColor@ + \let\xycolorwarning@=\xycolorwarning@@ + \let\oldoztexColor@@=\oldOzTeXColours@ + \let\UnloadColor@@=\UnloadColor@ + } +\xydef@\oldOzTeXCrayon@@{\installCrayolaColors@} +\xydef@\oldoztexPS@@{\oldoztexPS@} +\xydef@\oldoztexPSunload@{\UnloadPS@ + \def\xyPSdictname{}\UsePSdict@@false + \let\installxyps@@=\relax + \let\UnloadPS@@=\UnloadPS@ + \xyPSshapes@true + \let\oldoztexPS@@=\oldoztexPS@ } +\xydef@\oldOzTeXSpecial@#1{\special{empty.ps {#1}xy}} +\xydef@\oldOzTeXMacro@#1{\special{empty.ps {#1}xy}} +\xydef@\oldOzTeXDict@#1{\special{empty.ps @obxy{#1}stopped pop @eoxy}} +\xydef@\oldOzTeXinclude@#1{\special{#1}} +\xydef@\oldOzTeXraw@#1{\special{empty.ps @boxy #1 @eoxy}}% +\xydef@\oldOzTeXPStypes@{% + \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}% + \ifx\PSspecial@@\oldOzTeXSpecial@\else + \let\PSspecial@@=\oldOzTeXSpecial@ + \let\PSmacro@@=\oldOzTeXMacro@ + \let\PSdict@@=\oldOzTeXDict@ + \let\PSraw@@=\oldOzTeXraw@ + \let\PSinclude@@=\oldOzTeXinclude@ + \let\xyPSobeylines@@=\obeyoldOzTeXlines@ + \let\PSspecialdict@@=\oldOzTeXDict@ + \oldOzTeX@@{PostScript}% + \fi + \oldOzTeXCurrpt@ } +{\catcode`\^^M=\active + \gdef\next{\catcode`\^^M=\active \let^^M=\space \obeyspaces}} +\xylet@\obeyoldOzTeXlines@=\next +\xydef@\oldOzTeXCurrpt@{\let\xyPScurrpt@@=\OzTeXCurrpt@@}% +\xydef@\oldOzTeXCurrpt@@{} +\xydef@\oldoztexPS@@{\oldOzTeXPStypes@ + \let\installxyps@@=\old@OzTeX@PS@ + \installxyps@ } +\xydef@\old@OzTeX@PS@{\UsePSdict@@true + \let\includePSmessage@=\xyoldOzTeXheader + \ifx\undefined\xyPSdictname\def\xyPSdictname{global.ps}\fi} +\xydef@\xyoldOzTeXheader#1#2#3{\UsePSdict@@true} +\xydef@\oldoztexLine@@{\oldoztexLine@} +\xydef@\oldoztexLine@{\oldOzTeXPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}\installPSline@ }% + \else\DN@{\xydriverfail@{line-styles are}\UnloadLine@\relax}\fi + \next@ } +\xydef@\oldoztexFrames@@{\oldOzTeXFrames@} +\xydef@\oldOzTeXFrames@{\oldOzTeXPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}\installPSframes@ }% + \else\DN@{\xydriverfail@{frames are}\UnloadPSFrames@\relax}\fi + \next@ } +\xydef@\oldoztexTiles@@{\oldOzTeXTiles@} +\xydef@\oldOzTeXTiles@{\oldOzTeXPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}\installPSpatterns@ + \xystandardpatterns@ }% + \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi + \next@ } +\xydef@\oldoztexRotate@@{\oldOzTeXRotate@} +\xydef@\oldOzTeXRotate@{\oldOzTeXPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}% + \xyRotScale@@ \installPSrotscale@ \xyPSshapes@false }% + \else\DN@{\xydriverfail@{rotations are}\UnloadRotate@\relax}\fi + \next@ } +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xy2cell.tex b/macros/generic/diagrams/xypic/texinputs/xy2cell.tex new file mode 100644 index 0000000000..05d3534f48 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xy2cell.tex @@ -0,0 +1,668 @@ +%% xy2cell.tex from $Id: xy2cell.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``2-cell'' feature. +%% Copyright (c) 1993-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{2cell}{Two-cell feature}{\stripRCS$Revision: 3.7 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xyrequire{curve}\xycatcodes +\message{two-cells,} +\xydef@\UseTwocells{\definesupermorphism{twocell}{% + \xy@{start of 2-cell}{\begingroup}% + \twocell@}} +\xydef@\UseHalfTwocells{% + \definesupermorphism{uppertwocell}{% + \xy@{start of 2-cell}{\begingroup}% + \uppertwocell@}% + \definesupermorphism{lowertwocell}{% + \xy@{start of 2-cell}{\begingroup}% + \lowertwocell@}} +\xydef@\UseCompositeMaps{\definesupermorphism{compositemap}{% + \xy@{start composite-map}{\begingroup}% + \compositemap@}} +\xydef@\UseAllTwocells{% + \UseTwocells \UseHalfTwocells \UseCompositeMaps } +\xydef@\supermorphism#1[#2]#3{\def\afterMORPHISM{[#2]#3}#1} +\xydef@\afterMORPHISM{} +\xydef@\definesupermorphism#1#2{% + \expandafter\def\csname x#1\endcsname{\supermorphism{#2}}% + \expandafter\def\csname u#1\endcsname{\supermorphism{#2}[-1,0]{}}% + \expandafter\def\csname d#1\endcsname{\supermorphism{#2}[1,0]{}}% + \expandafter\def\csname l#1\endcsname{\supermorphism{#2}[0,-1]{}}% + \expandafter\def\csname r#1\endcsname{\supermorphism{#2}[0,1]{}}% + \expandafter\def\csname uu#1\endcsname{\supermorphism{#2}[-2,0]{}}% + \expandafter\def\csname dd#1\endcsname{\supermorphism{#2}[2,0]{}}% + \expandafter\def\csname ll#1\endcsname{\supermorphism{#2}[0,-2]{}}% + \expandafter\def\csname rr#1\endcsname{\supermorphism{#2}[0,2]{}}% + \expandafter\def\csname ur#1\endcsname{\supermorphism{#2}[-1,1]{}}% + \expandafter\def\csname ul#1\endcsname{\supermorphism{#2}[-1,-1]{}}% + \expandafter\def\csname dr#1\endcsname{\supermorphism{#2}[1,1]{}}% + \expandafter\def\csname dl#1\endcsname{\supermorphism{#2}[1,-1]{}}% + \expandafter\def\csname uul#1\endcsname{\supermorphism{#2}[-2,-1]{}}% + \expandafter\def\csname uur#1\endcsname{\supermorphism{#2}[-2,1]{}}% + \expandafter\def\csname ull#1\endcsname{\supermorphism{#2}[-1,-2]{}}% + \expandafter\def\csname urr#1\endcsname{\supermorphism{#2}[-1,2]{}}% + \expandafter\def\csname ddl#1\endcsname{\supermorphism{#2}[2,-1]{}}% + \expandafter\def\csname ddr#1\endcsname{\supermorphism{#2}[2,1]{}}% + \expandafter\def\csname dll#1\endcsname{\supermorphism{#2}[1,-2]{}}% + \expandafter\def\csname drr#1\endcsname{\supermorphism{#2}[1,2]{}}% + \expandafter\def\csname uull#1\endcsname{\supermorphism{#2}[-2,-2]{}}% + \expandafter\def\csname uurr#1\endcsname{\supermorphism{#2}[-2,2]{}}% + \expandafter\def\csname ddll#1\endcsname{\supermorphism{#2}[2,-2]{}}% + \expandafter\def\csname ddrr#1\endcsname{\supermorphism{#2}[2,2]{}}} +\newdir{=>}{!/5pt/\dir{=}!/2.5pt/\dir{=}*!/-5pt/\dir2{>}} +\xydef@\arrowobject#1{\def\Arrowobject@{#1}} +\xydef@\Arrowobject@{\dir{=>}} +\xydef@\twocell@{\toks6={3.5}\toks5={@}\toks7={@}\toks8={@}\toks3={f}% + \tw@cell@ } +\xydef@\uppertwocell@{\toks6={7}\toks5={@}\toks7={@}\toks8={@}\toks3={o}% + \tw@cell@ } +\xydef@\lowertwocell@{\toks6={-7}\toks5={@}\toks7={@}\toks8={@}\toks3={o}% + \tw@cell@ } +\xydef@\compositemap@{\toks6={3.5}\toks5={@}\toks7={@}\toks8={@}\toks3={t}% + \tw@cell@ } +\xydef@\tw@cell@@@{% + \expandafter\ifx\the\toks6\omit\relax\toks6={}\else + \expandafter\ifx\expandafter @\the\toks7\relax\expandafter\dimen@\the\toks6\p@ + \expandafter\if\the\toks3t\relax\dimen@=\p@ + \else\expandafter\if\the\toks3o\divide\dimen@\tw@ + \ifdim\dimen@<\z@ \dimen@ii-\p@ \advance\dimen@ii\dimen@ + \dimen@=\dimen@ii \else \dimen@\p@ \fi + \else\dimen@\p@ + \fi\fi + \edef\tmp@{\expandafter\removePT@\the\dimen@}% + \expandafter\toks\expandafter7\expandafter{\tmp@}\fi + \expandafter\ifx\expandafter @\the\toks8\relax + \expandafter\dimen@\the\toks6\p@ + \expandafter\if\the\toks3t\relax\dimen@\p@ + \else\expandafter\if\the\toks3o\divide\dimen@\tw@ + \ifdim\dimen@<\z@ \dimen@ii-\p@ \advance\dimen@ii\dimen@ + \dimen@=\dimen@ii \else \dimen@\p@ \fi + \else\dimen@\p@ + \fi\fi + \edef\tmp@{\expandafter\removePT@\the\dimen@}% + \expandafter\toks\expandafter8\expandafter{\tmp@}\fi + \expandafter\ifx\expandafter @\the\toks5\relax + \expandafter\dimen@\the\toks6\p@ + \expandafter\if\the\toks3o\divide\dimen@ by-4\relax + \else\dimen@\z@\fi + \edef\tmp@{\expandafter\removePT@\the\dimen@}% + \expandafter\toks\expandafter5\expandafter{\tmp@}\fi + \fi + \twocellmod@ + \expandafter\if\the\toks3t\relax + \edef\tmp@{.[\noexpand\twocell@@@@{\the\toks6}{\the\toks5}% + {\the\toks7}{\the\toks8}{\the\toks3}% + {\the\toks2}{\the\toks1}{\the\toks@}{\the\toks4}!!!].\afterMORPHISM}% + \else + \edef\tmp@{.[\noexpand\twocell@@@@{\the\toks6}{\the\toks5}% + {\the\toks7}{\the\toks8}{\the\toks3}% + {\the\toks1}{\the\toks2}{\the\toks@}{\the\toks4}!!!].\afterMORPHISM}% + \fi + \toks@={\endgroup}% + \expandafter\def\expandafter\next@\expandafter{% + \expandafter\def\expandafter\twocellhead@\expandafter{\twocellhead@}}% + \expandafter\addtotoks@\expandafter{\next@}% + \expandafter\def\expandafter\next@\expandafter{% + \expandafter\def\expandafter\twocelltail@\expandafter{\twocelltail@}}% + \expandafter\addtotoks@\expandafter{\next@}% + \expandafter\addtotoks@\expandafter{\expandafter\twocellPATH\tmp@}% + \the\toks@ }% +\xydef@\twocellstyle{\scriptstyle} +\xydef@\droptwocelllabel@#1{\xyFN@\droptwocelllabel@@#1@!} +\xydef@\droptwocelllabel@@{% + \ifx*\next\DN@*{\droptwocelldrop@}% + \else\DN@##1@!{\droptwocelltext@{##1}}% + \fi \next@ } +{\xyuncatcodes \gdef\next#1{\drop+!C{\twocellstyle #1}}} +\xylet@\droptwocelltext@=\next +\xydef@\droptwocelldrop@#1@!{\bgroup \let\xy@=\oxy@ + \let\objectstyle=\twocellstyle \drop#1{}% + \edef\tmp@{\egroup \X@min=\the\X@min \X@max=\the\X@max + \Y@min=\the\Y@min \Y@max=\the\Y@max}\tmp@ } +\xydef@\twocellhead#1{\def\twocellhead@{#1}} +\xydef@\twocelltail#1{\def\twocelltail@{#1}} +\xydef@\twocellhead@{\dir{>}} +\xydef@\twocelltail@{} +\xywarnifdefined\twocellmod@ +\xydef@\tw@cell@{\begingroup + \toks@={{}}\toks1={{}}\toks2={{}}\toks4={{}}% + \def\twocellmod@{}\xyFN@\tw@@cell@}% +\xydef@\tw@@cell@{% + \ifx\space@\next\expandafter\DN@\space{\xyFN@\tw@@cell@}% + \else\ifx\bgroup\next \let\next@=\toks@\afterassignment\tw@@cell@@ + \else\ifx ^\next \DN@^##1{\toks@={##1}\nudgepos@71\tw@@cell@}% + \else\ifx _\next \DN@_##1{\toks@={##1}\nudgepos@82\tw@@cell@}% + \else\addLT@\ifx \next \addGT@{\addLT@\DN@##1}{% + \toks6={##1}\ifx\omit##1\relax\toks3={t}\toks5={0}\fi\xyFN@\tw@@cell@}% + \else\ifx\omit\next \DN@\omit{\omitarrows@\xyFN@\tw@@cell@}% + \else\ifx~\next \DN@~{\xyFN@\whichCurveObject@}% + \else \DN@{\xyFN@\tw@cell@@\empty @}% + \fi\fi\fi\fi\fi\fi\fi% + \next@ } +\xydef@\whichCurveObject@{% + \ifx\space@\next\expandafter\DN@\space{\xyFN@\whichCurveObject@}% + \else\ifx\next^\DN@^##1{\xy@{~^{##1}}{\uppercurveobject{##1}}\xyFN@\tw@@cell@}% + \else\ifx\next_\DN@_##1{\xy@{~_{##1}}{\lowercurveobject{##1}}\xyFN@\tw@@cell@}% + \else\addRQ@\ifx\next \addRQ@\DN@##1{% + \xy@{~'{##1}}{\def\twocellhead@{##1}}\xyFN@\tw@@cell@}% + \else\addLQ@\ifx\next \addLQ@\DN@##1{% + \xy@{~`{##1}}{\def\twocelltail@{##1}}\xyFN@\tw@@cell@}% + \else\ifx!\next \DN@!{\xyFN@\checkmodmap@}% + \else\ifx\next\bgroup\DN@##1{\xy@{~{##1}}{\curveobject{##1}}\xyFN@\tw@@cell@}% + \else\DN@##1{\xy@{~##1}{\curveobject{##1}}\xyFN@\tw@@cell@}% + \fi\fi\fi\fi \fi\fi\fi + \next@ } +\xydef@\checkmodmap@{% + \ifx\space@\next\expandafter\DN@\space{\xyFN@\checkmodmap@}% + \else \def\twocellmod@{\modmap@}% + \ifx\next!\DN@!##1{% + \xy@{~!!{##1}}{\def\modmapobject@{##1}}\xyFN@\tw@@cell@}% + \else \DN@{\xyFN@\tw@@cell@}\fi + \fi \next@ } +\xydef@\omitarrows@{\toks5={0}\toks6={}\toks7={0}\toks8={0}} +\xydef@\tw@@cell@@{\expandafter\xyFN@\expandafter\tw@cell@@\the\toks@ @} +\xydef@\tw@cell@@{\ifx \space@\next\expandafter\DN@\space{\xyFN@\tw@cell@@}% + \else\ifx ^\next + \DN@^##1@{\toks@={##1}\toks4={^}\nudgepos@50\tw@cell@@@}% + \else\addEQ@\ifx\next + \addEQ@\DN@##1@{\toks@={##1}\toks4={=}\nudgepos@50\tw@cell@@@}% + \else\ifx _\next + \DN@_##1@{\toks@={##1}\toks4={_}\nudgepos@50\tw@cell@@@}% + \else\addLT@\ifx \next + \DN@##1@{\toks@={##1}\toks4={_}\nudgepos@50\tw@cell@@@}% + \else\ifx\omit\next \DN@\omit##1@{\toks4={@}\toks@={##1}\tw@cell@@@}% + \else\addRQ@\ifx\next \addRQ@\DN@##1@{\toks4={@}\toks3={/}\toks@={##1}% + \nudgepos@50\tw@cell@@@}% + \else\addLQ@\ifx\next \addLQ@\DN@##1@{\toks4={@}\toks3={b}\toks@={##1}% + \nudgepos@50\tw@cell@@@}% + \else\ifx"\next \DN@"##1@{\toks4={@}\toks3={B}\toks@={##1}% + \nudgepos@50\tw@cell@@@}% + \else\ifx!\next \DN@!##1@{\toks4={@}\toks3={@}\toks@={##1}% + \nudgepos@50\tw@cell@@@}% + \else\ifx\next\empty\DN@##1@{\toks@={{}}\toks4={_}\tw@cell@@@}% + \else\DN@##1@{\toks@={##1}\toks4={_}\tw@cell@@@}% + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@ } +\xywarnifdefined\whichnudge +\xywarnifdefined\whichinfo +\xywarnifdefined\afternudge +\xydef@\nudgepos@#1#2#3{\def\whichnudge{\toks#1}\def\whichinfo{\toks#2}% + \def\afternudge{#3}\expandafter\xyFN@\expandafter\nudgepos@@\the\toks@ @} +\xydef@\nudgepos@@{\ifx \space@\next\expandafter\DN@\space{\xyFN@\nudgepos@}% + \else\addLT@\ifx \next + \addGT@{\addLT@\DN@##1}##2@{% + \ifx\omit##1\relax\whichnudge={0}\whichinfo={}% + \else\whichnudge={##1}\whichinfo={##2}\fi\xyFN@\afternudge}% + \else \DN@##1@{\whichinfo={##1}\xyFN@\afternudge}% + \fi\fi \next@ } +\xydef@\modmap@{% + \expandafter\ifx\the\toks4@\toks4={!}% + \else\expandafter\ifx\the\toks4=\toks4={H}% + \else\expandafter\ifx\the\toks4^\toks4={A}% + \else\expandafter\ifx\the\toks4_\toks4={V}\fi\fi\fi\fi + \expandafter\DN@\expandafter{\the\toks6}% + \ifx\next@\empty\relax\else\expandafter\moddefs@\fi} +\xydef@\moddefs@{% + \expandafter\dimen@\the\toks6\p@ + \ifdim\dimen@=\z@\relax + \expandafter\dimen@\the\toks7\p@ + \ifdim\dimen@<\z@\advance\dimen@.5\p@\else\advance\dimen@-.5\p@\fi + \edef\tmp@{\noexpand\toks7={\expandafter\removePT@\the\dimen@}}\tmp@ + \expandafter\dimen@\the\toks8\p@ + \ifdim\dimen@<\z@\advance\dimen@-.5\p@\else\advance\dimen@.5\p@\fi + \expandafter\ifx\the\toks3t\advance\dimen@-1\p@\fi + \edef\tmp@{\noexpand\toks8={\expandafter\removePT@\the\dimen@}}\tmp@ + \else + \ifdim\dimen@<\z@\advance\dimen@-.5\p@\else\advance\dimen@.5\p@\fi + \edef\tmp@{\noexpand\toks6={\expandafter\removePT@\the\dimen@}}\tmp@ + \expandafter\dimen@\the\toks7\p@ + \ifdim\dimen@<\z@\advance\dimen@-.5\p@\else\advance\dimen@.5\p@\fi + \expandafter\ifx\the\toks3t\advance\dimen@-2\p@\fi + \edef\tmp@{\noexpand\toks7={\expandafter\removePT@\the\dimen@}}\tmp@ + \expandafter\dimen@\the\toks8\p@ + \ifdim\dimen@<\z@\advance\dimen@-.5\p@\else\advance\dimen@.5\p@\fi + \expandafter\ifx\the\toks3t\advance\dimen@-2\p@\fi + \edef\tmp@{\noexpand\toks8={\expandafter\removePT@\the\dimen@}}\tmp@ + \fi }% +\xydef@\modmapobject#1{\def\modmapobject@{#1}} +\xydef@\modmapobject@{\dir{|}} +\xydef@\@modmapobject@{{\if\@mod@\relax\expandafter\empty + \else\expandafter\modmapobject@\fi}} +\xydef@\curveobject#1{\def\ucurveObject@{~*#1}\def\dcurveObject@{~*#1}} +\xydef@\uppercurveobject#1{\def\ucurveObject@{~*#1}} +\xydef@\lowercurveobject#1{\def\dcurveObject@{~*#1}} +\xydef@\ucurveObject@{} +\xydef@\dcurveObject@{} +\xydef@\savetwocellobjects{% + \xy@{twocell objects}{% + \expandafter\uppercurveobject\expandafter{\ucurveObject@}% + \expandafter\lowercurveobject\expandafter{\dcurveObject@}% + \expandafter\modmapobject\expandafter{\modmapobject@}% + \expandafter\twocellhead\expandafter{\twocellhead@}% + \expandafter\twocelltail\expandafter{\twocelltail@}% + \expandafter\arrowobject\expandafter{Arrowobject@}% + }} +\xydef@\twocell@path.[#1].{% + \expandafter\ifx\csname Q@@c\endcsname\relax + \DN@{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}% + \xy@{}{\expandafter\edef\csname Q@@\endcsname{\cfromthec@}}% + \afterPOS{\xy@{}% + {\expandafter\edef\csname Q@@c\endcsname{\cfromthec@}}% + \xy@{}% + {\cfromid@{@}\expandafter\edef\csname Q@@p\endcsname{\cfromthec@}}% + \xy@{twocell #1}{#1}\leave@\aftertwoCELL};p,}% + \else + \DN@{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}% + \xy@{twocell #1}{#1}\leave@\aftertwoCELL}% + \fi \next@ } +\xydef@\twocellpath.[#1].{% + \expandafter\edef\csname Q@@p\endcsname{\cfromthec@}% + \xy@{}{\enter@{\pfromthep@}}% + \xy@{}{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}% + \enter@{\pfromthec@}}% + \afterPOS{\xy@{}{\leave@\setupDirection@}#1\restore\restore + \xy@{end of 2-cell}\xysaveMinMax@ }}% +\xydef@\xysaveMinMax@{\edef\tmp@{\endgroup + \noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi + \noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi + \noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi + \noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi + }\tmp@ } +\xylet@\twocellPATH=\twocellpath +\xydef@\aftertwo@CELL{\let\twocellPATH=\twocellpath \def\aftertwoCELL{}} +\xydef@\aftertwoCELL{} +\xydef@\twocell@@@@#1!!!{\xy@{twocell #1}{\twocell@@#1!!!}} +\let\xystatus=\xystatus@ +\xydef@\twocell{\hbox\bgroup\@twocell} +\xydef@\uppertwocell{\hbox\bgroup\@uppertwocell} +\xydef@\lowertwocell{\hbox\bgroup\@lowertwocell} +\xydef@\compositemap{\hbox\bgroup\@compositemap} +\xydef@\twocelll#1#{\hbox\bgroup\xy@\save\save@\@twocelll{#1}} +\xydef@\@twocelll#1#2{% + \afterPOS{\@twocelll@\xyFN@\twocell@#1{#2}}} +\xydef@\uppertwocelll#1#{\hbox\bgroup\xy@\save\save@\@uppertwocelll{#1}} +\xydef@\@uppertwocelll#1#2{% + \afterPOS{\@twocelll@\xyFN@\uppertwocell@#1{#2}}} +\xydef@\lowertwocelll#1#{\hbox\bgroup\xy@\save\save@\@lowertwocelll{#1}} +\xydef@\@lowertwocelll#1#2{% + \afterPOS{\@twocelll@\xyFN@\lowertwocell@#1{#2}}} +\xydef@\compositemapp#1#{\hbox\bgroup\xy@\save\save@\@compositemapp{#1}} +\xydef@\@compositemapp#1#2{% + \afterPOS{\@twocelll@\xyFN@\compositemap@#1{#2}}} +\xydef@\@twocelll@{% + \expandafter\edef\csname Q@@c\endcsname{\cfromthec@}\swap@ + \expandafter\edef\csname Q@@p\endcsname{\cfromthec@}\swap@ + \let\twocellPATH=\twocell@path + \def\aftertwoCELL{\twocell@DONE \xy@\restore \leave@ + }} +\xydef@\@twocell#1{\DN@{\@twocell@\twocell@}\xyFN@\next@[#1]} +\xydef@\@uppertwocell#1{\DN@{\@twocell@\uppertwocell@}\xyFN@\next@[#1]} +\xydef@\@lowertwocell#1{\DN@{\@twocell@\lowertwocell@}\xyFN@\next@[#1]} +\xydef@\@compositemap#1{\DN@{\@twocell@\compositemap@}\xyFN@\next@[#1]} +\xydef@\@twocell@#1{\ifx\next[\DN@[{\toks@={#1}\xyFN@\@@twocell@}% + \else\DN@{#1{}}\fi +%% + \expandafter\edef\csname Q@@c\endcsname{\cfromthec@}\swap@ + \expandafter\edef\csname Q@@p\endcsname{\cfromthec@}\swap@ + \let\twocellPATH=\twocell@path + \def\aftertwoCELL{\twocell@DONE}\next@} +\xydef@\@@twocell@{\ifx\next\bgroup\DN@##1]{\the\toks@{##1}}% + \else\DN@##1]{\the\toks@##1}\fi\next@} +%% \DN@{\twocell}% +%% \expandafter\def\csname*dir@@\codeof\next@ @\endcsname{\@twocell} +%% \DN@{\uppertwocell}% +%% \expandafter\def\csname*dir@@\codeof\next@ @\endcsname{\@uppertwocell} +%% \DN@{\lowertwocell}% +%% \expandafter\def\csname*dir@@\codeof\next@ @\endcsname{\@lowertwocell} +%% \DN@{\compositemap}% +%% \expandafter\def\csname*dir@@\codeof\next@ @\endcsname{\@compositemap} +\xydef@\twocell@DONE{% + \edef\tmp@{\egroup \X@min=\the\X@min \X@max=\the\X@max + \Y@min=\the\Y@min \Y@max=\the\Y@max}\tmp@ + \L@c=\X@c \advance\L@c-\X@min \R@c=\X@max \advance\R@c-\X@c + \D@c=\Y@c \advance\D@c-\Y@min \U@c=\Y@max \advance\U@c-\Y@c + \ht\z@=\U@c \dp\z@=\D@c \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ + \computeLeftUpness@ +\setboxz@h{\kern-\X@p \raise-\Y@c\boxz@ }% +\dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \ht\z@=\U@c \dp\z@=\D@c + \Edge@c={\rectangleEdge}\Invisible@false \Hidden@false + \edef\Drop@@{\noexpand\drop@Twocell + \noexpand\def\noexpand\Leftness@{\Leftness@}% + \noexpand\def\noexpand\Upness@{\Upness@}}% + \edef\Connect@@{\noexpand\connect@Twocell + \noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi + \noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi + \noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi + \noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi }}% +\xydef@\drop@Twocell{\boxz@ } +\xydef@\connect@Twocell{% + \setboxz@h{\kern\X@p \raise\Y@c\box\lastobjectbox@ }% + \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \Drop@@ } +\xywarnifdefined\@mod@ +\xywarnifdefined\Arrowtok@ +\xydef@\twocell@@#1#2#3#4#5#6#7#8#9!!!{% + \def\@mod@{@}\DN@{#9}% + \ifx #9!\def\Arrowtok@{@}\else\ifx #9A\def\Arrowtok@{^}% + \else\ifx #9V\def\Arrowtok@{_}\else\ifx #9H\def\Arrowtok@{=}% + \else\def\@mod@{\relax}% + \ifx #5/\def\Arrowtok@{@}\else\ifx #5b\def\Arrowtok@{@}% + \else\ifx #5B\def\Arrowtok@{@}\else\ifx #5@\def\Arrowtok@{@}% + \else\def\Arrowtok@{#9}% + \fi\fi\fi\fi\fi\fi\fi\fi + \addEQ@\ifx #9\def\Arrowtok@{=}\fi + \DN@{\omit}\ifx\next@\Arrowtok@\def\Arrowtok@{}\else + \edef\Arrowtok@{\codeof\Arrowtok@}\fi + \save@ \idfromc@{@c}\swap@\idfromc@{@p}\swap@ + \cfromid@{@c}\no@@ + \ifdim \X@c<\X@p \X@min=\X@c \X@max=\X@p \else \X@min=\X@p \X@max=\X@c \fi + \ifdim \Y@c<\Y@p \Y@min=\Y@c \Y@max=\Y@p \else \Y@min=\Y@p \Y@max=\Y@c \fi + \Calong@@{.5}\idfromc@{@m}\idfromc@{@m1}\idfromc@{@m2}% + \ifx #5t\relax + \enter@{\cplusthec@\pfromthep@}% + \enter@\DirectionfromtheDirection@ \begingroup\aboveDirection@ \xydashl@ + \DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\fi + \ifdim\dimen@=\z@ \DN@{\vfromslide@i{\xydashl@}@}\relax + \else\DN@{\vfromslide@i{#1\xydashl@}@}\fi \next@ + \czeroEdge@ \leave@ \no@@ \drop@{+}{}\idfromc@{@m1}% + \DN@{#1}\ifx\next@\empty\DN@{\no@@}\else\DN@{\connect@{\dir}{-}}\fi + \else + \DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\fi + \ifdim\dimen@=\z@ \enter@{\cplusthec@\pfromthep@}% + \enter@\DirectionfromtheDirection@ \begingroup\aboveDirection@\xydashl@ + \vfromslide@i{\xydashl@}@\czeroEdge@ \leave@ \idfromc@{@m1}% + \cfromid@{@p}\swap@\cfromid@{@c}% + \DN@{#1}\ifx\next@\empty\DN@{\no@@}\else\DN@{\connect@{\dir}{-}}\fi + \else \DN@{\enter@\cplusthec@ + \enter@\DirectionfromtheDirection@ \begingroup\aboveDirection@ \xydashl@ + \vfromslide@i{#1\xydashl@}@\czeroEdge@ \leave@ + \idfromc@{@m1}\cfromid@{@p}\swap@\cfromid@{@c}% + \edef\next@{\codeof\ucurveObject@}% + \ifx\next@\empty\DN@{\connect@\crv{"@m1"}}% + \else + \DNii@####1{\connect@\crv{####1}}\expandafter\DN@\expandafter{% + \expandafter\nextii@\expandafter{\ucurveObject@"@m1"}}% + \fi \next@ }% +%% \ifx\next@\empty\def\ucurveObject@{.}\fi +%% \enter@\cfromthec@\sinit@\cfromid@{@m1}\senter@\leave@ +%% \expandafter\connect@\expandafter\crvs\expandafter{\ucurveObject@}% +%% \sinit@\sleave@ }% + \fi + \fi \next@ + \DN@{#1}\ifx\next@\empty\relax\else + \if\@mod@ @\relax + \enter@\pfromthep@ \Creset@@ + \ifx #5t\relax + \PLACEedgec@ \PLACEedgep@ \def\PLACEf@{{.5}}% + \else \def\next@{\crvreset@}% + \ifx\next@\Creset@@ + \gettwocelledges@ \edef\PLACEf@{{\expandafter\removePT@\the\dimen@}}% + \else \PLACEedgec@ \PLACEedgep@ \def\PLACEf@{{.5}}\fi + \fi + \expandafter\Calong@@\PLACEf@ \czeroEdge@ \leave@ + \edef\tmp@{\codeof\modmapobject@}% + \ifx\tmp@\empty \DN@{\drop@{\dir}{|}}% + \else \DNii@##1##{\drop@{##1}}% + \DN@{\expandafter\nextii@\modmapobject@{}}% + \fi \next@ + \fi\fi + \DN@{#6}\ifx\next@\empty\DN@{\relax}\else + \DNii@{{}}\ifx\next@\nextii@\DN@{\relax}\else + \ifx @#3\relax\DN@{\relax}\else + \DN@{\enter@\pfromthep@ \Creset@@ + \Calong@@{.5}\czeroEdge@ \leave@ + \enter@\cplusthec@ + \enter@\DirectionfromtheDirection@\begingroup + \DN@{#1}\ifx\next@\empty\dimen@\z@\else\dimen@=#1\p@\fi + \ifdim\dimen@<\z@ \belowDirection@ \xydashl@ + \else \aboveDirection@ \xydashl@ \fi + \dimen@=#3\p@ \if\@mod@ @\relax + \advance\dimen@\ifdim\dimen@<\z@-\fi.5\p@\fi + \edef\next@{\expandafter\removePT@\the\dimen@}% + \expandafter\vfromslide@i\expandafter{\next@\xydashl@}@\leave@ + \droptwocelllabel@{#6}}% + \fi\fi\fi \next@ + \DN@{#1}\ifx\next@\empty\relax\else + \ifx #5b\relax + \enter@ {\pfromthep@ }\Creset@@ \PLACEedgep@ + \Calong@@{0}\czeroEdge@ \leave@ + \edef\next@{\codeof\twocelltail@}% + \ifx\next@\empty \DN@{\dir{>}}% + \ifx\next@\twocellhead@\drop@{\dir}{<}% + \else + \reverseDirection@ \DNii@##1##{\drop@{##1}}% + \expandafter\nextii@\twocellhead@{}\reverseDirection@ + \fi + \else + \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}% + \fi + \else\ifx #5@\relax + \else + \enter@\pfromthep@ \Creset@@ \PLACEedgec@ + \Calong@@{1}\czeroEdge@ \leave@ + \edef\next@{\codeof\twocellhead@}% + \ifx\next@\empty\drop@{\dir}{>}% + \else + \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocellhead@{}% + \fi + \ifx #5B\relax + \enter@ {\pfromthep@ }\Creset@@ \PLACEedgep@ + \Calong@@{0}\czeroEdge@ \leave@ + \edef\next@{\codeof\twocelltail@}% + \ifx\next@\empty \DN@{\dir{>}}% + \ifx\next@\twocellhead@\drop@{\dir}{<}% + \else + \reverseDirection@\DNii@##1##{\drop@{##1}}% + \expandafter\nextii@\twocellhead@{}\reverseDirection@ + \fi + \else + \DNii@##1##{\drop@{##1}}\expandafter\drop\twocelltail@{}% + \fi + \else\ifx #5/\relax + \else \edef\next@{\codeof\twocelltail@}% + \ifx\next@\empty\relax\else + \enter@\pfromthep@ \Creset@@ \PLACEedgep@ + \Calong@@{0}\czeroEdge@ \leave@ + \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}% + \fi\fi\fi + \fi\fi\fi + \cfromid@{@p}\swap@\cfromid@{@c}\no@@ \cfromid@{@m}% + \ifx #5t\relax + \idfromc@{@m2}\cfromid@{@m1}\swap@ \cfromid@{@c}\no@@ + \DN@{#1}\ifx\next@\empty\DN@{\no@@}\else\DN@{\connect@{\dir}{-}}\fi + \else\ifx #5o\relax + \idfromc@{@m2}\DN@{}% + \else + \DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\fi + \ifdim\dimen@=\z@ + \enter@{\cplusthec@\pfromthep@}% + \enter@\DirectionfromtheDirection@ \begingroup \belowDirection@\xydashl@ + \vfromslide@i{\xydashl@}@\czeroEdge@ \leave@ \idfromc@{@m2}% + \DN@{\cfromid@{@p}\swap@\cfromid@{@c}\no@@}% + \else \DN@{\enter@\cplusthec@ + \enter@\DirectionfromtheDirection@ \begingroup \belowDirection@ \xydashl@ + \vfromslide@i{#1\xydashl@}@\czeroEdge@ \leave@ + \idfromc@{@m2}\cfromid@{@p}\swap@\cfromid@{@c}% + \edef\next@{\codeof\dcurveObject@}% + \ifx\next@\empty\DN@{\connect@\crv{"@m2"}}% + \else + \DNii@####1{\connect@\crv{####1}}\expandafter\DN@\expandafter{% + \expandafter\nextii@\expandafter{\dcurveObject@"@m2"}}% + \fi \next@ }\fi +%% \enter@\cfromthec@\sinit@\cfromid@{@m2}\senter@\leave@ +%% \expandafter\connect@\expandafter\crvs\expandafter{\dcurveObject@}% +%% \sinit@\sleave@ +%% }\fi + \fi\fi \next@ + \DN@{#1}\ifx\next@\empty\relax\else \ifx #5o\relax\else + \if\@mod@ @\DN@{\enter@\pfromthep@ \Creset@@ + \ifx #5t\relax + \PLACEedgec@ \PLACEedgep@ \def\PLACEf@{{.5}}% + \else \def\next@{\crvreset@}% + \ifx\next@\Creset@@ + \gettwocelledges@ \edef\PLACEf@{{\expandafter\removePT@\the\dimen@}}% + \else \PLACEedgec@ \PLACEedgep@ \def\PLACEf@{{.5}}\fi + \fi + \expandafter\Calong@@\PLACEf@ \czeroEdge@ \leave@ + \edef\tmp@{\codeof\modmapobject@}\ifx\tmp@\empty\DN@{\drop@{\dir}{|}}% + \else \DNii@####1####{\drop@{####1}}% + \DN@{\expandafter\nextii@\modmapobject@{}}\fi + \next@ }\else\DN@{\relax}\fi + \next@ \fi\fi + \DN@{#7}\ifx\next@\empty\DN@{\relax}\else + \DNii@{{}}\ifx\next@\nextii@\DN@{\relax}\else + \ifx @#4\relax\DN@{\relax}\else + \DN@{\enter@\pfromthep@ \Creset@@ + \Calong@@{.5}\czeroEdge@ \leave@ + \enter@\cplusthec@ + \enter@\DirectionfromtheDirection@ \begingroup + \DN@{#1}\ifx\next@\empty\dimen@\z@ \else\dimen@=#1\p@\fi + \ifx #5t\relax \ifdim\dimen@<\z@ \belowDirection@ \xydashl@ + \else \aboveDirection@ \xydashl@ \fi + \else \ifdim\dimen@<\z@ \aboveDirection@ \xydashl@ + \else \belowDirection@ \xydashl@ \fi + \fi \dimen@=#4\p@ \if\@mod@ @\relax + \advance\dimen@\ifdim\dimen@<\z@-\fi.5\p@\fi + \edef\next@{\expandafter\removePT@\the\dimen@}% + \expandafter\vfromslide@i\expandafter{\next@\xydashl@}@\leave@ + \droptwocelllabel@{#7}}% + \fi\fi\fi \next@ + \DN@{#1}\ifx\next@\empty\relax\else + \ifx #5o\relax + \else\ifx #5b\relax + \enter@ {\pfromthep@ }\Creset@@ \PLACEedgec@ + \Calong@@{1}\czeroEdge@ \leave@ + \edef\next@{\codeof\twocelltail@}% + \ifx\next@\empty \DN@{\dir{>}}% + \ifx\next@\twocellhead@\drop@{\dir}{>}% + \else + \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocellhead@{}% + \fi + \else + \DNii@##1##{\drop@{##1}}\expandafter\drop\twocelltail@{}% + \fi + \else\ifx #5/\relax + \enter@{\pfromthep@}\Creset@@ \PLACEedgep@ + \Calong@@{0}\czeroEdge@ \leave@ + \edef\next@{\codeof\twocelltail@}% + \ifx\next@\empty \DN@{\dir{>}}% + \ifx\next@\twocellhead@\drop@{\dir}{<}% + \else + \reverseDirection@\DNii@##1##{\drop@{##1}}% + \expandafter\nextii@\twocellhead@{}\reverseDirection@ + \fi + \else + \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}% + \fi + \else\ifx #5@\relax + \else + \enter@\pfromthep@ \Creset@@ \PLACEedgec@ + \Calong@@{1}\czeroEdge@ \leave@ + \edef\next@{\codeof\twocellhead@}% + \ifx\next@\empty\drop@{\dir}{>}% + \else + \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocellhead@{}% + \fi + \ifx #5B\relax + \enter@ {\pfromthep@ }\Creset@@ \PLACEedgep@ + \Calong@@{0}\czeroEdge@ \leave@ + \edef\next@{\codeof\twocelltail@}% + \ifx\next@\empty\DN@{\dir{>}}% + \ifx\next@\twocellhead@\drop@{\dir}{<}% + \else + \reverseDirection@\DNii@##1##{\drop@{##1}}% + \expandafter\nextii@\twocellhead@{}\reverseDirection@ + \fi + \else + \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}% + \fi + \else + \edef\next@{\codeof\twocelltail@}% + \ifx\next@\empty\relax\else + \enter@ {\pfromthep@ }\Creset@@ \PLACEedgep@ + \Calong@@{0}\czeroEdge@ \leave@ + \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}% + \fi\fi + \fi\fi\fi + \fi\fi + \DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\fi + \ifdim\dimen@<\z@ \cfromid@{@m2}\swap@\cfromid@{@m1}% + \else \cfromid@{@m1}\swap@\cfromid@{@m2}% + \fi \no@@ \cfromid@{@m}% + \ifx\Arrowtok@\empty + \else\DN@{_}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@ + \enter@{\pfromthep@ \cplusthec@}\dimen@=#2\xydashl@ + \enter@\DirectionfromtheDirection@ \begingroup + \expandafter\vfromslide@i\expandafter{\the\dimen@}@\czeroEdge@ + \leave@ \idfromc@{@m}% + \DNii@##1##{\drop@{##1}}\expandafter\nextii@\Arrowobject@{}% + \else\DN@{^}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@ + \DN@{_}\edef\Arrowtok@{\codeof\next@}% + \enter@{\pfromthep@ \cplusthec@}\dimen@=#2\xydashl@ + \enter@\DirectionfromtheDirection@ \begingroup + \expandafter\vfromslide@i\expandafter{\the\dimen@}@\czeroEdge@ + \leave@ \idfromc@{@m}\reverseDirection@ + \DNii@##1##{\drop@{##1}}\expandafter\nextii@\Arrowobject@{}% + \else \DN@{=}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@ + \enter@{\pfromthep@ \cplusthec@}% + \dimen@=#2\xydashl@ \advance\dimen@\xydashl@ + \enter@\DirectionfromtheDirection@ \begingroup + \expandafter\vfromslide@i\expandafter{\the\dimen@}@\czeroEdge@ + \leave@ \idfromc@{@m2}% + \cfromid@{@m}% + \enter@{\pfromthep@ \cplusthec@}% + \dimen@=#2\xydashl@ \advance\dimen@-\xydashl@ + \enter@\DirectionfromtheDirection@ \begingroup + \expandafter\vfromslide@i\expandafter{\the\dimen@}@\czeroEdge@ + \leave@ \idfromc@{@m1}% + \cfromid@{@m2}\swap@\cfromid@{@m1}\connect@{\dir 2}{-}% + \fi\fi\fi\fi + \DN@{#8}\ifx\next@\empty\DN@{}\else\DN@{% + \ifx\Arrowtok@\empty + \Calong@@{.5}% + \else\DN@{=}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@ + \Calong@@{.5}% + \else\DN@{_}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@ + \cfromid@{@m}% + \fi\fi\fi + \enter@\cplusthec@ + \enter@\DirectionfromtheDirection@ \begingroup \aboveDirection@\xydashl@ + \ifx\Arrowtok@\empty + \def\tmp@{0pt}% + \else\DN@{=}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@ + \def\tmp@{\xydashl@}% + \else\DN@{_}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@ + \def\tmp@{1.2\xydashl@}% + \else\def\tmp@{0pt}% + \fi\fi\fi + \expandafter\vfromslide@i\expandafter{\tmp@}@\czeroEdge@ \leave@ + \droptwocelllabel@{#8}% + }\fi \next@ + \leave@ }% +\xydef@\gettwocelledges@{% + \bgroup \the\crvpts@ + \edef\next@{\edges@}% + \expandafter\gettwocelledges@@\next@ } +\xydef@\gettwocelledges@@#1;#2,#3;#4,{% + \dimen@=#2\advance\dimen@-#4\relax + \advance\dimen@ 2\p@ \divide\dimen@ by4 \relax + \edef\next@{\egroup\dimen@=\the\dimen@ }\next@}% +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyall.tex b/macros/generic/diagrams/xypic/texinputs/xyall.tex new file mode 100644 index 0000000000..a95fe9d213 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyall.tex @@ -0,0 +1,36 @@ +%% xyall.tex from $Id: xyall.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``All features'' option. +%% Copyright (c) 1993-1996 Kristoffer H. Rose +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{all}{All features}{\stripRCS$Revision: 3.8 $}% + {Kristoffer H.~Rose}{krisrose@tug.org}% + {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)} +\xyrequire{curve} +\xyrequire{frame} +\xyrequire{cmtip} +\xyrequire{line} +\xyrequire{rotate} +\xyrequire{color} +\xyrequire{matrix} +\xyrequire{arrow} +\xyrequire{graph} +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyarc.tex b/macros/generic/diagrams/xypic/texinputs/xyarc.tex new file mode 100644 index 0000000000..eaad720083 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyarc.tex @@ -0,0 +1,683 @@ +%% xyarc.tex from $Id: xyarc.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Circles, Ellipses and Arcs'' feature. +%% Copyright (c) 1995-1997 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{arc}{Circle, Ellipse, Arc feature}{\stripRCS$Revision: 3.8 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xyrequire{curve} +\xycatcodes +\xydef@\ellipse#1#{\xy@{ELLIPSE}{\hbox\bgroup\save@}% + \let\endarc@=\endellipse@@ \xyFN@\preARC@ #1@} +\xydef@\endellipse@@{\xy@{endELLIPSE}{\leave@\origDirection@ + \edef\next@{\egroup \X@min=\the\X@min \X@max=\the\X@max + \Y@min=\the\Y@min \Y@max=\the\Y@max }\next@}\let\bstartPLACE@=\relax} +\xydef@\preARC@{% + \ifx\next\space@ \expandafter\DN@\space{\xyFN@\preARC@}% + \else\ifx\next @\DN@{\xy@{ellipseARC}\ellipticARC@ \arc@}% + \else\ifx\next ~\DN@~##1{\tildeARC@{##1}}% + \else\DN@{\xy@{ellipticARC}\ellipticARC@ \arc@}% + \fi\fi\fi \next@ } +\xydef@\arc@#1@#2{\DN@{#2}% + \ifx\next@\empty \xy@{arcSTYLE}{\def\arcSTYLE{-}}% + \else \xy@{arcSTYLE}{\def\arcSTYLE{#2}}\fi \arc@i + \DNii@{#1}% + \ifx\nextii@\empty \DN@{\fullCircle@}% + \else \DN@{_}% + \ifx\next@\nextii@ \xy@{_}{\def\arcOrient@@{_}}% + \let\arcOrient@@=\next@ \DN@{\fullCircle@}% + \else \DN@{^}% + \ifx\next@\nextii@ \xy@{^}{\def\arcOrient@@{^}}% + \let\arcOrient@@=\next@ \DN@{\fullCircle@}% + \else \DN@{\def\afterARCextents@@{% + \xy@{aftARCext}{\let\doCircleArc@=\doCircleArc@@}% + \ellipseArc@ \xy@{doCircARCs}{\doCircleArcs@}\endarc@ }% + \xyFN@\getarcparams@#1@}\fi\fi\fi + \next@ } +\xydef@\arc@i{\xy@{ARCi}{% + \save@\idfromc@{0@c}\cfromp@\idfromc@{0@p}% + \enter@\cplusthec@ \enter@\relax\begingroup\vfromslide@i{}@\czeroEdge@ + \leave@\idfromc@{0@m}\leave@ \zeroDivideLimit@{50}% + \edef\origDirection@{\Direction=\the\Direction + \relax\noexpand\imposeDirection@}% + \let\startDirection@=\origDirection@ \def\startDirection@@{}% + \def\endDirection@{}\def\endDirection@@{}\def\arcOrient@@{^}}% + \def\arcOrient@@{^}\let\processDirections@=\checkstartDirection@ + \def\arcRadius@{}\def\ellipseRatio@{}\def\arcScale@{\arcScale@@}} +\message{circles,} +\xydef@\fullCircle@{\xy@{fullCIRC}{\let\endDirection@=\relax + \let\doCircleArc@=\doMergeEndArc@@}\circleArc@ }% +\xydef@\getarcparams@{% + \ifx\space@\next \expandafter\DN@\space{\xyFN@\getarcparams@}% + \else\addLT@\ifx \next \xy@{<}{}% + \addGT@{\addLT@\DN@##1}{\splitRadius@dim##1,,@}% + \else\ifx\next (\DN@({\xyFN@\checkRadOpen@}% + \else\ifx\next @\xy@{@}{}\DN@ @{\fullEllipse@}% + \else \addLQ@\ifx \next \addLQ@\DN@{\xy@`{}\ARCturn@}% + \else \DN@{\getarcExtents@}% + \fi\fi\fi\fi\fi \next@ } +\xydef@\checkRadOpen@{% + \ifx\next *\DN@{\xyFN@\getarcExtents@ (}% + \else \xy@{(}{}\DN@##1){\splitRadius@##1,,@}% + \fi \next@ } +\xydef@\fixedRadiusArc@{% + \xy@{fixRadArc}{\save@ \idfromc@{0@0}\cfromp@\idfromc@{0@c}\leave@}% + \xyFN@\fixedRadiusArc@i } +\xydef@\fixedRadiusArc@i{% + \ifx\next\space@ \expandafter\DN@\space{\xyFN@\fixedRadiusArc@i}% + \else\ifx\next @\xy@{@}{}\DN@ @{\fullEllipse@}% + \else\DN@{\let\processDirections@=\processArcDirections@ + \def\afterARCextents@@{\xy@{aftARCext}{\let\doCircleArc@=\doCircleArc@@ + \ellipseSector@}}\xyFN@\getarcExtents@}% + \fi\fi \next@ } +\xydef@\arcScale@@{\xy@{arcSCALE@@}{\save@ + \cfromid@{0@0}\pfromc@\cfromid@{0@p}\setbase@\X@p\Y@p\X@c\Y@c}} +\xydef@\arcScale@dim#1{\xy@{arcSCALEdim}{\save@ + \cfromid@{0@0}\pfromc@ \cfromid@{0@p}\setupDirection@\cfromp@ + \enter@\cplusthec@ \begingroup\vfromslide@i#1@% + \setbase@\X@p\Y@p\X@c\Y@c \idfromc@{0@p}}} +\xydef@\ellipseScale@dim#1{\xy@{ellSCALEdim}{\setupDirection@\cfromp@ + \enter@\cplusthec@ \aboveDirection@\xydashl@ \vfromslide@{#1}\leave@ + \setbase@@\X@c\Y@c}} +\xydef@\ellipseScale@#1{\xy@{ellSCALE@}% + {\vfromcartesian@@0,#1@\setbase@@\X@c\Y@c}} +\xydef@\splitRadius@dim#1,#2,#3@{% + \DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\relax%\splinetracing + \expandafter\def\expandafter\arcRadius@ + \expandafter{\arcScale@dim{#1}}\fi + \DN@{#2}\ifx\next@\empty\dimen@ii=\z@\def\ellipseRatio@{}% + \else\dimen@ii=#2\relax \expandafter + \def\expandafter\ellipseRatio@\expandafter{\ellipseScale@dim{#2}}% + \fi \fixedRadiusArc@ } +\xydef@\splitRadius@#1,#2,#3@{% + \DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\relax\fi + \DN@{#2}\ifx\next@\empty\dimen@ii=\z@\else\dimen@ii=#2\p@\relax\fi + \ifdim\dimen@=\z@ \ifdim\dimen@ii=\z@\else \expandafter + \def\expandafter\ellipseRatio@\expandafter{\ellipseScale@{#2}}\fi + \else + \ifdim\dimen@ii=\z@ + \def\arcScale@{\xy@{arcSCALE@}{\save@\cfromid@{0@0}% + \X@origin=\X@c \Y@origin=\Y@c + \X@xbase=#1\X@xbase \Y@xbase=#1\Y@xbase + \X@ybase=#1\X@ybase \Y@ybase=#1\Y@ybase + \advance\X@c\X@xbase \advance\Y@c\Y@xbase \czeroEdge@ + \idfromc@{0@p}\idfromc@{0@c}}}% + \else + \def\arcScale@{\xy@{arcSCALE@}{\save@\cfromid@{0@0}% + \X@origin=\X@c \Y@origin=\Y@c + \X@xbase=#1\X@xbase \Y@xbase=#1\Y@xbase + \X@ybase=#2\X@ybase \Y@ybase=#2\Y@ybase + \advance\X@c\X@xbase \advance\Y@c\Y@xbase \czeroEdge@ + \idfromc@{0@p}\idfromc@{0@c}}}% + \fi + \fi \fixedRadiusArc@ } +\xydef@\baseOrient@{\DN@{_}\ifx\next@\arcOrient@@ + \X@ybase=-\X@ybase \Y@ybase=-\Y@ybase \fi } +\message{ellipses,} +\xydef@\fullEllipse@{\xy@{fullELLIPSE}% + {\def\startDirection@{}\let\doCircleArc@=\doMergeEndArc@@}% + \ellipseArc@ + \xy@{doCIRCarcs}{\leave@ \doCircleArcs@}\endarc@ } +\xydef@\ellipseArc@{% + \arcScale@ \arcRadius@ \ellipseRatio@ + \xy@{arcCONTROLS}{\baseOrient@ \arcControls@ \let\bstartPLACE@=\relax }} +\xydef@\cubicARCcontrols@@{\czeroEdge@ + \vfromcartesian@@0,1@\idfromc@{1@c}% + \vfromcartesian@@-1,0@\idfromc@{2@c}% + \vfromcartesian@@0,-1@\idfromc@{3@c}% + \vfromcartesian@@1,\arcparam@ @\idfromc@{1@m}% + \vfromcartesian@@\arcparam@,1@\idfromc@{2@m}% + \vfromcartesian@@-\arcparam@,1@\idfromc@{3@m}% + \vfromcartesian@@-1,\arcparam@ @\idfromc@{4@m}% + \vfromcartesian@@-1,-\arcparam@ @\idfromc@{5@m}% + \vfromcartesian@@-\arcparam@,-1@\idfromc@{6@m}% + \vfromcartesian@@\arcparam@,-1@\idfromc@{7@m}% + \vfromcartesian@@1,-\arcparam@ @\idfromc@{8@m}% + } +\xydef@\doCircleArc@@#1#2{\save@ \ifcase#2\relax + \doCircleArc@@@{0@p}{1@m}{2@m}{1@c}{#1}\or + \doCircleArc@@@{1@c}{3@m}{4@m}{2@c}{#1}\or + \doCircleArc@@@{2@c}{5@m}{6@m}{3@c}{#1}\or + \doCircleArc@@@{3@c}{7@m}{8@m}{0@p}{#1}\or + \doCircleArc@@@{0@p}{1@m}{2@m}{1@c}{#1}\or + \doCircleArc@@@{1@c}{3@m}{4@m}{2@c}{#1}\or + \doCircleArc@@@{2@c}{5@m}{6@m}{3@c}{#1}\or + \doCircleArc@@@{3@c}{7@m}{8@m}{0@p}{#1}\fi \leave@ } +\xydef@\doCircleArc@@@#1#2#3#4#5{% + \cfromid@{#1}\pfromc@\senter@ + \cfromid@{#2}\spushc@\cfromid@{#3}\spushc@\cfromid@{#4}% + \connect@\crvs{#5}\relax\sinit@\sleave@} +\xydef@\doMergeEndArc@@#1#2{\save@\ifcase#2\relax + \doMergeEnd@@@{0@p}{1@m}{2@m}{1@c}{#1}\relax\or + \doMergeEnd@@@{1@c}{3@m}{4@m}{2@c}{#1}\relax\or + \doMergeEnd@@@{2@c}{5@m}{6@m}{3@c}{#1}\relax\or + \doMergeEnd@@@{3@c}{7@m}{8@m}{0@p}{#1}@\fi \leave@ } +\xydef@\doMergeEnd@@@#1#2#3#4#5#6{% + \cfromid@{#1}\pfromc@\senter@ + \cfromid@{#2}\spushc@\cfromid@{#3}\spushc@\cfromid@{#4}% + \ifx#6\relax + \L@c=.1\p@ \R@c=\L@c \U@c=\L@c \D@c=\L@c \Edge@c={\rectangleEdge}\fi + \enter@\cmergethec@\cfromid@{0@c}\leave@ + \enter@\cmergethec@\cfromcontrols@{#1}{#2}{#3}{#4}\leave@ + \connect@\crvs{#5}\relax + \sinit@\sleave@} +\xydef@\doMergeStartArc@#1#2{\save@\ifcase#2\relax + \doMergeStart@@{0@p}{1@m}{2@m}{1@c}{#1}@\or + \doMergeStart@@{1@c}{3@m}{4@m}{2@c}{#1}\relax\or + \doMergeStart@@{2@c}{5@m}{6@m}{3@c}{#1}\relax\or + \doMergeStart@@{3@c}{7@m}{8@m}{0@p}{#1}\relax\fi \leave@ } +\xydef@\doMergeStart@@#1#2#3#4#5#6{% + \cfromid@{#1}\ifx#6\relax + \L@c=.1\p@ \R@c=\L@c \U@c=\L@c \D@c=\L@c \Edge@c={\rectangleEdge}\fi + \enter@\cmergethec@\cfromid@{0@x}\leave@ + \enter@\cmergethec@\cfromcontrols@{#4}{#3}{#2}{#1}\leave@ + \pfromc@ + \senter@ \cfromid@{#2}\spushc@\cfromid@{#3}\spushc@\cfromid@{#4}% + \connect@\crvs{#5}\relax\sinit@\sleave@} +\xydef@\doMergeBothArc@#1#2{\save@\ifcase#2\relax + \doMergeBoth@@{0@p}{1@m}{2@m}{1@c}{#1}@\or + \doMergeBoth@@{1@c}{3@m}{4@m}{2@c}{#1}\relax\or + \doMergeBoth@@{2@c}{5@m}{6@m}{3@c}{#1}\relax\or + \doMergeBoth@@{3@c}{7@m}{8@m}{0@p}{#1}\relax\fi \leave@ } +\xydef@\doMergeBoth@@#1#2#3#4#5#6{% + \cfromid@{#1}\ifx#6\relax + \L@c=.1\p@ \R@c=\L@c \U@c=\L@c \D@c=\L@c \Edge@c={\rectangleEdge}\fi + \enter@\cmergethec@\cfromid@{0@x}\leave@ + \enter@\cmergethec@\cfromcontrols@{#4}{#3}{#2}{#1}\leave@ + \pfromc@ + \senter@ \cfromid@{#2}\spushc@\cfromid@{#3}\spushc@\cfromid@{#4}% + \enter@\cmergethec@\cfromid@{0@c}\leave@ + \enter@\cmergethec@\cfromcontrols@{#1}{#2}{#3}{#4}\leave@ + \connect@\crvs{#5}\relax\sinit@\sleave@} +\xydef@\doMergeEndArc@#1#2{\count@@=#2\relax + \ifnum\count@@>\thr@@ \advance\count@@-4\fi\relax + \doMergeEndArc@@{#1}\count@@ } +\xydef@\doStraightArc@@#1{\xy@{STRAITarc}{\save@ + \cfromid@{0@p}\pfromc@\cfromid@{0@c}% + \senter@\connect@\crvs{#1}\sinit@\sleave@\leave@}} +\xydef@\cfromcontrols@#1#2#3#4{\bgroup + \cfromid@{#1}\L@p=\X@c \U@p=\Y@c + \cfromid@{#4}\R@p=\X@c \D@p=\Y@c + \cfromid@{#3}\A@=\X@c \B@=\Y@c \cfromid@{#2}% + \ifdim\R@p>\L@p \ifdim\A@>\R@p \R@p=\A@ + \ifdim\X@c>\R@p \R@p=\X@c\fi\fi + \else \ifdim\A@<\R@p \R@p=\A@ + \ifdim\X@c<\R@p \R@p=\X@c\fi\fi + \fi + \ifdim\D@p>\U@p \ifdim\B@>\D@p \D@p=\B@ + \ifdim\Y@p>\D@p \D@p=\Y@p\fi\fi + \else \ifdim\B@<\D@p \D@p=\B@ + \ifdim\Y@p<\D@p \D@p=\Y@p\fi\fi + \fi + \edef\next@{\egroup \X@c=\the\R@p \Y@c=\the\D@p}\next@ } +\xydef@\doCircleArcs@{\save@ + \cfromid@{0@0}\pfromc@\cfromid@{0@p}\setupDirection@ + \startDirection@ \edef\startDirection@@{\the\Direction}% + \cfromid@{1@c}\setupDirection@ \edef\quadDirection@{\the\Direction}\relax + \count@=\quadDirection@ \relax\def\nextii@{^}% + \let\preDirection@@=\startDirection@@ + \ifx\nextii@\arcOrient@@ + \ifnum\quadDirection@>\startDirection@@ \relax + \else \advance\count@ by8192 \relax\edef\quadDirection@{\the\count@}\fi + \ifx\endDirection@@\empty + \ifx\endDirection@\relax + \bgroup\cfromid@{0@c}\setupDirection@ + \edef\next@{\egroup \count@@=\the\Direction}\next@ \relax + \ifnum\count@@<\startDirection@@ \advance\count@@ 8192 \fi + \edef\endDirection@@{\the\count@@}% + \else + \count@@=\startDirection@@ + \advance\count@@ by8192 \edef\endDirection@@{\the\count@@}% + \fi + \else + \count@@=\endDirection@@ \relax\ifnum\count@@<\startDirection@@ \relax + \advance\count@@ by8192 \edef\endDirection@@{\the\count@@}\fi + \fi + \ifnum\endDirection@@>\quadDirection@ + \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{0}}% + \else + \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{0}}% + \fi + \else + \ifnum\count@<\startDirection@@\relax\else\advance\count@ by-8192 \relax + \edef\quadDirection@{\the\count@}\fi + \ifx\endDirection@@\empty + \ifx\endDirection@\relax + \bgroup\cfromid@{0@c}\setupDirection@ + \edef\next@{\egroup \count@@=\the\Direction}\next@ \relax + \ifnum\count@@>\startDirection@@ \advance\count@@-8192 \fi + \edef\endDirection@@{\the\count@@}% + \else + \count@@=\startDirection@@ + \advance\count@@ by-8192 \edef\endDirection@@{\the\count@@}% + \fi + \else + \count@@=\endDirection@@ \relax \ifnum\count@@>\startDirection@@ + \advance\count@@ by-8192 \edef\endDirection@@{\the\count@@}\fi + \fi + \ifnum\endDirection@@<\quadDirection@ + \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{0}}% + \else \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{0}}\fi + \fi + \next@ \relax + \count@=\quadDirection@ \relax\def\nextii@{^}\DN@{}% + \ifx\nextii@\arcOrient@@ + \count@@=\startDirection@@ \advance\count@@ by4096 \relax + \ifnum \count@<\endDirection@@ \relax + \ifnum\endDirection@@>\count@@ + \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{1}}% + \else \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{1}}\fi + \fi + \else + \count@@=\startDirection@@ \advance\count@@ by-4096 \relax + \ifnum \count@>\endDirection@@ \relax + \ifnum\endDirection@@<\count@@ + \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{1}}% + \else \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{1}}\fi + \fi\fi + \next@ \relax + \ifx\next@\empty \else \relax + \count@=\startDirection@@ \relax\def\nextii@{^}\DN@{}% + \ifx\nextii@\arcOrient@@ \advance\count@ by4096 \relax + \count@@=\quadDirection@ \advance\count@@ by4096 \relax + \ifnum \count@<\endDirection@@ + \ifnum\endDirection@@>\count@@ + \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{2}}% + \else \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{2}}\fi + \fi + \else \advance\count@ by-4096 \relax + \count@@=\quadDirection@ \advance\count@@ by-4096 \relax + \ifnum \count@>\endDirection@@ \relax + \ifnum\endDirection@@<\count@@ + \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{2}}% + \else \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{2}}\fi + \fi\fi + \next@ \relax + \fi + \ifx\next@\empty \else \relax + \count@=\quadDirection@ \def\nextii@{^}\DN@{}% + \ifx\nextii@\arcOrient@@ \advance\count@ by4096 \relax + \ifnum \count@<\endDirection@@ + \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{3}}\fi + \else \advance\count@ by-4096 \relax + \ifnum \count@>\endDirection@@ + \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{3}}\fi + \fi \next@ \relax + \fi + \leave@ } +\message{elliptical arcs,} +\xydef@\arcmagic@@{0.5517847} +\xylet@\arcmagic=\arcmagic@@ +\xydef@\tildeARC@#1{% + \if q#1\DN@{\xy@{quadARC}\quadARC@ \arc@}% + \else\if c#1\DN@{\xyFN@\cubicARC@i}% + \else\if e#1\DN@{\xy@{ellipticARC}\ellipticARC@ \arc@}% + \else\if i#1\DN@{\xy@{interpARC}\interpARC@ \arc@}% + \else\if p#1\DN@{\xy@{cuspidalARC}\cuspidalARC@ \arc@}% + \else\xywarning@{unknown arc type: #1 }% + \DN@{\xy@{ellipticARC}\ellipticARC@ \arc@}% + \fi\fi\fi\fi\fi \next@ } +\xydef@\cubicARC@i{% + \ifx\next\space@ \expandafter\DN@\space{\xyFN@\cubicARC@i}% + \else\ifx\next (\DN@(##1){\xy@{cubicARC(##1)}{\cubicARC@{##1}}\arc@}% + \else \DN@{\xy@{cubicARC(1)}{\cubicARC@{1}}\arc@}% + \fi\fi \next@ } +\xydef@\ellipticARC@{\let\arcControls@=\cubicARCcontrols@@ + \edef\arcparam@{\arcmagic@@}} +\xydef@\cubicARC@#1{\let\arcControls@=\cubicARCcontrols@@ + \dimen@=#1\p@ \edef\arcparam@{\expandafter\removePT@\the\dimen@}} +\xydef@\quadARC@{\let\arcControls@=\cubicARCcontrols@@ + \def\arcparam@{.66667}} +\xydef@\cuspidalARC@{\let\arcControls@=\cubicARCcontrols@@ + \def\arcparam@{2}} +\xydef@\interpARC@{\let\arcControls@=\cubicARCcontrols@@ + \def\arcparam@{1.33333}} +\xydef@\ARCturn@{\xy@@\bgroup\afterCOORD{% + \xy@@{\edef\next@{\egroup \A@=\the\X@c \B@=\the\Y@c}\next@}\ARCturn@@}} +\xydef@\ARCturn@@#1@{\DN@{#1}\DNii@{^}% + \ifx\next@\nextii@ \xy@{^}{\def\arcOrient@@{^}}% + \else\DNii@{_}\ifx\next@\nextii@ \xy@{_}{\def\arcOrient@@{_}}% + \else\xy@{}{\def\arcOrient@@{}}\fi\fi + \xy@@\ARCturn@@@ \processDirections@@ } +\xydef@\ARCturn@@@{% + \bgroup\cfromid@{0@p}\X@p=\X@c \Y@p=\Y@c \X@c=\A@ \Y@c=\B@ + \setupDirection@ \edef\next@{\egroup\count@=\the\Direction}\next@\relax + \edef\startDirection@@{\the\count@ }% + \bgroup\cfromid@{0@c}\X@p=\A@ \Y@p=\B@ + \setupDirection@ \edef\next@{\egroup\count@=\the\Direction}\next@\relax + \edef\endDirection@@{\the\count@}% + \ifx\arcOrient@@\empty + \bgroup\cfromid@{0@p}\X@p=\X@c \Y@p=\Y@c \cfromid@{0@c}% + \setupDirection@ \edef\next@{\egroup\count@@=\the\Direction}\next@\relax + \count@=-\count@@ \advance\count@\startDirection@@ \relax \count@=-\count@ + \ifnum\count@>4096 \def\arcOrient@@{_}% + \else\ifnum\count@<-4096 \def\arcOrient@@{^}% + \else\ifnum\count@>\z@ \def\arcOrient@@{^}% + \else\def\arcOrient@@{_}\fi\fi\fi + \fi } +\xydef@\circleArc@{% + \xy@{circARC@}{\cfromid@{0@p}\pfromc@\cfromp@\startDirection@ + \arcCenter@\idfromc@{0@0}% + \def\startDirection@{\bgroup + \cfromid@{0@0}\pfromc@\cfromid@{0@p}\setupDirection@ + \edef\next@{\egroup \Direction=\the\Direction}\next@ + \relax\imposeDirection@}}% + \ifx\endDirection@@\empty + \ifx\arcRadius@\empty \ifx\ellipseRatio@\empty\else + \DN@{\arcScale@@}\ifx\arcScale@\next@\else + \xy@@{\bgroup\cfromid@{0@0}\pfromc@\cfromid@{0@c}\setupDirection@ + \edef\next@{\egroup \Direction=\the\Direction}\next@ + \edef\endDirection@@{\the\Direction}}\fi\fi\fi\fi + \ellipseArc@ \xy@@{\leave@ \doCircleArcs@}\endarc@ } +\xydef@\arcbisector{% + \cfromid@{0@p}\pfromc@\cfromid@{0@c}\setupDirection@ + \advance\X@c\X@p\divide\X@c\tw@ + \advance\Y@c\Y@p\divide\Y@c\tw@ \czeroEdge@ \pfromc@ + \enter@\cplusthec@ \enter@\relax\begingroup + \aboveDirection@\xydashl@ \vfromslide@i{}@\leave@ } +\xydef@\arcCenter@{% + \cfromid@{0@p}\pfromc@\cfromid@{0@m}\setupDirection@ + \cfromp@\enter@\cplusthec@ \enter@\relax\begingroup + \aboveDirection@\xydashl@ \vfromslide@i{}@\leave@\no@@ + \arcCenter@i } +\xydef@\arcCenter@i{% + \enter@{\pfromthep@}\setupDirection@ \Creset@@ + \let\PLACEedgep@@=\PLACEedgep@ \let\PLACEedgec@@=\PLACEedgec@ + \enter@{\pfromthep@\basefromthebase@}\bgroup + \arcbisector \edef\next@{\egroup + \X@c =\the\X@c \Y@c=\the\Y@c \X@p=\the\X@p \Y@p=\the\Y@p }% + \next@ \Cintercept@@ \leave@\leave@ } +\xydef@\getarcExtents@{% + \ifx\space@\next\expandafter\DN@\space{\xyFN@\getarcExtents@}% + \else\ifx\next @\xy@{@}{}\DN@ @{\fullEllipse@}% + \else\DN@{\xy@{arcEXTENTs}{\save@ + \def\startDirection@{\Direction=\startDirection@@ \imposeDirection@}}% + \xyFN@\getarcExtents@ii}\fi\fi \next@ } +\xydef@\getarcExtents@ii{% + \ifx\next!\xy@{![[}{}\DN@![[##1]]{\getxyDirection@{##1}\getarcExtents@iv}% + \else\DN@{\getarcExtents@iv}\fi \next@ } +\xydef@\getarcExtents@iv{\afterDIRECTIONorEMPTY + {\xy@{startDIR}{\edef\startDirection@@{\the\Direction}\leave@}% + \xyFN@\getarcOrientation@}% + {\xy@{startDIR}{\edef\startDirection@@{\the\Direction}\leave@}% + \xyFN@\getarcOrientation@}} +\xydef@\getarcOrientation@{% + \ifx\space@\next\expandafter\DN@\space{\xyFN@\getarcOrientation@}% + \else\ifx\next @\xy@{@}{}\DN@{\getEndDirection@x}% + \else\ifx\next,\xy@{,}{}\DN@,{\xyFN@\getarcOrientation@i}% + \else\DN@{\getarcOrientation@i}\fi\fi\fi \next@ }% +\xydef@\getarcOrientation@i{% + \ifx\space@\next\expandafter\DN@\space{\xyFN@\getarcOrientation@i}% + \else\ifx\next @\xy@{@}{}\DN@{\getEndDirection@x}% + \else\ifx\next^{}\DN@##1{\xy@{^}{\def\arcOrient@@{^}}% + \def\arcOrient@@{^}\xyFN@\getEndDirection@}% + \else\ifx\next_\DN@##1{\xy@{_}{\def\arcOrient@@{_}}% + \def\arcOrient@@{_}\xyFN@\getEndDirection@}% + \else\DN@{\xyFN@\getEndDirection@}% + \fi\fi\fi\fi \next@ } +\xydef@\getEndDirection@{% + \ifx\space@\next\expandafter\DN@\space{\xyFN@\getEndDirection@}% + \else\ifx\next,\DN@,{\xy@{,}{}\xyFN@\getEndDirection@}% + \else\addEQ@\ifx\next\addEQ@\DN@{\xy@{=}{\save@\startDirection@}% + \xyFN@\getEqDirection@}% + \else \ifx\next!\DN@![[##1]]{\xy@{![[}{\save@}\getxyDirection@{##1}% + \xy@{endDIR}{\edef\endDirection@@{\the\Direction}}% + \xyFN@\getEndDirection@i}% + \else \DN@{\xy@{origDIR}{\save@\origDirection@}\getEndDirection@i}% + \fi\fi\fi\fi \next@ } +\xydef@\getEqDirection@{% + \ifx\space@\next\expandafter\DN@\space{\xyFN@\getEqDirection@}% + \else\ifx\next @\xy@{@}{}\DN@ @{% + \xy@{sameDIR}{\edef\endDirection@@{\startDirection@@}\leave@}% + \parEllipse@{1}{}}% + \else\ifx\next (\DN@({\xyFN@\checkEqOpen@}% + \else \DN@{\getEndDirection@i}\fi\fi\fi \next@ } +\xydef@\checkEqOpen@{% + \ifx\next *\DN@{\getEndDirection@i (}% + \else \DN@##1)##2@{\xy@{()}\leave@ \parEllipse@{##1}{##2}}% + \fi \next@ } +\xydef@\getEndDirection@i{\afterDIRECTIONorEMPTY + {\xy@{endDIR}{\edef\endDirection@@{\the\Direction}\leave@}% + \getEndDirection@x }% + {\xy@{endDIR}\leave@ \getEndDirection@x }} +\xydef@\getEndDirection@x#1@{% + \DN@{#1}\ifx\next@\empty\relax \else\xywarning@{\omittingTokens@}\fi + \processDirections@ } +\xydef@\omittingTokens@{omitting unused tokens: \codeof\next@ } +\xydef@\processDirections@@{% + \ifx\endDirection@@\empty \skewCircle@ + \else \skewEllipse@ \expandafter \afterARCextents@@ \fi } +\xydef@\processArcDirections@{% + \xy@{ARCdirs}{\ifx\endDirection@@\empty + \origDirection@ \edef\endDirection@@{\the\Direction}\fi}% + \ellipseArc@ + \xy@{procARCdirs}\processArcDirections@@ + \let\arcScale@\ellsave@ \let\arcRadius@\ellsave@ \def\ellipseRatio@{}% + \xy@{circSECTORS}{\doCircleSectors@}\endarc@ } +\xydef@\ellsave@{\xy@@{\save@}} +\xydef@\processArcDirections@@{\save@ + \bgroup \cfromid@{0@0}\pfromc@ \Direction=\startDirection@@ + \DN@{_}\ifx\next@\arcOrient@@ + \advance\Direction \ifnum\Direction<\z@-\fi 4096 \relax\fi + \imposeDirection@ + \d@X=\cosDirection\Y@ybase \advance\d@X-\sinDirection\X@ybase + \d@Y=-\cosDirection\Y@xbase \advance\d@Y\sinDirection\X@xbase + \setupDirection@i + \d@X=-\cosDirection\X@ybase \advance\d@X\sinDirection\X@xbase + \d@Y=-\cosDirection\Y@ybase \advance\d@Y\sinDirection\Y@xbase + \enter@\cplusthec@\X@c=\d@X \Y@c=\d@Y \leave@ \czeroEdge@ + \setupDirection@i + \czeroEdge@ + \edef\next@{\egroup \cfromthec@ \count@=\the\Direction}\next@ + \edef\startDirection@@{\the\count@}\idfromc@{0@x}% + \bgroup \cfromid@{0@0}\pfromc@ \Direction=\endDirection@@ + \DN@{_}\ifx\next@\arcOrient@@ + \advance\Direction \ifnum\Direction<\z@-\fi 4096 \relax\fi + \imposeDirection@ + \d@X=\cosDirection\Y@ybase \advance\d@X-\sinDirection\X@ybase + \d@Y=-\cosDirection\Y@xbase \advance\d@Y\sinDirection\X@xbase + \setupDirection@i + \d@X=-\cosDirection\X@ybase \advance\d@X\sinDirection\X@xbase + \d@Y=-\cosDirection\Y@ybase \advance\d@Y\sinDirection\Y@xbase + \enter@\cplusthec@\X@c=\d@X \Y@c=\d@Y \leave@ + \czeroEdge@ + \setupDirection@i + \edef\next@{\egroup \cfromthec@ \count@=\the\Direction}\next@ + \edef\endDirection@@{\the\count@}\idfromc@{0@c}% + \count@=\startDirection@@ \relax \count@@=\endDirection@@ \relax + \DN@{^}\ifx\arcOrient@@\next@ + \ifnum\count@@>\count@ \else\advance\count@@ 8192 \relax\fi + \else + \ifnum\count@@<\count@ \else\advance\count@@-8192 \relax\fi\fi + \edef\startDirection@@{\the\count@}% + \edef\endDirection@@{\the\count@@}}% +\xydef@\doCircleSectors@{% + \let\doCircleArc@=\doMergeEndArc@@ \leave@ \leave@ + \cfromid@{0@0}\pfromc@\cfromid@{0@p}\setupDirection@ + \count@=\Direction \DN@{^}\ifx\arcOrient@@\next@ + \ifnum\count@>\startDirection@@ \advance\count@-8192 \fi\relax + \count@@=\count@ \advance\count@@ 8192 \relax + \ifnum\count@@<\endDirection@@ \advance\count@@ 8192 \fi\relax + \else + \ifnum\count@<\startDirection@@ \advance\count@ 8192 \fi\relax + \count@@=\count@ \advance\count@@-8192 \relax + \ifnum\count@@>\endDirection@@ \advance\count@@-8192 \fi\relax + \fi \relax + \edef\preDirection@@{\the\count@}\edef\postDirection@@{\the\count@@}% + \cfromid@{1@c}\setupDirection@ \count@=\Direction + \def\nextii@{^}\ifx\nextii@\arcOrient@@ + \DN@{\forwardSectors@\doEllipseSectors@}% + \ifnum\count@<\preDirection@@ \advance\count@ 8192 \relax + \else \count@@=\count@\advance\count@-8192 \relax + \ifnum\count@@<\preDirection@@ \else\count@=\count@@ \fi\fi + \else + \DN@{\backwardSectors@\doEllipseSectors@}% + \ifnum\count@>\preDirection@@ \advance\count@-8192 \relax + \else \count@@=\count@\advance\count@ 8192 \relax + \ifnum\count@@>\preDirection@@ \else\count@=\count@@ \fi\fi + \fi \edef\quadDirection@{\the\count@}% + \next@ } +\xydef@\forwardSectors@{% + \ifnum \startDirection@@<\quadDirection@ \def\startSector@@{0}% + \else\count@=\preDirection@@ \advance\count@ 4096 \relax + \ifnum \startDirection@@<\count@ \def\startSector@@{1}% + \else\count@=\quadDirection@ \advance\count@ 4096 \relax + \ifnum\startDirection@@<\count@ \def\startSector@@{2}% + \else \def\startSector@@{3}\fi\fi\fi + \ifnum\quadDirection@ <\endDirection@@ \relax + \count@=\preDirection@@ \advance\count@ 4096 \relax + \ifnum\count@<\endDirection@@ \relax + \count@=\quadDirection@ \advance\count@ 4096 \relax + \ifnum\count@<\endDirection@@ \relax + \count@=\preDirection@@ \advance\count@ 8192 \relax + \ifnum\count@<\endDirection@@ \relax + \count@=\quadDirection@ \advance\count@ 8192 \relax + \ifnum\count@<\endDirection@@ \relax + \count@=\preDirection@@ \advance\count@ 12288 \relax + \ifnum\count@<\endDirection@@ \relax + \count@=\quadDirection@ \advance\count@ 12288 \relax + \ifnum\count@<\endDirection@@ \def\endSector@@{7}% + \else \def\endSector@@{6}\fi + \else \def\endSector@@{5}\fi + \else \def\endSector@@{4}\fi + \else \def\endSector@@{3}\fi + \else \def\endSector@@{2}\fi + \else \def\endSector@@{1}\fi + \else \def\endSector@@{0}\fi } +\xydef@\backwardSectors@{% + \ifnum \startDirection@@>\quadDirection@ \def\startSector@@{0}% + \else\count@=\preDirection@@ \advance\count@-4096 \relax + \ifnum \startDirection@@>\count@ \def\startSector@@{1}% + \else\count@=\quadDirection@ \advance\count@-4096 \relax + \ifnum\startDirection@@>\count@ \def\startSector@@{2}% + \else \def\startSector@@{3}\fi\fi\fi + \ifnum\quadDirection@>\endDirection@@ \relax + \count@=\preDirection@@ \advance\count@-4096 \relax + \ifnum\count@>\endDirection@@ \relax + \count@=\quadDirection@ \advance\count@-4096 \relax + \ifnum\count@>\endDirection@@ \relax + \count@=\preDirection@@ \advance\count@-8192 \relax + \ifnum\count@>\endDirection@@ \relax + \count@=\quadDirection@ \advance\count@-8192 \relax + \ifnum\count@>\endDirection@@ \relax + \count@=\preDirection@@ \advance\count@-12288 \relax + \ifnum\count@>\endDirection@@ \relax + \count@=\quadDirection@ \advance\count@-12288 \relax + \ifnum\count@>\endDirection@@ \def\endSector@@{7}% + \else \def\endSector@@{6}\fi + \else \def\endSector@@{5}\fi + \else \def\endSector@@{4}\fi + \else \def\endSector@@{3}\fi + \else \def\endSector@@{2}\fi + \else \def\endSector@@{1}\fi + \else \def\endSector@@{0}\fi } +\xydef@\doEllipseSectors@{% + \ifx\startSector@@\endSector@@ + \DN@{\expandafter\doMergeBothArc@\expandafter{\arcSTYLE}{\endSector@@}}% + \else + \expandafter\doMergeStartArc@\expandafter{\arcSTYLE}{\startSector@@}% + \edef\countArcs@@{\startSector@@}% + \loop@ \count@=\countArcs@@ \relax \advance\count@\@ne + \ifnum \count@ < \endSector@@ \edef\countArcs@@{\the\count@}% + \bgroup\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{\countArcs@@}% + \egroup + \repeat@ + \DN@{\expandafter\doMergeEndArc@\expandafter{\arcSTYLE}{\endSector@@}}% + \fi \next@ } +\xydef@\checkstartDirection@{% + \bgroup\no@@ \edef\next@{\egroup\count@@=\the\Direction}\next@\relax + \ifnum\count@@=\startDirection@@ \relax \DN@{\straightArc@}% + \else \advance\count@@-\startDirection@@ \relax + \ifnum\count@@=\ifnum\count@@<\z@-\fi 4096 \relax \DN@{\straightArc@}% + \else \DN@{\processDirections@@}\fi\fi \next@ } +\xydef@\straightArc@{\xywarning@{straight arc encountered}% + \xy@@{\let\bstartPLACE@=\relax + \expandafter\doStraightArc@@\expandafter{\arcSTYLE}}\endarc@ }% +\xydef@\skewEllipse@{\xy@@{\doskewEllipse@}% + \def\afterARCextents@@{\xy@{aftARCext}{\let\doCircleArc@=\doMergeEndArc@@}% + \ellipseArc@ \xy@{doCircARCs}{\doCircleArcs@}\endarc@ }% + \let\arcScale@=\relax \def\arcRadius@{}\def\ellipseRatio@{}} +\xydef@\skewCircle@{\xy@@{\setupDirection@}% + \ifnum\Direction=\startDirection@@\relax\DN@{\halfEllipse@{1}}% + \else + \xy@@{\def\startDirection@{\Direction=\startDirection@@\imposeDirection@}% + \cfromid@{0@p}\enter@\cplusthec@ \startDirection@ + \enter@\relax\begingroup\vfromslide@i{}@\czeroEdge@\leave@\idfromc@{0@m}% + \let\endDirection@=\relax \let\doCircleArc@=\doMergeEndArc@@}% + \DN@{\circleArc@}% + \fi \next@ } +\xydef@\doskewEllipse@{% + \def\startDirection@{\Direction=\startDirection@@ \relax + \imposeDirection@}\startDirection@ \cfromid@{0@p}% + \enter@\cplusthec@ \enter@\relax\begingroup\vfromslide@i{}@\leave@ + \idfromc@{0@x}% + \ifx\endDirection@@\empty \parallelDirection@ + \else + \def\endDirection@{\Direction=\endDirection@@ \relax + \imposeDirection@ }\endDirection@ \skewEllB@ + \bgroup\setupDirection@\edef\next@{\egroup\count@@=\the\Direction}\next@ + \edef\endDirection@@{\the\count@@}% + \fi + \cfromid@{0@p}\bgroup \setupDirection@ + \edef\next@{\egroup \count@@=\the\Direction}\next@ + \edef\startDirection@@{\the\count@@}} +\xydef@\halfEllipse@#1{\xy@@{% + \cfromid@{0@p}\pfromc@\cfromid@{0@c}\no@@ + \edef\endDirection@@{\the\Direction}% + \advance\X@c\X@p \divide\X@c\tw@ \advance\Y@c\Y@p \divide\Y@c\tw@ + \idfromc@{0@0}\pfromc@ \cfromid@{0@p}\setbase@\X@p\Y@p\X@c\Y@c + \dimen@=\X@origin \advance\dimen@-\X@c \dimen@ii=\cosDirection\dimen@ + \dimen@=\Y@origin \advance\dimen@-\Y@c \advance\dimen@ii \sinDirection\dimen@ + \X@c=\X@origin \Y@c=\Y@origin \enter@\cplusthec@ + \dimen@=#1\p@ \ifdim\dimen@<\z@ \DN@{^}\dimen@ii=-#1\dimen@ii + \ifx\next@\arcOrient@@\def\arcOrient@@{_}\else\def\arcOrient@@{^}\fi + \else \dimen@ii=#1\dimen@ii\fi + \startDirection@ \enter@\relax\begingroup\expandafter + \vfromslide@i\expandafter{\the\dimen@ii}@\leave@ + \idfromc@{1@c}\setbase@@ \X@c \Y@c \adjustBaseOrient@ + \count@@=\endDirection@@ \relax + \DN@{^}\advance\count@@\ifx\arcOrient@@\next@\else-\fi 4096 \relax + \edef\startDirection@@{\the\count@@}% + \def\startDirection@{\Direction=\startDirection@@ \imposeDirection@ }% + \let\doCircleArc@=\doMergeEndArc@@ }% + \let\arcScale@=\relax \ellipseArc@ + \xy@@{\doCircleArcs@}\endarc@ } +\xydef@\parallelDirection@{\show\parallelDirection@}% +\xydef@\parEllipse@#1#2{\DN@{#2}\ifx\next@\empty + \else\xywarning@{\omittingTokens@ }\fi \halfEllipse@{#1}} +\xydef@\skewEllB@{\cfromid@{0@c}\pfromc@\enter@\cplusthec@ + \enter@\relax\begingroup\vfromslide@i{}@\leave@ + \enter@{\pfromthep@\basefromthebase@}\no@@ + \bgroup \cfromid@{0@p}\pfromc@\cfromid@{0@x}\edef\next@{\egroup + \X@c =\the\X@c \Y@c=\the\Y@c \X@p=\the\X@p \Y@p=\the\Y@p }\next@ + \Cintercept@@\leave@ \idfromc@{0@x}\cfromid@{0@p}\enter@\cplusthec@ + \cfromid@{0@c}\leave@ \enter@\cplusthec@ \cfromid@{0@x}% + \X@c=-\X@c \Y@c=-\Y@c \leave@ \idfromc@{0@0}\pfromc@\cfromid@{0@p}% + \setbase@\X@p\Y@p\X@c\Y@c \cfromid@{0@c}\setbase@@\X@c\Y@c + \adjustBaseOrient@ } +\xydef@\adjustBaseOrient@{% + \edef\tmp@{\expandafter\removePT@\the\X@xbase}\dimen@=\Y@ybase + \divide\dimen@ 64 \relax \dimen@ii=\tmp@\dimen@ + \edef\tmp@{\expandafter\removePT@\the\X@ybase}\dimen@=\Y@xbase + \divide\dimen@ 64 \relax \dimen@=\tmp@\dimen@ + \ifdim\dimen@>\dimen@ii \X@ybase=-\X@ybase \Y@ybase=-\Y@ybase \fi } +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyarrow.tex b/macros/generic/diagrams/xypic/texinputs/xyarrow.tex new file mode 100644 index 0000000000..56f8349940 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyarrow.tex @@ -0,0 +1,538 @@ +%% xyarrow.tex from $Id: xyarrow.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Arrows and Paths'' feature. +%% Copyright (c) 1991-1997 Kristoffer H. Rose +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{arrow}{Arrow and Path feature}{\stripRCS$Revision: 3.9 $}% + {Kristoffer H.~Rose}{krisrose@tug.org}% + {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)} +\message{path,} +\xydef@\PATH{\afterPATH{}} +\xylet@\afterPATH@=\empty +\xydef@\afterPATH#1{\save + \DN@##1{\def\afterPATH@{\restore \def\afterPATH@{##1}#1}}% + \expandafter\next@\expandafter{\afterPATH@}% + \let\PATHfail@@=\empty + \let\PATHbefore@@=\empty + \let\PATHafter@@=\empty + \let\PATHlabelsevery@@=\empty + \let\PATHlabelsnext@@=\empty + \let\PATHlabelslast@@=\empty + \xy@{\afterPATH{#1}}{\def\PATHslide@@{\z@}}% + \def\PATHcontinue@@{\xyFN@\PATH@}% + \xyFN@\PATH@} +\xynew@{if}\ifPATHsingle@ +\xydef@\PATH@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATH@}% + \else\ifPATHsingle@ \let\next@=\PATH@single + \else \let\next@=\PATH@normal \fi\fi \next@} +\xydef@\PATH@normal{% + \ifx ~\next \DN@ ~{\xyFN@\PATHsetting@}% + \else \addRQ@\ifx \next \addRQ@\DN@{\xy@'{}\xyFN@\PATHstraight@}% + \else \addLQ@\ifx \next \addLQ@\DN@{\xy@`{}\xyFN@\PATHturn@}% + \else\ifx \PATHfail@@\PATH@x \DN@{\xyFN@\PATHfinal@}% + \else + \DNii@{\let\PATHfail@@=\PATH@x \xyFN@\PATH@}% + \DN@{\expandafter\nextii@\PATHfail@@}% + \fi\fi\fi\fi \next@} +\xylet@\PATHfail@@=\empty +\xylet@\PATHbefore@@=\empty +\xylet@\PATHafter@@=\empty +\xylet@\PATHlabelsevery@@=\empty +\xylet@\PATHlabelsnext@@=\empty +\xylet@\PATHlabelslast@@=\empty +\xydef@\PATHsetting@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHsetting@}% + \else\ifx \bgroup\next + \DN@##1{\xy@{~{##1}}{}\def\PATHfail@@{##1}\xyFN@\PATH@}% + \else \addEQ@\ifx \next + \addEQ@\DN@##1{\xy@{~={##1}}{}\def\PATHbefore@@{##1}\xyFN@\PATH@}% + \else \addLT@\ifx \next + \addLT@\DN@##1{\xy@{~<{##1}}{}\def\PATHlabelsnext@@{##1}\xyFN@\PATH@}% + \else \addGT@\ifx \next + \addGT@\DN@##1{\xy@{~>{##1}}{}\def\PATHlabelslast@@{##1}\xyFN@\PATH@}% + \else \addPLUS@\ifx \next + \addPLUS@\DN@##1{\xy@{~+{##1}}{}\def\PATHlabelsevery@@{##1}\xyFN@\PATH@}% + \else \ifx /\next + \DN@/##1{\xy@{~/{##1}}{}\def\PATHafter@@{##1}\xyFN@\PATH@}% + \else \addDASH@\ifx \next + \xywarning@{Obsolete `-' PATH translated to `='.}% + \addDASH@\DN@##1{\xy@{~-{##1}}{}\def\PATHbefore@@{##1}\xyFN@\PATH@}% + \else + \xyerror@{Unknown \string~ setting: \meaning\next}% + {See the Xy-pic arrow feature documentation for help.}% + \fi\fi\fi\fi\fi\fi\fi\fi \next@} +\xylet@\PATHinit@@=\empty +\xylet@\PATHextra@@=\empty +\xylet@\PATHpost@@=\empty +\xylet@\PATHcontinue@@=\empty +\xydef@\PATHstraight@{% + \def\PATHinit@@{\PATHinitstraight@}% + \let\PATHextra@@=\empty + \let\PATHpost@@=\empty + \let\PATHlabelsextra@@=\relax + \xy@@\pfromc@ \PATHafterPOS{\xyFN@\PATHsegment@}} +\xydef@\PATHfinal@{% + \def\PATHinit@@{\PATHinitstraight@}% + \def\PATHextra@@{\let\PATHcontinue@@=\afterPATH@}% + \let\PATHpost@@=\empty + \let\PATHlabelsextra@@=\PATHlabelsextralast@ + \xy@@\pfromc@ \PATHafterPOS{\xyFN@\PATHsegment@}} +\xydef@\PATHlabelsextralast@{\let\PATHlabelsextra@@=\relax + \expandafter\xyFN@\expandafter\PATHlabels@\PATHlabelslast@@} +\xydef@\PATHinitstraight@{\xy@@{\setupDirection@ \dimen@=\PATHslide@@ + \dimen@ii=-\sinDirection\dimen@ + \ifPATHomitslide@@\else\advance\X@p\dimen@ii\fi \advance\X@c\dimen@ii + \dimen@ii= \cosDirection\dimen@ + \ifPATHomitslide@@\else\advance\Y@p\dimen@ii\fi \advance\Y@c\dimen@ii + \PATHomitslide@@false \resetupDirection@}} +\xydef@\PATHslide@@{\z@} +\xynew@{if}\ifPATHomitslide@@ +\xydef@\PATHsegment@{% + \addLT@\ifx\next + \addGT@{\addLT@\DN@##1}{% + \xy@{<##1>}{\dimen@=##1\relax \edef\PATHslide@@{\the\dimen@}}% + \xyFN@\PATHsegment@@}% + \else \let\next@=\PATHsegment@@ + \fi \next@} +\xydef@\PATHsegment@@{\PATHinit@@ \addEQ@\PATHaction@\PATHbefore@@ \PATHextra@@ + \expandafter\toks@\expandafter{\PATHlabelsnext@@}\let\PATHlabelsnext@@=\empty + \expandafter\addtotoks@\expandafter{\PATHlabelsevery@@}% + \expandafter\def\expandafter\PATHlabels@@\expandafter{\the\toks@}% + \toks@={}\expandafter\xyFN@\expandafter\PATHlabels@\PATHlabels@@} +\xylet@\PATHlabelit@@=\empty +\xydef@\PATHlabels@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHlabels@}% + \else \ifx ^\next + \DN@##1{\xy@^{}\let\PATHlabelit@@=\PATHlabelabove@@ + \DNii@{}\xyFN@\PATHanchor@}% + \else \ifx _\next + \DN@##1{\xy@_{}\let\PATHlabelit@@=\PATHlabelbelow@@ + \DNii@{}\xyFN@\PATHanchor@}% + \else \ifx |\next + \DN@##1{\xy@|{}\let\PATHlabelit@@=\PATHlabelbreak@ + \DNii@{}\xyFN@\PATHanchor@}% + \else \let\next@=\PATHfinishsegments@ \fi\fi\fi\fi \next@} +\xydef@\PATHanchor@{\begingroup \toks@={}\PATHanchor@i} +\xydef@\PATHanchor@i{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHanchor@i}% + \else\addDASH@\ifx \next + \addDASH@\DN@{\expandafter\addtotoks@\expandafter{\PATHanchor@toks}% + \xyFN@\PATHanchor@i}% + \else + \DNii@##1{\endgroup\afterPLACE{\xyFN@\PATHit@}##1}% + \DN@{\expandafter\nextii@\expandafter{\the\toks@}}% + \fi\fi \next@} +{\xyuncatcodes \gdef\next{<>(.5)}} +\xylet@\PATHanchor@toks=\next +\xylet@\PATHitshapes@@=\empty +\xydef@\PATHit@{\let\PATHitshape@@=\empty \xyFN@\PATHit@i} +\xydef@\PATHit@i{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHit@i}% + \else \ifx *\next \DN@*##1##{\PATHlabelit@@{!C##1}}% + \else \addAT@\ifx\next \addAT@\DN@##1##{\PATHlabelit@@{\dir##1}}% + \else \ifx [\next \DN@[##1]{% + \expandafter\def\expandafter\PATHitshape@@\expandafter{\PATHitshape@@[##1]}% + \xyFN@\PATHit@i}% + \else \DN@{\PATHlabelit@@{}}% + \fi\fi\fi\fi \next@} +\xydef@\PATHfinishsegments@{% + \ifx\PATHlabelsextra@@\relax \expandafter\PATHfinishsegments@i + \else + \expandafter\PATHlabelsextra@@ \fi} +\xydef@\PATHfinishsegments@i{% + \xy@@{\Clast@@}\the\toks@ \toks@={}% + \xy@@\setupDirection@ + \PATHpost@@ \PATHaction@/\PATHafter@@ + \PATHcontinue@@} +\xydef@\PATHaction@default#1#2{\xy@{PATHaction#1{#2}}{}\POS#2\relax} +\xylet@\PATHaction=\PATHaction@default +\xydef@\PATHaction@#1#2{\expandafter\PATHaction\expandafter#1\expandafter{#2}} +\xylet@\PATHafterPOS@default=\afterPOS +\xylet@\PATHafterPOS=\PATHafterPOS@default +\xydef@\PATHlastout@@{3} +\xydef@\PATHturn@{\afterCIRorDIAG\PATHturn@cir\PATHturn@diag} +\xydef@\PATHturn@cir{\toks@={\xy@@{% + \count@=\CIRin@@ \ifnum\count@<4\else\advance\count@-4\fi + \count@@=\CIRout@@ \ifnum\count@@<4\else\advance\count@@-4\fi + \ifnum\count@=\count@@ \xyerror@{ cannot be half or full}{% +You asked for a ed segment with parallel in- and out-direction.^^J% +This is not allowed because it is not possible to position it uniquely.}\fi}}% + \edef\next@{{\CIRin@@}{\expandafter\noexpand\CIRorient@@}{\CIRout@@}}% + \expandafter\PATHturn@i\next@} +\xydef@\PATHturn@diag{\toks@={\xy@@{% + \setupDirection@ \count@=\CIRin@@ \dimen@=\xydashl@ \ABfromdiag@ + \ifdim \sinDirection\A@>\cosDirection\B@ \def\CIRorient@@{\CIRacw@}% + \advance\count@\ifnum\count@<6 \tw@ \else -6\fi + \else \def\CIRorient@@{\CIRcw@}% + \advance\count@\ifnum\count@>\@ne -\tw@ \else 6\fi + \fi + \edef\CIRout@@{\the\count@}}}% + \edef\next@{{\CIRin@@}{}{}}% + \expandafter\PATHturn@i\next@} +\xylet@\PATHpostpos@@=\empty +\xydef@\PATHturn@i#1#2#3{% + \DN@##1{\def\PATHinit@@{\xy@@{% + \def\CIRin@@{#1}\def\CIRorient@@{#2}\def\CIRout@@{#3}% + \ifnum\CIRin@@=8 \let\CIRin@@=\PATHlastout@@ \fi + \R@=\turnradius@ + ##1\relax}% + \xy@@{\count@=\CIRin@@ + \ifPATHomitslide@@ \dimen@=-\PATHslide@@ + \ABfromdiag@ \advance\X@p-\B@ \advance\Y@p\A@ \fi + \enter@{\pfromthep@ \basefromthebase@}}% + \xy@@{\dimen@=\expandafter\ifx\CIRorient@@\CIRcw@-\fi\R@ + \ABfromdiag@ \advance\X@p-\B@ \advance\Y@p\A@ + \X@origin=\X@p \Y@origin=\Y@p}% + \xy@@{\dimen@=\xydashl@ \ABfromdiag@ \R@c=\A@ \U@c=\B@ + \count@=\CIRout@@ + \dimen@=\expandafter\ifx\CIRorient@@\CIRcw@-\fi\R@ + \ABfromdiag@ \advance\X@c-\B@ \advance\Y@c\A@ + \dimen@=\xydashl@ \X@p=\X@c \Y@p=\Y@c + \ABfromdiag@ \advance\X@p-\A@ \advance\Y@p-\B@ + \intersect@ + \count@=\CIRin@@ \dimen@=\p@ \ABfromdiag@}% + \xy@@{\edef\next@{\expandafter\removePT@\the\A@}% + \edef\nextii@{\expandafter\removePT@\the\B@}% + \A@=\X@c \advance\A@-\X@origin \B@=\Y@c \advance\B@-\Y@origin + \ifdim \next@\A@<-\nextii@\B@ + \dontleave@ \cfromp@ + \count@=\CIRin@@ \advance\count@\ifnum\count@<4 +4\else -4\fi + \dimen@=\xydashl@ \Directionfromdiag@ + \the\Edge@c\z@ + \count@=\CIRin@@ \dimen@=\expandafter\ifx\CIRorient@@\CIRcw@-\fi\R@ + \ABfromdiag@ \advance\X@c-\B@ \advance\Y@c\A@ + \dimen@=5sp \ABfromdiag@ \advance\X@c\A@ \advance\Y@c\B@ + \fi + \dimen@ii=\expandafter\ifx\CIRorient@@\CIRacw@-\fi\PATHslide@@ + \advance\R@\dimen@ii + \drop@\literal@{\hbox\bgroup\cir@i}}% + \xy@@{\X@p=\X@c \Y@p=\Y@c + \count@=\CIRout@@ + \dimen@=\expandafter\ifx\CIRorient@@\CIRacw@-\fi\R@c + \ABfromdiag@ \advance\X@p-\B@ \advance\Y@p\A@ + \edef\PATHpostpos@@{\X@c=\the\X@p \Y@c=\the\Y@p \noexpand\czeroEdge@ + \noexpand\PATHomitslide@@true}}% + \xy@@{\count@=\CIRin@@ + \dimen@=\expandafter\ifx\CIRorient@@\CIRacw@-\fi\R@c + \ABfromdiag@ \advance\X@c-\B@ \advance\Y@c\A@ \czeroEdge@}% + \xy@@{\leave@ + \count@=\CIRin@@ \dimen@=\PATHslide@@ + \ABfromdiag@ \advance\X@p-\B@ \advance\Y@p\A@ + \edef\PATHlastout@@{\CIRout@@}% + \count@=\CIRout@@ \dimen@=\xydashl@ \Directionfromdiag@}}}% + \expandafter\next@\expandafter{\the\toks@}\toks@={}% + \let\PATHextra@@=\empty + \def\PATHpost@@{\xy@@\PATHpostpos@@}% + \let\PATHlabelsextra@@=\relax + \xyFN@\PATHturn@ii} +\xydef@\PATHturn@ii{% + \ifx /\next + \DN@ /{\afterassignment\nextii@\dimen@=}% + \DNii@{% + \edef\next@{\noexpand\xy@@{\edef\noexpand\turnradius@{\the\dimen@}}}\next@ + \xy@@\pfromc@ \PATHafterPOS{\xyFN@\PATHsegment@}}% + \else \DN@{\xy@@\pfromc@ \PATHafterPOS{\xyFN@\PATHsegment@}}\fi + \next@} +\xydef@\ABfromdiag@{\ifcase\count@\relax + \A@=-.7071\dimen@ \B@=-.7071\dimen@ \or \A@=\z@ \B@=-\dimen@ + \or \A@=+.7071\dimen@ \B@=-.7071\dimen@ \or \A@=\dimen@ \B@=\z@ + \or \A@=+.7071\dimen@ \B@=+.7071\dimen@ \or \A@=\z@ \B@=+\dimen@ + \or \A@=-.7071\dimen@ \B@=+.7071\dimen@ \or \A@=-\dimen@ \B@=\z@ + \else\xybug@{impossible ?}\fi} +\xydef@\turnradius@{10pt} +\xydef@\turnradius{\afterADDOP{\Addop@@\turnradius@}} +\xydef@\PATHlabelabove@#1#2{\droplabel@\belowDirection@{#1}{#2}% + \let\afteraliases@@=\empty \xyFN@\PATHlabelalias@} +\xydef@\PATHlabelbelow@#1#2{\droplabel@\aboveDirection@{#1}{#2}% + \let\afteraliases@@=\empty \xyFN@\PATHlabelalias@} +\xylet@\PATHlabelabove@@=\PATHlabelabove@ +\xylet@\PATHlabelbelow@@=\PATHlabelbelow@ +\xydef@\droplabel@#1#2#3{\xy@@{\enter@\DirectionfromtheDirection@}% + \DN@{#2}\ifx\next@\empty + \expandafter\xy@@ix@\expandafter{\PATHitshape@@\labelbox{#3}}% + \else \expandafter\xy@@ix@\expandafter{\PATHitshape@@#2{#3}}\fi + \xy@@{\setbox\z@=\expandafter\object\the\toks9 + \advance\L@c\labelmargin@ \advance\R@c\labelmargin@ + \advance\D@c\labelmargin@ \advance\U@c\labelmargin@ + \setboxz@h{\kern\labelmargin@\boxz@\kern\labelmargin@}% + \A@=\X@c \B@=\Y@c #1\xydashl@ \the\Edge@c\thr@@ + \advance\A@-\X@c \advance\B@-\Y@c \advance\X@c 2\A@ \advance\Y@c 2\B@ + \ht\z@=\U@c \dp\z@=\D@c \dimen@=\L@c \advance\dimen@\R@c \wd\z@=\dimen@ + \setbox\lastobjectbox@=\hbox{\X@c=\L@c \Y@c=\z@ \Drop@@}% + \drop@{\box\lastobjectbox@}{}% + \leave@}} +\xydef@\PATHlabelbreak@#1#2{% + \DN@{#1}\ifx\next@\empty \drop\labelbox{#2}\else \drop#1{#2}\fi + \def\afteraliases@@{\xy@@\Cbreak@@}\xyFN@\PATHlabelalias@} +\xylet@\labelmargin@=\objectmargin@ +\xydef@\labelmargin{\afterADDOP{\Addop@@\labelmargin@}} +\xydef@\hole{\hbox{\dimen@=\objectmargin@ \kern2\dimen@ + \vrule height\dimen@ depth\dimen@ width\z@}} +\xylet@\labelstyle=\scriptstyle +\xydef@\labelbox#1{\hbox{$\m@th\labelstyle{#1}$}} +\xydef@\PATHlabelalias@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHlabelalias@}% + \else \addEQ@\ifx \next + \addEQ@\DN@"##1"{\savealias@{##1}\xyFN@\PATHlabelalias@}% + \else \DN@{\afteraliases@@\PATHlabels@}\fi\fi \next@} +\xylet@\afteraliases@@=\empty +\xydef@\savealias@#1{\xy@@{\enter@\cfromthec@ + \advance\X@c-\L@c \advance\L@c\R@c \L@c=.5\L@c \R@c=\L@c \advance\X@c\L@c + \advance\Y@c-\D@c \advance\D@c\U@c \D@c=.5\D@c \U@c=\D@c \advance\Y@c\D@c + \idfromc@{#1}\leave@}} +\message{\string\ar,} +\xylet@\arvariant@@=\empty +\xylet@\arstemprefix@@=\empty +\xylet@\artail@@=\empty +\xylet@\arstem@@=\empty +\xylet@\arhead@@=\empty +\xylet@\armodifiers@@=\empty +\xylet@\arlabels@@=\empty +\xylet@\arafterPOS@@=\empty +\xylet@\arinit@@=\empty +\xylet@\arexit@@=\empty +\xylet@\arcomponent@@=\relax +\xylet@\arcomponenttype@@=\relax +\xylet@\afterar@@=\relax +\xydef@\ar{\relax\arSAFE} +\xydef@\arSAFE{% + \let\arvariant@@=\empty + \def\arstemprefix@@{\dir}% + \edef\artail@@{\arvariant@@{}}% + \edef\arstem@@{\arvariant@@{-}}% + \edef\arhead@@{\arvariant@@{>}}% + \def\armodifiers@@{}% + \def\arafterPOS@@{}% + \def\arlabels@@{}% + \def\arinit@@{}% + \def\arexit@@{}% + \let\PATHlabelabove@@=\PATHlabelabove@ + \let\PATHlabelbelow@@=\PATHlabelbelow@ + \xyFN@\ar@} +\xydef@\ar@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\ar@}% + \else \addAT@\ifx\next \addAT@\DN@{\xyFN@\ar@form}% + \else\ifx |\next + \DN@ |{\ar@anchor|}% + \else\ifx ^\next + \DN@ ^{\ar@anchor^}% + \else\ifx _\next + \DN@ _{\ar@anchor_}% + \else \let\next@=\ar@x \fi\fi\fi\fi\fi \next@} +\xydef@\addtoarinit@#1{% + \expandafter\def\expandafter\arinit@@\expandafter{\arinit@@ #1}} +\xydef@\addtoarlabels@#1{% + \expandafter\def\expandafter\arlabels@@\expandafter{\arlabels@@ #1}} +\xydef@\ar@anchor#1{\begingroup + \def\PATHlabelit@@##1##2{% + \DN@{##1}\ifx\next@\empty + \DN@####1{\expandafter\endgroup\expandafter\addtoarlabels@ + \expandafter{\the\toks@####1{##2}}\xyFN@\ar@}% + \else + \DN@####1{\expandafter\endgroup\expandafter\addtoarlabels@ + \expandafter{\the\toks@*!C####1##1{##2}}\xyFN@\ar@}\fi + \expandafter\next@\expandafter{\PATHitshape@@}}% + \toks@={#1}% + \def\xy@##1##2{\addtotoks@{##1}}\change@oxy@\xy@ \let\xy@@ix@=\eat@ + \DNii@{}\xyFN@\PATHanchor@} +\xydef@\ar@form{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\ar@form}% + \else\ifx ^\next \DN@ ^{\xyFN@\ar@style}\edef\arvariant@@{\string^}% + \else\ifx _\next \DN@ _{\xyFN@\ar@style}\edef\arvariant@@{\string_}% + \else\ifx 0\next \DN@ 0{\xyFN@\ar@style}\def\arvariant@@{0}% + \else\ifx 1\next \DN@ 1{\xyFN@\ar@style}\def\arvariant@@{1}% + \else\ifx 2\next \DN@ 2{\xyFN@\ar@style}\def\arvariant@@{2}% + \else\ifx 3\next \DN@ 3{\xyFN@\ar@style}\def\arvariant@@{3}% + \else\ifx \bgroup\next \let\next@=\ar@style + \else\ifx [\next \DN@[##1]{\ar@modifiers{[##1]}}% + \else\ifx *\next \DN@ *{\ar@modifiers}% + \else\addLT@\ifx\next \let\next@=\ar@slide + \else\ifx /\next \let\next@=\ar@curveslash + \else\ifx (\next \let\next@=\ar@curveinout + \else\addRQ@\ifx\next \addRQ@\DN@{\ar@curve@}% + \else\addLQ@\ifx\next \addLQ@\DN@{\xyFN@\ar@curve}% + \else\addDASH@\ifx\next \addDASH@\DN@{\defarstem@-\xyFN@\ar@}% + \else\addEQ@\ifx\next \addEQ@\DN@{\def\arvariant@@{2}\defarstem@-\xyFN@\ar@}% + \else\addDOT@\ifx\next \addDOT@\DN@{\defarstem@.\xyFN@\ar@}% + \else\ifx :\next \DN@:{\def\arvariant@@{2}\defarstem@.\xyFN@\ar@}% + \else\ifx ~\next \DN@~{\defarstem@~\xyFN@\ar@}% + \else\ifx !\next \DN@!{\dasharstem@\xyFN@\ar@}% + \else\ifx ?\next \DN@?{\ar@upsidedown\xyFN@\ar@}% + \else \let\next@=\ar@error + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@} +\xydef@\defarstem@#1{\edef\arstem@@{\arvariant@@{\string#1}}% + \DNii@##1##{\next@}% + \edef\next@##1{\def\noexpand\artail@@{\arvariant@@{##1}}}% + \expandafter\nextii@\artail@@ + \edef\next@##1{\def\noexpand\arhead@@{\arvariant@@{##1}}}% + \expandafter\nextii@\arhead@@} +\xydef@\dasharstem@{% + \DN@##1##{\nextii@{##1}}\DNii@##1##2{\def\arstem@@{##1{##2##2}}}% + \expandafter\next@\arstem@@} +\xydef@\ar@error#1{\xyerror@{Illegal
ation (\meaning\next)}{}% + \xyFN@\ar@} +\xydef@\ar@style{% + \ifx \bgroup\next \def\artail@@{{}}% + \edef\arstem@@{\arvariant@@{-}}\edef\arhead@@{\arvariant@@{>}}% + \expandafter\ar@i + \else \resetvariant@\artail@@ \resetvariant@\arstem@@ \resetvariant@\arhead@@ + \expandafter\xyFN@\expandafter\ar@ \fi} +\xydef@\resetvariant@#1{% + \DN@##1##{\DN@{##1}\ifx\next@\empty + \DN@{\expandafter\nextii@\expandafter{\arvariant@@}}% + \else \DN@{\nextii@{##1}}\fi \next@}% + \DNii@##1##2{\def#1{##1{##2}}}% + \expandafter\next@#1} +\xydef@\ar@i#1{\DN@{#1}% + \ifx\next@\empty \edef\arstem@@{\arvariant@@{}}\edef\arhead@@{\arvariant@@{}}% + \DN@{\xyFN@\ar@}% + \else + \let\arcomponent@@=\ar@ii \let\arcomponenttype@@=\artip@ + \DN@{\xyFN@\arcomponent@#1$}% + \fi \next@} +\xydef@\ar@ii{\ifx $\next \let\next@=\ar@iv + \else \expandafter\def\expandafter\artail@@\expandafter{\the\toks@}% + \let\arcomponent@@=\ar@iii \let\arcomponenttype@@=\arconn@ + \DN@{\xyFN@\arcomponent@}\fi \next@} +\xydef@\ar@iii{% + \expandafter\def\expandafter\arstem@@\expandafter{\the\toks@}% + \resetvariant@\artail@@ + \let\arcomponent@@=\ar@iv \let\arcomponenttype@@=\artip@ + \xyFN@\arcomponent@} +\xydef@\ar@iv{% + \expandafter\def\expandafter\arhead@@\expandafter{\the\toks@}% + \ifx $\next \DN@ ${\xyFN@\ar@}% + \else \xyerror@{illegal : \meaning\next\space not valid}{}\fi \next@} +\xydef@\ar@x{% + \let\arsavedPATHafterPOS@@=\PATHafterPOS \let\PATHafterPOS=\arafterPOS@ + \toks@={\ar@PATH}% + \expandafter\addtotoks@\expandafter{\expandafter{\artail@@}}% + \expandafter\addtotoks@\expandafter{\expandafter{\arstem@@}}% + \expandafter\addtotoks@\expandafter{\expandafter{\arstemprefix@@}}% + \expandafter\addtotoks@\expandafter{\expandafter{\arhead@@}}% + \expandafter\addtotoks@\expandafter{\expandafter{\armodifiers@@}}% + \expandafter\addtotoks@\expandafter{\expandafter{\arinit@@}}% + \expandafter\addtotoks@\expandafter{\expandafter{\arexit@@}}% + \expandafter\addtotoks@\expandafter{\expandafter{\arlabels@@}}% + \addtotoks@{\afterar@@}% + \expandafter\DNii@\expandafter{\the\toks@}\toks@={}% + \nextii@} +{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{% + \def\next{% + \afterPATH{#9}% + ~={#6\preconnect#5#3#2}% + ~/{#7}% + ~<{|<*h#5\dir#1}% + ~>{|>*h#5\dir#4}% + ~+{#8}% + }% + \next}} +\xylet@\ar@PATH=\next +\xydef@\arafterPOS@#1{% + \arsavedPATHafterPOS@@{\let\PATHafterPOS=\arsavedPATHafterPOS@@ + \DN@{#1}\expandafter\next@\arafterPOS@@}}% +\xylet@\arsavedPATHafterPOS@@=\relax +\xydef@\arcomponent@{% + \ifx ^\next \toks@ii={^}\DN@ ^{\xyFN@\arcomponent@i}% + \else\ifx _\next \toks@ii={_}\DN@ _{\xyFN@\arcomponent@i}% + \else\ifx 1\next \toks@ii={1}\DN@ 1{\xyFN@\arcomponent@i}% + \else\ifx 2\next \toks@ii={2}\DN@ 2{\xyFN@\arcomponent@i}% + \else\ifx 3\next \toks@ii={3}\DN@ 3{\xyFN@\arcomponent@i}% + \else\ifx \bgroup\next \expandafter\toks@ii\expandafter{\arvariant@@}% + \let\next@=\arcomponent@i + \else\ifx *\next \DN@*##1##{\arcomponent@ii{##1}}% + \else \expandafter\toks@ii\expandafter{\arvariant@@}\toks@={}% + \let\next@=\arcomponenttype@@ + \fi\fi\fi\fi\fi\fi\fi + \next@} +\xydef@\arcomponent@i#1{\toks@={#1}\arcomponent@x} +\xydef@\arcomponent@ii#1#2{\toks@={*#1{#2}}\xyFN@\arcomponent@@} +\xydef@\artip@{% + \addGT@\ifx\next \addGT@\addtotoks@ \addGT@\DN@{\xyFN@\artip@}% + \else\addLT@\ifx\next \addLT@\addtotoks@ \addLT@\DN@{\xyFN@\artip@}% + \else\ifx (\next \addtotoks@(\DN@({\xyFN@\artip@}% + \else\ifx )\next \addtotoks@)\DN@){\xyFN@\artip@}% + \else\ifx |\next \addtotoks@|\DN@|{\xyFN@\artip@}% + \else\addLQ@\ifx\next \addLQ@\addtotoks@ \addLQ@\DN@{\xyFN@\artip@}% + \else\addRQ@\ifx\next \addRQ@\addtotoks@ \addRQ@\DN@{\xyFN@\artip@}% + \else\addPLUS@\ifx \next \addPLUS@\addtotoks@ \addPLUS@\DN@{\xyFN@\artip@}% + \else\ifx /\next \addtotoks@/\DN@/{\xyFN@\artip@}% + \else\ifcat A\noexpand\next \DN@##1{\addtotoks@{##1}\xyFN@\artip@}% + \else\ifx\space@\next \addtotoks@{ }\expandafter\DN@\space{\xyFN@\artip@}% + \else \let\next@=\arcomponent@x + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@} +\xydef@\arconn@{% + \addDASH@\ifx\next \addDASH@\addtotoks@ \addDASH@\DN@{\xyFN@\arconn@}% + \else\addEQ@\ifx\next \addEQ@\addtotoks@ \addEQ@\DN@{\xyFN@\arconn@}% + \ifx\arvariant@@\empty \def\arvariant@@{2}\fi + \else\addDOT@\ifx\next \addDOT@\addtotoks@ \addDOT@\DN@{\xyFN@\arconn@}% + \else\ifx :\next \addtotoks@:\DN@:{\xyFN@\arconn@}% + \ifx\arvariant@@\empty \def\arvariant@@{2}\fi + \else\ifx ~\next \addtotoks@~\DN@~{\xyFN@\arconn@}% + \else \let\next@=\arcomponent@x + \fi\fi\fi\fi\fi \next@} +\xydef@\arcomponent@x{% + \DN@##1{\toks@=\expandafter{\the\toks@ii{##1}}}% + \expandafter\next@\expandafter{\the\toks@}% + \xyFN@\arcomponent@@} +\xydef@\ar@curveslash/#1/{\expandafter\ar@curve@\ar@slashing{#1}} +\xydef@\ar@slashing#1{{\xy@{**{} ?+/#1/+/#1/ @+c}{\setupDirection@ + \vfromslide@{#1}% + \X@c=2\X@c \advance\X@c\X@p \advance\X@c.5\d@X + \Y@c=2\Y@c \advance\Y@c\Y@p \advance\Y@c.5\d@Y + \czeroEdge@ + \spushc@}}} +{\xyuncatcodes \catcode`\#=6 + \gdef\next(#1,#2){{+/#1 3pc/,p+/#2 3pc/}}} +\xylet@\ar@curveinout@=\next +\xydef@\ar@curveinout{\expandafter\ar@curve@load\ar@curveinout@} +\xydef@\ar@curve{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\ar@curve}% + \else\ifx \bgroup\next \let\next@=\ar@curve@load + \else\ifx "\next \DN@"##1"{\ar@curve@{"##1"}}% + \else \xyerror@{@= must be followed by \string"\string" or + {}}{}% + \fi\fi\fi \next@} +{\xyuncatcodes \gdef\next#1#2{\def#1##1{#2{;@={##1}}}}} +\next\ar@curve@load\ar@curve@ +\xydef@\ar@curve@#1{\curve@check + \setcurvearinit@{#1}\setcurvearexit@\arexit@@ + \def\arstemprefix@@{\crvi}\xyFN@\ar@} +{\xyuncatcodes \gdef\next#1{\save @(,#1\restore}} +\xylet@\setcurvearinit@i=\next +\xydef@\setcurvearinit@#1{% + \expandafter\addtoarinit@\expandafter{\setcurvearinit@i{#1}}} +{\xyuncatcodes \gdef\next#1{\def#1{\POS @i @) }}} +\xylet@\setcurvearexit@=\next +\xydef@\curve@check{% + \xyerror@{Forms @/.../, @(...), and @`{...}, only available when curve + extension loaded}{}} +\xywithoption{curve}{\let\curve@check=\relax} +\xydef@\ar@modifiers#1{% + \expandafter\def\expandafter\armodifiers@@\expandafter{\armodifiers@@#1}% + \xyFN@\ar@} +{\xyuncatcodes \catcode`\#=6 \catcode`\@=11 + \gdef\next<#1>{\def\arafterPOS@@{<#1>}\xyFN@\ar@}} +\xylet@\ar@slide=\next +\xydef@\ar@upsidedown{\let\next=\PATHlabelabove@@ + \let\PATHlabelabove@@=\PATHlabelbelow@@ \let\PATHlabelbelow@@=\next} +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xybarr.tex b/macros/generic/diagrams/xypic/texinputs/xybarr.tex new file mode 100644 index 0000000000..51a419db15 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xybarr.tex @@ -0,0 +1,1016 @@ +%% xybarr.tex from $Id: xybarr.doc,v 1.3 2013/10/06 00:12:30 krisrose Exp $ +%% +%% Xy-pic ``Barr Feature'' option. +%% Copyright (c) 2001 Michael Barr +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Michael Barr +%% +%% This work is derived from the file diagxy.tex and has +%% documentation/tutorial file barrdoc.latex +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{barr}{Barr's diagram feature}{2011-06-18}% + {Michael Barr}{barr@math.mcgill.ca}% + {Dept of Math and Stats, + McGill University, + 805 Sherbrooke Street West, + Montreal, Quebec H3A 0B9, Canada} +\xyrequire{curve} +\xyrequire{arrow} +\xycatcodes +\def\dated#1{\def\thedate{#1}}% +\dated{2011-06-18}% + \newdimen\xydashw@@ + \xydashw@@\xydashw@ + \multiply\xydashw@@ by 7 + \divide\xydashw@@ by 4 +\setbox\zerodotbox@=\hbox{\dimen@=.5\xydashw@@ + \kern-\dimen@ \vrule width\xydashw@@ height\dimen@ depth\dimen@} +\wd\zerodotbox@=\z@ \ht\zerodotbox@=\z@ \dp\zerodotbox@=\z@ +\catcode`\@=12 +\newdir{ >}{{ }*!/-.9em/@{>}}% +\newdir^{ (}{{ }*!/-.5em/@^{(}}% +\newdir{< }{!/.9em/@{<}*{ }}% +\newdir{) }{!/.9em/@^{)}*{ }}% +\newdir{ (}{{ }*!/-.5em/@^{(}}% +\newdir{d}{\object{.}} +\newdir{into}{{ }*!/-.5em/@^{(}}% +\newdimen\high% +\newdimen\ul% +\newcount\deltax% +\newcount\deltay% +\newcount\deltaX% +\newcount\deltaXprime% +\newcount\deltaY% +\newcount\deltaYprime% +\newdimen\wdth% +\newcount\xend% +\newcount\yend% +\newcount\Xend% +\newcount\Yend% +\newcount\xpos% +\newcount\ypos% +\newcount\default \default=500% +\newcount\defaultmargin \defaultmargin=150% +\newcount\topw% +\newcount\botw% +\newcount\Xpos% +\newcount\Ypos% +\def\ratchet#1#2{\ifnum#1<#2\global #1=#2\fi}% +\catcode`\@=11% +\expandafter\ifx\csname @ifnextchar\endcsname\relax% +\def\ifnextchar#1#2#3{\let\@tempe% +#1\def\@tempa{#2}\def\@tempb{#3}\futurelet% + \@tempc\@ifnch}% +\def\@ifnch{\ifx \@tempc \@sptoken \let\@tempd\@xifnch% + \else \ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi% + \fi \@tempd}% +\def\:{\let\@sptoken= } \: +\def\:{\@xifnch} \expandafter\def\: {\futurelet\@tempc\@ifnch}% +\else% +\let\ifnextchar\@ifnextchar% +\fi% +\setbox0=\hbox{$x$} +\newdimen\axis \axis=\fontdimen22\textfont2% +\ul=.01em% +\X@xbase =.01em% +\Y@ybase =.01em% +\def\scalefactor#1{\ul=#1\ul \X@xbase=#1\X@xbase \Y@ybase=#1\Y@ybase}% +\catcode`\@=12% +\def\fontscale#1{% +\if#1h\relax% +\font\xydashfont=xydash10 scaled \magstephalf% +\font\xyatipfont=xyatip10 scaled \magstephalf% +\font\xybtipfont=xybtip10 scaled \magstephalf% +\font\xybsqlfont=xybsql10 scaled \magstephalf% +\font\xycircfont=xycirc10 scaled \magstephalf% +\else% +\font\xydashfont=xydash10 scaled \magstep#1% +\font\xyatipfont=xyatip10 scaled \magstep#1% +\font\xybtipfont=xybtip10 scaled \magstep#1% +\font\xybsqlfont=xybsql10 scaled \magstep#1% +\font\xycircfont=xycirc10 scaled \magstep#1% +\fi}% +\def\bfig{\vcenter\bgroup\xy}% +\def\efig{\endxy\egroup}% +\def\car#1#2\nil{#1}% +\def\morphism{\ifnextchar({\morphismp}{\morphismp(0,0)}}% +\def\morphismp(#1){\ifnextchar|{\morphismpp(#1)}{\morphismpp(#1)|a|}}% +\def\morphismpp(#1)|#2|{\ifnextchar/{\morphismppp(#1)|#2|}% + {\morphismppp(#1)|#2|/>/}}% +\def\morphismppp(#1)|#2|/#3/{% + \ifnextchar<{\morphismpppp(#1)|#2|/#3/}% + {\morphismpppp(#1)|#2|/#3/<\default,0>}}% +\def\morphismpppp(#1,#2)|#3|/#4/<#5,#6>[#7`#8;#9]{% +\xend#1\advance \xend by #5% +\yend#2\advance \yend by #6% +\domorphism(#1,#2)|#3|/#4/<#5,#6>[{#7}`{#8};{#9}]}% +\def\domorphism(#1,#2)|#3|/#4/<#5,#6>[#7`#8;#9]{% +\def\next{\car#4.\nil}% +\if@\next\relax% + \if#3l% + \ifnum #6>0% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \fi% + \else \if#3m% + \setbox0\hbox{$#9$}% + \ifdim \wd0=0pt% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4 (\xend,\yend)*+!!<0ex,\axis>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4|-*+<1pt,4pt>{\labelstyle#9}% + (\xend,\yend)*+!!<0ex,\axis>{#8}% + \fi% + \else \if#3r% + \ifnum #6<0% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \fi% + \else \if#3a% + \ifnum #5>0% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \fi% + \else \if#3b% + \ifnum #5<0% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \fi% + \else% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4 (\xend,\yend)*+!!<0ex,\axis>{#8}% + \fi\fi\fi\fi\fi% +\else% + \if#3l% + \ifnum #6>0% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \fi% + \else \if#3m% + \setbox0\hbox{$#9$}% + \ifdim \wd0=0pt% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}|-*+<1pt,4pt>{\labelstyle#9}% + (\xend,\yend)*+!!<0ex,\axis>{#8}% + \fi% + \else \if#3r% + \ifnum #6<0% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \fi% + \else \if#3a% + \ifnum #5>0% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \fi% + \else \if#3b% + \ifnum #5<0% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \else% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \fi% + \else% + \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,\axis>{#8}% + \fi\fi\fi\fi\fi% +\fi\ignorespaces}% +\def\vect(#1,#2)/#3/<#4,#5>{% + \xend#1 \yend#2 \advance\xend by #4 \advance\yend by #5% + \POS(#1,#2)\ar#3 (\xend,\yend)}% +\def\squarepppp(#1,#2)|#3|/#4`#5`#6`#7/<#8>[#9]{% +\xpos#1\ypos#2% +\def\next|##1##2##3##4|{% + \def\xa{##1}\def\xb{##2}\def\xc{##3}\def\xd{##4}\ignorespaces}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#8>% +\def\next[##1`##2`##3`##4;##5`##6`##7`##8]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}% + \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\ignorespaces}% +\next[#9]% +\morphism(\xpos,\ypos)|\xd|/{#7}/<\deltax,0>[\nodec`\noded;\labeld]% +\advance \ypos by \deltay% +\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]% +\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]% + \advance \xpos by \deltax% +\morphism(\xpos,\ypos)|\xc|/{#6}/<0,-\deltay>[\nodeb`\noded;\labelc]% +\ignorespaces}% +\def\square{\ifnextchar({\squarep}{\squarep(0,0)}}% +\def\squarep(#1){\ifnextchar|{\squarepp(#1)}{\squarepp(#1)|alrb|}}% +\def\squarepp(#1)|#2|{\ifnextchar/{\squareppp(#1)|#2|}% + {\squareppp(#1)|#2|/>`>`>`>/}}% +\def\squareppp(#1)|#2|/#3`#4`#5`#6/{% + \ifnextchar<{\squarepppp(#1)|#2|/#3`#4`#5`#6/}% + {\squarepppp(#1)|#2|/#3`#4`#5`#6/<\default,\default>}}% +\def\diamondpppp(#1,#2)|#3|/#4`#5`#6`#7/<#8>[#9]{% +\xpos#1\ypos#2% +\def\next|##1##2##3##4|{% + \def\xa{##1}\def\xb{##2}\def\xc{##3}\def\xd{##4}\ignorespaces}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#8>% +\def\next[##1`##2`##3`##4;##5`##6`##7`##8]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}% + \def\labela{##5}\def\labelb{##6}\def\labelc{##7}% +\def\labeld{##8}\ignorespaces}% +\next[#9]% +\advance\ypos\deltay +\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,-\deltay>[\nodeb`\noded;\labelc]% +\advance\xpos \deltax +\advance\xpos \deltax +\morphism(\xpos,\ypos)|\xd|/{#7}/<-\deltax,-\deltay>[\nodec`\noded;\labeld]% +\advance\ypos\deltay \advance\xpos -\deltax +\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]% +\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]% +} +\def\Diamond{\ifnextchar({\diamondp}{\diamondp(0,0)}}% +\def\diamondp(#1){\ifnextchar|{\diamondpp(#1)}{\diamondpp(#1)|lrlr|}}% +\def\diamondpp(#1)|#2|{\ifnextchar/{\diamondppp(#1)|#2|}% + {\diamondppp(#1)|#2|/>`>`>`>/}}% +\def\diamondppp(#1)|#2|/#3`#4`#5`#6/{% + \ifnextchar<{\diamondpppp(#1)|#2|/#3`#4`#5`#6/}% + {\diamondpppp(#1)|#2|/#3`#4`#5`#6/<400,400>}}% +\def\ptrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{% +\xpos#1\ypos#2% +\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#7>% +\def\next[##1`##2`##3;##4`##5`##6]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% + \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}% +\next[#8]% +\advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]% +\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]% +\advance\xpos by \deltax% +\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]% +\ignorespaces}% +\def\qtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{% +\xpos#1\ypos#2% +\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#7>% +\def\next[##1`##2`##3;##4`##5`##6]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% + \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}% +\next[#8]% +\advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]% +\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]% +\advance\xpos by \deltax% +\morphism(\xpos,\ypos)|\xc|/{#6}/<0,-\deltay>[\nodeb`\nodec;\labelc]% +\ignorespaces}% +\def\dtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{% +\xpos#1\ypos#2% +\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#7>% +\def\next[##1`##2`##3;##4`##5`##6]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% + \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}% +\next[#8]% +\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]% +\advance\ypos by \deltay\advance \xpos by \deltax% +\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]% +\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]% +\ignorespaces}% +\def\btrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{% +\xpos#1\ypos#2% +\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#7>% +\def\next[##1`##2`##3;##4`##5`##6]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% + \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}% +\next[#8]% +\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]% +\advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xa|/{#4}/<0,-\deltay>[\nodea`\nodeb;\labela]% +\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]% +\ignorespaces}% +\def\Atrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{% +\xpos#1\ypos#2% +\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#7>% +\def\next[##1`##2`##3;##4`##5`##6]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% + \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}% +\next[#8]% +\multiply\deltax by 2% +\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]% +\divide\deltax by 2% +\advance\ypos by \deltay\advance\xpos by \deltax% +\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]% +\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]% +\ignorespaces}% +\def\Vtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{% +\xpos#1\ypos#2% +\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#7>% +\def\next[##1`##2`##3;##4`##5`##6]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% + \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}% +\next[#8]% +\advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]% +\multiply\deltax by 2% +\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]% +\advance\xpos by \deltax \divide \deltax by 2% +\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]% +\ignorespaces}% +\def\Ctrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{% +\xpos#1\ypos#2% +\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#7>% +\def\next[##1`##2`##3;##4`##5`##6]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% + \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}% +\next[#8]% +\advance \ypos by \deltay% +\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,-\deltay>[\nodeb`\nodec;\labelc]% +\advance\ypos by \deltay \advance \xpos by \deltax% +\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]% +\multiply\deltay by 2% +\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]% +\ignorespaces}% +\def\Dtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{% +\xpos#1\ypos#2% +\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}% +\next|#3|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#7>% +\def\next[##1`##2`##3;##4`##5`##6]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% + \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}% +\next[#8]% +\advance\xpos by \deltax \advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]% +\advance\xpos by -\deltax \advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodeb;\labelb]% +\multiply \deltay by 2% +\morphism(\xpos,\ypos)|\xa|/{#4}/<0,-\deltay>[\nodea`\nodec;\labela]% +\ignorespaces}% +\def\ptriangle{\ifnextchar({\ptrianglep}{\ptrianglep(0,0)}}% +\def\ptrianglep(#1){\ifnextchar|{\ptrianglepp(#1)}{\ptrianglepp(#1)|alr|}}% +\def\ptrianglepp(#1)|#2|{\ifnextchar/{\ptriangleppp(#1)|#2|}% + {\ptriangleppp(#1)|#2|/>`>`>/}}% +\def\ptriangleppp(#1)|#2|/#3`#4`#5/{% + \ifnextchar<{\ptrianglepppp(#1)|#2|/#3`#4`#5/}% + {\ptrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}% +\def\qtriangle{\ifnextchar({\qtrianglep}{\qtrianglep(0,0)}}% +\def\qtrianglep(#1){\ifnextchar|{\qtrianglepp(#1)}{\qtrianglepp(#1)|alr|}}% +\def\qtrianglepp(#1)|#2|{\ifnextchar/{\qtriangleppp(#1)|#2|}% + {\qtriangleppp(#1)|#2|/>`>`>/}}% +\def\qtriangleppp(#1)|#2|/#3`#4`#5/{% + \ifnextchar<{\qtrianglepppp(#1)|#2|/#3`#4`#5/}% + {\qtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}% +\def\dtriangle{\ifnextchar({\dtrianglep}{\dtrianglep(0,0)}}% +\def\dtrianglep(#1){\ifnextchar|{\dtrianglepp(#1)}{\dtrianglepp(#1)|lrb|}}% +\def\dtrianglepp(#1)|#2|{\ifnextchar/{\dtriangleppp(#1)|#2|}% + {\dtriangleppp(#1)|#2|/>`>`>/}}% +\def\dtriangleppp(#1)|#2|/#3`#4`#5/{% + \ifnextchar<{\dtrianglepppp(#1)|#2|/#3`#4`#5/}% + {\dtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}% +\def\btriangle{\ifnextchar({\btrianglep}{\btrianglep(0,0)}}% +\def\btrianglep(#1){\ifnextchar|{\btrianglepp(#1)}{\btrianglepp(#1)|lrb|}}% +\def\btrianglepp(#1)|#2|{\ifnextchar/{\btriangleppp(#1)|#2|}% + {\btriangleppp(#1)|#2|/>`>`>/}}% +\def\btriangleppp(#1)|#2|/#3`#4`#5/{% + \ifnextchar<{\btrianglepppp(#1)|#2|/#3`#4`#5/}% + {\btrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}% +\def\Atriangle{\ifnextchar({\Atrianglep}{\Atrianglep(0,0)}}% +\def\Atrianglep(#1){\ifnextchar|{\Atrianglepp(#1)}{\Atrianglepp(#1)|lrb|}}% +\def\Atrianglepp(#1)|#2|{\ifnextchar/{\Atriangleppp(#1)|#2|}% + {\Atriangleppp(#1)|#2|/>`>`>/}}% +\def\Atriangleppp(#1)|#2|/#3`#4`#5/{% + \ifnextchar<{\Atrianglepppp(#1)|#2|/#3`#4`#5/}% + {\Atrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}% +\def\Vtriangle{\ifnextchar({\Vtrianglep}{\Vtrianglep(0,0)}}% +\def\Vtrianglep(#1){\ifnextchar|{\Vtrianglepp(#1)}{\Vtrianglepp(#1)|alb|}}% +\def\Vtrianglepp(#1)|#2|{\ifnextchar/{\Vtriangleppp(#1)|#2|}% + {\Vtriangleppp(#1)|#2|/>`>`>/}}% +\def\Vtriangleppp(#1)|#2|/#3`#4`#5/{% + \ifnextchar<{\Vtrianglepppp(#1)|#2|/#3`#4`#5/}% + {\Vtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}% +\def\Ctriangle{\ifnextchar({\Ctrianglep}{\Ctrianglep(0,0)}}% +\def\Ctrianglep(#1){\ifnextchar|{\Ctrianglepp(#1)}{\Ctrianglepp(#1)|arb|}}% +\def\Ctrianglepp(#1)|#2|{\ifnextchar/{\Ctriangleppp(#1)|#2|}% + {\Ctriangleppp(#1)|#2|/>`>`>/}}% +\def\Ctriangleppp(#1)|#2|/#3`#4`#5/{% + \ifnextchar<{\Ctrianglepppp(#1)|#2|/#3`#4`#5/}% + {\Ctrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}% +\def\Dtriangle{\ifnextchar({\Dtrianglep}{\Dtrianglep(0,0)}}% +\def\Dtrianglep(#1){\ifnextchar|{\Dtrianglepp(#1)}{\Dtrianglepp(#1)|lab|}}% +\def\Dtrianglepp(#1)|#2|{\ifnextchar/{\Dtriangleppp(#1)|#2|}% + {\Dtriangleppp(#1)|#2|/>`>`>/}}% +\def\Dtriangleppp(#1)|#2|/#3`#4`#5/{% + \ifnextchar<{\Dtrianglepppp(#1)|#2|/#3`#4`#5/}% + {\Dtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}% +\def\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{% +\def\next(##1,##2){\xpos##1\ypos##2}% +\next(#1)% +\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}% +\def\xc{##3}\def\xd{##4}\def\xe{##5}}% +\next|#2|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#8>% +\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}% + \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}% +\next[#9]% +\morphism(\xpos,\ypos)|\xd|/{#6}/<\deltax,0>[\nodeb`\nodec;\labeld]% +\advance\xpos by \deltax% +\morphism(\xpos,\ypos)|\xe|/{#7}/<\deltax,0>[\nodec`\noded;\labele]% +\advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xa|/{#3}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]% +\morphism(\xpos,\ypos)|\xb|/{#4}/<0,-\deltay>[\nodea`\nodec;\labelb]% +\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,-\deltay>[\nodea`\noded;\labelc]% +\ignorespaces}% +\def\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{% +\def\next(##1,##2){\xpos##1\ypos##2}% +\next(#1)% +\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}% +\def\xc{##3}\def\xd{##4}\def\xe{##5}}% +\next|#2|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#8>% +\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}% + \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}% +\next[#9]% +\advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xa|/{#3}/<\deltax,0>[\nodea`\nodeb;\labela]% +\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,-\deltay>[\nodea`\noded;\labelc]% +\advance\xpos by \deltax% +\morphism(\xpos,\ypos)|\xb|/{#4}/<\deltax,0>[\nodeb`\nodec;\labelb]% +\morphism(\xpos,\ypos)|\xd|/{#6}/<0,-\deltay>[\nodeb`\noded;\labeld]% +\advance\xpos by \deltax% +\morphism(\xpos,\ypos)|\xe|/{#7}/<-\deltax,-\deltay>[\nodec`\noded;\labele]% +\ignorespaces}% +\def\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{% +\def\next(##1,##2){\xpos##1\ypos##2}% +\next(#1)% +\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}% +\def\xc{##3}\def\xd{##4}\def\xe{##5}}% +\next|#2|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#8>% +\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}% + \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}% +\next[#9]% +\advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xe|/{#7}/<0,-\deltay>[\nodec`\noded;\labele]% +\advance\xpos by -\deltax% +\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,0>[\nodeb`\nodec;\labelc]% +\morphism(\xpos,\ypos)|\xd|/{#6}/<\deltax,-\deltay>[\nodeb`\noded;\labeld]% +\advance\ypos by \deltay% +\advance\xpos by \deltax% +\morphism(\xpos,\ypos)|\xa|/{#3}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]% +\morphism(\xpos,\ypos)|\xb|/{#4}/<0,-\deltay>[\nodea`\nodec;\labelb]% +\ignorespaces}% +\def\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{% +\def\next(##1,##2){\xpos##1\ypos##2}% +\next(#1)% +\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}% +\def\xc{##3}\def\xd{##4}\def\xe{##5}}% +\next|#2|% +\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}% +\next<#8>% +\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}% + \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}% +\next[#9]% +\advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,0>[\nodeb`\nodec;\labelc]% +\morphism(\xpos,\ypos)|\xd|/{#6}/<0,-\deltay>[\nodeb`\noded;\labeld]% +\advance\ypos by \deltay% +\morphism(\xpos,\ypos)|\xa|/{#3}/<0,-\deltay>[\nodea`\nodeb;\labela]% +\morphism(\xpos,\ypos)|\xb|/{#4}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]% +\advance\ypos by -\deltay% +\advance\xpos by \deltax% +\morphism(\xpos,\ypos)|\xe|/{#7}/<-\deltax,-\deltay>[\nodec`\noded;\labele]% +\ignorespaces}% +\def\Atrianglepair{\ifnextchar({\Atrianglepairp}{\Atrianglepairp(0,0)}}% +\def\Atrianglepairp(#1){\ifnextchar|{\Atrianglepairpp(#1)}% +{\Atrianglepairpp(#1)|lmrbb|}}% +\def\Atrianglepairpp(#1)|#2|{\ifnextchar/{\Atrianglepairppp(#1)|#2|}% + {\Atrianglepairppp(#1)|#2|/>`>`>`>`>/}}% +\def\Atrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{% + \ifnextchar<{\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}% + {\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}% +\def\Vtrianglepair{\ifnextchar({\Vtrianglepairp}{\Vtrianglepairp(0,0)}}% +\def\Vtrianglepairp(#1){\ifnextchar|{\Vtrianglepairpp(#1)}% +{\Vtrianglepairpp(#1)|aalmr|}}% +\def\Vtrianglepairpp(#1)|#2|{\ifnextchar/{\Vtrianglepairppp(#1)|#2|}% + {\Vtrianglepairppp(#1)|#2|/>`>`>`>`>/}}% +\def\Vtrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{% + \ifnextchar<{\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}% + {\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}% +\def\Ctrianglepair{\ifnextchar({\Ctrianglepairp}{\Ctrianglepairp(0,0)}}% +\def\Ctrianglepairp(#1){\ifnextchar|{\Ctrianglepairpp(#1)}% +{\Ctrianglepairpp(#1)|lrmlr|}}% +\def\Ctrianglepairpp(#1)|#2|{\ifnextchar/{\Ctrianglepairppp(#1)|#2|}% + {\Ctrianglepairppp(#1)|#2|/>`>`>`>`>/}}% +\def\Ctrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{% + \ifnextchar<{\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}% + {\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}% +\def\Dtrianglepair{\ifnextchar({\Dtrianglepairp}{\Dtrianglepairp(0,0)}}% +\def\Dtrianglepairp(#1){\ifnextchar|{\Dtrianglepairpp(#1)}% +{\Dtrianglepairpp(#1)|lrmlr|}}% +\def\Dtrianglepairpp(#1)|#2|{\ifnextchar/{\Dtrianglepairppp(#1)|#2|}% + {\Dtrianglepairppp(#1)|#2|/>`>`>`>`>/}}% +\def\Dtrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{% + \ifnextchar<{\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}% + {\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}% +\def\pplace[#1](#2,#3)[#4]{\POS(#2,#3)*+!!<0ex,\axis>!#1{#4}\ignorespaces}% +\def\cplace(#1,#2)[#3]{\POS(#1,#2)*+!!<0ex,\axis>{#3}\ignorespaces}% +\def\place{\ifnextchar[{\pplace}{\cplace}}% +\def\pullback#1]#2]{\square#1]\trident#2]\ignorespaces}% +\def\tridentppp|#1#2#3|/#4`#5`#6/<#7,#8>[#9]{% +\def\next[##1;##2`##3`##4]{\def\nodee{##1}\def\labele{##2}% + \def\labelf{##3}\def\labelg{##4}}% +\next[#9]% +\advance \xpos by -\deltax% +\advance \xpos by -#7\advance \ypos by #8% +\advance\deltax by #7% +\morphism(\xpos,\ypos)|#1|/{#4}/<\deltax,-#8>[\nodee`\nodeb;\labele]% +\advance\deltax by -#7% +\morphism(\xpos,\ypos)|#2|/{#5}/<#7,-#8>[\nodee`\nodea;\labelf]% +\advance\deltay by #8% +\morphism(\xpos,\ypos)|#3|/{#6}/<#7,-\deltay>[\nodee`\nodec;\labelg]% +\ignorespaces}% +\def\trident{\ifnextchar|{\tridentp}{\tridentp|amb|}}% +\def\tridentp|#1|{\ifnextchar/{\tridentpp|#1|}{\tridentpp|#1|/{>}`{>}`{>}/}}% +\def\tridentpp|#1|/#2/{\ifnextchar<{\tridentppp|#1|/#2/}% + {\tridentppp|#1|/#2/<500,500>}}% +\def\setmorphismwidth#1#2#3#4{% + \setbox0=\hbox{$#1{\labelstyle#3#3}#2$}#4=\wd0% + \divide #4 by 2 \divide #4 by \ul% + \advance #4 by 350 \ratchet{#4}{500}}% +\def\setSquarewidth[#1`#2`#3`#4;#5`#6`#7`#8]{% + \setmorphismwidth{#1}{#2}{#5}{\topw}% + \setmorphismwidth{#3}{#4}{#8}{\botw}% +\ratchet{\topw}{\botw}}% +\def\Squarepppp(#1)|#2|/#3/<#4>[#5]{% + \setSquarewidth[#5]% + \squarepppp(#1)|#2|/#3/<\topw,#4>[#5]% +\ignorespaces}% +\def\Square{\ifnextchar({\Squarep}{\Squarep(0,0)}}% +\def\Squarep(#1){\ifnextchar|{\Squarepp(#1)}{\Squarepp(#1)|alrb|}}% +\def\Squarepp(#1)|#2|{\ifnextchar/{\Squareppp(#1)|#2|}% + {\Squareppp(#1)|#2|/>`>`>`>/}}% +\def\Squareppp(#1)|#2|/#3`#4`#5`#6/{% + \ifnextchar<{\Squarepppp(#1)|#2|/#3`#4`#5`#6/}% + {\Squarepppp(#1)|#2|/#3`#4`#5`#6/<\default>}}% +\def\hsquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{% +\Xpos=#1\Ypos=#2% +\def\next|##1##2##3##4##5##6##7|{% + \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}% + \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}% +\next|#3|% +\def\next<##1,##2,##3>{\deltaX=##1\deltaXprime=##2\deltaY=##3}% +\next<#5>% +\def\next[##1`##2`##3`##4`##5`##6]{% + \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}% + \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}% +\next[#6]% +\def\next[##1`##2`##3`##4`##5`##6`##7]{% + \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}% + \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}% +\next[#7]% +\dohsquares/#4/}% +\def\dohsquares/#1`#2`#3`#4`#5`#6`#7/{% +\squarepppp(\Xpos,\Ypos)|\Xa\Xc\Xd\Xf|/#1`#3`#4`#6/<\deltaX,\deltaY>% + [\Nodea`\Nodeb`\Noded`\Nodee;\Labela`\Labelc`\Labeld`\Labelf]% + \advance \Xpos by \deltaX% +\squarepppp(\Xpos,\Ypos)|\Xb\Xd\Xe\Xg|/#2``#5`#7/<\deltaXprime,\deltaY>% +[\Nodeb`\Nodec`\Nodee`\Nodef;\Labelb``\Labele`\Labelg]% +\ignorespaces}% +\def\hsquares{\ifnextchar({\hsquaresp}{\hsquaresp(0,0)}}% +\def\hsquaresp(#1){\ifnextchar|{\hsquarespp(#1)}{\hsquarespp% +(#1)|aalmrbb|}}% +\def\hsquarespp(#1)|#2|{\ifnextchar/{\hsquaresppp(#1)|#2|}% + {\hsquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}% +\def\hsquaresppp(#1)|#2|/#3/{% + \ifnextchar<{\hsquarespppp(#1)|#2|/#3/}% + {\hsquarespppp(#1)|#2|/#3/<\default,\default,\default>}}% +\def\hSquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{% +\Xpos=#1\Ypos=#2% +\def\next|##1##2##3##4##5##6##7|{% + \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}% + \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}% +\next|#3|% +\deltaY=#5% +\def\next[##1`##2`##3`##4`##5`##6]{% + \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}% + \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}% +\next[#6]% +\def\next[##1`##2`##3`##4`##5`##6`##7]{% + \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}% + \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}% +\next[#7]% +\dohSquares/#4/}% +\def\dohSquares/#1`#2`#3`#4`#5`#6`#7/{% +\Squarepppp(\Xpos,\Ypos)|\Xa\Xc\Xd\Xf|/#1`#3`#4`#6/<\deltaY>% + [\Nodea`\Nodeb`\Noded`\Nodee;\Labela`\Labelc`\Labeld`\Labelf]% + \advance \Xpos by \topw% +\Squarepppp(\Xpos,\Ypos)|\Xb\Xd\Xe\Xg|/#2``#5`#7/<\deltaY>% +[\Nodeb`\Nodec`\Nodee`\Nodef;\Labelb``\Labele`\Labelg]% +\ignorespaces}% +\def\hSquares{\ifnextchar({\hSquaresp}{\hSquaresp(0,0)}}% +\def\hSquaresp(#1){\ifnextchar|{\hSquarespp(#1)}{\hSquarespp% +(#1)|aalmrbb|}}% +\def\hSquarespp(#1)|#2|{\ifnextchar/{\hSquaresppp(#1)|#2|}% + {\hSquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}% +\def\hSquaresppp(#1)|#2|/#3/{% + \ifnextchar<{\hSquarespppp(#1)|#2|/#3/}% + {\hSquarespppp(#1)|#2|/#3/<\default>}}% +\def\vsquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{% +\Xpos=#1\Ypos=#2% +\def\next|##1##2##3##4##5##6##7|{% + \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}% + \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}% +\next|#3|% +\def\next<##1,##2,##3>{\deltaX=##1\deltaY=##2\deltaYprime=##3}% +\next<#5>% +\def\next[##1`##2`##3`##4`##5`##6]{% + \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}% + \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}% +\next[#6]% +\def\next[##1`##2`##3`##4`##5`##6`##7]{% + \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}% + \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}% +\next[#7]% +\dovsquares/#4/}% +\def\dovsquares/#1`#2`#3`#4`#5`#6`#7/{% +\squarepppp(\Xpos,\Ypos)|\Xd\Xe\Xf\Xg|/`#5`#6`#7/<\deltaX,\deltaYprime>% +[\Nodec`\Noded`\Nodee`\Nodef;`\Labele`\Labelf`\Labelg]% + \advance\Ypos by \deltaYprime% +\squarepppp(\Xpos,\Ypos)|\Xa\Xb\Xc\Xd|/#1`#2`#3`#4/<\deltaX,\deltaY>% + [\Nodea`\Nodeb`\Nodec`\Noded;\Labela`\Labelb`\Labelc`\Labeld]% +\ignorespaces}% +\def\vsquares{\ifnextchar({\vsquaresp}{\vsquaresp(0,0)}}% +\def\vsquaresp(#1){\ifnextchar|{\vsquarespp(#1)}{\vsquarespp% +(#1)|aalmrbb|}}% +\def\vsquarespp(#1)|#2|{\ifnextchar/{\vsquaresppp(#1)|#2|}% + {\vsquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}% +\def\vsquaresppp(#1)|#2|/#3/{% + \ifnextchar<{\vsquarespppp(#1)|#2|/#3/}% + {\vsquarespppp(#1)|#2|/#3/<\default,\default,\default>}}% +\def\vSquarespppp(#1,#2)|#3|/#4/<#5,#6>[#7;#8]{% +\Xpos=#1\Ypos=#2% +\def\next|##1##2##3##4##5##6##7|{% + \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}% + \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}% +\next|#3|% +\deltaX=#5% +\deltaY=#6% +\def\next[##1`##2`##3`##4`##5`##6]{% + \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}% + \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}% +\next[#7]% +\def\next[##1`##2`##3`##4`##5`##6`##7]{% + \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}% + \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}% +\next[#8]% +\dovSquares/#4/\ignorespaces}% +\def\dovSquares/#1`#2`#3`#4`#5`#6`#7/{% +\setmorphismwidth{\Nodea}{\Nodeb}{\Labela}{\topw}% +\setmorphismwidth{\Nodec}{\Noded}{\Labeld}{\botw}% +\ratchet{\topw}{\botw}% +\setmorphismwidth{\Nodee}{\Nodef}{\Labelg}{\botw}% +\ratchet{\topw}{\botw}% +\square(\Xpos,\Ypos)|\Xd\Xe\Xf\Xg|/`#5`#6`#7/<\topw,\deltaY>% + [\Nodec`\Noded`\Nodee`\Nodef;`\Labele`\Labelf`\Labelg]% +\advance \Ypos by \deltaY% +\square(\Xpos,\Ypos)|\Xa\Xb\Xc\Xd|/#1`#2`#3`#4/<\topw,\deltaX>% + [\Nodea`\Nodeb`\Nodec`\Noded;\Labela`\Labelb`\Labelc`\Labeld]% +}% +\def\vSquares{\ifnextchar({\vSquaresp}{\vSquaresp(0,0)}}% +\def\vSquaresp(#1){\ifnextchar|{\vSquarespp(#1)}{\vSquarespp% +(#1)|alrmlrb|}}% +\def\vSquarespp(#1)|#2|{\ifnextchar/{\vSquaresppp(#1)|#2|}% + {\vSquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}% +\def\vSquaresppp(#1)|#2|/#3/{% + \ifnextchar<{\vSquarespppp(#1)|#2|/#3/}% + {\vSquarespppp(#1)|#2|/#3/<\default,\default>}}% +\def\osquarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]{\squarepppp% + (#1)|#2|/#3`#4`#5`#6/<#7>[#8]% + \let\Nodea\nodea\let\Nodeb\nodeb% +\let\Nodec\nodec\let\Noded\noded\Xpos=\xpos\Ypos=\ypos% +\deltaX=\deltax \deltaY=\deltay \isquare}% +\def\cube{\ifnextchar({\osquarep}{\osquarep(0,0)}}% +\def\osquarep(#1){\ifnextchar|{\osquarepp(#1)}{\osquarepp(#1)|alrb|}}% +\def\osquarepp(#1)|#2|{\ifnextchar/{\osquareppp(#1)|#2|}% + {\osquareppp(#1)|#2|/>`>`>`>/}}% +\def\osquareppp(#1)|#2|/#3`#4`#5`#6/{% + \ifnextchar<{\osquarepppp(#1)|#2|/#3`#4`#5`#6/}% + {\osquarepppp(#1)|#2|/#3`#4`#5`#6/<1500,1500>}}% +\def\isquarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]{% + \squarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]% +\ifnextchar|{\cubep}{\cubep|mmmm|}}% +\def\cubep|#1|{\ifnextchar/{\cubepp|#1|}{\cubepp|#1|/>`>`>`>/}}% +\def\isquare{\ifnextchar({\isquarep}{\isquarep(\default,\default)}}% +\def\isquarep(#1){\ifnextchar|{\isquarepp(#1)}{\isquarepp(#1)|alrb|}}% +\def\isquarepp(#1)|#2|{\ifnextchar/{\isquareppp(#1)|#2|}% + {\isquareppp(#1)|#2|/>`>`>`>/}}% +\def\isquareppp(#1)|#2|/#3`#4`#5`#6/{% + \ifnextchar<{\isquarepppp(#1)|#2|/#3`#4`#5`#6/}% + {\isquarepppp(#1)|#2|/#3`#4`#5`#6/<500,500>}}% +\def\cubepp|#1#2#3#4|/#5`#6`#7`#8/[#9]{% +\def\next[##1`##2`##3`##4]{\gdef\Labela{##1}% +\gdef\Labelb{##2}\gdef\Labelc{##3}\gdef\Labeld{##4}}\next[#9]% +\xend\xpos \yend\ypos% +\Xend\xend\advance\Xend by -\Xpos% +\Yend\yend\advance\Yend by -\Ypos% +\domorphism(\Xpos,\Ypos)|#2|/#6/<\Xend,\Yend>[\Nodeb`\nodeb;\Labelb]% +\advance\Xpos by-\deltaX% +\advance\xend by-\deltax% +\Xend\xend\advance\Xend by -\Xpos% +\domorphism(\Xpos,\Ypos)|#1|/#5/<\Xend,\Yend>[\Nodea`\nodea;\Labela]% +\advance\Ypos by-\deltaY% +\advance\yend by-\deltay% +\Yend\yend\advance\Yend by -\Ypos% +\domorphism(\Xpos,\Ypos)|#3|/#7/<\Xend,\Yend>[\Nodec`\nodec;\Labelc]% +\advance\Xpos by\deltaX% +\advance\xend by\deltax% +\Xend\xend\advance\Xend by -\Xpos% +\domorphism(\Xpos,\Ypos)|#4|/#8/<\Xend,\Yend>[\Noded`\noded;\Labeld]% +\ignorespaces}% +\def\setwdth#1#2{\setbox0\hbox{$\labelstyle#1$}\wdth=\wd0% +\setbox0\hbox{$\labelstyle#2$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi}% +\def\topppp/#1/<#2>^#3_#4{\:% +\ifnum#2=0% + \setwdth{#3}{#4}\deltax=\wdth \divide \deltax by \ul% + \advance \deltax by \defaultmargin \ratchet{\deltax}{100}% +\else \deltax #2% +\fi% +\xy\ar@{#1}^{#3}_{#4}(\deltax,0) \endxy% +\:}% +\def\toppp/#1/<#2>^#3{\ifnextchar_{\topppp/#1/<#2>^{#3}}{\topppp/#1/<#2>^{#3}_{}}}% +\def\topp/#1/<#2>{\ifnextchar^{\toppp/#1/<#2>}{\toppp/#1/<#2>^{}}}% +\def\toop/#1/{\ifnextchar<{\topp/#1/}{\topp/#1/<0>}}% +\def\to{\ifnextchar/{\toop}{\toop/>/}}% +\def\mon{\to/ >->/}% +\def\epi{\to/->>/}% +\def\toleft{\to/<-/}% +\def\monleft{\to/<-< /}% +\def\epileft{\to/<<-/}% +\def\rlimto{{% +\font\xyatipfont=xyatip10 scaled 800 +\font\xybtipfont=xybtip10 scaled 800 +\raise 2pt\hbox{\,\xy\ar@{->}(100,0) \endxy}\,}} +\def\llimto{{% +\font\xyatipfont=xyatip10 scaled 800 +\font\xybtipfont=xybtip10 scaled 800 +\raise 2pt\hbox{\,\xy\ar@{<-}(100,0) \endxy}\,}} +\def\twopppp/#1`#2/<#3>^#4_#5{\:% +\ifnum0=#3% + \setwdth{#4}{#5}\deltax=\wdth \divide \deltax by \ul \advance \deltax% + by \defaultmargin \ratchet{\deltax}{200}% +\else \deltax#3 \fi% +\xy\ar@{#1}@<2.5pt>^{#4}(\deltax,0)% +\ar@{#2}@<-2.5pt>_{#5}(\deltax,0)\endxy\:}% +\def\twoppp/#1`#2/<#3>^#4{\ifnextchar_{\twopppp/#1`#2/<#3>^{#4}}% + {\twopppp/#1`#2/<#3>^{#4}_{}}}% +\def\twopp/#1`#2/<#3>{\ifnextchar^{\twoppp/#1`#2/<#3>}{\twoppp/#1`#2/<#3>^{}}}% +\def\twop/#1`#2/{\ifnextchar<{\twopp/#1`#2/}{\twopp/#1`#2/<0>}}% +\def\two{\ifnextchar/{\twop}{\twop/>`>/}}% +\def\twoleft{\two/<-`<-/}% +\def\threeppppp/#1`#2`#3/<#4>^#5|#6_#7{\:% +\ifnum0=#4% +\setbox0\hbox{$\labelstyle#5$}\wdth=\wd0% +\setbox0\hbox{$\labelstyle#6$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi% +\setbox0\hbox{$\labelstyle#7$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi% +\deltax=\wdth \divide \deltax by \ul \advance \deltax by% +\defaultmargin \ratchet{\deltax}{300}% +\else\deltax#4 \fi% + \xy \ifnum\wd0=0 \ar@{#2}(\deltax,0)% + \else \ar@{#2}|{#6}(\deltax,0)\fi% +\ar@{#1}@<4.5pt>^{#5}(\deltax,0)% +\ar@{#3}@<-4.5pt>_{#7}(\deltax,0)\endxy\:}% +\def\threepppp/#1`#2`#3/<#4>^#5|#6{\ifnextchar_{\threeppppp% + /#1`#2`#3/<#4>^{#5}|{#6}}{\threeppppp/#1`#2`#3/<#4>^{#5}|{#6}_{}}}% +\def\threeppp/#1`#2`#3/<#4>^#5{\ifnextchar|{\threepppp% + /#1`#2`#3/<#4>^{#5}}{\threepppp/#1`#2`#3/<#4>^{#5}|{}}}% +\def\threepp/#1`#2`#3/<#4>{\ifnextchar^{\threeppp/#1`#2`#3/<#4>}% + {\threeppp/#1`#2`#3/<#4>^{}}}% +\def\threep/#1`#2`#3/{\ifnextchar<{\threepp/#1`#2`#3/}% + {\threepp/#1`#2`#3/<0>}}% +\def\three{\ifnextchar/{\threep}{\threep/>`>`>/}}% +\def\twoar(#1,#2){{% + \scalefactor{0.1}% + \deltax#1\deltay#2% + \deltaX=\ifnum\deltax<0-\fi\deltax% + \deltaY=\ifnum\deltay<0-\fi\deltay% + \Xend\deltax \multiply \Xend by \deltax% + \Yend\deltay \multiply \Yend by \deltay% + \advance\Xend by \Yend \multiply \Xend by 3% + \ifnum \deltaX > \deltaY% + \multiply \deltaX by 3 \advance \deltaX by \deltaY% + \else% + \multiply \deltaY by 3 \advance \deltaX by \deltaY% + \fi% + \multiply\deltax by 500% + \multiply\deltay by 500% + \xpos\deltax \multiply \xpos by 3 \divide\xpos by \deltaX% + \Xpos\deltax \multiply \Xpos by \deltaX \divide \Xpos by \Xend% + \advance \xpos by \Xpos% + \ypos\deltay \multiply \ypos by 3 \divide\ypos by \deltaX% + \Ypos\deltay \multiply \Ypos by \deltaX \divide \Ypos by \Xend% + \advance \ypos by \Ypos% + \xy \ar@{=>}(\xpos,\ypos) \endxy% +}\ignorespaces}% +\def\iiixiiipppppp(#1,#2)|#3|/#4/<#5>#6<#7>[#8;#9]{% + \xpos#1\ypos#2\relax% + \def\next|##1##2##3##4##5##6##7|{\def\xa{##1}\def\xb{##2}% + \def\xc{##3}\def\xd{##4}\def\xe{##5}\def\xf{##6}\nextt|##7|}% + \def\nextt|##1##2##3##4##5##6|{\def\xg{##1}\def\xh{##2}% + \def\xi{##3}\def\xj{##4}\def\xk{##5}\def\xl{##6}}% + \next|#3|% + \def\next<##1,##2>{\deltax##1\deltay##2}% + \next<#5>% + \def\next<##1,##2>{\deltaX##1\deltaY##2}% + \next<#7>% + \def\next##1{\topw##1\relax% + \ifodd\topw \def\za{}\else\def\za{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\zb{}\else\def\zb{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\zc{}\else\def\zc{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\zd{}\else\def\zd{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\ze{}\else\def\ze{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\zf{}\else\def\zf{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\zg{}\else\def\zg{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\zh{}\else\def\zh{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\zi{}\else\def\zi{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\zj{}\else\def\zj{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\zk{}\else\def\zk{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\zl{}\else\def\zl{\relax}\fi}% + \next{#6}% + \def\next[##1`##2`##3`##4`##5`##6`##7`##8`##9]{% + \def\nodeA{##1}\def\nodeB{##2}\def\nodeC{##3}% + \def\nodeD{##4}\def\nodeE{##5}\def\nodeF{##6}% + \def\nodeG{##7}\def\nodeH{##8}\def\nodeI{##9}}% + \next[#8]% + \def\next[##1`##2`##3`##4`##5`##6`##7]{% + \def\labela{##1}\def\labelb{##2}\def\labelc{##3}% + \def\labeld{##4}\def\labele{##5}\def\labelf{##6}\nextt[##7]}% + \def\nextt[##1`##2`##3`##4`##5`##6]{% + \def\labelg{##1}\def\labelh{##2}\def\labeli{##3}% + \def\labelj{##4}\def\labelk{##5}\def\labell{##6}}% + \next[#9]% + \def\next/##1`##2`##3`##4`##5`##6`##7`##8/{% + \advance\ypos\deltay + \ifx\zf\empty \morphism(\xpos,\ypos)/<-/<-\deltaX,0>[\nodeD`0;]\fi + \morphism(\xpos,\ypos)|\xf|/{##6}/<\deltax,0>[\nodeD`\nodeE;\labelf]% + \advance \xpos\deltax + \morphism(\xpos,\ypos)|\xg|/{##7}/<\deltax,0>[\nodeE`\nodeF;\labelg]% + \ifx\zg\empty \advance\xpos \deltax + \morphism(\xpos,\ypos)<\deltaX,0>[\nodeF`0;]\fi + \xpos#1 \advance\ypos\deltay + \ifx\zd\empty \morphism(\xpos,\ypos)/<-/<-\deltaX,0>[\nodeA`0;]\fi + \ifx\za\empty \morphism(\xpos,\ypos)/<-/<0,\deltaY>[\nodeA`0;]\fi + \morphism(\xpos,\ypos)|\xa|/{##1}/<\deltax,0>[\nodeA`\nodeB;\labela]% + \morphism(\xpos,\ypos)|\xc|/{##3}/<0,-\deltay>[\nodeA`\nodeD;\labelc]% + \advance \xpos\deltax + \morphism(\xpos,\ypos)|\xb|/{##2}/<\deltax,0>[\nodeB`\nodeC;\labelb]% + \morphism(\xpos,\ypos)|\xd|/{##4}/<0,-\deltay>[\nodeB`\nodeE;\labeld]% + \ifx\zb\empty \morphism(\xpos,\ypos)/<-/<0,\deltaY>[\nodeB`0;]\fi + \advance\xpos\deltax + \morphism(\xpos,\ypos)|\xe|/{##5}/<0,-\deltay>[\nodeC`\nodeF;\labele]% + \ifx\zc\empty \morphism(\xpos,\ypos)/<-/<0,\deltaY>[\nodeC`0;]\fi + \ifx\ze\empty \morphism(\xpos,\ypos)<\deltaX,0>[\nodeC`0;]\fi + \nextt/##8/}% + \def\nextt/##1`##2`##3`##4`##5/{% + \xpos#1\ypos#2\relax% + \ifx\zh\empty \morphism(\xpos,\ypos)/<-/<-\deltaX,0>[\nodeG`0;]\fi + \ifx\zj\empty \morphism(\xpos,\ypos)<0,-\deltaY>[\nodeG`0;]\fi + \morphism(\xpos,\ypos)|\xk|/{##4}/<\deltax,0>[\nodeG`\nodeH;\labelk]% + \advance\xpos\deltax + \morphism(\xpos,\ypos)|\xl|/{##5}/<\deltax,0>[\nodeH`\nodeI;\labell]% + \ifx\zk\empty \morphism(\xpos,\ypos)<0,-\deltaY>[\nodeH`0;]\fi + \advance\xpos\deltax + \ifx\zi\empty \morphism(\xpos,\ypos)<\deltaX,0>[\nodeI`0;]\fi + \ifx\zl\empty \morphism(\xpos,\ypos)<0,-\deltaY>[\nodeI`0;]\fi + \xpos#1 \advance\ypos\deltay + \morphism(\xpos,\ypos)|\xh|/{##1}/<0,-\deltay>[\nodeD`\nodeG;\labelh]% + \advance \xpos\deltax + \morphism(\xpos,\ypos)|\xi|/{##2}/<0,-\deltay>[\nodeE`\nodeH;\labeli]% + \advance \xpos\deltax + \morphism(\xpos,\ypos)|\xj|/{##3}/<0,-\deltay>[\nodeF`\nodeI;\labelj]}% + \next/#4/\ignorespaces}% +\def\iiixiii{\ifnextchar({\iiixiiip}{\iiixiiip(0,0)}}% +\def\iiixiiip(#1){\ifnextchar|{\iiixiiipp(#1)}% + {\iiixiiipp(#1)|aalmrmmlmrbb|}}% +\def\iiixiiipp(#1)|#2|{\ifnextchar/{\iiixiiippp(#1)|#2|}% + {\iiixiiippp(#1)|#2|/>`>`>`>`>`>`>`>`>`>`>`>/}}% +\def\iiixiiippp(#1)|#2|/#3/{% + \ifnextchar<{\iiixiiipppp(#1)|#2|/#3/}% + {\iiixiiipppp(#1)|#2|/#3/<\default,\default>}}% +\def\iiixiiipppp(#1)|#2|/#3/<#4>{\ifnextchar[{\iiixiiippppp(#1)|#2|/#3/% + <#4>0<0,0>}{\iiixiiippppp(#1)|#2|/#3/<#4>}}% +\def\iiixiiippppp(#1)|#2|/#3/<#4>#5{\ifnextchar<% + {\iiixiiipppppp(#1)|#2|/#3/<#4>{#5}}% + {\iiixiiipppppp(#1)|#2|/#3/<#4>{#5}<400,400>}}% +\def\iiixiipppppp(#1,#2)|#3|/#4/<#5>#6<#7>[#8;#9]{% + \xpos#1\ypos#2\relax% + \def\next|##1##2##3##4##5##6##7|{\def\xa{##1}\def\xb{##2}% + \def\xc{##3}\def\xd{##4}\def\xe{##5}\def\xf{##6}\def\xg{##7}}% + \next|#3|% + \def\next<##1,##2>{\deltax##1\deltay##2}% + \next<#5>% + \deltaX#7 + \topw#6 + \def\next{% + \ifodd\topw \def\za{}\else\def\za{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\zb{}\else\def\zb{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\zc{}\else\def\zc{\relax}\fi \divide\topw by 2 + \ifodd\topw \def\zd{}\else\def\zd{\relax}\fi}% + \next% + \def\next[##1`##2`##3`##4`##5`##6]{% + \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}% + \def\noded{##4}\def\nodee{##5}\def\nodef{##6}}% + \next[#8]% + \def\next[##1`##2`##3`##4`##5`##6`##7]{% + \def\labela{##1}\def\labelb{##2}\def\labelc{##3}% + \def\labeld{##4}\def\labele{##5}\def\labelf{##6}\def\labelg{##7}}% + \next[#9]% + \def\next/##1`##2`##3`##4`##5`##6`##7/{% + {\ifx\zc\empty\advance\xpos -\deltaX +\relax\morphism(\xpos,\ypos)<\deltaX,0>[0`\noded;]\fi}% + \morphism(\xpos,\ypos)|\xf|/##6/<\deltax,0>[\noded`\nodee;\labelf]% + \advance\xpos by \deltax% + \morphism(\xpos,\ypos)|\xg|/##7/<\deltax,0>[\nodee`\nodef;\labelg]% + {\ifx\zd\empty \advance\xpos by \deltax +\relax \morphism(\xpos,\ypos)<\deltaX,0>[\nodef`0;]\fi}% + \advance\xpos by -\deltax \advance\ypos by \deltay + {\ifx\za\empty\advance \xpos by -\deltaX +\relax\morphism(\xpos,\ypos)<\deltaX,0>[0`\nodea;]\fi}% + \morphism(\xpos,\ypos)|\xa|/##1/<\deltax,0>[\nodea`\nodeb;\labela]% + \morphism(\xpos,\ypos)|\xc|/##3/<0,-\deltay>[\nodea`\noded;\labelc]% + \advance\xpos by \deltax% + \morphism(\xpos,\ypos)|\xb|/##2/<\deltax,0>[\nodeb`\nodec;\labelb]% + \morphism(\xpos,\ypos)|\xd|/##4/<0,-\deltay>[\nodeb`\nodee;\labeld]% + \advance\xpos by \deltax% + \morphism(\xpos,\ypos)|\xe|/##5/<0,-\deltay>[\nodec`\nodef;\labele]% + \ifx\zb\empty\relax \morphism(\xpos,\ypos)<\deltaX,0>[\nodec`0;]\fi}% + \next/#4/\ignorespaces}% +\def\iiixii{\ifnextchar({\iiixiip}{\iiixiip(0,0)}}% +\def\iiixiip(#1){\ifnextchar|{\iiixiipp(#1)}% + {\iiixiipp(#1)|aalmrbb|}}% +\def\iiixiipp(#1)|#2|{\ifnextchar/{\iiixiippp(#1)|#2|}% + {\iiixiippp(#1)|#2|/>`>`>`>`>`>`>/}}% +\def\iiixiippp(#1)|#2|/#3/{% + \ifnextchar<{\iiixiipppp(#1)|#2|/#3/}% + {\iiixiipppp(#1)|#2|/#3/<\default,\default>}}% +\def\iiixiipppp(#1)|#2|/#3/<#4>{\ifnextchar[{\iiixiippppp(#1)|#2|/#3/% + <#4>{0}<0>}{\iiixiippppp(#1)|#2|/#3/<#4>}}% +\def\iiixiippppp(#1)|#2|/#3/<#4>#5{\ifnextchar<% + {\iiixiipppppp(#1)|#2|/#3/<#4>{#5}}% + {\iiixiipppppp(#1)|#2|/#3/<#4>{#5}<400>}}% +\def\node#1(#2,#3)[#4]{% +\expandafter\gdef\csname x@#1\endcsname{#2}% +\expandafter\gdef\csname y@#1\endcsname{#3}% +\expandafter\gdef\csname ob@#1\endcsname{#4}% +\ignorespaces}% +\newcount\xfinish% +\newcount\yfinish% +\def\arrow{\ifnextchar|{\arrowp}{\arrowp|a|}}% +\def\arrowp|#1|{\ifnextchar/{\arrowpp|#1|}{\arrowpp|#1|/>/}}% +\def\arrowpp|#1|/#2/[#3`#4;#5]{% +\xfinish=\csname x@#4\endcsname% +\yfinish=\csname y@#4\endcsname% +\advance\xfinish by -\csname x@#3\endcsname% +\advance\yfinish by -\csname y@#3\endcsname% +\morphism(\csname x@#3\endcsname,\csname y@#3\endcsname)|#1|/{#2}/% +<\xfinish,\yfinish>[\csname ob@#3\endcsname`\csname ob@#4\endcsname;#5]% +}% +\def\Loop(#1,#2)#3(#4,#5){\POS(#1,#2)*+!!<0ex,\axis>{#3}\ar@(#4,#5)}% +\def\iloop#1(#2,#3){\xy\Loop(0,0)#1(#2,#3)\endxy}% +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xycmactex.tex b/macros/generic/diagrams/xypic/texinputs/xycmactex.tex new file mode 100644 index 0000000000..78e5fe6f8a --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xycmactex.tex @@ -0,0 +1,28 @@ +%% xycmactex.tex from $Id: xycmactex.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``CMacTeX'' driver interface option. +%% Copyright (c) 1995-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{cmactex}{CMacTeX driver}{\stripRCS$Revision: 3.7 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xyrequire{dvips} +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xycmtip.tex b/macros/generic/diagrams/xypic/texinputs/xycmtip.tex new file mode 100644 index 0000000000..ac0a223d3c --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xycmtip.tex @@ -0,0 +1,29 @@ +%% xycmtip.tex from $Id: xycmtip.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Computer Modern tips'' extension. +%% Copyright (c) 1992-1996 Kristoffer H. Rose +%% +%% This file is part of the Xy-pic package for graphs and diagrams in TeX. +%% Copyright (c) 1991-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{cmtip}{Computer Modern tip extension}{\stripRCS$Revision: 3.7 $}% + {Kristoffer H.~Rose}{krisrose@tug.org}% + {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)} +\xyrequire{tips}\xycatcodes +\xydef@\UseComputerModernTips{\SelectTips{cm}{10}\UseTips} +\xydef@\NoComputerModernTips{\NoTips} +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xycolor.tex b/macros/generic/diagrams/xypic/texinputs/xycolor.tex new file mode 100644 index 0000000000..d4a6574218 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xycolor.tex @@ -0,0 +1,112 @@ +%% xycolor.tex from $Id: xycolor.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Colour extension'' option. +%% Copyright (c) 1993-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{color}{Colour extension}{\stripRCS$Revision: 3.11 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xydef@\xycolorwarning@@{\xycolormessage@ + \gdef\xycolorwarning@{\xycolormessage@ + \xywarning@{...no further colour warnings will be given.}% + \global\let\xycolorwarning@=\relax }} +\xylet@\xycolorwarning@=\xycolorwarning@@ +\xydef@\xycolormessage@{% + \xywarning@{Current driver does not support colour.}}% +\xydef@\xyNoColor@#1{} +\xylet@\xycolor@@=\xyNoColor@ +\xydef@\xyNoColor@@#1#2{\xycolorwarning@} +\xydef@\xycolor@{\xycolor@@} +\xylet@\xylocalColor@=\xyNoColor@@ +\xydef@\UnloadColor@{% + \let\xylocalColor@=\xyNoColor@@ + \let\xycolor@@=\xyNoColor@ + \let\xycolorwarning@=\xycolorwarning@@ } +\xylet@\UnloadColor@@=\UnloadColor@ +\xyaddunsupport{color}{\UnloadColor@@\relax} +\ifx\current@color\undefined \xydef@\xybasecolor@{}% +\else \def\xybasecolor@{\current@color}\fi +\xydef@\xystackcolor@{\bgroup \DN@##1##2{\egroup}% + \ifInvisible@\else\ifHidden@\else\DNii@{\no@@}\ifx\nextii@\Connect@@ + \else\DN@{\xystackcolor@i}\fi\fi\fi \next@ } +\xydef@\xystackcolor@i#1#2{\checkXyStyle@ + \DN@{#2}\ifx\next@\empty + \def\tmp@##1{\DN@{\xycolor@push{#1}##1\xycolor@pop}}% + \else\def\tmp@##1{\DN@{\xycolor@push{#2 #1}##1\xycolor@pop}}\fi + \toks@={\egroup \let\xy@style@=\relax \def\Drop@@}% + \expandafter\tmp@\expandafter{\Drop@@}% + \expandafter\addtotoks@\expandafter{\expandafter{\next@}\def\Connect@@}% + \expandafter\tmp@\expandafter{\Connect@@}% + \expandafter\addtotoks@\expandafter{\expandafter{\next@}}% + \the\toks@ }% +\xydef@\xycolor@push@@#1{\special{color push #1}} +\xydef@\xycolor@pop{\special{color pop}} +\xylet@\xycolor@push=\xycolor@push@@ +\xydef@\newxycolor#1#2{\newxyColor{#1}{}{}{#2}{}} +\xydef@\newxyColor#1#2#3#4{\newxycolor@{#1}{#2}{#3}{#4}{}} +\xydef@\newxycolor@#1#2#3#4#5{% + \expandafter\let\expandafter\next@\csname shape [#1]\endcsname + \ifx\next@\relax + \DN@{#4}\ifx\next@\empty + \DN@{#2}\ifx\next@\empty + \DN@{\newxystyle{#1}{\xylocalColor@{}{#3}\xycolor@{#3}}}% + \else + \DN@{\newxystyle{#1}{\xylocalColor@{#2}{#3}\xycolor@{#2 #3}}}% + \fi + \else\DN@{#2#3}\ifx\next@\empty + \DN@{\newxystyle{#1}{\xylocalColor@{#4}{}\xycolor@{#4}}}% + \else + \DN@{\newxystyle{#1}{\xylocalColor@{#2}{#3}\xycolor@{#4}}}% + \fi \fi + \else \def\tmp@{\relax}\DNii@{#5}% + \ifx\nextii@\tmp@ + \DN@{#4}\ifx\next@\empty + \DN@{#2}\ifx\next@\empty + \DN@{\newxystyle{#1}{\xylocalColor@{}{#3}\xycolor@{#3}}}% + \else + \DN@{\newxystyle{#1}{\xylocalColor@{#2}{#3}\xycolor@{#2 #3}}}% + \fi + \else + \DN@{#2#3}\ifx\next@\empty + \DN@{\newxystyle{#1}{\xylocalColor@{#4}{}\xycolor@{#4}}}% + \else + \DN@{\newxystyle{#1}{\xylocalColor@{#2}{#3}\xycolor@{#4}}}% + \fi \fi + \else\DN@{}\fi\fi \next@\relax} +\xydef@\xystandardcolors@{% + \newxycolor@{black}{0. 0. 0.}{rgb}{}\relax + \newxycolor@{white}{1. 1. 1.}{rgb}{}\relax + \newxycolor@{gray}{.5}{gray}{}\relax + \newxycolor@{grey}{.5}{gray}{}\relax + \newxycolor@{red}{1. 0. 0.}{rgb}{}\relax + \newxycolor@{green}{0. 1. 0.}{rgb}{}\relax + \newxycolor@{blue}{0. 0. 1.}{rgb}{}\relax + \newxycolor@{cyan}{0. 1. 1.}{rgb}{}\relax + \newxycolor@{magenta}{1. 0. 1.}{rgb}{}\relax + \newxycolor@{yellow}{1. 1. 0.}{rgb}{}\relax + \xyuncatcodes } +\xydef@\UseCrayolaColors{\xyrequire{crayon}\xyuncatcodes}% +\xydef@\xyBEcolorcheck@{\ifx\xycolor@@\xyNoColor@\else + \xywarning@{PostScript colour support should be OK.}\fi }% +\xywithoption{ps}{% + \xyinputorelse@{xyps-c}{\xyerror@{Could not load xyps-c}{}}}% + \xycatcodes +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xycrayon.tex b/macros/generic/diagrams/xypic/texinputs/xycrayon.tex new file mode 100644 index 0000000000..8eae152ab8 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xycrayon.tex @@ -0,0 +1,32 @@ +%% xycrayon.tex from $Id: xycrayon.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Crayola colours'' PostScript backend support. +%% Copyright (c) 1995-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{crayon}{Crayola Colours}{\stripRCS$Revision: 3.7 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xydef@\installCrayolaColors@{% + \xyinputorelse@{xyps-col}{\xyerror@{Could not load Crayola colours}{}}% + \let\installCrayolaColors@=\relax + \xyuncatcodes } +\xyendinput +# diff --git a/macros/generic/diagrams/xypic/texinputs/xycurve.tex b/macros/generic/diagrams/xypic/texinputs/xycurve.tex new file mode 100644 index 0000000000..f5692fe257 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xycurve.tex @@ -0,0 +1,2702 @@ +%% xycurve.tex from $Id: xycurve.doc,v 3.12 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Curves and Splines'' extension. +%% Copyright (c) 1993-1997 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{curve}{Curve and Spline extension}{\stripRCS$Revision: 3.12 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\message{curve,} +\xynew@{count}\crv@cnt@ +\xydef@\xynumctrlpts@{\the\crv@cnt@} +\xynew@{toks}\crvpts@ +\xydef@\setcurve@{% + \edef\xysplineparams@{% + \expandafter\noexpand\csname params@\endcsname}% + \edef\xysplineedges@{% + \expandafter\noexpand\csname edges@\endcsname}% + \edef\xycrvcnt@{% + \expandafter\noexpand\csname crvcnt@\endcsname}% + \expandafter\edef\xycrvcnt@{\number\crv@cnt@}% + \ifcase\crv@cnt@ + \expandafter\xycvxhull@\or + \expandafter\xyquadbezier@\or + \expandafter\xycubicbezier@\or + \expandafter\xybspline@iii\or + \expandafter\xybspline@iv\else + \expandafter\xybspline@ + \fi} +\xydef@\curve{\connect\crv} +\xydef@\crv#1#{\hbox \bgroup \crvresetbreaks@ \initshape@ + \def\pure@crv{\crv@saveStyles@}\crv@{#1}} +\xydef@\crv@#1#2{% + \DN@{#1}\ifx\empty\next@ + \DN@{\def\afterCURVEaction@{}\parsecurve@\xycurve@@}% + \else\DN@{\parseCURVE@#1\parsecurve@\curveSTYLE@}\fi + \next@ #2\@endcurve\endcrv@ } +\xydef@\curveSTYLE@{\xycurve@@}% +\xydef@\afterCURVEaction@{}% +\xydef@\@endcurve{}% +\xydef@\endcrv@@{\endcrv@\POS}% +\xydef@\pure@crv{\relax} +\xywarnifdefined\crv@normaltemplate +\xywarnifdefined\crv@othertemplate +\xywarnifdefined\crv@specialtemplate@@ +{\xyuncatcodes \catcode`\@=11 \catcode`\#=6 + \gdef\crv@normaltemplate#1{{}{~**#1\xy@@crvaddstack@}} + \gdef\crv@othertemplate#1{{}{~*=<2\jot>{}~**#1\xy@@crvaddstack@}} + \gdef\crv@specialtemplate@@#1{{}{~**\dir{#1}\xy@@crvaddstack@}} +} +\xydef@\crvs#1#{\hbox \bgroup \def\pure@crv{\relax}\crvs@{#1}}% +\xydef@\crvi#1#{\hbox \bgroup \def\pure@crv{\relax}\invisbreaks@ \crvs@{#1}}% +\xydef@\crvs@#1{\DN@{\initshape@ \@crv@{#1}}% + \def\crv@defaultshape{-}% + \ifx\bstartPLACE@\relax \else + \ifx\bstartPLACE@\empty \Invisible@true \else +\splinetrace@{bstartPLACE@=\bstartPLACE@, bendPLACE@=\bendPLACE@}% + \DN@{\let\xy@@crvaddstack@=\xy@@samecurve@ + \let\saveshape@=\savesame@ + \let\savectrlptsnum@=\relax + \let\startxycurve@=\recovercurve@ + \crv@cnt@=\xycrvptsnum@\relax \@crv@{#1}}% + \fi \fi \next@ } +\xydef@\xy@@samecurve@{\xyFN@\checkendcurve@} +\xydef@\savesame@{\egroup } +\xydef@\recovercurve@{% + \crv@cnt@=\xycrvptsnum@ \splinereset@ \recovercv@end + \ifx\bendPLACE@\relax \def\bendPLACE@{1}\fi + \ifdim\zz@\R@c \ifdim\zz@\L@c \ifdim\zz@\D@c \ifdim\zz@\U@c + \Edge@c={\zeroEdge}\fi\fi\fi\fi + \edef\cv@end{\cfromthec@}\edef\cv@start{\cfromthep@}} +\xydef@\recovercv@end{\count@=\ptsnum@\relax\advance\count@\@ne + \edef\tmp@{\the\count@}\csname cv@\tmp@\endcsname}% +\xydef@\crvSTYLE@@{} +\expandafter\xydef@\expandafter\crv@defaultshape\expandafter{\addDASH@{}} +\xydef@\crv@noobject{\Invisible@true} +\xydef@\@crv@#1#2{\DN@{#1#2}% + \ifx\next@\empty \edef\next@{\crv@defaultshape}% + \ifx\bstartPLACE@\empty \xdef\crvSTYLE@@{{\crv@defaultshape}}\fi + \else + \ifx\bstartPLACE@\empty \gdef\crvSTYLE@@{#1{#2}}\fi + \fi + \ifx\next@\empty \crv@noobject \DN@{\crv@{}{\xy@@crvaddstack@}}% + \else\def\tmp@{-}\ifx\next@\tmp@ \DN@{\crv@{}{\xy@@crvaddstack@}}% + \else\def\tmp@{=}\ifx\next@\tmp@ + \DN@{\expandafter\crv@\crv@normaltemplate{\dir{=}}}% + \else\def\tmp@{2-}\ifx\next@\tmp@ + \DN@{\expandafter\crv@\crv@normaltemplate{\dir{2.}}}% + \else\def\tmp@{3-}\ifx\next@\tmp@ + \DN@{\expandafter\crv@\crv@normaltemplate{\dir{3.}}}% + \else\def\tmp@{--}\ifx\next@\tmp@ + \DN@{\expandafter\crv@\crv@specialtemplate@{--}}% + \else\def\tmp@{==}\ifx\next@\tmp@ + \DN@{\expandafter\crv@\crv@normaltemplate{\dir2{--}}}% + \else\def\tmp@{2--}\ifx\next@\tmp@ + \DN@{\expandafter\crv@\crv@normaltemplate{\dir2{--}}}% + \else\def\tmp@{3--}\ifx\next@\tmp@ + \DN@{\expandafter\crv@\crv@normaltemplate{\dir3{--}}}% + \else\def\tmp@{.}\ifx\next@\tmp@ + \DN@{\expandafter\crv@\crv@specialtemplate@{.}}% + \else\def\tmp@{:}\ifx\next@\tmp@ + \DN@{\expandafter\crv@\crv@normaltemplate{\dir{:}}}% + \else\def\tmp@{2.}\ifx\next@\tmp@ + \DN@{\expandafter\crv@\crv@normaltemplate{\dir{:}}}% + \else\def\tmp@{..}\ifx\next@\tmp@ + \DN@{\expandafter\crv@\crv@specialtemplate@{.}}% + \else + \DN@{\expandafter\crv@\crv@othertemplate{\dir#1{#2}}}% + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@} +\xylet@\crv@specialtemplate@=\crv@specialtemplate@@ +\xydef@\crv@special#1{} +\xydef@\parseCURVE@{\def\curveSTYLE@{\xycurve@@}\def\afterCURVEaction@{}% + \xyFN@\parseCURVE@@} +\xydef@\parseCURVE@@{% + \ifx\space@\next\expandafter\DN@\space{\xyFN@\parseCURVE@@}% + \else\ifx ~\next \DN@ ~{\xy@~{}\xyFN@\setcurveSTYLE@@}% + \else\ifx\parsecurve@\next\DN@{}% + \else\ifcat\active\noexpand\next\DN@{\xyactive@Warning}% + \else\ifcat a\noexpand\next\DN@##1{\xytilde@Warning\setcurveSTYLE@{##1}% + \xyFN@\parseCURVE@@}% + \else\DN@{}\fi\fi\fi\fi\fi \next@ }% +\xydef@\xyactive@Warning{\xywarning@{expandable control sequences should + not be here, results are unpredictable in diagrams.}}% +\xydef@\xytilde@Warning{Please use ~ to set curve style.}% +\xydef@\setcurveSTYLE@#1{\xyFN@\setcurveSTYLE@@#1} +\xydef@\setcurveSTYLE@@{% + \ifx\next p\def\curveSTYLE@{\xyc@trlpts@@}% + \DN@ p{\xyFN@\setafterCURVEaction@}% + \else\ifx\next P\def\curveSTYLE@{\xyc@trlpts@}% + \DN@ P{\xyFN@\setafterCURVEaction@}% + \else\ifx\next l\def\curveSTYLE@{\xyc@vxhull@@}% + \DN@ l{\xyFN@\setafterCURVEaction@}% + \else\ifx\next L\def\curveSTYLE@{\xyc@vxhull@}% + \DN@ L{\xyFN@\setafterCURVEaction@}% + \else\ifx\next c\def\curveSTYLE@{\xycurve@@}% + \DN@ c{\xyFN@\setafterCURVEaction@}% + \else\ifx\next C\def\curveSTYLE@{\xycurve@@}% + \DN@ C{\xyFN@\setafterCURVEaction@}% + \else \DN@##1{\xywarning@{unknown curve style ##1}\xyFN@\parseCURVE@@}% + \fi\fi\fi\fi\fi\fi \next@ } +\xydef@\setafterCURVEaction@{% + \ifx\next~\DN@~{\xyFN@\setcurveSTYLE@@}% + \else\ifcat a\noexpand\next\DN@{\setafterCURVEaction@@}% + \else\DN@{\xyFN@\parseCURVE@@}% + \fi\fi \next@} +\xydef@\setafterCURVEaction@@{% + \ifx\next c\DN@ c{% + \def\afterCURVEaction@{\noexpand\endcurve\noexpand\xy@curve@}% + \xyFN@\parseCURVE@@ }% + \else\ifx\next C\DN@ C{% + \def\afterCURVEaction@{\noexpand\endcurve\noexpand\xy@curve@@}% + \xyFN@\parseCURVE@@ }% + \else \DN@##1{\xywarning@{unknown after-curve action ##1}% + \xyFN@\parseCURVE@@ }% + \fi\fi \next@ } +\xydef@\parsecurve@{\xyFN@\parsecurve@@} +\xydef@\parsecurve@@{% + \ifx\space@\next\expandafter\DN@\space{\xyFN@\parsecurve@@}% + \else\ifx\next\@endcurve\DN@\@endcurve{\checkafterCURVE@}% + \else\ifcat\active\noexpand\next\DN@{\relax}% + \else\DN@{\xycurve@@}\fi\fi\fi\next@}% +\xydef@\xycurve@{\begingroup\afterCURVE{\setcurve@\endgroup}\crvobjects@ + \startxycurve@\xycrvmods@} +\xydef@\xycurve@@{\afterCURVE{\setcurve@}\crvobjects@\startxycurve@ + \xycrvmods@} +\xydef@\xy@curve@{\xy@curve@@@{\splinedefaulttol@\crvobjects@}} +\xydef@\xy@curve@@{\xy@curve@@@{\resetcrvobjects@}} +\xydef@\xy@curve@@@#1{\ifx\cv@start\relax + \DN@{\xywarning@{There is no curve to plot}}. + \else\DN@{\begingroup\afterCURVE{\setcurve@\endgroup}#1\cv@end}% + \fi \next@ } +\xydef@\crvobjects@{\def\xycrvdrop@{}\def\xycrvconn@{}} +\xydef@\resetcrvobjects@{\crvobjects@} +\xylet@\savecurve=\xycurve@@ +\xylet@\samecurve=\xy@curve@ +\xydef@\xycrvmods@{\xyFN@\xy@crvmods@}% +\xydef@\xy@crvmods@{% + \ifx\space@\next\expandafter\DN@\space{\xyFN@\xy@crvmods@}% + \else\ifx\next ~\DN@ ~{\xyFN@\xy@crvmods@@}% + \else\DN@{\xy@crvmods@@@@}\fi\fi \next@}% +\xydef@\xy@crvmods@@@@{\xyFN@\checkendcurve@}% +\xydef@\xy@crvmods@@{% + \ifx\space@\next\expandafter\DN@\space{\xyFN@\xy@crvmods@@}% + \else\ifx\next *\DN@ *{\xyFN@\xy@@crvmods@}% + \else\addAT@\ifx\next\addAT@\DN@{\xyFN@\xy@@crvaddstack}% + \else\DN@{\xywarning@{badly-formed curve option}\xyFN@\xy@crvmods@}% + \fi\fi\fi \next@}% +\xydef@\xy@@crvmods@{% + \ifx\space@\next\expandafter\DN@\space{\xyFN@\xy@@crvmods@}% + \else\ifx\next *\DN@ *{\xyFN@\xy@@crvmods@@}% + \else\DN@{\xy@crv@mods@@}\fi\fi \next@}% +\xydef@\xy@crv@mods@@#1#{\DN@##1{\xy@crvmods@@@{#1}{##1}}\next@}% +\xydef@\xy@crvmods@@@#1#2{% + \DN@{#1#2}\ifx\next@\empty \def\xycrvdrop@{ #1{\zerodot}}% + \else \def\xycrvdrop@{ #1{#2}}\fi + \xyFN@\xy@crvmods@ }% +\xydef@\xy@@crvmods@@#1#{\DN@##1{\xy@@crvmods@@@{#1}{##1}}\next@}% +\xydef@\xy@@crvmods@@@#1#2{\def\xycrvconn@{ #1{#2}}\xyFN@\xy@crvmods@ }% +\xydef@\checkendcurve@{% + \ifx\space@\next\expandafter\DN@\space{\xyFN@\checkendcurve@}% + \else\ifx\next\endcurve\DN@\endcurve{\clearsearchflag@\endxycurve@}% + \else\ifx\next\@endcurve\DN@\@endcurve{\checkafterCURVE@}% + \else\ifx\next\xy@@crvaddstack@\DN@{}% + \else\ifx\next\endxy\DN@{\clearsearchflag@\sloppyendcrv@}% + \else\testAND@\iffalse \DN@##1{\clearsearchflag@\searchnextpt@}% + \else\ifx ~\next\DN@ ~{\xyFN@\checkcrvtilde@}% + \else\ifx\next\relax\DN@\relax{\clearsearchflag@\searchnextpt@}% + \else\ifx\next\\\DN@\\{\clearsearchflag@\searchnextpt@}% + \else\ifx\searchflag@\relax + \DN@{\setsearchflag@\searchnextpt@}% + \else\DN@##1{\flagwarn@{##1}}\fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi \next@ } +\xydef@\searchnextpt@{\afterPOS{\xy@@\addtocrv@ \xyFN@\checkendcurve@}} +\xydef@\checkafterCURVE@{% + \edef\tmp@{\noexpand\xyFN@\noexpand\checkendcurve@ + \afterCURVEaction@\noexpand\endcurve}\tmp@ } +\xylet@\searchflag@=\relax +\xydef@\setsearchflag@{\let\searchflag@=@} +\xydef@\clearsearchflag@{\let\searchflag@=\relax} +\xydef@\flagwarn@#1{% + \ifx\next\@endcurve\DN@{\xyFN@\checkendcurve@\endcurve}% + \else\setsearchflag@\DN@{\xyFN@\checkendcurve@}% + \xywarning@{skipping invalid token \string#1\space in curve}% + \fi \next@ } +\xydef@\sloppyendcrv@{% +\xywarning@{Please use \string\endcurve\space to end the curve.}\endxycurve@} +\xydef@\endcrv@{\saveshape@ + \Edge@c={\splineEdge}\Invisible@false\Hidden@false + \edef\Drop@@{\noexpand\ifInvisible@ \setbox\z@=\copy\voidb@x + \noexpand\else + \noexpand\wdz@=\z@ + \noexpand\ht\z@=\z@ \noexpand\dp\z@=\z@ + \noexpand\splineDrop@ + \noexpand\fi }% + \edef\Connect@@{% + \noexpand\setbox\z@=\noexpand\box\lastobjectbox@ + \noexpand\wdz@=\z@ + \noexpand\ht\z@=\z@ \noexpand\dp\z@=\z@ + \expandafter\noexpand\pure@crv + \noexpand\ifInvisible@ \noexpand\crv@saveStyles@ \noexpand\else + \noexpand\crv@getStyles@\noexpand\styledboxz@ \noexpand\fi + \noexpand\ifHidden@\noexpand\else + \noexpand\ifx\noexpand\COORD@\noexpand\xymatrixCOORD@ \noexpand\else + \noexpand\X@min=\the\X@min \noexpand\X@max=\the\X@max + \noexpand\Y@min=\the\Y@min \noexpand\Y@max=\the\Y@max + \noexpand\fi \noexpand\fi + \savecrvparams@ \noexpand\crvconnect@ + }% + \wdz@=\z@ + \ht\z@=\z@ \dp\z@=\z@ } +\xydef@\crvXY@pre@{} +\xydef@\crvXY@post@{} +\xydef@\crv@saveStyles@{\def\xy@style@{}% + \expandafter\def\expandafter\crvXY@pre@\expandafter{\preXY@style@}% + \expandafter\def\expandafter\crvXY@post@\expandafter{\postXY@style@}} +\xydef@\crv@getStyles@{\def\xy@style@{}% + \gdef\preXY@style@{\crvXY@pre@}\gdef\postXY@style@{\crvXY@post@}} +\xydef@\initshape@{\savescope@ + \ifdim\X@c>\X@p \X@min=\X@p \X@max=\X@c \else \X@max=\X@p \X@min=\X@c \fi + \ifdim\Y@c>\Y@p \Y@min=\Y@p \Y@max=\Y@c \else \Y@max=\Y@p \Y@min=\Y@c \fi } +\xydef@\saveshape@{\savectrlptsnum@ + \R@c=\X@max \advance\R@c-\X@c \L@c=\X@c \advance\L@c-\X@min + \U@c=\Y@max \advance\U@c-\Y@c \D@c=\Y@c \advance\D@c-\Y@min + \edef\tmp@{\egroup \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c + \noexpand\ifdim\noexpand\X@min>\the\X@min\noexpand\X@min=\the\X@min\noexpand\fi + \noexpand\ifdim\noexpand\Y@min>\the\Y@min\noexpand\Y@min=\the\Y@min\noexpand\fi + \noexpand\ifdim\noexpand\X@max<\the\X@max\noexpand\X@max=\the\X@max\noexpand\fi + \noexpand\ifdim\noexpand\Y@max<\the\Y@max\noexpand\Y@max=\the\Y@max\noexpand\fi + \savecrvparams@ \def\noexpand\pure@crv{\expandafter\noexpand\pure@crv}}% + \tmp@ } +\xydef@\savecrvparams@{\crvpts@={\the\crvpts@}% + \noexpand\def\noexpand\crvconnect@{\expandafter\noexpand\crvconnect@}}% +\xydef@\splineEdge{\rectangleEdge} +\xydef@\xy@@crvaddstack{% + \ifx\next ~\xywarning@{there should be a poslist here, \string~@ ignored}% + \DN@{\xy@crvmods@}% + \else\DN@{\xy@@crvaddstack@}\fi \next@} +\xydef@\xy@@crvaddstack@{\smapxy@@\addtocrv@ \xyFN@\checkendcurve@} +\xydef@\checkcrvtilde@{% + \addAT@\ifx\next\addAT@\DN@{\xy@@crvaddstack@}% + \else\xywarning@{invalid token after ~, ignored}% + \DN@##1{\xyFN@\checkendcurve@}% + \fi \next@ } +\xydef@\crvconnect@@{% + \def\Creset@@{\crvreset@}% + \def\Cshavep@@{\crvshavep@}% + \def\Cshavec@@{\crvshavec@}% + \def\Cslidep@@{\crvslidep@}% + \def\Cslidec@@{\crvslidec@}% + \def\Calong@@{\crvalong@}% + \def\Cintercept@@{\crvintercept@}% + \def\Cbreak@@{\crvbreak@}% + \def\Clast@@{\crvlast@}% +} +\xydef@\straitconnect@{\crvconnect@@ + \let\crvreset@=\straitreset@ + \let\crvshavep@=\straitshavep@ + \let\crvshavec@=\straitshavec@ + \let\crvslidep@=\straitslidep@ + \let\crvslidec@=\straitslidec@ + \let\crvalong@=\straitalong@ + \let\crvintercept@=\straitintercept@ + \let\crvbreak@=\straitbreak@ + \let\crvlast@=\straitlast@ +} +\xydef@\straitreset@{\the\crvpts@ + \edef\xycrvptsnum@{\csname ptsnum@\endcsname}% + \def\segmentnum@{0}} +\xydef@\straitslidep@{\setupDirection@ii \noCslidep@@ } +\xydef@\straitslidec@{\setupDirection@ii \noCslidec@@ } +\xydef@\straitshavep@{% + \expandafter\ifnum\xycrvptsnum@>\z@ + \def\segmentnum@{0}% + \csname cv@1\endcsname + \resetDirection@ \setupDirection@ii + \fi \noCshavep@@ } +\xydef@\straitshavec@{% + \expandafter\ifnum\xycrvptsnum@>\z@ + \expandafter\count@@\xycrvptsnum@\relax + \bgroup \csname cv@\number\count@@\endcsname + \edef\tmp@{\egroup \X@p=\the\X@c \Y@p=\the\Y@c}\tmp@ + \edef\segmentnum@{\xycrvptsnum@}% + \resetDirection@ \setupDirection@ii + \fi \noCshavec@@ } +\xydef@\straitalong@#1{% + \ifdim#1\p@<\z@ + \xywarning@{parameter value #1 is negative, using 0}% + \cfromp@ \def\PLACEf@{{0}}% + \else + \dimen@=#1\p@ \count@=\dimen@ \divide\count@\p@ + \expandafter\count@@\xycrvptsnum@\relax \advance\count@@\@ne + \advance\dimen@\segmentnum@\p@ + \advance\count@\segmentnum@\relax + \def\segmentnum@{0}% + \ifnum\count@@<\count@ + \xywarning@{parameter value #1 too large, using \the\count@@}% + \count@=\count@@ \advance\count@\m@ne \edef\PLACEf@{{1}}% + \else + \advance\dimen@-\count@\p@ + \ifdim\zz@\dimen@\ifnum\count@>\z@ + \advance\count@\m@ne \advance\dimen@\p@ \fi\fi + \edef\PLACEf@{{\expandafter\removePT@\the\dimen@}}% + \fi + \ifnum\count@=\z@\else \bgroup + \csname cv@\number\count@\endcsname + \edef\tmp@{\egroup \X@p=\the\X@c \Y@p=\the\Y@c}\tmp@ + \fi + \advance\count@\@ne + \ifnum\count@<\count@@ +\splinetrace@{find place \the\dimen@\space along straight segment + \the\count@}% + \csname cv@\number\count@\endcsname + \fi + \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p + \fi \expandafter\noCalong@@\PLACEf@ \czeroEdge@ } +\xydef@\straitintercept@{\noCintercept@@} +\xydef@\straitbreak@{\straightCbreak@@} +\xydef@\straitlast@{\straightClast@@} +\xydef@\splineconnect@{% + \let\crvreset@=\splinereset@ + \let\crvshavep@=\splineshavep@ + \let\crvshavec@=\splineshavec@ + \let\crvslidep@=\splineslidep@ + \let\crvslidec@=\splineslidec@ + \let\crvalong@=\splinealong@ + \let\crvintercept@=\splineintercept@ + \let\crvbreak@=\splinebreak@ + \let\crvlast@=\splinelast@ +} +\xydef@\splinereset@{\the\crvpts@ + \edef\xycrvptsnum@{\csname ptsnum@\endcsname}% + \edef\xysplineparams@{% + \expandafter\noexpand\csname params@\endcsname}% + \edef\xysplineedges@{% + \expandafter\noexpand\csname edges@\endcsname}% + \def\segmentnum@{1}\def\splinecorrect@p{0}\def\splinecorrect@c{0}% + \splinelength@=\z@ \def\splineplace@f{.5}% +} +\xydef@\splineshavep@{\begingroup + \edef\xysplineedges@{% + \expandafter\noexpand\csname edges@\endcsname}% + \expandafter\expandafter\expandafter\getsplineedges@safe\xysplineedges@ @@% + \edef\tmp@{\noexpand\removePT@\the\dimen5}% + \edef\tmp@{\endgroup + \noexpand\def\noexpand\splinecorrect@p{\tmp@}}\tmp@ + \setupDirection@ii } +\xydef@\splineshavec@{\begingroup + \edef\xysplineedges@{% + \expandafter\noexpand\csname edges@\endcsname}% + \expandafter\expandafter\expandafter\getsplineedges@safe\xysplineedges@ @@% + \dimen@=-\dimen7\relax \advance\dimen@\p@ +%% \getcrvsegsnum@ \advance\dimen@\count@\p@ + \edef\tmp@{\noexpand\removePT@\the\dimen@}% + \edef\tmp@{\endgroup + \noexpand\def\noexpand\splinecorrect@c{\tmp@}}\tmp@ + \setupDirection@ii } +\xydef@\splineslidep@#1{\enter@{\pfromthep@}% + \begingroup \splinealong@@{0}{#1}+\splineslidep@@@ + \setupDirection@ii \leave@ }% +\xydef@\splineslidep@@@{% + \d@X=\dimen5 \d@Y=\dimen7 \edef\tmp@{\postfind@}\tmp@ \dimen@=\splineval@ + \expandafter\count@\xycrvptsnum@\relax + \ifnum\count@>\tw@ \advance\count@\m@ne + \advance\dimen@\segmentnum@\p@ \advance\dimen@-\p@ + \fi + \edef\tmp@{\endgroup \endgroup + \noexpand\def\noexpand\xysplineval@{\the\splineval@}% + \noexpand\def\noexpand\splinecorrect@p{\expandafter\removePT@\the\dimen@}% +\splinetrace@{slide = \the\splinelength@}% + \X@c=\dimen@i \Y@c=\dimen3 + \d@X=\the\d@X \d@Y=\the\d@Y + \noexpand\def\noexpand\segmentnum@{\segmentnum@}}\tmp@ } +\xydef@\splineslidec@#1{\enter@{\pfromthep@}% + \begingroup + \expandafter\splinealong@@\PLACEf@{#1}+\splineslidec@@@ + \setupDirection@ii \leave@ } +\xydef@\splineslidec@@@{% + \d@X=\dimen5 \d@Y=\dimen7 \edef\tmp@{\postfind@}\tmp@ \dimen@=\splineval@ + \expandafter\count@\xycrvptsnum@\relax + \ifnum\count@>\tw@ \advance\count@\m@ne + \advance\dimen@\segmentnum@\p@ \advance\dimen@-\p@ + \dimen@=-\dimen@ \advance\dimen@\count@\p@ + \else \dimen@=-\dimen@ \advance\dimen@\p@ \fi +%% splinecorrect@c is probably wrong here!! + \edef\tmp@{\endgroup \endgroup + \noexpand\def\noexpand\xysplineval@{\the\splineval@}% + \noexpand\def\noexpand\splinecorrect@c{\expandafter\removePT@\the\dimen@}% +\splinetrace@{slide = \the\splinelength@; correct@c=\noexpand\splinecorrect@c}% + \X@c=\dimen@i \Y@c=\dimen3 + \d@X=\the\d@X \d@Y=\the\d@Y + \noexpand\def\noexpand\segmentnum@{\segmentnum@}}\tmp@ } +\xydef@\checkslidemore@#1{% + \dimen@ii=-#1\relax\ifdim\dimen@ii<\z@\multiply\dimen@ii\m@ne\fi + \dimen@=-\splinelength@ \advance\dimen@\dimen@ii\relax + \ifdim\dimen@<\z@\dimen@ii=-\dimen@\else\dimen@ii=\dimen@\fi + \ifdim\dimen@ii<.2\p@\DN@{\splineslidec@@ \leave@}% + \else \splinetrace@{not found yet, \the\dimen@ii\space still to go}% + \dimen@ii=#1\relax\ifdim\dimen@ii<\z@\multiply\dimen@\m@ne\fi + \DN@{\expandafter\splineslidemore@\expandafter{\the\dimen@}}\fi + \next@}% +\xydef@\splineslidemore@#1{% + \expandafter\count@\segmentnum@\relax + \ifdim#1<\z@\advance\count@\m@ne\dimen@=\p@ + \else\advance\count@\@ne\dimen@=\z@\fi + \ifnum\count@<\@ne + \expandafter\splinesegment@\expandafter{\segmentnum@}% + \DN@{\xywarning@{cannot slide beyond start of curve}% + \spline@find{\z@}{\z@}{}\splineslidec@@ \leave@ }% + \else \expandafter\count@@\xycrvptsnum@\relax\advance\count@@\m@ne + \expandafter\ifnum\count@@<\count@\relax + \expandafter\splinesegment@\expandafter{\segmentnum@}% + \DN@{\xywarning@{cannot slide beyond end of curve}% + \spline@find{\p@}{\z@}{}\splineslidec@@ \leave@ }% + \else + \edef\segmentnum@{\the\count@}% + \expandafter\splinesegment@\expandafter{\segmentnum@}% +\splinetrace@{sliding onto segment \segmentnum@}% + \expandafter\spline@find\expandafter{\the\dimen@}{#1}{}% + \DN@{\checkslidemore@{#1}}% + \fi\fi \next@ } +\xydef@\splineslidec@@{% + \dimen@=\splineval@ \advance\dimen@\segmentnum@\p@\advance\dimen@-\p@ + \edef\tmp@{\endgroup + \noexpand\def\noexpand\xysplineval@{\the\dimen@}% +\splinetrace@{slide = \the\splinelength@}% + \X@c=\the\dimen@i \Y@c=\the\dimen3 \d@X=\the\dimen5 \d@Y=\the\dimen7 \postfind@ + \noexpand\def\noexpand\segmentnum@{\segmentnum@}}\tmp@ + \setupDirection@ii} +\xydef@\splinealong@#1{\def\postfind@{}\splinealong@@{#1}\z@+% + \splineslidec@@ + \dimen@=\xysplineval@\relax + \count@=\xycrvptsnum@\relax \ifnum\count@>\@ne \advance\count@\m@ne\fi + \ifnum\count@>\@ne \dimen@nth\count@\dimen@ + \fi \edef\bthisPLACE@{\expandafter\removePT@\the\dimen@}% +\splinetrace@{bthisPLACE@=\bthisPLACE@}}% +\xydef@\splinealong@@#1#2#3{% + \edef\tmp@{#1}\relax \dimen@ii\tmp@\p@ +%% \getcrvsegsnum@ +%% \dimen@=-\count@\p@ + \dimen@=-\p@ + \expandafter\advance\expandafter\dimen@\splinecorrect@p\p@ + \expandafter\advance\expandafter\dimen@\splinecorrect@c\p@ + \edef\tmp@{#1}\relax \dimen@=-\tmp@\dimen@ \relax + \expandafter\advance\expandafter\dimen@\splinecorrect@p\p@ + \getcrvsegsnum@ \multiply \dimen@ by\count@\relax +\splinetrace@{actual:\the\dimen@; f:\the\dimen@ii; p:\splinecorrect@p, c:\splinecorrect@c}% + \count@=\dimen@ \divide\count@\p@ \DN@{\relax}% + \def\tmp@{\relax}\ifx\next@\tmp@ + \expandafter\ifnum\xycrvptsnum@<\count@ + \xywarning@{parameter value #1 too large}% + \DNii@{\relax}\DN@{\begingroup}% + \else + \edef\xysplineval@{\the\dimen@}% + \advance\dimen@-\count@\p@ + \ifdim\dimen@=\z@ +\splinetrace@{find knot point \the\count@}% + \ifnum\count@=\z@ \count@=\@ne \else \dimen@=\p@ \fi + \else \advance\count@\@ne +\splinetrace@{find point \the\dimen@\space on spline segment \the\count@}% + \fi + \edef\segmentnum@{\the\count@}% + \edef\next@{\begingroup\noexpand\splinesegment@{\the\count@}}% + \edef\nextii@{% + \noexpand\spline@find{\the\dimen@}{#2}{}\noexpand\checksplinefind@{#2}}% + \ifx>#3\relax + \edef\nextii@{% + \noexpand\spline@find{\the\dimen@}{#2}#3\noexpand\checksplinefind@{#2}}% + \else\ifx-#3\relax \ifdim\dimen@>\z@\relax \ifdim\dimen@<\p@ + \dimen@=-\dimen@ \advance\dimen@\p@ + \edef\nextii@{\noexpand\splinereverse@ + \noexpand\spline@find{\the\dimen@}{#2}{}\noexpand\checksplinefind@{#2}}% + \fi\fi + \else\ifx<#3\relax \ifdim\dimen@>\z@\relax \ifdim\dimen@<\p@ + \dimen@=-\dimen@ \advance\dimen@\p@ + \edef\nextii@{\noexpand\splinereverse@ + \noexpand\spline@find{\the\dimen@}{#2}#3\noexpand\checksplinefind@{#2}}% + \fi\fi + \fi\fi\fi + \fi\fi \expandafter\next@\nextii@ } +\xydef@\checksplinefind@#1{% + \dimen@ii=#1\relax \dimen@=\splinelength@ + \ifdim\dimen@ii=\z@\DN@{}% + \else + \ifdim\dimen@ii<\z@\advance\dimen@\dimen@ii + \else\advance\dimen@-\dimen@ii\fi + \ifdim\dimen@<\z@\multiply\dimen@\m@ne\fi + \ifdim\dimen@<.2\p@\DN@{}% + \else + \count@=\segmentnum@\relax + \ifdim\dimen@ii<\z@\advance\dimen@ii\splinelength@ + \ifnum\count@>\@ne\advance\count@\m@ne + \edef\next@{\noexpand\splinesegment@{\the\count@}% + \noexpand\spline@find\p@{\the\dimen@ii}{}% + \noexpand\checksplinefind@{\the\dimen@ii}}% + \else + \xywarning@{cannot slide \the\dimen@ii\space before start}% + \DN@{\splinesegment@\@ne \spline@find\z@\z@{}}\fi + \else\advance\dimen@ii-\splinelength@ + \count@@=\numcontrolpts + \ifnum\count@<\count@@ \advance\count@\@ne + \edef\next@{\noexpand\splinesegment@{\the\count@}% + \noexpand\spline@find\z@{\the\dimen@ii}{}% + \noexpand\checksplinefind@{\the\dimen@ii}}% + \else + \xywarning@{cannot slide \the\dimen@ii\space beyond end}% + \DN@{\splinesegment@{\the\count@@}\spline@find\p@\z@{}}\fi + \fi + \fi\fi \next@ } +\xydef@\resetbreaks@{% + \let\bstartPLACE@=\relax \let\bthisPLACE@=\empty + \let\bendPLACE@=\relax \let\bprevPLACE@=\relax} +\xydef@\invisbreaks@{\resetbreaks@ \let\bstartPLACE@=\empty} +\xydef@\crvresetbreaks@{\resetbreaks@ \let\bstartPLACE@=\relax } +\xydef@\initbreaks@{\xy@@{\ifx\bstartPLACE@\relax + \def\bstartPLACE@{0}\def\bendPLACE@{1}\else + \ifx\bstartPLACE@\empty\def\bstartPLACE@{0}\def\bendPLACE@{1}% + \fi\fi}} +\xydef@\lastbreaks@{\ifx\bprevPLACE@\relax \def\bstartPLACE@{0}% + \else \expandafter \bprevPLACE@ \fi + \let\bprevPLACE@\relax \let\bendPLACE@\relax} +\xylet@\bstartPLACE@\relax +\xylet@\bendPLACE@\relax +\xylet@\bprevPLACE@\relax +\xydef@\bthisPLACE@{1} +\xydef@\splinebreak@{% +\splinetrace@{***new break*** this:\bthisPLACE@ }% + \ifx\bthisPLACE@\empty\def\bendPLACE@{1}% + \else\edef\bendPLACE@{\bthisPLACE@}\let\bthisPLACE@\empty\fi + \ifx\bprevPLACE@\relax\def\bstartPLACE@{0}\else\expandafter\bprevPLACE@\fi + \edef\bprevPLACE@{\def\noexpand\bstartPLACE@{\bendPLACE@}\pfromthec@}% +\splinetrace@{splineBREAK: \bstartPLACE@ <> \bendPLACE@}% + \edef\cv@brend{\cfromthec@}% + \edef\cv@brstart{\cfromthep@}% + \expandafter\connect\expandafter\crvs\crvSTYLE@@{}% + \let\cv@brend=\relax + \let\cv@brstart=\relax +\splinetrace@{**break done**}% +} +\xydef@\splinelast@{\splinereset@ \lastbreaks@ +\splinetrace@{splineLAST}% + \edef\cv@brend{\cfromthec@}% + \edef\cv@brstart{\cfromthep@}% + \expandafter\connect\expandafter\crvs\crvSTYLE@@{}% + \let\cv@brend=\relax + \let\cv@brstart=\relax +\splinetrace@{**last done**}% + \resetbreaks@} +\xydef@\splineNointercept@{\enter@{\pfromthep@}% + \begingroup \splinereset@ \csname cv@0\endcsname \swap@ + \count@=\ptsnum@ \advance\count@\@ne \csname cv@\the\count@\endcsname + \edef\tmp@{\endgroup \X@origin=\the\X@p \Y@origin=\the\Y@p + \R@c=\the\d@X \U@c=\the\d@Y}\tmp@ + \loop@ + \dimen@=\ifdim\R@c<\z@-\fi\R@c + \advance\dimen@ \ifdim\U@c<\z@-\fi\U@c + \ifdim\dimen@>10\p@ + \advance\R@c \ifdim\R@c<\z@-\fi 16sp \divide\R@c\KK@ + \advance\U@c \ifdim\U@c<\z@-\fi 16sp \divide\U@c\KK@ + \repeat@ + \intersect@ \leave@} +\xydef@\splineintercept@{\Hidden@true\Invisible@true\splineintercept@i} +\xydef@\splineintercept@i{\enter@{\pfromthep@}\begingroup + \R@p=\X@c \L@p=\X@p \d@X=\R@p \advance\d@X-\L@p + \D@p=\Y@c \U@p=\Y@p \d@Y=\D@p \advance\d@Y-\U@p + \dimen@nth\KK@\d@X \edef\sd@X{\expandafter\removePT@\the\d@X}% + \dimen@nth\KK@\d@Y \edef\sd@Y{\expandafter\removePT@\the\d@Y}% + \dimen@=\sd@Y\L@p \advance\dimen@-\sd@X\U@p + \edef\sideOffset@{\the\dimen@}\def\closestseg@{1}% + \let\crvconnect@@=\relax \crvconnect@ + \let\spline@end=\splinef@end + \def\spline@start{\bgroup \def\prevnext@{+-}% + \def\splinerec@{\let\splinerec@=\splineIrec@ \splineinterceptTest@}% + \def\splinedecast@{\let\splinedecast@=\splinedecast@@ + \def\splineadvance@{\splineIadvance@@}\splinedecast@@}% + \def\splineadvance@{\intercepthull@}% + \global\let\splinepoint=\splineIpt@@ + \global\let\splinegoal@=\splinef@pt + \global\let\splinefinish@=\splinefinish@@}% + \begingroup \splineIsegment@ + \splinesetparams@ \splined@@ \def\postfind@{}\splineIplace@ + \setupDirection@ii \leave@ } +\xydef@\splineIplace@{% + \d@X=\dimen5 \d@Y=\dimen7 \dimen@=\splineval@ + \expandafter\count@\xycrvptsnum@\relax + \ifnum\count@>\tw@ \advance\count@\m@ne + \advance\dimen@\segmentnum@\p@ \advance\dimen@-\p@ + \dimen@nth\count@\dimen@ + \fi \edef\tmp@{\endgroup \endgroup + \def\noexpand\PLACEf@{{\expandafter\removePT@\the\dimen@}}% + \X@c=\dimen@i \Y@c=\dimen3 + \d@X=\the\d@X \d@Y=\the\d@Y }\tmp@ +\splinetrace@{PLACE = \PLACEf@:(\the\X@c, \the\Y@c)}% + \expandafter\edef\expandafter\bthisPLACE@\PLACEf@ + } +\xydef@\splineIrec@{\splineinterceptTest@ } +\xydef@\squineIpt@{\edef\tmp@{\endgroup + \def\noexpand\prevnext@{\next}\begingroup}\tmp@ } +\xydef@\squineIadvance@{\edef\tmp@{\endgroup + \def\noexpand\prevnext@{\next}\def\noexpand\howclose@{\howclose@}}% + \tmp@ \splineadvance@@\begingroup} +\xydef@\cubicIpt@{\edef\tmp@{\endgroup + \def\noexpand\prevnext@{\next}\begingroup}\tmp@ } +\xydef@\cubicIadvance@{\edef\tmp@{\egroup + \def\noexpand\prevnext@{\next}\def\noexpand\howclose@{\howclose@}}% + \tmp@ \splineadvance@@\bgroup} +\xydef@\splineIsegment@{\DN@{\splinesegment@\@ne}% + \ifx\splinesegment@\squinesegment@\else + \ifx\splinesegment@\cubicsegment@\else\DN@{\findIsegment@}% + \fi\fi\next@} +\xydef@\findIsegment@{\expandafter\count@\xycrvptsnum@ \count@@\z@ + \loop@ \advance\count@@\@ne \bgroup + \expandafter\splinesegment@\expandafter{\the\count@@}% + \xysidesofinterval@ + \findIsegment@i \repeat@ + \expandafter\dimen@\prevhowclose@ \relax + \ifdim\dimen@=\z@ \edef\closestseg@{\the\count@@}\fi + \expandafter\splinesegment@\expandafter{\closestseg@}} +\xydef@\findIsegment@i{% + \expandafter\ifx\next \expandafter\findIsegment@ii + \else\expandafter\findIsegment@x\fi \next@ } +\xydef@\findIsegment@ii{\expandafter\count@\xycrvptsnum@ \relax + \advance\count@\m@ne \ifnum\count@>\segmentnum@\relax + \expandafter\findIsegment@y\else\expandafter\findIsegment@x\fi} +\xydef@\findIsegment@x{% + \edef\next@{\egroup\def\noexpand\next{\next}% + \def\noexpand\prevhowclose@{\prevhowclose@}% + \def\noexpand\closestseg@{\closestseg@}\noexpand\iffalse}} +\xydef@\findIsegment@y{% + \edef\next@{\egroup\def\noexpand\next{\next}% + \def\noexpand\prevhowclose@{\prevhowclose@}% + \def\noexpand\closestseg@{\closestseg@}\noexpand\iftrue}} +\xydef@\xysidesofinterval@{\bgroup + \L@p=\sd@X\Y@p \advance\L@p-\sd@Y\X@p \advance\L@p\sideOffset@ + \U@p=\sd@X\Y@c \advance\U@p-\sd@Y\X@c \advance\U@p\sideOffset@ + \def\this@{}\ifdim\L@p>\almostz@ \ifdim\U@p>\almostz@ \def\next{++}\else + \ifdim\U@p<-\almostz@ \def\next{+-}\else\def\next{+0}\def\this@{-}\fi\fi + \else\ifdim\L@p<-\almostz@ \ifdim\U@p>\almostz@ \def\next{-+}\else + \ifdim\U@p<-\almostz@ \def\next{--}\else\def\next{-0}\def\this@{+}\fi\fi + \else \ifdim\U@p>\almostz@ \def\next{0+}\else + \ifdim\U@p<-\almostz@ \def\next{0-}\else\def\next{00}\def\this@{+}\fi\fi + \fi\fi + \ifx\this@\empty + \L@p=\ifdim\L@p<\z@-\fi\L@p \U@p=\ifdim\U@p<\z@-\fi\U@p + \ifdim\L@p<\U@p \edef\howclose@{\the\L@p}\def\this@{-}% + \else \edef\howclose@{\the\U@p}\def\this@{+}\fi + \else\def\howclose@{0.0pt}\fi +\splinetrace@{\next:\this@:\howclose@;\the\splineval@:% + (\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c)}% + \ifdim\howclose@<\prevhowclose@\relax + \edef\tmp@{\egroup\def\noexpand\this@{\this@}\def\noexpand\next{\next}% + \def\noexpand\howclose@{\howclose@}\def\noexpand\prevhowclose@{\howclose@}% + \def\noexpand\closestseg@{\segmentnum@}}% +\splinetrace@{closest yet: \howclose@, in segment \segmentnum@}% + \else + \edef\tmp@{\egroup\def\noexpand\this@{\this@}\def\noexpand\next{\next}% + \def\noexpand\howclose@{\howclose@}}% + \fi \tmp@ } +\xydef@\splineinterceptTest@{% + \xysidesofinterval@ \DN@{\splineadvance@}% + \DNii@{0.0pt}\ifx\howclose@\nextii@ \DN@{\splineclosest@}% + \else\expandafter\ifx\next \expandafter\ifx\prevnext@ + \ifx\next\prevnext@\else\DN@{\X@c=\X@p \Y@c=\Y@p + \splinefinishf@}\fi\fi + \else \DN@{\splinedecast@}\fi\fi + {\splinefar@false \splinenear@\X@p\X@c\Y@p\Y@c + \ifsplinefar@ \aftergroup\next@ + \else\aftergroup\splineclosest@ +\splinetrace@{too close: (\the\X@p,\the\Y@p)::(\the\X@c,\the\Y@c)}% + \fi}} +\xydef@\splineclosest@{% + \expandafter\ifx\this@-\relax + \X@c=\X@p \Y@c=\Y@p \global\advance\splineval@-\splinedepth@ + \fi \splinefinishf@ }% +\xydef@\squinetestcvxhull@{\begingroup +\splinetrace@{hull: closest in segment \closestseg@}% + \expandafter\splinesegment@\ifx\undefined\closestseg@\@ne\else\closestseg@\fi + \X@c=\L@c \Y@c=\U@c \xysidesofinterval@ + \expandafter\ifx\next \expandafter\splineoutsidehull@@ + \else \expandafter\splineinsidehull@\fi} +\xydef@\cubictestcvxhull@{\begingroup + \expandafter\splinesegment@\ifx\undefined\closestseg@\@ne\else\closestseg@\fi + \X@c=\L@c \Y@c=\U@c \xysidesofinterval@ + \expandafter\ifx\next \expandafter\cubictestcvxhull@i + \else \expandafter\splineinsidehull@\fi} +\xydef@\cubictestcvxhull@i{% + \X@c=\R@c \Y@c=\D@c \xysidesofinterval@ + \expandafter\ifx\next \expandafter\splineoutsidehull@@ + \else \expandafter\splineinsidehull@\fi} +\xydef@\xysidesofhull@{\bgroup + \L@p=\sd@X\Y@p \advance\L@p-\sd@Y\X@p \advance\L@p\sideOffset@ + \U@p=\sd@X\Y@c \advance\U@p-\sd@Y\X@c \advance\U@p\sideOffset@ + \L@p=\ifdim\L@p<\z@-\fi\L@p \U@p=\ifdim\U@p<\z@-\fi\U@p + \ifdim\L@p<\U@p \edef\howclose@{\the\L@p}\def\this@{-}% + \else \edef\howclose@{\the\U@p}\def\this@{+}\fi + \ifx\splinedecast@\squinedecast@ \D@c=\U@c \R@c=\L@c \fi + \L@p=\sd@X\U@c \advance\L@p-\sd@Y\L@c \advance\L@p\sideOffset@ + \L@p=\ifdim\L@p<\z@-\fi\L@p + \expandafter\if\this@-% + \ifdim\L@p<\prevhowclose@ \def\next{-+}\else \def\next{--}\fi + \else + \ifdim\L@p<\howclose@ \def\next{-+}\else + \U@p=\sd@X\D@c \advance\U@p-\sd@Y\R@c \advance\U@p\sideOffset@ + \U@p=\ifdim\U@p<\z@-\fi\U@p + \ifdim\U@p<\howclose@ \def\next{+-}\else \def\next{++}\fi + \fi\fi + \edef\tmp@{\egroup\def\noexpand\this@{\this@}\def\noexpand\next{\next}% + \def\noexpand\howclose@{\howclose@}}\tmp@ } +\def\PLACE@intercept@#1{% + \xy@@{\enter@{\pfromthep@\basefromthebase@}\begingroup}% + \xy@@ix@{#1}\xy@@{\plainxy@ \def\Creset@@{}% + \expandafter\POS\the\toks9\relax + \DNii@{\crvreset@}\ifx\nextii@\Creset@@ \edef\next@{\endgroup + \def\noexpand\xyinterceptpts@{\the\crvpts@}% + \X@c =\the\X@c \Y@c=\the\Y@c \X@p=\the\X@p \Y@p=\the\Y@p + \noexpand\CCintercept@@ }% + \else \edef\next@{\endgroup + \X@c =\the\X@c \Y@c=\the\Y@c \X@p=\the\X@p \Y@p=\the\Y@p + \noexpand\Cintercept@@ }% + \fi \next@ \leave@}% + \PLACE@@} +\xydef@\CCintercept@@{\splineSintercept@} +\xydef@\splineSintercept@{\enter@{\pfromthep@}\begingroup + \Creset@@ \edef\connect@pts{\cfromthec@ \pfromthep@}% + \xyinterceptpts@ \splinereset@ \connect@pts \splineintercept@ + \edef\next@{\endgroup \cfromthec@ \DirectionfromtheDirection@ }% + \next@ \let\xyinterceptpts@=\empty \leave@} +\xydef@\nointerceptwarning@{\let\nointerceptwarning@=\relax + \xywarning@{perhaps no curve intersection, or many. }} +\xydef@\intercepthull@{\nointerceptwarning@ + \expandafter\def\expandafter\prevnext@\expandafter{\next}% + \splinetestcvxhull@} +\xydef@\splinetestcvxhull@{\begingroup + \X@c=\L@c \Y@c=\U@c \splinetrace@{hull:}\xysidesofinterval@ + \expandafter\ifx\next \expandafter\splineoutsidehull@@ + \else \expandafter\splineinsidehull@\fi} +\xydef@\splineinsidehull@{\edef\tmp@{\endgroup + \def\noexpand\howcvxclose@{\howclose@}% + \noexpand\interceptinsidehull@}\tmp@ } +\xydef@\interceptinsidehull@{\edef\prevhowclose@{\howclose@}% + \splinedecast@@ } +{\xdef\next{\the\maxdimen}} +\xylet@\prevhowclose@=\next +\xydef@\splineoutsidehull@{\edef\tmp@{\endgroup + \def\noexpand\howcvxclose@{\howclose@}% + \noexpand\interceptoutsidehull@}\tmp@} +\xylet@\splineoutsidehull@@=\splineoutsidehull@ +\xydef@\interceptoutsidehull@{\dimen@=\howcvxclose@ \relax +\splinetrace@{OUTSIDE HULL: \the\dimen@ : (\howclose@)(\prevhowclose@)}% + \let\splinedecast@=\splinedecast@@ + \let\splinerec@\splineHnear@test + \let\splineadvance@\splineIadvance@@ + \splinedecast@@ } +\xydef@\splineHnear@test{% + \xysidesofhull@ \DN@{\splinedecast@}% + \ifdim\howclose@<\prevhowclose@\edef\howclose@{\prevhowclose@}\fi + \expandafter\if\this@-% + \expandafter\ifx\next\DN@{\splineclosest@}\fi + \else + \expandafter\ifx\next\DN@{\splineadvance@}\fi + \fi + {\splinefar@false \splinenear@\X@p\X@c\Y@p\Y@c + \ifsplinefar@ \aftergroup\next@ + \else\aftergroup\splineclosest@ +\splinetrace@{too close: (\the\X@p,\the\Y@p)::(\the\X@c,\the\Y@c)}% + \fi}} +\xydef@\cubicoutsidehull@{\edef\tmp@{\endgroup + \def\noexpand\howcvxclose@{\howclose@}}\tmp@ + \edef\prevhowcvxclose@{\howcvxclose@}\begingroup + \X@p=\R@c \Y@p=\D@c \splinetrace@{hullii:}\xysidesofinterval@ + \expandafter\ifx\next \expandafter\cubicoutsidehull@i + \else \expandafter\cubicinsidehull@\fi} +\xydef@\cubicinsidehull@{\edef\tmp@{\endgroup + \def\noexpand\howclose@{\howclose@}}\tmp@ + \cubicoutsidehull@ii } +\xydef@\cubicoutsidehull@i{\edef\tmp@{\endgroup + \def\noexpand\howcvxclose@{\howclose@}}\tmp@ + \dimen@=\prevhowcvxclose@\relax + \ifdim\dimen@<\howcvxclose@ \relax + \edef\howcvxclose@{\the\dimen@}\expandafter\interceptoutsidehull@ + \else \expandafter\cubicoutsidehull@ii\fi } +\xydef@\cubicoutsidehull@ii{% + \def\splineadvance@{\splineadvance@@}% + \def\splinepoint\endgroup{\endgroup + \global\let\splinepoint=\relax + \def\splineadvance@{\intercepthull@}}% + \splinedecast@@ }% +\xydef@\splineHadvance@{\futurelet\next@\splineHadvance@i} +\xydef@\splineHadvance@i{\ifx\next@\endgroup + \expandafter\splineHadvance@x\else\expandafter\splineclosest@\fi} +\xydef@\splineHadvance@x{\edef\tmp@{\endgroup + \def\noexpand\prevhowclose@{\prevhowclose@}% + \def\noexpand\prevnext@{\next}\def\noexpand\howcvxclose@{\howclose@}}% + \tmp@ \dimen@=\prevhowclose@ \relax + \ifdim\dimen@<\howclose@ \relax \DN@{\splineclosest@\begingroup}% + \else\ifdim\howcvxclose@=\dimen@\DN@{\splineclosest@\begingroup}% + \else\DN@{\splineadvance@@\begingroup}\fi\fi \next@ } +\xydef@\xyclearcrv@{\cv@end\cv@restore\loop@ + \expandafter\let\csname cv@\number\crv@cnt@\endcsname\relax + \ifnum\crv@cnt@>0\advance\crv@cnt@\m@ne\repeat@ + \let\cv@start=\relax \let\cv@end=\relax \let\cv@restore=\relax \POS} +\xylet@\clearcurve=\xyclearcrv@ +\xylet@\numcontrolpts=\xynumctrlpts@ +\xydef@\xycontrolpt@#1{{% + \ifnum#1<\z@\aftergroup\cv@restore\aftergroup\cv@start + \else + \expandafter\count@\xycrvptsnum@\relax \advance\count@\@ne + \ifnum#1>\count@ \ifx\cv@end\relax + \expandafter\aftergroup\csname cv@\number#1\endcsname + \else\aftergroup\cv@end\fi + \else + \expandafter\ifx\csname cv@\number#1\endcsname\relax + \ifnum#1=\z@\aftergroup\cv@start\else\aftergroup\cv@end\fi + \else\expandafter\aftergroup\csname cv@\number#1\endcsname + \fi\fi\fi}}% +\xylet@\xycontrolpt=\xycontrolpt@ +\xydef@\startxycurve@@{\crv@cnt@=\z@ + \edef\cv@start{\cfromthep@}% + \ifdim\zz@\R@c \ifdim\zz@\L@c \ifdim\zz@\D@c \ifdim\zz@\U@c + \Edge@c={\zeroEdge}\fi\fi\fi\fi + \edef\cv@end{\cfromthec@}% + \edef\cv@restore{\pfromthep@\basefromthebase@}} +\xylet@\startxycurve@=\startxycurve@@ +\xylet@\cv@start=\relax +\xylet@\cv@end=\relax +\xylet@\cv@restore=\relax +\xydef@\readxycurve@{\startxycurve@\xycrvmods@} +\xylet@\readxycurve=\readxycurve@ +\xydef@\addtocrv@{\advance\crv@cnt@\@ne + \edef\tmp@{% + \expandafter\noexpand\csname cv@\number\crv@cnt@\endcsname}% + \expandafter\edef\tmp@{\cfromthec@}% + \edef\tmp@{\noexpand\addtocrvpts@{\noexpand\def + \expandafter\noexpand\tmp@{\X@c=\the\X@c \Y@c=\the\Y@c }}}\tmp@ + \edef\xycrvptsnum@{\the\crv@cnt@}% +} +\xydef@\xycrvdrop@{ {\zerodot}} +\xydef@\xycrvconn@{} +\xydef@\xyc@trlpts@{\def\xycrvdrop@{ \dir{x}}\def\xycrvconn@{}% + \afterCURVE{\savecrvobjects@\xyctrlpts@}\readxycurve@} +\xydef@\xyc@trlpts@@{% + \afterCURVE{\savecrvobjects@\def\xycrvdrop@{ \dir{x}}% + \def\xycrvconn@{}\xyctrlpts@}\readxycurve@} +\xydef@\xyc@vxhull@{\def\xycrvdrop@{ {}}% + \edef\xycrvconn@{ \noexpand\dir{\addDASH@{}}}% + \afterCURVE{\savecrvobjects@\xycvxhull@}\readxycurve@} +\xydef@\xyc@vxhull@@{% + \afterCURVE{\savecrvobjects@\def\xycrvdrop@{ {}}% + \edef\xycrvconn@{ \noexpand\dir{\addDASH@{}}}\xycvxhull@}\readxycurve@} +\xylet@\controlpts=\xyc@trlpts@ +\xylet@\convexhull=\xyc@vxhull@ +\xydef@\savecrvobjects@{\bgroup + \expandafter\toks@\expandafter{\xycrvdrop@}% + \expandafter\toks@ii\expandafter{\xycrvconn@}% + \edef\tmp@{\egroup\noexpand\def\noexpand\resetcrvobjects@{% + \noexpand\def\noexpand\xycrvdrop@{\the\toks@}% + \noexpand\def\noexpand\xycrvconn@{\the\toks@ii}% + }}\tmp@} +\xydef@\afterCURVE#1{\def\afterCURVE@{#1}} +\xydef@\endxycurve@{\cv@end\savectrlptsnum@ + \expandafter\def\csname params@\endcsname{\the\crvpts@}% + \cv@restore\afterCURVE@\POS} +\xylet@\endcurve=\endxycurve@ +\xydef@\xyctrlpts@{\cv@end \cv@restore + \def\crvconnect@{\straitconnect@}% + \ifnum\crv@cnt@>\z@ + \count@@@=\@ne \DN@{\loop@\xycontrolpt@{\count@@@}\relax + \expandafter\xycvxhulldrop@\xycrvdrop@ + \ifnum\crv@cnt@>\count@@@\advance\count@@@\@ne\repeat@ + \cv@end \cv@restore }% + \else\DN@{\relax}\fi \next@ } +\xylet@\xyctrlpts=\xyctrlpts@ +\xydef@\addtocrvpts@#1{\crvpts@=\expandafter{\the\crvpts@#1}} +\xydef@\savescope@{\crvpts@={}% + \edef\tmp@{\expandafter\noexpand\csname cv@0\endcsname}% + \edef\tmp@{\noexpand\addtocrvpts@{\noexpand\def + \expandafter\noexpand\tmp@{\X@c=\the\X@p \Y@c=\the\Y@p}}}% + \tmp@ } +\xydef@\savectrlptsnum@{% + \advance\crv@cnt@\@ne \edef\tmp@{% + \expandafter\noexpand\csname cv@\number\crv@cnt@\endcsname}% + \edef\tmp@{\noexpand\addtocrvpts@{\noexpand\def + \expandafter\noexpand\tmp@{\X@c=\the\X@c \Y@c=\the\Y@c}}}\tmp@ + \advance\crv@cnt@\m@ne + \edef\tmp@{\expandafter\noexpand\csname ptsnum@\endcsname}% + \edef\tmp@{\noexpand\addtocrvpts@{% + \noexpand\def\expandafter\noexpand\tmp@{\number\crv@cnt@}}}% + \tmp@ } +\xydef@\xycvxhull@{\cv@end \cv@restore + \addtocrvpts@{\def\crvconnect@{\straitconnect@}}% + \def\crvconnect@{\straitconnect@}% + \ifnum\crv@cnt@>\z@ + \count@@@=\@ne\relax \DN@{\loop@\xycontrolpt@{\count@@@}\relax + \expandafter\xycvxhulldrop@\xycrvdrop@ + {\expandafter\connect\xycrvconn@{}}\pfromc@ + \ifnum\crv@cnt@>\count@@@\relax \advance\count@@@\@ne\repeat@ + \cv@end }% + \else + \ifx\empty\xycrvconn@ + \edef\xycrvconn@{\noexpand!C\noexpand\dir{\addDASH@{}}}\fi + \DN@{\relax}\fi \next@ + {{\expandafter\connect\xycrvconn@{}}}% + \cv@end \cv@restore } +\xylet@\xycvxhull=\xycvxhull@ +\xydef@\xycvxhulldrop@#1#{\drop@{#1}} +\xydef@\savespline@{% +\splinetrace@{savespline@:}% + \edef\endspline@{\endgroup + \savesplineparams@ \savesplinerefs@ + \X@min=\the\X@min\relax \X@max=\the\X@max\relax + \Y@min=\the\Y@min\relax \Y@max=\the\Y@max\relax + \ifInvisible@\noexpand\Invisible@true + \else\noexpand\Invisible@false\fi + }\endspline@ + \edef\tmp@{\noexpand\addtocrvpts@{\savesplineparams@}}\tmp@ + \xycontrolpt@\z@ \cv@end } +\xydef@\savesplineparams@{% + \noexpand\def\expandafter\noexpand\xysplineedges@{\xysplineedges@}} +\xydef@\savesplinerefs@{% + \noexpand\def\noexpand\xysplineparams@{% + \expandafter\noexpand\xysplineparams@}% + \noexpand\def\noexpand\xysplineedges@{% + \expandafter\noexpand\xysplineedges@}% +} +\xynew@{box}\splinebox@ +\xynew@{dimen}\splineval@ +\xynew@{dimen}\splinedepth@ +\xynew@{dimen}\splinetol@ +\xynew@{dimen}\splinelength@ +\xynew@{if}\ifsplinefar@ +\xynew@{if}\ifsplineplot@ +\xydef@\splinetracing{\let\splinetrace@=\W@} +\xydef@\splineignore@#1{} +\xylet@\splinetrace@=\splineignore@ +\xydef@\readsplineparams@{% + \expandafter\expandafter\expandafter\getsplineparams@\xysplineparams@ + \expandafter\expandafter\expandafter\getsplineedges@safe\xysplineedges@ @@} +\xydef@\getsplineedges@safe#1@@{\DN@{#1}% + \ifx\next@\empty \DN@{\getsplineedges@.0pt;0.0pt,0.0pt;0.0pt,}% + \else \DN@{\getsplineedges@safe@#1@@}\fi \next@} +\xydef@\getsplineedges@safe@#1;#2,#3@@{\DN@{#3}% +\splinetrace@{getsplineedges@safe}% + \ifx\next@\empty \DN@{\getsplineedges@#1;#2,0.0pt;0.0pt,}% + \else \DN@{\getsplineedges@#1;#2,#3}\fi \next@} +\xydef@\getsplineedges@#1;#2,#3;#4,{% + \global\dimen@i=#1\global\dimen5=#2\relax + \dimen@=#3\multiply\dimen@\m@ne \advance\dimen@\splinelength@ + \global\dimen3=\dimen@ + \dimen@=#4\relax + \ifdim\dimen@>\p@ \xywarning@{edge out-of-range: \the\dimen@}% + \count@=\dimen@ \divide\count@\p@ + \advance\dimen@-\count@\p@ \multiply\dimen@\m@ne + \advance\dimen@ \count@\p@ \advance\dimen@\p@ +\splinetrace@{\the\dimen@}% + \else + \multiply\dimen@\m@ne \advance\dimen@\p@ + \fi + \global\dimen7=\dimen@ } +\xydef@\dimen@half{% + \advance\dimen@ \ifdim\dimen@<\z@-\fi 1sp \divide\dimen@\tw@} +\xydef@\halve@dimen#1{\dimen@=#1\relax \dimen@half #1=\dimen@} +\xydef@\dimen@nth#1#2{\dimen@=#2\relax \dimen@ii=#1sp + \advance\dimen@ \ifdim\dimen@<\z@-\fi.5\dimen@ii + \divide\dimen@ by#1\relax #2=\dimen@} +\xydef@\splinetolerance@#1{\dimen@=#1\relax + \ifdim\dimen@>\z@ \splinetol@=\dimen@ + \else\splinetol@=.4\p@\fi} +\xylet@\splinedefaulttol@=\relax +\xydef@\splinetolerance#1{\splinetolerance@{#1}% + \edef\splinedefaulttol@{\splinetol@=\the\splinetol@}} +\splinetolerance\z@ +\xydef@\SloppyCurves{\splinetolerance{.8\p@}} +\xydef@\xylowtolerance@{\splinedefaulttol@ + \ifdim\splinetol@<\p@ \divide\splinetol@\tw@ \fi} +\xywarnifdefined\splinedrop@ +\xydef@\setstdsplinedrop@{% + \setbox\splinebox@=\hbox\bgroup + \setboxz@h{\expandafter\object\xycrvdrop@{}}% + \splinedefaulttol@ \dimen@=\wd\z@ \dimen@ii=\ht\z@ \advance\dimen@ii\dp\z@ + \ifdim\dimen@ii>\dimen@ \dimen@=\dimen@ii \fi \dimen@=1.4142\dimen@ + \ifdim\dimen@>\splinetol@ \splinetol@=\dimen@\else\dimen@=\splinetol@\fi + \dimen@=.5\wd\z@ + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \kern-\dimen@ \Drop@@ \kern\dimen@ + \edef\tmp@{\egroup \splinetol@=\the\splinetol@ + \ifInvisible@\noexpand\Invisible@true + \else\noexpand\Invisible@false\fi}\tmp@ + \edef\splinedefaulttol@{\splinetol@=\the\splinetol@}% + \def\splinedrop@{\copy\splinebox@\splineextra@@}} +\xywarnifdefined\splineconn@ +\xydef@\stdsplineconn@{{\setsplinedir@ + \setboxz@h\bgroup\expandafter\object\xycrvconn@{}% + \edef\tmp@{\egroup\L@c=\the\L@c \R@c=\the\R@c \D@c=\the\D@c \U@c=\the\U@c + \noexpand\def\noexpand\Drop@@}\expandafter\tmp@\expandafter{\Drop@@}% + \setboxz@h{\kern-\L@c \boxz@}% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \Drop@@}} +\xydef@\setcrvobjects@{\setstdsplinedrop@ \def\splineconn@{\stdsplineconn@}} +\xylet@\splineextra@@=\relax +\xydef@\splinenear@#1#2#3#4{{\d@X=#1\advance\d@X-#2% + \ifdim\d@X<\z@ \d@X=-\d@X\fi + \ifdim\splinetol@<\d@X \aftergroup\splinefar@true + \else \d@Y=#3\advance\d@Y-#4\ifdim\d@Y<\z@ \d@Y=-\d@Y\fi + \ifdim\splinetol@<\d@Y\aftergroup\splinefar@true + \else \xydist@\d@X\d@Y + \ifdim\splinetol@<\dimen@ \aftergroup\splinefar@true + \else + \ifdim\dimen@<.1\splinetol@\aftergroup\splinetooclose@\fi + \fi\fi\fi}} +\xydef@\splineadvance@@{\global\advance\splineval@\splinedepth@} +\xydef@\splinetooclose@{\aftergroup\aftergroup\aftergroup\splinetooclose@@} +\xydef@\splinetooclose@@{\def\splineplotpt@{\relax}} +\xydef@\splinepoint@@{% +\splinetrace@{P@:(\the\X@c,\the\Y@c)::\the\splineval@;\the\splinedepth@}% + {\splinetest@\ifsplineplot@\relax\else\aftergroup\splinecontinue\fi}} +\xydef@\splinepoint@{% + {\splinetest@\ifsplineplot@\aftergroup\splinecontinue\fi}} +\xylet@\splinepoint=\splinepoint@ +\xydef@\splinecontinue@{% + \global\let\splinepoint=\splinepoint@@ + \global\let\splinecontinue=\splinecontinue@@} +\xydef@\splinecontinue@@{% + \global\let\splinepoint=\splinepoint@ + \global\let\splinecontinue=\relax} +\xylet@\splinecontinue=\splinecontinue@ +\xydef@\splineknotpoint@{{\X@p=\X@c \Y@p=\Y@c \cv@start + \the\Edge@c\@ne \ifInside@\else\aftergroup\splineknotpoint@@\fi}}% +\xydef@\splineknotpoint@@{{\X@p=\X@c \Y@p=\Y@c \cv@end + \the\Edge@c\@ne \ifInside@\else \aftergroup\splinepoint\fi}}% +\xylet@\firstsplinepoint@=\splineknotpoint@ +\xylet@\lastsplinepoint@= \splineknotpoint@ +\xydef@\splined@@@{% +\splinetrace@{finding end types}% +\splinetrace@{bstartPLACE@:\bstartPLACE@; bendPLACE@:\bendPLACE@}% + \DN@{\splinescan@}\ifx\bstartPLACE@\empty + \ifx\bendPLACE@\relax\def\bendPLACE@{1}\fi + \else\ifx\bstartPLACE@\relax + \else\ifx\bstartPLACE@\undefined + \else + \DN@{\splinescanbreak@}\ifx\bendPLACE@\relax\def\bendPLACE@{1}\fi + \DNii@{0}\ifx\bstartPLACE@\nextii@ + \DNii@{1}\ifx\bendPLACE@\nextii@\DN@{}% + \fi\fi + \fi\fi\fi \next@ }% +\xydef@\splineStarttest@{{\X@p=\X@c \Y@p=\Y@c \cv@start \the\Edge@c\@ne + \ifInside@\aftergroup\splineplot@false\else\aftergroup\splineplot@true\fi}}% +\xydef@\splineEndtest@{{\X@p=\X@c \Y@p=\Y@c \cv@end \the\Edge@c\@ne + \ifInside@\aftergroup\splineplot@false\else\aftergroup\splineplot@true\fi}}% +\xydef@\splineBreakStarttest@{{\X@p=\X@c \Y@p=\Y@c \cv@brstart \the\Edge@c\@ne + \ifInside@\aftergroup\splineplot@false\else\aftergroup\splineplot@true\fi}}% +\xydef@\splineBreakEndtest@{{\X@p=\X@c \Y@p=\Y@c \cv@brend \the\Edge@c\@ne + \ifInside@\aftergroup\splineplot@false\else\aftergroup\splineplot@true\fi}}% +\xylet@\splineStarttest=\splineStarttest@ +\xylet@\splineEndtest=\splineEndtest@ +\xydef@\splineSlowStarttest{{\X@p=\X@c \Y@p=\Y@c \cv@start \the\Edge@c\@ne + \ifInside@\aftergroup\splineplot@maybe@@\else\aftergroup\splineplot@true\fi}}% +\xydef@\splineSlowEndtest{{\X@p=\X@c \Y@p=\Y@c \cv@end \the\Edge@c\@ne + \ifInside@\aftergroup\splineplot@maybe@@\else\aftergroup\splineplot@true\fi}}% +\xydef@\splineplot@maybe{\splineplot@false}% +\xylet@\splineplot@maybe@@=\splineplot@maybe +\xydef@\splinescan@{\bgroup% + \expandafter\def\xysplineedges@{\z@;\z@,\z@;\z@,}% + \bgroup \cv@start + \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}% + \ifx\next@\nextii@ \gdef\splineedges@{\z@;\z@,}% + \else\aftergroup\splinestartScan@\fi + \egroup \relax + \bgroup \cv@end + \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}% + \ifx\next@\nextii@ + \getcrvsegsnum@ \edef\segmentnum@{\the\count@}% + \splineval@=\z@ \splineRecordEndValue@ + \else\aftergroup\splineendScan@\fi + \egroup \egroup + \expandafter\testsplineedges@\splineedges@;,@@% + \expandafter\edef\xysplineedges@{\splineedges@}% + \global\let\splineedges@=\relax +\splinetrace@{edge params: \xysplineedges@}}% +\xydef@\testsplineedges@#1;#2,#3;#4,#5@@{% + \DN@{#5}\ifx\next@\empty + \DNii@{#4}\ifx\nextii@\empty + \xynoedgespline@{end}\def\splineedges@{#1;#2,\z@;\z@,}\fi + \DNii@{#2}\ifx\nextii@\empty + \xynoedgespline@{start}\def\splineedges@{\z@;\z@,\z@;\z@,}\fi + \fi } +\xydef@\xynoedgespline@#1{\xywarning@{#1 edge of spline not found}}% +\xydef@\splinestartScan@{\bgroup +\splinetrace@{scan for start}% + \global\let\splineadvance@=\splineadvance@@ + \let\spline@start=\splinefindStart@ + \let\spline@end=\spline@end@@ + \let\splinefinish@=\splinefinish@@ + \let\splinewhich=\relax + \global\splinelength@=\z@ + \def\splinerec@{\let\splinerec@=\splineSrec@ \splinedecast@@}% + \edef\splineedges@{}% + \expandafter\let\xysplineedges@\relax + \xylowtolerance@ \splined@@ + \ifx\splineedges@\empty\expandafter\splineslowScan@\fi + \ifx\splineedges@\relax\expandafter\splinenostart@\fi + \egroup }% +\xydef@\splineslowScan@{% + \let\splineStarttest=\splineSlowStarttest + \let\splinescanStarttest=\relax + \def\splinerec@{\let\splinerec@=\splineSrec@ \splinedecast@@}% + \splined@@ } +\xydef@\splineslowEnd@{% + \global\let\splineEndtest=\splineSlowEndtest + \let\splinescanEndtest=\relax + \def\splinerec@{\let\splinerec@=\splineErec@ \splinedecast@@}% + \splined@@ } +\xydef@\splinenostart@{% + \def\segmentnum@{1}\splinelength@=\z@ \splineval@=\z@ + \xynoedgespline@{start}\splineRecordValue@ } +\xydef@\splineendScan@{\bgroup + \bgroup +\splinetrace@{scan for end}% + \global\let\splineadvance@=\splineadvance@@ + \let\spline@start=\splinefindEnd@ + \let\spline@end=\spline@end@@ + \let\splinefinish@=\splinefinish@@ + \let\splinewhich=\relax + \global\splinelength@=\z@ + \global\let\splineEndtest=\splineEndtest@ + \def\splinerec@{\let\splinerec@=\splineErec@ \splinedecast@@}% + \expandafter\def\expandafter\prevedges@\expandafter{\splineedges@}% + \xylowtolerance@ \splined@@ + \ifx\splineedges@\prevedges@\expandafter\splineslowScan@\fi + \egroup \egroup} +\xydef@\splinescanbreak@{% +\splinetrace@{SCANBREAK}% + \gdef\breakedges@{}% + \DN@{0}\ifx\next@\bstartPLACE@ + \DN@{\bgroup \def\tmp@####1;####2,####3;####4,{% + \global\splineval@=####2\relax}% + \expandafter\expandafter\expandafter\tmp@\xysplineedges@ + \def\segmentnum@{1}\splineRecordBreakValue@ \egroup}% + \else + \bgroup \cv@start + \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}% + \ifx\next@\nextii@ \aftergroup\splinezerostart + \else\aftergroup\splinewidestart\fi + \egroup + \fi \next@ + \DN@{1}\ifx\next@\bendPLACE@ + \DN@{\bgroup \def\tmp@####1;####2,####3;####4,{% + \global\splineval@=####4\relax}% + \expandafter\expandafter\expandafter\tmp@\xysplineedges@ +%% \multiply\splineval@\m@ne \advance\splineval@\p@ +%% \def\segmentnum@{1} + \getcrvsegsnum@ \edef\segmentnum@{\the\count@}% + \global\multiply\splineval@\count@ + \splineRecordEndBreakValue@ \egroup}% + \else + \bgroup \cv@end + \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}% + \ifx\next@\nextii@ \aftergroup\splinezeroend + \else\aftergroup\splinewideend\fi + \egroup + \fi \next@ + \expandafter\def\expandafter + \xybreakedges@\expandafter{\breakedges@}% + \global\let\breakedges@=\relax +\splinetrace@{break params: \xybreakedges@::\bstartPLACE@--\bendPLACE@}% + \expandafter\let\xysplineedges@\xybreakedges@ } +\xydef@\getcrvsegsnum@{% + \count@=\ptsnum@\relax \ifnum\count@>\@ne\advance\count@\m@ne\fi} +\xydef@\splinezerostart{\DN@{\bgroup +\splinetrace@{splinezerostart:}% + \dimen@=\bstartPLACE@\p@ + \global\splineval@=\dimen@ + \splineRecordBreakValue@ \egroup }} +\xydef@\splinezeroend{\DN@{\bgroup +\splinetrace@{splinezeroend:}% + \dimen@=\bendPLACE@\p@ + \multiply\dimen@\m@ne \advance\dimen@\p@ + \def\segmentnum@{0}\global\splineval@=\dimen@ + \splineRecordEndBreakValue@ \egroup }} +\xydef@\splinewidestart{\DN@{\bgroup + \splinetrace@{scan for start}% + \let\splinefbcontinue@=\breakstartcontinue@ + \let\splinef@pt=\splinef@breakpt + \let\splinef@end=\break@start + \edef\tmp@{{\bstartPLACE@}}% + \expandafter\splinealong@@\tmp@\z@>\endgroup\egroup }} +\xydef@\splinewideend{\DN@{\bgroup + \splinetrace@{scan for wide end}% + \let\splinefbcontinue@=\breakendcontinue@ + \let\splinef@pt=\splinef@breakpt + \let\splinef@end=\break@end + \edef\tmp@{{\bendPLACE@}}% + \expandafter\splinealong@@\tmp@\z@<\endgroup\egroup }} +\xydef@\splineSrec@{{% +\splinetrace@{v=\the\splineval@ + d=\the\splinedepth@ : + (\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c):Srec }% + \splineStarttest + \ifsplineplot@ + \ifdim\splinedepth@<.0001\p@ \aftergroup\splinefinish@ + \global\advance\splineval@ .5\splinedepth@ + \else\aftergroup\splinedecast@@ \fi + \else \aftergroup\splineadvance@ \fi}} +\xydef@\splinefindStart@@{\bgroup \bgroup + \expandafter\expandafter\expandafter\getsplineparams@\xysplineparams@ + \global\let\splineadvance@=\splineadvance@@ + \global\let\splinepoint=\relax + \let\splinegoal@=\splineRecordValue@ \global\dimen5=\z@ + {\X@c=\X@p \Y@c=\Y@p \splinescanStarttest }% +} +\xydef@\splinefindStart@{% + \expandafter\crv@cnt@\xycrvptsnum@\relax + \ifnum\crv@cnt@>\tw@ + \crv@cnt@=\@ne \splineplot@false \splinesegment@{\crv@cnt@}% + {\splineStarttest + \ifsplineplot@\aftergroup\splineplot@true\fi}% + \ifsplineplot@ \else \searchforStartsegment@ \fi + \splinesegment@{\crv@cnt@}% +\splinetrace@{start is in segment \segmentnum@}% + \else \splinesegment@\@ne \fi + \splineplot@false \splinefindStart@@ +} +\xydef@\searchforStartsegment@{\splineplot@true\loop@ + \advance\crv@cnt@\@ne + \expandafter\count@\xycrvptsnum@\relax + \ifnum\count@=\crv@cnt@\expandafter\splineplot@false + \else + \splinesegment@{\crv@cnt@}{\splineStarttest + \ifsplineplot@\aftergroup\splineplot@false + \else\aftergroup\splineplot@true\fi }% + \fi \ifsplineplot@\repeat@ +} +\xydef@\splinefindEnd@@{\bgroup \bgroup + \expandafter\expandafter\expandafter\getsplineparams@\xysplineparams@ +\splinetrace@{params:\xysplineparams@}% + \splinereverse@@ +\splinetrace@{params:\xysplineparams@}% + \global\let\splineadvance@=\splineadvance@@ + \global\let\splinepoint=\splinescanEndtest + \let\splinegoal@=\splineRecordEndValue@ \global\dimen5=\z@ + {\X@c=\X@p \Y@c=\Y@p \splinescanEndtest }% +} +\xydef@\splinereverse@@{\splinereverse@@@} +\xydef@\splinereverse@@@{% + \def\postspline@{\d@X=-\d@X \d@Y=-\d@Y}% + \dimen@ii=\X@c \X@c=\X@p \X@p=\dimen@ii + \dimen@ii=\Y@c \Y@c=\Y@p \Y@p=\dimen@ii + \global\dimen5=-\dimen5\relax + \global\advance\dimen5\splinelength@ } +\xydef@\postspline@{} +\xydef@\splineErec@{{% + \dimen@=\splineval@ \advance\dimen@\splinedepth@ +\splinetrace@{ER (\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c);;; +\the\dimen@,\the\splinedepth@}% + \splineEndtest + \ifsplineplot@ + \ifdim\splinedepth@<.0001\p@ \aftergroup\splinefinish@ + \else\aftergroup\splinedecast@@ \fi + \else \aftergroup\splineadvance@ \fi}} +\xydef@\splinefindEnd@{% + \expandafter\crv@cnt@\xycrvptsnum@\relax + \ifnum\crv@cnt@>\tw@ + \advance\crv@cnt@\m@ne + \splineplot@false \splinesegment@{\crv@cnt@}% + {\X@c=\X@p \Y@c=\Y@p \splineEndtest + \ifsplineplot@\aftergroup\splineplot@true\fi }% + \ifsplineplot@ + \else \searchforEndsegment@ \fi + \splinesegment@{\crv@cnt@}% +\splinetrace@{end is in segment: \segmentnum@ }% + \else \splinesegment@\@ne \fi + \splineplot@false\splinefindEnd@@ +} +\xydef@\searchforEndsegment@{\splineplot@true\loop@ + \advance\crv@cnt@\m@ne + \ifnum\crv@cnt@=\z@\expandafter\splineplot@false + \else + \splinesegment@{\crv@cnt@}{\X@c=\X@p \Y@c=\Y@p \splineEndtest + \ifsplineplot@\aftergroup\splineplot@false + \else\aftergroup\splineplot@true\fi}% + \fi \ifsplineplot@\repeat@ +} +\xydef@\splinescanStarttest{% +\splinetrace@{SST (\the\X@c,\the\Y@c); \the\splinelength@, \the\splineval@}% + {\splineplot@false\splineStarttest + \ifsplineplot@\expandafter\splinefinish@\fi}} +\xydef@\splinescanEndtest{% +\splinetrace@{SET (\the\X@c,\the\Y@c); \the\splinelength@, \the\splineval@}% + {\splineplot@false\splineEndtest + \ifsplineplot@\expandafter\splinefinish@\fi}} +\xydef@\splineBrec@{{% + \dimen@=\splineval@ \advance\dimen@\splinedepth@ +\splinetrace@{BR (\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c);;; +\the\dimen@,\the\splinedepth@}% + \splineEndtest + \ifsplineplot@ \aftergroup\splineadvance@ \else + \ifdim\splinedepth@<.0001\p@ \aftergroup\splinefinish@ + \else\aftergroup\splinedecast@@ \fi \fi}} +\xydef@\splineBSrec@{{% +\splinetrace@{SR (\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c);;; +\the\dimen@,\the\splinedepth@:SR}% + \splineStarttest + \ifsplineplot@ + \ifdim\splinedepth@<.0001\p@ \aftergroup\splinefinish@ + \global\advance\splineval@ .5\splinedepth@ + \else \advance\splineval@\splinedepth@ + \splinetest@ \advance\splineval@-\splinedepth@ + \ifsplineplot@\aftergroup\splineadvance@ + \else\aftergroup\splinedecast@@\fi + \fi + \else + \global\advance\splineval@\splinedepth@ + \aftergroup\splinefinish@ \fi }} +\xydef@\splineBErec@{{% + \dimen@=\splineval@ \advance\dimen@\splinedepth@ +\splinetrace@{BE (\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c);;; + \the\dimen@,\the\splinedepth@}% + \splineEndtest + \ifsplineplot@ + \ifdim\splinedepth@<.0001\p@ \aftergroup\splinefinish@ + \global\advance\splineval@ .5\splinedepth@ + \else \advance\splineval@\splinedepth@ + \splinetest@ \advance\splineval@-\splinedepth@ + \ifsplineplot@\aftergroup\splineadvance@ + \else\aftergroup\splinedecast@@\fi + \fi + \else + \ifdim\splinedepth@<\p@ \global\advance\splineval@\splinedepth@ \fi + \aftergroup\splinefinish@ \fi }} +\xydef@\splinef@breakpt#1{% + \ifdim\splineval@>\z@ +\splinetrace@{found: val=\the\splineval@;(\the\X@c,\the\Y@c)}% + \else +\splinetrace@{found: val=\the\splineval@;(\the\X@p,\the\Y@p)}% + \fi \splinefbcontinue@ } +\xydef@\splinef@pt@@{% + \ifdim\splineval@>\z@ +\splinetrace@{found: val=\the\splineval@;c:(\the\X@c,\the\Y@c)}% + \global\dimen@i=\X@c \global\dimen3=\Y@c + \else +\splinetrace@{found: val=\the\splineval@;p:(\the\X@p,\the\Y@p)}% + \fi + \setsplinedir@ \global\dimen5=\d@X \global\dimen7=\d@Y + \global\splineval@=\splineval@ + \aftergroup\splinefocus@ } +\xydef@\findbreakwarning@#1{% + \xywarning@{#1 of break not found: bSTART=\bstartPLACE@, bEND=\bendPLACE@}% + \DN@{#1}\def\DNii@{start}\ifx\next@\nextii@\splineRecordBreakValue@ + \else\splineRecordEndBreakValue@\fi\egroup}% +\xydef@\breakstartcontinue@{\bgroup \cv@start + \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}% + \ifx\next@\nextii@ \aftergroup\breakstartfound@ + \else \aftergroup\breakstartcontinue@i\fi \egroup }% +\xydef@\breakstartcontinue@i{% +\splinetrace@{move to start edge, from (\the\X@c,\the\Y@c): val=\the\splineval@ }% + \global\let\splineEndtest=\splineBreakStarttest@ + \global\let\splinetest@=\splineBreakStarttest@ + \gdef\splinerec@{\global\let\splinerec@=\splineSrec@ \splinedecast@@}% + \global\let\splinepoint=\relax + \global\let\spline@end=\checkfoundSbreak@ + \global\let\splinegoal@=\splineRecordSBreakValue@ + \global\let\splinefinish@=\splinefinish@@ } +\xydef@\breakstartfound@{% +\splinetrace@{found start edge, at (\the\X@c,\the\Y@c): val=\the\splineval@ }% + \global\let\splinetest@=\splineStarttest + \gdef\splinerec@{\splinegoal@ \global\let\splinerec@=\splinefinish@ }% + \global\let\splinepoint=\relax + \global\let\spline@end=\relax + \global\let\splinegoal@=\splineRecordBreakValue@ + \global\let\splinefinish@=\splinefinish@@ + } +\xydef@\checkfoundSbreak@{% + \ifnum\xycrvptsnum@<\thr@@\DN@{\findbreakwarning@{start}}% + \else\DN@{\searchBreakSsegment@}\fi \next@ }% +\xydef@\searchBreakSsegment@{% + \crv@cnt@=\segmentnum@ \DN@{}\count@=\crv@cnt@ + \DNii@{}\ifnum\splineval@=\z@ \ifnum\crv@cnt@=\@ne + \ifnum\xycrvptsnum@=\@ne\count@=\z@\DNii@{\egroup}\fi + \else \DN@{\egroup}\fi + \else \ifnum\splineval@=\m@ne + \else \advance\crv@cnt@\@ne \fi \fi + \ifnum\crv@cnt@=\xycrvptsnum@\relax + \ifnum\xycrvptsnum@>\tw@ \DNii@{\egroup}\fi + \DN@{\expandafter\splineRecordBreakValue@\nextii@}% + \else + \DN@{\splinesegment@{\crv@cnt@}\splinesetparams@ + \splined@@ \egroup}% + \fi \next@ } +\xydef@\checkfoundEbreak@{% + \ifnum\xycrvptsnum@<\thr@@\DN@{\findbreakwarning@{end}}% + \else\DN@{\searchBreakEsegment@}\fi \next@ }% +\xydef@\searchBreakEsegment@{% + \crv@cnt@=\segmentnum@ \DN@{}\count@=\crv@cnt@ + \DNii@{}\ifnum\splineval@=\z@ \ifnum\crv@cnt@=\@ne + \ifnum\xycrvptsnum@=\@ne\count@=\z@\DNii@{\egroup}\fi + \else\DN@{\egroup}\fi + \else \advance\crv@cnt@\m@ne \fi + \ifnum\count@=\z@ + \ifnum\xycrvptsnum@>\tw@ \splineval@=\m@ne\p@ + \DNii@{\egroup}\fi + \DN@{\expandafter\splineRecordEndBreakValue@\nextii@}\else + \DN@{\splinesegment@{\crv@cnt@}\splinereverse@ + \readsplineparams@ \splined@@ \egroup}% + \fi \next@ } +\xydef@\break@start{\egroup \egroup +\splinetrace@{scan for start}% + \global\let\splineadvance@=\splineadvance@@ + \let\spline@start=\splinefindBStart@ + \let\spline@end=\egroup + \let\splinefinish@=\splinefinish@@ + \let\splinewhich=\relax + \global\let\splineadvance@=\splineadvance@@ + \global\let\splinepoint=\relax + \let\splinegoal@=\splineRecordBreakValue@ + \global\dimen5=\z@ \global\splinelength@=\z@ + \let\splinerec@=\splineSrec@ + \def\breakedges@{}% + \bgroup \bgroup \splined@@ } +\xydef@\splinefindBStart@{\bgroup + \global\splineval@=\z@ \splinedepth@=.5\p@} +\xydef@\breakendcontinue@{\bgroup + \edef\tmp@{\X@p = \the\X@c \Y@p=\the\Y@c}\cv@end\tmp@ + \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}% + \ifx\next@\nextii@ \aftergroup\breakendfound@ + \else\aftergroup\breakendcontinue@i\fi \egroup }% +\xydef@\breakendcontinue@i{% +\splinetrace@{move to end edge, from (\the\X@c,\the\Y@c): val=\the\splineval@ }% + \global\let\splineEndtest=\splineBreakEndtest@ + \global\let\splinetest@=\splineBreakEndtest@ + \gdef\splinerec@{\global\let\splinerec@=\splineErec@\splinedecast@@}% + \global\let\splinepoint=\relax + \global\let\spline@end=\checkfoundEbreak@ + \global\let\splinegoal@=\splineRecordEBreakValue@ + \global\let\splinefinish@=\splinefinish@@ + \splinerec@ } +\xydef@\splineRecordEBreakValue@{% +\splinetrace@{\the\count@\space segments, \the\splineval@}% + \splineRecordEndBreakValue@ } +\xydef@\splineRecordSBreakValue@{\getcrvsegsnum@ + \dimen@=\splineval@ + \advance\dimen@\segmentnum@\p@ \advance\dimen@-\p@ + \dimen@nth\count@\dimen@ + \global\splineval@=\dimen@ \def\segmentnum@{1}% + \splineRecordBreakValue@ } +\xydef@\breakendfound@{% +\splinetrace@{found end edge, at (\the\X@c,\the\Y@c): val=\the\splineval@ }% + \global\let\splinetest@=\splineEndtest + \gdef\splinerec@{\splinegoal@ \global\let\splinerec@=\splinefinish@}% + \global\let\splinepoint=\relax + \global\let\spline@end=\relax + \global\let\splinegoal@=\splineRecordEndBreakValue@ + \global\let\splinefinish@=\splinefinish@@ } +\xydef@\break@end{\egroup \egroup + \global\let\splineadvance@=\splineadvance@@ + \let\spline@start=\splinefindBEnd@ + \let\spline@end=\egroup + \let\splinefinish@=\splinefinish@@ + \let\splinewhich=\relax + \global\let\splineadvance@=\splineadvance@@ + \global\let\splinegoal@=\splineRecordEndBreakValue@ + \global\splinelength@=\z@ + \let\splinerec@=\splineErec@ + \global\let\splineEndtest=\splineEndtest@ + \bgroup \splined@@ } +\xydef@\splinefindBEnd@{\bgroup\bgroup + \splinereverse@ \readsplineparams@ + \global\splineval@=\z@ } +\xydef@\splineRecordValue@{% + \ifx\unknown\segmentnum@\relax + \else + \getcrvsegsnum@ + \dimen@=\splineval@ \advance\dimen@ \segmentnum@\p@ + \advance\dimen@-\p@ \dimen@nth\count@\dimen@ + \global\splineval@=\dimen@ + \fi + \xdef\splineedges@{\splineedges@\the\splinelength@;\the\splineval@,}% +\splinetrace@{found edge: \splineedges@}} +\xydef@\splineRecordEndValue@{% + \ifx\unknown\segmentnum@\relax + \else + \getcrvsegsnum@ + \dimen@=\splineval@ \advance\dimen@ \count@\p@ + \advance\dimen@-\segmentnum@\p@ \dimen@nth\count@\dimen@ + \global\splineval@=\dimen@ + \fi + \xdef\splineedges@{\splineedges@\the\splinelength@;\the\splineval@,}% +\splinetrace@{found edge: \splineedges@}} +\xydef@\splineRecordBreakValue@{% + \ifx\unknown\segmentnum@\relax + \else\expandafter\advance\expandafter\splineval@\segmentnum@\p@ + \count@=\segmentnum@\relax + \ifnum\count@>0 \advance\splineval@-\p@ \fi\fi + \xdef\breakedges@{\breakedges@\the\splinelength@;\the\splineval@,}% + \global\let\spline@end=\egroup +\splinetrace@{found break edge: \breakedges@}} +\xydef@\splineRecordEndBreakValue@{% + \ifx\unknown\segmentnum@\relax + \else\count@=\segmentnum@\relax \ifnum\count@=\z@ + \else \getcrvsegsnum@ + \count@@=\count@ \advance\count@@-\segmentnum@\relax + \dimen@=\splineval@ \advance\dimen@ \count@@\p@ + \dimen@nth\count@\dimen@ + \global\splineval@=\dimen@ + \fi\fi + \ifdim\splineval@<\z@ \relax\splineval@=\z@ \fi + \ifx\breakedges@\relax\relax\else\ifx\breakedges@\empty\else + \ifdim\splineval@<\p@\relax \ifdim\splineval@>\z@ + \expandafter\testbreakedges@\breakedges@ @% + \fi\fi\fi\fi + \xdef\breakedges@{\breakedges@\the\splinelength@;\the\splineval@,}% + \global\let\spline@end=\egroup +\splinetrace@{found break edge: \breakedges@}} +\xydef@\testbreakedges@#1;#2,#3@{\bgroup \dimen@=#2\relax + \advance\dimen@\splineval@ \advance\dimen@-\p@ +\splinetrace@{testbreak: #1;#2,#3@ \the\splineval@::\the\dimen@}% + \DN@{\egroup}\ifdim\dimen@>\z@ + \edef\next@{\egroup\def\noexpand\breakedges@{#1;1pt,#3}}% + \else\ifdim\zz@\dimen@ + \edef\next@{\egroup\def\noexpand\breakedges@{#1;1pt,#3}}% + \fi \fi \next@ } +\xydef@\splineRecordBreakEValue{% + \ifdim\splineval@>\z@ + \splineval@=-\splineval@ \advance\splineval@\p@ \fi + \splineRecordBreakValue@ }% +\xydef@\xydist@#1#2{\ifdim#1>#2\relax + \quotient@@\tmp@#2#1\expandafter\dimen@ii\tmp@#2\relax + \ifdim\dimen@ii>.41422#1\relax + \dimen@=1.060665#1\advance\dimen@ .353555\dimen@ii\relax + \else \dimen@=#1\advance\dimen@.5\dimen@ii\fi + \else + \quotient@@\tmp@#1#2\expandafter\dimen@ii\tmp@#1\relax + \ifdim\dimen@ii>.41422#2\relax + \dimen@=1.060665#2\advance\dimen@ .353555\dimen@ii\relax + \else \dimen@=#2\advance\dimen@.5\dimen@ii\fi + \fi} +\xydef@\splineDadvance@{\splineadvance@@ + \expandafter\splineDadvance@@\splineDadvance@@@} +\xydef@\splineDadvance@@#1#2#3#4{% + {\d@X=#1\advance\d@X-#2\ifdim\d@X<\z@ \d@X=-\d@X\fi + \d@Y=#3\advance\d@Y-#4\ifdim\d@Y<\z@ \d@Y=-\d@Y\fi + \xydist@\d@X\d@Y + \global\advance\splinelength@\dimen@ +\splinetrace@{d=(\the\d@X,\the\d@Y): v=\the\splineval@: l=\the\splinelength@}% +}} +\xydef@\spline@end@{\lastsplinepoint@ \egroup \egroup + \ht\z@=\z@ \dp\z@=\z@ \wdz@=\z@ \boxz@}% +\gdef\splinetest@{\splineplot@true} +\xydef@\spline@end@@{\egroup \egroup} +\xydef@\splinefrec@{{% + \advance\splineval@\splinedepth@ +\splinetrace@{F:(\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c);; +\the\splineval@;\the\splinedepth@}% + \ifdim\dimen5=\splineval@ \aftergroup\splinefinishf@ + \else \dimen@=\dimen5\advance\dimen@-\splineval@ + \ifdim\dimen@<\z@ \dimen@=-\dimen@ \fi + \ifdim\dimen@<.0001\p@ \aftergroup\splinefinishf@ + \else + \ifdim\dimen5<\splineval@\aftergroup\splinedecast@@ + \else \aftergroup\splineadvance@ + \fi\fi\fi}} +\xydef@\splinefinishf@{\global\advance\splineval@\splinedepth@ + \splinefinish@}% +\xydef@\spline@find#1#2#3{% +\splinetrace@{spline@find #1 #2 #3}% + \readsplineparams@ + \global\let\splinefinish@=\splinefinish@@ + \global\let\splinegoal@=\splinef@pt + \global\let\splinepoint=\relax + \dimen@=#1\relax\dimen@ii=#2\relax + \ifdim\dimen@ii=\z@ \def\postfind@{}% + \else\def\postfind@{}% + \ifdim\dimen@ii<\z@ \splinereverse@ + \readsplineparams@ +\splinetrace@{reverse orientation: (\the\X@p,\the\Y@p),(\the\X@c,\the\Y@c)}% + \dimen@=#1\relax\dimen@ii=#2\relax + \multiply\dimen@\m@ne \advance\dimen@\p@ \multiply\dimen@ii\m@ne + \def\postfind@{\d@X=-\the\d@X \d@Y=-\the\d@Y \noexpand\reversesplineval@}% + \fi\fi + \expandafter\splinetrace@\expandafter{\xysplineparams@}% + \edef\next@{\noexpand\spline@@find{\the\dimen@}{\the\dimen@ii}{#3}}% + \next@ } +\xydef@\reversesplineval@{\splineval@=-\splineval@ \advance\splineval@\p@ } +\xydef@\spline@@find#1#2#3{% +\splinetrace@{spline@@find #1 #2 #3}% + \let\splinerec@=\splinefrec@ + \global\let\splineadvance@=\splineadvance@@ + \dimen5=#1\relax + \ifdim #2=\z@\relax + \ifdim #1=\z@\relax \bgroup + \let\splined@@=\spline@@knot + \global\splineval@=\m@ne\p@ + \else\ifdim #1=\p@\relax \bgroup + \let\splined@@=\spline@@knot + \global\splineval@=\z@ + \else + \global\splineval@=\z@ + \global\let\splineadvance@=\splineadvance@@ + \DN@{#3}\ifx\next@\empty \setsplinetest@\splineval@>{#1}{}% + {{\ifdim\splineval@=\dimen5\aftergroup\splineplot@false\fi}}% + \else\DNii@{>}\ifx\next@\nextii@ + \setsplineundertest@\splineval@>{#1}{}{}% + \let\splinerec@=\splineBSrec@ + \else\DNii@{<}\ifx\next@\nextii@ + \setsplineundertest@\splineval@>{#1}{}{}% + \let\splinerec@=\splineBErec@ + \else\xywarning@{unknown find-mode: #3}\fi\fi\fi + \fi\fi + \else + \global\splineval@=\z@ + \def\splineslidetest@@{% + \setsplinetest@\splinelength@<{#2}{}{}}% + \let\splinefinish@=\splinefcontinue@ + \fi + \let\spline@end=\splinef@end + \let\splinepoint@=\relax + \splinelength@=\z@ + \def\spline@start{\bgroup\xylowtolerance@}% + \splined@@ } +\xydef@\spline@@knot{% + \let\setsplinedir@=\setsplineknotdir@ + \splinesetparams@\spline@start + \splinedepth@=\p@ + \global\dimen@i=\X@p \global\dimen3=\Y@p + \splinefinishf@ \spline@end \egroup } +\xydef@\splinefcontinue@{% +\splinetrace@{sliding... from (\the\X@c,\the\Y@c): val=\the\splineval@ }% + \global\let\splinerec@=\splinerec@@ + \global\splinelength@=\z@ + \global\splineval@=\splineval@ + \global\let\splinepoint=\splinefindtest@ + \global\let\splinegoal@=\splinef@pt + \global\let\splineadvance@=\splineDadvance@ + \global\let\splinefinish@=\splinefinish@@ + \splineslidetest@@ + } +\xydef@\splinefindtest@{% +\splinetrace@{SFT (\the\X@c,\the\Y@c); \the\splinelength@, \the\splineval@}% + {\splineplot@false\splinetest@ + \ifsplineplot@\expandafter\splinefinishf@\fi}} +\def\setsplineundertest@#1#2#3#4#5{% +\splinetrace@{setsplineundertest@: #1,#2,#3,#4,#5,}% + \DNii@{\gdef\splinetest@}% + \DN@##1\next{\def\tmp@{{\splineplot@false + \ifdim#1#2##1\relax #4\else\splineplot@true#5\fi }}}% + \next@#3\relax\next + \expandafter\nextii@\tmp@ } +\xydef@\splinef@end{\edef\tmp@{\egroup\splinelength@=\the\splinelength@}\tmp@} +\xydef@\splinef@pt{% + \ifdim\splineval@>\z@ +\splinetrace@{found: val=\the\splineval@;c:(\the\X@c,\the\Y@c)}% + \global\dimen@i=\X@c \global\dimen3=\Y@c + \else +\splinetrace@{found: val=\the\splineval@;p:(\the\X@p,\the\Y@p)}% + \fi + \setsplinedir@ \global\dimen5=\d@X \global\dimen7=\d@Y + \global\splineval@=\splineval@ + \aftergroup\splinefocus@ } +\def\setsplinetest@#1#2#3#4#5{% + \DNii@{\gdef\splinetest@}% + \DN@##1\next{\def\tmp@{{\splineplot@false \ifdim#1#2##1\relax + #4\else\splineplot@true#5\fi}}}% + \next@#3\relax\next + \expandafter\nextii@\tmp@ }% +\xydef@\splinefocus@{% + \d@X=\dimen5\relax \d@Y=\dimen7\relax \setsplinedir@ } +\xydef@\splinesegment@#1{} +\xydef@\xyprecurve@{} +\xydef@\xypostcurve@{} +\xydef@\splineset@{% +\splinetrace@{splineset@:}% + \ifx\bstartPLACE@\empty + \DN@{\xyprecurve@ + \edef\tmp@{\egroup \X@max=\the\X@max \X@min=\the\X@min + \Y@max=\the\Y@max \Y@min=\the\Y@min}\tmp@ \xypostcurve@ }% + \else + \DN@{\xyprecurve@ \xysplinespecialcases@ + \edef\tmp@{\egroup \X@max=\the\X@max \X@min=\the\X@min + \Y@max=\the\Y@max \Y@min=\the\Y@min}\tmp@ \xypostcurve@ }% + \fi + \next@ } +\xydef@\xysplinespecialcases@{% + \ifx\empty\xycrvdrop@ + \ifx\empty\xycrvconn@ \DN@{\splinesolid@}% + \else \DN@{ \dir{-}}\ifx\next@\xycrvconn@ \DN@{\splinesolid@}% + \else \DN@{ \dir 2{-}}\ifx\next@\xycrvconn@ \DN@{\splinedoubled@}% + \else \DN@{ \dir{=}}\ifx\next@\xycrvconn@ \DN@{\splineribboned@}% + \else \DN@{ \dir {2.}}\ifx\next@\xycrvconn@ \DN@{\splinedoubled@}% + \else \DN@{ \dir 3{-}}\ifx\next@\xycrvconn@ \DN@{\splinetrebled@}% + \else \DN@{ \dir {3.}}\ifx\next@\xycrvconn@ \DN@{\splinetrebled@}% + \else \DN@{ \dir{--}}\ifx\next@\xycrvconn@ \DN@{\splinedashed@}% + \else \DN@{ \dir{.}}\ifx\next@\xycrvconn@ \DN@{\splinedotted@}% + \else \DN@{ \dir{:}}\ifx\next@\xycrvconn@ \DN@{\splinedbldotted@}% + \else \ifdim\splinetol@>\z@ \else \splinedefaulttol@ \fi + \DN@{\splineset@@}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \else + \DN@{\splineset@@}% + \fi \ifInvisible@\DN@{}\fi \next@ } +\xydef@\splinesolid@{\setbox\splinebox@=\zerodot \def\xycrvdrop@{ }% + \def\xycrvconn@{}\splineset@@} +\xydef@\splinedoubled@{\splinedefaulttol@\def\xycrvdrop@{ }\def\splinedrop@{}% + \def\xycrvconn@{!C\dir2{.}}\splineset@@} +\xydef@\splineribboned@{\splinedefaulttol@\def\xycrvdrop@{ }\def\splinedrop@{}% + \def\xycrvconn@{!C\dir{:}}\splineset@@} +\xydef@\splinetrebled@{\splinedefaulttol@\def\xycrvdrop@{ }\def\splinedrop@{}% + \def\xycrvconn@{!C\dir3{.}}\splineset@@} +\xydef@\splinedashed@{\splinetol@=1.5pc \def\xycrvdrop@{ }% + \def\splinedrop@{}\edef\xycrvconn@{\noexpand!C\noexpand\dir{\addDASH@{}}}% + \splineset@@} +\xydef@\splinedotted@{\setbox\splinebox@=\zerodot \def\xycrvdrop@{ }% + \splinetol@=1.5\jot \def\xycrvconn@{}\splineset@@} +\xydef@\splinedbldotted@{\def\xycrvdrop@{ }\def\splinedrop@{}% + \splinetol@=1.5\jot \def\xycrvconn@{!C\dir{:}}\splineset@@} +\xydef@\splineset@@{% + \readsplineparams@ + \ifx\xycrvdrop@\empty \splinetol@=7.5\p@ + \def\splinedefaulttol@{\splinetol@=7.5\p@}\def\splinedrop@{}% + \else\edef\splinedefaulttol@{\splinetol@=\the\splinetol@}\fi + \ifx\xycrvconn@\empty \def\splineconn@{}\fi +\splinetrace@{set the curve: >\the\dimen5, <\the\dimen7}% + \global\let\splineadvance@=\splineadvance@@ + \let\splinerec@=\splineTrec@ + \def\splineStarttest{\splinetest@}% + \global\let\splinepoint=\relax + \let\spline@start=\spline@start@ + \let\spline@end=\spline@end@ + \ifdim\dimen7=\p@ + \gdef\splinecontinue{\splinesetting@ + \global\let\splinetest@=\splineplot@true}% + \else + \ifdim\dimen7=\tw@\p@ +%% \ifdim\bendPLACE@\p@=\z@ \emptyspline@ \else + \ifdim\bendPLACE@\p@=\p@ + \fi + \else + \xdef\splinecontinue{\noexpand\setsplinetest@ + \splineval@>{\the\dimen7}{\noexpand\splinebreakcancel@}{}% + \noexpand\splinesetting@ }% + \fi\fi + \ifdim\dimen7>\z@ \DN@{\splinesetting@\splinecontinue}% + \ifdim\zz@{\dimen5}% + \else + \edef\next@{\noexpand\setsplinetest@ + \splineval@<{\the\dimen5}{}% + {\noexpand\expandafter\noexpand\splinecontinue}% + \noexpand\splinesetting@ }% + \fi + \else\DN@{\dimen5=\p@}\fi + \next@ + \ifdim\dimen5=\p@\DN@{}\else\DN@{\splined@@}\fi \next@ + } +\xydef@\emptyspline@{\xywarning@{empty curve subsegment}% +\splinetrace@{bstartPLACE@=\bstartPLACE@, bendPLACE@=\bendPLACE@, + empty segment}% + \gdef\splinecontinue{\splinesetting@ + \global\let\splinetest@=\splineplot@false + \global\dimen5=\z@ }} +\xydef@\splineTrec@{{% + \advance\splineval@\splinedepth@ + \ifdim\dimen5=\splineval@ + \aftergroup\splinecontinue + \else \dimen@=\dimen5\advance\dimen@-\splineval@ + \ifdim\dimen@<\z@ \dimen@=-\dimen@ \fi + \ifdim\dimen@<.001\p@ + \aftergroup\splinecontinue + \else + \ifdim\dimen5<\splineval@\aftergroup\splinedecast@@ + \else \aftergroup\splineadvance@ + \fi\fi\fi}} +\xydef@\splinesetting@{\splinesetting@@} +\xydef@\splinesetting@@{% +\splinetrace@{splinesetting@@:}% + \ifdim\splinedepth@=\z@ \splinedepth@=\p@ \fi + \ifdim\splinedepth@=\p@ + \def\splinerec@{\global\let\splinerec@=\splinerec@@\splinedecast@@}% + \else \global\let\splinerec@=\splinerec@@ \fi + \gdef\splinepoint{\splineplotpt@}} +\xydef@\splineplotpt@{{\global\advance\dimen@i-\X@c + \splinetest@ \DN@{\splineglue@}\ifsplineplot@ + \DN@{\dosplineplotpt@}% + \fi \next@ \global\dimen@i=\X@c \global\dimen3=\Y@c }} +\xydef@\splineglue@{\hglue-\dimen@i +\splinetrace@{N:(\the\X@c,\the\Y@c);;\the\dimen@i;\the\dimen3% + ,\the\splinelength@,\the\splineval@,\the\splinedepth@}} +\xydef@\dosplineplotpt@{\ifdim\dimen@i<\z@ + \raise\Y@c\hbox to-\dimen@i{\hfill\splinedrop@}% + \else \kern-\dimen@i\raise\Y@c\hbox{\splinedrop@}\fi + \ifx\splineconn@\relax\else\raise\Y@c\hbox{% + \setboxz@h{\splineconn@}\Drop@@}\fi +\splinetrace@{P:(\the\X@c,\the\Y@c);;\the\dimen@i;\the\dimen3 + ,\the\splinelength@,\the\splineval@,\the\splinedepth@}} +\xydef@\splinefinish@@{\postspline@ \splinegoal@ \splinecancel@ } +\xydef@\splinecancel@{% + \global\let\splinerec@=\relax + \global\let\splinepoint=\relax + \global\let\splinecontinue=\relax + \global\let\splinedecast@=\relax + } +\xydef@\splinebreakcancel@{\bsplinecancel@ \splinecancel@} +\xydef@\bsplinecancel@{\gdef\lastbspline@{\leave@\leave@}% + \global\let\middlebspline@=\lastbspline@ } +\xydef@\splinegoal@{\ifdim\splineval@>\z@ + \global\dimen@i=\X@c \global\dimen3=\Y@c \fi + \global\splineval@=\splineval@ \global\splinelength@=\splinelength@ + \splinesetdir@ } +\xylet@\splinefinish@\splinefinish@@ +\xylet@\splinewhich\splineDwhich@ +\xydef@\squinewhich@{% + \ifdim\dimen5>\squinelength + \d@X=\X@c \d@Y=\Y@c \advance\d@X-\L@c \advance\d@Y-\U@c + \advance\squineval-\squinedepth + \else \X@c=\X@p \Y@c=\Y@p \advance\squineval-\squinedepth + \d@X=\L@c \d@Y=\U@c \advance\d@X-\X@p \advance\d@Y-\Y@p \fi + \d@X=-\d@X \d@Y=-\d@Y + \squinefinish} +\xydef@\squineDwhich@{% + \ifdim\dimen5>\squinelength + \d@X=\X@c \d@Y=\Y@c \advance\d@X-\L@c \advance\d@Y-\U@c + \else \X@c=\X@p \Y@c=\Y@p \advance\squineval-\squinedepth + \d@X=\L@c \d@Y=\U@c \advance\d@X-\X@p \advance\d@Y-\Y@p \fi + \d@X=-\d@X \d@Y=-\d@Y + \squinefinish} +\xydef@\xyquadbezier@{% + \global\let\splinerec@=\relax + \addtocrvpts@{\def\crvconnect@{\squineconnect@}}% + \xyquadmethods@ \let\splinesegment@=\squinesegment@ + \begingroup\setcrvobjects@ \xysplineparams@ \splined@@@ + \bgroup \setupsquine@ \squined@ \splineset@ \savespline@ } +\xydef@\xyquadmethods@{% + \def\crvconnect@{\squineconnect@}% + \def\splinereverse@@{\splinereverse@@@}% + \let\getsplineparams@=\getsquineparams@ + \let\spline@start@=\squine@start@ + \let\splinedecast@@=\squinedecast@ + \let\splinerec@@=\squinerec@ + \let\splined@@=\squined@@ + \let\splineIpt@@=\squineIpt@ + \let\splineIadvance@@=\squineIadvance@ + \let\splineinfo@=\squineinfo@ + \let\setsplinedir@=\setsquinedir@ + \let\splinetestcvxhull@=\squinetestcvxhull@ + \let\setsplineknotdir@=\setsquineknotdir@ + \let\splinereverse@=\squinereverse@ + \let\splineDadvance@@@=\squineDadvance@@@ + \let\splinesetparams@=\squinesetparams@ + \let\splineplot@maybe@@=\squineplot@maybe +} +\xydef@\squineconnect@{\splineconnect@ \crvconnect@@ + \let\splinesegment@=\squinesegment@ }% +\xydef@\squinesegment@#1{\xyquadmethods@ \def\segmentnum@{1}% + \setupsquine@ \squined@ } +\xydef@\setupsquine@{% + \xycontrolpt@\z@ \X@p=\X@c \Y@p=\Y@c + \xycontrolpt@\@ne \A@=\X@c \B@=\Y@c + \xycontrolpt@\tw@ + \ifdim \A@>\X@max + \dimen@=\X@p\advance\dimen@\A@ \dimen@half + \ifdim \dimen@>\X@max \X@max=\dimen@ \fi + \dimen@=\X@c\advance\dimen@\A@ \dimen@half + \ifdim \dimen@>\X@max \X@max=\dimen@ \fi + \else \ifdim \A@<\X@min + \dimen@=\X@p\advance\dimen@\A@ \dimen@half + \ifdim \dimen@<\X@min \X@min=\dimen@ \fi + \dimen@=\X@c\advance\dimen@\A@ \dimen@half + \ifdim \dimen@>\X@min \X@min=\dimen@ \fi + \fi\fi + \ifdim \B@>\Y@max + \dimen@=\Y@p\advance\dimen@\B@ \dimen@half + \ifdim \dimen@>\Y@max \Y@max=\dimen@ \fi + \dimen@=\Y@c\advance\dimen@\B@ \dimen@half + \ifdim \dimen@>\Y@max \Y@max=\dimen@ \fi + \else \ifdim \B@<\Y@min + \dimen@=\Y@p\advance\dimen@\B@ \dimen@half + \ifdim \dimen@<\Y@min \Y@min=\dimen@ \fi + \dimen@=\Y@c\advance\dimen@\B@ \dimen@half + \ifdim \dimen@>\Y@min \Y@min=\dimen@ \fi + \fi\fi } +\xydef@\squinedecast@{\halve@dimen\splinedepth@ + \R@c=\L@c \advance\L@c\X@p \halve@dimen\L@c + \advance\R@c\X@c \halve@dimen\R@c + \A@=\L@c \advance\A@\R@c \halve@dimen\A@ + \D@c=\U@c \advance\U@c\Y@p \halve@dimen\U@c + \advance\D@c\Y@c \halve@dimen\D@c + \B@=\U@c \advance\B@\D@c \halve@dimen\B@ + \begingroup \X@c=\A@ \Y@c=\B@ \splinerec@ \endgroup + \begingroup \X@c=\A@ \Y@c=\B@ \splinepoint \endgroup + \X@p=\A@ \L@c=\R@c \Y@p=\B@ \U@c=\D@c \splinerec@} +\xydef@\squinerec@{{\splinefar@false \splinenear@\X@p\X@c\Y@p\Y@c + \ifsplinefar@ \aftergroup\squinedecast@ + \else \aftergroup\splineadvance@ \fi}} +\xydef@\squineDadvance@@@{\X@p\L@c\Y@p\D@c} +\xydef@\squineplot@maybe{{\X@p=\L@c \Y@p=\U@c \cv@start \the\Edge@c\@ne + \ifInside@\aftergroup\splineplot@false\else\aftergroup\splineplot@true\fi}} +\xydef@\setsquinedir@{% + \d@X=\X@c \advance\d@X-\L@c \d@Y=\Y@c \advance\d@Y-\U@c + \dimen@=\ifdim\d@X<\z@-\fi\d@X \ifdim\dimen@<.02\p@ + \dimen@=\ifdim\d@Y<\z@-\fi\d@Y \ifdim\dimen@<.02\p@ + \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p \fi\fi + \ifdim\X@c=\X@p \ifdim\Y@c=\Y@p + \d@X=\L@c \advance\d@X-\X@p \d@Y=\U@c \advance\d@Y-\Y@p \fi\fi + \setupDirection@ii } +\xydef@\setsquineknotdir@{% + \ifdim\zz@\splineval@ \expandafter \setsquinezerodir@ + \else\expandafter \setsquinedir@ \fi } +\xydef@\setsquinezerodir@{% + \d@X=\L@c \advance\d@X-\X@p \d@Y=\U@c \advance\d@Y-\Y@p + \ifdim\zz@\d@X \ifdim\zz@\d@Y + \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p + \fi\fi \setupDirection@ii } +\xydef@\getsquineparams@#1,#2,#3,#4,#5,#6,#7,{% + \splinelength@=#1\relax\X@p=#2\relax\Y@p=#3\relax + \A@=#4\relax\B@=#5\relax\X@c=#6\relax\Y@c=#7\relax +} +\xydef@\squineinfo@{% +\expandafter\removePT@\the\X@c\space +\expandafter\removePT@\the\Y@c\space +\expandafter\removePT@\the\A@\space +\expandafter\removePT@\the\B@\space +\expandafter\removePT@\the\X@p\space +\expandafter\removePT@\the\Y@p\space +\expandafter\removePT@\the\dimen5\space\space +\expandafter\removePT@\the\dimen7\space + }% +\xydef@\squinereverse@{\readsplineparams@ + \expandafter\edef\xysplineparams@{\the\splinelength@,% + \the\X@c,\the\Y@c,\the\A@,\the\B@,\the\X@p,\the\Y@p,}}% +\xydef@\squine@start@{\setboxz@h\bgroup + \global\splinelength@=\z@ \global\dimen@i=\z@ \global\dimen3=\z@ + \kern\X@p + {\squinesetparams@ \X@c=\X@p \Y@c=\Y@p \firstsplinepoint@ + }\bgroup } +\xydef@\squinesetparams@{% + \global\dimen@i=\X@p \global\dimen3=\Y@p + \L@c=\A@ \U@c=\B@ \R@c=\L@c \D@c=\U@c }% +\xydef@\squined@{% + \expandafter\edef\xysplineparams@{% + \the\z@,\the\X@p,\the\Y@p,\the\A@,\the\B@,\the\X@c,\the\Y@c,}} +\xydef@\squined@@{% + \splinedepth@=\p@ + \global\splineval@=\z@ + \global\dimen@i=\X@p \global\dimen3=\Y@p + \spline@start + \ifx\splinerec@\relax \let\splinerec@=\squinerec@\fi + \L@c=\A@ \U@c=\B@ \R@c=\L@c \D@c=\U@c + \splinerec@ \spline@end } +\xydef@\xycubicbezier@{% + \addtocrvpts@{\def\crvconnect@{\cubicconnect@}}% + \xycubicmethods@ \let\splinesegment@=\cubicsegment@ + \begingroup \setcrvobjects@ \xysplineparams@ \splined@@@ + \bgroup \setupcubic@ \cubiced@ \splineset@ \savespline@ } +\xydef@\xycubicmethods@{% + \def\crvconnect@{\cubicconnect@}% + \def\splinereverse@@{\cubicreverse@@}% + \let\getsplineparams@=\getcubicparams@ + \let\spline@start@=\cubic@start@ + \let\splinedecast@@=\cubicdecast@ + \let\splinerec@@=\cubicrec@ + \let\splined@@=\cubiced@@ + \let\splineIpt@@=\cubicIpt@ + \let\splineIadvance@@=\cubicIadvance@ + \let\splineoutsidehull@@=\cubicoutsidehull@ + \let\splinetestcvxhull@=\cubictestcvxhull@ + \let\splineinfo@=\cubicinfo@ + \let\setsplinedir@=\setcubicdir@ + \let\setsplineknotdir@=\setcubicknotdir@ + \let\splinereverse@=\cubicreverse@ + \let\splineDadvance@@@=\cubicDadvance@@@ + \let\splinesetparams@=\cubicsetparams@ + \let\splineplot@maybe@@=\cubicplot@maybe + } +\xydef@\cubicconnect@{\splineconnect@ \crvconnect@@ + \let\splinesegment@=\cubicsegment@ }% +\xydef@\cubicsegment@#1{\xycubicmethods@ \def\segmentnum@{1}% + \setupcubic@ \cubiced@ } +\xydef@\setupcubic@{% + \xycontrolpt@\z@ \X@p=\X@c \Y@p=\Y@c + \xycontrolpt@\@ne \A@=\X@c \B@=\Y@c + \xycontrolpt@\tw@ \global\dimen3=\X@c \global\dimen5=\Y@c + \xycontrolpt@\thr@@ + \adjustmaxmin@ } +\xydef@\adjustmaxmin@{% + \ifdim \A@>\X@max \dimen@=\A@ \advance\dimen@\X@p \dimen@half + \ifdim\dimen@>\X@max \X@max=\dimen@ \fi \else + \ifdim \A@<\X@min \dimen@=\A@ \advance\dimen@\X@p \dimen@half + \ifdim\dimen@<\X@min \X@min=\dimen@ \fi \fi\fi + \ifdim \B@>\Y@max \dimen@=\B@ \advance\dimen@\Y@p \dimen@half + \ifdim\dimen@>\Y@max \Y@max=\dimen@ \fi \else + \ifdim \B@<\Y@min \dimen@=\B@ \advance\dimen@\Y@p \dimen@half + \ifdim\dimen@<\Y@min \Y@min=\dimen@ \fi \fi\fi + \ifdim \dimen3>\X@max \dimen@=\dimen3\advance\dimen@\X@c \dimen@half + \ifdim\dimen@>\X@max \X@max=\dimen@ \fi \else + \ifdim \dimen3<\X@min \dimen@=\dimen3\advance\dimen@\X@c \dimen@half + \ifdim\dimen@<\X@min \X@min=\dimen@ \fi \fi\fi + \ifdim \dimen5>\Y@max \dimen@=\dimen5\advance\dimen@\Y@c \dimen@half + \ifdim\dimen@>\Y@max \Y@max=\dimen@ \fi \else + \ifdim \dimen5<\Y@min \dimen@=\dimen5\advance\dimen@\Y@c \dimen@half + \ifdim\dimen@<\Y@min \Y@min=\dimen@ \fi \fi\fi + \dimen@=\A@ \advance\dimen@\dimen3 \dimen@half + \ifdim\dimen@>\X@max \X@max=\dimen@ + \else \ifdim\dimen@<\X@min \X@min=\dimen@ \fi\fi + \dimen@=\B@ \advance\dimen@\dimen5 \dimen@half + \ifdim\dimen@>\Y@max \Y@max=\dimen@ + \else \ifdim\dimen@<\Y@min \Y@min=\dimen@ \fi\fi +} +\xydef@\cubicdecast@{\halve@dimen\splinedepth@ + \A@=\L@c \advance\A@\R@c \halve@dimen\A@ + \advance\R@c\X@c \halve@dimen\R@c + \B@=\U@c \advance\B@\D@c \halve@dimen\B@ + \advance\D@c\Y@c \halve@dimen\D@c + \advance\L@c\X@p \halve@dimen\L@c + \advance\U@c\Y@p \halve@dimen\U@c + \begingroup + \X@c=\R@c \advance\X@c\L@c \halve@dimen\X@c + \advance\X@c\A@ \halve@dimen\X@c + \Y@c=\D@c \advance\Y@c\U@c \halve@dimen\Y@c + \advance\Y@c\B@ \halve@dimen\Y@c + \R@c=\L@c \advance\R@c\A@ \halve@dimen\R@c + \D@c=\U@c \advance\D@c\B@ \halve@dimen\D@c + \bgroup \splinerec@ + \egroup \splinepoint \endgroup + \X@p=\L@c \advance\X@p\R@c \halve@dimen\X@p + \advance\X@p\A@ \halve@dimen\X@p + \L@c=\R@c \advance\L@c\A@ \halve@dimen\L@c + \Y@p=\U@c \advance\Y@p\D@c \halve@dimen\Y@p + \advance\Y@p\B@ \halve@dimen\Y@p + \U@c=\D@c \advance\U@c\B@ \halve@dimen\U@c + \splinerec@ } +\xydef@\cubicrec@{{\splinefar@false \splinenear@\X@p\X@c\Y@p\Y@c + \ifsplinefar@ \aftergroup\cubicdecast@ + \else \aftergroup\splineadvance@ \fi}} +\xydef@\cubicDadvance@@@{\X@p\X@c\Y@p\Y@c} +\xydef@\cubicplot@maybe{{\X@p=\L@c \Y@p=\U@c \cv@start \the\Edge@c\@ne + \ifInside@\aftergroup\cubicplot@maybeii\else\aftergroup\splineplot@true\fi}} +\xydef@\cubicplot@maybeii{{\X@p=\R@c \Y@p=\D@c \cv@start \the\Edge@c\@ne + \ifInside@\aftergroup\splineplot@false\else\aftergroup\splineplot@true\fi}} +\xydef@\cubiced@@{% + \splinedepth@=\p@ + \global\splineval@=\z@ + \spline@start + \global\dimen@i=\X@p \global\dimen3=\Y@p + \splinerec@ \spline@end } +\xydef@\setcubicdir@{% + \ifdim\splinedepth@<.001\p@\DN@{\cubiccoarsedir@}% + \else\DN@{\cubicfinedir@}\fi \next@ } +\xydef@\cubicfinedir@{% + \d@X=\X@c \advance\d@X-\R@c \d@Y=\Y@c \advance\d@Y-\D@c + \ifdim\zz@\d@X \ifdim\zz@\d@Y + \d@X=\X@c \advance\d@X-\L@c \d@Y=\Y@c \advance\d@Y-\U@c + \ifdim\zz@\d@X \ifdim\zz@\d@Y + \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p + \fi\fi \fi\fi + \setupDirection@ii +\splinetrace@{dir:(\the\d@X,\the\d@Y),\the\Direction; depth:\the\splinedepth@}% +} +\xydef@\cubiccoarsedir@{% + \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p \setupDirection@ii + \global\dimen5=\d@X \global\dimen7=\d@Y +\splinetrace@{dir:(\the\d@X,\the\d@Y),\the\Direction; depth:\the\splinedepth@}% +} +\xydef@\setcubicknotdir@{% + \ifdim\zz@\splineval@ \DN@{\setcubiczerodir@}% + \else \DN@{\cubicfinedir@}\fi \next@ } +\xydef@\setcubiczerodir@{% + \d@X=\L@c \advance\d@X-\X@p \d@Y=\U@c \advance\d@Y-\Y@p + \ifdim\zz@\d@X \ifdim\zz@\d@Y + \d@X=\R@c \advance\d@X-\X@p \d@Y=\D@c \advance\d@Y-\Y@p + \ifdim\zz@\d@X \ifdim\zz@\d@Y + \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p + \fi\fi \fi\fi \setupDirection@ii } +\xydef@\getcubicparams@#1,#2,#3,#4,#5,#6,#7,#8,#9,{% + \splinelength@=#1\relax\X@p=#2\relax\Y@p=#3\relax\L@c=#4\relax + \U@c=#5\relax\R@c=#6\relax\D@c=#7\relax\X@c=#8\relax\Y@c=#9\relax +}% +\xydef@\cubicinfo@{% +\expandafter\removePT@\the\X@p\space +\expandafter\removePT@\the\Y@p\space +\expandafter\removePT@\the\L@c\space +\expandafter\removePT@\the\U@c\space +\expandafter\removePT@\the\R@c\space +\expandafter\removePT@\the\D@c\space +\expandafter\removePT@\the\X@c\space +\expandafter\removePT@\the\Y@c\space +\expandafter\removePT@\the\dimen5\space\space +\expandafter\removePT@\the\dimen7\space + }% +\xydef@\cubicreverse@{\readsplineparams@ + \expandafter\edef\xysplineparams@{\the\splinelength@,% + \the\X@c,\the\Y@c,\the\R@c,\the\D@c,\the\L@c,\the\U@c,\the\X@p,\the\Y@p,}}% +\xydef@\cubicreverse@@{% + \splinereverse@@@ + \dimen@ii=\L@c \L@c=\R@c \R@c=\dimen@ii + \dimen@ii=\U@c \U@c=\D@c \D@c=\dimen@ii } +\xydef@\cubic@start@{\setboxz@h\bgroup + \global\splinelength@=\z@ \global\dimen@i=\z@ \global\dimen3=\z@ + \kern\X@p + {\cubicsetparams@ \X@c=\X@p \Y@c=\Y@p \R@c=\X@c \D@c=\Y@c + \firstsplinepoint@ }\bgroup +} +\xydef@\cubicsetparams@{% + \expandafter\expandafter\expandafter\getsplineparams@\xysplineparams@ + \global\dimen@i=\X@p \global\dimen3=\Y@p } +\xydef@\cubiced@{% + \expandafter\edef\xysplineparams@{\the\z@,\the\X@p,\the\Y@p + ,\the\A@,\the\B@,\the\dimen3,\the\dimen5,\the\X@c,\the\Y@c,}% + }% +\xydef@\xybspline@iii{% + \addtocrvpts@{\def\crvconnect@{\bsplineiiiconnect@}}% + \def\crvconnect@{\bsplineiiiconnect@}\xybsplinemethods@ + \let\splinesegment@=\bsplinesegment@iii + \begingroup\setcrvobjects@ \dobspline@ \savespline@ } +\xydef@\bsplineiiiconnect@{\splineconnect@ \crvconnect@@ + \let\splinesegment@=\bsplinesegment@iii }% +\xydef@\xybspline@iv{% + \addtocrvpts@{\def\crvconnect@{\bsplineivconnect@}}% + \def\crvconnect@{\bsplineivconnect@}\xybsplinemethods@ + \let\splinesegment@=\bsplinesegment@iv + \begingroup\setcrvobjects@ \dobspline@ \savespline@ } +\xydef@\bsplineivconnect@{\splineconnect@ \crvconnect@@ + \let\splinesegment@=\bsplinesegment@iv }% +\xydef@\xybspline@{% +\splinetrace@{B-spline with \numcontrolpts\space control points.}% + \addtocrvpts@{\def\crvconnect@{\bsplineconnect@}}% + \def\crvconnect@{\bsplineconnect@}\xybsplinemethods@ + \let\splinesegment@=\bsplinesegment@ + \begingroup\setcrvobjects@ + \dobspline@ \savespline@ } +\xydef@\xybsplinemethods@{% + \def\splinereverse@@{\cubicreverse@@}% + \let\getsplineparams@=\getbsplineparams@ + \let\spline@start@=\cubic@start@ + \let\splinedecast@@=\cubicdecast@ + \let\splinerec@@=\cubicrec@ + \let\splineIpt@@=\cubicIpt@ + \let\splineIadvance@@=\cubicIadvance@ + \let\splined@@=\bsplined@@ + \let\splineinfo@=\cubicinfo@ + \let\setsplinedir@=\setcubicdir@ + \let\setsplineknotdir@=\setcubicknotdir@ + \let\splinereverse@=\cubicreverse@ + \let\splineDadvance@@@=\cubicDadvance@@@ + \let\splinesetparams@=\cubicsetparams@ + \global\let\lastbspline@=\lastbspline@@ + \global\let\middlebspline@=\middlebspline@@ +} +\xydef@\bsplined@@{% + \splinedepth@=\p@ + \global\splineval@=\z@ + \spline@start + \global\dimen@i=\X@p \global\dimen3=\Y@p + \splinerec@ \spline@end } +\xydef@\bsplineconnect@{\splineconnect@ \crvconnect@@ + \let\splinesegment@=\bsplinesegment@ }% +\xydef@\getbsplineparams@{\getcubicparams@} +\xydef@\dobspline@{\xysplineparams@ \scanbspline@ \firstbspline@ }% +\xydef@\firstbspline@{% + \enter@{\pfromthep@ \cfromthec@}\enter@{\cfromthec@}\bgroup + \def\segmentnum@{1}\xycontrolpt@\z@ \X@p=\X@c \Y@p=\Y@c +\splinetrace@{0: \the\X@p, \the\Y@p}% + \xycontrolpt@\@ne \A@=\X@c \B@=\Y@c +\splinetrace@{1: \the\X@c, \the\Y@c}% + \xycontrolpt@\tw@ +\splinetrace@{2: \the\X@c, \the\Y@c}% + \dimen@=\X@c \advance\dimen@\A@ \dimen@half + \global\dimen3=\dimen@ + \dimen@=\Y@c \advance\dimen@\B@ \dimen@half + \global\dimen5=\dimen@ + \xycontrolpt@{3}% +\splinetrace@{3: \the\X@c, \the\Y@c}% + \expandafter\count@\xycrvcnt@\relax + \ifnum\count@=3\relax + \advance\X@c-\A@ \dimen@nth4\X@c + \advance\X@c\dimen3\relax + \advance\Y@c-\B@ \dimen@nth4\Y@c + \advance\Y@c\dimen5\relax + \enter@{\X@p=\the\X@c \Y@p=\the\Y@c \crv@cnt@=\@ne\relax + \noexpand\lastbspline@ }% + \else + \advance\X@c 7\dimen3 \advance\X@c-2\A@ + \dimen@nth6\X@c + \advance\Y@c 7\dimen5 \advance\Y@c-2\B@ + \dimen@nth6\Y@c + \enter@{\X@p=\the\X@c \Y@p=\the\Y@c \crv@cnt@=\@ne\relax + \noexpand\middlebspline@ }% + \fi \adjustmaxmin@ \czeroEdge@ + \bsplined@ \splineset@ \leave@ } +\xydef@\lastbspline@@{\bgroup + \advance\crv@cnt@\@ne \edef\segmentnum@{\the\crv@cnt@}% +\splinetrace@{<: \the\X@p, \the\Y@p}% + \advance\crv@cnt@\@ne \xycontrolpt@{\crv@cnt@}% + \global\dimen3=\X@c \global\dimen5=\Y@c +\splinetrace@{\the\crv@cnt@: \the\X@c, \the\Y@c}% + \advance\crv@cnt@\m@ne \xycontrolpt@{\crv@cnt@}% +\splinetrace@{\the\crv@cnt@: \the\X@c, \the\Y@c}% + \A@=\X@c \advance\A@\dimen3 \halve@dimen\A@ + \B@=\Y@c \advance\B@\dimen5 \halve@dimen\B@ + \adjustmaxmin@ \leave@ \relax \cv@end +\splinetrace@{>: \the\X@c, \the\Y@c}% + \bsplined@ \splineset@ \leave@ }% +\xylet@\lastbspline@=\lastbspline@@ +\xydef@\middlebspline@@{% + \advance\crv@cnt@\@ne \edef\segmentnum@{\the\crv@cnt@}% +\splinetrace@{<: \the\X@p, \the\Y@p}% + \bgroup + \xycontrolpt@{\crv@cnt@}\A@=2\X@c \B@=2\Y@c +\splinetrace@{\the\crv@cnt@: \the\X@c, \the\Y@c}% + \advance\crv@cnt@\@ne \xycontrolpt@{\crv@cnt@}% +\splinetrace@{\the\crv@cnt@: \the\X@c, \the\Y@c}% + \advance\A@\X@c \dimen@nth3\A@ + \advance\B@\Y@c \dimen@nth3\B@ + \advance\X@c\A@ \halve@dimen\X@c + \advance\Y@c\B@ \halve@dimen\Y@c + \global\dimen3=\X@c \global\dimen5=\Y@c + \advance\crv@cnt@\@ne \xycontrolpt@{\crv@cnt@}% +\splinetrace@{\the\crv@cnt@: \the\X@c, \the\Y@c}% + \expandafter\count@\xycrvcnt@\relax + \ifnum\crv@cnt@<\count@\relax + \advance\X@c 7\dimen3\advance\X@c-2\A@ + \dimen@nth6\X@c + \advance\Y@c 7\dimen5\advance\Y@c-2\B@ + \dimen@nth6\Y@c + \enter@{\X@p=\the\X@c \Y@p=\the\Y@c \crv@cnt@=\segmentnum@\relax + \noexpand\middlebspline@}% + \else + \advance\X@c-\A@ \dimen@nth4\X@c + \advance\X@c \dimen3\relax + \advance\Y@c-\B@ \dimen@nth4\Y@c + \advance\Y@c \dimen5\relax + \enter@{\X@p=\the\X@c \Y@p=\the\Y@c \noexpand\lastbspline@}% + \fi \adjustmaxmin@ + \bsplined@ \splineset@ \leave@ } +\xylet@\middlebspline@=\middlebspline@@ +\xydef@\scanbspline@{\splined@@@} +\xydef@\bsplined@{\cubiced@ + \expandafter\ifx\xysplineedges@\relax\relax\DN@{}% + \else\DN@{\adjustbsplineedges@}\fi \next@ } +\xydef@\adjust@forsegments@{\getcrvsegsnum@ + \ifnum\count@>\@ne +\splinetrace@{adjust for \the\count@\space segments: + \the\dimen5, \the\dimen7}% + \multiply\dimen5 by \count@\relax \dimen@=\segmentnum@\p@ + \ifnum\dimen5>\dimen@ \relax\dimen5=\p@ + \else \advance\dimen5-\segmentnum@\p@ \advance\dimen5 by\p@ \fi + \ifnum\dimen5<\z@ \relax\dimen5=\z@\relax\fi + \multiply\dimen7 by \count@\relax + \dimen@=\segmentnum@\p@ + \ifnum\dimen7<\dimen@ \advance\dimen@-\p@ + \ifnum\dimen7>\dimen@ \advance\dimen7-\dimen@ + \else \dimen7=\z@ \fi + \else \dimen7=\p@ \fi +\splinetrace@{adjusted for \the\count@\space segments: + \the\dimen5, \the\dimen7}% + \fi} +\xydef@\adjustbsplineedges@{\bgroup +\splinetrace@{** adjusting edges **}% + \readsplineparams@ \adjust@forsegments@ +\splinetrace@{params:\xysplineparams@}% +\splinetrace@{segment \segmentnum@:<\the\dimen5,\the\dimen7>:\xysplineedges@}% + \multiply\dimen7by\m@ne \advance\dimen7by\p@ + \expandafter\edef\xysplineedges@{% + \noexpand\z@;\the\dimen5,\noexpand\z@;\the\dimen7,}% + \edef\tmp@{\egroup + \noexpand\def\expandafter\noexpand\xysplineedges@{\xysplineedges@}}% + \tmp@ } +\xydef@\bsegment@@ii@iii{% + \xycontrolpt@{\count@@}\global\dimen3=\X@c \global\dimen5=\Y@c +\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}% + \advance\count@@\@ne \xycontrolpt@{\count@@}\A@=\X@c \B@=\Y@c + \advance\A@ by2\dimen3 \dimen@nth3\A@ + \advance\B@ by2\dimen5 \dimen@nth3\B@ + \dimen@=\dimen3 \advance\dimen@ by2\X@c + \dimen@nth3\dimen@ + \global\dimen3=\dimen@ + \dimen@=\dimen5 \advance\dimen@ by2\Y@c + \dimen@nth3\dimen@ + \global\dimen5=\dimen@ +\splinetrace@{<: \the\dimen3, \the\dimen5}% +\splinetrace@{>: \the\A@, \the\B@}% + \advance\count@@\m@ne } +\xydef@\bsegment@@i{\bgroup + \advance\count@@\m@ne \xycontrolpt@{\count@@}% +\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}% + \edef\tmp@{\egroup \X@p=\the\X@c \Y@p=\the\Y@c}\tmp@ + \advance\X@p-2\dimen3\advance\X@p by7\A@ + \dimen@nth6\X@p + \advance\Y@p-2\dimen5\advance\Y@p by7\B@ + \dimen@nth6\Y@p +} +\xydef@\bsegment@@iv{% + \advance\count@@\tw@ \xycontrolpt@{\count@@}% +\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}% + \advance\X@c by7\dimen3\advance\X@c-2\A@ + \dimen@nth6\X@c + \advance\Y@c by7\dimen5\advance\Y@c-2\B@ + \dimen@nth6\Y@c +\splinetrace@{>>: \the\X@c, \the\Y@c }% +} +\xydef@\bsegment@@ii@i{\bgroup + \advance\count@@\m@ne \xycontrolpt@{\count@@}% +\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}% + \edef\tmp@{\egroup \X@p=\the\X@c \Y@p=\the\Y@c}\tmp@ + \advance\X@p-\dimen3\advance\X@p by4\A@ + \dimen@nth4\X@p + \advance\Y@p-\dimen5\advance\Y@p by4\B@ + \dimen@nth4\Y@p +\splinetrace@{<<: \the\X@p, \the\Y@p}% +} +\xydef@\bsegment@@y@iv{% + \advance\count@@\tw@ \xycontrolpt@{\count@@}% +\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}% + \advance\X@c by4\dimen3\advance\X@c-\A@ + \dimen@nth4\X@c + \advance\Y@c by4\dimen5\advance\Y@c-\B@ + \dimen@nth4\Y@c +} +\xydef@\bsegment@i{% + \xycontrolpt@\z@ \X@p=\the\X@c \Y@p=\the\Y@c +\splinetrace@{0: \the\X@p \the\Y@p}% + \xycontrolpt@\@ne +\splinetrace@{1: \the\X@c, \the\Y@c}\A@=\X@c \B@=\Y@c + \xycontrolpt@\tw@ + \dimen@=\X@c \advance\dimen@\A@ \dimen@half + \global\dimen3=\dimen@ +\splinetrace@{2: \the\X@c, \the\Y@c}% + \dimen@=\Y@c \advance\dimen@\B@ \dimen@half + \global\dimen5=\dimen@ } +\xydef@\bsegment@i@iv{% + \xycontrolpt@{3}% +\splinetrace@{3: \the\X@c, \the\Y@c}% + \advance\X@c by7\dimen3\advance\X@c-2\A@ + \dimen@nth6\X@c + \advance\Y@c by7\dimen5\advance\Y@c-2\B@ + \dimen@nth6\Y@c + } +\xydef@\bsegment@z{% + \expandafter\count@@\xycrvptsnum@ \advance\count@@\@ne + \xycontrolpt@{\the\count@@}\relax +\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}% + \advance\count@@\m@ne + \bgroup + \xycontrolpt@{\the\count@@}% +\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}% + \global\dimen3=\X@c \global\dimen5=\Y@c + \advance\count@@\m@ne \xycontrolpt@{\the\count@@}% +\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}% + \A@=\X@c \advance\A@\dimen3 \halve@dimen\A@ + \B@=\Y@c \advance\B@\dimen5 \halve@dimen\B@ + \edef\tmp@{\egroup \A@=\the\A@ \B@=\the\B@ \count@@=\the\count@@}% + \tmp@ } +\xydef@\bsegment@z@i{% + \expandafter\count@@\xycrvptsnum@\relax\advance\count@@-\tw@ + \bgroup + \xycontrolpt@{\count@@}\X@p=\the\X@c \Y@p=\the\Y@c +\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}% + \advance\X@p by7\A@ \advance\X@p-2\dimen3 \dimen@nth6\X@p + \advance\Y@p by7\B@ \advance\Y@p-2\dimen5 \dimen@nth6\Y@p + \edef\tmp@{\egroup \X@p=\the\X@p \Y@p=\the\Y@p}% + \tmp@ } +\xydef@\bsplinesegment@#1{\xybsplinemethods@ + \count@@=#1\relax + \ifnum\count@@=\@ne + \bsegment@i \bsegment@i@iv + \else\ifnum\count@@=\tw@ + \bsegment@@ii@iii \bsegment@@ii@i \bsegment@@iv + \else\expandafter\count@\xycrvptsnum@\advance\count@\m@ne + \ifnum\count@@=\count@ + \bsegment@z \bsegment@z@i + \else\advance\count@\m@ne + \ifnum\count@@=\count@ + \bsegment@@ii@iii \bsegment@@i \bsegment@@y@iv + \else + \bsegment@@ii@iii \bsegment@@i \bsegment@@iv + \fi\fi\fi\fi + \expandafter\def\expandafter\segmentnum@\expandafter{\number#1}% + \bsplined@ } +\xydef@\bsplinesegment@iii#1{\xybsplinemethods@ +\splinetrace@{2 segments; \number#1}% + \count@@=#1\relax + \ifnum\count@@=\@ne \bsegment@i + \xycontrolpt@{3}% +\splinetrace@{3: \the\X@c, \the\Y@c}% + \advance\X@c 4\dimen3\advance\X@c-\A@ + \dimen@nth4\X@c + \advance\Y@c 4\dimen5\advance\Y@c-\B@ + \dimen@nth4\Y@c + \else\ifnum\count@@=\tw@ \bsegment@z + \bgroup\xycontrolpt@{\@ne}% +\splinetrace@{1: \the\X@c, \the\Y@c}% + \edef\tmp@{\egroup \X@p=\the\X@c \Y@p=\the\Y@c}\tmp@ + \advance\X@p 4\A@ \advance\X@p-\dimen3 + \dimen@nth4\X@p + \advance\Y@p 4\B@ \advance\Y@p-\dimen5 + \dimen@nth4\Y@p + \fi\fi + \expandafter\def\expandafter\segmentnum@\expandafter{\number#1}% + \bsplined@ } +\xydef@\bsplinesegment@iv#1{\xybsplinemethods@ +\splinetrace@{3 segments; \number#1}% + \count@@=#1\relax + \ifnum\count@@=\@ne \bsegment@i \bsegment@i@iv + \else\ifnum\count@@=\tw@ + \bsegment@@ii@iii \bsegment@@ii@i \bsegment@@y@iv + \else\ifnum\count@@=3\relax + \bsegment@z \bsegment@z@i + \fi\fi\fi + \expandafter\def\expandafter\segmentnum@\expandafter{\number#1}% + \bsplined@ } +\message{circles,} +\xydef@\Circmagic@@{0.5517847} +\xylet@\Circmagic=\Circmagic@@ +\xydef@\twoPi@{6.2831852} +\xydef@\fullPi@{3.1415926} +\xydef@\halfPi@{1.5707963} +\xynew@{dimen}\L@ +\xydef@\xycircle#1#{\hbox\bgroup\afterVECTORorEMPTY{% + \xy@@{\R@=\X@c \L@=\Y@c}\xycircle@}{\xy@@{\R@=\R@c \L@=\L@c}\xycircle@}#1@} +\xydef@\xycircle@#1@#2{% + \DN@{#1}\ifx\next@\empty\def\onlyQuad@{}\else \count@=#1\relax + \ifnum\count@<5 \advance\count@-3\relax + \ifnum\count@<\z@ \advance\count@ 4\relax\fi \edef\onlyQuad@{\the\count@}% + \else\xyerror@{illegal circle : must be or }{}\fi + \fi \xy@@{\def\circleSTYLE@{#2}}\def\circleSTYLE@{#2}\xycircle@i} +\xydef@\xycircle@i{\hbox{\vbox{\vskip\L@ + \hbox to2\R@{\hfill \buildcircle@ \hfill}\vskip\L@ }}% + \L@c=\R@ \R@c=\R@ \D@c=\L@ \U@c=\L@ \def\Leftness@{.5}\def\Upness@{.5}% + \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\relax}\Edge@c={\circleEdge}% + \OBJECT@x} +\xydef@\adjustMinMaxcirc@#1#2{% + \dimen@=\X@c \advance\dimen@#1\relax\ifdim\dimen@>\X@max \X@max=\dimen@\fi + \dimen@=\X@c \advance\dimen@-#1\relax\ifdim\dimen@<\X@min \X@min=\dimen@\fi + \dimen@=\Y@c \advance\dimen@#2\relax\ifdim\dimen@>\Y@max \Y@max=\dimen@\fi + \dimen@=\Y@c \advance\dimen@-#2\relax\ifdim\dimen@<\Y@min \Y@min=\dimen@\fi +} +%% \cubicCircleControls@@ +\xydef@\cubicCircleControls@@{\X@origin=\z@ \Y@origin=\z@ + \X@xbase=\R@ \Y@xbase=\z@ \X@ybase=\z@ \Y@ybase=\L@ + \vfromcartesian@@1,0@\czeroEdge@\idfromc@{0@c}% + \vfromcartesian@@0,1@\czeroEdge@\idfromc@{1@c}% + \vfromcartesian@@-1,0@\czeroEdge@\idfromc@{2@c}% + \vfromcartesian@@0,-1@\czeroEdge@\idfromc@{3@c}% + \vfromcartesian@@1,\Circmagic@@ @\czeroEdge@\idfromc@{1@m}% + \vfromcartesian@@\Circmagic@@,1@\czeroEdge@\idfromc@{2@m}% + \vfromcartesian@@-\Circmagic@@,1@\czeroEdge@\idfromc@{3@m}% + \vfromcartesian@@-1,\Circmagic@@ @\czeroEdge@\idfromc@{4@m}% + \vfromcartesian@@-1,-\Circmagic@@ @\czeroEdge@\idfromc@{5@m}% + \vfromcartesian@@-\Circmagic@@,-1@\czeroEdge@\idfromc@{6@m}% + \vfromcartesian@@\Circmagic@@,-1@\czeroEdge@\idfromc@{7@m}% + \vfromcartesian@@1,-\Circmagic@@ @\czeroEdge@\idfromc@{8@m}% + } +\xydef@\doCircleQuadrant@@#1#2{\save@ \ifcase#2\relax + \doCircleQuadrant@@@{0@c}{1@m}{2@m}{1@c}{#1}\or + \doCircleQuadrant@@@{1@c}{3@m}{4@m}{2@c}{#1}\or + \doCircleQuadrant@@@{2@c}{5@m}{6@m}{3@c}{#1}\or + \doCircleQuadrant@@@{3@c}{7@m}{8@m}{0@c}{#1}\or + \doCircleQuadrant@@@{0@c}{1@m}{2@m}{1@c}{#1}\or + \doCircleQuadrant@@@{1@c}{3@m}{4@m}{2@c}{#1}\or + \doCircleQuadrant@@@{2@c}{5@m}{6@m}{3@c}{#1}\or + \doCircleQuadrant@@@{3@c}{7@m}{8@m}{0@c}{#1}\fi \leave@ } +\xydef@\doCircleQuadrant@@@#1#2#3#4#5{% + \cfromid@{#1}\pfromc@\senter@ + \cfromid@{#2}\spushc@\cfromid@{#3}\spushc@\cfromid@{#4}% + \let\bstartPLACE@=\empty \connect@\crvs{#5}\relax\sinit@\sleave@ + \resetbreaks@} +\xydef@\dosolidcircle@#1{% + \cubicCircleControls@@ + \doCircleQuadrant@@{#1}1 \relax\Clast@@ + \doCircleQuadrant@@{#1}2 \relax\Clast@@ + \doCircleQuadrant@@{#1}3 \relax\Clast@@ + \doCircleQuadrant@@{#1}4 \relax\Clast@@}% +\xydef@\solidcircle@{\dosolidcircle@@} +\xylet@\dosolidcircle@@=\dosolidcircle@ +\xydef@\circledobjects@{\cubicCircleControls@@ + \setboxz@h{\expandafter\object\circleSTYLE@{}}% + \ifdim\L@>\R@ \dimen@ii=\ht\z@ \advance\dimen@ii \dp\z@ + \ifdim\zz@\dimen@ii \dimen@ii=\wdz@\fi + \else \dimen@ii=\wdz@ + \ifdim\zz@\dimen@ii \dimen@ii=\ht\z@ \advance\dimen@ii \dp\z@\fi + \fi \ifdim\zz@\dimen@ii \dimen@ii=2\jot\fi + \expandafter\dimen@\ifdim\L@>\R@ \twoPi@\L@\else \twoPi@\R@\fi + \advance\dimen@.5\dimen@ii + \count@@=\dimen@ \count@=\dimen@ii \divide\count@@\count@ + \edef\numobjects{\the\count@@}\dimen@=4\p@ + \dimen@nth\numobjects\dimen@ + \edef\circleseparation@{\expandafter\removePT@\the\dimen@}% + \edef\circleplace@{-\circleseparation@}\placeQuadrants@}% +\xydef@\placeQuadrants@{\DN@{\placeAllQuadrants@}% + \ifx\onlyQuad@\undefined\else\ifx\onlyQuad@\empty\else + \DN@{\expandafter\placeCircQuadrant@\expandafter{\onlyQuad@}}% + \fi\fi \next@ }% +\xydef@\placeAllQuadrants@{% + \placeCircQuadrant@{1}% + \advance\dimen@-\p@\advance\dimen@-\circleseparation@\p@ + \edef\circleplace@{\expandafter\removePT@\the\dimen@}% + \placeCircQuadrant@{2}% + \advance\dimen@-\p@\advance\dimen@-\circleseparation@\p@ + \edef\circleplace@{\expandafter\removePT@\the\dimen@}% + \placeCircQuadrant@{3}% + \advance\dimen@-\p@\advance\dimen@-\circleseparation@\p@ + \edef\circleplace@{\expandafter\removePT@\the\dimen@}% + \placeCircQuadrant@{4}} +\xydef@\placeCircQuadrant@#1{% + \let\bstartPLACE@=\relax \doCircleQuadrant@@{}#1% + \loop@ + \expandafter\dimen@\circleplace@\p@ + \advance\dimen@\circleseparation@\p@ + \edef\circleplace@{\expandafter\removePT@\the\dimen@}% + \ifdim\dimen@<\p@ \placeCircObject@ + \repeat@ } +\xydef@\placeCircObject@{\begingroup + \crvconnect@@ \Creset@@ \Invisible@false + \expandafter\splinealong@\expandafter{\circleplace@}% + \expandafter\drop\circleSTYLE@{}\endgroup } +\xydef@\buildcircle@{\save@ + \DNii@{\circledobjects@}% + \ifx\circleSTYLE@\empty\DNii@{\solidcircle@{}}% + \else \expandafter\DN@\expandafter{\addDASH@{}}\relax + \ifx\next@\circleSTYLE@ \DNii@{\solidcircle@{}}% + \else \expandafter\DN@\expandafter{\addEQ@{}}% + \ifx\next@\circleSTYLE@ + \expandafter\circletemplate@\expandafter{\addEQ@{}}{}% + \else \expandafter\DN@\expandafter{\addDASH@ 2}% + \ifx\next@\circleSTYLE@ \DNii@{\doublecircle@{}}% + \else \expandafter\DN@\expandafter{\addDASH@ 3}% + \ifx\next@\circleSTYLE@ \DNii@{\triplecircle@{}}% + \else \expandafter\expandafter\expandafter\DN@\expandafter\expandafter + \expandafter{\expandafter\addDASH@\addDASH@{}}% + \ifx\next@\circleSTYLE@ \DNii@{\dashedcircle@{}}% + \else \expandafter\expandafter\expandafter\DN@\expandafter\expandafter + \expandafter{\expandafter\addEQ@\addEQ@{}}% + \ifx\next@\circleSTYLE@ \expandafter\expandafter\expandafter + \circletemplate@\expandafter\expandafter\expandafter{% + \expandafter\addEQ@\addEQ@{}}2% + \else \expandafter\expandafter\expandafter\DN@\expandafter\expandafter + \expandafter{\expandafter\addEQ@\addEQ@2}% + \ifx\next@\circleSTYLE@ \expandafter\expandafter\expandafter + \circletemplate@\expandafter\expandafter\expandafter{% + \expandafter\addEQ@\addEQ@{}}2% + \else \expandafter\expandafter\expandafter\DN@\expandafter\expandafter + \expandafter{\expandafter\addEQ@\addEQ@3}% + \ifx\next@\circleSTYLE@ \expandafter\expandafter\expandafter + \circletemplate@\expandafter\expandafter\expandafter{% + \expandafter\addEQ@\addEQ@{}}3% + \else \expandafter\DN@\expandafter{\addDOT@{}}\relax + \ifx\next@\circleSTYLE@ \DNii@{\dottedcircle@{}}% + \else \expandafter\DN@\expandafter{\addDOT@2}\relax + \ifx\next@\circleSTYLE@ \DNii@{\dbldottedcircle@{}}% + \else \expandafter\DN@\expandafter{\addDOT@3}\relax + \ifx\next@\circleSTYLE@ \DNii@{\trpldottedcircle@{}}% + \else \DN@{:}\relax + \ifx\next@\circleSTYLE@ \DNii@{\dbldottedcircle@{}}% + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \nextii@ \leave@} +\xydef@\circletemplate@#1#2{\def\circleSTYLE@{\dir#2{#1}}} +\xydef@\doublecircle@#1{% + \advance\R@-\p@ \advance\L@-\p@ \solidcircle@{}% + \advance\R@ 2\p@ \advance\L@ 2\p@ \solidcircle@{}} +\xydef@\triplecircle@#1{% + \advance\R@-2\p@ \advance\L@-2\p@ \solidcircle@{}% + \advance\R@ 2\p@ \advance\L@ 2\p@ \solidcircle@{}% + \advance\R@ 2\p@ \advance\L@ 2\p@ \solidcircle@{}} +\xydef@\dottedcircle@#1{% + \expandafter\def\expandafter\circleSTYLE@\expandafter{% + \zerodot@i}% + \circledobjects@} +\xydef@\dashedcircle@#1{% + \expandafter\def\expandafter\circleSTYLE@\expandafter{\zerodash@i}% + \circledobjects@} +\xydef@\dbldottedcircle@#1{% + \advance\R@-\p@ \advance\L@-\p@ \dottedcircle@{}% + \advance\R@ 2\p@ \advance\L@ 2\p@ \dottedcircle@{}} +\xydef@\trpldottedcircle@{% + \advance\R@-2\p@ \advance\L@-2\p@ \dottedcircle@{}% + \advance\R@ 2\p@ \advance\L@ 2\p@ \dottedcircle@{}% + \advance\R@ 2\p@ \advance\L@ 2\p@ \dottedcircle@{}} +{\xyuncatcodes \gdef\next{=<.75\jot>{\zerodot}}} +\xylet@\zerodot@i=\next +{\dimen0=2\xydashl@ \xyuncatcodes +\expandafter\gdef\expandafter\next\expandafter{\expandafter + =\expandafter<\the\dimen0 >_\dir{|}}} +\xylet@\zerodash@i=\next +{\xyuncatcodes\gdef\next{--}} +\xylet@\dashcorntemp@@=\next +{\xyuncatcodes\gdef\next{.}} +\xylet@\dotcorntemp@@=\next +\xydef@\dotcorner@#1{% + \expandafter\circleCorner@\expandafter{\dotcorntemp@@}{#1}}% +\xydef@\dashcorner@#1{% + \expandafter\circleCorner@\expandafter{\dashcorntemp@@}{#1}} +\xydef@\circleCorner@#1#2{\setboxz@h\bgroup + \edef\next{#2\relax\R@=\the\R@\relax\L@=\R@ }% + \expandafter\xycircle@\next @{#1}% + \ifcase#2\or \setboxz@h{\lower\R@\boxz@\kern\X@c}% + \or \setboxz@h{\kern-\R@\lower\R@\boxz@\kern\R@\kern\X@c}% + \or \setboxz@h{\kern-\R@\lower\R@\boxz@\kern\R@\kern\X@c}% + \or \setboxz@h{\lower\R@\boxz@\kern\X@c}\fi + \wdz@=\R@ \ht\z@=\R@ \dp\z@=\R@ \boxz@ + } +\xydef@\qspline{\hbox\bgroup\crvresetbreaks@ \xy@spline@} +\xydef@\xy@spline@#1#{\if\sempty@ \DN@{\crvs@{}\resetbreaks@}% + \else\DN@{\xy@spline@i{#1}}\fi \next@ }% +\xydef@\xy@spline@i#1#2{\def\splineSTYLE@{#2}% + \DN@{\xy@spline@ii}\DNii@{#1}% + \ifx\nextii@\empty\DN@{\xy@spline@ii@@}\fi \next@ } +\xydef@\xy@spline@ii{\save@ \cfromp@\idfromc@{@p}% + \enter@\cplusthec@ \count@@=\s@top\advance\count@@\m@ne + \cfroms@{\count@@}\leave@ + \halve@dimen\X@c + \halve@dimen\Y@c + \czeroEdge@ \idfromc@{@c}% + \expandafter\doSplineStraight@\expandafter{\splineSTYLE@}% + \count@=\@ne \edef\next@{\the\count@}% + \ifx\next@\s@top\DN@{\xy@spline@iv}\else\DN@{\xy@spline@iii}\fi + \next@ } +\xylet@\xy@spline@ii@@=\xy@spline@ii +\xydef@\xy@spline@iii{\crv@cnt@=\s@top + \loop \advance\crv@cnt@\m@ne \xy@spline@g \ifnum\crv@cnt@>\@ne\repeat + \xy@spline@iv} +\xydef@\xy@spline@g{\cfromid@{@c}\idfromc@{@p}% + \count@@=\crv@cnt@\cfroms@{\count@@}\idfromc@{@m}% + \enter@\cplusthec@ \count@@=\crv@cnt@ \advance\count@@\m@ne + \cfroms@{\count@@}\leave@ + \halve@dimen\X@c + \halve@dimen\Y@c + \czeroEdge@\idfromc@{@c}% + \expandafter\doSplineSegment@\expandafter{\splineSTYLE@}} +\xydef@\xy@spline@iv{\cfromid@{@c}\idfromc@{@p}% + \cfroms@{\z@}\idfromc@{@m}\leave@ \save@ + \enter@\cplusthec@ \cfromid@{@m}\leave@ + \halve@dimen\X@c + \halve@dimen\Y@c + \czeroEdge@\idfromc@{@c}% + \expandafter\doSplineSegment@\expandafter{\splineSTYLE@}% + \xy@spline@v } +\xydef@\xy@spline@v{\cfromid@{@c}\idfromc@{@p}% + \leave@ \save@ \idfromc@{@c}% + \expandafter\doSplineStraight@\expandafter{\splineSTYLE@}% + \xy@spline@x } +\xydef@\xy@spline@x{\leave@ + \def\Drop@@{\splineDrop@ \resetbreaks@}% + \def\Connect@@{\straight@\relax\splineConnect@ \resetbreaks@}% + \OBJECT@x} +\xydef@\splineDrop@{\ifInvisible@\setboxz@h{}% + \else\setboxz@h{\kern-\the\X@c\raise-\the\Y@c\hbox{\styledboxz@}}\fi + \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@ } +\xydef@\splineConnect@{% + \ifInvisible@\else\box\lastobjectbox@\fi }% +\xydef@\doSplineStraight@#1{\begingroup \sinit@ + \cfromid@{@p}\pfromc@\cfromid@{@c}% + \connect@\crvs{#1}\relax\sleave@\endgroup } +\xydef@\doSplineSegment@#1{\begingroup \sinit@ + \cfromid@{@p}\pfromc@\senter@\cfromid@{@m}\spushc@\cfromid@{@c}% + \connect@\crvs{#1}\relax\sinit@\sleave@\endgroup } +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xydummy.tex b/macros/generic/diagrams/xypic/texinputs/xydummy.tex new file mode 100644 index 0000000000..99182b8b5c --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xydummy.tex @@ -0,0 +1,30 @@ +%% xydummy.tex from $Id: xydummy.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Dummy'' option. +%% Copyright (c) 1993-1996 Kristoffer H. Rose +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{dummy}{Dummy option}{\stripRCS$Revision: 3.7 $}% + {Kristoffer H.~Rose}{krisrose@tug.org}% + {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)} +\xynew@{count}\xydummyrequires@@ +\xyeveryrequest{dummy}{\global\advance\xydummyrequires@@\@ne + \W@{The `dummy' option was used \the\xydummyrequires@@\space times!}} +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xydvidrv.tex b/macros/generic/diagrams/xypic/texinputs/xydvidrv.tex new file mode 100644 index 0000000000..2f8eb1745e --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xydvidrv.tex @@ -0,0 +1,36 @@ +%% xydvidrv.tex from $Id: xydvidrv.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``dvidrv-driver'' option. +%% Copyright (c) 1995-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{dvidrv}{dvidrv driver}{\stripRCS$Revision: 3.7 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xydef@\dvidrv@@#1{\dvimessage@{dvidrv}{#1}} +\newdriver{% + \xyaddsupport{emtex}\dvidrvEmTeX@@ + \xyaddsupport{line}\dvidrvLine@@ +} +\xydef@\dvidrvEmTeX@@{\dvidrvEmTeX@}% +\xydef@\dvidrvEmTeX@{\setupxyEMTeX@}% +\xydef@\dvidrvLine@@{\dvidrvLine@}% +\xydef@\dvidrvLine@{\xywithoption{emtex}{\installEMline@}}% +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xydvips.tex b/macros/generic/diagrams/xypic/texinputs/xydvips.tex new file mode 100644 index 0000000000..d0d1176753 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xydvips.tex @@ -0,0 +1,154 @@ +%% xydvips.tex from $Id: xydvips.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``dvips-driver'' option. +%% Copyright (c) 1995-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{dvips}{DVIPS driver}{\stripRCS$Revision: 3.9 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xydef@\dvips@@#1{\dvimessage@{dvips}{#1}} +\newdriver{% + \xyaddsupport{color}\dvipsColor@@ + \xyaddsupport{crayon}\dvipsCrayola@@ + \xyaddsupport{ps}\dvipsPS@@ + \xyaddsupport{rotate}\dvipsRotate@@ + \xyaddsupport{line}\dvipsLine@@ + \xyaddsupport{frame}\dvipsFrames@@ + \xyaddsupport{tile}\dvipsTiles@@ + \xyaddsupport{tpic}\dvipsTPIC@ + \xyaddsupport{emtex}\dvipsEM@ + \xyaddsupport{tips}\dvipsTIPS@ +} +\xydef@\dvips@Color@{\dvipsPStypes@ + \let\xylocalColor@=\xystackcolor@ + \let\xycolor@push\xycolor@push@@ + \def\xycolor@{\xycolor@@}\let\xycolorwarning@=\relax + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}\installPScolor@ }% + \else\DN@{}\fi \next@ + \ifx\xycolor@@\xyNoColor@ \let\xycolor@@=\xycolor@raw@@\fi + \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\dvipsCrayola@{}}% + \else \DN@{\xystandardcolors@}\fi \next@ + \let\dvipsColor@@=\relax + \let\UnloadColor@@=\NoDVIPScolor@ + }% +\xydef@\dvipsColor@@{\dvips@Color@} +\xydef@\NoDVIPScolor@{% + \def\xycolor@{\xycolor@@}% + \let\xycolor@@=\xyNoColor@ + \let\xylocalColor@=\xyNoColor@@ + \let\xycolorwarning@=\xycolorwarning@@ + \let\dvipsColor@@=\dvips@Color@ + \let\UnloadColor@@=\UnloadColor@ + } +\xydef@\NoDVIPScolordvi@{\xywarning@{% + Neither colordvi.tex nor colordvi.sty could be found.}% + \xyBEcolorcheck@}% +\xydef@\dvipsCrayola@@{\dvipsColor@@\dvipsCrayola@} +\xydef@\dvipsCrayola@{% + \let\prevxycolor@=\newxycolor@ + \def\newxyDVIPScolor@##1##2##3{\prevxycolor@{##1}{}{##1}}% + \let\newxycolor@=\newxyDVIPScolor@ \dvipsInclude@{color.pro}% + \installCrayolaColors@ + \let\newxycolor@=\prevxycolor@ }% +\xydef@\dvipsPS@@{\dvipsPS@} +\xydef@\dvipsPS@unload{\UnloadPS@ + \let\UnloadPS@@=\UnloadPS@ + \let\dvipsPS@@=\dvipsPS@ } +\xydef@\dvipsPStypes@{% + \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}% + \ifx\PSspecial@@\dvipsSpecial@\else + \let\PSspecial@@=\dvipsSpecial@ + \let\PSmacro@@=\dvipsMacro@ + \let\PSdict@@=\dvipsDict@ + \let\PSspecialdict@@=\dvipsDict@ + \let\PSraw@@=\dvipsRaw@ + \let\PSinclude@@=\dvipsInclude@ + \let\xyPSobeylines@@=\obeyDVIPSlines@ + \let\xyPScurrpt@@=\dvipsCurrpt@@ + \dvips@@{PostScript}% + \fi + \XYpredict@ } +\xywarnifdefined\dvipsSpecial@ +\xywarnifdefined\dvipsMacro@ +\xywarnifdefined\dvipsDict@ +\xywarnifdefined\dvipsInclude@ +\xywarnifdefined\dvipsRaw@ +{\catcode`\"=11 \catcode`\!=11 \catcode`\:=11 + \gdef\dvipsSpecial@#1{\special{ps:: SDict begin #1 end}} + \gdef\dvipsMacro@#1{\firstPS@@\special{" {#1}xy}} + \gdef\dvipsDict@#1{\special{! #1}} + \gdef\dvipsInclude@#1{\special{header=#1}} + \gdef\dvipsRaw@#1{\special{ps: SDict begin #1 end}} +\catcode`\^^M=\active + \gdef\next{\catcode`\^^M=\active \let^^M=\space }}% +\xylet@\obeyDVIPSlines@=\next +\xydef@\dvipsCurrpt@{\let\xyPScurrpt@@=\dvipsCurrpt@@}% +\xydef@\dvipsCurrpt@@{\PSraw@@{xyp}} +\xydef@\dvipsPS@{\dvipsPStypes@ + \let\dvipsPS@@=\PSspecials@true + \let\UnloadPS@@=\dvipsPS@unload + \let\installxyps@@=\relax \installxyps@ } +\xydef@\dvipsRotate@@{\dvipsRotate@} +\xydef@\dvipsRotate@{\dvipsPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}% + \dvipsCurrpt@ \dvipsRotScale@ \installPSrotscale@ }% + \else\DN@{\xydriverfail@{rotations are}UnloadRotate@\relax}\fi + \next@ } +\xydef@\dvipsRotScale@{% + \def\xyrot@start(##1){{xyct ##1\space xyrs }}% + \def\xyrot@end{}% + \def\xyscale@start(##1,##2){{xyct ##1\space##2\space xyss }}% + \def\xyscale@end{}} +\xydef@\dvipsLine@@{\dvipsLine@} +\xydef@\dvipsLine@{\dvipsPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}\installPSline@ }% + \else\DN@{\xydriverfail@{line-widths are}\UnloadLine@\relax}\fi + \next@ } +\xydef@\dvipsFrames@@{\dvipsFrames@} +\xydef@\dvipsFrames@{\dvipsPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}\installPSframes@ }% + \else\DN@{\xydriverfail@{frames are}\UnloadFrames@\relax}\fi + \next@ } +\xydef@\dvipsTiles@@{\dvipsTiles@} +\xydef@\dvipsTiles@{\dvipsPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}\installPSpatterns@ }% + \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi + \next@ } +\xydef@\dvipsTPIC@@{\dvipsTPIC@} +\xydef@\dvipsTPIC@{\setupxyTPIC@} +\xydef@\dvipsEM@@{\dvipsEM@} +\xydef@\dvipsEM@{\setupxyEMTeX@} +\xydef@\dvipsTIPS@{ + \PSdict@@{/XYdict where pop begin XYdict begin}% + \PSdict@@{% + /lu{0.04 0.0 -0.16 0.125 -0.11 0.0 + 1 1 6{pop xyfsize mul 6 1 roll}for + lineto lineto lineto closepath fill + 0 0 0 0 0 0}def + }% + \PSdict@@{end end}% +} +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xydvitops.tex b/macros/generic/diagrams/xypic/texinputs/xydvitops.tex new file mode 100644 index 0000000000..42f8f8ea2e --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xydvitops.tex @@ -0,0 +1,179 @@ +%% xydvitops.tex from $Id: xydvitops.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``DVITOPS-driver'' option. +%% Copyright (c) 1995-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{dvitops}{DVITOPS driver}{\stripRCS$Revision: 3.7 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xydef@\dvitops@@#1{\dvimessage@{DVITOPS}{#1}} +\newdriver{% + \xyaddsupport{color}\dvitopsColor@@ + \xyaddsupport{crayon}\dvitopsCrayon@@ + \xyaddsupport{ps}\dvitopsPS@@ + \xyaddsupport{rotate}\dvitopsRotate@@ + \xyaddsupport{line}\dvitopsLine@@ + \xyaddsupport{frame}\dvitopsFrames@@ + \xyaddsupport{tile}\dvitopsTiles@@ + \xyaddsupport{cmtip}\relax +} +\xydef@\dvitopsColor@@{\dvitops@Color@} +\xydef@\dvitops@Color@{\dvitopsPStypes@ + \let\xylocalColor@=\xyDVITOPScolor@ + \let\xycolor@push\xycolor@push@@ + \def\xycolor@{\xycolor@@}\let\xycolorwarning@=\relax + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}\xycatcodes + \installPScolor@ }\else\DN@{}\fi \next@ + \ifx\xycolor@@\xyNoColor@ \let\xycolor@@=\xycolor@raw@@\fi + \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\dvitopsCrayon@{}}% + \else\let\next@=\xystandardcolors@ + \fi \next@ + \let\dvitops@Color@@=\relax + \let\UnloadColor@@=\NoDVITOPScolor@ + }% +\xydef@\NoDVITOPScolor@{% + \def\xycolor@{\xycolor@@}% + \let\xycolor@@=\xyNoColor@ + \let\xylocalColor@=\xyNoColor@@ + \let\xycolorwarning@=\xycolorwarning@@ + \let\dvitops@Color@@=\dvitops@Color@ + } +\xydef@\xyDVITOPScolor@{\bgroup \DN@##1##2{\egroup}% + \ifInvisible@\else\ifHidden@\else\DNii@{\no@@}\ifx\nextii@\Connect@@ + \else\DN@{\xyDVITOPScolor@i}\fi\fi\fi \next@ } +\xydef@\xyDVITOPScolor@i#1#2{\checkXyStyle@ + \DN@{#2}\ifx\next@\empty + \def\tmp@##1{\DN@{\xycolor@begin##1\xycolor@end{#1}}}% + \else\DNii@{gray}\ifx\next@\nextii@ + \def\tmp@##1{\DN@{\xycolor@begin##1\xycolor@end{gray}{#1}}}% + \else\DNii@{rgb}\ifx\next@\nextii@ + \def\tmp@##1{\DN@{\xycolor@begin##1\xycolor@end{rgbcolor}{#1}}}% + \else\DNii@{hsb}\ifx\next@\nextii@ + \def\tmp@##1{\DN@{\xycolor@begin##1\xycolor@end{hsbcolor}{#1}}}% + \else \DN@{\xywarning@{DVITOPS cannot support color: #2 #1}}% + \fi\fi\fi\fi + \toks@={\egroup \let\xy@style@=\relax \def\Drop@@}% + \expandafter\tmp@\expandafter{\Drop@@}% + \expandafter\addtotoks@\expandafter{\expandafter{\next@}\def\Connect@@}% + \expandafter\tmp@\expandafter{\Connect@@}% + \expandafter\addtotoks@\expandafter{\expandafter{\next@}}% + \the\toks@ }% +\xydef@\xycolor@begin{\dvitopsBegin@{color}} +\xydef@\xycolor@end{\dvitopsEnd@{color}\dvitopsColor@x} +\xydef@\dvitopsCrayon@@{\dvitopsColor@@\dvitopsCrayon@} +\xydef@\dvitopsCrayon@{\installCrayolaColors@}% +\xydef@\dvitopsPS@@{\dvipsPS@} +\xydef@\dvitopsPS@unload{\UnloadPS@ + \let\UnloadPS@@=\UnloadPS@ + \let\dvitopsPS@@=\dvitopsPS@ } +\xydef@\dvitopsPStypes@{% + \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}% + \ifx\PSspecial@@\dvitopsSpecial@\else + \let\PSspecial@@=\dvitopsSpecial@ + \let\PSmacro@@=\dvitopsMacro@ + \let\PSdict@@=\dvitopsDict@ + \let\PSspecialdict@@=\dvitopsDict@ + \let\PSraw@@=\dvitopsRaw@ + \let\PSinclude@@=\dvitopsInclude@ + \let\xyPSobeylines@@=\obeyDVIPSlines@ + \let\xyPScurrpt@@=\dvitopsCurrpt@@ + \dvitops@@{PostScript}% + \fi + \XYpredict@ } +\xywarnifdefined\dvitopsSpecial@ +\xywarnifdefined\dvitopsMacro@ +\xywarnifdefined\dvitopsDict@ +\xywarnifdefined\dvitopsInclude@ +\xywarnifdefined\dvitopsRaw@ +\xywarnifdefined\dvitopsOrigin@ +\xywarnifdefined\dvitopsBegin@ +\xywarnifdefined\dvitopsEnd@ +\xywarnifdefined\dvitopsRotate@x +\xywarnifdefined\dvitopsTransform@x +\xywarnifdefined\dvitopsColor@x +{\catcode`\:=11 + \gdef\dvitopsSpecial@#1{\special{dvitops: inline #1}} + \gdef\dvitopsMacro@#1{\special{dvitops: inline {#1}xy}} + \gdef\dvitopsDict@#1{\special{dvitops: inline #1}} + \gdef\dvitopsInclude@#1{\special{dvitops: prolog #1}} + \gdef\dvitopsRaw@#1{\special{dvitops: inline #1}} + \gdef\dvitopsOrigin@#1{\special{dvitops: origin #1}} + \gdef\dvitopsBegin@#1{\special{dvitops: begin #1}} + \gdef\dvitopsEnd@#1{\special{dvitops: end #1}} + \gdef\dvitopsRotate@x#1{\special{dvitops: rotate #1}} + \gdef\dvitopsTransform@x#1{\special{dvitops: transform #1}} + \gdef\dvitopsColor@x#1#2{\special{dvitops: #1 color #2}} +} +\catcode`\^^M=\active + \gdef\next{\catcode`\^^M=\active \let^^M=\space }}% +\xylet@\obeyDVIPSlines@=\next +\xydef@\dvitopsCurrpt@{\global\let\xyPScurrpt@@=\relax}% +\xydef@\dvitopsPS@{\dvitopsPStypes@ + \let\installxyps@@=\relax \installxyps@ } +\xydef@\dvitopsRotate@@{\dvitopsRotate@} +\xydef@\dvitopsRotate@{\dvitopsPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty + \DN@{\xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}% + \installDVITOPSrotate@ }% + \else\DN@{\xydriverfail@{rotations are}\UnloadRotate@\relax}\fi + \next@ } +\xydef@\dvitopsRotScale@{% + \def\xyrot@start{\dvitopsBegin@{rot}\dvitopsOrigin@{rot}}% + \def\xyrot@end(##1){\dvitopsEnd@{rot}\dvitopsRotate@x{##1}}% + \def\xyscale@start{\dvitopsBegin@{scal}\dvitopsOrigin@{scal}}% + \def\xyscale@end(##1,##2){% + \dvitopsEnd@{scal}\dvitopsTransform@x{##1 0 ##2 0}}% + } +\xydef@\installDVITOPSrotate@{\installPSstyle@ + \let\xyRotate@@=\dvitopsRotate@ + \let\doSpecialRotate@@=\dvitopsSpecialRotate@ + \let\xyscale@@=\dvitopsScale@ + \dvitopsCurrpt@ + \dvitopsRotScale@ \xyPSshapes@true } +\xydef@\UnloadDVITOPSrotate@{\UnloadRotate@\relax} + \xydef@\dvitopsRotate@#1{\xyPSsplitPS@ + {\dvitopsBegin@{rot}\dvitopsOrigin@{rot}}% + {\dvitopsEnd@{rot}\dvitopsRotate@x{#1}}}% + \xydef@\dvitopsScale@#1#2{\xyPSsplitPS@ + {\dvitopsBegin@{scal}\dvitopsOrigin@{scal}}% + {\dvitopsEnd@{scal}\dvitopsTransform@x{#1 0 #2 0}}} + \xydef@\dvitopsSpecialRotate@#1@@{\dvitopsRotate@{#1}} +\xydef@\dvitopsLine@@{\dvitopsLine@} +\xydef@\dvitopsLine@{\dvitopsPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}\installPSline@ }% + \else\DN@{\xydriverfail@{line-widths are}\UnloadLine@\relax}\fi + \next@ } +\xydef@\dvitopsFrames@@{\dvitopsFrames@} +\xydef@\dvitopsFrames@{\dvitopsPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}\installPSframes@ }% + \else\DN@{\xydriverfail@{frames are}\UnloadFrames@\relax}\fi + \next@ } +\xydef@\dvitopsTiles@{\dvitopsPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}\installPSpatterns@ }% + \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi + \next@ } +\xydef@\dvitopsTPIC@@{\dvitopsTPIC@} +\xydef@\dvitopsTPIC@{\setupxyTPIC@} +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyemtex.tex b/macros/generic/diagrams/xypic/texinputs/xyemtex.tex new file mode 100644 index 0000000000..d1a7e76da0 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyemtex.tex @@ -0,0 +1,101 @@ +%% xyemtex.tex from $Id: xyemtex.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``em-TeX'' back-end extension. +%% Copyright (c) 1995-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{emtex}{em-TeX backend}{\stripRCS$Revision: 3.7 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xynew@{if}\ifEMspecials@ +\xydef@\UseEMspecials{\EMspecials@true} +\xydef@\NoEMspecials{\EMspecials@false} +\xydef@\xyemtex@lineto{\xyEM@special{lineto}} +\xydef@\xyemtex@moveto{\xyEM@special{moveto}} +\xydef@\xyemtex@line#1{\xyEM@special{line #1}} +\xydef@\xyemtex@point#1{\xyEM@special{point #1}} +\xydef@\xyemtex@pen#1{\addtostyletoks@{\xyEM@special{linewidth #1}}} +{\catcode`:=12 \gdef\next#1{\special{em:#1}}} +\xylet@\xyEM@special=\next +{\catcode`:=12 \gdef\next#1{% + \W@{EM:#1 (\the\X@p,\the\Y@p),(\the\X@c,\the\Y@c)}\special{em:#1}}} +\xylet@\xyEM@noisy=\next +\xydef@\NoisyEMTeX{\let\xyEM@special=\xyEM@noisy} +\xydef@\EMalternative@#1#2{% +\expandafter\global\expandafter\let\csname origxy#2@\endcsname=#1% + \xdef#1{\noexpand\ifEMspecials@ + \noexpand\expandafter\expandafter\noexpand\csname xyemtex@#2@\endcsname + \noexpand\else + \noexpand\expandafter\expandafter\noexpand\csname origxy#2@\endcsname + \noexpand\fi}}% +\xydef@\setupxyEMTeX@{\xywarning@{using em-TeX specials}% + \EMalternative@{\solid@}{solid}% + \EMalternative@{\splinesolid@}{splinesolid}% + \let\setupxyEM@=\reloadxyEM@ + \activateEM@ } +\xydef@\xyunloadEM@{\xywarning@{EM specials turned off}% + \xywithoption{line}{\xysetup@@\uninstallEMline@ }% + \EMspecials@false + \let\setupxyEM@=\reloadxyEM@ } +\xydef@\activateEM@{% + \xywithoption{line}{\xysetup@@\installEMline@}% + \EMspecials@true } +\xydef@\reloadxyEM@{\xywarning@{EM specials back on}\activateEM@ } +\xydef@\xyemtex@solid@{% + \ifInvisible@ \let\next@=\no@@ + \else \DN@{\xyEMstraight@}\fi + \next@ } +\xydef@\xyEMstraight@{\setupDirection@ + \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}% + \DN@##1##2{\def\checkoverlap@@{% + \ifdim##1\X@p>##1\X@c \let\next@=\relax \fi + \ifdim##2\Y@p>##2\Y@c \let\next@=\relax \fi}}% + \edef\nextii@{{\sd@X}{\sd@Y}}\expandafter\next@\nextii@ + \noCshavep@@ \edef\Cshavep@@{\pfromthep@ \noexpand\resetDirection@}% + \noCshavec@@ \edef\Cshavec@@{\cfromthec@ \noexpand\resetDirection@}% + \ifHidden@\else + \ifdim\Y@c>\Y@max \Y@max=\Y@c \fi \ifdim\Y@p>\Y@max \Y@max=\Y@p \fi + \ifdim\Y@c<\Y@min \Y@min=\Y@c \fi \ifdim\Y@p<\Y@min \Y@min=\Y@p \fi + \ifdim\X@c>\X@max \X@max=\X@c \fi \ifdim\X@p>\X@max \X@max=\X@p \fi + \ifdim\X@c<\X@min \X@min=\X@c \fi \ifdim\X@p<\X@min \X@min=\X@p \fi \fi + \ifInvisible@\let\next@=\relax \else + \DN@{% + \setboxz@h{\kern\X@p \raise\Y@p\hbox{\xyemtex@moveto}}% + \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ + \setboxz@h{\boxz@ \kern\X@c \raise\Y@c\hbox{\xyemtex@lineto}}% + \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}}% + \fi + \checkoverlap@@ + \ifdim\d@X=\z@ \ifdim\d@Y=\z@ \DN@{\relax}\fi\fi \next@ + \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}% + \def\Calong@@{\noCalong@@}\Creset@@ } +\xydef@\xyemtex@splinesolid@{\setbox\splinebox@=\copy\voidb@x + \multiply\splinetol@\thr@@ + \gdef\splineextra@@{\xyemtex@moveto\gdef\splineextra@@{\xyemtex@lineto}}% + \def\xycrvdrop@{ }\def\xycrvconn@{}\splineset@@ } +\xydef@\xyEMlinewidth@#1{\dimen@=#1\relax\edef\next@{\the\dimen@}} +\xydef@\installEMline@{% + \let\xylinewidth@@=\xylinewidth@ + \let\xylineSpecial@@=\xyemtex@pen + \let\transxyline@@=\xyEMlinewidth@ } +\xydef@\uninstallEMline@{\UnloadLine@\relax}% +\xydef@\UseEMlinewidth{\installEMline@}% +\xydef@\NoEMlinewidth{\uninstallEMline@}% +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyframe.tex b/macros/generic/diagrams/xypic/texinputs/xyframe.tex new file mode 100644 index 0000000000..c4a04214a6 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyframe.tex @@ -0,0 +1,537 @@ +%% xyframe.tex from $Id: xyframe.doc,v 3.14 2012/05/24 00:30:38 krisrose Exp $ +%% +%% Xy-pic ``Frames and Brackets'' extension. +%% Copyright (c) 1991-1997 Kristoffer H. Rose +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{frame}{Frame and Bracket extension}{\stripRCS$Revision: 3.14 $}% + {Kristoffer H.~Rose}{krisrose@tug.org}% + {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)} +\xydef@\frm{\hbox{}\dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ + \ht\z@=\U@c \dp\z@=\D@c \dimen@=\U@c \advance\dimen@\D@c + \ifdim\wdz@=\z@ \def\Leftness@{.5}\else \quotient@\Leftness@\L@c\wdz@ \fi + \ifdim\dimen@=\z@ \def\Upness@{.5}\else \quotient@\Upness@\U@c\dimen@ \fi + \expandafter\Edge@c\expandafter{\prevEdge@@}\let\frmradius@@=\z@ + \def\Drop@@{}% + \def\Connect@@{\xy@@{\save@\cmerge@\Y@p\X@p\D@p\U@p\L@p\R@p\Drop@@}\restore}% + \xyFN@\frm@i} +\xylet@\frmradius@@=\z@ +\xydef@\frm@i{% + \addLT@\ifx\next \addGT@{\addLT@\DN@##1}{\def\frmradius@@{##1}\xyFN@\frm@i}% + \else \DN@##1##{\frm@{##1}}\fi \next@} +\xydef@\frm@#1#2{\DNii@{frm#1{#2}}% + \expandafter\let\expandafter\next@\csname\codeof\nextii@\endcsname + \ifx\next@\relax \DNii@{frm{#2}}% + \expandafter\let\expandafter\next@\csname\codeof\nextii@\endcsname + \ifx\next@\relax \let\next@=\frm@generic \fi\fi \next@} +\xydef@\frm@generic{\xyerror@{No generic frames yet!}{}} +\xydef@\frmDrop@#1{% + \ifx\frmradius@@\z@ \addtoDrop@@{\let\frmradius@@=\z@ #1}% + \else \expandafter\addtoDrop@@\expandafter{% + \expandafter\def\expandafter\frmradius@@\expandafter{\frmradius@@}#1}\fi} +\xydef@\EdgefromtheEdge@{% + \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c + \Edge@c={\expandafter\noexpand\the\Edge@c}} +\xydef@\prevEdgefromtheEdge@{% + \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c + \noexpand\def\noexpand\prevEdge@@{\expandafter\noexpand\the\Edge@c}} +\xydef@\addtoDrop@@#1{% + \expandafter\def\expandafter\Drop@@\expandafter{\Drop@@#1}} +\xydef@\addbeforeDrop@@#1{\DNii@{#1}% + \expandafter\DN@\expandafter{\expandafter\nextii@\Drop@@}% + \expandafter\expandafter\expandafter\def + \expandafter\expandafter\expandafter\Drop@@ + \expandafter\expandafter\expandafter{\next@}} +\xydefcsname@{frm{}}{} +\xyletcsnamecsname@{frm[]{}}{frm{}} +\xyletcsnamecsname@{frm[o]{}}{frm{}} +\xydefcsname@{frm{.}}{\frmDrop@{\let\zerocorner=\framezerodot@@ + \let\framehfill=\frm@doth@@ \let\framevfill=\frm@dotv@@ + \framed@@{\frmradius@@}}} +\xyletcsnamecsname@{frm[]{.}}{frm{.}} +\xydef@\frm@doth@@{\setboxz@h{\kern5\B@\framezerodot@@\kern5\B@}\ht\z@=\B@ + \dp\z@=\B@\kern5\B@\xleaders\boxz@\hss\kern5\B@} +\xydef@\frm@dotv@@{\setboxz@h to2\B@{\hss\framezerodot@@\hss}\ht\z@=5\B@ + \dp\z@=5\B@\kern5\B@\xleaders\boxz@\vss\kern5\B@} +\xyletcsnamecsname@{frm{..}}{frm{.}} +\xylet@\framezerodot@@=\zerodot +\xydefcsname@{frm{-}}{\frmDrop@{\framed@\frmradius@@}} +\xyletcsnamecsname@{frm[]{-}}{frm{-}} +\xydef@\framed@{\let\zerocorner=\framezerodot@@ + \let\framehfill=\frm@solidh@@ \let\framevfill=\frm@solidv@@ \framed@@} +\xylet@\framesetthick@=\relax +\xydef@\frm@solidh@@{\framesetthick@\leaders\hrule height\B@ depth\B@\hfill} +\xydef@\frm@solidv@@{\framesetthick@\leaders\vrule width2\B@\vfill} +\xydefcsname@{frm{=}}{\frmDrop@{\framed@\frmradius@@ + {\advance\L@c-2\p@ \advance\R@c-2\p@ \advance\U@c-2\p@ \advance\D@c-2\p@ + \dimen@=\frmradius@@ + \ifdim\dimen@>2\p@ \advance\dimen@-2\p@ \else \dimen@=\z@\fi + \framed@\dimen@}}} +\xyletcsnamecsname@{frm[]{=}}{frm{=}} +\xydef@\framesetthick@line{\B@=.5\xylinethick@} +\xydef@\frm@thickc@@{\hbox{\framesetthick@line + \vrule height.5\B@ depth.5\B@ width\B@}} +\xywithoption{line}{% + \let\framezerodot@@\frm@thickc@@ \let\framesetthick@=\framesetthick@line} +\xydef@\framed@@#1{\setboxz@h{\R@=#1\relax + \dimen@=\L@c \advance\dimen@\R@c \dimen@ii=\U@c \advance\dimen@ii\D@c + \ifdim.5\dimen@<\R@ \R@=.5\dimen@ \fi + \ifdim.5\dimen@ii<\R@ \R@=.5\dimen@ii \fi + \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@-\D@c + \ifdim\R@<\p@\else \cirrestrict@@ \fi + \dimen@=2\R@ \advance\dimen@-\L@c \advance\dimen@-\R@c + \ifdim\dimen@>\z@ \advance\A@-.5\dimen@ \fi + \dimen@=2\R@ \advance\dimen@-\U@c \advance\dimen@-\D@c + \ifdim\dimen@>\z@ \advance\B@-.5\dimen@ \fi + \kern\A@ \raise\B@\vbox to \dimen@ii{\framed@body@@}}% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@} +\xydef@\framed@body@{% + \advance\dimen@ii.22\p@ \advance\dimen@-.2\p@ + \setboxz@h{\corn@@4\R@}\A@=-.5\wdz@ \B@=.5\xydashw@ + \dimen@=\L@c \advance\dimen@\R@c \advance\dimen@-.2\p@ + \setboxz@h to\dimen@{\kern\A@ \boxz@ \framehfill\corn@@3\R@\kern\A@}% + \advance\dimen@ii-\dp\z@ \kern-\ht\z@ \nointerlineskip\boxz@ + \dimen@=\L@c \advance\dimen@\R@c \advance\dimen@-.2\p@ + \setboxz@h to\dimen@{\kern\A@\corn@@1\R@\framehfill\corn@@2\R@\kern\A@}% + \advance\dimen@ii-\ht\z@ + \dimen@=\L@c \advance\dimen@\R@c \advance\dimen@.2\p@ + \nointerlineskip\hbox to\dimen@{% + \setbox\z@=\vbox to\dimen@ii{\framevfill}\kern-.5\wdz@\copy\z@ + \hss \copy\z@\kern-.5\wdz@ }% + \nointerlineskip\boxz@ \vss \kern\z@} +\xylet@\framed@body@@=\framed@body@ +\xylet@\zerocorner=\framezerodot@@ +\xydef@\solidcorner@#1#2{\hbox\bgroup \R@=#2\relax + \ifdim\R@<\p@ \zerocorner + \else \cirrestrict@@ \multiply\count@8 + \setboxz@h{\corn@x@@{#1}}\dimen@=\wdz@ + \ifcase#1\or \ht\z@=\z@ \kern\dimen@ \raise\dimen@\boxz@ + \or \ht\z@=\z@ \raise\dimen@\boxz@ \kern\dimen@ + \or \dp\z@=\z@ \lower\dimen@\boxz@ \kern\dimen@ + \or \dp\z@=\z@ \kern\dimen@ \lower\dimen@\boxz@ \fi + \vrule height\dimen@ depth\dimen@ width\z@\fi + \edef\tmp@{\egroup \U@c=\the\dimen@}\tmp@ \D@c=\U@c \L@c=\U@c \R@c=\U@c + \Edge@c={\circleEdge}\ignorespaces} +\xydef@\corn@x@#1{\ifcase#1\or + \circhar@@\z@ \circhar@@\@ne\or\circhar@@\tw@ \circhar@@3\or + \circhar@@5\circhar@@4\or\circhar@@7\circhar@@6\fi} +\xylet@\corn@x@@=\corn@x@ +\xydef@\corn@@{\DN@{\solidcorner@}% + \ifx\framehfill\frm@doth@@ \DN@{\let\cirrestrict@@=\relax + \let\corn@x@@=\dotcorner@@ \let\zerodot=\framezerodot@@ + \solidcorner@ }% + \else\ifx\framehfill\frm@dashh@@ \DN@{\let\cirrestrict@@=\relax + \let\corn@x@@=\dashcorner@@ \let\zerodot=\framezerodot@@ + \solidcorner@ }% + \fi\fi \next@} +\xydef@\dotcorner@@#1{\zerocorner} +\xydef@\dashcorner@@#1{\zerocorner} +\xywithoption{curve}{% + \let\dotcorner@@=\dotcorner@ \let\dashcorner@@=\dashcorner@} +\xydefcsname@{frm{--}}{% + \frmDrop@{\let\zerocorner=\framezerodot@@ + \let\framehfill=\frm@dashh@@ \let\framevfill=\frm@dashv@@ + \framed@@\frmradius@@}} +\xyletcsnamecsname@{frm[]{--}}{frm{--}} +\xydef@\frm@dashh@@{\setboxz@h{\dashhfillchar}% + \ht\z@=\B@ \dp\z@=\B@ \wdz@=2\xydashl@ + \copy\z@ \xleaders\copy\z@\hss \boxz@\kern-\xydashl@} +\xydef@\frm@dashv@@{\setboxz@h to2\B@{\hss\dashvfillchar\hss}\ht\z@=\z@ + \dp\z@=2\xydashl@ \nointerlineskip\copy\z@ \xleaders\copy\z@\vss + \nointerlineskip\boxz@\kern-\xydashl@}% +\xydef@\dashhfillchar{{\rDirection@\xydashl@ \line@@}} +\xydef@\dashvfillchar{{\dDirection@\xydashl@ \line@@}} +\xydefcsname@{frm{o-}}{% + \ifdim\frmradius@@<2\xydashl@\relax \dimen@=.8\xydashl@ + \expandafter\def\expandafter\frmradius@@\expandafter{\the\dimen@}\fi + \frmDrop@{\let\zerocorner=\framezerodot@@ + \let\framehfill=\frm@rddashh@@ \let\framevfill=\frm@rddashv@@ + \framed@@\frmradius@@}}% +\xydef@\frm@rddashh@@{\setboxz@h{\kern\xydashl@\dashhfillchar}% + \ht\z@=\B@ \dp\z@=\B@ \copy\z@ \xleaders\copy\z@\hss \boxz@ \kern\xydashl@} +\xydef@\frm@rddashv@@{\ifdim\dimen@ii<2\xydashl@\else + \setbox\z@=\vbox to2\xydashl@{\hbox to2\B@{\hss\dashvfillchar\hss}\vss}% + \kern\xydashl@ \copy\z@ \xleaders\copy\z@\vss + {\ifdim\dimen@ii<2\xydashl@\else\aftergroup\boxz@\fi}\fi} +\xydefcsname@{frm{,}}{% + \ifx\frmradius@@\z@ \shaded@{1.2\p@}\else \shaded@\frmradius@@ \fi} +\xydef@\shaded@#1{\frmDrop@{\R@=#1\relax + {\advance\X@c\R@ \advance\Y@c-\D@c \U@c=\z@ \D@c=\R@ \blacked@}% + {\advance\X@c\R@c \advance\Y@c-\R@ \L@c=\z@ \R@c=\R@ \blacked@}}} +\xydefcsname@{frm{-,}}{\addtoDrop@@{\drop\frm{-}\drop\frm{,}}} +\xydef@\blacked@{\setboxz@h{% + \A@=\X@c \advance\A@-\L@c \dimen@=\L@c \advance\dimen@\R@c + \B@=\Y@c \advance\B@-\D@c \dimen@ii=\Y@c \advance\dimen@ii\U@c + \advance\A@-.5\xydashw@ + \kern\A@ \blacked@@ }% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@} +\xydef@\bblacked@{\setboxz@h{% + \dimen@=\L@c \advance\dimen@\R@c \B@=-\D@c \dimen@ii=\U@c + \kern-\L@c \blacked@@ \kern-\dimen@ \kern\L@c}% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@} +\xydef@\blacked@@{\vrule width\dimen@ depth-\B@ height\dimen@ii} +\xydefcsname@{frm{o}}{% + \ifx\frmradius@@\z@ + \frmDrop@{\dimen@=.5\L@c \advance\dimen@.5\R@c + \let\framehfill=\frm@solidh@@ \let\framevfill=\frm@solidv@@ + \circled@\dimen@}% + \else + \frmDrop@{\let\framehfill=\frm@solidh@@ + \let\framevfill=\frm@solidv@@ \circled@\frmradius@@}% + \fi} +\xydefcsname@{frm{oo}}{% + \ifx\frmradius@@\z@ + \frmDrop@{\dimen@=.5\L@c \advance\dimen@.5\R@c + \let\framehfill=\frm@solidh@@ \let\framevfill=\frm@solidv@@ + {\circled@\dimen@}\advance\dimen@-2.1\p@ \circled@\dimen@}% + \else + \frmDrop@{\dimen@=\frmradius@@ + \let\framehfill=\frm@solidh@@ \let\framevfill=\frm@solidv@@ + {\circled@\dimen@}\advance\dimen@-2.1\p@ \circled@\dimen@}% + \fi} +\xydef@\circled@#1{\setboxz@h\bgroup \R@=#1\relax + \setboxz@h{\vbox{\circled@x@@}}% + \A@=\X@c \advance\A@-.5\wd\z@ + \B@=\Y@c \advance\B@-.5\ht\z@ \advance\B@.5\dp\z@ \advance\B@.2\p@ + \edef\tmp@{\egroup\dimen@=\the\wdz@}% + \kern\A@ \raise\B@\boxz@ + \tmp@ \divide\dimen@4 \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@} +\xydef@\circled@x@{\hbox{\corn@@4\R@ \corn@@3\R@}% + \nointerlineskip\hbox{\corn@@1\R@ \corn@@2\R@}} +\xylet@\circled@x@@=\circled@x@ +\xydefcsname@{frm{.o}}{% + \ifx\frmradius@@\z@ \frmDrop@{\let\framehfill=\frm@doth@@ + \dimen@=.5\L@c \advance\dimen@.5\R@c \circled@\dimen@}% + \else + \frmDrop@{\let\framehfill=\frm@doth@@ \circled@\frmradius@@}% + \fi} +\xydefcsname@{frm{-o}}{% + \ifx\frmradius@@\z@ \frmDrop@{\let\framehfill=\frm@dashh@@ + \dimen@=.5\L@c \advance\dimen@.5\R@c \circled@\dimen@}% + \else + \frmDrop@{\let\framehfill=\frm@dashh@@ \circled@\frmradius@@}% + \fi} +\xydefcsname@{frm{e}}{\ellipse@whichfrm@\ellipsesolidframed@}% +\xydefcsname@{frm{.e}}{\ellipse@whichfrm@\ellipsedotframed@}% +\xydefcsname@{frm{-e}}{\ellipse@whichfrm@\ellipsedashframed@}% +\xydefcsname@{frm{ee}}{\ellipse@whichdblfrm@\ellipsesolidframed@}% +\xydefcsname@{frm2{.e}}{\ellipse@whichdblfrm@\ellipsedotframed@}% +\xydefcsname@{frm2{-e}}{\ellipse@whichdblfrm@\ellipsedashframed@}% +\xyletcsnamecsname@{frm[o]{-}}{frm{e}} +\xyletcsnamecsname@{frm[o]{=}}{frm{ee}} +\xyletcsnamecsname@{frm[o]{.}}{frm{.e}} +\xyletcsnamecsname@{frm[o]{--}}{frm{-e}} +\xydef@\ellipse@whichfrm@#1{% + \ifx\frmradius@@\z@ + \frmDrop@{#1\dimen@=.5\L@c \advance\dimen@.5\R@c + \dimen@ii=.5\U@c \advance\dimen@ii.5\D@c + \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}\next@ }% + \else + \frmDrop@{#1\expandafter\ellipsed@i@\frmradius@@,,@@}% + \fi} +\xydef@\ellipse@whichdblfrm@#1{% + \ifx\frmradius@@\z@ + \frmDrop@{#1\dimen@=.5\L@c \advance\dimen@.5\R@c + \dimen@ii=.5\U@c \advance\dimen@ii.5\D@c + \edef\next@{\noexpand\ellipsed@e@{\the\dimen@}{\the\dimen@ii}}\next@ }% + \else + \frmDrop@{#1\expandafter\ellipsed@ei@\frmradius@@,,@@}% + \fi} +\xydef@\ellipsed@i@#1,#2,#3@@{\DNii@{,}\DN@{#3}% + \ifx\next@\nextii@ + \dimen@=#1\relax \dimen@ii=#2\relax + \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}% + \else \ifx\next@\empty \DN@{#2}% + \ifx\next@\empty \DN@{#1}% + \dimen@=.5\L@c \advance\dimen@.5\R@c + \dimen@ii=.5\U@c \advance\dimen@ii.5\D@c + \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}% + \else \dimen@=#1\relax + \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}% + \fi + \else\xywarning@{ignoring extra tokens in elliptical frame: #3 }% + \dimen@=#1\relax \dimen@ii=#2\relax + \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}% + \fi\fi \next@ } +\xydef@\ellipsed@ei@#1,#2,#3@@{\DNii@{,}\DN@{#3}% + \ifx\next@\nextii@ + \dimen@=#1\relax \dimen@ii=#2\relax + \edef\next@{\noexpand\ellipsed@e@{\the\dimen@}{\the\dimen@ii}}% + \else \ifx\next@\empty \DN@{#2}% + \ifx\next@\empty \DN@{#1}% + \dimen@=.5\L@c \advance\dimen@.5\R@c + \dimen@ii=.5\U@c \advance\dimen@ii.5\D@c + \edef\next@{\noexpand\ellipsed@e@{\the\dimen@}{\the\dimen@ii}}% + \else + \dimen@=#1\relax + \edef\next@{\noexpand\ellipsed@e@{\the\dimen@}{\the\dimen@}}% + \fi + \else\xywarning@{ignoring extra tokens in elliptical frame: #3 }% + \dimen@=#1\relax \dimen@ii=#2\relax + \edef\next@{\noexpand\ellipsed@e@{\the\dimen@}{\the\dimen@ii}}% + \fi\fi \next@ } +\xydef@\ellipsed@e@#1#2{% + \dimen@=#1\relax \dimen@ii=#2\relax + \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}\next@ + \dimen@=#1\relax \dimen@ii=#2\relax + \ifdim\dimen@>2\p@ \advance\dimen@-2\p@ \else \dimen@=\z@\fi + \ifdim\dimen@ii>2\p@ \advance\dimen@ii-2\p@ \else \dimen@ii=\z@\fi + \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}\next@ }% +\xydef@\ellipsed@#1#2{\setboxz@h\bgroup \relax + \setboxz@h{\vbox{\ellipsed@x@@{#1}{#2}}}% + \A@=\X@c \advance\A@-.5\wd\z@ + \B@=\Y@c \advance\B@-.5\ht\z@ \advance\B@.5\dp\z@ + \edef\tmp@{\egroup\dimen@=\the\wdz@}% + \kern\A@ \raise\B@\boxz@ + \tmp@ \divide\dimen@4 \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@} +\xydef@\ellipsed@i#1#2{{\R@c=#1\relax\L@c=\R@c + \U@c=#2\relax\D@c=\U@c \ellipsed@{#1}{#2}}} +\xydef@\ellipsed@x@#1#2{\R@=#1\relax\advance\R@#2\relax + \divide\R@\tw@ \circled@x@@ } +\xylet@\ellipsed@x@@=\ellipsed@x@ +\xydef@\ellipsesolidframed@{% + \let\framehfill=\frm@solidh@@ \let\framevfill=\frm@solidv@@} +\xydef@\ellipsedotframed@{% + \let\framehfill=\frm@doth@@ \let\framevfill=\frm@dotv@@} +\xydef@\ellipsedashframed@{% + \let\framehfill=\frm@dashh@@ \let\framevfill=\frm@dashv@@} +\xydefcsname@{frm{\{}}{\addtoDrop@@{\lbraced}} +\xydefcsname@{frm{\}}}{\addtoDrop@@{\rbraced}} +\xydefcsname@{frm{^\}}}{\addtoDrop@@{\ubraced}} +\xydefcsname@{frm{_\}}}{\addtoDrop@@{\dbraced}} +\xydef@\dbraced{\xy@@{\setboxz@h{% + \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@-\D@c + \setboxz@h{$\m@th\bracelu$}\dimen@=2\wdz@ \advance\B@-.5\ht\z@ + \ifdim\R@c<\dimen@ \R@c=\dimen@ \fi + \ifdim\L@c<\dimen@ \advance\A@-\dimen@ \advance\A@\L@c \L@c=\dimen@ \fi + \advance\A@-.25pt + \kern\A@\raise\B@\hbox{% + \hbox to\L@c{$\m@th\bracelu\leaders\vrule\hfil\bracerd$}% + \kern.5pt + \hbox to\R@c{$\m@th\braceld\leaders\vrule\hfil\braceru$}}}% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}} +\xydef@\ubraced{\xy@@{\setboxz@h{% + \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@\U@c + \setboxz@h{$\m@th\bracelu$}\dimen@=2\wdz@ + \ifdim\R@c<\dimen@ \R@c=\dimen@ \fi + \ifdim\L@c<\dimen@ \advance\A@-\dimen@ \advance\A@\L@c \L@c=\dimen@ \fi + \advance\A@-.25pt + \kern\A@\raise\B@\hbox{% + \hbox to\L@c{$\m@th\braceld\leaders\vrule\hfil\braceru$}% + \kern.5pt + \hbox to\R@c{$\m@th\bracelu\leaders\vrule\hfil\bracerd$}}}% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}} +{\catcode`\"=12 + \global\mathchardef\braceur="338 + \global\mathchardef\braceul="339 + \global\mathchardef\bracedr="33A + \global\mathchardef\bracedl="33B + \global\mathchardef\bracecl="33C + \global\mathchardef\bracecr="33D + \global\mathchardef\bracec="33E } +\xydef@\lbraced{\xy@@{\setboxz@h{% + \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@-\D@c + \setboxz@h{$\m@th\bracecl$}\dimen@ii=\dp\z@ \advance\A@-.5\wdz@ + \setboxz@h{$\m@th\bracec$}\dimen@=\dp\z@ + \ifdim\U@c<.5\dimen@ \U@c=.5\dimen@ \fi + \ifdim\D@c<.5\dimen@ \advance\B@-.5\dimen@ \advance\B@\D@c \D@c=.5\dimen@ \fi + \advance\U@c.6\p@ \advance\D@c.6\p@ \advance\B@-.6\p@ + \kern\A@\raise\B@\vbox{\vbox to\U@c{% + \nointerlineskip\hbox{$\m@th\braceur$}% + \kern-.61\dimen@ \cleaders\copy\z@\vfil \kern-.4\dimen@ + \nointerlineskip\hbox{$\m@th\bracecl$}\kern-.5\dimen@ii}% + \nointerlineskip\vbox to\D@c{\kern.5\dimen@ii + \kern-.4\dimen@ \cleaders\copy\z@\vfil \kern-.61\dimen@ + \nointerlineskip\hbox{$\m@th\bracedr$}\kern\z@}}}% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}} +\xydef@\rbraced{\xy@@{\setboxz@h{% + \A@=\X@c \advance\A@\R@c \B@=\Y@c \advance\B@-\D@c + \setboxz@h{$\m@th\bracecr$}\dimen@ii=\dp\z@ \advance\A@-.5\wdz@ + \setboxz@h{$\m@th\bracec$}\dimen@=\dp\z@ + \ifdim\U@c<.5\dimen@ \U@c=.5\dimen@ \fi + \ifdim\D@c<.5\dimen@ \advance\B@-.5\dimen@ \advance\B@\D@c \D@c=.5\dimen@ \fi + \advance\U@c.6\p@ \advance\D@c.6\p@ \advance\B@-.6\p@ + \kern\A@\raise\B@\vbox{\vbox to\U@c{% + \nointerlineskip\hbox{$\m@th\braceul$}% + \kern-.61\dimen@ \cleaders\copy\z@\vfil \kern-.4\dimen@ + \nointerlineskip\hbox{$\m@th\bracecr$}\kern-.5\dimen@ii}% + \nointerlineskip\vbox to\D@c{\kern.5\dimen@ii + \kern-.4\dimen@ \cleaders\copy\z@\vfil \kern-.61\dimen@ + \nointerlineskip\hbox{$\m@th\bracedl$}\kern\z@}}}% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}} +\xydefcsname@{frm{(}}{\addtoDrop@@{\lparenthesized}} +\xydefcsname@{frm{)}}{\addtoDrop@@{\rparenthesized}} +\xydefcsname@{frm{^)}}{\addtoDrop@@{\uparenthesized}} +\xydefcsname@{frm{_)}}{\addtoDrop@@{\dparenthesized}} +\xydef@\dparenthesized{\xy@@{\setboxz@h{% + \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@-\D@c + \setboxz@h{$\m@th\bracelu$}\dimen@=2\wdz@ \advance\B@-.5\ht\z@ + \ifdim\R@c<\dimen@ \R@c=\dimen@ \fi + \ifdim\L@c<\dimen@ \advance\A@-\dimen@ \advance\A@\L@c \L@c=\dimen@ \fi + \dimen@=\L@c \advance\dimen@\R@c + \kern\A@\raise\B@\hbox to\dimen@{% + $\m@th\bracelu\leaders\vrule\hfil\braceru$}}% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}} +\xydef@\uparenthesized{\xy@@{\setboxz@h{% + \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@\U@c + \setboxz@h{$\m@th\bracelu$}\dimen@=2\wdz@ + \ifdim\R@c<\dimen@ \R@c=\dimen@ \fi + \ifdim\L@c<\dimen@ \advance\A@-\dimen@ \advance\A@\L@c \L@c=\dimen@ \fi + \dimen@=\L@c \advance\dimen@\R@c + \kern\A@\raise\B@\hbox to\dimen@{% + $\m@th\braceld\leaders\vrule\hfil\bracerd$}}% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}} +\xydef@\lparenthesized{\xy@@{\setboxz@h{% + \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@-\D@c + \setboxz@h{$\m@th\bracecr$}\dimen@ii=\dp\z@ \advance\A@-.5\wdz@ + \setboxz@h{$\m@th\bracec$}\dimen@=\dp\z@ + \ifdim\U@c<.5\dimen@ \U@c=.5\dimen@ \fi + \ifdim\D@c<.5\dimen@ \advance\B@-.5\dimen@ \advance\B@\D@c \D@c=.5\dimen@ \fi + \advance\U@c.6\p@ \advance\D@c.6\p@ \advance\B@-.6\p@ + \dimen@ii\U@c \advance\dimen@ii\D@c + \kern\A@\raise\B@\vbox to \dimen@ii{% + \nointerlineskip\hbox{$\m@th\braceur$}% + \kern-.61\dimen@ \cleaders\copy\z@\vfil \kern-.61\dimen@ + \nointerlineskip\hbox{$\m@th\bracedr$}\kern\z@}}% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}} +\xydef@\rparenthesized{\xy@@{\setboxz@h{% + \A@=\X@c \advance\A@\R@c \B@=\Y@c \advance\B@-\D@c + \setboxz@h{$\m@th\bracecr$}\dimen@ii=\dp\z@ \advance\A@-.5\wdz@ + \setboxz@h{$\m@th\bracec$}\dimen@=\dp\z@ + \ifdim\U@c<.5\dimen@ \U@c=.5\dimen@ \fi + \ifdim\D@c<.5\dimen@ \advance\B@-.5\dimen@ \advance\B@\D@c \D@c=.5\dimen@ \fi + \advance\U@c.6\p@ \advance\D@c.6\p@ \advance\B@-.6\p@ + \dimen@ii\U@c \advance\dimen@ii\D@c + \kern\A@\raise\B@\vbox to \dimen@ii{% + \nointerlineskip\hbox{$\m@th\braceul$}% + \kern-.61\dimen@ \cleaders\copy\z@\vfil \kern-.61\dimen@ + \nointerlineskip\hbox{$\m@th\bracedl$}\kern\z@}}% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}} +\xydefcsname@{frm{*}}{% + \expandafter\frmDrop@\expandafter{% + \expandafter\def\expandafter\prevEdge@@\expandafter{\prevEdge@@}% + \frame@fill@@\frmradius@@}} +\xydefcsname@{frm{**}}{% + \expandafter\frmDrop@\expandafter{% + \expandafter\def\expandafter\prevEdge@@\expandafter{\prevEdge@@}% + \frame@emph@@\frmradius@@}} +\xydef@\frame@fill@#1{\filled@{#1}\empty} +\xydef@\frame@emph@#1{\framed@\frmradius@@} +\xylet@\frame@fill@@=\frame@fill@ +\xylet@\frame@emph@@=\frame@emph@ +\xydef@\filled@#1{\R@=#1\relax + \expandafter\DNii@\expandafter{\prevEdge@@}% + \DN@{\rectangleEdge}\ifx\next@\prevEdge@@ + \ifdim\R@=\z@ \DN@{\filled@Rectangle@}% + \else \DN@{\filled@Oval@}\fi + \else \DN@{\circleEdge}\ifx\next@\prevEdge@@ + \ifdim\R@=\z@ \DN@{\filled@Ellipse@}% + \else \DN@{\restR@max\filled@Circle@}\fi + \else + \ifdim\R@=\z@ \DN@{\filled@Rectangle@}% + \else \DN@{\filled@Circle@}\fi + \fi\fi \next@} +\xydef@\restR@max{% + \dimen@=\L@c\advance\dimen@\R@c + \dimen@ii=\U@c \advance\dimen@ii\D@c + \ifdim\dimen@ii>\dimen@ \dimen@=\dimen@ii\fi + \ifdim\dimen@>\z@ \divide\dimen@\tw@ + \ifdim\R@>\dimen@\R@=\dimen@\fi\fi } +\xylet@\filledRectangle@@=\bblacked@ +\xylet@\filledCircle@@=\bblacked@ +\xylet@\filledEllipse@@=\bblacked@ +\xylet@\filledOval@@=\bblacked@ +\xydef@\filled@Region@#1#2{\setboxz@h\bgroup + \setboxz@h{\vbox{#1#2\empty}}% + \A@=\X@c \advance\A@-.5\wd\z@ + \B@=\Y@c \advance\B@-.5\ht\z@ \advance\B@.5\dp\z@ + \edef\tmp@{\egroup\dimen@=\the\wdz@}% + \kern\A@ \raise\B@\boxz@ \kern-\A@ + \tmp@ \divide\dimen@\tw@ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \styledboxz@} +\xydef@\filled@Rectangle@{\filled@Region@\filledRectangle@@} +\xydef@\filled@Oval@{\filled@Region@\filledOval@@} +\xydef@\filled@Circle@{\filled@Region@\filledCircle@@} +\xydef@\filled@Ellipse@{\filled@Region@\filledEllipse@@} +\xydefcsname@{shape [F...]}#1{\xyFN@\Fshape@#1:@} +\xylet@\whichframe@@=\empty +\xylet@\whichoptions@@=\empty +\xydef@\Fshape@#1:{\def\whichframe@@{{#1}}% + \DN@{{}}\ifx\whichframe@@\next@ \def\whichframe@@{{-}}\fi + \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\circleEdge}\ifx\next@\nextii@ + \DN@##1{\def\whichframe@@{[o]##1}}% + \expandafter\next@\expandafter{\whichframe@@}\fi + \let\whichoptions@@=\empty \xyFN@\Fshape@i} +\xydef@\Fshape@i{% + \ifx @\next \let\next@=\Fshape@x + \else\addLT@\ifx\next \let\next@=\Fshape@iii + \else \let\next@=\Fshape@ii \fi\fi \next@} +\xydef@\Fshape@ii#1:{% + \expandafter\def\expandafter\whichoptions@@\expandafter{\whichoptions@@[#1]}% + \xyFN@\Fshape@i} +\xydef@\Fshape@iii#1:{\DN@##1{\def\whichframe@@{#1##1}}% + \expandafter\next@\expandafter{\whichframe@@}\xyFN@\Fshape@i} +\xydef@\Fshape@x @{% + \edef\next@##1{\noexpand\addbeforeDrop@@{{\EdgefromtheEdge@##1}}}% + \DNii@##1##2{\next@{\saveframestyles@{\setbox\z@=\object##2\frm##1% + \xypre@Style@@\Drop@@\xypost@Style@@\restoreframestyles@}}}% + \expandafter\expandafter\expandafter\nextii@ + \expandafter\expandafter\expandafter{% + \expandafter\whichframe@@\expandafter}\expandafter{\whichoptions@@}} +\xydef@\saveframestyles@{% + \expandafter\def\expandafter\afterframe@preStyle@\expandafter{\preXY@style@}% + \expandafter\def\expandafter\afterframe@postStyle@\expandafter{\postXY@style@}} +\xydef@\restoreframestyles@{% + \expandafter\gdef\expandafter\preXY@style@\expandafter{\afterframe@preStyle@}% + \expandafter\gdef\expandafter\postXY@style@\expandafter{\afterframe@postStyle@}% + \def\afterframe@preStyle@{}\def\afterframe@postStyle@{}} +\xydef@\xycircleframe@x@{\L@=\R@ \xycircleframe@x@i}% +\xydef@\xyellipseframe@x@#1#2{\R@=#1\relax \L@=#2\relax \xycircleframe@x@i} +\xydef@\xycircleframe@x@i{% + \ifx\framehfill\frm@solidh@@\def\circleSTYLE@{}% + \else\ifx\framehfill\frm@doth@@ + \expandafter\def\expandafter\circleSTYLE@\expandafter{\addDOT@{}}% + \else\ifx\framehfill\frm@dashh@@ + \expandafter\expandafter\expandafter\def\expandafter\expandafter + \expandafter\circleSTYLE@\expandafter\expandafter\expandafter + {\expandafter\addDASH@\addDASH@{}}% + \fi\fi\fi \xycircleframe@x@x } +\xydef@\xycircleframe@x@x{\hbox{\vbox{\vskip\L@ + \hbox to2\R@{\hfill \buildcircle@ \hfill}\vskip\L@ }}} +\xydef@\UseCurveFrames@{% + \let\circled@x@@=\xycircleframe@x@ + \let\ellipsed@x@@=\xyellipseframe@x@ } +\def\UseCurveFrames{\xywithoption{curve}{\UseCurveFrames@}}% +\xydef@\UseFontFrames@{% + \let\circled@x@@=\circled@x@ + \let\ellipsed@x@@=\ellipsed@x@ } +\xylet@\UseFontFrames=\UseFontFrames@ +\xydef@\UnloadFrames@{% + \let\framed@body@@=\framed@body@ + \let\circled@x@@=\circled@x@ + \let\ellipsed@x@@=\ellipsed@x@ + \let\frame@fill@@=\frame@fill@ + \let\frame@emph@@=\frame@emph@ + \let\filledRectangle@@=\bblacked@ + \let\filledCircle@@=\bblacked@ + \let\filledEllipse@@=\bblacked@ + \let\filledOval@@=\bblacked@ +} +\xyaddunsupport{frame}\UnloadFrames@ +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xygraph.tex b/macros/generic/diagrams/xypic/texinputs/xygraph.tex new file mode 100644 index 0000000000..fef420ce6f --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xygraph.tex @@ -0,0 +1,219 @@ +%% xygraph.tex from $Id: xygraph.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Graph Combinator feature'' option. +%% Copyright (c) 1994-1997 Kristoffer H. Rose +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{graph}{Graph feature}{\stripRCS$Revision: 3.11 $}% + {Kristoffer H.~Rose}{krisrose@tug.org}% + {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)} +\xyrequire{arrow}\xycatcodes +\xydef@\xygraph#1{\relax\graph#1\endgraph} +\xydef@\graph{\if\inxy@ \DN@{\xy@@{\nter@{}}}% + \else \DN@{\xy \xy@\xy{\nter@\endxy}}\fi \next@ + \xy@\xygraph{\senter@ \idfromc@{?NODE}\spushc@ + \expandafter\let\expandafter\next@\csname Q@graphbase\endcsname + \ifx\next@\relax \setbase@\z@\z@{3pc}\z@ + \else \expandafter\next@ \fi}% + \GRAPH[]} +\xydef@\endgraph{\ignorespaces} +\xydef@\GRAPH{\xyFN@\GRAPH@} +\xydef@\GRAPH@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\GRAPH@}% + \else\ifx :\next \DN@:{\xy@:{}\expandafter\GRAPHar@\GRAPHeveryarrow@@}% + \else\addDASH@\ifx\next + \addDASH@\DN@{\xy@-{}\expandafter\GRAPHar@\GRAPHeveryline@@}% + \else\ifx (\next + \DN@({\xy@({\spushid@{?NODE}\idfromc@{?NODE}}\xyFN@\GRAPH@}% + \else\ifx ,\next + \DN@,{\xy@,{\cfromid@{?NODE}}\xyFN@\GRAPH@}% + \else\ifx )\next + \DN@){\xy@){\cfromid@{?NODE}% + \tests@\z@{\idfroms@{?NODE}\z@ \spop@}{\xyerror@{) without (}{}}}% + \xyFN@\GRAPH@}% + \else\ifx \endgraph\next \DN@{\xy@@{\tests@\z@\spop@\sleave@\leave@}}% + \else\ifx \end\next \DN@{\xy@@{\tests@\z@\spop@\sleave@\leave@}}% + \else\ifx ~\next + \DN@~{\xy@@{\enter@\cfromthec@}\afterNODE{\leave@ \xyFN@\GRAPH@}!}% + \else \DN@{\afterNODE{\xyFN@\GRAPH@}}% + \fi\fi\fi\fi\fi\fi\fi\fi\fi \next@} +\xylet@\GRAPHsaved@PATHafterPOS=\PATHafterPOS +\xylet@\GRAPHsaved@afterar@@=\afterar@@ +\xydef@\GRAPHar@{% + \let\PATHafterPOS=\afterNODE \let\afterar@@=\GRAPHafterar@ \ar} +\xydef@\GRAPHafterar@{% + \let\PATHafterPOS=\GRAPHsaved@PATHafterPOS + \let\afterar@@=\GRAPHsaved@afterar@@ + \xy@@{\cfromid@{}}\xyFN@\GRAPH@} +\xylet@\afterNODE@@=\empty +\xydef@\afterNODE#1{\xy@@{\enter@\pfromthep@}% + \DN@##1{\def\afterNODE@@{\xy@@\leave@ \def\afterNODE@@{##1}#1}}% + \expandafter\next@\expandafter{\afterNODE@@}% + \xyFN@\NODE@} +\xylet@\theMOVE@@=\relax +\xydef@\NODE@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\NODE@}% + \else\ifx [\next \DN@[##1]{\xy@{[##1]}{}% + \def\theMOVE@@{[##1]}\xyFN@\MOVE@##1]}% + \else\ifx "\next \DN@ "##1"{% + \xy@{"##1"}{\cfromid@{##1}}\def\theMOVE@@{"##1"}\xyFN@\NODE@i}% + \else\ifx ?\next \DN@ ?{% + \xy@?{\cfromid@{?NODE}}\def\theMOVE@@{?}\xyFN@\NODE@i}% + \else\ifx !\next \def\theMOVE@@{[]}\let\next@=\NODE@i + \else \testAND@\iffalse + \DN@##1{\xy@{}{\pfromc@ \advance\X@c\X@xbase \advance\Y@c\Y@xbase + \czeroEdge@}\jumpMOVE@ \xyFN@\NODE@i}% + \else\ifx \\\next + \DN@\\{\xy@\\{\pfromc@ \advance\X@c\X@xbase \advance\Y@c\Y@xbase + \R@c=\X@ybase \U@c=\Y@ybase \intersect@ + \advance\X@c-\X@ybase \advance\Y@c-\Y@ybase + \czeroEdge@}\def\theMOVE@@{\\}\xyFN@\NODE@i}% + \else \xyerror@{Illegal : \string`\meaning\next\string' unexpected}{}% + \fi\fi\fi\fi\fi\fi\fi \next@} +\xydef@\jumpMOVE@@{&} +\xydef@\jumpMOVE@{\let\theMOVE@@=\jumpMOVE@@} +\xydef@\MOVE@{\xy@@{\count@=\z@ \count@@=\z@}% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\MOVE@}% + \else\ifcat A\noexpand\next \let\next@=\MOVE@letter + \else \let\next@=\MOVE@x \fi\fi \next@} +\xydef@\MOVE@letter{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\MOVE@letter}% + \else\ifx u\next \DN@ u{\xy@@{\advance\count@\@ne}\xyFN@\MOVE@letter}% + \else\ifx d\next \DN@ d{\xy@@{\advance\count@\m@ne}\xyFN@\MOVE@letter}% + \else\ifx l\next \DN@ l{\xy@@{\advance\count@@\m@ne}\xyFN@\MOVE@letter}% + \else\ifx r\next \DN@ r{\xy@@{\advance\count@@\@ne}\xyFN@\MOVE@letter}% + \else \let\next@=\MOVE@x \fi\fi\fi\fi\fi \next@} +\xydef@\MOVE@x{% + \ifx ]\next \DN@ ]{\MOVE@hop \xyFN@\NODE@i}% + \else\ifx (\next \DN@{\MOVE@hop \xyFN@\MOVE@place}% + \else\ifx !\next \DN@{\MOVE@hop \xyFN@\MOVE@place}% + \else\ifx /\next \DN@{\MOVE@hop \xyFN@\MOVE@place}% + \else\addLT@\ifx\next \DN@{\MOVE@hop \xyFN@\MOVE@place}% + \else\addGT@\ifx\next \DN@{\MOVE@hop \xyFN@\MOVE@place}% + \else\addDASH@\ifx\next \addDASH@\DN@{\xyerror@{- not implemented yet}{}}% + \else \xyerror@{illegal : \codeof\theMOVE@@}{}\let\next@=\NODE@i + \fi\fi\fi\fi\fi\fi\fi \next@} +\xydef@\MOVE@hop{\xy@@{\pfromc@ \czeroEdge@ + \edef\next@{\the\count@@,\the\count@ @}\expandafter\vfromcartesian@@\next@ + \advance\X@c-\X@origin \advance\Y@c-\Y@origin + \advance\X@c\X@p \advance\Y@c\Y@p}} +\xydef@\MOVE@place{\xy@@\no@@ \afterPLACE{\xyFN@\MOVE@}} +\xydef@\NODE@i{\let\next@=\NODE@x + \ifx \space@\next \expandafter\DN@\space{\xyFN@\NODE@i}% + \else\addEQ@\ifx \next + \addEQ@\DN@"##1"{\xy@{="##1"}{\idfromc@{##1}}\xyFN@\NODE@i}% + \else\ifx !\next \DN@!{\xyFN@\NODE@escape}% + \else\ifx :\next + \else\addDASH@\ifx\next + \else\ifx (\next + \else\ifx ,\next + \else\ifx )\next + \else\ifx ~\next + \else\ifx [\next + \else\ifx "\next + \else\ifx ?\next + \else\ifx ^\next + \else\ifx _\next + \else\ifx |\next + \else\addLQ@\ifx\next + \else\addRQ@\ifx\next + \else \testAND@ \iffalse + \else\ifx \\\next + \else\ifx \endgraph\next + \else\ifx \end\next + \else \let\next@=\NODE@it + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@} +\xydef@\NODE@x{\xy@@{\idfromc@{}}\afterNODE@@} +\xydef@\NODE@it{\let\PATHlabelit@@=\NODEit@ \PATHit@} +{\xyuncatcodes \gdef\next{+}} +\xylet@\GRAPHnodemodifiers@@=\next +\xydef@\NODEit@#1{% + \DN@{#1}\ifx\next@\empty + \DN@{\expandafter\NODEit@i\expandafter{\GRAPHnodemodifiers@@}}% + \else \DN@{\NODEit@i{#1}}\fi \next@} +\def\NODEit@i#1#2{\xy@{*#1{#2}}{\drop@{#1}{#2}}% + \DN@{\addEQ@\ifx\next\else \xy@@{\idfromc@{#2}}\fi \NODE@i}% + \xyFN@\next@} +\xydef@\NODE@escape{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\NODE@escape}% + \else\ifcat A\noexpand\next \DN@##1{\rungraphescape@{##1}}% + \else\ifcat !\noexpand\next \DN@##1{\rungraphescape@{##1}}% + \else\ifx \bgroup\next \DN@##1{\xy@{!{##1}}{}\POS##1\relax \xyFN@\NODE@i}% + \else\ifx ~\next \let\next@=\graphsetup@ + \else \DN@{\xyerror@{Unknown graph }{}\xyFN@\NODE@i}% + \fi\fi\fi\fi\fi \next@} +\xydefcsname@{graph !M}#1#{\NODE@matrix{#1}} +\xydef@\NODE@matrix#1#2{\xyerror@{matrix feature not loaded}{}\xyFN@\GRAPH@} +\xydef@\NODE@matrix@#1#2{\xy@{!M#1{#2}}{}% + \def\everyentry@{\GRAPHeveryentry}% + \xymatrix#1{#2}% + \let\everyentry@=\empty \insertmatrixingraph@ \xyFN@\NODE@i} +\xydef@\GRAPHeveryentry{\def\:{\ar}\def\="##1"{\xy@@{\idfromc@{##1}}}} +\xywithoption{matrix}{\let\NODE@matrix=\NODE@matrix@} +\xydef@\insertmatrixingraph@{% + \xy@@{\enter@{\cfromthec@ \pfromthep@}% + \expandafter\let\expandafter\next@\csname Q@1,1\endcsname + \ifx\next@\relax\else + \next@ \swap@ + \expandafter\let\expandafter\next@\csname Q@1,2\endcsname + \ifx\next@\relax\else \next@ \setbase@\X@p\Y@p\X@c\Y@c + \expandafter\let\expandafter\next@\csname Q@2,1\endcsname + \ifx\next@\relax\else + \next@ \setbase@@{-\X@c}{-\Y@c}\fi\fi\fi + \leave@}} +\xydefcsname@{graph !P}#1#{\NODE@poly{#1}} +\xydef@\NODE@poly#1#2{\xyerror@{poly(gon) feature not loaded}{}\xyFN@\GRAPH@} +\xydef@\NODE@poly@#1#2{\xy@{!P#1{#2}}{}\xypoly@#1{#2}\xyFN@\NODE@i} +\xywithoption{poly}{\let\NODE@poly=\NODE@poly@} +\xydefcsname@{graph !E}#1#{\NODE@arc{#1}!} +\xydef@\NODE@arc#1#2{\xyerror@{(ellipse+)arc feature not loaded}{}% + \xyFN@\GRAPH@} +\xydef@\NODE@arc@#1#2{\xy@{!E#1{#2}}{}\ellipse#1{#2}\xyFN@\NODE@i} +\xywithoption{arc}{\let\NODE@arc=\NODE@arc@} +\xylet@\GRAPHeveryarrow@@=\empty +{\xyuncatcodes \gdef\next{@{-}}} +\xylet@\GRAPHeveryline@@=\next +\xydef@\graphsetup@~{\xyFN@\graphsetup@i} +\xydef@\graphsetup@i{% + \ifx :\next \DN@:##1{\def\GRAPHeveryarrow@@{##1}\xyFN@\NODE@i}% + \else\addDASH@\ifx\next + \addDASH@\DN@##1{\def\GRAPHeveryline@@{##1}\xyFN@\NODE@i}% + \else\ifx *\next \DN@*##1{\def\GRAPHnodemodifiers@@{##1}\xyFN@\NODE@i}% + \else\ifcat A\next \DN@##1##2{\newgraphescape{##1}{##2}\xyFN@\NODE@i}% + \else \DN@{\xyerror@{illegal graph setup \codeof\next@}{}\xyFN@\NODE@i}% + \fi\fi\fi\fi \next@} +\xydef@\newgraphescape#1{% + \expandafter\let\expandafter\next\csname graph !#1\endcsname + \ifx\next\relax\else \expandafter\let\csname G!#1\endcsname=\undefined + \xywarning@{Redefining graph !#1}\fi + \expandafter\gdef\csname graph !#1\endcsname{% + \expandafter\let\expandafter\next\csname G!#1\endcsname + \expandafter\xyFN@\expandafter\NODE@\next}% + \DN@{\newgraphescape@{#1}}\xyFN@\next@} +\xydef@\newgraphescape@#1{% + \ifx [\next + \ifx\newcommand\undefined \xyerror@{[n] only with LaTeX}% + \else + \def\nextiv@{\expandafter\newcommand\expandafter{\csname G!#1\endcsname}}\fi + \else \def\nextiv@{\expandafter\gdef\csname G!#1\endcsname}\fi \nextiv@} +\xydef@\rungraphescape@#1{% + \expandafter\let\expandafter\next\csname graph !#1\endcsname + \ifx\next\relax \xyerror@{Undefined graph !#1}\fi \next} +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyidioms.tex b/macros/generic/diagrams/xypic/texinputs/xyidioms.tex new file mode 100644 index 0000000000..c4026d436b --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyidioms.tex @@ -0,0 +1,72 @@ +%% xyidioms.tex from $Id: xyidioms.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Format-dependent idioms for Xy-pic. +%% Copyright (c) 1991-1997 Kristoffer H. Rose +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyidiomsloaded\empty \message{not reloaded}\endinput \fi +\let\xyidiomsloaded=\empty +\xywarnifdefined\A@ \dimendef\A@=4 +\xywarnifdefined\B@ \dimendef\B@=6 +\xywarnifdefined\R@ \dimendef\R@=8 +\ifx\undefined\AveryUNLIKELYc@ntr@lSEQUENCE@@\else +\errmessage{Xy-pic Error: \string\undefined\space defined.}\fi +\ifx\undefined\literal@ \def\literal@#1{#1}\fi +\ifx\undefined\eat@ \def\eat@#1{}\fi +\xydef@\xyFN@{\futurelet\next} +\ifx\undefined\DN@ \def\DN@{\def\next@}\fi +\ifx\undefined\DNii@ \def\DNii@{\def\nextii@}\fi +\ifx\undefined\setboxz@h\def\setboxz@h{\setbox\z@\hbox}\fi +\ifx\undefined\wdz@ \def\wdz@{\wd\z@}\fi +\ifx\undefined\boxz@ \def\boxz@{\box\z@}\fi +\ifx\undefined\W@ \def\W@{\immediate\write16 }\fi +\ifx\undefined\space@ \def\space@.{\futurelet\space@\relax}\space@. \fi +\ifx\undefined\notempty \def\notempty#1{T\if @#1@F\else T\fi}\fi +\xydef@\xysetup@dummy#1{\xyuncatcodes#1} +\xywarnifdefined\xysetup@@ +\ifx\AtEndDocument\undefined + \expandafter\ifx\csname amsppt.sty\endcsname\relax + \let\xysetup@@=\xysetup@dummy + \else + \def\xysetup@@#1{% + \expandafter\def\expandafter\topmatter\expandafter{\topmatter + #1\xyuncatcodes}}\fi +\else + \def\xysetup@@#1{\AtBeginDocument{#1\xyuncatcodes}} +\fi +\ifx\xysetup@@\xysetup@dummy\else + \xysetup@@{\let\xysetup@@=\xysetup@dummy \xyuncatcodes}\fi +\xywarnifdefined\xyclosedown@@ +\ifx\AtEndDocument\undefined \let\xyclosedown@@=\eat@ +\else \def\xyclosedown@@#1{\AtEndDocument{#1}}\fi +\xylet@\xy@begindvi=\literal@ +\ifx\undefined\AtBeginDvi\else + \AtBeginDocument{\let\xy@begindvi=\AtBeginDvi} + \AtBeginDvi{\global\let\xy@begindvi=\literal@}\fi +\ifx\amstexloaded@\relax +\xylet@\toks@ii=\toks@@ \endinput \fi +\ifx\@tempcnta\undefined +\xynew@{count}\count@@ +\xynew@{count}\count@@@ +\else +\xylet@\count@@=\@tempcnta +\xylet@\count@@@=\@tempcntb +\fi +\ifx\undefined\toks@ii \toksdef\toks@ii=2 \fi +\endinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyimport.tex b/macros/generic/diagrams/xypic/texinputs/xyimport.tex new file mode 100644 index 0000000000..6c5e340d4e --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyimport.tex @@ -0,0 +1,68 @@ +%% xyimport.tex from $Id: xyimport.doc,v 3.13 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Import feature'' option. +%% Copyright (c) 1993-1997 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{import}{Import graphics extension}{\stripRCS$Revision: 3.13 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xydef@\xyimport#1#{\xyimport@{#1}} +\xydef@\xyimport@#1#2{\xydelayimport@{#1}{#2}} +\xydef@\xydelayimport@#1#2{\xy@@ix@{#1{#2}}% + \xy@@{\expandafter\xyextern@\the\toks9}} +\xydef@\xyextern@(#1,#2){\hbox\bgroup\R@c=#1\p@ \U@c=#2\p@\xyextern@i} +\xydef@\xyextern@i#1#{\DN@{#1}% + \ifx\next@\empty \L@c=\z@ \D@c=\z@ \DN@{\xyextern@x}% + \else \DN@{\xyextern@ii#1}\fi \next@ } +\xydef@\xyextern@ii(#1,#2){\L@c=#1\p@ \D@c=#2\p@ + \advance\R@c-\L@c \advance\U@c-\D@c \xyextern@x} +\xydef@\xyimportdefault@{3} +\xydef@\xyexportwarning@#1#2#3{\xywarning@{% + #1 for import has zero #2; using \xyimportdefault@#3 default}} +\xydef@\xyextern@x#1{\toks@={\egroup\L@c=}\setboxz@h{#1}% + \dimen@ii=\L@c \advance\dimen@ii\R@c \dimen@=\wdz@ + \ifdim\dimen@=\z@ \xyexportwarning@{graphic}{width}{cm}% + \dimen@=\xyimportdefault@ cm\fi + \ifdim\dimen@ii=\z@ \xyexportwarning@{coords}{width}{unit}% + \dimen@ii=\xyimportdefault@\p@\fi + \quotient@\next@\dimen@\dimen@ii \dimen@=\next@\p@ + \edef\tmp@{\expandafter\removePT@\the\L@c}\L@c=\tmp@\dimen@ + \expandafter\addtotoks@\expandafter{\the\L@c\relax\R@c=}% + \edef\tmp@{\expandafter\removePT@\the\R@c}\R@c=\tmp@\dimen@ + \expandafter\addtotoks@\expandafter{\the\R@c\relax\setbase@\z@\z@}% + \expandafter\addtotoks@\expandafter{\expandafter{\the\dimen@}\z@\D@c=}% + \dimen@ii=\U@c \advance\dimen@ii\D@c \dimen@=\ht\z@\advance\dimen@\dp\z@ + \ifdim\dimen@=\z@ \xyexportwarning@{graphic}{height}{cm}% + \dimen@=\xyimportdefault@ cm\fi + \ifdim\dimen@ii=\z@ \xyexportwarning@{coords}{height}{unit}% + \dimen@ii=\xyimportdefault@\p@\fi + \quotient@\next@\dimen@\dimen@ii \dimen@=\next@\p@ + \edef\tmp@{\expandafter\removePT@\the\D@c}\D@c=\tmp@\dimen@ + \expandafter\addtotoks@\expandafter{\the\D@c\relax\U@c=}% + \edef\tmp@{\expandafter\removePT@\the\U@c}\U@c=\tmp@\dimen@ + \expandafter\addtotoks@\expandafter{\the\U@c\relax\setbase@@\z@}% + \expandafter\addtotoks@\expandafter{\expandafter{\the\dimen@}}% + \setboxz@h{\kern-\L@c\lower\D@c\boxz@\kern\L@c}% + \wd\z@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@ \the\toks@ \X@c=\z@ \Y@c=\z@ + \ifdim\X@min>-\L@c \X@min=-\L@c \fi \ifdim\X@max<\R@c \X@max=\R@c \fi + \ifdim\Y@min>-\D@c \Y@min=-\D@c \fi \ifdim\Y@max<\U@c \Y@max=\U@c \fi + \idfromc@{import}\POS } +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyknot.tex b/macros/generic/diagrams/xypic/texinputs/xyknot.tex new file mode 100644 index 0000000000..4c5d7108ed --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyknot.tex @@ -0,0 +1,901 @@ +%% xyknot.tex from $Id: xyknot.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Knots and Links'' feature. +%% Copyright (c) 1994-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{knot}{Knots and Links feature}{\stripRCS$Revision: 3.9 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\message{knots and links,} +\xyrequire{arrow}\xycatcodes +\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 +\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@} +\xydef@\xykcross@#1{\xykcheckTIPS@ + \expandafter\toks@\expandafter{\expandafter#1\knotSTYLE}} +\xydef@\xykoverstring@{\addtotoks@{{}}\xykmidbreak@ \xyknottips@} +\xydef@\xykunderstring@{\xykprebreak@ \xykpostbreak@ \xyknottips@} +\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@ }% +\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)}} +{\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 +\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@ }% +\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)}} +{\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 +\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@ }% +\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)}} +{\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 +\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} +\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@ } +\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@} +\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@ } +{\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 +\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@@ } +\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} +\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@ } +{\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@ +\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\DN@\expandafter{% + \expandafter\appendtoholder@@\nextii@{#1#2}\next@ \xyFN@\xykparser@}% + \fi\fi\fi\fi \next@ } +{\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@}} +{\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@@@ } +\xydef@\xykz#1{\let\xyk@@=#1\xy@@{\let\xyk@@=#1}} +{\xyuncatcodes \global\let\next=_} +\xylet@\xyk@@=\next +\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 +\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{% + \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}} +\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@ } +\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} +\xydef@\xykparsejoin@{% + \def\xykSCALE@@{}% + \edef\xyknotPLACE{\xykmidPLACE@}% + \let\xykparser@=\xykparsejoin@@ + \def\xykdefaultbreak@{\let\xykbreak@=\xykforetemp@ + \def\xyknotPLACE{(.5)}\appendtoholder@}% + \xyFN@\xykparsescale@ } +{\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)}% + \appendtoholder@}\addLT@\DN@{\xyprecross@}% + \else\addGT@\ifx\next \let\xykbreak@=\xykforetemp@ + \def\xykdefaultbreak@{\def\xyknotPLACE{(.5)}% + \appendtoholder@}\addGT@\DN@{\xypostcross@}% + \else\ifx|\next \let\xykbreak@=\xyknulltemp@ + \def\xykdefaultbreak@{\def\xyknotPLACE{(.5)}% + \appendtoholer@}\DN@|{\xymidcross@}% + \else\addEQ@\ifx\next \addEQ@\DN@{\xyFN@\xykparsetips@@}% + \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 +\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 +\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} +\xydef@\xykjoin@#1{% + \expandafter\toks@\expandafter{\expandafter#1\knotSTYLE}} +\xydef@\xyksetjoin@{\xykcheckTIPS@ + \xykprebreak@ \xykmidbreak@ \xykpostbreak@ \xyknottips@ } +\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@ }% +\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)}} +{\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 +\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@{}} +{\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 +\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@ }% +\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)}} +{\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 +{\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 +\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@\xykprebreak@@{}% +\xydef@\xykpostbreak@@{}% +\xydef@\xykmidbreak@@{}% +\xydef@\xykprePLACE@{(.25)}% +\xydef@\xykpostPLACE@{(.75)}% +\xydef@\xykmidPLACE@{}% +\xylet@\xykPLACE@=\xykmidPLACE@ +{\gdef\next#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@ +{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8{\xykflexbase{#1}{#2}{#3}{#4}% + "#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}% + "#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 +{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\xykflexbase{#1}{#2}{#3}{#4}% + "#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}% + "#1",{\ar @{#5}@'{"#1"+(.1875,.0625)@++(.1875,.1875)@+, + "#2"+(-.1875,.0625)@+}"#2" #6}, + "#3",{\ar @{#5}@'{"#3"+(#9,-.125)@+,"#3"+(.25,-.25)@+, + "#4"+(-#9,-.125)@+}"#4" #7}% +\restore \POS#8}} +\xylet@\Xunover=\next +{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\xykflexbase{#1}{#2}{#3}{#4}% + "#1",{\ar @{#5}@'{"#1"+(0,.125)@++(.125,.25)@+, + "#4"+(-.125,.375)@++(.125,-.25)@+}"#4" #6}, +\restore \POS#7}} +\xylet@\Xcap=\next +{\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 +{\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 +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyline.tex b/macros/generic/diagrams/xypic/texinputs/xyline.tex new file mode 100644 index 0000000000..d70d6f84ab --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyline.tex @@ -0,0 +1,237 @@ +%% xyline.tex from $Id: xyline.doc,v 3.10 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Line Width'' extension. +%% Copyright (c) 1993-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{line}{Line styles extension}{\stripRCS$Revision: 3.10 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xydefcsname@{*stylechar@|@}#1{\xyFN@\xywidthchar@#1@@}% +\xydefcsname@{style [thinner]}{\xyshape@thinner@} +\xydefcsname@{style [thicker]}{\xyshape@thicker@} +\xynew@{dimen}\xylinethick@ \xylinethick@=\xydashw@ +\xydef@\xyshape@thicker@{\xylinewidth@i{\multiply\xylinethick@\tw@}} +\xydef@\xyshape@thinner@{\xylinewidth@i{\divide\xylinethick@\tw@}} +\xydef@\xylinewidth@i#1{\edef\xyprevwidth@@{\the\xylinethick@}% + #1\edef\next@{\xylinethick@=\the\xylinethick@}% + \edef\next@ii{\noexpand\addtotoks@{% + \noexpand\xylinewidth@@{\next@}{\xyprevwidth@@}}}% + \next@ii } +\xydef@\xywidthchar@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\xywidthchar@}% + \else\ifx @\next \DN@ @@{\checkXyStyle@}% + \else\ifx (\next \DN@ (##1)##2@@{% + \xylinewidth@i{\xylinethick@=##1\xydashw@}}% + \else\addLT@\ifx \next \addGT@{\addLT@\DN@ ##1}##2@@{% + \xylinewidth@i{\xylinethick@=##1\relax}}% + \else\ifx *\next \DN@ *@@{\recoverXyStyle@}% + \else\addEQ@\ifx \next \addEQ@\DN@##1@@{\checkXyStyle@ + \addtotoks@{\xynamestyle@{##1}}}% + \else\ifx C\next \DN@ C##1@@{\xysetlinecap@{##1}@}% + \else\ifx J\next \DN@ J##1@@{\xysetlinejoin@{##1}@}% + \else\ifx M\next \DN@ M(##1)@@{\xymiterlimit@{##1}@}% + \else \DN@##1@@{\xylinewidth@i{\xylinethick@=##1\relax}}% + \fi\fi\fi\fi\fi\fi\fi\fi\fi \next@} +\xydef@\xylinecap@{2} +\xydef@\xylinejoin@{2} +\xydef@\xylinemiter@{10} +\xydefcsname@{style [bevel]}{\xyshape@bevel@} +\xydefcsname@{style [roundjoin]}{\xyshape@rdjoin@} +\xydefcsname@{style [miter]}{\xyshape@miter@} +\xydefcsname@{style [butt]}{\xyshape@butt@} +\xydefcsname@{style [roundcap]}{\xyshape@rdcap@} +\xydefcsname@{style [projcap]}{\xyshape@projcap@} +\xydef@\xyshape@butt@{\xysetlinecap@@0} +\xydef@\xyshape@rdcap@{\xysetlinecap@@1} +\xydef@\xyshape@projcap@{\xysetlinecap@@2} +\xydef@\xyshape@miter@{\xysetlinejoin@@0} +\xydef@\xyshape@rdjoin@{\xysetlinejoin@@1} +\xydef@\xyshape@bevel@{\xysetlinejoin@@2} +\xydef@\xysetlinecap@#1@{\DN@ii{#1}\count@=#1\relax + \expandafter\DN@\expandafter{\the\count@}% + \ifx\next@\next@ii\else + \xywarning@{ignoring extra tokens in line-cap: \next@}\fi + \expandafter\xysetlinecap@@\expandafter{\next@}} +\xydef@\xysetlinejoin@#1@{\DN@ii{#1}\count@=#1\relax + \expandafter\DN@\expandafter{\the\count@}% + \ifx\next@\next@ii\else + \xywarning@{ignoring extra tokens in line-join: \next@}\fi + \expandafter\xysetlinejoin@@\expandafter{\next@}} +\xydef@\xysetmiterlimit@#1@{\DN@ii{#1}\dimen@=#1\p@\relax + \edef\next@{\expandafter\removePT@\the\dimen@}% + \ifx\next@\next@ii\else + \xywarning@{ignoring extra tokens in miter-limit: \next@}\fi + \expandafter\xysetmiterlimit@@\expandafter{\next@}} +\xydef@\xysetlinecap@@#1{\xy@linecap@i{\def\xylinecap@{#1}}} +\xydef@\xysetlinejoin@@#1{\xy@linejoin@i{\def\xylinejoin@{#1}}} +\xydef@\xysetmiterlimit@@#1{% + \xy@linemiter@i{\def\xylinemiter@{#1}}} +\xydef@\xy@linecap@i#1{#1\addtotoks@{\xy@linecap@@{#1}}} +\xydef@\xy@linejoin@i#1{#1\addtotoks@{\xy@linejoin@{#1}}} +\xydef@\xy@linemiter@i#1{#1\addtotoks@{\xy@linemiter@{#1}}} +\xydef@\xy@linecap@#1{\checkXyStyle@ \edef\xyprevcap@@{\xylinecap@}% + #1\let\prexylinecap@=\prexylinecap@@ \let\postxylinecap@=\postxylinecap@@ + \applyLIFOstyle@\prexylinecap@{\xylinecap@}% + \postxylinecap@{\xyprevcap@@}} +\xydef@\prexylinecap@@{\let\prexylinecap@=\eat@ + \let\postxylinecap@=\postxylinecap@@ \outputxylinecap@ } +\xydef@\postxylinecap@@{\let\postxylinecap@=\eat@ + \let\prexylinecap@=\prexylinecap@@ \resetxylinecap@@ } +\xylet@\prexylinecap@=\prexylinecap@@ +\xylet@\postxylinecap@=\postxylinecap@@ +\xydef@\outputxylinecap@#1{\xycapSpecial@@{#1}} +\xydef@\resetxylinecap@#1{\resetxylinecap@i{#1}\outputxylinecap@{#1}} +\xydef@\resetxylinecap@i#1{\def\xylinecap@{#1}} +\xylet@\resetxylinecap@@=\resetxylinecap@ +\xylet@\xycapSpecial@@=\eat@ +\xydef@\xy@linejoin@#1{\checkXyStyle@ + \edef\xyprevjoin@@{\xylinejoin@}#1% + \let\prexylinejoin@=\prexylinejoin@@ + \let\postxylinejoin@=\postxylinejoin@@ + \applyLIFOstyle@\prexylinejoin@{\xylinejoin@}% + \postxylinecap@{\xyprevjoin@@}} +\xydef@\prexylinejoin@@{\let\prexylinejoin@=\eat@ + \let\postxylinejoin@=\postxylinejoin@@ \outputxylinejoin@ } +\xydef@\postxylinejoin@@{\let\postxylinejoin@=\eat@ + \let\prexylinejoin@=\prexylinejoin@@ \resetxylinejoin@@ } +\xylet@\prexylinejoin@=\prexylinejoin@@ +\xylet@\postxylinejoin@=\postxylinejoin@@ +\xydef@\outputxylinejoin@#1{\xyjoinSpecial@@{#1}} +\xydef@\resetxylinejoin@#1{\resetxylinejoin@i{#1}\outputxylinejoin@{#1}} +\xydef@\resetxylinejoin@i#1{\def\xylinejoin@{#1}} +\xylet@\resetxylinejoin@@=\resetxylinejoin@ +\xylet@\xyjoinSpecial@@=\eat@ +\xydef@\xy@linemiter@#1{\checkXyStyle@ + \edef\xyprevmiter@@{\xylinemiter@}#1% + \let\prexylinemiter@=\prexylinemiter@@ + \let\postxylinemiter@=\postxylinemiter@@ + \applyLIFOstyle@\prexylinemiter@{\xylinemiter@}% + \postxylinecap@{\xyprevmiter@@}} +\xydef@\prexylinemiter@@{\let\prexylinemiter@=\eat@ + \let\postxylinemiter@=\postxylinemiter@@ \outputxylinemiter@ } +\xydef@\postxylinemiter@@{\let\postxylinemiter@=\eat@ + \let\prexylinemiter@=\prexylinemiter@@ \resetxylinemiter@@ } +\xylet@\prexylinemiter@=\prexylinemiter@@ +\xylet@\postxylinemiter@=\postxylinemiter@@ +\xydef@\outputxylinemiter@#1{\xymiterSpecial@@{#1}} +\xydef@\resetxylinemiter@#1{\resetxylinemiter@i{#1}\outputxylinemiter@{#1}} +\xydef@\resetxylinemiter@i#1{\def\xylinemiter@{#1}} +\xylet@\resetxylinemiter@@=\resetxylinemiter@ +\xylet@\xymiterSpecial@@=\eat@ +\xydef@\xypolyline#1{\xypolyline@{#1}} +\xydef@\xypolyline@#1{\hbox\bgroup + \enter@{\pfromthep@ \basefromthebase@ \cfromthec@}% + \def\xyps@list{}\edef\smapp@@{\s@bot}% + \smapxy@i{\enter@{\pfromthep@ \basefromthebase@ }% + \edef\xyps@list{\expandafter\removePT@\the\X@c\space + \expandafter\removePT@\the\Y@c\space \xyps@list}\leave@}% + \leave@ \xy@polystyle@@{#1}\xydopoly@style\egroup + \def\Drop@@{\styledboxz@}\def\Connect@@{\styledboxz@}}% +\xylet@\xypolyline@Special=\eat@ +\xylet@\xypolyfill@Special=\eat@ +\xylet@\xypolyeofill@Special=\eat@ +\xylet@\xypolydot@Special=\eat@ +\xylet@\xypolydash@Special=\eat@ +\xydef@\UnloadpolySpecials@{% + \let\xypolyline@Special=\eat@ + \let\xypolyfill@Special=\eat@ + \let\xypolyeofill@Special=\eat@ + \let\xypolydot@Special=\eat@ + \let\xypolydash@Special=\eat@ +} +\xydef@\xy@polystyle@#1{% + \let\poly@style@@=\xypolyline@Special + \DNii@{#1}\ifx\nextii@\empty + \else\DN@{*}\ifx\next@\nextii@ \let\poly@style@@=\xypolyfill@Special + \else\DN@{?}\ifx\next@\nextii@ \let\poly@style@@=\xypolyeofill@Special + \else\expandafter\DN@\expandafter{\addDOT@{}}\ifx\next@\nextii@ + \let\poly@style@@=\xypolydot@Special + \else\expandafter\DN@\expandafter{\addDASH@{}}\ifx\next@\nextii@ + \let\poly@style@@=\xypolydash@Special + \else\DN@{{*}}\ifx\next@\nextii@ \def\poly@style@@{\xypolystraight@{*}}% + \else \def\poly@style@@{\xypolystraight@{#1}}% + \fi\fi\fi\fi\fi\fi } +\xydef@\xydopoly@style{\expandafter\poly@style@@\expandafter{\xyps@list}} +\xydef@\xynopolystyle@#1#2{\xyundefinedLine@{polyline}{{#1}}@@} +\xydef@\xypolynospec@#1{\DNii@{#1}% + \ifx\nextii@\empty\def\poly@style@@{\xypolystraight@{-}}% + \else\DN@{.}\ifx\next@\nextii@ \def\poly@style@@{\xypolystraight@{.}}% + \else\DN@{-}\ifx\next@\nextii@ \def\poly@style@@{\xypolystraight@{--}}% + \else\DN@{*}\ifx\next@\nextii@ \def\poly@style@@{\xypolystraight@{.}}% + \else\DN@{?}\ifx\next@\nextii@ \def\poly@style@@{\xypolystraight@{.}}% + \else\DN@{{*}}\ifx\next@\nextii@ \def\poly@style@@{\xypolystraight@{*}}% + \else \def\poly@style@@{\xypolystraight@{#1}}% + \fi\fi\fi\fi\fi\fi } +\xydef@\xypolystraight@#1#2{% + \enter@{\pfromthep@ \basefromthebase@ \cfromthec@}% + \edef\smapp@@{\s@bot}\csname S@0\endcsname\czeroEdge@\pfromc@\def\smapp@@{0}% + \smapxy@i{\czeroEdge@\enter@{\pfromthec@}{\connect@\dir{#1}}\leave@}\leave@ } +\xylet@\xy@polystyle@@=\xypolynospec@ +\xydef@\UninstallPolylines@{% + \UnloadpolySpecials@ + \let\xy@polystyle@@=\xypolynospec@ } +\UninstallPolylines@ +\xydef@\xyundefinedLine@#1#2@@{% + \xywarning@{The #1 #2 effect is not implemented with the current driver.}}% +\xydef@\xynolinewidth@#1#2{% + \xyundefinedLine@{linewidth}{\the\xylinethick@}@@}% +\xydef@\xynolinecap@#1{\xyundefinedLine@{linecap}{\xylinecap@}@@}% +\xydef@\xynolinejoin@#1{\xyundefinedLine@{linejoin}{\xylinejoin@}@@}% +\xydef@\xynolinemiter@#1{\xyundefinedLine@{miterlimit}{\xylinemiter@}@@}% +\xylet@\xylinewidth@@=\xynolinewidth@ +\xylet@\xy@linecap@@=\xynolinecap@ +\xylet@\xy@linejoin@@=\xynolinejoin@ +\xylet@\xy@linemiter@@=\xynolinemiter@ +\xydef@\UnloadLine@#1{% + \ifx#1\relax\else\xyunload@{line width extension}\fi + \let\resetxyline@@=\resetxyline@ + \let\resetxylinecap@@=\resetxylinecap@ + \let\resetxylinejoin@@=\resetxylinejoin@ + \let\resetxylinemiter@@=\resetxylinemiter@ + \let\transxyline@@=\DN@ + \let\xylineSpecial@@=\eat@ + \let\xycapSpecial@@=\eat@ + \let\xyjoinSpecial@@=\eat@ + \let\xymiterSpecial@@=\eat@ + \let\xylinewidth@@=\xynolinewidth@ + \let\xy@linecap@@=\xynolinecap@ + \let\xy@linejoin@@=\xynolinejoin@ + \let\xy@linemiter@@=\xynolinemiter@ + \UninstallPolylines@ } +\xyaddunsupport{line}{\UnloadLine@\relax} +\xydef@\xylinewidth@#1#2{\checkXyStyle@ + #1\let\prexyline@=\prexyline@@ \let\postxyline@=\postxyline@@ + \applyLIFOstyle@\prexyline@{\the\xylinethick@}\postxyline@{#2}} +\xydef@\prexyline@@{\let\prexyline@=\eat@ + \let\postxyline@=\postxyline@@ \outputxyline@ } +\xydef@\postxyline@@{\let\postxyline@=\eat@ + \let\prexyline@=\prexyline@@ \resetxyline@@ } +\xylet@\prexyline@=\prexyline@@ +\xylet@\postxyline@=\postxyline@@ +\xydef@\resetxyline@#1{\resetxyline@i{#1}\outputxyline@{#1}} +\xydef@\resetxyline@i#1{\xylinethick@=#1\relax} +\xydef@\outputxyline@#1{\transxyline@@{#1}% + \expandafter\xylineSpecial@@\expandafter{\next@}} +\xylet@\resetxyline@@=\resetxyline@ +\xydef@\transxyline@#1{\edef\next@{\removePT@#1}} +\xylet@\transxyline@@=\DN@ +\xylet@\xylineSpecial@@=\eat@ +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xymacpat.xyp b/macros/generic/diagrams/xypic/texinputs/xymacpat.xyp new file mode 100644 index 0000000000..5bdf9716db --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xymacpat.xyp @@ -0,0 +1,60 @@ +% $Id: xymacpat.xyp,v 3.7 2011/03/14 20:14:00 krisrose Exp $ +% +% Patterns for Xy-pic tile extension. +% Copyright (c) 1995-1996 Ross Moore +% +% 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-2011 Kristoffer H. Rose +% +% 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 package; if not, see http://www.gnu.org/licenses/. +% +mac01 00 +mac02 08 +mac03 16 +mac04 32 +mac05 16 <55FF55FF55FF55FF> +mac06 32 +mac07 16 +mac08 48 <8888888888888888> <888888888888888888888888888888888888888888888888> +mac09 40 +mac10 56 <8010022001084004> <808080101010020202202020010101080808404040040404> +mac11 36 +mac12 42 +mac13 63 <8000000000000000> <808080000000000000000000000000000000000000000000> +mac14 58 <8040200002040800> <808080404040202020000000020202040404080808000000> +mac15 49 <8244394482010101> <828282444444393939444444828282010101010101010101> +mac16 34 +mac17 48 <55A04040550A0404> <555555A0A0A04040404040405555550A0A0A040404040404> +mac18 50 <2050888888880502> <202020505050888888888888888888888888050505020202> +mac19 31 +mac20 64 <0000000000000000> +mac21 60 <8000080080000800> +mac22 56 <8800220088002200> +mac23 48 <8822882288228822> +mac24 48 +mac25 32 +mac26 48 <1122448811224488> <111111222222444444888888111111222222444444888888> +mac27 48 +mac28 56 <0102040810204080> <010101020202040404080808101010202020404040808080> +mac29 56 +mac30 49 +mac31 51 <081C22C180010204> <0808081C1C1C222222C1C1C1808080010101020202040404> +mac32 50 <881422418800AA00> <888888141414222222414141888888000000AAAAAA000000> +mac33 58 <40A00000040A0000> <404040A0A0A00000000000000404040A0A0A000000000000> +mac34 51 <038448300C020101> <0303038484844848483030300C0C0C020202010101010101> +mac35 46 <8080413E080814E3> <8080808080804141413E3E3E080808080808141414E3E3E3> +mac36 44 <102054AAFF020408> <101010202020545454AAAAAAFFFFFF020202040404080808> +mac37 26 <77898F8F7798F8F8> <7777778989898F8F8F8F8F8F777777989898F8F8F8F8F8F8> +mac38 48 <0008142A552A1408> <0000000808081414142A2A2A5555552A2A2A141414080808> diff --git a/macros/generic/diagrams/xypic/texinputs/xymatrix.tex b/macros/generic/diagrams/xypic/texinputs/xymatrix.tex new file mode 100644 index 0000000000..9cdf39b8d7 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xymatrix.tex @@ -0,0 +1,500 @@ +%% xymatrix.tex from $Id: xymatrix.doc,v 3.14 2011/03/31 06:10:57 krisrose Exp $ +%% +%% Xy-pic ``Matrix'' feature. +%% Copyright (c) 1991-2011 Kristoffer H. Rose +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{matrix}{Matrix feature}{\stripRCS$Revision: 3.14 $}% + {Kristoffer H.~Rose}{krisrose@tug.org}% + {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)} +\xynew@{count}\Row +\xynew@{count}\Col +\xydef@\maxrow@{0} +\xydef@\maxcol@{0} +\xydef@\maxcolrow@{0} +\xynew@{toks}\queue@ +\xynew@{toks}\queue@@ +\xynew@{count}\qcount@ +\xynew@{count}\qcount@@ +\xydef@\clearq@{% + \global\queue@={}\global\qcount@=\@ne + \global\queue@@={}\global\qcount@@=\z@} +\xydef@\addq@#1{\global\advance\matrixsize@\@ne + \ifnum\qcount@@<\qcount@ \let\addq@@=\addq@i + \else \let\addq@@=\addq@ii \fi + \expandafter\addq@@\the\queue@@\addq@@{#1}} +\xylet@\addq@@=\relax +\xydef@\addq@i#1\addq@@#2{% + \global\advance\qcount@@\@ne \global\queue@@={#1#2}} +\xydef@\addq@ii#1\addq@@#2{% + \global\advance\qcount@\@ne \global\qcount@@=\z@ + \global\queue@=\expandafter{\the\queue@#1#2}\global\queue@@={}} +\xydef@\finishq@{\expandafter\addq@ii\the\queue@@\addq@@{}} +\xynew@{count}\matrixsize@ +\xynew@{if}\ifnoisymatrices@ \noisymatrices@true +\xydef@\SilentMatrices{\noisymatrices@false} +\xydef@\NoisyMatrices{\noisymatrices@true} +\xydef@\xymatrixnocompile{\global\matrixsize@=\z@ + \ifnoisymatrices@\message{{} expected}{}}% + \fi\fi\fi\fi \next@} +\xydef@\xymatrix@ii#1{% + \xymatrix@pretypeset{#1}% + \ifnum\maxcol@=\z@ \mkWcol@ \mkWmax@ \mkHrow@ \mkHmax@ + \xdef\maxcol@{\the\Col}\xdef\maxcolrow@{\the\Row}\fi + \ifnoisymatrices@\message{\maxcol@ x\maxrow@}\fi + \xymatrix@measureit@@ \the\queue@ \global\queue@={}% + \xymatrix@typeset{#1}\restore\xymatrix@insert + \xy@@\leave@ \leave@ + \ifnoisymatrices@\message{\the\matrixsize@>}\fi \ignorespaces} +\xydef@\xymatrixcompile#1#{\xymatrixcompile@{#1}} +\xydef@\xymatrixcompile@#1#2{\xycompile{\xymatrixnocompile#1{#2}}} +\xydef@\CompileMatrices{\let\xymatrix=\xymatrixcompile} +\xydef@\NoCompileMatrices{\let\xymatrix=\xymatrixnocompile} +\xydef@\xy@cossign@@{+} +\xydef@\xy@sinsign@@{+} +\xydef@\xy@cosabs@@{1} +\xydef@\xy@sinabs@@{0} +\xydef@\xy@tanabs@@{0} +\xydef@\xy@cotabs@@{100} +\xydef@\xymatrix@rotation{% + \xy@@{% + \edef\xy@cossign@@{\ifdim\cosDirection\p@<\z@-\else+\fi}% + \edef\xy@sinsign@@{\ifdim\sinDirection\p@<\z@-\else+\fi}% + \edef\xy@cosabs@@{% + \if\xy@cossign@@\cosDirection\else\xy@cossign@@\cosDirection\fi}% + \edef\xy@sinabs@@{% + \if\xy@sinsign@@\sinDirection\else\xy@sinsign@@\sinDirection\fi}% + \dimen@=\xy@cosabs@@\p@ \dimen@ii=\xy@sinabs@@\p@ + \ifdim\dimen@ii<.01\p@ \def\xy@cotabs@@{100}% + \else \quotient@\xy@cotabs@@\dimen@\dimen@ii \fi + \dimen@=\xy@cosabs@@\p@ \dimen@ii=\xy@sinabs@@\p@ + \ifdim\dimen@<.01\p@ \def\xy@tanabs@@{100}% + \else \quotient@\xy@tanabs@@\dimen@ii\dimen@ \fi}} +\xylet@\xymatrixsavedCOORD@=\relax +\xydef@\xymatrix@pretypeset#1{% + \global\Row=\z@ \xdef\maxcol@{0}\clearq@ + \setbox8=\vtop{% + \ifx\xymatrixsavedCOORD@\relax \let\xymatrixsavedCOORD@=\COORD@ \fi + \let\COORD@=\xymatrixCOORD@ + \everycr{}\let\\=\cr \tabskip=\z@ \offinterlineskip + \halign{\prentry@ ##!@&&\xyFN@\prentry@@##!@\cr#1\crcr}% + \prentry@@@}% + \xdef\maxrow@{\the\Row}% + \finishq@} +\xydef@\prentry@{\relax + \ifnum\Row>\z@ + \ifnum\maxcol@<\Col\xdef\maxcol@{\the\Col}\xdef\maxcolrow@{\the\Row}\fi + \expandafter\xdef\csname maxcol@\the\Row\endcsname{\the\Col}\fi + \global\advance\Row\@ne \global\Col=\z@ \xyFN@\prentry@@} +\xylet@\lastprentry@@=\relax +\xydef@\xyeatall@{\let\xy@=\xyeat@ \change@oxy@\xyeat@ \let\xy@@ix@=\eat@} +\xydef@\prentry@@{\global\advance\Col\@ne + \let\next@=\prentry@@norm + \ifoldxymatrix@\else \ifx *\next \DN@*{\xyFN@\prentry@@star}\fi \fi + \next@} +\xydef@\prentry@@star{\ifx *\next \DN@*{\xyFN@\prentry@@star@ii}% + \else \DN@##1##{\prentry@@star@i{##1}}\fi \next@} +\xydef@\prentry@@star@i#1#2#3!@{\gdef\lastprentry@@{*#1{#2}#3}% + \setbox\lastobjectbox@=\object#1{#2}% + \prentry@@x} +\xydef@\prentry@@star@ii{% + \ifx [\next + \DN@[##1]{\DN@####1{\def\entrymodifiers@{[##1]####1}}% + \expandafter\next@\expandafter{\entrymodifiers@}\prentry@@norm}% + \else + \DN@##1{\DN@####1{\def\entrymodifiers@{##1####1}}% + \expandafter\next@\expandafter{\entrymodifiers@}\prentry@@norm}% + \fi \next@} +\xydef@\prentry@@norm#1!@{\gdef\lastprentry@@{#1}% + \DN@{\setbox\lastobjectbox@=\object}% + \expandafter\next@\entrymodifiers@{\xyeatall@ \everyentry@ #1}% + \prentry@@x} +\xydef@\prentry@@x{% + \edef\next@{{\noexpand\pre@emit{\the\Row}{\Upness@}{\the\Col}{\Leftness@}% + {\the\L@c}{\the\R@c}{\the\D@c}{\the\U@c}{\expandafter\noexpand\the\Edge@c}}}% + \expandafter\addq@\next@ \box\lastobjectbox@} +\xynew@{if}\ifoldxymatrix@ \oldxymatrix@false +\xydef@\prentry@@@{\relax \let\next@=\prentry@@@i + \ifoldxymatrix@ \ifnum\Col=\@ne \ifx\lastprentry@@\empty + \global\advance\Row\m@ne \let\next@=\relax \fi\fi\fi + \global\let\lastprentry@@=\relax \next@} +\xydef@\prentry@@@i{% + \ifnum\maxcol@<\Col \xdef\maxcol@{\the\Col}\xdef\maxcolrow@{\the\Row}\fi + \expandafter\xdef\csname maxcol@\the\Row\endcsname{\the\Col}} +\xydef@\xy@minX@@{\z@} +\xydef@\xy@maxX@@{\z@} +\xydef@\xy@minY@@{\z@} +\xydef@\xy@maxY@@{\z@} +\xydef@\pre@emit#1#2#3#4#5#6#7#8#9{% + \global\Row=#1\global\Col=#3\relax + \ifnum#3=\@ne + \ifnum#1=\@ne \xy@@{\matrixorigin@}% + \else \count@@=#1\advance\count@@\m@ne + \edef\next@{\noexpand\xy@@{\noexpand\cfromid@ + {\xymatrixprefix@@\the\count@@,1}}}\next@ + \pre@emit@ \W@maxout\Hrow@c@@\W@maxin\Hrow@in\xy@tanabs@@ + \X@c\xy@sinsign@@\xy@sinabs@@\xymatrixrowsep@ + \pre@emit@ \Hrow@c@@\W@maxout\Hrow@in\W@maxin\xy@cotabs@@ + \Y@c{-\xy@cossign@@}\xy@cosabs@@\xymatrixrowsep@ + \fi + \else \count@@=#3\advance\count@@\m@ne + \pre@emit@ \Wcol@c@@\H@maxout\Wcol@in\H@maxin\xy@cotabs@@ + \X@c\xy@cossign@@\xy@cosabs@@\xymatrixcolsep@ + \pre@emit@ \H@maxout\Wcol@c@@\H@maxin\Wcol@in\xy@tanabs@@ + \Y@c\xy@sinsign@@\xy@sinabs@@\xymatrixcolsep@ + \fi + \DN@##1{\xy@@{\L@c=#5\R@c=#6\D@c=#7\U@c=#8\Edge@c={#9}\idfromc@{##1#1,#3}}}% + \expandafter\next@\expandafter{\xymatrixprefix@@}% + \xy@@{% + \dimen@=\X@c \advance\dimen@-\L@c + \ifdim\dimen@<\xy@minX@@ \edef\xy@minX@@{\the\dimen@}\fi + \dimen@=\X@c \advance\dimen@+\R@c + \ifdim\dimen@>\xy@maxX@@ \edef\xy@maxX@@{\the\dimen@}\fi + \dimen@=\Y@c \advance\dimen@-\D@c + \ifdim\dimen@<\xy@minY@@ \edef\xy@minY@@{\the\dimen@}\fi + \dimen@=\Y@c \advance\dimen@+\U@c + \ifdim\dimen@>\xy@maxY@@ \edef\xy@maxY@@{\the\dimen@}\fi}} +\xydef@\pre@emit@#1#2#3#4{#1\A@ #2\B@ #3\R@ #4\dimen@ + \edef\next@{{\the\A@}{\the\B@}{\the\R@}{\the\dimen@}}% + \expandafter\pre@emit@i\next@} +\xydef@\pre@emit@i#1#2#3#4#5{\xy@@{% + \dimen@=#2\R@=#5\dimen@ \dimen@=#1\relax \ifdim\R@>\dimen@ \R@=\dimen@ \fi + \dimen@=#4\B@=#5\dimen@ \dimen@=#3\relax \ifdim\B@>\dimen@ \B@=\dimen@ \fi + \advance\R@\B@}% + \pre@emit@ii} +\xydef@\pre@emit@ii#1#2#3#4{\xy@@{% + \dimen@=#4\dimen@=#3\dimen@ \advance\R@\dimen@ \advance#1#2\R@}} +\xydef@\Wcol@in#1{#1=\csname Wcol@\the\Col\endcsname #1=.5#1} +\xydef@\Wcol@out#1{#1=\csname Wcol@\the\Col\endcsname #1=.5#1} +\xydef@\Wcol@c@@#1{#1=\csname Wcol@\the\count@@\endcsname #1=.5#1} +\xydef@\W@maxin#1{#1=\W@max #1=.5#1} +\xydef@\W@maxout#1{#1=\W@max #1=.5#1} +\xydef@\Hrow@in#1{#1=\csname Hrow@\the\Row\endcsname #1=.5#1} +\xydef@\Hrow@out#1{#1=\csname Hrow@\the\Row\endcsname #1=.5#1} +\xydef@\Hrow@c@@#1{#1=\csname Hrow@\the\count@@\endcsname #1=.5#1} +\xydef@\H@maxin#1{#1=\H@max #1=.5#1} +\xydef@\H@maxout#1{#1=\H@max #1=.5#1} +\xydef@\H@max{\z@} +\xydef@\W@max{\z@} +\xydef@\HW@max{\z@} +\xydef@\mkHrow@{} +\xydef@\mkWcol@{} +\xydef@\mkHmax@{} +\xydef@\mkWmax@{} +\xydef@\mkHWmax@{} +\xydef@\mkHWdefaults@{\let\xymatrix@measureit@@=\xymatrix@measureit + \let\mkHrow@=\Hrow@R \let\mkWcol@=\Wcol@C + \def\mkHmax@{\ifdim\dimen@>\H@max\relax \xdef\H@max{\the\dimen@}\fi}% + \def\mkWmax@{\ifdim\dimen@>\W@max\relax \xdef\W@max{\the\dimen@}\fi}% + \let\mkHWmax@=\HWmax@max} +\xydef@\Hrow@R{\expandafter\xdef\csname Hrow@\the\Row\endcsname{\the\dimen@}} +\xydef@\Wcol@C{\expandafter\xdef\csname Wcol@\the\Col\endcsname{\the\dimen@}} +\xydef@\Hrow@max{\expandafter\gdef\csname Hrow@\the\Row\endcsname{\H@max}} +\xydef@\Wcol@max{\expandafter\gdef\csname Wcol@\the\Col\endcsname{\W@max}} +\xydef@\Hrow@HWmax{\expandafter\gdef\csname Hrow@\the\Row\endcsname{\HW@max}} +\xydef@\Wcol@HWmax{\expandafter\gdef\csname Wcol@\the\Col\endcsname{\HW@max}} +\xydef@\HWmax@max{% + \ifdim\H@max>\W@max\global\let\HW@max=\H@max\else\global\let\HW@max=\W@max\fi} +\xydef@\HWmax@set#1{\gdef\HW@max{#1}% + \global\let\H@max=\HW@max \global\let\W@max=\HW@max} +\xydef@\xymatrix@measureit{% + \xdef\H@max{\z@}\xdef\W@max{\z@}% + \setbox6=\vbox{\unvbox8 \global\Row=\maxrow@ + \loop@ \dimen@ii=\lastskip\unskip \ifnum\z@<\Row + \setbox4=\lastbox \dimen@=\dp4 \advance\dimen@\ht4 \mkHrow@ \mkHmax@ + \ifnum\Row=\maxcolrow@ + \setbox2=\hbox{\unhbox4 + \global\Col=\maxcol@ + \loop@ \dimen@ii=\lastskip\unskip \ifnum\z@<\Col + \setbox\z@=\lastbox \dimen@=\wdz@ \mkWcol@ \mkWmax@ + \global\advance\Col\m@ne + \repeat@}\fi + \global\advance\Row\m@ne + \repeat@}% + \mkHWmax@} +\xylet@\xymatrix@measureit@@=\relax +\xydef@\xymatrix@typeset#1{% + \clearq@ + \hbox{\vtop{\xyqall@ + \xy@@{\ifx\xymatrixsavedCOORD@\relax + \enter@{\noexpand\let\noexpand\COORD@\noexpand\xymatrixsavedCOORD@}% + \let\xymatrixsavedCOORD@=\COORD@ \let\COORD@=\xymatrixCOORD@ + \else \enter@{}\fi}% + \ifx\xymatrixsavedCOORD@\relax \let\xymatrixsavedCOORD@=\COORD@ \fi + \let\COORD@=\xymatrixCOORD@ + \kern\z@ \global\Row=\z@ + \everycr{}\let\\=\cr \tabskip=\z@ \offinterlineskip + \halign{\entry@##!@&&\entry@@##!@\cr#1\crcr}% + \xy@@{\leave@}}}% + \finishq@ \expandafter\xy@@\expandafter{\the\queue@}\global\queue@={}} +\xydef@\entry@{\relax \global\advance\Row\@ne \global\Col=\z@ \entry@@} +\xydef@\entry@@{\global\advance\Col\@ne + \DN@##1,##2,##3@{\xy@{ENTRY "##3##1,##2"}{\Row=##1 \Col=##2\relax + \cfromid@{##3##1,##2}\pfromc@}}% + \edef\nextii@{\the\Row,\the\Col,\xymatrixprefix@@ @}% + \expandafter\next@\nextii@ + \xyFN@\entry@@i} +\xydef@\entry@@i{\let\next@=\entry@@norm + \ifoldxymatrix@\else \ifx *\next \DN@*{\xyFN@\entry@@star}\fi \fi + \next@} +\xydef@\entry@@star{\ifx *\next \DN@*{\xyFN@\entry@@star@ii}% + \else \DN@##1##{\entry@@star@i{##1}}\fi \next@} +\xydef@\entry@@star@i#1#2#3!@{% + \xy@@ix@{{#1}{#2}}\xy@@{\expandafter\dropentry@\the\toks9}% + \setboxz@h{\xyqall@ + \ifx\xymatrixsavedCOORD@\relax \let\xymatrixsavedCOORD@=\COORD@ \fi + \let\COORD@=\xymatrixCOORD@ \everyentry@ #3}% + \setbox\z@=\copy\voidb@x} +\xydef@\entry@@star@ii{% + \ifx [\next + \DN@[##1]{\DN@####1{\def\entrymodifiers@{[##1]####1}}% + \expandafter\next@\expandafter{\entrymodifiers@}\entry@@norm}% + \else + \DN@##1{\DN@####1{\def\entrymodifiers@{##1####1}}% + \expandafter\next@\expandafter{\entrymodifiers@}\entry@@norm}% + \fi \next@} +\xydef@\entry@@norm#1!@{% + \DN@##1{\expandafter\xy@@ix@ + \expandafter{\expandafter{\entrymodifiers@}{##1}}}% + \expandafter\next@\expandafter{\everyentry@#1}% + \xy@@{\expandafter\dropentry@\the\toks9}% + \setbox\z@=\expandafter\object\entrymodifiers@{\xyqall@ + \ifx\xymatrixsavedCOORD@\relax \let\xymatrixsavedCOORD@=\COORD@ \fi + \let\COORD@=\xymatrixCOORD@ \everyentry@ #1}% + \setbox\z@=\copy\voidb@x} +\xydef@\dropentry@#1#2{\drop@{#1}{\xyeatall@ + \ifx\xymatrixsavedCOORD@\relax \let\xymatrixsavedCOORD@=\COORD@ \fi + \let\COORD@=\xymatrixCOORD@ #2}} +\xydef@\xyqall@{% + \ifxysaving@ \let\xy@=\xyqs@ \let\xy@@ix@=\xysave@@toksix@ + \else \let\xy@=\xyq@ \let\xy@@ix@=\xyq@@toksix@ \fi + \change@oxy@\xy@} +\xydef@\xyq@#1#2{\addq@{#2}} +\xydef@\xyq@@toksix@{\begingroup + \xyuncatcodes \afterassignment\xyq@@toksix@i \global\toks9=} +\xydef@\xyq@@toksix@i{% + \DN@##1{\endgroup \xy@@{\global\toks9={##1}}}% + \expandafter\next@\expandafter{\the\toks9}} +\xydef@\xyqs@{\global\advance\matrixsize@\@ne \xysave@} +\xydef@\xymatrix@insert{% + \xy@@{\edef\nextii@{{\xy@minX@@}{\xy@maxX@@}{\xy@minY@@}{\xy@maxY@@}}% + \expandafter\xymatrix@insert@\nextii@}} +\xydef@\xymatrix@insert@#1#2#3#4{\matrixorigin@ + \L@c=+\X@c \advance\L@c-#1\relax + \R@c=-\X@c \advance\R@c+#2\relax + \D@c=+\Y@c \advance\D@c-#3\relax + \U@c=-\Y@c \advance\U@c+#4\relax + \Edge@c={\rectangleEdge}} +\xylet@\thematrixCOORD@@=\relax +\xylet@\thematrixprefix@@=\relax +\xydef@\xymatrixCOORD@{% + \ifx [\next + \DN@[##1]{\xy@{[##1]}{\def\thematrixCOORD@@{[##1]}}% + \xyFN@\xymatrixCOORD@i##1]}% + \else \let\next@=\xymatrixsavedCOORD@ \fi \next@} +\xydef@\xymatrixCOORD@i{\count@=\Row \count@@=\Col + \let\thematrixprefix@@=\xymatrixprefix@@ + \ifcat A\noexpand\next + \DN@##1{\expandafter\notrelaxorelse@\csname xymatrixCOORD@i@##1\endcsname + \xymatrixCOORD@other}% + \else\ifx ]\next \DN@]{\xymatrixCOORD@x}% + \else\ifx "\next \DN@"##1"{\DN@{##1}\edef\thematrixprefix@@{\codeof\next@}% + \xyFN@\xymatrixCOORD@ii}% + \else \let\next@=\xymatrixCOORD@other \fi\fi\fi \next@} +\xydef@\xymatrixCOORD@i@u{\advance\count@ \m@ne\xyFN@\xymatrixCOORD@ii} +\xydef@\xymatrixCOORD@i@d{\advance\count@ \@ne \xyFN@\xymatrixCOORD@ii} +\xydef@\xymatrixCOORD@i@l{\advance\count@@\m@ne\xyFN@\xymatrixCOORD@ii} +\xydef@\xymatrixCOORD@i@r{\advance\count@@\@ne \xyFN@\xymatrixCOORD@ii} +\xydef@\xymatrixCOORD@ii{% + \ifcat A\noexpand\next + \DN@##1{\expandafter\notrelaxorelse@\csname xymatrixCOORD@i@##1\endcsname + \xymatrixCOORD@error}% + \else\ifx ]\next \DN@]{\xymatrixCOORD@x}% + \else \let\next@=\xymatrixCOORD@xx \fi\fi \next@} +\xydef@\xymatrixCOORD@error#1{\DN@{#1}% + \xyerror@{illegal (\codeof\next@): illegal [...] target form}{}% + \xyFN@\xymatrixCOORD@ii} +\xydef@\xymatrixCOORD@other#1,#2]{% + \advance\count@#1\advance\count@@#2\xymatrixCOORD@x} +\xydef@\xymatrixCOORD@x{% + \DN@##1{\xy@@{% + \expandafter\let\expandafter\next@\csname Q@##1\endcsname + \ifx\next@\relax \xyerror@RC{##1}\else \next@ \fi}% + \afterCOORD@}% + \edef\nextii@{{\thematrixprefix@@\the\count@,\the\count@@}}% + \expandafter\next@\nextii@} +\xydef@\xymatrixCOORD@xx{% + \DN@##1{\xy@@{% + \expandafter\let\expandafter\next@\csname Q@##1\endcsname + \ifx\next@\relax \xyerror@RC{##1}\else \next@\no@@ \fi}% + \afterPLACE\xymatrixCOORD@after}% + \edef\nextii@{{\thematrixprefix@@\the\count@,\the\count@@}}% + \expandafter\next@\nextii@} +\xydef@\xymatrixCOORD@after{% + \ifx ]\next \DN@]{\afterCOORD@}% + \else \let\next@=\xymatrixCOORD@error \fi \next@} +\xydef@\xyerror@RC#1{\xyerror@{in entry \string"\the\Row,\the\Col\string": + No \codeof\thematrixCOORD@@\space(is \string"#1\string") from here}{}} +\xylet@\xymatrix@addop@@=\relax +\xydef@\xymatrix@at{\def\xymatrix@addop@@{\xymatrix@R\xymatrix@C}% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@at}% + \else\ifx !\next \DN@!{\xyFN@\xymatrix@fix}% + \else\addPLUS@\ifx \next \let\next@=\xymatrix@addop + \else\addDASH@\ifx \next \let\next@=\xymatrix@addop + \else\addEQ@\ifx \next \let\next@=\xymatrix@addop + \else\ifx 1\next \DN@1{% + \let\objectmargin@=\p@ \xyFN@\xymatrix@setup}% + \else\ifx R\next \def\xymatrix@addop@@{\xymatrix@R}\DN@ R{\xymatrix@addop}% + \else\ifx C\next \def\xymatrix@addop@@{\xymatrix@C}\DN@ C{\xymatrix@addop}% + \else\ifx M\next \def\xymatrix@addop@@{\xymatrix@M}\DN@ M{\xymatrix@addop}% + \else\ifx L\next \def\xymatrix@addop@@{\xymatrix@L}\DN@ L{\xymatrix@addop}% + \else\ifx H\next \def\xymatrix@addop@@{\xymatrix@H}\DN@ H{\xymatrix@addop}% + \else\ifx W\next \def\xymatrix@addop@@{\xymatrix@W}\DN@ W{\xymatrix@addop}% + \else\ifx *\next \DN@*{\xyFN@\xymatrix@mods}% + \else \DN@{\afterDIRECTIONorEMPTY + {\xymatrix@rotation \xyFN@\xymatrix@setup}{% + \xyerror@{ or or one of 1RCMLHW*! expected}{}% + \xyFN@\xymatrix@setup}}% + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@} +\xydef@\xymatrix@fix{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@fix}% + \else\ifx R\next \let\mkHrow@=\Hrow@max \DN@ R{\xyFN@\xymatrix@fix@}% + \else\ifx C\next \let\mkWcol@=\Wcol@max \DN@ C{\xyFN@\xymatrix@fix@}% + \else \let\mkHrow@=\Hrow@HWmax \let\mkWcol@=\Wcol@HWmax + \let\next@=\xymatrix@fix@ + \fi\fi\fi \next@} +\xydef@\xymatrix@fix@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@fix@}% + \else\ifx 0\next \def\mkHWmax@{\HWmax@set\z@}\DN@ 0{\xyFN@\xymatrix@setup}% + \else\addEQ@\ifx\next \addEQ@\DN@{\afterassignment\xymatrix@fix@x\dimen@ii=}% + \else \let\mkHWmax@=\HWmax@max \let\next@=\xymatrix@setup \fi\fi\fi \next@} +\xydef@\xymatrix@fix@x{% + \edef\mkHWmax@{\noexpand\HWmax@set{\the\dimen@ii}}\xyFN@\xymatrix@setup} +\xydef@\xymatrix@addop{\afterADDOP{\xyFN@\xymatrix@addop@}} +\xydef@\xymatrix@addop@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@addop@}% + \else\ifx R\next \DN@ R{\xy@{R}{}\dimen@ii=\xymatrixrowsep@\xymatrix@addop@x}% + \else\ifx C\next \DN@ C{\xy@{C}{}\dimen@ii=\xymatrixcolsep@\xymatrix@addop@x}% + \else \DN@{\afterassignment\xymatrix@addop@x\dimen@ii=}\fi\fi\fi \next@} +\xydef@\xymatrix@addop@x{\expandafter\xy@\expandafter{\the\dimen@ii}{}% + \xymatrix@addop@@ \xyFN@\xymatrix@setup} +\xydef@\xymatrix@R{\Addop@@\xymatrixrowsep@\dimen@ii} +\xydef@\xymatrix@C{\Addop@@\xymatrixcolsep@\dimen@ii} +\xydef@\xymatrix@M{\Addop@@\objectmargin@\dimen@ii} +\xydef@\xymatrix@L{\Addop@@\labelmargin@\dimen@ii} +\xydef@\xymatrix@H{\Addop@@\objectheight@\dimen@ii} +\xydef@\xymatrix@W{\Addop@@\objectwidth@\dimen@ii} +\xydef@\xymatrixrowsep@{2pc} +\xydef@\xymatrixcolsep@{2pc} +\xydef@\xymatrixrowsep{\afterADDOP{\Addop@@\xymatrixrowsep@}} +\xydef@\xymatrixcolsep{\afterADDOP{\Addop@@\xymatrixcolsep@}} +\xydef@\xymatrix@mods{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@mods}% + \else\ifx [\next + \DN@ [##1]{\xy@{[##1]}{}\DN@####1{\def\entrymodifiers@{[##1]####1}}% + \expandafter\next@\expandafter{\entrymodifiers@}\xyFN@\xymatrix@setup}% + \else\addPLUS@\ifx \next \DN@##1{\DNii@{##1}\xyFN@\xymatrix@change}% + \else\addDASH@\ifx \next \DN@##1{\DNii@{##1}\xyFN@\xymatrix@change}% + \else\addEQ@\ifx \next \DN@##1{\DNii@{##1}\xymatrix@set}% + \else \let\next@=\xymatrix@mods@error \fi\fi\fi\fi\fi \next@} +\xydef@\xymatrix@set{% + \begingroup \plainxy@ + \afterVECTORorEMPTY\xymatrix@mods@x\xymatrix@mods@error} +\xydef@\xymatrix@change{% + \addEQ@\ifx\next \DN@##1{\expandafter\DNii@\expandafter{\nextii@##1}% + \expandafter\xy@\expandafter{\nextii@}{}\begingroup \plainxy@ + \afterVECTORorEMPTY\xymatrix@mods@x\xymatrix@mods@xx}% + \else \DN@{\expandafter\xy@\expandafter{\nextii@}{}\begingroup \plainxy@ + \afterVECTORorEMPTY\xymatrix@mods@x\xymatrix@mods@xx}\fi + \next@} +\xydef@\xymatrix@mods@x{\expandafter\xy@\expandafter{\nextii@}{}% + \def\next@##1##2##3{\def\nextii@####1{##1##2####1##3}}% + \addGT@{\addLT@{\expandafter\next@\expandafter{\nextii@}}}% + \DN@##1{\gdef\tmp@@@{{##1}}}% + \edef\nextiii@{{\the\X@c,\the\Y@c}}% + \expandafter\expandafter\expandafter\next@ + \expandafter\expandafter\expandafter{\expandafter\nextii@\nextiii@}% + \endgroup + \DN@##1{\xy@{##1}{}\DN@####1{\def\entrymodifiers@{##1####1}}% + \expandafter\next@\expandafter{\entrymodifiers@}\xyFN@\xymatrix@setup}% + \expandafter\next@\tmp@@@} +\xydef@\xymatrix@mods@xx{\expandafter\xy@\expandafter{\nextii@}{}% + \expandafter\gdef\expandafter\tmp@@@\expandafter{\expandafter{\nextii@}}% + \endgroup + \DN@##1{\xy@{##1}{}\DN@####1{\def\entrymodifiers@{##1####1}}% + \expandafter\next@\expandafter{\entrymodifiers@}\xyFN@\xymatrix@setup}% + \expandafter\next@\tmp@@@} +\xydef@\xymatrix@mods@error{\endgroup + \xyerror@{Impossible @* .}{}\xyFN@\xymatrix@setup} +\xywarnifdefined\entrymodifiers +\expandafter\def\addEQ@\entrymodifiers#1{\def\entrymodifiers@{#1}\ignorespaces} +\xydef@\entrymodifiers@{!V\entrybox} +\xydef@\entrybox#1{\hbox{\setbox\z@=\objectbox{#1}% +%% +%% \L@p=\wdz@ \D@p=\ht\z@ \advance\D@p\dp\z@ +%% \dimen@=\objectwidth@ \advance\dimen@-\L@p +%% \ifdim\dimen@>\z@ \advance\L@p\dimen@ \R@p=.5\dimen@ \else \R@p=\z@ \fi +%% \dimen@=\objectheight@ \advance\dimen@-\D@p +%% \ifdim\dimen@>\z@ \advance\D@p\dimen@ \fi +%% \dimen@=\objectmargin@ \advance\L@p2\dimen@ \advance\D@p2\dimen@ +%% \U@p=-.5\ht\z@ \advance\U@p.5\dp\z@ \advance\R@p\objectmargin@ +%% \setboxz@h{\kern\R@p \raise\U@p\boxz@}% +%% \wdz@=\L@p \ht\z@=.5\D@p \dp\z@=.5\D@p + \L@p=\wdz@ \R@p=\z@ + \dimen@=\objectwidth@ \advance\dimen@-\L@p + \ifdim\dimen@>\z@ \advance\L@p\dimen@ \R@p=.5\dimen@ \fi + \dimen@=\objectmargin@ \advance\L@p2\dimen@ \advance\R@p\dimen@ + \D@p=\ht\z@ \advance\D@p\dp\z@ \U@p=-\fontdimen22\textfont\tw@ + \dimen@=\objectheight@ \advance\dimen@-\D@p + \ifdim\dimen@>\z@ \advance\D@p\dimen@ \fi + \dimen@=\objectmargin@ \advance\D@p2\dimen@ + \setboxz@h{\kern\R@p \raise\U@p\boxz@}% + \wdz@=\L@p + \advance\D@p-\ht\z@ \advance\D@p-\dp\z@ \D@p=.5\D@p + \dimen@=\ht\z@ \advance\dimen@\D@p \ht\z@=\dimen@ + \dimen@=\dp\z@ \advance\dimen@\D@p \dp\z@=\dimen@ + \boxz@}} +\xywarnifdefined\everyentry +\expandafter\def\addEQ@\everyentry#1{\def\everyentry@{#1}\ignorespaces} +\xylet@\everyentry@=\empty +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xymovie.tex b/macros/generic/diagrams/xypic/texinputs/xymovie.tex new file mode 100644 index 0000000000..a8950e694a --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xymovie.tex @@ -0,0 +1,75 @@ +%% xymovie.tex from $Id: xymovie.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Movie Storyboard extension'' option. +%% Copyright (c) 1996-1997 Kristoffer H. Rose +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{movie}{Movie Storyboard extension}{\stripRCS$Revision: 3.9 $}% + {Kristoffer H.~Rose}{krisrose@tug.org}% + {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)} +\xynew@{dimen}\m@height +\xynew@{dimen}\m@width +\xydef@\extractparameterm@#1#2#3{% + \DN@##1,#1=##2,##3@{\csname m@#1\endcsname=##2\relax}% + \next@,#2,#3,@} +\xydef@\MovieSetup#1{% + \extractparameterm@{height}{#1}{height=2in}% + \extractparameterm@{width}{#1}{width=2in}% +} +\xydef@\theScene{0} +\xydef@\theF{0} +\xydef@\theFr{1} +\xydef@\F#1{#1(0)} +\xydef@\Fr#1{#1(1)} +\xynew@{if}\iflastframe@ +\xynew@{count}\m@scene +\xydef@\scene{\advance\m@scene\@ne + \DN@{\ifx*\next \lastframe@true \DN@*{\xyFN@\scene@}% + \else \let\next@=\scene@ \fi \next@}% + \xyFN@\next@} +\xydef@\scene@{% + \ifx[\next \DN@[##1]{\scene@i}\else \let\next@=\scene@i \fi \next@} +\long\def\scene@i#1{{% + \def\caption##1{\gdef\m@caption{Scene \the\m@scene. ##1}}% + \edef\theScene{\the\m@scene}% + \def\theF{0}\def\theFr{1}% + \def\F##1{##1(0)}\def\Fr##1{##1(1)}% + \scene@frame{#1}% + \iflastframe@ + \def\caption##1{}% + \gdef\m@caption{The End.}% + \def\theF{1}\def\theFr{0}% + \def\F##1{##1(1)}\def\Fr##1{##1(0)}% + \scene@frame{#1}% + \fi + }\ignorespaces} +\def\scene@frame#1{\vbox{\null + \dimen@=\m@width \advance\dimen@2\xydashw@ + \hrule width\dimen@ + \hbox to\dimen@{\vrule width\xydashw@ \hss + \vbox to\m@height{\hsize=\m@width \null\vfil{#1}\vfil\null}% + \hss \vrule width\xydashw@}% + \hrule width\dimen@ + \setbox0=\hbox{% + \setbox0=\hbox to\m@width{\hss\strut \m@caption\hss}% + \dimen0=\dp0 \ht0=0pt \dp0=0pt \raise\dimen0\box0}% + \ht0=0pt \dp0=0pt \box0\relax + \null}} +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xynecula.tex b/macros/generic/diagrams/xypic/texinputs/xynecula.tex new file mode 100644 index 0000000000..d39f505232 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xynecula.tex @@ -0,0 +1,330 @@ +%% xynecula.tex from $Id: xynecula.doc,v 3.4 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Necula extensions'' option. +%% Copyright (c) 1998 George C. Necula +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{necula}{Necula's extensions}{\stripRCS$Revision: 3.4 $}% + {George C. Necula}{necula@cs.cmu.edu}% + {School of Computer Science, + Carnegie Mellon University, + 5000 Forbes Avenue, + Pittsburgh, PA 15213-3891, USA} +\def\expandbeforenext@#1{% + \DN@ e|##1|{\edef\tmp@{##1}\expandafter\xyFN@\expandafter#1\tmp@}% +} +\xylet@\xy@oldOBJECT@=\OBJECT@ +\xydef@\xy@newOBJECT@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\xy@newOBJECT@}% + \else\ifx e\next + \expandbeforenext@\OBJECT@ + \else + \DN@{\xy@oldOBJECT@}\fi\fi + \next@}% +\let\OBJECT@=\xy@newOBJECT@ +\xylet@\xy@oldCOORD@=\COORD@ +\xydef@\xy@newCOORD@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\xy@newCOORD@}% + \else\ifx e\next + \expandbeforenext@\COORD@ + \else + \DN@{\xy@oldCOORD@}\fi\fi + \next@}% +\let\COORD@=\xy@newCOORD@ +\xydefcsname@{*stylechar@P@}#1{\Pshape@#1@} +\xynew@{count}\c@poly@count \c@poly@count=\z@ +\xydef@\Pshape@:#1@{% + \addtotoks@{% + \def\poly@list{@}% + \poly@parse #1,\relax,%Sets the poly@list + \def\poly@cache{}% + \edef\poly@id{\the\c@poly@count}% + \global\advance\c@poly@count\@ne + \poly@setEdge + \edef\poly@saveLcshape{\the\L@c}% + \polygonEdge@Outer% Set U,R,D,L + \poly@setEdge + \dimen@=\poly@saveLcshape\advance\dimen@-\L@c + \advance\R@p -\dimen@ +}} +\xydef@\poly@setEdge{\expandafter\poly@setEdge@\poly@list\poly@id} +\xydef@\poly@setEdge@#1@#2{\Edge@c={\polygonEdge#1@#2@}% + \expandafter\xdef\csname poly@cache#2% + \endcsname{\poly@cache}} +\xydefcsname@{frm[P]{-}}{\expandafter\draw@polyframe\the\Edge@c{-}} +\xydefcsname@{frm[P]{.}}{\expandafter\draw@polyframe\the\Edge@c{.}} +\xydefcsname@{frm[P]{=}}{\expandafter\draw@polyframe\the\Edge@c{=}} +\xydef@\draw@polyframe\polygonEdge#1@#2@#3{% + \def\poly@dir{#3}% + \def\poly@list{#1@}% + \def\poly@id{#2}% + \edef\poly@cache{\csname poly@cache\poly@id\endcsname}% + \draw@polygon} +\xydef@\poly@empty{} +\xydef@\poly@map#1#2,#3;#4@{% + #1{#2}{#3}% + \def\tmp@{#4}% + \ifx \poly@empty\tmp@ \else + \poly@map@next#1#4@% + \fi +} +\xydef@\poly@map@stop#1@{} +\xydef@\poly@mapExpand#1#2{% + \edef\tmp@{\noexpand\poly@map\noexpand #1#2}% + \tmp@} +\xydef@\poly@parse #1,{% + \ifx #1\relax + \poly@close + \let\next@=\relax + \else + \save@ + \POS #1% + \edef\tmp@{{\the\X@c}{\the\Y@c}}% + \expandafter\poly@append\tmp@ + \restore + \let\next@=\poly@parse + \fi + \next@ +} +\xydef@\poly@append#1#2{\expandafter\poly@append@\poly@list{#1,#2;}} +\xydef@\poly@append@#1@#2{\global\def\poly@list{#1#2@}} +\xydef@\poly@close{\expandafter\poly@close@\poly@list} +\xydef@\poly@close@#1,#2;#3@{\poly@append{#1}{#2}} +\xydef@\draw@polygon{% + \save@ + \X@origin=\X@c \Y@origin=\Y@c + \poly@setp + \U@c=\z@\R@c=\z@\D@c=\z@\L@c=\z@\U@p=\z@\R@p=\z@\D@p=\z@\L@p=\z@ + \Edge@c={\zeroEdge}\Edge@p={\zeroEdge}% + \let\poly@map@next=\poly@map + \poly@mapExpand\poly@drawseg\poly@rest + \restore +} +\xydef@\poly@setp{\expandafter\poly@setp@\poly@list} +\xydef@\poly@setp@#1,#2;#3@{% + \X@p=#1\advance\X@p\X@origin \Y@p=#2\advance\Y@p\Y@origin% + \global\def\poly@rest{#3@}} +\xydef@\poly@drawseg#1#2{% + \dimen@=#1\X@c=\the\dimen@\advance\X@c \X@origin + \dimen@=#2\Y@c=\the\dimen@\advance\Y@c \Y@origin + \expandafter\connect@\expandafter\dir\poly@dir% + \X@p=\X@c\Y@p=\Y@c} +\xydef@\polygonEdge#1@#2@#3{% + \def\poly@list{#1@}% + \def\poly@id{#2}% + \edef\poly@cache{\csname poly@cache\poly@id\endcsname}% + \ifcase#3\relax + \DN@{\polygonEdge@Inters + }% + \or \DN@{\polygonEdge@Under}% + \or \DN@{\polygonEdge@Dist}% + \or \DN@{\rectangleProp@}% + \or \DN@{\polygonEdge@Inner}% + \or \DN@{\polygonEdge@Outer}% + \else \DN@{}\fi + \next@} +\newif\ifpoly@badinters +\xydef@\polygonEdge@Inters{% + \ifx\poly@cache\poly@empty + \poly@intersdoit + \else + \expandafter\poly@intersprobecache\poly@cache @% + \fi +} +\xydef@\poly@cachehit#1#2{% + \X@c=#1\Y@c=#2} +\xydef@\poly@cachehitdisable#1#2{\poly@intersdoit} +\xydef@\poly@intersprobecache#1,#2,#3,#4,#5@{% + \dimen@=#1\advance\dimen@-\d@X + \ifdim\zz@\dimen@ + \dimen@=#2\advance\dimen@-\d@Y + \ifdim\zz@\dimen@ + \poly@cachehit{#3}{#4} + \else + \poly@intersdoit + \fi + \else + \poly@intersdoit + \fi +} +\xydef@\poly@intersdoit{% + \edef\polyoldA@{\the\A@}\edef\polyoldB@{\the\B@}% + \def\poly@intersneg{}\def\poly@interspos{}% + \save@ + \poly@setorigin + \def\zeroDivide@{\poly@badinterstrue}% + \let\poly@map@next=\poly@map + \poly@mapExpand\poly@interseg\poly@rest + \ifx\poly@intersneg\poly@empty + \poly@badinterstrue + \else + \ifx\poly@interspos\poly@empty + \poly@badinterstrue + \else + \poly@badintersfalse + \fi + \fi + \restore + \A@=\polyoldA@\B@=\polyoldB@ + \ifpoly@badinters \else + \edef\tmp@{\poly@interspos,\poly@intersneg @}% + \expandafter\poly@intersfinish\tmp@ + \fi +} +\xydef@\poly@intersfinish#1,#2,#3@{% + \X@c=#1\Y@c=#2\relax + \xdef\poly@cache{\the\d@X,\the\d@Y,#1,#2,#3}% + \poly@setEdge +} +\xydef@\poly@setorigin{\expandafter\poly@setorigin@\poly@list} +\xydef@\poly@setorigin@#1,#2;#3@{% + \X@origin=#1\advance\X@origin\X@c \Y@origin=#2\advance\Y@origin\Y@c% + \global\def\poly@rest{#3@}} +\xydef@\poly@interseg#1#2{% + \dimen@=#1\advance\dimen@\X@c \edef\poly@saveXcinters{\the\dimen@}% + \dimen@=#2\advance\dimen@\Y@c \edef\poly@saveYcinters{\the\dimen@}% + \save@ + \poly@badintersfalse + \R@c=\poly@saveXcinters \advance\R@c -\X@origin + \U@c=\poly@saveYcinters \advance\U@c -\Y@origin + \intersect@ + \A@=\X@c \B@=\Y@c + \restore + \ifpoly@badinters + \else +\poly@isonseg\X@origin\Y@origin\A@\B@\poly@saveXcinters\poly@saveYcinters + \ifpoly@badinters + \else + \poly@isonray\X@c\Y@c\A@\B@\X@p\Y@p + \ifpoly@badinters + \edef\poly@intersneg{\the\A@,\the\B@}% + \else + \edef\poly@interspos{\the\A@,\the\B@}% + \fi + \fi + \fi + \X@origin=\poly@saveXcinters\Y@origin=\poly@saveYcinters +} +\xydef@\polygonEdge@Dist{\xyerror@{Dist is not yet implemented for polygons}} +\newif\ifpoly@closedrange +\xydef@\poly@isinrange#1#2#3{% + \ifpoly@badinters \else + \dimen@=#1\dimen@i=#2\dimen@ii=#3\relax + \advance\dimen@ii -\dimen@ \advance\dimen@i -\dimen@ + \ifdim\dimen@ii<0pt\relax + \ifdim\dimen@i>100\almostz@ + \poly@badinterstrue + \fi + \dimen@i=-\dimen@i \dimen@ii=-\dimen@ii + \else + \ifdim\dimen@i<-100\almostz@\relax + \poly@badinterstrue + \fi + \fi + \ifpoly@closedrange + \advance\dimen@ii 100\almostz@ + \ifdim\dimen@i>\dimen@ii + \poly@badinterstrue + \fi + \fi + \fi} +\xydef@\poly@isonseg#1#2#3#4#5#6{% + \poly@closedrangetrue + \poly@isinrange{#1}{#3}{#5}% + \poly@isinrange{#2}{#4}{#6}% +} +\xydef@\poly@isonray#1#2#3#4#5#6{% + \poly@closedrangefalse + \poly@isinrange{#1}{#3}{#5}% + \poly@isinrange{#2}{#4}{#6}% +} +\xydef@\polygonEdge@Under{% + \edef\polysaveA@under{\the\A@}\edef\polysaveB@under{\the\B@}% + \edef\poly@saveXcUnder{\the\X@c}\edef\poly@saveYcUnder{\the\Y@c}% + \polygonEdge@Inters + \ifpoly@badinters% p is very close to c + \Inside@true + \else + \A@=\X@c\B@=\Y@c + \X@c=\poly@saveXcUnder\Y@c=\poly@saveYcUnder + \poly@isonseg\X@c\Y@c\X@p\Y@p\A@\B@ + \ifpoly@badinters \Inside@false \else \Inside@true\fi + \A@=\polysaveA@under\B@=\poly@saveB@under + \fi +} +\xydef@\polygonEdge@Inner{% + \enter@{\basefromthebase@ \pfromthep@ \DirectionfromtheDirection@}% + \L@c=\X@c \D@c=\Y@c + \polygonEdge@Inters + \ifpoly@badinters + \czeroEdge@ + \else + \expandafter\poly@getinterspoints\poly@cache @% + \ifdim\X@c>\R@c + \L@c=\R@c \R@c=\X@c + \else + \L@c=\X@c + \fi + \X@c=0.5\L@c \advance\X@c 0.5\R@c \advance\R@c -\X@c \L@c=\R@c + \ifdim\Y@c>\U@c + \D@c=\U@c \U@c=\Y@c + \else + \D@c=\Y@c + \fi + \Y@c=0.5\D@c \advance\Y@c 0.5\U@c \advance\U@c -\Y@c \D@c=\U@c + \Edge@c={\rectangleEdge}% + \fi + \leave@ +} +\xydef@\poly@getinterspoints#1,#2,#3,#4,#5,#6@{% + \R@c=#3\U@c=#4\X@c=#5\Y@c=#6} +\xydef@\polygonEdge@Outer{% + \enter@{\basefromthebase@ \pfromthep@ \DirectionfromtheDirection@}% + \czeroEdge@ + \let\poly@map@next=\poly@map + \poly@mapExpand\poly@findextent\poly@list + \Edge@c={\rectangleEdge}% + \leave@ +} +\xydef@\poly@findextent#1#2{% + \dimen@=#1\dimen@=\the\dimen@% it fails if I remove the second assign + \ifdim\dimen@>\R@c \R@c=\dimen@ \fi + \ifdim -\dimen@>\L@c \L@c=-\dimen@ \fi + \dimen@=#2\dimen@=\the\dimen@% it fails if I remove the second assign + \ifdim\dimen@>\U@c \U@c=\dimen@ \fi + \ifdim -\dimen@>\D@c \D@c=-\dimen@ \fi +} +\xydef@\Fshape@#1:{\def\whichframe@@{{#1}}\let\whichoptions@@=\empty + \DN@{{}}\ifx\whichframe@@\next@ \def\whichframe@@{{-}}\fi + \expandafter\xyFN@\expandafter\Fshape@whichframe\the\Edge@c} +\xydef@\Fshape@whichframe{% + \ifx\next\circleEdge + \edef\whichframe@@{[o]\whichframe@@}% + \DN@##1{\xyFN@\Fshape@i}% + \else + \ifx\next\polygonEdge + \edef\whichframe@@{[P]\whichframe@@}% + \DN@\polygonEdge##1@##2@{\xyFN@\Fshape@i}% + \else + \DN@##1{\xyFN@\Fshape@i}% + \fi\fi + \next@ +} +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyoztex.tex b/macros/generic/diagrams/xypic/texinputs/xyoztex.tex new file mode 100644 index 0000000000..68550dafb5 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyoztex.tex @@ -0,0 +1,130 @@ +%% xyoztex.tex from $Id: xyoztex.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``OzTeX'' driver interface option. +%% Copyright (c) 1995-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{oztex}{OzTeX driver}{\stripRCS$Revision: 3.7 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xydef@\OzTeX@@#1{\dvimessage@{OzTeX}{#1}} +\newdriver{% + \xyaddsupport{color}\oztexColor@@ + \xyaddsupport{crayon}\oztexCrayon@@ + \xyaddsupport{ps}\oztexPS@@ + \xyaddsupport{rotate}\oztexRotate@@ + \xyaddsupport{line}\oztexLine@@ + \xyaddsupport{frame}\oztexFrames@@ + \xyaddsupport{tile}\oztexTiles@@ + \xyaddsupport{cmtip}\relax +} +\xydef@\oztexColor@@{\OzTeXColours@} +\xydef@\OzTeXColours@{\OzTeXPStypes@ + \let\xylocalColor@=\xyNoColor@@ \def\xycolor@{\xycolor@@}% + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}% + \installPScolor@ }\else\DN@{}\fi \next@ + \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\OzTeXCrayon@@{}}% + \else\let\next@=\xystandardcolors@\fi \next@ + \let\xycolorwarning@=\relax + \let\oztexColor@@=\relax + \let\UnloadColor@@=\NoOzTeXColor@ +} +\xydef@\NoOzTeXColor@{% + \let\xylocalColor@=\xyNoColor@@ + \let\xycolor@=\xyNoColor@ + \let\xycolorwarning@=\xycolorwarning@@ + \let\oztexColor@@=\OzTeXColours@ + \let\UnloadColor@@=\UnloadColor@ + } +\xydef@\OzTeXCrayon@@{\installCrayolaColors@} +\xydef@\oztexPS@@{\oztexPS@} +\xydef@\oztexPSunload@{\UnloadPS@ + \def\xyPSdictname{}\UsePSdict@@false + \let\installxyps@@=\relax + \let\UnloadPS@@=\UnloadPS@ + \xyPSshapes@true + \let\oztexPS@@=\oztexPS@ } +\xydef@\OzTeXSpecial@#1{\special{empty.ps {#1}xy}} +\xydef@\OzTeXMacro@#1{\special{empty.ps {#1}xy}} +\xydef@\OzTeXDict@#1{\special{empty.ps @bxy{#1}stopped pop @exy}} +\xydef@\OzTeXinclude@#1{\special{#1}} +\xydef@\OzTeXraw@#1{\special{empty.ps @bxy #1 @exy}}% +\xydef@\OzTeXPStypes@{% + \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}% + \ifx\PSspecial@@\OzTeXSpecial@\else + \let\PSspecial@@=\OzTeXSpecial@ + \let\PSmacro@@=\OzTeXMacro@ + \let\PSdict@@=\OzTeXDict@ + \let\PSraw@@=\OzTeXraw@ + \let\PSinclude@@=\OzTeXinclude@ + \let\xyPSobeylines@@=\obeyOzTeXlines@ + \let\PSspecialdict@@=\OzTeXDict@ + \OzTeX@@{PostScript}% + \fi + \OzTeXCurrpt@ } +{\catcode`\^^M=\active + \gdef\next{\catcode`\^^M=\active \let^^M=\space \obeyspaces}} +\xylet@\obeyOzTeXlines@=\next +\xydef@\OzTeXCurrpt@{\let\xyPScurrpt@@=\OzTeXCurrpt@@}% +\xydef@\OzTeXCurrpt@@{\PSraw@@{xyp}} +\xydef@\oztexPS@{\OzTeXPStypes@ + \let\oztexPS@@=\relax + \let\UnloadPS@@=\oztexPSunload@ + \let\installxyps@@=\@OzTeX@PS@ + \installxyps@ } +\xydef@\@OzTeX@PS@{\UsePSdict@@true + \let\includePSmessage@=\xyOzTeXheader + \ifx\undefined\xyPSdictname\def\xyPSdictname{global.ps}\fi} +\xydef@\xyOzTeXheader#1#2#3{\UsePSdict@@true} +\xydef@\oztexLine@@{\oztexLine@} +\xydef@\oztexLine@{\OzTeXPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}\installPSline@ }% + \else\DN@{\xydriverfail@{line-styles are}\UnloadLine@\relax}\fi + \next@ } +\xydef@\oztexFrames@@{\OzTeXFrames@} +\xydef@\OzTeXFrames@{\OzTeXPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}\installPSframes@ }% + \else\DN@{\xydriverfail@{frames are}\UnloadPSFrames@\relax}\fi + \next@ } +\xydef@\oztexTiles@@{\OzTeXTiles@} +\xydef@\OzTeXTiles@{\OzTeXPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}\installPSpatterns@ + \xystandardpatterns@ }% + \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi + \next@ } +\xydef@\oztexRotate@@{\OzTeXRotate@} +\xydef@\OzTeXRotate@{\OzTeXPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}% + \OzTeXRotScale@ \installPSrotscale@ \xyPSshapes@false }% + \else\DN@{\xydriverfail@{rotations are}\UnloadRotate@\relax}\fi + \next@ } +\xydef@\OzTeXRotScale@{% + \def\xyrot@start(##1){% + {xyp xyt ##1\space xyr}{OzXy begin gsave}}% + \def\xyscale@start(##1,##2){% + {xyp xyt ##1\space##2\space xys}{OzXy begin gsave}}% + \def\xyrot@end{grestore end}\def\xyscale@end{grestore end}} +\let\OzTeXRotScale@=\xyRotScale@@ +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xypdf-co.tex b/macros/generic/diagrams/xypic/texinputs/xypdf-co.tex new file mode 100644 index 0000000000..60e4060dbb --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xypdf-co.tex @@ -0,0 +1,129 @@ +%% +%% This is file `xypdf-co.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% xypdf.dtx (with options: `color') +%% +%% The xypdf package for TeX and LaTeX +%% Copyright (c) 2010 by Daniel Müllner (M\"ullner) +%% +%% -------------------------------------------------------------------------- +%% +%% This program 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. +%% +%% This program 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. +%% +%% The GNU General Public License is available at +%% . +%% +%% -------------------------------------------------------------------------- +%% +%% This file is part of the xypdf package for TeX and LaTeX2e. The xypdf +%% package may be distributed and/or modified under the conditions 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 distribution consists of the following files: +%% +%% xypdf.dtx - Documented source code +%% xypdf.ins - Installation script +%% xypdf.pdf - Documentation (generated from xypdf.dtx) +%% +%% The files with the TeX code are generated by the following command: +%% +%% latex xypdf.ins +%% +%% This generates the files xypdf.tex, xypdf-co.tex, xypdf-cu.tex, +%% xypdf-fr.tex, xypdf-li.tex and xypdf-ro.tex. +%% +%% -------------------------------------------------------------------------- +%% +%% The xypdf package improves the output quality of the Xy-pic package when +%% PDF documents are generated. It produces generic PDF code for graphical +%% elements like lines, curves and circles instead of approximating these +%% elements with glyphs in special fonts as the original Xy-pic package does. +%% The xypdf package works with both TeX and LaTeX in the occurrences of +%% pdfTeX, XeTeX and eTeX with dvipdfm(x) to generate PDF files. It is being +%% integrated and distributed together with Xy-pic, starting with Xy-pic +%% version 3.8. +%% +%% The copyright for the xypdf package is by its author, Daniel Müllner +%% (Muellner, M\"ullner). +%% +\xycatcodes +\expandafter\let\csname xypdf-co@loaded\endcsname\@empty +\@ifdefinable\xP@colorname\relax +\@ifdefinable\xP@colA\relax +\@ifdefinable\xP@colB\relax +\@ifdefinable\xP@colC\relax +\@ifdefinable\xP@colD\relax +\xP@hook{color}{newxycolor} +\newcommand*\xP@newxycolor[2]{\def\xP@colorname{#1}\xP@parsecolor#2 @} +\xP@color@on +\@ifdefinable\xP@parsecolor\relax +\def\xP@parsecolor#1 #2 #3@{\def\xP@colA{#1}\def\xP@colB{#2}\ifx\xP@colB\xP@gray +\xP@newcolor\xP@colorname\xP@colA\xP@gray\newxycolor +\else +\xP@parsecolor@#3 @\fi +} +\@ifdefinable\xP@parsecolor@\relax +\def\xP@parsecolor@#1 #2 #3 #4@{\def\xP@colC{#1}\def\xP@colD{#2}\ifx\xP@colD\xP@rgb +\xP@newcolor\xP@colorname{\xP@colA,\xP@colB,\xP@colC}\xP@rgb\newxycolor +\else +\def\@tempa{#3}\ifx\@tempa\xP@cmyk +\xP@newcolor\xP@colorname{\xP@colA,\xP@colB,\xP@colC,\xP@colD}{cmyk}\newxycolor +\else +\PackageError{xypdf}{Syntax error in \string\newxycolor}{}\fi +\fi +} +\newcommand*\xP@gray{gray} +\newcommand*\xP@rgb{rgb} +\newcommand*\xP@cmyk{cmyk} +\xP@hook{color}{OBJECT@shape} +\newcommand*\xP@OBJECT@shape[1]{\DN@{shape [#1]}\expandafter\let\expandafter\nextii@\csname\codeof\next@\endcsname +\ifx\nextii@\relax\DN@{style [#1]}\expandafter\let\expandafter\nextii@\csname\codeof\next@\endcsname +\ifx\nextii@\relax\DN@{\xP@checkcolor{#1}}\else\DN@{\nextii@\xyFN@\OBJECT@}\fi +\else\expandafter\addtotoks@\expandafter{\nextii@}\DN@{\xyFN@\OBJECT@}\fi \next@} +\newcommand*\xP@checkcolor[1]{\@ifundefined{\string\color@\detokenize{#1}}{\OBJECT@shapei[#1]}{\xP@append\toks@{\noexpand\xP@color{{\detokenize{#1}}}}\xyFN@\OBJECT@ +}} +\newcommand*\xP@color[1]{\def\preStyle@@{\addtostyletoks@{\bgroup\xP@protectedcolor#1}}\def\postStyle@@{\addtostyletoks@{\egroup}}\modXYstyle@ +} +\@ifdefinable\xP@protectedcolor\relax +\protected\def\xP@protectedcolor{\@ifundefined{color}\xP@pdfcolor\color +} +\@ifdefinable\xP@pdfcolor\relax +\def\xP@pdfcolor[#1]#2{\edef\@tempa{#1}\ifx\@tempa\xP@gray +\DN@{\xP@graycolor{#2}}\else\ifx\@tempa\xP@rgb +\DN@{\xP@rgbcolor#2@}\else\ifx\@tempa\xP@cmyk +\DN@{\xP@cmykcolor#2@}\fi\fi\fi +\aftergroup\xP@resetcolor +\next@ +}\newcommand*\xP@graycolor[1]{\xP@setcolor{#1}gG}\@ifdefinable\xP@rgbcolor\relax +\def\xP@rgbcolor#1,#2,#3@{\xP@setcolor{#1 #2 #3}{rg}{RG}} +\@ifdefinable\xP@cmykcolor\relax +\def\xP@cmykcolor#1,#2,#3,#4@{\xP@setcolor{#1 #2 #3 #4}kK} +\newcommand*\xP@newcolor[4]{\expandafter\let\expandafter\next@\csname shape [#1]\endcsname +\ifx\next@\relax +\@ifundefined{\string\color@#1}\relax +{\xP@warning{xypdf}{The color `#1' is overridden by \string#4}}\edef\next@{\noexpand\newxystyle{#1}{\noexpand\xP@unnamedcolor{#2}{#3}}}\else +\DN@{}\fi +\next@\relax} +\newcommand*\xP@unnamedcolor[2]{\xP@color{[#2]{#1}}} +\newcommand\xP@definecrayolacolor[2]{\xP@newcolor{#1}{#2}{cmyk}\UseCrayolaColors}\newcommand*\xP@installCrayolaColors{\xP@definecrayolacolor{GreenYellow}{.15,0,.69,0}\xP@definecrayolacolor{Yellow}{0,0,1,0}\xP@definecrayolacolor{Goldenrod}{0,.1,.84,0}\xP@definecrayolacolor{Dandelion}{0,.29,.84,0}\xP@definecrayolacolor{Apricot}{0,.32,.52,0}\xP@definecrayolacolor{Peach}{0,.5,.7,0}\xP@definecrayolacolor{Melon}{0,.46,.5,0}\xP@definecrayolacolor{YellowOrange}{0,.42,1,0}\xP@definecrayolacolor{Orange}{0,.61,.87,0}\xP@definecrayolacolor{BurntOrange}{0,.51,1,0}\xP@definecrayolacolor{Bittersweet}{0,.75,1,.24}\xP@definecrayolacolor{RedOrange}{0,.77,.87,0}\xP@definecrayolacolor{Mahogany}{0,.85,.87,.35}\xP@definecrayolacolor{Maroon}{0,.87,.68,.32}\xP@definecrayolacolor{BrickRed}{0,.89,.94,.28}\xP@definecrayolacolor{Red}{0,1,1,0}\xP@definecrayolacolor{OrangeRed}{0,1,.5,0}\xP@definecrayolacolor{RubineRed}{0,1,.13,0}\xP@definecrayolacolor{WildStrawberry}{0,.96,.39,0}\xP@definecrayolacolor{Salmon}{0,.53,.38,0}\xP@definecrayolacolor{CarnationPink}{0,.63,0,0}\xP@definecrayolacolor{Magenta}{0,1,0,0}\xP@definecrayolacolor{VioletRed}{0,.81,0,0}\xP@definecrayolacolor{Rhodamine}{0,.82,0,0}\xP@definecrayolacolor{Mulberry}{.34,.9,0,.02}\xP@definecrayolacolor{RedViolet}{.07,.9,0,.34}\xP@definecrayolacolor{Fuchsia}{.47,.91,0,.08}\xP@definecrayolacolor{Lavender}{0,.48,0,0}\xP@definecrayolacolor{Thistle}{.12,.59,0,0}\xP@definecrayolacolor{Orchid}{.32,.64,0,0}\xP@definecrayolacolor{DarkOrchid}{.4,.8,.2,0}\xP@definecrayolacolor{Purple}{.45,.86,0,0}\xP@definecrayolacolor{Plum}{.5,1,0,0}\xP@definecrayolacolor{Violet}{.79,.88,0,0}\xP@definecrayolacolor{RoyalPurple}{.75,.9,0,0}\xP@definecrayolacolor{BlueViolet}{.86,.91,0,.04}\xP@definecrayolacolor{Periwinkle}{.57,.55,0,0}\xP@definecrayolacolor{CadetBlue}{.62,.57,.23,0}\xP@definecrayolacolor{CornflowerBlue}{.65,.13,0,0}\xP@definecrayolacolor{MidnightBlue}{.98,.13,0,.43}\xP@definecrayolacolor{NavyBlue}{.94,.54,0,0}\xP@definecrayolacolor{RoyalBlue}{1,.5,0,0}\xP@definecrayolacolor{Blue}{1,1,0,0}\xP@definecrayolacolor{Cerulean}{.94,.11,0,0}\xP@definecrayolacolor{Cyan}{1,0,0,0}\xP@definecrayolacolor{ProcessBlue}{.96,0,0,0}\xP@definecrayolacolor{SkyBlue}{.62,0,.12,0}\xP@definecrayolacolor{Turquoise}{.85,0,.2,0}\xP@definecrayolacolor{TealBlue}{.86,0,.34,.02}\xP@definecrayolacolor{Aquamarine}{.82,0,.3,0}\xP@definecrayolacolor{BlueGreen}{.85,0,.33,0}\xP@definecrayolacolor{Emerald}{1,0,.5,0}\xP@definecrayolacolor{JungleGreen}{.99,0,.52,0}\xP@definecrayolacolor{SeaGreen}{.69,0,.5,0}\xP@definecrayolacolor{Green}{1,0,1,0}\xP@definecrayolacolor{ForestGreen}{.91,0,.88,.12}\xP@definecrayolacolor{PineGreen}{.92,0,.59,.25}\xP@definecrayolacolor{LimeGreen}{.5,0,1,0}\xP@definecrayolacolor{YellowGreen}{.44,0,.74,0}\xP@definecrayolacolor{SpringGreen}{.26,0,.76,0}\xP@definecrayolacolor{OliveGreen}{.64,0,.95,.4}\xP@definecrayolacolor{RawSienna}{0,.72,1,.45}\xP@definecrayolacolor{Sepia}{0,.83,1,.7}\xP@definecrayolacolor{Brown}{0,.81,1,.6}\xP@definecrayolacolor{Tan}{.14,.42,.56,0}\xP@definecrayolacolor{Gray}{0,0,0,.5}\xP@definecrayolacolor{Black}{0,0,0,1}\xP@definecrayolacolor{White}{0,0,0,0}} +\xywithoption{crayon}{\xP@installCrayolaColors +\renewcommand*\installCrayolaColors@{}} +\xyendinput + + + + + +%% +%% End of file `xypdf-co.tex'. diff --git a/macros/generic/diagrams/xypic/texinputs/xypdf-cu.tex b/macros/generic/diagrams/xypic/texinputs/xypdf-cu.tex new file mode 100644 index 0000000000..310d6a8ce6 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xypdf-cu.tex @@ -0,0 +1,1187 @@ +%% +%% This is file `xypdf-cu.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% xypdf.dtx (with options: `curve') +%% +%% The xypdf package for TeX and LaTeX +%% Copyright (c) 2010 by Daniel Müllner (M\"ullner) +%% +%% -------------------------------------------------------------------------- +%% +%% This program 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. +%% +%% This program 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. +%% +%% The GNU General Public License is available at +%% . +%% +%% -------------------------------------------------------------------------- +%% +%% This file is part of the xypdf package for TeX and LaTeX2e. The xypdf +%% package may be distributed and/or modified under the conditions 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 distribution consists of the following files: +%% +%% xypdf.dtx - Documented source code +%% xypdf.ins - Installation script +%% xypdf.pdf - Documentation (generated from xypdf.dtx) +%% +%% The files with the TeX code are generated by the following command: +%% +%% latex xypdf.ins +%% +%% This generates the files xypdf.tex, xypdf-co.tex, xypdf-cu.tex, +%% xypdf-fr.tex, xypdf-li.tex and xypdf-ro.tex. +%% +%% -------------------------------------------------------------------------- +%% +%% The xypdf package improves the output quality of the Xy-pic package when +%% PDF documents are generated. It produces generic PDF code for graphical +%% elements like lines, curves and circles instead of approximating these +%% elements with glyphs in special fonts as the original Xy-pic package does. +%% The xypdf package works with both TeX and LaTeX in the occurrences of +%% pdfTeX, XeTeX and eTeX with dvipdfm(x) to generate PDF files. It is being +%% integrated and distributed together with Xy-pic, starting with Xy-pic +%% version 3.8. +%% +%% The copyright for the xypdf package is by its author, Daniel Müllner +%% (Muellner, M\"ullner). +%% +\xycatcodes +\expandafter\let\csname xypdf-cu@loaded\endcsname\@empty +\newcommand*\xP@tempvar[2]{\@ifdefinable#1\relax +\let#1#2} +\newcommand*\xP@oldornewdimen[2]{\@ifundefined{#2}{\xP@newdimen#1}{\expandafter\xP@tempvar\expandafter#1\csname#2\endcsname}} +\xP@tempvar\xP@bigdim\quotPTK@ +\xP@tempvar\xP@parA\L@p +\xP@tempvar\xP@velA\U@p +\xP@tempvar\xP@parB\R@p +\xP@tempvar\xP@velB\D@p +\xP@tempvar\xP@parC\X@origin +\xP@tempvar\xP@velC\Y@origin +\xP@tempvar\xP@parD\X@xbase +\xP@tempvar\xP@velD\Y@xbase +\xP@tempvar\xP@parE\X@ybase +\xP@tempvar\xP@velE\Y@ybase +\xP@tempvar\xP@lenA\X@min +\xP@tempvar\xP@lenB\Y@min +\xP@tempvar\xP@partlen\X@max +\xP@tempvar\xP@oldpartlen\Y@max +\xP@tempvar\xP@tolerance\almostz@ +\xP@tempvar\xP@A\L@p +\xP@tempvar\xP@B\U@p +\xP@tempvar\xP@C\R@p +\xP@tempvar\xP@D\D@p +\xP@tempvar\xP@E\X@origin +\xP@tempvar\xP@F\Y@origin +\xP@tempvar\xP@G\X@xbase +\xP@tempvar\xP@H\Y@xbase +\xP@tempvar\xP@I\X@ybase +\xP@tempvar\xP@J\Y@ybase +\xP@tempvar\xP@K\X@min +\xP@tempvar\xP@L\Y@min +\xP@tempvar\xP@fa\X@max +\xP@tempvar\xP@fd\Y@max +\xP@tempvar\xP@tm\almostz@ +\xP@tempvar\xP@xm\K@dXdY +\xP@tempvar\xP@ym\K@dYdX +\xP@tempvar\xP@off\splineval@ +\xP@tempvar\xP@ta\splinedepth@ +\xP@tempvar\xP@tb\splinetol@ +\xP@tempvar\xP@tc\splinelength@ +\xP@tempvar\xP@M\L@ +\@tempcnta\count11\relax +\xP@oldornewdimen\xP@oldobj{normallineskiplimit} +\xP@oldornewdimen\xP@Tax{@savsk} +\xP@oldornewdimen\xP@Tay{lower@bound} +\xP@oldornewdimen\xP@Tdx{upper@bound} +\xP@oldornewdimen\xP@Tdy{leftmargin} +\xP@oldornewdimen\xP@Tmx{rightmargin} +\xP@oldornewdimen\xP@Tmy{listparindent} +\xP@oldornewdimen\xP@xa{itemindent} +\xP@oldornewdimen\xP@ya{labelwidth} +\xP@oldornewdimen\xP@xb{labelsep} +\xP@oldornewdimen\xP@yb{linewidth} +\xP@oldornewdimen\xP@xc{@totalleftmargin} +\xP@oldornewdimen\xP@yc{leftmargini} +\xP@oldornewdimen\xP@xd{leftmarginii} +\xP@oldornewdimen\xP@yd{leftmarginiii} +\count11\@tempcnta +\xP@tempvar\xP@a\X@ybase +\xP@tempvar\xP@b\Y@ybase +\xP@tempvar\xP@c\X@min +\xP@tempvar\xP@valA\Y@min +\xP@tempvar\xP@valB\X@max +\xP@tempvar\xP@devA\Y@max +\xP@tempvar\xP@devB\almostz@ +\xP@tempvar\xP@ti\K@dXdY +\xP@tempvar\xP@tip\K@dYdX +\xP@tempvar\xP@sa\xP@Tax +\xP@tempvar\xP@sb\xP@Tay +\xP@tempvar\xP@sc\xP@Tdx +\xP@tempvar\xP@Ab\xP@Tdy +\xP@tempvar\xP@AAb\xP@Tmx +\xP@tempvar\xP@Aba\xP@Tmy +\xP@tempvar\xP@Abb\xP@xa +\xP@tempvar\xP@Abc\xP@ya +\xP@tempvar\xP@AAba\xP@xb +\xP@tempvar\xP@AAbb\xP@yb +\xP@tempvar\xP@AAbc\xP@xc +\xP@tempvar\xP@dta\xP@yc +\xP@tempvar\xP@dtb\xP@xd +\xP@tempvar\xP@dtc\xP@yd +\xP@tempvar\xP@temppar\X@origin +\xP@tempvar\xP@tempvel\Y@origin +\xP@tempvar\xP@posX\X@xbase +\xP@tempvar\xP@posY\Y@xbase +\xP@tempvar\xP@oldpar\X@ybase +\xP@tempvar\xP@lastpar\Y@ybase +\xP@tempvar\xP@tempvel@\X@min +\xP@tempvar\xP@parinc\Y@min +\xP@tempvar\xP@squiglen\almostz@ +\xP@tempvar\xP@scaleone\K@ +\xP@tempvar\xP@scaletwo\KK@ +\xP@tempvar\xP@scalethree\Direction +\xP@hook{curve}{splinesolid@} +\newcommand*\xP@splinesolid@{\xP@spline\xP@setsolidpat} +\xP@hook{curve}{splinedashed@} +\newcommand*\xP@splinedashed@{\xP@spline\xP@setdashpat} +\xP@hook{curve}{splinedotted@} +\newcommand*\xP@splinedotted@{\xP@spline\xP@setdottedpat} +\newcommand*\xP@spline[1]{\readsplineparams@ +\ifdim\dimen5<\dimen7 +\xP@preparespline +\ifdim\@tempdimb>\z@ +#1\xP@stroke{\xP@coor\X@p\Y@p m \xP@coor\L@c\U@c\xP@coor\R@c\D@c\xP@coor\X@c\Y@c c}\xP@savec +\fi +\fi +} +\newcommand*\xP@preparespline{\ifx\splineinfo@\squineinfo@ +\L@c\dimexpr(\X@p+2\A@)/3\relax +\U@c\dimexpr(\Y@p+2\B@)/3\relax +\R@c\dimexpr(\X@c+2\A@)/3\relax +\D@c\dimexpr(\Y@c+2\B@)/3\relax +\fi +\xP@shavespline +\xP@bezierlength +} +\newcommand*\xP@inibigdim{\xP@bigdim5040pt} +\newcommand*\xP@shavespline{\xP@shaveprec{\dimen5*\xP@bigdim/\p@}{\dimen7*\xP@bigdim/\p@}} +\newcommand*\xP@shaveprec[2]{{\xP@inibigdim +\A@\dimexpr#1\relax +\B@\dimexpr#2\relax +\@tempswatrue +\ifdim\A@=\z@\ifdim\B@=\xP@bigdim\@tempswafalse\fi\fi +\if@tempswa +\L@p\dimexpr\L@c-\X@p\relax +\U@p\dimexpr\R@c-\L@p-\L@c\relax +\R@p\dimexpr\X@c-3\R@c+3\L@c-\X@p\relax +\D@p\dimexpr\U@c-\Y@p\relax +\X@min\dimexpr\D@c-\D@p-\U@c\relax +\Y@min\dimexpr\Y@c-3\D@c+3\U@c-\Y@p\relax +\xdef\@gtempa{\X@p\the\dimexpr\X@p+(3\L@p+(3\U@p+\R@p*\A@/\xP@bigdim)*\A@/\xP@bigdim)*\A@/\xP@bigdim\relax +\Y@p\the\dimexpr\Y@p+(3\D@p+(3\X@min+\Y@min*\A@/\xP@bigdim)*\A@/\xP@bigdim)*\A@/\xP@bigdim\relax +\L@c\the\dimexpr\X@p+(2\A@+\B@)*\L@p/\xP@bigdim+((\A@+2\B@)*\U@p/\xP@bigdim+\R@p*\A@/\xP@bigdim*\B@/\xP@bigdim)*\A@/\xP@bigdim\relax +\U@c\the\dimexpr\Y@p+(2\A@+\B@)*\D@p/\xP@bigdim+((\A@+2\B@)*\X@min/\xP@bigdim+\Y@min*\A@/\xP@bigdim*\B@/\xP@bigdim)*\A@/\xP@bigdim\relax +\R@c\the\dimexpr\X@p+(2\B@+\A@)*\L@p/\xP@bigdim+((\B@+2\A@)*\U@p/\xP@bigdim+\R@p*\B@/\xP@bigdim*\A@/\xP@bigdim)*\B@/\xP@bigdim\relax +\D@c\the\dimexpr\Y@p+(2\B@+\A@)*\D@p/\xP@bigdim+((\B@+2\A@)*\X@min/\xP@bigdim+\Y@min*\B@/\xP@bigdim*\A@/\xP@bigdim)*\B@/\xP@bigdim\relax +\X@c\the\dimexpr\X@p+(3\L@p+(3\U@p+\R@p*\B@/\xP@bigdim)*\B@/\xP@bigdim)*\B@/\xP@bigdim\relax +\Y@c\the\dimexpr\Y@p+(3\D@p+(3\X@min+\Y@min*\B@/\xP@bigdim)*\B@/\xP@bigdim)*\B@/\xP@bigdim\relax}\else +\global\let\@gtempa\relax +\fi +}\@gtempa +} +\newcommand*\xP@bezierlength{{\xP@inibigdim +\@tempdimb\z@ +\xP@parA\z@ +\xP@velocity\z@\xP@velA +\xP@parC.5\xP@bigdim +\xP@velocity\xP@parC\xP@velC +\xP@velocity\xP@bigdim\xP@velE +\xP@oldpartlen\dimexpr(\xP@velA+4\xP@velC+\xP@velE)/6\relax +\xP@tolerance\xP@max{1sp}{\dimexpr\xP@oldpartlen/100000\relax}\xP@arclength\xP@parC\xP@velC\xP@bigdim\xP@velE\xP@oldpartlen +\global\dimen@i\@tempdimb +}\@tempdimb\dimen@i +} +\newcommand*\xP@velocity[2]{{\@tempdima\dimexpr#1\relax +\xP@tangent +\global\dimen@i\@tempdimb +}#2\dimen@i +} +\newcommand*\xP@tangent{\d@X3\xP@precbeziertan\X@p\L@c\R@c\X@c\@tempdima +\d@Y3\xP@precbeziertan\Y@p\U@c\D@c\Y@c\@tempdima +\xP@veclen +} +\newcommand*\xP@tangentvec[1]{{\@tempdima#1\relax +\xP@tangent +\ifdim\@tempdimb=\z@ +\L@p\dimexpr\X@c-\X@p+(\L@c-\R@c)*3\relax +\U@p\dimexpr\Y@c-\Y@p+(\U@c-\D@c)*3\relax +\d@X\dimexpr\L@p*\@tempdima/\xP@bigdim+(\X@p-2\L@c+\R@c)\relax +\d@Y\dimexpr\U@p*\@tempdima/\xP@bigdim+(\Y@p-2\U@c+\D@c)\relax +\xP@veclen +\ifdim\@tempdimb=\z@ +\d@X\L@p +\d@Y\U@p +\xP@veclen +\ifdim\@tempdimb=\z@ +\xP@warning{xypdf}{Cannot determine a tangent vector to a curve}\@tempdimb\p@ +\fi +\fi +\fi +\global\dimen@i\d@X +\global\dimen3\d@Y +\global\dimen5\@tempdimb +}\d@X\dimen@i +\d@Y\dimen3\relax +\@tempdimb\dimen5\relax +} +\newcommand*\xP@arclength[5]{\xP@parE#3\xP@velE#4\xP@parC#1\xP@velC#2\xP@oldpartlen#5\xP@parB\dimexpr(\xP@parC+\xP@parA)/2\relax +\xP@velocity\xP@parB\xP@velB +\xP@parD\dimexpr(\xP@parE+\xP@parC)/2\relax +\xP@velocity\xP@parD\xP@velD +\xP@lenA +\dimexpr(\xP@velA+4\xP@velB+\xP@velC)/6*(\xP@parC-\xP@parA)/\xP@bigdim\relax +\xP@lenB +\dimexpr(\xP@velC+4\xP@velD+\xP@velE)/6*(\xP@parE-\xP@parC)/\xP@bigdim\relax +\xP@partlen\dimexpr\xP@lenA+\xP@lenB\relax +{\@tempdima\dimexpr\xP@oldpartlen-\xP@partlen\relax +\expandafter}\ifdim\ifdim\@tempdima<\z@-\fi\@tempdima>\xP@tolerance +\edef\next@{\noexpand\xP@arclength\xP@parB\xP@velB\xP@parC\xP@velC\xP@lenA +\noexpand\xP@arclength{\the\xP@parD}{\the\xP@velD}{\the\xP@parE}{\the\xP@velE}{\the\xP@lenB}}\else +\xP@parA\xP@parE +\xP@velA\xP@velE +\advance\@tempdimb\xP@partlen +\DN@{}\fi +\next@ +} +\xP@hook{curve}{@crv@} +\newcommand*\xP@@crv@[2]{\DN@{#1#2}\ifx\next@\@empty \edef\next@{\crv@defaultshape}\ifx\bstartPLACE@\@empty\xdef\crvSTYLE@@{{\crv@defaultshape}}\fi +\else +\ifx\bstartPLACE@\@empty\gdef\crvSTYLE@@{#1{#2}}\fi +\fi +\ifx\next@\@empty\crv@noobject \DN@{\crv@{}{\xy@@crvaddstack@}}\else\def\tmp@{-}\ifx\next@\tmp@ \DN@{\crv@{}{\xy@@crvaddstack@}}\else\def\tmp@{=}\ifx\next@\tmp@ +\DN@{\expandafter\crv@\crv@normaltemplate{\dir{=}}}\else\def\tmp@{2-}\ifx\next@\tmp@ +\DN@{\expandafter\crv@\crv@normaltemplate{\dir{2.}}}\else\def\tmp@{3-}\ifx\next@\tmp@ +\DN@{\expandafter\crv@\crv@normaltemplate{\dir{3.}}}\else\def\tmp@{--}\ifx\next@\tmp@ +\DN@{\expandafter\crv@\crv@specialtemplate@{--}}\else\def\tmp@{==}\ifx\next@\tmp@ +\DN@{\expandafter\crv@\crv@normaltemplate{\dir2{--}}}\else\def\tmp@{2--}\ifx\next@\tmp@ +\DN@{\expandafter\crv@\crv@normaltemplate{\dir2{--}}}\else\def\tmp@{3--}\ifx\next@\tmp@ +\DN@{\expandafter\crv@\crv@normaltemplate{\dir3{--}}}\else\def\tmp@{.}\ifx\next@\tmp@ +\DN@{\expandafter\crv@\crv@specialtemplate@{.}}\else\def\tmp@{:}\ifx\next@\tmp@ +\DN@{\expandafter\crv@\crv@normaltemplate{\dir{:}}}\else\def\tmp@{2.}\ifx\next@\tmp@ +\DN@{\expandafter\crv@\crv@normaltemplate{\dir{:}}}\else\def\tmp@{3.}\ifx\next@\tmp@ +\DN@{\expandafter\crv@\crv@normaltemplate{\dir3{.}}}\else\def\tmp@{~}\ifx\next@\tmp@ +\DN@{\expandafter\crv@\crv@normaltemplate{\dir{~}}}\else\def\tmp@{2~}\ifx\next@\tmp@ +\DN@{\expandafter\crv@\crv@normaltemplate{\dir2{~}}}\else\def\tmp@{3~}\ifx\next@\tmp@ +\DN@{\expandafter\crv@\crv@normaltemplate{\dir3{~}}}\else\def\tmp@{~~}\ifx\next@\tmp@ +\DN@{\expandafter\crv@\crv@normaltemplate{\dir{~~}}}\else\def\tmp@{2~~}\ifx\next@\tmp@ +\DN@{\expandafter\crv@\crv@normaltemplate{\dir2{~~}}}\else\def\tmp@{3~~}\ifx\next@\tmp@ +\DN@{\expandafter\crv@\crv@normaltemplate{\dir3{~~}}}\else\def\tmp@{..}\ifx\next@\tmp@ +\DN@{\expandafter\crv@\crv@specialtemplate@{.}}\else +\DN@{\expandafter\crv@\crv@othertemplate{\dir#1{#2}}}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\next@} +\xP@hook{curve}{xysplinespecialcases@} +\newcommand*\xP@xysplinespecialcases@{\ifx\@empty\xycrvdrop@ +\ifx\@empty\xycrvconn@\DN@{\splinesolid@}\else\DN@{ \dir{-}}\ifx\next@\xycrvconn@\DN@{\splinesolid@}\else\DN@{ \dir2{-}}\ifx\next@\xycrvconn@\DN@{\splinedoubled@}\else\DN@{ \dir{=}}\ifx\next@\xycrvconn@\DN@{\splineribboned@}\else\DN@{ \dir{2.}}\ifx\next@\xycrvconn@\DN@{\splinedoubled@}\else\DN@{ \dir3{-}}\ifx\next@\xycrvconn@\DN@{\splinetrebled@}\else\DN@{ \dir{3.}}\ifx\next@\xycrvconn@\DN@{\splinetrebled@}\else\DN@{ \dir{--}}\ifx\next@\xycrvconn@\DN@{\splinedashed@}\else\DN@{ \dir{.}}\ifx\next@\xycrvconn@\DN@{\splinedotted@}\else\DN@{ \dir{:}}\ifx\next@\xycrvconn@\DN@{\splinedbldotted@}\else\DN@{ \dir2{.}}\ifx\next@\xycrvconn@\DN@{\splinedbldotted@}\else\DN@{ \dir3{.}}\ifx\next@\xycrvconn@\DN@{\xP@splinetrbldotted}\else\DN@{ \dir2{--}}\ifx\next@\xycrvconn@\DN@{\xP@splinedbldashed}\else\DN@{ \dir3{--}}\ifx\next@\xycrvconn@\DN@{\xP@splinetrbldashed}\else\DN@{ \dir{~}}\ifx\next@\xycrvconn@\DN@{\xP@splinesquiggled}\else\DN@{ \dir2{~}}\ifx\next@\xycrvconn@\DN@{\xP@splinedblsquiggled}\else\DN@{ \dir3{~}}\ifx\next@\xycrvconn@\DN@{\xP@splinetrblsquiggled}\else\DN@{ \dir{~~}}\ifx\next@\xycrvconn@\DN@{\xP@splinebrokensquiggled}\else\DN@{ \dir2{~~}}\ifx\next@\xycrvconn@\DN@{\xP@splinebrokendblsquiggled}\else\DN@{ \dir3{~~}}\ifx\next@\xycrvconn@\DN@{\xP@splinebrokentrblsquiggled}\else\ifdim\splinetol@>\z@\else\splinedefaulttol@\fi +\DN@{\splineset@@}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi +\else +\DN@{\splineset@@}\fi +\ifInvisible@\DN@{}\fi +\next@ +} +\xP@hook{curve}{splinedoubled@} +\newcommand*\xP@splinedoubled@{\xP@checkspline\xP@splinemultsolid\xP@doublestroke} +\xP@hook{curve}{splineribboned@} +\@ifdefinable\xP@splineribboned@\relax +\let\xP@splineribboned@\xP@splinedoubled@ +\xP@hook{curve}{splinetrebled@} +\newcommand*\xP@splinetrebled@{\xP@checkspline\xP@splinemultsolid\xP@trblstroke} +\newcommand*\xP@doublestroke{\xydashh@/2,-\xydashh@/2} +\newcommand*\xP@trblstroke{\xydashh@,\z@,-\xydashh@} +\newcommand*\xP@checkspline[1]{\readsplineparams@ +\let\next@\@gobble +\ifdim\dimen5<\dimen7 +\xP@preparespline +\ifdim\@tempdimb>\z@ +\ifdim\@tempdimb<2\dimexpr\xP@preclw\relax +\let\next@\xP@splinemultsolid +\else +\let\next@#1\fi +\fi +\fi +\next@ +} +\newcommand*\xP@splinemultsolid[1]{{\xP@inibigdim +\@temptokena{}\xP@setsolidpat +\@for\@tempa:={#1}\do{\xP@paintsolid\z@\xP@bigdim}\xP@stroke{\the\@temptokena}}} +\newcommand*\xP@paintsolid[2]{{\xP@savepts +\xP@a#1\relax +\xP@c#2\relax +\xP@movetotrue +\xP@paintsolid@ +\xdef\@gtempa{\the\@temptokena}}\@temptokena\expandafter{\@gtempa}} +\newcommand*\xP@paintsolid@{\xP@b\xP@c +\xP@off\dimexpr\@tempa\relax +\ifdim\xP@off=\z@ +\xP@shaveprec\xP@a\xP@c +\else +\loop +\xP@restorepts +\xP@offsetsegment +\xP@testoffset +\unless\ifxP@offsetok +\xP@b\dimexpr\xP@a+(\xP@b-\xP@a)*7/10\relax +\repeat +\fi +\xP@append\@temptokena{\ifxP@moveto\xP@coor\X@p\Y@p m \fi +\xP@coor\L@c\U@c\xP@coor\R@c\D@c\xP@coor\X@c\Y@c c }\xP@movetofalse +\ifdim\xP@b<\xP@c\relax +\xP@a\xP@b +\expandafter\xP@paintsolid@ +\fi +} +\@ifdefinable\ifxP@moveto\relax +\@ifdefinable\xP@movetotrue\relax +\@ifdefinable\xP@movetofalse\relax +\newif\ifxP@moveto +\newcommand*\xP@savepts{\xP@xa\X@p +\xP@ya\Y@p +\xP@xb\L@c +\xP@yb\U@c +\xP@xc\R@c +\xP@yc\D@c +\xP@xd\X@c +\xP@yd\Y@c +} +\newcommand*\xP@restorepts{\X@p\xP@xa +\Y@p\xP@ya +\L@c\xP@xb +\U@c\xP@yb +\R@c\xP@xc +\D@c\xP@yc +\X@c\xP@xd +\Y@c\xP@yd +} +\@ifdefinable\xP@tmx\relax +\@ifdefinable\xP@tmy\relax +\newcommand*\xP@Tmxy{*\xP@Tmx/\xP@Tmy} +\newcommand*\xP@Tmyx{*\xP@Tmy/\xP@Tmx} +\newcommand*\xP@Tmzero{*\z@} +\newcommand*\xP@offsetsegment{{\xP@tangentvec\xP@a +\xP@xa\dimexpr\xP@precbezierpoly\X@p\L@c\R@c\X@c\xP@a/8+\d@Y*\xP@off/\@tempdimb\relax +\xP@ya\dimexpr\xP@precbezierpoly\Y@p\U@c\D@c\Y@c\xP@a/8-\d@X*\xP@off/\@tempdimb\relax +\xP@scaleT +\xP@Tax\d@X +\xP@Tay\d@Y +\xP@E\@tempdimb +\xP@tangentvec\xP@b +\xP@xd\dimexpr\xP@precbezierpoly\X@p\L@c\R@c\X@c\xP@b/8+\d@Y*\xP@off/\@tempdimb\relax +\xP@yd\dimexpr\xP@precbezierpoly\Y@p\U@c\D@c\Y@c\xP@b/8-\d@X*\xP@off/\@tempdimb\relax +\xP@scaleT +\xP@Tdx-\d@X +\xP@Tdy-\d@Y +\xP@F\@tempdimb +\xP@M\z@ +\xP@Max\xP@M\xP@Tdx +\xP@Max\xP@M\xP@Tdy +\xP@L\dimexpr\xP@Tax*\xP@Tdx/\xP@M+\xP@Tay*\xP@Tdy/\xP@M\relax +\xP@tm\dimexpr(\xP@a+\xP@b)/2\relax +\ifdim\xP@L>\dimexpr\xP@E*\xP@F/\xP@M*49/50\relax +\d@X-\dimexpr\xP@Tay+\xP@Tdy\relax +\d@Y\dimexpr\xP@Tax+\xP@Tdx\relax +\xP@veclen +\xP@A\dimexpr\X@c-\X@p\relax +\xP@B\dimexpr\Y@c-\Y@p\relax +\xP@M\z@ +\xP@Max\xP@M\xP@A +\xP@Max\xP@M\xP@B +\ifdim\xP@M=\z@ +\xP@A\dimexpr\R@c-\L@c\relax +\xP@B\dimexpr\D@c-\U@c\relax +\xP@Max\xP@M\xP@A +\xP@Max\xP@M\xP@B +\fi +\xP@M\dimexpr\d@X*\xP@A/\xP@M+\d@Y*\xP@B/\xP@M\relax +\ifdim\xP@M<\z@ +\multiply\d@X\m@ne +\multiply\d@Y\m@ne +\fi +\else +\xP@tangentvec\xP@tm +\fi +\xP@xm\dimexpr\xP@precbezierpoly\X@p\L@c\R@c\X@c\xP@tm+8\d@Y*\xP@off/\@tempdimb\relax +\xP@ym\dimexpr\xP@precbezierpoly\Y@p\U@c\D@c\Y@c\xP@tm-8\d@X*\xP@off/\@tempdimb\relax +\xP@Tmx\d@X +\xP@Tmy\d@Y +\xP@ifabsless\xP@Tmy\xP@Tmx +\let\xP@tmy\xP@Tmyx +\let\xP@tmx\@empty +\else +\ifdim\xP@Tmy=\z@ +\let\xP@tmx\xP@Tmzero +\let\xP@tmy\xP@Tmzero +\else +\let\xP@tmy\@empty +\let\xP@tmx\xP@Tmxy +\fi +\fi +\xP@fa\p@ +\xP@fd\p@ +\xP@tm\p@ +\count@\z@ +\loop +\xP@offsetpoints +\@tempswafalse +\ifnum10>\count@ +\xP@objfun\xP@oldobj +\ifdim\xP@oldobj>\xP@maxobjfun\relax\@tempswatrue\fi +\fi +\if@tempswa +\xP@offsetloop +\repeat +\xdef\@gtempa{\X@p\the\xP@xa\Y@p\the\xP@ya +\L@c\the\xP@xb\U@c\the\xP@yb\R@c\the\xP@xc\D@c\the\xP@yc +\X@c\the\xP@xd\Y@c\the\xP@yd\relax}}\@gtempa +} +\newcommand*\xP@scaleT{\xP@B6.28\xP@off +\xP@abs\xP@B +\xP@C\dimexpr\d@X*\xP@B/\@tempdimb\relax +\xP@D\dimexpr\d@Y*\xP@B/\@tempdimb\relax +\xP@A\dimexpr\xP@b-\xP@a\relax +\d@X\dimexpr\xP@C+\d@X*\xP@A/\xP@bigdim\relax +\d@Y\dimexpr\xP@D+\d@Y*\xP@A/\xP@bigdim\relax +\@tempdimb\dimexpr\xP@B+\@tempdimb*\xP@A/\xP@bigdim\relax +} +\newcommand*\xP@offsetloop{\xP@C\dimexpr\xP@C/2\relax +\xP@G\dimexpr\xP@G/2\relax +\xP@ta\dimexpr2\p@-\xP@tm\relax +\xP@tb\dimexpr\xP@tm*\xP@ta/\p@\relax +\xP@A\dimexpr\xP@Tax*\xP@tb/\p@*\xP@ta/\p@\relax +\xP@B\dimexpr\xP@Tdx*\xP@tb/\p@*\xP@tm/\p@\relax +\xP@E\dimexpr\xP@Tay*\xP@tb/\p@*\xP@ta/\p@\relax +\xP@F\dimexpr\xP@Tdy*\xP@tb/\p@*\xP@tm/\p@\relax +\xP@tb\dimexpr2\p@-3\xP@tm\relax +\xP@tc\dimexpr\xP@tb+2\p@\relax +\xP@I\dimexpr(2\xP@Tay\xP@tmx-2\xP@Tax\xP@tmy)*\xP@tb/\p@*\xP@ta/\p@\relax +\xP@J\dimexpr(2\xP@Tdy\xP@tmx-2\xP@Tdx\xP@tmy)*\xP@tc/\p@*\xP@tm/\p@\relax +\xP@K\dimexpr((\xP@yd-\xP@ya+(\xP@yb-\xP@yc)*3) +*\xP@tm/\p@+(\xP@yc-2\xP@yb+\xP@ya)*2)*12\xP@tmx +-((\xP@xd-\xP@xa+(\xP@xb-\xP@xc)*3) +*\xP@tm/\p@+(\xP@xc-2\xP@xb+\xP@xa)*2)*12\xP@tmy\relax +\xP@solvelinearsystem +\ifxP@validsol +\xP@correctsol +\ifdim\xP@ta=\z@ +\ifdim\xP@tb=\z@ +\ifdim\xP@tc=\z@ +\xP@validsolfalse +\fi\fi\fi +\fi +\ifxP@validsol +\else +\xP@applinsys +\advance\xP@fa-\xP@ta +\advance\xP@fd-\xP@tb +\advance\xP@tm-\xP@tc +\ifdim\xP@tm<\z@\xP@tm\z@\fi +\ifdim\xP@tm>2\p@\xP@tm2\p@\fi +\fi +\advance\count@\@ne +} +\newcommand*\xP@maxsol{3pt} +\newcommand*\xP@correctsol{\xP@M\z@ +\xP@Max\xP@M\xP@ta +\xP@Max\xP@M\xP@tb +\xP@Max\xP@M\xP@tc +\ifdim\xP@M>\xP@maxsol +\xP@ta\dimexpr\xP@maxsol*\xP@ta/\xP@M\relax +\xP@tb\dimexpr\xP@maxsol*\xP@tb/\xP@M\relax +\xP@tc\dimexpr\xP@maxsol*\xP@tc/\xP@M\relax +\fi +\advance\xP@fa-\xP@ta +\advance\xP@fd-\xP@tb +\xP@M\xP@tm +\advance\xP@tm-\xP@tc +\ifdim\xP@tm<\z@\xP@tm\z@\fi +\ifdim\xP@tm>2\p@\xP@tm2\p@\fi +{\xP@offsetpoints +\xP@objfun\xP@M +\expandafter}\ifdim\xP@M>\xP@oldobj +\advance\xP@fa\xP@ta +\advance\xP@fd\xP@tb +\xP@tm\xP@M +\xP@validsolfalse +\fi +} +\newcommand*\xP@objfun[1]{\xP@D\dimexpr\xP@bezierpoly\xP@xa\xP@xb\xP@xc\xP@xd\xP@tm-\xP@xm\relax +\xP@H\dimexpr\xP@bezierpoly\xP@ya\xP@yb\xP@yc\xP@yd\xP@tm-\xP@ym\relax +\xP@C\xP@beziertan\xP@xa\xP@xb\xP@xc\xP@xd\xP@tm +\xP@G\xP@beziertan\xP@ya\xP@yb\xP@yc\xP@yd\xP@tm +\xP@L\dimexpr\xP@G\xP@tmx-\xP@C\xP@tmy\relax +#1\z@ +\xP@Max#1\xP@D +\xP@Max#1\xP@H +\xP@Max#1\xP@L +#1\ifdim#1>4843165sp +\maxdimen +\else +\dimexpr\xP@D*\xP@D/\p@+\xP@H*\xP@H/\p@+\xP@L*\xP@L/\p@\relax +\fi +} +\newcommand*\xP@offsetpoints{\xP@xb\dimexpr\xP@xa+\xP@Tax*\xP@fa/196608\relax +\xP@yb\dimexpr\xP@ya+\xP@Tay*\xP@fa/196608\relax +\xP@xc\dimexpr\xP@xd+\xP@Tdx*\xP@fd/196608\relax +\xP@yc\dimexpr\xP@yd+\xP@Tdy*\xP@fd/196608\relax +} +\newcommand*\xP@bezierpoly[5]{\dimexpr(((#4-#1+(#2-#3)*3)*#5/\p@+(#1-2#2+#3)*6)*#5/\p@+(#2-#1)*12)*#5/\p@ ++#1*8\relax +} +\newcommand*\xP@precbezierpoly[5]{\dimexpr(((#4-#1+(#2-#3)*3)*2*#5/\xP@bigdim+(#1-2#2+#3)*6)*2*#5/\xP@bigdim ++(#2-#1)*12)*2*#5/\xP@bigdim+#1*8\relax +} +\newcommand*\xP@beziertan[5]{\dimexpr((#4-#1+(#2-#3)*3)*3*#5/32768+(#1-2#2+#3)*24)*#5/\p@+(#2-#1)*24\relax +} +\newcommand*\xP@precbeziertan[5]{\dimexpr((#4-#1+(#2-#3)*3)*#5/\xP@bigdim+(#1-2#2+#3)*2)*#5/\xP@bigdim ++#2-#1\relax +} +\@ifdefinable\xP@varone\relax +\@ifdefinable\xP@vartwo\relax +\@ifdefinable\xP@varthree\relax +\@ifdefinable\ifxP@validsol\relax +\@ifdefinable\xP@validsoltrue\relax +\@ifdefinable\xP@validsolfalse\relax +\newif\ifxP@validsol +\newcommand*\xP@solvelinearsystem{{\xP@scalerow\xP@A\xP@B\xP@C\xP@D +\xP@scalerow\xP@E\xP@F\xP@G\xP@H +\xP@scalerow\xP@I\xP@J\xP@K\xP@L +\xP@scalecol\xP@A\xP@E\xP@I\xP@scaleone +\xP@scalecol\xP@B\xP@F\xP@J\xP@scaletwo +\xP@scalecol\xP@C\xP@G\xP@K\xP@scalethree +\let\xP@varone\xP@ta +\let\xP@vartwo\xP@tb +\let\xP@varthree\xP@tc +\count@\m@ne +\@tempcnta\m@ne +\xP@ifabsless\xP@A\xP@B\@tempcnta\z@\xP@M\xP@B +\else\xP@M\xP@A\fi +\xP@ifabsless\xP@M\xP@C\@tempcnta\@ne\xP@M\xP@C\fi +\xP@ifabsless\xP@M\xP@E\@tempcnta\m@ne\count@\z@\xP@M\xP@E\fi +\xP@ifabsless\xP@M\xP@F\@tempcnta\z@\count@\z@\xP@M\xP@F\fi +\xP@ifabsless\xP@M\xP@G\@tempcnta\@ne\count@\z@\xP@M\xP@G\fi +\xP@ifabsless\xP@M\xP@I\@tempcnta\m@ne\count@\@ne\xP@M\xP@I\fi +\xP@ifabsless\xP@M\xP@J\@tempcnta\z@\count@\@ne\xP@M\xP@J\fi +\xP@ifabsless\xP@M\xP@K\@tempcnta\@ne\count@\@ne\fi +\ifcase\count@ +\xP@swapdim\xP@A\xP@E +\xP@swapdim\xP@B\xP@F +\xP@swapdim\xP@C\xP@G +\xP@swapdim\xP@D\xP@H +\or +\xP@swapdim\xP@A\xP@I +\xP@swapdim\xP@B\xP@J +\xP@swapdim\xP@C\xP@K +\xP@swapdim\xP@D\xP@L +\fi +\ifcase\@tempcnta +\xP@swapdim\xP@A\xP@B +\xP@swapdim\xP@E\xP@F +\xP@swapdim\xP@I\xP@J +\let\xP@varone\xP@tb +\let\xP@vartwo\xP@ta +\xP@swapnum\xP@scaleone\xP@scaletwo +\or +\xP@swapdim\xP@A\xP@C +\xP@swapdim\xP@E\xP@G +\xP@swapdim\xP@I\xP@K +\let\xP@varone\xP@tc +\let\xP@varthree\xP@ta +\xP@swapnum\xP@scaleone\xP@scalethree +\fi +\multiply\xP@E\m@ne +\multiply\xP@I\m@ne +\ifdim\xP@A=\z@ +\else +\advance\xP@F\dimexpr\xP@B*\xP@E/\xP@A\relax +\advance\xP@G\dimexpr\xP@C*\xP@E/\xP@A\relax +\advance\xP@H\dimexpr\xP@D*\xP@E/\xP@A\relax +\advance\xP@J\dimexpr\xP@B*\xP@I/\xP@A\relax +\advance\xP@K\dimexpr\xP@C*\xP@I/\xP@A\relax +\advance\xP@L\dimexpr\xP@D*\xP@I/\xP@A\relax +\fi +\count@\m@ne +\xP@ifabsless\xP@F\xP@G\@tempcnta\z@\xP@M\xP@G +\else\@tempcnta\m@ne\xP@M\xP@F\fi +\xP@ifabsless\xP@M\xP@J\@tempcnta\m@ne\count@\z@\xP@M\xP@J\fi +\xP@ifabsless\xP@M\xP@K\@tempcnta\z@\count@\z@\fi +\ifnum\count@=\z@ +\xP@swapdim\xP@F\xP@J +\xP@swapdim\xP@G\xP@K +\xP@swapdim\xP@H\xP@L +\fi +\ifnum\@tempcnta=\z@ +\xP@swapdim\xP@B\xP@C +\xP@swapdim\xP@F\xP@G +\xP@swapdim\xP@J\xP@K +\let\@tempa\xP@varthree +\let\xP@varthree\xP@vartwo +\let\xP@vartwo\@tempa +\xP@swapnum\xP@scaletwo\xP@scalethree +\fi +\ifdim\xP@F=\z@ +\else +\advance\xP@K\dimexpr-\xP@G*\xP@J/\xP@F\relax +\advance\xP@L\dimexpr-\xP@H*\xP@J/\xP@F\relax +\fi +\xP@ifabsless{\dimexpr\xP@L/60\relax}{\dimexpr\xP@K/\xP@scalethree\relax}\xP@validsoltrue +\xP@varthree\dimexpr\xP@L*(\xP@scalethree*\p@)/\xP@K\relax +\else +\xP@validsolfalse +\fi +\xP@checkabs{\xP@H/8191}{\xP@F/\xP@scaletwo}\xP@checkabs{\xP@G/\xP@scalethree/136}{\xP@F/\xP@scaletwo}\ifxP@validsol +\xP@vartwo\dimexpr\xP@H*(\xP@scaletwo*\p@)/\xP@F +-\xP@varthree*\xP@scaletwo/\xP@scalethree*\xP@G/\xP@F\relax +\xP@checkabs\xP@vartwo{60pt}\fi +\xP@checkabs{\xP@D/5461}{\xP@A/\xP@scaleone}\xP@checkabs{\xP@B/\xP@scaletwo/91}{\xP@A/\xP@scaleone}\xP@checkabs{\xP@C/\xP@scalethree/91}{\xP@A/\xP@scaleone}\ifxP@validsol +\xP@varone\dimexpr\xP@D*(\xP@scaleone*\p@)/\xP@A +-\xP@vartwo*\xP@scaleone/\xP@scaletwo*\xP@B/\xP@A +-\xP@varthree*\xP@scaleone/\xP@scalethree*\xP@C/\xP@A\relax +\xP@checkabs\xP@varone{60pt}\fi +\xdef\@gtempa{\ifxP@validsol +\xP@ta\the\xP@ta\relax +\xP@tb\the\xP@tb\relax +\xP@tc\the\xP@tc\relax +\noexpand\xP@validsoltrue +\else +\noexpand\xP@validsolfalse +\fi +}}\@gtempa +} +\newcommand*\xP@scalerow[4]{\xP@M\z@ +\xP@Max\xP@M#1\xP@Max\xP@M#2\xP@Max\xP@M#3\xP@Max\xP@M#4\count@134217727 +\loop +\divide\xP@M\tw@ +\ifdim\xP@M>\z@ +\divide\count@\tw@ +\repeat +\advance\count@\@ne +\multiply#1\count@ +\multiply#2\count@ +\multiply#3\count@ +\multiply#4\count@ +} +\newcommand*\xP@scalecol[4]{\xP@M\z@ +\xP@Max\xP@M#1\xP@Max\xP@M#2\xP@Max\xP@M#3#416777215 +\loop +\divide\xP@M\tw@ +\ifdim\xP@M>\z@ +\divide#4\tw@ +\repeat +\advance#4\@ne +\multiply#1#4\multiply#2#4\multiply#3#4} +\newcommand*\xP@checkabs[2]{\xP@ifabsless{\dimexpr#1\relax}{\dimexpr#2\relax}\else\xP@validsolfalse\fi} +\newcommand*\xP@applinsys{{\xP@applinsys@ +\xP@ta\xP@dta +\xP@tb\xP@dtb +\xP@tc\xP@dtc +\xP@checkapp +\if@tempswa +\xP@modobj +\xP@applinsys@ +\xP@checkapp +\if@tempswa +\xP@modsol +\xP@modobj +\xP@applinsys@ +\xP@modsol +\fi +\fi +\xdef\@gtempa{\xP@ta\the\xP@ta\relax +\xP@tb\the\xP@tb\relax +\xP@tc\the\xP@tc\relax +}}\@gtempa +} +\newcommand*\xP@checkapp{\@tempswatrue +\ifdim\xP@dta=\z@ +\ifdim\xP@dtb=\z@ +\ifdim\xP@dtc=\z@ +\@tempswafalse +\fi\fi\fi +} +\newcommand*\xP@modobj{\advance\xP@D +\dimexpr-\xP@A*\xP@dta/\p@-\xP@B*\xP@dtb/\p@-\xP@C*\xP@dtc/\p@\relax +\advance\xP@H +\dimexpr-\xP@E*\xP@dta/\p@-\xP@F*\xP@dtb/\p@-\xP@G*\xP@dtc/\p@\relax +\advance\xP@L +\dimexpr-\xP@I*\xP@dta/\p@-\xP@J*\xP@dtb/\p@-\xP@K*\xP@dtc/\p@\relax +} +\newcommand*\xP@modsol{\advance\xP@ta\xP@dta +\advance\xP@tb\xP@dtb +\advance\xP@tc\xP@dtc +} +\newcommand*\xP@applinsys@{{\xP@sa\z@ +\xP@Max\xP@sa\xP@A +\xP@Max\xP@sa\xP@B +\xP@Max\xP@sa\xP@C +\xP@Max\xP@sa\xP@E +\xP@Max\xP@sa\xP@F +\xP@Max\xP@sa\xP@G +\xP@Max\xP@sa\xP@I +\xP@Max\xP@sa\xP@J +\xP@Max\xP@sa\xP@K +\xP@sa\ifdim\xP@sa<5460pt\thr@@\xP@sa\else\maxdimen\fi +\xP@sb\z@ +\xP@Max\xP@sb\xP@D +\xP@Max\xP@sb\xP@H +\xP@Max\xP@sb\xP@L +\ifdim\xP@sb>\z@ +\xP@D\dimexpr\xP@D*\maxdimen/\xP@sb\relax +\xP@H\dimexpr\xP@H*\maxdimen/\xP@sb\relax +\xP@L\dimexpr\xP@L*\maxdimen/\xP@sb\relax +\fi +\xP@Aba\dimexpr\xP@A*\xP@D/\xP@sa+\xP@E*\xP@H/\xP@sa+\xP@I*\xP@L/\xP@sa\relax +\xP@Abb\dimexpr\xP@B*\xP@D/\xP@sa+\xP@F*\xP@H/\xP@sa+\xP@J*\xP@L/\xP@sa\relax +\xP@Abc\dimexpr\xP@C*\xP@D/\xP@sa+\xP@G*\xP@H/\xP@sa+\xP@K*\xP@L/\xP@sa\relax +\xP@AAba\dimexpr\xP@A*\xP@Aba/\xP@sa+\xP@B*\xP@Abb/\xP@sa ++\xP@C*\xP@Abc/\xP@sa\relax +\xP@AAbb\dimexpr\xP@E*\xP@Aba/\xP@sa+\xP@F*\xP@Abb/\xP@sa ++\xP@G*\xP@Abc/\xP@sa\relax +\xP@AAbc\dimexpr\xP@I*\xP@Aba/\xP@sa+\xP@J*\xP@Abb/\xP@sa ++\xP@K*\xP@Abc/\xP@sa\relax +\xP@sc\z@ +\xP@Max\xP@sc\xP@Aba +\xP@Max\xP@sc\xP@Abb +\xP@Max\xP@sc\xP@Abc +\xP@Max\xP@sc\xP@AAba +\xP@Max\xP@sc\xP@AAbb +\xP@Max\xP@sc\xP@AAbc +\ifdim\xP@sc=\z@ +\xP@AAb\z@ +\else +\xP@Ab\dimexpr\xP@Aba*\xP@bigdim/\xP@sc*\xP@Aba/\xP@sc ++\xP@Abb*\xP@bigdim/\xP@sc*\xP@Abb/\xP@sc ++\xP@Abc*\xP@bigdim/\xP@sc*\xP@Abc/\xP@sc +\relax +\xP@AAb\dimexpr\xP@AAba*\xP@bigdim/\xP@sc*\xP@AAba/\xP@sc ++\xP@AAbb*\xP@bigdim/\xP@sc*\xP@AAbb/\xP@sc ++\xP@AAbc*\xP@bigdim/\xP@sc*\xP@AAbc/\xP@sc +\relax +\fi +\xdef\@gtempa{\ifdim\xP@AAb=\z@ +\xP@dta\z@ +\xP@dtb\z@ +\xP@dtc\z@ +\else +\xP@dta\the\dimexpr\xP@Aba*\xP@sb/\xP@sa*\p@/\xP@AAb*\xP@Ab/\maxdimen +\relax +\xP@dtb\the\dimexpr\xP@Abb*\xP@sb/\xP@sa*\p@/\xP@AAb*\xP@Ab/\maxdimen +\relax +\xP@dtc\the\dimexpr\xP@Abc*\xP@sb/\xP@sa*\p@/\xP@AAb*\xP@Ab/\maxdimen +\relax +\fi +}}\@gtempa +} +\@ifdefinable\ifxP@offsetok\relax +\@ifdefinable\xP@offsetoktrue\relax +\@ifdefinable\xP@offsetokfalse\relax +\newif\ifxP@offsetok +\newcommand*\xP@maxdev{.1pt} +\newcommand*\xP@maxobjfun{.005pt} +\newcommand*\xP@testoffset{{\gdef\xP@afteroffsetok{\xP@offsetoktrue}\def\xP@offsetokif{\ifdim\xP@ti<1.85pt}\xP@ti.1pt +\loop +\xP@tip\dimexpr\xP@a+(\xP@b-\xP@a)*\xP@ti/131072\relax +\L@p\xP@precbezierpoly\xP@xa\xP@xb\xP@xc\xP@xd\xP@tip +\U@p\xP@precbezierpoly\xP@ya\xP@yb\xP@yc\xP@yd\xP@tip +\xP@valA\dimexpr\xP@bezierpoly\X@p\L@c\R@c\X@c\xP@ti-\L@p\relax +\xP@valB\dimexpr\xP@bezierpoly\Y@p\U@c\D@c\Y@c\xP@ti-\U@p\relax +\d@X3\xP@precbeziertan\xP@xa\xP@xb\xP@xc\xP@xd\xP@tip +\d@Y3\xP@precbeziertan\xP@ya\xP@yb\xP@yc\xP@yd\xP@tip +\xP@veclen +\@tempdimc\dimexpr(\xP@b-\xP@a)*\@tempdimb/\xP@bigdim\relax +\xP@abs\@tempdimc +\ifdim.01pt<\@tempdimc +\xP@devA\dimexpr\xP@valA*\d@X/\@tempdimb+\xP@valB*\d@Y/\@tempdimb\relax +\xP@devB\dimexpr\xP@valA*\d@Y/\@tempdimb-\xP@valB*\d@X/\@tempdimb-8\xP@off +\relax +\xP@abs\xP@devA +\xP@abs\xP@devB +\@tempdima\dimexpr\xP@devA+\xP@devB\relax +\else +\ifdim\@tempdimc=\z@ +\@tempdima\z@ +\else +{\d@X\xP@valA +\d@Y\xP@valB +\xP@veclen@ +\global\dimen@i\@tempdimb +}\@tempdima\dimen@i +\advance\@tempdima\ifdim\xP@off>\z@-\fi8\xP@off +\xP@abs\@tempdima +\fi +\fi +\ifdim\@tempdima>\xP@maxdev +\divide\L@p-8\relax +\divide\U@p-8\relax +{\xP@transformcoor\X@p\Y@p +\xP@transformcoor\L@c\U@c +\xP@transformcoor\R@c\D@c +\xP@transformcoor\X@c\Y@c +\xP@findzero +}\fi +\xP@offsetokif +\advance\xP@ti.1pt +\repeat +\expandafter}\xP@afteroffsetok +} +\newcommand*\xP@afteroffsetok{} +\newcommand*\xP@offsetokif{} +\newcommand*\xP@transformcoor[2]{\advance#1\L@p +\advance#2\U@p +\@tempdima\dimexpr#1*\d@X/\@tempdimb+#2*\d@Y/\@tempdimb\relax +#2\dimexpr#2*\d@X/\@tempdimb-#1*\d@Y/\@tempdimb\relax +#1\@tempdima +} +\newcommand*\xP@findzero{\xP@setleftvalue{.05}\xP@setrightvalue{.05}\ifdim\xP@valB<\z@\xP@reversecoeff\fi +\ifdim\xP@valA>\z@ +\@tempswatrue +\@for\@tempa:={.1,.15,.2,.25,.35,.5,1.1}\do{\if@tempswa +\xP@setleftvalue\@tempa +\ifdim\xP@valA<\z@\@tempswafalse\fi +\if@tempswa +\xP@setrightvalue\@tempa +\ifdim\xP@valB<\z@ +\@tempswafalse +\xP@reversecoeff +\fi +\fi +\fi +}\if@tempswa +\L@p\xP@ti +\xP@valA\xP@bezierpoly\X@p\L@c\R@c\X@c\L@p +\ifdim\xP@valA<\z@ +\xP@setrightvalue{.05}\else +\U@p\L@p +\xP@valB\xP@valA +\fi +\fi +\fi +\loop +\ifnum\numexpr\U@p-\L@p\relax>\@ne +\xP@ti\dimexpr(\L@p+\U@p)/2\relax +\xP@devA\xP@bezierpoly\X@p\L@c\R@c\X@c\xP@ti +\ifdim\xP@devA>\z@ +\U@p\xP@ti +\xP@valB\xP@devA +\else +\L@p\xP@ti +\xP@valA\xP@devA +\fi +\repeat +\xP@ifabsless\xP@valB\xP@valA +\L@p\U@p +\xP@valA\xP@valB +\fi +\xP@valB\dimexpr\xP@bezierpoly\Y@p\U@c\D@c\Y@c\L@p+8\xP@off\relax +\xP@abs\xP@valA +\xP@abs\xP@valB +\ifdim\dimexpr\xP@valA+\xP@valB\relax>\xP@maxdev\relax +\xP@failed +\fi +} +\newcommand*\xP@failed{\global\let\xP@offsetokif\iffalse +\gdef\xP@afteroffsetok{\xP@offsetokfalse}} +\newcommand*\xP@reversecoeff{\multiply\X@p\m@ne +\multiply\L@c\m@ne +\multiply\R@c\m@ne +\multiply\X@c\m@ne +\multiply\xP@valA\m@ne +\multiply\xP@valB\m@ne +} +\newcommand*\xP@setleftvalue[1]{\L@p\dimexpr\xP@ti-#1\p@\relax +\ifdim\L@p<-.1pt\L@p-.1pt\fi +\xP@valA\xP@bezierpoly\X@p\L@c\R@c\X@c\L@p +} +\newcommand*\xP@setrightvalue[1]{\U@p\dimexpr\xP@ti+#1\p@\relax +\ifdim\U@p>2.1\p@\U@p2.1\p@\fi +\xP@valB\xP@bezierpoly\X@p\L@c\R@c\X@c\U@p +} +\newcommand*\xP@splinedbldashed{\xP@checkspline\xP@splinemultdashed\xP@doublestroke} +\newcommand*\xP@splinetrbldashed{\xP@checkspline\xP@splinemultdashed\xP@trblstroke} +\newcommand*\xP@splinemultdashed[1]{\xP@testcont\xP@dashmacro +\@tempcnta +\ifxP@splinecont +\numexpr2*((\@tempdimb-\xydashl@/3)/(2*\xydashl@))\relax +\else +\numexpr2*((\@tempdimb+\xydashl@)/(2*\xydashl@))-1\relax +\fi +\ifnum\@tempcnta>\@ne +\xP@splinemultdashed@#1\else +\ifnum\@tempcnta=\@ne +\xP@splinemultsolid#1 +\else +\xP@savec +\fi +\fi +\global\let\xP@lastpattern\xP@dashmacro +} +\newcommand*\xP@splinemultdashed@[1]{{\xP@inibigdim +\@tempdima\dimexpr\@tempdimb/\@tempcnta\relax +\xP@temppar\z@ +\toks@{}\xP@savec +\ifodd\@tempcnta +\else +\xP@slide +\fi +\@tempcnta\z@ +\loop +\advance\@tempcnta\@ne +\xP@append\toks@{\ifodd\@tempcnta\noexpand\xP@paintdash\fi +{\the\xP@temppar}}\xP@oldpar\xP@temppar +\xP@slide +\ifdim\xP@temppar<\xP@bigdim +\repeat +\xP@lastpar +\ifodd\@tempcnta +\xP@temppar +\xP@append\toks@{{\the\xP@temppar}}\else +\xP@oldpar +\fi +\@temptokena{}\xP@setsolidpat +\global\let\xP@lastpattern\xP@dashmacro +\@for\@tempa:={#1}\do{\the\toks@}\xP@stroke{\the\@temptokena}}} +\newcommand*\xP@paintdash[2]{\xP@paintsolid{\dimexpr#1*\xP@bigdim/\xP@lastpar\relax}{\dimexpr#2*\xP@bigdim/\xP@lastpar\relax}} +\xP@hook{curve}{splinedbldotted@} +\newcommand*\xP@splinedbldotted@{\let\xP@normalmult\@ne +\xP@checkspline\xP@splinemultdotted\xP@doublestroke} +\newcommand*\xP@splinetrbldotted{\let\xP@normalmult\tw@ +\xP@checkspline\xP@splinemultdotted\xP@trblstroke} +\newcommand*\xP@multidottedpat{\def\xP@pattern{0 J [\xP@coor\xP@preclw{\xydashh@-\xP@preclw}]0 d}\global\let\xP@lastpattern\xP@dotmacro +} +\@ifdefinable\xP@normalmult\relax +\newcommand\xP@splinemultdotted[1]{{\xP@inibigdim +\xP@temppar\z@ +\xP@testcont\xP@dotmacro +\ifxP@splinecont +\@tempdimc\dimexpr\@tempdimb/(\@tempdimb/131072+1)\relax +\@tempdima\dimexpr\@tempdimc-\xP@preclw/2\relax +\xP@slide +\@tempdima\@tempdimc +\else +\@tempdima\dimexpr\xP@preclw/2\relax +\xP@slide +\@tempdima\dimexpr\@tempdimb-\xP@preclw\relax +\ifdim\@tempdima<\z@\@tempdima\z@\fi +\@tempdima\dimexpr\@tempdima/(\@tempdima/131072+1)\relax +\fi +\xP@savec +\toks@{}\ifdim\xP@temppar<\xP@bigdim +\loop +\xP@append\toks@{\noexpand\xP@paintdot{\the\xP@temppar}}\xP@oldpar\xP@temppar +\xP@slide +\ifdim\xP@temppar<\xP@bigdim +\repeat +\xP@velocity\xP@bigdim\xP@tempvel +\ifdim +\ifdim\xP@preclw<\xP@tempvel +\dimexpr2\xP@bigdim-\xP@oldpar-\xP@preclw*\xP@bigdim/\xP@tempvel\relax +\else +-\maxdimen +\fi<\xP@temppar +\xP@temppar\xP@oldpar +\else +\xP@append\toks@{\noexpand\xP@paintdot{\the\xP@temppar}}\fi +\@tempdima\dimexpr\xP@preclw/2\relax +\xP@slide +\xP@lastpar\xP@temppar +\@temptokena{}\the\toks@ +\xP@multidottedpat +\xP@stroke{\the\@temptokena}\else +\global\let\xP@lastpattern\@empty +\fi +}} +\newcommand*\xP@slide{{\xP@slide@ +\global\dimen@i\xP@temppar +}\xP@temppar\dimen@i +} +\newcommand*\xP@slide@{\xP@velocity\xP@temppar\xP@tempvel +\@tempdimc\dimexpr\xP@bigdim*\@tempdima/\@tempdimb\relax +\count@\z@ +\@tempswatrue +\loop +\xP@velocity{\xP@temppar+\@tempdimc}\xP@tempvel@ +\ifdim\dimexpr\@tempdima*4/13\relax>\xP@tempvel@ +\@tempswafalse +\else +\xP@parinc\dimexpr\@tempdima*\xP@bigdim/\xP@tempvel@ +-(\xP@tempvel+\xP@tempvel@)/2*\@tempdimc/\xP@tempvel@\relax +\advance\@tempdimc\xP@parinc +\ifdim\@tempdimc>.12\xP@bigdim +\@tempswafalse +\else +\ifdim\xP@parinc=\z@ +\@tempswafalse +\else +\ifnum\count@=9\relax +\@tempswafalse +\fi +\fi +\fi +\fi +\if@tempswa +\advance\count@\@ne +\repeat +\ifdim\xP@temppar<5461pt +\ifdim\@tempdimc>.1\xP@bigdim +\@tempswatrue +\fi +\fi +\if@tempswa +{\dimen5\xP@temppar +\advance\xP@temppar.1\xP@bigdim +\ifdim\xP@temppar>5461pt\xP@temppar5461pt\fi +\dimen7\xP@temppar +\xP@shaveprec{\dimen5}{\dimen7}\xP@bezierlength +\global\dimen@i\dimexpr\@tempdima-\@tempdimb\relax +\global\dimen3\xP@temppar +}\@tempdima\dimen@i +\xP@temppar\dimen3\relax +\expandafter\xP@slide@ +\else +\advance\xP@temppar\@tempdimc +\fi +} +\newcommand*\xP@paintdot[1]{\@tempdima\dimexpr#1*\xP@bigdim/\xP@lastpar\relax +\xP@tangent +\xP@posX\dimexpr\xP@precbezierpoly\X@p\L@c\R@c\X@c\@tempdima/8\relax +\xP@posY\dimexpr\xP@precbezierpoly\Y@p\U@c\D@c\Y@c\@tempdima/8\relax +\@tempdima\dimexpr(\xydashh@+\xP@preclw/\xP@normalmult)/2\relax +\L@p\dimexpr\d@Y*\@tempdima/\@tempdimb\relax +\U@p\dimexpr-\d@X*\@tempdima/\@tempdimb\relax +\xP@append\@temptokena{\xP@coor{\xP@posX+\L@p*\xP@normalmult}{\xP@posY+\U@p*\xP@normalmult}m \xP@coor{\xP@posX-\L@p*(\xP@normalmult+\@ne)}{\xP@posY-\U@p*(\xP@normalmult+\@ne)}l }} +\newcommand*\xP@splinesquiggled{\xP@checkspline\xP@splinesquiggled@\z@} +\newcommand*\xP@splinedblsquiggled{\xP@checkspline\xP@splinesquiggled@\xP@doublestroke} +\newcommand*\xP@splinetrblsquiggled{\xP@checkspline\xP@splinesquiggled@\xP@trblstroke} +\newcommand*\xP@splinesquiggled@[1]{{\xP@inibigdim +\xP@testcont\xP@oddsquigglemacro +\ifxP@splinecont +\def\xP@squigsign{-}\else +\let\xP@squigsign\@empty +\fi +\xP@savec +\@tempcnta=\numexpr\@tempdimb/\xybsqll@\relax +\ifnum\@tempcnta<\tw@\@tempcnta\tw@\fi +\multiply\@tempcnta\tw@ +\@tempdima\dimexpr\@tempdimb/\@tempcnta\relax +\xP@squiglen\@tempdima +\xP@temppar\z@ +\toks@{}\@tempcnta\z@ +\loop +\advance\@tempcnta\@ne +\xP@append\toks@{\noexpand\xP@paintsquiggle{\the\xP@temppar}}\xP@oldpar\xP@temppar +\xP@slide +\ifdim\xP@temppar<\xP@bigdim +\repeat +\xP@lastpar +\ifodd\@tempcnta +\xP@oldpar +\advance\@tempcnta\m@ne +\else +\xP@temppar +\xP@append\toks@{\noexpand\xP@paintsquiggle{\the\xP@temppar}}\fi +\@temptokena{}\xP@setsolidpat +\global\expandafter\let\expandafter\xP@lastpattern +\ifodd\numexpr\@tempcnta/2\if\xP@squigsign-+1\fi\relax +\xP@oddsquigglemacro +\else +\xP@evensquigglemacro +\fi +\@for\@tempa:={#1}\do{\let\xP@dosquiggle\xP@dosquiggle@ +\count@\z@ +\the\toks@ +}\xP@stroke{\the\@temptokena}}} +\newcommand*\xP@paintsquiggle[1]{\xP@squigglevectors{#1}\xP@dosquiggle +\ifnum\count@=\thr@@\relax\count@\z@\else\advance\count@\@ne\fi +} +\newcommand*\xP@squigglevectors[1]{\@tempdima\dimexpr#1*\xP@bigdim/\xP@lastpar\relax +\xP@tangent +\xP@posX\dimexpr\xP@precbezierpoly\X@p\L@c\R@c\X@c\@tempdima/8-\d@Y*(\@tempa)/\@tempdimb\relax +\xP@posY\dimexpr\xP@precbezierpoly\Y@p\U@c\D@c\Y@c\@tempdima/8+\d@X*(\@tempa)/\@tempdimb\relax +\L@p\dimexpr\d@X*\xP@squiglen/\@tempdimb\relax +\U@p\dimexpr\d@Y*\xP@squiglen/\@tempdimb\relax +\R@p\dimexpr\L@p*543339720/1311738121\relax +\D@p\dimexpr\U@p*543339720/1311738121\relax +\X@min\dimexpr\L@p*362911648/967576667\relax +\Y@min\dimexpr\U@p*362911648/967576667\relax +\X@max\dimexpr(\L@p+\xP@squigsign\U@p)*173517671/654249180\relax +\Y@max\dimexpr(\L@p-\xP@squigsign\U@p)*173517671/654249180\relax +} +\@ifdefinable\xP@dosquiggle@\relax +\newcommand*\xP@dosquiggle@{\edef\next@{\xP@coor{\xP@posX}{\xP@posY}m +\xP@coor{\xP@posX+\Y@max}{\xP@posY+\xP@squigsign\X@max}}\let\xP@dosquiggle\xP@dosquiggle@@ +} +\newcommand*\xP@dosquiggle@@{\xP@append\@temptokena{\next@\expandafter\xP@coor +\ifcase\count@ +{\xP@posX-\Y@max}{\xP@posY-\xP@squigsign\X@max}\xP@coor\xP@posX\xP@posY +\or +{\xP@posX-\xP@squigsign\D@p-\X@min}{\xP@posY+\xP@squigsign\R@p-\Y@min}\xP@coor{\xP@posX-\xP@squigsign\D@p}{\xP@posY+\xP@squigsign\R@p}\or +{\xP@posX-\X@max}{\xP@posY+\xP@squigsign\Y@max}\xP@coor\xP@posX\xP@posY +\or +{\xP@posX+\xP@squigsign\D@p-\X@min}{\xP@posY-\xP@squigsign\R@p-\Y@min}\xP@coor{\xP@posX+\xP@squigsign\D@p}{\xP@posY-\xP@squigsign\R@p}\fi c }\edef\next@{\expandafter\xP@coor +\ifcase\count@ +{\xP@posX+\Y@max}{\xP@posY+\xP@squigsign\X@max}\or +{\xP@posX-\xP@squigsign\D@p+\X@min}{\xP@posY+\xP@squigsign\R@p+\Y@min}\or +{\xP@posX+\X@max}{\xP@posY-\xP@squigsign\Y@max}\or +{\xP@posX+\xP@squigsign\D@p+\X@min}{\xP@posY-\xP@squigsign\R@p+\Y@min}\fi +}} +\newcommand*\xP@splinebrokensquiggled{\xP@checkspline\xP@splinebrokensquiggled@\z@} +\newcommand*\xP@splinebrokendblsquiggled{\xP@checkspline\xP@splinebrokensquiggled@\xP@doublestroke} +\newcommand*\xP@splinebrokentrblsquiggled{\xP@checkspline\xP@splinebrokensquiggled@\xP@trblstroke} +\newcommand*\xP@splinebrokensquiggled@[1]{{\xP@inibigdim +\xP@testcont\xP@brokensquigglemacro +\ifxP@splinecont +\let\xP@squigsign\@firstoftwo +\else +\let\xP@squigsign\@secondoftwo +\fi +\xP@savec +\@tempcnta\numexpr(\@tempdimb\xP@squigsign{}{+2*\xybsqll@})/(4*\xybsqll@)\relax +\ifnum\@tempcnta<\@ne\@tempcnta\@ne\fi +\@tempdima\dimexpr\@tempdimb/(8*\@tempcnta\xP@squigsign{}{-4})\relax +\xP@squiglen\@tempdima +\xP@temppar\z@ +\xP@squigsign{\xP@slide\xP@slide\xP@slide\xP@slide}{}\count@\z@ +\toks@{}\loop +\xP@append\toks@{\noexpand\xP@paintbrokensquiggle{\the\xP@temppar}}\xP@slide +\xP@append\toks@{{\the\xP@temppar}}\xP@slide +\xP@append\toks@{{\the\xP@temppar}}\xP@slide +\xP@append\toks@{{\the\xP@temppar}}\xP@slide +\xP@append\toks@{{\the\xP@temppar}}\xP@lastpar\xP@temppar +\advance\count@\@ne +\ifnum\count@<\@tempcnta +\xP@slide +\xP@slide +\xP@slide +\xP@slide +\repeat +\@temptokena{}\xP@setsolidpat +\global\let\xP@lastpattern\xP@brokensquigglemacro +\let\xP@squigsign\@empty +\@for\@tempa:={#1}\do{\the\toks@}\xP@stroke{\the\@temptokena}}} +\newcommand*\xP@paintbrokensquiggle[5]{\xP@squigglevectors{#1}\xP@append\@temptokena{\xP@coor\xP@posX\xP@posY m \xP@coor{\xP@posX+\Y@max}{\xP@posY+\X@max}}\xP@squigglevectors{#2}\xP@append\@temptokena{\xP@coor{\xP@posX-\D@p-\X@min}{\xP@posY+\R@p-\Y@min}\xP@coor{\xP@posX-\D@p}{\xP@posY+\R@p}c \xP@coor{\xP@posX-\D@p+\X@min}{\xP@posY+\R@p+\Y@min}}\xP@squigglevectors{#3}\xP@append\@temptokena{\xP@coor{\xP@posX-\X@max}{\xP@posY+\Y@max}\xP@coor\xP@posX\xP@posY c \xP@coor{\xP@posX+\X@max}{\xP@posY-\Y@max}}\xP@squigglevectors{#4}\xP@append\@temptokena{\xP@coor{\xP@posX+\D@p-\X@min}{\xP@posY-\R@p-\Y@min}\xP@coor{\xP@posX+\D@p}{\xP@posY-\R@p}c \xP@coor{\xP@posX+\D@p+\X@min}{\xP@posY-\R@p+\Y@min}}\xP@squigglevectors{#5}\xP@append\@temptokena{\xP@coor{\xP@posX-\Y@max}{\xP@posY-\X@max}\xP@coor\xP@posX\xP@posY c }} +\xyendinput + + + + + +%% +%% End of file `xypdf-cu.tex'. diff --git a/macros/generic/diagrams/xypic/texinputs/xypdf-fr.tex b/macros/generic/diagrams/xypic/texinputs/xypdf-fr.tex new file mode 100644 index 0000000000..4138294c1a --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xypdf-fr.tex @@ -0,0 +1,438 @@ +%% +%% This is file `xypdf-fr.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% xypdf.dtx (with options: `frame') +%% +%% The xypdf package for TeX and LaTeX +%% Copyright (c) 2010 by Daniel Müllner (M\"ullner) +%% +%% -------------------------------------------------------------------------- +%% +%% This program 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. +%% +%% This program 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. +%% +%% The GNU General Public License is available at +%% . +%% +%% -------------------------------------------------------------------------- +%% +%% This file is part of the xypdf package for TeX and LaTeX2e. The xypdf +%% package may be distributed and/or modified under the conditions 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 distribution consists of the following files: +%% +%% xypdf.dtx - Documented source code +%% xypdf.ins - Installation script +%% xypdf.pdf - Documentation (generated from xypdf.dtx) +%% +%% The files with the TeX code are generated by the following command: +%% +%% latex xypdf.ins +%% +%% This generates the files xypdf.tex, xypdf-co.tex, xypdf-cu.tex, +%% xypdf-fr.tex, xypdf-li.tex and xypdf-ro.tex. +%% +%% -------------------------------------------------------------------------- +%% +%% The xypdf package improves the output quality of the Xy-pic package when +%% PDF documents are generated. It produces generic PDF code for graphical +%% elements like lines, curves and circles instead of approximating these +%% elements with glyphs in special fonts as the original Xy-pic package does. +%% The xypdf package works with both TeX and LaTeX in the occurrences of +%% pdfTeX, XeTeX and eTeX with dvipdfm(x) to generate PDF files. It is being +%% integrated and distributed together with Xy-pic, starting with Xy-pic +%% version 3.8. +%% +%% The copyright for the xypdf package is by its author, Daniel Müllner +%% (Muellner, M\"ullner). +%% +\xyrequire{curve}\xycatcodes +\expandafter\let\csname xypdf-fr@loaded\endcsname\@empty +\newcommand*\xP@framedrop[1]{\expandafter\frmDrop@\expandafter{\expandafter\def\expandafter\prevEdge@@\expandafter{\prevEdge@@}\setboxz@h{#1\frmradius@@}\styledboxz@}} +\xP@hook{frame}{frm{-}} +\expandafter\newcommand\expandafter*\csname xP@frm{-}\endcsname{\xP@framedrop\xP@solidframe +} +\newcommand*\xP@solidframe[1]{\R@#1\relax +\xP@setsolidpat +\let\xP@fillorstroke\xP@stroke +\xP@frameifnotzero\xP@oval +} +\newcommand*\xP@ifzerosize[2]{\@tempswafalse +\ifdim\L@c=\z@\ifdim\R@c=\z@\ifdim\U@c=\z@\ifdim\D@c=\z@ +\@tempswatrue +\fi\fi\fi\fi +\if@tempswa#1\else#2\fi +} +\newcommand*\xP@frameifnotzero[1]{\setboxz@h{\hskip\X@c\raise\Y@c\hbox{\xP@ifzerosize{}{#1}}}\wd\z@\z@\ht\z@\z@\dp\z@\z@ +\boxz@ +} +\newcommand*\xP@oval{\hskip-\L@c +\lower\D@c\hbox{\dimen@\dimexpr\L@c+\R@c\relax +\dimen@ii\dimexpr\U@c+\D@c\relax +\R@\xP@min\R@{.5\dimen@}\R@\xP@min\R@{.5\dimen@ii}\@tempdimb\dimexpr2\dimen@+2\dimen@ii-\R@*696621973/405764219\relax +\ifdim\R@=\z@ +\xP@fillorstroke{0 0 \xP@coor\dimen@\dimen@ii re}\else +\def\@tempa{*119763188/267309217}\xP@fillorstroke{\xP@dim\R@0 m \xP@dim{\R@\@tempa}0 0 \xP@dim{\R@\@tempa}0 \xP@dim\R@ c \ifdim2\R@=\dimen@ii\else +0 \xP@dim{\dimen@ii-\R@}l \fi +0 \xP@dim{\dimen@ii-\R@\@tempa}\xP@coor{\R@\@tempa}\dimen@ii +\xP@coor\R@\dimen@ii c \ifdim2\R@=\dimen@\else +\xP@coor{\dimen@-\R@}\dimen@ii l \fi +\xP@coor{\dimen@-\R@\@tempa}\dimen@ii +\xP@coor\dimen@{\dimen@ii-\R@\@tempa}\xP@coor\dimen@{\dimen@ii-\R@} c \ifdim2\R@=\dimen@ii\else +\xP@coor\dimen@\R@ l \fi +\xP@coor\dimen@{\R@\@tempa}\xP@dim{\dimen@-\R@\@tempa}0 \xP@dim{\dimen@-\R@}0 c h}\fi +}} +\xP@hook{frame}{frm[o]{-}} +\expandafter\newcommand\expandafter*\csname xP@frm[o]{-}\endcsname{\xP@framedrop{\xP@ellipseframe\xP@setsolidpat}} +\newcommand*\xP@ellipseframe[2]{\xP@getradii{#2}\xP@ifzerosize{}{\def\xP@fillorstroke{#1\xP@stroke}\setboxz@h{\hskip\X@c\raise\Y@c\hbox{\xP@framedellipse}}\wd\z@\z@\ht\z@\z@\dp\z@\z@ +\boxz@ +}} +\xP@hook{frame}{frm{.}} +\expandafter\newcommand\expandafter*\csname xP@frm{.}\endcsname{\xP@framedrop\xP@rectframedotted +} +\newcommand*\xP@rectframedotted[1]{\R@#1\relax +\xP@frameifnotzero{\ifdim\R@=\z@ +\xP@dottedrect +\else +\xP@dottedoval +\fi +}} +\newcommand*\xP@dottedrect{\hskip-\L@c +\lower\D@c\hbox{\dimen@ii\dimexpr\U@c+\D@c\relax +\@tempdimc\dimexpr\xP@preclw/-2\relax +\@tempdimb\dimexpr\L@c+\R@c+\xP@preclw\relax +\xP@contfalse +\xP@setdottedpat +\dimen@\dimexpr\@tempdimb+\@tempdima/2+\@tempdimc\relax +\xP@stroke{\xP@dim\@tempdimc0 m \xP@dim\dimen@0 l \xP@coor\@tempdimc\dimen@ii m \xP@coor\dimen@\dimen@ii l}\let\xP@testcont\xP@alwaysconttrue +\@tempdimb\dimen@ii +\xP@setdottedpat +\dimen@\dimexpr\L@c+\R@c\relax +\advance\dimen@ii\dimexpr\@tempdimc-\@tempdima/2\relax +\multiply\@tempdimc\m@ne +\xP@stroke{0 \xP@dim\@tempdimc m 0 \xP@dim\dimen@ii l \xP@coor\dimen@\@tempdimc m \xP@coor\dimen@\dimen@ii l}}} +\newcommand*\xP@dottedoval{\def\xP@fillorstroke{\xP@setcldottedpat\xP@stroke}\xP@oval +} +\xP@hook{frame}{frm[o]{.}} +\expandafter\newcommand\expandafter*\csname xP@frm[o]{.}\endcsname{\xP@framedrop{\xP@ellipseframe\xP@setcldottedpat}} +\xP@hook{frame}{frm{--}} +\expandafter\newcommand\expandafter*\csname xP@frm{--}\endcsname{\xP@framedrop\xP@rectframedashed +} +\newcommand*\xP@rectframedashed[1]{\R@#1\relax +\xP@frameifnotzero{\ifdim\R@=\z@ +\xP@dashedrect +\else +\xP@dashedoval +\fi +}} +\newcommand*\xP@dashedrect{\hskip-\L@c +\lower\D@c\hbox{\dimen@\dimexpr\L@c+\R@c\relax +\dimen@ii\dimexpr\U@c+\D@c\relax +\@tempdimb\dimen@ +\xP@contfalse +\xP@setdashpat +\xP@stroke{0 0 m \xP@dim\dimen@0 l 0 \xP@dim\dimen@ii m \xP@coor\dimen@\dimen@ii l}\@tempdimb\dimen@ii +\xP@setdashpat +\xP@stroke{0 0 m 0 \xP@dim\dimen@ii l \xP@dim\dimen@0 m \xP@coor\dimen@\dimen@ii l}}} +\newcommand*\xP@dashedoval{\def\xP@fillorstroke{\xP@setcldashpat\xP@stroke}\xP@oval +} +\xP@hook{frame}{frm[o]{--}} +\expandafter\newcommand\expandafter*\csname xP@frm[o]{--}\endcsname{\xP@framedrop{\xP@ellipseframe\xP@setcldashpat}} +\xP@hook{frame}{frm{,}} +\expandafter\newcommand\expandafter*\csname xP@frm{,}\endcsname{\xP@framedrop\xP@frameshadow +} +\newcommand*\xP@frameshadow[1]{\R@#1\relax +\ifdim\R@=\z@\R@1.2pt\relax\fi +\xP@frameifnotzero\xP@shadow +} +\newcommand*\xP@shadow{\hskip\dimexpr\R@c+\R@/2\relax +\lower\dimexpr\D@c+\R@/2\relax\hbox{\def\xP@pattern{0 J 0 j []0 d}\edef\xP@lw{\xP@dim\R@}\xP@stroke{\xP@dim{\R@/2-\L@c-\R@c} 0 m 0 0 l 0 \xP@dim{\D@c+\U@c-\R@/2}l}}} +\xP@hook{frame}{frm{o-}} +\expandafter\newcommand\expandafter*\csname xP@frm{o-}\endcsname{\xP@framedrop\xP@roundedrectframe +} +\newcommand*\xP@roundedrectframe[1]{\R@#1\relax +\ifdim\R@=\z@\R@\xydashl@\relax\fi +\xP@frameifnotzero\xP@roundedrectangle +} +\newcommand*\xP@roundedrectangle{\dimen@\dimexpr\L@c+\R@c\relax +\dimen@ii\dimexpr\U@c+\D@c\relax +\R@\xP@min\R@{.5\dimen@}\R@\xP@min\R@{.5\dimen@ii}\hskip-\L@c +\lower\D@c\hbox{\@tempdimb\dimexpr2\dimen@+2\dimen@ii-\R@*696621973/405764219\relax +\def\@tempa{*119763188/267309217}\xP@setsolidpat +\xP@stroke{\xP@dim\R@0 m \xP@dim{\R@\@tempa}0 0 \xP@dim{\R@\@tempa}0 \xP@dim\R@ c \ifdim2\R@=\dimen@ii\else +0 \xP@dim{\dimen@ii-\R@}m \fi +0 \xP@dim{\dimen@ii-\R@\@tempa}\xP@coor{\R@\@tempa}\dimen@ii +\xP@coor\R@\dimen@ii c \ifdim2\R@=\dimen@\else +\xP@coor{\dimen@-\R@}\dimen@ii m \fi +\xP@coor{\dimen@-\R@\@tempa}\dimen@ii +\xP@coor\dimen@{\dimen@ii-\R@\@tempa}\xP@coor\dimen@{\dimen@ii-\R@} c \ifdim2\R@=\dimen@ii\else +\xP@coor\dimen@\R@ m \fi +\xP@coor\dimen@{\R@\@tempa}\xP@dim{\dimen@-\R@\@tempa}0 \xP@dim{\dimen@-\R@}0 c}\xP@contfalse +\@tempdimb\dimexpr\L@c+\R@c-2\R@\relax +\ifdim\@tempdimb<\z@\@tempdimb\z@\fi +\xP@setdashpat +\ifdim\@tempdima>\z@ +\dimen@\dimexpr\@tempdimb+\R@-\@tempdima/2\relax +\dimen@ii\dimexpr\U@c+\D@c\relax +\xP@stroke{\xP@dim{\R@+\@tempdima}0 m \xP@dim\dimen@ 0 l \xP@coor{\R@+\@tempdima}\dimen@ii m \xP@coor\dimen@\dimen@ii l}\fi +\@tempdimb\dimexpr\U@c+\D@c-2\R@\relax +\ifdim\@tempdimb<\z@\@tempdimb\z@\fi +\xP@setdashpat +\ifdim\@tempdima>\z@ +\dimen@\dimexpr\L@c+\R@c\relax +\dimen@ii\dimexpr\@tempdimb+\R@-\@tempdima/2\relax +\xP@stroke{0 \xP@dim{\R@+\@tempdima}m 0 \xP@dim\dimen@ii l \xP@coor\dimen@{\R@+\@tempdima}m \xP@coor\dimen@\dimen@ii l}\fi +}} +\xP@hook{frame}{frm{=}} +\expandafter\newcommand\expandafter*\csname xP@frm{=}\endcsname{\xP@framedrop\xP@dsframe +} +\newcommand*\xP@dsframe[1]{\R@#1\relax +\xP@frameifnotzero\xP@dsoval +} +\newcommand*\xP@dsoval{\dimen@\dimexpr(\L@c+\R@c)/2\relax +\ifdim\dimen@<\xydashh@\dimen@\xydashh@\fi +\dimen@ii\dimexpr(\U@c+\D@c)/2\relax +\ifdim\dimen@ii<\xydashh@\dimen@ii\xydashh@\fi +\R@\xP@min\R@\dimen@ +\R@\xP@min\R@\dimen@ii +\xP@setsolidpat +\let\xP@fillorstroke\xP@stroke +\xP@oval +\hskip\L@c +\advance\L@c-\xydashh@ +\advance\R@c-\xydashh@ +\advance\U@c-\xydashh@ +\advance\D@c-\xydashh@ +\advance\R@-\xydashh@ +\ifdim\R@<\z@\R@\z@\fi +\xP@oval +} +\xP@hook{frame}{frm[o]{=}} +\expandafter\newcommand\expandafter*\csname xP@frm[o]{=}\endcsname{\xP@framedrop\xP@dsellframe +} +\xP@hook{frame}{frm{ee}} +\expandafter\newcommand\expandafter*\csname xP@frm{ee}\endcsname{\xP@framedrop\xP@dsellframe +} +\newcommand*\xP@dsellframe[1]{\xP@getradii{#1}\xP@frameifnotzero\xP@dsellipse +} +\@ifdefinable\xP@temppath\relax +\newcommand*\xP@dsellipse{\hskip\dimexpr(\R@c-\L@c)/2\relax +\lower\dimexpr(\D@c-\U@c)/2\relax +\hbox{\advance\A@-\xydashh@ +\advance\B@-\xydashh@ +\ifdim\A@<\z@\A@\z@\fi +\ifdim\B@<\z@\B@\z@\fi +\def\xP@fillorstroke{\edef\xP@temppath}\xP@ellipse@ +\xP@inibigdim +\let\@tempa\xydashh@ +\xP@offsetellipse +\xP@setsolidpat +\xP@stroke{\xP@temppath\space\the\@temptokena}}} +\newcommand*\xP@offsetellipse{\xP@movetotrue +\@temptokena{}\xP@offsetelliptseg\A@\z@\A@{\B@*173517671/654249180}{\A@*554561898/619869377}{\B@*34221476/65864945}{\A@*543339720/768398401}{\B@*543339720/768398401}\xP@offsetelliptseg{\A@*543339720/768398401}{\B@*543339720/768398401}{\A@*34221476/65864945}{\B@*554561898/619869377}{\A@*173517671/654249180}\B@\z@\B@ +\xP@mirrorpath +} +\newcommand*\xP@mirrorpath{\edef\@tempa{\the\@temptokena\relax\space\space\space\space}\let\@tempb\@empty +\let\@tempc\@empty +\expandafter\xP@mirrorpath@\@tempa +} +\@ifdefinable\xP@mirrorpath@\relax +\def\xP@mirrorpath@#1 #2 #3 #4 #5 #6 #7 {\ifx\relax#4\xP@append\@temptokena{\@tempb\xP@minus#1 \xP@minus#2 #3 \@tempc h}\else +\edef\@tempb{\xP@minus#6 #7 \xP@minus#4 #5 \xP@minus#1 #2 c \@tempb\if#3m\else\xP@minus#1 \xP@minus#2 #3 \fi\xP@minus#4 \xP@minus#5 \xP@minus#6 \xP@minus#7 }\edef\@tempc{#6 \xP@minus#7 #4 \xP@minus#5 #1 \xP@minus#2 c \@tempc}\expandafter\xP@mirrorpath@ +\fi +} +\@ifdefinable\xP@minus\relax +\def\xP@minus#1 {\if-#1 \else\ifdim\dimexpr#1pt\relax=\z@\else-\fi#1 \fi} +\newcommand*\xP@insertbefore[2]{{\edef\@tempa{#1{#2\the#1}}\expandafter}\@tempa} +\newcommand*\xP@offsetelliptseg[8]{\X@p\dimexpr#1\relax +\Y@p\dimexpr#2\relax +\L@c\dimexpr#3\relax +\U@c\dimexpr#4\relax +\R@c\dimexpr#5\relax +\D@c\dimexpr#6\relax +\X@c\dimexpr#7\relax +\Y@c\dimexpr#8\relax +\xP@savepts +\xP@a\z@ +\xP@c\xP@bigdim +\xP@paintsolid@ +} +\newcommand*\xP@getradii[1]{\edef\@tempa{#1}\expandafter\xP@getradii@\@tempa,\maxdimen,@} +\@ifdefinable\xP@getradii@\relax +\def\xP@getradii@#1,#2,#3@{\A@#1\relax +\B@#2\relax +\ifdim\B@=\maxdimen +\A@\dimexpr(\L@c+\R@c)/2\relax +\B@\dimexpr(\U@c+\D@c)/2\relax +\fi +} +\xP@hook{frame}{frm{o}} +\expandafter\newcommand\expandafter*\csname xP@frm{o}\endcsname{\xP@framedrop{\xP@circleframe\xP@setsolidpat}} +\xP@hook{frame}{frm{-o}} +\expandafter\newcommand\expandafter*\csname xP@frm{-o}\endcsname{\xP@framedrop{\xP@circleframe\xP@setcldashpat}} +\xP@hook{frame}{frm{.o}} +\expandafter\newcommand\expandafter*\csname xP@frm{.o}\endcsname{\xP@framedrop{\xP@circleframe\xP@setcldottedpat}} +\newcommand*\xP@circleframe[2]{\R@#2\relax +\def\xP@fillorstroke{#1\xP@stroke}\xP@ifzerosize{\ifdim\R@>\z@ +\xP@circleframe@ +\fi +}{\ifdim\R@=\z@ +\A@\dimexpr(\L@c+\R@c)/2\relax +\B@\dimexpr(\U@c+\D@c)/2\relax +\R@\xP@max\A@\B@ +\fi +\xP@circleframe@ +}} +\newcommand*\xP@circleframe@{\setboxz@h{\hskip\X@c\raise\Y@c\hbox{\xP@circle}}\wd\z@\z@\ht\z@\z@\dp\z@\z@ +\boxz@ +} +\xP@hook{frame}{frm{e}} +\expandafter\newcommand\expandafter*\csname xP@frm{e}\endcsname{\xP@framedrop{\xP@ellipseframe\xP@setsolidpat}} +\xP@hook{frame}{frm{-e}} +\expandafter\newcommand\expandafter*\csname xP@frm{-e}\endcsname{\xP@framedrop{\xP@ellipseframe\xP@setcldashpat}} +\xP@hook{frame}{frm{.e}} +\expandafter\newcommand\expandafter*\csname xP@frm{.e}\endcsname{\xP@framedrop{\xP@ellipseframe\xP@setcldottedpat}} +\xP@hook{frame}{frm2{.e}} +\expandafter\newcommand\expandafter*\csname xP@frm2{.e}\endcsname{\xP@framedrop\xP@dsdottedellframe +} +\newcommand*\xP@dsdottedellframe[1]{\xP@getradii{#1}\xP@frameifnotzero\xP@dsdottedellipse +} +\newcommand*\xP@dsdottedellipse{\hskip\dimexpr(\R@c-\L@c)/2\relax +\lower\dimexpr(\D@c-\U@c)/2\relax +\hbox{\@tempdima.5\xydashh@\relax +\advance\A@-\@tempdima +\advance\B@-\@tempdima +\ifdim\A@<\@tempdima\A@\@tempdima\fi +\ifdim\B@<\@tempdima\B@\@tempdima\fi +\let\xP@normalmult\@ne +\xP@specialellipse{\xP@splinemultdotted\xP@doublestroke}}} +\newcommand*\xP@specialellipse[1]{\def\@tempa{*147546029/267309217}\X@p\A@ +\Y@p\z@ +\L@c\A@ +\U@c\dimexpr\B@\@tempa\relax +\R@c\dimexpr\A@\@tempa\relax +\D@c\B@ +\X@c\z@ +\Y@c\B@ +\xP@bezierlength +\let\xP@testcont\xP@alwaysconttrue +#1\X@p\z@ +\Y@p\B@ +\L@c-\R@c +\D@c\U@c +\U@c\B@ +\R@c-\A@ +\X@c-\A@ +\Y@c\z@ +#1\X@p-\A@ +\Y@p\z@ +\R@c\L@c +\L@c-\A@ +\U@c-\D@c +\D@c-\B@ +\X@c\z@ +\Y@c-\B@ +#1\X@p\z@ +\Y@p-\B@ +\L@c-\R@c +\D@c\U@c +\U@c-\B@ +\R@c\A@ +\X@c\A@ +\Y@c\z@ +#1} +\newcommand*\xP@alwaysconttrue[1]{\xP@splineconttrue} +\xP@hook{frame}{frm2{-e}} +\expandafter\newcommand\expandafter*\csname xP@frm2{-e}\endcsname{\xP@framedrop\xP@dsdashellframe +} +\newcommand*\xP@dsdashellframe[1]{\xP@getradii{#1}\xP@frameifnotzero\xP@dsdashellipse +} +\newcommand*\xP@dsdashellipse{\hskip\dimexpr(\R@c-\L@c)/2\relax +\lower\dimexpr(\D@c-\U@c)/2\relax +\hbox{\advance\A@-\xydashh@ +\advance\B@-\xydashh@ +\ifdim\A@<\z@\A@\z@\fi +\ifdim\B@<\z@\B@\z@\fi +\xP@specialellipse{\xP@splinemultdashed\xP@elldoublestroke}}} +\newcommand*\xP@elldoublestroke{\z@,\xydashh@} +\newcommand*\xP@fill[1]{\xP@literal{#1 f}} +\newcommand*\xP@fillstroke[1]{\xP@literal{\xP@dim{\xP@preclw/2}w 1 j 0 G #1 b}} +\newcommand*\xP@fillorstroke{} +\xP@hook{frame}{frm{*}} +\expandafter\newcommand\expandafter*\csname xP@frm{*}\endcsname{\xP@framedrop{\let\xP@fillorstroke\xP@fill\xP@framefill}} +\xP@hook{frame}{frm{**}} +\expandafter\newcommand\expandafter*\csname xP@frm{**}\endcsname{\xP@framedrop{\let\xP@fillorstroke\xP@fillstroke\xP@framefill}} +\newcommand*\xP@framefill[1]{\R@#1\relax +\xP@setsolidpat +\setboxz@h{\hskip\X@c\raise\Y@c\hbox{\DN@{\rectangleEdge}\ifx\next@\prevEdge@@ +\DN@{\xP@oval}\else +\DN@{\circleEdge}\ifx\next@\prevEdge@@ +\ifdim\R@=\z@ +\DN@{\xP@filledellipse}\else +\DN@{\restR@max\xP@circle}\fi +\else +\ifdim\R@=\z@ +\DN@{\xP@oval}\else +\DN@{\xP@circle}\fi +\fi +\fi +\next@ +}}\wd\z@\z@\ht\z@\z@\dp\z@\z@ +\boxz@ +} +\newcommand*\xP@circle{\xP@ellipse\R@\R@ +} +\newcommand*\xP@filledellipse{\xP@ellipse{\dimexpr(\L@c+\R@c)/2\relax}{\dimexpr(\U@c+\D@c)/2\relax}} +\newcommand*\xP@framedellipse{\xP@ellipse\A@\B@ +} +\newcommand*\xP@ellipse[2]{\hskip\dimexpr(\R@c-\L@c)/2\relax +\lower\dimexpr(\D@c-\U@c)/2\relax +\hbox{\A@#1\relax +\B@#2\relax +\xP@ellipse@ +}} +\newcommand*\xP@ellipse@{\X@p\dimexpr\A@*543339720/768398401\relax +\Y@p\dimexpr\B@*543339720/768398401\relax +\L@c\dimexpr\A@*34221476/65864945\relax +\U@c\dimexpr\B@*554561898/619869377\relax +\R@c\dimexpr\A@*173517671/654249180\relax +\D@c\B@ +\X@c\z@ +\Y@c\B@ +\xP@bezierlength +\@tempdima\@tempdimb +\X@p\A@ +\Y@p\z@ +\L@c\A@ +\U@c\dimexpr\B@*173517671/654249180\relax +\R@c\dimexpr\A@*554561898/619869377\relax +\D@c\dimexpr\B@*34221476/65864945\relax +\X@c\dimexpr\A@*543339720/768398401\relax +\Y@c\dimexpr\B@*543339720/768398401\relax +\xP@bezierlength +\@tempdimb4\dimexpr\@tempdima+\@tempdimb\relax +\edef\@tempa{\xP@dim\A@0 m +\xP@coor\L@c\U@c +\xP@coor\R@c\D@c +\xP@coor\X@c\Y@c c \xP@coor{\A@*34221476/65864945}{\B@*554561898/619869377}\xP@coor{\A@*173517671/654249180}\B@ +0 \xP@dim\B@ c }\@temptokena\expandafter{\@tempa}\xP@mirrorpath +\xP@fillorstroke{\the\@temptokena}} +\xyendinput + + + + + +%% +%% End of file `xypdf-fr.tex'. diff --git a/macros/generic/diagrams/xypic/texinputs/xypdf-li.tex b/macros/generic/diagrams/xypic/texinputs/xypdf-li.tex new file mode 100644 index 0000000000..5fc4de376b --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xypdf-li.tex @@ -0,0 +1,69 @@ +%% +%% This is file `xypdf-li.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% xypdf.dtx (with options: `line') +%% +%% The xypdf package for TeX and LaTeX +%% Copyright (c) 2010 by Daniel Müllner (M\"ullner) +%% +%% -------------------------------------------------------------------------- +%% +%% This program 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. +%% +%% This program 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. +%% +%% The GNU General Public License is available at +%% . +%% +%% -------------------------------------------------------------------------- +%% +%% This file is part of the xypdf package for TeX and LaTeX2e. The xypdf +%% package may be distributed and/or modified under the conditions 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 distribution consists of the following files: +%% +%% xypdf.dtx - Documented source code +%% xypdf.ins - Installation script +%% xypdf.pdf - Documentation (generated from xypdf.dtx) +%% +%% The files with the TeX code are generated by the following command: +%% +%% latex xypdf.ins +%% +%% This generates the files xypdf.tex, xypdf-co.tex, xypdf-cu.tex, +%% xypdf-fr.tex, xypdf-li.tex and xypdf-ro.tex. +%% +%% -------------------------------------------------------------------------- +%% +%% The xypdf package improves the output quality of the Xy-pic package when +%% PDF documents are generated. It produces generic PDF code for graphical +%% elements like lines, curves and circles instead of approximating these +%% elements with glyphs in special fonts as the original Xy-pic package does. +%% The xypdf package works with both TeX and LaTeX in the occurrences of +%% pdfTeX, XeTeX and eTeX with dvipdfm(x) to generate PDF files. It is being +%% integrated and distributed together with Xy-pic, starting with Xy-pic +%% version 3.8. +%% +%% The copyright for the xypdf package is by its author, Daniel Müllner +%% (Muellner, M\"ullner). +%% +\xycatcodes +\expandafter\let\csname xypdf-li@loaded\endcsname\@empty +\xyendinput + + + + + +%% +%% End of file `xypdf-li.tex'. diff --git a/macros/generic/diagrams/xypic/texinputs/xypdf-ro.tex b/macros/generic/diagrams/xypic/texinputs/xypdf-ro.tex new file mode 100644 index 0000000000..d0bcf79638 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xypdf-ro.tex @@ -0,0 +1,133 @@ +%% +%% This is file `xypdf-ro.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% xypdf.dtx (with options: `rotate') +%% +%% The xypdf package for TeX and LaTeX +%% Copyright (c) 2010 by Daniel Müllner (M\"ullner) +%% +%% -------------------------------------------------------------------------- +%% +%% This program 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. +%% +%% This program 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. +%% +%% The GNU General Public License is available at +%% . +%% +%% -------------------------------------------------------------------------- +%% +%% This file is part of the xypdf package for TeX and LaTeX2e. The xypdf +%% package may be distributed and/or modified under the conditions 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 distribution consists of the following files: +%% +%% xypdf.dtx - Documented source code +%% xypdf.ins - Installation script +%% xypdf.pdf - Documentation (generated from xypdf.dtx) +%% +%% The files with the TeX code are generated by the following command: +%% +%% latex xypdf.ins +%% +%% This generates the files xypdf.tex, xypdf-co.tex, xypdf-cu.tex, +%% xypdf-fr.tex, xypdf-li.tex and xypdf-ro.tex. +%% +%% -------------------------------------------------------------------------- +%% +%% The xypdf package improves the output quality of the Xy-pic package when +%% PDF documents are generated. It produces generic PDF code for graphical +%% elements like lines, curves and circles instead of approximating these +%% elements with glyphs in special fonts as the original Xy-pic package does. +%% The xypdf package works with both TeX and LaTeX in the occurrences of +%% pdfTeX, XeTeX and eTeX with dvipdfm(x) to generate PDF files. It is being +%% integrated and distributed together with Xy-pic, starting with Xy-pic +%% version 3.8. +%% +%% The copyright for the xypdf package is by its author, Daniel Müllner +%% (Muellner, M\"ullner). +%% +\xycatcodes +\expandafter\let\csname xypdf-ro@loaded\endcsname\@empty +\xP@hook{rotate}{xyscale@@} +\newcommand*\xP@xyscale@@[2]{\setboxz@h{\hskip\L@c +\hskip-\R@p +\lower\U@p\hbox{\xP@cm{#1}00{#2}{\raise\U@p\hb@xt@\z@{\hskip-\L@c\hskip\R@p\boxz@\hss}}}}\global\let\xP@lastpattern\@empty +} +\xP@hook{rotate}{xyRotate@@} +\newcommand\xP@xyRotate@@{\xP@rotate@\xP@trigfromdir} +\xP@hook{rotate}{doSpecialRotate@@} +\@ifdefinable\xP@doSpecialRotate@@\relax +\def\xP@doSpecialRotate@@#1@@{\xP@rotate@\xP@trig{#1}} +\newcommand*\xP@rotate@[2]{\setboxz@h{#1{#2}\hskip\L@c +\hskip-\R@p +\lower\U@p\hbox{\xP@cm\cosDirection\sinDirection +{\if-\sinDirection\else-\sinDirection\fi}\cosDirection +{\raise\U@p\hb@xt@\z@{\hskip-\L@c\hskip\R@p\boxz@\hss}}}}\global\let\xP@lastpattern\@empty +} +\newcommand*\xP@trig[1]{\@tempdima\dimexpr#1pt\relax +\@tempdimb\@tempdima +\divide\@tempdimb23592960 +\advance\@tempdima-23592960\@tempdimb +\ifdim\@tempdima<\z@\advance\@tempdima360pt\fi +\@tempdimb\@tempdima +\divide\@tempdimb5898240 +\ifcase\@tempdimb +\xP@sinpoly +\edef\sinDirection{\xP@EARPT\@tempdimb}\@tempdima\dimexpr90pt-\@tempdima\relax +\xP@sinpoly +\edef\cosDirection{\xP@EARPT\@tempdimb}\or +\@tempdima\dimexpr180pt-\@tempdima\relax +\xP@sinpoly +\edef\sinDirection{\xP@EARPT\@tempdimb}\@tempdima\dimexpr90pt-\@tempdima\relax +\xP@sinpoly +\edef\cosDirection{\xP@EARPT\dimexpr-\@tempdimb\relax}\or +\@tempdima\dimexpr\@tempdima-180pt\relax +\xP@sinpoly +\edef\sinDirection{\xP@EARPT\dimexpr-\@tempdimb\relax}\@tempdima\dimexpr90pt-\@tempdima\relax +\xP@sinpoly +\edef\cosDirection{\xP@EARPT\dimexpr-\@tempdimb\relax}\or +\@tempdima\dimexpr360pt-\@tempdima\relax +\xP@sinpoly +\edef\sinDirection{\xP@EARPT\dimexpr-\@tempdimb\relax}\@tempdima\dimexpr90pt-\@tempdima\relax +\xP@sinpoly +\edef\cosDirection{\xP@EARPT\@tempdimb}\else +\PackageError{xypdf}{Unexpected case in sin/cos calculation}{Feel free to contact the author of the xypdf package with a minimal example.}\fi +} +\newcommand*\xP@sinpoly{{\ifdim\@tempdima<49pt +\ifdim\@tempdima<27pt +\@tempdimb\dimexpr((\@tempdima*-529771058/16039085-1384933sp)*\@tempdima/268756075+10714164sp)*\@tempdima/613777813\relax +\else +\advance\@tempdima-27pt +\@tempdimb\dimexpr(((\@tempdima*-743101305/20672414-238989613sp)*\@tempdima/80975565+42661556sp)*\@tempdima/622461739+2\p@)*157520747/693945047\relax +\fi +\else +\ifdim\@tempdima<70pt +\advance\@tempdima-49pt +\@tempdimb\dimexpr(((\@tempdima*-348406699/107952940-55079229sp)*\@tempdima/866635628+408805sp)*\@tempdima/26926757+\p@)*135751711/179873976\relax +\else +\advance\@tempdima-70pt +\@tempdimb\dimexpr(((\@tempdima*-1015850353/137849442-460519207sp)*\@tempdima/8742349+142263941sp)*\@tempdima/972432199+23\p@)*31253604/764969669\relax +\fi +\fi +\global\dimen@i\@tempdimb +}\@tempdimb\dimen@i +} +\xyendinput + + + + + +%% +%% End of file `xypdf-ro.tex'. diff --git a/macros/generic/diagrams/xypic/texinputs/xypdf.tex b/macros/generic/diagrams/xypic/texinputs/xypdf.tex new file mode 100644 index 0000000000..176128f515 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xypdf.tex @@ -0,0 +1,522 @@ +%% +%% This is file `xypdf.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% xypdf.dtx (with options: `basic') +%% +%% The xypdf package for TeX and LaTeX +%% Copyright (c) 2010 by Daniel Müllner (M\"ullner) +%% +%% -------------------------------------------------------------------------- +%% +%% This program 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. +%% +%% This program 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. +%% +%% The GNU General Public License is available at +%% . +%% +%% -------------------------------------------------------------------------- +%% +%% This file is part of the xypdf package for TeX and LaTeX2e. The xypdf +%% package may be distributed and/or modified under the conditions 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 distribution consists of the following files: +%% +%% xypdf.dtx - Documented source code +%% xypdf.ins - Installation script +%% xypdf.pdf - Documentation (generated from xypdf.dtx) +%% +%% The files with the TeX code are generated by the following command: +%% +%% latex xypdf.ins +%% +%% This generates the files xypdf.tex, xypdf-co.tex, xypdf-cu.tex, +%% xypdf-fr.tex, xypdf-li.tex and xypdf-ro.tex. +%% +%% -------------------------------------------------------------------------- +%% +%% The xypdf package improves the output quality of the Xy-pic package when +%% PDF documents are generated. It produces generic PDF code for graphical +%% elements like lines, curves and circles instead of approximating these +%% elements with glyphs in special fonts as the original Xy-pic package does. +%% The xypdf package works with both TeX and LaTeX in the occurrences of +%% pdfTeX, XeTeX and eTeX with dvipdfm(x) to generate PDF files. It is being +%% integrated and distributed together with Xy-pic, starting with Xy-pic +%% version 3.8. +%% +%% The copyright for the xypdf package is by its author, Daniel Müllner +%% (Muellner, M\"ullner). +%% +\ifx\xyloaded\undefined\input xy \fi +\xyprovide{pdf}{PDF driver}{1.7}{Daniel M\"ullner\newline}{\url{http://math.stanford.edu/~muellner}}{} +\ifx\makeatletter\undefined\input miniltx \fi +\newcommand*\xypdfdate{2011/03/20} +\newdriver{\xyaddsupport{pdf}\xP@pdf@on +\xyaddsupport{color}\xP@color@on +\xyaddsupport{curve}\xP@curve@on +\xyaddsupport{frame}\xP@frame@on +\xyaddsupport{rotate}\xP@rotate@on +} +\xyaddunsupport{pdf}\xP@pdf@off +\xyaddunsupport{color}\xP@color@off +\xyaddunsupport{curve}\xP@curve@off +\xyaddunsupport{frame}\xP@frame@off +\xyaddunsupport{rotate}\xP@rotate@off +\newcommand*\xypdfon{\xP@pdf@on +\xP@color@on +\xP@curve@on +\xP@frame@on +\xP@line@on +\xP@rotate@on +} +\newcommand*\xypdfoff{\xP@pdf@off +\xP@color@off +\xP@curve@off +\xP@frame@off +\xP@line@off +\xP@rotate@off +} +\ifx\unexpanded\@undefined +\PackageError{xypdf}{eTeX is needed for the xypdf package}{} +\fi +\newcommand*\xP@testpdfsave{\ifpdf +\ifx\pdfsave\@undefined +\PackageError{xypdf}{pdfTeX version 1.40.0 or higher is needed for the xypdf^^Jpackage with PDF output}{}\fi +\fi +\let\xP@testpdfsave\@undefined +} +\ifx\PackageWarning\@undefined +\newcommand*\xP@warning[2]{{\newlinechar`\^^J\@warning{Package #1 Warning: #2\@empty.}}} +\else +\newcommand*\xP@warning{\PackageWarning} +\fi +\newcommand*\xP@pdf@on{} +\newcommand*\xP@pdf@off{} +\newcommand*\xP@color@on{} +\newcommand*\xP@color@off{} +\newcommand*\xP@curve@on{} +\newcommand*\xP@curve@off{} +\newcommand*\xP@frame@on{} +\newcommand*\xP@frame@off{} +\newcommand*\xP@line@on{} +\newcommand*\xP@line@off{} +\newcommand*\xP@rotate@on{} +\newcommand*\xP@rotate@off{} +\newcommand*\xP@hook[2]{\edef\next@{\let\expandafter\noexpand\csname xP@old@#2\endcsname +\expandafter\noexpand\csname#2\endcsname}\next@ +\expandafter\edef\csname xP@#1@on\endcsname{\unexpanded\expandafter\expandafter\expandafter{\csname xP@#1@on\endcsname}\let\expandafter\noexpand\csname#2\endcsname +\expandafter\noexpand\csname xP@#2\endcsname +}\expandafter\edef\csname xP@#1@off\endcsname{\unexpanded\expandafter\expandafter\expandafter{\csname xP@#1@off\endcsname}\let\expandafter\noexpand\csname#2\endcsname +\expandafter\noexpand\csname xP@old@#2\endcsname +}} +\newcommand*\xP@defpdfliteral{\ifpdf +\newcommand*\xP@literal[1]{\pdfsave\pdfliteral{##1}\pdfrestore} +\newcommand*\xP@cm[5]{\pdfsave +\pdfsetmatrix{##1 ##2 ##3 ##4}##5\pdfrestore +} +\@ifundefined{@pdfcolorstack}{\def\@pdfcolorstack{\z@}}{}\newcommand*\xP@setcolor[3]{\pdfcolorstack\@pdfcolorstack push{##1 ##2 ##1 ##3}} +\newcommand*\xP@resetcolor{\pdfcolorstack\@pdfcolorstack pop\relax}\else +\newcommand*\xP@literal{\xP@warning{xypdf}{The produced DVI file is NOT PORTABLE. Convert it with^^Jdvipdfm(x) to the PDF format but do not expect the DVI file itself to be^^Jdisplayed correctly\@gobble}\global\let\xP@literal\xP@literal@ +\xP@literal +} +\newcommand*\xP@literal@[1]{\special{pdf:content ##1}} +\newcommand*\xP@cm[5]{\special{pdf:btrans matrix ##1 ##2 ##3 ##4 0 0}##5\special{pdf:etrans}} +\newcommand*\xP@setcolor[3]{\special{pdf:bcolor[##1]}} +\newcommand*\xP@resetcolor{\special{pdf:ecolor}}\fi +\let\xP@defpdfliteral\@undefined +} +\DN@{\@firstofone} +\DNii@{xy} +\ifx\@currname\nextii@ +\ifx\AtEndOfPackage\@undefined +\else +\DN@{\AtEndOfPackage}\fi +\fi +\next@ +{\RequirePackage{ifpdf}\xP@testpdfsave +\xP@defpdfliteral} +\ifx\pdfdecimaldigits\@undefined +\newcommand*\xP@digits{2} +\else +\@ifdefinable\xP@digits\relax +\xdef\xP@digits{\the\pdfdecimaldigits} +\ifnum\pdfdecimaldigits<2 +\xP@warning{xypdf}{The precision in \string\pdfdecimaldigits\space is only \xP@digits\space +decimals.^^JIt is recommended to set \string\pdfdecimaldigits\space to 2 or 3 for best output quality\@gobble} +\fi +\fi +\newcommand*\xP@dim[1]{\expandafter\xP@removePT\the\dimexpr(#1)*800/803\relax\space} +\newcommand*\xP@precdim[1]{\xP@EARPT\dimexpr(#1)*800/803\relax\space} +\newcommand*\xP@EARPT{\expandafter\removePT@\the} +\newcommand*\xP@coor[1]{\xP@dim{#1}\xP@dim} +\@ifdefinable\xP@removePT\relax +{\@makeother\p\@makeother\t\gdef\xP@removePT#1pt{\xP@removePT@#10000@}} +\@ifdefinable\xP@removePT@\relax +\ifcase\xP@digits +\def\xP@removePT@#1.#2#3@{\ifnum#2<5 +#1\else +\the\numexpr-\if-#1-\else-#1+\fi\@ne\relax +\fi +} +\or +\def\xP@removePT@#1#2.#3#4#5@{\ifnum#4<5 +#1#2\if#30\else +.#3\fi +\else +\expandafter\xP@removePT +\the\dimexpr#1#2.#3pt+\if#1--\fi.12pt\relax +\fi +} +\or +\def\xP@removePT@#1#2.#3#4#5#6@{\ifnum#5<5 +#1#2\if#40\if#30\else +.#3\fi +\else +.#3#4\fi +\else +\expandafter\xP@removePT +\the\dimexpr#1#2.#3#4pt+\if#1--\fi786sp\relax +\fi +} +\or +\def\xP@removePT@#1#2.#3#4#5#6#7@{\ifnum#6<5 +#1#2\if#50\if#40\if#30\else +.#3\fi +\else +.#3#4\fi +\else +.#3#4#5\fi +\else +\expandafter\xP@removePT +\the\dimexpr#1#2.#3#4#5pt+\if#1--\fi79sp\relax +\fi +} +\or +\def\xP@removePT@#1#2.#3#4#5#6#7#8@{\ifnum#7<5 +#1#2\if#60\if#50\if#40\if#30\else +.#3\fi +\else +.#3#4\fi +\else +.#3#4#5\fi +\else +.#3#4#5#6\fi +\else +\expandafter\xP@removePT +\the\dimexpr#1#2.#3#4#5#6pt+\if#1--\fi8sp\relax +\fi +} +\else +\let\xP@dim\xP@precdim +\fi +\AtBeginDocument{{\setboxz@h{$ $}}\@ifdefinable\xP@lw\relax +\@ifdefinable\xP@preclw\relax +\edef\xP@preclw{\the\fontdimen8\textfont3}\edef\xP@lw{\xP@dim\xP@preclw}\PackageInfo{xypdf}{Line width: \xP@preclw}} +\xP@hook{pdf}{line@} +\newcommand*\xP@line@{\setboxz@h{\xP@setsolidpat +\xP@stroke{0 0 m \xP@coor{\cosDirection\xydashl@}{\sinDirection\xydashl@}l}}\U@c\sinDirection\xydashl@ +\D@c\z@ +\ifdim\U@c<\z@ +\multiply\U@c\m@ne +\xP@swapdim\U@c\D@c +\fi +\ht\z@\U@c +\dp\z@\D@c +\R@c\cosDirection\xydashl@ +\L@c\z@ +\ifdim\R@c<\z@ +\multiply\R@c\m@ne +\xP@swapdim\L@c\R@c +\fi +\hskip\L@c\boxz@\hskip\R@c +\edef\tmp@{\egroup\U@c\the\U@c\D@c\the\D@c\L@c\the\L@c\R@c\the\R@c}\tmp@ +\Edge@c={\rectangleEdge}\edef\Upness@{\ifdim\z@<\U@c1\else0\fi}\edef\Leftness@{\ifdim\z@<\L@c1\else0\fi}\def\Drop@@{\styledboxz@}\def\Connect@@{\solid@}} +\xP@hook{pdf}{solid@} +\newcommand*\xP@solid@{\straight@\xP@solidSpread} +\@ifdefinable\xP@solidSpread\relax +\def\xP@solidSpread#1\repeat@{{\@tempswatrue +\ifdim\X@p=\X@c +\ifdim\Y@p=\Y@c +\@tempswafalse +\fi +\fi +\if@tempswa +\xP@setsolidpat +\xP@stroke{\xP@coor\X@p\Y@p m \xP@coor\X@c\Y@c l}\fi +}} +\newcommand*\xP@pattern{} +\newcommand*\xP@setsolidpat{\def\xP@pattern{1 J 1 j []0 d}\global\let\xP@lastpattern\xP@solidmacro +} +\newcommand*\xP@stroke[1]{\xP@literal{\xP@lw w \xP@pattern\space#1 S}} +\xP@hook{pdf}{dash@} +\newcommand\xP@dash@{\line@\def\Connect@@{\straight@\xP@dashedSpread}} +\@ifdefinable\xP@dashedSpread\relax +\def\xP@dashedSpread#1\repeat@{{\xP@veclen +\ifdim\@tempdimb>\z@ +\xP@setdashpat +\xP@savec +\xP@stroke{\xP@coor\X@p\Y@p m \xP@coor\X@c\Y@c l}\fi +}} +\newcommand*\xP@setdashpat{\xP@testcont\xP@dashmacro +\ifxP@splinecont +{\count@\numexpr2*((\@tempdimb-\xydashl@/3)/(2*\xydashl@))\relax +\global\dimen@i +\ifnum\count@>\z@ +\dimexpr\@tempdimb/\count@\relax +\else +\z@ +\fi +}\@tempdima\dimen@i +\edef\xP@pattern{1 J 1 j [\ifdim\@tempdima>\z@ +\xP@precdim\@tempdima]\xP@precdim\@tempdima +\else +]0 \fi +d}\else +\@tempdima +\ifdim\@tempdimb>\xydashl@ +\dimexpr\@tempdimb/(2*((\@tempdimb+\xydashl@)/(2*\xydashl@))-1)\relax +\else +\z@ +\fi +\edef\xP@pattern{1 J 1 j [\ifdim\@tempdima>\z@\xP@precdim\@tempdima\fi +]0 d}\fi +\global\let\xP@lastpattern\xP@dashmacro +} +\newcommand*\xP@setcldashpat{{\count@\numexpr2*((\@tempdimb-\xydashl@/3)/(2*\xydashl@))\relax +\xdef\@gtempa{1 J 1 j [\ifnum\count@>\z@\xP@precdim{\@tempdimb/\count@}\fi]\ifnum\count@>\z@\xP@precdim{\@tempdimb*3/2/\count@}\else0 \fi d}}\edef\xP@pattern{\@gtempa}} +\xP@hook{pdf}{point@} +\newcommand*\xP@point@{\xP@zerodot\egroup\Invisible@false +\Hidden@false\def\Leftness@{.5}\def\U@pness@{.5}\ctipEdge@ +\def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\xP@dottedSpread}} +\newcommand*\xP@zerodot{\hb@xt@\z@{\hss +\vbox to\z@{\vss\hrule\@width\xP@preclw\@height\xP@preclw\vss}\hss}} +\@ifdefinable\xP@dottedSpread\relax +\def\xP@dottedSpread#1\repeat@{{\xP@veclen +\ifdim\@tempdimb>\z@ +\xP@setdottedpat +\xP@savec +\xP@stroke{\xP@coor\X@p\Y@p m \xP@coor\X@c\Y@c l}\fi +}} +\newcommand*\xP@setdottedpat{\xP@testcont\xP@dotmacro +\ifxP@splinecont +\@tempdima\dimexpr\@tempdimb/(\@tempdimb/131072+1)-\xP@preclw\relax +\edef\xP@pattern{0 J [\ifdim\@tempdima>\z@ +\xP@precdim\xP@preclw\xP@precdim\@tempdima +\fi +]\xP@precdim{\xP@preclw+1sp}d}\else +\advance\@tempdimb-\xP@preclw +\ifdim\@tempdimb<\z@\@tempdimb\z@\fi +\@tempdima\dimexpr\@tempdimb/(\@tempdimb/131072+1)-\xP@preclw\relax +\edef\xP@pattern{0 J [\ifdim\@tempdima>\z@ +\xP@precdim\xP@preclw\xP@precdim\@tempdima +\fi +]0 d}\fi +\global\let\xP@lastpattern\xP@dotmacro +} +\newcommand*\xP@setcldottedpat{\@tempdima\dimexpr\@tempdimb/(\@tempdimb/131072+1)-\xP@preclw\relax +\edef\xP@pattern{0 J [\ifdim\@tempdima>\z@ +\xP@precdim\xP@preclw\xP@precdim\@tempdima +\fi +]\xP@precdim{\dimexpr\xP@preclw+\@tempdima/2\relax}d}} +\newcommand*\xP@abs[1]{\ifdim#1<\z@\multiply#1\m@ne\fi} +\newcommand*\xP@ifabsless[2]{\ifpdfabsdim#1<#2} +\ifx\ifpdfabsdim\@undefined +\renewcommand*\xP@ifabsless[2]{\ifdim\ifdim#1<\z@-\fi#1<\ifdim#2<\z@-\fi#2} +\@gobble\fi +\fi +\newcommand*\xP@swapdim[2]{\@tempdima#1#1#2#2\@tempdima} +\newcommand*\xP@swapnum[2]{\@tempcnta#1#1#2#2\@tempcnta} +\newcommand*\xP@min[2]{\ifdim#1<#2#1\else#2\fi} +\newcommand*\xP@max[2]{\ifdim#1>#2#1\else#2\fi} +\newcommand*\xP@Max[2]{#1\ifdim#2<\z@\xP@max#1{-#2}\else\xP@max#1#2\fi} +\newcommand*\xP@sqrt{\loop +\@tempdimb\dimexpr(\@tempdimc+(\@tempdima*\p@/\@tempdimc))/2\relax +\unless\ifdim\@tempdimc=\@tempdimb +\@tempdimc\@tempdimb\relax +\repeat +} +\newcommand*\xP@veclen{{\xP@veclen@ +\global\dimen@i\@tempdimb +}\@tempdimb\dimen@i +} +\newcommand*\xP@veclen@{\xP@abs\d@Y +\ifdim\d@X=\z@ +\@tempdimb\d@Y +\else +\xP@abs\d@X +\ifdim\d@Y=\z@ +\@tempdimb\d@X +\else +\@tempswatrue +\ifdim\d@X>5931641sp\relax\@tempswafalse\fi +\ifdim\d@Y>5931641sp\relax\@tempswafalse\fi +\if@tempswa +\count@\@ne +\loop +\@tempdima\dimexpr\d@X*\d@X/\p@+\d@Y*\d@Y/\p@\relax +\ifdim\@tempdima<4096pt +\@tempcnta\ifdim\@tempdima<1024pt\ifdim\@tempdima<256pt8\else4\fi\else\tw@\fi +\multiply\d@X\@tempcnta +\multiply\d@Y\@tempcnta +\multiply\count@\@tempcnta +\repeat +\@tempdimc\dimexpr(\d@X+\d@Y)*3/4\relax +\xP@sqrt +\@tempdimb\dimexpr\@tempdimb/\count@\relax +\else +\ifdim\d@X>83042982sp\relax\@tempswatrue\fi +\ifdim\d@Y>83042982sp\relax\@tempswatrue\fi +\if@tempswa +\@tempdima\dimexpr\d@X/182*\d@X/11927552+\d@Y/182*\d@Y/11927552\relax +\@tempdimc\dimexpr(\d@X+\d@Y)*3/728\relax +\xP@sqrt +\multiply\@tempdimb182\relax +\else +\@tempdima\dimexpr\d@X*\d@X/12845056+\d@Y*\d@Y/12845056\relax +\@tempdimc\dimexpr(\d@X+\d@Y)*3/56\relax +\xP@sqrt +\multiply\@tempdimb14\relax +\fi +\fi +\fi +\fi +} +\xP@hook{pdf}{squiggledSpread@} +\@ifdefinable\xP@squiggledSpread@\relax +\def\xP@squiggledSpread@#1\repeat@{{\xP@veclen +\ifdim\@tempdimb>\z@ +\edef\@tempa{\xP@coor\X@p\Y@p m }\toks@\expandafter{\@tempa}\@tempcnta\numexpr\@tempdimb/\xybsqll@\relax +\ifnum\@tempcnta<\tw@\@tempcnta\tw@\fi +\@tempdima\dimexpr\d@X/\@tempcnta\relax +\@tempdimc\dimexpr\d@Y/\@tempcnta\relax +\xP@testcont\xP@oddsquigglemacro +\ifxP@splinecont +\def\xP@squigsign{-}\else +\let\xP@squigsign\@empty +\fi +\count@\z@ +\loop +\xP@append\toks@{\xP@coor{\X@p+\d@X*\count@/\@tempcnta+(\@tempdima +-\xP@squigsign\ifodd\count@-\fi\@tempdimc)*147546029/534618434}{\Y@p+\d@Y*\count@/\@tempcnta+(\@tempdimc ++\xP@squigsign\ifodd\count@-\fi\@tempdima)*147546029/534618434}}\advance\count@\@ne +\xP@append\toks@{\xP@coor{\X@p+\d@X*\count@/\@tempcnta-(\@tempdima +-\xP@squigsign\ifodd\count@-\fi\@tempdimc)*147546029/534618434}{\Y@p+\d@Y*\count@/\@tempcnta-(\@tempdimc ++\xP@squigsign\ifodd\count@-\fi\@tempdima)*147546029/534618434}\xP@coor{\X@p+\d@X*\count@/\@tempcnta}{\Y@p+\d@Y*\count@/\@tempcnta}c }\ifnum\count@<\@tempcnta +\repeat +\xP@setsolidpat +\global\expandafter\let\expandafter\xP@lastpattern +\ifodd\numexpr\count@\if\xP@squigsign-+1\fi\relax +\xP@oddsquigglemacro +\else +\xP@evensquigglemacro +\fi +\xP@savec +\xP@stroke{\the\toks@}\fi +}} +\newcommand*\xP@squigsign{} +\newcommand*\xP@append[2]{{\edef\@tempa{#1{\the#1#2}}\expandafter}\@tempa +} +\xP@hook{pdf}{circhar@@} +\newcommand*\xP@circhar@@[1]{\expandafter\xP@circhar@@@\ifcase#1 000{-173517671/654249180}{65307479/619869377}{-34221476/65864945}{225058681/768398401}{-543339720/768398401}\or +0{-543339720/768398401}{181455824/967576667}{-554561898/619869377}{826676217/1870772527}{-1}{543339720/768398401}{-1}\or +0{-1}{173517671/654249180}{-1}{34221476/65864945}{-554561898/619869377}{543339720/768398401}{-543339720/768398401}\or +0{-543339720/768398401}{181455824/967576667}{-34221476/65864945}{225058681/768398401}{-173517671/654249180}{225058681/768398401}0\or +0{543339720/768398401}{181455824/967576667}{34221476/65864945}{225058681/768398401}{173517671/654249180}{225058681/768398401}0\or +01{173517671/654249180}1{34221476/65864945}{554561898/619869377}{543339720/768398401}{543339720/768398401}\or +0{543339720/768398401}{181455824/967576667}{554561898/619869377}{826676217/1870772527}1{543339720/768398401}1\or +000{173517671/654249180}{65307479/619869377}{34221476/65864945}{225058681/768398401}{543339720/768398401}\fi} +\newcommand\xP@circhar@@@[8]{\xP@setsolidpat +\xP@stroke{\xP@coor{\R@*#1}{\R@*#2}m +\xP@coor{\R@*#3}{\R@*#4}\xP@coor{\R@*#5}{\R@*#6}\xP@coor{\R@*#7}{\R@*#8}c}\vrule width\z@ height\R@ depth\R@ +\kern\dimexpr\R@*#7\relax +} +\xP@hook{pdf}{cirrestrict@@} +\newcommand*\xP@cirrestrict@@{\count@\z@\relax} +\newcommand*\xP@trigfromdir[1]{{\Direction#1\relax +\count@-\Direction +\advance\count@4096 +\divide\count@2048 +\ifcase\count@ +\d@X\K@\p@ +\d@Y\numexpr\Direction-3*\K@\relax\p@ +\or +\d@X\numexpr\Direction-\K@\relax\p@ +\d@Y-\K@\p@ +\or +\d@X-\K@\p@ +\d@Y\numexpr-\Direction-\K@\relax\p@ +\or +\d@X\numexpr-\Direction-3*\K@\relax\p@ +\d@Y\K@\p@ +\else +\PackageError{xypdf}{Unexpected case in direction calculation}{Feel free to contact the author of the xypdf package with a minimal example.}\fi +\xP@veclen +\xdef\@gtempa{\def\noexpand\cosDirection{\xP@EARPT\dimexpr\d@X*\p@/\@tempdimb\relax}\def\noexpand\sinDirection{\xP@EARPT\dimexpr\d@Y*\p@/\@tempdimb\relax}}}\@gtempa +} +\outer\def\@tempa{\alloc@1\dimen\dimendef\insc@unt} +\let\xP@newdimen\newdimen +\ifx\newdimen\@tempa +\def\xP@newdimen{\alloc@1\dimen\dimendef\insc@unt} +\fi +\outer\def\@tempa#1{\count@=\escapechar\escapechar=-1 +\expandafter\expandafter\expandafter +\def\@if#1{true}{\let#1=\iftrue}\expandafter\expandafter\expandafter +\def\@if#1{false}{\let#1=\iffalse}\@if#1{false}\escapechar=\count@} +\let\@tempa\relax +\newcommand*\xP@lastX{} +\newcommand*\xP@lastY{} +\newcommand*\xP@lastpattern{} +\newcommand*\xP@solidmacro{solid} +\newcommand*\xP@dotmacro{dot} +\newcommand*\xP@dashmacro{dash} +\newcommand*\xP@evensquigglemacro{evensquiggle} +\newcommand*\xP@oddsquigglemacro{oddsquiggle} +\newcommand*\xP@brokensquigglemacro{brokensquiggle} +\renewcommand*\xyinside@{\global\let\xP@lastpattern\@empty +\saveXyStyle@ \aftergroup\xycheck@end +\setboxz@h\bgroup +\plainxy@ +\X@c=\z@\Y@c=\z@\czeroEdge@ +\X@p=\z@\Y@p=\z@\U@p=\z@\D@p=\z@\L@p=\z@\R@p=\z@\Edge@p={\zeroEdge}\X@min=\hsize\X@max=-\hsize\Y@min=\hsize\Y@max=-\hsize +\mathsurround=\z@ +\expandafter\POS\everyxy@@ +} +\newcommand*\xP@savec{\xdef\xP@lastX{\the\X@c}\xdef\xP@lastY{\the\Y@c}} +\@ifdefinable\ifxP@splinecont\relax +\@ifdefinable\xP@splineconttrue\relax +\@ifdefinable\xP@splinecontfalse\relax +\newif\ifxP@splinecont +\newcommand*\xP@testcont[1]{\xP@splinecontfalse +\ifxP@cont +\ifx\xP@lastpattern#1\ifdim\xP@lastX=\X@p +\ifdim\xP@lastY=\Y@p +\xP@splineconttrue +\fi +\fi +\fi +\fi +} +\@ifdefinable\ifxP@cont\relax +\@ifdefinable\xP@conttrue\relax +\@ifdefinable\xP@contfalse\relax +\newif\ifxP@cont +\newcommand*\xypdfcontpatternon{\xP@conttrue} +\newcommand*\xypdfcontpatternoff{\xP@contfalse} +\xP@conttrue +\let\@tempa\@undefined +\let\nextii@\@undefined +\DN@{\xywithoption{color}{\message{Xy-pic pdf driver: `color' extension support}\@ifundefined{xypdf-co@loaded}{\input xypdf-co\relax}{\message{not reloaded}}}\xywithoption{curve}{\message{Xy-pic pdf driver: `curve' extension support}\@ifundefined{xypdf-cu@loaded}{\input xypdf-cu\relax}{\message{not reloaded}}}\xywithoption{frame}{\message{Xy-pic pdf driver: `frame' extension support}\@ifundefined{xypdf-fr@loaded}{\input xypdf-fr\relax}{\message{not reloaded}}}\xywithoption{line}{\message{Xy-pic pdf driver: `line' extension support}\@ifundefined{xypdf-li@loaded}{\input xypdf-li\relax}{\message{not reloaded}}}\xywithoption{rotate}{\message{Xy-pic pdf driver: `rotate' extension support}\@ifundefined{xypdf-ro@loaded}{\input xypdf-ro\relax}{\message{not reloaded}}}} +\next@ +\xyendinput +%% +%% End of file `xypdf.tex'. diff --git a/macros/generic/diagrams/xypic/texinputs/xypic.sty b/macros/generic/diagrams/xypic/texinputs/xypic.sty new file mode 100644 index 0000000000..befdb653b4 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xypic.sty @@ -0,0 +1,32 @@ +%% $Id: xypic.sty,v 3.4 2010/04/16 06:06:52 krisrose Exp $ -*-tex-*- +%% +%% LaTeX style option to load Xy-pic in version 2 compatibility mode. +%% by Kristoffer H. Rose +%% +%% This file is in the public domain. It 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. +%% +\input{xy.sty} +\xyoption{v2} +\catcode`\@=\xystycatcode +\endinput + +% $Log: xypic.sty,v $ +% Revision 3.4 2010/04/16 06:06:52 krisrose +% Preparing for a new release... +% +% Revision 3.3 1996/12/19 03:31:56 krisrose +% Maintenance release +% +% Revision 3.0 1995/07/07 20:14:21 kris +% Major release w/new User's Guide! +% +% Revision 2.13 1995/07/04 15:11:17 kris +% Ready to release v3? +% +% Revision 2.8 1994/04/08 04:30:00 kris +% Second (bug fix) 3alpha release. +% +% Revision 2.7 1994/03/08 02:06:01 kris +% Release 3alpha. diff --git a/macros/generic/diagrams/xypic/texinputs/xypic.tex b/macros/generic/diagrams/xypic/texinputs/xypic.tex new file mode 100644 index 0000000000..db0839b363 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xypic.tex @@ -0,0 +1,24 @@ +%% xypic.tex from $Id: xypic.doc,v 3.6 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic v2 compatibility loading. +%% Copyright (c) 1993-1996 Kristoffer H. Rose +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\input xyv2 +\endinput diff --git a/macros/generic/diagrams/xypic/texinputs/xypicture.tex b/macros/generic/diagrams/xypic/texinputs/xypicture.tex new file mode 100644 index 0000000000..d1d44c3f2d --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xypicture.tex @@ -0,0 +1,55 @@ +%% xypicture.tex from $Id: xypicture.doc,v 3.6 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``LaTeX Picture Mode'' option. +%% Copyright (c) 199802011 Kristoffer H. Rose +%% +%% 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-1998 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{picture}{LaTeX Picture extension}{\stripRCS$Revision: 3.6 $}% + {Kristoffer H.~Rose}{krisrose@tug.org}% + {IBM T.J.Watson Research Center, P.O.Box 704, Yorktown Heights, NY 10598, USA} +\xynew@{dimen}\xyp@xsize +\xynew@{dimen}\xyp@ysize +\xylet@\xyp@arrow=\relax +{\xyuncatcodes\makeatletter + \gdef\xyp@tail{} + \gdef\xyp@mid{-} + \gdef\xyp@head{>} +} +\xydef@\xyvector(#1,#2)#3{% + \xyp@xsize#3\relax + \ifnum#1<\z@\multiply\xyp@xsize\m@ne\fi + \xyp@ysize\xyp@xsize\relax + \ifnum#1=\z@ + \xyp@xsize\z@ + \ifnum#2<\z@\multiply\xyp@ysize\m@ne\fi + \else + \multiply\xyp@ysize#2\relax\divide\xyp@ysize#1\relax + \fi + \edef\xyp@arrow{\noexpand\arAT{\xyp@tail\xyp@mid\xyp@head}}% + \ifnum#1<\z@ + \makebox(\xyp@xsize,\xyp@ysize){% + \begin{xy} 0;<\unitlength,\z@>:% + \xyp@arrow(\xyp@xsize,\xyp@ysize) + \end{xy}}% + \else + \xyp@arrow(\xyp@xsize,\xyp@ysize)\relax + \fi +} +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xypoly.tex b/macros/generic/diagrams/xypic/texinputs/xypoly.tex new file mode 100644 index 0000000000..48c01fe501 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xypoly.tex @@ -0,0 +1,609 @@ +%% xypoly.tex from $Id: xypoly.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Polygon'' feature. +%% Copyright (c) 1994-1997 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{poly}{Polygon feature}{\stripRCS$Revision: 3.11 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xyrequire{arrow}\xycatcodes +\message{polygons,} +\xynew@{count}\xypolynode@\xypolynode@=\m@ne +\xydef@\xypolynode{\the\xypolynode@} +\xydef@\xypolyNUMSIDES@{} +\xydef@\xypolynum{\xypolyNUMSIDES@} +\xydef@\xypolygon{\xypoly@}% +\xydef@\xypoly@{% + \if\inxy@ + \if\inxypoly@ + \edef\next@{\noexpand\xy@@{\noexpand\nter@{\xypolynode@=\the\xypolynode@ + \noexpand\def\noexpand\xypolyNUMSIDES@{\xypolyNUMSIDES@}}}}% + \else + \DN@{\xy@@{\def\inxypoly@{TT}% + \nter@{\def\inxypoly@{TF}\xypolynode@=\m@ne}}}% + \fi + \else + \if\inxypoly@ + \edef\next@{\noexpand\xy + \noexpand\xy@@{\noexpand\nter@{\xypolyside=\the\xypolyside + \noexpand\def\noexpand\xypolyNUMSIDES@{\xypolyNUMSIDES@}\endxy}}}% + \else + \DN@{\xy \xy@@{\def\inxypoly@{TT}% + \nter@{\def\inxypoly@{TF}\xypolynode@=\m@ne \endxy}}}% + \fi + \fi + \next@ \count@=\z@ \xyFN@\xypoly@n} +\xydef@\inxypoly@{TF}% +\xydef@\xypoly@x{\xy@@{\leave@\leave@}} +\xydef@\xypoly@n{% + \DN@##1{\multiply\count@10\relax \advance\count@##1\relax \xyFN@\xypoly@n}% + \ifx \space@\next + \ifnum\count@>\z@ \expandafter\DN@\space@{\xyFN@\xypoly@i}% + \else \expandafter\DN@\space@{\xyFN@\xypoly@n}\fi + \else\ifx 0\next \else\ifx 1\next \else\ifx 2\next \else\ifx 3\next + \else\ifx 4\next \else\ifx 5\next \else\ifx 6\next \else\ifx 7\next + \else\ifx 8\next \else\ifx 9\next + \else \let\next@=\xypoly@i \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@} +\xydef@\xypoly@i{\edef\xypolyNUMSIDES@{\the\count@}\xyFN@\xygetpolyprefix@} +\xydef@\xypolyPREFIX@{}% +\xydef@\xypolyPREFIX@@{}% +\xydef@\xypolyname{\xypolyPREFIX@}% +\xydef@\xygetpolyprefix@{% + \ifx\next"\DN@"##1"{\def\xypolyPREFIX@@{##1}\expandafter + \edef\csname\xypolyPREFIX@@ NUMSIDES\endcsname{\xypolyNUMSIDES@}% + \xypolyprefix@@ }% + \else + \ifnum\xypolynode@<\z@\def\xypolyPREFIX@@{}% + \else + \edef\xypolyPREFIX@@{\xypolyPREFIX@\the\xypolynode@,}% + \fi \DN@{\xypolyprefix@@}% + \fi \next@ } +\xydef@\xypolyprefix@@{% + \expandafter\toks@\expandafter{\addEQ@\POS"}% + \expandafter\addtotoks@\expandafter{\xypolyPREFIX@@0"\relax}% + \the\toks@ + \ifnum\xypolynode@<\z@ + \expandafter\def\expandafter\xypolyPREFIX@\expandafter{\xypolyPREFIX@@}% + \xy@@{\enter@{\xypolynode@=\the\xypolynode@ + \noexpand\def\noexpand\xypolyPREFIX@{\xypolyPREFIX@}}\xypolynode@=\z@ }% + \else + \xy@@{\enter@{\xypolynode@=\the\xypolynode@ + \noexpand\def\noexpand\xypolyPREFIX@{\xypolyPREFIX@}}\xypolynode@=\z@ }% + \expandafter\def\expandafter\xypolyPREFIX@\expandafter{\xypolyPREFIX@@}% + \fi + \xypoly@@i } +\xydef@\xypoly@@i#1#{\begingroup + \DN@{#1}\ifx\next@\empty\else + \xywarning@{discarding unused tokens: #1}\fi \xypoly@@ } +\xydef@\xypoly@@#1{\xypolydefaults@ + \DN@{#1}\ifx\next@\empty\DN@{\xypoly@@@}% + \else \DN@{\xyFN@\xypolyparams@#1~!}\fi \next@} +\xydef@\xypolydefaults@{\def\xypolySCALE@{}% + \def\xypolySPOKES@{{}}\def\xypostSPOKES@{}\let\xypreSPOKES@\relax + \def\xypolySIDES@{{-}}\def\xypostSIDES@{}\let\xypreSIDES@\relax + \def\xypolyVERTEX@{}\def\xypolyALIGN@{}} +{\xyuncatcodes \gdef\next{*=0}} +\xylet@\xypolynullvertex@=\next +{\xyuncatcodes \gdef\next{*[o]}} +\xylet@\xypolyvertex@=\next +{\xyuncatcodes \gdef\next{*+[o]}} +\xylet@\xypolywidevertex@=\next +\xydef@\xypolyparams@{% + \ifx\space@\next \expandafter\DN@\space{\xyFN@\xypolyparams@}% + \else\ifx\next~\DN@~{\xyFN@\xypolywhich@}% + \else\ifx\next\bgroup\DN@##1~!{% + \ifx\empty\xypolyVERTEX@\expandafter + \def\expandafter\xypolyVERTEX@\expandafter{\xypolyvertex@{##1}}% + \else\xypolyVERTEXerror@{##1}\fi \xypoly@@@}% + \else\DN@##1~!{\DN@{##1}\ifx\next@\empty\else + \ifx\empty\xypolyVERTEX@\def\xypolyVERTEX@{*##1}% + \expandafter\checkpolytok@\expandafter\xypolyVERTEX@ + \expandafter{\xypolynullvertex@}##1@@!\relax + \else\xypolyVERTEXerror@{##1}\fi\fi \xypoly@@@}% + \fi\fi\fi \next@ } +\xydef@\xypolyVERTEXerror@#1{\xywarning@{% + vertex already specified, discarding unused tokens:#1}} +\xydef@\xypolywhich@{% + \ifx\next!\DN@!{\xypoly@@@}% + \else \addLT@\ifx\next \addLT@\DN@{\xyFN@\xypoly@SPOKES@}% + \else \addGT@\ifx\next \addGT@\DN@{\xyFN@\xypoly@SIDES@}% + \else \addEQ@\ifx\next \addEQ@\DN@##1{% + \def\xypolyALIGN@{##1}\xyFN@\xypolyparams@ }% + \else \ifx :\next \DN@:##1{% + \def\xypolySCALE@{##1}\xyFN@\xypolyparams@ }% + \else\ifx\next*\DN@*##1{\expandafter + \def\expandafter\xypolyVERTEX@\expandafter{\xypolywidevertex@{##1}}% + \xyFN@\xypolyparams@}% + \fi\fi\fi\fi\fi\fi \next@ } +\xydef@\xypoly@SPOKES@{% + \addLT@\ifx\next \addLT@\DN@##1{% + \def\xypreSPOKES@{##1}\def\xypolySPOKES@{}\xyFN@\xypolyparams@ }% + \else \addGT@\ifx\next \addGT@\DN@##1{% + \def\xypostSPOKES@{##1}\xyFN@\xypolyparams@ }% + \else \ifx\next\bgroup \DN@##1{% + \def\xypolySPOKES@{##1}\let\xypreSPOKES@\relax + \checkpolytok@\xypolySPOKES@{}##1@@!{\xyFN@\xypolyparams@}}% + \else \DN@##1{% + \let\xypreSPOKES@\relax \def\xypolySPOKES@{{##1}}\xyFN@\xypolyparams@}% + \fi\fi\fi \next@ } +\xydef@\xypoly@SIDES@{% + \addLT@\ifx\next \addLT@\DN@##1{% + \def\xypreSIDES@{##1}\def\xypolySIDES@{}\xyFN@\xypolyparams@ }% + \else \addGT@\ifx\next \addGT@\DN@ ##1{% + \def\xypostSIDES@{##1}\xyFN@\xypolyparams@ }% + \else \ifx\next\bgroup \DN@##1{% + \def\xypolySIDES@{##1}\let\xypreSIDES@\relax + \checkpolytok@\xypolySIDES@{}##1@@!{\xyFN@\xypolyparams@}}% + \else \DN@##1{% + \let\xypreSIDES@\relax \def\xypolySIDES@{{##1}}\xyFN@\xypolyparams@}% + \fi\fi\fi \next@ } +\xydef@\checkpolytok@#1#2#3#4@!#5{\DNii@{#1}\DN@{#4}% + \ifx\next@\empty\expandafter\def\nextii@{{}}% + \else\ifx#4@\expandafter\def\nextii@{#2{#3}}\fi\fi #5} +\xydef@\xytrigerror@#1#2{\string#1 only works from 0 to 12} +\xydef@\cosPIon#1{\ifcase#1 1\or-1\or0\or.5\or\halfroottwo\or + .809017\or\halfrootthree\or.900969\or.92388\or.939693\or.951057\or + .959493\or.965926\else1\xytrigerror@\cosPIon{#1}\fi} +\xydef@\sinPIon#1{\ifcase#1 0\or0\or1\or\halfrootthree\or\halfroottwo\or + .587785\or.5\or.433884\or.382683\or.34202\or.309017\or + .281733\or.258819\else0\xytrigerror@\sinPIon{#1}\fi} +\xydef@\cosTwoPIon#1{\ifcase#1 1\or1\or-1\or-\cosPIon3\or\cosPIon2\or + \sinPIon{10}\or\cosPIon3\or.62349\or\cosPIon4\or + .766044\or\cosPIon5\or.841254\or\cosPIon6% + \else1\xytrigerror@\cosTwoPIon{#1}\fi} +\xydef@\sinTwoPIon#1{\ifcase#1 0\or0\or0\or-\sinPIon3\or\sinPIon2\or + \cosPIon{10}\or\sinPIon3\or.781831\or\sinPIon4\or + .642788\or\sinPIon5\or.540641\or\sinPIon6% + \else0\xytrigerror@\sinTwoPIon{#1}\fi} +\xydef@\cosThreePIon#1{\ifcase#1 1\or-1\or0\or-1\or-\cosPIon4\or + -\cosPIon5\or\cosPIon2\or.222521\or\sinPIon8\or\cosPIon3\or + \sinTwoPIon5\or.654861\or\cosPIon4% + \else1\xytrigerror@\cosThreePIon{#1}\fi} +\xydef@\sinThreePIon#1{\ifcase#1 0\or0\or1\or0\or\sinPIon4\or + \sinTwoPIon5\or\sinPIon2\or.974928\or\cosPIon8\or\sinPIon3\or + \cosTwoPIon5\or.75575\or\sinPIon4% + \else0\xytrigerror@\sinThreePIon{#1}\fi} +\xydef@\cosFourPIon#1{\ifcase#1 1\or1\or1\or-\cosPIon3\or-1\or-\cosPIon5\or + \cosTwoPIon3\or-\cosThreePIon7\or0\or.173648\or\cosTwoPIon5\or + .415415\or\cosPIon3% + \else1\xytrigerror@\cosFourPIon{#1}\fi} +\xydef@\sinFourPIon#1{\ifcase#1 0\or0\or0\or-\sinPIon3\or0\or\sinPIon5\or + \sinTwoPIon3\or\sinThreePIon7\or1\or.984808\or\sinTwoPIon5\or + .909632\or\sinPIon3% + \else0\xytrigerror@\sinFourPIon{#1}\fi} +\xydef@\cosFivePIon#1{\ifcase#1 1\or-1\or0\or\cosPIon3\or-\cosPIon4\or + -1\or-\cosPIon6\or-\cosTwoPIon7\or-\cosThreePIon8\or-\cosFourPIon9\or + 0\or.142315\or\sinPIon{12}% + \else1\xytrigerror@\cosFivePIon{#1}\fi} +\xydef@\sinFivePIon#1{\ifcase#1 0\or0\or1\or-\sinPIon3\or-\sinPIon4\or + 0\or\sinPIon6\or\sinTwoPIon7\or\sinThreePIon8\or\sinFourPIon9\or1\or + .989821\or\cosPIon{12}% + \else0\xytrigerror@\sinFivePIon{#1}\fi} +\xydef@\xypoly@@@{\count@=\xypolyNUMSIDES@\relax + \ifx\xypolyALIGN@\empty + \ifnum\count@<\thr@@\relax\DN@{\xypolytoosmall@{\the\count@}}% + \else \advance\count@-\thr@@ + \ifcase\count@ \DN@{\xyPolygon@@@\xytriangle@@}% + \or \DN@{\xyPolygon@@@\xysquare@@}% + \or \DN@{\xyPolygon@@@\xypentagon@@}% + \or \DN@{\xyPolygon@@@\xyhexagon@@}% + \or \DN@{\xyPolygon@@@\xyheptagon@@}% + \or \DN@{\xyPolygon@@@\xyoctagon@@}% + \or \DN@{\xyPolygon@@@\xynonagon@@}% + \or \DN@{\xyPolygon@@@\xydecagon@@}% + \or \DN@{\xyPolygon@@@\xyundecagon@@}% + \or \DN@{\xyPolygon@@@\xydodecagon@@}% + \else \DN@{\xylargePolygon@{0}{\xypolyNUMSIDES@}}% + \fi\fi + \else + \DN@{\xylargePolygon@{\xypolyALIGN@}{\xypolyNUMSIDES@}}% + \fi \next@ \xypoly@@@x} +\xydef@\xypoly@@@x{\restore\xypoly@x} +\xydef@\xypolytoosmall@#1{\xyerror@{#1 sides is too few for a polygon}} +\xydef@\xyPolygon@@@#1{% + \toks@={\def\xypolyNUMSIDES@}% + \expandafter\addtotoks@\expandafter{\expandafter{\xypolyNUMSIDES@}\save}% + \ifx\empty\xypolySCALE@ \addtotoks@{\POS"}% + \else \addtotoks@{\POS;0;}% + \expandafter\addtotoks@\expandafter{\xypolySCALE@\relax\POS"}% + \fi + \expandafter\addtotoks@\expandafter{\xypolyPREFIX@0"\relax}% + \ifx\xypreSPOKES@\relax + \addtotoks@{#1{;}}% + \expandafter\addtotoks@\expandafter{\expandafter{\xypolyVERTEX@}}% + \expandafter\addtotoks@\expandafter{\expandafter{\xypolyPREFIX@}}% + \DN@##1\next@{\def\tmp@{**\dir##1}}% + \expandafter\next@\expandafter{\xypolySPOKES@}\next@ + \expandafter\addtotoks@\expandafter{\expandafter{\tmp@}}% + \else + \expandafter\DN@\expandafter{\expandafter\ar\xypreSPOKES@}% + \addtotoks@{#1}% + \expandafter\addtotoks@\expandafter{\expandafter{\next@}}% + \expandafter\addtotoks@\expandafter{\expandafter{\xypolyVERTEX@}}% + \expandafter\addtotoks@\expandafter{\expandafter{\xypolyPREFIX@}{}}% + \fi + \expandafter\addtotoks@\expandafter{\expandafter{\xypostSPOKES@}}% + \ifx\xypreSIDES@\relax + \addtotoks@{{;}}% + \DN@##1\next@{\def\tmp@{**\dir##1}}% + \expandafter\next@\expandafter{\xypolySIDES@}\next@ + \expandafter\addtotoks@\expandafter{\expandafter{\tmp@}}% + \else + \expandafter\DN@\expandafter{\expandafter\ar\xypreSIDES@}% + \expandafter\addtotoks@\expandafter{\expandafter{\next@}{}}% + \fi + \expandafter\addtotoks@\expandafter{\expandafter{\xypostSIDES@}}% + \ifx\xypolyALIGN@\empty + \ifnum\xypolyNUMSIDES@>12\addtotoks@{{0}}\fi + \else + \expandafter\addtotoks@\expandafter{\expandafter{\xypolyALIGN@}}% + \fi + \expandafter\DN@\expandafter{\expandafter\endgroup\the\toks@ }% + \next@} +\xydef@\xytriangle@@#1#2#3#4#5#6#7#8{% + \xy@@{\xypolynode@=\@ne}% + \POS#1"#30"+(0,1)#2="#31"#4#5\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#30"#1"#30"+(-\cosPIon6, -.5)#2="#32"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#31"#6"#32"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(\cosPIon6,-.5)#2="#33"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#32"#6"#33"#7#8\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#33"#6"#31"#7#8\relax } +\xydef@\xysquare@@#1#2#3#4#5#6#7#8{% + \xy@@{\xypolynode@=\@ne}% + \POS#1"#30"+(\halfroottwo,\halfroottwo)#2="#31"#4#5\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#30"#1"#30"+(-\halfroottwo,\halfroottwo)#2="#32"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#31"#6"#32"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\halfroottwo,\halfroottwo)#2="#33"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#32"#6"#33"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(-\halfroottwo,\halfroottwo)#2="#34"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#33"#6"#34"#7#8\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#34"#6"#31"#7#8\relax } +\xydef@\xypentagon@@#1#2#3#4#5#6#7#8{% + \xy@@{\xypolynode@=\@ne}% + \POS#1"#30"+(\cosPIon{10},\sinPIon{10})#2="#31"#4#5\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#30"#1"#30"+(0,1)#2="#32"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#31"#6"#32"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(-\cosPIon{10},\sinPIon{10})#2="#33"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#32"#6"#33"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\sinPIon5,\cosPIon5)#2="#34"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#33"#6"#34"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(\sinPIon5,-\cosPIon5)#2="#35"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#34"#6"#35"#7#8\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#35"#6"#31"#7#8\relax } +\xydef@\xyhexagon@@#1#2#3#4#5#6#7#8{% + \xy@@{\xypolynode@=\@ne}% + \POS#1"#30"+(1,0)#2="#31"#4#5\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#30"#1"#30"+(.5,\halfrootthree)#2="#32"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#31"#6"#32"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(-.5,\halfrootthree)#2="#33"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#32"#6"#33"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(1,0)#2="#34"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#33"#6"#34"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(.5,\halfrootthree)#2="#35"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#34"#6"#35"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(-.5,\halfrootthree)#2="#36"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#35"#6"#36"#7#8\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#36"#6"#31"#7#8\relax } +\xydef@\xyheptagon@@#1#2#3#4#5#6#7#8{% + \xy@@{\xypolynode@=\@ne}% + \POS#1"#30"+(\sinTwoPIon7,\cosTwoPIon7)#2="#31"#4#5\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#30"#1"#30"+(0,1)#2="#32"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#31"#6"#32"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(-\sinTwoPIon7,\cosTwoPIon7)#2="#33"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#32"#6"#33"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\sinThreePIon7,\cosThreePIon7)#2="#34"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#33"#6"#34"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\sinPIon7,\cosPIon7)#2="#35"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#34"#6"#35"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(\sinPIon7,-\cosPIon7)#2="#36"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#35"#6"#36"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(\sinThreePIon7,-\cosThreePIon7)#2="#37"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#36"#6"#37"#7#8\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#37"#6"#31"#7#8\relax } +\xydef@\xyoctagon@@#1#2#3#4#5#6#7#8{% + \xy@@{\xypolynode@=\@ne}% + \POS#1"#30"+(\cosPIon8,\sinPIon8)#2="#31"#4#5\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#30"#1"#30"+(\sinPIon8,\cosPIon8)#2="#32"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#31"#6"#32"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\sinPIon8,-\cosPIon8)#2="#33"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#32"#6"#33"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\cosPIon8,-\sinPIon8)#2="#34"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#33"#6"#34"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\cosPIon8,\sinPIon8)#2="#35"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#34"#6"#35"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\sinPIon8,\cosPIon8)#2="#36"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#35"#6"#36"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(\sinPIon8,-\cosPIon8)#2="#37"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#36"#6"#37"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(\cosPIon8,-\sinPIon8)#2="#38"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#37"#6"#38"#7#8\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#38"#6"#31"#7#8\relax } +\xydef@\xynonagon@@#1#2#3#4#5#6#7#8{% + \xy@@{\xypolynode@=\@ne}% + \POS#1"#30"+(\sinFourPIon9,\cosFourPIon9)#2="#31"#4#5\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#30"#1"#30"+(\sinTwoPIon9,\cosTwoPIon9)#2="#32"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#31"#6"#32"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(0,1)#2="#33"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#32"#6"#33"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(-\sinTwoPIon9,\cosTwoPIon9)#2="#34"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#33"#6"#34"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(-\sinFourPIon9,\cosFourPIon9)#2="#35"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#34"#6"#35"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\cosPIon6,\sinPIon6)#2="#36"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#35"#6"#36"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\sinPIon9,\cosPIon9)#2="#37"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#36"#6"#37"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(\sinPIon9,-\cosPIon9)#2="#38"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#37"#6"#38"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(\cosPIon6,-\sinPIon6)#2="#39"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#38"#6"#39"#7#8\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#39"#6"#31"#7#8\relax } +\xydef@\xydecagon@@#1#2#3#4#5#6#7#8{% + \xy@@{\xypolynode@=\@ne}% + \POS#1"#30"+(1,0)#2="#31"#4#5\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#30"#1"#30"+(\cosPIon5,\sinPIon5)#2="#32"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#31"#6"#32"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(\sinPIon{10},\cosPIon{10})#2="#33"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#32"#6"#33"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\sinPIon{10},-\cosPIon{10})#2="#34"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#33"#6"#34"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\cosPIon5,-\sinPIon5)#2="#35"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#34"#6"#35"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(1,0)#2="#36"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#35"#6"#36"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\cosPIon5,\sinPIon5)#2="#37"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#36"#6"#37"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\sinPIon{10},\cosPIon{10})#2="#38"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#37"#6"#38"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(\sinPIon{10},-\cosPIon{10})#2="#39"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#38"#6"#39"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(\cosPIon5,-\sinPIon5)#2="#310"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#39"#6"#310"#7#8\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#310"#6"#31"#7#8\relax } +\xydef@\xyundecagon@@#1#2#3#4#5#6#7#8{% + \xy@@{\xypolynode@=\@ne}% + \POS#1"#30"+(\sinFourPIon{11},\cosFourPIon{11})#2="#31"#4#5\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#30"#1"#30"+(\sinTwoPIon{11},\cosTwoPIon{11})#2="#32"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#31"#6"#32"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(0,1)#2="#33"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#32"#6"#33"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(-\sinTwoPIon{11},\cosTwoPIon{11})#2="#34"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#33"#6"#34"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(-\sinFourPIon{11},\cosFourPIon{11})#2="#35"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#34"#6"#35"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\sinFivePIon{11},\cosFivePIon{11})#2="#36"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#35"#6"#36"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\sinThreePIon{11},\cosThreePIon{11})#2="#37"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#36"#6"#37"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\sinPIon{11},\cosPIon{11})#2="#38"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#37"#6"#38"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(\sinPIon{11},-\cosPIon{11})#2="#39"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#38"#6"#39"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(\sinThreePIon{11},-\cosThreePIon{11})#2="#310"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#39"#6"#310"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(\sinFivePIon{11},-\cosFivePIon{11})#2="#311"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#310"#6"#311"#7#8\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#311"#6"#31"#7#8\relax } +\xydef@\xydodecagon@@#1#2#3#4#5#6#7#8{% + \xy@@{\xypolynode@=\@ne}% + \POS#1"#30"+(\cosPIon{12},\sinPIon{12})#2="#31"#4#5\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#30"#1"#30"+(\halfroottwo,\halfroottwo)#2="#32"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#31"#6"#32"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(\sinPIon{12},\cosPIon{12})#2="#33"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#32"#6"#33"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\sinPIon{12},-\cosPIon{12})#2="#34"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#33"#6"#34"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\halfroottwo,-\halfroottwo)#2="#35"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#34"#6"#35"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\cosPIon{12},-\sinPIon{12})#2="#36"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#35"#6"#36"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\cosPIon{12},\sinPIon{12})#2="#37"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#36"#6"#37"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\halfroottwo,\halfroottwo)#2="#38"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#37"#6"#38"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"-(\sinPIon{12},\cosPIon{12})#2="#39"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#38"#6"#39"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(\sinPIon{12},-\cosPIon{12})#2="#310"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#39"#6"#310"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(\halfroottwo,-\halfroottwo)#2="#311"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#310"#6"#311"#7#8\relax + \xy@@{\advance\xypolynode@\tw@}% + \POS"#30"#1"#30"+(\cosPIon{12},-\sinPIon{12})#2="#312"#4#5\relax + \xy@@{\advance\xypolynode@\m@ne}% + \POS"#311"#6"#312"#7#8\relax + \xy@@{\advance\xypolynode@\@ne}% + \POS"#312"#6"#31"#7#8\relax } +\xydef@\xylargePolygon@#1#2{% + \dimen@=#1\p@ + \xyPolygon@@@\xypolygon@@} +\xydef@\xypolyrepeat@{\fi} +\xydef@\xypolybody@{} +\xydef@\xypolyiterate@{\xypolybody@\expandafter\xypolyiterate@\else\fi} +\xydef@\xypolyloop@#1\xypolyrepeat@{\def\xypolybody@{#1}\xypolyiterate@} +\xydef@\xypolygon@@#1#2#3#4#5#6#7#8#9{\save + \vfromcartesianangle@{#9}\edef\next@{\the\X@c,\the\Y@c\addGT@\empty}% + \xy@@{\xypolynode@=\@ne}% + \toks@={\POS#1"#30"+}% + \expandafter\expandafter\expandafter\addtotoks@\expandafter + \expandafter\expandafter{\addLT@\empty}% + \expandafter\addtotoks@\expandafter{\next@#2="#31"#4#5\relax}% + \xy@@\dontleave@ \the\toks@ + \xypolyloop@ + \dimen@=360\p@ \count@@=\xypolyNUMSIDES@\relax \advance\dimen@ .5\count@@ + \divide\dimen@ \xypolyNUMSIDES@ \relax + \multiply\dimen@\xypolynode@ \relax \advance\dimen@ #9\p@ + \edef\tmp@{% + \noexpand\vfromcartesianangle@{\expandafter\removePT@\the\dimen@}}% + \tmp@ \edef\next@{\the\X@c,\the\Y@c\addGT@\empty}% + \xy@@{\advance\xypolynode@\@ne}\count@=\xypolynode@ + \toks@={\POS"#30"#1"#30"+}\edef\nextii@{\the\count@}% + \expandafter\expandafter\expandafter\addtotoks@\expandafter + \expandafter\expandafter{\addLT@\space}% + \expandafter\addtotoks@\expandafter{\next@#2="#3}% + \expandafter\addtotoks@\expandafter{\nextii@"#4#5\relax}% + \the\toks@ + \count@=\xypolynode@ \xy@@{\advance\xypolynode@\m@ne}% + \toks@={\POS"#3}\expandafter\addtotoks@\expandafter{\the\xypolynode@"#6"#3}% + \expandafter\addtotoks@\expandafter{\the\count@"#7#8\relax}% + \the\toks@ + \xy@@{\advance\xypolynode@\@ne}\count@=\xypolyNUMSIDES@ \relax + \ifnum\xypolynode@<\count@ \relax \xypolyrepeat@ + \toks@={\POS"#3}% + \expandafter\addtotoks@\expandafter{\xypolyNUMSIDES@"#6"#31"#7#8\relax}% + \the\toks@ \restore } +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-c.tex b/macros/generic/diagrams/xypic/texinputs/xyps-c.tex new file mode 100644 index 0000000000..e471ede76d --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyps-c.tex @@ -0,0 +1,69 @@ +%% xyps-c.tex from $Id: xyps-c.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Colour extension'' PostScript backend support. +%% Copyright (c) 1993-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +%% As a special exception, you may use this file and all files derived +%% from it without restrictions. This special exception was added with +%% version 3.7 of Xy-pic. +%% +\expandafter\ifx\csname xyps-cloaded\endcsname\empty + \message{not reloaded}\endinput \fi +\expandafter\let\csname xyps-cloaded\endcsname=\empty \xycatcodes +\expandafter\ifx \csname xyps-sloaded\endcsname\empty\else + \xyinputorelse@{xyps-s}{\xyerror@{Could not load xyps-s}{}}% + \xycatcodes\fi +\xydef@\UsePScolor{\installPScolor@} +\xydef@\NoPScolor{\UnloadColor@} +\xydef@\installPScolor@{\installPSstyle@ + \let\xymath@=\xyPSmath@ \let\xynomath@=\xyPSnomath@ + \let\checkxyPScolor@=\checkxyPScolor@@ + \let\xycolor@@=\xyPScolor@@ + \xystandardcolors@ + \xyuncatcodes } +\xydef@\xyPSmath@{\hbox\bgroup\dimen@=.55ex \checkxyPScolor@ \xyinside@} +\xydef@\xyPSnomath@{\hbox\bgroup\dimen@=\z@ \checkxyPScolor@ \xyinside@} +\xydef@\checkxyPScolor@@{\xycolor@raw@@{}\let\checkxyPScolor@=\relax} +\xylet@\checkxyPScolor@=\relax +\xydef@\xyPSnewcolor@#1#2#3#4#5{% + \expandafter\DN@\expandafter{\csname shape [#1]\endcsname}% + \DNii@{\relax}\ifx\next@\nextii@\newxycolor{#1}{}\relax\fi + \DNii@{#4}\ifx\nextii@\empty + \expandafter\DNii@\expandafter{\csname xyPSshape@#1@\endcsname}% + \expandafter\def\nextii@{\xyPScolor@{#2 #3}}\else + \expandafter\DNii@\expandafter{\csname xyPSshape@#1@\endcsname}% + \expandafter\def\nextii@{\xyPScolor@{#4}}\fi + \ifx\nextii@\empty\expandafter\def\next@{\xyPSnotimplemented@@`#1'@@}% + \else + \edef\tmp@{\noexpand\let\expandafter\noexpand\next@ + \expandafter\noexpand\nextii@}\expandafter\tmp@\fi } +\xydef@\xyPScolor@{\ifPSspecials@\expandafter\xyPScolor@@ + \else\expandafter\eat@\fi} +\xydef@\xyPScolor@@#1{\bgroup \checkXyStyle@ + \def\preStyle@@{\expandafter\addtostyletoks@\expandafter{\xyPSpre@}}% + \def\postStyle@@{\expandafter\addtostyletoks@\expandafter{\xyPSpost@}}% + \let\modPSboxz@=\modXYstyle@ \xyPS@color@@{#1}% + \toks@={\egroup\let\xy@style@=\relax \def\Drop@@}% + \expandafter\addtotoks@\expandafter{\expandafter{\Drop@@}\def\Connect@@}% + \expandafter\addtotoks@\expandafter{\expandafter{\Connect@@}}% + \the\toks@ } +\xydef@\xyPS@color@@#1{\xyPSsplitPS@{{#1}cc}{}} +\xydef@\xycolor@raw@@#1{\PSraw@@{xyc}} +\endinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-col.tex b/macros/generic/diagrams/xypic/texinputs/xyps-col.tex new file mode 100644 index 0000000000..83413ae77e --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyps-col.tex @@ -0,0 +1,97 @@ +%% xyps-col.tex from $Id: xyps-col.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Crayola colour names'' PostScript colour support. +%% Copyright (c) 1995-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +%% As a special exception, you may use this file and all files derived +%% from it without restrictions. This special exception was added with +%% version 3.7 of Xy-pic. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyrequire{color}\xycatcodes +\newxycolor@{GreenYellow}{0.15 0 0.69 0}{cmyk}{}{}% +\newxycolor@{Yellow}{0 0 1. 0}{cmyk}{}{}% +\newxycolor@{Goldenrod}{0 0.10 0.84 0}{cmyk}{}{}% +\newxycolor@{Dandelion}{0 0.29 0.84 0}{cmyk}{}{}% +\newxycolor@{Apricot}{0 0.32 0.52 0}{cmyk}{}{}% +\newxycolor@{Peach}{0 0.50 0.70 0}{cmyk}{}{}% +\newxycolor@{Melon}{0 0.46 0.50 0}{cmyk}{}{}% +\newxycolor@{YellowOrange}{0 0.42 1. 0}{cmyk}{}{}% +\newxycolor@{Orange}{0 0.61. 0.87 0}{cmyk}{}{}% +\newxycolor@{BurntOrange}{0 0.51 1. 0}{cmyk}{}{}% +\newxycolor@{Bittersweet}{0 0.75 1. 0.24}{cmyk}{}{}% +\newxycolor@{RedOrange}{0 0.77 0.87 0}{cmyk}{}{}% +\newxycolor@{Mahogany}{0 0.85 0.87 0.35}{cmyk}{}{}% +\newxycolor@{Maroon}{0 0.87 0.68 0.32}{cmyk}{}{}% +\newxycolor@{BrickRed}{0 0.89 0.94 0.28}{cmyk}{}{}% +\newxycolor@{Red}{0 1. 1. 0}{cmyk}{}{}% +\newxycolor@{OrangeRed}{0 1. 0.50 0}{cmyk}{}{}% +\newxycolor@{RubineRed}{0 1. 0.13 0}{cmyk}{}{}% +\newxycolor@{WildStrawberry}{0 0.96 0.39 0}{cmyk}{}{}% +\newxycolor@{Salmon}{0 0.53 0.38 0}{cmyk}{}{}% +\newxycolor@{CarnationPink}{0 0.63 0 0}{cmyk}{}{}% +\newxycolor@{Magenta}{0 1. 0 0}{cmyk}{}{}% +\newxycolor@{VioletRed}{0 0.81 0 0}{cmyk}{}{}% +\newxycolor@{Rhodamine}{0 0.82 0 0}{cmyk}{}{}% +\newxycolor@{Mulberry}{0.34 0.90 0 0.02}{cmyk}{}{}% +\newxycolor@{RedViolet}{0.07 0.90 0 0.34}{cmyk}{}{}% +\newxycolor@{Fuchsia}{0.47 0.91 0 0.08}{cmyk}{}{}% +\newxycolor@{Lavender}{0 0.48 0 0}{cmyk}{}{}% +\newxycolor@{Thistle}{0.12 0.59 0 0}{cmyk}{}{}% +\newxycolor@{Orchid}{0.32 0.64 0 0}{cmyk}{}{}% +\newxycolor@{DarkOrchid}{0.40 0.80 0.20 0}{cmyk}{}{}% +\newxycolor@{Purple}{0.45 0.86 0 0}{cmyk}{}{}% +\newxycolor@{Plum}{0.50 1. 0 0}{cmyk}{}{}% +\newxycolor@{Violet}{0.79 0.88 0 0}{cmyk}{}{}% +\newxycolor@{RoyalPurple}{0.75 0.90 0 0}{cmyk}{}{}% +\newxycolor@{BlueViolet}{0.86 0.91 0 0.04}{cmyk}{}{}% +\newxycolor@{Periwinkle}{0.57 0.55 0 0}{cmyk}{}{}% +\newxycolor@{CadetBlue}{0.62 0.57 0.23 0}{cmyk}{}{}% +\newxycolor@{CornflowerBlue}{0.65 0.13 0 0}{cmyk}{}{}% +\newxycolor@{MidnightBlue}{0.98 0.13 0 0.43}{cmyk}{}{}% +\newxycolor@{NavyBlue}{0.94 0.54 0 0}{cmyk}{}{}% +\newxycolor@{RoyalBlue}{1. 0.50 0 0}{cmyk}{}{}% +\newxycolor@{Blue}{1. 1. 0 0}{cmyk}{}{}% +\newxycolor@{Cerulean}{0.94 0.11 0 0}{cmyk}{}{}% +\newxycolor@{Cyan}{1. 0 0 0}{cmyk}{}{}% +\newxycolor@{ProcessBlue}{0.96 0 0 0}{cmyk}{}{}% +\newxycolor@{SkyBlue}{0.62 0 0.12 0}{cmyk}{}{}% +\newxycolor@{Turquoise}{0.85 0 0.20 0}{cmyk}{}{}% +\newxycolor@{TealBlue}{0.86 0 0.34 0.02}{cmyk}{}{}% +\newxycolor@{Aquamarine}{0.82 0 0.30 0}{cmyk}{}{}% +\newxycolor@{BlueGreen}{0.85 0 0.33 0}{cmyk}{}{}% +\newxycolor@{Emerald}{1. 0 0.50 0}{cmyk}{}{}% +\newxycolor@{JungleGreen}{0.99 0 0.52 0}{cmyk}{}{}% +\newxycolor@{SeaGreen}{0.69 0 0.50 0}{cmyk}{}{}% +\newxycolor@{Green}{1. 0 1. 0}{cmyk}{}{}% +\newxycolor@{ForestGreen}{0.91 0 0.88 0.12}{cmyk}{}{}% +\newxycolor@{PineGreen}{0.92 0 0.59 0.25}{cmyk}{}{}% +\newxycolor@{LimeGreen}{0.50 0 1. 0}{cmyk}{}{}% +\newxycolor@{YellowGreen}{0.44 0 0.74 0}{cmyk}{}{}% +\newxycolor@{SpringGreen}{0.26 0 0.76 0}{cmyk}{}{}% +\newxycolor@{OliveGreen}{0.64 0 0.95 0.40}{cmyk}{}{}% +\newxycolor@{RawSienna}{0 0.72 1. 0.45}{cmyk}{}{}% +\newxycolor@{Sepia}{0 0.83 1. 0.70}{cmyk}{}{}% +\newxycolor@{Brown}{0 0.81 1. 0.60}{cmyk}{}{}% +\newxycolor@{Tan}{0.14 0.42 0.56 0}{cmyk}{}{}% +\newxycolor@{Gray}{0 0 0 0.50}{cmyk}{}{}% +\newxycolor@{Black}{0 0 0 1.}{cmyk}{}{}% +\newxycolor@{White}{0 0 0 0}{cmyk}{}{}% +\endinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-f.tex b/macros/generic/diagrams/xypic/texinputs/xyps-f.tex new file mode 100644 index 0000000000..83b5766591 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyps-f.tex @@ -0,0 +1,127 @@ +%% xyps-f.tex from $Id: xyps-f.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Frame extension'' PostScript backend support. +%% Copyright (c) 1995-1997 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +%% As a special exception, you may use this file and all files derived +%% from it without restrictions. This special exception was added with +%% version 3.7 of Xy-pic. +%% +\expandafter\ifx\csname xyps-floaded\endcsname\empty + \message{not reloaded}\endinput \fi +\expandafter\let\csname xyps-floaded\endcsname=\empty \xycatcodes +\xydef@\installPSframes@{% + \let\framed@body@@=\xyPSframed@body@ + \let\circled@x@@=\xyPScircled@x@ + \let\ellipsed@x@@=\xyPSellipsed@x@ + \installPSfills@ + \xyuncatcodes} +\xydef@\UsePSframes{\installPSframes@} +\xydef@\NoPSframes{\UnloadFrames@} +\xydef@\xyPSframed@body@{\DN@{\framed@body@}% + \ifx\framehfill\frm@solidh@@ + \DN@{\xyPSframed@oval@\xyPSoval@Special}% + \else\ifdim\R@=\z@\else + \ifx\framehfill\frm@dashh@@ + \DN@{\xyPSframed@oval@\xyPSdashoval@Special}% + \else\ifx\framehfill\frm@doth@@ + \DN@{\xyPSframed@oval@\xyPSdotoval@Special}% + \fi\fi + \fi\fi \next@ } +\xydef@\xyPSframed@oval@#1{\vglue\U@c + \hbox{\hglue\L@c\xypsoval@#1\hglue\R@c}\vglue\D@c} +\xydef@\xyPScircled@x@{\DN@{\xyPScircled@x@@\xyPScirc@Special}% + \ifx\framehfill\frm@doth@@ + \DN@{\xyPScircled@x@@\xyPSdotcirc@Special}% + \else\ifx\framehfill\frm@dashh@@ + \DN@{\xyPScircled@x@@\xyPSdashcirc@Special}% + \fi\fi \next@ } +\xydef@\xyPScircled@x@@#1{\vglue2\R@ + \hbox{\hglue2\R@\xypscircle@#1\hglue2\R@}% + \vglue2\R@} +\xydef@\xyPSellipsed@x@#1#2{% + \DN@{\xyPSellipsed@x@@\xyPScirc@Special}% + \ifx\framehfill\frm@doth@@ + \DN@{\xyPSellipsed@x@@\xyPSdotcirc@Special}% + \else\ifx\framehfill\frm@dashh@@ + \DN@{\xyPSellipsed@x@@\xyPSdashcirc@Special}% + \fi\fi \next@{#1}{#2}} +\xydef@\xyPSellipsed@x@@#1#2#3{\vglue #3\vglue #3\relax + \hbox{\L@c = #2\relax \R@c=\L@c \D@c = #3\relax \U@c=\D@c + \hglue#2\hglue#2\relax\xypsellipse@#1\hglue#2\hglue#2\relax}% + \vglue #3\vglue #3\relax} +\xydef@\xyPSdashhfill@{{\SemiDirectionChar=95 \Direction=3072 \xyPSdash@}} +\xydef@\xyPSdashvfill@{{\SemiDirection=31 \Direction=1023 \xyPSdash@}} +\xydef@\xypsoval@#1{% + \dimen@=\L@c \advance\dimen@\R@c + \dimen@ii=\U@c \advance\dimen@ii\D@c + \ifdim\dimen@ii<\dimen@ \relax \dimen@=\dimen@ii\fi \divide\dimen@\tw@ + \ifdim\R@>\dimen@ \relax \R@=\dimen@ \fi + \D@c=-\D@c \L@c=-\L@c + \edef\tmp@{\expandafter\removePT@\the\R@ + \space\expandafter\removePT@\the\R@c + \space\expandafter\removePT@\the\D@c + \space\expandafter\removePT@\the\L@c + \space\expandafter\removePT@\the\U@c }% + \expandafter#1\expandafter{\tmp@}} +\xydef@\xypscircle@#1{\dimen@=\R@ + \edef\tmp@{\expandafter\removePT@\the\dimen@}% + \expandafter#1\expandafter{\tmp@}} +\xydef@\xypsellipse@#1{\edef\tmp@{% + \expandafter\removePT@\the\U@c \space + \expandafter\removePT@\the\D@c \space + \expandafter\removePT@\the\L@c \space + \expandafter\removePT@\the\R@c }% + \expandafter#1\expandafter{\tmp@}} +\xydef@\xyPSoval@Special#1{\PSmacro@{#1 ov}} +\xydef@\xyPScirc@Special#1{\PSmacro@{#1 ox}} +\xydef@\xyPSdotcirc@Special#1{\PSmacro@{#1 ot}} +\xydef@\xyPSdashcirc@Special#1{\PSmacro@{#1 od}} +\xydef@\xyPSdotoval@Special#1{\PSmacro@{#1 vt}} +\xydef@\xyPSdashoval@Special#1{\PSmacro@{#1 vd}} +\xydef@\xyPSfilledRegion#1#2{\setboxz@h{\lower\D@c\vbox{% + \vglue\U@c\hbox{#1#2\empty\hglue\L@c\hglue\R@c}\vglue\D@c}}% + \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@} +\xydef@\filledRectangle@PS{% + \xyPSfilledRegion{\xypsoval@\xyPSfilloval@Special}} +\xydef@\filledCircle@PS#1{{\R@c=\R@ \L@c=\R@ \U@c=\R@ \D@c=\R@ + \xyPSfilledRegion{\xypscircle@\xyPSfillcirc@Special}#1}} +\xydef@\filledEllipse@PS{% + \xyPSfilledRegion{\xypsellipse@\xyPSfillellipse@Special}} +\xydef@\filledOval@PS{% + \xyPSfilledRegion{\xypsoval@\xyPSfilloval@Special}} +\xydef@\frame@emph@PS#1{\filled@{#1}\relax} +\xydef@\installPSfills@{% + \let\frame@emph@@=\frame@emph@PS + \let\filledRectangle@@=\filledRectangle@PS + \let\filledOval@@=\filledOval@PS + \let\filledCircle@@=\filledCircle@PS + \let\filledEllipse@@=\filledEllipse@PS +} +\xydef@\xyPSfilloval@Special#1#2{% + \ifx#2\relax\PSmacro@{#1 sfo}% + \else\PSmacro@{#1 fo}\fi} +\xydef@\xyPSfillcirc@Special#1#2{% + \ifx#2\relax\PSmacro@{#1 sfc}% + \else\PSmacro@{#1 fc}\fi} +\xydef@\xyPSfillellipse@Special#1#2{% + \ifx#2\relax\PSmacro@{#1 sfe}% + \else\PSmacro@{#1 fe}\fi} +\endinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-l.tex b/macros/generic/diagrams/xypic/texinputs/xyps-l.tex new file mode 100644 index 0000000000..4220082f6d --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyps-l.tex @@ -0,0 +1,68 @@ +%% xyps-l.tex from $Id: xyps-l.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Line extension'' PostScript backend support. +%% Copyright (c) 1993-1997 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +%% As a special exception, you may use this file and all files derived +%% from it without restrictions. This special exception was added with +%% version 3.7 of Xy-pic. +%% +\expandafter\ifx\csname xyps-lloaded\endcsname\empty + \message{not reloaded}\endinput \fi +\expandafter\let\csname xyps-lloaded\endcsname=\empty \xycatcodes +\expandafter\ifx\csname xyps-sloaded\endcsname\empty\else + \xyinputorelse@{xyps-s}{\xyerror@{Could not load xyps-s}{}}% + \xycatcodes\fi +\xydef@\installPSline@{\installPSstyle@ + \installPSlinestyles@ \installPSpolylines@ } +\xydef@\UsePSlines{\installPSline@} +\xydef@\NoPSlines{\UnloadLine@\relax} +\xydef@\xyPSlineSpecial@#1{\addtostyletoks@{ #1 lw}} +\xydef@\xyPScapSpecial@#1{\addtostyletoks@{ #1 lc}} +\xydef@\xyPSjoinSpecial@#1{\addtostyletoks@{ #1 lj}} +\xydef@\xyPSmiterSpecial@#1{\addtostyletoks@{ #1 ml}} +\xydef@\installPSlinestyles@{% + \let\xylinewidth@@=\xylinewidth@ + \let\transxyline@@=\transxyline@ + \let\xylineSpecial@@=\xyPSlineSpecial@ + \let\resetxyline@@=\resetxyline@i + \let\xy@linecap@@=\xy@linecap@ + \let\xycapSpecial@@=\xyPScapSpecial@ + \let\resetxylinecap@@=\resetxylinecap@i + \let\xy@linejoin@@=\xy@linejoin@ + \let\xyjoinSpecial@@=\xyPSjoinSpecial@ + \let\resetxylinejoin@@=\resetxylinejoin@i + \let\xy@linemiter@@=\xy@linemiter@ + \let\xymiterSpecial@@=\xyPSmiterSpecial@ + \let\resetxylinemiter@@=\resetxylinemiter@i +} +\xydef@\xypolylinePS@Special#1{\PSmacro@{#1 pl}} +\xydef@\xypolydotPS@Special#1{\PSmacro@{#1 pt}} +\xydef@\xypolydashPS@Special#1{\PSmacro@{#1 pd}} +\xydef@\xypolyfillPS@Special#1{\PSmacro@{#1 pf}} +\xydef@\xypolyeofillPS@Special#1{\PSmacro@{#1 pe}} +\xydef@\installPSpolylines@{% + \let\xypolyline@Special=\xypolylinePS@Special + \let\xypolydot@Special=\xypolydotPS@Special + \let\xypolydash@Special=\xypolydashPS@Special + \let\xypolyfill@Special=\xypolyfillPS@Special + \let\xypolyeofill@Special=\xypolyeofillPS@Special + \let\xy@polystyle@@=\xy@polystyle@ } +\endinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-pro.tex b/macros/generic/diagrams/xypic/texinputs/xyps-pro.tex new file mode 100644 index 0000000000..17aa385d2f --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyps-pro.tex @@ -0,0 +1,173 @@ +%% xyps-pro.tex from $Id: xyps-pro.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``PostScript Prolog'' for PostScript support. +%% Copyright (c) 1993-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +%% As a special exception, you may use this file and all files derived +%% from it without restrictions. This special exception was added with +%% version 3.7 of Xy-pic. +\begingroup \xycatcodes% + \count@=\xydashl@\relax \count@@=\xydashw@\relax% + \let\firstPS@@=\relax% + \xyPSobeylines@@% +\PSspecialdict@@{% +/XYdict where not{250 dict /XYdict exch def + /xy{mark exch XYdict begin countdictstack /xylevel exch def + xyopen xycolor mark xypatt xypattern stopped xyclose end + cleartomark}def /xyg{gsave xy}def + /xyf{currentfont exch xy grestore setfont}def + /xycc{{xychgcol}xy}def /xyc{XYdict begin xycolstore end}def + /xyx{/xyYpos exch def /xyXpos exch def}def + /xyp{currentpoint xyx}def + /xyd{setupDirection XYdirection 2 mul}def + /xyct{currentpoint xyt 2 copy 6 2 roll}def + /xyt{xyXpos xyYpos 2 copy translate}def /xyr{neg rotate xynt}def + /xyrs{neg rotate 3 -1 roll sub neg 3 1 roll sub exch moveto xynt}def + /xynt{neg exch neg exch translate}def /xys{scale xynt}def + /xyss{scale 3 -1 roll sub neg 3 1 roll sub exch moveto xynt}def + /xyi{0 0 transform grestore gsave itransform}def + }if}% +\tmp@false\def\do#1{\DN@{#1}\ifx\next@\nextii@\tmp@true\fi}% +\DNii@{17oztex}\xydriversselected@@\iftmp@\PSspecialdict@@{% + /@boxy{prespecialVM restore grestore}def + /@eoxy{gsave /prespecialVM save def}def + }% +\else \DNii@{oztex}\xydriversselected@@\iftmp@\PSspecialdict@@{% + /@oxy{prespecialVM restore grestore}def + /@oxy{gsave /prespecialVM save def}def + }\fi\fi% +\PSdict@@{/XYdict where pop begin XYdict begin}% +\PSdict@@{% + /xyopen{currentdict /XYddict known{XYddict null eq{} + {XYddict begin xyopen}ifelse}if}def + /xyclose{countdictstack -1 xylevel 1 add{pop end}for}def + /xychgcol{/xycolor exch def}def /xysetcol{xypush xychgcol}def +}% +\PSdict@@{% + /xypush{16 dict /XYddict exch def XYddict begin}def + /undef where + {pop /xypop{countdictstack xylevel eq{}{end}ifelse + currentdict /XYddict undef}def} + {/xypop{countdictstack xylevel eq{}{end}ifelse + /XYddict null def}def}ifelse + /pu /xypush load def /pp /xypop load def}% +\PSdict@@{% + /xypspt{72 72.27 div dup scale}bind def /pscorrect{.85 mul}bind def + /gstartxy{gsave xypspt xywidth xycap xyjoin xymiter newpath 0 0 moveto}def + /xypath{gstartxy rmoveto counttomark 2 idiv -1 1{pop lineto}for}def + /xystroke{stroke grestore}bind def + /xyfill{closepath fill grestore}bind def + /xystfil{closepath gsave fill grestore 0 setgray + 0 setlinewidth xystroke}bind def + /xyeofill{closepath eofill grestore}bind def +}% +\PSdict@@{% + /xypolyline{xypath xystroke}def /xypolyfill{xypath xyfill}def + /xydotsep{/@ currentlinewidth 2 mul def}def + /xypolydot{xypath xydotsep [xydt @] 0 setdash xystroke}def + /xypolydash{xypath xydotsep [@ @] 0 setdash xystroke}def + /xypolyeofill{xypath xyeofill}def /pe /xypolyeofill load def + /pl /xypolyline load def /pf /xypolyfill load def + /pt /xypolydot load def /pd /xypolydash load def }% +\PSdict@@{% + /arc4pop{arcto 4{pop}repeat}bind def + /xyoval{gstartxy oval closepath xystroke}def + /xycircle{gstartxy circle xystroke}def + /circle{dup 0 moveto 0 0 3 -1 roll 0 360 arc}def + /oval{newpath 2 copy exch 5 index add 2 div exch 3 copy 10 3 roll + moveto 1 index dup 5 1 roll 3 index 7 index arc4pop + dup dup 4 1 roll 4 index exch 6 index arc4pop + 1 index dup 8 1 roll 4 index 4 index arc4pop + arc4pop closepath}def + /xyellipse{gstartxy counttomark 1 gt{squarify pop pop 1}if + circle xystroke}def + /ov /xyoval load def /ox /xyellipse load def }% +\PSdict@@{% + /dotit{dup currentlinewidth 6 mul div round div + /@ exch def [xydt @] 0 setdash}def + /elldash{dup 4 -1 roll 10 exch div dashit}def + /ovdash{dup 10 dashit}def + /dashit{div round 2 mul div /@ exch def [@ @] 0 setdash}def + /dotcirc{gstartxy cirlen dotit circle xystroke}def + /dashcirc{gstartxy cirlen dashit circle xystroke}def + /dotoval{gstartxy 5 copy ovlen dotit oval xystroke}def + /dashoval{gstartxy 5 copy ovlen ovdash oval xystroke}def + /cirlen{dup 6.283185 mul}bind def + /ovlen{3 -1 roll sub 3 1 roll sub add exch 1.716815 mul sub}def + /dotellipse{gstartxy counttomark 1 gt{squarify pop pop 1}if + cirlen dotit circle closepath xystroke}def + /dashellipse{gstartxy counttomark 1 gt{squarify add 2 div 1} + {1 exch 1 exch}ifelse cirlen elldash circle xystroke}def + /ot /dotellipse load def /od /dashellipse load def + /vt /dotoval load def /vd /dashoval load def }% +\PSdict@@{% + /filloval{gstartxy oval xyfill}def + /stfiloval{gstartxy oval xystfil}def + /fillcircle{gstartxy circle xyfill}def + /stfilcircle{gstartxy circle xystfil}def + /fillellipse{gstartxy squarify pop pop 1 circle xyfill}def + /stfilellipse{gstartxy squarify pop pop 1 circle xystfil}def + /squarify{4 copy sub 2 div 3 1 roll sub 2 div translate + add 2 div 3 1 roll add 2 div 2 copy scale + 2 copy add 2 div currentlinewidth exch div setlinewidth + newpath}def + /fe /fillellipse load def /sfe /stfilellipse load def + /fo /filloval load def /sfo /stfiloval load def + /fc /fillcircle load def /sfc /stfilcircle load def }% +\PSdict@@{% + /xywidth{.4 pscorrect setlinewidth}bind def + /xydash{[] 0 setdash}bind def /xycap{1 setlinecap}bind def + /xyjoin{1 setlinejoin}bind def /xymiter{10 setmiterlimit}bind def +}% +\PSdict@@{% + /cc{dup exec xychgcol}def + /lw{dup setlinewidth /@l exch def + /xywidth{@l setlinewidth}bind def}def + /lc{dup setlinecap /@c exch def + /xycap{@c setlinecap}bind def}def + /lj{dup setlinejoin /@j exch def + /xyjoin{@j setlinejoin}bind def}def + /ml{dup setmitrelimit /@m exch def + /xymiter{@m setmitrelimit}bind def}def +}% +\PSdict@@{% + /setupDirection{dup -2048 lt{3072 add neg 1024 exch} + {dup 0 lt{1024 add neg -1024}{dup 2048 lt{1024 sub -1024 exch} + {3072 sub 1024}ifelse}ifelse}ifelse atan + dup 180 gt{360 sub}if dup /XYdirection exch def rotate}def + }% +\PSdict@@{% + userdict begin + /gray{setgray}bind def /gray@{setgray}bind def + /rgb{setrgbcolor}bind def /rgb@{setrgbcolor}bind def + /hsb{sethsbcolor}bind def /hsb@{sethsbcolor}bind def + /setcmykcolor where{pop}{/setcmykcolor{dup 3 1 roll dup 5 1 roll + exch sub 1 add 5 1 roll exch sub 1 add 4 1 roll + exch sub 1 add 3 1 roll setrgbcolor}bind def}ifelse + /cmyk{setcmykcolor}bind def /cmyk@{setcmykcolor}bind def + /sethalftone where{/sethalftone load /tone exch def}if + /xycolarray 3 array def /xycolstore{currentrgbcolor 2 -1 0 + {exch xycolarray 3 1 roll put}for}def xycolstore + /xycolor{0 1 2{xycolarray exch get}for setrgbcolor}def + /xypatt{}def /xypattern{cleartomark}bind def + end}% +\PSdict@@{end end}% +\endgroup% +\endinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-ps.tex b/macros/generic/diagrams/xypic/texinputs/xyps-ps.tex new file mode 100644 index 0000000000..5fa607c10e --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyps-ps.tex @@ -0,0 +1,280 @@ +%% xyps-ps.tex from $Id: xyps-ps.doc,v 3.12 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``PS-PS'' PostScript support. +%% Copyright (c) 1993-1997 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +%% As a special exception, you may use this file and all files derived +%% from it without restrictions. This special exception was added with +%% version 3.7 of Xy-pic. +%% +\expandafter\ifx\csname xyps-psloaded\endcsname\empty + \message{not reloaded}\endinput \fi +\expandafter\let\csname xyps-psloaded\endcsname=\empty \xycatcodes +\xylet@\PSmacro@@=\eat@ +\xylet@\PSdict@@=\eat@ +\xylet@\PSspecial@@=\eat@ +\xylet@\PSread@@=\eat@ +\xylet@\PSinclude@@=\eat@ +\xylet@\PSraw@@=\eat@ +\xylet@\xyPSobeylines@@=\relax +\xylet@\PSspecialdict@@=\eat@ +\xydef@\UnloadPSps@{% + \let\PSmacro@@=\eat@ + \let\PSdict@@=\eat@ + \let\PSspecial@@=\eat@ + \let\PSread@@=\eat@ + \let\PSinclude@@=\eat@ + \let\PSraw@@=\eat@ + \let\xyPSobeylines@@=\relax + \let\PSspecialdict@@=\eat@ +} +\xydef@\UnloadPS@{\UnloadPSps@ + \expandafter\ifx\csname xypsloaded\endcsname\unknown\PSspecials@false + \else\expandafter\NoPSspecials\fi} +\xylet@\UnloadPS@@=\UnloadPS@ +\ifx\undefined\dvitype@\xydef@\dvitype@{null}\fi +\xylet@\xyrealshipout@=\shipout +\xydef@\xyPSshipout@{\setbox9=\copy\voidb@x + \afterassignment\xyPSshipout@i\setbox9=} +\xydef@\xyPSshipout@i{\ifvoid9 \expandafter\aftergroup\fi\xyPSshipout@ii} +\xydef@\xyPSshipout@ii{\xyrealshipout@\vbox{\XYpredict@@\box9}} +\xydef@\@PSshipout{\global\let\shipout=\xyPSshipout@ } +\xydef@\xyPSshipout@PSii{% + \ifUsePSdict@@\let\XYshipdict@=\includeXYPSdict@@ + \else\def\XYshipdict@{\XYpredict@@\XYdict@@}\fi + \xyrealshipout@\vbox{\XYshipdict@\box9}} +\xydef@\firstPS@{% + \global\let\firstPS@@=\relax \global\let\firstPS@=\relax} +\xylet@\firstPS@@=\firstPS@ +\ifx\undefined\dumpPSdict@@ \xylet@\dumpPSdict@@=\relax \fi +\xydef@\installxyps@{% + \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}\xycatcodes + \installxyps@@ \installxyps@x } +\xylet@\installxyps@@=\relax +\xylet@\setupxyPS@@=\relax +\xywithoption{ps}{\let\setupxyPS@@=\setupxyPS@} +\xydef@\installxyps@x{\dumpPSdict@@ + \ifx\xyrealshipout@\undefined \let\xyrealshipout@=\shipout\fi + \ifx \shipout \xyrealshipout@ + \ifUsePSdict@@ \DN@{\includePSmessage@\includeXYPSdict@\message{>}}% + \else \DN@{\XYdict@\endXYdict@}\fi + \else \DN@{\let\xyPSshipout@ii=\xyPSshipout@PSii \@PSshipout}\fi + \let\firstPS@=\relax \next@ + \let\XYpredict@=\relax + \setupxyPS@@ } +\let\realinstallxyps@x=\installxyps@x +\ifx\undefined\AfterBeginDocument + \def\installxyps@x{\xysetup@@{\realinstallxyps@x}}% +\else + \def\installxyps@x{\AfterBeginDocument{\realinstallxyps@x}}% +\fi +\xydef@\xydefaultdriver@{dvips} +\xydef@\xyPSdriver#1{\def\xydefaultdriver@{#1}} +\xydef@\installxyps@orig{\DN@{}% + \ifx\xydriversselected@@\empty + \DN@{\expandafter\defaultinstallps@\expandafter{\xydefaultdriver@}}% + \else \def\do##1{% + \expandafter\ifx\csname##1@xy@ps\endcsname\relax + \DN@{\defaultinstallps@{##1}}}% + \xydriversselected@@ + \else \DN@##1{}\fi\fi \next@ } +\xydef@\defaultinstallps@#1#2{% + \xywarning@{no driver specified, using #1 }% + \xyrequire{#1}\csname #1@xy@ps\endcsname{}} +\xydef@\null@xy@ps{\installxyps@} +\xydefcsname@{shape [!...]}#1{% + \expandafter\ifx\csname xyps-sloaded\endcsname\empty \DN@{\xyPSescapestyle@{#1}@@}% + \else\ifxyPSshapes@\DN@{\xyPSshapechar@{#1}@@}% + \else \DN@{\xyPScharwarning@}\fi\fi \next@ } +\xydefcsname@{shape [psxy]}{\ifxyPSshapes@\DN@{\xyPSpsxy@}% + \else \DN@{\xyPScharwarning@}\fi \next@ } +\xydef@\xyPSpsxy@{% + \setboxz@h{\dimen@=\L@p \advance\dimen@-\R@p + \dimen@ii=-\U@p \raise\dimen@ii\hbox to\z@{% + \kern\dimen@\xyPScurrpt@\kern-\dimen@}\boxz@}}% +\xydef@\xyPScurrpt@{\ifxyPSshapes@\expandafter\xyPScurrpt@@\fi} +\xydef@\xyPScurrpt@@@{\PSspecial@@{xyi}\PSraw@@{userdict begin xyx end}} +\ifx\undefined\xyPScurrpt@@ \xylet@\xyPScurrpt@@=\xyPScurrpt@@@ \fi +\xywarnifdefined\xyPSshapechar@ +\xywarnifdefined\xyPSsplitshape@ +{\xyuncatcodes \catcode`@=11 + \gdef\xyPSshapechar@#1@@{\xyPSsplitshape@#1<><>@@}% + \gdef\xyPSsplitshape@#1<>#2<>#3@@{\xyPSsplitPS@{#1}{#2}}} +\xydef@\xyPSrawA@#1{\expandafter\xyPSrawAA@ #1{}}% +\xydef@\xyPSrawAA@#1#2{\PSraw@@{{pu #1}xyg #2}% + \PSmessage{{pu #1}xyg #2}}% +\xydef@\xyPSrawZ@#1{\PSraw@@{{#1 pp}xyf}\PSmessage{{#1 pp}xyf}}% +\xydef@\modPSboxz@{% + \expandafter\DN@\expandafter{\xyPSpre@{}}\ifx\next@\empty\else + \setboxz@h{\expandafter\xyPSrawA@\expandafter{\xyPSpre@{}}\boxz@ + \expandafter\xyPSrawZ@\expandafter{\xyPSpost@}}\DN@{}\fi}% +\xydef@\modPSdrop@{% + \expandafter\DNii@\expandafter{% + \expandafter\xyPSrawA@\expandafter{\xyPSpre@{}}}% + \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{\nextii@ ##1}}% + \expandafter\next@\expandafter{\Drop@@}% + \expandafter\DNii@\expandafter{% + \expandafter\xyPSrawZ@\expandafter{\xyPSpost@}}% + \DN@##1{\expandafter\def\expandafter\Drop@@\expandafter{\tmp@ ##1}}% + \expandafter\next@\expandafter{\nextii@}}% +\xydef@\modPSconnect@{% + \expandafter\DNii@\expandafter{% + \expandafter\xyPSrawA@\expandafter{\xyPSpre@{}}}% + \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{\nextii@ ##1}}% + \expandafter\next@\expandafter{\Connect@@}% + \expandafter\DNii@\expandafter{% + \expandafter\xyPSrawZ@\expandafter{\xyPSpost@}}% + \DN@##1{\expandafter\def\expandafter\Connect@@\expandafter{\tmp@ ##1}}% + \expandafter\next@\expandafter{\nextii@}}% +\xydef@\xyPSpre@{{}{}} +\xydef@\xyPSpost@{} +\xydef@\PSmessage@#1{\W@{PS: #1, direction=\the\Direction}} +\xydef@\PSignore@#1{}% +\xydef@\showPSmessages{\let\PSmessage=\PSmessage@} +\xydef@\hidePSmessages{\let\PSmessage=\PSignore@} +\xylet@\PStracing=\showPSmessages +\hidePSmessages +\xydef@\PSmacro@#1{\PSmacro@@{#1}\PSmessage{#1}} +\xydef@\includeXYPSdict@@{% + \expandafter\PSinclude@@\expandafter{\xyPSdictname}} +\xydef@\includeXYPSdict@r{\message{PS: includeXYPSdict}\includeXYPSdict@@ + \let\includeXYPSdict@=\relax} +\xylet@\includeXYPSdict@\includeXYPSdict@r +\xydef@\endXYdict@{} +\xydef@\includePSmessage@@{\message{=2 | + \gdef\xyPS@@<%%>\gdef\xyPS@@@<%!>} +\xydef@\writePSdict@@{\message{PS: writePSdict@@}\writePSdict@ + \def\writePSdict@@{\message{write PS relaxed}}} +{\catcode`|=14 \catcode`\%=12 + \gdef\writePSdict@{{\begingroup| + \immediate\openout\xywrite@=\xyPSdictname \relax + \message{}| + \endgroup}}} +\xywarnifdefined\obeyoutlines@ +{\catcode`\^^M=\active% + \gdef\obeyoutlines@{\catcode`\^^M=\active \def^^M{^^J}% + \newlinechar=`\^^J\obeyspaces}} +\xydef@\XYpredict@@{\ifUsePSdict@@\DN@{}\else + \DN@{\xy@begindvi{\xyinputorelse@{xyps-pro}% + {\xyerror@{Could not load xyps-pro}{}}\xyuncatcodes}}% + \next@ + \DN@{\xy@begindvi{\xyinputorelse@{xypspatt}% + {\xyerror@{Could not load xypspatt}{}}\xyuncatcodes}}\fi + \next@ } +\xydef@\XYpredict@r{\XYpredict@@ \let\XYpredict@=\relax \installxyps@} +\xylet@\XYpredict@\XYpredict@r +\xydef@\XYdict@{\XYdict@@\def\XYdict@{\message{PS relaxed}}}% +\xydef@\XYdict@@{\DN@{\xyinputorelse@{xypsdict}% + {\xyerror@{Could not load xypsdict}{}}\xyuncatcodes}% + \expandafter\xy@begindvi\expandafter{\next@}} +\xydef@\forceload@XYdict{% + \let\includeXYPSdict@=\includeXYPSdict@r + \let\XYpredict@=\XYpredict@r + \let\XYdict@=\XYdict@@ \expandafter\installxyps@ } +\xynew@{if}\ifxyPSshapes@ \xyPSshapes@true +\xydef@\xyPScharwarning@@{\xyPScharmessage@ + \gdef\xyPScharwarning@@{\xyPScharmessage@ + \xywarning@{...no further PostScript warnings will be given}% + \global\let\xyPScharwarning@@=\relax }} +\xydef@\xyPScharmessage@{\xywarning@{% + the current does not fully support PostScript effects}}% +\xydef@\newxyshape#1#2#3{% + \DN@{#3}\ifx\next@\empty + \xydefcsname@{shape [#1]}{\csname xyshape@#1@\endcsname}% + \else \expandafter\def\csname shape [#1]\endcsname{% + \csname xyshape@#1@\endcsname}\fi + \DN@{#2}\ifx\next@\empty + \expandafter\def\csname xyshape@#1@\endcsname{% + \xyundefinedEffect@{#1}{}@@}% + \else \expandafter\def\csname xyshape@#1@\endcsname{#2}\fi } +\xydef@\xyundefinedEffect@#1#2@@{% + \xywarning@{The #1 #2 effect is not implemented with the current driver}}% +\xydef@\newxyPSshape#1#2{% + \expandafter\DN@\expandafter{\csname shape [#1]\endcsname}% + \DNii@{\relax}\ifx\next@\nextii@ \newxyshape{#1}{}\relax\fi + \expandafter\DNii@\expandafter{\csname xyPSshape@#1@\endcsname}% + \expandafter\def\nextii@{#2}% + \ifx\nextii@\empty\expandafter\def\next@{\xyPSnotimplemented@@`#1'@@}% + \else + \edef\tmp@{\noexpand\let\expandafter\noexpand\next@ + \expandafter\noexpand\nextii@}% + \expandafter\tmp@\fi } +\xydef@\xyPSnotimplemented@@#1@@{% + \xywarning@{This PostScript effect is not implemented yet}}% +\xydef@\xyPSnotfinished@@{% + \xywarning@{This effect is not reliable yet; box sizes may be wrong}}% +\endinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-r.tex b/macros/generic/diagrams/xypic/texinputs/xyps-r.tex new file mode 100644 index 0000000000..c862790063 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyps-r.tex @@ -0,0 +1,61 @@ +%% xyps-r.tex from $Id: xyps-r.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``PostScript Rotations and Scaling''. +%% Copyright (c) 1993-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +%% As a special exception, you may use this file and all files derived +%% from it without restrictions. This special exception was added with +%% version 3.7 of Xy-pic. +%% +\expandafter\ifx\csname xyps-rloaded\endcsname\empty + \message{not reloaded}\endinput \fi +\expandafter\let\csname xyps-rloaded\endcsname=\empty \xycatcodes +\expandafter\ifx\csname xyps-sloaded\endcsname\empty\else + \xyinputorelse@{xyps-s}{\xyerror@{Could not load xyps-s}{}}% + \xycatcodes\fi +\xydef@\installPSrotscale@{\installPSstyle@ + \let\xyRotate@@=\xyPSrotate@@ + \let\doSpecialRotate@@=\doPSspecialRotate@@ + \let\xyscale@@=\xyPSscale@@ + \xyPSshapes@true + \xyuncatcodes } +\xydef@\UsePSrotate{\installPSrotscale@} +\xydef@\NoPSrotate{\UnloadRotate@\relax} +\xydef@\xyPSpretransform@{\xyPSrawA@{\preXYtransform@@}} +\xydef@\xyPSposttransform@{\xyPSrawZ@{\postXYtransform@@}} +\let\preXYtransform@=\xyPSpretransform@ +\let\postXYtransform@=\xyPSposttransform@ +\xydef@\xyPSrotSplit@{% + \expandafter\def\expandafter\preShape@@\expandafter{\xyPSpre@}% + \expandafter\def\expandafter\postShape@@\expandafter{\xyPSpost@}} +\xydef@\xyPSscale@@#1#2{% + \xyPSsplitPS@{\xyscale@start(#1,#2)}{\xyscale@end}% + \xyPSrotSplit@\xyPSpsxy@ } +\xydef@\xyPSrotate@@#1{% + \xyPSsplitPS@{\xyrot@start(#1 xyd)}{\xyrot@end}% + \xyPSrotSplit@\xyPSpsxy@ } +\xydef@\xyPSspecialRotate@#1{% + \xyPSsplitPS@{\xyrot@start(#1)}{\xyrot@end}\xyPSrotSplit@\xyPSpsxy@ } +\xydef@\doPSspecialRotate@@#1@@{\xyPSspecialRotate@{#1}} +\xydef@\xyRotScale@@{% + \def\xyrot@start(##1){{xyt ##1\space xyr}}% + \def\xyscale@start(##1,##2){{xyt ##1\space##2\space xys}}% + \def\xyrot@end{}\def\xyscale@end{}} +\endinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-s.tex b/macros/generic/diagrams/xypic/texinputs/xyps-s.tex new file mode 100644 index 0000000000..45f2299a8e --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyps-s.tex @@ -0,0 +1,51 @@ +%% xyps-s.tex from $Id: xyps-s.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Style extension'' PostScript support. +%% Copyright (c) 1995-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +%% As a special exception, you may use this file and all files derived +%% from it without restrictions. This special exception was added with +%% version 3.7 of Xy-pic. +%% +\expandafter\ifx\csname xyps-sloaded\endcsname\empty + \message{not reloaded}\endinput \fi +\expandafter\let\csname xyps-sloaded\endcsname=\empty \xycatcodes +\xydef@\xykillstyles@@{\Unloadstyle@}% +\xywarnifdefined\xyPSescapestyle@ +\xywarnifdefined\xyPSsplitescape@ +{\xyuncatcodes \catcode`@=11 + \gdef\xyPSescapestyle@#1@@{\xyPSsplitescape@#1<><>@@}% + \gdef\xyPSsplitescape@#1<>#2<>#3@@{\xyescape@@{#1}{#2}}} +\xydef@\xyPSsplitPS@#1#2{% + \def\xyPSpre@{#1}\def\xyPSpost@{#2}\modPSboxz@ } +\xydef@\xyescape@@#1#2{\checkXyStyle@ + \applyFIFOstyle@\prexyescape@{#1}\postxyescape@{#2}} +\xydef@\prexyescape@{\xyescapeSpecial@} +\xydef@\postxyescape@{\xyescapeSpecial@} +\xylet@\xyescapeSpecial@=\eat@ +\let\xyescapeSpecial@=\addtostyletoks@ +\xydef@\installPSstyle@{% + \def\preXYstyle@@{\xyPSpre@}% + \let\xydoprestyles@=\xyPSrawstyleA@ + \let\xydopoststyles@=\xyPSrawZ@ + \let\xykillstyles@=\xykillstyles@@ + } +\xydef@\xyPSrawstyleA@#1{\xyPSrawA@{{#1}{}}} +\endinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-t.tex b/macros/generic/diagrams/xypic/texinputs/xyps-t.tex new file mode 100644 index 0000000000..cfb7cce2d7 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyps-t.tex @@ -0,0 +1,64 @@ +%% xyps-t.tex from $Id: xyps-t.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Pattern and Tile extension'' PostScript support. +%% Copyright (c) 1993-1997 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +%% As a special exception, you may use this file and all files derived +%% from it without restrictions. This special exception was added with +%% version 3.7 of Xy-pic. +%% +\expandafter\ifx\csname xyps-tloaded\endcsname\empty + \message{not reloaded}\endinput \fi +\expandafter\let\csname xyps-tloaded\endcsname=\empty \xycatcodes +\expandafter\ifx\csname xyps-sloaded\endcsname\empty\else + \xyinputorelse@{xyps-s}{\xyerror@{Could not load xyps-s}{}}% + \xycatcodes\fi +\xydef@\installPSpatterns@{\installPSstyle@ + \let\xypattern@=\xyPSpattern@@ + \let\xypatternwarning@=\relax + \xystandardpatterns@ + \xyuncatcodes } +\xylet@\UnloadPSpatterns@=\Unloadpattern@ +\xydef@\UsePStiles{\installPSpatterns@} +\xydef@\NoPStiles{\UnloadPSpatterns@\relax} +\xydef@\xyPSnewpattern@#1#2#3#4#5{% + \expandafter\DN@\expandafter{\csname shape [#1]\endcsname}% + \DNii@{\relax}\ifx\next@\nextii@\newxypattern{#1}{}\relax\fi + \DNii@{#4}\ifx\nextii@\empty + \expandafter\DNii@\expandafter{\csname xyPSshape@#1@\endcsname}% + \expandafter\def\nextii@{\xyPSpattern@{#2 #3}}\else + \expandafter\DNii@\expandafter{\csname xyPSshape@#1@\endcsname}% + \expandafter\def\nextii@{\xyPSpattern@{#4}}\fi + \ifx\nextii@\empty\expandafter\def\next@{\xyPSnotimplemented@@`#1'@@}% + \else + \edef\tmp@{\noexpand\let\expandafter\noexpand\next@ + \expandafter\noexpand\nextii@}\expandafter\tmp@\fi } +\xydef@\xyPSpattern@{\ifPSspecials@\expandafter\xyPSpattern@@ + \else\expandafter\eat@\fi}% +\xydef@\xyPSpattern@@#1{\bgroup \checkXyStyle@ + \def\preStyle@@{\expandafter\addtostyletoks@\expandafter{\xyPSpre@}}% + \def\postStyle@@{\expandafter\addtostyletoks@\expandafter{\xyPSpost@}}% + \let\modPSboxz@=\modXYstyle@ \xyPS@pattern@@{#1}% + \toks@={\egroup\let\xy@style@=\relax \def\Drop@@}% + \expandafter\addtotoks@\expandafter{\expandafter{\Drop@@}\def\Connect@@}% + \expandafter\addtotoks@\expandafter{\expandafter{\Connect@@}}% + \the\toks@ } +\xydef@\xyPS@pattern@@#1{\xyPSsplitPS@{{#1}sp}{}} +\endinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyps.tex b/macros/generic/diagrams/xypic/texinputs/xyps.tex new file mode 100644 index 0000000000..09a3536924 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyps.tex @@ -0,0 +1,367 @@ +%% xyps.tex from $Id: xyps.doc,v 3.12 2011/05/27 04:51:17 krisrose Exp $ +%% +%% Xy-pic ``PostScript backend''. +%% Copyright (c) 1993-1997 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +%% As a special exception, you may use this file and all files derived +%% from it without restrictions. This special exception was added with +%% version 3.7 of Xy-pic. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{ps}{PostScript backend}{\stripRCS$Revision: 3.12 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xydef@\UsePSspecials{\DNii@{{[4]}}\xyFN@\UsePSspecials@i} +\xydef@\UsePSspecials@i{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\UsePSspecials@i}% + \else\ifx [\next \DN@[##1]{\DNii@{{[##1]}}\xyFN@\UsePSspecials@i}% + \else\ifcat 5\noexpand\next \DN@##1{\DNii@{{[##1]}}\xyFN@\UsePSspecials@i}% + \else\ifx\bgroup\next \DN@{\expandafter\UsePS@specials\nextii@}% + \else \DN@{\UsePS@specials{[4]}}% + \fi\fi\fi\fi \next@ } +\xydef@\UsePS@specials#1#2{% + \ifx\empty\whichPSspecials@ + \DN@{#2}\ifx\next@\empty + \else + \expandafter\let\expandafter\next\csname#2@\endcsname + \ifx\next\relax \DN@{\UsePSspecials@{#2}{}}% + \else \DN@{\UsePSspecials@{#2}{#1}}\fi + \fi + \else + \DN@{#2}\ifx\next@\empty \DN@{\PSspecials@true}% + \else + \DN@{#2}% + \edef\nextii@{\expandafter\string\whichPSspecials@}% + \ifx\next@\nextii@\DN@{\PSspecials@true}% + \else + \ifx\firstPS@@\relax + \DN@{\xyerror@{Only one PS allowed: \dvitype@ already loaded}{}}% + \else + \expandafter\let\expandafter\next\csname#2@\endcsname + \ifx\next\relax + \DN@{\xyerror@{PostScript specials for `#2' not supported}{}}% + \else + \xywarning@{Changing PS to #2 }% + \DN@{\UsePSspecials@{#2}{#1}}% + \fi + \fi + \fi + \fi + \fi \next@} +\xydef@\UseDVIPSspecials{\UsePSspecials@\dvips@} +\xydef@\UseTexturesPSspecials{\UsePSspecials@\Textures@} +\xydef@\UseTexturesSpecials{\UsePSspecials@\Textures@} +\xydef@\UsePostScriptSpecials{\UsePSspecials@\dvips@} +\xydef@\UseOzTeXspecials{\UsePSspecials@\OzTeX@} +\xydef@\UseDVITOPSspecials{\UsePSspecials@\dvitops@} +\message{drivers,} +\xydef@\loadPSdriver@#1#2{\xyinputorelse@{xy#1}% + {\xyrequire{#2}\expandafter\ifx\csname xy#2loaded\else + {\xyerror@{Unable to load xy#1.tex for #2 driver}{}}\fi}} +\xydef@\dvips@{\loadPSdriver@{ps-dvi}{dvips}} +\xydef@\Textures@{\loadPSdriver@{ps-txt}{Textures}} +\xydef@\OzTeX@{\loadPSdriver@{ps-oz}{OzTeX}} +\xydef@\dvitops@{\loadPSdriver@{ps-dto}{dvitops}} +\xydef@\dvipsone@{\loadPSdriver@{ps-one}{dvipsone}} +\global\newif\ifPSspecials@ +\xydef@\UsePSspecials@#1{\def\whichPSspecials@{#1}% + \DN@{\Textures@}\ifx\next@\whichPSspecials@ + \DN@##1{\xyrequire{textures}% + \def\whichPSspecials@{textures}\xyps@options}% + \else\DN@{\dvips@}\ifx\next@\whichPSspecials@ + \DN@##1{\xyrequire{dvips}% + \def\whichPSspecials@{dvips}\xyps@options}% + \else\DN@{\OzTeX@}\ifx\next@\whichPSspecials@ + \DN@##1{\xyrequire{oztex}% + \def\whichPSspecials@{oztex}\xyps@options}% + \else\DN@{\dvitops@}\ifx\next@\whichPSspecials@ + \DN@##1{\xyrequire{dvitops}% + \def\whichPSspecials@{dvitops}\xyps@options}% + \else + \DN@##1{\xyrequire{ps}\xyrequire{#1}\xyps@options}% + \fi\fi\fi\fi \next@ } +\xydef@\xyps@options{% + \xyrequire{ps}\xyrequire{line}\xyrequire{color}\xyrequire{crayon}% + \xyrequire{rotate}\xyrequire{tile}\xyrequire{frame}\xyuncatcodes } +\xydef@\whichPSspecials@{} +\xydef@\NoPSspecials{\xyPSwarning@{off}% + \PSspecials@false\aftergroup\resetPS@} +\xydef@\resetPS@{\ifPSspecials@\xyPSwarning@{back on}\fi} +\xydef@\UsePSspecials@x{\PSspecials@true\resetPS@} +\xydef@\xyPSwarning@#1{\xywarning@{PostScript switched #1}} +\xyaddunsupport{ps}{\csname UnloadPS@@\endcsname} +\xydef@\PSspecials@{% + \ifx\next[\DN@[##1]{\setxyPSlevel@{##1}\xyFN@\PSspecials@}% + \else\DN@{\whichPSspecials@\PSspecials@@}% + \fi \next@ }% +\xydef@\PSspecials@@{% + \ifx\und@fined\PSmessage\hidePSmessages\fi \setupxyPS@} +\xydef@\setupxyPSlevelO@{\relax} +\xydef@\setxyPSlevel@#1{\ifcase#1% + \gdef\setupxyPS@{\setupxyPSlevelO@}% + \or\gdef\setupxyPS@{\setupxyPSlevelA@}% + \or\gdef\setupxyPS@{\setupxyPSlevelB@}% + \or\gdef\setupxyPS@{\setupxyPSlevelC@}% + \or\gdef\setupxyPS@{\setupxyPSlevelD@}% + \else\gdef\setupxyPS@{\setupxyPSlevelD@}\fi } +\xywarnifdefined\setupxyPS@ + \gdef\setupxyPS@{\setupxyPSlevelD@ \gdef\setupxyPS@{\PSspecials@true}} +\xydef@\PSincrease@#1{% + \xywarning@{The PS level may only increase: #1 is already active}} +\DN@{\csname newif\endcsname\ifUsePSdict@@\DN@{}} + \ifx\undefined\UsePSdict@@true\else\DN@{}\fi \next@ +\ifx\undefined\xyPSdefaultdict + \xydef@\xyPSdefaultdict{% + \DN@##1.##2.##3@{\gdef\xyPSdictname{xy##1##2dict.pro}}% + \expandafter\next@\xyversion.@}% +\fi +\ifx\undefined\UsePSheader@ + \xydef@\UsePSheader@#1{% + \DN@{#1}\ifx\next@\empty + \else \gdef\xyPSdictname{#1}\fi + \ifx\xyPSdictname\undefined\xyPSdefaultdict\fi + \gdef\xyHeaderMessage@{% + It includes a reference to the PostScript file \xyPSdictname.^^J}% + \UsePSdict@@true}% + \let\UsePSheader=\UsePSheader@ +\fi +\xydef@\dumpPSdict#1{\DN@{#1}\ifx\next@\empty + \ifx\undefined\xyPSdictname\xyPSdefaultdict\fi + \else\gdef\xyPSdictname{#1}\fi + \def\dumpPSdict@@{\writePSdict@@}% + \ifx\xydriversselected@@\empty\DN@{\xysetup@@\null@xy@ps}% + \else \DN@{\installxyps@x}\fi \next@} +\message{hooks,} +\gdef\xyPSalternative@#1#2{% +\expandafter\global\expandafter\let\csname origxy#2@\endcsname=#1% + \xdef#1{\noexpand\ifPSspecials@ + \noexpand\expandafter\expandafter\noexpand\csname xyPS#2@\endcsname + \noexpand\else + \noexpand\expandafter\expandafter\noexpand\csname origxy#2@\endcsname + \noexpand\fi}}% +\xydef@\setupxyPSlevelA@{\xyPStips@% + \xyPSalternative@{\Tip@@}{Tip}% + \xyPSalternative@{\Ttip@@}{Ttip}% + \xyPSalternative@{\Tip@@eu}{Tip@eu}% + \xyPSalternative@{\Ttip@@eu}{Ttip@eu}% + \xyPSalternative@{\hook@@}{hook}% + \xyPSalternative@{\ahook@@}{ahook}% + \xyPSalternative@{\bhook@@}{bhook}% + \xyPSalternative@{\aturn@@}{aturn}% + \xyPSalternative@{\bturn@@}{bturn}% + \xyPSalternative@{\squiggle@@}{squiggle}% + \xyPSalternative@{\stopper@@}{stopper}% + \xyPSalternative@{\line@@}{dash}% + \xyPSalternative@{\circhar@@}{circhar@}% + \gdef\setupxyPSlevelA@{\PSincrease@{1}}% + \global\let\UsePSspecials=\UsePSspecials@x \PSspecials@true} +\xydef@\setupxyPSlevelB@{% + \let\xyPSfont@=\empty \let\xyPSsemifont@=\empty + \xyPSalternative@{\cirrestrict@@}{cirrest}% + \gdef\setupxyPSlevelB@{\PSincrease@{2}}% + \setupxyPSlevelA@ } +\xydef@\setupxyPSlevelC@{% + \xyPSalternative@{\cirbuild@}{cirbuild}% + \xyPSalternative@{\CIRfull@}{CIRfull}% + \xyPSalternative@{\solid@}{solid}% + \xyPSalternative@{\point@}{point}% + \xywithoption{curve}{% + \xyPSalternative@{\splinesolid@}{splinesolid}}% + \gdef\setupxyPSlevelC@{\PSincrease@{3}}% + \setupxyPSlevelB@ }% +\xydef@\setupxyPSlevelD@{% + \xyPSalternative@{\dash@}{dashed}% + \xywithoption{curve}{% + \xyPSalternative@{\splinedashed@}{splinedashed}% + \xyPSalternative@{\splinedotted@}{splinedotted}}% + \gdef\setupxyPSlevelD@{}% + \setupxyPSlevelC@ } +\xydef@\xyPSchar@#1{% + \PSmacro@{\the\Direction\space \xyPSfont@ #1}} +\xydef@\xyPSsemichar@#1{% + \PSmacro@{\the\Direction\space \xyPSsemifont@ #1}} +\xydef@\xyPSfont@{f }% +\xydef@\xyPSsemifont@{fs }% +\xydef@\xyPStip@{\xyPSchar@{t}}% +\xydef@\xyPSTip@{\xyPSchar@{/XT tt}}% +\xydef@\xyPSTtip@{\setboxz@h\bgroup + \reverseDirection@\line@ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ + \kern-\L@c \boxz@ \kern\L@c \xyPSchar@{/Xt tT}}% +\xydef@\xyPSTip@eu@{\xyPSchar@{/ET tt}}% +\xydef@\xyPSTtip@eu@{\setboxz@h\bgroup + \reverseDirection@\line@ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ + \kern-\L@c \boxz@ \kern\L@c \xyPSchar@{/ET tT}}% +\xydef@\xyPScm@\tip@x{\xyFN@\xyPScm@@}% +\xydef@\xyPScm@@{% + \ifx\next\tip@@ \DN@\tip@@{\tip@x\xyPScmtip@}% + \else\ifx\next\atip@@ \DN@\atip@@{\tip@x\xyPScmatip@}% + \else\ifx\next\btip@@ \DN@\btip@@{\tip@x\xyPScmbtip@}% + \else\DN@{}% + \fi\fi\fi \next@}% +\xydef@\xyPScmtip@{\xyPSchar@{ct}}% +\xydef@\xyPScmatip@{\xyPSchar@{ca}}% +\xydef@\xyPScmbtip@{\xyPSchar@{cb}}% +\xydef@\xyPStips@{% + \xyPSalternative@{\atip@@}{atip}% + \xyPSalternative@{\btip@@}{btip}% + \xyPSalternative@{\tip@@}{abtip}% +}% +\xydef@\xyPSatip@{\xyPSwhichatip@ + \expandafter\xyPSchar@\expandafter{\xyPSfont@@}}% +\xydef@\xyPSbtip@{\xyPSwhichbtip@ + \expandafter\xyPSchar@\expandafter{\xyPSfont@@}}% +\xydef@\xyPSabtip@{\xyPSwhichabtip@ + \expandafter\xyPSchar@\expandafter{\xyPSfont@@}}% +\xydef@\xyPSwhichatip@{\ifx\xyatipfont\xy@@atfont + \expandafter\xyPSatip@i \else\def\xyPSfont@@{10 /xy A}\fi }% +\xydef@\xyPSwhichbtip@{\ifx\xybtipfont\xy@@btfont + \expandafter\xyPSbtip@i \else\def\xyPSfont@@{10 /xy B}\fi }% +\xydef@\xyPSwhichabtip@{\ifx\xyatipfont\xy@@atfont + \expandafter\xyPSabtip@i \else\def\xyPSfont@@{10 /xy AB}\fi }% +\xydef@\xyPSatip@i{% + \edef\xyPSfont@@{\tipsize@@\space/\tipfamily@@\space A}} +\xydef@\xyPSbtip@i{% + \edef\xyPSfont@@{\tipsize@@\space/\tipfamily@@\space B}} +\xydef@\xyPSabtip@i{% + \edef\xyPSfont@@{\tipsize@@\space/\tipfamily@@\space AB}} +\xydef@\xyPSTtips@{% + \let\Ttip@xy=\Ttip@ + \let\Ttip@cm=\Ttip@ + \let\Ttip@eu=\Ttip@ } +\xydef@\xyPShook@{\xyPSchar@{h}}% +\xydef@\xyPSahook@{\xyPSchar@{ha}}% +\xydef@\xyPSbhook@{\xyPSchar@{hb}}% +\xydef@\xyPSaturn@{\xyPSchar@{ta}}% +\xydef@\xyPSbturn@{\xyPSchar@{tb}}% +\xydef@\xyPSsquiggle@{\xyPSchar@{g}}% +\xydef@\xyPSstopper@{\xyPSchar@{st}}% +\xydef@\xyPSfliptrue@{\DN@{\xyPSsemichar@{T d}}} +\xydef@\xyPSdash@{% + \DN@{\xyPSsemichar@{F d}}% + \ifnum\SemiDirectionChar=31 + \ifdim\d@Y<\z@ + \ifdim\d@X<\z@ \ifx\xyPSsemifont@\empty\xyPSfliptrue@\fi\fi + \else + \ifdim\z@>\d@X + \ifx\xyPSsemifont@\empty\else\xyPSfliptrue@\fi + \else\xyPSfliptrue@\fi + \fi\fi + \next@ \setboxz@h{\origxydash@}\kern\wdz@ + \setbox\z@=\box\voidb@x } +\xydef@\xyPScirchar@#1{\count@=#1\edef\tmp@{\the\count@}% + \ifcase#1% + \xyPScirchar@@@{-180}{-135}{\tmp@}\dimen@=\partroottwo\R@ + \or\xyPScirchar@@@{-135}{-90}{\tmp@}\dimen@=\halfroottwo\R@ + \or\xyPScirchar@@@{-90}{-45}{\tmp@}\dimen@=\halfroottwo\R@ + \or\xyPScirchar@@@{-45}0{\tmp@}\dimen@=\partroottwo\R@ + \or\xyPScirchar@@@0{45}{\tmp@}\dimen@=\partroottwo\R@ + \or\xyPScirchar@@@{45}{90}{\tmp@}\dimen@=\halfroottwo\R@ + \or\xyPScirchar@@@{90}{135}{\tmp@}\dimen@=\halfroottwo\R@ + \or\xyPScirchar@@@{135}{180}{\tmp@}\dimen@=\partroottwo\R@ + \fi} +\xydef@\xyPScirrest@{\relax}% +\xydef@\xyPScirchar@@#1{\relax\count@=#1\edef\tmp@{\the\count@}% + \expandafter\xyPScirchar@@@\ifcase#1% + {-180}{-135}{\tmp@}\kern\partroottwo\R@ + \or{-135}{-90}{\tmp@}\kern\halfroottwo\R@ + \or{-90}{-45}{\tmp@}\kern\halfroottwo\R@ + \or{-45}0{\tmp@}\kern\partroottwo\R@ + \or 0{45}{\tmp@}\kern\partroottwo\R@ + \or{45}{90}{\tmp@}\kern\halfroottwo\R@ + \or{90}{135}{\tmp@}\kern\halfroottwo\R@ + \or{135}{180}{\tmp@}\kern\partroottwo\R@ + \fi} +\xydef@\xyPScirchar@@@#1#2#3{\edef\tmp@{#1\space#2\space + \expandafter\removePT@\the\R@\space #3\space c}% + \PSmacro@{\tmp@}} +\xydef@\xyPScirc@#1#2{\edef\tmp@{\expandafter\removePT@\the\R@}% + \PSmacro@{\tmp@\space #1 #2 o}} +\xydef@\xyPSCIRfull@{\setboxz@h{\kern\R@\xyPScirc@0{360}\kern\R@}% + \wd\z@=\z@ \ht\z@=\R@ \dp\z@=\R@ \boxz@}% +\xydef@\xyPScirbuild@{{% + \count@=\CIRlo@@ \count@@=\CIRhi@@ + \multiply\count@ by45 \advance\count@-180 \relax + \multiply\count@@ by45 \advance\count@@-180 \relax + \def\tmp@{}% + \ifx\CIRtest@@\CIRtest@inside + \ifnum\count@@>\count@ + \edef\tmp@{\noexpand\xyPScirc@{\the\count@}{\the\count@@}}\fi + \else\ifx\CIRtest@@\CIRtest@outside + \ifnum\count@>-180 \advance\count@ by360 \relax + \edef\tmp@{\noexpand\xyPScirc@{\the\count@@}{\the\count@}}% + \else + \ifnum\count@@<180 \relax + \edef\tmp@{\noexpand\xyPScirc@{\the\count@@}{180}}% + \fi\fi + \fi\fi + \kern\R@\tmp@\kern\R@}} +\xydef@\xyPSstraight@#1{\setupDirection@ + \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}% + \DN@##1##2{\def\checkoverlap@@{% + \ifdim##1\X@p>##1\X@c \let\next@=\relax \fi + \ifdim##2\Y@p>##2\Y@c \let\next@=\relax \fi}}% + \edef\nextii@{{\sd@X}{\sd@Y}}\expandafter\next@\nextii@ + \noCshavep@@ + \edef\Cshavep@@{\pfromthep@ \noexpand\resetDirection@}% + \noCshavec@@ + \edef\Cshavec@@{\cfromthec@ \noexpand\resetDirection@}% + \ifHidden@\else + \ifdim\Y@c>\Y@max \Y@max=\Y@c \fi \ifdim\Y@p>\Y@max \Y@max=\Y@p \fi + \ifdim\Y@c<\Y@min \Y@min=\Y@c \fi \ifdim\Y@p<\Y@min \Y@min=\Y@p \fi + \ifdim\X@c>\X@max \X@max=\X@c \fi \ifdim\X@p>\X@max \X@max=\X@p \fi + \ifdim\X@c<\X@min \X@min=\X@c \fi \ifdim\X@p<\X@min \X@min=\X@p \fi \fi + \ifInvisible@\let\next@=\relax \else + \DN@{\setboxz@h{\kern\X@c \raise\Y@c\hbox{#1}}% + \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\xykillstyles@\Drop@@}}% + \fi + \checkoverlap@@ + \ifdim\d@X=\z@ \ifdim\d@Y=\z@ \DN@{\relax}\fi\fi \next@ + \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}% + \def\Calong@@{\noCalong@@}\Creset@@ } +\xylet@\xykillstyles@=\relax +\xydef@\xyPSsolid@{\straight@\xyPSsolidSpread@}% +\xydef@\xyPSsolidSpread@{\xyPSspread@{solid}{l}@@}% +\xydef@\xyPSdottedSpread@{\xyPSspread@{dotted}{dt}@@}% +\xydef@\xyPSdashed@{\line@ \def\Connect@@{\straight@\xyPSdashedSpread@}} +\xydef@\xyPSdashedSpread@{\xyPSspread@{dashed}{dd}@@}% +\xydef@\xyPSspread@#1#2@@#3\repeat@{\edef\tmp@{% + \expandafter\removePT@\the\d@X\space\expandafter\removePT@\the\d@Y}% + \setboxz@h{\kern\X@c \raise\Y@c\hbox{% + \PSmessage{#1 line:}\PSmacro@{\tmp@\space #2}}}% + \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ \boxz@} +\xydef@\xyPSpoint@{\xyPSzerodot@\egroup + \Invisible@false \Hidden@false \def\Leftness@{.5}\def\U@pness@{.5}\ctipEdge@ + \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\xyPSdottedSpread@}} +\xydef@\xyPSzerodot@{\PSmessage{dot:}\PSmacro@{p}} +\xydef@\xyPScubic@#1{\readsplineparams@ + \PSmessage{CUBIC:}% + \DN@{#1}\ifx\next@\empty\PSmacro@{mark \cubicinfo@\space bz}% + \else\PSmacro@{mark \cubicinfo@\space b#1}\fi} +\xydef@\xyPSsquine@#1{\readsplineparams@ + \PSmessage{SQUINE:}% + \DN@{#1}\ifx\next@\empty\PSmacro@{mark \squineinfo@\space q#1}% + \else\PSmacro@{mark \squineinfo@\space q#1}\fi} +\xydef@\xyPSsplinesolid@{\ifx\splineinfo@\squineinfo@ + \expandafter\xyPSsquine@\else\expandafter\xyPScubic@\fi{}} +\xydef@\xyPSsplinedashed@{\ifx\splineinfo@\squineinfo@ + \expandafter\xyPSsquine@\else\expandafter\xyPScubic@\fi{d}} +\xydef@\xyPSsplinedotted@{\ifx\splineinfo@\squineinfo@ + \expandafter\xyPSsquine@\else\expandafter\xyPScubic@\fi{t}} +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xypsdict.tex b/macros/generic/diagrams/xypic/texinputs/xypsdict.tex new file mode 100644 index 0000000000..0d949b0cdf --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xypsdict.tex @@ -0,0 +1,241 @@ +%% xypsdict.tex from $Id: xypsdict.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``PostScript backend prolog''. +%% Copyright (c) 1995-1997 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +%% As a special exception, you may use this file and all files derived +%% from it without restrictions. This special exception was added with +%% version 3.7 of Xy-pic. +\begingroup \xycatcodes% + \count@=\xydashl@\relax \count@@=\xydashw@\relax% + \XYpredict@\relax \xycatcodes \xyPSobeylines@@% +\PSdict@@{/XYdict where pop begin XYdict begin}% +\PSdict@@{% + /xysize 10 def /T true def /F false def + /dimendiv{65536 div}bind def + /xysegl \number\count@\space dimendiv def + /xyopp{1 -1 scale}bind def + /xynormwidth{\number\count@@\space dimendiv pscorrect}bind def + /xywidth{xynormwidth setlinewidth}bind def +}% +\PSdict@@{% + /xyfont{4096 add 64 div round 64 mul 4096 sub}def /xydt 0.01 def + /xysdfont{4096 add 32 div round 32 mul 4096 sub}def + /xydots{xywidth 1 setlinecap [xydt 2] 0 setdash}bind def + /f /xyfont load def /fs /xysdfont load def}% +\PSdict@@{% + /xyCheckDir{dup 8 div 3 mul 3 -1 roll sub neg exch div 360 mul + dup dup XYdirection sub 180 div round 180 mul XYdirection add + dup 3 -1 roll sub abs 10 gt not{exch}if pop}def +}% +\ifdim\xydashw@=0pt\xydashw@=.4pt\fi\count@@=\xydashw@\relax% +\PSdict@@{% + /xyrulth{\number\count@@\space dimendiv pscorrect setlinewidth + 0 setlinecap}bind def +}% +\PSdict@@{% + /gsavexy{gsave xypspt XYdirection rotate xywidth newpath 0 0 moveto}def + /gchksavexy{gsave xypspt setupDirection xywidth newpath 0 0 moveto}def +}% +\PSdict@@{% + /xyswap{XYdirection 180 add /XYdirection exch def}def + /xyline{gstartxy setupDirection rlineto xystroke}def +}% +\PSdict@@{% + /dash{exch gchksavexy xysegl XYdirection dup + -90 lt{pop neg}{90 gt{neg}if}ifelse exch{neg}if + 0 rlineto xystroke}def + /stopper{gstartxy setupDirection 0 xysegl 2 div rmoveto + 0 xysegl neg rlineto xystroke }def + /d /dash load def /st /stopper load def}% +\PSdict@@{% + /solid{gstartxy xydash neg exch neg exch rlineto xystroke}def + /dashed{gstartxy 2 copy dup mul exch dup mul add sqrt dup + xysegl add xysegl 2 mul div round 2 mul 1 sub div [ exch dup ] 0 setdash + neg exch neg exch rlineto xystroke}def + /l /solid load def /dd /dashed load def}% +\PSdict@@{% + /dot{gstartxy 2 setlinecap [xydt 2] 0 setdash + 1 0 rlineto xystroke}def + /dotted{gstartxy 2 copy dup mul exch dup mul add sqrt dup + 2 div round 1 add div 2 setlinecap [xydt 3 -1 roll] 0 setdash + neg exch neg exch rlineto 0 0 rlineto xystroke}def + /p /dot load def /dt /dotted load def}% +\PSdict@@{% + /cubic{gstartxy docubic} def + /docubic{chkvalid + {chkcubedge 8 -2 roll moveto curveto xystroke pop} + {cleartomark grestore}ifelse}def + /chkcubedge{2 copy 1.0 eq{0.0 eq{pop pop}{cubicedge}ifelse} + {pop cubicedge}ifelse}def + /bz /cubic load def}% +\PSdict@@{% + /dotcubic{gstartxy 1 setlinecap [xydt 2] 0 setdash docubic}def + /dashcubic{gstartxy [5 5] 0 setdash docubic}def + /bt /dotcubic load def /bd /dashcubic load def}% +\PSdict@@{% + /squine{gstartxy dosquine}def + /dosquine{chkvalid + {chksquedge 2 copy moveto xysq2cub curveto xystroke pop} + {cleartomark grestore}ifelse}def + /q /squine load def}% +\PSdict@@{% + /chkvalid{2 copy lt{dup 1 gt{false}{true}ifelse}{false}ifelse}def +}% +\PSdict@@{% + /chksquedge{2 copy 1.0 eq{0.0 eq{pop pop}{squineedge}ifelse} + {pop squineedge}ifelse}def + /xysq2cub{xysq2cubit 6 1 roll xysq2cubit 6 1 roll 3 index 3 index + xysq2cubit 6 1 roll xysq2cubit 6 1 roll pop pop}def + /xysq2cubit{2 index 2 mul add 3 div}def +}% +\PSdict@@{% + /dotsquine{gstartxy 1 setlinecap [xydt 2] 0 setdash dosquine}def + /dashsquine{gstartxy [5 5] 0 setdash dosquine}def + /qt /dotsquine load def /qd /dashsquine load def}% +\PSdict@@{% +/xy4mul{8 copy + 5 -1 roll mul 5 1 roll 6 -1 roll mul 6 1 roll + 3 -1 roll mul exch 4 -1 roll mul 3 1 roll + add 3 1 roll add exch 10 2 roll + 7 -1 roll mul 7 1 roll 4 -1 roll mul 5 1 roll + 4 -1 roll mul 4 1 roll mul add 3 1 roll add + exch 3 -1 roll }def +}% +\PSdict@@{% + /xy44mul{4 copy 16 4 roll exch 3 1 roll 4 copy 12 4 roll + xy4mul 12 4 roll xy4mul 12 -4 roll 4 copy 16 4 roll + 8 4 roll xy4mul 12 4 roll xy4mul}def +}% +\PSdict@@{% + /cubicedge{10 2 roll exch 8 1 roll 3 -1 roll dup dup 9 2 roll + 5 -1 roll dup dup 9 1 roll 8 3 roll + 4 1 roll dup dup 5 3 roll dup dup 5 1 roll 3 -1 roll + 18 -2 roll 2 copy 1 sub neg 4 1 roll 1 sub neg exch 4 1 roll + xy444mul + pop pop pop 13 1 roll pop pop pop 9 1 roll 10 1 roll + pop 8 1 roll 7 1 roll 8 1 roll pop 5 1 roll 3 1 roll}def +}% +\PSdict@@{% + /xy444mul{4 copy 24 4 roll 12 -4 roll 16 4 roll 4 copy 16 4 roll + xy44mul 20 8 roll xy44mul + 12 -4 roll 4 -1 roll 7 1 roll exch 4 1 roll exch 6 -1 roll exch + 4 2 roll 16 8 roll 8 4 roll + 4 -1 roll 7 1 roll exch 4 1 roll exch 6 -1 roll exch 4 2 roll + 8 4 roll 16 4 roll 8 4 roll 20 -4 roll exch 3 1 roll + 4 copy 20 4 roll 4 copy 16 4 roll 4 copy 12 4 roll + xy4mul 28 4 roll xy4mul 20 4 roll xy4mul 12 4 roll xy4mul}def +}% +\PSdict@@{% + /squineedge{8 2 roll + exch 5 1 roll 3 -1 roll dup 6 2 roll 1 index exch + 10 -2 roll 2 copy 1 sub neg 4 1 roll 1 sub neg exch 4 1 roll + xy44mul 4 1 roll pop 5 1 roll 6 1 roll 3 -1 roll pop}def +}% +\PSdict@@{% + /xyshort{2 copy abs exch abs add xysegl .5 mul lt + {pop pop grestore}{rlineto xystroke}ifelse}def +}% +\PSdict@@{% + /tipwidth{xywidth xynormwidth dup currentlinewidth exch div + sqrt dup dup scale mul setlinewidth 1 setlinecap}def +}% +\PSdict@@{% + /halftip{tipwidth xysize 10 div 0 0 moveto + -.25 0 3 -1 roll -2.5 mul 0 xysize 2 div neg + dup .62 mul 2 div neg curveto}bind def +}% +\PSdict@@{/atip{gchksavexy halftip xystroke}def + /btip{gchksavexy xyopp halftip xystroke}def + /tip{gchksavexy gsave halftip stroke grestore + xyopp halftip xystroke}def + /t /tip load def /a /atip load def /b /btip load def}% +\PSdict@@{/cmatip{gchksavexy halfcmtip xystroke}def + /cmbtip{gchksavexy xyopp halfcmtip xystroke}def + /cmtip{gchksavexy gsave halfcmtip stroke grestore + xyopp halfcmtip xystroke}def + /halfcmtip{tipwidth 0 0 moveto + -.1333 0 .25 neg dup .125 3 -1 roll .25 curveto}bind def + /ct /cmtip load def /ca /cmatip load def /cb /cmbtip load def}% +\PSdict@@{% + /xyfscale{/xyfsize exch def}def /xyfsize{10}def + /eu{-0.0551 0.0643 -0.0976 0.1386 -0.125 0.2188}def + /cm{-0.105 0.0437 -0.1804 0.1380 -0.2 0.25}def + /XY{-0.1753 0.0181 -0.3452 0.0708 -0.5 0.155}def + /tipstart{3 -1 roll gchksavexy exch xyfscale tipwidth dup XYdict exch + known{dup /xy eq{pop /XY}if}{pop /XY}ifelse XYdict exch get}def + /tipend{halfxytip xystroke}def + /halfxytip{1 1 6{pop xyfsize mul 6 1 roll}for 0 0 moveto curveto}def + /A{tipstart D}def /B{tipstart C}def /C{xyopp D}def /D{exec tipend}def + /AB{tipstart dup gsave exec halfxytip stroke grestore C}def +}% +\PSdict@@{% + /Tip{exch gchksavexy /xyfsize{10}def tipwidth gsave + dup XYdict exch known{dup /xy eq{pop /XT}if}{pop /XT}ifelse + XYdict exch get dup + halfTip stroke grestore xyopp halfTip xystroke}def + /XT{360 32 div neg}def /Xt{-1 .31 mul 1 atan}def + /ET{360 64 div 5 mul neg}def /Et{-1 .31 mul 1 atan}def + /halfTip{exec rotate XY halfxytip}def /halfTtip{halfTip}def + /Ttip{exch gchksavexy /xyfsize{10}def tipwidth gsave + dup XYdict exch known{dup /xy eq{pop /Xt}if}{pop /Xt}ifelse + XYdict exch get dup + halfTtip stroke grestore xyopp halfTtip xystroke}def + /tt /Tip load def /tT /Ttip load def}% +\PSdict@@{/halfturn{xysegl 2 div dup dup neg exch rmoveto + 0 exch dup exch -180 -90 arc}bind def + /aturn{gchksavexy halfturn xystroke}def + /bturn{gchksavexy xyopp halfturn xystroke}def + /ta /aturn load def /tb /bturn load def}% +\dimen@=\xybsqll@\relax\count@=\dimen@% +\PSdict@@{% + /xysqll \the\count@\space dimendiv def + /squigl{gchksavexy xysqll dup neg 0 rmoveto + 2 div dup dup neg dup 3 -1 roll + 2 sqrt mul dup 5 1 roll + 135 45 arcn dup 3 -1 roll -135 -45 arc + xystroke}def + /g /squigl load def}% +\PSdict@@{/fullhook{0 xysegl 2 div dup -90 90 arcn}bind def + /halfhook{xysegl 2 div dup 0 exch 180 90 arcn}bind def +}% +\PSdict@@{/ahook{gchksavexy fullhook xystroke}def + /bhook{gchksavexy xyopp fullhook xystroke}def + /hook{gchksavexy gsave halfhook stroke grestore + xyopp halfhook xystroke}def + /h /hook load def /ha /ahook load def /hb /bhook load def}% +\PSdict@@{% + /xyqcirc{dup dup neg exch translate newpath + dup neg 0 exch moveto 0 0 3 -1 roll -90 0 arc}bind def +}% +\PSdict@@{% + /circ{gstartxy + 3 copy pop 2 copy cos mul 3 1 roll sin mul + rmoveto 0 0 5 2 roll arc xystroke}bind def + /o /circ load def}% +\PSdict@@{% + /circhar{gsave dup 3 gt{7 sub neg}if dup + 3 eq{pop dup 2 sqrt -2 div mul}{dup 1 eq{pop dup 2 sqrt 2 div mul} + {0 eq{dup}{0}ifelse}ifelse}ifelse + 0 translate 3 1 roll circ grestore}bind def + /c /circhar load def}% +\PSdict@@{end end}% +\endgroup% +\endinput diff --git a/macros/generic/diagrams/xypic/texinputs/xypspatt.tex b/macros/generic/diagrams/xypic/texinputs/xypspatt.tex new file mode 100644 index 0000000000..927ad08c11 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xypspatt.tex @@ -0,0 +1,104 @@ +%% xypspatt.tex from $Id: xypspatt.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``PostScript pattern prolog''. +%% Copyright (c) 1995-1998 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +%% As a special exception, you may use this file and all files derived +%% from it without restrictions. This special exception was added with +%% version 3.7 of Xy-pic. +%% +\begingroup \xycatcodes \xyPSobeylines@@% +\PSdict@@{/XYdict where pop begin XYdict begin}% +\PSdict@@{/:patt +{XYddict begin +14 dict begin +/BGnd exch def +/FGnd exch def +/PaintData exch def +/PatternType 1 def +/PaintType 1 def +/BBox[0 0 1 1]def +/TilingType 1 def +/XStep 1 def +/YStep 1 def +/PatternMtx[24 0 0 24 0 0]def +/PaintProc BGnd null ne + {{begin BGnd aload pop setrgbcolor 0 0 1 1 rF + FGnd aload pop setrgbcolor + 24 24 true PatternMtx PaintData imagemask end}} + {{begin FGnd aload pop setrgbcolor + 24 24 true PatternMtx PaintData imagemask end}} + ifelse def + currentdict PatternMtx end + gsave patangle xyland{180 add}if + rotate macfreq patfreq div dup neg exch scale matrix currentmatrix + grestore gsave setmatrix /DeviceRGB setcolorspace makepattern grestore + end}def}% +\PSdict@@{% +/rF{gsave + newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto + fill grestore}bind def }% +\PSdict@@{% + /setpatscreen{/pattstring exch store patfreq + patangle xyport not{90 add}if + {1 add 4 mul cvi pattstring exch get exch 1 add 4 mul cvi 7 sub + bitshift 1 and}setscreen}bind def + /setcolpattern{setpatscreen 64 div 1 exch sub currentrgbcolor + 1 1 3{pop 1 exch sub 3 index mul 1 exch sub 3 1 roll}for + setrgbcolor pop}def + /setgraypattern{setpatscreen 64 div setgray}def + /macfreq 9.375 def /patangle 0 def /patfreq 12.5 def}% +\PSdict@@{/checkland{% + /normland where{pop normland not}{false}ifelse + /xyland exch def + /por where{pop por}{/isls where{pop isls not /xyland true def} + {/land where{pop land not}{true} + ifelse}ifelse}ifelse /xyport exch def}def }% +\PSdict@@{% + /setpatfreq{/patfreq exch def}def + /setpatangle{/patangle exch def}def + /setbackcolor{/backcolor exch def}def + /setforecolor{/forecolor exch def}def + [1 1 1] setbackcolor xycolarray setforecolor + /bg /setbackcolor load def /fg /setforecolor load def + /pa /setpatangle load def /pq /setpatfreq load def }% +\PSdict@@{% + /xypattern{checkland counttomark dup 0 eq{pop} + {dup 1 eq{pop setpatscreen} + {dup 2 eq{pop setcolpattern} + {dup 3 eq{pop + /setcolorspace where { + /.setcolorspace where{pop pop pop setcolpattern} + {/.buildpattern where {pop + forecolor backcolor :patt setpattern + }{pop pop setcolpattern}ifelse}ifelse} + {pop setcolpattern}ifelse} + {5 eq{/setcolorspace where{ + /.setcolorspace where{pop pop pop pop pop setcolpattern} + {/.buildpattern where {pop + :patt setpattern + }{pop pop pop pop setcolpattern}ifelse}ifelse} + {pop pop pop setcolpattern}ifelse + }{}ifelse}ifelse}ifelse}ifelse}ifelse cleartomark }def + /xysetpattern{/xypatt exch def}def + /sp /xysetpattern load def }% +\PSdict@@{end end}% +\endgroup% +\endinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyrecat.tex b/macros/generic/diagrams/xypic/texinputs/xyrecat.tex new file mode 100644 index 0000000000..a70f24e5c4 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyrecat.tex @@ -0,0 +1,36 @@ +%% xyrecat.tex from $Id: xyrecat.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Reset Category Codes'' utility. +%% Copyright (c) 1994-1996 Kristoffer H. Rose +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\xyuncatcodes +\xyrecat @ 64 \catcode 64 11 +\xymakeADD@\addHASH@ # 35 +\xymakeADD@\addDOLL@ $ 36 +\xymakeADD@\addAND@ & 38 +\xymakeADD@\addRQ@ ' 39 +\xymakeADD@\addPLUS@ + 43 +\xymakeADD@\addDASH@ - 45 +\xymakeADD@\addDOT@ . 46 +\xymakeADD@\addLT@ < 60 +\xymakeADD@\addEQ@ = 61 +\xymakeADD@\addGT@ > 62 +\xymakeADD@\addLQ@ ` 96 +\endinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyrotate.tex b/macros/generic/diagrams/xypic/texinputs/xyrotate.tex new file mode 100644 index 0000000000..302e8819d0 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyrotate.tex @@ -0,0 +1,161 @@ +%% xyrotate.tex from $Id: xyrotate.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Rotate and Scale extension'' option. +%% Copyright (c) 1993-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{rotate}{Rotate and Scale extension}{\stripRCS$Revision: 3.8 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xydef@\xyundefinedRotate@#1#2@@{% + \xywarning@{The #1 #2 effect is not implemented with the current driver.}}% +\xydef@\NoResizing{\xyNoResizing@} +\xydef@\UseResizing{\xyUseResizing@} +\xydef@\xyNoResizing@{% + \global\let\origxyrescale@=\xyrescale@ + \global\let\origxyrotSizeMod@=\xyrotateSizeMod@ + \global\let\xyNoResizing@=\xyNoResizing@@ + \global\let\xyUseResizing@=\xyUseResizing@@ + \xyNoResizing@@ } +\xydef@\xyNoResizing@@{% + \global\let\xyrescale@=\xyignorescale@ + \global\let\xyrotateSizeMod@=\xyignoreSizeMod@ + } +\xylet@\xyUseResizing@=\relax +\xydef@\xyUseResizing@@{% + \global\let\xyrescale@=\origxyrescale@ + \global\let\xyrotateSizeMod@=\origxyrotSizeMod@ + } +\xydefcsname@{shape [@...]}#1{\xyrotatechar@#1@@}% +\xydefcsname@{shape [<...]}#1{\xyshearchar@{#1}@@}% +\xydefcsname@{shape [*...]}#1{\xyscalechar@{#1}@@}% +\xydefcsname@{shape [left]}{\xyshape@left@} +\xydefcsname@{shape [right]}{\xyshape@right@} +\xydefcsname@{shape [flip]}{\xyshape@flip@} +\xydefcsname@{shape [halfsize]}{\xyshape@halfsize@} +\xydefcsname@{shape [dblsize]}{\xyshape@dblsize@} +\xydefcsname@{shape [vflip]}{\xyshape@vflip@} +\xydefcsname@{shape [hflip]}{\xyshape@hflip@} +\xydef@\preXYtransform@{} +\xydef@\postXYtransform@{} +\xywarnifdefined\preXYtransform@@ +\xywarnifdefined\postXYtransform@@ + \gdef\preXYtransform@@{} + \gdef\postXYtransform@@{} +\xydef@\xy@transform@{} +\xydef@\preShape@@{} +\xydef@\postShape@@{} +\xydef@\modXYtransform@{% + \ifx\xy@transform@\empty + \transformDrop@\transformConnect@\resetTransform@\fi + \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{##1}}% + \expandafter\next@\expandafter{\preShape@@}% + \DN@##1{\expandafter\gdef\expandafter\preXYtransform@@\expandafter{% + \tmp@ ##1}}\expandafter\next@\expandafter{\preXYtransform@@}% + \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{##1}}% + \expandafter\next@\expandafter{\postShape@@}% + \DN@##1{\expandafter\gdef\expandafter\postXYtransform@@\expandafter{% + \postXYtransform@@ ##1}}\expandafter\next@\expandafter{\tmp@}}% +\xydef@\transformDrop@{\let\xy@transform@=\relax + \expandafter\def\expandafter\Drop@@\expandafter{% + \expandafter\preXYtransform@\Drop@@\postXYtransform@}} +\xydef@\transformConnect@{\let\xy@transform@=\relax + \expandafter\def\expandafter\Connect@@\expandafter{% + \expandafter\preXYtransform@\Connect@@\postXYtransform@}} +\xydef@\resetTransform@{\gdef\preXYtransform@@{}\gdef\postXYtransform@@{}} +\xydef@\xynametransform@#1{% + \DN@{\expandafter\gdef\expandafter#1\expandafter{\the\toks@}}\next@ } +\xydef@\xyscalechar@#1@@{\xyscalechars@#1,#1,@@} +\xydef@\xyscalechars@#1,#2,#3@@{% + \DN@{\xyrescale@(#1,#2)}% + \dimen@=#1\p@ + \ifdim\dimen@>\z@ \else \ifdim\dimen@<\z@ \else + \DN@{\xywarning@{invalid scaling factors #1, #2}}% + \fi\fi \dimen@=#2\p@ + \ifdim\dimen@>\z@ \else \ifdim\dimen@<\z@ \else + \DN@{\xywarning@{invalid scaling factors #1, #2 }}% + \fi\fi \next@ } +\xydef@\xyrescale@(#1,#2){% + \setboxz@h{\xyscale@@{#1}{#2}% + \dimen@=\ifx-#1\R@c\advance\dimen@-\R@c \dimen@=-\dimen@ + \else#1\L@c \advance\dimen@-\L@c\fi + \kern\dimen@\boxz@\kern-\dimen@}% + \R@c=\if-#1\L@c\else#1\R@c\fi + \L@c=\if-#1\R@c\else#1\L@c\fi + \U@c=\if-#2\D@c\else#2\U@c\fi + \D@c=\if-#2\U@c\else#2\D@c\fi } +\xydef@\xyignorescale@(#1,#2){\xywarning@{Ignoring rescale: #1,#2}% + \setboxz@h{\xyscale@@{#1}{#2}\boxz@}}% +\xydef@\xyshape@halfsize@{\xyrescale@(.5,.5)} +\xydef@\xyshape@dblsize@{\xyrescale@(2,2)} +\xydef@\xyshape@flip@{\xyrescale@(-1,-1)} +\xydef@\xyshape@vflip@{\xyrescale@(1,-1)} +\xydef@\xyshape@hflip@{\xyrescale@(-1,1)} +\xydef@\xyrotatechar@{\bgroup + \afterDIRECTIONorEMPTY{\xyrotateSizeMod@}{\xyFN@\xySpecialRotate@i}} +\xydef@\xySpecialRotate@i{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\xySpecialRotate@i}% + \else\ifx @\next \let\next@=\xyrotateSizeMod@ + \else\addEQ@\ifx \next + \addEQ@\DN@##1@@{% + \expandafter\xynametransform@\csname shape [##1]\endcsname\egroup}% + \else\ifx !\next \DN@!{\egroup\getSpecialRotate@}% + \else\ifx *\next \DN@*@@{\egroup\transformDrop@}% + \else \DN@{\xySpecialRotate@@}% + \fi\fi\fi\fi\fi \next@ } +\xydef@\getSpecialRotate@{\doSpecialRotate@@} +\xydef@\xyRotate@#1{\xyundefinedRotate@{rotate}{#1}@@} +\xydef@\xySpecialRotate@#1@@{\xyundefinedRotate@{rotate}{#1}@@\egroup} +\xydef@\doSpecialRotate@#1@@{\xyundefinedRotate@{special rotate}{#1}@@} +\xydef@\xyscale@#1#2{\xyundefinedRotate@{scale}{#1,#2}@@} +\xydef@\UnloadRotate@#1{% + \ifx#1\relax\else\xyunload@{rotation extension}\fi + \let\xyRotate@@=\xyRotate@ + \let\xySpecialRotate@@=\xySpecialRotate@ + \let\doSpecialRotate@@=\doSpecialRotate@ + \let\xyscale@@=\xyscale@ } +\UnloadRotate@\relax +\xyaddunsupport{rotate}{\UnloadRotate@\relax} +\xydef@\xyrotateSizeMod@ @@{% + \L@p=\L@c \R@p=\R@c \U@p=\U@c \D@p=\D@c + \ifdim\cosDirection\p@>\z@ + \R@c=\cosDirection\R@p \L@c=\cosDirection\L@p + \U@c=\cosDirection\U@p \D@c=\cosDirection\D@p + \else + \R@c=\cosDirection\L@p \L@c=\cosDirection\R@p + \U@c=\cosDirection\D@p \D@c=\cosDirection\U@p + \fi + \advance\L@c \if-\sinDirection\D@p\else\sinDirection\U@p\fi + \advance\R@c \if-\sinDirection\U@p\else\sinDirection\D@p\fi + \advance\U@c \if-\sinDirection\L@p\else\sinDirection\R@p\fi + \advance\D@c \if-\sinDirection\R@p\else\sinDirection\L@p\fi + \dimen@ii=\L@c \advance\dimen@ii-\L@p + \edef\tmp@{\egroup \L@c=\the\L@c \R@c=\the\R@c \U@c=\the\U@c \D@c=\the\D@c + \dimen@ii=\the\dimen@ii \noexpand\setboxz@h\bgroup + \noexpand\xyRotate@@{\the\Direction}}\tmp@ + \xydropRotated@ } +\xydef@\xydropRotated@@{% + \kern\dimen@ii \boxz@ \kern-\dimen@ii \modXYtransform@ \egroup } +\xylet@\xydropRotated@=\xydropRotated@@ +\xydef@\xyignoreSizeMod@ @@{\xywarning@{Ignoring rotation}} +\xydef@\xyshape@left@{\xyrotatechar@ v(0,1)@@} +\xydef@\xyshape@right@{\xyrotatechar@ v(0,-1)@@} +\xydef@\xyshearchar@{\xyundefinedRotate@{shearing}} +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xysmart.tex b/macros/generic/diagrams/xypic/texinputs/xysmart.tex new file mode 100644 index 0000000000..e98c281f4e --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xysmart.tex @@ -0,0 +1,320 @@ +%% xysmart.tex from $Id: xysmart.doc,v 3.6 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Smart Path feature'' option. +%% Copyright (c) 1998 George C. Necula +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{smart}{Smart Path option}{\stripRCS$Revision: 3.6 $}% + {George C. Necula}{necula@cs.cmu.edu}% + {School of Computer Science, + Carnegie Mellon University, + 5000 Forbes Avenue, + Pittsburgh, PA 15213-3891, USA} +\xyrequire{arrow}\xycatcodes +\let\origPATHturn@=\PATHturn@ +\def\PATHturn@{% + \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHturn@}% + \else\ifx s\next + \let\origPATHturn@i=\PATHturn@i\let\PATHturn@i=\PATHsmartturn@i + \let\origPATHturn@cir=\PATHturn@cir\let\PATHturn@cir=\PATHsmartturn@cir + \DN@ s{\xyFN@\origPATHturn@}% + \else + \DN@{\origPATHturn@}% + \fi\fi + \next@} +\xydef@\PATHsmartturn@cir{% + \edef\next@{{\CIRin@@}{\expandafter\noexpand\CIRorient@@}{\CIRout@@}}% + \expandafter\PATHturn@i\next@} +\xydef@\PATHsmartturn@i#1#2#3{% + \DN@##1{% + \def\PATHinit@@{% + \xy@@{% + \def\sm@CIRin{#1}\def\sm@CIRout{#3}% + \ifx\sm@CIRout\empty + \let\sm@CIRout=\sm@CIRin + \let\sm@CIRin=\PATHlastout@@ + \fi + ##1\relax}% + \xy@@{\enter@{\basefromthebase@}}% + \xy@@{\sm@conn}% + \xy@@{\X@p=\X@c \Y@p=\Y@c \czeroEdge@% Save the start of the segment + \count@=\sm@CIRout\count@=\the\count@% Move forward a dash to + \dimen@=\xydashl@ \ABfromdiag@ \advance\X@c\A@ \advance\Y@c\B@ + \edef\PATHpostpos@@{\X@c=\the\X@c \Y@c=\the\Y@c \noexpand\czeroEdge@ + \noexpand\PATHomitslide@@true}}% + \xy@@{\leave@ + \edef\PATHlastout@@{\sm@CIRout}% + \count@=\sm@CIRout \dimen@=\xydashl@ \Directionfromdiag@}}}% + \expandafter\next@\expandafter{\the\toks@}\toks@={}% + \let\PATHextra@@=\empty + \def\PATHpost@@{\xy@@\PATHpostpos@@}% + \let\PATHlabelsextra@@=\relax + \let\PATHturn@i=\origPATHturn@i + \let\PATHturn@cir=\origPATHturn@cir + \xyFN@\PATHturn@ii} +\xydef@\sm@nil{} +\xydef@\sm@nnil{\sm@nil} +\xydef@\sm@maxcost{1000mm}% +\xydef@\sm@conn{ + \enter@{\cfromthec@ \DirectionfromtheDirection@}\cfromp@% Adjust p + \count@=\sm@CIRin\count@=\the\count@ + \dimen@=\xydashl@ \ABfromdiag@ \advance\X@p\A@\advance\Y@p\B@ + \setupDirection@ \the\Edge@c\z@ \czeroEdge@ + \pfromc@ + \reverseDirection@ + \count@=\sm@CIRin\count@=\the\count@ + \dimen@=\xydashl@ \ABfromdiag@ + \edef\tmp@{\noexpand\dir\artail@@}\expandafter\sm@drop@\tmp@ + \X@c=\X@p\advance\X@c\A@ \Y@c=\Y@p\advance\Y@c\B@ \czeroEdge@ + \sm@stri + \X@p=\X@c \Y@p=\Y@c + \leave@ + \enter@{\pfromthep@ \DirectionfromtheDirection@}\pfromc@% Adjust c + \count@=\sm@CIRout\count@=\the\count@ + \dimen@=\xydashl@ \ABfromdiag@ \advance\X@p-\A@\advance\Y@p-\B@ + \setupDirection@ \the\Edge@c\z@ + \advance\X@c-\A@\advance\Y@c-\B@% Leave room for a dash to terminate the seg + \czeroEdge@ + \def\PATHlabelsnext@@{}% + \leave@ + \R@=\turnradius@ + \cirrestrict@@%Adjust the radius to fit the circles + \let\sm@circles=\sm@nil + \edef\sm@bestcost{\sm@maxcost}% + \sm@trycircles 1%Try counter clockwise first + \sm@trycircles{-1}% + \ifdim\sm@bestcost<\sm@maxcost + \cfromp@ + \expandafter\sm@conndraw\sm@bestconn + \else + \xyerror@{Cannot draw the smart connector}{}% + \fi +} +\xydef@\sm@trycircles#1{% + \ifnum #1>0% Compute the opposite orientation + \def\sm@CIRorienti{-1}% + \else + \def\sm@CIRorienti{1}% + \fi + \edef\tmp@{{{\sm@CIRin}{#1}{\sm@CIRout}}}% + \expandafter\sm@trycirclelist\expandafter{\tmp@\sm@nil}% + \count@@=\sm@CIRin\count@@=\the\count@@\count@=\count@@ + \sm@roundcount@{#1}% + \edef\sm@savecount@{\the\count@}% + \ifnum\the\count@=\the\count@@ \else + \edef\tmp@{{{\sm@CIRin}{#1}{\the\count@}}% + {{\the\count@}{\sm@CIRorienti}{\sm@CIRout}}}% + \expandafter\sm@trycirclelist\expandafter{\tmp@\sm@nil}% + \fi + \count@=\sm@savecount@\count@=\the\count@ + \sm@advancecount@ 2{#1}\edef\sm@savecount@{\the\count@}% + \edef\tmp@{{{\sm@CIRin}{#1}{\the\count@}}% + {{\the\count@}{\sm@CIRorienti}{\sm@CIRout}}}% + \expandafter\sm@trycirclelist\expandafter{\tmp@\sm@nil}% + \count@=\sm@savecount@\count@=\the\count@ + \sm@advancecount@ 2{#1}\edef\sm@savecount@{\the\count@}% + \edef\tmp@{{{\sm@CIRin}{#1}{\the\count@}}% + {{\the\count@}{\sm@CIRorienti}{\sm@CIRout}}}% + \expandafter\sm@trycirclelist\expandafter{\tmp@\sm@nil}% + \count@=\sm@savecount@\count@=\the\count@ + \sm@advancecount@ 2{#1}\edef\sm@savecount@{\the\count@}% + \edef\tmp@{{{\sm@CIRin}{#1}{\the\count@}}% + {{\the\count@}{\sm@CIRorienti}{\sm@CIRout}}}% + \expandafter\sm@trycirclelist\expandafter{\tmp@\sm@nil}% +} +\xydef@\sm@advancecount@#1#2{% + \ifnum #2>0 + \edef\tmp@{#1}% + \else + \edef\tmp@{-#1}% + \fi + \advance\count@\tmp@\count@=\the\count@ + \ifnum\the\count@<0 \advance\count@ 8\fi + \ifnum\the\count@>7 \advance\count@ -8\fi + \count@=\the\count@ +} +\xydef@\sm@roundcount@#1{% + \ifcase\the\count@ + \advance\count@ #1\or + \or \advance\count@ #1\or + \or \advance\count@ #1\or + \or \advance\count@ #1\fi + \count@=\the\count@ + \ifnum\the\count@<0 \advance\count@ 8\fi + \ifnum\the\count@>7 \advance\count@ -7\fi + \count@=\the\count@ +} +\newif\ifsm@firstseg +\newif\ifsm@acceptable +\xydef@\sm@trycirclelist#1{% + \R@p=\z@\U@p=\R@p% Clear the deltas + \def\sm@exthp{0}\def\sm@exthm{0}% + \def\sm@extvp{0}\def\sm@extvm{0}% + \def\sm@dxp{0pt}\def\sm@dxm{0pt}% + \def\sm@dyp{0pt}\def\sm@dym{0pt}% + \def\sm@segs{}% + \sm@firstsegtrue + \def\sm@connlen{0pt}% + \let\sm@tryclcont=\sm@trycirclelist@i + \sm@trycirclelist@i #1%Strip {} to expose the list elements + \count@@=\sm@CIRout\count@@=\the\count@\count@=\the\count@ + \sm@roundcount@{1}% + \ifnum\count@=\count@@ + \edef\sm@segs{\sm@segs{{\the\count@}{1}{\the\count@}}}% + \fi + \A@=\X@p\advance\A@\R@p\advance\A@ -\X@c\A@=-\A@ + \B@=\Y@p\advance\B@\U@p\advance\B@ -\Y@c\B@=-\B@ + \sm@acceptabletrue + \ifdim\A@>0pt + \ifnum\sm@exthp>0 \dimen@=\A@ \divide\dimen@\sm@exthp + \edef\sm@dxp{\the\dimen@}% + \else \sm@acceptablefalse\fi\fi + \ifdim\A@<0pt + \ifnum\sm@exthm>0 \dimen@=\A@ \divide\dimen@\sm@exthm + \edef\sm@dxm{\the\dimen@}% + \else \sm@acceptablefalse\fi + \A@=-\A@%Make it positive + \fi + \ifdim\B@>0pt + \ifnum\sm@extvp>0 \dimen@=\B@ \divide\dimen@\sm@extvp + \edef\sm@dyp{\the\dimen@}% + \else \sm@acceptablefalse\fi\fi + \ifdim\B@<0pt + \ifnum\sm@extvm>0 \dimen@=\B@ \divide\dimen@\sm@extvm + \edef\sm@dym{\the\dimen@}% + \else \sm@acceptablefalse\fi + \B@=-\B@ + \fi + \ifsm@acceptable + \dimen@=\sm@connlen\advance\dimen@\A@\advance\dimen@\B@ + \ifdim\dimen@<\sm@bestcost + \edef\sm@bestcost{\the\dimen@}% + \edef\sm@bestconn{{\sm@dxp}{\sm@dxm}{\sm@dyp}{\sm@dym}{\sm@segs}}% + \fi + \fi +} +\xydef@\sm@showext#1{% + \W@{#1\space hp=\sm@exthp,hm=\sm@exthm,vp=\sm@extvp + ,vm=\sm@extvm,len=\sm@connlen}} +\xydef@\sm@trycirclelist@i#1{% + \def\@tmp{#1}% + \ifx \@tmp\sm@nnil \let\sm@tryclcont=\relax\else + \expandafter\sm@tryclcar\@tmp \fi + \sm@tryclcont} +\xydef@\sm@tryclcar#1#2#3{% + \dimen@=\ifnum #2<0 -\fi\R@ + \count@=#1\count@=\the\count@ \ABfromdiag@ + \advance\R@p -\B@ \advance\U@p \A@ + \count@=#3\count@=\the\count@ \ABfromdiag@ + \advance\R@p \B@ \advance\U@p -\A@ + \sm@computeext{#1}{#2}{#3}% +} +\xydef@\sm@computeext#1#2#3{% + \ifsm@firstseg + \sm@accumext#1% + \sm@firstsegfalse + \fi + \count@@=#1\count@@=\the\count@@\count@=\count@@ + \dimen@=\sm@connlen + \sm@roundcount@{#2}% + \ifnum \count@=\count@@ + \sm@advancecount@ 1{#2}% + \advance\dimen@ 0.7854\R@% It was incremented with 1/8 circle + \ifnum \count@=#3% Check if done + \else + \sm@advancecount@ 1{#2}% + \advance\dimen@ 0.7854\R@% It was incremented with 1/8 circle + \fi + \else + \advance\dimen@ 0.7854\R@% It was incremented with 1/8 circle + \fi + \edef\sm@connlen{\the\dimen@}% + \sm@accumext{\the\count@}% + \edef\sm@segs{\sm@segs{{#1}{#2}{\the\count@}}}% + \ifnum\the\count@=#3 \else + \edef\tmp@{{\the\count@}{#2}{#3}}% + \expandafter\sm@computeext\tmp@ + \fi +} +\xydef@\sm@accumext#1{% + \ifcase #1% + \or \count@@=\sm@extvm\advance\count@@ by1% + \edef\sm@extvm{\the\count@@}% + \or\or \count@@=\sm@exthp\advance\count@@ by1% + \edef\sm@exthp{\the\count@@}% + \or\or \count@@=\sm@extvp\advance\count@@ by1% + \edef\sm@extvp{\the\count@@}% + \or\or \count@@=\sm@exthm\advance\count@@ by1% + \edef\sm@exthm{\the\count@@}% + \fi +} +\xydef@\sm@conndraw#1#2#3#4#5{% + \def\sm@contlist{\sm@drawseglist}% + \edef\sm@dxp{#1}% + \edef\sm@dxm{#2}% + \edef\sm@dyp{#3}% + \edef\sm@dym{#4}% + \sm@drawseglist #5\sm@nil} +\xydef@\sm@drawseglist#1{% + \ifx #1\sm@nil \def\sm@contlist{}\else + \sm@drawseg #1\fi + \sm@contlist} +\xydef@\sm@drawseg#1#2#3{% + \def\CIRin@@{#1}\def\CIRout@@{#3}% + \sm@straight%See if a straight line is needed here. Insert it and + \ifnum\CIRin@@=\CIRout@@ \else + \count@=\CIRin@@ + \dimen@=\ifnum #2<0 -\fi\R@ + \ABfromdiag@ + \advance\X@c -\B@ \advance\Y@c \A@ + \ifnum #2>0 \def\CIRorient@@{\CIRacw@}% + \else \def\CIRorient@@{\CIRcw@}\fi + \drop@\literal@{\hbox\bgroup\cir@i}% + \dimen@=\ifnum #2<0 -\fi\R@ + \count@=\CIRout@@\count@=\count@%Wierd. If I remove this last assignm + \ABfromdiag@ + \advance\X@c\B@ \advance\Y@c-\A@ + \fi +} +\xydef@\sm@straight{% + \U@c=\z@\D@c=\U@c\L@c=\U@c\R@c=\U@c + \pfromc@ + \ifcase \CIRin@@ \or% 1 is V- + \A@=\sm@dym\advance \Y@c\A@ + \or\or + \A@=\sm@dxp\advance \X@c\A@ + \or\or + \A@=\sm@dyp\advance \Y@c\A@ + \or\or + \A@=\sm@dxm\advance \X@c\A@ \fi + \ifdim\X@c=\X@p\ifdim\Y@c=\Y@p\else \sm@stri \fi\else \sm@stri \fi +} +\xydef@\sm@stri{% + \edef\tmp@{\expandafter\noexpand\arstemprefix@@\arstem@@}% + \expandafter\sm@connect@\tmp@} +\xydef@\sm@connect@#1#{% + \DN@##1{\connect@{#1}{##1}}\next@} +\xydef@\sm@drop@#1#{% + \DN@##1{\drop@{#1}{##1}}\next@} +\xydef@\smconn#1#2#3{% + \edef\sm@CIRin{#1}\edef\sm@CIRout{#2}% + \R@=#3\R@=\the\R@ + \sm@conn} +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xytextures.tex b/macros/generic/diagrams/xypic/texinputs/xytextures.tex new file mode 100644 index 0000000000..e69f1de5f2 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xytextures.tex @@ -0,0 +1,123 @@ +%% xytextures.tex from $Id: xytextures.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Textures'' driver interface option. +%% Copyright (c) 1995-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{textures}{Textures driver}{\stripRCS$Revision: 3.7 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xydef@\Textures@@#1{\dvimessage@{Textures}{#1}} +\newdriver{% + \xyaddsupport{color}\texturesColor@@ + \xyaddsupport{crayon}\texturesCrayon@@ + \xyaddsupport{ps}\texturesPS@@ + \xyaddsupport{rotate}\texturesRotate@@ + \xyaddsupport{line}\texturesLine@@ + \xyaddsupport{frame}\texturesFrames@@ + \xyaddsupport{tile}\texturesTiles@@ + \xyaddsupport{cmtip}\relax +} +\xydef@\TexturesColor@push#1{\special{color push}\special{color #1}} +\xydef@\TexturesColours@{\texturesPStypes@ + \let\xylocalColor@=\xystackcolor@ + \let\xycolor@push=\TexturesColor@push + \def\xycolor@{\xycolor@@}% + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}% + \installPScolor@ }\else\DN@{}\fi \next@ + \ifx\xycolor@@\xyNoColor@ \let\xycolor@@=\xycolor@raw@@\fi + \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\texturesCrayon@@{}}% + \else\let\next@=\xystandardcolors@ \fi \next@ + \let\xycolorwarning@=\relax \Textures@@{color}% + \let\texturesColor@@=\relax + \let\UnloadColor@@=\NoTexturesColor@ + } +\xydef@\texturesColor@@{\TexturesColours@} +\xydef@\NoTexturesColor@{% + \let\xylocalColor@=\xyNoColor@@ + \let\xycolor@=\xyNoColor@ + \let\xycolorwarning@=\xycolorwarning@@ + \let\texturesColor@@=\TexturesColours@ + \let\UnloadColor@@=\UnloadColor@ + } +\xydef@\texturesCrayon@@{\texturesColor@@\texturesCrayon@} +\xydef@\texturesCrayon@{\installCrayolaColors@}% +\xydef@\texturesPS@@{\texturesPS@} +\xydef@\texturesPSunload@{\UnloadPS@ + \let\UnloadPS@@=\UnloadPS@ + \let\texturesPS@@=\texturesPS@ } +\xydef@\texturesPStypes@{% + \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}% + \ifx\PSspecial@@\TexturesSpecial@\else + \let\PSspecial@@=\TexturesSpecial@ + \let\PSmacro@@=\TexturesMacro@ + \let\PSdict@@=\TexturesDict@ + \let\PSraw@@=\TexturesRaw@ + \let\PSinclude@@=\TexturesInclude@ + \let\PSspecialdict@@=\TexturesSpecialDict@ + \let\xyPSobeylines@@=\obeyTextureslines@ + \Textures@@{PostScript}% + \fi \texturesCurrpt@ \XYpredict@ } +\xydef@\TexturesSpecial@#1{\firstPS@@\special{postscript #1}} +\xydef@\TexturesMacro@#1{\special{postscript {#1}xy}} +\xydef@\TexturesDict@#1{\special{prePostScript #1}} +\xydef@\TexturesSpecialDict@#1{\special{prePostScript #1}} +\xydef@\TexturesInclude@#1{\firstPS@@\special{prePostScriptfile #1}} +\xydef@\TexturesRaw@#1{\firstPS@@\special{rawpostscript #1}}% +{\catcode`\^^M=\active% + \gdef\next{\catcode`\^^M=\active \let^^M=\par% + \let\PSspecial@@=\TexturesDict@ \obeyspaces}} +\xylet@\obeyTextureslines@=\next +\xydef@\texturesCurrpt@{\let\xyPScurrpt@@=\texturesCurrpt@@}% +\xydef@\texturesCurrpt@@{\PSspecial@@{xyi}\PSraw@@{userdict begin xyx end}} +\xydef@\texturesPS@{\texturesPStypes@ + \let\texturesPS@@=\relax + \let\UnloadPS@@=\texturesPSunload@ + \let\installxyps@@=\relax \installxyps@ } +\xydef@\texturesRotate@@{\texturesRotate@} +\xydef@\texturesRotate@{\texturesPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}% + \xyRotScale@@ \installPSrotscale@ }% + \else\DN@{\xydriverfail@{rotations are}\UnloadRotate@\relax}\fi + \next@} +\xydef@\texturesLine@@{\texturesLine@} +\xydef@\texturesLine@{\texturesPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}% + \installPSline@ }% + \else\DN@{\xydriverfail@{line-widths are}\UnloadLine@\relax}\fi + \next@ } +\xydef@\texturesFrames@@{\texturesFrames@} +\xydef@\texturesFrames@{\texturesPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}% + \installPSframes@ }% + \else\DN@{\xydriverfail@{frames are}\UnloadPSFrames@\relax}\fi + \next@ } +\xydef@\texturesTiles@@{\texturesTiles@} +\xydef@\texturesTiles@{\texturesPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}% + \installPSpatterns@ \xystandardpatterns@}% + \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi + \next@ } +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xytile.tex b/macros/generic/diagrams/xypic/texinputs/xytile.tex new file mode 100644 index 0000000000..fb411fca66 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xytile.tex @@ -0,0 +1,125 @@ +%% xytile.tex from $Id: xytile.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Pattern and Tile extension'' option. +%% Copyright (c) 1993-1997 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{tile}{Pattern and Tile extension}{\stripRCS$Revision: 3.8 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xydef@\xypatternwarning@@{\xypatternmessage@ + \gdef\xypatternwarning@{\xypatternmessage@ + \xywarning@{...no further pattern warnings will be given.}% + \global\let\xypatternwarning@=\relax }} +\xylet@\xypatternwarning@=\xypatternwarning@@ +\xydef@\xypatternmessage@{% + \xywarning@{Current driver does not support patterns.}}% +\xydef@\newxypattern{\begingroup\xycatcodes\newxypattern@i} +\xydef@\newxypattern@i#1#2{\edef\next@{\endgroup + \noexpand\newxyPattern{#1}{}{#2}{}}\next@} +\xydef@\newxyPattern#1#2#3#4{\newxypattern@{#1}{#2}{#3}{#4}{}} +\xydef@\newxypattern@#1#2#3#4#5{% + \expandafter\let\expandafter\next@\csname shape [#1]\endcsname + \ifx\next@\relax + \DN@{#4}\ifx\next@\empty + \DN@{#2}\ifx\next@\empty + \DN@{\newxystyle{#1}{\xylocalpattern@{}{#3}\xypattern@{#3}}}% + \else + \DN@{\newxystyle{#1}{\xylocalpattern@{#2}{#3}\xypattern@{#2 #3}}}% + \fi + \else\DN@{#2#3}\ifx\next@\empty + \DN@{\newxystyle{#1}{\xylocalpattern@{#4}{}\xypattern@{#4}}}% + \else + \DN@{\newxystyle{#1}{\xylocalpattern@{#2}{#3}\xypattern@{#4}}}% + \fi\fi + \else \def\tmp@{\relax}\DNii@{#5}% + \ifx\nextii@\tmp@ + \DN@{#4}\ifx\next@\empty + \DN@{#2}\ifx\next@\empty + \DN@{\newxystyle{#1}{\xylocalpattern@{}{#3}\xypattern@{#3}}}% + \else + \DN@{\newxystyle{#1}{\xylocalpattern@{#2}{#3}\xypattern@{#2 #3}}}% + \fi + \else + \DN@{#2#3}\ifx\next@\empty + \DN@{\newxystyle{#1}{\xylocalpattern@{#4}{}\xypattern@{#4}}}% + \else + \DN@{\newxystyle{#1}{\xylocalpattern@{#2}{#3}\xypattern@{#4}}}% + \fi\fi + \else\DN@{}\fi\fi \next@\relax } +\xydef@\xyNopattern@#1{} +\xylet@\xypattern@@=\xyNopattern@ +\xydef@\xyNopattern@@#1#2{\xypatternwarning@} +\xylet@\xypattern@=\xypattern@@ +\xylet@\xylocalpattern@=\xyNopattern@@ +\xydef@\Unloadpattern@{% + \let\xylocalpattern@=\xyNopattern@@ + \let\xypattern@=\xyNopattern@ + \let\xypatternwarning@=\xypatternwarning@@ } +\Unloadpattern@ +\xydef@\xystandardpatterns@{}% +\xynew@{read}{\xypatread@} +\xydef@\defaultpattfile@{} +\xydef@\xygetfilepatterns@#1{\DN@{#1}% + \ifx\next@\empty + \ifx\defaultpattfile@\empty \xywarning@{No pattern file specified.}% + \else \DN@{\expandafter\openpattfile@\expandafter{\defaultpattfile@}}\fi + \else \DN@{\openpattfile@{#1}}\fi \next@ } +\xydef@\openpattfile@#1{\openin\xypatread@=#1.xyp + \ifeof\xypatread@\xywarning@{No patterns in file: #1.xyp}% + \closein\xypatread@ + \else \expandafter \xyreadpatfile@ \fi }% +\xydef@\UsePatternFile#1{\def\defaultpattfile@{#1}} +\xydef@\LoadAllPatterns{\let\parsepattern@=\parsepattern@@ + \xygetfilepatterns@ } +\xydef@\LoadPattern#1{\let\parsepattern@=\filepattern@@ + \def\pattname@{#1}\xygetfilepatterns@} +\xydef@\AliasPattern#1#2{\let\parsepattern@=\aliaspattern@@ + \def\aliasname@{#1}\def\pattname@{#2}\xygetfilepatterns@} +\xydef@\xyreadpatfile@{% + \loop@ \bgroup\xycatcodes + \global\read\xypatread@ to\xypatline@ + \ifeof\xypatread@ \aftergroup\endpatread@ + \else\aftergroup\morepatread@\fi \edef\next@{% + \egroup\noexpand\getxypattern@{\xypatline@!!!}\relax}\next@ + \repeat@ } +\xydef@\endpatread@{\closein\xypatread@\iffalse} +\xydef@\morepatread@{\iftrue} +\xydef@\getxypattern@#1{\def\next{#1}\getxypattern@@} +\xydef@\getxypattern@@{\DN@{!!!}\ifx\next\next@\DN@{}% + \else\DN@{\expandafter\parsepattern@\next}\fi \next@ } +\xydef@\parsepattern@@#1 #2!#3\relax{\newxypattern{#1}{#2}} +\xydef@\filepattern@@#1 #2!#3\relax{\DN@{#1}% + \ifx\next@\pattname@ + \DN@{\expandafter\foundpattern@\expandafter{\pattname@}{#2}}% + \else\DN@{}\fi \next@ } +\xydef@\foundpattern@#1#2{\newxypattern{#1}{#2}\endpatread@\fi + \expandafter\eat@} +\xydef@\aliaspattern@@#1 #2!#3\relax{\DN@{#1}% + \ifx\next@\pattname@ + \DN@{\expandafter\foundpattern@\expandafter{\aliasname@}{#2}}% + \else\DN@{}\fi \next@ } +\DN@{\xyaddunsupport{tile}\Unloadpattern@}% +\ifx\xyeverywithoption@tile@\undefined +\else\ifx\xyeverywithoption@tile@\empty +\else + \DN@{\xysetup@@{\xywithoption{tile}{\xyeverywithoption@tile@\xydriversloaded@@}}}% +\fi\fi \next@ +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xytips.tex b/macros/generic/diagrams/xypic/texinputs/xytips.tex new file mode 100644 index 0000000000..55a61b25e4 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xytips.tex @@ -0,0 +1,81 @@ +%% xytips.tex from $Id: xytips.doc,v 3.11 2013/10/06 01:12:08 krisrose Exp $ +%% +%% Xy-pic ``More Tips'' extension. +%% Copyright (c) 1992-1996 Kristoffer H. Rose +%% +%% This file is part of the Xy-pic package for graphs and diagrams in TeX. +%% Copyright (c) 1991-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{tips}{More Tips extension}{\stripRCS$Revision: 3.11 $}% + {Kristoffer H.~Rose}{kris@diku.dk}% + {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)} +\xylet@\tip@xy=\tip@ +\xylet@\atip@xy=\atip@ +\xylet@\btip@xy=\btip@ +\xylet@\Tip@xy=\Tip@ +\xylet@\Ttip@xy=\Ttip@ +\xylet@\tipjot@xy=\tipjot@ +\xyfont@\xy@@atfont=xycmat10 +\xyfont@\xy@@btfont=xycmbt10 +\xyfont@\xy@@alfont=xyluat10 +\xyfont@\xy@@blfont=xylubt10 +\xydef@\tipfamily@@{cm} +\xydef@\tipsize@@{10} +\xydef@\SelectTips#1#2{% + \DN@{#1}\ifx\next@\empty\else \def\tipfamily@@{#1}\fi + \DN@{#2}\ifx\next@\empty\else \def\tipsize@@{#2}\fi + \csname tipfamily \tipfamily@@\endcsname \ignorespaces} +\xydefcsname@{tipfamily cm}{\loadtipfonts@ + \let\tip@=\tip@cm \let\atip@=\atip@cm \let\btip@=\btip@cm + \let\Tip@=\Tip@xy \let\Ttip@=\Ttip@xy \def\tipjot@{.2em}} +\xydef@\loadtipfonts@{\edef\next##1##2{##1=xy\tipfamily@@##2\tipsize@@}% + \next{\font\xy@@atfont}{at} + \next{\font\xy@@btfont}{bt} +} +\xydef@\tip@cm{\activatetips@ \tip@x\tip@@} +\xydef@\atip@cm{\activatetips@ \tip@x\atip@@} +\xydef@\btip@cm{\activatetips@ \tip@x\btip@@} +\xydef@\activatetips@{\let\xyatipfont=\xy@@atfont \let\xybtipfont=\xy@@btfont} +\xydefcsname@{tipfamily eu}{\loadtipfonts@ + \let\tip@=\tip@cm \let\atip@=\atip@cm \let\btip@=\btip@cm + \let\Tip@=\Tip@eu \let\Ttip@=\Ttip@eu \def\tipjot@{.15em}} +\xydef@\Tip@eu{\kern1.5pt \vrule height1.5pt depth1.5pt width\z@ + \Tip@@eu \kern1.5pt \egroup + \U@c=1.5pt \D@c=1.5pt \L@c=1.5pt \R@c=1.5pt \Edge@c={\circleEdge}% + \Invisible@false \Hidden@false \def\Leftness@{.5}\def\Upness@{.5}% + \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}} +\xydef@\Tip@@eu{\count@=\DirectionChar + \advance\count@-10 \ifnum\count@<\z@ \advance\count@128 \fi + \xyatipfont\char\count@ + \advance\count@ 20 \ifnum127<\count@ \advance\count@-128 \fi + \xybtipfont\char\count@} +\xydef@\Ttip@eu{\kern2.4pt \vrule height2.4pt depth2.4pt width\z@ + \Ttip@@eu \kern2.4pt \egroup + \U@c=2.4pt \D@c=2.4pt \L@c=2.4pt \R@c=2.4pt \Edge@c={\circleEdge}% + \Invisible@false \Hidden@false + \def\Leftness@{.5}\def\Upness@{.5}% + \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}} +\xydef@\Ttip@@eu{% + \setboxz@h\bgroup\reverseDirection@\line@ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ + \kern-\L@c \boxz@ \kern\L@c \Tip@@eu} +\xydefcsname@{tipfamily lu}{\loadtipfonts@ + \let\tip@=\tip@cm \let\atip@=\atip@cm \let\btip@=\btip@cm + \let\Tip@=\Tip@xy \let\Ttip@=\Ttip@xy \def\tipjot@{.2em}} +\xydef@\UseTips{\csname tipfamily \tipfamily@@\endcsname} +\xydef@\NoTips{\let\tip@=\tip@xy \let\atip@=\atip@xy \let\btip@=\btip@xy + \let\Tip@=\Tip@xy \let\Ttip@=\Ttip@xy \let\tipjot@=\tipjot@xy} +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xytp-f.tex b/macros/generic/diagrams/xypic/texinputs/xytp-f.tex new file mode 100644 index 0000000000..68243fe9c4 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xytp-f.tex @@ -0,0 +1,174 @@ +%% xytp-f.tex from $Id: xytp-f.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Frame extension'' TPIC backend support. +%% Copyright (c) 1995-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xytpfloaded\empty \message{not reloaded}\endinput \fi +\let\xytpfloaded=\empty \xycatcodes +\xydef@\installTPICframes@{% + \let\framed@body@@=\xyTPICframed@body@ + \let\circled@x@@=\xyTPICcircled@x@ + \let\ellipsed@x@@=\xyTPICellipsed@x@ + \installTPICfills@ + \xyuncatcodes} +\xydef@\UseTPICframes{\installTPICframes@} +\xydef@\NoTPICframes{\UnloadFrames@} +\xydef@\xyTPICframed@body@{\DN@{\framed@body@}% + \ifdim\R@=\z@ + \ifx\framehfill\frm@solidh@@ + \DN@{\xyTPICframed@rect@i\xytpic@solid@@}% + \else\ifx\framehfill\frm@dashh@@ + \DN@{\xyTPICframed@rect@i\xytpic@dashed@@}% + \else\ifx\framehfill\frm@doth@@ + \DN@{\xyTPICframed@rect@i\xytpic@dotted@@}% + \fi\fi\fi\fi \next@ } +\xydef@\xyTPICframed@rect@i#1{\vglue\U@c + \hbox{\hglue\L@c\xyTPICrect@{#1}\hglue\R@c}\vglue\D@c} +\xydef@\xyTPICcircled@x@{\DN@{\xyTPICcircled@xx{}}% + \ifx\framehfill\frm@doth@@ \DN@{\xyTPICdotcirc@}% + \else\ifx\framehfill\frm@dashh@@\DN@{\xyTPICdashcirc@}% + \fi\fi \next@ } +\xydef@\xyTPICcircled@xx#1{\vglue2\R@ + \hbox{\hglue2\R@\xyTPICfullcircle@#1\hglue2\R@}\vglue2\R@} +\xydef@\xyTPICdotcirc@{\let\zerodot=\framezerodot@@ + \L@=\R@ \circled@x@@ } +\xydef@\xyTPICdashcirc@{\L@=\R@ \circled@x@@ } +\xydef@\xyTPICdotellip@{\ellipsed@x@@ } +\xydef@\xyTPICdashellip@{\ellipsed@x@@ } +\xydef@\xyTPICellipsed@x@#1#2{\DN@{\xyTPICellipsed@xx{}}% + \ifx\framehfill\frm@doth@@\DN@{\xyTPICdotellip@}% + \else\ifx\framehfill\frm@dashh@@\DN@{\xyTPICdashellip@}% + \fi\fi \next@{#1}{#2}} +\xydef@\xyTPICellipsed@xx#1#2#3{\vglue #3\vglue #3\relax + \hbox{\L@c = #2\relax \R@c=\L@c \D@c = #3\relax \U@c=\D@c + \hglue#2\hglue#2\relax \R@=#2\relax \L@=#3\relax + \xyTPICfullcircle@#1\hglue#2\hglue#2\relax}% + \vglue #3\vglue #3\relax} +\xydef@\xyTPICrect@#1{\DNii@{\relax}\DN@{#1}\toks@={}% + \ifx\next@\nextii@ \xytpic@pn0\relax\xytpic@bk + \def\xytpic@style@@{\xytpic@fp}% + \else\DNii@{\empty}% + \ifx\next@\nextii@\def\xytpic@style@@{\xytpic@ip}\xytpic@bk + \else\ifx\next@\empty\def\xytpic@style@@{\xytpic@ip}\xytpic@bk + \else#1\fi\fi\fi + \xytpic@pt\R@c + \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}% + \xytpic@pt\D@c + \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}% + \xytpic@pt{\L@c}% + \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}% + \xytpic@pt{\U@c}% + \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}% + \expandafter\xyTPICrect@x\the\toks@ + \DNii@{\relax}\DN@{#1}\ifx\next@\nextii@ + \def\xytpic@style@@{\xytpic@fp}\expandafter\xyTPICrect@x\the\toks@\fi } +\xydef@\xyTPICrect@x#1#2#3#4{\xyTPIC@special{pa -#3 -#4}% + \xyTPIC@special{pa -#3 #2}\xyTPIC@special{pa #1 #2}% + \xyTPIC@special{pa #1 -#4}\xyTPIC@special{pa -#3 -#4}% + \xytpic@style@@ } +\xydef@\xyTPICoval@#1{\DN@{#1}\DNii@{\relax}% + \ifx\next@\nextii@ \DN@{\xyTPICfilledoval@\relax}% + \else\DNii@{\empty}\ifx\next@\nextii@ \DN@{\xyTPICfilledoval@\empty}% + \else\DN@{\xyTPICoval@i{#1}}\fi\fi \next@ } +\xylet@\xyTPICoval@i=\eat@ +\xydef@\xyTPICfilledoval@#1{% + {\advance\L@c-\R@ \advance\R@c-\R@ \xyTPICrect@{\empty}}% + {\advance\U@c-\R@ \advance\D@c-\R@ \xyTPICrect@{\empty}}% + \L@=\R@ \bgroup + \dimen@=-\U@c \advance\dimen@\R@ \xytpic@pt\dimen@ + \edef\tmp@{\the\count@}% + \dimen@=-\L@c \advance\dimen@\R@ \xytpic@pt\dimen@ + \edef\tmp@{\noexpand\toks@={{\the\count@}{\tmp@}}}% + \setTPICcircstyle@ \xyTPICcircle@{\tmp@}\egroup + \bgroup + \dimen@=-\U@c \advance\dimen@\R@ \xytpic@pt\dimen@ + \edef\tmp@{\the\count@}% + \dimen@=\R@c \advance\dimen@-\R@ \xytpic@pt\dimen@ + \edef\tmp@{\noexpand\toks@={{\the\count@}{\tmp@}}}% + \setTPICcircstyle@ \xyTPICcircle@{\tmp@}\egroup + \bgroup + \dimen@=\D@c \advance\dimen@-\R@ \xytpic@pt\dimen@ + \edef\tmp@{\the\count@}% + \dimen@=-\L@c \advance\dimen@\R@ \xytpic@pt\dimen@ + \edef\tmp@{\noexpand\toks@={{\the\count@}{\tmp@}}}% + \setTPICcircstyle@ \xyTPICcircle@{\tmp@}\egroup + \bgroup + \dimen@=\D@c \advance\dimen@-\R@ \xytpic@pt\dimen@ + \edef\tmp@{\the\count@}% + \dimen@=\R@c \advance\dimen@-\R@ \xytpic@pt\dimen@ + \edef\tmp@{\noexpand\toks@={{\the\count@}{\tmp@}}}% + \setTPICcircstyle@ \xyTPICcircle@{\tmp@}\egroup + \DN@{#1}\DNii@{\relax}\ifx\next@\nextii@ + \def\tmp@{{\xytpic@pn0\def\xytpic@style@@{\xytpic@fp}}}% + \DN@{\expandafter\xyTPICoval@i\tmp@}% + \else\DN@{}\fi \next@ } +\xydef@\setTPICcircstyle@{% + \def\xytpic@circstyle@@{\xytpic@ia}\xytpic@bk} +\xydef@\xyTPICcircle@#1{\DNii@{\relax}% + \DN@{#1}\toks@={00}\ifx\next@\nextii@ + \xytpic@pn0\relax\xytpic@bk \def\xytpic@circstyle@@{\xytpic@ar}% + \else\DNii@{\empty}% + \ifx\next@\nextii@ \setTPICcircstyle@ + \else\ifx\next@\empty \setTPICcircstyle@ + \else#1\fi\fi\fi + \xytpic@pt\R@ + \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}% + \xytpic@pt\L@ + \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}% + \expandafter\xytpic@circstyle@@\the\toks@ 0\twoPi@} +\xydef@\xyTPICellipse@{% + \X@p=\R@c \advance\X@p-\L@c \divide\X@p\tw@ \R@=\R@c \advance\R@-\X@p + \Y@p=\D@c \advance\Y@p-\U@c \divide\Y@p\tw@ \L@=\D@c \advance\L@-\Y@p + \xyTPICcircle@} +\xydef@\xyTPICrect@Special#1#2#3#4{\TPICmacro@@{#1 fp}} +\xydef@\xyTPICdotrect@Special#1{\TPICmacro@@{#1 fp}} +\xydef@\xyTPICdashrect@Special#1{\TPICmacro@@{#1 fp}} +\xydef@\xyTPICcirc@Special#1{\TPICmacro@@{#1 ar}} +\xydef@\xyTPICdotcirc@Special#1{\TPICmacro@@{#1 ar}} +\xydef@\xyTPICdashcirc@Special#1{\TPICmacro@@{#1 ar}} +\xydef@\xyTPICfilledRegion#1#2{\vglue\U@c + \hbox{\hglue\L@c#1#2\empty\hglue\R@c}\vglue\D@c} +\xydef@\filledRectangle@TPIC@@{% + \ifdim\R@=\z@ \DN@{\xyTPICfilledRegion\xyTPICrect@}% + \else \DN@{\xyTPICfilledRegion\xyTPICoval@}% + \fi \next@ } +\xydef@\filledCircle@TPIC@@#1{{\R@c=\R@ \L@c=\R@ \U@c=\R@ \D@c=\R@ + \xyTPICfilledRegion\xyTPICcircle@#1{}}} +\xydef@\filledEllipse@TPIC@@{\xyTPICfilledRegion\xyTPICellipse@} +\xydef@\filledOval@TPIC@@{\xyTPICfilledRegion\xyTPICoval@} +\xydef@\installTPICfills@{% + \let\filledRectangle@@=\filledRectangle@TPIC@@ + \let\filledOval@@=\filledOval@TPIC@@ + \let\filledCircle@@=\filledCircle@TPIC@@ + \let\filledEllipse@@=\filledEllipse@TPIC@@ +} +\xydef@\xyTPICfillrect@Special#1#2{% + \ifx#2\relax\TPICmacro@@{#1 fp}% + \else\TPICmacro@@{#1 ip}\fi} +\xydef@\xyTPICfilloval@Special#1#2{% + \ifx#2\relax\TPICmacro@@{#1 fp}% + \else\TPICmacro@@{#1 ip}\fi} +\xydef@\xyTPICfillcirc@Special#1#2{% + \ifx#2\relax\TPICmacro@@{#1 ar}% + \else\TPICmacro@@{#1 ai}\fi} +\xydef@\xyTPICfillellipse@Special#1#2{% + \ifx#2\relax\TPICmacro@@{#1 ar}% + \else\TPICmacro@@{#1 ai}\fi} +\endinput diff --git a/macros/generic/diagrams/xypic/texinputs/xytpic.tex b/macros/generic/diagrams/xypic/texinputs/xytpic.tex new file mode 100644 index 0000000000..a58ca347e8 --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xytpic.tex @@ -0,0 +1,228 @@ +%% xytpic.tex from $Id: xytpic.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``tpic'' TPIC backend, for lines, curves and fills. +%% Copyright (c) 1995-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{tpic}{TPIC backend}{\stripRCS$Revision: 3.7 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xynew@{if}\ifTPICspecials@ +\xydef@\UseTPICspecials{\TPICspecials@true} +\xydef@\NoTPICspecials{\TPICspecials@false} +\xynew@{count}\xytpic@cnt +\xydef@\xytpic@max{300} +\xydef@\maxTPICpoints#1{\count@=#1 \relax + \ifnum\count@>\tw@ \edef\xytpic@max{\the\count@}% + \else\expandafter\xyTPICmaxwarning@\expandafter{\the\count@}\fi} +\xydef@\xyTPICmaxwarning@#1{max points must be at least 2, #1 invalid} +\xydef@\xytpic@style@@{\xytpic@fp} +\xydef@\xytpic@reset@{\gdef\xytpic@style@@{\xytpic@fp}% + \global\xytpic@cnt=\z@ } +\xydef@\xytpic@set@#1{\xdef\xytpic@style@@{\noexpand#1}} +\xydef@\xytpic@pn#1{\xyTPIC@special{pn #1}} +\xydef@\xytpic@pa#1#2{\global\advance\xytpic@cnt\@ne\relax + \ifnum\xytpic@cnt=\xytpic@max\relax \xyTPIC@special{pa #1 #2}% + \kern-\X@c\raise-\Y@c\hbox{\xytpic@style@@}\kern\X@c + \global\xytpic@cnt=\@ne \relax\fi \xyTPIC@special{pa #1 #2}} +\xydef@\xytpic@fp{\xyTPIC@special{fp}} +\xydef@\xytpic@ip{\xyTPIC@special{ip}} +\xydef@\xytpic@da#1{\xyTPIC@special{da #1}} +\xydef@\xytpic@dt#1{\xyTPIC@special{dt #1}} +\xydef@\xytpic@sp#1{\xyTPIC@special{sp #1}} +\xydef@\xytpic@ar#1#2#3#4#5#6{\xyTPIC@special{ar #1 #2 #3 #4 #5 #6}} +\xydef@\xytpic@ia#1#2#3#4#5#6{\xyTPIC@special{ia #1 #2 #3 #4 #5 #6}} +\xydef@\xytpic@sh#1{\xyTPIC@special{sh #1}} +\xydef@\xytpic@wh{\xyTPIC@special{sh 0}} +\xydef@\xytpic@bk{\xyTPIC@special{sh 1}} +\xydef@\xyTPIC@special#1{\special{#1}} +\xydef@\xyTPIC@noisy#1{\W@{TPIC: #1}\special{#1}} +\xydef@\NoisyTPIC{\let\xyTPIC@special=\xyTPIC@noisy} +\xydef@\xyTPICsplit@#1#2{\setboxz@h{#1\boxz@#2}}% +\xydef@\xytpic@pt#1{\dimen@=#1\divide\dimen@ by72 + \multiply\dimen@ by 1000 \advance\dimen@.5\p@ + \count@=\dimen@ \divide\count@\p@ } +\xydef@\xytpic@in#1{\dimen@=#1\divide\dimen@ by72 + \edef\next@{\expandafter\removePT@\the\dimen@}}% +\xydef@\xytpic@dot@@{\xytpic@pa00} +\xydef@\xytpic@width@{\xytpic@pt{\xylinethick@}% + \expandafter\xytpic@pn\expandafter{\the\count@}} +\xydef@\xytpic@line{% + \xytpic@dot@@ \xytpic@pt{-\d@X}\count@@=\count@ + \xytpic@pt\d@Y \edef\next@{{\the\count@@}{\the\count@}}% + \expandafter\xytpic@pa\next@ \xytpic@style@@ \xytpic@reset@ } +\xydef@\xytpic@solid@@{\xytpic@set@\xytpic@fp} +\xydef@\xytpic@dashed@@{\xytpic@in\xydashl@ \xytpic@dad} +\xydef@\xytpic@dotted@@{\dimen@=.5\xydashl@ \xytpic@in\dimen@ \xytpic@dtd} +\xydef@\xytpic@dad{\expandafter\xytpic@set@\expandafter{% + \expandafter\xytpic@da\expandafter{\next@}}} +\xydef@\xytpic@dtd{\expandafter\xytpic@set@\expandafter{% + \expandafter\xytpic@dt\expandafter{\next@}}} +\xydef@\xytpic@polysolid@{\xytpic@set@\xytpic@fp} +\xydef@\xytpic@polydashed@#1{\count@=#1 \xytpic@dad} +\xydef@\xytpic@polydotted@#1{\count@=#1 \xytpic@dtd} +\xydef@\xytpic@postpoly@{\xytpic@style@@ \xytpic@reset@} +\xydef@\TPICalternative@#1#2{% +\expandafter\global\expandafter\let\csname origxy#2@\endcsname=#1% + \xdef#1{\noexpand\ifTPICspecials@ + \noexpand\expandafter\expandafter\noexpand\csname xytpic@#2@\endcsname + \noexpand\else + \noexpand\expandafter\expandafter\noexpand\csname origxy#2@\endcsname + \noexpand\fi}}% +\xydef@\setupxyTPIC@{\xywarning@{using TPIC specials}% + \TPICalternative@{\solid@}{solid}% + \TPICalternative@{\dash@}{dashed}% + \TPICalternative@{\point@}{point}% + \TPICalternative@{\circhar@@}{circhar}% + \TPICalternative@{\splinesolid@}{splinesolid}% + \xywithoption{frame}{\xyinputorelse@{xytp-f}{}\xyuncatcodes}% + \let\setupxyTPIC@=\reloadxyTPIC@ + \activateTPIC@ } +\xydef@\xyunloadTPIC@{\xywarning@{TPIC specials turned off}% + \xywithoption{curve}{\xysetup@@\uninstallTPICcurves@ }% + \xywithoption{line}{\xysetup@@\uninstallTPICline@ }% + \xywithoption{frame}{\xysetup@@\uninstallTPICframes@ }% + \TPICspecials@false + \let\setupxyTPIC@=\reloadxyTPIC@ } +\xydef@\activateTPIC@{% + \xywithoption{line}{\xysetup@@\installTPICline@}% + \xywithoption{curve}{\xysetup@@\installTPICcurves@}% + \xywithoption{frame}{\xysetup@@\installTPICframes@}% + \TPICspecials@true } +\xydef@\reloadxyTPIC@{\xywarning@{TPIC specials back on}\activateTPIC@ } +\xydef@\xytpic@solid@{% + \ifInvisible@ \let\next@=\no@@ + \else \DN@{\xyTPICstraight@{\xytpic@solid@@ \xytpic@line}}\fi + \next@ } +\xydef@\xytpic@dashed@{\line@ + \def\Connect@@{\xyTPICstraight@{\xytpic@dashed@@ \xytpic@line}}} +\xydef@\xytpic@point@{\xytpic@dot@@\xytpic@fp\egroup + \Invisible@false \Hidden@false \def\Leftness@{.5}\def\Upness@{.5}\ctipEdge@ + \def\Drop@@{\styledboxz@}% + \def\Connect@@{\xyTPICstraight@{\xytpic@dotted@@ \xytpic@line}}} +\xydef@\xyTPICstraight@#1{\setupDirection@ + \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}% + \DN@##1##2{\def\checkoverlap@@{% + \ifdim##1\X@p>##1\X@c \let\next@=\relax \fi + \ifdim##2\Y@p>##2\Y@c \let\next@=\relax \fi}}% + \edef\nextii@{{\sd@X}{\sd@Y}}\expandafter\next@\nextii@ + \noCshavep@@ \edef\Cshavep@@{\pfromthep@ \noexpand\resetDirection@}% + \noCshavec@@ \edef\Cshavec@@{\cfromthec@ \noexpand\resetDirection@}% + \ifHidden@\else + \ifdim\Y@c>\Y@max \Y@max=\Y@c \fi \ifdim\Y@p>\Y@max \Y@max=\Y@p \fi + \ifdim\Y@c<\Y@min \Y@min=\Y@c \fi \ifdim\Y@p<\Y@min \Y@min=\Y@p \fi + \ifdim\X@c>\X@max \X@max=\X@c \fi \ifdim\X@p>\X@max \X@max=\X@p \fi + \ifdim\X@c<\X@min \X@min=\X@c \fi \ifdim\X@p<\X@min \X@min=\X@p \fi \fi + \ifInvisible@\let\next@=\relax \else + \DN@{\setboxz@h{\kern\X@c \raise\Y@c\hbox{#1}}% + \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}}% + \fi + \checkoverlap@@ + \ifdim\d@X=\z@ \ifdim\d@Y=\z@ \DN@{\relax}\fi\fi \next@ + \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}% + \def\Calong@@{\noCalong@@}\Creset@@ } +\xydef@\xytpic@splinesolid@{\xyTPICspline@\xytpic@fp } +\xydef@\xytpic@splinedashed@{\xytpic@in\xydashl@\expandafter\xyTPICspline@ + \expandafter{\expandafter\xytpic@da\expandafter{\next@}}} +\xydef@\xytpic@splinedotted@{\xytpic@in{.5\xydashl@}\expandafter\xyTPICspline@ + \expandafter{\expandafter\xytpic@dt\expandafter{\next@}}} +\xydef@\xyTPICspline@#1{\setbox\splinebox@=\copy\voidb@x + \SloppyCurves + \global\xytpic@cnt=\@ne \xytpic@set@{#1}% + \def\splineextra@@{\xyTPICspline@dot}% + \def\xycrvdrop@{ }\def\xycrvconn@{}\splineset@@ \xytpic@style@@} +\xydef@\xyTPICspline@dot{\xytpic@pt{\X@c}\count@@=\count@ + \xytpic@pt{-\Y@c}\edef\next@{{\the\count@@}{\the\count@}}% + \expandafter\xytpic@pa\next@ } +\xydef@\xyTPIClinewidth@#1{\xytpic@pt{#1}\edef\next@{\the\count@}} +\xydef@\installTPICline@{% + \let\xylinewidth@@=\xylinewidth@ + \let\xylineSpecial@@=\xytpic@pn + \let\transxyline@@=\xyTPIClinewidth@ } +\xydef@\uninstallTPICline@{\UnloadLine@}% +\xydef@\xydoTPICcircle@#1{\DN@{#1}% + \ifx\next@\empty\DN@{\xyTPICfullcircle@}% + \else\expandafter\DNii@\expandafter{\addDASH@{}}% + \ifx\next@\nextii@\DN@{\L@=\R@ \xyTPICfullcircle@}% + \else\DN@{\dosolidcircle@{#1}}\fi\fi \next@ } +\xydef@\xyTPICfullcircle@{\xyTPICpartcircle@{00}0\twoPi@}% +\xydef@\xyTPICpartcircle@#1#2#3{% + \xytpic@pt{\R@}\expandafter\DNii@\expandafter{\the\count@}% + \xytpic@pt{\L@}\edef\next@{#1{\nextii@}{\the\count@}{#2}{#3}}% + \expandafter\xytpic@ar\next@ } +\xydef@\qartPi@{0.7853981} +\xydef@\tartPi@{2.3561944} +\xydef@\xytpic@circhar@#1{\xytpic@width@\ifcase#1% + \xytpic@pt{\R@}\edef\next@{{{\the\count@}0}}% + \expandafter\xyTPICcirchar@i\next@{\tartPi@}{\fullPi@}\kern\partroottwo\R@ + \or + \xytpic@pt{\halfroottwo\R@}\edef\next@{{{\the\count@}0}}% + \expandafter\xyTPICcirchar@i\next@{\halfPi@}{\tartPi@}\kern\halfroottwo\R@ + \or + \xytpic@pt{\z@}\edef\next@{{{\the\count@}0}}% + \expandafter\xyTPICcirchar@i\next@{\qartPi@}{\halfPi@}\kern\halfroottwo\R@ + \or + \xytpic@pt{-\halfroottwo\R@}\edef\next@{{{\the\count@}0}}% + \expandafter\xyTPICcirchar@i\next@0{\qartPi@}\kern\partroottwo\R@ + \or + \xytpic@pt{-\halfroottwo\R@}\edef\next@{{{\the\count@}0}}% + \expandafter\xyTPICcirchar@i\next@{-\qartPi@}0\kern\partroottwo\R@ + \or + \xytpic@pt{\z@}\edef\next@{{{\the\count@}0}}% + \expandafter\xyTPICcirchar@i\next@{-\halfPi@}{-\qartPi@}\kern\halfroottwo\R@ + \or + \xytpic@pt{\halfroottwo\R@}\edef\next@{{{\the\count@}0}}% + \expandafter\xyTPICcirchar@i\next@{-\tartPi@}{-\halfPi@}\kern\halfroottwo\R@ + \or + \xytpic@pt{\R@}\edef\next@{{{\the\count@}0}}% + \expandafter\xyTPICcirchar@i\next@{-\fullPi@}{-\tartPi@}\kern\partroottwo\R@ + \fi} +\xydef@\xyTPICcirchar@i#1#2#3{\L@=\R@ \xyTPICpartcircle@{#1}{#2}{#3}} +\xydef@\xyTPIC@spline@ii@{\DN@{\xy@spline@ii}% + \ifx\splineSTYLE@\empty\DN@{\xyTPICqspline@{0}}% + \else\expandafter\DNii@\expandafter{\addDASH@{}}% + \ifx\splineSTYLE@\nextii@\DN@{\xyTPICqspline@{0}}% + \else\expandafter\DNii@\expandafter{\addDOT@{}}% + \ifx\splineSTYLE@\nextii@\DN@{\xyTPICqspline@{-.5}}% + \else\expandafter\expandafter\expandafter\DNii@\expandafter\expandafter + \expandafter{\expandafter\addDASH@\addDASH@{}}% + \ifx\splineSTYLE@\nextii@\DN@{\xyTPICqspline@{}}% + \fi\fi\fi\fi + \next@ }% +\xydef@\xyTPIC@accumulate{\xytpic@pt\X@c \count@@=\count@ + \xytpic@pt{-\Y@c}\edef\next@{{\the\count@@}{\the\count@}}% + \expandafter\xytpic@pa\next@ } +\xydef@\xyTPICqspline@#1{\xytpic@width@ + \xytpic@in{#1\xydashl@}\expandafter\gdef\expandafter\xytpic@style@@ + \expandafter{\expandafter\xytpic@sp\expandafter{\next@}}% + \save@ \cfromp@ \xyTPIC@accumulate + \edef\smapp@@{\s@bot}\smapxy@i{\xyTPIC@accumulate}% + \leave@ \xyTPIC@accumulate \xytpic@style@@ \xytpic@reset@ + \enter@{}\xy@spline@x } +\xydef@\installTPICcurves@{% + \let\dosolidcircle@@=\xydoTPICcircle@ + \let\xy@spline@ii@@=\xyTPIC@spline@ii@ + } +\xydef@\uninstallTPICcurves@{% + \let\dosolidcircle@@=\dosolidcircle@ + \let\xy@spline@ii@@=\xy@spline@ii } + \xywithoption{frame}{\xyinputorelse@{xytp-f}{}} +\xydef@\uninstallTPICframes@{\UnloadFrames@} +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyv2.tex b/macros/generic/diagrams/xypic/texinputs/xyv2.tex new file mode 100644 index 0000000000..4d92bd01cf --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyv2.tex @@ -0,0 +1,277 @@ +%% xyv2.tex from $Id: xyv2.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Version 2 compatibility'' feature. +%% Copyright (c) 1993-1995 Kristoffer H. Rose +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{v2}{Version 2 Compatibility}{\stripRCS$Revision: 3.8 $}% + {Kristoffer H.~Rose}{krisrose@tug.org}% + {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)} +\xylet@\XY=\Xy +\ifx\redefine\undefined \let\redefine=\def \fi +\ifx\define\undefined \let\define=\xydef@ \fi +\ifx\dsize\undefined \let\dsize=\displaystyle \fi +\ifx\tsize\undefined \let\dsize=\textstyle \fi +\ifx\ssize\undefined \let\ssize=\scriptstyle \fi +\ifx\sssize\undefined \let\sssize=\scriptscriptstyle \fi +\ifx\text\undefined + \def\text{\relax\textC}% + \xydef@\textC#1{\relax + \ifmmode\mathchoice + {\hbox{\the\textfont0\relax#1}}% + {\hbox{\the\textfont0\relax#1}}% + {\hbox{\the\scriptfont0\relax#1}}% + {\hbox{\the\scriptscriptfont0\relax#1}}% + \else{\relax#1}\fi} +\fi +\xydef@\Text{\relax\xyFN@\Text@} +\xydef@\TextC{\relax\textC}% +\xydef@\Text@{% + \addLT@\ifx\next \addGT@{\addLT@\DN@##1}{\A@=##1\Text@i}% + \else \DN@{\A@=\maxdimen \Text@i}\fi \next@} +\xydef@\Text@i#1{% + \ifmmode \mathchoice + {\expandafter\Text@ii\the\textfont0{#1}}% + {\expandafter\Text@ii\the\textfont0{#1}}% + {\expandafter\Text@ii\the\scriptfont0{#1}}% + {\expandafter\Text@ii\the\scriptscriptfont0{#1}}% + \else + \leavevmode \expandafter\Text@ii\the\textfont0{#1}% + \fi\ignorespaces} +\xydef@\Text@ii{\hbox\bgroup \txt@i} +\xylet@\cL=\L@c +\xylet@\cR=\R@c +\xylet@\cD=\D@c +\xylet@\cH=\U@c +\xylet@\Xc=\X@c +\xylet@\Yc=\Y@c +\xylet@\Uc=\U@c +\xylet@\Dc=\D@c +\xylet@\Lc=\L@c +\xylet@\Rc=\R@c +\xylet@\Xp=\X@p +\xylet@\Yp=\Y@p +\xylet@\Up=\U@p +\xylet@\Dp=\D@p +\xylet@\Lp=\L@p +\xylet@\Rp=\R@p +\xylet@\dX=\d@X +\xylet@\dY=\d@Y +\xylet@\Xorigin=\X@origin +\xylet@\Yorigin=\Y@origin +\xylet@\Xxbase =\X@xbase +\xylet@\Yxbase =\Y@xbase +\xylet@\Xybase =\X@ybase +\xylet@\Yybase =\Y@ybase +\xylet@\Xmin=\X@min +\xylet@\Ymin=\Y@min +\xylet@\Xmax=\X@max +\xylet@\Ymax=\Y@max +\xydef@\go{\aftergo{}} +\xydef@\aftergo#1{\xy@\aftergo{\enter@\pfromthec@}\afterPOS{\xy@@\leave@#1}} +\xydef@\merge{\POS.p\relax} +\xydef@\swap{\xy@\swap\swap@} +\xydef@\Drop{\expandafter\drop\entrymodifiers@} +\xydef@\none{\xy@\none{}\ignorespaces} +\xydef@\solid{\connect h\dir{-}} +\xydef@\Solid{\connect h\dir2{-}} +\xydef@\Ssolid{\connect h\dir3{-}} +\xydef@\dashed{\connect h\dir{--}} +\xydef@\Dashed{\connect h\dir2{--}} +\xydef@\Ddashed{\connect h\dir3{--}} +\xydef@\dotted{\connect h\dir{.}} +\xydef@\Dotted{\connect h\dir2{.}} +\xydef@\Ddotted{\connect h\dir3{.}} +\xydef@\dottedwith#1{\connect h{#1}} +\xydef@\notip{\dir{}} +\xydef@\stop{\dir{|}} +\xydef@\astop{\dir^{|}} +\xydef@\bstop{\dir_{|}} +\xydef@\tip{\dir{>}} +\xydef@\atip{\dir^{>}} +\xydef@\btip{\dir_{>}} +\xydef@\Tip{\dir2{>}} +\xywarnifdefined\aTip +\xywarnifdefined\bTip +{\xyuncatcodes + \gdef\aTip{\object=<5pt>:(32,-1)\dir^{>}} + \gdef\bTip{\object=<5pt>:(32,+1)\dir_{>}}} +\xydef@\Ttip{\dir3{>}} +\xydef@\ahook{\dir^{(}} +\xydef@\bhook{\dir_{(}} +\xydef@\aturn{\dir^{'}} +\xydef@\bturn{\dir_{'}} +\xydef@\rotate{\hbox\bgroup + \DN@{\ifx (\next + \DN@(####1){\rotate@ii{####1}}% + \else \DN@{\rotate@i}\fi\next@}\xyFN@\next@} +\xydef@\rotate@i#1{\reverseDirection@ #1\OBJECT@x} +\xydef@\rotate@ii#1#2{\dimen@=#1\p@ + \ifdim \dimen@=-\p@ \aboveDirection@\xydashl@ + \else\ifdim\dimen@= \p@ \belowDirection@\xydashl@ + \else\ifdim\dimen@<-1.5\p@ \advance\dimen@-2\p@ + \edef\next@{\expandafter\removePT@\the\dimen@}\vDirection@(-1,\next@){1pc}% + \else\ifdim\dimen@<-.5\p@ \vDirection@(#1,-1){1pc}% + \else\ifdim\dimen@< .5\p@ \vDirection@( 1,#1){1pc}% + \else\ifdim\dimen@<1.5\p@ \vDirection@(#1, 1){1pc}% + \else \dimen@=-\dimen@ \advance\dimen@2\p@ + \edef\next@{\expandafter\removePT@\the\dimen@}\vDirection@(-1,\next@){1pc}% + \fi\fi\fi\fi\fi\fi + #2\OBJECT@x} +\xydef@\squash#1{% + \ifmmode\setboxz@h{\m@th${\mathstrut}#1{\mathstrut}$}\else\setboxz@h{#1}\fi + \setboxz@h{\kern-.5\wdz@ \dimen@=.5\ht\z@ \advance\dimen@-.5\dp\z@ + \lower\dimen@\boxz@}% + \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@} +\xydef@\grow{% + \DN@{\ifx <\next \DN@<####1>{\dimen@=####1\grow@\empty}% + \else \DN@{\dimen@=2\p@ \grow@\empty}\fi\next@}\xyFN@\next@} +\xydef@\grow@#1#{\grow@@{#1}} +\xydef@\grow@@#1#2{\relax + \ifmmode \setboxz@h{\kern\dimen@ \m@th$#2$\kern\dimen@}% + \else \setboxz@h{\kern\dimen@ {#2}\kern\dimen@}\fi + \dimen@ii=\ht\z@ \advance\dimen@ii\dimen@ \ht\z@=\dimen@ii + \dimen@ii=\dp\z@ \advance\dimen@ii\dimen@ \dp\z@=\dimen@ii \boxz@} +\xydef@\squarify{\addEQ@{\addPLUS@\object}} +\xydef@\qc{\corn@@} +\xyrequire{frame}\xycatcodes +\xydef@\framed{\relax\convertframed{-}} +\xydef@\Framed{\relax\convertframed{=}} +\xydef@\circled{\relax\convertframed{o}} +\xydef@\Circled{\relax\convertframed{oo}} +\xydef@\convertframed#1{\DNii@##1@{\drop\frm##1{#1}}\xyFN@\convertframed@i} +\xydef@\convertframed@i{% + \addLT@\ifx \next + \addGT@{\addLT@\DN@##1}{\addGT@{\addLT@{\nextii@}##1}@}% + \else \DN@{\nextii@ @}\fi \next@} +\xydef@\dotframed{\relax\drop\frm{.}} +\xydef@\dashframed{\relax\drop\frm{--}} +\xydef@\rounddashframed{\relax\drop\frm{o-}} +\xydef@\filled{\DN@{% + \addLT@\ifx \next + \addGT@{\addLT@\DN@####1}{\xy@@{\frame@fill@@{####1}}}% + \else \DN@{\xy@@{\frame@fill@@\z@}}% + \fi\next@}\xyFN@\next@} +\xydef@\Filled{\DN@{% + \addLT@\ifx \next + \addGT@{\addLT@\DN@####1}{\xy@@{\frame@emph@@{####1}}}% + \else \DN@{\xy@@{\frame@emph@@\z@}}% + \fi\next@}\xyFN@\next@} +\xyrequire{matrix}\xycatcodes +\xydef@\diagram#1\enddiagram{\relax\diagram@\diagram@@{#1}} +\xydef@\diagram@{\relax + \ifmmode \DN@##1##2{\vcenter{\oldxymatrix@true \xy##1{\xymatrix{##2}}\endxy}}% + \else\DN@##1##2{{\oldxymatrix@true \xy/u.8ex/##1{\xymatrix{##2}}\endxy}}% + \fi \next@} +\xydef@\LaTeXdiagrams{\def\diagram{\ltxdiagram@\diagram@@}% + \def\diagramnocompile{\ltxdiagram@\literal@}% + \def\diagramcompileto##1{\ltxdiagram@{\NoCompileMatrices\xycompileto{##1}}}} +\xydef@\ltxdiagram@#1#2\end#3{\relax + \DN@{#3}\DNii@{diagram}\ifx\next@\nextii@\diagram@{#1}{#2}\end{diagram}% + \else\xyerr@{Put \string{\string} around \string\begin...\string\end\space + within diagrams}\fi} +\xylet@\diagram@@=\literal@ +\xydef@\NoisyDiagrams{} +\xydef@\spreaddiagramrows#1{\addPLUS@\xymatrixrowsep{#1}} +\xydef@\spreaddiagramcolumns#1{\addPLUS@\xymatrixcolsep{#1}} +\xyrequire{arrow}\xycatcodes +\xylet@\arrow=\ar +{\xyuncatcodes + \gdef\morPHISM#1#2#3{\PATH~={\oldconnect{#1}}~<{|<*{#3}}~>{|>*{#2}}}} +\xydef@\morphism{\relax\morPHISM} +\xylet@\connect@iii=\connect +\xydef@\oldconnect#1{% + \let\PATHlabelabove@@=\PATHlabelabove@ + \let\PATHlabelbelow@@=\PATHlabelbelow@ + \let\connect=\preconnect#1\let\connect=\connect@iii} +\xydef@\definemorphism#1#2#3#4{% + \xydefcsname@{x#1}{\morphism{#2}{#3}{#4}}% + \xydefcsname@{u#1}{\morphism{#2}{#3}{#4}[u]}% + \xydefcsname@{d#1}{\morphism{#2}{#3}{#4}[d]}% + \xydefcsname@{l#1}{\morphism{#2}{#3}{#4}[l]}% + \xydefcsname@{r#1}{\morphism{#2}{#3}{#4}[r]}% + \xydefcsname@{uu#1}{\morphism{#2}{#3}{#4}[uu]}% + \xydefcsname@{dd#1}{\morphism{#2}{#3}{#4}[dd]}% + \xydefcsname@{ll#1}{\morphism{#2}{#3}{#4}[ll]}% + \xydefcsname@{rr#1}{\morphism{#2}{#3}{#4}[rr]}% + \xydefcsname@{ur#1}{\morphism{#2}{#3}{#4}[ur]}% + \xydefcsname@{ul#1}{\morphism{#2}{#3}{#4}[ul]}% + \xydefcsname@{dr#1}{\morphism{#2}{#3}{#4}[dr]}% + \xydefcsname@{dl#1}{\morphism{#2}{#3}{#4}[dl]}% + \xydefcsname@{uul#1}{\morphism{#2}{#3}{#4}[uul]}% + \xydefcsname@{uur#1}{\morphism{#2}{#3}{#4}[uur]}% + \xydefcsname@{ull#1}{\morphism{#2}{#3}{#4}[ull]}% + \xydefcsname@{urr#1}{\morphism{#2}{#3}{#4}[urr]}% + \xydefcsname@{ddl#1}{\morphism{#2}{#3}{#4}[ddl]}% + \xydefcsname@{ddr#1}{\morphism{#2}{#3}{#4}[ddr]}% + \xydefcsname@{dll#1}{\morphism{#2}{#3}{#4}[dll]}% + \xydefcsname@{drr#1}{\morphism{#2}{#3}{#4}[drr]}% + \xydefcsname@{uull#1}{\morphism{#2}{#3}{#4}[uull]}% + \xydefcsname@{uurr#1}{\morphism{#2}{#3}{#4}[uurr]}% + \xydefcsname@{ddll#1}{\morphism{#2}{#3}{#4}[ddll]}% + \xydefcsname@{ddrr#1}{\morphism{#2}{#3}{#4}[ddrr]}} +\definemorphism{to}\solid\tip\notip +\definemorphism{line}\solid\notip\notip +\definemorphism{dashed}\dashed\notip\notip +\definemorphism{dotted}\dotted\notip\notip +\definemorphism{double}\Solid\notip\notip +\xywarnifdefined\xyviitoi +\xywarnifdefined\xyviitoii +\xydef@\XXtoY@#1#2#3#4#5{\save;[#3]\relax + \xy@@{% + \dimen@=\turnradius@ \ifdim#1<#2\relax \dimen@ii=#2\else\dimen@ii=#1\fi + \advance\dimen@\ifdim\dimen@>\dimen@ii +\dimen@\else +\dimen@ii\fi + \edef\xyviitoi{\the\dimen@}\leave@}% + \xto ~{[#3]} `#4[#3]#5/#4\xyviitoi/ `[#3]} +\xydef@\toXY@#1#2#3#4#5{\xy@@{\idfromc@{@}% + \dimen@=\turnradius@ \dimen@ii=#1\relax + \advance\dimen@\ifdim\dimen@>\dimen@ii +\dimen@\else +\dimen@ii\fi + \edef\xyviitoi{\the\dimen@}% + \dimen@=\turnradius@ \dimen@ii=#2\relax + \advance\dimen@\ifdim\dimen@>\dimen@ii +\dimen@\else +\dimen@ii\fi + \edef\xyviitoii{\the\dimen@}}% + \morphism\solid{\object #4:(-1,0)\dir{>}}\notip + ~{`"@" "@"} `#3"@"#5/#3\xyviitoi/#5/#4\p@/ `"@"#5/#4\xyviitoii/} +\xyuncatcodes \catcode64=11 +\xydef@\lltod{\XXtoY@\D@c\D@p{ll}{d}+} +\xydef@\lltou{\XXtoY@\U@c\U@p{ll}{u}+} +\xydef@\rrtod{\XXtoY@\D@c\D@p{rr}{d}+} +\xydef@\rrtou{\XXtoY@\U@c\U@p{rr}{u}+} +\xydef@\ddtol{\XXtoY@\L@c\L@p{dd}{l}+} +\xydef@\ddtor{\XXtoY@\R@c\R@p{dd}{r}+} +\xydef@\uutol{\XXtoY@\L@c\L@p{uu}{l}+} +\xydef@\uutor{\XXtoY@\R@c\R@p{uu}{r}+} +\xydef@\told{\toXY@\L@c\D@c{l}{d}+} +\xydef@\tolu{\toXY@\L@c\U@c{l}{u}+} +\xydef@\tord{\toXY@\R@c\D@c{r}{d}+} +\xydef@\toru{\toXY@\R@c\U@c{r}{u}+} +\xydef@\todl{\toXY@\D@c\L@c{d}{l}+} +\xydef@\todr{\toXY@\D@c\R@c{d}{r}+} +\xydef@\toul{\toXY@\U@c\L@c{u}{l}+} +\xydef@\tour{\toXY@\U@c\R@c{u}{r}+} +\xycatcodes +\xydef@\TurnRadius{\addEQ@\turnradius} +\xydef@\diagramcompileto#1#2\enddiagram{\relax + \diagram@{\NoCompileMatrices\xycompileto{#1}}{#2}} +\xydef@\diagramnocompile#1\enddiagram{\relax\diagram@\literal@{#1}} +\xydef@\CompileAllDiagrams#1{\CompilePrefix{#1}\CompileMatrices} +\xydef@\NoCompileAllDiagrams{\NoCompileMatrices} +\xydef@\ReCompileAllDiagrams{\CompileMatrices} +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyweb.tex b/macros/generic/diagrams/xypic/texinputs/xyweb.tex new file mode 100644 index 0000000000..290612e5de --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyweb.tex @@ -0,0 +1,94 @@ +%% xyweb.tex from $Id: xyweb.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``Lattice and web'' feature. +%% Copyright (c) 1994-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{web}{Lattice and web feature}{\stripRCS$Revision: 3.7 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\message{lattices,} +\xynew@{count}\lattice@A +\xynew@{count}\lattice@B +\xydef@\latticeA{\lattice@A} +\xydef@\latticeB{\lattice@B} +\xydef@\xylattice#1#2#3#4{\xy@{LATTICE}{\xylattice@{#1}{#2}{#3}{#4}}}% +\xydef@\xylattice@#1#2#3#4{% + \lattice@A=#1\relax + \loop \bgroup\lattice@B=#3\relax + \innerlatticeloop@{#4}% + \edef\tmp@{\egroup + \X@min=\the\X@min \X@max=\the\X@max + \Y@min=\the\Y@min \Y@max=\the\Y@max + }\tmp@ \ifnum\lattice@A<#2\relax \advance\lattice@A\@ne + \repeat } +\xydef@\innerlatticeloop@#1{% + \loop \enter@{\cfromthec@}\enter@{\cplusthec@}% + \vfromcartesian@@ \the\lattice@A,\the\lattice@B @% + \edef\latticeX{\expandafter\removePT@\the\X@c}% + \edef\latticeY{\expandafter\removePT@\the\Y@c}% + \leave@ \latticebody \leave@ + \ifnum\lattice@B<#1\relax \advance\lattice@B\@ne + \repeat } +\xydef@\croplattice#1#2#3#4#5#6#7#8{\xy@{LATTICE}% + {\xycroplattice@{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}}}% +\xydef@\xycroplattice@#1#2#3#4#5#6#7#8{% + \enter@{\X@min=\the\X@min \X@max=\the\X@max + \Y@min=\the\Y@min \Y@max=\the\Y@max}% + \enter@{\cfromthec@}\enter@{\cplusthec@}% + \vfromcartesian@@ #5,0 @\leave@ \X@min=\X@c \leave@ + \enter@{\cfromthec@}\enter@{\cplusthec@}% + \vfromcartesian@@ #6,0 @\leave@ \X@max=\X@c \leave@ + \enter@{\cfromthec@}\enter@{\cplusthec@}% + \vfromcartesian@@ 0,#7 @\leave@ \Y@min=\Y@c \leave@ + \enter@{\cfromthec@}\enter@{\cplusthec@}% + \vfromcartesian@@ 0,#8 @\leave@ \Y@max=\Y@c \leave@ + \lattice@A=#1\relax + \loop + \bgroup\lattice@B=#3\relax + \enter@{\cfromthec@}\innercroplatticeloop@{#4}\leave@ + \egroup + \ifnum\lattice@A<#2\relax \advance\lattice@A\@ne + \repeat \mergecropextents@ } +\xydef@\innercroplatticeloop@#1{% + \loop + \enter@{\cfromthec@}\enter@{\cplusthec@}% + \vfromcartesian@@ \the\lattice@A,\the\lattice@B @% + \edef\latticeX{\expandafter\removePT@\the\X@c}% + \edef\latticeY{\expandafter\removePT@\the\Y@c}% + \leave@ \DN@{\latticebody}% + \ifdim\X@c<\X@min\DN@{}% + \else\ifdim\X@c>\X@max\DN@{}% + \else\ifdim\Y@c<\Y@min\DN@{}% + \else\ifdim\Y@c>\Y@max\DN@{}% + \fi\fi\fi\fi \next@ \leave@ + \ifnum\lattice@B<#1\relax \advance\lattice@B\@ne + \repeat } +\xydef@\mergecropextents@{% + \edef\tmp@{% + \noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi + \noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi + \noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi + \noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi}% + \leave@ \tmp@ } +\xydef@\deflatticebody@{\def\latticebody{\drop{\bullet}}} +\xydef@\defaultlatticebody{\deflatticebody@} +\deflatticebody@ +\xyendinput diff --git a/macros/generic/diagrams/xypic/texinputs/xyxdvi.tex b/macros/generic/diagrams/xypic/texinputs/xyxdvi.tex new file mode 100644 index 0000000000..7da34d1d1d --- /dev/null +++ b/macros/generic/diagrams/xypic/texinputs/xyxdvi.tex @@ -0,0 +1,138 @@ +%% xyxdvi.tex from $Id: xyxdvi.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $ +%% +%% Xy-pic ``xdvi-driver'' option. +%% Copyright (c) 1995-1996 Ross Moore +%% +%% 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-2011 Kristoffer H. Rose +%% +%% 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 package; if not, see http://www.gnu.org/licenses/. +%% +\ifx\xyloaded\undefined \input xy \fi +\xyprovide{xdvi}{XDVI driver}{\stripRCS$Revision: 3.7 $}% + {Ross Moore}{ross.moore@mq.edu.au}% + {Mathematics Department, Macquarie University, NSW~2109, Australia} +\xydef@\xdvi@@#1{\dvimessage@{xdvi}{#1}} +\newdriver{% + \xyaddsupport{color}\xdviColor@@ + \xyaddsupport{crayon}\xdviCrayola@@ + \xyaddsupport{ps}\xdviPS@@ + \xyaddsupport{rotate}\xdviRotate@@ + \xyaddsupport{line}\xdviLine@@ + \xyaddsupport{frame}\xdviFrames@@ + \xyaddsupport{tile}\xdviTiles@@ + \xyaddsupport{tpic}\xdviTPIC@ +} +\xydef@\xdvi@Color@{\xdviPStypes@ + \let\xylocalColor@=\xyNoColor@@ + \def\xycolor@{\xycolor@@}\let\xycolorwarning@=\relax + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}\installPScolor@ }% + \else\DN@{}\fi \next@ + \ifx\xycolor@@\xyNoColor@ \let\xycolor@@=\xycolor@raw@@\fi + \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\xdviCrayola@{}}% + \else \DN@{\xystandardcolors@}\fi \next@ + \let\xdviColor@@=\relax + \let\UnloadColor@@=\NoXDVIcolor@ + }% +\xydef@\xdviColor@@{\xdvi@Color@} +\xydef@\NoXDVIcolor@{% + \def\xycolor@{\xycolor@@}% + \let\xycolor@@=\xyNoColor@ + \let\xylocalColor@=\xyNoColor@@ + \let\xycolorwarning@=\xycolorwarning@@ + \let\xdviColor@@=\xdvi@Color@ + \let\UnloadColor@@=\UnloadColor@ + } +\xydef@\NoXDVIcolordvi@{\xywarning@{% + Neither colordvi.tex nor colordvi.sty could be found.}% + \xyBEcolorcheck@}% +\xydef@\xdviCrayola@@{\xdviColor@@\xdviCrayola@} +\xydef@\xdviCrayola@{% + \let\prevxycolor@=\newxycolor@ + \def\newxyXDVIcolor@##1##2##3{\prevxycolor@{##1}{}{##1}}% + \let\newxycolor@=\newxyXDVIcolor@ + \installCrayolaColors@ + \let\newxycolor@=\prevxycolor@ }% +\xydef@\xdviPS@@{\xdviPS@} +\xydef@\xdviPS@unload{\UnloadPS@ + \let\UnloadPS@@=\UnloadPS@ + \let\xdviPS@@=\xdviPS@ } +\xydef@\xdviPStypes@{% + \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}% + \ifx\PSspecial@@\xdviSpecial@\else + \let\PSspecial@@=\xdviSpecial@ + \let\PSmacro@@=\xdviMacro@ + \let\PSdict@@=\xdviDict@ + \let\PSspecialdict@@=\xdviDict@ + \let\PSraw@@=\xdviRaw@ + \let\PSinclude@@=\xdviInclude@ + \let\xyPSobeylines@@=\obeyXDVIlines@ + \let\xyPScurrpt@@=\xdviCurrpt@@ + \xdvi@@{PostScript}% + \fi \XYpredict@ } +\xywarnifdefined\xdviSpecial@ +\xywarnifdefined\xdviMacro@ +\xywarnifdefined\xdviDict@ +\xywarnifdefined\xdviInclude@ +\xywarnifdefined\xdviRaw@ +{\catcode`\"=11 \catcode`\!=11 \catcode`\:=11 + \gdef\xdviSpecial@#1{\special{ps:: SDict begin #1 end}} + \gdef\xdviMacro@#1{\firstPS@@\special{" {#1}xy}} + \gdef\xdviDict@#1{\special{! #1}} + \gdef\xdviInclude@#1{\special{header=#1}} + \gdef\xdviRaw@#1{\special{ps: SDict begin #1 end}} +\catcode`\^^M=\active + \gdef\next{\catcode`\^^M=\active \let^^M=\space }}% +\xylet@\obeyXDVIlines@=\next +\xydef@\xdviCurrpt@{\let\xyPScurrpt@@=\xdviCurrpt@@}% +\xydef@\xdviCurrpt@@{\PSraw@@{xyp}} +\xydef@\xdviPS@{\xdviPStypes@ + \let\xdviPS@@=\PSspecials@true + \let\UnloadPS@@=\xdviPS@unload + \let\installxyps@@=\relax \installxyps@ } +\xydef@\xdviRotate@@{\xdviRotate@} +\xydef@\xdviRotate@{\xdviPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}% + \xdviCurrpt@ \xdviRotScale@ \installPSrotscale@ }% + \else\DN@{\xydriverfail@{rotations are}UnloadRotate@\relax}\fi + \next@ } +\xydef@\xdviRotScale@{% + \def\xyrot@start(##1){{xyct ##1\space xyrs }}% + \def\xyrot@end{}% + \def\xyscale@start(##1,##2){{xyct ##1\space##2\space xyss }}% + \def\xyscale@end{}} +\xydef@\xdviLine@@{\xdviLine@} +\xydef@\xdviLine@{\xdviPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}\installPSline@ }% + \else\DN@{\xydriverfail@{line-widths are}\UnloadLine@\relax}\fi + \next@ } +\xydef@\xdviFrames@@{\xdviFrames@} +\xydef@\xdviFrames@{\xdviPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}\installPSframes@ }% + \else\DN@{\xydriverfail@{frames are}\UnloadFrames@\relax}\fi + \next@ } +\xydef@\xdviTiles@@{\xdviTiles@} +\xydef@\xdviTiles@{\xdviPStypes@ + \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{% + \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}\installPSpatterns@ }% + \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi + \next@ } +\xydef@\xdviTPIC@@{\xdviTPIC@} +\xydef@\xdviTPIC@{\setupxyTPIC@} +\xyendinput -- cgit v1.2.3