summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/generic
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/generic')
-rw-r--r--Master/texmf-dist/source/generic/xypic/CATALOG.doc54
-rw-r--r--Master/texmf-dist/source/generic/xypic/COPYING339
-rw-r--r--Master/texmf-dist/source/generic/xypic/ChangeLog788
-rw-r--r--Master/texmf-dist/source/generic/xypic/INSTALL417
-rw-r--r--Master/texmf-dist/source/generic/xypic/INSTALL.OzTeX600
-rw-r--r--Master/texmf-dist/source/generic/xypic/INSTALL.Textures393
-rw-r--r--Master/texmf-dist/source/generic/xypic/MAKE259
-rw-r--r--Master/texmf-dist/source/generic/xypic/MANIFEST111
-rw-r--r--Master/texmf-dist/source/generic/xypic/Makefile1528
-rw-r--r--Master/texmf-dist/source/generic/xypic/README106
-rw-r--r--Master/texmf-dist/source/generic/xypic/TRAILER91
-rw-r--r--Master/texmf-dist/source/generic/xypic/VERSIONS103
-rw-r--r--Master/texmf-dist/source/generic/xypic/doc2tex.com114
-rw-r--r--Master/texmf-dist/source/generic/xypic/dvitogif89a207
-rw-r--r--Master/texmf-dist/source/generic/xypic/import1.eps1550
-rw-r--r--Master/texmf-dist/source/generic/xypic/install-tds147
-rw-r--r--Master/texmf-dist/source/generic/xypic/kris.eps587
-rw-r--r--Master/texmf-dist/source/generic/xypic/latin1.sty242
-rw-r--r--Master/texmf-dist/source/generic/xypic/movie.cls325
-rw-r--r--Master/texmf-dist/source/generic/xypic/pnmrawtopcropwhite.c175
-rw-r--r--Master/texmf-dist/source/generic/xypic/ross.eps397
-rw-r--r--Master/texmf-dist/source/generic/xypic/xy.doc8324
-rw-r--r--Master/texmf-dist/source/generic/xypic/xy.sty103
-rw-r--r--Master/texmf-dist/source/generic/xypic/xy16textures.doc294
-rw-r--r--Master/texmf-dist/source/generic/xypic/xy17oztex.doc301
-rw-r--r--Master/texmf-dist/source/generic/xypic/xy2cell.doc1839
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyall.doc93
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyarc.doc1436
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyarrow.doc1881
-rw-r--r--Master/texmf-dist/source/generic/xypic/xycmactex.doc71
-rw-r--r--Master/texmf-dist/source/generic/xypic/xycmtip.doc93
-rw-r--r--Master/texmf-dist/source/generic/xypic/xycolor.doc349
-rw-r--r--Master/texmf-dist/source/generic/xypic/xycrayon.doc82
-rw-r--r--Master/texmf-dist/source/generic/xypic/xycurve.doc4920
-rw-r--r--Master/texmf-dist/source/generic/xypic/xydoc.back1
-rw-r--r--Master/texmf-dist/source/generic/xypic/xydoc.bib764
-rw-r--r--Master/texmf-dist/source/generic/xypic/xydoc.sty1270
-rw-r--r--Master/texmf-dist/source/generic/xypic/xydocps.doc34
-rw-r--r--Master/texmf-dist/source/generic/xypic/xydummy.doc97
-rw-r--r--Master/texmf-dist/source/generic/xypic/xydvidrv.doc98
-rw-r--r--Master/texmf-dist/source/generic/xypic/xydvips.doc329
-rw-r--r--Master/texmf-dist/source/generic/xypic/xydvitops.doc346
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyemtex.doc243
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyframe.doc1213
-rw-r--r--Master/texmf-dist/source/generic/xypic/xygraph.doc710
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyguide.man2285
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyidioms.doc283
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyimport.doc245
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyknot.doc2014
-rw-r--r--Master/texmf-dist/source/generic/xypic/xylatex.ini77
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyline.doc664
-rw-r--r--Master/texmf-dist/source/generic/xypic/xymacpat.xyp61
-rw-r--r--Master/texmf-dist/source/generic/xypic/xymatrix.doc1345
-rw-r--r--Master/texmf-dist/source/generic/xypic/xymovie.doc161
-rw-r--r--Master/texmf-dist/source/generic/xypic/xynecula.doc594
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyoztex.doc316
-rw-r--r--Master/texmf-dist/source/generic/xypic/xypic.doc75
-rw-r--r--Master/texmf-dist/source/generic/xypic/xypic.map66
-rw-r--r--Master/texmf-dist/source/generic/xypic/xypic.sty29
-rw-r--r--Master/texmf-dist/source/generic/xypic/xypoly.doc1262
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyps-c.doc187
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyps-col.doc165
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyps-f.doc270
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyps-l.doc195
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyps-pro.doc253
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyps-ps.doc750
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyps-r.doc226
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyps-s.doc144
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyps-t.doc168
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyps.doc1209
-rw-r--r--Master/texmf-dist/source/generic/xypic/xypsdict.doc375
-rw-r--r--Master/texmf-dist/source/generic/xypic/xypspatt.doc182
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyrecat.doc95
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyrefer.man509
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyrotate.doc538
-rw-r--r--Master/texmf-dist/source/generic/xypic/xysmart.doc569
-rw-r--r--Master/texmf-dist/source/generic/xypic/xytex.ini60
-rw-r--r--Master/texmf-dist/source/generic/xypic/xytextures.doc291
-rw-r--r--Master/texmf-dist/source/generic/xypic/xytile.doc472
-rw-r--r--Master/texmf-dist/source/generic/xypic/xytips.doc239
-rw-r--r--Master/texmf-dist/source/generic/xypic/xytp-f.doc306
-rw-r--r--Master/texmf-dist/source/generic/xypic/xytpic.doc472
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyv2.doc868
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyweb.doc326
-rw-r--r--Master/texmf-dist/source/generic/xypic/xyxdvi.doc335
85 files changed, 0 insertions, 52105 deletions
diff --git a/Master/texmf-dist/source/generic/xypic/CATALOG.doc b/Master/texmf-dist/source/generic/xypic/CATALOG.doc
deleted file mode 100644
index 53e9d44b89b..00000000000
--- a/Master/texmf-dist/source/generic/xypic/CATALOG.doc
+++ /dev/null
@@ -1,54 +0,0 @@
-%% $Id: CATALOG.doc,v 3.6 1998/03/06 04:29:05 krisrose Exp $
-%%
-%% Xy-pic ``CTAN CATALOG description'' generation file.
-%% Copyright (c) 1994-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\documentstyle{article}
-\input{xy}
-\begin{document}
-
-\newwrite\Wout
-\def\W#1{\immediate\write\Wout{#1}}
-
-\immediate\openout\Wout=CATALOG.out
-\W{Name: xypic}
-\W{Version: \xyversion\space <\xydate>}
-\W{}
-\W{Description: Xy-pic is a package for typesetting graphs and diagrams.}
-\W{ It is structured as several modules, each defining a custom notation for}
-\W{ a particular kind of graphical object or structure. Example objects are}
-\W{ arrows, curves, frames, and colouring/rotation on drivers that support}
-\W{ it; these can be organised in matrix, directed graph, path, polygon, knot,}
-\W{ and 2-cell structure. Xy-pic works with most formats, including LaTeX,}
-\W{ AMS-LaTeX, AMS-TeX, and plain TeX, and has been used to typeset}
-\W{ complicated diagrams from many application areas including category}
-\W{ theory, automata theory, algebra, neural networks, and database theory.}
-\W{}
-\W{Keywords: diagram, picture, graph, arrow, curve, commutative diagram.}
-\W{}
-\W{Author: Kristoffer H. Rose}
-\W{Problems-To: Kristoffer.Rose@ens-lyon.fr}
-\W{Address: LIP/ENS-Lyon; 46, Allee d'Italie; 69364 Lyon 7; FRANCE}
-\W{}
-\W{<URL: http://www.ens-lyon.fr/\string~krisrose/>}
-\immediate\closeout\Wout
-
-\end{document}
diff --git a/Master/texmf-dist/source/generic/xypic/COPYING b/Master/texmf-dist/source/generic/xypic/COPYING
deleted file mode 100644
index a43ea2126fb..00000000000
--- a/Master/texmf-dist/source/generic/xypic/COPYING
+++ /dev/null
@@ -1,339 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 675 Mass Ave, Cambridge, MA 02139, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- Appendix: How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) 19yy <name of author>
-
- 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19yy name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/Master/texmf-dist/source/generic/xypic/ChangeLog b/Master/texmf-dist/source/generic/xypic/ChangeLog
deleted file mode 100644
index 9c017d33009..00000000000
--- a/Master/texmf-dist/source/generic/xypic/ChangeLog
+++ /dev/null
@@ -1,788 +0,0 @@
-1998-10-05 Kristoffer Rose <Kristoffer.Rose@ens-lyon.fr>
-
- * Address of FSF changed (*). MINOR.....??
-
-1998-10-03 Kristoffer Rose <Kristoffer.Rose@ens-lyon.fr>
-
- * xyframe.doc (\useCurveFrames): Curve, not circle [fix by George
- C. Necula]. MINOR.
-
- * xycurves.doc (\crvs@): \crv@defaultshape fixed [fix by George
- C. Necula]. MINOR.
-
- * Makefile, xynecula.doc, xysmart.doc: New options, extracted from
- mail [by George C. Necula], added. NEW.
-
- * xy.doc (\OBJECT@shapei): Change to implement *stylechar
- correctly. Originally, *stylechar was behaving like shape
- [...]. Now *stylechar is expanded immediately and is not added to
- tokens, while shape[...] does both [fix by George C. Necula].
- MAJOR.
-
- * xy.doc (\checkZeroEdge@): Avoid expanding \Edge@c [fix by George
- C. Necula]. MINOR.
-
-1998-03-18 Kristoffer Rose <Kristoffer.Rose@ens-lyon.fr>
-
- * Makefile: New creation of fixes... NEW.
-
- * install-tds: local variables eliminated in functions. MINOR
- [Pieter Donche].
-
-1998-03-06 Kristoffer Rose <Kristoffer.Rose@ens-lyon.fr>
-
- * Revision 3.6 released.
-
- * xyframe.doc: \dotcorner@ and \dashedcorner@ defined even when
- curves not loaded. MINOR.
-
-Wed Oct 22 18:53:12 1997 Kristoffer Rose <krisrose@ens-lyon.fr>
-
- * xygraph.doc: Only warn user about redefining graph escapes when
- this is indeed the case. MINOR.
-
-Mon Oct 13 12:55:36 1997 Kristoffer Rose <krisrose@ens-lyon.fr>
-
- * Makefile, xyps-ps.doc, xydocps.doc: Version of the dictionary is
- now controlled by the Makefile. MINOR.
-
- * xy.doc, xyguide.man, xyrefer.man: Changed Kristoffer's address
- to ENS-Lyon. MINOR.
-
- * xycurve.doc, xyline.doc: line thickness now works for curves
- (from Ross). MINOR.
-
-Thu Oct 9 02:26:45 1997 Kristoffer Rose <krisrose@ens-lyon.fr>
-
- * Makefile (macros): LATEXINPUTDIR eliminated; PSHEADERDIR changed
- to conform to TDS. Release targets updated for author's new
- location @ens-lyon.fr. MINOR.
-
-Wed May 28 00:49:07 1997 Kristoffer H. Rose <krisrose@brics.dk>
-
- * Releasing version 3.5.
-
-Tue May 27 10:42:58 1997 Kristoffer H. Rose <krisrose@brics.dk>
-
- * Makefile, INSTALL: Removed HTML which can't be generated
- presently. MINOR.
-
- * xy.doc: Fixed "missing rules bug" properly: avoid premature
- expansion of \Clast@@. Wrong "missing rules" fix undone to fix
- new "missing breaks" bug. MAJOR.
-
-Mon May 19 17:51:03 1997 Kristoffer H. Rose <krisrose@brics.dk>
-
- * Released version 3.4.
-
-Sun May 18 03:49:01 1997 Kristoffer H. Rose <krisrose@brics.dk>
-
- * xymovie.doc, movie.cls, xyrefer.man: New extension...added to
- reference manual. MINOR.
-
-Wed May 14 11:29:57 1997 Kristoffer H. Rose <krisrose@brics.dk>
-
- * xy.doc (\xy): zero \mathsurround. MINOR.
-
-Sun May 4 14:53:59 1997 Kristoffer H. Rose <krisrose@brics.dk>
-
- * xy.doc (\preconnect): methods should not inherit temporary
- invisibility (fixes missing rules problem). MINOR.
-
-Tue Mar 11 21:48:50 1997 Kristoffer H. Rose <krisrose@gorm.daimi.aau.dk>
-
- * Makefile (GFTOPK): Updated to allow using texk-7.0. MINOR:
- - Rename filenames such as `xyrefer.doc.dvi' to `xyrefer.dvi'.
- - Don't use (now-redundant) -v option to gftopk
-
-Tue Feb 11 19:17:50 1997 Ross Moore <ross@brics.dk>
-
- * xycurve.doc (*crvconn@): Centers \connect@ object. MINOR.
-
-Sun Feb 9 21:04:19 1997 Kristoffer H. Rose <krisrose@brics.dk>
-
- * xyline.doc (?): BUG: should set default line width dynamically...
-
-Thu Jan 23 22:27:06 1997 Kristoffer H. Rose <krisrose@gorm.daimi.aau.dk>
-
- * xycurve.doc, xyps-pro.doc, xypsdict.doc, xyidioms.doc,
- xyps-ps.doc, xypspatt.doc: Revert to Ross' naming of DVI-time
- hooks. MINOR.
-
-Mon Jan 6 22:08:25 1997 Kristoffer H Rose <krisrose@gorm.daimi.aau.dk>
-
- * xy.doc (\txt): Don't attempt recognising vmode. MINOR [Liam Healy].
-
- * Makefile (install): Don't make install.www. MINOR [Liam Healy].
-
-Thu Dec 19 05:39:27 1996 Kristoffer H. Rose <krisrose@gorm.daimi.aau.dk>
-
- * Release 3.3.
-
-Thu Dec 12 17:18:57 1996 Kristoffer H Rose <krisrose@gorm.daimi.aau.dk>
-
- * xy.doc (\ellipseInner@, \ellipsecentredInner@): Edge-finding
- typos fixed. MINOR.
-
-Mon Dec 2 11:07:20 1996 Kristoffer H Rose <krisrose@brics.dk.daimi.aau.dk>
-
- * xygraph.doc (\newgraphescape): never use \renewcommand. MINOR.
-
- * xy.doc (\straightC{break,last}@@): straight connection
- subsegments connect properly to non-rectangle objects. MAJOR.
- * NOTE: same bug needs to be fixed for curves!
-
-Thu Nov 28 18:45:00 1996 Kristoffer H Rose <krisrose@gorm.daimi.aau.dk>
-
- * xyv2.doc (\morphism): updated to use new style <path>s. MINOR.
-
-Wed Nov 27 22:36:51 1996 Kristoffer H Rose <krisrose@gorm.daimi.aau.dk>
-
- * xy.doc (\dir): redef'd dir3{<} naively to make center line
- segment work. MINOR.
-
-Mon Nov 25 06:08:38 1996 Kristoffer H Rose <krisrose@brics.dk.daimi.aau.dk>
-
- * xygraph.doc (\newgraphescape): Allow [n] for argument count. NEW!
-
- * xy.doc (\cmerge@): keep edge with new breaking principle. MINOR.
-
-Wed Nov 20 06:01:40 1996 Kristoffer H Rose <krisrose@brics.dk>
-
- * xymatrix.doc (\xymatrix@at): @E generalised to @M/@W/@H. MINOR.
-
- * xy.doc (\line@): downward @3{>} rotates \line@ wrong. BUG!
-
-Mon Oct 21 16:49:59 1996 Kristoffer H Rose <krisrose@gorm.daimi.aau.dk>
-
- * xy.doc (shapes): [r] [l] / [u] [d] behave when entry very
- tall / wide [Michel Goossens]. MINOR.
-
-Fri Oct 11 03:58:11 1996 Kristoffer H Rose <krisrose@gorm.daimi.aau.dk>
-
- * xyarrow.doc (\PATHlabelalias@): save breaks properly. MINOR.
-
-Wed Oct 9 18:37:06 1996 Ross Moore <ross@mpce.mq.edu.au>
-
- * xy.doc (\solid@): fixed `missing rules' bug. MAJOR.
-
-Wed Oct 9 18:37:06 1996 Kristoffer Høgsbro Rose <krisrose@gorm.daimi.aau.dk>
-
- * xy.doc (\dottedSpread@): fixed `spurious dot' bug. MAJOR.
-
-Fri Sep 20 03:33:32 1996 Kristoffer Høgsbro Rose <krisrose@gorm.daimi.aau.dk>
-
- * xyguide.man: Several exercises added and some love poured in.
-
-Thu Sep 5 19:57:22 1996 Kristoffer Høgsbro Rose <krisrose@gorm.daimi.aau.dk>
-
- * xy.doc, xyarrow.doc, xymatrix.doc: All redefinitions of \oxy@
- now via \change@oxy@ for safety reasons. MINOR.
-
- * xy.doc (\solidhrule@, \solidvrule@, \straight@): added
- \straighttypeset@@ hook for line typesetting primitive. MINOR.
-
- * xymatrix.doc: Added @M and @L spacing adjustments. MINOR.
-
-Thu Aug 15 00:03:46 1996 Kristoffer H Rose <krisrose@brics.dk>
-
- * xy.doc: dottedSpread bails out when no filling requested. HACK.
-
- * xycurve.doc: Avoid redefinition warning. MINOR.
-
- * xyguide.man: Worked through; documented that line intersection
- of curves works. MINOR.
-
-Mon Aug 13 00:00:00 EST 1996 Ross Moore <ross@mpce.mq.edu.au>
-
- * xycurve.doc, xyline.doc, ?: Thorough recoding to respect
- styles. MAJOR.
-
-Thu Aug 15 00:03:46 1996 Kristoffer H Rose <krisrose@brics.dk>
-
- * xy.doc: dottedSpread bails out when no filling requested. HACK.
-
- * xycurve.doc: Avoid redefinition warning. MINOR.
-
- * xyguide.man: Worked through; documented that line intersection
- of curves works. MINOR.
-
-Mon Aug 13 00:00:00 EST 1996 Ross Moore <ross@mpce.mq.edu.au>
-
- * xycurve.doc, xyline.doc, ?: Thorough recoding to respect
- styles. MAJOR.
-
-Sun Jun 30 21:12:35 1996 Kristoffer H|gsbro Rose <krisrose@gorm.daimi.aau.dk>
-
- * xyarrow.doc: Hide tips. MINOR.
-
-Tue Jun 11 01:23:46 1996 Kristoffer H|gsbro Rose <krisrose@gorm.daimi.aau.dk>
-
- * xyarrow.doc: use \PATHcontinue@@ correctly. MAJOR.
-
- * xy.doc: \checkXyStyle@ was never defined, now prints `?'.
-
-Fri May 24 04:27:32 1996 Kristoffer H Rose <kris@laptop (Kristoffer H Rose)>
-
- * xyarrow.doc (*): fixed use of new kernel connect methods! MAJOR.
-
-Thu May 23 20:30:53 1996 Kristoffer H Rose <kris@laptop (Kristoffer H Rose)>
-
- * xy.doc: SUMMARY of (functionality) KERNEL CHANGES since v3.2:
- - (PREAMBLE) \xy*@ definitions made global.
- - (\zz@) new almost-zero test (uses dimension register).
- - (\xyinputorelse@) split into conditional (not loading if
- \*loaded already defined) and unconditional (with @@).
- - (\xymath@) use fontdimen22 to vertically adjust.
- - (\vfromabsolute@@, \AddOp@) add 1sp ??
- - (\preconnect, ...) setup but don't do \connect.
- - (\OBJECT@@, \Drop@@) default is to use \styledbox@.
- - (\OBJECT@@, \object) define \pre/postXY@style@.
- - (\checkZeroEdge@) uses \zz@-checker.
- - (\OBJECT@shapei) fix expandafter trickery.
- - (\styledbox@) new wrapper for \pre/post-styles.
- - (\checkXyStyle@, \styleDrop@, \styleConnect@) removed.
- - (\xynamestyle@) removed warning when not redefining.
- - (\xycompileto@) attempt to recover when compiled file truncated.
- - (\MakeOutlines) Allow compilation of outlines only.
- - (\no@, \line@, \solid@, \tip@) don't reset i/h flags ??
- - (\line@, \pointlike@, \squiggle@, \[Tt]ip@, \cir@*) use \styledbox@.
- - (\solid[vh]rule@) respect i/h flags, setup break-methods.
- - (\xyoption) truncate right.
- - (\xydriversselected) default to empty!
- - (CONNECTIONS) recoded (too many changes to summarise)!
-
-Tue Jan 2 14:18:04 1996 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xy.doc (\xyinputorelse@): Stop gobbling csnames like mad: use a
- shaved version to input non-doc files. MINOR.
-
- * xy.doc (\xydef@,...): made private definitions global. MINOR.
-
- * xygraph.doc: do not save node ids with explicit ="...". NEW.
-
-Wed Dec 13 03:16:04 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xy.doc (methods): Changed style principle such that the style is
- always used, and such that it is reestablished. MAJOR.
-
-Mon Nov 20 23:06:26 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xy.doc (shapes): Now [=...] is the same as [|=...]. MINOR.
-
-Thu Nov 16 03:12:01 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xyarrow.doc (\ar): update variant more often but only when not
- already set. MINOR.
- From: Stefano Guerrini <guerrini@DI.Unipi.IT>
-
-Wed Nov 15 20:36:10 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xy.doc (\straight@): added Cbreak@@ and Clast@@ methods! NEW.
-
-Mon Nov 13 16:14:11 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xymatrix.doc (\xymatrix@fix): Fixed @! <setup> to make row and
- column spacing the same; added @![RC]0 and @![RC]=<dimen> to set
- override entry size for spacing computation. MINOR, NEW..
-
-Thu Oct 26 16:09:10 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xy.doc (\xycompile): add \OnlyOutlines and friends. NEW.
-
-Wed Oct 18 03:13:45 1995 Kristoffer H Rose <kris@rose.diku.dk>
-
- * xyps-pro.doc (PS Prolog): eliminate obsolete \currentxydriver@
- such that conditionals are right. MINOR.
-
- * xyidioms.doc (\xysetup@@): avoid problems when Babel loaded with
- plain TeX. MINOR.
-
-Tue Oct 17 21:38:03 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xymatrix.doc (\xymatrix@at): @1 <setup> adds math strut. NEW.
-
- * xy.doc (\xymath@): Use axis_height (fontdimen22 of textfont2) to
- adjust the reference point of in-math Xy-pictures. MAJOR.
-
-Mon Oct 16 20:04:25 EST 1995 Ross Moore <ross@mpce.mq.edu.au>
-
- * xycurve.doc: improved the edge-finding capabilities. MINOR
-
- * xyarrow.doc: removed \cmergethecz@ from path sub-segments. MINOR
-
-Wed Oct 11 08:16:27 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xy*.doc: \xyinputorelse@ now skips files files that have set
- \FILEloaded = \empty. MINOR.
-
-Tue Oct 10 20:30:16 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xy.doc (\xycompileto): attempt to recover from truncated
- .xyc-file. MINOR.
-
- * xyv2.doc (\diagramcompileto): avoid competing compilation. MINOR.
- (\XXtoY@, \toXY@): avoid @-names in literate code. MINOR.
- From: Joerg Eich <jeich@wmpi13.math.uni-wuppertal.de>
-
-Mon Oct 9 20:58:13 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xymatrix.doc (entry spacing): added <setup> forms @*[shape] and
- @*<addop><size> to set defaults for **... equivalents; also made
- these constructions cumulative (bug: still backwards). MINOR, NEW.
-
-Thu Oct 5 16:44:09 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xymatrix.doc: changed row/column names to the user-accessible
- \Row and \Col. MINOR.
-
-Tue Oct 3 16:33:41 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xygraph.doc (\MOVE@place): Lookahead properly after <move> of
- the form ...!<place>. MINOR.
-
-Mon Oct 2 16:40:29 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xy.doc (\vfromabsolute@@, \Addop@), xyframe.doc, xycurve.doc:
- add new \zz@ almost-zero-test and add tiny amount to absolute
- dimensions to make more robust and in particular circumvent bug in
- some PostScript interpreters (!). MINOR; should also be fixed in
- PS backends...
-
-Sat Sep 23 19:48:38 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xyps-ps.doc, xyps.doc: fixed undefined \UnloadPS@@ MAJOR.
- * xyframe.doc, xycurve.doc: problem with \L@ and \R@ MAJOR.
- * documentation fixes; undefined references, etc. MINOR.
-
- * altered example diagrams, due to bug in PS interpreters.
- A better fix may be possible within xyps-ps.doc.
-
- * Released version 3.2 on ftp.mpce.mq.edu.au
- with above fixes and corrected manuals.
-
-Tue Sep 19 17:42:24 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * Release 3.2.
-
- * xyframe.doc (Circles): several instances of \L@ and \R@ should
- be \L@c and \R@c... MAJOR.
- From: Clemens Beckstein <beckstei@mipool.uni-jena.de>
-
-Fri Sep 15 95 19:03:37 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xyarrow.doc (\droplabel@): labels as objects now
- flawless! MAJOR.
-
-Wed Sep 13 18:29:25 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xyarc.doc, xytpic.doc: fixed version numbers. MINOR.
-
- * xytile.doc: changed example code...to avoid weird Level 1
- PostScript error. MINOR.
-
- * xypspatt.doc: documentation now prints with GhostScript (added
- hack to side-step bad Level 2 patterns). MAJOR.
-
-Wed Sep 13 01:54:55 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xyarrow.doc: Fixed size and modifiers of labels on all
- segments. MAJOR. From: Jürgen Koslowski <koslowj@iti.cs.tu-bs.de>
-
-Tue Sep 12 01:59:34 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xyarrow.doc: added [shape]* prefix to <it>. NEW!
-
-Mon Sep 11 21:22:37 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xypspatt.doc, xypsdict.doc: fixed pattern frequencies and
- angles. MINOR.
-
- * xyps.doc, xyps-ps.doc, + <driver> files: isolated font/ps
- interface. MAJOR.
-
-Fri Sep 8 18:15:33 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xycurve.doc: fixed \resetbreaks undefined w/o arrow. MINOR.
- Fixed wrong circle-frames w/o PS. MAJOR.
- From: Fred T. Krogh <fkrogh@math.jpl.nasa.gov>
-
-Wed Sep 6 20:48:01 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xydvidrv.doc: Changed wrong \withoption to \xywithoption. MAJOR.
- From: Young U. Ryu <ryoung@utdallas.edu>
-
-Tue Sep 5 22:38:55 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * Release 3.1!
-
- * xyframe.doc: added :<dimen> modifier to [F...] shapes. MINOR.
- From: Marc Gemis <makke@pucky.uia.ac.be>
-
- * xyarrow.doc: fixed *{x} labels to use default object
- style. MINOR.
-
-Tue Sep 5 18:49:57 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xyweb.doc, xyguide.man: fixed an example. MINOR.
-
- * xy.doc: added method \circleProp@ for labels. MAJOR.
-
- * xyemtex.doc, xydvidrv.doc, xydvips.doc:
- Support for em-\TeX \special commands. NEW.
-
-Fri Sep 1 16:11:02 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xyarrow.doc: added @? <form> to swap the meaning of ^ and _ for
- an arrow. NEW!
-
-Fri Sep 1 18:46:39 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xy.doc, xyframe.doc, xyarrow.doc: frames around arrow-labels now
- positioned better...MAJOR.
-
-Thu Aug 31 18:46:39 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xytp-f.doc: filled frames now all work. MAJOR.
-
-Tue Aug 29 15:34:25 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xy.doc (\OBJECT@change): - object modifier now works. MINOR.
-
-Tue Aug 29 20:21:59 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xyframe.doc, xy.doc, xycurve.doc, xyps.doc, xytp-f.doc, xytpic.doc
- implemented some curved and oval frames using splines and/or tpic.
- fixed some bugs in frames. MAJOR.
-
-Thu Aug 24 21:59:53 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xycolor.doc, xyline.doc, xyrotate.doc, xytile.doc: removed need
- for obsolete style option. MINOR.
-
- * xy.doc (define <shape>): xystyle.doc annihilated and its
- functionality inserted with the syntax [=...] in the
- kernel. MINOR.
-
- * xy.doc, xytile.doc, xyrotate.doc, xyline.doc, xycolor.doc,
- xyps-t.doc, xyps-ps.doc, xyps-c.doc: Changed \*shape@<shape>@ to
- merely \shape [<shape>] and \*shapechar@<char>@ to \shape
- [<char>...]. MAJOR.
-
- * xy.doc (\xyadddriversupport@): <driver> support control sequence
- no longer cleared upon every addition to it. MAJOR.
-
-Wed Aug 23 22:42:24 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xytp-f.doc, xytpic.doc: implements frames for TPIC NEW!
- * xytp-f.doc: (incomplete) rectangles, not circles/ellispes. MINOR.
-
-Wed Aug 23 11:32:25 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xyframe.doc, xyps-f.doc, xyps-pro.doc: added \frm{**} for
- stroked fills. NEW!
-
- * xy.doc: shortened the loading of drivers and removed the initial
- ``unload''. MINOR.
-
- * xycurve.doc: lack of invisibility, fixed. MINOR.
-
-Tue Aug 22 20:24:03 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xytpic.doc: all bugs fixed (!). MAJOR.
- * xytpic.doc: dotted/dashed lines now work. NEW!
- * xytpic.doc: implements \xycircle and \qspline. NEW!
- * xyxdvi.doc: new driver. NEW!
- * xy<driver>.doc: edits to reflect the TPIC support. MINOR.
- * xydoc.sty: macros for driver names. MINOR.
-
-Tue Aug 22 01:09:46 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xyguide.man, man2html.gawk: Several changes to make the .html
- version of the User's Guide prettier. MINOR.
-
-Mon Aug 21 20:24:03 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xycurve.doc: Quadratic splines added: \qspline NEW!
- * xyps-?.doc: minor edits to documentation MINOR.
- * xyrefer.doc: moved the xyps-?.doc to Part IV MINOR.
- * xytpic.doc: removed tracing and fixed a bug. MINOR.
-
-Fri Aug 18 17:13:01 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xyframe.doc: fixed several bugs: `missing' frames now are found;
- zero-sized frames handled properly; default `blacked' frames
- placed correctly; frame <object>-modifiers placed BEFORE object,
- not AFTER. MAJOR.
-
- * xyps-f.doc, xyps-c.doc, xyps-t.doc, xyps-r.doc, xyps-l.doc:
- ability to turn PSframes, PScolor, ... on/off. MINOR.
-
- * xyline.doc, xy<driver>.doc: renaming of cs's for consistency.
- MINOR.
-
- * xy.doc: fixed bug affecting ADDOP@minus. MAJOR.
-
-Tue Aug 15 16:38:22 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xyidioms.doc, xy*.doc: xysetup@ is now xysetup@@ (in other files
- also).
-
- * xyps-pro.doc: fixed error in PostScript for oval frames.
-
-Mon Aug 14 15:19:56 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xy<driver>.doc: removed the \global s, which were unnecessary.
- MINOR.
-
- * xydvitops.doc: new driver --- untested. MINOR.
-
- * xyrotate.doc, xyps-r.doc: rationalised control sequence names.
- MINOR.
-
-Fri Aug 11 18:25:31 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xy updated the Macintosh driver files. MAJOR.
-
- * xycmactex.doc, xyemtex.doc: dummy drivers that simply
- \xyrequire{dvips} (should be independent). NEW!
-
-Thu Aug 10 19:36:49 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xy.doc, xydvips.doc, xytile.doc: attempted correct
- driver-loading sequencing for non-delayed loading. MAJOR.
-
- * xyps-ps.doc: forgot to let \xyUnloadPS@@=\xyUnloadPS@. MINOR.
-
-Wed Aug 9 19:50:11 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- xycmtip.doc: with PS-backend, now work again. MAJOR
-
- * xyps-ps.doc, xyps.doc, xydvips.doc: reorganised the unloading of
- PS to simplify code in the driver-files. MINOR.
-
- * xy.doc: reinstated \xysetup@ for single drivers. (Simply delayed
- the action: \xydef@\selectdriver@single#1{\xysetup@{...}}. Now
- \xyReloadDrivers happens when it should --- everything loads at
- once, without all those repetitions as new extensions are added.
- The remaining problem (?) is that extra requests for a new (or the
- same) driver seem to generate an increasing number of calls to
- \xyReloadDrivers; e.g. 1 driver ==> 1 call , 2 drivers ==> 1+2=3
- calls , 3 drivers ==> 1+2+3=6 calls , ....). MAJOR.
-
-Mon Aug 7 16:08:06 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xy.doc, xyrecat.doc: fixed catcode loading. MAJOR.
-
- * xycmtip.doc: do not work in the reference manual, with PS. MAJOR
- looking at the <driver>-table --- great hacking, Kris :-)
- it seems that cmtips needs a <driver>. Why ?
- Could this explain its failure to load ?
- Or is it the \xysetup@ problem again ?
- i.e. it needs a trigger for the activation.
-
-Fri Aug 4 13:11:12 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xydvips.doc, xytextures.doc: hooks now end in @@, for
- consistency. MINOR.
-
- * xyframe.doc: fixed up fills, allowing non-default
- implementations. MAJOR.
-
- * xydvips.doc xycolor.doc: fixed colours. Problem in the
- redefinition of unloading, etc. Fix: make unloading a hook
- also. Drivers may redefine the hook to unload. MAJOR.
-
-Wed Jul 26 15:24:17 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xyidioms.doc, *.doc: Defined \xyclosedown@@ to make it easy to
- add important warnings to the end of the run. Renamed \xysetup@
- to \xysetup@ with global replace in all files. MINOR.
-
-Tue Jul 25 14:52:36 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xyguide.man: Index entries inserted; still needs sexy examples
- last. MINOR.
-
- * xyrefer.man: Inserted Preface with overview and license. MINOR.
-
- * xy.doc (\xyoption): Do not execute \xyoption{o} until *after* o
- has been loaded (delay definition of \xy<option>loaded). MINOR.
- (\newdriver): Use \xywithoption{<driver>}{...} to activate. MINOR.
-
-Mon Jul 24 01:12:48 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xyguide.man (Sliding arrows sideways): use the now fixed @<1ex>
- form for sliding. MINOR.
-
- * xyarrow.doc (note slide arrow): @<dimen> fixed such that it
- works. MAJOR.
-
- * xy.doc (\endxy): explicit error for unmatched \endxy. MINOR.
-
- * xymatrix.doc (New coordinate formats): <place> accepted after
- <hop>+. NEW!
-
- * xy16textures.doc (Unloading): add pseudo-extension to handle
- special \shipout undefinition. MINOR.
-
- * xydvips.doc, xytextures.doc, xy16textures.doc, xyoztex.doc,
- xy17oztex.doc: use new <driver> principle. NEW!
-
- * xydoc.sty: drivers treated like other options in the reference
- manual. MINOR.
-
- * xycolor.doc, xyframe.doc, xyline.doc, xyps.doc: Added `unload'
- <driver> support; removed some status messages. NEW!
-
- * xydocps.doc: use plain TeX. MINOR.
-
-Sun Jul 23 20:35:16 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xy.doc (\xyeveryrequest): execute code at every invocation of
- an option. NEW!
- (\xyeverywithoption): execute code at every inocation of
- code created with \xywithoption. NEW!
- (Driver options): completely rewrite of driver option support,
- incorporating concepts of xydriver.doc. NEW!
-
- * Makefile (KERNELSOURCES): xydriver.doc removed. MINOR.
-
- * xyframe.doc: \frm{!} hack incorporated into plain frames when
- line extension is loaded. MINOR.
-
-Sat Jul 22 14:45:44 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xy16textures.doc, xy17oztex.doc, xy2cell.doc, xyarc.doc,
- xyarrow.doc, xycolor.doc, xydriver.doc, xyframe.doc, xyknot.doc,
- xymatrix.doc, xyoztex.doc, xyps.doc, xytextures.doc, xyv2.doc,
- xyweb.doc: many documentation fixes. MINOR.
-
-Fri Jul 21 18:43:14 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xyidioms.doc (\xysetup@): Also delay preamble declarations for
- the amsppt.sty style for AMS-TeX. MINOR.
-
- * xydummy.doc: Counts its own usefulness :-). NEW!
-
-Fri Jul 21 22:23:07 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xy16textures.doc, xy17oztex.doc, xyoztex.doc, xytextures.doc:
- removed redundant \xyuncatcodes. MINOR.
-
-Fri Jul 21 14:08:43 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xy.doc (\Xy-pic options): Search properly for options using all
- possible file names. MINOR.
-
-Fri Jul 21 00:13:03 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xyframe.doc: elliptical frames now work properly... MINOR
- * xyps-f.doc: ...using PostScript.
- still need to get them working using \xycircle, for non-PS.
-
- * import1.eps: changed font name: MINOR
- /courier changed to /Courier, else DPS may complain.
-
- * xyimport.doc: made save-safe. MINOR
- Modified to use xy@@s such that it is compile safe.
-
-Thu Jul 20 10:16:59 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * Makefile (DVIPS): Use 300 dpi and a4 paper as advertised. MINOR.
-
- * xymatrix.doc (\xymatrix@pretypeset): Final matrix dimension set
- after \halign.
- Longest last row ignored. MAJOR.
- From: Marc Gemis <makke@pucky.uia.ac.be>
-
-Wed Jul 19 17:43:25 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xyframe.doc: reformulated note on using \frm{*} on
- non-rectangular objects. MINOR
-
-Tue Jul 18 22:26:47 EST 1995 Ross R. Moore <ross@mpce.mq.edu.au>
-
- * xyimport.doc: append .eps to example graphic's filename. MINOR
- Added default sizes in case graphics box is empty, or has a zero
- dimension, or coords are set at zero size.
-
- * xyrefer.man: append .eps to graphics filenames. MINOR
- Some implementations of LaTeX graphics may not need it, but others do.
-
- * xydvips.doc: removed unnecessary catcode changes. MINOR
- no longer necessary due to the fixes explained in the
- following entry...
-
- * xyps-l.doc, xyps-c.doc, xyps-f.doc, xyps-r.doc, xyps-t.doc,
- xyps-t.doc, xycolor.doc, xycrayon.doc: inserted \xyuncatcodes
- after installation --- loading options in different orders could
- leave the catcodes set incorrectly (using plain TeX). MAJOR.
- Lesson: \xyuncatcodes must follow any installation procedure
- which either reads a file or creates new cs-names;
- since it may be the last thing loaded.
- From: Dierdrik Wiersma.
-
- * xycurve.doc: documentation fixes: MINOR
- Changed the `ToDo:' section for xycircle to DOCMODE2
- Fixed bad presentation in the main display and elsewhere;
- --- no more Underfull or Overfull boxes !!
-
- * xyps-ps.doc: put \xyuncatcodes after dictionary loading. MINOR
- Otherwise users can get the wrong catcodes if xypsdict.tex
- is the last file to load.
-
- * xyarc.doc: documentation fixes. MINOR
- fixed the aberrant example; other cosmetic changes.
-
-Mon Jul 17 17:59:26 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * Makefile: Avoid retypesetting of manual? MINOR.
-
- * xypic.map: Fixed PS font names (to upper-case). MINOR.
- From: Michel Goossens <goossens@afsmail.cern.ch>
-
-Wed Jul 12 19:48:16 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xy.sty: Also apply @-active hack for `amsmath' package. MINOR.
-
-Tue Jul 11 12:25:54 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * xyframe.doc (Filled regions): Explained that non-rectangular
- fills require backend support. MINOR.
-
- * xy.sty: dvips document class option again loads dvips+ps. MINOR.
-
- * xydoc.sty (\specialxyprovide): Use short \CompilePrefix{...}.
- Bug: File names for .xyc-files of reference manual too long. MINOR.
- From: Jörg Knappen <KNAPPEN@VKPMZD.kph.Uni-Mainz.DE>
-
- * Makefile: use ...|while read f... instead of `...` to avoid
- overlong lines during administrative makes. MINOR.
-
-Mon Jul 10 13:27:44 1995 Kristoffer H. Rose <kris@tyr.diku.dk>
-
- * fix01 announced (to world since MAJOR bugs fixed).
-
- * xyv2.doc (\framed, \Framed, ...): Removed erroneous brace level;
- furthermore made it compile-safe.
- Bug: Frames disappear in compatibility mode. MAJOR.
- From: Clemens Beckstein <beckstei@mipool.uni-jena.de>
- From: Michael J. Healy <mjhealy@espresso.rt.cs.boeing.com>
-
- * xymatrix.doc: changed \row@/\col@ to \row@@/col@@.
- Bug: conflict with AMS-LaTeX \row@ cs. MAJOR.
- From: Enrico Gregorio <GREGORIO@dipmat.unict.it>
-
- * xyarrow.doc (\PATHturn@i): Split turn code into several \xy@@s.
- Bug: Too long lines in xyguide-30.xyc and xyguide-38.xyc. MINOR.
- From: Jörg Knappen <KNAPPEN@VKPMZD.kph.Uni-Mainz.DE>
-
- * xyguide.man: Set \CompilePrefix to 6-character string.
- Bug: File names for .xyc-files of guide too long. MINOR.
- From: Jörg Knappen <KNAPPEN@VKPMZD.kph.Uni-Mainz.DE>
-
- * latin1.sty: Explicitly includes plain TeX's \def\copyright...
- Bug: Can't typeset \copyright properly. MINOR.
- From: Antonio Possolo <antonio@espresso.rt.cs.boeing.com>
- From: Robert Kiessling <Robert.Kiessling@rrze.uni-erlangen.de>
diff --git a/Master/texmf-dist/source/generic/xypic/INSTALL b/Master/texmf-dist/source/generic/xypic/INSTALL
deleted file mode 100644
index f91c83dc335..00000000000
--- a/Master/texmf-dist/source/generic/xypic/INSTALL
+++ /dev/null
@@ -1,417 +0,0 @@
--*-text-*- $Id: INSTALL,v 3.6 1998/03/06 01:28:05 krisrose Exp $
-
-
- ================================================
- INSTALLING THE Xy-pic DIAGRAM TYPESETTING MACROS
- ================================================
-
-
-This file explains how you install the files in the `run' distribution of
-Xy-pic. See `README' for general information.
-
-Contents:
-
--1- Copyleft
--2- Overview of files and where they should be installed
--3- Information for specific systems
--4- Updating from version 2.6 (and earlier)
--5- Bugs & comments
-
-
----------------------------------------------------------------------------
--1- COPYLEFT
----------------------------------------------------------------------------
-
-
-Note that the entire Xy-pic package is distributed with copyleft:
-
- Copyright (c) 1991-1998 Kristoffer H. Rose <krisrose@ens-lyon.fr>
- Copyright (c) 1994-1998 Ross Moore <ross@mpce.mq.edu.au>
-
- 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-What this means is that if you install Xy-pic then you should (1) make
-sure that the file `COPYING' is accessible to the users, and (2) be
-prepared to provide Xy-pic (including sources) to any of your users
-that request it (you may charge a fee for this if you are so
-inclined).
-
-Note: Some option files may be copyrighted by other people but the
-conditions remain the same for any file distributed as part of Xy-pic.
-
-
----------------------------------------------------------------------------
--2- OVERVIEW OF FILES AND WHERE THEY SHOULD BE INSTALLED
----------------------------------------------------------------------------
-
-
-In this section we explain in 11 steps where the different groups of
-Xy-pic files in the `run' and `doc' distribution should be installed.
-For each file category we indicate the location recommended by TDS,
-the TeX Directory Standard (as formed by a TUG working group of that
-name).
-
-IMPORTANT
----------
-If you have users currently using version 2.6 then make sure you read
-section 4! Please also check the next section for any system specific
-considerations.
-
-SPACE REQUIREMENTS
-------------------
-Installing the Xy-pic package requires almost 1MB with the macros
-macros taking up most of the space. Installing everything, including
-sources, documentation in both DVI, DVIPS, and PS, form, as well as
-bitmap fonts for several printers and in PostScript Type1 form,
-requires more than 12MB.
-
-
-Step 1. Eliminating Obsolete Files
-----------------------------------
-The new PostScript Type1 fonts contributed by Y&Y Inc. require that
-you REMOVE ALL COPIES of the following files BEFORE installing:
-
-Old font map files should be removed:
-
- xy.map
- xypic.map
-
-TDS directory: texmf/dvips/xypic
-
-Also be aware that some installations, for example the TeX Live 2
-CD-ROM, insert the contents of map files in `psfonts.map' (with TDS
-directory texmf/dvips/base); then you must EDIT it to remove all lines
-that start with `xy'.
-
-Remove old PostScript Type1 font files:
-
- xyatip10.pfa
- xybsql10.pfa
- xybtip10.pfa
- xycirc10.pfa
- xycmat10.pfa
- xycmbt10.pfa
- xydash10.pfa
- xyeuat10.pfa
- xyeubt10.pfa
-
- xyatip10.pfb
- xybsql10.pfb
- xybtip10.pfb
- xycirc10.pfb
- xycmat10.pfb
- xycmbt10.pfb
- xydash10.pfb
- xyeuat10.pfb
- xyeubt10.pfb
-
-TDS directory: texmf/fonts/type1/public/xypic
-
-Remove old `xy.sty' and `xypic.sty' files that you might have stored
-earlier in the TDS directory `texmf/tex/latex/misc'.
-
-
-[FILES IN xy*run.tar.gz:]
-
-
-Step 2. Availability & License
-------------------------------
-These eight files contain general information and should be installed
-in a publicly readable place:
-
- README generic information on Xy-pic
- CATALOG version information and summary
- TRAILER announcement and availability
- INSTALL how to install (this file)
- MANIFEST list of all files
- VERSIONS the RCS version ids of all source files
- COPYING GNU General Public License
-
-TDS directory: texmf/doc/generic/xypic
-
-
-Step 3. Macros
---------------
-Files `texinputs/*' are TeX and LaTeX macro files that must be
-installed in a place which TeX and LaTeX will search (e.g., with un*x
-TeX, a directory users include in the TEXINPUTS environment variable).
-
-The files `texinputs/*.ini'
-
-TDS directory: texmf/tex/generic/xypic
-
-
-Step 4. TeX Font Metric
------------------------
-Files `texfonts/*.tfm' should be installed in a directory that TeX
-will search for fonts (e.g., with un*x TeX, a directory users include
-in the TEXFONTS environment variable).
-
-TDS directory: texmf/fonts/tfm/public/xypic
-
-
-Step 5. METAFONT Sources
-------------------------
-Files `mfinputs/*.mf' should be installed in some directory where the
-METAFONT program will search for them (e.g., with un*x TeX, a
-directory included in the MFINPUTS environment variable).
-
-NOTE: The METAFONT source files are only useful on installations where
-the printer driver and previewer can utilise them to generate the
-required bitmap fonts `on-line'. If this is possible on your
-installation then please use it: it saves substantial amounts of space
-and means that you will automatically use fonts optimised for each
-printer (provided evrything is correctly set up, of course).
-
-TDS directory: texmf/fonts/source/public/xypic
-
-
-Step 6. Bitmap Fonts [Optional]
--------------------------------
-Files matching the patterns `pkfonts/cx<N>/*.<N>pk' and
-`pkfonts/ljfour<N>/*.<N>pk', where <N> is some number, contain bitmap
-font files and should be installed where DVI previewers and printer
-drivers will find them (e.g., with un*x, the `xdvi' program should see
-them through the XDVIFONTS environment variable). (`cx' is a 300 dpi
-(dots per inch) mode and `ljfour' a 600 dpi mode.)
-
-NOTE: This step is optional because the bitmaps are only needed (and
-only recommended) for installations that can't use the METAFONT
-sources directly but do have a 300 or 600 dpi laserprinter driver that
-accepts PK bitmap font files.
-
-TDS directory: texmf/fonts/pk/cx/public/xypic/dpi<N>
- and: texmf/fonts/pk/ljfour/public/xypic<N>
-
-
-Step 7. PostScript Type1 Fonts
-------------------------------
-Files `type1/*.pfb' contain versions of the Xy-pic fonts in special
-PostScript form that may be useful on some installations. They should
-be installed where the applications using them look for such fonts (if
-used with DVIPS then the `ps/xypic.map' file from the next group
-should also be installed).
-
-NOTE: Some installations, notably teTeX 0.4, will PREFER using these
-fonts over the METAFONT-generated equivalents (IMHO this is a bug in
-the MakeTeXPK script). On those systems we recommend that you ALSO
-install the PK fonts to circumvent the problem.
-
-IMPORTANT: Make sure that you do not have any old Xy-pic PostScript
-`xy*.pfa' fonts floating around in your system - search for and remove
-all files named `xy*.pfa' when you have installed the new fonts. One
-common way old (and wrong) fonts is manifest is when some arrowheads
-appear skewed or too thin.
-
-TDS directory: texmf/fonts/type1/public/xypic
-
-
-Step 8. Adobe Font Metric Files
--------------------------------
-Files `afm/*.afm' are special files for the Adobe Type Manager and
-some other software. Install them if you need them.
-
-TDS directory (usually): texmf/fonts/afm/public/xypic
-
-
-Step 9. PostScript Font Metric Files
-------------------------------------
-Files `pfm/*.pfm' are special files for the Windows version of the
-Adobe Type Manager and some other software. Install them if you need
-them.
-
-TDS directory (usually): texmf/fonts/pfm/public/xypic
-
-
-Step 10. PostScript Header Files
---------------------------------
-Files `ps/*' contain PostScript header files. If you plan to use the
-PostScript extension option then you should copy these files to a
-place where your PostScript DVI driver will find them.
-
-NOTE: For older versions of DVIPS (at least for 5.58f) you should
-replace the occurrences of `<<' with `<' in `xypic.map'.
-
-TDS directory (usually): texmf/dvips/xypic
-
-
-[FILES IN xy*doc.tar.gz:]
-
-
-Step 11. Manuals
-----------------
-The typeset User's Guide is distributed as a DVI file which you should
-be able to print (or preview) once you have installed the fonts (as
-source or bitmaps as applicable for your system):
-
- doc/xyguide.dvi User's Guide, typeset using the kernel Xy-pic fonts
- doc/xyguide.dvips --- using DVIPS specific `specials'
- doc/xyguide.ps --- in PostScript (with 600dpi bitmap fonts)
-
-Similarly, the reference manual for the kernel and the distributed
-options is included in the same format:
-
- doc/xyrefer.dvi Reference Manual, using Xy-pic fonts
- doc/xyrefer.dvips --- using DVIPS specific `specials'
- doc/xyrefer.ps --- in PostScript (with 600dpi bitmap fonts)
-
-Notice that only the .dvi documents are portable among all TeX
-installations.
-
-TDS directory: texmf/doc/generic/xypic
-
-
-That's all. If you want to install the Xy-pic sources (to experiment
-with development, for example), you need to get the separate
-distribution `xy*src.tar.gz'.
-
-
----------------------------------------------------------------------------
--3- INFORMATION FOR SPECIFIC SYSTEMS
----------------------------------------------------------------------------
-
-
-UN*X
-----
-The above installation procedure (using the TDS recommended places) is
-encoded in the script `support/install-tds': the command
-
- ./support/install-tds <texmf>
-
-where <texmf> is the full path name of the `texmf' directory (the root
-of the TDS tree), will install all the Xy-pic runtime files (or more
-precisely: it will perform steps 2-5 and 7-10 above).
-
-NOTE: You must MANUALLY remove obsolete files (do step 1 above)!
-
-If you get the source distribution as described in `TRAILER' and
-change the configuration section of the provided `src/Makefile' to
-reflect your local file system conventions as described in
-`src/MAKE', then the command
-
- make TEXMF=<texmf> install
-
-will also do this (but with the generated files, of course).
-
-
-VMS
----
-(Mon, 20 Mar 1995; thanks to Austin Benson <austin@shapel.ug.eds.com>
-and Ralf Gaertner <gaertner@cthulhu.rhein-main.de>):
-
-(1) VMS tfm and pk files are in a funny file format, which means they
- EITHER should be generated from the mf source on a VMS machine, OR
- be converted by a conversion program such as BILF (part of the
- DECUS TeX distribution and the ZOO distribution although the
- latter is reported to only work on VAXen).
-
- FIX: Install .mf sources and pregenerate .tfm and .pk files
- manually OR convert with BILF or a similar program.
-
-(2) At least some (OLD) versions of TeX for VMS had a `buglet' to do
- with searching for input files: if you go \input <filename> on VMS
- then TeX prepends the filename with a chained logical
- "tex_inputs:" - equivalent to a Unix path. Unfortunately \openin
- does _not_ do this - although on Unix systems \openin will search
- the TEXINPUTS path just as \input does.
-
- FIX: Change the following line in xy.tex
-
-\xydef@\xyinputorelse@@#1#2{\openin\xyread@=#1
-
- TO
-
-\xydef@\xyinputorelse@@#1#2{\openin\xyread@=tex_inputs:#1
-
-
-PC WITH PCTEX
--------------
-On PCTeX fonts should be stored in files `C:\PIXEL\DPI<dpi>\<font>.pk'
-where <dpi> and <font> are replaced by appropriate values, e.g., `600'
-and `xyatip' (thanks to Alain Amiouni <alain_amiouni@msn.com>).
-
-
-MAC WITH Textures or OzTeX
---------------------------
-See the special files `INSTALL.Textures' and `INSTALL.OzTeX'.
-
-
----------------------------------------------------------------------------
--4- UPDATING FROM VERSION 2.6 (AND EARLIER)
----------------------------------------------------------------------------
-
-
-IMPORTANT: If you have installed release 3.* or 2.7-2.12 then you can
-skip this section. If you have not, and use version 2.6, then READ IT!
-
-Xy-pic release 2.7 was almost a complete rewrite of Xy-pic; later
-releases are updates to this version. If you are using version 2.6 (or
-some earlier version) then note the following:
-
-* All the fonts have been redone AND renamed (except two that have not
- changed). Thus installing version 3 will not break any DVI files
- you already have that were typeset using the old fonts.
-
- NOTE: In fact the distribution still contains the old fonts but only
- as METAFONT sources, TFM font metrics, and PK bitmaps.
-
-* The distribution contains new versions of the files `xypic.tex' and
- `xypic.sty' that load Xy-pic in a special compatibility mode. Thus
- retypesetting your documents will create DVI files using the new
- fonts. If you wish to keep the old `xypic.tex' and `xypic.sty' then
- you should rename them before installation; we suggest naming them
- `xypic-2.tex' and `xypic-2.sty' and REMEMBER to change the line
- `\input xypic' in `xypic-2.sty' to `\input xypic-2' !
-
-* There are a few points where the backwards compatibility is not
- perfect -- these are noted in the documentation.
-
-
----------------------------------------------------------------------------
--5- BUGS & COMMENTS
----------------------------------------------------------------------------
-
-
-We will appreciate reports on any problems you may encounter and
-opinions you have on how the usefulness of Xy-pic can be improved.
-Please report using either
-
- Electronic mail (Internet): krisrose@ens-lyon.fr [preferred]
-
- Paper mail: Kristoffer H. Rose
- Laboratoire de l'Informatique du Parallélisme
- Ecole Normale Supérieure de Lyon
- 46, Allée d'Italie
- F-69364 Lyon cedex 07
- FRANCE
-
- Fax: +33 4 7272 8080
-
- W3 <URL: http://www.ens-lyon.fr/~krisrose/Xy-pic.html>
-
----------------------------------------------------------------------------
-
-This is the end of INSTALL. We hope you'll enjoy Xy-pic!
-
- -- Ross Moore and Kristoffer Rose
-
----------------------------------------------------------------------------
-
-Kristoffer Høgsbro Rose, Ph.D., prof.associé <Kristoffer.Rose@ENS-Lyon.FR>
-Laboratoire de l'Informatique du Parallélisme équipe PLUME, bureau LR5-026
-Ecole Normale Supérieure de Lyon; 46, Allée d'Italie; F-69364 Lyon 07 cedex
-phone: +33(0)4 7272 8642; fax:...8080 <http://www.ens-lyon.fr/~krisrose>
-
----------------------------------------------------------------------------
diff --git a/Master/texmf-dist/source/generic/xypic/INSTALL.OzTeX b/Master/texmf-dist/source/generic/xypic/INSTALL.OzTeX
deleted file mode 100644
index 23d838de562..00000000000
--- a/Master/texmf-dist/source/generic/xypic/INSTALL.OzTeX
+++ /dev/null
@@ -1,600 +0,0 @@
--*-text-*- $Id: INSTALL.OzTeX,v 3.4 1997/05/18 01:13:24 ross Exp $
-
- ================================================
- INSTALLING THE Xy-pic DIAGRAM TYPESETTING MACROS
- ON OzTeX INSTALLATIONS
- ================================================
-
-This file explains step by step how to install Xy-pic for use with
-OzTeX by Andrew Trevorrow. Please refer to the generic `INSTALL' file
-for details on the individual files.
-
-Contents:
-
- -0- Comments regarding OzTeX versions
- -1- Adding Xy-pic to the TeX search paths
- -2- Memory requirements
- -3- OzTeX and PostScript features
- -4- Bugs & comments
- -5- Config files
-
-----------------------------------------------------------------------
- -0- COMMENTS REGARDING OzTeX VERSIONS
-----------------------------------------------------------------------
-
-Xy-pic works fine with versions of OzTeX, from 1.7 to 2.0 and later.
-With version 2.0+ of OzTeX, it is advisable to use the OzDVIPS driver.
-Similarly with versions 1.8 and 1.9, it is possible to use the DVIPS
-driver, implemented by Thomas Kiffe. These WILL handle all the effects
-such as colour, rotated text, scaled text, patterns, fills and others,
-however the OzTeX viewer cannot show these effects---you will need a
-PostScript printer or previewer such as GhostScript
-(e.g. `Mac GS Viewer', by Aladdin Enterprises).
-
-Thus to handle special effects with OzTeX 1.8+ your TeX source should
-specify \xyoption{dvips} and the `Use DVIPS' menu option should be
-selected for processing the dvi-file.
-
-The \xyoption{oztex} command should ONLY be used with OzTeX 1.8+ when
-you do not wish to use DVIPS or OzDVIPS but still want the improved
-performance of the PostScript backend (see note 3 below).
-Similarly \xyoption{17oztex} is provided for use with version 1.7.
-
-
-----------------------------------------------------------------------
- -1- ADDING Xy-pic TO THE TeX SEARCH PATHS
-----------------------------------------------------------------------
-
-Follow these steps to make Xy-pic `visible' to OzTeX:
-
-INSTALLING MACROS:
-
-1. Create a subfolder `:TeX-inputs:Xy-pic:'.
-
- This folder will contain the Xy-pic input files. It is NOT
- sufficient to create an alias to an existing folder which already
- contains these files.
-
-2. Append this directory name to the line
-
- TeX input folder(s) = ....
-
- in the `:Configs:Default' file.
-
-3. Within the folder `:Configs:'
-
- EITHER create the files
-
- :Configs:Default+Xypic
- :Configs:Big TeX+Xypic
- :Configs:Big Xy-TeX
-
- which are included below (in section -5-).
- These are modifications of Config files from OzTeX version 1.8.
- Adaptations for version 2.0+ will be made sometime soon.
- OR
- read the memory requirement notes below (in section -2-)
- and reconfigure your own config files accordingly.
-
-4. Within the folder `:TeX-inputs:Xy-pic:' place copies of all of
- the files from `texinputs'.
-
-INSTALLING FONTS:
-
-5. Create a subfolder `:TeX-fonts:Xy-pic:'
-
- This folder will contain the Xy-pic font metrics files. It is NOT
- sufficient to create an alias to an existing folder which already
- contains these files.
-
-6. Within the folder `:TeX-fonts:Xy-pic:' place copies of all of
- the files from `texfonts'.
-
-7. For each of the subdirectories in `pkfonts': `cx300', `cx329', and
- `cx360' copy all files to the corresponding folder
-
- :PK-files:300:
- :PK-files:329:
- :PK-files:360:
-
-INSTALLING THE PostScript BACKEND:
-
-8. Within the folder `:PS-files:' place a copy of the file
- `ps/xy34dict.pro'. This is placed here for safe-keeping only.
-
-If you DO NOT use DVIPS then ...
-
-8A. Within each directory in which you work, you will need a copy
- of this file, renamed to be called `global.ps';
-
- ...but if you DO use DVIPS then it is sufficient to...
-
-8B. Place a copy of `ps/xy34dict.pro' into the subfolder
- `:Dvips:ps' where it can be found by DVIPS.
-
- Read section -3- below, to understand what is required here.
-
-----------------------------------------------------------------------
- -2- MEMORY REQUIREMENTS
-----------------------------------------------------------------------
-
-Xy-pic is a big package, requiring quite a lot of memory if a large
-number of diagrams, or a small number of large diagrams, are to be
-typeset.
-
-Using the `Default' configuration and `Plain' format, then Xy-pic will
-load, but expect trouble unless you need it only for small diagrams.
-With `LaTeX' then Xy-pic will NOT EVEN LOAD all of its standard
-options.
-
-Thus using `Big-TeX' should be regarded as ABSOLUTELY ESSENTIAL, to do
-any serious typesetting --- though read the rest of this section
-before doing this. Of course this will mean rebuilding the `Plain'
-and `LaTeX' formats using `INITEX' and increasing the Finder
-memory-partition from the OzTeX application's `Get Info' dialog box.
-
-Since `Big-TeX' inherits and overrides settings from `Default' it is
-not necessary to make any alterations for Xy-pic --- at least not for
-use with the `Plain' format.
-
-However even `Big-TeX' is too small, in some of its parameters, for
-`LaTeX' and Xy-pic to coexist peacefully. If you try this then the
-first type of memory to run out is the `pool size':
-
- ! TeX capacity exceeded, sorry [pool_size=60000].
-
-To fix this requires increasing the "pool_size" parameter, to say
-160,000. Existing format files for Plain and LaTeX, compiled under
-Big-TeX with the smaller pool size WILL STILL WORK --- there is no
-need to recompile to accommodate this change.
-
-The config file `:Configs:Big TeX+Xypic' has these values.
-
-
-This should be sufficient unless the document contains large
-diagrams or diagrams such that many curves appear on the same or
-adjacent pages, and the Xy-pic PostScript back-end is NOT in use.
-Expect to encounter...
-
- ! TeX capacity exceeded, sorry [mem_max=200000].
-
-In order to typeset such documents other memory parameters may have to
-be increased also, including "mem_top", "hash_size", "hash_prime" and
-"hyph_size". These latter changes mean that the format files have to
-be rebuilt.
-
-For example, in order to typeset the Xy-pic guide, reference manual,
-and technical documentation (700+ pages), using the Xy-pic fonts, an
-OzTeX with a finder memory partition of 8+ MBytes -- it has the
-parameter `mem_max=600000' -- was used.
-
-Please experiment with the memory parameters until you find settings
-comfortable for your requirements. The author would be happy to
-include, with future releases of Xy-pic, a listing of typical settings
-which users have found to meet their needs.
-
-----------------------------------------------------------------------
- -3- IMPORTANT: OzTeX AND PostScript FEATURES
-----------------------------------------------------------------------
-
-Xy-pic provides improved graphics capabilities using PostScript code
-inserted into the .dvi-file using \special commands. Indeed if the
-PostScript ``backend'' is loaded, then almost all parts of diagrams
-constructed with Xy-pic can be rendered using PostScript. These extra
-features become available to Xy-pic, when `options' are requested,
-using e.g. \xyoption{ps} , \xyoption{color} , \xyoption{line} , ...
-see the User Guide and Reference manual for details.
-
-HOWEVER, one MUST also specify ONE of the following commands:
-
- \xyoption{dvips} if ``Use DVIPS'' is checked
- \xyoption{oztex} with versions 1.8+ of OzTeX
- \xyoption{17oztex} with version 1.7 of OzTeX
-(these latter two are for when DVIPS will NOT process the .dvi file.)
-
-AND, if not using LaTeX, specify \XyReloadDrivers after all other
-Xy-pic options have been requested.
-
-
-
-IMPORTANT: (when OzDVIPS or DVIPS is NOT being used)
-If Xy-pic PostScript features are to be used with OzTeX,
-then two files are used frequently, namely `:PS-files:empty.ps' and
-`global.ps'. The latter must be resident in the current folder.
-
-Make sure that `empty.ps' indeed has empty contents, for the Xy-pic
-\specials depend upon this. Also, if global.ps has non-empty contents,
-then take a copy for safe-keeping, for Xy-pic will need to overwrite
-it at some point, as will now be explained.
-
-For the Xy-pic \specials to work correctly a dictionary of PostScript
-definitions must be included with every document before printing.
-These definitions are typically required on every page, so OzTeX's
-`global.ps' mechanism is used to achieve this.
-
-NOTE: It is NOT sufficient to input this dictionary as if it were
-a graphics file, residing in `:PS-files'. The `global.ps' mechanism
-is the ONLY way provided by OzTeX for this to work.
-
-Indeed Xy-pic checks that this file is available. If it does not find it,
-or finds that it is empty, then the required dictionary is written
-afresh and named `global.ps', so that OzTeX will recognize its purpose.
-
-You can force a fresh copy of the dictionary by placing the command
- \dumpPSdict{global.ps} in the preamble section of any document.
-If your `global.ps' already has contents that you wish to continue to
-use, then copy it to somewhere safe and append its contents to the file
-created as above by Xy-pic.
-
-The dictionary is included in the package as `ps/xy34dict.pro'.
-
-LIMITATIONS: (when OzDVIPS or DVIPS is NOT being used)
-Not all of the PostScript effects that can be requested from the `line',
-`rotate' and `color' extension options are actually implementable by OzTeX.
-The limitation is due to the way in which OzTeX handles the \special
-commands, collecting them all at the beginning of the PostScript file that
-it creates, followed by the rules and characters from fonts.
-
-This means that the \special to initiate a special effect is followed
-soon after by the one necessary to revert to normal; this happens
-before any font characters are typeset. Correct sequencing is
-maintained so that diagrams constructed purely from Xy-pic objects
-such as lines, circles, curves and arrow-tips can have expanded widths
-and be coloured correctly. However rotations and scalings cannot work
-for other technical reasons. Any font characters in the diagram will
-not be expanded or coloured; this includes Xy-pic fonts.
-
-This situation is unfortunate, but nothing further can be done from
-within Xy-pic. To enjoy this aspect of working with Xy-pic, update
-to version 1.8 or later and use DVIPS or OzDVIPS.
-
-----------------------------------------------------------------------
- -4- BUGS & COMMENTS
-----------------------------------------------------------------------
-
-Bugs and questions concerning the OzTeX implementation of Xy-pic
-should be directed to
-
- Electronic mail (Internet): ross@mpce.mq.edu.au
-
- Paper mail: Ross Moore
- Mathematics Department
- Macquarie University
- North Ryde, Sydney
- AUSTRALIA 2109
-
- Fax: +61 2 9850 8114
-
-Generic bugs should be reported to Kristoffer Rose as described in the
-generic INSTALL file.
-
-----------------------------------------------------------------------
-
-This is the end of the `INSTALL.OzTeX' description; below is a section
-with the files discussed above. We hope you'll enjoy Xy-pic!
-
-----------------------------------------------------------------------
- -5- Config FILES.
-----------------------------------------------------------------------
-
-Below is the contents of each of the files discussed in point 3 of
-section -1- above. Lines with only --s (dashes) are used to delimit
-the files.
-
-----------------------------------------------------------------------
- :Configs:Default+Xypic
-----------------------------------------------------------------------
-% This is the default configuration file read by OzTeX 1.8.
-% Before making any changes, read the section on configuration files
-% in the OzTeX User Guide.
-%
-config files = "Big TeX" "Big TeX+Xypic" "Big Xy-TeX" |
- -- StyleWriter ImageWriter Linotronic -- |
- "A5 Portrait" "A4 Landscape" "US Letter" -- |
- "View at 144 dpi" "View CM using PS" -- |
- "Add CM/PS Fonts" "Add Lucida Fonts" "Add MathTime Fonts"
-format files = LaTeX Plain
-help files = "Questions and Answers" "Handy Hints" Problems "TeX Users Group" |
- "Related Software" -- "Changes to OzTeX 1.42" "Changes to OzTeX 1.5" |
- "Changes to OzTeX 1.6" "Changes to OzTeX 1.7" -- "Shareware Fee" Thanks
-printer res & mode = 300 laserwriter
-viewing res & mode = 300 laserwriter
-units = in (in/cm/mm/pc/pt/bp/px)
-paper width = 210mm (A4 width; use 8.5in for US Letter)
-paper height = 297mm (A4 height; use 11in for US Letter)
-horizontal offset = 0mm (shift pages right if +ve, left if -ve)
-vertical offset = 0mm (shift pages down if +ve, up if -ve)
-show statistics = false
-reverse page order = false (use true if pages are stacked face up)
-conserve VM = false (only for PostScript printing)
-manual feed = false (ditto)
-reserved = ignored
-%
-% Important folders and files:
-%
-Help folder = :Help-files:
-FMT folder = :TeX-formats:
-TeX input folder(s) = :TeX-inputs:*
-TFM folder(s) = :TeX-fonts:*
-PK folder(s) = :PK-files:
-PS folder(s) = :PS-files: :PS-files:Encodings:
-Text-to-PS prolog = :PS-files:TEXTtoPS.pro
-DVI-to-PS prolog = :PS-files:DVItoPS.pro
-VF folder(s) = :VF-files:
-global PS file = global.ps
-"Save OzTeX" output = Oz.text
-missing fonts file = :PK-files:missfont.log (for use by MakeTeXPK)
-pool file = :TeX-formats:TeX.pool (only used by INITEX)
-dummy TFM file = :TeX-fonts:CM:cmr10.tfm
-dummy screen font = Geneva
-%
-% Previewing colours (use "white" to make something invisible):
-%
-paper edges = blue
-\special markers = green
-missing fonts = red
-%
-% TeX parameters (the values in brackets show the possible ranges):
-%
-mem_max = 60000 (mem_top..100000000)
-font_max = 120 (1..256)
-font_mem_size = 30000 (8..100000000)
-max_strings = 5000 (1300..16382)
-string_vacancies = 20000 (0..pool_size-23500)
-pool_size = 60000 (string_vacancies+23500..100000000)
-buf_size = 1000 (120..32760)
-stack_size = 200 (1..1600)
-max_in_open = 6 (1..20)
-param_size = 60 (1..8190)
-nest_size = 40 (1..1000)
-save_size = 600 (1..4094)
-trie_size = 8000 (1..32760)
-trie_op_size = 500 (1..16382)
-%
-% If you change any of the next four parameters then you'll need
-% to run INITEX and rebuild all your format files.
-% Some people will probably want to increase the hash_size value,
-% so here are some suitable hash_prime values:
-% hash_size = 3000 4000 5000 6000 10000 20000 31000
-% hash_prime = 2551 3407 4253 5101 8501 16993 26347
-%
-mem_top = 60000 (mem_min+1100..mem_max)
-hash_size = 4000 (325..31000)
-hash_prime = 3407 (prime about 85% of hash_size)
-hyph_size = 307 (prime from 1..16382)
-%
-% Only change the next few parameters when carrying out TeX's TRIP test:
-%
-mem_min = 0 (0..mem_top-1100)
-error_line = 72 (45..32760)
-half_error_line = 42 (30..error_line-15)
-max_print_line = 79 (60..32760)
-%
-%
-% PostScript fonts (or more accurately, non-PK fonts):
-%
-== TFM Printer font Download Screen font Encoding Style
-%
-= ptmr0 Times-Roman Times Mac.enc
-= ptmri0 Times-Italic Times Mac.enc i
-= ptmb0 Times-Bold Times Mac.enc b
-= ptmbi0 Times-BoldItalic Times Mac.enc bi
-= ptmro0 Slanted-Times-Roman Times Mac.enc i
-= ptmbo0 Slanted-Times-Bold Times Mac.enc bi
-= pagk0 AvantGarde-Book "Avant Garde" Mac.enc
-= pagko0 AvantGarde-BookOblique "Avant Garde" Mac.enc i
-= pagd0 AvantGarde-Demi "Avant Garde" Mac.enc b
-= pagdo0 AvantGarde-DemiOblique "Avant Garde" Mac.enc bi
-= pbkl0 Bookman-Light Bookman Mac.enc
-= pbkli0 Bookman-LightItalic Bookman Mac.enc i
-= pbkd0 Bookman-Demi Bookman Mac.enc b
-= pbkdi0 Bookman-DemiItalic Bookman Mac.enc bi
-= pcrr0 Courier Courier Mac.enc
-= pcrro0 Courier-Oblique Courier Mac.enc i
-= pcrb0 Courier-Bold Courier Mac.enc b
-= pcrbo0 Courier-BoldOblique Courier Mac.enc bi
-= phvr0 Helvetica Helvetica Mac.enc
-= phvro0 Helvetica-Oblique Helvetica Mac.enc i
-= phvb0 Helvetica-Bold Helvetica Mac.enc b
-= phvbo0 Helvetica-BoldOblique Helvetica Mac.enc bi
-= pncr0 NewCenturySchlbk-Roman "New Century Schlbk" Mac.enc
-= pncri0 NewCenturySchlbk-Italic "New Century Schlbk" Mac.enc i
-= pncb0 NewCenturySchlbk-Bold "New Century Schlbk" Mac.enc b
-= pncbi0 NewCenturySchlbk-BoldItalic "New Century Schlbk" Mac.enc bi
-= pplr0 Palatino-Roman Palatino Mac.enc
-= pplri0 Palatino-Italic Palatino Mac.enc i
-= pplb0 Palatino-Bold Palatino Mac.enc b
-= pplbi0 Palatino-BoldItalic Palatino Mac.enc bi
-= pzcmi0 ZapfChancery-MediumItalic "Zapf Chancery" Mac.enc
-%
-% The next three TFMs do not require virtual fonts; note that their names
-% do not end with a zero:
-%
-= pzdr ZapfDingbats "Zapf Dingbats" nil
-= psyr Symbol Symbol nil
-= psyro Slanted-Symbol Symbol nil i
-%
-% The following lines use "<file" to download non-resident fonts:
-%
-= putr0 Utopia-Regular <putr.pfa Utopia Mac.enc
-= putri0 Utopia-Italic <putri.pfa Utopia Mac.enc i
-= putb0 Utopia-Bold <putb.pfa Utopia Mac.enc b
-= putbi0 Utopia-BoldItalic <putbi.pfa Utopia Mac.enc bi
-==
-
-OzTeX doesn't bother reading any stuff after the final "==", so you can
-put additional comments here without having to start each line with "%".
-
-----------------------------------------------------------------------
- :Configs:Big TeX+Xypic
-----------------------------------------------------------------------
-% This config file sets most TeX parameters to very large values.
-% OzTeX's preferred memory size will need to be at least 3100K.
-% If you don't have enough memory then reduce the values of mem_max
-% and mem_top. Each unit reduction saves 8 bytes, so if mem_max and
-% mem_top are reduced by 100,000 then the required memory size drops
-% to about 2300K.
-%
-% If you decide to change other parameters then you'll need to adjust
-% OzTeX's memory size according to the total number of bytes saved or
-% added. To determine this number:
-% - Use "Get Info" in the Finder's File menu to see OzTeX's current
-% memory size (probably 1400K unless you changed it).
-% - Start OzTeX, run INITEX and hit Cmd-Dot when you get the "**" prompt.
-% OzTeX shows the amount of memory allocated, so note down the number.
-% - Quit OzTeX and use "Get Info" to set OzTeX's memory size as high as
-% you can.
-% - Start OzTeX again and select "Big TeX" (containing your changes)
-% from the Config menu.
-% - Run INITEX and hit Cmd-Dot. The amount of memory allocated
-% should have changed; the difference should be rounded up to the
-% nearest multiple of 10K or more (depending on how paranoid you are)
-% and used to adjust OzTeX's ORIGINAL memory size.
-%
-% You'll need to run INITEX and build the big formats listed below
-% before you can use TeX with this configuration file.
-% The OzTeX User Guide describes how to build such format files.
-% If you want to change the given list of format files, make sure
-% the new names do not contain any spaces.
-%
-config files = ignored
-format files = Big-LaTeX Big-Plain
-help files = ?
-printer resolution = ?
-viewing resolution = ?
-units = ?
-paper width = ?
-paper height = ?
-horizontal offset = ?
-vertical offset = ?
-show statistics = ?
-reverse page order = ?
-conserve VM = ?
-manual feed = ?
-reserved = ?
-Help folder = ?
-FMT folder = ?
-TeX input folder(s) = ?
-TFM folder(s) = ?
-PK folder(s) = ?
-PS folder(s) = ?
-Text-to-PS prologue = ?
-DVI-to-PS prologue = ?
-VF folder(s) = ?
-global PS file = ?
-Save OzTeX output = ?
-reserved = ?
-pool file = ?
-dummy TFM file = ?
-dummy screen font = ?
-paper edges = ?
-\special markers = ?
-missing fonts = ?
-%
-% TeX parameters:
-%
-mem_max = 200000 (mem_top..100000000)
-font_max = 256 (1..256)
-font_mem_size = 60000 (8..100000000)
-max_strings = 10000 (1300..16382)
-string_vacancies = 30000 (0..pool_size-23500)
-pool_size = 160000 (string_vacancies+23500..100000000)
-buf_size = 3000 (120..32760)
-stack_size = 600 (1..1600)
-max_in_open = 20 (1..20)
-param_size = 200 (1..8190)
-nest_size = 150 (1..1000)
-save_size = 2000 (1..4094)
-trie_size = 16000 (1..32760)
-trie_op_size = 1000 (1..16382)
-mem_top = 200000 (mem_min+1100..mem_max)
-hash_size = 10000 (325..31000)
-hash_prime = 8501 (prime about 85% of hash_size)
-hyph_size = 2551 (prime from 1..16382)
-mem_min = 0 (0..mem_top-1100)
-error_line = 72 (45..32760)
-half_error_line = 42 (30..error_line-15)
-max_print_line = 79 (60..32760)
-%
-% Keep the current set of PostScript fonts:
-%
-=!
-
-----------------------------------------------------------------------
- :Configs:Big Xy-TeX
-----------------------------------------------------------------------
-% Sets most TeX parameters to very large values.
-% The OzTeX application memory size will need to be about 5500K.
-% (If you don't have enough memory then reduce the values of mem_max
-% and mem_top. Each unit reduction saves 8 bytes, so if mem_max and
-% mem_top are reduced by 100000 then the application memory required
-% drops to about 2300K.)
-%
-% You'll need to run INITEX and build the format files listed below
-% (with ".fmt" appended) before using TeX with this configuration file.
-% Note that format file names must not contain any spaces.
-%
-config files = ignored
-format files = Big-Xy-Plain Bigger-LaTeX Big-Xy-LaTeX
-help files = ?
-printer resolution = ?
-viewing resolution = ?
-units = ?
-paper width = ?
-paper height = ?
-horizontal offset = ?
-vertical offset = ?
-show statistics = ?
-reverse page order = ?
-conserve VM = ?
-manual feed = ?
-reserved = ?
-Help folder = ?
-FMT folder = ?
-TeX input folder(s) = ?
-TFM folder(s) = ?
-PK folder(s) = ?
-PS folder(s) = ?
-Text-to-PS prologue = ?
-DVI-to-PS prologue = ?
-VF folder(s) = ?
-global PS file = ?
-Save OzTeX output = ?
-reserved = ?
-pool file = ?
-dummy TFM file = ?
-dummy screen font = ?
-paper edges = ?
-\special markers = ?
-missing fonts = ?
-%
-% TeX parameters:
-%
-mem_max = 600000 (mem_top..100000000)
-font_max = 255 (1..255)
-font_mem_size = 60000 (8..100000000)
-max_strings = 10000 (1300..16382)
-string_vacancies = 30000 (0..pool_size-23500)
-pool_size = 160000 (string_vacancies+23500..100000000)
-buf_size = 3000 (120..32760)
-stack_size = 1600 (1..1600)
-max_in_open = 20 (1..20)
-param_size = 200 (1..8190)
-nest_size = 150 (1..1000)
-save_size = 2000 (1..4094)
-trie_size = 16000 (1..32760)
-trie_op_size = 1000 (1..16382)
-mem_top = 600000 (mem_min+1100..mem_max)
-hash_size = 10000 (325..31000)
-hash_prime = 8501 (prime about 85% of hash_size)
-hyph_size = 2551 (prime from 1..16382)
-mem_min = 0 (0..mem_top-1100)
-error_line = 72 (45..32760)
-half_error_line = 42 (30..error_line-15)
-max_print_line = 79 (60..32760)
-%
-% Keep current PostScript fonts:
-%
-=!
-
-----------------------------------------------------------------------
diff --git a/Master/texmf-dist/source/generic/xypic/INSTALL.Textures b/Master/texmf-dist/source/generic/xypic/INSTALL.Textures
deleted file mode 100644
index 132fad86189..00000000000
--- a/Master/texmf-dist/source/generic/xypic/INSTALL.Textures
+++ /dev/null
@@ -1,393 +0,0 @@
--*-text-*- $Id: INSTALL.Textures,v 3.4 1997/05/18 01:13:24 ross Exp $
-
- ===============================================================
- INSTALLING THE Xy-pic DIAGRAM TYPESETTING MACROS ON A MACINTOSH
- ===============================================================
-
-This file assumes that you have downloaded the `xy34mac.sea.hqx'
-file and have decoded this and have expanded and extracted all files
-and folders from the resulting compressed archive.
-
-It also assumes that you have the TeX application called Textures(tm),
-from Blue Sky Research, Portland, Oregon (version 1.6 or later).
-
-Finally it assumes that you have read the file INSTALL.
-
-
-The main difference between Textures(tm) and other TeX implementations
-is the way in which fonts are handled. Here we deal with Macintosh
-font suitcases containing bitmap versions of the special fonts that
-Xy-pic uses, as well as a suitcase containing the font metrics.
-
-For users of OzTeX a folder called `for OzTeX only' contains .pk fonts,
-.tfm files and some configuration files. The file `INSTALL.OzTeX'
-explains how to install these.
-
-For any other implementations of TeX on the Macintosh, there may be
-sufficient files here to install Xy-pic. If not then obtain the full
-Xy-pic distribution from one of the usual ftp sites:
- ftp.mpce.mq.edu.au in the /pub/maths/TeX directory;
- ftp.brics.dk in the /Staff/krisrose/TeX directory;
- CTAN in the tex-archive/macros/generic/diagrams/xypic directory;
- e.g. at ftp.shsu.edu, ftp.tex.ac.uk and ftp.dante.de.
-
-(If this is still insufficient, then the author would like to know
-what other resources are required and why.
-Contact him by email at the address given below.)
-
-
-From version 2.10, the source files are NOT included with the
-Macintosh Distribution, as doing this would add almost 1 MByte
-to its overall size. Obtain them from the sites listed above.
-
-
-I'll also assume that you use a 300 dots per inch laser printer
-(like the Apple laserwriter or HP laserjet).
-
-Contents:
-
- -0- Simple Installation, for experienced users
- -1- Copyleft
- -2- Updating from version 2.6 (and earlier) or 2.7--2.12, 3.0--3.2
- -3- Overview of files and where they should be installed
- -4- Manuals and Sources
- -5- Memory Requirements
- -6- Bugs & comments
-
-----------------------------------------------------------------------
- -0- SIMPLE INSTALLATION, for EXPERIENCED USERS
-----------------------------------------------------------------------
-
-If you have never used Xy-pic before and are experienced as a user
-of Textures(tm), then the following instructions should be sufficient
-to get Xy-pic installed.
-
-You should have extracted two folders called `for TeX inputs folder'
-and `for TeX fonts folder' from the Stuffit archive.
-
-Simply copy the contents of these folders to the places indicated by
-their names; namely the font suitcases go into the `TeX Fonts` folder,
-while the `xy*.tex` source code files go into the `TeX inputs` folder.
-
-
-If these instructions do not make sense to you, or you get any warning
-messages when you try to carry out these steps, then...
-
- STOP immediately!
-
-... read the rest of this file, to learn more about Xy-pic, what all
-the files contain and how they should be installed on your Macintosh.
-
-If you had no trouble with this installation, then... enjoy Xy-pic!
-Please do us the courtesy of reading the rest of this file anyway.
-In particular please respect the following Copyright message, making
-sure that any copies that you may distribute are complete, so that
-others can equally enjoy Xy-pic (... and so that we do not get irate
-messages about missing features).
-
-----------------------------------------------------------------------
- -1- COPYLEFT
-----------------------------------------------------------------------
-
-This distribution of the Xy-pic package is distributed with copyleft:
-
- Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@brics.dk>
- Copyright (c) 1994-1997 Ross Moore <ross@mpce.mq.edu.au>
-
- 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-What this means is that if you install Xy-pic then you should (1) make
-sure that the file COPYING is accessible to the users, and (2) be
-prepared to provide Xy-pic (including sources) to any of your users
-that request it (you may charge a fee for this if you are so inclined).
-
-----------------------------------------------------------------------
- -2- UPDATING FROM VERSION 2.6 (AND EARLIER) OR 2.7--2.12, 3.0--3.2
-----------------------------------------------------------------------
-
-Xy-pic version 2.7 was almost a complete rewrite of Xy-pic. The update
-to version 2.8 fixed numerous small bugs and added PostScript \special
-commands that could be used instead of the Xy-pic fonts.
-In version 2.9 the PostScript functionality was extended to include
-effects such as rotation and scaling of diagrams and text, variable
-line thickness and colour support. There were also improvements in many
-other aspects of the way Xy-pic works.
-
-A Macintosh version of 2.9 was never released, as some of the claimed
-effects did not actually work. These bugs were fixed for version 2.10.
-
-Version 2.11 included the `Graph Combinator' feature which provides
-a simplified interface for many common classes of diagrams.
-Also some minor bugs were fixed, both in code and documentation.
-
-Version 2.12 is necessary to accommodate a change to AMS-LaTeX which
-otherwise seriously conflicts with internal structure of Xy-pic.
-A new `Polygon' feature has been added and many subtle bugs fixed.
-Also much of the `curve' code has been improved, especially for
-`curved arrows'.
-
-Also, versions 2.12+ provide for a new font for arrow-tips, in the style
-of those arrowheads that appear in the Computer Modern fonts.
-Fonts xycmat10 and xycmbt10 have always been included in the font
-suitcases (since version 2.6) but not used due to errors in the metrics.
-This has now been rectified --- this means that the font metric file
-`Xy-pic metrics' MUST BE REPLACED with the latest version --- having
-modification date: 20 August 1994 --- but the fonts are unchanged.
-
-Xy-pic version 3.0 was released in July 1995. New features included
-one for typesetting `crossing strings', in particular elegant
-representations of `knots', and one for `webs' or `lattices' of objects
-regularly spaced. There was no separate Macintosh distribution, but the
-macros would work with the earlier versions.
-With version 3.0 an improved option-loading mechanism was established
-for alternate dvi-drivers allowing extra effects using \special commands.
-
-To use such features place one of the following declarations in the
-document preamble:
-
- \xyoption{textures} % with version 1.7 or later
- \xyoption{16textures} % with version 1.6 of Textures
-
-If LaTeX is NOT being used then it is also necessary to specify
-
- \xyReloadDrivers
-
-after all Xy-pic options have been specified.
-With LaTeX, this command occurs automatically at the \begin{document}.
-
-This version 3.4 contains just a few fixes found to necessary after
-the extensive changes of the 3.3 release. Some PostScript effects
-were broken, but now patterned tilings work again and frames are
-better than ever, even for non-PostScript effects. The old v2 macros
-which stopped working are now properly enabled.
-
-The version 3.3 was very stable for most purposes. A few bugs from
-previous versions were fixed and some new features were
-added. In particular `breaks' in connections, whether straight or
-curved, now work correctly. There is a greater variety of arrow-tips.
-Intersections between a curved connection and a straight one can
-now be located, or the point of closest approach can be located.
-
-The previous Version 3.2, followed closely after Version 3.1, fixing
-several bugs found there. Some diagrams in the documentation were
-found to not print correctly on some PostScript printers due to
-internal errors in the PostScript interpreter; these diagrams have
-been altered slightly to avoid that problem. (A future release of
-Xy-pic will attempt to sidestep such problems completely.)
-
-Indeed the Version 3.1 release fixes bugs in earlier releases,
-improves the range of available `frames' and offers a wider range
-of curved objects.
-The number of different dvi-drivers has been extended, though this
-has little bearing for Macintosh-users.
-
-
-
-If you already have version 2.7 (or later) installed then:
-
-* Copy the file: `Xy-pic metrics' , to be found in the folder called
- `for TeX fonts folder', into your `TeX Fonts' folder.
-
-+ The file `Xy-pic fonts' contains no new fonts, so need not be updated.
-
-+ With version 7.1+ of the Macintosh operating system, you can place
- font suitcases in the Fonts subfolder of the system folder.
- However the `Xy-pic metrics' suitcase MUST be in the `TeX Fonts' folder.
-
-+ Extra font sizes are available in a separate archive called `xymacxf.sit',
- see below for more details. These can be installed locally, if desired.
- Alternatively the extra sizes may be installed on a file-server;
- then place an `alias' (requires system 7.0+) to them within the `TeX Fonts'
- folder --- the server will mount when Textures is launched.
-
-
-* Copy the contents of the `for TeX inputs folder' into the
- obvious place, i.e. the `TeX Inputs' folder, allowing these files to
- replace the existing ones of the same name.
-
-+ With the system-7 operating system, you can place the files/folders
- elsewhere, and place aliases to them within the `TeX Inputs' folder.
-
-
-
-If you already have version 2.6 (or some earlier version) installed then
-note the following:
-
-* All the fonts have been redone AND renamed. Thus installing the new
- version will not break any typeset files you already have that use
- the old fonts. However if you intend to keep the old version on your
- system then you should rename the font and metrics suitcases to
- `Xy-pic fonts.old' and `Xy-pic metrics.old'.
-
-* The distribution contains new versions of the files `xypic.tex' and
- `xypic.sty' that load Xy-pic 2.12 in a special compatibility mode.
- Thus re-TeX'ing your source documents will create typeset versions
- using the new fonts. If you wish to keep the old `xypic.tex' and
- `xypic.sty' then you should rename them before installation.
-
-* There are a few points where the backwards compatibility is not
- perfect -- these are noted in the documentation.
-
-
-----------------------------------------------------------------------
- -3- OVERVIEW OF FILES AND WHERE THEY SHOULD BE INSTALLED
-----------------------------------------------------------------------
-
-The installation instructions of INSTALL apply except that
-
-MACRO FILES: are placed in the `for TeX inputs folder' and should
-normally be duplicated to the `TeX Inputs' folder (after having
-appropriately dealt with any previous version, as described above).
-
-PostScript HEADER FILES: It is not necessary to use this header file;
-furthermore the reference manual describes how it can be generated if
-needed from `xyps.tex'.
-
-Xy-pic FONTs and METRICs: the two font suitcase files, called `Xy-pic
-fonts' and `Xy-pic metrics', are found in the folder called `for TeX
-fonts folder'. Simply move these into the Textures(tm) `TeX Fonts'
-folder (after having appropriately dealt with any previous version, as
-described above).
-
-When you next launch the Textures(tm) application the following fonts will
-then be available for use in typesetting with the Xy-pic macros.
-
- xydash10 straight line segments at 128 different angles
- xyatip10 top half of an arrow head at 128 different angles
- xybtip10 bottom half of arrow head at 128 different angles
- xybsql10 small quarter turns, for hooks, turns and wavy lines
- xycirc10 eighth-turns at 16 different radii, 8 per radius
-
- xycmat10 Computer Modern Tips --- upper barbs
- xycmbt10 Computer Modern Tips --- lower barbs
- xyeuat10 Euler Tips --- upper barbs
- xyeubt10 Euler Tips --- lower barbs
-
-These fonts are each provided in four screen sizes: 100% 120% 200% 240%
-and in one size for laser-printing at 300dpi: 417%.
-
-If more sizes are required then either:
-
- a) get the file `xymacxf.sit.hqx' from ftp.mpce.mq.edu.au.
- These expand to give suitcases containing the above sizes plus extra
- laserwriter sizes, corresponding to magsteps 0.5, 1, 2, 3, 4, 5.
- (The xycirc10 is separate since these fonts occupy more space than
- any of the others --- 2.2 MByte!! )
-
-or...
-
- b) generate extra sizes using Metafont.
- The appropriate xy*.mf source files are included in the sub-directory
- `mfinputs'. This can be obtained from the ftp sites listed above.
-
- xydash10.mf kernel font sources
- xyatip10.mf
- xybsql10.mf
- xybtip10.mf
- xycirc10.mf
-
-With the xy*.tex and xy*.sty input files installed in the `TeX Inputs'
-folder, and the font suitcases installed in the `TeX Fonts' folder,
-you should be ready to use Xy-pic to typeset some diagrams.
-
-DOCUMENTATION: The dvi-files are provided primarily for non-Textures
-users. Using the `DVI-Tool' application, they can be converted into
-the usual form for documents typeset using Textures(tm). However this is
-not necessary as it has been done already: the `Xy-pic User's Guide'
-and `Xy-pic Reference Manual' described below.
-
-
-----------------------------------------------------------------------
- -4- MANUALS and SOURCES
-----------------------------------------------------------------------
-
-The `Xy-pic User's Guide' and `Xy-pic Reference Manual' are provided
-with this distribution. They are in the form of pre-typeset Textures(tm)
-documents. These files are Finder-locked and should NOT be re-typeset.
-(Indeed it should not be possible to typeset this file without first
-removing the safe-guards which have been put in place.)
-
-It is a good idea to test your installation of Xy-pic by typesetting
-portions from the manuals. Of course you will first have to obtain
-these sources from one of the ftp sites listed above, or elsewhere.
-
-Alternatively you can try to typeset the complete manuals, using LaTeX,
-from the documents `xyguide.man' and `xyrefer.man' in the directory `src`
-where they are located along with all the input and non-standard style
-files that they need.
-You will need to obtain ALL the files in this directory.
-(There is a file named `xy*.doc' for each macro file `xy*.tex'
-placed in the `TeX Inputs' folder.)
-For this to be successful your Textures application will need a
-memory partition of at least 4.5 MBytes.
-
-The normal sequence should be followed: LaTeX, BibTeX, LaTeX, LaTeX
-to get all the references and the bibliography typesetting correctly.
-These manuals have been checked to work correctly with LaTeX 2.09 and
-LaTeX2e.
-
-An alternative way to get the manuals is to download the files called
-`xyguide.ps.Z' and `xyrefer.ps.Z' from one of the ftp-sites.
-These files were created using the `xyps' PostScript option, so should
-produce a higher quality printed output on a PostScript printer of
-resolution 300dpi (due to use of bitmapped Computer Modern fonts).
-
-
-----------------------------------------------------------------------
- -5- MEMORY REQUIREMENTS
-----------------------------------------------------------------------
-
-Although many efforts have been made to make Xy-pic work quickly and
-efficiently, the nature of the diagrams for which it is designed are
-sometimes necessarily quite large and consume a significant amount of
-TeX's available memory. Do not be surprised if it takes a long time
-to typeset a diagram having several rows and columns of entries.
-
-Usually I work with a memory partition set at 4 MBytes, on a Mac IIci
-or Macintosh PowerBook. For instance, when typesetting the User's Guide,
-using LaTeX-2e and Xy-pic, nearly all of this 4 MBytes is required.
-The Reference Guide requires even more than this: allowing 8 MByte was
-a luxury that I could afford, but I suspect that 4.5 MByte would have
-been sufficient. Mind you, although shorter the Users' Guide actually
-takes significantly longer to typeset than does the Reference Manual.
-
-
-----------------------------------------------------------------------
- -6- BUGS & COMMENTS
-----------------------------------------------------------------------
-
-Comments or reports related to the Macintosh distribution should be
-sent to Ross Moore at
-
- Electronic mail (Internet): ross@mpce.mq.edu.au [preferred]
-
- Paper mail: Ross Moore
- Mathematics Department,
- Macquarie University
- North Ryde, NSW 2109
- AUSTRALIA
-
- Fax +61 2 9850 8114 attn: R.Moore
-
-----------------------------------------------------------------------
-
-This is the end of `INSTALL.Textures'. We hope you'll enjoy Xy-pic !
-
---
-Ross MOORE Internet: ross@mpce.mq.edu.au
-Mathematics Dept, Macquarie University, Nth Ryde, NSW 2109, AUSTRALIA
-phone: +61 2 9850 8955 fax: +61 2 9850 8114
-WWW: http://www-math.mpce.mq.edu.au/~ross/
---
diff --git a/Master/texmf-dist/source/generic/xypic/MAKE b/Master/texmf-dist/source/generic/xypic/MAKE
deleted file mode 100644
index 6a2e960a936..00000000000
--- a/Master/texmf-dist/source/generic/xypic/MAKE
+++ /dev/null
@@ -1,259 +0,0 @@
--*-text-*- $Id: MAKE,v 3.5 1997/05/28 22:40:26 krisrose Exp $
-
- ================================================
- MAKE: Xy-pic diagram typesetting package SOURCES
- ================================================
-
-Welcome to the source distribution of the Xy-pic macros for typesetting
-diagrams! Below you will find the following sections:
-
- -1- License information
- -2- Making the package and manual from sources
- -3- Bugs & comments
- -4- Distribution log
-
-Please see the file `README' for a summary of features `TRAILER' for how
-you can obtain the newest Xy-pic, and the various `INSTALL' files if you
-have already retrieved pregenerated macros and fonts.
-
-
-----------------------------------------------------------------------
- -1- LICENSE INFORMATION
-----------------------------------------------------------------------
-
-The Xy-pic package is licensed under `GNU CopyLeft':
-
- Xy-pic: Typesetting graphs and diagrams with TeX.
- Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@brics.dk>
-
- The Xy-pic macro 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 macro 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-(Some options may be copyright by other people but the conditions remain
-the same).
-
-The full text of the GNU General Public License is supplied with Xy-pic
-in the file `COPYING'.
-
-
-----------------------------------------------------------------------
- -2- MAKING THE PACKAGE AND MANUAL FROM SOURCES
-----------------------------------------------------------------------
-
-This section describes how to make the Xy-pic package from sources on
-a un*x system. Making Xy-pic requires use (and some knowledge) of
-several standard un*x utilities; furthermore the typesetting og the
-reference manual needs a **LARGE** TeX (see below), and full
-installation requires both the plain TeX and LaTeX2e formats as well
-as METAFONT (with the plain and cm bases.
-
-NOTE FOR VMS USERS: The procedure for making the package from sources
-described below does not work on VMS, of course. You can, however,
-run the enclosed `support/doc2tex.com' procedure file contributed by
-R.Gaertner to create the .tex files from the .doc files.
-
-NOTE FOR OTHER NON-UN*X USERS: If you do not have a un*x system then
-you are best adviced to get the `ready to run' package and install it
-as described in `INSTALL'.
-
-UN*X GENERATION AND INSTALLATION STEPS:
-
-1. First make sure that you have a separate directory `src' which
- contains all the files of the distribution (including this file).
-
- The file `MANIFEST' contains a list of the files.
-
-2. Next you should edit the `Configuration section' of `Makefile' to fit
- the configuration of your system by following the directions given
- there.
-
- When you have configured everything then just do
-
- make
-
- which should generate all the files needed to use the package.
-
-3. You can test the newly generated system by typesetting the User's
- Guide which you probably want for reference anyway: do
-
- make guide
-
- which should produce a file `xyguide.dvi' by running LaTeX several
- times and BibTeX once.
-
-4. If possible it is a good idea to try to preview the User's Guide (in
- whatever way you do on your system) at this point. This is slightly
- difficult because it uses the Xy-pic fonts which you haven't
- installed yet, so the previewer should be instructed to look in the
- current directory before looking in the system font directories. The
- following show how to do this for the most common previewer (on un*x
- systems with X windows) and might work for you:
-
- env XDVIFONTS=.: xdvi xyguide.dvi
-
-5. You can then install the package by ensuring that the install
- directories in `Makefile' are setup correctly and do
-
- make install
-
- This will replace exisiting `xypic.tex' and `xypic.sty' files with
- the new (compatibility mode) ones; the old ones will remain available
- with an `.orig' suffix (if you want to keep the old version then read
- section 2 of `INSTALL').
-
-6. You can typeset the entire manual with
-
- make manual
-
- to create both files `xyguide.dvi' and `xyrefer.dvi'; they can be
- installed in the TEXDOC directory with the command
-
- make install.manual
-
- NOTE: this requires a LARGE TeX system: the last typesetting (running
- LaTeX on `xyrefer.man' without any driver) uses more than 600000 TeX
- words, as noted above. Using Karl Berry's Web2C 7.0 this is
- achieved by including the lines
-
-extra_mem_top = 400000 % extra high memory for chars, tokens, etc.
-extra_mem_bot = 400000 % extra low memory for boxes, glue, breakpoints, etc.
-
- in the texmf.cnf file.
-
-7. You can build format files by the commands
-
- make xytex.fmt
- make xylatex.fmt
-
- (the latter requires the new standard LaTeX release aka LaTeX2e).
- These assume that the files `plain.tex' and `latex.ltx' are available
- in the TeX search path; also you have to install the format files in
- the appropriate place yourself.
-
-That is all.
-
-
-----------------------------------------------------------------------
- -3- BUGS & COMMENTS
-----------------------------------------------------------------------
-
-I will appreciate reports on any problems you may encounter and
-opinions you have on how the usefulness of Xy-pic can be improved.
-Please report using either
-
- Electronic mail (Internet): krisrose@brics.dk [preferred]
-
- Paper mail: Kristoffer H. Rose
- BRICS/Computer Science
- University of Aarhus
- Ny Munkegade, building 540
- DK-8000 Aarhus C
- DENMARK
-
- Fax: +45 89423255 att. K.Rose / Karen Møller
-
-You can always get the latest news of Xy-pic from computers connected
-to the Internet by opening the Xy-pic World Wide Web page:
-
- W3 <URL: http://www.brics.dk/~krisrose/Xy-pic.html>
-
-
-----------------------------------------------------------------------
- -4- DISTRIBUTION LOG
-----------------------------------------------------------------------
-
-The following versions have been distributed publicly:
-
-$Log: MAKE,v $
-Revision 3.5 1997/05/28 22:40:26 krisrose
-Fixed missing breaks bug.
-
-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!
-
-Renamed to MAKE for version 3 source description.
-
-Revision 2.12 1994/10/25 11:34:25 kris
-Interim release just before v3 [works with AMS-LaTeX 1.2]...
-
-Revision 2.11 1994/07/05 10:37:32 kris
-Third 3beta release [bug fixes].
-Experimental graph feature included (for ECCT-94 presentation).
-
-Revision 2.10 1994/06/15 12:59:44 kris
-Second 3beta release [bug fixes].
-
-Revision 2.8 1994/04/11 09:31:09 kris
-Second (bug fix) 3alpha release [corrected].
-
-Revision 2.7 1994/03/08 02:06:01 kris
-Release 3alpha.
-
-MAJOR REWRITE of distribution to prepare for Xy-pic 3 functionality.
-Curve extension code contributed by Ross Moore <ross@mpce.mq.edu.au>;
-support funding from MURG, ARC, and equipment from DEC.
-
-Revision 2.6 1992/06/24 01:23:34 kris
-Added `hook' tips using new font xyqc10.
-Added new POSitions: * and !.
-Added triple lines \Ssolid, \Ddashed, \Ddotted, and companion \Ttip.
-Reorganised manual.
-
-Revision 2.5 1992/02/24 03:30:54 kris
-Fixed bugs in \Direction calculation logic...
-Added (FACTOR) to \rotate to allow arbitrary rotation.
-` intermediate points now accept an optional /RADIUS argument.
-Added \Tip with wide tip.
-
-Revision 2.4 1992/01/22 02:15:10 kris
-Fixed bugs [with thanks]:
-\\ works with AMS-LaTeX: don't use \Let@ [Werner Struckmann/Darrel Hankerson]
-No spurious arrow heads with LaTeX: \pit now undefined [Werner Struckmann]
-\Solid works: sets \Density [Dave Bowen]
-Short diagonal lines work...major rewrite of \connectv@ [Eric Domenjoud]
-
-Revision 2.3 1992/01/10 21:38:27 kris
-Several bugs fixed [with thanks]:
-The \ddtoX and \uutoX arrows were interchanged [Nico Verwer].
-Some diagonal lines were wrong [Eric Domenjoud].
-AMS-LaTeX users had name clash problems [Werner Struckmann].
-The installation instructions in the Makefile were buggy [Leen Torenvliet].
-
-Revision 2.2 1992/01/09 04:05:40 kris
-Patched to fix problem with \text and support AMS-LaTeX.
-
-Revision 2.1 1992/01/02 14:54:07 kris
-Release version.
-
-Revision 1.40 1991/12/17 04:53:23 kris
-Version distributed as `final draft' on Usenet.
-
-----------------------------------------------------------------------
-
-This is the end of the source overview. I hope you will enjoy Xy-pic!
-
-----------------------------------------------------------------------
-
-Kristoffer Høgsbro ROSE <krisrose@brics.dk>
-BRICS <URL: http://www.brics.dk/~krisrose/>
-Department of Computer Science B3.26, +45 89423193 (fax +45 89423255)
-University of Aarhus, Ny Munkegade, build. 540, 8000 Århus C, DENMARK
-
-----------------------------------------------------------------------
diff --git a/Master/texmf-dist/source/generic/xypic/MANIFEST b/Master/texmf-dist/source/generic/xypic/MANIFEST
deleted file mode 100644
index 626876c6c12..00000000000
--- a/Master/texmf-dist/source/generic/xypic/MANIFEST
+++ /dev/null
@@ -1,111 +0,0 @@
--r--r--r-- 1 krisrose krisrose 2326 Feb 25 15:13 CATALOG.doc
--r--r--r-- 1 krisrose krisrose 17982 Feb 25 15:13 COPYING
--r--r--r-- 1 krisrose krisrose 14686 Feb 25 15:13 INSTALL
--r--r--r-- 1 krisrose krisrose 22529 Feb 25 15:13 INSTALL.OzTeX
--r--r--r-- 1 krisrose krisrose 17562 Feb 25 15:13 INSTALL.Textures
--r--r--r-- 1 krisrose krisrose 9402 Feb 25 15:13 MAKE
--rw-r--r-- 1 krisrose krisrose 53387 Feb 25 15:08 Makefile
--r--r--r-- 1 krisrose krisrose 4025 Feb 25 15:13 README
--r--r--r-- 1 krisrose krisrose 4176 Feb 25 15:13 TRAILER
--r--r--r-- 1 krisrose krisrose 169792 Feb 25 15:13 YandY_xy_fonts.zip
--r--r--r-- 1 krisrose krisrose 2806 Feb 25 15:13 doc2tex.com
--r-xr-xr-x 1 krisrose krisrose 5096 Feb 25 15:13 dvitogif89a
--r--r--r-- 1 krisrose krisrose 14392 Feb 25 15:13 import1.eps
--r-xr-xr-x 1 krisrose krisrose 4825 Feb 25 15:13 install-tds
--r--r--r-- 1 krisrose krisrose 26875 Feb 25 15:13 kris.eps
--r--r--r-- 1 krisrose krisrose 8893 Feb 25 15:13 latin1.sty
--r--r--r-- 1 krisrose krisrose 10562 Feb 25 15:10 movie.cls
--r--r--r-- 1 krisrose krisrose 4888 Feb 25 15:13 pnmrawtopcropwhite.c
--r--r--r-- 1 krisrose krisrose 21322 Feb 25 15:13 ross.eps
--r--r--r-- 1 krisrose krisrose 292869 Feb 25 15:09 xy.doc
--r--r--r-- 1 krisrose krisrose 3709 Feb 25 15:10 xy.sty
--r--r--r-- 1 krisrose krisrose 9574 Feb 25 15:10 xy16textures.doc
--r--r--r-- 1 krisrose krisrose 10061 Feb 25 15:10 xy17oztex.doc
--r--r--r-- 1 krisrose krisrose 62605 Feb 25 15:10 xy2cell.doc
--r--r--r-- 1 krisrose krisrose 3008 Feb 25 15:09 xyall.doc
--r--r--r-- 1 krisrose krisrose 56008 Feb 25 15:10 xyarc.doc
--r--r--r-- 1 krisrose krisrose 58648 Feb 25 15:10 xyarrow.doc
--r--r--r-- 1 krisrose krisrose 2434 Feb 25 15:10 xyatip.mf
--r--r--r-- 1 krisrose krisrose 1801 Feb 25 15:10 xyatip10.mf
--r--r--r-- 1 krisrose krisrose 2904 Feb 25 15:10 xybsql10.mf
--r--r--r-- 1 krisrose krisrose 2435 Feb 25 15:10 xybtip.mf
--r--r--r-- 1 krisrose krisrose 1793 Feb 25 15:10 xybtip10.mf
--r--r--r-- 1 krisrose krisrose 5358 Feb 25 15:10 xycirc10.mf
--r--r--r-- 1 krisrose krisrose 1682 Feb 25 15:10 xycm.mf
--r--r--r-- 1 krisrose krisrose 2304 Feb 25 15:10 xycmactex.doc
--r--r--r-- 1 krisrose krisrose 1850 Feb 25 15:10 xycmat10.mf
--r--r--r-- 1 krisrose krisrose 1477 Feb 25 15:10 xycmat11.mf
--r--r--r-- 1 krisrose krisrose 1477 Feb 25 15:10 xycmat12.mf
--r--r--r-- 1 krisrose krisrose 1850 Feb 25 15:10 xycmbt10.mf
--r--r--r-- 1 krisrose krisrose 1479 Feb 25 15:10 xycmbt11.mf
--r--r--r-- 1 krisrose krisrose 1479 Feb 25 15:10 xycmbt12.mf
--r--r--r-- 1 krisrose krisrose 2972 Feb 25 15:09 xycmtip.doc
--r--r--r-- 1 krisrose krisrose 12778 Feb 25 15:09 xycolor.doc
--r--r--r-- 1 krisrose krisrose 2836 Feb 25 15:09 xycrayon.doc
--r--r--r-- 1 krisrose krisrose 178076 Feb 25 15:09 xycurve.doc
--r--r--r-- 1 krisrose krisrose 2743 Feb 25 15:10 xyd.mf
--r--r--r-- 1 krisrose krisrose 2740 Feb 25 15:10 xyd2.mf
--r--r--r-- 1 krisrose krisrose 2768 Feb 25 15:10 xydash10.mf
--rw-r--r-- 1 krisrose krisrose 0 Feb 25 15:09 xydoc.back
--r--r--r-- 1 krisrose krisrose 21077 Feb 25 15:13 xydoc.bib
--r--r--r-- 1 krisrose krisrose 43418 Feb 25 15:13 xydoc.sty
--r--r--r-- 1 krisrose krisrose 1281 Feb 25 15:13 xydocps.doc
--r--r--r-- 1 krisrose krisrose 3133 Feb 25 15:09 xydummy.doc
--r--r--r-- 1 krisrose krisrose 3041 Feb 25 15:10 xydvidrv.doc
--r--r--r-- 1 krisrose krisrose 10394 Feb 25 15:10 xydvips.doc
--r--r--r-- 1 krisrose krisrose 11156 Feb 25 15:10 xydvitops.doc
--r--r--r-- 1 krisrose krisrose 8253 Feb 25 15:10 xyemtex.doc
--r--r--r-- 1 krisrose krisrose 1465 Feb 25 15:10 xyeuat10.mf
--r--r--r-- 1 krisrose krisrose 1470 Feb 25 15:10 xyeuat11.mf
--r--r--r-- 1 krisrose krisrose 1470 Feb 25 15:10 xyeuat12.mf
--r--r--r-- 1 krisrose krisrose 1470 Feb 25 15:10 xyeubt10.mf
--r--r--r-- 1 krisrose krisrose 1470 Feb 25 15:10 xyeubt11.mf
--r--r--r-- 1 krisrose krisrose 1470 Feb 25 15:10 xyeubt12.mf
--r--r--r-- 1 krisrose krisrose 1674 Feb 25 15:10 xyeuler.mf
--r--r--r-- 1 krisrose krisrose 42901 Feb 25 15:09 xyframe.doc
--r--r--r-- 1 krisrose krisrose 23221 Feb 25 15:10 xygraph.doc
--r--r--r-- 1 krisrose krisrose 65306 Feb 25 15:13 xyguide.man
--r--r--r-- 1 krisrose krisrose 9165 Feb 25 15:09 xyidioms.doc
--r--r--r-- 1 krisrose krisrose 9502 Feb 25 15:09 xyimport.doc
--r--r--r-- 1 krisrose krisrose 70065 Feb 25 15:10 xyknot.doc
--r--r--r-- 1 krisrose krisrose 2452 Feb 25 15:10 xylatex.ini
--r--r--r-- 1 krisrose krisrose 23785 Feb 25 15:09 xyline.doc
--r--r--r-- 1 krisrose krisrose 3752 Feb 25 15:12 xyline10.mf
--r--r--r-- 1 krisrose krisrose 3559 Feb 25 15:09 xymacpat.xyp
--r--r--r-- 1 krisrose krisrose 44438 Feb 25 15:09 xymatrix.doc
--r--r--r-- 1 krisrose krisrose 4622 Feb 25 15:12 xymisc10.mf
--r--r--r-- 1 krisrose krisrose 5035 Feb 25 15:10 xymovie.doc
--rw-r--r-- 1 krisrose krisrose 18839 Oct 12 17:38 xynecula.doc
--r--r--r-- 1 krisrose krisrose 10495 Feb 25 15:10 xyoztex.doc
--r--r--r-- 1 krisrose krisrose 2438 Feb 25 15:10 xypic.doc
--rw-r--r-- 1 krisrose krisrose 2563 Feb 25 15:06 xypic.map
--r--r--r-- 1 krisrose krisrose 857 Feb 25 15:10 xypic.sty
--r--r--r-- 1 krisrose krisrose 47974 Feb 25 15:10 xypoly.doc
--r--r--r-- 1 krisrose krisrose 6929 Feb 25 15:09 xyps-c.doc
--r--r--r-- 1 krisrose krisrose 6703 Feb 25 15:09 xyps-col.doc
--r--r--r-- 1 krisrose krisrose 8910 Feb 25 15:09 xyps-f.doc
--r--r--r-- 1 krisrose krisrose 6742 Feb 25 15:09 xyps-l.doc
--r--r--r-- 1 krisrose krisrose 9744 Feb 25 15:09 xyps-pro.doc
--r--r--r-- 1 krisrose krisrose 26581 Feb 25 15:09 xyps-ps.doc
--r--r--r-- 1 krisrose krisrose 7876 Feb 25 15:09 xyps-r.doc
--r--r--r-- 1 krisrose krisrose 4732 Feb 25 15:09 xyps-s.doc
--r--r--r-- 1 krisrose krisrose 6112 Feb 25 15:09 xyps-t.doc
--r--r--r-- 1 krisrose krisrose 43988 Feb 25 15:09 xyps.doc
--r--r--r-- 1 krisrose krisrose 13267 Feb 25 15:09 xypsdict.doc
--r--r--r-- 1 krisrose krisrose 6312 Feb 25 15:09 xypspatt.doc
--r--r--r-- 1 krisrose krisrose 2866 Feb 25 15:12 xyqc10.mf
--r--r--r-- 1 krisrose krisrose 3046 Feb 25 15:09 xyrecat.doc
--r--r--r-- 1 krisrose krisrose 15324 Feb 25 15:13 xyrefer.man
--r--r--r-- 1 krisrose krisrose 19231 Feb 25 15:09 xyrotate.doc
--rw-r--r-- 1 krisrose krisrose 20780 Oct 12 16:54 xysmart.doc
--r--r--r-- 1 krisrose krisrose 1668 Feb 25 15:10 xytech.mf
--r--r--r-- 1 krisrose krisrose 1220 Feb 25 15:10 xytest.mf
--r--r--r-- 1 krisrose krisrose 1838 Feb 25 15:10 xytex.ini
--r--r--r-- 1 krisrose krisrose 9614 Feb 25 15:10 xytextures.doc
--r--r--r-- 1 krisrose krisrose 17252 Feb 25 15:09 xytile.doc
--r--r--r-- 1 krisrose krisrose 7651 Feb 25 15:09 xytips.doc
--r--r--r-- 1 krisrose krisrose 10614 Feb 25 15:09 xytp-f.doc
--r--r--r-- 1 krisrose krisrose 17502 Feb 25 15:09 xytpic.doc
--r--r--r-- 1 krisrose krisrose 28845 Feb 25 15:10 xyv2.doc
--r--r--r-- 1 krisrose krisrose 11373 Feb 25 15:10 xyweb.doc
--r--r--r-- 1 krisrose krisrose 10940 Feb 25 15:10 xyxdvi.doc
diff --git a/Master/texmf-dist/source/generic/xypic/Makefile b/Master/texmf-dist/source/generic/xypic/Makefile
deleted file mode 100644
index b68afabda99..00000000000
--- a/Master/texmf-dist/source/generic/xypic/Makefile
+++ /dev/null
@@ -1,1528 +0,0 @@
-# $Id: Makefile,v 3.7 1999/02/16 15:12:50 krisrose Exp krisrose $
-#
-# Un*x Makefile for Xy-pic macros, fonts, documentation, and distribution.
-# Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@ens-lyon.fr>
-#
-# This file is part of the Xy-pic macro package.
-# Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@ens-lyon.fr>
-# See the README and INSTALL files for further information.
-#
-# 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, write to the Free Software Foundation, Inc.,
-# 675 Mass Ave, Cambridge, MA 02139, USA.
-
-VERSION = 3.7
-SHORTVERSION = 37
-
-# CONTENTS:
-#
-# Configuration section:
-# Directories.
-# Fonts.
-# Programs.
-#
-# Generic targets.
-# Macros.
-# PostScript headers.
-# Fonts.
-# Formats.
-# Manual: User's guide and reference manual.
-# Reference manual.
-# TeXnical documentation.
-# Distribution tree.
-# Ftp'able distribution.
-# WWW publicity.
-# Announcements.
-# Tags.
-# RCS stuff.
-# Development targets.
-#
-# Log.
-
-
-#### CONFIGURATION SECTION ##################################################
-
-# Please configure as instructed below for each of the DIRECTORIES, FONTS,
-# and PROGRAMS parts by editing the definitions to fit your system.
-
-#### DIRECTORIES.
-#
-# The following variables define the directories where the various parts of
-# Xy-pic should be installed.
-#
-# You should *EITHER* set TDSROOT to the root of a TDS-compliant directory
-# tree, usually named .../texmf (if you have a TDS [TeX Directory Structure]
-# compliant system then that is in fact all you need to do):
-#
-USR = /usr/local
-TDSROOT = $(USR)/share/texmf
-#
-# *OR* you should set each of the following variables right for you system
-# (do this if your setup does not match TDS exactly):
-#
-TEXINPUTDIR = $(TDSROOT)/tex/generic/xypic
-TEXFONTDIR = $(TDSROOT)/fonts/tfm/public/xypic
-TEXDOCDIR = $(TDSROOT)/doc/generic/xypic
-MFINPUTDIR = $(TDSROOT)/fonts/source/public/xypic
-TYPE1DIR = $(TDSROOT)/fonts/type1/public/xypic
-PFMDIR = $(TDSROOT)/fonts/pfm/public/xypic
-AFMDIR = $(TDSROOT)/fonts/afm/public/xypic
-PDFDIR = $(TDSROOT)/pdftex/xypic
-PSHEADERDIR = $(TDSROOT)/dvips/xypic
-#
-# FONTDIR is the directory where bitmap fonts are stored and is special
-# (If you do not plan to install bitmap fonts because they are automatically
-# generated and remember to set the MAGS variable below to `.' then you may
-# ignore this step.)
-#
-# Since the location of individual fonts sometimes depend on properties of
-# the font, you can insert
-#
-# $${dpi} for the font resolution in `Dots Per Inch' (NOT the
-# device resolution---that should be inserted directly)
-#
-# $${mode} for the METAFONT `mode' used to generate the font
-#
-# ---what these get set to depends on the next section.
-#
-# For example, if you set FONTDIR=/usr/lib/tex/pk$${dpi} and decide in the
-# next section to generate PK fonts at 300 dpi using a generic mode
-# (localfont) then you get files named /usr/lib/tex/pk300/xy*.300pk.
-#
-# If your installation still uses the (inefficient) principle of having all
-# PK files in the same directory as the TFM files then you should just set
-# FONTDIR=$(TEXFONTDIR).
-#
-FONTDIR = $(TDSROOT)/fonts/pk/$${mode}/public/xypic/dpi$${dpi}
-
-#### FONTS.
-#
-# The METAFONT program needs to know the `mode' of your printer in order to
-# be able to generate correct fonts for it. On most installations the mode
-# `localfont' is made synonymous with the mode required for the default
-# printer; in that case you can just pick the `MODES = localfont' line. If
-# this is not the case -- or you need fonts for several output devices---then
-# you will have to consult the local METAFONT guide/guru to inquire what
-# modes are used at your site. A good place to look for the modes used is in
-# the MakeTeXPK script found on some sites.
-#
-# Set MODES to the list of printers you wish to use:
-#
-MODES = localfont
-#MODES = cx ljfour
-#
-# You should also decide which TeX \magsteps you wish the font to be
-# generated at.
-#
-# The default is . (dot) which prevents installation of any bitmaps because
-# most modern installations generate them automatically.
-#
-MAGS = .
-#MAGS = 0
-#MAGS = 0 0.5 1 2
-
-#### PROGRAMS.
-#
-# You don't have to edit the following lines unless you have a non-standard
-# un*x system or un*x TeX installation...
-#
-SHELL = /bin/sh
-#
-TEX = TEXFONTS=.:$(TEXFONTDIR):$$TEXFONTS tex
-LATEX = TEXFONTS=.:$(TEXFONTDIR):$$TEXFONTS latex
-PDFLATEX = TEXFONTS=.:$(TEXFONTDIR):$$TEXFONTS pdflatex
-BIBTEX = BIBINPUTS=. bibtex
-MAKEINDEX = makeindex
-INITEX = TEXFONTS=.:$(TEXFONTDIR):$$TEXFONTS initex
-#
-# Set MF to a command that will run plain METAFONT on your system.
-#
-MF = MFINPUTS=.:$(MFINPUTDIR):$$MFINPUTS mf
-#
-# Set GFTOPK to the command "false" and PK to "gf" if you use GF rather than PK
-# bitmap font files. There is no support for PXL-files [are they still used?].
-# (Note: the default setting of MAGS above doesn't use bitmaps at all.)
-#
-GFTOPK = gftopk
-PK=pk
-#
-#GFTOPK = false
-#PK=gf
-#
-RM = rm -fr
-CP = cp -f
-MV = mv -f
-#
-# Set the INSTALLs to cp -f if your system does not have the install command.
-#
-INSTALL = install -c -m 444
-INSTALLW = install -c -m 644
-INSTALLX = install -c -m 555
-#INSTALL = cp -f
-#INSTALLW = cp -f
-#INSTALLX = cp -f
-#
-# Set MKDIR to a mkdir command that creates intermediate directories.
-#
-MKDIR = mkdir -p -m 755
-#
-# DOC2TEX <file>: output efficient .tex file from inefficient .doc <file> with
-# inlined documentation [my favourite hack :-]. Removes all DOCMODE lines,
-# leaving only things before the first and in DOCMODE(...DOCMODE) brackets;
-# also removes all blank lines and comment lines.
-#
-# If it breaks your sed you can just set DOC2TEX to cat although that will
-# make the installed macro files three times larger and the reading of them
-# somewhat slower...so in that case you are probably better of getting the
-# `run' distribution where this has already been done for you!
-#
-DOC2TEX = sed \
- -e '/^.DOCMODE(/b Yes' \
- -e '/^.DOCMODE/b No' \
- -e 'x' \
- -e '/%%DONTCOPY%%/b Ignore' \
- -e 'x' \
- -e 's/[ ][ ]*/ /g' \
- -e 's/{%.*$$/{%/' -e 's/}%.*$$/}%/' -e 's/ %.*$$//' \
- -e '/^ *%$$/d' -e '/^ *$$/d' -e '/^ *%[^%]/d' \
- -e 's/^%% \$$Id/%% $@ from $$Id/' \
- -e 's/REPLACEWITHVERSION/$(VERSION)/' \
- -e 's/REPLACEWITHSHORTVERSION/$(SHORTVERSION)/' \
- -e 'b End' \
- -e ': No' -e 's/.*/%%DONTCOPY%%/' -e 'x' -e 'd' \
- -e ': Yes' -e 's/.*//' -e 'x' -e 'd' \
- -e ': Ignore' -e 'x' -e 'd' \
- -e ': End'
-#
-# MF2TFM script: make .tfm file and all requested bitmap files from .mf
-# file by executing METAFONT with $${mode} and $${dpi} as described above.
-#
-# NOTE: for use as implicit make rule; do not modify unless you are sure you
-# need to!
-#
-MF2TFM = set -x; for mode in $(MODES); do \
- if [ "$(MAGS)" = "." ]; then \
- $(MF) "\\mode=$$mode; input $<";\
- $(RM) $*.*gf;\
- else \
- for mag in $(MAGS); do \
- $(MF) "\\mode=$$mode; mag=magstep($$mag); input $<"; done;\
- for f in $*.*gf; do if test -f "$$f"; then \
- if $(GFTOPK) ./$$f; then $(RM) $$f; fi; else :; fi; done;\
- fi; done
-
-#### END OF CONFIGURATION SECTION ###########################################
-
-
-# GENERIC TARGETS.
-#
-all: macros fonts obsoletefonts
-.PHONY: all install clean realclean sterile world
-#
-install: all install.macros install.trailer \
- install.fonts install.obsoletefonts \
- install.ps install.psfonts
-#
-clean:
- $(RM) *.aux *.toc *.lof *.blg *.log *.idx *.ilg *.fmt \
- *.ps *.ppm *.nops *.tmp *.ans *.xyc *.xyd \
- ./#* *~ core *.BAK *JNL xytest.*gf out
-#
-realclean: clean
- $(RM) MANIFEST VERSIONS CATALOG
- $(RM) xydoc.back; touch xydoc.back
- $(RM) *.bbl *.glo *.ind \
- *.tfm *.*gf *.*pk *.tex *.dvips *.dvi *.pdf *.last *.pro \
- *.gif *.epsf *.size *.pbm *.ppm \
- *.afm *.pfm *.pfb *.asc
- $(RM) xyguide-html index*
- $(RM) pnmrawtopcropwhite
-#
-sterile: realclean rcsclean
- $(RM) xydoc.back make.* TAGS
- $(MAKE) Makefile xydoc.sty xydoc.bib
-#
-world: realclean rcsclean
- time $(MAKE) all ftp ftpdoc www 2>&1 |tee make.world
-
-
-# MACROS.
-#
-TRAILERSOURCES = TRAILER COPYING CATALOG.doc \
- MAKE README Makefile $(INSTALLSTAR)
-
-INSTALLSTAR = INSTALL INSTALL.OzTeX INSTALL.Textures
-
-KERNELSOURCES = xy.doc xyidioms.doc xyrecat.doc
-
-OPTIONSOURCES = \
- xyframe.doc xycmtip.doc xytips.doc xycurve.doc \
- xyline.doc xyrotate.doc xycolor.doc xycrayon.doc xytile.doc \
- xyimport.doc xytpic.doc xytp-f.doc \
- xyps.doc xyps-ps.doc xyps-pro.doc xyps-col.doc xyps-c.doc xyps-f.doc \
- xyps-l.doc xyps-r.doc xyps-s.doc xyps-t.doc \
- xypsdict.doc xypspatt.doc xydocps.doc \
- xydummy.doc xyall.doc xymatrix.doc xyarrow.doc xygraph.doc \
- xy2cell.doc xypoly.doc xyarc.doc xyknot.doc xyweb.doc \
- xydvips.doc xytextures.doc xy16textures.doc xyoztex.doc xy17oztex.doc \
- xycmactex.doc xydvitops.doc xyemtex.doc xydvidrv.doc xyxdvi.doc \
- xymovie.doc xyv2.doc xypic.doc \
- xynecula.doc xysmart.doc
-
-FORMATSOURCES = xytex.ini xylatex.ini
-
-LATEXSTYLES = xy.sty xypic.sty movie.cls
-OPTIONDATA = xymacpat.xyp
-
-MACROSOURCES = $(TRAILERSOURCES) $(KERNELSOURCES) $(LATEXSTYLES) \
- $(OPTIONSOURCES) $(OPTIONDATA) $(FORMATSOURCES)
-
-TRAILERRUN = TRAILER COPYING CATALOG README \
- $(INSTALLSTAR) VERSIONS
-
-KERNELRUN = xy.tex xyidioms.tex xyrecat.tex
-
-OPTIONRUN = \
- xyframe.tex xycmtip.tex xytips.tex xycurve.tex \
- xyline.tex xyrotate.tex xycolor.tex xycrayon.tex xytile.tex \
- xyimport.tex xytpic.tex xytp-f.tex \
- xyps.tex xyps-ps.tex xyps-pro.tex xyps-col.tex xyps-c.tex xyps-f.tex \
- xyps-l.tex xyps-r.tex xyps-s.tex xyps-t.tex \
- xypsdict.tex xypspatt.tex $(OPTIONDATA) \
- xydummy.tex xyall.tex xymatrix.tex xyarrow.tex xygraph.tex \
- xy2cell.tex xypoly.tex xyarc.tex xyknot.tex xyweb.tex \
- xydvips.tex xytextures.tex xy16textures.tex xyoztex.tex xy17oztex.tex \
- xycmactex.tex xydvitops.tex xyemtex.tex xydvidrv.tex xyxdvi.tex \
- xymovie.tex xyv2.tex xypic.tex \
- xynecula.tex xysmart.tex
-
-MACRORUN = $(KERNELRUN) $(OPTIONRUN) $(FORMATSOURCES) \
- $(LATEXSTYLES)
-PSRUN = xy$(SHORTVERSION)dict.pro
-
-SUPPORT = install-tds doc2tex.com \
- dvitogif89a pnmrawtopcropwhite.c
-
-# Macros have .tex suffix and are generated from the .doc files.
-#
-.SUFFIXES: .tex .doc
-.doc.tex:; $(DOC2TEX) $< > $@
-#
-.PHONY: macros install.macros
-#
-macros: $(MACRORUN)
-install.macros: $(MACRORUN)
- -test -d $(TEXINPUTDIR) || $(MKDIR) $(TEXINPUTDIR)
- for f in $(MACRORUN); do $(INSTALL) $$f $(TEXINPUTDIR)/$$f; done
-#
-# Kernel dependencies:
-#
-xy.tex: xy.doc
-xyidioms.tex: xyidioms.doc
-xyrecat.tex: xyrecat.doc
-#
-# Extension option dependencies:
-#
-xyframe.tex: xyframe.doc
-xytips.tex: xytips.doc
-xycmtip.tex: xycmtip.doc
-xycurve.tex: xycurve.doc
-xyline.tex: xyline.doc
-xyrotate.tex: xyrotate.doc
-xycolor.tex: xycolor.doc
-xycrayon.tex: xycrayon.doc
-xyimport.tex: xyimport.doc
-xytile.tex: xytile.doc
-#
-xytpic.tex: xytpic.doc
-xytp-f.tex: xytp-f.doc
-#
-xyemtex.tex: xyemtex.doc
-#
-xyps.tex: xyps.doc
-xyps-ps.tex: xyps-ps.doc
-xyps-pro.tex: xyps-pro.doc
-xyps-col.tex: xyps-col.doc
-xyps-c.tex: xyps-c.doc
-xyps-f.tex: xyps-f.doc
-xyps-l.tex: xyps-l.doc
-xyps-r.tex: xyps-r.doc
-xyps-s.tex: xyps-s.doc
-xyps-t.tex: xyps-t.doc
-xypsdict.tex: xypsdict.doc
-xypspatt.tex: xypspatt.doc
-#
-# Feature option dependencies:
-#
-xydummy.tex: xydummy.doc
-xyall.tex: xyall.doc
-#
-xymatrix.tex: xymatrix.doc
-xyarrow.tex: xyarrow.doc
-xygraph.tex: xygraph.doc
-xy2cell.tex: xy2cell.doc
-xypoly.tex: xypoly.doc
-xyarc.tex: xyarc.doc
-xyknot.tex: xyknot.doc
-xyweb.tex: xyweb.doc
-#
-# Driver option dependencies:
-#
-xycmactex.tex: xycmactex.doc
-xydvips.tex: xydvips.doc
-xydvitops.tex: xydvitops.doc
-xydvidrv.tex: xydvidrv.doc
-xydocps.tex: xydocps.doc
-xytextures.tex: xytextures.doc
-xy16textures.tex: xy16textures.doc
-xyoztex.tex: xyoztex.doc
-xymovie.tex: xymovie.doc
-xy17oztex.tex: xy17oztex.doc
-xyxdvi.tex: xyxdvi.doc
-#
-# Backwards compatibility dependencies:
-#
-xyv2.tex: xyv2.doc
-xypic.tex: xypic.doc
-#
-# Required documentation files
-#
-install.trailer: $(TRAILERRUN)
- -test -d $(TEXDOCDIR) || $(MKDIR) $(TEXDOCDIR)
- for f in $(TRAILERRUN); do $(INSTALL) $$f $(TEXDOCDIR)/$$f; done
-
-
-# PostScript HEADERS:
-#
-.PHONY: install.ps
-install.ps: $(PSRUN)
- test -d $(PSHEADERDIR) || $(MKDIR) $(PSHEADERDIR)
- for f in $(PSRUN); do $(INSTALL) $$f $(PSHEADERDIR)/$$f; done
-
-
-# FONTS.
-#
-.PHONY: mfinputs texfonts $(PK)fonts fonts install.fonts \
- psfonts install.psfonts obsoletefonts install.obsoletefonts
-#
-METAFONTS = \
- xydash10.mf xybsql10.mf xyd2.mf \
- xyatip10.mf xybtip10.mf xytech.mf xyatip.mf xybtip.mf xyd.mf \
- xycirc10.mf \
- xycmat10.mf xycmbt10.mf xycmat11.mf xycmbt11.mf \
- xycmat12.mf xycmbt12.mf xycm.mf \
- xyeuat10.mf xyeubt10.mf xyeuat11.mf xyeubt11.mf \
- xyeuat12.mf xyeubt12.mf xyeuler.mf
-#
-TEXFONTRUN = \
- xydash10.tfm xybsql10.tfm xyatip10.tfm xybtip10.tfm xycirc10.tfm \
- xycmat10.tfm xycmbt10.tfm xycmat11.tfm xycmbt11.tfm \
- xycmat12.tfm xycmbt12.tfm \
- xyeuat10.tfm xyeubt10.tfm xyeuat11.tfm xyeubt11.tfm \
- xyeuat12.tfm xyeubt12.tfm
-#
-# Note: we only depend on the tfm-files, so you must remove them to
-# regenerate the fonts at all desired magnifications.
-#
-.SUFFIXES: .mf .tfm
-.mf.tfm:; $(MF2TFM)
-#
-mfinputs: $(METAFONTS)
-#
-texfonts $(PK)fonts fonts: $(METAFONTS) $(TEXFONTRUN)
-install.fonts: fonts
- if test -n "$(MFINPUTDIR)"; then \
- test -d $(MFINPUTDIR) || $(MKDIR) $(MFINPUTDIR); \
- for f in $(METAFONTS);do $(INSTALL) $$f $(MFINPUTDIR)/$$f;done; fi
- -test -d $(TEXFONTDIR) || $(MKDIR) $(TEXFONTDIR)
- for f in $(TEXFONTRUN); do $(INSTALL) $$f $(TEXFONTDIR)/$$f; done
- #
- [ "$(MAGS)" = "." ] || \
- for mode in $(MODES); do for mag in $(MAGS); do \
- $(RM) xytest.*gf xytest.*tfm;\
- $(MF) "\\mode=$$mode; mag=magstep($$mag); input xytest";\
- dpi="`expr xytest.*gf : 'xytest\.\([0-9]*\)gf'`";\
- for f in $(TEXFONTRUN); do \
- f="`expr $$f : '\([a-z0-9]*\)\.tfm'`.$${dpi}$(PK)" ;\
- if [ ! -f $$f ]; then echo "ERROR: FONT $$f NOT GENERATED";\
- else test -d "$(FONTDIR)" || $(MKDIR) $(FONTDIR);\
- $(INSTALL) $$f $(FONTDIR)/$$f; fi; done; done; done
-#
-xydash10.tfm: xydash10.mf xyd2.mf xytest.mf
-xybsql10.tfm: xybsql10.mf xyd.mf xytest.mf
-xycirc10.tfm: xycirc10.mf xytest.mf
-xyatip10.tfm: xyatip10.mf xytech.mf xyatip.mf xyd.mf xytest.mf
-xybtip10.tfm: xybtip10.mf xytech.mf xybtip.mf xyd.mf xytest.mf
-xycmat10.tfm: xycmat10.mf xyatip.mf xyd.mf xytest.mf
-xycmbt10.tfm: xycmbt10.mf xybtip.mf xyd.mf xytest.mf
-xyeuat10.tfm: xyeuat10.mf xyatip.mf xyd.mf xytest.mf
-xyeubt10.tfm: xyeubt10.mf xybtip.mf xyd.mf xytest.mf
-#
-# Obsolete fonts (from 2.6 and before).
-#
-OBSOLETEMETAFONTS = xyline10.mf xyqc10.mf xymisc10.mf
-OBSOLETETEXFONTRUN = xyline10.tfm xyqc10.tfm xymisc10.tfm
-#
-obsoletefonts: $(OBSOLETEMETAFONTS) $(OBSOLETETEXFONTRUN)
-#
-install.obsoletefonts: obsoletefonts
- if test -n "$(MFINPUTDIR)"; then \
- test -d $(MFINPUTDIR) || $(MKDIR) $(MFINPUTDIR); \
- for f in $(OBSOLETEMETAFONTS);do $(INSTALL) $$f $(MFINPUTDIR)/$$f;done; fi
- -test -d $(TEXFONTDIR) || $(MKDIR) $(TEXFONTDIR)
- for f in $(OBSOLETETEXFONTRUN); do \
- $(INSTALL) $$f $(TEXFONTDIR)/$$f; done
- #
- [ "$(MAGS)" = "." ] || \
- for mode in $(MODES); do for mag in $(MAGS); do \
- $(RM) xytest.*gf xytest.*tfm;\
- $(MF) "\\mode=$$mode; mag=magstep($$mag); input xytest";\
- dpi="`expr xytest.*gf : 'xytest\.\([0-9]*\)gf'`";\
- for f in $(OBSOLETETEXFONTRUN); do \
- f="`expr $$f : '\([a-z0-9]*\)\.tfm'`.$${dpi}$(PK)" ;\
- if [ ! -f $$f ]; then echo "ERROR: FONT $$f NOT GENERATED";\
- else test -d "$(FONTDIR)" || $(MKDIR) $(FONTDIR);\
- $(INSTALL) $$f $(FONTDIR)/$$f; fi; done; done; done
-#
-xyline10.tfm: xyline10.mf xytest.mf
-xyqc10.tfm: xyqc10.mf xytest.mf
-xymisc10.tfm: xymisc10.mf xytest.mf
-
-# PostScript fonts w/support files...from Y&Y.
-#
-TYPE1FONTS = \
- xyatip10.pfb xybsql10.pfb xybtip10.pfb xycirc10.pfb xydash10.pfb \
- xycmat10.pfb xycmbt10.pfb xyeuat10.pfb xyeubt10.pfb
-#
-PFMFONTS = \
- xyatip10.pfm xybsql10.pfm xybtip10.pfm xycirc10.pfm xydash10.pfm \
- xycmat10.pfm xycmbt10.pfm xyeuat10.pfm xyeubt10.pfm
-#
-AFMFONTS = \
- xyatip10.afm xybsql10.afm xybtip10.afm xycirc10.afm xydash10.afm \
- xycmat10.afm xycmbt10.afm xyeuat10.afm xyeubt10.afm
-#
-YANDYFONTS = $(TYPE1FONTS) $(AFMFONTS) $(PFMFONTS)
-#
-psfonts: $(YANDYFONTS)
-#
-$(YANDYFONTS): YandY_xy_fonts.zip
- unzip -aoL YandY_xy_fonts.zip
- touch $(YANDYFONTS)
-#
-install.psfonts: psfonts xypic.map
- test -d $(TYPE1DIR) || $(MKDIR) $(TYPE1DIR)
- test -d $(PFMDIR) || $(MKDIR) $(PFMDIR)
- test -d $(AFMDIR) || $(MKDIR) $(AFMDIR)
- test -d $(PDFDIR) || $(MKDIR) $(PDFDIR)
- for f in $(TYPE1FONTS); do $(INSTALL) $$f $(TYPE1DIR)/$$f; done
- for f in $(PFMFONTS); do $(INSTALL) $$f $(PFMDIR)/$$f; done
- for f in $(AFMFONTS); do $(INSTALL) $$f $(AFMDIR)/$$f; done
- test -d $(PSHEADERDIR) || $(MKDIR) $(PSHEADERDIR)
- $(INSTALL) xypic.map $(PSHEADERDIR)/xypic.map
-#
-# All together...
-#
-FONTSOURCES = $(METAFONTS) $(OBSOLETEMETAFONTS) xytest.mf \
- YandY_xy_fonts.zip xypic.map
-
-# FORMATS:
-#
-# Build formats...
-#
-.SUFFIXES: .ini .fmt
-.ini.fmt:; $(INITEX) $<
-#
-xytex.fmt: xytex.ini macros
-xylatex.fmt: xylatex.ini macros
-#xyamslatex.fmt: xyamslatex.ini macros
-#xydoc.fmt: xydoc.ini macros
-
-
-# MANUAL: USER'S GUIDE AND REFERENCE MANUAL.
-#
-# Note: the first generations use the DVIPS backend to run faster.
-#
-.PHONY: guide manual install.manual manual.ps
-#
-MANUALDATA = ross.eps kris.eps import1.eps
-MANUALSOURCES = \
- xyguide.man xydoc.sty latin1.sty xydoc.bib xydoc.back \
- xyrefer.man $(KERNELSOURCES) $(LATEXSTYLES) $(OPTIONSOURCES) \
- $(OPTIONDATA) $(MANUALDATA)
-#
-MANUALRUN = xyguide.dvi xyrefer.dvi
-#
-.SUFFIXES: .man .dvips .dvi .pdf
-.man.dvips:
- $(MAKE) macros fonts
- echo "\\xyoption{dvips}\xyoption{ps}" > xydoc.back
- $(LATEX) $<
- @-$(CP) $<.dvi $*.dvi ; $(CP) $<.aux $*.aux ; $(CP) $<.idx $*.idx
- $(BIBTEX) $*
- @-$(CP) $*.bbl $<.bbl
- [ -f $*.idx ] && $(MAKEINDEX) $* || :
- @-$(CP) $*.ind $<.ind
- echo "\\xyoption{dvips}\xyoption{ps}" > xydoc.back
- $(LATEX) $<
- @-$(CP) $<.dvi $*.dvi ; $(CP) $<.aux $*.aux ; $(CP) $<.idx $*.idx
- [ -f $*.idx ] && makeindex $* || :
- @-$(CP) $*.ind $<.ind
- echo "\\xyoption{dvips}\xyoption{ps}" > xydoc.back
- $(LATEX) $<
- @-$(CP) $<.dvi $*.dvi ; $(CP) $<.aux $*.aux ; $(CP) $<.idx $*.idx
- mv $*.dvi $*.dvips
- touch $*.dvips
-#
-.dvips.dvi:
- echo '' > xydoc.back
- $(LATEX) $*.man
- @-$(CP) $*.man.dvi $*.dvi ; $(CP) $*.man.aux $*.aux ; $(CP) $*.man.idx $*.idx
- touch $*.dvi
-#
-.dvips.pdf:
- echo '' > xydoc.back
- $(PDFLATEX) $*.man
- @-$(CP) $*.man.pdf $*.pdf ; $(CP) $*.man.aux $*.aux ; $(CP) $*.man.idx $*.idx
- touch $*.pdf
-#
-guide: xyguide.dvi
-#
-manual: $(MANUALRUN)
-install.manual: manual
- -test -d $(TEXDOCDIR) || $(MKDIR) $(TEXDOCDIR)
- for f in $(MANUALRUN); do $(INSTALL) $$f $(TEXDOCDIR)/$$f; done
-#
-xyguide.dvips: xyguide.man xydoc.sty latin1.sty xydoc.bib version.tex
-xyrefer.dvips: xyrefer.man xydoc.sty latin1.sty xydoc.bib version.tex \
- $(KERNELSOURCES) $(OPTIONSOURCES) $(MANUALDATA)
-xytest.dvips: xytest.man xydoc.sty latin1.sty xydoc.bib version.tex \
- $(KERNELSOURCES) $(OPTIONSOURCES) $(MANUALDATA)
-#
-xyguide.dvi: xyguide.dvips version.tex
-xyrefer.dvi: xyrefer.dvips version.tex
-xytest.dvi: xytest.dvips version.tex
-#
-xyguide.pdf: xyguide.dvips version.tex
-xyrefer.pdf: xyrefer.dvips version.tex
-xytest.pdf: xytest.dvips version.tex
-#
-version.tex: version.doc
- $(LATEX) version.doc
-#
-.SUFFIXES: .pro
-xy$(SHORTVERSION)dict.pro: xydocps.tex xypsdict.tex xypspatt.tex xyps-pro.tex
- -$(RM) xy$(SHORTVERSION)dict.pro
- $(TEX) xydocps.tex
-#
-# PostScript targets:
-#
-# DVIPS should be Tom Rokicki's dvips PostScript DVI driver as a filter.
-DVIPS = dvips -D600 -f
-#
-.SUFFIXES: .ps
-.dvips.ps:; $(DVIPS) < $< > $@
-#
-xyguide.ps: xyguide.dvips $(PSRUN)
-xyrefer.ps: xyrefer.dvips $(PSRUN)
-#
-manual.ps: xyguide.ps xyrefer.ps
-
-
-# TeXNICAL DOCUMENTATION.
-#
-.PHONY: TeXnical
-TeXnical: xysource.ps xysource.dvi xysource.pdf
-#
-TeXNICALSOURCES = xysource.man COPYING.patch xydoc.back
-#
-TeXNICALAUX = \
- TRAILER CATALOG README $(INSTALLSTAR) MAKE MANIFEST \
- COPYING.tex
-#
-xysource.dvips: xysource.man macros.tmp \
- macros fonts obsoletefonts $(ALLSOURCES) $(TeXNICALAUX)
-xysource.ps: xysource.dvips
-xysource.dvi: xysource.dvips
-xysource.pdf: xysource.dvips
-#
-xywork.dvips: xywork.man macros.tmp \
- macros fonts obsoletefonts $(ALLSOURCES) $(TeXNICALAUX)
-xywork.ps: xywork.dvips
-xywork.dvi: xywork.dvips
-xywork.pdf: xywork.dvips
-#
-COPYING.tex: COPYING COPYING.patch
- patch COPYING -o COPYING.tex < COPYING.patch
-#
-FONTCOPYING.tex: FONTCOPYING FONTCOPYING.patch
- patch FONTCOPYING -o FONTCOPYING.tex < FONTCOPYING.patch
-#
-# Macro index...requires GNU AWK (gawk) or (in a pinch) NAWK.
-#
-GAWK = gawk
-#
-macros.tmp: $(KERNELSOURCES) $(LATEXSTYLES) $(OPTIONSOURCES) $(METAFONTS)
- -$(RM) macros.tmp
- for f in $(KERNELSOURCES) $(LATEXSTYLES) $(OPTIONSOURCES) $(METAFONTS);\
- do $(GAWK) '\
- func err(s) { printf("%s,%d: %s\n",FILENAME,FNR,s) >>"/dev/stderr"};\
- func prt(s,i) { \
- printf("\\filelinedef{%s}{%d}\\index def{%s}\n",FILENAME,FNR,s) };\
- func prtdef(i) { t = substr($$0,i);\
- if (match(t,/[\\|][a-zA-Z@]*|\\.|[^\\|]|{([^{}]|\\{|\\})*}/) != 1) \
- err("Weird TeX token");\
- else prt(substr($$0,i,RLENGTH),i) };\
- func prtcsdef(i) { t = substr($$0,i);\
- if (match(t,/{([^{}]|\\{|\\})*}|{([^{}]|\\{|\\})*{([^{}]|\\{|\\})*}([^{}]|\\{|\\})*}/) != 1) \
- err("Weird TeX cs name token");\
- else prt(substr($$0,i+1,RLENGTH-2),i) };\
- /^\\let[^A-Za-z@]/ ||\
- /^\\def[^A-Za-z@]/ { prtdef(5); next };\
- /^\\gdef[^A-Za-z@]/ ||\
- /^\\edef[^A-Za-z@]/ ||\
- /^\\xdef[^A-Za-z@]/ { prtdef(6); next };\
- /^\\newif[^A-Za-z@]/ { prtdef(7); next };\
- /^\\xydef@[^A-Za-z@]/ ||\
- /^\\xylet@[^A-Za-z@]/ { prtdef(8); next };\
- /^\\xyfont@[^A-Za-z@]/ { prtdef(9); next };\
- /^\\global\\let[^A-Za-z@]/ { prtdef(12); next };\
- /^\\xywarnifdefined[^A-Za-z@]/ { prtdef(17); next };\
- /^\\ifx\\undefined[^A-Za-z@]/ { prtdef(15); next };\
- /^\\xynew@{[^{}]*}/ { prtdef(index($$0,"}")+1); next };\
- /^\\xydefcsname@{/ { prtcsdef(14); next };\
- /^\\xyletcsnamecsname@{/ { prtcsdef(20); next }' $$f;\
- done | sed -e 's,\\{,\\\\otherebgroup,' -e 's,\\},\\\\otheregroup,' \
- > macros.tmp
-
-###printf("\\macroentry{%s}{%s}{%d}\n",s,FILENAME,FNR) };\
-
-
-# Xy-pic the MOVIE :)
-#
-.SUFFIXES: .texmovie .gif
-#
-.texmovie.gif:
- $(LATEX) '\documentclass[dvips]{movie}' \
- '\usepackage[all]{xy}' \
- '\begin{document}' \
- '\input{$*.texmovie}' \
- '\end{document}'
- @-[ -f texput.dvi ] && $(MV) texput.dvi $*.dvi && $(MV) texput.size $*.size
- @-[ -f movie.cls.dvi ] && $(MV) movie.cls.dvi $*.dvi && $(MV) movie.cls.size $*.size
- @-[ -f movie.dvi ] && $(MV) movie.dvi $*.dvi && $(MV) movie.size $*.size
- ./dvitogif89a $*.dvi
-#
-.texmovie.dvi:
- $(LATEX) '\documentclass{article}' \
- '\usepackage[movie,all]{xy}' \
- '\begin{document}' \
- '\title{Storyboard for ``$*.''}' \
- '\maketitle' \
- '\input{$*.texmovie}' \
- '\end{document}'
-#
-dragon.gif: dragon.texmovie movie.cls dvitogif89a
-dragon.dvi: dragon.texmovie movie.cls
-#
-sesam.gif: sesam.texmovie movie.cls dvitogif89a
-sesam.dvi: sesam.texmovie movie.cls
-#
-gasket.dvi: gasket.texmovie movie.cls dvitogif89a
-gasket.gif: gasket.texmovie movie.cls
-
-
-# DISTRIBUTION TREE.
-#
-DISTDIR = $(FTPROOT)/xy-$(VERSION)
-DISTFONTDIR = $(DISTDIR)/$(PK)fonts/$${mode}$${dpi}
-#
-# Files:
-#
-SOURCES = $(MACROSOURCES) $(FONTSOURCES) $(MANUALSOURCES) $(SUPPORT)
-#
-# Commands:
-#
-# TAR <files> output tar archive with <files>
-# GZIP compression filter
-# GZ filename extension appropriate for compressed files
-#
-# TODO: change compression to proper GNU gzip once everyone supports it...
-#
-TAR = tar cvf -
-GZIP = gzip -v9
-GZ = .gz
-#
-# Targets:
-#
-.PHONY: dist dist-$(VERSION) distsrc distrun distdoc
-#
-dist dist-$(VERSION):
- cd $(DISTDIR);\
- find . -type f -print | sed 's,^./,,' | sort > MANIFEST
- $(INSTALL) README $(DISTDIR)/README
-#
-distsrc: $(DISTDIR)/src
-#
-distrun: $(DISTDIR)/CATALOG \
- $(DISTDIR)/TRAILER \
- $(DISTDIR)/README \
- $(DISTDIR)/INSTALL \
- $(DISTDIR)/VERSIONS \
- $(DISTDIR)/texinputs \
- $(DISTDIR)/texfonts \
- $(DISTDIR)/mfinputs \
- $(DISTDIR)/$(PK)fonts \
- $(DISTDIR)/doc/xyguide.dvi \
- $(DISTDIR)/doc/xyrefer.dvi \
- $(DISTDIR)/doc/xysource.dvi \
- $(DISTDIR)/ps \
- $(DISTDIR)/type1 \
- $(DISTDIR)/pfm \
- $(DISTDIR)/afm \
- $(DISTDIR)/COPYING \
- $(DISTDIR)/support
-#
-distdoc: $(DISTDIR)/doc/xyguide.dvips \
- $(DISTDIR)/doc/xyguide.ps \
- $(DISTDIR)/doc/xyguide.pdf \
- $(DISTDIR)/doc/xyrefer.dvips \
- $(DISTDIR)/doc/xyrefer.ps \
- $(DISTDIR)/doc/xyrefer.pdf \
- $(DISTDIR)/doc/xysource.dvips \
- $(DISTDIR)/doc/xysource.ps
-#### CURRENTLY BROKEN:
-# $(DISTDIR)/doc/xyguide-html \
-#
-# Explanation targets:
-#
-# CATALOG is automatically generated:
-#
-$(DISTDIR)/CATALOG: CATALOG $(DISTDIR)
- $(INSTALL) CATALOG $(DISTDIR)/CATALOG
-#
-CATALOG: CATALOG.doc
- $(LATEX) CATALOG.doc
- mv -f CATALOG.out CATALOG
-
-$(DISTDIR)/TRAILER: TRAILER $(DISTDIR)
- $(INSTALL) TRAILER $(DISTDIR)/TRAILER
-
-$(DISTDIR)/README: README $(DISTDIR)
- $(INSTALL) README $(DISTDIR)/README
-
-$(DISTDIR)/VERSIONS: VERSIONS $(DISTDIR)
- $(INSTALL) VERSIONS $(DISTDIR)/VERSIONS
-
-$(DISTDIR)/INSTALL: $(INSTALLSTAR) $(DISTDIR)
- for f in $(INSTALLSTAR); do if test -f "$$f"; then \
- $(INSTALL) $$f $(DISTDIR)/$$f; else :; fi; done
-
-$(DISTDIR)/COPYING: COPYING $(DISTDIR)
- $(INSTALL) COPYING $(DISTDIR)/COPYING
-
-$(DISTDIR)/FONTCOPYING: FONTCOPYING $(DISTDIR)
- $(INSTALL) FONTCOPYING $(DISTDIR)/FONTCOPYING
-#
-# Directory targets:
-#
-$(DISTDIR):
- -test -d $(DISTDIR) || $(MKDIR) $(DISTDIR)
-
-$(DISTDIR)/src: $(SOURCES) MANIFEST VERSIONS ChangeLog $(DISTDIR)
- -test -d $(DISTDIR)/src || $(MKDIR) $(DISTDIR)/src
- for f in $(SOURCES); do echo $$f; done | sort -fu |\
- while read u; do $(INSTALL) $$u $(DISTDIR)/src/$$u; done
- echo '' > xydoc.back
- $(INSTALLW) xydoc.back $(DISTDIR)/src
- $(INSTALLW) MANIFEST VERSIONS ChangeLog $(DISTDIR)/src
-
-xydoc.back:
- echo '' > xydoc.back
-#
-# The MANIFEST in src is just a list of the distributed source files.
-#
-MANIFEST: $(SOURCES)
- ls -alg `for f in $(SOURCES); do echo $$f; done | sort -fu` >MANIFEST
-#
-# The VERSIONS is just a list of the RCS versions.
-#
-VERSIONS: $(SOURCES)
- sed -n 's/^.*\([$$]Id[:][^$$]*[$$]\).*$$/\1/p' \
- `for f in $(SOURCES); do echo $$f; done | sort -u` >VERSIONS
-
-$(DISTDIR)/texinputs: macros $(DISTDIR)
- -test -d $(DISTDIR)/texinputs \
- || $(MKDIR) $(DISTDIR)/texinputs
- for f in $(MACRORUN) $(LATEXSTYLES); \
- do $(INSTALL) $$f $(DISTDIR)/texinputs/$$f; done
-
-$(DISTDIR)/texfonts: texfonts obsoletefonts $(DISTDIR)
- -test -d $(DISTDIR)/texfonts \
- || $(MKDIR) $(DISTDIR)/texfonts
- for f in $(TEXFONTRUN) $(OBSOLETETEXFONTRUN); \
- do $(INSTALL) $$f $(DISTDIR)/texfonts/$$f; done
-
-$(DISTDIR)/mfinputs: mfinputs $(OBSOLETEMETAFONTS) $(DISTDIR)
- -test -d $(DISTDIR)/mfinputs || $(MKDIR) $(DISTDIR)/mfinputs
- for f in $(METAFONTS) $(OBSOLETEMETAFONTS); \
- do $(INSTALL) $$f $(DISTDIR)/mfinputs/$$f; done
-
-$(DISTDIR)/$(PK)fonts: $(PK)fonts $(DISTDIR)
- -test -d $(DISTDIR)/$(PK)fonts || $(MKDIR) $(DISTDIR)/$(PK)fonts
- :
- for mode in $(MODES); do for mag in $(MAGS); do \
- $(RM) xytest.*gf xytest.*tfm;\
- $(MF) "\\mode=$$mode; mag=magstep($$mag); input xytest";\
- dpi="`expr xytest.*gf : 'xytest\.\([0-9]*\)gf'`";\
- for f in $(TEXFONTRUN); do \
- f="`expr $$f : '\([a-z0-9]*\)\.tfm'`.$${dpi}$(PK)" ;\
- if [ ! -f $$f ]; then echo "ERROR: FONT $$f NOT GENERATED";\
- else test -d "$(DISTFONTDIR)" || $(MKDIR) $(DISTFONTDIR);\
- $(INSTALL) $$f $(DISTFONTDIR)/$$f; fi; done; done; done
-
-$(DISTDIR)/ps: xy$(SHORTVERSION)dict.pro xypic.map $(DISTDIR)
- -test -d $(DISTDIR)/ps || $(MKDIR) $(DISTDIR)/ps
- $(INSTALL) xy$(SHORTVERSION)*dict.pro $(DISTDIR)/ps
- $(INSTALL) xypic.map $(DISTDIR)/ps
-
-$(DISTDIR)/type1: $(TYPE1FONTS) $(DISTDIR)
- -test -d $(DISTDIR)/type1 || $(MKDIR) $(DISTDIR)/type1
- for f in $(TYPE1FONTS) ; \
- do $(INSTALL) $$f $(DISTDIR)/type1/$$f; done
-
-$(DISTDIR)/pfm: $(PFMFONTS) $(DISTDIR)
- -test -d $(DISTDIR)/pfm || $(MKDIR) $(DISTDIR)/pfm
- for f in $(PFMFONTS) ; \
- do $(INSTALL) $$f $(DISTDIR)/pfm/$$f; done
-
-$(DISTDIR)/afm: $(AFMFONTS) $(DISTDIR)
- -test -d $(DISTDIR)/afm || $(MKDIR) $(DISTDIR)/afm
- for f in $(AFMFONTS) ; \
- do $(INSTALL) $$f $(DISTDIR)/afm/$$f; done
-
-$(DISTDIR)/pdftex: $(DISTDIR) xypic.map
- -test -d $(DISTDIR)/pdftex || $(MKDIR) $(DISTDIR)/pdftex
- $(INSTALL) xypic.map $(DISTDIR)/pdftex
-
-$(DISTDIR)/support: $(SUPPORT)
- -test -d $(DISTDIR)/support || $(MKDIR) $(DISTDIR)/support
- for f in $(SUPPORT) ; \
- do $(INSTALLX) $$f $(DISTDIR)/support/$$f; done
-
-# Document targets:
-#
-$(DISTDIR)/doc/xyguide.dvi: xyguide.dvi $(DISTDIR)/doc
- $(INSTALL) xyguide.dvi $(DISTDIR)/doc
-
-$(DISTDIR)/doc/xyguide.dvips: xyguide.dvips $(DISTDIR)/doc
- $(INSTALL) xyguide.dvips $(DISTDIR)/doc
-
-$(DISTDIR)/doc/xyguide.pdf: xyguide.pdf $(DISTDIR)/doc
- $(INSTALL) xyguide.pdf $(DISTDIR)/doc
-
-$(DISTDIR)/doc/xyguide.ps: xyguide.ps $(DISTDIR)/doc
- $(INSTALL) xyguide.ps $(DISTDIR)/doc
-
-$(DISTDIR)/doc/xyguide-html: xyguide-html $(DISTDIR)/doc
- tar cf - xyguide-html | (cd $(DISTDIR)/doc; tar xpvf -)
-
-$(DISTDIR)/doc/xyrefer.dvi: xyrefer.dvi $(DISTDIR)/doc
- $(INSTALL) xyrefer.dvi $(DISTDIR)/doc
-
-$(DISTDIR)/doc/xyrefer.dvips: xyrefer.dvips ross.eps kris.eps import1.eps \
- $(DISTDIR)/doc
- $(INSTALL) xyrefer.dvips ross.eps kris.eps import1.eps $(DISTDIR)/doc
-
-$(DISTDIR)/doc/xyrefer.pdf: xyrefer.pdf ross.eps kris.eps import1.eps \
- $(DISTDIR)/doc
- $(INSTALL) xyrefer.pdf $(DISTDIR)/doc
-
-$(DISTDIR)/doc/xyrefer.ps: xyrefer.ps $(DISTDIR)/doc
- $(INSTALL) xyrefer.ps $(DISTDIR)/doc
-
-$(DISTDIR)/doc/xyrefer-html: xyrefer-html $(DISTDIR)/doc
- $(INSTALL) xyrefer-html $(DISTDIR)/doc
-
-$(DISTDIR)/doc/xysource.dvi: xysource.dvi $(DISTDIR)/doc
- $(INSTALL) xysource.dvi $(DISTDIR)/doc
-
-$(DISTDIR)/doc/xysource.dvips: xysource.dvips ross.eps kris.eps import1.eps \
- $(DISTDIR)/doc
- $(INSTALL) xysource.dvips ross.eps kris.eps import1.eps $(DISTDIR)/doc
-
-$(DISTDIR)/doc/xysource.ps: xysource.ps $(DISTDIR)/doc
- $(INSTALL) xysource.ps $(DISTDIR)/doc
-
-$(DISTDIR)/doc:
- -test -d $(DISTDIR)/doc || $(MKDIR) $(DISTDIR)/doc
-
-
-# FTP'ABLE DISTRIBUTION.
-#
-FTPROOT = $$HOME/public_ftp/TeX
-FTPDOCDIR = $(FTPROOT)/xy-$(VERSION)/doc
-#
-.PHONY: ftp ftp-$(VERSION) ftpsrc ftprun ftpdoc ftpunpacked
-#
-ftp ftp-$(VERSION): ftpsrc ftprun ftpdoc ftpunpacked
- $(INSTALL) TRAILER $(FTPROOT)/xy$(SHORTVERSION).TRAILER
-#
-ftpsrc $(FTPROOT)/xy$(SHORTVERSION)src.tar$(GZ): distsrc
- cd $(DISTDIR)/.. ;\
- $(TAR) xy-$(VERSION)/src \
- | $(GZIP) > $(FTPROOT)/xy$(SHORTVERSION)src.tar$(GZ)
-#
-ftpdoc $(FTPROOT)/xy$(SHORTVERSION)doc.tar$(GZ): distrun distdoc
- cd $(DISTDIR)/.. ;\
- $(TAR) xy-$(VERSION)/doc \
- | $(GZIP) > $(FTPROOT)/xy$(SHORTVERSION)doc.tar$(GZ)
- $(GZIP) < xyguide.dvi > $(FTPROOT)/xyguide.dvi$(GZ)
- $(GZIP) < xyguide.dvips > $(FTPROOT)/xyguide.dvips$(GZ)
- $(GZIP) < xyguide.ps > $(FTPROOT)/xyguide.ps$(GZ)
- $(GZIP) < xyguide.pdf > $(FTPROOT)/xyguide.pdf$(GZ)
- $(GZIP) < xyrefer.dvi > $(FTPROOT)/xyrefer.dvi$(GZ)
- $(GZIP) < xyrefer.dvips > $(FTPROOT)/xyrefer.dvips$(GZ)
- $(GZIP) < xyrefer.ps > $(FTPROOT)/xyrefer.ps$(GZ)
- $(GZIP) < xyrefer.pdf > $(FTPROOT)/xyrefer.pdf$(GZ)
- $(GZIP) < xysource.dvi > $(FTPROOT)/xysource.dvi$(GZ)
- $(GZIP) < xysource.dvips > $(FTPROOT)/xysource.dvips$(GZ)
- $(GZIP) < xysource.ps > $(FTPROOT)/xysource.ps$(GZ)
-# $(TAR) xyguide-html | $(GZIP) > $(FTPROOT)/xyguide-html.tar.gz
-#
-ftprun $(FTPROOT)/xy$(SHORTVERSION)run.tar$(GZ): distrun
- cd $(DISTDIR)/.. ;\
- $(TAR) \
- `for f in $(TRAILERRUN); do echo xy-$(VERSION)/$$f; done` \
- xy-$(VERSION)/texinputs xy-$(VERSION)/mfinputs \
- xy-$(VERSION)/texfonts xy-$(VERSION)/$(PK)fonts \
- xy-$(VERSION)/ps xy-$(VERSION)/type1 xy-$(VERSION)/pfm \
- xy-$(VERSION)/afm \
- xy-$(VERSION)/support \
- | $(GZIP) > $(FTPROOT)/xy$(SHORTVERSION)run.tar$(GZ)
-#
-ftpunpacked: dist
- test $(DISTDIR) = $(FTPROOT)/xy-$(VERSION) || \
- (cd $(DISTDIR)/.. ; tar cf - xy-$(VERSION) |(cd $(FTPROOT); tar xvf -))
- cd $(FTPROOT); rm -f xy; ln -fs xy-$(VERSION) xy
-
-
-# WWW/HTML DOCUMENTATION & HYPE.
-#
-WWWDIR = $$HOME/public_html
-#
-WWWSOURCES = Xy-pic.html Xy.doc Xy.xy \
- man2html.gawk man2html-post.gawk .latex2html-init
-#
-.PHONY: guide.html www install.www
-#
-LATEX2HTML = latex2html
-#
-LATEX2HTMLICONDIR = $$HOME/src/latex2html-96.1/icons
-LATEX2HTMLICONDIR2 = $$HOME/CV
-#
-man2html = $(GAWK) -f man2html.gawk
-man2htmlpost = $(GAWK) -f ../man2html-post.gawk
-#
-guide.html: xyguide-html
-#
-xyguide-html.tex: xyguide.dvips xyguide.man $(WWWSOURCES)
- $(man2html) <xyguide.aux >xyguide-html.aux
- $(man2html) <xyguide.bbl >xyguide-html.bbl
- @-$(CP) xyguide.man.ans xyguide.ans
- @-$(CP) xyguide.man.idx xyguide.idx
- @-$(CP) xyguide.man.ind xyguide.ind
- $(man2html) <xyguide.ans >xyguide-html.ans
- $(man2html) <xyguide.idx >xyguide-html.idx
- $(man2html) <xyguide.ind | sed 's/"/|/g' >xyguide-html.ind
- $(man2html) <xyguide.man >xyguide-html.tex
-#
-xyguide-html-act: xyguide-html.tex version.tex
- echo "\\xyoption{dvips}\xyoption{ps}" > xydoc.back
- $(LATEX2HTML) xyguide-html.tex
-#
-xyguide-html: xyguide-html.tex xyguide-html-act
- (cd xyguide-html; \
- for f in *.html; do mv $$f $$f~; \
- $(man2htmlpost) <$$f~ \
- | sed -e 's/``/"/g' -e "s/''/\"/g" -e 's/ [>] />/g' >$$f; done; \
- (cd $$HOME/W3; tar cf - COPYING) | tar xpf - )
- :
- cp "$(LATEX2HTMLICONDIR2)/18pt.html" xyguide-html
- cat xyguide-html/*.html \
- | tr '"' "\n" \
- | sed -n 's;[.][/]\([a-z_]*[.]gif\);\1;p' | sort -u \
- | while read f ;\
- do if [ -f "$(LATEX2HTMLICONDIR2)/$$f" ]; \
- then echo "[$$f]"; cp $(LATEX2HTMLICONDIR2)/$$f xyguide-html ; \
- elif [ -f "$(LATEX2HTMLICONDIR)/$$f" ]; \
- then echo "[$$f]"; cp $(LATEX2HTMLICONDIR)/$$f xyguide-html ; \
- fi ; done
- :
- (cd xyguide-html; \
- $(RM) .I* .O* *.ppm *.xyc *.ans *.aux *.idx *.bbl *.log *.tex *~)
-#
-Xy.tex: Xy.doc
-Xy.dvi: Xy.tex Xy.xy macros; $(LATEX) Xy
-Xy.ps: Xy.dvi; $(DVIPS) Xy.dvi -oXy.ps
-#
-PNMCROP = ./pnmrawtopcropwhite | pnmcrop
-PGMTOGIF = pgmtoppm rgbi:1/1/1 | ppmtogif -interlace -transparent rgbi:1/1/1
-#
-Xy.gif: Xy.ps pnmrawtopcropwhite
- echo '' | \
- gs -sDEVICE=pbmraw -r300 \
- -sOutputFile='|$(PNMCROP) >Xy.pbm' \
- -q - Xy.ps
- cat Xy.pbm | $(PGMTOGIF) >Xy.gif
-#
-pnmrawtopcropwhite: pnmrawtopcropwhite.c
-#
-www: Xy-pic.html Xy.gif
-####BROKEN##### guide.html
-#
-install.www: www
- $(INSTALL) Xy-pic.html Xy.gif $(WWWDIR)
-# $(RM) $(WWWDIR)/xyguide-html
-# $(MKDIR) $(WWWDIR)/xyguide-html
-# tar -cf - xyguide-html | (cd $(WWWDIR); tar xvpf -)
-
-
-# ANNOUNCEMENTS.
-#
-MAILSOURCES = TRAILER Users mail.Users
-#
-.PHONY: announce
-announce: $(MAILSOURCES)
- @./mail.Users
-
-
-# TAGS for Emacs.
-#
-TAGS: $(SOURCES)
- -$(RM) TAGS
- for f in `for ff in $(SOURCES); do echo $$ff; done |sort -u`;\
- do\
- $(GAWK) '\
- func err(s) { printf("%s,%d: %s\n",FILENAME,FNR,s) >>"/dev/stderr"};\
- func prt(s,n) { printf("%s\177%d,%d\n",s,FNR,c+n) };\
- func prtdef(i) { t = substr($$0,i);\
- if (match(t,/[\\|][a-zA-Z@]*|\\.|[^\\|]|{([^{}]|\\{|\\})*}/) != 1) \
- err("Weird TeX token");\
- else prt(substr($$0,1,i+RLENGTH),i) };\
- func prtcsdef(i) { t = substr($$0,i);\
- if (match(t,/{([^{}]|\\{|\\})*}|{([^{}]|\\{|\\})*{([^{}]|\\{|\\})*}([^{}]|\\{|\\})*}/) != 1) \
- err("Weird TeX cs name token");\
- else prt(substr($$0,1,i+RLENGTH),i) };\
- func fin() { c += length($$0) + 1; next };\
- BEGIN { c = 0 };\
- /^\\let[^A-Za-z@]/ ||\
- /^\\def[^A-Za-z@]/ { prtdef(5); fin() };\
- /^\\gdef[^A-Za-z@]/ ||\
- /^\\edef[^A-Za-z@]/ ||\
- /^\\xdef[^A-Za-z@]/ { prtdef(6); fin() };\
- /^\\newif[^A-Za-z@]/ { prtdef(7); fin() };\
- /^\\xydef@[^A-Za-z@]/ ||\
- /^\\xylet@[^A-Za-z@]/ { prtdef(8); fin() };\
- /^\\xyfont@[^A-Za-z@]/ { prtdef(9); fin() };\
- /^\\global\\let[^A-Za-z@]/ { prtdef(12); fin() };\
- /^\\xywarnifdefined[^A-Za-z@]/ { prtdef(17); fin() };\
- /^\\ifx\\undefined[^A-Za-z@]/ { prtdef(15); fin() };\
- /^\\xynew@{[^{}]*}/ { prtdef(index($$0,"}")+1); fin() };\
- /^\\xydefcsname@{/ { prtcsdef(14); fin() };\
- /^\\xyletcsnamecsname@{/ { prtcsdef(20); fin() };\
- /\?\?\=\[/ { s = $$0; i = 0;\
- while (first = index(s, "\?\?=[")) {\
- s = substr(s,first+4); i += first+4;\
- if (j = index(s, "]")) prt(substr($$0,1,i+j-1),i);\
- else printf("Unmatched []s") }; fin() };\
- /^@[A-Za-z]*{/ { prt($$0,index($$0,"{")+1); fin() };\
- { fin() }' $$f >TAGS.tmp ;\
- wc -c TAGS.tmp|$(GAWK) '{printf "\f\n%s,%s\n","'"$$f"'",$$1}'>>TAGS;\
- cat TAGS.tmp >>TAGS ;\
- done
- $(RM) TAGS.tmp
-
-
-# RCS STUFF:
-#
-.PHONY: ci ci-$(VERSION) cici rcscheck \
- rcslist rcslockedlist rcsunlockedlist \
- rcscleanlist rcsuncleanlist rcsclean rcsdep
-#
-ALLSOURCES = $(TRAILERSOURCES) $(SOURCES) $(MANUALSOURCES) $(TeXNICALSOURCES) \
- $(WWWSOURCES) $(MAILSOURCES) $(OBSOLETEMETAFONTS) $(TYPE1FONTS) \
- $(SUPPORT) xypic.map
-#
-ROSSSOURCES = INSTALL.OzTeX INSTALL.Textures import1.eps ross.eps \
- xy16textures.doc xy17oztex.doc xy2cell.doc xyarc.doc \
- xycolor.doc xycrayon.doc xycurve.doc \
- xydvips.doc xyimport.doc xyknot.doc xyline.doc \
- xymacpat.xyp xyoztex.doc xypoly.doc xyps-c.doc xyps-col.doc \
- xyps-f.doc xyps-l.doc xyps-pro.doc xyps-ps.doc xyps-r.doc \
- xyps-s.doc xyps-t.doc xyps.doc xypsdict.doc xypspatt.doc xyrotate.doc \
- xytextures.doc xytile.doc xytpic.doc xyemtex.doc xyweb.doc \
- xydvidrv.doc xyxdvi.doc xydvitops.doc xytp-f.doc xycmactex.doc
-#
-YANDYSOURCES = \
- xyatip10.pfa xybsql10.pfa xybtip10.pfa xycirc10.pfa xycmat10.pfa \
- xycmbt10.pfa xydash10.pfa xyeuat10.pfa xyeubt10.pfa \
-#
-ci ci-$(VERSION): $(ALLSOURCES) cici Makefile
-cici:
- -rcs -l `for f in $(ALLSOURCES); do echo $$f; done | sort -u`
- -ci -u$(VERSION) `$(MAKE) rcslockedlist`
-#
-rcscheck: $(ALLSOURCES)
- @locked="`$(MAKE) rcslockedlist`"; \
- unlocked="`$(MAKE) rcsunlockedlist`"; \
- echo "Missing write permission on locked files:"; \
- for f in $$locked; do [ -w "$$f" ] || echo ' '$$f; done; \
- echo "Wrong write permission on unlocked files:"; \
- for f in $$unlocked; do [ -w "$$f" ] && echo ' '$$f; done; \
- echo "Wrong/missing locks on ross's files:"; \
- for f in $(ROSSSOURCES); \
- do lock=; \
- for ff in $$locked; \
- do if [ "$$f" = "$$ff" ]; then lock=' ross'; fi; done; \
- fgrep -s " ross Exp$$lock "'$$' $$f \
- ||(/bin/echo ' '$$f': \c' && grep 'Id[:].* Exp ' $$f || echo '?'); \
- done; \
- echo "Wrong/missing locks on krisrose's files:"; \
- for f in `$(MAKE) rcslist`; \
- do for ff in $(ROSSSOURCES); \
- do if [ "$$f" = "$$ff" ]; then continue 2; fi; done; \
- lock=; \
- for ff in $$locked; \
- do if [ "$$f" = "$$ff" ]; then lock=' krisrose'; fi; done; \
- fgrep -s " krisrose Exp$$lock "'$$' $$f \
- || (/bin/echo ' '$$f' \c' && grep 'Id[:].* Exp ' $$f || echo ''); \
- done
-#
-rcslist:
- -@rlog -R `for f in $(ALLSOURCES); do echo $$f; done | sort -u` \
- 2>/dev/null | sed 's;RCS/\(.*\),v;\1;'
-#
-rcslockedlist:
- -@rlog -R -L `for f in $(ALLSOURCES); do echo $$f; done | sort -u` \
- 2>/dev/null | sed 's;RCS/\(.*\),v;\1;'
-#
-rcsunlockedlist:
- -@locked="`$(MAKE) rcslockedlist`"; \
- $(MAKE) rcslist | while read f; \
- do echo=echo; for ff in $$locked; \
- do if [ "$$f" = "$$ff" ]; then echo=:; fi; done; \
- $$echo $$f; done
-#
-rcscleanlist:
- -@$(MAKE) rcslist \
- | while read f; do if test -w "$$f" -o "$$f" = Makefile; then :; \
- else echo $$f; fi; done
-#
-rcsuncleanlist:
- -@$(MAKE) rcslist \
- | while read f; do if test -w "$$f" -o "$$f" = Makefile; \
- then echo $$f; fi; done
-#
-rcsclean:
- -@$(MAKE) rcscleanlist | while read f; do $(RM) $$f; done
-#
-# Dependencies...
-#
-rcsdep:
- $(MAKE) rcslist | while read f; do \
- echo "$$f: RCS/$$f,v; test -d RCS && co $$f || :"; done
-
-.late2html-init:; test -d RCS -a -f RCS/.late2html-init,v && co .late2html-init || :
-CATALOG.doc:; test -d RCS -a -f RCS/CATALOG.doc,v && co CATALOG.doc || :
-COPYING.patch:; test -d RCS -a -f RCS/COPYING.patch,v && co COPYING.patch || :
-COPYING:; test -d RCS -a -f RCS/COPYING,v && co COPYING || :
-FONTCOPYING.patch:; test -d RCS -a -f RCS/FONTCOPYING.patch,v && co FONTCOPYING.patch || :
-FONTCOPYING:; test -d RCS -a -f RCS/FONTCOPYING,v && co FONTCOPYING || :
-INSTALL.OzTeX:; test -d RCS -a -f RCS/INSTALL.OzTeX,v && co INSTALL.OzTeX || :
-INSTALL.Textures:; test -d RCS -a -f RCS/INSTALL.Textures,v && co INSTALL.Textures || :
-INSTALL:; test -d RCS -a -f RCS/INSTALL,v && co INSTALL || :
-MAKE:; test -d RCS -a -f RCS/MAKE,v && co MAKE || :
-Makefile:; test -d RCS -a -f RCS/Makefile,v && co Makefile || :
-README:; test -d RCS -a -f RCS/README,v && co README || :
-TRAILER:; test -d RCS -a -f RCS/TRAILER,v && co TRAILER || :
-Users:; test -d RCS -a -f RCS/Users,v && co Users || :
-Xy-pic.blurb:; test -d RCS -a -f RCS/Xy-pic.blurb,v && co Xy-pic.blurb || :
-Xy-pic.html:; test -d RCS -a -f RCS/Xy-pic.html,v && co Xy-pic.html || :
-Xy-pic.xbm:; test -d RCS -a -f RCS/Xy-pic.xbm,v && co Xy-pic.xbm || :
-Xy.doc:; test -d RCS -a -f RCS/Xy.doc,v && co Xy.doc || :
-Xy.xy:; test -d RCS -a -f RCS/Xy.xy,v && co Xy.xy || :
-YandY_xy_fonts.zip:; test -d RCS -a -f RCS/YandY_xy_fonts.zip,v && co YandY_xy_fonts.zip || :
-doc2tex.com:; test -d RCS -a -f RCS/doc2tex.com,v && co doc2tex.com || :
-dvitogif89a:; test -d RCS -a -f RCS/dvitogif89a,v && co dvitogif89a || :
-gasket.texmovie:; test -d RCS -a -f RCS/gasket.texmovie,v && co gasket.texmovie || :
-import1.eps:; test -d RCS -a -f RCS/import1.eps,v && co import1.eps || :
-install-tds:; test -d RCS -a -f RCS/install-tds,v && co install-tds || :
-kris.eps:; test -d RCS -a -f RCS/kris.eps,v && co kris.eps || :
-latin1.sty:; test -d RCS -a -f RCS/latin1.sty,v && co latin1.sty || :
-mail.Users:; test -d RCS -a -f RCS/mail.Users,v && co mail.Users || :
-man2html-post.gawk:; test -d RCS -a -f RCS/man2html-post.gawk,v && co man2html-post.gawk || :
-man2html.gawk:; test -d RCS -a -f RCS/man2html.gawk,v && co man2html.gawk || :
-movie.cls:; test -d RCS -a -f RCS/movie.cls,v && co movie.cls || :
-pnmrawtopcropwhite.c:; test -d RCS -a -f RCS/pnmrawtopcropwhite.c,v && co pnmrawtopcropwhite.c || :
-ross.eps:; test -d RCS -a -f RCS/ross.eps,v && co ross.eps || :
-version.doc:; test -d RCS -a -f RCS/version.doc,v && co version.doc || :
-xy.doc:; test -d RCS -a -f RCS/xy.doc,v && co xy.doc || :
-xy.sty:; test -d RCS -a -f RCS/xy.sty,v && co xy.sty || :
-xy16textures.doc:; test -d RCS -a -f RCS/xy16textures.doc,v && co xy16textures.doc || :
-xy17oztex.doc:; test -d RCS -a -f RCS/xy17oztex.doc,v && co xy17oztex.doc || :
-xy2cell.doc:; test -d RCS -a -f RCS/xy2cell.doc,v && co xy2cell.doc || :
-xyall.doc:; test -d RCS -a -f RCS/xyall.doc,v && co xyall.doc || :
-xyamslatex.ini:; test -d RCS -a -f RCS/xyamslatex.ini,v && co xyamslatex.ini || :
-xyarc.doc:; test -d RCS -a -f RCS/xyarc.doc,v && co xyarc.doc || :
-xyarrow.doc:; test -d RCS -a -f RCS/xyarrow.doc,v && co xyarrow.doc || :
-xyatip10.mf:; test -d RCS -a -f RCS/xyatip10.mf,v && co xyatip10.mf || :
-xybsql10.mf:; test -d RCS -a -f RCS/xybsql10.mf,v && co xybsql10.mf || :
-xybtip10.mf:; test -d RCS -a -f RCS/xybtip10.mf,v && co xybtip10.mf || :
-xycirc10.enc:; test -d RCS -a -f RCS/xycirc10.enc,v && co xycirc10.enc || :
-xycirc10.mf:; test -d RCS -a -f RCS/xycirc10.mf,v && co xycirc10.mf || :
-xycm.mf:; test -d RCS -a -f RCS/xycm.mf,v && co xycm.mf || :
-xycmactex.doc:; test -d RCS -a -f RCS/xycmactex.doc,v && co xycmactex.doc || :
-xycmat10.mf:; test -d RCS -a -f RCS/xycmat10.mf,v && co xycmat10.mf || :
-xycmat11.mf:; test -d RCS -a -f RCS/xycmat11.mf,v && co xycmat11.mf || :
-xycmat12.mf:; test -d RCS -a -f RCS/xycmat12.mf,v && co xycmat12.mf || :
-xycmbt10.mf:; test -d RCS -a -f RCS/xycmbt10.mf,v && co xycmbt10.mf || :
-xycmbt11.mf:; test -d RCS -a -f RCS/xycmbt11.mf,v && co xycmbt11.mf || :
-xycmbt12.mf:; test -d RCS -a -f RCS/xycmbt12.mf,v && co xycmbt12.mf || :
-xycmtip.doc:; test -d RCS -a -f RCS/xycmtip.doc,v && co xycmtip.doc || :
-xycolor.doc:; test -d RCS -a -f RCS/xycolor.doc,v && co xycolor.doc || :
-xycrayon.doc:; test -d RCS -a -f RCS/xycrayon.doc,v && co xycrayon.doc || :
-xycurve.doc:; test -d RCS -a -f RCS/xycurve.doc,v && co xycurve.doc || :
-xyd.enc:; test -d RCS -a -f RCS/xyd.enc,v && co xyd.enc || :
-xyd.mf:; test -d RCS -a -f RCS/xyd.mf,v && co xyd.mf || :
-xyd2.enc:; test -d RCS -a -f RCS/xyd2.enc,v && co xyd2.enc || :
-xyd2.mf:; test -d RCS -a -f RCS/xyd2.mf,v && co xyd2.mf || :
-xydash10.mf:; test -d RCS -a -f RCS/xydash10.mf,v && co xydash10.mf || :
-xydoc.bib:; test -d RCS -a -f RCS/xydoc.bib,v && co xydoc.bib || :
-xydoc.sty:; test -d RCS -a -f RCS/xydoc.sty,v && co xydoc.sty || :
-xydocps.doc:; test -d RCS -a -f RCS/xydocps.doc,v && co xydocps.doc || :
-xydriver.doc:; test -d RCS -a -f RCS/xydriver.doc,v && co xydriver.doc || :
-xydummy.doc:; test -d RCS -a -f RCS/xydummy.doc,v && co xydummy.doc || :
-xydvidrv.doc:; test -d RCS -a -f RCS/xydvidrv.doc,v && co xydvidrv.doc || :
-xydvips.doc:; test -d RCS -a -f RCS/xydvips.doc,v && co xydvips.doc || :
-xydvitops.doc:; test -d RCS -a -f RCS/xydvitops.doc,v && co xydvitops.doc || :
-xyemtex.doc:; test -d RCS -a -f RCS/xyemtex.doc,v && co xyemtex.doc || :
-xyeuat10.mf:; test -d RCS -a -f RCS/xyeuat10.mf,v && co xyeuat10.mf || :
-xyeuat11.mf:; test -d RCS -a -f RCS/xyeuat11.mf,v && co xyeuat11.mf || :
-xyeuat12.mf:; test -d RCS -a -f RCS/xyeuat12.mf,v && co xyeuat12.mf || :
-xyeubt10.mf:; test -d RCS -a -f RCS/xyeubt10.mf,v && co xyeubt10.mf || :
-xyeubt11.mf:; test -d RCS -a -f RCS/xyeubt11.mf,v && co xyeubt11.mf || :
-xyeubt12.mf:; test -d RCS -a -f RCS/xyeubt12.mf,v && co xyeubt12.mf || :
-xyeuler.doc:; test -d RCS -a -f RCS/xyeuler.doc,v && co xyeuler.doc || :
-xyframe.doc:; test -d RCS -a -f RCS/xyframe.doc,v && co xyframe.doc || :
-xygraph.doc:; test -d RCS -a -f RCS/xygraph.doc,v && co xygraph.doc || :
-xyguide.man:; test -d RCS -a -f RCS/xyguide.man,v && co xyguide.man || :
-xyidioms.doc:; test -d RCS -a -f RCS/xyidioms.doc,v && co xyidioms.doc || :
-xyimport.doc:; test -d RCS -a -f RCS/xyimport.doc,v && co xyimport.doc || :
-xyknot.doc:; test -d RCS -a -f RCS/xyknot.doc,v && co xyknot.doc || :
-xylatex.ini:; test -d RCS -a -f RCS/xylatex.ini,v && co xylatex.ini || :
-xyline.doc:; test -d RCS -a -f RCS/xyline.doc,v && co xyline.doc || :
-xyline10.mf:; test -d RCS -a -f RCS/xyline10.mf,v && co xyline10.mf || :
-xymacpat.xyp:; test -d RCS -a -f RCS/xymacpat.xyp,v && co xymacpat.xyp || :
-xymatrix.doc:; test -d RCS -a -f RCS/xymatrix.doc,v && co xymatrix.doc || :
-xymisc10.mf:; test -d RCS -a -f RCS/xymisc10.mf,v && co xymisc10.mf || :
-xymovie.doc:; test -d RCS -a -f RCS/xymovie.doc,v && co xymovie.doc || :
-xyoztex.doc:; test -d RCS -a -f RCS/xyoztex.doc,v && co xyoztex.doc || :
-xypic.doc:; test -d RCS -a -f RCS/xypic.doc,v && co xypic.doc || :
-xypic.map:; test -d RCS -a -f RCS/xypic.map,v && co xypic.map || :
-xypic.sty:; test -d RCS -a -f RCS/xypic.sty,v && co xypic.sty || :
-xypoly.doc:; test -d RCS -a -f RCS/xypoly.doc,v && co xypoly.doc || :
-xyps-c.doc:; test -d RCS -a -f RCS/xyps-c.doc,v && co xyps-c.doc || :
-xyps-col.doc:; test -d RCS -a -f RCS/xyps-col.doc,v && co xyps-col.doc || :
-xyps-dto.doc:; test -d RCS -a -f RCS/xyps-dto.doc,v && co xyps-dto.doc || :
-xyps-dvi.doc:; test -d RCS -a -f RCS/xyps-dvi.doc,v && co xyps-dvi.doc || :
-xyps-f.doc:; test -d RCS -a -f RCS/xyps-f.doc,v && co xyps-f.doc || :
-xyps-l.doc:; test -d RCS -a -f RCS/xyps-l.doc,v && co xyps-l.doc || :
-xyps-one.doc:; test -d RCS -a -f RCS/xyps-one.doc,v && co xyps-one.doc || :
-xyps-oz.doc:; test -d RCS -a -f RCS/xyps-oz.doc,v && co xyps-oz.doc || :
-xyps-pro.doc:; test -d RCS -a -f RCS/xyps-pro.doc,v && co xyps-pro.doc || :
-xyps-ps.doc:; test -d RCS -a -f RCS/xyps-ps.doc,v && co xyps-ps.doc || :
-xyps-pub.doc:; test -d RCS -a -f RCS/xyps-pub.doc,v && co xyps-pub.doc || :
-xyps-r.doc:; test -d RCS -a -f RCS/xyps-r.doc,v && co xyps-r.doc || :
-xyps-s.doc:; test -d RCS -a -f RCS/xyps-s.doc,v && co xyps-s.doc || :
-xyps-t.doc:; test -d RCS -a -f RCS/xyps-t.doc,v && co xyps-t.doc || :
-xyps-txo.doc:; test -d RCS -a -f RCS/xyps-txo.doc,v && co xyps-txo.doc || :
-xyps-txt.doc:; test -d RCS -a -f RCS/xyps-txt.doc,v && co xyps-txt.doc || :
-xyps-wdo.doc:; test -d RCS -a -f RCS/xyps-wdo.doc,v && co xyps-wdo.doc || :
-xyps.doc:; test -d RCS -a -f RCS/xyps.doc,v && co xyps.doc || :
-xypsdict.doc:; test -d RCS -a -f RCS/xypsdict.doc,v && co xypsdict.doc || :
-xypspatt.doc:; test -d RCS -a -f RCS/xypspatt.doc,v && co xypspatt.doc || :
-xyqc10.mf:; test -d RCS -a -f RCS/xyqc10.mf,v && co xyqc10.mf || :
-xyrecat.doc:; test -d RCS -a -f RCS/xyrecat.doc,v && co xyrecat.doc || :
-xyrefer.man:; test -d RCS -a -f RCS/xyrefer.man,v && co xyrefer.man || :
-xyrotate.doc:; test -d RCS -a -f RCS/xyrotate.doc,v && co xyrotate.doc || :
-xysmart.doc:; test -d RCS -a -f RCS/xysmart.doc,v && co xysmart.doc || :
-xysource.man:; test -d RCS -a -f RCS/xysource.man,v && co xysource.man || :
-xystyle.doc:; test -d RCS -a -f RCS/xystyle.doc,v && co xystyle.doc || :
-xytech.mf:; test -d RCS -a -f RCS/xytech.mf,v && co xytech.mf || :
-xytest.mf:; test -d RCS -a -f RCS/xytest.mf,v && co xytest.mf || :
-xytex.ini:; test -d RCS -a -f RCS/xytex.ini,v && co xytex.ini || :
-xytextures.doc:; test -d RCS -a -f RCS/xytextures.doc,v && co xytextures.doc || :
-xytile.doc:; test -d RCS -a -f RCS/xytile.doc,v && co xytile.doc || :
-xytips.doc:; test -d RCS -a -f RCS/xytips.doc,v && co xytips.doc || :
-xytp-f.doc:; test -d RCS -a -f RCS/xytp-f.doc,v && co xytp-f.doc || :
-xytpic.doc:; test -d RCS -a -f RCS/xytpic.doc,v && co xytpic.doc || :
-xyv2.doc:; test -d RCS -a -f RCS/xyv2.doc,v && co xyv2.doc || :
-xyweb.doc:; test -d RCS -a -f RCS/xyweb.doc,v && co xyweb.doc || :
-xyxdvi.doc:; test -d RCS -a -f RCS/xyxdvi.doc,v && co xyxdvi.doc || :
-
-
-# DEVELOPMENT TARGETS:
-#
-.PHONY: Install.macros Install Ftpsrc Ftpdoc Ftp World Minor
-
-Install.macros:
- $(MAKE) USR=$$HOME/pub install.macros
-
-Install:
- $(MAKE) USR=$$HOME/pub install
-
-Ftpsrc:
- $(MAKE) MODES='ljfour cx' \
- MAGS='0 0.5 1 2' \
- FTPROOT=$$HOME/public_ftp/TeX ftpsrc
-
-Ftpdoc:
- $(MAKE) MODES='ljfour cx' \
- MAGS='0 0.5 1 2' \
- FTPROOT=$$HOME/public_ftp/TeX ftpdoc
-
-Ftp:
- $(MAKE) MODES='ljfour cx' \
- MAGS='0 0.5 1 2' \
- FTPROOT=$$HOME/public_ftp/TeX ftp
-
-Www:
- $(MAKE) WWWROOT=$$HOME/public_html install.www
-
-World:
- $(MAKE) LATEX='time latex' \
- MODES='ljfour cx' \
- MAGS='0 0.5 1 2' world
- mv make.world make.World
-
-TMPFTPROOT = $$HOME/tmp/new-ftp-root
-
-Minor:
- $(MKDIR) $(TMPFTPROOT)
- $(MAKE) LATEX='time latex' \
- MODES='ljfour cx' \
- MAGS='0 0.5 1 2' \
- FTPROOT=$(TMPFTPROOT) world
- mv make.world make.Minor
-#
- @echo "Making patch:";\
- cd $(TMPFTPROOT); \
- diff -urN $(FTPROOT)/xy-$(VERSION) xy-$(VERSION) > FIX; \
- n=`cd $(FTPROOT);ls xy$(SHORTVERSION)fix* | wc -w 2>/dev/null`; \
- n=`expr $$n + 1`; \
- fix=$(FTPROOT)/xy$(SHORTVERSION)fix`printf '%.2d' $$n`; \
- cp -vf FIX $$fix; gzip -v9 $$fix
-#
- @echo "Updating real ftp archive $(FTPROOT):";\
- cd $(TMPFTPROOT); \
- find xy* -type f -print \
- | while read f;\
- do cmp -s $$f $(FTPROOT)/$$f\
- || { echo $$f; $(MKDIR) `dirname $(FTPROOT)/$$f`;\
- if [ -w $$f ]; then $(INSTALLW) $$f $(FTPROOT)/$$f;\
- else $(INSTALL) $$f $(FTPROOT)/$$f;\
- fi; };\
- done
- $(RM) $(TMPFTPROOT)
-
-
-# LOG
-#
-# $Log: Makefile,v $
-# Revision 3.7 1999/02/16 15:12:50 krisrose
-# Interim release (Y&Y fonts now free).
-#
-# Revision 3.6 1998/03/06 01:28:05 krisrose
-# Releasing (with Y&Y fonts).
-#
-# Revision 3.5 1997/05/28 13:05:01 krisrose
-# Fixed missing breaks bug.
-#
-# Revision 3.4 1997/05/18 03:04:44 krisrose
-# Essential bugfixes.
-# And movies now included!
-#
-# Revision 3.3 1996/12/19 17:05:13 krisrose
-# Maintenance release!
-#
-# Revision 3.2 1995/09/19 18:22:27 kris
-# Bug fix 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.14 1995/07/06 02:56:02 kris
-# Buglets...
-#
-# Revision 2.13 1995/07/04 15:10:01 kris
-# Ready to release v3?
-#
-# Revision 2.12 1994/10/25 11:46:25 kris
-# Interim release just before v3 [works with AMS-LaTeX 1.2]...
-#
-# Revision 2.11 1994/07/05 10:37:32 kris
-# Third 3beta release [bug fixes].
-# Experimental graph feature included (for ECCT-94 presentation).
-#
-# Revision 2.10 1994/06/15 13:35:19 kris
-# Second 3beta release [bug fixes].
-#
-# Revision 2.9 1994/06/09 14:53:07 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.
-#
-# Revision 2.6.9.1 1994/03/07 04:22:46 kris
-# Last internal 3alpha and pre-2.7 release.
-#
-# MAJOR REORGANISATION for version 2.7...
-#
-# Revision 2.6 1992/06/24 01:23:34 kris
-# Ready to release v.2.6.
-#
-# Revision 2.5 1992/02/24 03:30:54 kris
-# Default magsteps now just 0, 0.5, 1, and 2.
-#
-# Revision 2.3 1992/01/13 02:12:28 kris
-# Fixed installation instructions and other details.
-#
-# Revision 2.1 1992/01/02 14:54:07 kris
-# Release version.
-#
-# Revision 1.6 1991/12/17 04:51:16 kris
-# Version distributed with `final draft' on Usenet.
-
-# Tell Emacs that this is a Makefile and how it is formatted:
-# Local Variables:
-# mode:fundamental
-# fill-prefix:"# "
-# fill-column:77
-# End:
diff --git a/Master/texmf-dist/source/generic/xypic/README b/Master/texmf-dist/source/generic/xypic/README
deleted file mode 100644
index 9cb813a4cb6..00000000000
--- a/Master/texmf-dist/source/generic/xypic/README
+++ /dev/null
@@ -1,106 +0,0 @@
--*-text-*- $Id: README,v 3.6 1998/03/06 01:28:05 krisrose Exp $
-
- ======================================================
- THE Xy-pic PACKAGE FOR TYPESETTING GRAPHS AND DIAGRAMS
- ======================================================
-
-Xy-pic is a package for typesetting graphs and diagrams with TeX.
-
-It works with most formats, including LaTeX (both 2.09 and 2e),
-AMS-LaTeX, AMS-TeX, and plain TeX.
-
-It has been used to typeset complicated diagrams from many application
-areas including category theory, automata theory, algebra, neural
-networks, and database theory.
-
- - o -
-
-See below in this file for an overview of the structure and features!
-See CATALOG for up to date version information!
-See TRAILER for author and accessibility information!
-See COPYING for the conditions for redistribution and modification!
-See MANIFEST for a complete file list!
-See VERSIONS for the exact list of the versions of all source files!
-See the various INSTALL files for how to install Xy-pic on your system!
-See the W3 <URL: http://www.ens-lyon.fr/~krisrose/Xy-pic.html> for news!
-
- - o -
-
-Xy-pic is structured as a `kernel' and several orthogonal modules called
-`options', each defining a custom notation for a particular kind of
-graphical object or structure.
-
-These (combinable) structures are available:
-
-* A graph combinator mode where diagrams are specified the way they are
- composed as graphs.
-
-* A matrix-like mode where the dimensions of the drawing are computed by
- aligning diagram entries in rows and columns (this is the `diagram'
- mode Xy-pic version 2 users are used to).
-
-* A polygon mode where diagrams shaped as regular polygons are entered
- in a simple way.
-
-* A mode for typesetting beautiful knots and links.
-
-* A general object-oriented `turtle graphic' drawing language for
- specifying graphs with objects and connections between them in a
- manner independent of orientation.
-
-The following objects may be used:
-
-+ Positions can be given in variety of formats (extendable) including
- user defined coordinates (x,y) and relative to previous positions,
- objects, object edges, and points on connections.
-
-+ Objects may be circular, elliptic, or rectangular (more shapes can be
- added) and adjusted in several ways.
-
-+ Large library of objects with mnemonic names.
-
-+ Objects that orient themself along a connection when placed relative
- to it, e.g., `\dir{|-}' is like \vdash but thus oriented; new such
- objects can be defined in a convenient way.
-
-+ TeX `boxes', i.e., text and mathematical formulae.
-
-+ Includes circle segments and optionally arbitrary elliptical,
- quadratic, and cubic arcs.
-
-+ Connections are aligned between the reference points of objects but
- start and end on the edges.
-
-+ Any object can be used to build a connection (using `diagonal
- filling'); library objects provide common line types.
-
-+ Flexible notation for drawing arrows and general paths with tail,
- stem, and head built from any object(s). Special support for arrows
- that cross each other, arrows that `go by' other entries, paired
- arrows (including support for 2-cells), curved arrows, and arrows with
- bends.
-
-+ Library of frames and braces.
-
-+ Special notation for rotation, scaling, colour, and line thickness.
- The correct typesetting of these features requires a backend that
- supports it (i.e., PostScript) but even when this is not available
- Xy-pic tries to approximate what is requested such that at least the
- picture size is stable (and thus page breaks).
-
-+ Output can use PostScript for drawing (several \special formats are
- supported: dvips, Textures, and OzTeX -- more are being added
- continuously: contact Ross Moore <ross@mpce.mq.edu.au> for the current
- list). Notation for inclusion of literal PostScript is available.
-
-* Other graphics can be imported and then `decorated' using Xy-pic.
-
-All object forms may be used with all structures.
-
- - o -
-
-Finally, enjoy Xy-pic!
-
-Sincerely,
- Kristoffer H. Rose <krisrose@ens-lyon.fr>
- Ross Moore <ross@mpce.mq.edu.au>
diff --git a/Master/texmf-dist/source/generic/xypic/TRAILER b/Master/texmf-dist/source/generic/xypic/TRAILER
deleted file mode 100644
index 0910c672a83..00000000000
--- a/Master/texmf-dist/source/generic/xypic/TRAILER
+++ /dev/null
@@ -1,91 +0,0 @@
--*-text-*- $Id: TRAILER,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-
-=======================================================================
- ANNOUNCING the Xy-pic version 3.7 DIAGRAM TYPESETTING PACKAGE
-=======================================================================
-
-This is to announce a release of my diagram typesetting package Xy-pic.
-
-With version 3.7 we explicitly grant permission to use the unmodified
-Xy-pic fonts and specials in distributed documents.
-
------------------------------------------------------------------------
- GENERAL
------------------------------------------------------------------------
-
-Xy-pic is a package for typesetting a variety of graphs and diagrams
-with TeX. Xy-pic works with most formats (including LaTeX, AMS-LaTeX,
-AMS-TeX, and plain TeX), in particular Xy-pic is provided as a LaTeX2e
-`supported package' (following the `CTAN LaTeX2e bundle' standard).
-
-Further specifics of the package are in the distribution README file.
-
------------------------------------------------------------------------
- NEWS
------------------------------------------------------------------------
-
-The primary purpose of release 3.7 is the granting of special permission
-to copy the Xy-pic fonts and graphic specials inside documents, for
-example in DVI, PostScript, and PDF files. This has no practical
-significance except making current (reasonable) practice explicitly
-legal.
-
-Release 3.7 furthermore fixes a few bugs in release 3.6 and adds a few
-features: a "smart turning path" feature and an extension with macro
-expansion in kernel expressions and polygon shapes by George C. Necula,
-and the beginnings of an emulation of LaTeX picture mode proposed by
-Paul Burchard and Bill Richter.
-
-Special thanks to George Necula for the bug fixes and impressive
-extensions, to Bill Richter for extending Paul Burchard's pb-diagram to
-use Xy-pic as a backend and for contributing the `picture' feature, to
-Berthold Horn of Y&Y Inc. for releasing the copyright on their
-PostScript fonts, and to Pieter Donche and Marcelo Cunha dos Santos for
-the bug reports.
-
------------------------------------------------------------------------
- AVAILABILITY
------------------------------------------------------------------------
-
-Xy-pic can be retrieved through the World Wide Web Xy-pic `home page':
-
- URL: http://www.ens-lyon.fr/~krisrose/Xy-pic.html
-
-as well as by anonymous ftp from
-
- CTAN: macros/generic/diagrams/xypic
-
-Check the README file in each location for specifics, in particular
-check that you have reached a version 3.7 copy (some archives take a
-while to mirror the latest files)!
-
------------------------------------------------------------------------
- HISTORY & CREDITS
------------------------------------------------------------------------
-
-The first public release (version 1.40) of Xy-pic was created by
-Kristoffer H. Rose, DIKU, U of Copenhagen (now ENS-Lyon, France) and
-distributed via Usenet on December 19, 1991. This quickly became
-version 2 of which version 2.6 was the stable for sevarl years.
-
-The thorough rewrite that became version 3 is a continued
-collaboration with Ross Moore, Macquarie U, Sydney, initiated through
-a visit to Macquarie (Jan-May 1994 supported by the Australian
-Research Council, Macquarie University, and using donated DEC
-equipment). However, full backwards compatibility is maintained
-(except for the unavoidable but fully documented obscure cases).
-
-Xy-pic is Copyright (c) 1991-1998 by Kristoffer H. Rose and 1994-1998
-by Ross Moore under GNU COPYLEFT (GPL) which means that you can use
-the package for any purpose but if you provide the macros or any code
-derived from them to a third party then you are obliged to include the
-entire Xy-pic package (full details in the file COPYING). The
-PostScript fonts are additionally Copyright (c) 1997 Y&Y Inc. The
-FONTCOPYING file details the special permissions to distribute fonts
-without the full requirements of the GPL.
-
------------------------------------------------------------------------
-
- This is the end of the announcement. Enjoy Xy-pic!
-
------------------------------------------------------------------------
diff --git a/Master/texmf-dist/source/generic/xypic/VERSIONS b/Master/texmf-dist/source/generic/xypic/VERSIONS
deleted file mode 100644
index 8dd98c1cd2e..00000000000
--- a/Master/texmf-dist/source/generic/xypic/VERSIONS
+++ /dev/null
@@ -1,103 +0,0 @@
-$Id: CATALOG.doc,v 3.6 1998/03/06 04:29:05 krisrose Exp $
-$Id: INSTALL,v 3.6 1998/03/06 01:28:05 krisrose Exp $
-$Id: INSTALL.OzTeX,v 3.4 1997/05/18 01:13:24 ross Exp $
-$Id: INSTALL.Textures,v 3.4 1997/05/18 01:13:24 ross Exp $
-$Id: MAKE,v 3.5 1997/05/28 22:40:26 krisrose Exp $
-$Id: Makefile,v 3.7 1999/02/16 15:12:50 krisrose Exp krisrose $
-$Id: README,v 3.6 1998/03/06 01:28:05 krisrose Exp $
-$Id: TRAILER,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: dvitogif89a,v 3.5 1997/05/28 13:05:01 krisrose Exp $
-$Id: install-tds,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: latin1.sty,v 3.4 1997/05/18 03:04:44 krisrose Exp $
-$Id: movie.cls,v 3.4 1997/05/18 01:14:25 krisrose Exp $
-$Id: pnmrawtopcropwhite.c,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: pnmrawtopcropwhite.c,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xy.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xy.sty,v 3.3 1996/12/19 03:31:56 krisrose Exp $
-$Id: xy16textures.doc,v 3.3 1996/12/18 14:21:23 ross Exp $
-$Id: xy17oztex.doc,v 3.3 1996/12/18 14:21:23 ross Exp $
-$Id: xy2cell.doc,v 3.3 1996/12/18 14:21:23 ross Exp $
-$Id: xyall.doc,v 3.3 1996/12/19 03:31:56 krisrose Exp $
-$Id: xyarc.doc,v 3.4 1997/05/18 01:13:24 ross Exp $
-$Id: xyarrow.doc,v 3.5 1997/05/28 13:05:01 krisrose Exp $
-$Id: xyatip.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyatip10.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xybsql10.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xybtip.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xybtip10.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xycirc10.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xycm.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xycmactex.doc,v 3.3 1996/12/18 08:54:25 ross Exp $
-$Id: xycmat10.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xycmat11.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xycmat12.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xycmbt10.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xycmbt11.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xycmbt12.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xycmtip.doc,v 3.3 1996/12/19 03:31:56 krisrose Exp $
-$Id: xycolor.doc,v 3.3 1996/12/19 03:50:08 ross Exp $
-$Id: xycrayon.doc,v 3.3 1996/12/18 08:58:16 ross Exp $
-$Id: xycurve.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyd.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyd2.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xydash10.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xydoc.bib,v 3.6 1998/03/06 01:28:05 krisrose Exp $
-$Id: xydoc.sty,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xydocps.doc,v 3.6 1998/03/06 01:28:05 krisrose Exp $
-$Id: xydummy.doc,v 3.3 1996/12/19 03:31:56 krisrose Exp $
-$Id: xydvidrv.doc,v 3.3 1996/12/18 09:12:40 ross Exp $
-$Id: xydvips.doc,v 3.3 1996/12/18 09:13:14 ross Exp $
-$Id: xydvitops.doc,v 3.3 1996/12/18 09:14:36 ross Exp $
-$Id: xyemtex.doc,v 3.3 1996/12/18 09:18:00 ross Exp $
-$Id: xyeuat10.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyeuat11.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyeuat12.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyeubt10.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyeubt11.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyeubt12.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyeuler.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyframe.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xygraph.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyguide.man,v 3.6 1998/03/06 01:28:05 krisrose Exp $
-$Id: xyidioms.doc,v 3.4 1997/05/18 01:14:25 krisrose Exp $
-$Id: xyimport.doc,v 3.6 1998/03/06 01:28:05 krisrose Exp $
-$Id: xyknot.doc,v 3.4 1997/05/18 01:13:24 ross Exp $
-$Id: xylatex.ini,v 3.3 1996/12/19 03:31:56 krisrose Exp $
-$Id: xyline.doc,v 3.6 1998/03/06 01:28:05 krisrose Exp $
-$Id: xyline10.mf,v 3.3 1996/12/19 03:31:56 krisrose Exp $
-$Id: xymacpat.xyp,v 3.3 1996/12/18 09:25:21 ross Exp $
-$Id: xymatrix.doc,v 3.4 1997/05/18 01:14:25 krisrose Exp $
-$Id: xymisc10.mf,v 3.3 1996/12/19 03:31:56 krisrose Exp $
-$Id: xymovie.doc,v 3.5 1997/05/28 13:05:01 krisrose Exp $
-$Id: xyoztex.doc,v 3.3 1996/12/18 09:26:26 ross Exp $
-$Id: xypic.doc,v 3.3 1996/12/19 03:31:56 krisrose Exp $
-$Id: xypic.map,v 3.7 1999/02/16 15:12:50 krisrose Exp krisrose $
-$Id: xypic.sty,v 3.3 1996/12/19 03:31:56 krisrose Exp $
-$Id: xypoly.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyps-c.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyps-col.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyps-f.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyps-l.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyps-pro.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyps-ps.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyps-r.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyps-s.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyps-t.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyps.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xypsdict.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xypspatt.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyqc10.mf,v 3.0 1995/07/07 20:14:21 kris Exp $
-$Id: xyrecat.doc,v 3.3 1996/12/19 03:31:56 krisrose Exp $
-$Id: xyrefer.man,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xyrotate.doc,v 3.3 1996/12/18 09:40:16 ross Exp $
-$Id: xytech.mf,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-$Id: xytest.mf,v 3.3 1996/12/19 04:33:25 krisrose Exp $
-$Id: xytex.ini,v 3.3 1996/12/19 03:31:56 krisrose Exp $
-$Id: xytextures.doc,v 3.3 1996/12/18 09:41:45 ross Exp $
-$Id: xytile.doc,v 3.4 1997/05/18 01:13:24 ross Exp $
-$Id: xytips.doc,v 3.3 1996/12/19 04:12:13 krisrose Exp $
-$Id: xytp-f.doc,v 3.3 1996/12/18 09:49:07 ross Exp $
-$Id: xytpic.doc,v 3.3 1996/12/18 09:50:38 ross Exp $
-$Id: xyv2.doc,v 3.4 1997/05/18 01:14:25 krisrose Exp $
-$Id: xyweb.doc,v 3.3 1996/12/18 09:52:11 ross Exp $
-$Id: xyxdvi.doc,v 3.3 1996/12/18 09:53:22 ross Exp $
diff --git a/Master/texmf-dist/source/generic/xypic/doc2tex.com b/Master/texmf-dist/source/generic/xypic/doc2tex.com
deleted file mode 100644
index c8d8f04f8be..00000000000
--- a/Master/texmf-dist/source/generic/xypic/doc2tex.com
+++ /dev/null
@@ -1,114 +0,0 @@
-$!+++
-$!
-$! DOC2TEX.COM
-$!
-$! This procedure creates the *.TEX files from the *.DOC files of the XYpic
-$! package. It must be run from the XYpic source directory.
-$!
-$! R.Gaertner, based on personal communication with K.H.Rose
-$!
-$!---
-$ set noon
-$!
-$! loop over all files
-$!
-$file_loop:
-$ file = f$search("*.doc",1)
-$ if file .nes. ""
-$ then
-$ write sys$output "processing ''file' ..."
-$ !
-$ ! get the filename and open a temporary work file
-$ !
-$ name = f$parse(file,,,"NAME")
-$ open/write tmp 'name'.tmp
-$ open/read src 'file'
-$ !
-$ ! set control flags
-$ !
-$ hdr = "TRUE"
-$ skip = "FALSE"
-$ !
-$ ! loop through the source file
-$ !
-$ line = ""
-$loop:
-$ read/end=end_loop src line
-$ if hdr
-$ then ! copy the lines from start to the first "\DOCMODE" line
-$ if (f$length(line) .ge. 8) .and. (f$extract(0,8,line) .eqs. "\DOCMODE")
-$ then hdr = "FALSE"
-$ skip = "TRUE" ! stop copying
-$ goto loop
-$ endif
-$ ! the first \DOCMODE-line may also indicate the start of the body part
-$ if (f$length(line) .ge. 9) .and. (f$extract(0,9,line) .eqs. "\DOCMODE(")
-$ then skip = "FALSE" ! start copying
-$ goto loop
-$ endif
-$ else ! extract the lines between "\DOCMODE(" and "\DOCMODE)"
-$ if (f$length(line) .ge. 9) .and. (f$extract(0,9,line) .eqs. "\DOCMODE(")
-$ then skip = "FALSE" ! start copying
-$ goto loop
-$ endif
-$ if (f$length(line) .ge. 9) .and. (f$extract(0,9,line) .eqs. "\DOCMODE)")
-$ then skip = "TRUE" ! stop copying
-$ goto loop
-$ endif
-$ endif
-$ !
-$ ! skip empty lines
-$ !
-$ if f$edit(line,"COLLAPSE") .eqs. "" then goto loop
-$ !
-$ ! skip comment lines (starting with a single percent character)
-$ !
-$ if (line .eqs. "%") .or. -
- ((f$length(line) .ge. 2) .and. -
- (f$extract(0,1,line) .eqs. "%") .and. -
- (f$extract(1,1,line) .nes. "%")) then goto loop
-$ !
-$ ! all preprocessing & checks done, copy the input line
-$ !
-$ if .not. skip then write tmp line
-$ goto loop
-$ !
-$ ! close source & work file
-$ !
-$end_loop:
-$ close tmp
-$ close src
-$ !
-$ ! convert the work file to standard text format and delete the work file
-$ !
-$ if f$search("text.fdl",2) .eqs. ""
-$ then create text.fdl
-SYSTEM
- SOURCE OpenVMS
-
-FILE
- ORGANIZATION sequential
-
-RECORD
- BLOCK_SPAN yes
- CARRIAGE_CONTROL carriage_return
- FORMAT variable
- SIZE 0
-
-$ endif
-$ convert/fdl=text.fdl 'name'.tmp 'name'.tex
-$ delete/nolog 'name'.tmp;*
-$ !
-$ ! process the next source
-$ !
-$ goto file_loop
-$ endif
-$ write sys$output "all done"
-$!
-$! clean up
-$!
-$ delete/nolog text.fdl;*
-$
-$ exit
-$!
-$! End of DOC2TEX.COM
diff --git a/Master/texmf-dist/source/generic/xypic/dvitogif89a b/Master/texmf-dist/source/generic/xypic/dvitogif89a
deleted file mode 100644
index f413b853fa9..00000000000
--- a/Master/texmf-dist/source/generic/xypic/dvitogif89a
+++ /dev/null
@@ -1,207 +0,0 @@
-#!/bin/sh
-# $Id: dvitogif89a,v 3.5 1997/05/28 13:05:01 krisrose Exp $
-#
-# Pack consecutive pages of TeX DVI file as GIF89a animation.
-# Copyright (c) 1996-1997 Kristoffer H. Rose <krisrose@brics.dk>
-#
-# This file is part of the Xy-pic macro package.
-# Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@brics.dk>
-# See the README and INSTALL files for further information.
-#
-# 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, write to the Free Software Foundation, Inc.,
-# 675 Mass Ave, Cambridge, MA 02139, USA.
-
-NAME=`basename $0`
-SYNOPSIS="Usage: $NAME file[.dvi]"
-DESCRIPTION="Pack consecutive pages of TeX DVI file as GIF89a animation."
-
-# Crop efficiently if possible.
-#
-if [ -n "`which pnmrawtopcropwhite`" ]
-then
- cropwhite="pnmrawtopcropwhite |pnmcrop -white"
-elif [ -x ./pnmrawtopcropwhite ]
-then
- cropwhite="./pnmrawtopcropwhite |pnmcrop -white"
-else
- cropwhite="pnmcrop -white"
-fi
-
-# Check files.
-#
-ok=yes
-#
-if [ $# -ne 1 ]; then ok=no; fi
-#
-dvi="$1.dvi"
-if [ ! -f "$dvi" ]
-then
- dvi="$1"
- if [ ! -f "$dvi" ]; then ok=no; fi
-fi
-#
-base=`basename "$dvi" .dvi`
-size="$base.size"
-#
-if [ ! -f "$size" ]
-then
- echo $NAME": could not find $size file!" >&2
- ok=no
-else
- eval `cat "$size"`
- if [ -z "$dpi" -o -z "$delay" ]
- then
- echo $NAME": could not interpret $size file!" >&2
- ok=no
- fi
-fi
-#
-if [ $ok = no ]
-then
- echo $SYNOPSIS >&2; exit 2
-fi
-
-# Initialise.
-#
-echo "${NAME}: Animating $base."
-rm -f $base.ps $base.[0-9][0-9][0-9].*
-#
-exec 2>"$base.log"
-set -x
-#
-date "+${NAME} Animating $dvi (log started %c)" >&2
-
-# Produce PostScript file!
-#
-echo -n "Producing PostScript..."
-echo "Producing PostScript:" >&2
-dvips -D $dpi "$base.dvi" -o "$base.ps"
-if [ $? -ne 0 ]; then echo "failed, aborting"; exit 1; else echo "done"; fi
-echo '' >&2
-
-# Produce PPM files!
-#
-echo -n "Producing PPMs"
-echo "Producing PPMs:" >&2
-echo '' \
-| gs -sOutputFile="|$cropwhite >$base.%03d.ppm" \
- -sDEVICE=ppmraw -r$dpi - "$base.ps" 2>&1 \
-| while read ln; do
- echo "$ln" >&2
- case "$ln" in
- *cols*off*the*left) echo -n . ;;
- esac
- done
-if [ $? -ne 0 ]; then echo "failed, aborting"; exit 1; else echo "done"; fi
-echo '' >&2
-
-# Measure first image and alert user.
-#
-top=0 bottom=0 left=0 right=0 height=0 width=0
-eval `pnmcrop -black "$base.001.ppm" |pnmfile |\
- sed -n -e 's/.*[ \t]\([0-9]*\) by \([0-9]*\).*$/ width=\1 height=\2/p'`
-length=`echo $base.[0-9][0-9][0-9].ppm | wc -w | tr -d " \t"`
-#
-echo "Animation has $length frames of ${width}x${height}."
-echo "Length: $length" >&2
-echo "Image size: ${width}x${height}" >&2
-
-# Convert to incremental GIFs!
-#
-echo -n "Producing GIFs"
-lastppm=
-for ppm in $base.[0-9][0-9][0-9].ppm
-do
-
- echo -n "."
- echo -e "\nImage: $ppm" >&2
-
- # filenames
- gif="`basename $ppm .ppm`.gif"
-
- # crop black border [sic]
- mv $ppm $base.000.ppm
- pnmcrop -black $base.000.ppm >$ppm
-
- # produce smallest GIF image and add to gifpack command
- if [ -z "$lastppm" ]
- then
-
- # first bitmap is used directly
- ppmtogif $ppm > $gif
- gifpack="gifpack -delay $delay $loop -output $base.gif $gif"
-
- else
-
- # measure unchanged border
- top=0 bottom=0 left=0 right=0 height=0 width=0
- measures="\
- `( pnmarith -difference $lastppm $ppm | pnmcrop | pnmfile )2>&1 \
- | sed -n \
- -e 's/.*cropping \([0-9]*\) .* \([a-z]*\)$/\2=\1/p' \
- -e 's/.* \([0-9]*\) by \([0-9]*\).*$/width=\1 height=\2/p'`"
- eval "$measures"
-
- # if no change just pass top left pixel
- if [ $width -lt 1 -o $height -lt 1 ]
- then
- width=1; height=1; left=1; top=1
- fi
-
- # add GIF with changed rectangle to animation
- pnmcut $left $top $width $height $ppm | ppmtogif >$gif
- gifpack="$gifpack +$left,+$top $gif"
-
- fi
-
- # prepare next image
- lastppm=$ppm
-
-done
-echo "done"
-echo '' >&2
-
-echo -n "Packing GIFs..."
-echo -e "\nPacking animation:" >&2
-eval $gifpack >&2
-if [ $? -ne 0 ]; then echo "failed, aborting"; exit 1; else echo "done"; fi
-echo '' >&2
-
-# Clean up.
-#
-rm -f $base.[0-9][0-9][0-9].*
-
-# Done.
-#
-echo Done. >&2
-exit
-
-# $Log: dvitogif89a,v $
-# Revision 3.5 1997/05/28 13:05:01 krisrose
-# Fixed missing breaks bug.
-#
-# Revision 3.4 1997/05/18 01:14:25 krisrose
-# Essential bugfixes.
-#
-# Revision 1.3 1997/05/01 21:32:32 krisrose
-# Changed to exploit pnmrawtopcropwhite hack if available...
-# Output cleaned up; uses log file for the rest.
-#
-# Revision 1.2 1997/05/01 19:23:16 krisrose
-# Doesn't quite work...
-#
-# Revision 1.1 1997/02/11 04:19:23 krisrose
-# Initial revision
-#
-# Based on MakeTeXmovie...
diff --git a/Master/texmf-dist/source/generic/xypic/import1.eps b/Master/texmf-dist/source/generic/xypic/import1.eps
deleted file mode 100644
index 8f0b61238b3..00000000000
--- a/Master/texmf-dist/source/generic/xypic/import1.eps
+++ /dev/null
@@ -1,1550 +0,0 @@
-%!PS-Adobe-2.0 EPSF-1.2
-%%BoundingBox: 0 0 261 261
-%%Creator: Macintosh Mathematica Notebook Front End Version 2.2
-%%Title: Clipboard
-%%CreationDate: Thursday, 29 June 1995 7:24:17 PM
-%%EndComments
-150 dict begin
-/Mfixwid true def
-/Mrot 0 def
-/Mpstart {
- MathPictureStart
-} bind def
-/Mpend {
- MathPictureEnd
-} bind def
-/Mscale {
- 0 1 0 1
- 5 -1 roll
- MathScale
-} bind def
-/Plain /Courier findfont def
-/Bold /Courier-Bold findfont def
-/Italic /Courier-Oblique findfont def
-/MathPictureStart {
- /Mimatrix
- matrix currentmatrix
- def
- gsave
- newpath
- Mleft
- Mbottom
- translate
- 1 -1 scale
- /Mtmatrix
- matrix currentmatrix
- def
- Plain
- Mfontsize scalefont
- setfont
- 0 setgray
- 0 setlinewidth
-} bind def
-/MathPictureEnd {
- grestore
-} bind def
-/MathSubStart {
- Momatrix
- Mgmatrix Mtmatrix
- Mleft Mbottom
- Mwidth Mheight
- 9 -2 roll
- moveto
- Mtmatrix setmatrix
- currentpoint
- Mgmatrix setmatrix
- 11 -2 roll
- moveto
- Mtmatrix setmatrix
- currentpoint
- 2 copy translate
- /Mtmatrix matrix currentmatrix def
- /Mleft 0 def
- /Mbottom 0 def
- 3 -1 roll
- exch sub
- /Mheight exch def
- sub
- /Mwidth exch def
-} bind def
-/MathSubEnd {
- /Mheight exch def
- /Mwidth exch def
- /Mbottom exch def
- /Mleft exch def
- /Mtmatrix exch def
- dup setmatrix
- /Mgmatrix exch def
- /Momatrix exch def
-} bind def
-/Mdot {
- moveto
- 0 0 rlineto
- stroke
-} bind def
-/Mtetra {
- moveto
- lineto
- lineto
- lineto
- fill
-} bind def
-/Metetra {
- moveto
- lineto
- lineto
- lineto
- closepath
- gsave
- fill
- grestore
- 0 setgray
- stroke
-} bind def
-/Mistroke {
- flattenpath
- 0 0 0
- {
- 4 2 roll
- pop pop
- }
- {
- 4 -1 roll
- 2 index
- sub dup mul
- 4 -1 roll
- 2 index
- sub dup mul
- add sqrt
- 4 -1 roll
- add
- 3 1 roll
- }
- {
- stop
- }
- {
- stop
- }
- pathforall
- pop pop
- currentpoint
- stroke
- moveto
- currentdash
- 3 -1 roll
- add
- setdash
-} bind def
-/Mfstroke {
- stroke
- currentdash
- pop 0
- setdash
-} bind def
-/Mrotsboxa {
- gsave
- dup
- /Mrot
- exch def
- Mrotcheck
- Mtmatrix
- dup
- setmatrix
- 7 1 roll
- 4 index
- 4 index
- translate
- rotate
- 3 index
- -1 mul
- 3 index
- -1 mul
- translate
- /Mtmatrix
- matrix
- currentmatrix
- def
- grestore
- Msboxa
- 3 -1 roll
- /Mtmatrix
- exch def
- /Mrot
- 0 def
-} bind def
-/Msboxa {
- newpath
- 5 -1 roll
- Mvboxa
- pop
- Mboxout
- 6 -1 roll
- 5 -1 roll
- 4 -1 roll
- Msboxa1
- 5 -3 roll
- Msboxa1
- Mboxrot
- [
- 7 -2 roll
- 2 copy
- [
- 3 1 roll
- 10 -1 roll
- 9 -1 roll
- ]
- 6 1 roll
- 5 -2 roll
- ]
-} bind def
-/Msboxa1 {
- sub
- 2 div
- dup
- 2 index
- 1 add
- mul
- 3 -1 roll
- -1 add
- 3 -1 roll
- mul
-} bind def
-/Mvboxa {
- Mfixwid
- {
- Mvboxa1
- }
- {
- dup
- Mwidthcal
- 0 exch
- {
- add
- }
- forall
- exch
- Mvboxa1
- 4 index
- 7 -1 roll
- add
- 4 -1 roll
- pop
- 3 1 roll
- }
- ifelse
-} bind def
-/Mvboxa1 {
- gsave
- newpath
- [ true
- 3 -1 roll
- {
- Mbbox
- 5 -1 roll
- {
- 0
- 5 1 roll
- }
- {
- 7 -1 roll
- exch sub
- (m) stringwidth pop
- .3 mul
- sub
- 7 1 roll
- 6 -1 roll
- 4 -1 roll
- Mmin
- 3 -1 roll
- 5 index
- add
- 5 -1 roll
- 4 -1 roll
- Mmax
- 4 -1 roll
- }
- ifelse
- false
- }
- forall
- { stop } if
- counttomark
- 1 add
- 4 roll
- ]
- grestore
-} bind def
-/Mbbox {
- 1 dict begin
- 0 0 moveto % str
- /temp (T) def
- { gsave
- currentpoint newpath moveto
- temp 0 3 -1 roll put temp
- false charpath flattenpath currentpoint
- pathbbox
- grestore moveto lineto moveto} forall
- pathbbox
- newpath
- end
-} bind def
-/Mmin {
- 2 copy
- gt
- { exch } if
- pop
-} bind def
-/Mmax {
- 2 copy
- lt
- { exch } if
- pop
-} bind def
-/Mrotshowa {
- dup
- /Mrot
- exch def
- Mrotcheck
- Mtmatrix
- dup
- setmatrix
- 7 1 roll
- 4 index
- 4 index
- translate
- rotate
- 3 index
- -1 mul
- 3 index
- -1 mul
- translate
- /Mtmatrix
- matrix
- currentmatrix
- def
- Mgmatrix setmatrix
- Mshowa
- /Mtmatrix
- exch def
- /Mrot 0 def
-} bind def
-/Mshowa {
- 4 -2 roll
- moveto
- 2 index
- Mtmatrix setmatrix
- Mvboxa
- 7 1 roll
- Mboxout
- 6 -1 roll
- 5 -1 roll
- 4 -1 roll
- Mshowa1
- 4 1 roll
- Mshowa1
- rmoveto
- currentpoint
- Mfixwid
- {
- Mshowax
- }
- {
- Mshoway
- }
- ifelse
- pop pop pop pop
- Mgmatrix setmatrix
-} bind def
-/Mshowax {
- 0 1
- 4 index length
- -1 add
- {
- 2 index
- 4 index
- 2 index
- get
- 3 index
- add
- moveto
- 4 index
- exch get
- show
- } for
-} bind def
-/Mshoway {
- 3 index
- Mwidthcal
- 5 1 roll
- 0 1
- 4 index length
- -1 add
- {
- 2 index
- 4 index
- 2 index
- get
- 3 index
- add
- moveto
- 4 index
- exch get
- [
- 6 index
- aload
- length
- 2 add
- -1 roll
- {
- pop
- Strform
- stringwidth
- pop
- neg
- exch
- add
- 0 rmoveto
- }
- exch
- kshow
- cleartomark
- } for
- pop
-} bind def
-/Mwidthcal {
- [
- exch
- {
- Mwidthcal1
- }
- forall
- ]
- [
- exch
- dup
- Maxlen
- -1 add
- 0 1
- 3 -1 roll
- {
- [
- exch
- 2 index
- {
- 1 index
- Mget
- exch
- }
- forall
- pop
- Maxget
- exch
- }
- for
- pop
- ]
- Mreva
-} bind def
-/Mreva {
- [
- exch
- aload
- length
- -1 1
- {1 roll}
- for
- ]
-} bind def
-/Mget {
- 1 index
- length
- -1 add
- 1 index
- ge
- {
- get
- }
- {
- pop pop
- 0
- }
- ifelse
-} bind def
-/Maxlen {
- [
- exch
- {
- length
- }
- forall
- Maxget
-} bind def
-/Maxget {
- counttomark
- -1 add
- 1 1
- 3 -1 roll
- {
- pop
- Mmax
- }
- for
- exch
- pop
-} bind def
-/Mwidthcal1 {
- [
- exch
- {
- Strform
- stringwidth
- pop
- }
- forall
- ]
-} bind def
-/Strform {
- /tem (x) def
- tem 0
- 3 -1 roll
- put
- tem
-} bind def
-/Mshowa1 {
- 2 copy
- add
- 4 1 roll
- sub
- mul
- sub
- -2 div
-} bind def
-/MathScale {
- Mwidth
- Mheight
- Mlp
- translate
- scale
- /yscale exch def
- /ybias exch def
- /xscale exch def
- /xbias exch def
- /Momatrix
- xscale yscale matrix scale
- xbias ybias matrix translate
- matrix concatmatrix def
- /Mgmatrix
- matrix currentmatrix
- def
-} bind def
-/Mlp {
- 3 copy
- Mlpfirst
- {
- Mnodistort
- {
- Mmin
- dup
- } if
- 4 index
- 2 index
- 2 index
- Mlprun
- 11 index
- 11 -1 roll
- 10 -4 roll
- Mlp1
- 8 index
- 9 -5 roll
- Mlp1
- 4 -1 roll
- and
- { exit } if
- 3 -1 roll
- pop pop
- } loop
- exch
- 3 1 roll
- 7 -3 roll
- pop pop pop
-} bind def
-/Mlpfirst {
- 3 -1 roll
- dup length
- 2 copy
- -2 add
- get
- aload
- pop pop pop
- 4 -2 roll
- -1 add
- get
- aload
- pop pop pop
- 6 -1 roll
- 3 -1 roll
- 5 -1 roll
- sub
- div
- 4 1 roll
- exch sub
- div
-} bind def
-/Mlprun {
- 2 copy
- 4 index
- 0 get
- dup
- 4 1 roll
- Mlprun1
- 3 copy
- 8 -2 roll
- 9 -1 roll
- {
- 3 copy
- Mlprun1
- 3 copy
- 11 -3 roll
- /gt Mlpminmax
- 8 3 roll
- 11 -3 roll
- /lt Mlpminmax
- 8 3 roll
- } forall
- pop pop pop pop
- 3 1 roll
- pop pop
- aload pop
- 5 -1 roll
- aload pop
- exch
- 6 -1 roll
- Mlprun2
- 8 2 roll
- 4 -1 roll
- Mlprun2
- 6 2 roll
- 3 -1 roll
- Mlprun2
- 4 2 roll
- exch
- Mlprun2
- 6 2 roll
-} bind def
-/Mlprun1 {
- aload pop
- exch
- 6 -1 roll
- 5 -1 roll
- mul add
- 4 -2 roll
- mul
- 3 -1 roll
- add
-} bind def
-/Mlprun2 {
- 2 copy
- add 2 div
- 3 1 roll
- exch sub
-} bind def
-/Mlpminmax {
- cvx
- 2 index
- 6 index
- 2 index
- exec
- {
- 7 -3 roll
- 4 -1 roll
- } if
- 1 index
- 5 index
- 3 -1 roll
- exec
- {
- 4 1 roll
- pop
- 5 -1 roll
- aload
- pop pop
- 4 -1 roll
- aload pop
- [
- 8 -2 roll
- pop
- 5 -2 roll
- pop
- 6 -2 roll
- pop
- 5 -1 roll
- ]
- 4 1 roll
- pop
- }
- {
- pop pop pop
- } ifelse
-} bind def
-/Mlp1 {
- 5 index
- 3 index sub
- 5 index
- 2 index mul
- 1 index
- le
- 1 index
- 0 le
- or
- dup
- not
- {
- 1 index
- 3 index div
- .99999 mul
- 8 -1 roll
- pop
- 7 1 roll
- }
- if
- 8 -1 roll
- 2 div
- 7 -2 roll
- pop sub
- 5 index
- 6 -3 roll
- pop pop
- mul sub
- exch
-} bind def
-/intop 0 def
-/inrht 0 def
-/inflag 0 def
-/outflag 0 def
-/xadrht 0 def
-/xadlft 0 def
-/yadtop 0 def
-/yadbot 0 def
-/Minner {
- outflag
- 1
- eq
- {
- /outflag 0 def
- /intop 0 def
- /inrht 0 def
- } if
- 5 index
- gsave
- Mtmatrix setmatrix
- Mvboxa pop
- grestore
- 3 -1 roll
- pop
- dup
- intop
- gt
- {
- /intop
- exch def
- }
- { pop }
- ifelse
- dup
- inrht
- gt
- {
- /inrht
- exch def
- }
- { pop }
- ifelse
- pop
- /inflag
- 1 def
-} bind def
-/Mouter {
- /xadrht 0 def
- /xadlft 0 def
- /yadtop 0 def
- /yadbot 0 def
- inflag
- 1 eq
- {
- dup
- 0 lt
- {
- dup
- intop
- mul
- neg
- /yadtop
- exch def
- } if
- dup
- 0 gt
- {
- dup
- intop
- mul
- /yadbot
- exch def
- }
- if
- pop
- dup
- 0 lt
- {
- dup
- inrht
- mul
- neg
- /xadrht
- exch def
- } if
- dup
- 0 gt
- {
- dup
- inrht
- mul
- /xadlft
- exch def
- } if
- pop
- /outflag 1 def
- }
- { pop pop}
- ifelse
- /inflag 0 def
- /inrht 0 def
- /intop 0 def
-} bind def
-/Mboxout {
- outflag
- 1
- eq
- {
- 4 -1
- roll
- xadlft
- leadjust
- add
- sub
- 4 1 roll
- 3 -1
- roll
- yadbot
- leadjust
- add
- sub
- 3 1
- roll
- exch
- xadrht
- leadjust
- add
- add
- exch
- yadtop
- leadjust
- add
- add
- /outflag 0 def
- /xadlft 0 def
- /yadbot 0 def
- /xadrht 0 def
- /yadtop 0 def
- } if
-} bind def
-/leadjust {
- (m) stringwidth pop
- .5 mul
-} bind def
-/Mrotcheck {
- dup
- 90
- eq
- {
- yadbot
- /yadbot
- xadrht
- def
- /xadrht
- yadtop
- def
- /yadtop
- xadlft
- def
- /xadlft
- exch
- def
- }
- if
- dup
- cos
- 1 index
- sin
- Checkaux
- dup
- cos
- 1 index
- sin neg
- exch
- Checkaux
- 3 1 roll
- pop pop
-} bind def
-/Checkaux {
- 4 index
- exch
- 4 index
- mul
- 3 1 roll
- mul add
- 4 1 roll
-} bind def
-/Mboxrot {
- Mrot
- 90 eq
- {
- brotaux
- 4 2
- roll
- }
- if
- Mrot
- 180 eq
- {
- 4 2
- roll
- brotaux
- 4 2
- roll
- brotaux
- }
- if
- Mrot
- 270 eq
- {
- 4 2
- roll
- brotaux
- }
- if
-} bind def
-/brotaux {
- neg
- exch
- neg
-} bind def
-/Mabsproc {
- 0
- matrix defaultmatrix
- dtransform idtransform
- dup mul exch
- dup mul
- add sqrt
-} bind def
-/Mabswid {
- Mabsproc
- setlinewidth
-} bind def
-/Mabsdash {
- exch
- [
- exch
- {
- Mabsproc
- }
- forall
- ]
- exch
- setdash
-} bind def
-/MBeginOrig { Momatrix concat} bind def
-/MEndOrig { Mgmatrix setmatrix} bind def
-/sampledsound where
-{ pop}
-{ /sampledsound {
-exch
-pop
-exch
-5 1 roll
-mul
-4 idiv
-mul
-2 idiv
-exch pop
-exch
-/Mtempproc exch def
-{ Mtempproc pop }
-repeat
-} bind def
-} ifelse
-% Here are the short operators
-/g { setgray} bind def
-/k { setcmykcolor} bind def
-/m { moveto} bind def
-/p { gsave} bind def
-/r { setrgbcolor} bind def
-/w { setlinewidth} bind def
-/C { curveto} bind def
-/F { fill} bind def
-/L { lineto} bind def
-/P { grestore} bind def
-/s { stroke} bind def
-
-/MFill {
- 0 0 moveto
- Mwidth 0 lineto
- Mwidth Mheight lineto
- 0 Mheight lineto
- fill
-} bind def
-
-/MPlotRegion {
- 3 index
- Mwidth mul
- 2 index
- Mheight mul
- translate
- exch sub
- Mheight mul
- /Mheight
- exch def
- exch sub
- Mwidth mul
- /Mwidth
- exch def
-} bind def
-
-/Mcharproc
-{
- currentfile
- (x)
- readhexstring
- pop
- 0 get
- exch
- div
-} bind def
-
-/Mshadeproc
-{
- dup
- 3 1
- roll
- {
- dup
- Mcharproc
- 3 1
- roll
- } repeat
- 1 eq
- {
- setgray
- }
- {
- 3 eq
- {
- setrgbcolor
- }
- {
- setcmykcolor
- } ifelse
- } ifelse
-} bind def
-
-/Mrectproc
-{
- 3 index
- 2 index
- moveto
- 2 index
- 3 -1
- roll
- lineto
- dup
- 3 1
- roll
- lineto
- lineto
- fill
-} bind def
-
-/Mcolorimage
-{
- 7 1
- roll
- pop
- pop
- matrix
- invertmatrix
- concat
- 2 exch exp
- 1 sub
- 3 1 roll
- 1 1
- 2 index
- {
- 1 1
- 4 index
- {
- dup
- 1 sub
- exch
- 2 index
- dup
- 1 sub
- exch
- 7 index
- 9 index
- Mshadeproc
- Mrectproc
- } for
- pop
- } for
- pop pop pop pop
-} bind def
-
-/Mimage
-{
- pop
- matrix
- invertmatrix
- concat
- 2 exch exp
- 1 sub
- 3 1 roll
- 1 1
- 2 index
- {
- 1 1
- 4 index
- {
- dup
- 1 sub
- exch
- 2 index
- dup
- 1 sub
- exch
- 7 index
- Mcharproc
- setgray
- Mrectproc
- } for
- pop
- } for
- pop pop pop
-} bind def
-
-/Mnodistort true def
-/colorimage {Mcolorimage} bind def
-/image {Mimage} bind def
-/Mleft 0.000000 def
-/Mbottom 261.000000 def
-/Mwidth 261.000000 def
-/Mheight 261.000000 def
-/Mfontsize 12 def
-/Plain /Courier findfont def
-0 Mbottom Mheight neg add 2 mul Mheight add translate
-1 -1 scale
-%!
-%%Creator: Mathematica
-%%AspectRatio: 1
-MathPictureStart
-%% Graphics
-/Courier findfont 10 scalefont setfont
-% Scaling calculations
-0.378378 0.27027 0.378378 0.27027 [
-[ -0.001 -0.001 0 0 ]
-[ 1.001 1.001 0 0 ]
-] MathScale
-% Start of Graphics
-1 setlinecap
-1 setlinejoin
-newpath
-[ ] 0 setdash
-0 g
-p
-p
-.002 w
-.10811 .37838 m
-.10811 .38463 L
-s
-P
-p
-.002 w
-.24324 .37838 m
-.24324 .38463 L
-s
-P
-p
-.002 w
-.51351 .37838 m
-.51351 .38463 L
-s
-P
-p
-.002 w
-.64865 .37838 m
-.64865 .38463 L
-s
-P
-p
-.002 w
-.78378 .37838 m
-.78378 .38463 L
-s
-P
-p
-.002 w
-.91892 .37838 m
-.91892 .38463 L
-s
-P
-p
-.002 w
-0 .37838 m
-1 .37838 L
-s
-P
-p
-.002 w
-.37838 .10811 m
-.38463 .10811 L
-s
-P
-p
-.002 w
-.37838 .24324 m
-.38463 .24324 L
-s
-P
-p
-.002 w
-.37838 .51351 m
-.38463 .51351 L
-s
-P
-p
-.002 w
-.37838 .64865 m
-.38463 .64865 L
-s
-P
-p
-.002 w
-.37838 .78378 m
-.38463 .78378 L
-s
-P
-p
-.002 w
-.37838 .91892 m
-.38463 .91892 L
-s
-P
-p
-.002 w
-.37838 0 m
-.37838 1 L
-s
-P
-P
-0 0 m
-1 0 L
-1 1 L
-0 1 L
-closepath
-clip
-newpath
-p
-p
-p
-p
-p
-.006 w
-s
-s
-s
-s
-s
-s
-s
-0 .95591 m
-.04471 .93809 L
-s
-.04471 .93809 m
-.10223 .92042 L
-.16426 .90735 L
-.22976 .89945 L
-.29759 .89604 L
-.36661 .89539 L
-.43563 .89515 L
-.50347 .89293 L
-.56897 .88661 L
-.631 .87445 L
-.68851 .85514 L
-.74051 .82769 L
-.78612 .79131 L
-.82454 .74525 L
-.85514 .68851 L
-.87737 .61911 L
-.89086 .53158 L
-.89539 .38059 L
-s
-P
-P
-p
-p
-.006 w
-.89539 .37617 m
-.89664 .27804 L
-.90039 .21894 L
-.90657 .16913 L
-.91507 .12436 L
-.92574 .08289 L
-.93841 .0438 L
-.95286 .00657 L
-s
-.9558 0 m
-.95286 .00657 L
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-P
-P
-P
-P
-p
-p
-p
-p
-p
-.002 w
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-.69595 1 m
-.77208 .69545 L
-s
-.77208 .69545 m
-.85135 .37838 L
-.92484 .08443 L
-s
-.94595 0 m
-.92484 .08443 L
-s
-s
-s
-s
-s
-s
-s
-s
-P
-P
-P
-p
-p
-p
-.002 w
-s
-s
-s
-s
-s
-s
-0 .93436 m
-.03574 .92926 L
-s
-.03574 .92926 m
-.10219 .91976 L
-.17568 .90927 L
-.25494 .89794 L
-.33864 .88599 L
-.42532 .8736 L
-.51351 .861 L
-.60171 .8484 L
-.68839 .83602 L
-.77208 .82407 L
-.85135 .81274 L
-.92484 .80224 L
-.99129 .79275 L
-s
-1 .79151 m
-.99129 .79275 L
-s
-s
-s
-s
-s
-s
-s
-P
-P
-P
-p
-p
-p
-.002 w
-s
-s
-s
-s
-s
-s
-.02703 1 m
-.03574 .99129 L
-s
-.03574 .99129 m
-.10219 .92484 L
-.17568 .85135 L
-.25494 .77208 L
-.33864 .68839 L
-.42532 .60171 L
-.51351 .51351 L
-.60171 .42532 L
-.68839 .33864 L
-.77208 .25494 L
-.85135 .17568 L
-.92484 .10219 L
-.99129 .03574 L
-s
-1 .02703 m
-.99129 .03574 L
-s
-s
-s
-s
-s
-s
-s
-P
-P
-P
-p
-p
-p
-.002 w
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-s
-.56757 1 m
-.60171 .96586 L
-s
-.60171 .96586 m
-.68839 .87918 L
-.77208 .79548 L
-.85135 .71622 L
-.92484 .64273 L
-.99129 .57628 L
-s
-1 .56757 m
-.99129 .57628 L
-s
-s
-s
-s
-s
-s
-s
-P
-P
-P
-p
-p
-p
-.002 w
-s
-s
-s
-s
-s
-s
-s
-s
-.15505 1 m
-.17568 .97937 L
-s
-.17568 .97937 m
-.25494 .90011 L
-.33864 .81641 L
-.42532 .72973 L
-.51351 .64154 L
-.60171 .55334 L
-.68839 .46666 L
-.77208 .38297 L
-.85135 .3037 L
-.92484 .23021 L
-.99129 .16376 L
-s
-1 .15505 m
-.99129 .16376 L
-s
-s
-s
-s
-s
-s
-s
-P
-P
-P
-P
-P
-.02 w
-.10811 .91892 Mdot
-.91892 .10811 Mdot
-.73874 .82883 Mdot
-.82883 .73874 Mdot
-.25747 .89758 Mdot
-.89758 .25747 Mdot
-P
-% End of Graphics
-MathPictureEnd
-%%PSTrailer
-end
-
-%%EPS Trailer
diff --git a/Master/texmf-dist/source/generic/xypic/install-tds b/Master/texmf-dist/source/generic/xypic/install-tds
deleted file mode 100644
index da1dd268d46..00000000000
--- a/Master/texmf-dist/source/generic/xypic/install-tds
+++ /dev/null
@@ -1,147 +0,0 @@
-#!/bin/sh
-# $Id: install-tds,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-#
-# sh(1) installation of Xy-pic into a TeX Directory Structure system.
-# Copyright (c) 1997 Kristoffer H. Rose <krisrose@ens-lyon.fr>
-#
-# This file is part of the Xy-pic macro package.
-# Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@ens-lyon.fr>
-# See the README and INSTALL files for further information.
-#
-# 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, write to the Free Software Foundation, Inc.,
-# 675 Mass Ave, Cambridge, MA 02139, USA.
-
-# check that we are in the right place (and get version :)
-
-# greet
-echo ''
-echo ' Welcome to the Xy-pic TDS-compliant installation script!'
-echo ' Copyright (c) 1997-1998 by Kristoffer.Rose@ENS-Lyon.FR'
-echo ' Xy-pic is free software: see the User's Guide for details.'
-echo ''
-echo ' The author has seriously tried to ensure the portability of'
-echo ' this script among all un*x platforms, however, if you experience'
-echo ' problems then don't hesitate to contact me.'
-echo ''
-echo ' See the file INSTALL for details about what this script does.'
-
-# record the argument as TEXMF
-: ${TEXMF:=$1}
-
-# if no TEXMF specified try to figure it out
-: ${TEXMF:=`kpsewhich --expand-var='$TEXMFMAIN' 2>/dev/null`}
-: ${TEXMF:=`kpsexpand '$TEXMFMAIN' 2>/dev/null`}
-: ${TEXMF:=`kpsewhich --expand-var='$TEXMF' 2>/dev/null`}
-: ${TEXMF:=`kpsexpand '$TEXMF' 2>/dev/null`}
-
-if [ -d "$TEXMF" ]
-then
- echo ''
- echo "TEXMF directory $TEXMF found."
-else
- echo ''
- echo 'ERROR: I could not find the TEXMF directory (tried '"$TEXMF"')!' >&2
- echo 'Usage: ./support/install-tds [TEXMF]' >&2
- echo 'Xy-pic installation aborted.'
- exit 2
-fi
-
-# get confirmation
-echo ''
-echo ' This script will install Xy-pic under the indicated TEXMF tree.'
-echo ' We assume that it is the root of a standard TeX Directory Structure.'
-echo ''
-echo ' Also we asume that the commands find, grep, mkdir, and cp, conform'
-echo ' to their POSIX specification and can be found in the standard path.'
-echo ''
-echo 'Type <enter> to continue (anything else to stop - this is your last chance):'
-read reply
-if [ -z "$reply" ];
-then
- echo ''
- echo 'Thanks: proceeding with the installation.'
-else
- echo 'Xy-pic installation aborted.'
- exit 1
-fi
-
-# warn user about obsolete files
-echo ''
-echo 'Checking for obsolete files.'
-if [ -d "$TEXMF/dvips/xypic" ]
-then
-
- files=`find "$TEXMF/dvips" -name "xy*.map" -print 2>/dev/null`
- if [ -n "$files" ]
- then
- echo 'WARNING: xy*.map files exist:'
- echo $files
- fi
-
- files=`find "$TEXMF/dvips" -name psfonts.map -print 2>/dev/null`
- files=`grep -svl '^xy' $files /dev/null`
- if [ -n "$files" ]
- then
- echo 'WARNING: psfonts.map xy*-font mappings exist in:'
- echo "$files"
- fi
-
- files=`find "$TEXMF/fonts/type1" -name "xy*.pf?" -print 2>/dev/null \
- | grep -v "$TEXMF/fonts/type1/public/xypic/xy.*[.]pfb"`
- if [ -n "$files" ]
- then
- echo 'WARNING: xy*.pfa or xy*.pfb files exist:'
- echo "$files"
- fi
-
-fi
-
-# function for installing simple files in a directory
-installd () {
- text=$1; shift
- dir=`eval 'echo ${'$#'}'` # extract last parameter
- echo "Installing $text in $dir."
- if mkdir -p "$dir"; then cp -f "$@"
- else
- echo ' WARNING: could not make directory - files not installed.'
- fi
-}
-
-# do the actual installation
-echo ''
-echo 'Installing Xy-pic!'
-
-installd "administrivia" \
- README CATALOG TRAILER INSTALL* MANIFEST VERSIONS COPYING \
- "$TEXMF/doc/generic/xypic"
-
-installd "macros" texinputs/* "$TEXMF/tex/generic/xypic"
-installd "font metrics" texfonts/*.tfm "$TEXMF/fonts/tfm/public/xypic"
-installd "font sources" mfinputs/*.mf "$TEXMF/fonts/source/public/xypic"
-installd "ps type1 fonts" type1/*.pfb "$TEXMF/fonts/type1/public/xypic"
-installd "ps pfm fonts" pfm/*.pfm "$TEXMF/fonts/pfm/public/xypic"
-installd "ps afm metrics" afm/*.afm "$TEXMF/fonts/afm/public/xypic"
-installd "ps headers" ps/* "$TEXMF/dvips/xypic"
-
-[ -d doc ] && installd "manuals" doc/* "$TEXMF/doc/generic/xypic"
-
-# done
-echo "Xy-pic installation done."
-exit
-
-# $Log: install-tds,v $
-# Revision 3.7 1999/02/16 15:12:50 krisrose
-# Interim release (Y&Y fonts now free).
-#
-# New with release 3.5...changed significantly for 3.6.
diff --git a/Master/texmf-dist/source/generic/xypic/kris.eps b/Master/texmf-dist/source/generic/xypic/kris.eps
deleted file mode 100644
index 173f4e20770..00000000000
--- a/Master/texmf-dist/source/generic/xypic/kris.eps
+++ /dev/null
@@ -1,587 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: /net/tyr/home/tyr1/kris/Kris/pictures/kris-icon.ps
-%%Creator: XV Version 3.10a Rev: 12/29/94 - by John Bradley
-%%BoundingBox: 0 0 66 86
-%%Pages: 1
-%%DocumentFonts:
-%%EndComments
-%%BeginPreview: 92 119 1 119
-% 5490000000003fffffffffff
-% 5249000080123fffffffffff
-% a924000124085fffffffffff
-% 5210800041412fffffffffff
-% 55450005bebb5bffffffffff
-% a810802af7fed5ffffffffff
-% 52a20017ffff7affffffffff
-% 550840b5ffffedffffffffff
-% 905100afffff573fffffffff
-% 550485bffffffeefffffffff
-% a950417fffffff5fffffffff
-% 920217dffffffd7fffffffff
-% 54a88abfffffb2afffffffff
-% a90457fffffffc7fffffffff
-% 52522efffffffffaffffffff
-% 94809fffffffffffbff7524f
-% 29143ffffffffffffffc000f
-% a522d5fffffffffffffa800f
-% 284977fffffffffff4fe040f
-% a510adffffffffffdd3f010f
-% 2a4357fffffffffff36fa00f
-% 512a57ffffa75ffebcbf800f
-% 5484b6ffff54af53febf400f
-% 89156affff454dedd56fc00f
-% 522aedfffe9256b6ff9fe00f
-% 95456bfffd44894d766fe40f
-% 201b72fff5505202addfe00f
-% 048a7fdffa0204295b37708f
-% 0014eabfd550008255dbb22f
-% 000afd57a02008095137a88f
-% 005cbd3fe808000254afd00f
-% 005aa92a80020000a12ad00f
-% 003ab555e1002204a84fd00f
-% 005e2ea1000000414801a88f
-% 0078f50a480000045257500f
-% 00fb9ae000000002a002f80f
-% 00f6fc90000000080883524f
-% 00fff54000000012a029f5bf
-% 01fff948000001200003bfff
-% 03fef42000000000a909ffff
-% 03fff940000000804005efff
-% 07fd7a12000000000883ffff
-% 03fdfc40000000001003f7ff
-% 07fff11000000000452cffff
-% 07fffa40000000001242bfff
-% 07fff9900000000000a8dfff
-% 07fffb400000000008053fff
-% 07ffffa0000000000000afff
-% 03fd6ba00000000000023fff
-% 03dcffc20000000040005fff
-% 039836d0000000000080bfff
-% 03525f800000001000093fff
-% 03009f1a0000490000003fff
-% 0300bf06800914000002bfff
-% 03102c41d0402a4800007fff
-% 030055003401ff0200b73fff
-% 050001000c0755a0022d7fff
-% 020004200304022009ffffff
-% 05000100008bc89003efffff
-% 03000000006282004f80ffff
-% 05000100002280081650ffff
-% 03008400002022400d667fff
-% 050000400000080819ccf3ff
-% 01000004002000080886ffff
-% 004000000040000010097fff
-% 02800400000000080920ffff
-% 008001000020000000047fff
-% 00c0000000211012044107ff
-% 006000040020000010100fff
-% 00e000000000000001000fff
-% 007001000010008008020fff
-% 007808000008000000405fff
-% 047c0000000401200408bfff
-% 003e0000000294000402ffff
-% 007c8100000000000301ffff
-% 003c000000000000014bffff
-% 007c0800000000080010ffff
-% 003e0020000000000200ffff
-% 003c0200000000800444ffff
-% 001c0000000000010800ffff
-% 002c0000000000083401ffff
-% 00090000000000015013ffff
-% 00180200002000004505ffff
-% 00040000000800001043ffff
-% 00080800002080000007ffff
-% 001a0100000210045427ffff
-% 000c000000100121000fffff
-% 003c000000000004680fffff
-% 003d040000040011c00fffff
-% 003e010000008000201fffff
-% 002f000000000000809fffff
-% 002f000000022001403fffff
-% 003b80000000000a803fffff
-% 001fc10000000002417fffff
-% 000ca0400000012080ffffff
-% 000ce0000000000502ffffff
-% 000350000000000011ffffff
-% 0002a8000000002487ffffff
-% 0000d4100000000007ffffff
-% 0200aa00000000010fffffff
-% 00004504000000841fffffff
-% 00002a81000000201fffffff
-% 00001540000020013fffffff
-% 00000540400000043fffffff
-% 00000a50000000007fffffff
-% 000000a810000000ffffffff
-% 0000010200200004ffffffff
-% 0000008a02000000ffffffff
-% 0000001480080401ffffffff
-% 0000002540020007ffffffff
-% 0000000aa0800017fffffdff
-% 000000012001508ffffa00ff
-% 0000000290040b7fffd100ff
-% 000000002000eafffff400ff
-% 00000000200255ffffc840ff
-% 00000000500082fdfff512ff
-% 00000000200000fffffb55ff
-% 00000000000003ffefffffff
-% 000000000000077fffffffff
-%%EndPreview
-%%EndProlog
-
-%%Page: 1 1
-
-% remember original state
-/origstate save def
-
-% build a temporary dictionary
-20 dict begin
-
-% define space for color conversions
-/grays 92 string def % space for gray scale line
-/npixls 0 def
-/rgbindx 0 def
-
-% lower left corner
-0 0 translate
-
-% size of image (on paper, in 1/72inch coords)
-66.24000 85.68000 scale
-
-% define the colormap
-/cmap 256 string def
-
-
-% load up the colormap
-currentfile cmap readhexstring
-00 01 02 03 04 05 06 07 08 09
-0a 0b 0c 0d 0e 0f 10 11 12 13
-14 15 16 17 18 19 1a 1b 1c 1d
-1e 1f 20 21 22 23 24 25 26 27
-28 29 2a 2b 2c 2d 2e 2f 30 31
-32 33 34 35 36 37 38 39 3a 3b
-3c 3d 3e 3f 40 41 42 43 44 45
-46 47 48 49 4a 4b 4c 4d 4e 4f
-50 51 52 53 54 55 56 57 58 59
-5a 5b 5c 5d 5e 5f 60 61 62 63
-64 65 66 67 68 69 6a 6b 6c 6d
-6e 6f 70 71 72 73 74 75 76 77
-78 79 7a 7b 7c 7d 7e 7f 80 81
-82 83 84 85 86 87 88 89 8a 8b
-8c 8d 8e 8f 90 91 92 93 94 95
-96 97 98 99 9a 9b 9c 9d 9e 9f
-a0 a1 a2 a3 a4 a5 a6 a7 a8 a9
-aa ab ac ad ae af b0 b1 b2 b3
-b4 b5 b6 b7 b8 b9 ba bb bc bd
-be bf c0 c1 c2 c3 c4 c5 c6 c7
-c8 c9 ca cb cc cd ce cf d0 d1
-d2 d3 d4 d5 d6 d7 d8 d9 da db
-dc dd de df e0 e1 e2 e3 e4 e5
-e6 e7 e8 e9 ea eb ec ed ee ef
-f0 f1 f2 f3 f4 f5 f6 f7 f8 f9
-fa fb fc fd fe ff
-pop pop % lose return values from readhexstring
-
-
-% rlecmapimage expects to have 'w h bits matrix' on stack
-/rlecmapimage {
- /buffer 1 string def
- /rgbval 3 string def
- /block 384 string def
-
- % proc to read a block from file, and return RGB data
- { currentfile buffer readhexstring pop
- /bcount exch 0 get store
- bcount 128 ge
- { % it's a non-run block
- 0 1 bcount 128 sub
- { currentfile buffer readhexstring pop pop
-
- % look up value in gray map
- /rgbval cmap buffer 0 get 1 getinterval store
-
- % and put it in position i in block
- block exch rgbval putinterval
- } for
- block 0 bcount 127 sub getinterval
- }
-
- { % else it's a run block
- currentfile buffer readhexstring pop pop
-
- % look up value in graymap
- /rgbval cmap buffer 0 get 1 getinterval store
-
- 0 1 bcount { block exch rgbval putinterval } for
-
- block 0 bcount 1 add getinterval
- } ifelse
- } % end of proc
- image
-} bind def
-
-
-92 119 8 % dimensions of data
-[92 0 0 -119 0 119] % mapping matrix
-rlecmapimage
-
-887b857f84988b9c96988b989d999ab1bbbca8bde2efee01ee8ef4f2f1dfe1e0ddccb1ab
-aac7dbe0cb83cbcccdcc8dcca5bab0b5b7bf945b020403000283020001001f00
-8a768378809e99989c9ea29889989cafb6b7b1bfd8f0ee01ee8eeff1f0dfe1dad7c9b6a9
-bdc8cfd1cc8ecccdced0cca6b0adb6bbba8f6a080004008103001f00
-847f787283948a949993a7a69a9b9dabacad84adb9deefee01ee9eedefebe0dcdddacaa7
-969aadb9beaeb7c3c9cdc0a5acafb4b6bd91740a08008400030502002000
-9482897a8a96959996ab9aa39da5aeaaaba6bcd9f1ee01eea1f1e9e3e0ddd8c3b4928999
-a5b5cab4a8a0a9b7b6a3a2a9aaa6aea58a8169412d10002200
-01800177909899989da8a299a0aaacaaabaab6d1ebee96eeeff2d9e2cfb0b4a594757173
-5d7278616c6d6374696c8f6c88728d9c84776d6859563428320600010082020100830002
-01001600
-8e8e82817e96989a9eaca3a4aca8abaa01aaacb4cfeaf0eeeddcd3cfae9f968877725049
-2e4e58413b12275a182c5844564d656b776f73868e593225000b0e0001008102001900
-8f8081837f9a959a99a89f9ea4a5aaabaa9baab1cce8f0ece0dec0c59d7f6a65575c2317
-0914230b1306253f000d960d3b091c53516a4e606b807231432903060100010e09001800
-
-8f898a8d849d979c98a696abaaa3aaabaaa3aab0cae8ece2d7c3a97d6c75887354200403
-000100010400030100090004012345476a6682666b6685665d45310400870003010a0009
-16001600
-a086958b8c9a9c9a96aca9a7a9aaacabada9b3cdeadad5a9957173816e433b3300028102
-000b009a4b77736f576c53656e706252583a37223005150a0d0005040002001100
-8986818c83988e9597a5a901a995a8aaacb6ada9c8e0c9a79173706f5c4b3b1b06020900
-0b009b022c60413c4d502b535774716d585c3d300610323f4b00020a0204001100
-a184998d869a9c9e979b9fa6a9a4a9aeb7b0a8c1c9a496806d69424d571e0d030b040009
-0001020100824811008f00333f5b5567635a6b31170002001100010083081e0e001200
-81848783878b949998999caea9a5b0aaaba7abada9b4ab9a7e736e585566401929000d00
-81020083001f36048b0433536d68706255452e01008100010301840f2b260c0085000301
-000200030084030002010082000401
-908f8487898f9b9998a79fa9a59faab1b9ac01ac8b99806162427177591a0003000d0001
-019108103d4166767d9998747162560a130001000300870900051e180b06000800850102
-00010401
-8282838882888d9997999aaba0a499a3abadb2aca09b956f43415e6647090001000e0081
-02008700100d22466a8b9c849c756a545f895f4f463c281b030100048604000c18305e00
-82000200040081010001008102000000
-9c8e8287898f9b9896a4a6aaa0abadaaaeaa9c8e84493b495929160306000f0001028200
-04009c0003060d0b0a0604082f55686a675d36050401030008110c284f1f050481040302
-03870b1710191f2e2f36
-86898b8981909a999799a7a6a3a79eabafaca39587692c445e33110018003d17001b0089
-03072a38423e634a0f00900003000102123e565365697c898b90958f858f9294929ea5
-9b938f908993999a999fa9ac9da7aeb9b499836e4d353f4d25002a4e0282021a001b0001
-0294002a1a343a2b23162d190f000530366273799faab888b8bbb7bcc4c9c3cbc900c9
-8e999790889b97989aa9a8a999aaada98fa97d7155506c754a241130191e0007001b0081
-03000100921e31324443556f35310423000435608ba7bece01ce86cbcdcfcecfcdcf00cf
-
-9e89938c879398969aacad9b9a9faba89472635f586266333f0002052a00030081000181
-010004008c03060100010004000100010300830001050002009c09000110222741486460
-857832160007121f5395c4cbcecbcccbcac9cc01cc00ce
-a0898e838a9c9d9896a2aba6989aaa9d857f7b777977525f180600082604000102038103
-0005008603050d0002000301038105010101820003009e00080b040300023e514d466974
-948f987852300d3c3563c5cccbc7cccbcacc81cccb81cbcc
-988b8f878e9897969aada6aea3a9a3837c897e8482686b2f010081000383030002008100
-018101000100910500060b0416461700204124140302010002810200980006010e062f19
-4b3c4e426f797781808273624a352c3493cb82cbcecd01cd84d0cdcecfcb
-9e8c9c85899799979aabaea5a7978582a28b8d797b845b0c2c2d03002429040181010381
-03000200b5030a56697fa1683047748492696809061831394c4146524660535b5a442a62
-6b828d75654c4e4a1600426ea1d3d6d9dadbdad9dde2dd
-858880858689999a9996a4a89d9e8e8b8e9887826c628747467c21001758310c00010003
-00b61c002f768295a69563827c7b928184443f474b5963607081513a5369555335536070
-8589695150152510226087c8d0ded8dbd4dadfd4d7
-8a9794928d9c9a969eaca9a197a19e85977e7a6e2d8166688b961706034a180902000402
-008e00085035668e8fa7aca57b8c957b89a28986674b504642525e696a696e3631495149
-545169718f785d4f2e1924122d60b7d9d086d0e1dadcd7cadc
-9d9095948e8f9a989aa8aa9d9c84816c8b754f237f4f8596540c214a2101008200010002
-00b70b614e748192a5aaa4918d989188909967656f7e6765676067625b6d272b51453943
-5d70818872643d3505140324a9c6d9d0ddded7d0cbcf
-9d8a968a9190969b99afab9ba08c5c7c78634d387b7a9c5b462d00080006008100018201
-2100b8003c667f667d8398b4b99e9687a0a79e91888e84968c8a858a7879855d5f3a6758
-5b525a7170847163242146130a216fd3d5cddadde0d4cbd9
-b1989e9d9aa09ca0a7afa9ae9775848075844a425b8d88453c4d200c143b0d000218341d
-42556b9596938b97929da9b2b1aa9aa79aa891a698aeb3b4bca997958a887c785f617c4e
-546178678c64531d0a2e4f2e3d90cfd5d7e0d0dd81ddd0
-babcbebfc0bcbfc1beb2b1a59c6e82689b8852223773625475251e542c54000600114c53
-4f7a628b97b09cabb2a8aab9c0c8c1bdba9a989da9aabdbba0bb929798908788786c866e
-4c4d985e616c6f26031b7344267ecdcac8c5cad0cdc5
-96eeedf3f5e9eaebe8ddcdbc977072989d783e2e645b5468bf68676b615e4a0f00021a42
-655f9b9597a1a9a6999fc6cfd9dad3cdd3c3b0abadbeaebab7b0a9a1999d8a7c7f719188
-835475745d5663720a1167714467a8aaae84aeaca1a0a9
-dbeeedf3f6ebecede5dbcfc587727ca89a62223a414b5669819b8470575f150e083b646c
-939db5b8aeac9d999ccddddbdcdad2dcd0c1c4d1cac8bac1bba5aa9d94837e7b769a9b97
-7d78766c5f665b4b004b896f6aa5afb0b4b0b3b8bd
-afebecedecefeeebdab089975c648a9895545e662f49608f90999c6b4a434c5037456287
-9aafbdc4cec4bcc2c3bcc0d2dea5dedbd2d4c7c6dbdccfcdc7caa8aba5949285898f92af
-a7a07e877b66564b5339047e8a7ababb85bbc0bfbdbbc3
-02f09aefedeee9daaa807a4e6188809b787e6155698e94929f94746a686592655f3a889f
-b0cdc8cec9cfcdd2dacdbbb9c7db8bdbcccfd4c7d8ded9e0dfd1b198b1ac9e8d7a8d9c90
-b0c0b39e8f958c66564a57125a9f77bccd82cdcecd82cdcfd1
-aae4dae9f0edf1e8d9a88e6a376e687e8fa188566389878a838788718b91856973536ba7
-cdcad2ced3cbd6dbb0dbdfdcd1c4b7c3c2c8e0cbd5d8d6d9ded1bbaea9978487899b91ae
-bebaa9a1a297695d675c425a8674b6d0ded6cccacdde
-a6dabce8ebecedddd2b4926c353e5494a99b8267716a5e78828c8f97a2a398847a939d91
-adbecdcc82ccdedf82dfdbdd94dddbd9d1cad3dee1d9d1d2d8d3dbd9bcadaa9599898489
-9299b9bb94bbb8a9a7ac99776b4968588d7baed0cdd7cfd2cfd4
-acdab1e6edebecddd1a0643c184477a39a837d776a50736f7f95aaa5aaa9a3aca3afb9bc
-b8bcb7d0cadbdce2e0de02de9ad9dadfd9dbe1d6c8ced7e0dac0aea19a968b868da4bbc2
-c4b8b4aa90aa9d7f6e576b598370b2cacdcbcfcdcfcd
-a5e3d5edebedefdbc368241c2f6b7e6a65567865396a7d8b8f6a7093a3b3bccbd3c7d6d3
-dee1de81dee387e3dedce4dee8f0ec85ece5e4f2e6df93dfddd1cfc3b9a698979d8a8e9b
-9cb3bdb8c6bebb91bbbfb59d33597d51674aa3cbc8ccc7cdcccd
-9fe6dbecedf2efe6ba2a0e2d1f536e6a6c63573c445a67a3946c8592a4bac3cbd688d6e1
-dcdfdee8e9ecf19ef1e9e3edefebe1edecf0ebeeefe5e3ddd9bcc09baa9f9b9496a0acb4
-cac2bc93bcbdb7c9c1ab5a49796671468bbdb9bbb9bbb8b9
-84e6d8eaedf29cf2d88f000400063052483c472c2b3c5076ad858782a0b1becac9d4dedb
-81dbde01de87e8f0e9e5f1efeae7a2e7edeee7e8f1efeee4dccebcccb79ea8abb8a3adaa
-a8b8bdd0c3b4bfb8bfbcc38628528a526655747c726a686a6760
-a0e3d4e8edefdcc25f0c00070035131f184207182e4b92b78c848da9b1c5cfcbceda86da
-dbdee1e6eaeeb2eee4ecedf1f0eeedeeebdfdee0ded4c4c5bda79ba4b2c0d1aaaca7aebd
-cdc9bfb6bbb9bfb4aa90132841513f480d00010001000000
-88eedae9eee8bb6808000100960301032d660f1423027095a79d8b9a95b9bdcfcededadd
-83dde1e7ef88efeeeceeecedf1f0ee89eeeff0ecdcccbfb2acaa84aab7c1d3dc97dccdb2
-9da5a9becad3c1babcb7ab9c958a6b0b06425256058105000300
-87ebdee9f3dfaa28000200960100385966323c121171969ba69899a5b8c3d0cedadfdb86
-dbdae9e3ebedee06ee81edef9eefe8d6c7b7bec8cddcdbdddee0d8bf96a6a5bbc5cacbbb
-cccac8be9d9c330086003d554d0301000300
-a9f0e0e5f6cd823000150200012d49666a55493201648baeb0ac94a9adc1cdcad9dddcdf
-e1eeecf0eeedee05ee86edeeeae0d5ccd485d4dddbdddbdc85dcdedbcba79c889cb1b7ca
-d0c2c5cbc98ac9ae5e000d0325475a02000400
-89efe0e5eed4830900190001008e42566862534b3849558dadb6b79eaa8eaabdcdcedfdd
-dfdce3ede9edecf0ee06ee8bedece6e9efe5dedbdcdedfde92dedbddc6be9d98a2a8b9cf
-cacdcec5b78139188618070e556908000400
-86ece3e5e9c84e0002009b0108121f454845000a416eb0a1adbbabb2abc8ced5dbdfdee2
-f0f6ed82edeaee02ee86edeff0edefeeef85efedf2e5dedb82dbdcdd03dd93c0cfbbada8
-948d97becab4a089918f933b42004083400002000300
-88f0dfe4ebad4f0701008200030085000b231b19009500357db58483b2a5aaa9d0ddd9dc
-dedcedecedf2ebee09ee01ef87edeee2dcdfdedcdd01dd97dbdecccbc9baa9b49e8a8f99
-9899979ea79e5467425224018101000300
-88f3dde7efb94a1f01000100850a06110607008d00191370aa65679f8dacbbd7e3de8ade
-dddcf4e6dae4e5f0e2ee01ee8fefeeeceaedf0edf0eeefecede3dfdedd02dd81dacc01cc
-8db6acb8b5aa969d9a999497a597758375644a058105000400
-86f1dee2e8bf2e00820004008200120001009a010200140a4c974e278178a9b9ccdcdedd
-dedfe4ebece1e8eee9ee01ee88edefebe1ebf1ecf0ee86eeefeeeae1d9dd03dd81c5cd94
-cdcfbbbdb7b6bec7bec0a9a09c94868070650001000400
-8af1e1d8f3d4522d0e0006009300030007110c1f0f3c2c6750017778a5bbe2d7dd02dd83
-e3e8e3e48fe4f6e4e9f1f0ebeeefe3e8f1eeedefeca1eceef0eaddd8e1dbdfdebcd1cbcc
-d1d6cdbebbcdcacdc5ba9e979e8a7772090203000300
-9ef1eae0f1db7c2205010b381a00176e574359427a56594c044f6d96b7d2dfdd04dd89e6
-eadbe8e1dbe7e4f0ed85edecefeaefed81edff83fff6eeef82efe4dc9adcdeddd3caccca
-d8dcdececddbd9cdccc4afa5ac986855000201000300
-81efee85eeebe8a5340096005c7c1c1571b4d36e4538347156400f22749abad1d6dd02dd
-01e081dfde84dee5dcdbe682e6edef88efe0e9f0ecf0f8feff92ffefeeefdce0dbdfddd9
-cbd1cfd8dbdedad5dd85ddd2c9bfb1ab84ab97574300820003000300
-9eeef1f0eceabd240b2d8994324c94bfe186695903550065701475a0bbcfccdd03dd86e6
-ded9e0dde0dd8addedeeefeee2dee2efeced83edfaffef9eeff0dfdedcdddee0dddfe0de
-e0dbdecedde0dcd1bfafa8a789361d010001000300
-01eea5ecefecbb560269afae6f8eb9acbb9a927f3c2901002192a1acc5c6cad7dbe0e3df
-dee5dddedd84dde1e2eae08ae0d9d3dfdbd8e1dee1e8eb85ebecebdbdfdd06dd8fe1e0e1
-d4dbdadccec3b1a5aa936211000600
-01eebcecefe8ba6301b4cfcdbbbfb7a095acba8c660c0004599db6a862509bb9e1dfddde
-dbdfdee7deddded3d1d2c9cbcec2b9baa9bbb8babdcfdce9d9dadbdd06dd83dfdbcedd01
-dd83cbc7b0a984a98a7201000600
-01eeacecefe6ae5329c8d2cabddfddc99c8981603c2b43407bb2bdcebf8549477bcce3de
-dbdfdadeddd7d3c9c7c5c4bf8fbfb4a69b8c949eabbbc3c1bec6c5d9dd05dd01da8dd0ca
-d5d8e0ccbdaca9a2825c01000600
-89eceef2efe3a74a47dbdab7dac8dfdad9baad79655733578885b8c9cad1cac3a1653a8d
-b7d4e3e0d9dac8ccbdc3bdc7b7b8a9a37f8c868289a6bac7aab9c3cfd6dfe0de86dedfda
-e3d0cbcc01cc88c4b7ae9baca57e19000700
-acf9f5f0efe098595cdde0d7c9dcded5c7abb29697757e8c87b2c7d1d0d2dddbc5946b3f
-67c4bfd1cdc6d6dadbcf93cfbe7f34190c110b15326ab0b7bcbea8b6ccdedc81dcdb8fdb
-ddd1ccc0b8ae9c84987678919f7a000800
-a8f0ecf0efd7976f6cdcdfd4d5ece3e2d1bbc7c0bbac9daa9dc5cecbdadddedfded8c1ad
-714a60b2d3d9aad9e0e5d0824d5d86958980746f7561529fbfbbbcc3cee1dfdddfd8d7bf
-bba39f988a664b677a86957f04000700
-9fecfdf3f0cb988d8adedbd3e0f1e5d6ced2e3d0d6cbb3ac9dbec9cccedddfe0deaadee1
-e2dfcaa46463cadcdadf876493a7a4ada8a5b19c9ea3b28d5db8d4dddfdee5d9d4ccc6a8
-9973492d07890709023743524b0002000600
-8df1f2f1eebb8f7f70e5dbe0eee0dd03dd8adacfc9bb9d9ac2cecbd0dd04ddb2dadee5dd
-c9979fbce2d69e774d8e718fc4ada2aba1aab4b2988cdbdde2f3e6d4d0caae7b53270a27
-58755a3b330500150001000600
-98f7eff5efb88a774edfdee9e4d7e1dfe1dbded3c9cfbaa6a3c985c9d2d7dddedd03dd93
-e4dfdeddd08f6d77d5b19d5789739ddef4b2a9a89da8bebdc1a2d9deebe0ccc4b9ae8471
-10047794a1b5b9ada96e37040201000600
-88f6eef2eeac8b753fdb93dbe2d7e7eff0ded6ded4d6d8c9b9b8c7cadfdcde81dedd02dd
-81dbed9bedf2dddbcdc067a2c5b6896b7cb3f1e1cfaea5b7d0c4cab6acdddedc95dcc4b4
-7b9d47248d9f999da2afbbc0ae6200010001000500
-9bfdebeae8a08e7537d5dddeddeeedf2e8cdd4e7dad7c8b5bccccfdadd05dd97d9deebec
-efeae2cb6dc7dbdde0d6cac3b9c1b6bebcc9cecc9cccd198ccdce1ddd4bc95635a78857a
-4fa0af718a91b1770706014903000400
-95fff8ecd9a2958547ccdddadcedefeceed8e0eee0dcca02ca82d7dedd05ddafd7deeef2
-eae8dda885d1dfdddfe0cecac0b8b3b8bec9dddacec988cbdcdedddac36366b68b58335c
-aad3756587957a048504018d9b54000300
-9bf1e9eddbc1b6a96fc6dbdde6e4f2edefdde9f1e0dbc9cfcaccdbd6dd05dd8dd9e4f0ec
-e5eeeaa3acdedcdbd8cc88cccecabfb7bfccd8db98dbd2b286d3dddcdddec35b79aea49c
-768ebcc382685e977b038403005a44000400
-82f0eee996e9dac9c69aa5d6dce3dde4e1e5d9ecf0ded3d0c9cccfda81dadd05dd8adfea
-e9eeefeee3a2aae0dc01dca8d5cdcac4c8d0d9dfe1d6deddcc95c2dcdedddccb769fbdcb
-d2baa9afad9f978aa778040500040005000300
-01ee8beff0e1dcc8b37accdfd6ddec87ecddc7e6f0decacc8fcccad0d7dfded4ccdbe0dc
-dee0edeff08df0e8deaeabdcdad6cbcdd4dedcde95dedcddd6d4dddcc8a7cdd8dddcd6c8
-a5b4babeb8b9bc01bc8bb0aab6b9440e2300170004000300
-01ee01ef89e9dbd0c05e99d4dde4f091f0ebd3eeefe5cacccbcad0d2d9d6d0cdd9dc83dc
-dde0edb2edecf2e8e6b08fdee3dad3dadfdedfdadbdedacededddbb1c1cdcfd9ddd7cfa9
-b4babcbbb4bbb9b7adb0bcb8685a720f5b01000400
-02ee01ea89dbd3c35f50c0e0ecf0ed8cedd9ecede1cbcccbcdd0ddd9d588d5d3dddee9e8
-edf1f0b2f0eee7dcc976d2dddeddd0dcdad3ccdcdddbcedcded9a1c6d7d1d8e0ded1b2b0
-bbc8c2babbbab8c2bebcb6b0c4c683840002000300
-01ee96f0eaecdbd7ca81088bdaeeefecf2deecf1dfcbcccacbd881d8de86decad0dcdef0
-ef81efeb8aebeff1ddf0e26cc4ddd9de84dedfdad4e08ce0dbdfd8d9e4dda5c9dbe0dfdd
-83ddcfb8bc83bcc0cdbb02bb8acdcec9bdd6f9fbe04603000400
-02ee8aeff1eee1ce890927bce7ef97efeaefe1efdfcdc9c6cedddbdce0ccd8dce2dfe4e9
-e6e8ef87efece5d8a69edfde82dedbd085d0cbdfe0dbe1a0e1dcedcbd2dae0d8d1d8d3d1
-c6afc2c7beb6bec3c9cdc7bfc2f3fdffe84d0004000300
-05ee8bdecfa6010035d0e0dcdeebf08bf0e0c9cabccadfdce0dbcddda2dde5eee0dee8f0
-efeeedefe9daa4d8e0dbded5d4d7dfecf0f3dec5b0d5e1dbe1dedadc95dcd5c9afb7c9ce
-cac2c6bfc4c9b9c0fcebcfbd0003000400
-01ee88ecefe5e0d7ceab320092008dd2dfdeebecf1dfc9cecacdd4deddded8df92dfdeee
-def0f4e2eaedefedf6e8daa0d5dcdfda98dae0dde5e0dcbcb3cbcfd1cbd4dee0dedfdad8
-aeb9c8cbcacc8bccc9bcccc4b996a0ab4907000500
-01ee88eff2d2acd2cbb476028b021589c9deeee9f4d9dfd2cabccadadce2e0d9e2eadcdd
-e3e6f0dde8edf0edeceee9b896c9dfdbdcd6dfddd9a09dcecdc7cdcad7dbdedfdadcd7b5
-adcbcacbcecbcac0b9bca84f964e000700
-01fc89fdffdbbae0dabd8d0c008c00389accdce1dfddd3cdc6d1dd8fdddcdddbdfe1e4f0
-efeeede6ebeceeef81eff08ff0e7ba898cbccabdbc969bb9cccec9cd99cdd6dfdadcdfd8
-dcd8bd67bdc9ccc8cbcacbc0b89d79320004000600
-01fe01ff82e2bede8adec38e07040132b3bab8bb94bbc9cbcdcacbd4dedfdbdddcdee0ed
-eeecf1e7eeef02ef8eeee9e7dcd6c8bbbcc7ced8c1c6dddc85dcded0daddde95deede5dd
-d7cba3678dc6cecbcacbc1ac6a00060007000600
-01ff89feffebcde3dcbf8c0d008b003bb3cadde0dfcac9cdcacc84ccd8dcdedd9adddbe2
-f1edeff0ebedf0f1ecedeadde2dbcad0dfe6f2e0e4cacedf01df90dbdedde0dcdbf3eadd
-d5ccaeb07f8faab685b6a185505f0082000d000700
-03ff90e7cde1dac4810a070041a9cbdcddded2cd01cd8ccad9e0dddbdedde4ebedefeaef
-02ef8ce4dfdde2dfd2cad4daedebefdd87ddd9cbdbe0dbdcdd95dddee0e2efecd9ddc8ac
-b9ccaf968b7f8ba2aeaf03018101000700
-03ff90ebd6e6dfd09811010044adccdbdadedbcda8cdcac9dedcdddcdee2eaf0eeede4e6
-f1ebeee4eae9ddd9c9d1e0def1ecede2dce0d3c5ced8dbdadfdc82dce3ef8fefdde1c9a6
-b4cacfd5cdc8c9ceb8ab028102000800
-03ffc5ecd3e5dcc9b143000449b3c6dddcdddec7cec9cad9dcdddcdee0e6eff1f0e6dde1
-e0e4eee0dcd1c8d4d9dfdaecf0eadadedce0dbc6cfcec0cad2d9e0e2e3dcdbb999a6cacc
-ce88ced3ccc8b7ae0003000800
-01ff98f4f6ecdae2dbc7bf93320576acc8dddbe1dcc0c9cecbd9dddc91dce4e8f0f4ebef
-e3f6e7dddee0c9cad4dedd01dd8be4f6eee3dbebdee1dedcddd985d9bec4c0bed090d0cb
-b8738dbdcccacdcecccecab5a802000900
-90fefdf7fdecdbeaddcdc0a1810582b7c9dc90dce0dcc5cccfced7dcdedcdee6efedefec
-90ecf0ebdbe1cddad9dbdfdddbdfe0e4dfeb96ebeee5e4dbd9decdcfcdc2b4bdc5b49161
-92acc3ccc9cb87cbcdcbbcad5502000900
-01ff98fbffecdff3e5d8bab6883d92b6ccdadddfddc5cbcccfd6dbdf8fdfdde4efebede3
-e1e2eadfd9cde0dedc02dca3dedddee1f3efeeedefebd9e2d6cccdbeaaa5947e6885a9b7
-bdc7cbcccdc7bcb2a51501000900
-92fafffdffecdfeeeadad0bb886e98bbc6d8dedd83ddc3cacc8eccd8dcdde2e7e4eaf0ef
-eddfeeefdc84dcd5ced5dba0dbd9e2dadfe6e3ecf0efecf3eddcdedbceccc8d4c2aea3a6
-95afacb9c2cccbc2bb84bbae7a07000a00
-03ff8cede1f0eedfdac19d86afc4d1dc84dcdeddc0cb88cbcdd0dedcdeebe7ee02ee99f0
-ede8e1d9d3c0bcbbced6dbdadfd8dbdfe6e7edefedf0dedad981d9ce92ceccc1bab2a6a5
-aebabdc9bcbbb9b39f0f01000a00
-82fcfdff8effeddff0eee4deccae629dbccfdfdc8cdcdbbfc3cccbd4dedcdadcddee04ee
-8defe2dbdecec2a19db0b6b7c0c7cb86cbcedee0e3dfd983d9e4dfd692d6cbccc9b7b4ab
-afb9bcbac3bdbcc1bb7307000b00
-82fbfdff99ffeddef1edeae4cea23397bad0d8dddfdac9c4cfcbd2dae0dae381e3ee02ee
-a0f1efedf1e3dadeccb0afc2b3aeaab9b7bcc9cdcfd0cbd0cecadbd4d1c7ccc0b7ac84ac
-aebec4ca88cac4bfd1aa1b0003000a00
-03ff95edddf2ecede1d165238cbdcbdddbdedfd0c5cec7dade02de81e0ee02ee01ec01ee
-a7eadce8e7d4bce1d3dfd0cac0babecacecbcdc2bdbac0bdbbbcabac9b9d9aa6bfccd7c9
-cbd0cb9300820008000a00
-02ff84fde8dfeff089f0df9121236bb6d2d6de90deddd8c8cbcdd7dde0dddfebf0f1efed
-ee02ee92ecdbefeee9d4cbc3e7deddd5e4ead5dbd2bbc382c3b5a891a8aba69a8c88858f
-b7cdddd6cfc7d5bf1300820004000a00
-03ff83ecdfeff08ef0db54072327a8cacedcdfded8c8cb83cbd3dade87dedbe6e3f0efea
-ee01eeabefece0efedf0e4bdbbc8c9dbd7e3f1e3efeadef0e8d4b6bfb0a390685e8bbcdc
-dddee0c9cdbfb702050002000a00
-87fdfbfffeeddfeff091f0ba3550082b55b4cad8dcdfdccecccdd9df88dfdcdbdcdff0ee
-edee01ee01eb8ee5eaedeeecd0c2bbb6c9cae1efeeef90efecfffaeedfe9deb5c37b98ab
-c6dcdedc85dcc9c4be8800820002000b00
-82fefbff97ffe8dff7f5eb95409e322f359acfdeddf2dbd5c7cbd8ddde87dedddbe9eff1
-eaee01ee95ecf3ebedeff0ecd9cac4bcb9bccfdddeefeceefbfaed8aedf3dac8b9889eb6
-d0dedc01dc84c8b8aa39000e00
-81fbff01ff92f2e6fbf4f09c2f5c324c2651d5d0dbece2d9cc88ccd8dddedfdae3d7e882
-e8f0ee02ee85f0e9efeeefed98eddbcec4bac0cdcabfdbe1e8eceee8f0edc5988a8f97ba
-d7de86dedcd7c1b288000f00
-82fbfcff97fff6eaf1faf0b9552e2c54293c69d1d8dfead8d4cedadedd82dddbe584e5de
-f1ebee01ee84efedecefeea2eeefeeebe3dacac5cfd8cfc8cecfcdd2d3c7af988f988f9a
-c8dedddcdecdaaa90201000e00
-81f8ff93fffeeef2edfde1cba24a162e39315180d9deeedb8cdbd0dadedddbdedddbdee8
-f0ee01ee01ec83eeecf0ee98eeedf1ece0dbd5d0ddd9d4d3bbbec3c0c4b7aa9a8d8ea9cf
-dd88dde0d4b7a50f000a000e00
-82f8fcff95ffeeebf1efc9dfdd943d509ba0545b8becdfe8dacedb82dbe0dd01dd88e3e2
-ecefeee1eeefee82eef0ee01ee81f0ee8ceee8e4dddcddd8cdc9b8bab8b987b9acab9e90
-98b8ce87cedbd6b9a05505001000
-9bfcfffefff1eff2eed5e4e3d46863a999545260a6f0ede6e0d9dbdcdd01dd87ded9e6ed
-f0e1e5ef01ef81edee02ee9bedefeae1dedcdfdbdad2cacdcac2b4ada0908d9dc3cecfcd
-b7a19a00820003000f00
-81feff01ff96fbeaefdbedf0ebf1d682656d72637367d5e8efdfced8dd02dd8ad8dee2da
-dfebe3e8ecf0ee02ee81efec87eceaf0eadcdedfdd94dde1cccecbceb8b7adabb8bccacb
-c6ac980a0601001000
-81feffa2fffef9e9dacbe0dfdde6e7c3747f6c767b7d90bcfaf5dcdedddadddedfdedbde
-dfe0da81daef8eeff2eff0eedbeae6eeefedeadfdbde91dedccccbc9cec1bac2b6bfbdd4
-cba9a11b028102001100
-81fcff01ff88f2dbc2c6ede0c6d2f090f0b97769748779747bbcf8e4ddd3d7d8dd01dd01
-de8ce1e2dde1deefedeeeceee2eef081f0ee97eef0eddcdeddcccbc3cfcdc1bbb9b0bccc
-d1ce89150002001200
-a5f7fefffce9dcc7d8eddfdbeadcf3f4ad7277829a777b88c2feedd8d4dee0e2dddfdbdf
-e0dddc8bdce4eff1ecf2e3e4e7f1eeec87eceedcdedcd5cdcc8cccc9bebac0bfc2cbcac1
-3005001400
-89fcfdf5edddccd9c9dfd99ad9f3eef4feeb7f7d93ea977b8284dffff3e3cecdd6cedcde
-dcdddc8fdcdfdee7f0edf0dae0dce8edf0eceedd89dddbcecccacccabfbcba85bacbccc0
-9d00820001028102001100
-81f0eca2ecf2d9ddd6d1ead8e0f0f3edf1fef19a89907672778c87bbfffbf3d5cecad4e1
-dedcdd03dd01ef8dedeee4dfdcdfe4dddfdbdfd7c8ca8bcac4c7c8bfbbbcd1cca0100016
-00
-82efebeda1ede5ece2ddece0eeeadee8f1f9ffe999837b7a7d748e87bdfcf5f2d6cdcecc
-d9dfdd03dd84e1ecefdddb82dbdfdd85dddadfdcded981d9cb01cb88c5bcbeb8c3cebc68
-001700
-02ef9dfadbdcdde9f1e4f5e8e9e2ebf5f8f9f09c878c827e878398b0fffbffd8cb84cbd0
-dddcdd02dd8bdce0efdfdbe1dfdedddedfdd88dddcdfd1cfcccdbfae87aec8c7a8000801
-001500
-8eeff5fcfdf3e6dcdfe1d7f4f6e1dbf181f1ff01ff85ee8f9c88828785878a8dbff7ff86
-ffddd1ccd1dedd02dd8edadddff0e5f0e2dcdddedbdedddedb8ddbddd7d2c8bcb8bcba76
-0a0007001500
-04ff81f7ec8aecf0d3d4d8ecf0e1f0eefdaffdffefaa8f9087998b8c849bc2f7faf4dbc7
-d5dddfd9d2d9dedfdbdde7eae2e0e3e2e1dfdddadddedddaccc3babb81001900
-01fd02ff8cfce6ddf9d8f2ebe1e8f4f7f1ff01ff99fcf3b08d93e2de9b968c9ab8fafffa
-dacbcfd9d4dcd2c9d1dddc8adce7ebe9efede7dbdddcde84dedde0c9c183c1af50001900
-
-03ff87fefffadef0dcecfb87fbecedf8f2fffeff8dfffafeb194d5da98918d869ee3ff94
-fff6d0cbcecacfcbcfced7e1dcdeecefeef0e2dcdd83dddfdedd87ddd5c1b0be00080018
-00
-05ff8ffef9f7deefecfff9eff1eff5fffdfffd93fdfaaa9d9b9295848f8290d5fdffe9ce
-c8ccc6cd86cdcbc7d9dfdbdd91dddfdedadedde1dce0dbdfc4b89f5b0005000500010183
-02000200860001000100010001008302000600
-06ff8cfeffe1faffefeaf1edd5dae6ff81fffe88fefcfbe1a7958d868b818b8c838c9cde
-fc84fce2cccace86cec7babec6d0e082e0dee081e0da8adadddfd9ded2bb992407000c00
-820102008200030003008304000300
-08ff8ce8fae5e9e0f1ecd9e9e7e9feff02ff85fde8af93898585858c8586b0ff90fff8e3
-ccc9ceccbcbabdbfcccfcdd4d1cf8ccfd7d0ced3bea2320c04000a000100030181030001
-0084030408253d833d5d63718371650001810100
-07ff8dfdebf1edebdcf0ece2ebfdfffdff01ff8cfbfffefaa79c9686838d88a9ff01ff91
-f5ddd2c9cfbebbbaaeabb1b0babcc7ccbcbd84bdb1a321008400026b020001000301900b
-294c667d8699a0acbab8bfccc3b214000100
-08ff85fae0f7eeeaef84efe0e6fdff82fffaff04ff90e4b59189a5aa8b9afefffdffede3
-d4cfb9acb9b4afa19c968a868a87927c6367530a0100164a0402082a243e33273c6a7d95
-a4a9adb9bbc4cecdcfceca08000100
-09ff8aefdaf4f9eaf6e8e3ecefff05ffa3fcffeecc8febe6949ffffefffefffadecac2b8
-a69b867f778f86858a68405a27220003009a00030001000a280f0022435f7e96a0adb1c1
-c7c9cbccd0d2ca0001810100
-08ff81feff8bffdbebf4fef1f2f6f9ecf3ff03ff82fefdfe84fef39689868286f9ff01ff
-93fefcffe7c1bdb2a88b6e8988918786622c2605008a000d0900040001000911088c0823
-4874829aa3acb9c5c7c9cb81cbcd85cdae01000300
-0bff8bfdf0ecedeefbf5e5ebfffcff05ff86feffe08e7271ff04ff90fefad1b7c0ac99a7
-c8c2a89e8d793e0e0001008559a516000100050090244f668695a1a7b4bbbebdbbb9bea5
-08000100
-0cff8afdfffde7f0fcf2e6eceeff05ff81fdff85ffefa687fbff05ff8defe4bfc4abd1f1
-ece8dec1850300020087236e070100021b0003008a03051a5460686d7a82888985898281
-4103000100
-0cff8aefe2f4e3d3eefedce4f2ff05ff81fdff01ff82fbc0ff05ff8efcfaebe4bfc2e7f0
-efeecf862f04000100810600820002008300057b00040081030003008406050301038403
-060001000100
-0cff8afaebefe7ebeae5f6f3eeff06ff81feff83fffcfdff03ff99fefffedfeef4dfceff
-f3ed8335371d890602010201000a00010006008104008200010082000100820002000400
-810200
-
-%
-% Compression made this file 93.96% of the uncompressed size.
-%
-
-
-showpage
-
-% stop using temporary dictionary
-end
-
-% restore original state
-origstate restore
-
-%%Trailer
diff --git a/Master/texmf-dist/source/generic/xypic/latin1.sty b/Master/texmf-dist/source/generic/xypic/latin1.sty
deleted file mode 100644
index c337fb139e9..00000000000
--- a/Master/texmf-dist/source/generic/xypic/latin1.sty
+++ /dev/null
@@ -1,242 +0,0 @@
-%% $Id: latin1.sty,v 3.4 1997/05/18 03:04:44 krisrose Exp $
-%%
-%% TeX 3 support for ISO 8859-1 (Latin 1) characters.
-%% Copyright (c) 1990-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% This file is not part of the Xy-pic package for graphs and diagrams in
-%% TeX but is distributed with it on the same conditions.
-%%
-%% 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, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-
-% NOTE: THIS FILE CONTAINS NON-ASCII 8BIT CHARACTERS!
-
-% USAGE: This should be input using the command
-%
-% \input latin1
-%
-% This will then make those ISO 8859-1 (Latin 1) characters that are present
-% in plain TeX available, and for AMS-TeX users, those available there as
-% well (these are marked %%AMS below).
-
-% First we pull the standard trick of dropping out if already loaded or if
-% this is not TeX 3...
-%
-\ifx\inputlineno\undefined
- \errhelp{You may continue but some things will not typeset right.}%
- \errmessage{latin1.sty requires TeX version 3---please update}%
- \endinput\fi
-\expandafter\ifx\csname latin1.tex\endcsname\relax
-\else \message{[already loaded]}\endinput \fi
-\expandafter\edef\csname latin1.tex\endcsname{%
- \catcode`\noexpand\@\the\catcode`\@\space
- \expandafter\let\csname latin1.tex\endcsname=\noexpand\empty}
-\catcode`\@=11
-%
-% Next we define some shorthands that users might like as well.
-%
-\def\forcemathdef#1#2{\gdef#1{\relax\ifmmode#2\else{$#2$}\fi}}
-\def\forcemathchardef#1="#2#3#4#5{\forcemathdef#1{\mathchar"#2#3#4#5 }}
-%
-\def\mathtextdef#1#2#3{%
- \gdef#1{\relax\ifmmode\def\next{#2}\else\def\next{#3}\fi\next}}
-%
-\def\missingchardef#1{\gdef#1{\space}}
-%
-% Code for slashed fractions [from TeXcercise 11.6]:
-%
-\def\slashedfrac#1#2{\hbox{\kern.1em %
- \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.11em %
- /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}}
-%
-% Assumes that columns 3-8 are already set up as ASCII.
-%
-% ISO 8859-1 column 10
-%
-\catcode`\ =\active \let =~
-\catcode`\¡=\active \chardef¡='074
-\catcode`\¢=\active
- \forcemathdef¢{\mathord{\mathpalette\c@ncel{\fam=0\mkern2mu c}}}
-\catcode`\£=\active \forcemathchardef£="0424
-\catcode`\¤=\active \missingchardef¤ %%Missing: currency
-\catcode`\¥=\active \def¥{\yen} %%AMS (msam)
-\catcode`\¦=\active \missingchardef¦ %%Missing: brokenbar
-\catcode`\§=\active \def§{\S}
-\catcode`\¨=\active \mathtextdef¨\ddot\"
-\catcode`\©=\active \def©{\copyright}
-\def\copyright{{\ooalign{\hfil\raise.07ex\hbox{c}\hfil\crcr\mathhexbox20D}}}
-\catcode`\ª=\active \forcemathdefª{^{\textrm{\b a}}}
-\catcode`\«=\active \missingchardef« %%Missing: guillemotleft
-\catcode`\¬=\active \forcemathchardef¬="023A
-\catcode`\­=\active \missingchardef­
-\catcode`\®=\active \def®{\circledR} %%AMS (msam)
-\catcode`\¯=\active \mathtextdef¯\bar\B %%AMS
-%
-% ISO 8859-1 column 11
-%
-\catcode`\°=\active \forcemathdef°{^\circ}
-\catcode`\±=\active \forcemathchardef±="2206
-\catcode`\²=\active \forcemathdef²{^2}
-\catcode`\³=\active \forcemathdef³{^3}
-\catcode`\´=\active \let´=\'
-\catcode`\µ=\active \forcemathchardefµ="0116
-\catcode`\¶=\active \def¶{\P}
-\catcode`\·=\active \forcemathchardef·="2201
-\catcode`\¸=\active \let¸=\c
-\catcode`\¹=\active \forcemathdef¹{^1}
-\catcode`\º=\active \forcemathdefº{^{\textrm{\b o}}}
-\catcode`\»=\active \missingchardef» %%Missing: guillemotright
-\catcode`\¼=\active \def¼{\slashedfrac14}
-\catcode`\½=\active \def½{\slashedfrac12}
-\catcode`\¾=\active \def¾{\slashedfrac34}
-\catcode`\¿=\active \chardef¿='076
-%
-% ISO 8859-1 columns 12-15, by letter:
-%
-\catcode`\à=\active \defà{\`a}
-\catcode`\À=\active \defÀ{\`A}
-\ifx\inputlineno\undefined\else\uccode`\à=`\À \lccode`\À=`\à \fi
-\catcode`\á=\active \defá{\'a}
-\catcode`\Á=\active \defÁ{\'A}
-\ifx\inputlineno\undefined\else\uccode`\á=`\Á \lccode`\Á=`\á \fi
-\catcode`\â=\active \defâ{\^a}
-\catcode`\Â=\active \defÂ{\^A}
-\ifx\inputlineno\undefined\else\uccode`\â=`\Â \lccode`\Â=`\â \fi
-\catcode`\ã=\active \defã{\~a}
-\catcode`\Ã=\active \defÃ{\~A}
-\ifx\inputlineno\undefined\else\uccode`\ã=`\Ã \lccode`\Ã=`\ã \fi
-\catcode`\ä=\active \defä{\"a}
-\catcode`\Ä=\active \defÄ{\"A}
-\ifx\inputlineno\undefined\else\uccode`\ä=`\Ä \lccode`\Ä=`\ä \fi
-\catcode`\å=\active \letå=\aa
-\catcode`\Å=\active \letÅ=\AA
-\ifx\inputlineno\undefined\else\uccode`\å=`\Å \lccode`\Å=`\å \fi
-%
-\catcode`\æ=\active \chardefæ="1A
-\catcode`\Æ=\active \chardefÆ="1D
-\ifx\inputlineno\undefined\else\uccode`\æ=`\Æ \lccode`\Æ=`\æ \fi
-\uccode"1A="1D \lccode"1D="1A % Scandinavian...
-%
-\catcode`\ç=\active \defç{\c c}
-\catcode`\Ç=\active \defÇ{\c C}
-\ifx\inputlineno\undefined\else\uccode`\ç=`\Ç \lccode`\Ç=`\ç \fi
-%
-\catcode`\è=\active \defè{\`e}
-\catcode`\È=\active \defÈ{\`E}
-\ifx\inputlineno\undefined\else\uccode`\è=`\È \lccode`\È=`\è \fi
-\catcode`\é=\active \defé{\'e}
-\catcode`\É=\active \defÉ{\'E}
-\ifx\inputlineno\undefined\else\uccode`\é=`\É \lccode`\É=`\é \fi
-\catcode`\ê=\active \defê{\^e}
-\catcode`\Ê=\active \defÊ{\^E}
-\ifx\inputlineno\undefined\else\uccode`\ê=`\Ê \lccode`\Ê=`\ê \fi
-\catcode`\ë=\active \defë{\"e}
-\catcode`\Ë=\active \defË{\"E}
-\ifx\inputlineno\undefined\else\uccode`\ë=`\Ë \lccode`\Ë=`\ë \fi
-%
-\catcode`\ì=\active \defì{\`\i}
-\catcode`\Ì=\active \defÌ{\`I}
-\ifx\inputlineno\undefined\else\uccode`\ì=`\Ì \lccode`\Ì=`\ì \fi
-\catcode`\í=\active \defí{\'\i}
-\catcode`\Í=\active \defÍ{\'I}
-\ifx\inputlineno\undefined\else\uccode`\í=`\Í \lccode`\Í=`\í \fi
-\catcode`\î=\active \defî{\^\i}
-\catcode`\Î=\active \defÎ{\^I}
-\ifx\inputlineno\undefined\else\uccode`\î=`\Î \lccode`\Î=`\î \fi
-\catcode`\ï=\active \defï{\"\i}
-\catcode`\Ï=\active \defÏ{\"I}
-\ifx\inputlineno\undefined\else\uccode`\ï=`\Ï \lccode`\Ï=`\ï \fi
-%
-\catcode`\Ð=\active \missingchardefÐ %%Missing: Eth
-\catcode`\ð=\active \missingchardefð %%Missing: eth
-\ifx\inputlineno\undefined\else\uccode`\Ð=`\ð \lccode`\ð=`\Ð \fi
-%
-\catcode`\ñ=\active \defñ{\~n}
-\catcode`\Ñ=\active \defÑ{\~N}
-\ifx\inputlineno\undefined\else\uccode`\ñ=`\Ñ \lccode`\Ñ=`\ñ \fi
-%
-\catcode`\ò=\active \defò{\`o}
-\catcode`\Ò=\active \defÒ{\`O}
-\ifx\inputlineno\undefined\else\uccode`\ò=`\Ò \lccode`\Ò=`\ò \fi
-\catcode`\ó=\active \defó{\'o}
-\catcode`\Ó=\active \defÓ{\'O}
-\ifx\inputlineno\undefined\else\uccode`\ó=`\Ó \lccode`\Ó=`\ó \fi
-\catcode`\ô=\active \defô{\^o}
-\catcode`\Ô=\active \defÔ{\^O}
-\ifx\inputlineno\undefined\else\uccode`\ô=`\Ô \lccode`\Ô=`\ô \fi
-\catcode`\õ=\active \defõ{\^o}
-\catcode`\Õ=\active \defÕ{\^O}
-\ifx\inputlineno\undefined\else\uccode`\õ=`\Õ \lccode`\Õ=`\õ \fi
-\catcode`\ö=\active \defö{\"o}
-\catcode`\Ö=\active \defÖ{\"O}
-\ifx\inputlineno\undefined\else\uccode`\ö=`\Ö \lccode`\Ö=`\ö \fi
-\catcode`\ø=\active \chardefø="1C
-\catcode`\Ø=\active \chardefØ="1F
-\ifx\inputlineno\undefined\else\uccode`\ø=`\Ø \lccode`\Ø=`\ø \fi
-\uccode"1C="1F \lccode"1F="1C % I'm Danish!
-%
-\catcode`\ù=\active \defù{\`u}
-\catcode`\Ù=\active \defÙ{\`U}
-\ifx\inputlineno\undefined\else\uccode`\ù=`\Ù \lccode`\Ù=`\ù \fi
-\catcode`\ú=\active \defú{\'u}
-\catcode`\Ú=\active \defÚ{\'U}
-\ifx\inputlineno\undefined\else\uccode`\ú=`\Ú \lccode`\Ú=`\ú \fi
-\catcode`\û=\active \defû{\^u}
-\catcode`\Û=\active \defÛ{\^U}
-\ifx\inputlineno\undefined\else\uccode`\û=`\Û \lccode`\Û=`\û \fi
-\catcode`\ü=\active \defü{\"u}
-\catcode`\Ü=\active \defÜ{\"U}
-\ifx\inputlineno\undefined\else\uccode`\ü=`\Ü \lccode`\Ü=`\ü \fi
-%
-\catcode`\Ý=\active \defÝ{\'Y}
-\catcode`\ý=\active \defý{\'y}
-\ifx\inputlineno\undefined\else\uccode`\Ý=`\ý \lccode`\ý=`\Ý \fi
-\catcode`\ÿ=\active \defÿ{\"y}
-%
-\catcode`\Þ=\active \missingchardefÞ %%Missing: Thorn
-\catcode`\þ=\active \missingchardefþ %%Missing: thorn
-\ifx\inputlineno\undefined\else\uccode`\þ=`\Þ \lccode`\Þ=`\þ \fi
-%
-\catcode`\ß=\active \letß=\ss
-%
-% ISO 8859-1 columns 12-15, symbols:
-%
-\catcode`\×=\active \forcemathchardef×="2202
-\catcode`\÷=\active \forcemathchardef÷="2204
-%
-\csname latin1.tex\endcsname
-
-% $Log: latin1.sty,v $
-% Revision 3.4 1997/05/18 03:04:44 krisrose
-% Package, now...
-%
-% 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.8 1994/11/07 04:40:31 kris
-% Abandoned.
-%
-% Revision 2.7 1994/03/08 02:06:01 kris
-% Release 3alpha.
-%
-% New for Xy-pic 2.7 based on latin1.doc of the XPPT distribution.
diff --git a/Master/texmf-dist/source/generic/xypic/movie.cls b/Master/texmf-dist/source/generic/xypic/movie.cls
deleted file mode 100644
index 7c3f29d73f6..00000000000
--- a/Master/texmf-dist/source/generic/xypic/movie.cls
+++ /dev/null
@@ -1,325 +0,0 @@
-%% $Id: movie.cls,v 3.4 1997/05/18 01:14:25 krisrose Exp $ -*-latex-*-
-%%
-%% ``LaTeX Movie'' document class for DVI animations.
-%% Copyright (c) 1994-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\NeedsTeXFormat{LaTeX2e}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Version.
-
-\def\next$#1: #2 #3${#2}
-\edef\next{\noexpand\ProvidesClass{movie}%
- [\next$Date: 1997/05/18 01:14:25 $
- Movies in LaTeX v.\next$Revision: 3.4 $.]}\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=<dimen> (makes \pixels{<number>} a valid <dimen>; default: 1in/300)
-% dpi=<number> (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=<dimen>
-% width=<dimen>
-\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=<fraction> (set the duration of each frame to <fraction> seconds)
-% fps=<number> (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 [<fraction>] {...}
-%
-% Produce scene of <fraction> 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 <shape> modifier: \drop[<colour>][!\F\lighten]<object>
-% use as a <shape> modifier: \drop[<colour>][!\F\darken}]<object>
-%
-% \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.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/Master/texmf-dist/source/generic/xypic/pnmrawtopcropwhite.c b/Master/texmf-dist/source/generic/xypic/pnmrawtopcropwhite.c
deleted file mode 100644
index a575cfd2b80..00000000000
--- a/Master/texmf-dist/source/generic/xypic/pnmrawtopcropwhite.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/* $Id: pnmrawtopcropwhite.c,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-**
-** Crop off top white lines from raw PBM file (efficiently :)
-** Copyright (c) 1991-1998 Kristoffer H. Rose <krisrose@brics.dk>
-**
-** This file is part of the Xy-pic package for graphs and diagrams in TeX.
-** Copyright (c) 1991-1998 Kristoffer H. Rose <krisrose@brics.dk>
-**
-** The Xy-pic package is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by the
-** Free Software Foundation; either version 2 of the License, or (at your
-** option) any later version.
-**
-** The Xy-pic package is distributed in the hope that it will be useful, but
-** WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-** or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-** for more details.
-**
-** You should have received a copy of the GNU General Public License along
-** with this package; if not, write to the Free Software Foundation, Inc.,
-** 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-static const char Id[] =
-"@(#)$Id: pnmrawtopcropwhite.c,v 3.7 1999/02/16 15:12:50 krisrose Exp $\n";
-
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-/* Globals */
-
-#define PBMRAWMAGIC "P4" /* Portable BitMap magic cookie */
-#define PGMRAWMAGIC "P5" /* Portable GrayMap magic cookie */
-#define PPMRAWMAGIC "P6" /* Portable PixMap magic cookie */
-#define MAGICSIZE 2
-
-static char *me; /* program name */
-
-/* Subroutines */
-
-void oops(void) {
- fprintf(stderr, "Usage: %s\n", me);
- exit(1);
-}
-
-void panic(const char *mess) {
- fprintf(stderr, "Error: %s\nUsage: %s\n", mess, me);
- exit(2);
-}
-
-void skipcomment(void) {
- int c;
- while(1) {
- switch (c = getchar()) {
- case EOF: panic("premature EOF on input"); break;
- case '\n': return;
- default: break;
- }
- }
-}
-
-void skipwhite(void) {
- int c;
- while(1) {
- switch (c = getc(stdin)) {
- case EOF: panic("premature EOF on input"); break;
- case ' ': case '\t': case '\r': case '\n': break;
- case '#': skipcomment(); break;
- default: ungetc(c, stdin); return;
- }
- }
-}
-
-int nextint(const char *what) {
- int i;
- skipwhite();
- if (!scanf("%d", &i)) panic(what);
- return i;
-}
-
-/* Program */
-
-int main (int argc, char *argv[]) {
-
- char magic[MAGICSIZE];
- enum { PBM, PGM, PPM } which;
- int width, height, newheight, pixelmax;
-
- int linelength;
- char *line, *whiteline;
-
- /* establish identity and proper usage */
- me = argv[0];
- if (argc != 1) oops();
-
- /* magic */
- if (!fread(magic, 1, MAGICSIZE, stdin))
- panic("no magic (nothing on standard input)");
-
- if (!memcmp(magic, PBMRAWMAGIC, MAGICSIZE))
- which = PBM;
- else if (!memcmp(magic, PGMRAWMAGIC, MAGICSIZE))
- which = PGM;
- else if (!memcmp(magic, PPMRAWMAGIC, MAGICSIZE))
- which = PPM;
- else
- panic("bad magic (standard input not a raw anymap)");
-
- /* width and height */
- width = nextint("pixelwidth integer");
- height = nextint("pixelheight integer");
- switch (which) {
- case PBM: pixelmax = 0; break; /* hack (used by memset below) */
- case PGM: case PPM:
- pixelmax = nextint("pixelmax integer");
- if (pixelmax > 255) panic("pixelmax larger than 255");
- }
- if (getchar() != '\n')
- panic("something not a simple newline after width height [pixelmax]");
-
- /* allocate pixel line */
- switch (which) {
- case PBM: linelength = (width + 7) / 8; break;
- case PGM: linelength = width; break;
- case PPM: linelength = width * 3; break;
- }
- line = (char*)malloc(linelength);
- if (!line) panic("could not allocate pixel line");
- whiteline = (char*)malloc(linelength);
- if (!whiteline) panic("could not allocate white pixel line");
- memset(whiteline, pixelmax, linelength);
-
- /* skip white pixel lines */
- newheight = height;
- while (fread(line, linelength, 1, stdin)
- && !memcmp(line, whiteline, linelength)) {
- newheight--;
- if (newheight <= 0) panic("entire image blank");
- }
-
- /* output revised header */
- if (newheight < height)
- fprintf(stderr,"%s: cropping %d rows off the top\n", me, height-newheight);
- printf("%.*s\n%d %d\n", MAGICSIZE, magic, width, newheight);
- switch (which) {
- case PBM: break;
- case PGM: case PPM:
- printf("%d\n", pixelmax); break;
- }
-
- /* output remainder of image */
- do {
- if (!fwrite(line, linelength, 1, stdout)) panic("could not write");
- } while (fread(line, linelength, 1, stdin));
- if (!feof(stdin)) panic("input not exhausted");
-
- return(0);
-}
-
-
-/*
-** $Log: pnmrawtopcropwhite.c,v $
-** Revision 3.7 1999/02/16 15:12:50 krisrose
-** Interim release (Y&Y fonts now free).
-**
-** Revision 1.3 1997/05/01 20:59:51 krisrose
-** Works for all three raw formats now.
-**
-** Revision 1.2 1997/05/01 17:34:58 krisrose
-** Extended to raw PGM and PPM in addition to PBM.
-**
-** Revision 1.1 1997/04/30 21:30:31 krisrose
-** Initial revision
-*/
diff --git a/Master/texmf-dist/source/generic/xypic/ross.eps b/Master/texmf-dist/source/generic/xypic/ross.eps
deleted file mode 100644
index 53b25317b8f..00000000000
--- a/Master/texmf-dist/source/generic/xypic/ross.eps
+++ /dev/null
@@ -1,397 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: /net/tyr/home/tyr1/kris/Kris/pictures/rmoore-icon.ps
-%%Creator: XV Version 3.10a Rev: 12/29/94 - by John Bradley
-%%BoundingBox: 0 0 62 84
-%%Pages: 1
-%%DocumentFonts:
-%%EndComments
-%%EndProlog
-
-%%Page: 1 1
-
-% remember original state
-/origstate save def
-
-% build a temporary dictionary
-20 dict begin
-
-% define string to hold a scanline's worth of data
-/pix 86 string def
-
-% define space for color conversions
-/grays 86 string def % space for gray scale line
-/npixls 0 def
-/rgbindx 0 def
-
-% lower left corner
-0 0 translate
-
-% size of image (on paper, in 1/72inch coords)
-61.92000 84.24000 scale
-
-86 117 8 % dimensions of data
-[86 0 0 -117 0 117] % mapping matrix
-{currentfile pix readhexstring pop}
-image
-
-bac0d8d8c5c0c0c5988e7124241d4f63a87a637375c0dacac0c0987a638e9090baa8afaf
-9898c5da8eba8e9ab1bac5c5c5b92438716971a284137138c038385a383c5a381d383838
-3c3c47697e696969696969695a5a
-b9cfc5bac5c0c5b5b171713824244f4f71716f8c94d8d8cae1c0756d75988cc8bac8afb9
-af635a5a47987c9aa8a2c5a8a8cf5a2669386f908e3c6956718e1938383c4f5a5a233c3c
-3c4f5a565a696d5a695a5a695a69
-9abababababaa89a8e7c5a3838324f5375759aafb9e9d7e9b198637ca8e9caccbecfc8ba
-bc445a385a989a909abaa2baa8ba9c2638267e9ab198385a5a7e283838415a41325a383c
-5a4f5a5a697e71697e7e69715a5a
-afa0bac5a8a49aa873713cd8daeadac5ccf0f0ebf1d8f5f0f0f0f3f0d7f1d8d8ebd7ba4f
-38c5afba7c63a28a8ea8babaa2c5e95a3871246da8a226385a23a82438415a5a45453c3c
-413c4f4f5a637e7171697e715a6d
-a2cabcba9aa88e8e7c6369455a4f5a5a4f71b1cce9f0ebddeaeaf0f0ddf1ddddebebf04f
-4f5a6d6d69716d6f6f79b1b1b1babaa8328e245a8e982d135638562438385a5a6d71718e
-7169715a5a7171717e718471716d
-1d385a32382a3824241d243838384f4f383838384f325a5a909098b5cfd8ddeed8cd635a
-5a5a696d715a715a697e718e8e8ea2a87169418e84a869244f3c3838385a1d1d1d1d1d38
-23715a717aa8a29aa8a2bca498a2
-a2c5a2a2b5a8a86f5a38383832381d241d1d1d381d38381d1d2a251d1d2a38385a4f415a
-3838383c415a5a323c56699898a27a8e7e7e563c848e9098715a3c3869a8633838413853
-555a69715a71716f71716d8e6d90
-a8a8a8a8a29a8e8e5a3832381d32381d381d3838381d381d383838384141414f383c6956
-565a565a71717179845a413c38418e7e8e71715a8e8e8e71716d69697cbeafbaaf98af98
-a898afa8a8988ca89c8ea8a89aa8
-24242419242424381d1d38381d381d38382a3838383838383c3c4f4f4153565a413c2338
-38382d381d3841695a3c383c56716f6f8e8e71716956715a2425387cbebac5b998bab9c5
-baa2b998c5c5c0ccbabaa8985a5a
-2a412a283838262424261d1d3232381d381d3823383c32413c53413c535a414124192441
-3c69714f5a3c382a385571413838698e718e7e71714f5a5a3c382a69635a695a5a5a5a5a
-5a6d5a5a696d7e9090908e8e98a2
-382a38382a1d2426261d1a1d243824381d1d245a41414f4f41475a3c411d2a1d3c3c6969
-715a71715a715a69412a4171413c233c698e8e7169713c5a695a382a2426715a5a715a71
-5a715a6d6d7e71b1a890a88e8e98
-55987179719871415a5a32383c38383838381d383c4f3c38415a4138415a5a5a535a4f5a
-4f5a5a5a5a3c41695a69413838411d2a382d4f90b17e41715a5a3c383824906d9075908e
-7a8e907c8a7c908ea8a88e737175
-6971908e6d713c5a5a414f5a3238384f382424415a3c2d38413838415641414f41414f53
-5a4f5a3c3838383c3c41533c281d38382a38415a6da85a4f71565a413838a8ba9898b998
-a89c8a9aa8a0a0b7989498b9c8c8
-5a5a69695a5371716d711d5a5a5a5a5a381d413c41234141413c3c4f3c3c38413c413841
-5a3c414141411d1d3838254141411d4141382a3841415a8e324156715a475a7c907c9063
-636d6d634f7590a8a89890989875
-716971715a5a5a6d6d6d3c5a4f5a5a71383c3c383c3c41413c415a4f413c3c3c3c413c5a
-3c413c2d1d41381d38383c3c234141253c25383828383c697141415a5a5a475a6d6d7171
-7c71906d6d6d8ea8989c8a9aa8a8
-7169716971416d7e7e5a5a3c6d5a5a4f3c414138413c2a416956413841414f412d381d1d
-383841413c2a41381d413c3c3c3c3c3c3c413c2a41383c41697141554f41475a716d5a5a
-6963714f636f6d909aa89aa8a4c0
-988ea898986d38715a7e715a5a5a4f3c382a3841414f4f413c411d414138254125384141
-3c41413c41413c41414f695a715a71717171713c4141413c413c71382a3c415a3c413819
-24243826242a24415a4f41474169
-8e8e9890987e5a6338383c566d71473838412a41534f415a1d242a3c3c2541414141413c
-413c5641694f4f564f567171715e79799a5e79715656413c41383c413838413853234138
-1d242438242a38414147533c3c47
-719aa2908a8e5a4f6d715a4f32383838414138694f4f4141413c3c5a1d3856415a567171
-7171717e98798e8e7aa4a2a4baa4a4a4a2a4ba9a797e714f3c3c2d414141384141696938
-38382438242a243841533c534738
-6db1908e8e7e5a6d6d386d5a71381d38414f41413c5341413c4f4f38413c5a7171717179
-8aa2a4a2a2a2a4a2a4a2c0a8baa4c0bca4babaa4a27971714f3c41413c382538385a7156
-3838381d3824382a383c535a4147
-6da2908e987171696d5a4f5a32382a3c414f69533c5a2a414169413c415571988aa4a4a2
-a2a4c7a4c0a8bcc7c7c7c7c7c7c7c7bca4a6bcbca4a28e79714f4f413c3c4138383c695a
-3241383824242a38383c53413824
-9a98a898908e69717138693823383c3c4f41474f4153414169414f717e7e92c0c7baccc7
-cccce0d8d7d8d8d8c2c2e0c3c3d7c7c7c7c3d7bcbcbca49a987171415a41414141415a71
-5a41415324241d1d38414f53a4a8
-a8558e8e8e715a32714f5a383838413c5a3c416969415a69715a417ea492c0c7cccce2d8
-d7d8c2d5d8d7d8d8d7c2c2d7c2d7c3c3d7c3c7c7bcc7a4a4a27e8e5a4141414f56413869
-695a5332382424242a41415ae1b5
-8e717e8e717e3c4f4f5a5a38384141533c4169697156557156716592c0aac7c3d8c3d8d8
-d8d8d8d8d8c3d7d8d7d7d7c2c2d7d7c7ccb9c3a6bcc7bcc7a4a4a27171565a4f5a695a69
-71695a3c38191d38262a1d28c5b5
-8e71719071695a4f5a5a381d41413c3c4f716956717171717171a4c0a4c3c3ccd8e2d8d7
-d8edd8d8d8d8d8d8d8c2d8d7c2c2c3c3c3b9bcbca6d7c7a6c0a4b59a71845a5a5a7e6d5a
-5a69414f41795e7179865524d8c5
-8e90719098713c537e3838414141414171557171717171715ea2a4a8a8c2c2d5d8d8d7ed
-d7d8d7ebebd8d7c2d8d7e0c2d7d7e0c3e0c3b9c3bcc7d7a6a4baa4a28e71715a695a7169
-5a5a4f41535620414f715519ccd2
-908e718e715a5a4732382a3c413c416971697179717171717ea4c0c3c7c2e5d8d7d8d8e6
-d7e5d8d8d7ebd7d8d8c2d8d8c2d7c3c3c3c7c3d7aac7c7bcbaa4c0baa29871564f5a715a
-5a4f5a5a6971323c41887119d8b1
-8e986d8e847e714f5a2a41283c533c715671717198797171a2a4aac3c7d7d8d7e4ede4d7
-e4e4e6d7d7d8d8d8d8d8c2c2d8c2c3c3d7c3c3c7c3c3c3c7c7a4baa4b5a2717e5a4f695a
-5a5a4f697171414153ad7119d8c2
-98a88e8e8e987169412423414141417198717e7e7e84718ea4aac3d8c3d8d7d8e6e4dde6
-e4eae4ead7e6d7d8d7d8d7c2d7c2d8d7ccc2d7d7ccc3c3c3b9bca4c0c0a2717e695a5a69
-5a5a4f4f565a694153b17e24c5c0
-a298a8b5b1b1905a1d3841383c414169717e798a9898717ec7ccd8d8ccd8d7edede6ddd8
-e4e4eae4edeaddeaead8e6d8d7d8d8c2c2c2c2ccd7ccc3c3c7a6bca492a298565a556971
-5a69566969416955539c692acfb5
-c5bac0b5c0c0715a38383c41384169567ea4a2a2a48e71a2ccccc2d8c3d7d7d7d7eadde4
-eae4e9e9e4e4e4eae4ddd8ebd8d7d8d8d8d8d7c2c3d7d7c3c7bcbc92c0c098717e565a71
-5a5a7169715a696941d5692deac2
-a2bab598c5c05a38413c414123415a71a2a4a4a48e7a98a4ccc2d8d8d8d7e4d8d7eaede4
-eae9e9e9e9e9eae6e6d7e6d8d7ebd8d7d8d8c3d7c2d7c3c3aad7c7bca4a2a4717171717e
-715a69696971693c41e16938e9b5
-a8b1a271a8b53c383c3c3838383c5671a2a48ea4797179a4d8d8c2d8d8d7d7d8e4d8d8ea
-edeaeae0eae4e9eadde4d8d7edd8c2c2d5d8c2d8d8c3e0c3c7aacdbcc0a28e987e556956
-715a3c71715a5a5a7ed26953cfcc
-a8b5b169a89a38413c41381d253c71a4a4a4a4a4798e7acdc2d8d8d8c8d7ddd7eae0e0f5
-e0eae9e4e9e0eaeae4eae4e6d7d7d8d8d8c2d7d8ccd7c3d8e0c7c7c7c0a2799871716984
-7156695669696969a8d17741d8a2
-8e988e5a849a38385a383c2a233c7ea2c0a2a4a279797ec2d5c2d7edd8e4d8e4e4eae4eb
-e9e9e4e9e9e9e0e0e9eaead8edede6d8d8c2d8d8c3d7c2d7c3c7bccdbaa27e9871717190
-717155717171716398ad3838e1a2
-909879715ab538383c38381d385aa4a4a4a4a4c0797aa4d8d8d7d7d8d7eaead7e4e0eae9
-e9e9e0e9e9e9e0fde9e4e0eaedd7d8d7d7d7f3d8c2d8d7ccc2c7bca8c0a48e7171846971
-9c718469717e7e7198d2413cd8d8
-98909a8e6998382338233838417ea4a4a4a4c7a47e86d7d8d7d7edead7eaece0e0e0efef
-efefefefefefebefefe0f5e0e4e5d8d8d7d8d8d8d8d8d8c2c3c7aac0a4a47e8e71697171
-9c717171717171539cb5243cccb5
-b1a8b5a28471413c41382a2356a4a4a4a292d7c07ea4d8d7edd8e4d7ede9e9e9e9efefef
-efeff5efeff5efefefe9edededd8d7d7ebe6d7d8d7d8c2d8c3ccc7bca2a48e7169717184
-7198717e90987147b1d22441cfb1
-b1a8a2b58e69384138381d3871a4a4a4bcc7c2a479aae5d8e4ede4d8e4e0e0efe0e0efef
-eff5f5f5f5f5eff5fdebebe4e4d7d7edd7ebd7d8d8d8d8d8d7d7c7c7a4a271715a557156
-719898847198905addbc1d41e1b5
-a2b1b1c0a27e3c38381d3856a2a4c092c7c7d8a479ccd8d7d7edeaedede7e9e9e9efebef
-efefeff5f5fdefefefe9e0d8edd7d8d7edd7e5d8d8d7d7e2c3e0c7c7a4a28e7141696956
-5671988471717153c2d5383cd8b1
-a898b1a8a8711d411d382a7ea4c0cdc7a6c3cca47ed5d8d8d7edd7d8e0e9efefefebefe9
-efeff5eff5f5efefede0e4ede4d7e5d7d7e6d8d7ebd8d8e0ccc3c3c7bca4715a4f41695a
-697171986971698484d22469c0b5
-9a8ea898988e383c381d1da4a4a4a8c7c7ccc2a4bcd8e0d7edd8d8e6d8e0efe0efe9efeb
-e9efefefefe9ebebebede0e0e4d8edd7edd7d8d8d7d8e0d8e2c3c7c0bca271693c416941
-41416984695a5a5a88b51d47d890
-8e798e8e8ea85a23381d3ca4a4a4a8c7c7c2e0cda8d8d8d8d7e6d8d7e4e9f5e9e9efefef
-efe9efeffde7e0fde9e0edd7edd7ebd7e6d7ebd8d8d8d8d8d7ccd7c7baa48e563c41413c
-534f55564153564190a88e84b571
-5353415a5a2338411d3841a4a4babcc7c7c3ccc7c2d8d5d8e5d8d7e6eae0e0e0efebeffd
-efefebefe7e9e9e9e0e9e0e4d7edd7e6d8d8ddd8d8d8d7d8ccc3d7c0a4a4717141414138
-41415a556941564f90ccc0b5a898
-41383c413c53413c1d2371a4a4c0c7c7cce0e0e0ccd8d5d8d7d8edd7eaebece9eff5efef
-efe0efebeff5e9e9efe9edd8edd7d7d8edd8ebd8ddd8d8d5c2d7c7bcc0c0a28e693c4153
-3c5341416971717190b1b1908e8e
-3c4153473c3c473c38235aa2a4c0a8c7bac3c3ccc2d8c2d8d7d7d8ede0e0e9e9e0e9e9eb
-efe0e9efefe9e9e0e9e0e9d7d7ededd7d8d8d7d7e2d8d8d8c3d7c3c7c7a4a27969414141
-41694153717e5e717e192a3c4138
-414141473c474141413c69a2a4a4bca8c7c3c2e0c3bcd8e2d8d7d7d7edf5e9e0e9e9e9ef
-eff5efebefe0e9efeaedd8d7e6d8d8d7d8d7d8d7d8e5d8cce0c7ccbac0a4a29a694f3828
-3871557e7ea47e92a8c0b9c5baa8
-41533c5a41414f471d38567ea4a4bcc7c7aae0c3c2d8d8e5d7d7ddede4e9e0efefe0efef
-f5efe0efefefebe0f5ede0d7d8d7edd8ebd8d8e2d8d8d8d7c3c7bcbcc0a4a47e55414138
-41556971867e7ea8a8bac5bab5ba
-3838414147474f41382a5a79a2a4a4c7aac7c7cce0c2d8d8d7e6d8d7ede0e0efe0e9f5ef
-f5ebefefebefeff5e0e4e5e5edddd8d7d8d8d8e2d8c3c3d7c3c7c7c7c0a4a49a56535a41
-23696956a4a47992aac0cfc5b9ba
-413c533c3c47415a38383c7a86a2c0c7c7c7c7c3ccc2d8d8d7d7edd7eaebe9e9f5e0eae0
-e0ebe0e0eff5efeaf5d7eaebd8d8d7c3d7c7c7c2d8c2c3c3c7cccdc7a8a4a2a271693c25
-41416971c7a87aa8c2baa0c88a90
-4153414153413c6941384171a2a4bcbaa6c7aaaad7d8d5d8d8d7deded8ecebe9ebefeaed
-e0e9efe0ebebebedd8e5ebd8d8d5c7c7baa4a4c3c7c3b9c3bcc7c0c0c0c0a4a271564141
-3c3c698ea8a88ea8c2bedddaddf0
-715a717171717a5a4138387179a4a4a2a4cdcdc3cce0c3e2d7d8e0d8d7e0e9ebefebd7e0
-e0f5eceadee0ebded8cdcda2a4a4cda8b5c7c0a4a6c7a4a8a8bcc7c0c0a4b5b5797a4141
-415571a29aaa92bad7e4d8baa88e
-32383838325a3838843c38718e867979a4a4a4cdc7ccccd8d8d5d7d8d8e0e0e0ebe0d8ed
-f5e0e5e4e5e5d8cce0a4a48e987ebacdbaa4a4c0c0a8c792a4cdc0c0c0c0c0a2987a6941
-254fa4bac7c3a8c7c3b1ccd8ddeb
-38381d1d382a537171693871717e8e9879a2a2a4a4c3cce0d8ccd8d8e0d8f5e9e0e0e5e0
-e0e0d7d8e0d8a4a2a4985e715671c7a8bca4cda4a4c0cdc092c092a4c0c0a4b5a4718441
-416979c7aac3aaa8c37190717171
-24261326241d3841a2843c695671799898a28e8e8e8e989aa4c0c7c7d8d8d7e0e0e0d8ed
-d7e5d8d8c3cd7171563c414156418e71797998798e86a2a4a4c0c0bac092a4c0a271692a
-3856a4bac3bac2a4987198987169
-13262413262a5a717e5a3c416971798a7e7e79717171565a7e86a4bacdccc2d8eaead8e5
-edd8e2e0bac08e56565671715a56718e7171a4a4a4a486a4a492c0c0c0c0cda4a28e7138
-2556babac2c2c2a4798e98713c69
-988e247119388ea4a898713c5a56565e71717171715a4f413c3c5a71a2cdaad8d8e0edd7
-e0d8c2baa4a4bac092a4b5e9f5eb71716969697ea4a4a4a4a4bac7c7cdc7c7c0a2987141
-4155c2ded7cdd7a8719c98984171
-b5a2197e264190907c8e71415a414171987171717171717a71795e7171a4c0c3d7ead7d7
-e5d5e0a4a492c7a8a4a4cdffffffbcc25555717198a4cd92bac7cdccc3d7bcc7a4985e38
-3c56c0d7d7c2c8928ea2b1a25a71
-9ab1383226988e9ac5bab13c414f568e7171717aa47a9871a486a49a7e797ec7d7d8e0ed
-e0c2babaa4cd9292c0a4e2ffffffe5f85a71717e71a4c7bac7d8ccd7c3d7c7c0a4a27141
-3c71a4c3c2c2c2a479b1b1b15a90
-a484412a3841718471715632568e797971715e71e4e288718a4184a4a4a49a7ed8d8e0ea
-edd7c7a4cdbabaaabac2e5fdffff8888717aa4a4a292aac7ccc3e2d8e0c3c7bca27e7141
-388ebcc3bcc2c26571a4b1b17190
-b55a411d38698e8e908e9838568ea2988e563cd2e9d58855e94171b7a4cd7e86d7d7e0e0
-e4cca8a4baaac2a4cda6d1e5f5f5bca49cb7a28ea4c7ccc2c2d8d8d8c3d7bcc0b5a2843c
-38c0c792a8c3c27e8498b1a25ab1
-c05a552438567e8e79988e4169797ea4714171cdd7bc98713c4171d5cdbaa479d8d7e4ed
-dec3c7a4bac7cca8de8ea8aae0bacda4a4a492a4baccc3c2e2d8d8d7d8c3cda4a2a2713c
-41d1d1c7bababa7171a2b1a269a2
-c024711a5369718e718e7169418e8ea48e71718aa2baa288a4a4a4a49292a4a2c3c2d8d7
-d8c3bca8a4bac2d1aa9292a8baa4c0a4bababac7c2c2d8ccd8d8d7d7c2e0babaa298563c
-98cccdc2e2a4bc5a7198a2a269a2
-a82490266956718e8e8e8e715a71a4a47e7998a47e7ea4a2a4a4a4a4baa8a49aa8c2d7d7
-d8ccbabcbcc7d1bac7cdc7c3c3c2c2c2c2c3c3c3c3aad8d8d8d8d7f3d8e0c0a4a27a7155
-a2cdd1d7d8c792236990b1988498
-712d5a71718e8e8e8e98987e5a71a4a4a4a4a2a4a4a4aac0cda892a8baa47979c3bcd8d7
-c2aac2c7bca892cdc7cdaaaac3babaccc7d5ccd8d8d8d7d7edd7ebd8d8cca4b598988e98
-b7e0d8d8e2e0cd477198a29884a2
-413828384141414f697163905671a4a2a47ea4a4a4ba92bca892cda6c0a47979c3c2c8c8
-d8b9c3a6a8a6c7c7c7c3c7cdaae0d5e0d5d8ccd8d7d7d8d7d7ead8d8ccc3a4a479719898
-a4d1d8d8d8c2cd69908eb1b584a2
-412a242a2a382d2a2a2a38243869a4a4a2a2a2a492c092c0c792c792c079797ec2c2c2c8
-c2c3aac7bca6ccc2c3c2c2d5ccccd5d8ccd8d8d7d7d8eae4ebedead8d8e0c0a28e8e9898
-a4d5e2c2d7baa45a719ab1a271b1
-242a2a2a2a2d2a382a382a2a2a84a4cdcda4c0c0a4baa4a8c7a8c7bca48e8e7ec3c2d7c8
-d7c2a8c3a6c7c3c2d7d5d7d8d7d8d8d7d7d7c2d7d8d7edd8ead7edd8d8c7a49a798e7e8e
-a4d8e0d5c7a498848ea8a2b1a8b5
-192a3c2d2a2a2a2a2d2a2d3c245aa4a4babaa492c0a8a8bcc7a8a8a892797e86a6c2d8c8
-d7c2c3a8c3a8c2c2d8d8e0d7d8d8d7d7d8d7d7d7ead7d8ead8edd7d8d8c7a479798e8e7e
-cdc2c2c3a498a27e8ea890b18ea2
-19382841192a2a2a2d2a2a2a2471a492c7c7b9aac7aacda8aac7c2c7a6a47ea4a8c2e0d7
-c2c2c2c3c2aac2c2c2d7d7d7d8d8e0ede0e0e4ece0e5d7ead8e6d8d8d5d77e79988ea48a
-c0c2cd928e8e9871a8a89a98a298
-2a2a2a2a382a2a2d2a2a2a2a2a71a4c0bac7c3ccc3aac3c7ccaac2c3a479a47e92d8d8d8
-d7c3c2c2c3c3aac2c2d7d8d8edeae0d8e9e0eaede0ededd7d8edd8d8ccba9a717ea4a498
-92d1a47e90a2a88e9898a898a88e
-252d2a2a2a2a2a2a382a2a2a2498a492a8c3c7c3baccc3c2c3c3cca8a8a27ea2bcc2d8d7
-d7c3aac2c2c3c2c2c2d8d8edd7d7e4e0e0e0e9e0e0ecd7d7edd8d8cce0c77e717e989898
-a2868e8e8e90a271a8a298908e7a
-1d2a2a191d192a2a2a2a2a2a2498b1a4a4a6c7aac3c2c2c2c3c2c3c7bca2a48ea8c2d7d7
-d7c3aab9c3c2c2c8d8d7d7d7d8e0e0e9ede0e4e4ead7d7edd8d8d8e0d7c779719aa49898
-a271699890a8988a98a88e718e8e
-38192a2a24242424192a242a243f69a292c0aaccc2c2c2c2c3aac3c3c7a48e98a8c2d8d7
-c2ccc3a6c3c2c2d5c2d7d7e0e0d8e0e9e0e0ead8d7d7d8ddd8e2d7c7c7cd8e71a2989898
-a2798e988e8e988ea8a88e718e7e
-382a2a2a2a2a2a2a2a2a2a382a2a3856a4cda6c3c2c2ccccc2adc2c2c3a49aa4c2c2e4d7
-d8c2c3c3bac7c3aac7c2d7d8d7d7e0e4ece0d8d8d7d8d8d8d8c7c3cdc0ba988ea498a2a4
-ba9a988e8e9a9090a88ea8717990
-2a2a242d192a2d2a2a2a2d2a2a3c3841a492c7aabac2c2c2a8c2bac2c779a4a4c2d7d8d8
-d8c2c3c3c7c2c3c7a8aad7c2c2d8d7d7d8ece0d7d7d7d7d8c3e0aabcc0c098798ea498a4
-a4a2908ea8988e8e8ea88e719869
-2d2a2a2a2a2a2a242a24382a2a411938a2c0a8c7c3c2c2c2c2bac2c3a4a47e92c2c2d8e0
-d8d5d8babac2c2c3c7c7ccccc3c2d7d7e0d7ede6d8ebd8c2e0c7c7c792c0987a8ea2a4a4
-c0a28e8e8e8e8e79a88e8e698e8e
-2a2a3838192a25242a242a2a38532a3898a4a4a6c3c2ccc3aac7aaa4a4a2a4c3c2d8d7d8
-d8c2ccaaa8ccc2c2c7c2d8d7d8d8c2ccd7d8d8d8d8d8d8cccccdd7cda4a2989898a498a4
-a4a2a85e8e987190b1a89863908e
-382a2a2a2a2a2a2a2a38192a2a382a38797e92a8aac2babaaac7aaa4a2a492c7c2d8d7e5
-d7d8d8c3aac2c2aac7d5d7edd7d7d5c2d8d5d8d8d8d8cce0c7c0c7a4b5c0987e9898a2a2
-baa28e7198a88e8ea2988e69a86f
-242a192a2a192a2a1924242a24382a2a418ea4bac7bac7c2c7c2c3c0a47ea4c3d7d7deeb
-e0d8c2c2c3c2c3c792d7e5e0d8d8d8d8d8d8d8ccccc2e2cccdc0cdc0a4b598988ea2a2a4
-b5ba7e63988e9090a2a2907e908e
-1d242a2a382a2a2a242a2a2a242a2a2a3c717ea492c7c7c7ccc3aaa8a4a2a4c2c2d7ebef
-e0c2c2cdc3c2baa4bad8d5d8d8d8e0d8d5e2e0cce0d1d8e0c7c0cdc0a4b59898a4a2a4a2
-c0bca28469847e9890a8717e7190
-2a241924131919242a242a2a2a382a2a386979a2c092c7c7c3bac792a479a4aac8d7efef
-ded5c2baaababacdc2ccd5ccccc7cce0e0e0cce0cccdc3e0cdc0cdcdb7b57198a2a4b1a2
-a4a49a7a5353697e908e717e8e71
-3c38413c41233c413c2d413841382a3c383856a4a4a4a8c7cda4c0a4a4b7a4a4bac2cdcd
-bac0a4a2bababac7bae0baccc3c7e0ccc7d7d1ccc3c7e0c7c0a4cdc0a4b57198a2a4e0a4
-c0c0a4a441536369698e6d719071
-4141413c4138382a38414141413c413c413c41a2a4b5c0aac0c0a4a4a2a4a4a4babacccd
-c0a4cdbac7ccccbae0d1d5cccdbac2d1d1c2d1e0ccd7d5ccc0b5cdcda4b58e98a2b7cca2
-a4a4a2b57153696969845a90906d
-382a381938285341262424241d2a23382d415a79a4a4b5a4a4a2a2a4a4a4a4bca4cdbccd
-bad1cdcdd1c2d1cccccccccccdbaa8bac7cdbaccd8ccd5d7a4b5bac0b7a48ea4a4d1e0a2
-cda4baa48e695c535c843869715a
-191a2a98a4903c84714138382424241d242a2d71a2b5a4a4a4a4a286a4a4b7a4a4bcbac2
-d5bad1bad5d5c2e0d5d5c2c2aacda2a492bac7a8c2e0d8ccc0a4c0b7a2a498a4b5e0d1a2
-cca4a2c069696969698438262624
-b5d2bc71533f5c53719c693c41532a2624242469a2a4a2a2a2a2a4a286a492a4bcbcd5d5
-d8d5bacdd5d7d7cdd5c2cccdbaa479a4a492cdc3d8d8d5d7a4c0c0b5b1a48ab1c3d8cda2
-e0c0a4927e695c69846941381d24
-413c3c3c41413c413c41535369555371719c69697ea4a4b5a2a4a47e7e7ea492a8aaccd1
-cdcdcdc2aacda8a4b7bccda47e8abaccccd7c7c2e2e0d1baa4a4b7b5a2a4a2b1d5e0a2c7
-ccc0ba98715c715c845c695c2a19
-533c53413c3c3c3c413c413c41533c2d383c534169b5c0a4a2a4a4cda47e79988ea4a4ba
-92bacda49acdcde0e9d7e28e657ec2d8d5d1c2d5d8d8e0d1a4b5c0b5a48ea4a2d5c0a4c7
-c7cd7e715c715c5c5c5c69696941
-53413c3c3c3c413c2d3c5341413c41533c533c3c53a4a4a4c0b7a4bcba8a4171c0cdd1cd
-babc9acdece5e4f0f5a4928ea4bad5d7c2ccc7cce2d8bac0b5a2a4b7a27a98b5e0c07ec2
-bcc771695c5c69845c84535c7ec5
-41533c3c533c533c3c533c3c2a5569698e8e798ea290a4a4bacda4c0bc86796b6b71cdd1
-dee9cdbce9e5798e869292c7c3d5d7d5c2bad5cccccccda4a4a2a4b79879bce2cda29ccc
-c0c069555c5c695c5c695c698469
-53472d3c413c413c3c3f535341698ea4a28e989898698aa4cda4bca4a4a486656b658aa4
-a4c08671a48e798c92aabac2ccd8d8d5d8e0ccd1cce0cda4a4a4b5a27a98cdd5a4a4a4aa
-c0a45355695c69695c5c5c5c535c
-718441413c413c383c6990b5a2a8989a7e5a41262d418498b5a4a4a4a4a48686866b8c8c
-a692929292aac3aabac2ccc2c3d8e2d8c3bac3cdcdbac0a4a4a2bc987aa2e0e0a47ecccd
-cd7e5353695c6969695c7e4f5c7e
-b1a4a2a29890848e989aa29aa8a2a85a2a415a98b1c09879a4a4c0a4a4a4a4a47e8ca692
-adadc2adc2c2c2c2c2c2cdccccccd5c2ccc7ccc7cccdc0a498a4a49c98b7d1cca2a2cccd
-cd5569535c715c695369535c695c
-a2a2b1a8a2a29898b198a8b59aa22a3c98b1b5a2c5c5b590a4a4a4a4a4a4a2868e8c92aa
-adc2c2adc2c2c2c2c2c2aaaac2ccd5ccccccc7cdc7c0a4a29aa4a271a4cdd5c7a4c7d8bc
-cd53555c695c5c5c5c535c69635c
-a2a2a298a298b1a2a2cdc04169b5d8d8e9cfcc8456325a3c8e8aa4a4a4a4a48ea4a48c92
-9292aaaa92adbababababac3c2bac2ccccccc092c0c7a2a4b1a2a4a2e0e0cdc0c7d7e0cd
-a25c695c69695c5c697e695c695c
-416998a2b1989c90b5a869c2ead7e1e0474153694f383c3c717186a4a4baa27ea4a4a48c
-a49aa49aa4a4bababaaac7bac2c2c2c3cccdcdcdc0baa48e7a9898cdcdd5d1a4ccd8c3c0
-6969534f5c5c69696969695c6984
-7e7169695353533c69a2c0d7d7e02a38535c69716d5a695a719098a2a4a4a4a48ca49292
-c0c0babac2c2aaaaccaac3bac3c3c3ccc7bacdc0a4b57a8e9871b7d5e0c3c0c0d8d8d771
-696953555c535c5c5c5c695c845c
-d8cfc5716969697ec0e1d7d7e1b57198b5b5d2b5b59a906f7c8e718aa4b7a4a4a4a4c0ba
-a492babad1c2ccbac2cdbaaaccbac3bac7c7cdc0a4a2717198bccde0d5d1cdbae5d8d169
-5c556953555c5c695c5c695c695c
-d8d8bcc0d8c5a2d8e9d8ead7d8a2c5cdcfc0a28e715a7e715a71717ea4a4bca4a4a4baa4
-bababaaac2c2c2c3c2c2c2bac7c2e0aacdc092a4a4a471988acdbad1c2d7d1cce5d8c755
-69535c4f5c6953695c5c5c715c69
-d8c5c0bcd8d8d8d8c0d8e19090a2a8bad8cdd8383253694f98a8a28e7aa4a4a4a4a4c092
-cdbac7bac2c2c2cccdc7c2baccd1ccc7c7a4c0a47e7171a2ccc2d1d1d1cce0e2d8e08a55
-55555353695c555c5355535c6969
-c5c5c0d8c0c0d8d8d8d8cd90c0ccd7d8e1c0988ea2c0c56f1d5a4f717aa492b5a4a492c0
-a8aac2c2ccc2d8c2d5c2aac3c2c2bac7babca4a29871a4c0d1d1d1baccbac2edd7c07153
-53535c55534f5c5355535c555c53
-a8a2c5a2bab1c5a86f6990d8bcd8e9c09090b5c5c0c0bac03c412841718aa4a4a4a492a4
-baccc2d5c2d5ccd8c2c2d1c7aacdaac0c7b5a47a98a4babacce0bad1cdc2ecedd1693f53
-556953555c6953695c53555c5c69
-c0c2b5c2a8baa2cca2c5b5b5c5c0c5a89abac5c0d8c0c5b1413c3c3c418a86a2a4a4a4ba
-bac2c2d5d5ccc2e0c2d5c2ccd1c2c7c0baa47e7ea4cdc7ccccd1ccc2d7d5edf38a556953
-554f5c5c5353555353555c5c6953
-c0c5c5c5b5c5c0a2b1c5c0c5c0c5c5c0c0c5c5c5c5c0c541413c3c3c418e8aa2b7a4bc92
-bac2c2c2c2d1c2d1c2c2d5c2cdbaba92c08698a4bca8aacdcccccdccccd8ecd884535355
-535c5553555c535c5553535c5353
-c5d2c5c0c0c0c0ccd8c5c0c5ccc5c0d8c0ccc5c0c598414141414141413f5698a4a4bcbc
-baccc2c2ccd1ccccc2ccccbabac7a4b7a2a4b592c0bacdcdcccdccd5e5ebedd553535553
-554f5c555c53535c53555c5c5355
-5a4f6da8c0c0d8c0c0c0c0c0c0c5c0a2b1a89a8e9a5541283c2541254141417a86a4a4c0
-cdd1d1c2cdbabcbaccd1c2c7a4a4b7a48ea4bcc0cda492e0d1d1ccccd8edf3b555535355
-695553535c693f5353695c534153
-717171719071449a908e5a73b9afbaa2a2a88e557e3c3c3c3c2d533c3c41412a718a8aa4
-a4cdbaa4bcbcbac0baa8c0a48aa47ea4a4a4cdc0ba92baccd1d1c2d8d8e5cd415341535c
-5553555353555355555353533f3f
-5a5a6d8e8ea8e9d7dacfd7cdcccfb99869381d192441413c3c4128413c3c414155718a8a
-a4a4a4bca4b7a49ab7b7a498a498a4a4a4cd92cdcdcdcdc7cccccce5d8d88e53534f5553
-535c4f5c55535c5353555355533f
-26383871757cc5bac5cfcad7dad8d8da735a381d383c412841282d2841533c2d41537171
-79a49886a4a4a4a4a27a7e8a9ca4a4a4a4c0cda8cda8bacde0ccd8e2e5d8565353415353
-5c535c415c534f534f533f5c3c3f
-4141532d2a2a24383c5a8ea8bac5ba4f7a9a8e3c41233c25284141413c413c413c41413c
-3c4171a2a4a4a4a4a4a4a4a4a4a2a4a2a4a4a4a8cda8d1bad5d8e2d8f0d73f4f53415c55
-554f555c5c55534f41555c553c3c
-a2c2a88ea8988e71534141718e8e7c6f902d242a283c2a282828283c53412a3c3c3c533c
-3c536971a4a4a4b5b7a4a4a2a4a4a4b5bac0babac0c7baccd5e2d8e0d5cd53553f535553
-4f534f5c5553535369533c41282a
-ccb5c5b5c5c0b5c5c5c0b1b5a2b1909c715a532d3c3c3c3c282d413c41413c413c41413f
-3c414155987e8aa4a4a486a4a4a4b5b5a4a4cdbac7baccd5d8e2e2e2cd553f533f555553
-535c5553533c53553c3c3c383c41
-b5ccccc5c0b5c0ccb5b5b5b5b1b5b1a25a6d712a2d2828282828415328413c3c3c413f53
-3c41535671717988a48aa4a4a4a4a4c0a4cdbacdaae0e0d5e0d5e0e09c3c41535c53534f
-5c535c3f2a5355533c3c2a2a5553
-c0b5ccccc0c0b5c0ccc2a2b5b5b1b1907e7171284141253c4141253c413c4141413c3c3c
-282841555671987a86a4a4a4a4a2a4a4a492cdbacdd1e0d1e0e2d8cd7153533f53535555
-53553c2d555c53413f2a413f3f55
-8eb5bacde1cde1cfb5cca2b5b5b58e90636d7e1d2828282a3c2a284153412841413c3c28
-41254171717171987ea498a2a4a4b5a4c0c0c0cdaad7cce0e2e2e0563c4155535553535c
-55555371533c3f282a3f41414141
-714f3c4f5a6f98adbcc2a2c5ccc08e71717e713c3c3c3c3c3c2d414128413c413c3f4128
-284155847171717e88a47e86a4b7a4b7a4cdbac7bacccce0e0c3cd5341535553535c555c
-553f555c3c3f3c2a5c553f3f5641
-
-showpage
-
-% stop using temporary dictionary
-end
-
-% restore original state
-origstate restore
-
-%%Trailer
diff --git a/Master/texmf-dist/source/generic/xypic/xy.doc b/Master/texmf-dist/source/generic/xypic/xy.doc
deleted file mode 100644
index 54ac9fca7d0..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xy.doc
+++ /dev/null
@@ -1,8324 +0,0 @@
-%% $Id: xy.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Basic Xy-pictures: Xy-pic bootstrap and kernel macros.
-%% Copyright (c) 1991-1999 Kristoffer H. Rose <krisrose@ens-lyon.fr>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% Copyright (c) 1991-1999 Kristoffer H. Rose <krisrose@ens-lyon.fr>
-%%
-%% 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, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined\else\message{not reloaded}\endinput\fi
-\let\xyloaded=\relax
-
-% NOTE: Apart from the actual macros (as also found in xy.tex), this file
-% contains both the Xy-pic kernel reference manual and TeXnical documentation.
-% See xyrefer.man and xysource.man for how to typeset this information.
-
-\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}}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- After giving an overview of the \Xy-pic environment in \S??[env],
- this \FILE\ document the basic concepts of \Xy-picture construction
- in \S??[basics], including the maintained `graphic state'. The
- following sections give the precise syntax rules of the main \Xy-pic
- constructions: the position language in~\S??[pos], the object
- constructions in~\S??[object], and the picture `decorations'
- in~\S??[decor]. \S??[objectlib] presents the kernel repertoire of
- objects for use in pictures; \S??[option] documents the interface to
- \Xy-pic options like the standard `feature' and `extension' options.
-
-\DOCMODE1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- Details of the implementation are not discussed here but in the
- complete \TeX\-nical documentation~\cite{RM95:Xy-picCSTC}.
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- Section \S??[algo] documents the more complicated algorithms used to
- compute directions, edges, and connections.
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-
-\section{The \Xy-pic implementation}
-??=[env]
-
- This section briefly discusses the various aspects of the present
- \Xy-pic kernel implementation of which the user should be aware.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Loading \Xy-pic}
-??=[env.loading]??w[loading]
-
- \Xy-pic is careful to set up its own environment in order to function
- with a large variety of formats. For most formats a single line with
- the command
-$$
- ??c![\input xy]
-$$
- in the preamble of a document file should load the kernel (see
- `integration with standard formats' below for variations possible
- with certain formats, in particular \LaTeX~\cite{L94:LaTeX}).
-
- The rest of this section describes things you must consider if you
- need to use \Xy-pic together with other macro packages, style
- options, or formats. The less your environment deviates from plain
- \TeX\ the easier it should be.
-\DOCMODE1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- Consult the \TeX\-nical documentation~\cite{RM95:Xy-picCSTC} for the
- exact requirements for other definitions to coexist with \Xy-pic.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{File header:}
-??w[file header]
-
- Here is what actually happens in the header of |xy.doc|. It contains
- the copyright message, protection against ??w![loading] the file more
- than once, and then bootstrap code to handle category codes and the
- ??c![DOCMODE] format---we explain each separately below:
-
-\DOCHEADER
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Privacy:}
-??w[privacy]
-
- \Xy-pic will warn about control sequences it redefines---thus you can
- be sure that there are no conflicts between \Xy-pic-defined control
- sequences, those of your format, and other macros, provided you
- load??w[loading] \Xy-pic last and get no ??w![warning
- messages] like
-$$
- |Xy-pic Warning: `|\dots|' redefined.|??w[redefined]
-$$
- In general the \Xy-pic kernel will check all control sequences it
- redefines "except" that (1)~generic temporaries like ??c![\next] are
- not checked, (2)~predefined font identifiers (see~\S??[env.fonts])
- are assumed intentionally preloaded, and (3)~some of the more exotic
- control sequence names used internally (like |@{-}|) are only
- checked to be different from ??c![\relax].
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This is handled by ??c![\xywarnifdefined]---after we have ensured
- that it is unique itself\footnote{This may seem paranoid but in fact
- many inconvieniences in the \TeX\ world stem from the fact that
- somebody copied somebody elses definition of, say,
- {\tt\string\xywarnifdefined}, modified it, and then used it in
- something that somehow got distributed! The `flat name space'
- problem remains \TeX\ largest problem as a programming language in
- this \TeX\ hackers opinion.}. ??c![\xydef@], ??c![\xylet@], and
- |\xynew@{|<type>|}|??c[\xynew@] are abbreviations used to this end
- throughout \Xy-pic instead of ??c![\let], ??c![\def], and the
- |\new|<type> commands.
-
- Next some auxilliaries: |\xydefcsname@| is similar to |\xydef@|
- except that it builds the control sequence with ??c![\csname] \dots\
- ??c![\endcsname] which means that it is |\relax| when undefined---there
- is thus no way to prevent redefinition of control sequences bound to
- ??c![\relax]~\frowny.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
- |\xyletcsnamecsname@| is to ??c![\let] one weird control sequence
- be the same as another using several |\expandafter|s:
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
- Finally ??c![\codeof]: a useful hack used to allow any characters in
- control sequences: ??c![\codeof]<cs> expands to the characters of the
- control sequence <cs> as a string of `other' characters, \ie, all of
- category 12 and with a \verb*/ /$_{12}$ after every control sequence.
- The <cs> must be a macro or it blows up.
-
-\DOCMODE(
-\xywarnifdefined\codeof
-\xywarnifdefined\codeof@
-{\catcode`\:=12 % to ensure that all of :-> and <-: are other :-)
- \gdef\codeof#1{\expandafter\codeof@\meaning#1<-:}
- \gdef\codeof@#1:->#2<-:{#2}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Category codes:\ }
-
- The situation is complicated by the flexibility of
- \TeX's input format. The culprit is the `??w![category code]'
- concept of \TeX\ (\cf~\cite[p.37]{K84:TeXbook}): when loaded \Xy-pic
- requires the characters {\tt\char32}|\{}%| (the first is a space) to
- have their standard meaning and all other printable characters to
- have the "same category as when \Xy-pic will be used"---in particular
- this means that (1)~you should surround the ??w![loading] of \Xy-pic
- with ??c![\makeatother] \dots\ ??c![\makeatletter] when loading it
- from within a \LaTeX\ package, and that (2)~\Xy-pic should be loaded
- after files that change category codes like the ??c![german.sty] that
- makes |"| active??w[active characters]. Some styles require that you
- reset the catcodes for every diagram, \eg, with ??c![french.sty] you
- should use the command |\english| before every |\xymatrix|.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- We define ??c![\xyuncatcodes] to restore the current catcodes, and
- ??c![\xycatcodes] to install our own.
-
- Here is an exact list of the category codes which \Xy-pic requires
- (all standard in plain \TeX):
-$$
-\vcenter{\tabskip=.5em plus1fil \halign to\displaywidth{#\hfil&&\hfil#\hfil\cr
- character(s) &|\| &|{| &|}| &CR &TAB SP&|A|--|Z| |a|--|z| &|0|--|9| &|%| \cr
- category code & 0 & 1 & 2 & 5 & 10 & 11 & 12 & 14 \cr}
-}$$
- Furthermore none of the remaining printable ASCII characters
-$$
- |!"#$&'()*,/:;?@[]^_`||~|
-$$
- may be of category 0, 1, 2, 9, 14, or 15, because all should be
- tokens allowed in the replacement text of a |\def|---this also means
- that they may not be active characters defined to be ``|\outer|''!
-
- All other catcodes needed are established using ??c![\xycatcodes]
- defined above---this is the reason the macros must be loaded at a
- time where the category codes are stable (otherwise it will make them
- stable!).
-
- Internally \Xy-pic enforces the following category codes:
-$$
-\vcenter{\tabskip=.5em plus1fil \halign to\displaywidth{#\hfil&&\hfil#\hfil\cr
- character &|#|&|$|&|&|&|'|&|+|&|-|&|.|&|<|&|=|&|>|&|@|&|`|\cr
- ASCII code & 35& 36& 38& 39& 43& 45& 46& 60& 61& 62& 64& 96\cr
- category code& 6 & 3 & 4 & 12& 12& 12& 12& 12& 12& 12& 11& 12\cr
- abbreviation&|HASH|&|DOLL|&|AND|&|RQ|&|PLUS|&|DASH|&|DOT|
- &|LT|&|EQ|&|GT|&|AT|&|LQ|\cr}
-}$$
- with special control sequences named |\add|<abbreviation>|@| that
- take an argument and expand to it followed by the original character
- token, \ie, many tests throughout the program look like |\addDOT@|
- |\ifx| |\next| \dots
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\inputdoc!{xyrecat.doc}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The last block of the \Xy-pic header bootstraps the ``??c![DOCMODE]
- format'' used in |.doc| variants of \Xy-pic macro files in order to
- keep documentation and macros together in a literal programming style
- (this is redundant in the |xy.tex| macro file where all instances of
- |DOCMODE| have been eliminated (see chapter \S??g[:Makefile] for how
- this is accomplished) but it is included anyway since users may load
- options still in |DOCMODE| format). The details of |DOCMODE| are
- described in |xydoc.sty|, a special \LaTeX\ package used to typeset
- \Xy-pic documentation; please read it if you intend to write \Xy-pic
- options.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Integration with standard formats}
-??w[formats]
-%
- This is handled by the |xyidioms.tex| file and the integration as a
- \LaTeX~\cite{L94:LaTeX} package by |xy.sty|.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- We input |xyidioms.tex| from the kernel:
-
-\DOCMODE(
-\input xyidioms
-\DOCMODE)
-
-\DOCMODE1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{xyidioms.tex:}
-??c[xyidioms.tex]%
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{xyidioms.doc:}
-??c[xyidioms.doc]%
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\inputdoc!{xyidioms.doc}
-
-\paragraph{xy.sty:}
-??c[xy.sty]%
-%%
- If you use ??w![\LaTeX] then this file makes it possible to
- load??w[loading] \Xy-pic as a `??w![package]' using the
- ??w![\LaTeXe]~\cite{L94:LaTeX} ??c![\usepackage] command:
-%
-\begin{defs1}
-??c![\usepackage] |[|<option>|,|\dots|]| |{xy}|
-\end{defs1}
-\noindent\unskip
-%
- where the <option>s will be interpreted as if passed to
- ??c![\xyoption] (\cf~\S??[option]).
-
- The only exceptions to this are the options having the same names as
- those driver package options of \GROUP~??g[:drivers], which appear in
- \cf~\cite[table 11.2, p.317]{GMS94:LaTeXC} or the \LaTeXe\ |graphics|
- bundle. These will automatically invoke any backend extension
- required to best emulate the \LaTeXe\ behaviour. (This means that,
- \eg, ??C![dvips] and ??C![textures] can be used as options to the
- ??c![\documentclass] command, with the normal effect.)
-
- The file also works as a \LaTeX~2.09~\cite{L86:LaTeX} `??w![style
- option]' although you will then have to load options with the
- |\xyoption| mechanism described in \S??[option].
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Here is the raw source of |xy.sty|.
-
-\inputdoc0{xy.sty}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Logo, version, and messages}
-??=[env.logo]
-
- Loading \Xy-pic prints a ??w![banner] containing the version and
- author of the kernel; small progress ??w![messages] are printed when
- each major division of the kernel has been loaded. Any options
- loaded will announce themself in a similar fashion.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Of these, ??c![\stripRCS] is a very useful hack for extracting the
- first component of an RCS |$|\dots|$| keyword value.
-
-\DOCMODE(
-\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}
-
-\edef\next{\stripRCS$Revision: 3.7 $}
-\xylet@\xyversion=\next
-
-\edef\next{\stripRCS$Date: 1999/02/16 15:12:50 $}
-\xylet@\xydate=\next
-
-\xydef@\Xygreet@{%
- \W@{}%
- \W@{ Xy-pic version \xyversion\space<\xydate>}%
- \W@{ Copyright (c) 1991-1998 by Kristoffer H. Rose <krisrose@ens-lyon.fr>}%
- \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:}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- If you refer to \Xy-pic in your written text (please do~\smiley~)
- then you can use the command ??c![\Xy]|-pic| to typeset the
- ``??w![\Xy-pic]'' ??w![logo]. The ??w![version] of the kernel is
- typeset by ??c![\xyversion] and the release date by ??c![\xydate] (as
- found in the banner). By the way, the \Xy-pic "name"\footnote{No
- description of a \TeX\ program is complete without an explanation of
- its name.} originates from the fact that the first version was
- little more than support for $(x,y)$ coordinates in a configurable
- coordinate system where the main idea was that "all" operations could
- be specified in a manner independent of the orientation of the
- coordinates. This property has been maintained except that now the
- package allows explicit absolute orientation as well.
-
-\DOCMODE(
-\xydef@\Xy{\leavevmode
- \hbox{\kern-.1em X\kern-.3em\lower.4ex\hbox{Y\kern-.15em}}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Messages that start with ``|Xy-pic| ??c![Warning]'' are indications
- that something needs your attention; an ``|Xy-pic| ??c![Error]'' will
- stop \TeX\ because \Xy-pic does not know how to proceed.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- We use the input line number if available and rudimentary help in the
- form of a reference to the manual if no specific help string is
- given. ??c![\newlinechar] is set locally to |^^J| while writing such
- that messages of several lines can be written.
-
-\DOCMODE(
-\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}}}
-\DOCMODE)
-
- Finally one that I hope will never get expanded~\frowny
-
-\DOCMODE(
-\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@ens-lyon.fr.}%
- \errmessage{Xy-pic BUG: #1 -- notify krisrose@ens-lyon.fr.}}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Fonts}
-??=[env.fonts]
-
- The \Xy-pic kernel implementation makes its drawings using five
- specially designed ??w![fonts]:%
-%
-??w[dashes]??w[tips]??w[circles]??w[hooks]??w[squiggles]
-$$
-\begin{array}{\otherbar c\otherbar c\otherbar l\otherbar}
-\hline
- \hbox{Font} & \hbox{Characters} & \hbox{Default}\\
-\hline
- ??c![\xydashfont]& \hbox{dashes} & ??c![xydash10]\\
- ??c![\xyatipfont]& \hbox{arrow tips, upper half} & ??c![xyatip10]\\
- ??c![\xybtipfont]& \hbox{arrow tips, lower half} & ??c![xybtip10]\\
- ??c![\xybsqlfont]& \hbox{quarter circles for\qquad} & ??c![xybsql10]\\
- & \hbox{\qquad hooks and squiggles} &\\
- ??c![\xycircfont]& \hbox{$1/8$ circle segments} & ??c![xycirc10]\\
-\hline
-\end{array}
-$$
- The first four contain variations of characters in a large number of
- directions, the last contains 1/8 circle segments.
-
-\paragraph*{Note:}
- The default fonts are not part of the \Xy-pic kernel "specification":
- they just set a standard for what drawing capabilities should at
- least be required by an \Xy-pic implementation. Implementations
- exploiting capabilitites of particular output devices are in use.
- Hence the fonts are only loaded by \Xy-pic if the control sequence
- names are undefined---this is used to preload them at different sizes
- or prevent them from being loaded at all.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- To be more precise, \Xy-pic requires ??c![\xydashfont] to be a
- "??w![semidirectional]" font as \MF\ will generate with the driver
- file ??c![xyd2.mf]---this is very important because the "??w![italic
- corrections]" of the characters in this particular font are used to
- approximate trigonometric computations, so if you replace
- ??c![\xydashfont] be sure to replace it with another semidirectional
- font! Similarly, the three fonts ??c![\xyatipfont],
- ??c![\xybtipfont], and ??c![\xybsqlfont] should be
- "??w![directional]" as \MF\ will generate with the driver file
- ??c![xyd.mf].
-
- Finally, ??c![\xycircfont] should contain $1/8$ circle segments of
- various radii as described in |xycirc10.mf|.
-
- The following code loads the fonts "unless it was already loaded" and
- defines some associated dimensions for ??c![\xydashfont] and
- ??c![\xybsqlfont]: for each of these $f$ we define $f_\ell$ as the
- length of a unit in the current direction (used when juxtaposing for
- connections), $f_h$ as the height of the unit (used for several
- parallel connections), and $f_w$ as the `line width' of the unit (to
- know how to interface to rules).
-
-\DOCMODE(
-\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
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Allocations}
-??=[env.alloc]??w[allocation]
-
- One final thing that you must be aware of is that \Xy-pic allocates a
- significant number of dimension registers and some counters, token
- registers, and box registers, in order to represent the state and do
- computations. The current kernel allocates 4~counters,
- 28~dimensions, 2~box registers,4~token registers, 1~read channel, and
- 1~write channel (when running under \LaTeX; some other formats use
- slightly more because standard generic temporaries are used).
- Options may allocate further registers (currently loading
- "everything" loads 6~dimen-, 3~toks-, 1~box-, and 9~count-registers
- in addition to the kernel ones).
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\message{allocations:}
-\DOCMODE)
-
- See \S??[env.loading] for scratch register allocations.
-
-\paragraph*{Picture state:}
-
- These realise the picture state as described in \S??[basics.state]:
- $c$, $p$, the "base", and the picture size:
-
-\DOCMODE(
-\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
-\DOCMODE)
-
-\paragraph*{Drop and connect:}
-
- |\lastobjectbox@| stores the most recently dropped
- object.??c[\lastobject]
-
-\DOCMODE(
-\xynew@{box}\lastobjectbox@
-\DOCMODE)
-
- |\zerodotbox@|??c[\zerodot] is of zero size with a `dot' in the form
- of a rule the width and height as the line width of the line font;
- ??c![\zz@] is `almost-zero-check'.
-
-\DOCMODE(
-\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@
-\DOCMODE)
-
-\paragraph*{Direction state:}
-
- The ??w![direction] state is rather complicated and described in
- detail in~\S??[algo.direction].
-
-\DOCMODE(
-\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
-\DOCMODE)
-
-\paragraph*{Miscellaneous:}
-
- Finally some generic allocations used in the following:
-
-\DOCMODE(
-\xynew@{read}\xyread@ % for `safe input'
-\xynew@{write}\xywrite@ % for `saving' to .xyc file
-
-\xynew@{count}\csp@ % for `control stack pointer'
-\xynew@{dimen}\quotPTK@ % for `fractions'
-\DOCMODE)
-
- The required temporaries are defined by |xyidioms.tex|.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Utility macros}
-??=[env.util]
-
- Finally we define some utility macros.
-
-\DOCMODE(
-\message{utility macros;}
-\DOCMODE)
-
-\paragraph*{Simple queue:}
-??w[queue]
-
- Just appending to the ??c![\toks@] list.
-
-\DOCMODE(
-\xydef@\addtotoks@#1{\toks@=\expandafter{\the\toks@#1}}
-\DOCMODE)
-
-\paragraph*{Safe input:}
-
- Check that file is available before input. Tries the alternate
- extension |.doc| in case the |.tex| file is not there. The second is
- the lowest level function used when the desired files cannot be
- preloaded and do not exist in |.doc| form.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\paragraph*{Continuation stack:}
-
- This is used to `??w![enter]' a new ??w![context] and `??w![leave]'
- to the previous context. It works as a stack defining a control
- sequence for each level, thus using a counter as the stack pointer.
- Defines the following
-%
-\begin{defs}
- |\csp@| & `Continuation Stack Pointer' \cr
- |\enter@{|<code>|}| & Enter new block with <code> expanded as continuation\cr
- |\nter@{|<code>|}| & Enter new block with<code> as continuation\cr
- |\dontleave@| & Execute continuation without leaving block\cr
- |\unenter@| & Leave block without executing its continuation\cr
- |\leave@| & Leave block (execute its continuation)\cr
-\end{defs}
-
- So |\enter@{}\leave@| is a noop and |\leave@| is the same as
- |\dontleave@\unenter@|.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\paragraph*{Fractions:}
-??w[fraction computation]
-
- Below we often use a factor on the form of a quotient $A/B$. Here is
- a hack to get it; it is not very precise but suffices for our needs.
-%
-\begin{defs}
- |\quotient@| <cs> |{|$A$|}| |{|$B$|}| &
- Defines <cs> to expand (immediately) to the factor corresponding to
- $A/B$; $A$, $B$ must be dimensions where $\abs{A}\lt|\maxdimen|/|KK|$
- and $\abs{B}\gt|KK|$
-\cr
- |\quotient@@| <cs> |{|$A$|}| |{|$B$|}| &
- Same, but uses $8|KK|$ for |KK|.
-\cr
-\end{defs}
-%
- "Notes": (1) If |\c| is a count register, then |{1\c}| is a legal
- dimension. (2) Really computes
-$$
- \left((A*\abs{|KK|}) / (B/\abs{|KK|})\right) * \left(|1pt|/\abs{|K|}\right)
-$$
- and then defines <cs> to expand to the resulting |pt| value. This
- means that results are only reasonable for
- $\abs{A}\ll|\maxdimen|/|KK|$ and $\abs{B}\gg|KK|$.
-
-\DOCMODE(
-\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@}}
-\DOCMODE)
-
-\paragraph*{Loops:}
-
- \Xy-pic uses its own |\loop@| to avoid interference with plain
- ??c![\loop].
-
-\DOCMODE(
-\xydef@\loop@#1\repeat@{\def\body@{#1}\iterate@}\xylet@\repeat@=\fi
-\xydef@\iterate@{\body@\expandafter\iterate@\else\fi}
-\DOCMODE)
-
-\paragraph*{Execution:}
-
- All ??w![execution] of \Xy-commands should be `indirect', \ie,
- execute
-$$
- |\xy@{|<source>|}{|<internal commands>|}|
-$$
- where the <internal commands> directly do the desired operation(s).
- This is used for tracing and can be used to separate parsing and
- execution by changing |\xy@|; |\oxy@| is kept stable such that
- |\let\xy@=\oxy@| will reestablish a sane state; it should only be
- changed with |\change@oxy@| to make this easy to verify.
-
-\DOCMODE(
-\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
-% \W@{*OXY@:=\meaning\oxy@}%
-}
-\DOCMODE)
-
- This is also used to check whether an \Xy-picture is already
- active; use as |\if\inxy@|\dots|\else|\dots|\fi|:
-
-\DOCMODE(
-\xydef@\inxy@{T\ifx\xy@\xyinitial@ F\else T\fi}
-\DOCMODE)
-
- The final execution command is a trick used to put bits of the user's
- input inside the |\next@| scratch macro "with the user's catcodes
- intact": |\xy@@ix@{|\dots|}| is the same as
- |\xy@@{\global\toks9={|\dots|}}| except for the category codes used
- for the \dots.
-
-\DOCMODE(
-\xydef@\xyxy@@ix@{\begingroup
- \xyuncatcodes\afterassignment\endgroup\global\toks9=}
-\DOCMODE)
-
- This to save some tokens -- maybe not worth it:
-
-\DOCMODE(
-\xydef@\xy@@{\xy@{}}
-\DOCMODE)
-
- Finally this to establish a sane state -- only use within a group!
-
-\DOCMODE(
-\xydef@\plainxy@{\let\xy@=\xyxy@ \change@oxy@\xy@ \let\xy@@ix@=\xyxy@@ix@}
-\DOCMODE)
-
- \TODO: Clean up all uses of these such that <source> is always that
- and only that. Define a method for `inner' \aka\ `implied' <source>
- that doesn't really count in that it is a consequence of some other
- source\dots
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-
-\section{Picture basics}
-??=[basics]
-
- The basic concepts involved when constructing \Xy-pictures are
- positions and objects, and how they combine to form the state used by
- the graphic engine.
-
- The general structure of an \Xy-picture is as follows:
-%
-\begin{defs1}
-%
- ??c![\xy] <pos> <decor> ??c![\endxy] \cr
-%
-\end{defs1}
-\noindent\unskip
-%
- builds a box with an \Xy-picture (\LaTeX\ users may substitute
- |\begin{xy}| \dots\ |\end{xy}| if they prefer).
-
- <pos> and <decor> are components of the special `graphic language'
- which \Xy-pictures are specified in. We explain the language
- components in general terms in this \S\ and in more depth in the
- following \S\S.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The code for the |\xy|\dots|\endxy| command is presented last in this
- section.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Positions}
-??=[basics.pos]
-
- All "??w![positions]" may be written |<|$X$|,|$Y$|>| where ??w![$X$]
- is the \TeX\ dimension distance "right" and ??w![$Y$] the distance
- "up" from the "??w![zero position]" ??c![0] of the \Xy-picture (|0|
- has coordinates |<0mm,0mm>|, of course). The zero position of the
- \Xy-picture determines the box produced by the
- ??c![\xy]\dots??c![\endxy] command together with the four parameters
- ??w![$X_{\min}$], ??w![$X_{\max}$], ??w![$Y_{\min}$], and
- ??w![$Y_{\max}$] set such that all the objects in the picture are
- `contained' in the following rectangle:
-$$
-\xy.(-13,-12).(25,15)="b"*\frm{-}*@{o},
- "b"+<2pc,-.8pc>*{|0|};"b"*{}**@{.},
- "b"+L+<-2pc,-.8pc>*!UR\txt{\TeX\ reference point};"b"+L*@{*}**@{.},
- "b"+0;
- "b"+L **@{-} ?>*@{>} ?*++!U{X_{\min}},
- "b"+R **@{-} ?>*@{>} ?(.7)*++!U{X_{\max}},
- "b"+D **@{-} ?>*@{>} ?(.7)*++!L{Y_{\min}},
- "b"+U **@{-} ?>*@{>} ?*++!L{Y_{\max}}
-\endxy
-$$
- where the distances follow the ``up and right~$\gt0$'' principle,
- \eg, the indicated \TeX\ reference point has coordinates
- |<|$X_{\min}$|,0pt>| within the \Xy-picture. The zero position does
- not have to be contained in the picture, but $X_{\min} \le X_{\max}
- \land Y_{\min} \le Y_{\max}$ always holds. The possible positions
- are described in detail in~\S??[pos].
-
- When an \Xy-picture is entered in "??w![math mode]" then the
- reference point becomes the ``vcenter'' instead, \ie, we use the
- point |<|$X_{\min}$|,-\the\fontdimen22>| as reference point.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Objects}
-??=[basics.object]
-
- The simplest form of putting things into the picture is to `drop' an
- "??w![object]" at a position. An object is like a \TeX\ box except
- that it has a general "??w![Edge]" around its reference point---in
- particular this has the "??w![extents]" (\ie, it is always contained
- within) the dimensions ??w![$L$], ??w![$R$], ??w![$U$], and ??w![$D$]
- away from the reference point in each of the four directions left,
- right, up, and down. Objects are encoded in \TeX\ boxes using the
- convention that the ??w![\TeX\ reference point] of an object is at
- its left edge, thus shifted |<|${-}L$|,0pt>| from the center---so a
- \TeX\ box may be said to be a rectangular object with $L=|0pt|$.
- Here is an example:
-$$
- \let\objectstyle=\scriptstyle
- \xy(0,0).(-10,-5).(15,8)*\frm{-}="box"*@{o}+0;
- "box"+L*{}**@{.}?*{L},
- "box"+R*{}**@{.}?*{R},
- "box"+D*{}**@{.}?*{D},
- "box"+U*{}**@{.}?*{U},
- "box"+L+<-2pc,-.8pc>*!UR\hbox{\TeX\ reference point};
- "box"+L*{\bullet}*{}**@{.},
- \endxy
-$$
- The object shown has a rectangle edge but others are available even
- though the kernel only supports rectangle and circle edges. It is
- also possible to use entire \Xy-pictures as objects with a rectangle
- edge, |0| as the reference point, $L={-X_{\min}}$, $R={X_{\max}}$,
- $D={-Y_{\min}}$, and $U={Y_{\max}}$. The commands for objects are
- described in~\S??[object].
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Connections}
-??=[basics.connect]
-
- Besides having the ability to be dropped at a position in a picture,
- all objects may be used to "??w![connect]" the two current objects of
- the state, \ie, $p$ and $c$. For most objects this is done by
- `filling' the straight line between the centers with as many copies
- as will fit between the objects:
-$$
- \let\objectstyle=\scriptscriptstyle
- \xy*=<12pt>[o]{p}="P"*\cir{} ; (60,15)*=<18pt,8pt>{c}="C"*\frm{-}**@{--}
-%
- **\xybox{(0,0).(-3,-2).(2,3)*\frm{.}="box"*@{o}+0;
- "box"+L**@{.}?*{L},
- "box"+R**@{.}?*{R},
- "box"+D**@{.}?*{D},
- "box"+U**@{.}?*{U}},
- \endxy
-$$
- The ways the various objects connect are described along with the
- objects.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Decorations}
-??=[basics.decor]
-
- When the ??c![\xy] command reaches something that can not be
- interpreted as a continuation of the position being read, then it is
- expected to be a "??w![decoration]", \ie, in a restricted set of
- \TeX\ commands which add to pictures. Most such commands are
- provided by the various "user options" (\cf~\S??[option])---only a
- few are provided within the kernel to facilitate programming of such
- options (and user macros) as described in~\S??[decor].
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{The \Xy-pic state}
-??=[basics.state]
-
- Finally we summarise the user-accessible parts of the
- ??w![\Xy-picture state] of two positions together with the
- last object associated with each: the "previous", ??w![$p$], is the
- position |<|??w![$X_p$]|,| ??w![$Y_p$]|>| with the object
- ??w![$L_p$], ??w![$R_p$], ??w![$D_p$], ??w![$U_p$], ??w!["Edge$_p$"],
- and the "current", ??w![$c$], is the position |<|??w![$X_c$]|,|
- ??w![$Y_c$]|>| with the object ??w![$L_c$], ??w![$R_c$], ??w![$D_c$],
- ??w![$U_c$], ??w!["Edge$_c$"].
-
- Furthermore, \Xy-pic has a configurable "??w![cartesian coordinate
- system]" described by an "origin" position
- |<|??w![$X_"origin"$]|,|??w![$Y_"origin"$]|>|
- and two "base vectors" |<|??w![$X_"xbase"$]|,|??w![$Y_"xbase"$]|>|
- and~|<|??w![$X_"ybase"$]|,|??w![$Y_"ybase"$]|>|
- accessed by the usual notation using parentheses:
-$$
-\arraycolsep=.25em \begin{array}{rclll}
- |(|x|,|y|)| & = & |<| & X_"origin" + x*X_"xbase" + y*X_"ybase" & |,| \\
- & & & Y_"origin" + x*Y_"xbase" + y*Y_"ybase" & |>| \\
-\end{array}
-$$
- This is explained in full when we show how to set the base in
- note~??[base] of \S??[pos].
-
- Finally typesetting a connection will setup a ``??w![placement
- state]'' for referring to positions on the connection that is
- accessed through a special |?| position construction; this is also
- discussed in detail in \S??[pos].
-
- The \Xy-pic "??w![state]" consists of all these parameters
- together. They are initialised to zero except for
- $X_"xbase"=Y_"ybase"=|1mm|$.
-
-\DOCMODE1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- The edges are not directly available but points on the edges may be
- found using the different <corner> forms described in \S??[pos].
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- The edges are are available to the programmer as token lists; see
- \S??[algo.edge] for details.
-
-\subparagraph*{Procedure:}
-
- ??c![\xy]\ \dots\ ??c![\endxy] builds an object from an \Xy-pic <pos>
- <decor> sequence as follows: (??_[xy1])~|\xy| starts the |\hbox| to
- contain the \Xy-picture, (??_[xy2])~starts an inner box to be resized
- appropriately later, sets |\xy@| to just execute immediately, and
- makes a fresh scope for global internal names, and
- (??_[xy3])~initialises the \Xy-pic state (setting the size to a
- ridiculously large negative value), and finally passes control to
- the <pos> parser.
-
- Some care is taken to `lift' the diagram a bit to `vcenter' it when
- in math mode, and ??c![\mathsurround] is set to zero to make changes
- into math mode safe.
-
-\DOCMODE(
-\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 %?*[xy1]
- \setboxz@h\bgroup %?*[xy2]
- \plainxy@
- \X@c=\z@ \Y@c=\z@ \czeroEdge@ %?*[xy3]
- \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
-\DOCMODE)
-
- When finished |\endxy| does a |\relax| to disable any parser still
- active and (??_[endxy1])~resets the size of the generated box to zero
- if no (unhidden) objects were inserted, and (??_[endxy2])~defines a
- command to end both the temporary and the `proper' box and set its
- size correctly---this uses ??c![\edef] to expand the required
- dimensions used within the temporary box before leaving the two
- groups (namely the temporary box and the `proper' box).
-
-\DOCMODE(
-\xydef@\endxy{\if\inxy@\else\xyerror@{Unexpected \string\endxy}{}\fi
- \relax
- \dimen@=\Y@max \advance\dimen@-\Y@min %?*[endxy1]
- \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 %?*[endxy2]
- \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}
-\DOCMODE)
-
- If an |\xy| is not properly closed by an |\endxy| then the error
- message is produced. This happens if (a)~too many |\xy|s or (b)~too
- many |\endxy|s or (c)~if there is the correct number of each but the
- grouping becomes unbalanced due to a misplaced |}| or |\egroup|.
-
-\DOCMODE(
-\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.}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- It is possible to insert an `initial' piece of <pos> <decor> at the
- start of every \Xy-picture with the declaration
-%
-\begin{defs1}
-|\everyxy={| <text> |}|
-\end{defs1}
-\noindent\unskip
-%
- This will act as if the <text> was typed literally right after each
- ??c![\xy] command, parsing the actual contents as if it follows this
- -- thus it is recommended that <text> has the form <pos>|,| such that
- users can continue with <pos> <decor>.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-
-\section{Positions}
-??=[pos]
-
-\DOCMODE(
-\message{positions,}
-\DOCMODE)
-
- A <pos>ition is a way of specifying locations as well as dropping
- objects at them and decorating them---in fact any aspect of the
- \Xy-pic state can be changed by a <pos> but most will just change the
- coordinates and/or shape of~$c$.
-
-\begin{figure*}[tp]\SQUEEZE
-\vss
-\begin{syntax}
- ??w![<pos>]
- &\iss & <coord>
- & $c\from<coord>$
-\cr
- &\orr & <pos> ??c![+] <coord>
- & $c \from <pos> + <coord>$??^[arithmetic]
-\cr
- &\orr & <pos> ??c![-] <coord>
- & $c \from <pos> - <coord>$??^[arithmetic]
-\cr
- &\orr & <pos> ??c![!] <coord>
- & $c\from<pos>$ then ??!^[skew] $c$ by <coord>
-\cr
- &\orr & <pos> ??c![.] <coord>
- & $c\from<pos>$ but also ??!^[covering] $<coord>$
-\cr
- &\orr & <pos> ??c![,] <coord>
- & $c\from<pos>$ then $c\from<coord>$
-\cr
- &\orr & <pos> ??c![;] <coord>
- & $c\from<pos>$, swap $p$ and $c$, $c\from<coord>$
-\cr
- &\orr & <pos> ??c![:] <coord>
- & $c\from<pos>$, set ??!^[base], $c\from<coord>$
-\cr
- &\orr & <pos> ??c![::] <coord>
- & $c\from<pos>$, $"ybase"\from c-"origin"$, $c\from<coord>$
-\cr
- &\orr & <pos> ??c![*] <object>
- & $c\from<pos>$, ??!^[drop] <object>
-\cr
- &\orr & <pos> ??c![**] <object>
- & $c\from<pos>$, ??!^[connect] using <object>
-\cr
- &\orr & <pos> ??c![?] <place>
- & $c\from<pos>$, $c\from\hbox{??!^[<place>]}$
-\cr
- &\orr & <pos> ??c![@] <stacking>
- & $c\from<pos>$, do <stacking>??^[stack]
-\cr
- &\orr & <pos> ??c![=] <saving>
- & $c\from<pos>$, do <saving>??^[save]
-\cr
-\noalign{\smallbreak}
-%
- ??w![<coord>]
- &\iss & <vector>
- & <pos> is <vector> with zero size
-\cr
- &\orr & <empty> \orr\ ??c![c]
- & reuse last $c$ (do nothing)
-\cr
- &\orr & ??c![p]
- & $p$
-\cr
- &\orr & ??c![x] \orr\ ??c![y]
- & ??!^[axis intersection] with $\overline{pc}$
-\cr
- &\orr & ??c![s]<digit> \orr\ |s{|<number>|}|
- & ??!^[stack] position <digit> or <number> below the top
-\cr
- &\orr & |"|<id>|"|
- & restore what was ??!^[saved] as <id> earlier
-\cr
- &\orr & |{| <pos> <decor> |}|
- & the $c$ resulting from interpreting the ??!^[group]
-\cr
-\noalign{\smallbreak}
-%
- ??w![<vector>]
- &\iss & ??c![0]
- & zero
-\cr
- &\orr & |<| <dimen> |,| <dimen> |>|
- & absolute??c[<>]
-\cr
- &\orr & |<| <dimen> |>|
- & absolute with equal dimensions
-\cr
- &\orr & |(| <factor> |,| <factor> |)|
- & in current ??!^[base]??c[()]
-\cr
- &\orr & ??c![a] |(| <number> |)|
- & ??!^[angle in current base]
-\cr
- &\orr & <corner>
- & from reference point to <corner> of $c$
-\cr
- &\orr & <corner> |(| <factor> |)|
- & The <corner> multiplied with <factor>
-\cr
- &\orr & |/| <direction> <dimen> |/|
- & vector <dimen> ??!^[in <direction>]??c[//]
-\cr
-\noalign{\smallbreak}
-%
- ??w![<corner>]
- &\iss & ??c![L]\orr??c![R]\orr??c![D]\orr??c![U]
- & ??!^[offset] to left, right, down, up side
-\cr
- &\orr & ??c![CL]\orr??c![CR]\orr??c![CD]\orr??c![CU]\orr??c![C]
- & ??!^[offset] to center of side, true center
-\cr
- &\orr & ??c![LD]\orr??c![RD]\orr??c![LU]\orr??c![RU]
- & ??!^[offset] to actual left/down, \dots\ corner
-\cr
- &\orr & ??c![E]\orr??c![P]
- & ??!^[offset] to nearest/proportional edge point to $p$
-\cr
-\noalign{\smallbreak}
-%
- ??w![<place>]
- &\iss & ??c![<] <place> \orr\ ??c![>] <place>
- & ??!^[shave] ??c![(0)]/??c![(1)] to edge of $p$/$c$, $f \from |0|/|1|$
-\cr
- &\orr & |(| <factor> |)| <place>
- & $f \from <factor>$
-\cr
- &\orr & <slide>
- & ??!^[pick place] and apply <slide>
-\cr
- &\orr & ??c![!] |{|<pos>|}| <slide>
- & ??!^[intercept] with line setup by <pos> and apply <slide>
-\cr
-\noalign{\smallbreak}
-%
- ??w![<slide>]
- &\iss & |/| <dimen> |/|
- & ??!^[slide] <dimen> further along connection
-\cr
- &\orr & <empty>
- & no slide
-\cr
-\end{syntax}
-\unskip\vskip-1em
-\caption{\protect<pos>itions.}??=[f.pos]
-\vfill
-\end{figure*}
-
- All possible positions are shown in figure~??[f.pos] with explanatory
- notes below.
-
-\begin{exercise}
- Which of the positions |0|, |<0pt,0pt>|, |<0pt>|, |(0,0)|, and
- |/0pt/| is different from the others?
-\answertext{In the default setup they are all denote the reference point of
- the \Xy-picture but the cartesian coordinate <pos> ??c![(0,0)]
- denotes the point "origo" that may be changed to something else using
- the |:| operator.}
-\end{exercise}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Parsing:}
-
- First the ??c![\POS] and ??c![\afterPOS] <decor>ations, and similar
- ??c![\afterCOORD] and ??c![\afterVECTORorEMPTY] ones. They handle
- parsing of <pos>, <coord>, and <vector>; parsing of <corner> and
- <place> is presented along with note~??[corner] and~??[<place>]
- explaining them.
-
-\DOCMODE(
-\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
-\DOCMODE)
-
- The ??c![\afterVECTORorEMPTY] command is special in that it takes two
- arguments: the `continuation' if a <vector> was found and the
- continuation if <empty> was found (this is not applicable to the
- other two since <empty> is a legal <coord> and thus also a legal
- <pos>).
-
- Next we proceed with the actual parsing primitives: |\COORD@|,
- |\POS@|, and |\VECTOR@|. These are bound to |\xyCOORD@|, |\xyPOS@|,
- and |\xyVECTOR@| in order to be extendable, \eg, the |matrix| option
- extends <coord> to support the |[|"row"|,| "column"|]| format by
- redefining |\COORD@| to first test for this new format and then call
- |\xyCOORD@|.
-
- The parsing commands above are set up such that they all first call
- the |\VECTOR@| command. <coord> and <pos> parsing then proceeds with
- calling the |\COORD@| if there was no <vector>. <pos> parsing then
- calls |\POS@| to continue the <pos> (in both cases).
-
- First <vector>s:
-
-\DOCMODE(
-\xydef@\xyVECTOR@{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\VECTOR@}%gobble spaces
- \else \ifcat A\noexpand\next \let\next@=\VECTOR@letter
- \else \let\next@=\VECTOR@other \fi\fi \next@}
-
-\xylet@\VECTOR@=\xyVECTOR@
-\DOCMODE)
-
- All letters used for <vector>s are uppercase <corner>s except for |a|
- used for angles (where the main code is in note~??[angle in current
- base]); this is also where we introduce the auxiliary
- |\notrelaxorelse@| that takes two control sequences and expands the
- first unless it is relax in which case it expands the second:
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- The <corner> trick is to do nothing when there is nothing and
- initialise both $X$ and $Y$ in all other cases.
-
-\DOCMODE(
-\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 \let\next@=\afterVECTOR@
- \fi\fi\fi\fi\fi\fi\fi\fi \next@}
-
-\xydef@\CORNER@ii{\xy@@{\let\nextii@=\eat@}%
- \VECTORempty@false \xyFN@\CORNER@i}
-\DOCMODE)
-
- |\CORNER@i| recognises the |(|<factor>|)| also; this does no harm as
- it was never called if the first character was a |(|.
-
- The remaining <vector> forms just set $X$ and $Y$.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- \HACK: escape out in case of the special |(*| introducer\dots picked
- up by the <coord> parser, then.
-
-\DOCMODE(
-\xydef@\VECTOR@other@open{%
- \ifx *\next \DN@{\VECTORempty@true \xyFN@\afterVECTOR@(}%)
- \else
- \DN@##1){\xy@{(##1)}{\vfromcartesian@{##1}}\VECTORempty@false\afterVECTOR@}%
- \fi \next@}
-\DOCMODE)
-
- Next <coord>inates that are not <vector>s:
-
-\DOCMODE(
-\xydef@\xyCOORD@{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\COORD@}%gobble spaces
- \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@}
-\DOCMODE)
-
- Finally <pos> parsing after <coord> (possibly <vector>) is
- interpreted:
-
-\DOCMODE(
-\xydef@\xyPOS@{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\POS@}%gobble spaces
- \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@
-\DOCMODE)
-
- |\comma@@| is a hook used to change the operation of |,|, \eg, when
- reading a stack setup where it means `push'.
-
- The final functions serve only to distinguish between the single
- character |:|/|*| and dual character |::|/|**| operators:
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Simple actions:}
-
- Next follow the simplest actions; the complicated ones are explained
- along with their notes below.
-
-\DOCMODE(
-\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@@}
-\DOCMODE)
-
- Next the parsing of coordinate pairs in |<>|:
-
-\DOCMODE(
-\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
-% \advance\X@c 1sp \advance\Y@c 1sp %HACK
-}
-\DOCMODE)
-
- The next group of commands are used to store on the control stack
- with the |\enter@| command, so they "expand" to something useful:
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{notes}
-
-\note??=[arithmetic]
-%
- When doing arithmetic with |+| and |-| then the resulting current
- object inherits the size of the <coord>, \ie, the right
- argument---this will be zero if the <coord> is a <vector>.
-
-\begin{exercise}
- How do you set $c$ to an object the same size as the saved object
- |"ob"| but moved |<|$X$|,|$Y$|>|?
-\answertext{Use the <pos>ition |<|$X$|,|$Y$|>+"ob"|.}
-\end{exercise}
-
-\DOCMODE(
-\xydef@\cplusthec@{\advance\X@c\the\X@c \advance\Y@c\the\Y@c}
-\DOCMODE)
-
-\note??=[skew]
-%
- "Skewing" using |!| just means that the reference point of $c$ is
- moved with as little change to the shape of the object as possible,
- \ie, the edge of~$c$ will remain in the same location except that it
- will grow larger to avoid moving the reference point outside~$c$.
-%
-\begin{exercise}
- What does the <pos> \dots|!R-L| do?
-\answertext{It first sets $c$ according to ``\dots''. Then it changes $c$ to
- the point right of $c$ at the same distance from the right edge of
- $c$ as its width, $w$, \ie,
-$$
-\xy
- *+\hbox{The \dots}="it" *\frm{_\}}!D-U*{w}
- ,{"it"+RD}.{"it"+RU}.{"it"!R-L*{\times}+0}!C *\frm{_\}}!D-U*{w}
-\endxy
-$$}
-\end{exercise}
-%
- \BUG: The result of |!| is always a rectangle currently.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Procedure:}
-
- |!| moves the center of $c$ by a temporarily read $c'$ and then
- readjusts the extents:
-$$
-\begin{array}{rclcl}
- D_c &:=& Y'+Y_c - \min(Y'-D', Y'+Y_c) &=& \max(Y_c+D',0)\\
- U_c &:=& \max(Y'+U', Y'+Y_c) - (Y'+Y_c) &=& \max(U'-Y_c,0)\\
- Y_c &:=& Y'+Y_c\\
- L_c &:=& X'+X_c - \min(X'-L', X'+X_c) &=& \max(X_c+L',0)\\
- R_c &:=& \max(X'+R', X'+X_c) - (X'+X_c) &=& \max(R'-X_c,0)\\
- X_c &:=& X'+X_c\\
-\end{array}
-$$
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[covering]
-%
- A <pos> "covers" another if it is a rectangle with size sufficiently
- large that the other is ``underneath''. The |.| operation
- ``extends'' a <pos> to cover an additional one---the reference point
- of $c$ is not moved but the shape is changed to a rectangle such that
- the entire $p$ object is covered.
-
- \BUG: non-rectangular objects are first ``translated'' into a
- rectangle by using a diagonal through the object as the diagonal of
- the rectangle.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Procedure:}
-
- |.| takes a temporary object $c'$ and adjusts the extents of $c$ such
- that it is covered.
-$$
-\begin{array}{rclcl}
- L_c &:=& X' - \min(X'-L_c, X-L) &=& \max(L_c, A+L)\\
- R_c &:=& \max(X'+R_c, X+R) - X' &=& \max(R_c, -A+R)\\
- D_c &:=& Y' - \min(Y'-D_c, Y-D) &=& \max(D_c, B+D)\\
- U_c &:=& \max(Y'+U_c, Y+U) - Y' &=& \max(U_c, -B+U)\\
-\end{array}
-$$
- with $|<|A|,|B|>| = |<|X'-X|,|Y'-Y|>|$. First method~2 of the object
- is used to convert it into a rectangle.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[base]
-%
- The operations |:| and |::| set the "base" used for <coord>inates
- having the form $|(|x|,|y|)|$. The |:| operation will set
- |<|$X_"origin"$|,| $Y_"origin"$|>| to~$p$, |<|$X_"xbase"$|,|
- $Y_"xbase"$|>| to $c-"origin"$, and~|<|$X_"ybase"$|,| $Y_"ybase"$|>|
- to |<|${-}Y_"xbase"$|,| $X_"xbase"$|>| (this ensures that it is a
- usual square coordinate system). The |::| operation may then be used
- afterwards to make nonsqare bases by just setting "ybase" to
- $c-"origin"$. Here are two examples: firstly |0;<1cm,0cm>:| sets the
- coordinate system
-$$
-\xy
- <0cm,0cm>*@{o};<1cm,0cm>:
- (0,0);{(1,0)**@{-}?>*@{>}},{(0,1)**@{-}?>*@{>}},
- (0,0)*+!UR\hbox{\small"origin"},
- (1,0)*+!LC\hbox{\small"xbase"},
- (0,1)*!D\hbox{\small"ybase"},
- (1,1)*{*}*++!CL{|(1,1)|}+0;(0,1)**@{.},(1,0)**@{.}
-\endxy
-$$
- while~|<1cm,.5cm>;<2cm,1.5cm>:<1cm,1cm>::|\hfil defines
-$$
-\xy
- <0cm,0cm>*@{o}, <1cm,.5cm>;<2cm,1.5cm>:
-%
- (0,0);{(0,1)**@{--}?(1)*@{>}},
- (0,1)*+!R\txt\small{"ybase"\\before\\{\tt::}},
-%
- <1cm,1cm>::
- (0,0);{(1,0)**@{-}?(1)*@{>}},{(0,1)**@{-}?(1)*@{>}},
- (0,0)*+!LU\txt\small{"origin"},
- (1,0)*+!LC\txt\small{"xbase"},
- (0,1)*!D\txt\small{"ybase"},
- (1,1)*{*}*++!CL{|(1,1)|}+0;(0,1)**@{.},(1,0)**@{.}
-\endxy
-$$
- where in each case the $\circ$ is at |0|, the base vectors have been
- drawn and the $\times$ is at |(1,1)|.
-
- When working with cartesian coordinates these three special <factor>s
- are particularly useful:
-%
-\begin{defs}
- ??c![\halfroottwo] & $0.70710678\approx{1\over2}\sqrt2$ \cr
- ??c![\partroottwo] & $0.29289322\approx 1-{1\over2}\sqrt2$ \cr
- ??c![\halfrootthree] & $0.86602540\approx{1\over2}\sqrt3$ \cr
-\end{defs}
-\noindent\unskip
-%
- More can be defined using |\def| (or |\newcommand| in \LaTeX).
-
-\DOCMODE(
-\xydef@\halfroottwo{.70710678}
-\xydef@\partroottwo{.29289322}
-\xydef@\halfrootthree{.8660254}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Procedure:}
-
- The code chosen by the parsing is very simple; the only tricky bit is
- to ensure that |\basefromthebase@| always expands to set the current
- base.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[angle in current base]
-%
- An "angle" $\alpha$ in \Xy-pic is the same as the coordinate pair
- $|(|\cos\alpha|,|\sin\alpha|)|$ where $\alpha$ must be an integer
- interpreted as a number of degrees. Thus the <vector> |a(0)| is the
- same as |(1,0)| and |a(90)| as |(0,1)|, etc.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The translation involves several steps: (??_[ang1])~Normalise the
- argument to be within $[0^\circ:360^\circ[$. (??_[ang2])~Flip angle
- around $x$-axis and then $y$-axis to ensure it is in the first
- quadrant, \ie, within $[0^\circ:90^\circ[$. (??_[ang3])~Flip around
- diagonal to ensure angle within $[0^\circ:45^\circ[$.
- (??_[ang4])~Find values $\phi\le\alpha\lt\psi$ from the table in
- figure~??[f.angles] (using recursive table lookup -- at most 3 tests
- needed). (??_[ang5])~build vector $(x,y)$ interpolated between the
- sin/cos values for $\phi$ and $\psi$ using the formula
-$$
- \left(\cos\phi + k(\cos\psi-\cos\phi) ,
- \sin\phi + k(\sin\psi-\sin\phi) \right) ~,
- \quad\hbox{where}~k = \frac{\alpha-\phi}{\psi-\phi}
-$$
- (??_[angx])~build the chosen vector.
-
-\begin{figure*}[tp]
- \noindent Vectors for angles in $[0^\circ:45^\circ]$: contains all
- angles required to typeset fractions up to $\frac{n}{12}\times2\pi$,
- $\frac1{16}\times2\pi$, and $\frac1{24}\times2\pi$ exactly, and two
- extra low ones to ensure that all gaps are less than $5^\circ$ and
- the precision of all sine/cosines better than $\frac1{1000}$.
- $$
- \small
- \def"{\vphantom{\frac()}\frac}
- \begin{array}{\otherbar l\otherbar r@{~}l\otherbar c\otherbar c\otherbar}
- \hline
- ~\alpha & (\cos\alpha, & \sin\alpha) & \hbox{fractions of $2\pi$} &
- \hbox{flipped fractions of $2\pi$} \\
- \hline
- ~0&(1,&0) & "0{n}
- & "12,"14,"24,"28,"34,"36,"3{12},"48,"5{10},"68,"6{12},"9{12} \\
- ~4.090909 & (.99677570, & .08023846) & - & - \\
- ~6 & (.99452190, & .10452846) & - & - \\
- ~8.181818 & (.98982144, & .14231484) & "3{11} & "8{11} \\
- 10 & (.98480775, & .17364818) & "79 & "29 \\
- 12.857143 & (.97492791, & .22252093) & "27 & "57 \\
- 15 & (.96592583, & .25881905) & "1{24} & \\
- 16.363636 & (.95949297, & .28173256) & "6{11} & "5{11} \\
- 18 & (.95105652, & .30901699) & "3{10},"45,"8{10} & "15,"2{10},"7{10} \\
- 20 & (.93969262, & .34202014) & "59 & "49 \\
- 22.5 & (.92387953, & .38268343) & "1{16} & \\
- 24.545455 & (.90963200, & .41541501) & "9{11} & "2{11} \\
- 25.714286 & (.90096887, & .43388374) & "47 & "37 \\
- 30 & (.86602540, & .5) & "13,"1{12},"26,"39,"4{12},"56,"7{12},"{10}{12}
- & "16,"23,"2{12},"46,"5{12},"69,"8{12},"{11}{12} \\
- 32.727273 & (.84125353, & .54064082) & "1{11} & "{10}{11} \\
- 36 & (.80901699, & .58778525) & "1{10},"35,"6{10} & "25,"4{10},"9{10} \\
- 38.571429 & (.78183148, & .62348980) & "67 & "17 \\
- 40 & (.76604444, & .64278761) & "19 & "89 \\
- 40.909091 & (.75574957, & .65486073) & "4{11} & "7{11} \\
- 45 & (.70710678, & .70710678) & "18,"38,"58,"78 & - \\
- \hline
- \end{array}
- $$
- \caption{Computing angle vectors}
- ??=[f.angles]
-\end{figure*}
-
-\DOCMODE(
-\xydef@\vfromcartesianangle@#1{\enter@\basefromthebase@ \R@=#1\p@
- \B@=360\p@ %?*[ang1]
- \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@ %?*[ang2]
- \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@ %?*[ang3]
- \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@}% %?*[ang4]
- \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@ %?*[ang5]
- \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@ %?*[angx]
- \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@ @}}
-\DOCMODE)
-
- Figure~\ref{f.alldirections} shows all directions.
-
-\begin{figure}[ht]
-\begin{center}\leavevmode
-\def\a#1(#2){\save"o";a(#2)**@{-}*+__!P{\scriptscriptstyle#1#2}\restore}
-\def\ad(#1){\save"o",a(#1)*{\cdot}\restore}
-%
-\newcount\n \newcount\m
-\xy (50,0):0*{\kern.7pt\scriptstyle\ddot\smile}*[o]\cir<4pt>{}="o"\relax
-\n=0 %
-\loop
- \expandafter\a\expandafter(\the\n)%
- \advance\n1 \expandafter\ad\expandafter(\the\n)%
- \advance\n1 \expandafter\ad\expandafter(\the\n)%
- \advance\n1 \expandafter\ad\expandafter(\the\n)%
- \advance\n1 \expandafter\ad\expandafter(\the\n)%
- \advance\n1 \ifnum360>\n\relax \repeat
-\a~, (360)%
-\endxy
-\end{center}
-\caption{All directions.}\label{f.alldirections}
-\end{figure}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[drop]
-%
- To "drop" an <object> at $c$ with |*| means to actually physically
- typeset it in the picture with reference position at $c$---how this
- is done depends on the <object> in question and is described in
- detail in~\S??[object]. The intuition with a drop is that it
- typesets something at $|<|X_c|,|Y_c|>|$ and sets the edge of $c$
- accordingly.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subparagraph*{Procedure:}
-
- (??_[drop1])~sets up the direction to allow for directionals and
- builds the requested <object> in the (global) |\lastobjectbox@| box,
- (??_[drop2])~adjust the picture size unless it is a hidden object,
- setting $|\dimen@| = X_c-L_c$, and (??_[drop3])~drop the object in
- the picture at the right point by setting |box0| and using the
- |\Drop@@| method.
-
-\DOCMODE(
-\xydef@\drop@#1#2{%*[drop1]
- \global\setbox\lastobjectbox@=\object#1{#2}%
- \ifHidden@ \dimen@=\X@c \advance\dimen@-\L@c \else %?*[drop2]
- \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 %?*[drop3]
- \setboxz@h{\kern\dimen@ \raise\Y@c\box\lastobjectbox@}%
- \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ {\Drop@@}\fi}
-\DOCMODE)
-
- \NOTE: All typesetting into a picture should use or emulate |\drop@|!
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[connect]
-%
- The "connect" operation |**| will first compute a number of internal
- parameters describing the direction from~$p$ to~$c$ and then typesets
- a connection filled with copies of the <object> as illustrated
- in~\S??[basics.connect]. The exact details of the connection depend
- on the actual <object> and are described in general in~\S??[object].
- The intuition with a connection is that it typesets something
- connecting $p$ and $c$ and sets the |?| <pos> operator up accordingly.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subparagraph*{Procedure:}
-
- Set up the direction to allow for directional objects, then save
- $c$, build the <object> in |\lastobjectbox@|, restore $c$, and perform
- the |\Connect@@| method to connect using |\lastobjectbox@|.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
- The |\preconnect| command is for internal use by arrow \dots\ it
- makes use of the following:
-
-\DOCMODE(
-\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@@}
-\DOCMODE)
-
- See note `??w![define <shape>]' for the use of |\preXY@style@| and
- |\postXY@style@| to apply special <style>s, specified via
- <object-modifier>s; being saved here by |\connectStore@| as
- |\connectpreXY@style@| and |\connectpostXY@style@| to be reset by
- |\connectRestore@|.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[shave]??=[pick place]??=[<place>]
-%
- Using |?| will ``pick a place'' along the most recent connection
- typeset with |**|. What exactly this means is determined by the
- object that was used for the connection and by the modifiers
- described in general terms here.
-
- The ``shave'' modifiers in a <place>, |<| and |>|, change the default
- <factor>, $f$, and how it is used, by `moving' the positions that
- correspond to |(0)| and |(1)| (respectively): These are initially set
- equal to~$p$ and~$c$, but shaving will move them to the point on the
- edge of $p$ and $c$ where the connection ``leaves/enters'' them, and
- change the default $f$ as indicated. When one end has already been
- shaved thus then subsequent shaves will correspond to sliding the
- appropriate position(s) a \TeX\ ??c![\jot] (usually equal to |3pt|)
- further towards the other end of the connection (and past it).
- Finally the "pick" action will pick the position located the fraction
- $f$ of the way from |(0)| to |(1)| where $f=|0.5|$ if it was not set
- (by |<|, |>|, or explicitly).
-
- All this is probably best illustrated with some examples: each
- $\otimes$ in figure~??[f.places] is typeset by a sequence of the form
- $p$|;| $c$ |**@{.}| |?|<place> |*{\oplus}| where we indicate the
- |?|<place> in each case. (We also give examples of <slide>s.)
-
-\begin{figure*}[tb]
-$$
- \def\[#1]#2{\def\2{#2}%
- \POS "p";"c"**{}
- #2*+=[o]{\oplus}="x"*=<5em,3em>{}-#1*!#1\hbox{{\tt\codeof\2}};
- "x"**@{-}?>*@{>}\ignorespaces}%
- %
-\xy
- <0pt,110pt>*[o]=<20pt>{}="p"*\frm{oo}+L*!RC\hbox{$p$ is circular:~},
- <270pt,0pt>*=<4em>\txt<4em>{$c$ is a square text!}="c"*\frm{-,},
- "p";"c"**@{--}\relax
- %
- \[UR]{?(0)}
- \[UR]{?(1)}
- \[UR]{?}
- \[UR]{?(.7)}
- %
- \[D]{?<>(.5)}
- \[DL]{?<>(.2)(.5)}
- \[DL]{?<}
- \[UR]{?<<<}
- \[UR]{?<<</1cm/}
- \[D]{?<(0)}
- \[DL]{?>}
- \[D]{?>>>>}
- %
- \[DL]{?<>(.7)}
- \[D]{?>(.7)}
-\endxy
-$$
-\caption{Example \protect<place>s}??=[f.places]
-\end{figure*}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Procedure:}
-
- The code for parsing <place> is the following. To get first |<>| to
- move to edge and the remaining to move a ??c![\jot] we have both
- initial and continuing versions for each, the idea being that the
- second and following go to the edge of a small temporary object with
- radius |\jot|.
-
- \NOTE: This parser tests the "new parsing principle" that |\xy@|
- should always be called as |\xy@{| "source" |}{| "target" |}|!
-
-% \HACK: `Helps' the `arrow' feature: in the procedure for path
-% sub-segments, it is necessary to know the value of |\PLACEf@| both at
-% the (possibly delayed) time when the sub-segments are being typeset
-% and also at the time when the subsegments are being processed (and
-% packaged to be delayed by the |\xy@@|). Thus it is necessary for any
-% changes to the value of |\PLACEf@| to be both immediate and
-% delayed. The reason is that |\bstartPLACE@| and |\bendPLACE@| read
-% values from |\PLACEf@| and are themselves delayed by calls to |\xy@@|
-% -- these delayed calls need to know what |\PLACEf@| will be when they
-% are used.
-
-\DOCMODE(
-\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@}%gobble spaces
- \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}%gobble spaces
- \else\ifx \bgroup\next
- \DN@##1{\xy@{!{##1}}{}\PLACE@intercept@{##1}}%
- \else\ifx (\next %)
- \DN@(*##1*){\xy@{!(*##1*)}{}\PLACE@intercept@{##1}}%
- \else \DN@{\xyerror@{{<pos>} expected after ! in <place>}{}}%
- \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@@}%gobble spaces
- \else\ifx /\next \DN@/##1/{\xy@{/##1/}{\Cslidec@@{##1}}\afterPLACE@}%
- \else \let\next@=\afterPLACE@
- \fi\fi \next@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[slide]
-%
- A <slide> will move the position a dimension further along the
- connection at the picked position. For straight connections (the
- only ones kernel \Xy-pic provides) this is the same as adding a
- vector in the tangent direction, \ie, $|?|\dots|/|A|/|$ is the same
- as $|?|\dots|+/|A|/|$.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[intercept]
-%
- This special <place> finds the point where the last connection
- intercepts with the line from $p$ to $c$ as setup by the <pos>, thus
- usually this will have the form |!{|<coord>|;|<coord>|}|\footnote{The
- braces can be replaced by |(*|\dots|*)| "once", \ie, there can be no
- other braces nested inside it.}, for example,
- \BUG: Only works for straight arrows at present.
-%
-\begin{code}
-\xy <1cm,0cm>:
- (0,0)*=0{+}="+" ;
- (2,1)*=0{\times}="*" **@{.} ,
- (1,0)*+{A} ; (2,2)*+{B} **@{-}
- ?!{"+";"*"} *{\bullet}
-\endxy
-\end{code}
-\displaycode\noindent
-%
- will typeset
-%
-$$\docode$$
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[axis intersection]
-%
- The positions denoted by the "axis intersection"
- <coord>inates~??c![x] and~??c![y] are the points where the line
- through $p$ and $c$ intersects with each axis. The following figure
- illustrates this:
-$$
- \xy;<1cm,.5cm>:<-.5cm,.5cm>::
- (0,0)*+!UR{"origin"};
- (1,0)*+!DR{"xbase"}**@{-}?>*@{>},
- (0,0);(0,1)*+!DR{"ybase"}**@{-}?>*@{>},
- (0.5,-1)="p"*@{o}*!LU\hbox{~$p$};
- p+<.25cm,.5cm>="c"*@{o}*!LU\hbox{~$c$}*{}?(1),
- %
- "p";"c",x*+!LD{|x|}*@{*}*{}**@{.};(1,0)**@{.},
- "p";"c",y*!U{\strut|y|}*@{*}*{}**@{.};(0,0)**@{.},
- \endxy
-$$
-
-\begin{exercise}
-%
- Given predefined points $A$, $B$, $C$, and $D$ (stored as objects
- |"A"|, |"B"|, |"C"|, and |"D"|), write a <coord> specification that
- will return the point where the lines $\overline{AB}$ and
- $\overline{CD}$ cross (the point marked with a large circle here):
-%
-\begin{code}
-\xy
- %
- % set up and mark A, B, C, and D:
- (0,0)="A" *\cir<1pt>{}*+!DR{A},
- (7,10)="B" *\cir<1pt>{}*+!DR{B},
- (13,8)="C" *\cir<1pt>{}*+!DL{C},
- (15,4)="D" *\cir<1pt>{}*+!DL{D},
- %
- % goto intersection and name+circle it:
- {"A";"B":"C";"D",x} ="I" *\cir<3pt>{},
- %
- % make dotted lines:
- "I";"A"**{} +/1pc/;-/1pc/ **@{..},
- "I";"D"**{} +/1pc/;-/1pc/ **@{..}
- %
-\endxy
-\end{code}
-$$\docode$$
-%
-\answertext{The <coord> ``|{"A";"B":| |"C";"D",| |x}|'' returns the cross
- point. Here is how the author typeset the diagram in the exercise:}
-\answercode
-\answertext{\displaycode\noindent A |?!|\dots\ <place> could also have been
- used.}
-\end{exercise}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Procedure:}
-
- We solve the following equation in $a,b$:
-$$
- "origin" + a*|<|R_c|,|U_c|>| = c - b*(c-p)
-$$
- and then set
-$$
- |<|X_c|,|Y_c|>| := |<|X_c|,|Y_c|>| - b*(c-p)
- \quad\textrm{with zero size}\quad
- D_c,U_c,L_c,R_c := 0,0,0,0.
-$$
- The code uses $c=(X_c,Y_c,D_c,U_c,L_c,R_c)$ and $A,B$ as temporaries
- and computes:
-$$
-\begin{array}{rcl}
- |<|dX|,|dY|>| &:=& |<|X_c|,|Y_c|>| - |<|X_p,Y_p|>| \\[1pt]
- |<|A|,|B|>| &:=& |<|X_c|,|Y_c|>| - |<|X_"origin"|,|Y_"origin"|>| \\[1pt]
- |<|D_c|,|L_c|>| &:=& |<| \Det{R& dX\\U&dY} |,|
- \Det{R&A\\U&B} |>| \\[1pt]
- |<|X_c|,|Y_c|>| &:=& |<|X_c|,|Y_c|>| - (L_c/D_c)*|<|dX|,|dY|>|
-\end{array}
-$$
- where we really do $D := (R/|pt|)dY - (U/|pt|)dX$ and similarly for
- $L$.
-
-\DOCMODE(
-\xydef@\intersect@{%?*[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@}
-\DOCMODE)
-
- When there is no intersection point a wrong answer is returned,
- accompanied by a warning message. This behaviour can be altered by
- assigning a different value to the hook: |\zeroDivide@|. This macro
- must store a number in |\next@|.
-
-\DOCMODE(
-\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@
-\DOCMODE)
-
- By specifying |\zeroDivideLimit{|<num>|}| the user can locally
- establish that ${x\over0} = \sgn(x)$<num>, whenever such a division
- by zero would otherwise occur in an intersection calculation.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[group]
-%
- A <pos> <decor> "grouped" in |{}|-braces\footnote{One can use
- |(*|\dots|*)| instead also here.} is interpreted in a local scope in
- the sense that any $p$ and "base" built within it are forgotten
- afterwards, leaving only the $c$ as the result of the <coord>.
- \NOTE: Only $p$ and "base" are restored -- it is not a \TeX\ group.
-
-\begin{exercise}
- What effect is achieved by using the <coord>inate ``|{;}|''?
-\answertext{To copy the $p$ value to $c$, \ie, equivalent to ``|p|''.}
-\end{exercise}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The code is inside |\POS@|.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[in <direction>]
-%
- The vector $|/|Z|/|$, where $Z$ is a <dimen>sion, is the same as the
- vector $|<|Z\cos\alpha|,|Z\sin\alpha|>|$ where $\alpha$ is the angle
- of the last direction set by a connection (\ie, with |**|) or
- subsequent placement (|?|) position.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- It is possible to give a <direction> as described in the next section
- (figure~??[f.object], note~??[direction] in particular) that will
- then be used to set the value of $\alpha$. It is also possible to
- omit the <dimen> in which case it is set to a default value of
- |.5pc|.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[offset]??=[corner]
-%
- A <corner> is an offset from the current $|<|X_c|,|Y_c|>|$ position
- to a specific position on the edge of the $c$ object (the two-letter
- ones may be given in any combination):
-$$
-\def\[#1]{\POS"box"+#1="x";"box"
- **{} ?</-2em/*+\hbox{\tt#1};"x",**@{-}?>*@{>}}
-%
-\xy.(-5,-4).(15,9)*\frm{-}="box"*{c}="c";
- "box"+L**@{.}, "box"+R**@{.}, "box"+D**@{.}, "box"+U**@{.}
-%
- \[L] \[R] \[D] \[U]
- \[LD]\[RD]\[LU]\[RU]
- \[CL]\[CR]\[DC]\[UC] \[C] \[P]
- \POS"box"+(-20,-8)*{p}="p";"c"**@{.},"box"**{}\[E]
-\endxy
-$$
- The `edge point' |E| lies on the edge along the line from $p$ to the
- centre of the object, in contrast to the `proportional' point |P|
- which is also a point on the edge but computed in such a way that the
- object looks as much `away from $p$' as possible.
-
- Finally, a following $|(|f|)|$ suffix will multiply the offset vector
- by the <factor> $f$.
-
-\begin{exercise}
- What is the difference between the <pos>itions |c?<| and |c+E|?
-\answertext{When using the kernel connections that are all straight there is
- no difference, \eg, |**{}?<| and |**{}+E| denote exactly the same
- position. However, for other connections it is not necessarily the
- case that the point where the connection enters the current object,
- denoted by |?<|, and the point where the straight line from $p$
- enters the object, denoted by |+E|, coincide.}
-\end{exercise}
-
-\begin{exercise}
-\begin{code}
-\xy *=<3cm,1cm>\txt{Box}*\frm{-}
- !U!R(.5) *\frm{..}*{\bullet} \endxy
-\end{code}
-%
- What does this typeset?
-%
-\displaycode
-\noindent
- "Hint": ??c![\frm] is defined by the frame extension and just
- typesets a frame of the kind indicated by the argument.
-%
-\answercode
-\answertext{The code typesets the picture $$\docode$$}
-\end{exercise}
-
- \BUG: Currently only the single-letter corners (??c![L], ??c![R],
- ??c![D], ??c![U], ??c![C], ??c![E], and ??c![P]) will work for any
- shape---the others silently assume that the shape is rectangular.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[stack]??=[<stack op>eration]
-%
- The "stack" is a special construction useful for storing a sequence
- of <pos>itions that are accessible using the special
- <coord>inates~|s|$n$, where $n$~is either a single digit or a
- positive integer in |{}|s: |s0| is always the `top' element of the
- stack and if the stack has depth $d$ then the `bottom' element of the
- stack has number |s{|$d-1$|}|. The stack is said to be `empty' when
- the depth is~$0$ and then it is an error to access any of the |s|$n$
- or `pop' which means remove the top element, shifting what is in |s1|
- to |s0|, |s2| to |s1|, etc. Similarly, `push~$c$' means to shift
- |s0| to |s1|, etc., and then insert the $c$ as the new |s0|.
-
- The stack is manipulated as follows:
-%
-\begin{defs}
- |@|<stacking> & Action \cr
-\noalign{\nobreak\smallskip\nobreak\hrule\nobreak\smallskip\nobreak}%
- ??c![@+]<coord> & push $<coord>$ \cr
- ??c![@-]<coord> & $c\from<coord>$ then pop \cr
- ??c![@=]<coord> & load stack with <coord> \cr
- ??c![@@]<coord> & do $<coord>$ for $c\from$ stack \cr
- ??c![@i] & initialise \cr
- ??c![@(] & enter new frame \cr
- ??c![@)] & leave current frame \cr
-\end{defs}
-\noindent\unskip
-%
- To `load stack', means to load the entire stack with the positions
- set by <coord> within which |,| means `push $c$'.
-
- To `do <coord> for all stack elements' means to set $c$ to each
- element of the stack in turn, from the bottom and up, and for each
- interpret the <coord>. Thus the first interpretation has $c$ set to
- the bottom element of the stack and the last has $c$ set to~|s0|. If
- the stack is empty, the <coord> is not interpreted at all.
-
- These two operations can be combined to repeat a particular <coord>
- for several points, like this:
-%
-\begin{code}
-\xy
- @={(0,-10),(10,3),(20,-5)} @@{*{P}}
-\endxy
-\end{code}
-\displaycode\noindent
-%
- will typeset
-%
-$$\docode$$
-
- Finally, the stack can be forcibly cleared using |@i|, however, this
- is rarely needed because of |@(|, which saves the stack as it is, and
- then clears it, such when it has been used (and is empty), and |@)|
- is issued, then it is restored as it was at the time of the~|@(|.
-
-\begin{exercise}
- How would you change the example above to connect the points as shown
- below?
-%
-\begin{code}
-\xy
- @={(0,-10),(10,3),(20,-5)},
- s0="prev" @@{;"prev";**@{-}="prev"}
-\endxy
-\end{code}
-%
-$$\docode$$
-%
-\answercode
-\answertext{This does the job, saving each point to make the previous point
- available for the next piece:\displaycode\noindent Notice how we
- close the line by first saving |s0|, the last point visited, such
- that the first point will be connected to it.}
-%
-\end{exercise}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- First the stack top and bottom, both initially~$-1$:
-
-\DOCMODE(
-\xydef@\s@bot{-1}
-\xydef@\s@top{-1}
-\DOCMODE)
-
- Next the function to set $c\from|s|n$, \ie, test that $"bot"\lt
- n+"bot"\lt "top"$ and then run the associated stack element.
-
-\DOCMODE(
-\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@)}{}}
-\DOCMODE)
-
- Finally the actual code to do the stack operations: it depends on the
- `code' passed after |@|; spaces are not allowed:
-
-\DOCMODE(
-\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@{<pos> \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}
-\DOCMODE)
-
- |\smap@| maps a <coord> over a stack:
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[save]??=[saved]
-%
- It is possible to define new <coord>inates on the form |"|<id>|"| by
- "saving" the current $c$ using the \dots|="|<id>|"| <pos>ition form.
- Subsequent uses of |"|<id>|"| will then reestablish the $c$ at the
- time of the saving.
-
- Using a |"|<id>|"| that was never defined is an error, however,
- saving into a name that was previously defined just replaces the
- definition without warning, \ie, |"|<id>|"| always refers to the last
- thing saved with that <id>.
-
- However, many other things can be `saved': in general |@|<saving> has
- either of the forms
-%
-\begin{defs}
- |@:"|<id>|"| & |"|<id>|"| restores current "base" \cr
- |@|<coord>|"|<id>|"| & |"|<id>|"| reinterprets <coord> \cr
- |@@"|<id>|"| & |@="|<id>|"| reloads this stack \cr
-\end{defs}
-\noindent\unskip
-%
- The first form defines |"|<id>|"| to be a macro that restores the
- current "base".
-
- The second does not depend on the state at the time of definition at
- all; it is a macro definition. You can pass parameters to such a
- macro by letting it use coordinates named |"1"|, |"2"|, etc., and
- then use |="1"|, |="2"|, etc., just before every use of it to set the
- actual values of these. \NOTE: it is not possible to use a <coord>
- of the form |"|<id>|"| directly: write it as |{"|<id>|"}|.
-%
-\begin{exercise}
- Write a macro |"dbl"| to double the size of the current~$c$ object,
- \eg, changing it from the dotted to the dashed outline in this
- figure:
-%
-\begin{code}
-\xy ={.{+DL(2)}.{+UR(2)}}"dbl",
- *+<3pc,2pc>{+}*\frm{.}, "dbl"*\frm{--}
-\endxy
-\end{code}
-$$
-\docode
-$$
-\answercode
-\answertext{The author used \displaycode\noindent to typeset the figure in
- the exercise.}
-\end{exercise}
-
- The final form defines a special kind of macro that should only be
- used after the |@=| stack operation: the entire current stack is
- saved such that the stack operation |@="|<id>|"| will reload it.
-
- \NOTE: There is no distinction between the `name spaces' of <id>s
- used for saved coordinates and other things.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This parser distinguishes between the cases:
-
-\DOCMODE(
-\xydef@\saveid@{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\saveid@}%gobble spaces
- \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
-\DOCMODE)
-
- Here is the code for saving/restoring a position and a base.
-
-\DOCMODE(
-\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@{<pos> \string"\nextii@\string" not defined}{}%
- \else \expandafter\next@\fi}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{notes}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-
-\section{Objects}
-??=[object]
-
-\DOCMODE(
-\message{objects,}
-\DOCMODE)
-
- Objects are the entities that are manipulated with the |*| and |**|
- <pos> operations above to actually get some output in \Xy-pictures.
- As for <pos>itions the operations are interpreted strictly from left
- to right, however, the actual object is built "before" all the
- <modifier>s take effect. The syntax of objects is given in
- figure~??[f.object] with references to the notes below. \REMARK: It
- is "never" allowed to include braces |{}| inside <modifier>s! In
- case you wish to do something that requires |{|\dots|}| then check in
- this manual whether you can use |(*|\dots|*)| instead. If not then
- you will have to use a different construction!
-
-\begin{figure*}[tp]
-\begin{syntax}
-%
- ??w![<object>]
- &\iss & <modifier> <object>
- & apply <modifier> to <object>
-\cr
- &\orr & <objectbox>
- & build <objectbox> then apply its <modifier>s
-\cr
-\noalign{\smallbreak}
-%
-\cr
- ??w![<objectbox>]
- &\iss & |{| <text> |}|
- & ??!^[build default] object
-\cr
- &\orr & <library object> \orr\ |@|<dir>
- & use <library object> or <dir>ectional (see~\S??[objectlib])
-\cr
- &\orr & <\TeX\ box> |{| <text> |}|
- & ??!^[build box] object with <text> using the given <\TeX\ box>
- command, \eg, ??c![\hbox]
-\cr
- &\orr & ??c![\object] <object>
- & wrap up the <object> as a ??!^[finished object box]
-\cr
- &\orr & ??c![\composite] |{| <composite> |}|
- & build ??!^[composite object box]
-\cr
- &\orr & ??c![\xybox] |{| <pos> <decor> |}|
- & package ??!^[entire \Xy-picture as object]
-\cr
-\noalign{\smallbreak}
-%
- ??w![<modifier>]
- &\iss & |!| <vector>
- & <object> has its reference point ??!^[shifted] by <vector>
-\cr
- &\orr & |!|
- & <object> has the original reference point reinstated
-\cr
- &\orr & <add op> <size>
- & change ??!^[<object> size]
-\cr
- &\orr & ??c![h] \orr\ ??c![i]
- & <object> is ??!^[hidden], ??!^[invisible]
-\cr
- &\orr & |[| <shape> |]|
- & <object> is given the specified ??!^[<shape>]
-\cr
- &\orr & ??c![[=] <shape> |]|
- & ??!^[define <shape>] to reestablish ??w![current object style]
-\cr
- &\orr & <direction>
- & set current direction for this <object>
-\cr
-\noalign{\smallbreak}
-%
- ??w![<add op>]
- &\iss & |+| \orr\ |-| \orr\ |=| \orr\ |+=| \orr\ |-=|
- & grow, shrink, set, grow to, shrink to
-\cr
-\noalign{\smallbreak}
-%
- ??w![<size>]
- &\iss & <empty>
- & ??!^[default size]
-\cr
- &\orr & <vector>
- & size as sides of rectangle covering the <vector>
-\cr
-\noalign{\smallbreak}
-%
- ??w![<direction>]
- &\iss & <diag>
- & <diag>onal ??!^[direction]
-\cr
- &\orr & ??c![v] <vector>
- & ??!^[direction] of <vector>
-\cr
- &\orr & ??c![q]|{| <pos> <decor> |}|
- & ??!^[direction] from $p$ to $c$ after <pos> <decor>
-\cr
- &\orr & <direction> ??c![:] <vector>
- & vector relative ??!^[to <direction>]
-\cr
- &\orr & <direction> |_| \orr\ <direction> |^|
- & $90^\circ$ clockwise/anticlockwise ??!^[to <direction>]
-\cr
-%
- ??w![<diag>]
- &\iss & <empty>
- & last used direction (not necessarily ??!^[diagonal])
-\cr
- &\orr & |l|\orr|r|\orr|d|\orr|u|
- & left, right, down, up ??!^[diagonal]
-\cr
- &\orr & |ld|\orr|rd|\orr|lu|\orr|ru|
- & left/down, \dots\ ??!^[diagonal]
-\cr
-\noalign{\smallbreak}
-%
- ??w![<composite>]
- &\iss & <object>
- & first object is required
-\cr
- &\orr & <composite> |*| <object>
- & add <object> to ??!^[composite object box]
-%
-\end{syntax}
-\caption{\protect<object>s.}
-??=[f.object]
-\end{figure*}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- We first discuss the parser and then summarise the required methods.
- The entry point to use of objects is ??c![\object] described in note
- ??[finished object box]. This should always be used because it
- initialises the token list and redefines |\xy@| to be |\addtotoks@|
- such that we can use <pos> parser routines within the <object>!
-
-\paragraph*{Parsing:}
-
- The <object> parser |\OBJECT@| will first parse the <modifier>s,
- storing the action of each in sequence on the |\toks@| token list.
- When there are no more modifiers we insert ??c![\objectbox] if we have
- reached the |{| otherwise we just assume that the rest of the
- <object> is some kind of box construction.
-
- "Note": The <modifier> actions doing shifts are implemented by having
- an independent vector for the shift: $|<|R_p|,|U_p|>|$ always
- contains the vector from the current to the original \TeX\ reference
- point; furthermore the initial $L_c$ is saved as $L_p$ such that we
- can retrieve the original (\Xy-pic) reference point again. Modifying
- the $p$ values is safe because all actual changes are done in a local
- scope after the entire <object> is parsed and we have built the
- object box (in |\OBJECT@@|).
-
- The <modifier>s changing the direction are executed while parsing to
- make sure that the direction used when building the <object> is
- right, and restored in the right sequence while evaluating the
- <modifier>s afterwards.
-
-\DOCMODE(
-\xydef@\OBJECT@{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\OBJECT@}%gobble spaces
- \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@}
-\DOCMODE)
-
- |\OBJECT@@| is where we actually build the box by first
- ??_[OBJ0]~saving the previous edge in case it is needed, then
- ??_[OBJ1]~setting the defaults (including temporarily resetting
- |\xy@| to execute in case any |\xy@|s are used internally),
- ??_[OBJ2]~building the object box (which might change them) using
- ??c![\objectbox] if no other command specified and setting the
- $D,U,L,R$ dimensions ad required using the |\Leftness@| and
- |\Upness@| methods, and finally ??_[OBJ3]~setting up the $R_p,U_p$
- dimensions (as discussed above) and applying the <modifier>s stored
- in |\toks@| and dumping the modified box.
-
-\DOCMODE(
-\xydef@\prevEdge@@{\zeroEdge}
-
-\xydef@\OBJECT@@#1#2{%
- \expandafter\def\expandafter\prevEdge@@\expandafter{\the\Edge@c}%?*[OBJ0]
- \expandafter\Edge@c\expandafter{\objectEdge}%?*[OBJ1]
- \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}%?*[OBJ2]
- \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 %?*[OBJ3]
- \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@{%
- \DN@{}%
- \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@}
-\DOCMODE)
-
- As an optimisation |\OBJECT@@| sets the edge type of all zero-sized
- objects to ??c![\zeroEdge].
-
- |\OBJECT@x| cleans up the object by ensuring that it defines all the
- required methods: Essentially it terminates the box with the sequence
- ``|}| |\def\Drop@@{|\dots|}| |\def\Connect@@{|\dots|}| |\D@c=|\dots\
- |\U@c=|\dots\ |\L@c=|\dots\ |\R@c=|\dots\ | \Invisible@|\dots
- |\Hidden@|\dots\ |\def\Leftness@{|\dots|}| |\def\Upness@{|\dots|}|''
- where each \dots\ is set to the method defined within the object
- creation environment (started with |\hbox{| in |\OBJECT@@| or
- possibly elsewhere). We use rather heavy expansion hacking with
- |\toks@| to create the sequence so please look the other
- way\dots\smiley
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\paragraph*{Methods:}
-??w[object methods]
-
- In addition to the ``current object properties'' for $c$
- (\cf~??[basics.state]) the following methods are set up by all
- objects:
-
-\begin{defs}
- |\Invisible@true| or |\Invisible@false| & whether object is ??!^[invisible]\cr
- |\Hidden@true| or |\Hidden@false| & whether object is ??!^[hidden]\cr
- |\def\Leftness@{|<factor>|}| & the desired $L/(L+R)$\cr
- |\def\Upness@{|<factor>|}| & the desired $U/(D+U)$\cr
- |\def\Drop@@{|\dots|}| & code that outputs the object, assuming |\boxz@| is
- of zero size and has the object displaced $|<|X|,|Y|>|$
- inside---usually just |\def|'d to |\styledboxz@|\cr
- |\def\Connect@@{|\dots|}| & code that builds a connection from $p$ to $c$,
- assuming |\last|\-|object|\-|box@| contains the object\cr
-\end{defs}
-
- It is important to |\def| and not |\let| the last four methods since
- the \TeX\-nique used in |\OBJECT@x| (and elsewhere) of passing them
- to surrounding scopes depends on it. The |\Connect@@| method should
- in turn setup several submethods as described in detail in
- ??[algo.connection].
-
- Suitable defaults are set up by |\OBJECT@@| above which is why any
- box generating command can be used to construct objects as explained
- in note ??[build default] below.
-
- Here are the declarations:
-
-\DOCMODE(
-\xynew@{if}\ifInvisible@
-\xynew@{if}\ifHidden@
-
-\xydef@\Leftness@{}
-\xydef@\Upness@{}
-
-\xydef@\Drop@@{\styledboxz@}
-\xydef@\Connect@@{}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{notes}
-%
-\note??=[build default]
-%
- An <object> is built using |\object|\-|box|??c[\objectbox]
- |{|<text>|}|. |\object|\-|box| is initially defined as
-%
-\begin{code}
-\def\objectbox#1{%
- \hbox{$\objectstyle{#1}$}}
-\let\objectstyle=\displaystyle
-\end{code}
-\displaycode
-%
- but may be redefined by options or the user. The <text> should thus
- be in the mode required by the ??c![\objectbox] command---with the
- default |\objectbox| shown above it should be in math mode.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- Actually it is
-
-\DOCMODE(
-\xydef@\objectbox#1{\hbox{$\m@th\objectstyle{#1}$}}
-
-\xylet@\objectstyle=\textstyle
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[build box]
-%
- An <object> built from a \TeX\ box with dimensions $w*(h+d)$ will
- have $L_c=R_c=w/2$, $U_c=D_c=(h+d)/2$, thus initially be equipped
- with the adjustment |!C| (see note~??[shifted]). In particular: in
- order to get the reference point on the (center of) the base line of
- the original <\TeX~box> then you should use the <modifier> |!|; to
- get the reference point identical to the \TeX\ reference point use
- the modifier |!!L|.
-
- \TeX\-nical remark: Any macro that expands to something that starts
- with a <box> may be used as a <\TeX~box> here.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- This is done by the parsing above.
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[finished object box]
-%
- Takes an object and constructs it, building a box; it is then
- processed according to the preceeding modifiers. This form makes it
- possible to use any <object> as a \TeX\ box (even outside of
- \Xy-pictures) because a finished object is always also a box.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This macro is the main entry point to the <object> parser. It
- furthermore initialises the modifier list and the previous object
- edge.
-
-\DOCMODE(
-%\xydef@\object{\hbox\bgroup\object@}
-\xydef@\object{\hbox\bgroup\resetStyle@\object@}
-
-\xydef@\object@{%
- \edef\next@{={\DirectionfromtheDirection@}}\expandafter\toks@\next@
-% \resetStyle@\plainxy@ \xyFN@\OBJECT@}
- \plainxy@ \xyFN@\OBJECT@}
-\DOCMODE)
-
- The initial value of |\toks@| <modifier> list is explained in
- note~??[direction] below.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[composite object box]
-%
- Several <object>s can be combined into a single object using the
- special command ??c![\composite] with a list of the desired objects
- separated with |*|s as the argument. The resulting box (and object)
- is the least rectangle enclosing all the included objects.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- First we collect all the objects smash on top of each other in box0
- while we maintain the maximal extents in $(DULR)_p$. Then we reset
- box0 to contain the same but with the right spacing around.
-
-\DOCMODE(
-\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}%gobble spaces
- \else\ifx *\next \DN@ *{\xyFN@\composite@i}%
- \else\ifx @\next \DN@ @{\composite@x}%
- \xyerror@{<composite> 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}%gobble spaces
- \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}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note ??=[entire \Xy-picture as object]
-%
- Take an entire \Xy-picture and wrap it up as a box as described
- in~\S??[basics.pos]. Makes nesting of \Xy-pictures possible: the
- inner picture will have its own zero point which will be its
- reference point "in" the outer picture when it is placed there.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This is simple exploiting the fact that |\endxy| actually sets up the
- extents of the `object':
-
-\DOCMODE(
-\xydef@\xybox#1{\xy#1\endxy \Edge@c={\rectangleEdge}\computeLeftUpness@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[shifted]
-%
- An object is "shifted" a <vector> by moving the point inside it which
- will be used as the reference point. This effectively pushes the
- object the same amount in the opposite direction.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Shifting uses the special value of $R_p$ and $U_p$ used while
- evalutaing the <modifier>s. The fact that shifts like |!C| refer to
- the initial object's size means that we should parse the <vector>
- such that its actions happen at modification time\dots hence
- |\xytotoks@| is used to delay execution.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{exercise}
- What is the difference between the <pos>itions |0*{a}!DR| and
- |0*!DR{a}|?
-\answertext{The first typesets ``$a$'' centered around |0| and then moves $c$
- to the lower right corner, the second typesets ``$a$'' above the |0|
- point and does not change $c$. With a ``$+$'' at |0| they look like
- this: $\vcenter{\xy*{+}*{a}!DR\endxy}$ and
- $\vcenter{\xy*{+}*!DR{a}\endxy}$.}%
-\end{exercise}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[<object> size]??=[change size]??=[<size>]??=[default size]
-%
- A <size> is a pair $|<|W|,|H|>|$ of the width and height of a
- rectangle. When given as a <vector> these are just the vector
- coordinates, \ie, the <vector> starts in the lower left corner and
- ends in the upper right corner. The possible <add op>erations that
- can be performed are described in the following table.
-$$
-\begin{array}{\otherbar c\otherbar l\otherbar}
-\hline
- \hbox{<add op>} & \hbox{description} \\
-\hline
- |+| & \hbox{grow} \\
- |-| & \hbox{shrink} \\
- |=| & \hbox{set to} \\
- |+=| & \hbox{grow to at least} \\
- |-=| & \hbox{shrink to at most} \\
-\hline
-\end{array}
-$$
- In each case the <vector> may be omitted which invokes the ``default
- size'' for the particular <add op>:
-$$
-\begin{array}{\otherbar c\otherbar l\otherbar}
-\hline
- \hbox{<add op>} & \hbox{default}\\
-\hline
- |+| & |+<|2*"objectmargin"|>| \\
- |-| & |-<|2*"objectmargin"|>| \\
- |=| & |=<|"objectwidth"|,|"objectheight"|>| \\
- |+=| & |+=<|\max(L_c+R_c,D_c+U_c)|>| \\
- |-=| & |-=<|\min(L_c+R_c,D_c+U_c)|>| \\
-\hline
-\end{array}
-$$
- The defaults for the first three are set with the commands
-%
-\begin{defs1}
- ??c![\objectmargin] <add op> |{|<dimen>|}| \cr
- ??c![\objectwidth] <add op> |{|<dimen>|}| \cr
- ??c![\objectheight] <add op> |{|<dimen>|}| \cr
-\end{defs1}
-\noindent\unskip
-%
- where <add op> is interpreted in the same way as above.
-
-\DOCMODE(
-\xylet@\objectmargin@=\jot
-\xylet@\objectwidth@=\z@
-\xylet@\objectheight@=\z@
-
-\xydef@\objectmargin{\afterADDOP{\Addop@@\objectmargin@}}
-\xydef@\objectwidth{\afterADDOP{\Addop@@\objectwidth@}}
-\xydef@\objectheight{\afterADDOP{\Addop@@\objectheight@}}
-\DOCMODE)
-
- The defaults for |+=|/|-=| are such that the resulting object will be
- the smallest containing/largest contained square.
-
-\begin{exercise}
- How are the objects typeset by the <pos>itions ``|*+UR{\sum}|'' and
- ``|*+DL{\sum}|'' enlarged?
-\answertext{They have the outlines
- $$\xy*+UR{\sum}*\frm{-}*{+}\endxy
- \quad\textrm{and}\quad
- \xy*+DL{\sum}*\frm{-}*{+}\endxy$$
- because the first is enlarged by the positive offset to the upper
- right corner and the second by the negative offset to the lower left
- corner.}
-\end{exercise}
-
- \BUG: Currently changing the size of a circular object is buggy---it
- is changed as if it is a rectangle and then the change to the $R$
- parameter affects the circle. This should be fixed probably by a
- generalisation of the |o| shape to be ovals or ellipses with
- horizontal/vertical axes.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The three cases distinguished by the parsing above are handled
- similarly: they insert the parsed/default vector into $X,Y$ in the
- modifications and then perform the operation at that time using the
- |\xytotoks@| trick described in note~??[shifted]:
-
-\DOCMODE(
-\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@}}}
-\DOCMODE)
-
- The real work is done by the following command: a hack using
- expansion tricks to make use of the |\Addop@@| known now on the
- values in $X,Y$ at modification time.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- It is clearly crucial that |\Addop@@| expands to its action
- immediately! Also note that enlarging changes the initial box offset
- in the horizontal direction only, \ie, $R_p$.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Finally the code to interpret an <add op> used above: This
- simply parses it and creates a macro |\Addop@@| that takes a
- control sequence and a parameter <dimen> as arguments, and
- expands directly to commands that perform the <add op> of the
- <dimen> on the control sequence:
-$$
-\begin{array}{\otherbar c\otherbar l\otherbar}
-\hline
- \hbox{<add op>} & \hbox{effect of |\Addop@@| "cs" $D$} \\
-\hline
- |+| & "cs" \from "cs"+D \\
- |-| & "cs" \from "cs"-D \\
- |=| & "cs" \from D \\
- |+=| & "cs" \from \left\{
- \begin{array}{cc} D & \hbox{if $D\le"cs"$} \\
- "cs" & \hbox{if $D\gt"cs"$} \end{array}\right.
- \\[1pt]
- |-=| & "cs" \from \left\{
- \begin{array}{cc} D & \hbox{if $D\ge"cs"$} \\
- "cs" & \hbox{if $D\lt"cs"$} \end{array}\right.
- \\[1pt]
-\hline
-\end{array}
-$$
- Furthermore ??c![\afterADDOP] leaves the |\next| token set to |=| in
- the last three cases only (this is used to determine the right
- default value in the size changes above).
-
- The ??c![\afterADDOP] macro is relatively simple because <add op>s
- don't nest:
-
-\DOCMODE(
-\xydef@\afterADDOP#1{\def\afterADDOP@{#1}\xyFN@\ADDOP@}
-
-\xylet@\afterADDOP@=\empty
-
-\xydef@\ADDOP@{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\ADDOP@}%gobble spaces
- \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@}
-\DOCMODE)
-
- The work is done by the general |\Addop@| |{|$f$|}| |{|$\pm$|}|
- |{|$\bowtie$|}| |{|"cs"|}| $D$ that defines
-$$
-"cs" \equiv \left\{
- \begin{array}{ll}
- f*"cs"~{\pm}~D & \hbox{if $\lnot ((f*"cs"~{\pm}~D)~{\bowtie}~D)$} \\
- "cs" & \hbox{otherwise} \end{array}\right.
-$$
- and also leaves the dimension in |\dimen@|.
-
-\DOCMODE(
-\xydef@\Addop@#1#2#3#4#5{%
- \dimen@=#4\relax \edef#4{\the\dimen@}%
- \dimen@=#1\dimen@ \advance\dimen@#2#5\relax %\advance\dimen@ 1sp %HACK
- \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}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[hidden]
-%
- A "hidden" object will be typeset but hidden from \Xy-pic in that it
- won't affect the size of the entire picture as discussed
- in~\S??[basics.pos].
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- This is handled by the |\ifHidden@| conditional allocated with the
- methods.
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[invisible]
-%
- An "invisible" object will be treated completely normal except that
- it won't be typeset, \ie, \Xy-pic will behave as if it was.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- This is handled by the |\ifInvisible@| conditional allocated with the
- methods.
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[<shape>]
-%
- Setting the "shape" of an object forces the shape of its edge to be
- as indicated. The kernel provides three shapes that change the edge,
- namely ??C![.], ??C![], and ??C![o], corresponding to the outlines
-$$
-\let\objectstyle=\scriptstyle
-\xy*{*}\endxy
-\quad
-\textrm{,}
-\quad
-\xy(0,0).(-10,-4).(15,7)*\frm{-}="box"*{*}+0;
- "box"+L*{}**@{.}?*{L},
- "box"+R*{}**@{.}?*{R},
- "box"+D*{}**@{.}?*{D},
- "box"+U*{}**@{.}?*{U}
-\endxy
-\quad
-\textrm{, and}
-\quad
-\xy*[o]=<40pt>{*}="box"*\cir{}+0;
- "box"+L*{}**@{.}?*{L},
- "box"+R*{}**@{.}?*{R},
- "box"+D*{}**@{.}?*{D},
- "box"+U*{}**@{.}?*{U}
-\endxy
-$$
- where the $*$ denotes the point of the reference position in the
- object (the first is a point). Extensions can provide more shapes,
- however, all shapes set the extent dimensions $L$, $R$, $D$,
- and $U$.
-
- The default shape for objects is ??C![] and for plain coordinates it
- is ??C![.].
-
-\DOCMODE(
-\xydef@\objectEdge{\rectangleEdge}
-\DOCMODE)
-
- Furthermore the <shape>s ??C![r], ??C![l], ??C![u], and ??C![d], are
- defined for convenience to adjust the object to the indicated side by
- setting the reference point such that the reference point is the same
- distance from the opposite of the indicated edge and the two
- neighbour edges but never closer to the indicated side than the
- opposite edge, \eg, the object |[r]\hbox{Wide text}| has reference
- point at the $*$ in $\xy*[r]\hbox{Wide text}*\frm{-}*{*}\endxy$ but
- the object |[d]\hbox{Wide text}| has reference
- point at the $*$ in $\xy*[d]\hbox{Wide text}*\frm{-}*{*}\endxy$.
- Finally, ??C![c] puts the reference point at the center.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
- \NOTE: Extensions can add new <shape> object <modifier>s which are
- then called <style>s. These will always be either of the form
- |[|<keyword>|]| or |[|<character> <argument>|]|. Some of these
- <style>s do other things than set the edge of the object.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- A ``simple shape'' is just a control sequence |\shape [|<shape>|]|
- setting the appropriate edge. When such a |[|<shape>|]| modifier is
- encountered then we expand this control sequence onto the modifier
- queue, unless a control sequence |\style [|<shape>|]| exists: then
- that is expected to do it (and whatever else is required).
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- Add more simple shapes by defining more commands like these and
- proceed with coding the |\|\dots|Edge| command as described
- in~\S??[algo.edge].
-
- Alternatively it is a ``complex shape'' of which none are defined in
- the kernel but some options like more variation\dots It is
- characterised by its first token and the rest of the contents of the
- ??C![]s is the argument (remember: no |{}[]| characters!); it is
- searched for as control sequence |\[|<shape>|...]| overridden
- in the same way by |\*stylechar@|<shape>|@|.
-
-\DOCMODE(
-\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 [<shape>] 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@}
-\DOCMODE)
-
- \BUG: The above is messy!
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[define <shape>]
-%
- While typesetting an object, some of the properties are considered
- part of the `??w![current object style]??w[style]'. Initially this
- means nothing but some of the <style>s defined by extensions have
- this status, \eg, colours |[red]|, |[blue]| say, using the |xycolor|
- extension, or varying the width of lines using |xyline|. Such styles
- are processed "left-to-right"; for example,
-$$
-|*[red][green][=NEW][blue]{A}|
-$$
- will typeset a blue |A| and define |[NEW]| to set the colour to green
- (all provided that |xycolor| has been loaded, of course).
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The method of requesting a special effect is via the <shape>
- modifiers. However the code required for implementation is quite
- different. In particular it must allow for the different ways in
- which the <driver> may implement the |\special|s required to
- activate, and turn off, the effect. Another difficulty is that the
- <style> applies also to nested sub-parts of any <object>. This means
- that the code cannot be wholly delayed until after the <object> has
- been constructed.
-
- Usually some value has to be stored, so as to be accessible to
- sub-parts, though the |\special| commands cannot be fully constructed
- until the <object> is completely known and ready to be |\Drop@@| or
- |\Connect@@|'ed.
-
- Finally, the overhead in using |\special| commands can be quite high
- with some |dvi|-drivers. Thus it is not best that every <style>
- request generate a |\special| command; indeed {\it two} |\special|
- commands, since each style-change also requires a command to revert
- to the previous style, after the change is no longer applicable.
-
- Thus, as with <shape>s, all the style-change requests are stored
- until the <object> is ready to be |\Drop@@|'ed. This also helps with
- getting the sequencing correct when later requests compound on, or
- override, earlier requests.
-
- When the <style> requests are processed, after the <object> has been
- constructed, information of the form <control-word>|{|<data>|}| is
- added to a global list called |\preXY@style@|. Similar information is
- added to another global list |\postXY@style@|, for the purpose of
- reverting the style parameters, within the <driver>-file, to their
- previous values prior to the current <object>.
-
- Both lists are initially <empty> at the start of an <object>. The
- contents of these lists are processed when the macros
- |\xypre@Style@@| and |\xypost@Style@@| are encountered in the
- expansion of |\styledboxz@|.
-
-\DOCMODE(
-\xydef@\preXY@style@{}
-\xydef@\postXY@style@{}
-
-\xydef@\resetStyle@{\gdef\preXY@style@{}\gdef\postXY@style@{}}
-\DOCMODE)
-
- The <data> contains the code needed to implement the requested
- style-change, with the particular <driver> being used.
-
- The <control-word> is a macro whose expansion could be fixed, or
- could depend upon what other style-change requests are made for this
- <object>. Its purpose is to decide whether or not the <data> is
- actually required. If so, it is added to the token-list
- |\styletoks@| for later use.
-
- Whether the <control-word>|{|<data>|}| tokens are prepended or
- appended to the global lists depends upon the nature of the
- style-change requested. For example, with |*[red][green]|<object>
- the information |\|<set-color>|{|<green>|}| could be appended to
- |\preXY@style@|, with |\|<revert-to-color>|{|<red>|}| prepended to
- |\postXY@style@|. Then the dvi-output would set the color to <red>
- then <green> and restore it first to <red> then <black>.
-
- \TODO: A more sophisticated implementation could instead prepend
- |\|<set-color>|{|<green>|}| to |\preXY@style@| and append
- |\|<revert-to-color>|{|<red>|}| to |\postXY@style@|. Now the first
- |\|<set-color> encountered adds its <data> to |\styletoks@| then
- rebinds |\|<set-color> to |\eat@|, to ignore subsequent occurrences.
- Similarly |\|<revert-to-color> is rebound so that only the is
- restoration to <black> is retained.
-
- This latter strategy is preferred when the overhead for a |\special|
- command is high, within the <driver>'s output. Indeed the \PS\
- back-end is even more efficient. Since \PS\ is itself a programming
- language, the <data> can be just the \PS\ code. A single |\special|
- command is sufficient to accommodate {\it all\/} the style-changes
- for an individual <object>. This is achieved by rebinding
- |\xydoprestyles@@| and |\xydopoststyles@@| to include the <data>
- within an appropriately prepared |\special| command.
-
-\DOCMODE(
-\xynew@{toks}{\styletoks@}
-\xydef@\addtostyletoks@#1{%
- \expandafter\styletoks@\expandafter{\the\styletoks@#1}}
-\DOCMODE)
-
- The <data> to be used is collected in the token-list |\styletoks@|.
- If this is <empty> for an <object> then the style processing is
- skipped completely. For safety, in case multiple occurences of
- |\xypre@Style@| have somehow slipped into the token stream, these and
- |\xypost@Style@@| are bound to |\relax| until the <object> is
- finished. Indeed |\xypost@Style@@| is always bound to |\relax| unless
- |\styletoks@| is non-empty.
-
-\DOCMODE(
-\xydef@\styledboxz@{%
-%
-%\W@{STYLED BOX:}%
-%\W@{: PRE={\meaning\xypre@Style@@}}%
-%
- \xypre@Style@@
-%
-%{\expandafter\DN@\expandafter{\the\styletoks@}\W@{: STYLTOKS={\codeof\next@}}}%
-%
- \boxz@
-%
-%\W@{: POST={\meaning\xypost@Style@@}}%
-%
- \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@@
-\DOCMODE)
-
- Some extensions use the following macros to add style <data> to the
- global macros. Here code is added sequentially to |\preXY@style@| so
- that it is acted upon in the order of occurrence (FIFO) of the
- <shape> modifiers. Code is added to |\postXY@style@| in reverse order
- (LIFO), so that each addition to |\preXY@style@| can be closed off,
- if necessary, in correctly nested sequence.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
- The |\preStyle@| and |\postStyle@| temporarily hold style <data>.
- The macro |\preXYstyle@@| is used to check whether there is any
- <data> to process. Normally this is just an alias for |\preStyle@@|,
- but some back-ends may use the two control-names differently.
-
-\DOCMODE(
-\xydef@\preStyle@@{}
-\xydef@\postStyle@@{}
-\xydef@\preXYstyle@@{\relax}
-
-\xydef@\loadxystyle@{%
- \let\xypre@Style@@=\xypre@Style@ \def\preXYstyle@@{\preStyle@@}}
-
-\loadxystyle@
-\DOCMODE)
-
- Initially styles are activated but can be suppressed using
- |\Unloadstyle@|.
-
-\DOCMODE(
-\xydef@\Unloadstyle@{%
- \let\xypre@Style@@=\relax \let\xypost@Style@@=\relax
- \def\preXYstyle@@{\relax}}
-\DOCMODE)
-
- Global macros are used, so that the same styles can be reused by
- successive objects without having to re-interpret <shape> modifiers,
- as described next.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Saving styles:\ }
-
- Once specified for an <object>, the collection of <style>s can be
- assigned a name, using ??c![[=]<word>|]|. Then |[|<word>|]| becomes a
- new <style>, suitable for use with the same or other <objects>s. Use
- a single <word> built from ordinary letters. If |[|<word>|]| already
- had meaning the new definition will still be imposed, but the
- following type of warning will be issued:
-$$
-|Xy-pic Warning: Redefining style [|<word>|]|
-$$
- The latter warning will appear if the definition occurs within an
- ??c![\xymatrix]. This is perfectly normal, being a consequence of the
- way that the matrix code is handled. Similarly the message may appear
- several times if the style definition is made within an ??c![\ar].
-
-\begin{code}
- \setbox0=\hbox{%
- \xy\drop[OrangeRed][=A]{}\endxy}
-\end{code}
-
-\noindent
- The following illustrates how to avoid these messages by defining the
- style without typesetting anything.
-
-\displaycode
-
- \NOTE{~1:} The current colour is regarded as part of the style for
- this purpose.
-
- \NOTE{~2:} Such namings are global in scope. They are intended to
- allow a consistent style to be easily maintained between various
- pictures and diagrams within the same document.
-
-\DOCMODE(
-\xydefcsname@{shape [=...]}#1{\checkXyStyle@ \addtotoks@{\xynamestyle@{#1}}}
-
-\xydef@\xynamestyle@#1{\checkXyStyle@
- \expandafter\DNii@\expandafter{\csname shape [#1]\endcsname}%
- \expandafter\ifx\nextii@\relax %%\xywarning@{Defining new style [#1]}%
- \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@{}}
-\DOCMODE)
-
- If the same <style> is intended for several <object>s occurring
- in succession, the |[||*]| <modifier> can be used on the later
- <object>s. This only works when |[||*]| precedes any other <style>
- modifiers; it is local in scope, recovering the last <style>s used
- at the same level of \TeX\ grouping.
-
-\DOCMODE(
-\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@@}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Defining new effects}
-
- Allow new effects to be declared and a default action provided. The
- name is constructed from |#1| and the action to be taken is passed as
- |#2|. If |#3| is non-empty then overwrite any existing definition for
- a control sequence of the same name.
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Support for a new <style> takes the following form, in which
- |\thestyle@| expands to the current value of the <style> information
- to be maintained. If this is kept in a <count> or <dimen> register,
- named |\xystyle@| say, then replace |\thestyle@| by
- |\the\style@|. (However due to the large number of <dimen>s already
- allocated, it is preferable to keep a text form of the value in
- |\thestyle@|.)
-
-\begin{code}
-\xyshape@stylechange@{\modifystyle@{<how>}}
-\xydef@\modifystyle@#1{\checkXyStyle@
- \edef\prevstyle@{\thestyle@}\modifystyle@@{#1}%
- \let\prestyle@=\prestyle@@ \let\poststyle@=\poststyle@@
- \applystyle@\prestyle@{\thestyle@}\poststyle@{\prevstyle@}}
-\xydef@\resetstyle@@#1{\def\thestyle@{#1}\outputstyle@{#1}}
-\xydef@\outputstyle@#1{\transformstyle@{#1}%
- \expandafter\stylespecial@\expandafter{\next@}}
-\xylet@\transformstyle@@=\DN@
-\xylet@\transformstyle@=\transformstyle@@
-\end{code}
-\displaycode
-
- In the above the macros |\modifystyle@@| and |\stylespecial@| are
- adapted to the particular <style> information, see below. Typically
- <how> is actual \TeX\ code and |\modifystyle@@| is simply |\literal@|
- to execute this code. Typesetting is done by |\stylespecial@#1|
- which is typically of the form |\special{|<key> |#1}|.
-
- The |\transformstyle@| is required in case a dvi-<driver> needs
- information in a form that is different to how \Xy-pic maintains it
- in |\thestyle@|. A <driver> file should define |\|<driver>|@style@@|
- to perform the transformation and place its result in |\next@|.
- Install this macro using |\let\transformstyle@=\|<driver>|@style@@|
- within the <driver> installation macro.
-
-\medskip
-
- Next we discuss |\applystyle@|; which uses |\prestyle@|,
- |\prestyle@@|, |\poststyle@| and |\poststyle@@|. There are two
- strategies here, affecting how much information is placed into the
- dvi-file, indicated by the alternative expansions given above. The
- appropriateness for a given style must be decided by the author of
- the style-option.
-
- Suppose several modifications are made to a particular style
- parameter. We must build a list of commands |\prestyle@{|<value>|}|,
- to be executed later, which will recover the required value. Also we
- build a list of commands |\poststyle@{|<value>|}| to reset to the
- previous value.
-
- In most cases it is only the result of the modifications that need be
- placed into the dvi-file. Since we do not know how many, if any, more
- modifications follow we could store each new result {\em after} the
- previous, so that its effect will override the previous value. This
- is building a FIFO list for the |\prestyle@| commands, with a FILO
- list for the |\poststyle@| commands:
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-%
-\noindent
- Use this via:
- |\applyLIFOstyle@\prestyle@{\thestyle@}\poststyle@{\prevstyle@}|.
- \newline With this method each modification places two entries into
- the dvi-file; there is no need for separate |\prestyle@| and
- |\prestyle@@| macros.
-
- Perhaps a more efficient strategy is to build a LIFO list for the
- |\prestyle@| commands. This way the required value is encountered
- first. This first instance should then cancel all subsequent
- instances of |\prestyle@|. This is where the need comes for a
- |\prestyle@@|. Accompanying this is a FIFO list for the
- |\poststyle@| commands, with a corresponding |\poststyle@@| to kill
- subsequent instances:
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\noindent
- Use this via:
- |\applyLIFOstyle@\prestyle@{\thestyle@}\poststyle@{\prevstyle@}|.
- \newline The advantage here is that only two pieces of data need be
- output to the dvi-file, no matter how many modifications are
- requested.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[diagonal]??=[direction]??=[<direction>]
-%
- Setting the current direction is simply pretending for the
- typesetting of the object (and the following <modifier>s) that some
- connection set it -- the <empty> case just inherits the previous
- direction.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The code just calls the general <direction> parser below:
-
-\DOCMODE(
-\xydef@\OBJECT@direction{\afterDIRECTIONorEMPTY{%
- \edef\next@{{\DirectionfromtheDirection@}}\expandafter\addtotoks@\next@
- \xyFN@\OBJECT@}%
- {\xyFN@\OBJECT@}}
-\DOCMODE)
-
- Here is the <direction> parser: first the parts parsing the <diag>
- part then the parts parsing the <trailer> part:
-
-\DOCMODE(
-\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@}%gobble spaces
- \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@{(* <pos> *) expected}{} \xyFN@\DIRECTION@i}%
- \fi \next@}
-\DOCMODE)
-
-\paragraph*{Diagonal directions.}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- It is particularly easy to set <diag>onal directions:
-$$
-\xy *[o]\cir<1pc>{}="c",
- "c"; (-1,-1)**{},p+/4pc/ *+{|dl|=|ld|} **@{-}?>*@{>},
- "c"; ( 0,-1)**{},p+/4pc/ *+{|d|} **@{-}?>*@{>},
- "c"; ( 1,-1)**{},p+/4pc/ *+{|dr|=|rd|} **@{-}?>*@{>},
- "c"; ( 1, 0)**{},p+/4pc/ *+{|r|} **@{-}?>*@{>},
- "c"; ( 1, 1)**{},p+/4pc/ *+{|ur|=|ru|} **@{-}?>*@{>},
- "c"; ( 0, 1)**{},p+/4pc/ *+{|u|} **@{-}?>*@{>},
- "c"; (-1, 1)**{},p+/4pc/ *+{|ul|=|lu|} **@{-}?>*@{>},
- "c"; (-1, 0)**{},p+/4pc/ *+{|l|} **@{-}?>*@{>},
-\endxy
-$$
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- More to the point, <diag>onals are stored internally as
-$$
-\xy *\cir<1pc>{}="c",
- "c"; (-1,-1)**{},p+/3pc/ *+{|0|} **@{-}?>*@{>},
- "c"; ( 0,-1)**{},p+/3pc/ *+{|1|} **@{-}?>*@{>},
- "c"; ( 1,-1)**{},p+/3pc/ *+{|2|} **@{-}?>*@{>},
- "c"; ( 1, 0)**{},p+/3pc/ *+{|3|} **@{-}?>*@{>},
- "c"; ( 1, 1)**{},p+/3pc/ *+{|4|} **@{-}?>*@{>},
- "c"; ( 0, 1)**{},p+/3pc/ *+{|5|} **@{-}?>*@{>},
- "c"; (-1, 1)**{},p+/3pc/ *+{|6|} **@{-}?>*@{>},
- "c"; (-1, 0)**{},p+/3pc/ *+{|7|} **@{-}?>*@{>},
-\endxy
-$$
- Expanding |\afterDIAG{|<stuff>|}|<diag> will result in |\count@|
- being set to the <diag> code (not changed in case the <diag> is
- <empty>) before expanding <stuff>.
-
-\DOCMODE(
-\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
-%\count@=1 3 5 7
- \DIAG@@@ l0r2\or\or \DIAG@@@ d2u4\or\or \DIAG@@@ r4l6\or\or \DIAG@@@ u6d0%
- \else\xybug@{impossible <diag> 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}
-\DOCMODE)
-
- The action in case of a <diag> is simply to pick the right direction
- setup routine according to the encoding, getting the <diag> from
- |\count@| and the length of the $d$ vector from |\dimen@|:
-
-\DOCMODE(
-\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 % 8 is legal and means change nothing
- \else\xybug@{impossible <diag>}\fi
- \DIRECTIONempty@false \xyFN@\DIRECTION@i}
-\DOCMODE)
-
-\paragraph*{Vector directions.}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Alternatively |v|<vector> sets the direction as if the connection
- from |0| to the <vector> had been typeset except that the "origin" is
- assumed zero such that directions $|v(|x|,|y|)|$ mean the natural
- thing, \ie, is the direction of the connection from |(0,0)| to
- $|(|x|,|y|)|$.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The action for a |v| reads a <vector> and sets the direction
- accordingly using some expansion hackery to propagate it out. The
- "origin" is cleared locally to make |v(|$x$|,|$y$|)| behave as it
- should.
-
-\DOCMODE(
-\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@{<vector> expected after v}{}%
- \DIRECTIONempty@false \xyFN@\DIRECTION@i}}
-\DOCMODE)
-
-\paragraph*{Complex direction.}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- In case the direction is not as simple, you can construct
- |{| <pos> <decor> |}| that sets up $p$ and $c$ such that
- $\overline{pc}$ has the desired direction. \NOTE: that you must use
- the |(*|\dots|*)| form if this is to appear in an object <modifier>!
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The code for this is rather like the one for <vector>s.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{exercise}
- What effect is achieved by using <modifier>s |v/1pc/| and |v/-1pc/|?
-\answertext{The first has no effect since the direction is set to be that of
- a vector in the current direction, however, the second reverses the
- current direction.}
-\end{exercise}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[to <direction>]
-%
- Once the initial direction is established as either the last one or
- an absolute one then the remainder of the <direction> is interpreted.
-
- Adding a single |^| or |_| denotes the result of rotating the default
- direction a right angle in the positive and negative direction, \ie,
- anti-/clockwise, respectively. \NOTE: Do \emph{not} use |^|\relax|^|
- but only |__| to reverse the direction!
-
- A trailing |:|<vector> is like |v|<vector> but uses the
- <direction> to set up a standard square base such that |:(0,1)| and
- |:(0,-1)| mean the same as |:a(90)| and |:a(-90)| and as |^| and |_|,
- respectively.
-
-\DOCMODE(
-\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@{<vector> expected after :}{}%
- \DIRECTIONempty@false \xyFN@\DIRECTION@i}}%
- \else
- \let\next@=\afterDIRECTION@
- \fi\fi\fi \next@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{exercise}
- What effect is achieved by using <modifier>s |v/1pc/:(1,0)| and
- |v/-1pc/__|?
-\answertext{None in both cases.}
-\end{exercise}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{notes}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-
-\section{Decorations}
-??=[decor]
-
-\DOCMODE(
-\message{decorations;}
-\DOCMODE)
-
- <Decor>ations are actual \TeX\ macros that decorate the current
- picture in manners that depend on the state. They are allowed "after"
- the <pos>ition either of the outer ??c![\xy]\dots??c![\endxy] or inside
- |{|\dots|}|. The possibilities are given in figure~??[f.decor] with
- notes below.
-
-\begin{figure*}[tp]
-\vss
-\begin{syntax}
- ??w![<decor>]
- &\iss & <command> <decor>
- & either there is a command\dots
-\cr
- &\orr & <empty>
- & \dots or there isn't.
-\cr
- ??w![<command>]
- &\iss & ??c![\save] <pos>
- & save ??!^[state], then do <pos>
-\cr
- &\orr & ??c![\restore]
- & restore ??!^[state] saved by matcing |\save|
-\cr
- &\orr & ??c![\POS] <pos>
- & interpret <pos>
-\cr
- &\orr & ??c![\afterPOS] |{| <decor> |}| <pos>
- & interpret <pos> and then perform <decor>
-\cr
- &\orr & ??c![\drop] <object>
- & drop <object> as the <pos> |*| operation
-\cr
- &\orr & ??c![\connect] <object>
- & connect with <object> as the <pos> |**| operation
-\cr
- &\orr & ??c![\relax]
- & do nothing
-\cr
- &\orr & <\TeX\ commands>
- & any ??!^[\TeX\ commands] and user-defined macros \hfil\break
- that neither generates output (watch out for stray
- \hfil\break spaces!), nor changes the grouping, may be used
-\cr
- &\orr & ??c![\xyverbose]\orr??c![\xytracing]\orr??c![\xyquiet]\kern-1pc
- &\kern1pc ??!^[tracing] commands
-\cr
- &\orr & ??c![\xyignore] |{|<pos> <decor>|}|
- & ??!^[ignore] \Xy-code
-\cr
- &\orr & ??c![\xycompile] |{|<pos> <decor>|}|
- & ??!^[compile] to file <prefix><no>|.xyc|
-\cr
- &\orr & ??c![\xycompileto]|{|<name>|}{|<pos><decor>|}|\kern-1pc
- &\kern1pc ??!^[compile] to file <name>|.xyc|
-\cr
-\end{syntax}
-\caption{\protect<decor>ations.}
-??=[f.decor]
-\vfill
-\end{figure*}
-
- Most options add to the available <decor>, in particular the |v2|
- option loads many more since \Xy-pic versions prior to 2.7 provided
- most features as <decor>.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Simple decorations:}
-
- ??c![\POS] and ??c![\afterPOS] have already been defined; the
- following are just simple applications of previously defined
- commands:
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{notes}
-%
-\note??=[state]
-%
- Saving and restoring allows `excursions' where lots of things are
- added to the picture without affecting the resulting \Xy-pic state,
- \ie, $c$, $p$, and "base", and without requiring matching |{}|s. The
- independence of |{}| is particularly useful in conjunction with the
- ??c![\afterPOS] command, for example, the definition
-
-\begin{code}
-\def\ToPOS{\save\afterPOS{%
- \POS**{}?>*@2{>}**@{-}\restore};p,}
-\end{code}
-\gdocode
-\displaycode
-
- will cause the code |\ToPOS|<pos> to construct a double-shafted arrow
- from the current object to the <pos> (computed relative to it) such
- that
-%
-\begin{code}
-\xy *{A} \ToPOS +<10mm,2mm> \endxy
-\end{code}
-%
- \thecode\ will typeset the picture \docode.
-
-\paragraph*{Note:}
- Saving this way in fact uses the same state as the |{}| `grouping',
- so the code $p_1$|,| |{|$p_2$|\save},| \dots\ |{\restore}| will have
- $c=p_1$ both at the \dots\ and at the end!
-
-\DOCMODE(
-\xydef@\save{\relax\saveC}
-\xydef@\saveC{\xy@\save\save@ \POS}
-
-\xydef@\save@{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}}
-
-\xydef@\restore{\xy@\restore\leave@ \ignorespaces}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[\TeX\ commands]
-%
- One very tempting kind of \TeX\ commands to perform as <decor> is
- arithmetic operations on the \Xy-pic state. This will work in simple
- \Xy-pictures as described here but be warned: "it is not portable"
- because all \Xy-pic execution is indirect, and this is used by
- several options in nontrivial ways. Check the \TeX-nical
- documentation~\cite{RM95:Xy-picCSTC} for details about this!
-
- Macros that expand to <decor> will always do the same, though.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- \TeX\ hackers like the author may enjoy changing the \Xy-pic state
- directly using <decor> of the form |\xy@{|<id>|}{|<code>|}|\dots
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[tracing]
-%
- ??c![\xyecho] will turn on echoing of all interpreted \Xy-pic <pos>
- characters. \BUG: Not completely implemented yet. ??c![\xyverbose]
- will switch on a tracing of all \Xy-pic commands executed, with line
- numbers. ??c![\xytracing] traces even more: the entire \Xy-pic state
- is printed after each modification. ??c![\xyquiet] restores default
- quiet operation.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The trick is to replace the |\xy@| command such that it calls the
- `normal' one between writing out a trace message and the state.
-
-\DOCMODE(
-\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@}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[ignore]
-%
- Ignoring means that the <pos> <decor> is still parsed the usual way
- but nothing is typeset and the \Xy-pic state is not changed.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- We ignore in a group to ensure that nothing done inside `leaks' to
- the outside.
-
-\DOCMODE(
-\xydef@\xyignore#1{\xy@\xyignore{\xyignore@{#1}}\ignorespaces}
-
-\xydef@\xyignore@#1{{\let\xy@=\xyeat@ \change@oxy@\xy@ \POS#1\relax}}
-
-\xydef@\xyeat@#1#2{}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[compile]
-%
- It is possible to save an intermediate form of commands that generate
- parts of an \Xy-picture to a file such that subsequent typesetting of
- those parts is significantly faster: this is called
- "??w![compiling]". The produced file contains code to check that the
- compiled code still corresponds to the same <pos><decor> as well as
- efficient \Xy-code to redo it; if the <pos><decor> has changed then
- the compilation is redone.
-
- There are two ways to use this. The direct is to invent a <name> for
- each diagram and then embrace it in
- |\xycompileto{|<name>|}||{|\dots|}| -- this dumps the compiled code
- into the file <name>|.xyc|.
-
- When many diagrams are compiled then it is easier to add
- ??c![\xycompile]|{|\dots|}| around the <pos><decor> to be compiled.
- This will assign file names numbered consecutively with a <prefix>
- which is initially the expansion of |\jobname-| but may be set with
-%
-\begin{defs1}
-??c![\CompilePrefix]|{|<prefix>|}|
-\end{defs1}
-\noindent\unskip
-%
- This has the disadvantage, however, that if additional compiled
- \Xy-pictures are inserted then all subsequent pictures will have to
- be recompiled. One particular situation is provided, though: when
- used within constructions that typeset their contents more than once
- (such as most ??w![\AMS-\LaTeX] equation constructs) then the
- declaration
-%
-\begin{defs1}
-??c![\CompileFixPoint]|{|<id>|}|
-\end{defs1}
-\noindent\unskip
-%
- can be used inside the environment to fix the counter to have the
- same value at every passage.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- It is done by just writing all |\xy@|-commands to the file. The file
- establishes the correct input mode through use of the appropriate
- commands itself.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
- Recompilation is done by just writing all |\xy@|-commands to the
- file. The file establishes the correct input mode and terminates
- itself; after it has been finished it is simply reread to actually
- get the drawing done in the document.
-
-\DOCMODE(
-\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@(%)}
-\DOCMODE)
-
- \HACK{1:} The |\ifxysaving@| can never be locally switched off!
- Anyway it is used to allow a gross hack avoiding building a queue in
- the matrix option that will generate too long lines!!
-
- \HACK{2:} |\xysave@@toksix@| is not doing the catcode jive because it
- can never be invoked while loading a file (knock, knock~\smiley~).
-
- The initial command in all |.xyc| files check that this is the right
- file and that neither the version of \Xy-pic nor the user's code has
- changed:
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
- Finally the fix-point thing.
-
-\DOCMODE(
-\xydef@\CompileFixPoint#1{%
- \expandafter\ifx\csname#1FIX@@\endcsname\relax
- \expandafter\xdef\csname#1FIX@@\endcsname{\xycompileno@@}%
- \else
- \xdef\xycompileno@@{\csname#1FIX@@\endcsname}\fi}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Finally, when many `administrative typesetting runs' are needed, \eg,
- readjusting \LaTeX\ cross references and such, then it may be an
- advantage to not typeset any \Xy-pictures at all during the
- intermediate runs. This is supported by the following declarations
- which for each compilation creates a special file with the extension
- ??c![.xyd] containing just the size of the picture:
-%
-\begin{defs1}
-??c![\MakeOutlines]\cr
-??c![\OnlyOutlines]\cr
-??c![\ShowOutlines]\cr
-??c![\NoOutlines]\cr
-\end{defs1}
-\noindent\unskip
-%
- The first does no more. The second uses the file to typesets a
- dotted frame of the appropriate size instead of the picture (unless
- the picture has changed and is recompiled, then it is typeset as
- always and the |.xyd| file is recreated for subsequent runs). The
- third shows the outlines as dotted rectangles. The last switches
- outline processing completely off.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The implementation is all handled by |\outlines@@| which is called at
- strategic places in the compilation macros above. It just expands to
- nothing when the state is `No', the first argument when it is `Make',
- and the second when it is `Only'.
-
-\DOCMODE(
-
-\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{.}}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{notes}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-
-\section{Kernel object library}
-??=[objectlib]
-
-\DOCMODE(
-\message{kernel objects:}
-\DOCMODE)
-
- In this section we present the "library objects" provided with the
- kernel language---several options add more library objects. They fall
- into three types: Most of the kernel objects (including all those
- usually used with |**| to build connections) are "directionals",
- described in \S??[objectlib.directionals]. The remaining kernel
- library objects are "circles" of \S??[objectlib.circles] and "text"
- of \S??[objectlib.text].
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Directionals}
-??=[objectlib.directionals]
-
-\DOCMODE(
-\message{directionals,}
-\DOCMODE)
-
- The kernel provides a selection of "directionals": objects that
- depend on the current direction. They all take the form
-%
-\begin{defs1}
-%
- ??c![\dir]<dir> \cr
-%
-\end{defs1}
-\noindent\unskip
-%
- to typeset a particular <dir>ectional object. All have the structure
-%
-\begin{defs1}
-%
- <dir> \iss\ <variant>|{|<main>|}| \cr
-%
-\end{defs1}
-\noindent\unskip
-%
- with <variant> being <empty> or one of the characters |^_23| and
- <main> some mnemonic code.
-
- We will classify the directionals primarily intended for building
- connections as "connectors" and those primarily intended for
- placement at connection ends or as markers as "tips".
-
-\begin{figure*}[tp]
- %
- \def\Dx#1#2{\hbox{\def\1{#1{#2}}\enspace\tt\string\dir\codeof\1}}
- %
- \def\DC#1#{\DCx{#1}}
- \def\DCx#1#2{ \Dx{#1}{#2} & \vcenter{\xy
- 0*\cir<5pt>{} ; (16,5)*=<10.1pt>{}*\frm{-} **\dir#1{.} **h\dir#1{#2}
- \endxy}}
- %
- \def\DT#1#{\DTx{#1}}
- \def\DTx#1#2{\Dx{#1}{#2} & \vcenter{\xy
- -(4,2.5)*{} ; (4,0)*{} **{} ?>*\dir#1{#2} **\dir#1{.}
- \endxy}}
- %
- \def\Darray#1#2{{\let\\=\cr \tabskip=0pt plus 1fil %
- \halign to\hsize{&\hfil$##$&$##$\hfil\\
- \noalign{\hbox to\hsize{\hss#1\hss}\smallskip}#2\crcr}\bigskip}}
-%
-\Darray{??!^[Dummy]}{\hbox{\tt\string\dir\string{\string}}}
-%
-\Darray{??!^[Plain connectors]}{%
- \DC{-} &\DC2{-} &\DC3{-} \\
- \DC{.} &\DC2{.} &\DC3{.} \\
- \DC{~} &\DC2{~} &\DC3{~} \\
- \DC{--} &\DC2{--} &\DC3{--} \\
- \DC{~~} &\DC2{~~} &\DC3{~~} \\
-}
-\bigskip
-\Darray{??!^[Plain tips]}{%
- \DT{>} &\DT^{>} &\DT_{>} &\DT2{>} &\DT3{>} \\
- \DT{<} &\DT^{<} &\DT_{<} &\DT2{<} &\DT3{<} \\
- \DT{|} &\DT^{|} &\DT_{|} &\DT2{|} &\DT3{|} \\
- \DT{(} &\DT^{(} &\DT_{(} \\
- \DT{)} &\DT^{)} &\DT_{)} \\
- & &\DT^{`} &\DT_{`} \\
- & &\DT^{'} &\DT_{'}
-}
-\bigskip
-\Darray{??!^[Constructed tips]}{%
- \DT{>>} &\DT^{>>} &\DT_{>>} &\DT2{>>} &\DT3{>>} \\
- \DT{<<} &\DT^{<<} &\DT_{<<} &\DT2{<<} &\DT3{<<} \\
- \DT{||} &\DT^{||} &\DT_{||} &\DT2{||} &\DT3{||} \\
- \DT{|-} &\DT^{|-} &\DT_{|-} &\DT2{|-} &\DT3{|-} \\
- \DT{>|} &\DT{>>|} &\DT{|<} &\DT{|<<} &\DT{*} \\
- \DT{+} &\DT{x} &\DT{/} &\DT{//} &\DT{o}
-}
-\caption{Kernel library \protect<dir>ectionals}??=[f.dir]
-\end{figure*}
-
- Figure~??[f.dir] shows all the <dir>ectionals defined by the kernel
- with notes below; each <main> type has a line showing the available
- <variant>s. Notice that only some variants exist for each
- <dir>---when a nonexisting variant of a <dir> is requested then the
- <empty> variant is used silently. Each is shown in either of the two
- forms available in each direction as applicable: connecting a
- $\bigcirc$ to a $\Box$ (typeset by |**\dir|<dir>) and as a tip at the
- end of a dotted connection of the same variant (\ie, typeset by the
- <pos> |**\dir|<variant>|{.}| |?>| |*\dir|<dir>).
-
- As a special case an entire <object> is allowed as a <dir> by
- starting it with a |*|: |\dir*| is equivalent to ??c![\object].
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Setup:}
-
- ??c![\dir] starts an <object> and passes control to a `finisher' named
- |\dir|<variant>|{|<main>|}| otherwise to the one corresponding to an
- <empty> <variant>. The kernel ones described here have in common
- that they make use of the generic |\straight@| defined
- in~\S??[algo.connection].
-
-\DOCMODE(
-\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 <dir>: \codeof\next@\space not defined}{}%
- \let\next=\no@ \fi\fi \next}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{notes}
-
-\note??=[Dummy]
-
- You may use |\dir{}| for a ``dummy'' directional object (in fact this
- is used automatically by |**{}|). This is useful for a uniform
- treatment of connections, \eg, making the |?| <pos> able to find a
- point on the straight line from $p$ to $c$ without actually
- typesetting anything.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Uses an empty droppping, the |\no@@| connection. All the variants
- are defined for optimisation reasons and it is also named |\dir{ }|
- to allow spurious spaces:
-
-\DOCMODE(
-\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@ %\Invisible@false \Hidden@false %%%%HACK?
- \def\Leftness@{.5}\def\Upness@{.5}%
- \def\Drop@@{\setbox\z@=\copy\voidb@x}\def\Connect@@{\no@@}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[Plain connectors]
-
- The "plain connectors" group contains basic directionals that lend
- themself to simple connections.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The bulk of the code is in fact in the description of these. First
- each of the three types---lines, dots, and squiggles---then the code
- for doubling and tripling.
-
-\paragraph*{Lines:}
-
- A single |\dir{-}| object is a dash in the current direction: build
- box with character $C$ of the semidirectional ??c![\xydashfont]; use
- the characters natural width $w$ and construct a height/depth from $d
- = \abs{\sin(|\Direction|)}|em|$ (where |1em| is the dash length,
- \cf~|xydash10.mf|) as follows:
-$$
-\begin{array}{cccccc}
- C & L & R & D & U & "flip if" \\
- 0\ldots30 & 0 & w & 0 & d & dY \lt 0 \\
- 31\ldots63 & 0 & w & d & 0 & dY \gt 0 \\
- 64\ldots95 & 0 & w & d & 0 & dX \lt 0 \\
- 96\ldots127 & 0 & w & 0 & d & dX \lt 0 \\
-\end{array}
-$$
- where "flip" means shift the box opposite vertically and
- horizontally, \ie, $(L,R,D,U) := (R,L,U,D)$, and then lower the box
- $D-U$.
-
- "Procedure": (??_[line1])~Compute $d$, (??_[line2])~set $D,U$, and
- flip condition, (??_[line3])~build box to get $w,L,R$,
- (??_[line4])~dump box that is flipped if condition holds, and
- (??_[line5])~finally setup the required parameters properly.
-
-\DOCMODE(
-\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@ %?*[line1]
- \ifnum\SemiDirectionChar<31 \D@c=\z@ \U@c=\dimen@ \DN@{\d@Y<\z@}% %?*[line2]
- \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 %?*[line3]
- \L@c=\z@ \R@c=\wdz@
- \ifdim\next@ \dimen@=\R@c \R@c=\L@c \L@c=\dimen@ %?*[line4]
- \dimen@=\U@c \U@c=\D@c \D@c=\dimen@ \advance\dimen@-\U@c
- \lower\dimen@\boxz@
- \else \boxz@ \fi
-%
-%\ifnum\SemiDirectionChar=31\relax
-% \W@{LINE@(\the\SemiDirectionChar): WH=<\the\L@c+\the\R@c,\the\D@c+\the\U@c>;
-% d=<\the\d@X,\the\d@Y>}\fi
-%
- \edef\tmp@{\egroup \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c}% %?*[line5]
- \tmp@
- \Edge@c={\rectangleEdge}%%%%%\Invisible@false\Hidden@false
- \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\/}}
-\DOCMODE)
-
- \BUG: |\line@| should allow the size of the object to be changed
- after typesetting---this should make |\Connect@@| do dashing. Hm.
-
- As mentioned above a dash will `Connect' to make lines by using rules
- when strictly horizontal or vertical. This is controlled by enabling
- or disabling the test |\ifjusthvtest@| discussed below.
-
-\DOCMODE(
-\xydef@\solid@{%
-%
-%\W@{SOLID}\xystatus@:%
-%
- \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@}
-\DOCMODE)
-
- Finally, we give the algorithm for `spreading' the dashes along a
- solid line: just add an extra dash so they always overlap
- (see~\S??[algo.connection] for a proper defintion of the requirements
- to spreading).
-
-\DOCMODE(
-\xydef@\solidSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- By default \Xy-pic will typeset horizontal and vertical |\dir{-}|
- connections using \TeX\ rules. Unfortunately rules is the feature of
- the DVI format most commonly handled wrong by DVI drivers. Therefore
- \Xy-pic provides the <decor>ations
-%
-\begin{defs1}
-%
- ??c![\NoRules] \cr
- ??c![\UseRules] \cr
-%
-\end{defs1}
-\noindent\unskip
-%
- that will switch the use of such off and on.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- They simply redefine the conditional used to select typesetting
- with rules in |\solid@| above:
-
-\DOCMODE(
-\xylet@\ifjusthvtest@=\ifdim
-
-\xydef@\NoRules{\let\ifjusthvtest@=\iffalse}
-\xydef@\UseRules{\let\ifjusthvtest@=\ifdim}
-\DOCMODE)
-
- The actual typesetting essentially means calling |\drop@| to box with
- a rule of the appropriate length and with line width set to that of
- ??c![\xydashfont] (as stored in |\xydashw@|).
-
-\DOCMODE(
-\xydef@\solidvrule@{\no@@ \solidvrule@typeset \ifHidden@\else\noinsert@\fi
- \solidvrule@pre}
-
-\xydef@\solidvrule@pre{%
-%
-%\W@{VRULE SETUP}%
-%
- \def\Cbreak@@{%
-%
-%\W@{VRULE Cbreak}%
-%
- \connectRestore@ \swap@\lastbreak@@\swap@
- \solidvrule@typeset \edef\lastbreak@@{\cfromthec@}\Creset@@}%
- \def\Clast@@{%
-%
-%\W@{VRULE Clast}%
-%\let\Clast@@=\undefined
-%
- \connectRestore@ \Creset@@\swap@\lastbreak@@\swap@
- \solidvrule@typeset \Creset@@ \edef\lastbreak@@{\cfromthep@}}%
-}
-
-\xydef@\solidvrule@typeset{%
-%
-%\W@{VRULE TYPESET}\xystatus@cp:%
-%
- \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{%
-%
-%\W@{HRULE SETUP}%
-%
- \def\Cbreak@@{%
-%
-%\W@{HRULE Cbreak}%
-%
- \connectRestore@ \swap@\lastbreak@@\swap@
- \solidhrule@typeset \edef\lastbreak@@{\cfromthec@}\Creset@@}%
- \def\Clast@@{%
-%
-%\W@{HRULE Clast}%
-%\let\Clast@@=\undefined
-%
- \connectRestore@ \Creset@@\swap@\lastbreak@@\swap@
- \solidhrule@typeset \Creset@@ \edef\lastbreak@@{\cfromthep@}}%
-}
-
-\xydef@\solidhrule@typeset{%
-%
-%\W@{HRULE TYPESET}\xystatus@cp:%
-%
- \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@}}
-\DOCMODE)
-
- |\Droprule@| puts the actual ink on the page: with lower left corner
- at $c$ and upper right corner at~$p$.
-
-\DOCMODE(
-\xydef@\Droprule@{\advance\X@p-\X@c
-%
-%\W@{: kern\the\X@c\space width\the\X@p\space depth-\the\Y@c\space
-% height\the\Y@p}%
-%
- \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@@}
-\DOCMODE)
-
-\paragraph*{Dots:}
-
- |\dir{.}| creates a very boring dot when used as an <object>, but
- interesting dotted lines when used to connect. ??c![\zerodot] should
- expand to a zero-sized box with a dot (initialised to use
- |\zero|\-|dotbox@|); the <object> is built using |\pointlike@| <text>
- <spread-dimen> that we will use again later.
-
-\DOCMODE(
-\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
-% \Invisible@false \Hidden@false
- \def\Leftness@{.5}\def\Upness@{.5}\ctipEdge@
- \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@{#2}}}}
-\DOCMODE)
-
- This is reflected by the rather complicated spreading routine:
- `Dotting' is the art of putting zero-sized objects together with
- equal distance independent of the chosen direction. So we must
- recompute the number of segments $N$ (likely to be very big or
- ${-}1$) with trigonometry; using "radius" for the individual dots
- this becomes
-$$
-\begin{array}{lc}
- ??_[dottedspread]
- & A := \abs{\cos{|\Direction|}}*"radius"\\
- & B := \abs{\sin{|\Direction|}}*"radius"\\
- ??_[dottedspread1]
- & "if"~A+B \gt \abs{|\d@X|}+\abs{|\d@Y|}~"then"~N=0~"and exit" \\
- ??_[dottedspread2]
- & |<|A|,|B|>| := 2*|<|A|,|B|>|\\
- & "Filler" := <box with the original filler centered...>\\
- ??_[dottedspread3]
- & |<\d@X,\d@Y>| := |<\d@X,\d@Y>| + |<\sd@X|*A|,\sd@Y|*B|>|\\
- & |<|X|,|Y|>| := |<|X|,|Y|>| + |<\sd@X|*A/2|,\sd@Y|*B/2|>|\\
- ??_[dottedspread4]
- & N := \floor{"if"~\abs{|\d@X|}\gt\abs{|\d@Y|}
- ~"then" \abs{|\d@X|}/A else \abs{|\d@Y|}/B} + 1
-\end{array}
-$$
- as realised below:
-
-\DOCMODE(
-\xydef@\dottedSpread@#1{%\setupDirection@ %?*[dottedspread]
- \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@ %?*[dottedspread1]
- \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{%\setupDirection@ %?*[dottedspread2]
- \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@ %?*[dottedspread3]
- \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 %?*[dottedspread4]
- \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}
-\DOCMODE)
-%
-\noindent
- A particular aspect of this is that we have to enlarge and recenter
- the actual box used for the typesetting (|\lastobjectbox@|).
-
-\paragraph*{Squiggles:}
-
- These are just a lot of box maneuvering using the directional
- characters of ??c![\xybsqlfont] (see~|xybsql10.mf| for details):
-
-\DOCMODE(
-\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}%
-% \Invisible@false \Hidden@false
- \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@}
-\DOCMODE)
-
- The interesting bit is that they spread by not spreading, \ie, by
- centering between the endpoints---this means
-$$
-\begin{array}{ll}
- X := X - d/2, dX := dX - d
- &\hbox{where}~ d = |\sd@X|(\abs{dX} - N*A + |.1pt|)\\
- Y := Y - d/2, dY := dY - d
- &\hbox{where}~ d = |\sd@Y|(\abs{dY} - N*B + |.1pt|)\\
-\end{array}
-$$
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Double and triple directionals:}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- As can be seen by the last two columns, these (and most of the other
- connectors) also exist in double and triple versions with a |2| or a
- |3| prepended to the name. For convenience |\dir{=}| and |\dir{:}|
- are synonyms for |\dir2{-}| and |\dir2{.}|, respectively; similarly
- |\dir{==}| is a synonym for |\dir2{--}|.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This is very simple, really: |\double@| and |\triple@| do the work by
- redefining the |\Drop@@| method to do its job twice and thrice.
- \TODO: should probably extend any already defined |\Drop@@| method?
-
-\DOCMODE(
-%\xydef@\double@#1{\edef\Drop@@{\dimen@=#1\relax
-% \dimen@=.5\dimen@ \A@=-\sinDirection\dimen@ \B@=\cosDirection\dimen@
-% \setbox2=\hbox{\kern\A@\raise\B@\copy\z@}\dp2=\z@ \ht2=\z@ \wd2=\z@ \box2 %
-% \setbox2=\hbox{\kern-\A@\raise-\B@\boxz@}\dp2=\z@ \ht2=\z@ \wd2=\z@ \box2 }}
-
-%\xydef@\triple@#1{\edef\Drop@@{\dimen@=#1\relax
-% \A@=-\sinDirection\dimen@ \B@=\cosDirection\dimen@
-% \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@ \boxz@}}
-
-\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@}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Dashing directionals:}
-
- First traditional dashing:
-
-\DOCMODE(
-\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@}}
-\DOCMODE)
-
- Since the dashes should reach the endpoints we do this:
-$$
-\begin{array}{l}
- "if"~ N\gt 0 ~"then"~ N := N+1\\
- dX := dX + d/2 ~"where"~ d = |\sd@X|A\\
- dY := dY + d/2 ~"where"~ d = |\sd@Y|B\\
- "if"~ dX\gt 0 ~"then"~ X := X + A/2\\
- Y := Y + |\sd@Y|A/2\\
-\end{array}
-$$
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- Dashed dashing of squiggled lines are simpler since squiggles are
- symmetric:
-
-\DOCMODE(
-\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@}}
-\DOCMODE)
-
- The spreading of squiggles is similarly simpler: we just shave $1/4$
- squiggle size of each end of the conection in order to eliminate the
- blank space at both ends:
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- Finally ``dashed dotting'' synonyms:
-
-\DOCMODE(
-\xyletcsnamecsname@{dir1{..}}{dir{.}}
-\xyletcsnamecsname@{dir2{..}}{dir2{.}}
-\xyletcsnamecsname@{dir3{..}}{dir3{.}}
-\xyletcsnamecsname@{dir{..}}{dir1{.}}
-\xyletcsnamecsname@{dir{::}}{dir2{.}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[Plain tips]
-
- The group of "plain tips" contains basic objects that are useful as
- markers and arrowheads making connections, so each is shown at the
- end of a dotted connection of the appropriate kind.
-
- They may also be used as connectors and will build dotted
- connections. \eg, |**@{>}| typesets
-$$
- \xy 0*++{}; (10,3)*++{} **@{>} \endxy
-$$
-
-\begin{exercise}
- Typeset the following two $+$s and a tilted square:
-\begin{code}
-$$\xy
- *{+}; p+(6,3)*{+} **{} ?(1)
- *@{-} *!/-5pt/^\dir{-}
- *^\dir{-} *!/^-5pt/\dir{-}
-\endxy$$
-\end{code}
-\docode
-%
- "Hint": the dash created by |\dir{-}| has the length |5pt| (here).
-%
-\answercode
-\answertext{One way is}
-\answertext\displaycode
-\answertext{Thus we first create the two $+$s as $p$ and $c$ and connect them
- with the dummy connection |**{}| to setup the direction parameters.
- Then we move `on top of $c$' with |?(1)| and position the four sides
- of the square using |^| and |_| for local direction changes and
- |/|<dimen>|/| for skewing the resulting object by moving its
- reference point in the opposite direction.}%
-\end{exercise}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xylet@\ctipEdge@=\czeroEdge@
-\DOCMODE)
-
- \TODO: Change tips to have a tiny size of 2sp which may be taken as
- an indication that it is a tip (this can be used by some features,
- \eg, `arrow').
-
-\paragraph*{Arrow heads:}
-
- The ones intended for single connections are just characters from
- ??c![\xyatipfont] and ??c![\xybtipfont].
-
-\DOCMODE(
-\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@ %\Invisible@false \Hidden@false
- \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}
-\DOCMODE)
-
- Double and triple tips are realised by taking the two halfs and
- `wringing them apart'; as the naming indicates they are meant to be
- put at the end of |2|- and |3|-connections. This is currently done
- the slightly hacky (but efficient) way of adding directly to
- ??c![\DirectionChar]; maybe this should be using |\vDirection@|?
-
-\DOCMODE(
-\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}%
-% \Invisible@false \Hidden@false
- \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}%
-% \Invisible@false \Hidden@false
- \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}}
-\DOCMODE)
-
-\paragraph*{Stopper:}
-
- |\dir{||}| makes a `stopper' using just the appropriate
- ??c![\xydashfont] character rotated $90^\circ$ and centered; the |^|
- and |_| variants are just shifted appropriately and two are used to
- make the |2| and |3| variants longer.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\paragraph*{Hooks:}
-
- These are halfcircles opening towards or opposite ??c![\Direction] and
- fastened by their center or either endpoint. Build by lots of box
- manipulation with the ??c![\xybsqlfont] quarter circles\dots\smiley
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\paragraph*{Quarter turns:}
-
- These are quarter circles fastened by their start or end point in
- ??c![\Direction]. Build by box manipulation of the ??c![\xybsqlfont]
- quarter circles. The intention is that the |`'| directionals are
- half the corresponding |()| directional.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[Constructed tips]
-
- These tips are combinations of the plain tips provided for
- convenience (and optimised for efficiency). New ones can be
- constructed using ??c![\composite] and by declarations of the form
-%
-\begin{defs1}
-%
- ??c![\newdir] <dir> |{|<composite>|}|\cr
-%
-\end{defs1}
-\noindent\unskip
-%
- which defines ??c![\dir]<dir> as the <composite> (see note~??[composite
- object box] for the details).
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- ??c![\newdir] is simple:
-
-\DOCMODE(
-\xydef@\newdir#1#{\newdir@{#1}}
-
-\xydef@\newdir@#1#2#3{\xydefcsname@{dir#1{#2}}{\composite@{}{#3}}}
-\DOCMODE)
-
- Then the somewhat more efficient |\shiftdir@| used internally for
- moving a tip in the current direction---it does so by making a local
- hbox within which the argument tip is constructed and subsequently
- shifted and made of zero size. Use as
-$$
- |\shiftdir@|<tip@><dimen><tip@>
-$$
- where <tip@> means a tip command without the leading |\hbox{|.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- Then the tips, with the |\tipjot@| hook allowing changing the spacing
- of tips used for single lines.
-
-\DOCMODE(
-\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{}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{notes}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{figure*}[ht]
-\vss
-\begin{syntax}
-%
- \multispan3|\cir| <radius> |{| <cir> |}|\hfil
- & <cir>cle segment with <radius>
-\cr
-\noalign{\nobreak\smallskip\nobreak\hrule\nobreak\smallskip\nobreak}
-%
- ??w![<radius>]
- &\iss & <empty>
- & use $R_c$ as the radius
-\cr
- &\orr & <vector>
- & use $X$ of the <vector> as radius
-\cr
-\noalign{\smallbreak}
-%
- ??w![<cir>]
- &\iss & <empty>
- & full circle of <radius>
-\cr
- &\orr & <diag> <orient> <diag>
- & partial circle from first <diag>onal through to the
- second <diag>onal in the <orient>ation
-\cr
-\noalign{\smallbreak}
-%
- ??w![<orient>]
- &\iss & |^|
- & anticlockwise
-\cr
- &\orr & |_|
- & clockwise
-\cr
-\end{syntax}
-\caption{\protect<cir>cles.}
-??=[f.cir]
-\vfill
-\end{figure*}
-
-
-\subsection{Circle segments}
-??=[objectlib.circles]
-
-\DOCMODE(
-\message{circles,}
-\DOCMODE)
-
- Circle <object>s are round and typeset a segment of the circle
- centered at the reference point. The syntax of circles is described
- in figure~??[f.cir] with explanations below.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The |\cir| command is the hub: it parses the optional <radius> (to
- |\R@|, default from $R_c$) and |{|<cir>|}|, bailing out with a
- |\zerodot| if the radius is to small:
-
-\DOCMODE(
-\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 <radius>: must be
- <vector> or <empty>}{}\fi
- \afterCIRorDIAG{\xyFN@\cir@cir}{\xyFN@\cir@diag}#2@}
-\DOCMODE)
-
- The code to actually typeset the <cir> just parsed starts by checking
- that the <cir> was immediately followed by the |@| we put there in
- |\cir|:
-
-\DOCMODE(
-\xydef@\cir@cir{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\cir@cir}%gobble spaces
- \else \ifx @\next \DN@ @{\cir@i}%
- \else \xyerror@{illegal <cir>: must have form <diag><orient><diag> or
- <empty>}{}%
- \fi\fi \next@}
-\DOCMODE)
-
- Similarly when an <empty> one was given---the parser will recognise
- this as a <diag> but we hack that here:
-
-\DOCMODE(
-\xydef@\cir@diag{%
- \DN@{\xyerror@{illegal <cir>: must have form <diag><orient><diag> or
- <empty>}{}}%
- \ifx @\next \ifnum\count@=8 %
- \DN@ @{\def\CIRin@@{0}\def\CIRorient@@{\CIRfull@}\def\CIRout@@{7}\cir@i}%
- \fi\fi \next@}
-\DOCMODE)
-
- \dots and then use the constructed methods to build it:
-
-\DOCMODE(
-\xydef@\cir@i{%
- \ifnum\CIRin@@=8 \xyerror@{incomplete <cir> specification}{%
-The <cir> you specified as <diag><orient><diag> 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}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Parsing:}
-
- The |\afterCIRorDIAG| parser handles the parsing: it either
-%
-\begin{itemize}
-
-\item
- parses the <cir> and sets "in", "orient", and "out", and passes
- control to the first argument continuation, or
-
-\item
- parses the single <diag> specified, store it in |\count@| (as |8| if
- an <empty> one given), and pass control to the second continuation
- argument,
-
-\end{itemize}
-%
- where the <diag> internal representation number of note~??[diagonal]
- of is used. An <empty> circle is treated as an <empty> diagonal;
- specifying an <empty> first <diag> of a <cir> is equivalent to using
- the value of the "in" method at call time.
-
- The parser is very simple, setting methods stored in the usual
- |@@|-terminated control sequences (\TODO: Rename all non-method
- control sequences that end in |@@|\dots to use |@|<romannumeral>
- suffixes\dots):
-
-\DOCMODE(
-\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@@}%gobble spaces
- \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@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The default is to generate a "full circle" with the specified radius,
- \eg,
-$$
-\def\quotesmash#1{\setbox0=\hbox{``$\vcenter{#1}$''}\ht0=8pt \dp0=3pt \box0}
-\begin{array}{ccc}
- |\xy*\cir<4pt>{}\endxy|
- &\hbox{typesets}& \quotesmash{\xy*\cir<4pt>{}\endxy}
-\cr
- |\xy*{M}*\cir{}\endxy|
- &\hbox{---}& \quotesmash{\xy*{M}*\cir{}\endxy}
-\end{array}
-$$
- All the other circle segments are subsets of this and have the shape
- that the full circle outlines.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Finally we present the "orient" methods. They use these `internal
- methods' to actually draw the circles
-
-\DOCMODE(
-\xylet@\CIRtest@@=\relax
-\xydef@\CIRlo@@{0}
-\xydef@\CIRhi@@{0}
-\DOCMODE)
-
- Below we call them "lo", "hi", and "test"; the first two are coded as
- described in note ??[diagonal] and the last takes two arguments: a
- dimension and something to do if the test succeeds. |\count@@| and
- |\count@| should be set to "in" and "out" internally as well in case
- |\cirbuild@| and friends below should be used.
-
- The dummy "orient" used for simple circles is the simplest:
-
-\DOCMODE(
-\xydef@\CIRfull@{\def\CIRtest@@##1##2{##2}}
-\DOCMODE)
-
- The kernel |\cirbuild@| builds the actual <object> using characters
- from the ??c![\xycircfont] assumed coded like |xycirc10.mf|:
- |\cirrestrict@@| choses a group and adjusts the radius |\R@| to fit it
- exactly. The group is multiplied by 8 to get the group character
- offset [|\count@|].
-
-\DOCMODE(
-\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@}}
-\DOCMODE)
-
- |\cirrestrict@@| computes the group $g$ [|\count@|] of circle segments
- to use from the radius $r$ [|\R@|] using the formula (the reverse of
- the one in |xycirc10.mf|)
-$$
-\def\arraystretch{1}
-g = \left\{ \begin{array}{ll}
- \floor{r\over1|pt|}-1 &\textrm{if}~ 1|pt|\le r\lt 8|pt|\\
- \floor{r\over2|pt|}+3 &\textrm{if}~ 8|pt|\le r\lt 16|pt|\\
- \floor{r\over4|pt|}+7 &\textrm{if}~16|pt|\le r\lt 32|pt|\\
- 15 &\textrm{if}~32|pt|\le r \end{array}
-\right.
-$$
- (where we know from |\cir@i| that $r\ge\frac12|pt|$), and then
- adjusts the radius to be exactly the one chosen through the use of
- group $g$ using the formula in |xycirc10.mf|\dots this is necessary
- because of the restriction on |tfm| files that they can only have 15
- different nonzero heights and depths. Subsequent calls to
- |\cirrestrict@@| should compute the same values.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- "Partial circle segments" with <orient>ation are the part of the full
- circle that starts with a tangent vector in the direction of the
- first <diag>onal (see note~??[diagonal]) and ends with a tangent
- vector in the direction of the other <diag>onal after a clockwise
- (for |_|) or anticlockwise (for |^|) turn, \eg,
-$$
-\def\quotesmash#1{\setbox0=\hbox{``$\vcenter{#1}$''}\ht0=8pt \dp0=3pt \box0}
-\begin{array}{ccc}
- |\xy*\cir<4pt>{l^r}\endxy|
- &\hbox{typesets}& \quotesmash{\xy*\cir<4pt>{l^r}\endxy}
-\\
- |\xy*\cir<4pt>{l_r}\endxy|
- &\hbox{---}& \quotesmash{\xy*\cir<4pt>{l_r}\endxy}
-\\
- |\xy*\cir<4pt>{dl^u}\endxy|
- &\hbox{---}& \quotesmash{\xy*\cir<4pt>{dl^u}\endxy}
-\\
- |\xy*\cir<4pt>{dl_u}\endxy|
- &\hbox{---}& \quotesmash{\xy*\cir<4pt>{dl_u}\endxy}
-\\
- |\xy*+{M}*\cir{dr_ur}\endxy|
- &\hbox{---}& \quotesmash{\xy*+{M}*\cir{dr_ur}\endxy}
-\end{array}
-$$
- If the same <diag> is given twice then nothing is typeset, \eg,
-$$
-\def\quotesmash#1{\setbox0=\hbox{``$\vcenter{#1}$''}\ht0=8pt \dp0=3pt \box0}
-\begin{array}{ccc}
- |\xy*\cir<4pt>{u^u}\endxy|
- &\hbox{typesets}& \quotesmash{\xy*\cir<4pt>{u^u}\endxy}
-\end{array}
-$$
- Special care is taken to setup the <diag>onal defaults:
-%
-\begin{itemize}
-
-\item
- After |^| the default is the diagonal $90^\circ$ anticlockwise from
- the one before the |^|.
-
-\item
- After |_| the default is the diagonal $90^\circ$ clockwise from the
- one before the |_|.
-
-\end{itemize}
-%
- The <diag> before |^| or |_| is required for ??c![\cir] <objects>.
-
-\begin{exercise}
- Typeset the following shaded circle with radius |5pt|:
-%
-\begin{code}
-$$\xy
- *\cir<5pt>{}
- *!<-.2pt,.2pt>\cir<5pt>{dr^ul}
- *!<-.4pt,.4pt>\cir<5pt>{dr^ul}
- *!<-.6pt,.6pt>\cir<5pt>{dr^ul}
-\endxy$$
-\end{code}
-\docode
-%
-\answertext{One way is to add extra half circles skewed such that they create
- the illusion of a shade:}
-\answercode
-\answertext\displaycode
-\end{exercise}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- These two macros implement the defaults and setup of "lo" and "hi"
- for anticlockwise and clockwise segments. Here is what they set:
-$$
-\begin{array}{\otherbar c\otherbar cc\otherbar l\otherbar}
-\hline
- ??w![<cir>] & "lo" & "hi" & "test"(s) \\
-\hline
- d_1|^|d_2, d_1\le d_2 & d_1 -_8 1 & d_2 -_8 1 & {"lo"\le s}\wedge{s\lt "hi"}\\
- d_1|^|d_2, d_1\gt d_2 & d_2 -_8 1 & d_1 -_8 1 & {s \lt"lo"} \vee {"hi"\le s}\\
- d_1|_|d_2, d_1\lt d_2 & d_1 +_8 3 & d_2 +_8 3 & {s \lt"lo"} \vee {"hi"\le s}\\
- d_1|_|d_2, d_1\ge d_2 & d_2 +_8 3 & d_1 +_8 3 & {"lo"\le s}\wedge{s\lt "hi"}\\
-\hline
-\end{array}
-$$
- where $+_8$ and $-_8$ are $+$ and $-$ modulo 8; $d_1$ and $d_2$ are
- in |\count@@| and |\count@|, respectively.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Text}
-??=[objectlib.text]
-
-\DOCMODE(
-\message{text;}
-\DOCMODE)
-
- Text in pictures is supported through the <object> construction
-%
-\begin{defs1}
-??c![\txt] <width> <style> |{|<text>|}|\cr
-\end{defs1}
-\noindent\unskip
-%
- that builds an object containing <text> typeset to <width> using
- <style>; in <text> |\\| can be used as an explicit line break; all
- lines will be centered. <style> should either be a font command or
- some other stuff to do for each line of the <text> and <width> should
- be either |<|<dimen>|>| or <empty>.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The code just parses the <width> defaulting it to |<\maxdimen>| which
- is recognised as `free form'.
-
-\DOCMODE(
-\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}}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-
-\section{\Xy-pic options}
-??=[option]
-%
- \NOTE: \LaTeXe\ users should also consult the paragraph on ``xy.sty''
- in~\S??[env.loading].
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Loading}
-??=[option.loading]
-%
- \Xy-pic is provided with a growing number of options supporting
- specialised drawing tasks as well as exotic output devices with
- special graphic features. These should all be loaded using this
- uniform interface in order to ensure that the \Xy-pic environment is
- properly set up while reading the option.
-%
-\begin{defs1}
-%
- ??c![\xyoption] |{| <option> |}| \cr
- ??c![\xyrequire] |{| <option> |}|
-%
-\end{defs1}
-\noindent\unskip
-%
- ??c![\xyoption] will cause the loading of an \Xy-pic option file
- which can have one of several names. These are tried in sequence:
- |xy|<option>|.tex|, |xy|<option>|.doc|, |xy|<short>|.tex|, and
- |xy|<short>|.doc|, where <short> is <option> truncated to 6 (six)
- characters to conform with the TWG-TDS~\cite{TWG-TDS}.
-
- ??c![\xyrequire] is the same except it is ignored if an option with
- the same name is already present (thus does not check the version
- etc.).
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- Sometimes some declarations of an option or header file or whatever
- only makes sense after some particular other option is loaded. In
- that case the code should be wrapped in the special command
-%
-\begin{defs1}
- ??c![\xywithoption] |{| <option> |}| |{| <code> |}| \cr
-\end{defs1}
-\noindent\unskip
-%
- which indicates that if the <option> is already loaded then <code>
- should be executed now, otherwise it should be saved and if <option>
- ever gets loaded then <code> should be executed afterwards. \NOTE:
- The <code> should allow more than one execution; it is saved with the
- catcodes at the time of the ??c![\xywithoption] command.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
- Finally, it is possible to declare <code> as some commands to be
- executed before every actual execution of
- ??c![\xywithoption]\-|{|<option>|}|\-|{|\dots|}|, and similarly
- <code> to be executed before every |\xyoption{|<option>|}| and
- |\xyrequire{|<option>|}| (collectively called `requests')::
-%
-\begin{defs1}
- ??c![\xyeverywithoption] |{| <option> |}| |{| <code> |}| \cr
- ??c![\xyeveryrequest] |{| <option> |}| |{| <code> |}| \cr
-\end{defs1}
-\noindent\unskip
-%
- This is most often used by an option to activate some hook every time
- it is requested itself.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- These last two use the usual expansion trickery to define or append
- to the control sequences named |\xyevery|\-|request@|\-<option>|@|
- and |\xyevery|\-|withoption@|\-<option>|@| used in the definitions
- above.
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Option file format}
-??=[option.fileformat]
-%
- Option files must have the following structure:
-
-\begin{quote}
- |%%| <identification> \\
- |%%| <copyright, \etc>
-
- |\ifx\xyloaded\undefined \input xy \fi|
-
- |\xyprovide{|<option>|}{|<name>|}{|<version>|}%| \\
- \null\qquad\qquad |{|<author>|}{|<email>|}{|<address>|}|
-
- ??w![<body of the option>]
-
- ??c![\xyendinput]
-\end{quote}
-%
- The 6 arguments to ??c![\xyprovide] should contain the following:
-%
-\begin{description}
-
-\item[<option>]
- Option load name as used in the ??c![\xyoption] command. This should
- be safe and distinguishable for any operating system and is thus
- limited to characters chosen among the lowercase letters (|a|--|z|),
- digits (|0|--|9|), and dash (|-|), and all options should be uniquely
- identifiable by the first 6 (six) characters only.
-
-\item[<name>]
- Descriptive name for the option.
-
-\item[<version>]
- Identification of the version of the option.
-
-\item[<author>]
- The name(s) of the author(s).
-
-\item[<email>]
- The electronic mail address(es) of the author(s) "or" the affiliation
- if no email is available.
-
-\item[<address>]
- The postal address(es) of the author(s).
-
-\end{description}
-%
- This information is used not only to print a nice banner but also to
- (1)~silently skip loading if the same version was preloaded and
- (2)~print an error message if a different version was preloaded.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The ??c![\xyprovide] command checks that the option is not already
- loaded and that the loaded version is the same as the preloaded one
- by checking the existence and contents of the macro
- |\xy|<option>|loaded|. Finally it calls ??c![\xycatcodes] such that
- the option internals are loaded in `\TeX\ programming mode'.
- ??c![\xyendinput] undoes this.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
- The above is futher complicated because an option may loaded in its
- |DOCMODE| form (ending in |.doc|). So we make sure that the mode
- that skips documentation, defined in the |xy.tex| file header, is
- active now.
-
-\DOCMODE(
-\expandafter\xylet@\expandafter\xyprovidedocmode@\csname DOCMODE\endcsname
-\xylet@\xyenddocmode@=\relax
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The `dummy' option described in~\S??g[:dummy] is a minimal option
- using the above features. It uses the special |DOCMODE| format to
- include its own documentation for this document (like all official
- \Xy-pic options) but this is not a requirement.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Driver options}
-??=[option.drivers]
-%
- The ??w![<driver>] options described in \GROUP~??g[:drivers] require
- special attention because each driver can support several
- ??w![extension] options, and it is sometimes desirable to change
- <driver> or even mix the support provided by several.\footnote{The
- kernel support described here is based on the (now defunct)
- |xydriver| include file by Ross Moore.}
-
- A <driver> option is loaded as other options with
- |\xyoption{|<driver>|}| (or through \LaTeXe\ class or package options
- as described in~\S??[env.loading]). The special thing about a
- <driver> is that loading it simply declares the name of it,
- establishes what extensions it will support, and selects it
- temporarily. Thus the special capabilities of the driver will only
- be exploited in the produced DVI file if some of these extensions are
- also loaded and if the driver is still selected when output is
- produced. Generally, the order in which the options are loaded is
- immaterial. (Known exceptions affect only internal processing and
- are not visible to the user in terms of language and expected output.)
- In particular one driver can be preloaded in a format and a different
- one used for a particular document.
-
- The following declarations control this:
-%
-\begin{defs}
-??c![\UseSingleDriver] & forces one driver only \cr
-??c![\MultipleDrivers] & allows multiple drivers \cr
-??c![\xyReloadDrivers] & resets driver information \cr
-\end{defs}
-\noindent\unskip
-%
- The first command restores the default behaviour: that ony one
- <driver> is allowed, \ie, each loading of a <driver> option cancels
- the previous. The second allows consecutive loading of drivers such
- that when loading a <driver> only the extensions actually supported
- are selected, leaving other extensions supported by previously
- selected drivers untouched. Beware that this can be used to create
- DVI files that cannot be processed by any actual DVI driver program!
-
- The last command is sometimes required to reset the \Xy-pic <driver>
- information to a sane state, for example, after having applied one of
- the other two in the middle of a document, or when using simple
- formats like plain \TeX\ that do not have a clearly distinguished
- preamble.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Driver database.}
-
- The main structure, the list of `loaded' and `selected' <driver>s
- (ordered by age), is implemented as traditional \TeX\ `|\do|-lists'
- (applications of |\do{|<driver>|}| to each element).
-
-\DOCMODE(
-\xydef@\xydriversloaded@@{\do{unload}}
-\xylet@\xydriversselected@@=\empty
-\DOCMODE)
-%
- This is used to provide entry points into a secondary structure that
- lists for each <driver> the extensions supported by that driver. As
- should be apparent from the above, only the |unload| <driver> is
- present initially: it represents the implementation technique used
- for the extension when no <driver> is selected. Every extension must
- add an entry which reestablishes the default implementation of the
- extension:
-
-\DOCMODE(
-\xylet@\xydriver@unload@support@@=\empty
-\DOCMODE)
-%
- All <driver>s will have a similar structure named
- |\xydriver@|\-<driver>\-|@support@@| which contains the extensions
- supported by that particular <driver>: the `signature' of each driver
- as |\doii|-list with two arguments (hence the |ii|~\smiley~): the
- extension and the command to install the <driver>-extension
- combination.
-
- The two selection principles differ significantly. When only a
- single <driver> is selectable then all extensions need to be unloaded
- "before" the selection. When multiple <driver>s are allowed then
- only the added support needs to be executed.
-
-\DOCMODE(
-\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
-\DOCMODE)
-
- Finally we define the following to get complete independence of load
- sequence: at every loading of an extension option known to be
- supported, we run through the list of presently selected drivers to
- activate any support for it, using the following:
-
-\DOCMODE(
-\xydef@\xyselectoptionsupport@{\let\do=\activatedriver@ \xydriversselected@@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- As the above suggests it sometimes makes sense to load <driver>s in
- the actual textual part of a document, however, it is recommended
- that only drivers "also" loaded in the preamble are reloaded later,
- and that ??c![\xyReloadDrivers] is used when there is doubt about the
- state of affairs. In case of confusion the special command
- ??c![\xyShowDrivers] will list all the presently supported and
- selected driver-extension pairs to the \TeX\ log.
-
-\DOCMODE(
-\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@{ <driver> #1 supports \next@.}}
-\DOCMODE)
-
-\DOCMODE1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- It is not difficult to add support for additional <driver>s; how is
- described in the \TeX\-nical documentation.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Driver internals.}
-
- A <driver> option files must have the following structure:
-
-\begin{quote}
- |%%| <identification> \\
- |%%| <copyright, \etc>
-
- |\ifx\xyloaded\undefined \input xy \fi|
-
- |\xyprovide{|<option>|}{|<name>|}{|<version>|}%| \\
- \null\qquad\qquad |{|<author>|}{|<email>|}{|<address>|}|
-
- |\newdriver{%|\\
- |\xyaddsupport{|<extension>|}|<cs>\\
- \vdots\\
- |}|
-
- <body of the {<driver>} option>
-
- ??c![\xyendinput]
-\end{quote}
-%
- There should be an ??c![\xyaddsupport] command for each supported
- <extension> which specicifies the <cs> (control sequence) with which
- the indicated support is "activated".
-
- The ??c![\newdriver] command first establishes the `support' list for
- the <driver> (running the argument), then adds the <driver> to the
- `loaded' list, and finally selects it now and for every subsequent
- request of this <driver> option.
-
- It is important that the <cs> that "activates" each driver/extension
- combination only does "rebinding of hooks". In order to see what
- hooks are available for an extension, look for declarations of the
- form
-%
-\begin{defs1}
- ??c![\xyaddunsupport] |{|<extension>|}| <cs>
-\end{defs1}
-\noindent\unskip
-%
- and see what rebindings that <cs> does: those are the
- hokks. "because" they are the ones that will be safely reestablished!
- This should be adherede to because both activation and deactivation
- <cs>s may be executed many times.
-
- The procedure is as follows: (??_[newdr1])~add the driver and clear
- its support control sequence unless it is already defined,
- (??_[newdr2])~execute the support commands, and (??_[newdr3])~setup
- to select it after loading.
-
-\DOCMODE(
-\xydef@\newdriver#1{%
- \def\nextiii@##1{%?*[newdr1]
- \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 %?*[newdr2]
- \DN@##1{\xywithoption{##1}{%?*[newdr3]
- \selectdriver@{##1}\xyeveryrequest{##1}{\selectdriver@{##1}}}}%
- \expandafter\next@\expandafter{\xyoption@@}\ignorespaces}
-\DOCMODE)
-
- The support commands merely add to the support |\do|-lists which in
- turn (??_[adddr1])~adds |\doii{|<extension>|}{|\dots|}| to the
- |\xydriver@|<driver>|@support@@| control sequence and adds a check
- for when to apply it every time that <extension> is requested!
-
-
-\DOCMODE(
-\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@}%
-%
-% CHECK that the <driver> is loaded!
-\def\next{\xybug@{<driver> \nextii@\space not loaded}}%
-\def\do##1{\DN@{##1}\edef\next@{\codeof\next@}%
- \ifx\next@\nextii@ \let\next=\relax \fi}\xydriversloaded@@ \next
-%
-% CHECK that the specified <extension> is not already supported!
-\def\next{\xybug@{<driver> \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 %?*[adddr1]
- \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}}
-\DOCMODE)
-
-\paragraph*{Driver related messages.}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Most extensions will print a warning when a capability is used which
- is not supported by the presently loaded <driver>. Such messages are
- only printed once, however, (for some formats they are repeated at
- the end). Similarly, when the support of an extension that exploits
- a particular <driver> is used a warning message will be issued that
- the DVI file is not portable.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This is implemented by defining a control sequence for each such
- warning and repeat it at the end. Warnings should be issued using
- one of
-%
-\begin{defs1}
-|\xyununsupportwarning@| |{|<extension>|}| |{|<message>|}|\cr
-|\xyunsupportwarning@| |{|<driver>|}| |{|<extension>|}| \cr
-\end{defs1}
-
-\DOCMODE(
-\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 <driver> `\next@' \string\special s for the `\nextii@'
- extension.}}
-\DOCMODE)
-
- Backwards compatibility\dots
-
-\DOCMODE(
-\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.}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-
-\section{Algorithms}
-??=[algo]
-
- This section presents the more complicated algorithms used in
- \Xy-pic.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Directions}
-??=[algo.direction]
-
-\DOCMODE(
-\message{algorithms: directions,}
-\DOCMODE)
-
- The "direction state" is described by the following parameters:
-%
-\begin{defs}
-"Direction" & `angle' of the direction on $]-4K\dots4K]$ unit square \cr
-"dX","dY" & the vector $c-p$ \cr
-"sdX","sdY" & sign of "dX" and "dY" \cr
-|\K@dXdY|,|\K@dYdX| & quotients $K\frac{"dX"}{"dY"}$ and
- $K\frac{"dY"}{"dX"}$ (as dimensions in sp) \cr
-"DirectionChar","SemiDirectionChar" & |\chardefs| for directional
- and semidirectional fonts \cr
-"cosDirection","sinDirection" & factors in the range $]-1\dots1]$
- corresponding to cos and sin of Direction \cr
-\end{defs}
-%
- where the ``$]-4K\dots4K]$ unit square'' has the following angles:
-$$
-\xy *[]=<3pc>{}="c"*\frm{-},
- "c"; (-1,-1)**{},p+/4pc/ *+{0} **@{-}?>*@{>},
- "c"; ( 0,-1)**{},p+/4pc/ *+{K} **@{-}?>*@{>},
- "c"; ( 1,-1)**{},p+/4pc/ *+{2K} **@{-}?>*@{>},
- "c"; ( 1, 0)**{},p+/4pc/ *+{3K} **@{-}?>*@{>},
- "c"; ( 1, 1)**{},p+/4pc/ *+{4K} **@{-}?>*@{>},
- "c"; ( 0, 1)**{},p+/4pc/ *+{{-}3K} **@{-}?>*@{>},
- "c"; (-1, 1)**{},p+/4pc/ *+{{-}2K} **@{-}?>*@{>},
- "c"; (-1, 0)**{},p+/4pc/ *+{{-}K} **@{-}?>*@{>},
-\endxy
-$$
- where the intermediate $K$ angle in each interval correspond to
- equidistant points on the unit square. Thus only for
- $n\in\{-3,2,1,0,1,2,3,4\}$ the angle of direction $n*K$ is exactly
- $n*45^\circ - 135^\circ$ ($0^\circ$ being the direction straight
- right).
-
- As usual |\DirectionfromtheDirection@| expands to code setting the
- current direction.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- The actual direction computation is done using
- |\setupDirection@|.
-
-\paragraph*{Procedure:}
-%
- Is really not so complicated. [??_[Dir1]]~"dX" and "dY" are computed
- from $c-p$ and we skip if the current setting is based on these (this
- is stored in the internal |\Directiontest@@| method);
- [??_[Diri1]]~if the direction is one of the principal ones then
- proceed with an optimised special case for those; otherwise proceed
- with the generic code.
-
-\DOCMODE(
-\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 %?*[Dir1]
- \Directiontest@@\relax\setupDirection@i}
-
-\xydef@\setupDirection@i{\DN@{\setupDirection@ii}%?*[Diri1]
- \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@}
-\DOCMODE)
-
- The procedures for the special <diag>onal cases are summarised in
- this table:
-$$
-\let\|=\otherbar
-\begin{array}{\|c\|r\|rl\|c\|rl\|}
-\hline
-\mbox{<diag>onal} & "Direction" & \cos("Direction"),& \sin("Direction")
- & "sign"("dX","dY") & "Char" & "Semi" \\
-\hline
- |dl| & 0 & {-\sqrt{\frac12}},& {-\sqrt{\frac12}} & -,- & 127 & 127 \\
- |d| & K & 0,& -1 & +,- & 15 & 31 \\
- |dr| & 2K & {\sqrt{\frac12}},& {-\sqrt{\frac12}} & +,- & 31 & 63 \\
- |r| & 3K & 1,& 0 & +,+ & 47 & 95 \\
- |ur| & 4K & {\sqrt{\frac12}},& {\sqrt{\frac12}} & +,+ & 63 & 127 \\
- |u| &-3K & 0,& 1 & +,+ & 79 & 31 \\
- |ul| &-2K & {-\sqrt{\frac12}},& {\sqrt{\frac12}} & -,+ & 95 & 63 \\
- |l| & -K & -1,& 0 & -,+ & 111 & 95 \\
-\hline
-\end{array}
-$$
- In each case the argument is used as the unit circle, \ie, non-zero
- of "dX" and "dY", and $|<|K\frac{"dX"}{"dY"}|,|K\frac{"dY"}{"dX"}|>|
- := "KK"*|<|"dX"|,|"dY"|>|$\dots
-
-\DOCMODE(
-\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{-}%\def\sd@X{+}
- \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{+}%\def\sd@Y{+}%
- \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{+}%\def\sd@X{+}
- \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{-}%\def\sd@Y{+}%
- \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@}
-\DOCMODE)
-
- Here is the procedure for the generic code.
-%
-\begin{itemize}
-
-\item[{??_[Dirii1]}]
- Make sign variables and slopes: $"sdX" := "sign"("dX")$, $"sdY" :=
- "sign"("dY")$, $K\frac{"dX"}{"dY"} :=
- "sdX"*"sdY"*\floor{\abs{"KK"*"dX"} / \abs{"dY"/"KK"}}$, and
- $K\frac{"dY"}{"dX"} := "sdX"*"sdY"*\floor{\abs{"KK"*"dY"} /
- \abs{"dX"/"KK"}}$, where the somewhat exotic computation method is
- used to ensure that the `native' floor function provided by \TeX\
- |\divide| can be used (it only acts predictably for positive
- numbers), that overflow is avoided even for large $"dX","dY"$, and
- that it is reasonable to use the convention of |\quotient@| that
- division by zero is like multiplying with one\dots Also takes care
- not to multiply too big dimensions with each other.
-
-\item[{??_[Dirii2]}]
- If ${-K} \le K\frac{"dX"}{"dY"} \le K$ then the direction is mostly
- up or down: if $"dY"\lt0$ [down, ??_[Dirii2a]]: $"Direction" := -
- K\frac{"dX"}{"dY"} + 1K$; else [up, ??_[Dirii2b]]: $"Direction" := -
- K\frac{"dX"}{"dY"} - 3K$.
-
-\item[{??_[Dirii3]}]
- If ${-K} \lt K\frac{"dY"}{"dX"} \lt K$ then direction is mostly left
- or right: if $"dX"\lt0$ [left, ??_[Dirii3a]]: $"Direction" :=
- K\frac{"dY"}{"dX"} - K$; else [right, ??_[Dirii3b]]: $"Direction" :=
- K\frac{"dY"}{"dX"} + 3K$.
-
-\item[{??_[Dirii4]}]
- Compute character codes for direction and semidirection fonts.
- [??_[Dirii4a]]: $"DirectionChar" := (8K+"Direction"+K/32)
- \hbox{~div~} (K/16) - 1$; while $"DirectionChar" \gt 127:
- "DirectionChar" -:= 128$. [??_[Dirii4b]]: $"SemiDirectionChar" :=
- (8K+"Direction"+K/64) \hbox{~div~} (K/32) - 1$; while
- $"SemiDirectionChar" \gt 127: "SemiDirectionChar" -:= 128$. In both
- cases the $8K$ are added to ensure that \TeX\ will round down.
- \HACK: The |16|, |\KK@|, and |64| in these lines are really $K/64$,
- $K/32$, and $K/16$\dots
-
-\item[{??_[Dirii5]}]
- Build "cosDirection" and "sinDirection" from appropriate characters
- in the |\xydashfont|. [??_[Dirii5]]: $"cosDirection" :=
- "wd"(|\xydashfont| "SemiDirectionChar")$. [??_[Dirii5b]] $C :=
- "SemiDirectionChar"-64$, if $C\lt0$: $C := C+128$, $"sinDirection" :=
- "wd"(|\xydashfont| C)$.
-
-\item[{??_[Dirii6]}]
- Register this "dX","dY" for next time.
-
-\end{itemize}
-
-\DOCMODE(
-\xydef@\setupDirection@ii{%
- \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi %?*[Dirii1]
- \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@.5\KK@ \divide\dimen@\KK@
- \advance\dimen@\ifdim\dimen@<\z@-\fi.5\KK@ \divide\dimen@\KK@
- \ifdim\dimen@=\z@\else %\count@=\dimen@ \divide\count@\tw@
- \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@.5\KK@ \divide\dimen@\KK@
- \advance\dimen@\ifdim\dimen@<\z@-\fi.5\KK@ \divide\dimen@\KK@
- \ifdim\dimen@=\z@\else %\count@=\dimen@ \divide\count@\tw@
- \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 %?*[Dirii2]
- \ifdim \d@Y<\z@ %?*[Dirii2a]
- \Direction=\K@ \advance\Direction-\K@dXdY
- \else %?*[Dirii2b]
- \Direction=\K@ \multiply\Direction-\thr@@ \advance\Direction-\K@dXdY
- \fi\fi\fi
- \ifnum-\K@<\K@dYdX \ifnum\K@dYdX<\K@ %?*[Dirii3]
- \ifdim \d@X<\z@ %?*[Dirii3a]
- \Direction=-\K@ \advance\Direction\K@dYdX
- \else %?*[Dirii3b]
- \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@ %?*[Dirii6]
- }
-
-\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 %?*[Dirii4]
- \count@=\count@@ \advance\count@\KK@ \divide\count@64 \advance\count@\m@ne %?*[Dirii4a]
- \loop@\ifnum127<\count@ \advance\count@-128 \repeat@
- \chardef\DirectionChar\count@
- \advance\count@@16 \divide\count@@\KK@ \advance\count@@\m@ne %?*[Dirii4b]
- \loop@\ifnum127<\count@@ \advance\count@@-128 \repeat@
- \chardef\SemiDirectionChar\count@@
- \setbox8=\hbox{\xydashfont\SemiDirectionChar\/}% %?*[Dirii5]
- \quotient@@\cosDirection{\sd@X\wd8}\xydashl@
- \setbox8=\hbox{\xydashfont\count@=\SemiDirectionChar\advance\count@-64 %?*[Dirii5b]
- \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@ }}
-\DOCMODE)
-
- Finally some special cases used by the <direction>s and directional
- library objects. All manipulate the Direction dependent parameters
- and then call |\resetupDirection@|: |\reverseDirection| reverses it;
- |\above|- and |\belowDirection@| are for |^| and |_|, and
- $|\vDirection@(|x|,|y|){|L|}|$ is for $|:(|x|,|y|)|$, \ie, computes
- a new direction as the vector
-$$
- |<| X - x*\cos\alpha*L - y*({-}\sin\alpha)*L |,|
- Y - x*\sin\alpha*L - y*\cos\alpha*L |>|
-$$
- where $\alpha$ is the previous direction angle.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
- The above all make use of the following; use them also when the
- direction state is known to be correct: |\resetDirection@| should be
- called when $p$ and/or $c$ are moved along the line $\vec{pc}$,
- |\resetupDirerection| when the entire direction state is changed in a
- consistent manner.
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
- Finally the initial direction: up!
-
-\DOCMODE(
-\uDirection@\xydashl@
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Edges}
-??=[algo.edge]
-
- An "Edge" is a token list describing the edge of an object. It must
- have the form |{|<expandable token> <unexpandable tokens>|}|.
- To find the edge of an object then first make it the current object
- and then do
-$$
- |\the\Edge@c|<code>
-$$
- where <code> determines what should be done:
-%
-\begin{itemize}
-
-\item[0]
- $c$ is changed to be equal to the point on the edge intersecting with
- the line segment from $p$ (for ??c![E] <corner>, also this was the
- v2.6 behaviour).
-
- \NOTE: This should not change any of $A$, $B$, or any component of
- the state except $X_c$ and $Y_c$!
-
-\item[1]
- Test whether the center of $p$, \ie, $|<|X_p|,|Y_p|>|$, is `inside'
- the $c$ object (or on the edge). Sets the test |\ifInside@|
- accordingly.
-
-\item[2]
- Set |\dimen@| to the distance from the center to the edge towards~$p$
- (as set with code~0).
-
- \NOTE: This is only positive in the direction towards $p$
- (thus negative-sized circles and rectangles make it negative).
-
-\item[3]
- $c$ is changed to be equal to the point on the edge furthest in the
- direction towards $p$ (for ??c![P] <corner>).
-
- \NOTE: This should not change any of $A$, $B$, or any component of
- the state except $X_c$ and $Y_c$!
-
-\item[4]
- Replace $c$ with rectangle with corners where the line from $p$
- intersects with the edge of $c$ (thus this is the inner rectangle
- with corners as the current direction dictates).
-
-\item[5]
- Replace $c$ with smallest rectangle that encloses the current object
- completely.
-
-\end{itemize}
-%
- (if this reminds the reader of a `dictionary' as used by
- object-oriented programming languages then they probably share this
- author's regret that \TeX\ is not object-oriented :-)
-
-\DOCMODE(
-\message{edges,}
-
-\xynew@{if}\ifInside@
-\DOCMODE)
-
-\paragraph*{Points:}
-
- The simplest shape is none at all -- a point.
-
-\DOCMODE(
-\xydef@\zeroEdge#1{%
- \ifcase#1\relax \or \Inside@false \or \dimen@=\z@
- \or \else \Edge@c={\rectangleEdge}\fi}
-\DOCMODE)
-
-\paragraph*{Circles and Ellipses:}
-
- Next we define round things, with several special cases for the
- individual variants described below: centered circular, centered
- elliptical, and general elliptical. The only `intelligent' choice
- is for the `Under' method where the object is forced to be a centered
- variant before applying either the circular or elliptical version.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\subparagraph*{True circles, centered:} Code~0 moves $|<|X_c|,|Y_c|>|$ to the
- point $|<|X_c - R_c*\cos\alpha|,| Y_c - R_c*\sin\alpha|>|$ where
- $\alpha$ is the current direction angle, code~1 tests whether the
- $p$ center is located between those two points., code~2 just returns
- the radius, code~3 is as code~0 and code~4 is the only nontrivial
- one, replacing with the inner symmetric rectangle with corner at the
- point of code~0.
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-\subparagraph*{Ellipsis, centered:} When $c$ is at the centre of an
- elliptical object, first rescale the axes to make the object
- circular. Rescale $dX$ and $dY$ appropriately, reset the direction
- and move to the edge as previously. Then scale back to
- the original shape, adjusting $X_c$ and $Y_c$ appropriately.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
- For elliptical objects the Outer-rectangle retains all the
- extents, so just change the edge-type.
-
-\DOCMODE(
-\xydef@\ellipsecentredOuter@{\Edge@c={\rectangleEdge}}
-\DOCMODE)
-
- For elliptical objects the Inner-rectangle needs to
- be calculated for each direction. This is done by
- first finding the edge, using |\ellipseEdge@| or
- |\ellipsecentredEdge@| when appropriate.
-
-\DOCMODE(
-\xydef@\ellipsecentredInner@{%
- \bgroup \X@p=\X@c \Y@p=\Y@c \ellipsecentredEdge@
-% \advance\X@c-\X@p \L@c=\ifdim\X@c<\z@-\fi\L@c
- \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\D@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}}
-\DOCMODE)
-
-\subparagraph*{Non-centered variants:} The code for the more general
- |\ellipseEdge@| uses a Newton iteration to solve a quadratic
- equation.
-
- First locate the actual centre of the ellipse and
- the lengths of the major axis $a$ and minor axis $b$.
- Let $(x,y)$ denote the displacement of the required
- edge point from the centre of the ellipse,
- so that ${x^2\over a^2}+{y^2\over b^2}=1$.
- Now let $(dx,dy)$ be the displacement from the centre
- to the reference point; then $x=dx+s \cos\theta$ and
- $y=dy+s\sin\theta$ where $s$ is the distance to $(x,y)$
- in the required direction $\theta$.
- We must find the value of $s$, presumed to satisfy $s\ge0$.
-
- If $a\lt b$ we search for a root of
-\begin{eqnarray*}
-f\left({s\over a}\right) &= \;\;
-\left(\tilde{dx}+{s\over a}\cos\theta\right)^2
-+\left(\tilde{dy}+{s\over a}{a\over b}\sin\theta\right)^2 & \cr
-f'\left({s\over a}\right) &= \;\;
-2\left(\tilde{dx}+{s\over a}\cos\theta\right)\cos\theta
-+ 2\left(\tilde{dy}+{s\over a}{a\over b}\sin\theta\right)
-{a\over b}\sin\theta
-\end{eqnarray*}
- where $\tilde{dx} = dx/a$ and $\tilde{dy} = dy/b$.
- By choosing a starting value $s_0=2a+2b$ the Newton-iteration
- converges rapidly to the correct root, provided $b\gt0$.
-\smallskip
-\noindent
- If $a\gt b$ then we solve a similar quadratic in ${s\over b}$.
-
- \TODO:
- The case of $a=0$ or $b=0$, so that the ellipse degenerates
- to a line segment, should be trapped earlier.
- Such an object would be more easily handled as a degenerate
- case of a rectangle.
-
- \TODO:
- In the case when the reference point lies outside the ellipse
- the Newton iteration is not guaranteed to converge.
- A simple test --- $s$ growing rather than decreasing in size ---
- detects possible converge problems and exits the iteration.
- The following message is issued \dots
- $$|Xy-pic warning: poor convergence.|$$
- Often, particularly when the reference point is on or near
- the edge of the ellipse,
- an acceptable approximation to the edge has been found anyway.
-
-\DOCMODE(
-\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@ }%
-\DOCMODE)
-
- The `Under' procedure is identical to the centered version.
-
-\DOCMODE(
-\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@X \R@p=\D@p
- \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}}
-\DOCMODE)
-
-\paragraph*{Rectangles:}\leavevmode
-
- Rectangles intersection is slightly more complicated and handled
- separately for the horizontal and vertical case.
-
-\DOCMODE(
-\xydef@\rectangleEdge#1{\ifcase#1\expandafter\rectangleEdge@
- \or \expandafter\rectangleUnder@ \or \expandafter\rectangleDist@
- \or \expandafter\rectangleProp@ %%%\or \expandafter\rectangleInner@ BUG!
- \else \relax \fi}
-\DOCMODE)
-
- \BUG: no `Inner' for rectangles!
-
-\DOCMODE(
-% \rectangleEdge@
-% Sets <X,Y> to the intersection of a line from <X-dX,Y-dY> to <X,Y>
-% and the rectangle from <X-L,Y-D> to <X+R,Y+U>:
-%
-% %1a dY<0, dX<0: X := X + min{R, U*|dX/dY|},
-% Y := Y + min{U, R*|dY/dX|};
-% b dY<0, dX=0: Y := Y + U;
-% c dY<0, dX>0: X := X - min{L, U*|dX/dY|},
-% Y := Y + min{U, L*|dY/dX|};
-%
-% %2a dY=0, dX<0: X := X + R;
-% b dY=0, dX=0: ;
-% c dY=0, dX>0: X := X - L;
-%
-% %3a dY>0, dX<0: X := X + min{R, D*|dX/dY|},
-% Y := Y - min{D, R*|dY/dX|};
-% b dY>0, dX=0: Y := Y - D;
-% c dY>0, dX>0: X := X - min{L, D*|dX/dY|},
-% Y := Y - min{D, L*|dY/dX|};
-%
-% %4 \resetupDirection@ to register that even though dX,dY changed all
-% Direction parameters are is still valid!
-%
-% NOTE: d=0 really means |d| < .05pt.
-%
-\xydef@\rectangleEdge@{%
- \ifdim\d@Y<-.05\p@ \rectangleEdge@i %1
- \else\ifdim\d@Y<.05\p@ \rectangleEdge@ii %2
- \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 %1b
- \else \settomin@\X@c-\L@c\U@c\d@X\d@Y \settomin@\Y@c+\U@c\L@c\d@Y\d@X %1c
- \fi\fi}
-
-\xydef@\rectangleEdge@ii{%
- \ifdim\d@X<-.05\p@ \advance\X@c\R@c %2a
- \else\ifdim\d@X<.05\p@ %2b
- \else \advance\X@c-\L@c %2c
- \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 %3b
- \else \settomin@\X@c-\L@c\D@c\d@X\d@Y \settomin@\Y@c-\D@c\L@c\d@Y\d@X %3c
- \fi\fi}
-
-\xydef@\settomin@#1#2#3#4#5#6{%
- % Perform d := #2 min{#3, #4*|#5/#6|}; #1 := #1+d ...
- \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@}
-\DOCMODE)
-
- Checking that $p$ is under is simpler: Normally it is not but
- if $c=p$ or ($-L_c \lt X_p-X_c \lt R_c$ and $-D_c \lt Y_p-Y_c \lt
- U_c$) then it is.
-
-\DOCMODE(
-\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 }
-\DOCMODE)
-
- Calculating the width is like computing the edge point, just simpler:
- (??_[rDist])~Set $A$ to the horizontal and $B$ to the vertical
- distance applicable; if either is zero (or close) use the other
- unmodified . (??_[rDisti])~If both nonzero use
- $\min(A/\cos\alpha,B/\sin\alpha)$ where $\alpha$ is the current angle.
-
-\DOCMODE(
-\xydef@\rectangleDist@{\let\next@=\rectangleDist@i %?*[rDist]
- \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{%?*[rDisti]
- \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}
-\DOCMODE)
-
- Setting $c$ to the `proportional edge point' is straight out of
- v2.6's |\setlabel@@| macro\dots
-
-\DOCMODE(
-% First rotate to opposite direction.
-
-% Then compute Leftf,Upf [\next@,\nextii@]:
-% 0,(D-2K)/2K for 2K < D <= 4K [right]
-% (2K-D)/2K,0 for 0 < D <= 2K [down]
-% 1,-D/2K for -2K < D <= 0 [left]
-% (D+4K)/2K,1 for -4K < D <= -2K [up]
-
-% Finally set <X,Y> to
-% < X - L + Leftf*(R+L) , Y + U - Upf*(D+U) >
-
-\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@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Connections}
-??=[algo.connection]
-
-\DOCMODE(
-\message{connections;}
-\DOCMODE)
-
- Connections describe how a particular <object> may be used to connect
- $p$ to $c$. The following parameters and methods are defined by any
- connection; they should be used in the indicated
- sequence:??w[connection methods]
-%
-\begin{description}
-
-\item[|\Invisible@@|, |\Hidden@@|, and |\Drop@@|:] as for <object>.
-
-\item[|\Creset@@|:]
- (Re)set the connection parameters to allow use of the following to
- move to a point on the connection (this is what the interpretation of
- <pos> |?| does first). All effects obtained by the following methods
- are undone: |\Creset@@| reestablishes the state to what it was just
- after the |\Connect@@| every time.
-
-\item[|\Cshavep@@| or |\Cshavec@@|:]
- Change $p$ or $c$ to a zero-sized object at the start or finish of
- the connection (the first |<| and |>| <place> components).
-
-\item[|\Calong@@{|<factor>|}|:]
- Move $c$ to point the <factor> along the connection and set the
- direction parameters as a tangent to it in this point (the
- |(|<factor>|)| <place> component).
-
-\item[|\Cslidep@@{|<dimen>|}| or |\Cslidec@@{|<dimen>|}|:]
- Move $p$ or $c$ the <dimen>sion further in the current direction.
- Can be used both before and after the |\Calong@@| method (these
- handle subsequent |<| and |>| as well as the |/|<slide>|/| <place>
- component).
-
-\item[|\Cintercept@@|:]
- Set $c$ to a zerosized object at the point where the connection
- crosses the straight line from $p$ to $c$ (the |!{|\dots|}| <place>
- component).
-
-\item[|\Cbreak@@| and |\Clast@@|:]
- These support typesetting of the connection in several `subsegments'
- as used by the arrow option. The idea is the following, using the
- internal "lastbreak" and "nextbreak" positions:
-\begin{enumerate}
-
-\item |\Connect@@| sets $"lastbreak":=p$ and $"nextbreak":=c$
-
-\item The commands |\Cslidec@@|, |\Cslidep@@|, and |\Cintercept@@|, set
- "nextbreak" logically to the position that is obtained by the
- manipulation.
-
-\item |\Cbreak@@| retypesets the connection except only the piece
- from "lastbreak" to the current $c$ object, which "must" be at on top
- of "nextbreak", is typeset. Afterwords it sets
- $"lastbreak":="nextbreak"$ and $"nextbreak":=c$ (where $c$ is the
- original $c$ of the connection).
-
-\item The command |\Clast@@| typesets from "lastbreak" and the remainder of
- the connection, and resets $"lastbreak":=p$ and $"nextbreak":=c$.
-
-\end{enumerate}
-\end{description}
-%
- Notice that it is not necessary for "nextbreak" to actually exist, in
- fact in the kernel it is just an alias for $c$ at the time
- |\Cbreak@@| is called.
-
- These are the defaults for basic \Xy-pictures that only has straight
- connections hence the macros all starting with |\no|\dots are rather
- simple -- in particular they just merge with zerosized objects at the
- locations cutoff locations (this was inherited from the broken
- |arrow| code~\smiley~).
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- Next the intercept method that just uses |\intersect@|.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- And finally the dummy `break' method which of course does nothing
- except the required shifting.
-
-\DOCMODE(
-\xydef@\noCbreak@@{\edef\lastbreak@@{\cfromthec@}}
-\xydef@\noClast@@{\Creset@@ \edef\lastbreak@@{\cfromthep@}}
-\DOCMODE)
-
- The kernel only defines one kind of connection which is used by
- default: `filling' many copies of the connect object on the straight
- line from $p$ to $c$.
-
- First the `dummy' connection type |no| used for <object>s where it
- doesn't really make sense to `connect', and used to provide defaults
- for easy operations:
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
- Next `straight' connections that use the following special parameters
- to customises how to repeat a `filler' object as many times as needed
- to draw the connection:
-%
-\begin{description}
-
-\item[|\lastobjectbox@|:] box to fill with; assumed to be `trimmed' to have
- only the size needed for the filler; size is $w*(h+d)$).
-
-\end{description}
-%
- The method is called as |\straight@{|<spread>|}| where <spread> is a
- macro to expand "after" the number of fillers $N$ (in |\count@@|) is
- known and with $A=w$ and $B=d+h$ but "before" any filling is done.
- May change $N$ as well as $"dX","dY",X,Y,w,d,h$ in order to affect
- the filling.
-
-\subparagraph*{Procedure:}
-%
- [??_[Strgt1]] setup direction parameters, clear the break state, and
- define the |\Creset@@| macro to reestablish this initial state;
- [??_[Strgt2]] build macro to discover if the edges of the objects
- overlap (it edges were removed); [??_[Strgt3]] move both $p,c$ to the
- edges of the objects\dots and define the |\Cshave*@@| macros
- accordingly; [??_[Strgt4]] choose either to ignore the connection if
- requested or there is overlap between the objects of choose either
- vbox or hbox version (see below)\dots; and [??_[Strgt5]] build
- |\Calong@@|, |\Cbreak@@|, and |\Clast@@| macros, and reset $pc$.
-
- \NOTE: Assumes that the direction is not tampered with between Creset
- is defined and used\dots
-
-\DOCMODE(
-\xydef@\Spread@@{}
-\xydef@\checkoverlap@@{}
-
-\xydef@\straight@#1{\setupDirection@ \def\Spread@@{#1}% %?*[Strgt1]
- \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}%
- \edef\lastbreak@@{\cfromthep@}%
- \edef\next@{{\sd@X}{\sd@Y}}\expandafter\straightcheckoverlap@\next@ %?*[Strgt2]
- \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@ %?*[Strgt3b]
- \straight@typeset %?*[Strgt4]
- \def\Cbreak@@{\straightCbreak@}\def\Clast@@{\straightClast@}%
-% \DN@{\solidSpread@}\ifx\next@\Spread@@
-% \checkXy@rules@\solidhrule@pre\solidvrule@pre\relax
-% \fi
- \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}%?*[Strgt5]
- \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@}
-\DOCMODE)
-
- The methods |\straightCbreak@| and |\straightClast@| implement the
- break method parametrised on the `typeset' primitive which is usually
- |\straight@typeset| which is a simplified version of |\straight@|
- that does not initialise. This relies on the connection being
- straight: the |Cbreak@@| method executes $p,c :=
- p|.|"lastbreak",c|.|"nextbreak"$ and |Clast@@| executes $p,c :=
- p|.|"lastbreak",c$, where in both cases the |[Inner]| modifier is
- applied just before the merging to make sure the edge is respected by
- the merged object.
-
-\DOCMODE(
-\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@}}
-\DOCMODE)
-
- Now for the typesetting -- to summarise: these are parametrised on
- direction parameters and use $X,Y$: endpoint of connection
- (`Direction end'). $"dX","dY"$: connection distance (`Direction
- vector'). |\Leftness@| of <object>. |\lastobjectbox@| to fill with;
- assumed to be `trimmed'. |\Spread@@| to expand to modify the default
- spreading used. |\Drop@@| to expand to actually typeset the finished
- connection when it is in box0! \NOTE: Must make box0 void to avoid
- `box leaks'.
-
- Two variants exist: one for mostly horisontal and one for mostly
- vertical filling. We detail the `mostly horisontal' one:
-
- [??_[StrH0]] start box;
-%
- [??_[StrH1]] compute initial adjustment ($X$ right and $Y$ up) and
- $A := w$, $B := h+d$, $N = \floor(\abs{"dX"} / A)$,
- and run user supplied Spread;
-%
- [??_[StrH2]] adjust first filler position horizontally:
- if $dX\gt0$ then $X := X-w$;
-%
- [??_[StrH4]] adjust first filler vertically: $Y := Y -
- "sdX"*L*("dY"/"dX")*w$ where $L = \textup{if} dX>0 \textup{then}
- (1-Leftness) \textup{else} Leftness$;
-%
- [??_[StrH3]] recompute the move dimensions ($A$ right and $B$ up):
- $A := -"sdX"(\abs{dX} - w) / (N-1)$,
- $B := "sdY"\abs{"sdX"(w)*"dY"/"dX" - dY} / (N-1)$,
- and set the filler box to have $w := A$;
-%
- [??_[StrH5]] output first filler adjusted $X,Y$ and the following $N-1$
- each $A$ further right and raised $B$ more than the previous;
-%
- and finally end object with usual bravour!
-
-\DOCMODE(
-\xydef@\straighth@{\setbox\z@=\hbox{%
- \setbox8=\copy\lastobjectbox@
- \A@=\wd8\relax \B@=\dp8\relax \advance\B@\ht8\relax %?*[StrH1]
- \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 %?*[StrH2]
- \dimen@=-\sd@X\wd8\relax %?*[StrH4]
- \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@ %?*[StrH3]
- \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@ %?*[StrH5]
- \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@@}}
-\DOCMODE)
-
- The mosly vertical is analogous. \BUG: |\dimen@| holds the unadjusted
- $h+d$ throughout -- somehow it works anyway!
-
-\DOCMODE(
-\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@@}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-
-\section*{End \& log}
-
- \Xy-pic ends with a message saying so.
-
-\DOCMODE(
-\message{ Xy-pic loaded}\xyuncatcodes \endinput
-\DOCMODE)
-
- \Xy-pic is maintained using the RCS ``Revision Control System'' by
- Walther F.~Tichy. The following is the revision history since the
- first release to Usenet.
-
-\DOCMODE(
-% $Log: xy.doc,v $
-% Revision 3.7 1999/02/16 15:12:50 krisrose
-% Interim release (Y&Y fonts now free).
-%
-% Revision 3.6 1998/03/06 01:28:05 krisrose
-% Releasing (with Y&Y fonts).
-%
-% Revision 3.5 1997/05/28 13:05:01 krisrose
-% Fixed missing breaks bug.
-%
-% Revision 3.4 1997/05/18 01:14:25 krisrose
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/19 03:31:56 krisrose
-% Maintenance release
-%
-% Revision 3.2 1995/09/19 18:22:27 kris
-% Bug fix 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.14 1995/07/05 22:20:09 kris
-% Buglets...
-%
-% Revision 2.13 1995/07/04 15:11:17 kris
-% Ready to release v3?
-%
-% Revision 2.12 1994/10/25 11:55:12 kris
-% Interim release just before v3 [works with AMS-LaTeX 1.2]...
-%
-% Revision 2.11 1994/07/05 10:37:32 kris
-% Third 3beta release [bug fixes].
-% Experimental graph feature included (for ECCT-94 presentation).
-%
-% Revision 2.10 1994/06/15 12:55:07 kris
-% Second 3beta release: bug fixes.
-%
-% Revision 2.9 1994/06/09 14:59:19 kris
-% Release 3beta.
-%
-% Revision 2.8 1994/04/11 09:31:09 kris
-% Second (bug fix) 3alpha release [corrected].
-%
-% Revision 2.7 1994/03/08 02:06:01 kris
-% Release 3alpha.
-%
-% Revision 2.6.9.1 1994/03/07 04:22:46 kris
-% Last internal 3alpha and pre-2.7 release.
-%
-% MAJOR REWRITE and REORGANISATION:
-% File xypic.doc split into separate files: xy.doc for `kernel' and other
-% files with the `extensions' and `features'.
-% Documented in special DOCMODE LaTeX-based format supported by xydoc.sty.
-%
-% Revision 2.6.1.1 1992/07/01 07:08:24 kris
-% Send to EuroTeX '92...
-%
-% Revision 2.6 1992/06/24 01:23:34 kris
-% Added hooks using font xyqc10.
-% Added new POSitions: * and !.
-% Added triple lines \Ssolid and \Ddashed.
-%
-% Revision 2.5 1992/02/24 03:30:54 kris
-% Fixed bugs in \Direction calculation logic...
-% Added (FACTOR) to \rotate to allow arbitrary rotation.
-% ` intermediate points now accept an optional /RADIUS argument.
-% Added \Tip with wide tip.
-% [See ChangeLog for further details].
-%
-% Revision 2.4 1992/01/22 02:15:10 kris
-% Fixed bugs [with thanks]:
-% No spurious arrow heads with LaTeX: \pit now undefined [Werner Struckmann]
-% \Solid works: sets \Density [Dave Bowen]
-% Short diagonal lines work...major rewrite of \connectv@ [Eric Domenjoud]
-%
-% Revision 2.3 1992/01/13 23:28:12 kris
-% Swapped definitions of \ddtoX and \uutoX [found by Nico Verwer].
-% Diagonal lines were wrong [Eric Domenjoud].
-%
-% Revision 2.2 1992/01/09 04:05:40 kris
-% Still problems with rules in frames and horizontal/vertical \solids. Grrr.
-%
-% Revision 2.1 1992/01/02 14:54:07 kris
-% Release version.
-%
-% Revision 1.40 1991/12/17 04:53:23 kris
-% Version distributed as `final draft' on Usenet.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-prefix:"\t"
-% fill-column:77
-% paragraph-separate:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% paragraph-start:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% TeX-parse-self:nil
-% LaTeX-indent-level:1
-% TeX-brace-indent-level:1
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xy.sty b/Master/texmf-dist/source/generic/xypic/xy.sty
deleted file mode 100644
index 32867e52f57..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xy.sty
+++ /dev/null
@@ -1,103 +0,0 @@
-%% $Id: xy.sty,v 3.3 1996/12/19 03:31:56 krisrose Exp $
-%%
-%% ``Xy-pic as LaTeX 2.09 style option and LaTeX 2e package''.
-%% Copyright (c) 1993-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-
-% 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}
-
-% 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. `LaTeX Companion' p.317):
-\DeclareOption{cmactex}{\xyoption{cmactex}}
-\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}}
-
-% 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
-
-% ... process the options, and that is all.
-\ProcessOptions
-
-\endinput
-
-% $Log: xy.sty,v $
-% 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/Master/texmf-dist/source/generic/xypic/xy16textures.doc b/Master/texmf-dist/source/generic/xypic/xy16textures.doc
deleted file mode 100644
index c4a7545746f..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xy16textures.doc
+++ /dev/null
@@ -1,294 +0,0 @@
-%% $Id: xy16textures.doc,v 3.3 1996/12/18 14:21:23 ross Exp $
-%%
-%% Xy-pic ``Textures v1.6'' driver interface option.
-%% Copyright (c) 1995-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{16textures}{Textures v1.6 driver}{\stripRCS$Revision: 3.3 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This driver provides support for versions 1.5b and 1.6 of Blue Sky Research's
-\Textures\ application for Macintosh\footnote{Macintosh is a trademark of
-Apple Computer Inc.}. It incorporates support for \PS\ colour and the
-\Xy-ps \PS\ back-end. This will {\em not} work with versions 1.7 and later;
-these require the <driver> option |\xyoption{textures}|.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\DOCMODE(
-\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
-}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Supported |\special| effects are...
-%
-\begin{itemize}
-
-\item colour, using \PS\
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Textures v1.6 cannot manage colours, except within imported graphics.
-It can put colours into the \PS\ output.
-
-\DOCMODE(
-\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@
- }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item crayon colours.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The 68 colours are those that |dvips| recognizes by name,
-thanks to Tomas Rokicki.
-
-\DOCMODE(
-\xydef@\oldtexturesCrayon@@{\oldtexturesColor@@\oldtexturesCrayon@}
-\xydef@\oldtexturesCrayon@{\installCrayolaColors@}%
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item \PS\ back-end.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-We must return the binding of |\shipout| to its initial value.
-
-\medskip
-
-Early versions (1.5--1.6) of \Textures\ have two kinds of |\special|,
-for inserting \PS\ code into the dvi-file and two more for reading
-such code from a file:
-%
-\begin{itemize}
-\item |\special{rawpostscript #1}| puts code directly into the \PS\ file.
-\item |\special{postscript #1}| wraps the code within |sps|...|eps|,
-which involves graphics state changes within a |gsave/grestore| pair.
-\end{itemize}
-Each of these has a corresponding version for reading the \PS\ commands
-from a file.
-
-\DOCMODE(
-\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
-% \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
- \oldtexturesCurrpt@ \@PSshipout }
-
-{\catcode`\^^M=\active %
- \gdef\next{\catcode`\^^M=\active \let^^M=\par \obeyspaces}}
-\xylet@\obeyoldTextureslines@=\next
-\DOCMODE)
-
-The |currentpoint| is defined for the ``raw'' specials.
-For Textures this is the same as |\xyPScurrpt@@@|, in |xyps-ps.doc|.
-
-\DOCMODE(
-\xydef@\oldtexturesCurrpt@{\let\xyPScurrpt@@=\oldtexturesCurrpt@@}%
-\xydef@\oldtexturesCurrpt@@{\PSspecial@@{xyi}\PSraw@@{userdict begin xyx end}}
-\DOCMODE)
-
-The \PS\ operator called |xyx| is defined in |xyps-ps| for storing the
-location placed on the stack by |xyi|.
-
-\medskip
-
-\Textures~v1.6 requires the \PS\ dictionary to be shipped-out with
-every page. To achieve this efficiently we rebind |\shipout|,
-as described in |xyps-ps.doc|. Next set the flag |\UsePSdict@@true|
-after having rebound |\includePSmessage@| to gobble the attempt to load
-the dictionary directly into the dvi-file.
-
-This installs the \PS\ backend.
-
-\DOCMODE(
-\xydef@\oldtexturesPS@{\oldtexturesPStypes@
- \let\oldtexturesPS@@=\relax
- \let\UnloadPS@@=\oldtexturesPSunload@
- \let\installxyps@@=\@PSshipout \installxyps@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item rotated/scaled diagrams and text, using \PS.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item variable line-widths and poly-lines, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item extra frames and fills, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item patterns and tiles, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{itemize}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xy16textures.doc,v $
-% Revision 3.3 1996/12/18 14:21:23 ross
-% Ross's version
-%
-% Revision 3.3.1.1 1996/12/18 08:45:28 ross
-% *** empty log message ***
-%
-% Revision 3.2 1995/09/19 18:20:20 ross
-% Bug fix release.
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% NEW for version 3.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\endinput
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xy17oztex.doc b/Master/texmf-dist/source/generic/xypic/xy17oztex.doc
deleted file mode 100644
index 41f1f80a9c3..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xy17oztex.doc
+++ /dev/null
@@ -1,301 +0,0 @@
-%% $Id: xy17oztex.doc,v 3.3 1996/12/18 14:21:23 ross Exp $
-%%
-%% Xy-pic ``OzTeX v1.7'' driver interface option.
-%% Copyright (c) 1995-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{17oztex}{OzTeX v1.7 driver}{\stripRCS$Revision: 3.3 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This option provides the necessary interface to support the \PS\ back-end and
-other \PS\ effects when using the DVI driver of version 1.7 of \OzTeX\ by
-Andrew Trevorrow,\footnote{\OzTeX\ is a shareware implementation of \TeX\ for
-Macintosh available from many bulletin boards and ftp sites; v1.5 and earlier
-versions were freeware. Email contact: <akt@kagi.com>.} "Later versions
-of \OzTeX\ should instead use the driver option |\xyoption{oztex}|."
-Upgrading to version 1.9+ of\OzTeX\ is recommended.
-
-Does not support rotations, scaling and coloured text within diagrams and the
-\PS\ dictionary must be available in a file called |global.ps|.
-
-\NOTE: To use \Xy-pic effectively with \OzTeX\ requires changing several
-memory parameters. In particular a `Big-\TeX' is needed, along with an
-increase in the |pool_size| parameter. Explicit instructions are contained in
-the file |INSTALL.|\-|OzTeX| of the \Xy-pic distribution.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\DOCMODE(
-\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
-}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Supported |\special| effects are...
-%
-\begin{itemize}
-
-\item colour, using \PS, but not of font-characters.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xydef@\oldoztexColor@@{\oldOzTeXColours@}
-
-\xydef@\oldOzTeXColours@{\oldOzTeXPStypes@
- \let\xylocalColor@=\xyNoColor@@ \def\xycolor@{\xycolor@@}%
- \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%\XYpredict@
- \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@
- }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item crayon colours, similarly restricted.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The 68 colours are those that |dvips| recognizes by name,
-thanks to Tomas Rokicki.
-
-\DOCMODE(
-\xydef@\oldOzTeXCrayon@@{\installCrayolaColors@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item \PS\ back-end.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xydef@\oldoztexPS@@{\oldoztexPS@}
-
-\xydef@\oldoztexPSunload@{\UnloadPS@
- \def\xyPSdictname{}\UsePSdict@@false
- \let\installxyps@@=\relax
- \let\UnloadPS@@=\UnloadPS@
- \xyPSshapes@true
- \let\oldoztexPS@@=\oldoztexPS@ }
-\DOCMODE)
-
-\DOCMODE(
-\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
-% \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
- \oldOzTeXCurrpt@ }
-
-{\catcode`\^^M=\active %
- \gdef\next{\catcode`\^^M=\active \let^^M=\space \obeyspaces}}
-\xylet@\obeyoldOzTeXlines@=\next
-\DOCMODE)
-
-The \PS\ operators |@boxy| and |@eoxy| are defined in |xyps-ps| for bypassing
-the mechanism used in \OzTeX\ to isolate code passed in |\special| commands.
-Although it is possible (albeit difficult) to devise \PS\ to deduce the
-current location for use with the ``raw'' specials, this information cannot
-be used to do rotations and scaling as with other <driver>s.
-Hence the value of |\xyPScurrpt@@| is taken to be empty.
-
-\DOCMODE(
-\xydef@\oldOzTeXCurrpt@{\let\xyPScurrpt@@=\OzTeXCurrpt@@}%
-\xydef@\oldOzTeXCurrpt@@{}
-\DOCMODE)
-
-\medskip
-
-This avoids dumping the dictionary into the dvi-file, making sure
-that instead it goes into a file, specified by |\xyPSdictname|,
-which defaults to |global.ps|.
-
-\DOCMODE(
-\xydef@\oldoztexPS@@{\oldOzTeXPStypes@
- \let\installxyps@@=\old@OzTeX@PS@
- \installxyps@ }
-
-% The parameter |#1| in this next macro is to gobble the |\dumpPSdict@|
-% which would otherwise dump the dictionary into the dvi-file. However
-% if |\xyPSdictname| is defined then this dump must occur into a file.
-%
-%\xydef@\old@OzTeX@PS@#1{%
-% \let\includePSmessage@=\xyoldOzTeXheader
-% \ifx\undefined\xyPSdictname\DN@{}%
-% \else\DN@{#1}\fi\next@ \UsePSdict@@true}
-
-\xydef@\old@OzTeX@PS@{\UsePSdict@@true
- \let\includePSmessage@=\xyoldOzTeXheader
- \ifx\undefined\xyPSdictname\def\xyPSdictname{global.ps}\fi}
-
-\xydef@\xyoldOzTeXheader#1#2#3{\UsePSdict@@true}
-\DOCMODE)
-
-The parameters |#1#2#3| of |\xyOzTeXheader| gobble tokens
-that are unnecessary with \OzTeX.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item variable line-widths and poly-lines, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item extra frames and fills, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item patterns and tiles, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item rotated/scaled diagrams and text, recognised but not supported.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-In fact \OzTeX\ cannot support rotations and scaling.
-Instead we go through all the motions of providing \PS\ support,
-then set a flag that causes a limited number of warning messages to be
-generated as requests are made for these effects.
-
-\DOCMODE(
-\xydef@\oldoztexRotate@@{\oldOzTeXRotate@}
-
-\xydef@\oldOzTeXRotate@{\oldOzTeXPStypes@
- \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%\XYpredict@
- \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}%
- \xyRotScale@@ \installPSrotscale@ \xyPSshapes@false }%
- \else\DN@{\xydriverfail@{rotations are}\UnloadRotate@\relax}\fi
- \next@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-\end{itemize}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xy17oztex.doc,v $
-% Revision 3.3 1996/12/18 14:21:23 ross
-% Ross's version
-%
-% Revision 3.3.1.1 1996/12/18 08:47:45 ross
-% *** empty log message ***
-%
-% Revision 3.2 1995/09/19 18:20:20 ross
-% Bug fix release.
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% NEW for version 3.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xy2cell.doc b/Master/texmf-dist/source/generic/xypic/xy2cell.doc
deleted file mode 100644
index 18bab67ac1f..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xy2cell.doc
+++ /dev/null
@@ -1,1839 +0,0 @@
-%% $Id: xy2cell.doc,v 3.3 1996/12/18 14:21:23 ross Exp $
-%%
-%% Xy-pic ``2-cell'' feature.
-%% Copyright (c) 1993-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this macro package; if not, write to the Free Software Foundation,
-%% Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{2cell}{Two-cell feature}{\stripRCS$Revision: 3.3 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\noindent
- This feature is designed to facilitate the typesetting of curved arrows,
- either singly or in pairs, together with labels on each part and between.
- The intended mathematical usage is for typesetting categorical ``2-cell''
- morphisms and ``pasting diagrams'', for which special features are provided.
- These features also allow attractive non-mathematical effects.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The 2-cell feature makes use of facilities from the `curve' extension
- which is therefore automatically loaded.
-
-\DOCMODE(
-\xyrequire{curve}\xycatcodes
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Typesetting 2-cells in Diagrams}
-
-\noindent
-Categorical
-``2-cell'' morphisms are used in the study of tensor categories and elsewhere.
-The morphisms are displayed as a pair of curved arrows, symmetrically
-placed, together with an orientation indicated by a short broad arrow,
-or {\it Arrow}. Labels may be placed on all three components.
-
-\DOCMODE(
-\message{two-cells,}
-\DOCMODE)
-
-\UseAllTwocells
-
-\BUG: This document still uses version~2-style commmands, as described in
-appendix~??g[:v2].
-
-\xyrequire{v2}\xycatcodes
-
-\xymatrixcolsep{5pc}%
-\xymatrixrowsep{2pc}%
-
-\begin{code}
-\diagram
-A\rtwocell^f_g &B\\
-\enddiagram
-\end{code}
-$$ \docode $$
-\displaycode
-
-\begin{code}
-\diagram
-A\ruppertwocell^f{\alpha}
- \rlowertwocell_h{\beta}
- \rto_(.35)g & B\\
-\enddiagram
-\end{code}
-$$ \docode $$
-\displaycode
-
-These categorical diagrams frequently
-have a matrix-like layout, as with commutative diagrams.
-To facilitate this there are control sequences of the form:
-|\rtwocell| , |\ultwocell| , |\xtwocell| , \dots\
-analogous to the names defined in |xyv2| for use
-in diagrams produced using |xymatrix|.
-As this involves the definition of 21 new control sequences, many of which
-may never be used, these are not defined immediately upon loading |xy2cell|.
-Instead the user must first specify |\UseTwocells|.
-
-As in the second example above, just the upper or lower curved
-arrow may be set using control sequences of the form
-|\..uppertwocell| and |\..lowertwocell|.
-These together with the |\..compositemap| family, in which
-two abutting arrows are set with an empty object at the join,
-allow for the construction of complicated ``pasting diagrams''
-(see figure ??[f.pasting] for an example).
-
-The following initialise the families of control sequences
-for use in matrix diagrams.
-
-\begin{defs}
- |\UseTwocells| &\quad two curves \cr
- |\UseHalfTwocells| &\quad one curve \cr
- |\UseCompositeMaps| &\quad 2 arrows, end-to-end \cr
- |\UseAllTwocells| &\quad (all the above) \cr
-\end{defs}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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 }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The families of connections are defined using the utility macro\dots
-%
- |\definesupermorphism|
-%
- which defines control sequences for morphisms between
- neighbouring cells, and next-to-neighbouring cells.
-
- More distant cells use |\xtwocell|, |\xcompositemap|, etc.
- with <hop>s e.g.
- |\xtwocell[1,3]| and |\xtwocell[llddd]|.
-
-\DOCMODE(
-\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]{}}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\bigskip
-
-Alternatively 2-cells can be set directly in \Xy-pictures without using the
-matrix feature. In this case the above commands are not needed. This is
-described in~\S??[standard].
-
-Furthermore a new directional |\dir{=>}| can be used to
-place an ``Arrow'' anywhere in a picture,
-after the direction has been established appropriately.
-It is used with all of the 2-cell types.
-
-\DOCMODE(
-\newdir{=>}{!/5pt/\dir{=}!/2.5pt/\dir{=}*!/-5pt/\dir2{>}}
-
-\xydef@\arrowobject#1{\def\Arrowobject@{#1}}
-\xydef@\Arrowobject@{\dir{=>}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%{\obeylines\long\outer\gdef\Pastingexample{%
-\begin{code}
-\xymatrixrowsep{1.5pc}
-\xymatrixcolsep{3pc}
-\diagram
- & & \relax\rtwocell<0>^{f_3^{}\;\;}{\omit} & \relax\ddtwocell<0>{\omit}
- \drtwocell<0>^{\;\;f_4^{}}{<3>}
- \ddrrtwocell<\omit>{<8>}\\
- & & & &\relax\drtwocell<0>^{\;\;f_5^{}}{\omit}\\
-A \uurrcompositemap<2>_{f_1^{}}^{f_2^{}}{<.5>}
- \uurrlowertwocell<-6>{\omit}\relax
- \drtwocell<0>_{g_1^{}\;}{\omit}
- & & & \relax\urtwocell<0>{\omit}
- & &\relax\rtwocell<0>^{f_6^{}\;}{\omit}
- & \relax\rlowertwocell<-3>_{g_4^{}}{<-1>}
- \rcompositemap<6>_{f_7^{}}^{f_8^{}}{\omit} & B \\
- & \relax\urrtwocell<0>{\omit}
- \xcompositemap[-1,4]{}<-4.5>_{g_2^{}}^{g_3^{}}{\omit}\\
-\enddiagram
-\end{code}
-
-\begin{figure*}[bt]
-$$ \docode $$
-\caption{Pasting diagram.}
-??=[f.pasting]
-\end{figure*}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Default positions:}
-
- These set up default values for the parameters which
- specify the position of each component
- as well as the flags to indicate what type
- of 2-cell is to be typeset.
-
-\begin{defs1}
-\begin{tabular}{c l}
- |\toks6| &position of control point,
- normal to line $\overline{pc}$ at midpoint\\
- |\toks5| &position of central Arrow\\
- |\toks7| &position of |^| label\\
- |\toks8| &position of |_| label\\
- |\toks3| &flag for number of pieces... \\
- \quad |f| & \underline{f}ull: i.e. both curved arrows\\
- \quad |o| & \underline{o}ne: |\uppertwocell| or |\lowertwocell|\\
- \quad |t| & \underline{t}wo maps: |\compositemaps|\\
-\end{tabular}
-\end{defs1}
-
-\noindent
-|@| means to calculate from the value in |\toks6|, see |\tw@cell@@@|.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
- This collects together all the relevant data, and resolves the
- default positions.
-
-\DOCMODE(
-\xydef@\tw@cell@@@{%
- \expandafter\ifx\the\toks6\omit\relax\toks6={}\else
-%
-% default position of label on upper arrow,
-% relative to where it meets the perpendicular bisector
-%
- \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
-%
-% default position of label on lower arrow,
-% relative to where it meets the perpendicular bisector
-%
- \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
-%
-% default position of the Arrow, relative to midpoint
-%
- \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
-%
-% possible modifications for module maps
-%
- \twocellmod@
-%
-% pass all the parameters to |\twocell@@@@|
-%
- \expandafter\if\the\toks3t\relax
-%
-% composed maps: ^ : first map _ : second map
-%
- \edef\tmp@{.[\noexpand\twocell@@@@{\the\toks6}{\the\toks5}%
- {\the\toks7}{\the\toks8}{\the\toks3}%
- {\the\toks2}{\the\toks1}{\the\toks@}{\the\toks4}!!!].\afterMORPHISM}%
- \else
-%
-% curved arrow(s)
-%
- \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@ }%
-\DOCMODE)
-
- See below for the possible forms of |\twocellPATH|.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Labels are placed labels on the upper and lower arrows,
-more correctly `anti-clockwise' and `clockwise', using |^| and |_|.
-These are entirely optional with the following token, or grouping, giving
-the contents of the label. When used with
-|\..compositemap| the |^| and |_| specify
-labels for the first and second arrows, respectively.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-Normally the label is balanced text, set
-in \TeX's math mode, with |\twocellstyle| setting the style.
-The default definition is given by \dots
-
-|\def\twocellstyle{\scriptstyle}|
-
-\noindent
-This can be altered using |\def| in versions of \TeX\
-or |\redefine| in \LaTeX.
-However labels are not restricted to being simply text boxes.
-Any effect obtainable using the \Xy-pic kernel language can be set
-within an |\xybox| and used as a label. Alternatively if the first
-character in the label is |*| then the label is set as an
-\Xy-pic <object>, as if with |\drop<object>| or |*<object>| in
-the kernel language. The current direction is tangential to
-the curved arrows. Extra braces are needed to get a |*| as the label,
-as in |^{{{*}}}| or |_{{}*}|.
-
-The position of a label normal to the tangential direction
-can also be altered by {\em nudging} (see below).
-Although it is possible to specify multiple labels,
-only the last usage of each of |^| and |_| is actually set,
-previous specifications being ignored.
-
-Similarly a label for the central Arrow must be given,
-after the other labels, by enclosing it within braces |{...}|.
-An empty group |{}| gives an empty label; this is necessary
-to avoid misinterpretation of subsequent tokens. As above if the
-first character is |*| then the label is set as an \XY-pic <object>,
-the current direction being along the Arrow.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Parsing:}
-
- Open a new group so the following registers can be used locally...
- |\toks@=\toks0|, |\toks1|, ..., |\toks8|
- the final parameter set is stored briefly in |\tmp@| before being used.
-
- OPTIONS:
-\begin{defs1}
-\begin{tabular}{c c l}
- && spaces are ignored \\
- |<| & |<num>| &determines position of curves control point\\
- & |<0>| &uses a single solid line,\\
- & |<\omit>| &causes only the central Arrow (with label) to be set\\
-\noalign{\smallskip}
- |\omit| &&omits the curved arrows, but allows their labels\\
- |^| &&place ``above'' label (more correctly ``anti-clockwise'')\\
- |_| &&place ``below'' label (more correctly ``clockwise'')\\
- |~'| &&change the arrowhead \\
- |~`| &&place/change the arrowtail\\
-\end{tabular}
-\end{defs1}
-
- Label data e.g. |^{#1}| |_{#1}|
- is stored temporarily in |\toks@| then passed via |\tw@@cell@@|
- to |\tw@cell@@| for further parsing, as: |\the\toks@ @|
-
- |~'| and |~`| change the values of |\twocellhead@| and |\twocelltail@|
- Normally |\twocelltail@| is |{}|, so |~`| also changes a flag to
- indicate that |\twocelltail@| is indeed required.
-
- When the next token is a grouping |{...}|
- then it gives the label for the central Arrow.
- No other label specifications may follow.
-
-
- Default head and tail ornaments...
-
-\DOCMODE(
-\xydef@\twocellhead#1{\def\twocellhead@{#1}}
-\xydef@\twocelltail#1{\def\twocelltail@{#1}}
-\xydef@\twocellhead@{\dir{>}}
-\xydef@\twocelltail@{}
-\DOCMODE)
-
- clear |\toks..| registers for the new connection labels.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
- With no arrows, still allow labels:
- default positions are at $0$, $+X$, $-X$, with $X=${\em default value}.
- These values are altered by ``nudging''.
-
-\DOCMODE(
-\xydef@\omitarrows@{\toks5={0}\toks6={}\toks7={0}\toks8={0}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{figure*}[tp]
-\begin{syntax}
-%
-<twocell>
- &\iss & <2-cell><switches><Arrow>
- & typeset <2-cell> with the <switches> and <Arrow>
-\cr
-\noalign{\smallskip}
-%
-<2-cell> &\iss & |\..twocell|
- & typeset two curved arrows
-\cr
- &\orr & |\..uppertwocell|
- & typeset upper curved arrow only
-\cr
- &\orr & |\..lowertwocell|
- & typeset lower curved arrow only
-\cr
- &\orr & |\..compositemap|
- & use consecutive straight arrows
-\cr
-\noalign{\smallskip}
-%
-<Arrow> &\iss & |{|<tok><text>|}|
- & specifies orientation and label
-\cr
- &\orr & |{|<nudge><text>|}|
- & adjust position, use default orientation
-\cr
- &\orr & |{|<text>|}|
- & use default position and orientation
-\cr
- &\orr & |{|<tok>*<object>|}|
- & use <object> as the label
-\cr
- &\orr & |{|<nudge>*<object>|}| \orr |{|*<object>|}|
-\cr
-\noalign{\smallskip}
-%
-<tok> &\iss & |^| \orr |_| \orr |=|
- & oriented anti-/clockwise/equality
-\cr
- &\orr & |\omit|
- & no Arrow, default is clockwise
-\cr
- &\orr & |`| \orr |'| \orr |"| \orr |!|
- & no Arrow; tips on two curved arrows as:\\
- anti-/clockwise/double-headed/none
-\cr
-\noalign{\smallskip}
-%
-<switches> &\iss & <switch><switches>
- & list of optional modifications
-\cr
-\noalign{\smallskip}
-%
-<switch> &\iss & <empty>
- & use defaults
-\cr
-%
- &\orr & |^| <label>
- & place <label> on the upper arrow
-\cr
- &\orr & |_| <label>
- & place <label> on the lower arrow
-\cr
- &\orr & <nudge>
- & set the curvature, based on <nudge> value
-\cr
- &\orr & |\omit|
- & do not set the curved arrows
-\cr
- &\orr & \ |!|
- & place |\modmapobject| midway along arrows
-\cr
- &\orr & |~| <what> |{| <object> |}|
- & use <object> in place specified by <what>
-\cr
-\noalign{\smallskip}
-%
-<what> &\iss & <empty>
- & set curves using the specified <object>
-\cr
- &\orr & |^| \orr |_|
- & use <object> with upper/lower curve
-\cr
- &\orr & |`| \orr |'|
- & use <object> for arrow head/tail
-\cr
-%
-\noalign{\medskip}
-%
-<label> &\iss & <text>\ \orr\ <nudge> <text>
- & set <text>, displaced by <nudge>
-\cr
- &\orr & *<object>\ \orr\ <nudge>*<object>
- & set <object>, displaced by <nudge>
-\cr
-\noalign{\smallskip}
-%
-<nudge> &\iss & |<|<number>|>| & use <number> in an appropriate way,
- \eg, to position object or label along a fixed axis
-\cr
- &\orr & |<\omit>| & do not typeset the object/label
-\cr
-%
-\end{syntax}
-\caption{\protect<twocell\protect>s}
-??=[f.twocell]
-\end{figure*}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Standard Options}??=[Arrow]
-The orientation of the central Arrow may be reversed,
-turned into an equality, or omitted altogether.
-In each case a label may still be specified, so in effect the
-Arrow may be replaced by anything at all.
-
-These effects are specified by the first token in the central label,
-which thus has the form: |{|<tok><label>|}|
-where <tok> may be one of \dots
-
-\begin{defs1}
-\begin{tabular}{ c l }
- |_| & Arrow points clockwise \cr
- |^| & Arrow points anti-clockwise \cr
- |=| & no tip, denotes equality \cr
-|\omit|& no Arrow at all. \cr
-\end{tabular}
-\end{defs1}
-
-\noindent
-When none of these occurs then the default of |_| is assumed.
-If the label itself starts with one of these characters then
-specify |_| explicitly, or enclose the label within a group |{...}|.
-See {\em Extra Options~1}, for more values of <tok>.
-Also note that |*| has a special role when used as the first character;
-however it is considered to be part of the <label>, see above.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- OPTIONS for the central Arrow:
-
-\begin{defs}{c l}
- & ignore spaces\cr
- |^| & points anti-clockwise\cr
- |_| & points clockwise (default)\cr
- |=| & no |\Tip|, equality\cr
- |\omit|& no Arrow at all, just squine(s) or composed arrows\cr
- |'| & no Arrow, opposite squine reversed\cr
- |`| & no Arrow, forward squine reversed\cr
- |"| & no Arrow, tips on both ends\cr
- |!| & no Arrow, no tips on squines\cr
-\end{defs}
-
- the position of the Arrow is determined by ``nudging'' (see below)
- e.g.
- |{^<num>label}|, where the actual dimen is |<num>\xydashl@|
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{code}
-\xymatrixcolsep{4pc}
-\xymatrixrowsep{1pc}
-\diagram
-A \rtwocell{_\alpha} & B \rtwocell{^\beta} &
-C \rtwocell{=\gamma} & D \rtwocell{\omit\Psi} & E \\
-\enddiagram
-\end{code}
-$$ \docode $$
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph{Parsing of the Arrow's label}
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Nudging}
-Positions of all labels may be adjusted,
-as can the amount of curvature for the curved arrows.
-The way this is done is by specifying a ``nudge'' factor <num>
-at the beginning of the label.
-Here <num> is a number which specifies the actual position of the label
-in units of |\xydashl@| (the length of a single dash, normally 5pt)
-except with |\..compositemap|, see below.
-Movement is constrained to the perpendicular bisector
-of the line $\overline{cp}$.
-When nudging the label for the central Arrow
-it is the whole Arrow which is moved, along with its label.
-
-Curvature of the arrows themselves is altered by
-a nudge of the form |\..twocell|<num>....
-The separation of the arrows, along the bisector,
-is set to be <num>|\xydashl@|.
-When <num> is zero, that is |\..twocell<0>...|,
-the result is a single straight arrow,
-its mid-point being the origin for nudging labels.
-A negative value for <num> is also acceptable;
-but check the orientation on the Arrow
-and which of |^| and |_| correspond to which component.
-
-The origin for nudging labels is where the arrow
-crosses the bisector. Positive nudges move
-the label outwards while negative nudges move towards $\overline{pc}$
-and possibly beyond.
-The default position of a label is on the outside, with edge at the origin.
-
-The origin for nudging the Arrow is at the midpoint of $\overline{pc}$.
-A positive nudge moves in the clockwise direction.
-This will be the direction of the arrowhead,
-unless it has been reversed using |^|.
-
-\smallskip
-
-Labels on a |\..compositemap| are placed relative to the midpoint
-of the component arrows. Nudges are in units of 1pt.
-Movement is in the usual \Xy-pic {\em above} and {\em below} directions,
-such that a positive nudge is always outside the triangle formed
-by the arrows and line $\overline{pc}$.
-
-\medskip
-
-The special nudge value |<\omit>| typesets just the Arrow,
-omitting the curved arrows entirely.
-When used with labels, the nudge value |<\omit>| causes the following label
-to be ignored.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{exercise}
-Give code to typeset figure ??[f.pasting].
-
-\noindent
-Such code is relatively straight-forward, using ``nudging''
-and |\omit| to help position the arrows, curves and Arrows.
-It also uses an {\em excursion},
-as described below in the subsection {\em Extra Options~3}.
-
-% code from the earlier ``Pasting diagram'' example.
-%\Pastingexample\gdef\Pastingexample{}%
-%
-\begin{code}
-\xymatrixrowsep{1.5pc}
-\xymatrixcolsep{3pc}
-\diagram
- &&\relax\rtwocell<0>^{f_3^{}\;\;}{\omit}
- &\relax\ddtwocell<0>{\omit}
- \drtwocell<0>^{\;\;f_4^{}}{<3>}
- \ddrrtwocell<\omit>{<8>}\\
-&&&&\relax\drtwocell<0>^{\;\;f_5^{}}{\omit}\\
-A \uurrlowertwocell<-6>{\omit}\relax
-\uurrcompositemap<2>_{f_1^{}}^{f_2^{}}{<.5>}
- \drtwocell<0>_{g_1^{}\;}{\omit}
- &&&\relax\urtwocell<0>{\omit}
- &&\relax\rtwocell<0>^{f_6^{}\;}{\omit}
- &\relax\rlowertwocell<-3>_{g_4^{}}{<-1>}
- \rcompositemap<6>_{f_7^{}}^{f_8^{}}{\omit}
- & B \\
- &\relax\urrtwocell<0>{\omit}
- \xcompositemap[-1,4]{}%
- <-4.5>_{g_2^{}}^{g_3^{}}{\omit}\\
-\enddiagram
-\end{code}
-
-\answertext{Here is the code used to typeset the {\em pasting diagram} in
-figure~??g[xy2cell.doc:f.pasting].}
-\answercode
-\answertext\displaycode
-
-\answertext{\smallskip\noindent
-For the straight arrows, it would have been simpler to use |\..to|
-provided |xyarrow| has been loaded. Instead |\..twocell<0>...{\omit}|
-was used to illustrate the versatility of nudging and |\omit|;
-thus |xy2cell| can completely handle a wide range of diagrams,
-without requiring |xyarrow|. Note also the use of |\relax| at the start
-of each new cell, to avoid premature expansion of a complicated macro,
-which can upset the compiling mechanism.}
-\end{exercise}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph{NUDGE } position of labels
-
-\DOCMODE(
-\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@ @}
-\DOCMODE)
-
-\begin{defs1}
-\begin{tabular}{c l}
- |#1| & which token register to store nudge amount\cr
- |#2| & which token register to store label\cr
- |#3| & what to do next, after parsing \cr
-\end{tabular}
-\end{defs1}
-
-\paragraph{Parsing: }
-%
- <num><label>|@|, <num> = nudge amount, as multiple of |\xydashl@|.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Extra Options}
-The following features are useful in non-mathematical applications.
-
-\subsubsection*{1. no Arrow}
-This is determined by special values for <tok> as the
-first (or only) character in the central label, as in the above
-description of the standard switches.
-
-\begin{defs1}
-\begin{tabular}{c l}
- |'| & arrowheads pointing clockwise;\cr
- |`| & arrowheads pointing anti-clockwise;\cr
- |"| & arrow tips on both ends;\cr
- |!| & no tips at all.\cr
-\end{tabular}
-\end{defs1}
-
-\noindent
-The central Arrow is omitted, leaving symmetrically placed
-curved connections with arrowheads at the specified ends.
-A label can be placed where the Arrow would have been.
-
-If a special arrowhead is specified using |~'{..}|
-(see Extra Options~2, below)
-then this will be used instead of the standard |\dir{>}|.
-
-\ifx\undefined\mathbf\def\mathbf{\boldmath}\fi
-\begin{code}
-\xymatrixcolsep{5pc}
-\diagram
- \relax\txt{Clouds }\rtwocell<10>
- _{\hbox{\tiny evaporation }}
- ^{\hbox{\tiny precipitation }}
-{'{\mathbf{H_2 O}}}
-&\relax\txt{Oceans}\\
-\enddiagram
-\end{code}
-$$ \docode $$
-\displaycode
-
-\begin{code}
-\xymatrixcolsep{5pc}
-\diagram
-\relax\txt{\llap{Math}ematics }\rtwocell
-_{\hbox{\tiny experiment }}
-^{\hbox{\tiny theory }}{"}
-& \relax\txt{Physics} \\
-\enddiagram
-\end{code}
-$$ \docode $$
-\displaycode
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{2. Changing Tips and Module Maps }
-The following commands are provided for specifying the <object>
-to be used when typesetting various parts of the twocells.
-
-\medskip
-\noindent
-\begin{tabular}{l c}
-\noalign{\hrule}
-\noalign{\smallskip}
-{\em command} \hfill & {\em default} \cr
-\noalign{\smallskip}
-\noalign{\hrule}
-\noalign{\smallskip}
- |\modmapobject{|<object>|}| & |\dir{|$\vert$|}| \cr
- |\twocellhead{|<object>|}| & |\dir{>}| \cr
- |\twocelltail{|<object>|}| & |\dir{}| \cr
- |\arrowobject{|<object>|}| & |\dir{=>}| \cr
-\noalign{\smallskip}
- |\curveobject{|<object>|}| & \cr
- |\uppercurveobject{|<object>|}| & |{}| \cr
- |\lowercurveobject{|<object>|}| & |{}| \cr
-\noalign{\smallskip}
-\noalign{\hrule}
-\end{tabular}
-\medskip
-
-
-These commands set the object to be used for all subsequent
-2-cells at the same level of \TeX\ grouping.
-|\curveobject| specifies both of the upper- and lower-curve objects.
-For some of these there is also a way to change the object for the
-current 2-cell only.
-This requires a |~|-<switch> which is described below,
-except for the |\..curveobject| types, which are discussed in
-{\em Extra Options~4}.
-
-\medskip
-
-These effects are specified by placing switches
-after the |\..twocell| control sequence,
-\eg\ |\rtwocell| {\em switches\/} {\em labels\/}\dots~.
-Each switch is either a single token <tok>, or a
-|~|<tok> with a single argument: |~|<tok>|{|{\em arg\/}|}|.
-Possibilities are listed in the following table,
-in which |{..}| denotes the need for an argument.
-
-\begin{defs1}
-\begin{tabular}{c l}
- |\omit| & no arrows, Arrow and label only;\cr
- |!| & place module-map indicator;\cr
-|~'{..}| & change arrow-head to |{..}|;\cr
-|~`{..}| & place/change tail on arrow(s);\cr
-|~{..}| & change object used to set curves;\cr
-|~^{..}| & use object |{..}| to set upper curve;\cr
-|~_{..}| & use object |{..}| to set lower curve;\cr
-\end{tabular}
-\end{defs1}
-
-\noindent
-Here we discuss the use of |!|, |~'|, |~`| and |\omit|.
-The description of |~^|, |~_| and |~{..}| is given in {\em Extra Options~4}.
-
-\medskip
-The default module map indicator places a single
-dash crossing the arrow at right-angles,
-located roughly midway along the actual printed portion of the arrow,
-whether curved or straight.
-This takes into account the sizes of the objects being connected,
-thereby giving an aesthetic result when these sizes differ markedly.
-This also works with |\..compositemap| where an indicator is placed
-on each arrow. The actual object can be changed using |\modmapobject|.
-
-\medskip
-Any of the standard \Xy-pic tips may be used for arrow-heads.
-This is done using |~'{..}|,
-for example |~'{\dir{>>}}| gives double-headed arrows.
-Similarly |~`{..}| can be used to place an arrow-tail.
-Normally the arrow-tail is {}, so is not placed;
-but if a non-empty tail has been specified then it will
-be placed, using |\drop|.
-No guarantee is offered for the desired result being obtained
-when an arrow-tail is mixed with the features of {\em Extra Options~1}.
-
-\begin{code}
-\modmapobject{\objectbox{\otimes}}
-\xymatrixcolsep{5pc}
-\diagram
-P\rtwocell~!~'{\dir{>>}}~`{\dir{|}}
- ^{<1.5>M}_{<1.5>M'}{=f} & S \\
-\enddiagram
-\end{code}
-$$ \docode $$
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- switch for module maps...
- ...places decoration called |\modmapobject| half way along arrows
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
- also adjust curvature and label positions
-
-\DOCMODE(
-\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\toks5\p@
-% \ifdim\dimen@<\z@\advance\dimen@-.5\p@\else\advance\dimen@.5\p@\fi
-% \edef\tmp@{\noexpand\toks5={\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 }%
-
-%\def\moddefs@{}
-\DOCMODE)
-
- default object is |\stop|, user can change this with |\modmapobject#1|
-
-\DOCMODE(
-\xydef@\modmapobject#1{\def\modmapobject@{#1}}
-\xydef@\modmapobject@{\dir{|}}
-\xydef@\@modmapobject@{{\if\@mod@\relax\expandafter\empty
- \else\expandafter\modmapobject@\fi}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{3. Excursions}
-Syntax for |\xcompositemap| and |\x..twocell| types
-is a little different to
-what might be expected from that for |\xto|, |\xline|, etc.
-For example,
-%
-\begin{defs1}
-|\xtwocell[|<hop>|]{|<displace>|}...|
-\end{defs1}
-%
-\noindent
-connects to the <pos> displaced by <displace> from
-the relative cell location specified by <hop>.
-The displacement can be any string of valid \Xy-pic commands,
-but they must be enclosed within a group |{...}|.
-When the cell location is the target,
-a~null grouping |{}| {\em must} be given.
-
-When used with the |<\omit>| nudge, such excursions allow a labelled Arrow
-to be placed anywhere within an \Xy-pic diagram;
-furthermore the Arrow can be oriented to point in any direction.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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@{}
-\DOCMODE)
-
-The empty object gives the default of closely spaced tiny dots,
-resulting in a ``smooth'' curve.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The following macro is used in conjunction with compiling diagrams,
-to include the global parameters in the compiled file.
-
-\DOCMODE(
-\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@}%
- }}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{4. Fancy curves}
-By specifying |\curveobject| an arbitrary object may be used to
-construct the curved arrows. Indeed with a
-|\..twocell| different objects can be used with
-the upper and lower curves by specifying
-|\uppercurveobject| and |\lowercurveobject|.
-
-These specifications apply to all 2-cells subsequently constructed at
-the same level of \TeX\ grouping.
-Alternatively using a |~|-switch, as in {\em Extra Options~2},
-allows such a specification for a single 2-cell or curved part.
-
-Objects used to construct curves can be of two types.
-Either a single <object> is set once, with copies placed along the curve.
-Alternatively a directional object can be aligned with
-the tangent along the curve. In this case use a specification takes the
-form:
-
-|\curveobject{|<spacer>|~**|<object>|}|.
-
-\noindent
-Here <spacer> may be any <object> of non-zero size.
-Typically it is empty space, \eg\ |+|<dimen>|{}|.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{exercise}
-Give code to typeset the following diagrams.
-
-\begin{code}
-{\uppercurveobject{{?}}
- \lowercurveobject{{\circ}}
-\xymatrixcolsep{5pc}
-\xymatrixrowsep{2pc}
-\diagram
- \relax\txt{ FUn }\rtwocell<8>{!\&}
- & \relax\txt{ gaMES }
- \enddiagram}
-\end{code}
-$$\docode$$
-
-\answertext{Here is the code
-used by the author to set the first diagram.}
-\answercode
-\answertext\displaycode
-
-\begin{code}
-\xymatrixcolsep{2.5pc}
-\xymatrixrowsep{4pc}
-\diagram
- \relax\txt<1.5cm>{\bf Ground State}
- \rrtwocell<12>~^{+{}~**!/-2.5pt/\dir{>}}
- ~_{++{}~**!/5pt/\dir{<<}}
- ^{<1.5>\txt{\small continuous power}}
- _{<1.5>\txt{\small pulsed emission}}{!}
-& \relax\;\; N\!i\,C\!d\;\; \Circled
-& \relax\txt<1.50cm>{\bf Excited State}
-\enddiagram
-\end{code}
-$$\docode$$
-
-\answertext{Here is the code
-used for the second diagram.}
-\answercode
-\answertext\displaycode
-
-\end{exercise}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{After Parsing...}
-
- Values for |\twocellPATH|, depends on the mode of picture/diagram
- as to whether the |@c| and |@p| are known yet, or still have
- to be read.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE(
-\xylet@\twocellPATH=\twocellpath
-\xydef@\aftertwo@CELL{\let\twocellPATH=\twocellpath \def\aftertwoCELL{}}
-\xydef@\aftertwoCELL{}
-\DOCMODE)
-
- It remains to collect everything together and place it on the queue.
-
-\DOCMODE(
-\xydef@\twocell@@@@#1!!!{\xy@{twocell #1}{\twocell@@#1!!!}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{2-cells in general \Xy-pictures}
-??=[standard]
-Two-cells can also be set directly within any \Xy-picture, without the
-matrix feature, using either |\drop| or |\connect|.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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@{%
-% \idfromc@{@c}\swap@\idfromc@{@p}\swap@
- \expandafter\edef\csname Q@@c\endcsname{\cfromthec@}\swap@
- \expandafter\edef\csname Q@@p\endcsname{\cfromthec@}\swap@
- \let\twocellPATH=\twocell@path
-% \def\aftertwoCELL{\twocell@DONE}}
- \def\aftertwoCELL{\twocell@DONE \xy@\restore \leave@
-% \cfromid@{@c}\no@@ \xystatus@{end: }
- }}
-
-\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]}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{code}
-\def\myPOS#1{\POS}\def\goVia#1{%
- \afterPOS{\connect#1\myPOS}}
-\xy
- *+{A}="A",+<1cm,1.5cm>*+{B}="B",
- +<2.0cm,0pt>*+{C}="C",
- +<1cm,-1.5cm>*+{D}="D",
-"A";\goVia{\uppertwocell^\alpha{}}"B"{}
-;\goVia{\twocell^\zeta_\xi{\gamma}}"C"{}
-;\goVia{\compositemap{}}"D"{},
-"A";\goVia{\lowertwocell{}}"D"{}
-\endxy
-\end{code}
-
-\displaycode
-%\begin{figure}[hbt]
-$$\docode$$
-%??=[f.xypic]
-%\caption{2-cells in \protect\Xy-pictures}
-%\end{figure}
-
-\begin{code}
-\xy *+{A}="A",+<1cm,1.5cm>*+{B}="B",
- +<2cm,0pt>*+{C}="C",
- +<1cm,-1.5cm>*+{D}="D",
-"A";"B",{\uppertwocell^\alpha{}},
-"B";"C",{\twocell^\zeta_\xi{\gamma}},
-"C"; \afterPOS{\drop\compositemap{}}"D"
-\POS "A";
- \afterPOS{\drop\lowertwocell{}}"D"
-\endxy
-\end{code}
-
-The code shown is a compact way to place a chain
-of 2-cells within a picture.
-It illustrates a standard technique for using
-|\afterPOS| to find a <pos> to be used for part of
-a picture, then subsequently reuse it.
-Also it is possible to use |\drop| or <decor>s
-to specify the 2-cells, giving the same picture.
-
-\displaycode
-
-The |\connect| variant is usually preferable
-as this maintains the size of the object at $c$,
-while the |\drop| variant leaves
-a rectangular object having $p$ and $c$ on opposite sides.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This is used outside of diagrams.
-
-\DOCMODE(
-\xydef@\@twocell@#1{\ifx\next[\DN@[{\toks@={#1}\xyFN@\@@twocell@}%
- \else\DN@{#1{}}\fi
-%%
-% \idfromc@{@c}\swap@\idfromc@{@p}\swap@
- \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@}
-\DOCMODE)
-
-This hack is necessary, since |\DN@[##1]{#1##1}| will strip braces.
-
-\DOCMODE(
-\xydef@\@@twocell@{\ifx\next\bgroup\DN@##1]{\the\toks@{##1}}%
- \else\DN@##1]{\the\toks@##1}\fi\next@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\TODO:
- These are supposed to allow |\dir\...twocell{...}| to work.
- At present it seems to be impossible to do this.
-
-\DOCMODE(
-% \expandafter\xydefcsname@\expandafter{\codeof\twocell}{\@twocell}
-% \expandafter\xydefcsname@\expandafter{\codeof\uppertwocell}{\@uppertwocell}
-% \expandafter\xydefcsname@\expandafter{\codeof\lowertwocell}{\@lowertwocell}
-% \expandafter\xydefcsname@\expandafter{\codeof\compositemap}{\@compositemap}
-%% \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}
-\DOCMODE)
-
-...since the contents of |{..}| is variable.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Finish off the box, set up the object size,
- establish the |\Drop@@| and |\Connect@@| methods.
-
-\DOCMODE(
-\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 }}%
-\DOCMODE)
-
- modified |\Drop@@| and |\Connect@@|
-
-\DOCMODE(
-\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@@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-|\twocell@@| is the main switching engine, taking 9 parameters determining
- which pieces to set and where to position them. This includes
- curvature of the squines, whether to draw two squines
- or only one, or to use straight lines,
- whether to have a central Arrow and its orientation,
- contants of labels and their positions.
-
- The current p and c are the extents of the connection
- these are stored as |"@p"| and |"@c"| for repeated use;
-
-\begin{defs1}
-\begin{tabular}{c l}
- |#1| & determines location of control point |"@m"|\cr
- |#2| & location of |=>|, as multiple of |\xydashl@| from |"@m"|\cr
- |#3| & location of |_| label (source arrow)\cr
- |#4| & location of |^| label (target arrow)\cr
- |#5| & flag for how many squines to draw \& which tips\cr
- |#6| & label for source arrow\cr
- |#7| & label for target arrow\cr
- |#8| & label for |=>| (2-cell morphism)\cr
- |#9| & determines orientation of 2-cell \cr
-\end{tabular}
-\end{defs1}
-
-The following tokens may appear as parameters in |#9|:
-|!|, |^|, |_|, |=|, |A|, |V|, |H|
-
-\DOCMODE(
-\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
-% \vfromslide@i{#3\xydashl@}@\czeroEdge@ \leave@
-% \droptwocelllabel@{#6}}%
- \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 % tip at start only
- \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 % no tips at all
- \else % tip at end...
- \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 % ... and also at start.
- \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 % second curved arrow
- \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 % tip at start only
- \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 % no tips at all
- \else % tip at end...
- \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 % ... and also at start.
- \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
-%
-% the Arrow
-%
- \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@{}%
-% \drop@{\dir}{=>}%
-%
- \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@{}%
-% \drop@{\dir}{=>}%
-%
- \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
-%
-% label on the Arrow
-%
- \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@ }%
-\DOCMODE)
-
-These are used to establish the location for
-the module-map indicator, giving best aesthetic appeal.
-It finds the location whose parameter value is
-the average of half-way along the complete curve and
-the average of parameter values at the the edges.
-
-\DOCMODE(
-\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@}%
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xy2cell.doc,v $
-% Revision 3.3 1996/12/18 14:21:23 ross
-% Ross's version
-%
-% Revision 3.3.1.1 1996/12/18 08:49:34 ross
-% *** empty log message ***
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.14 1995/07/05 22:11:25 kris
-% Buglets...
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% Revision 2.12 1994/10/25 03:01:14 ross
-% Final 3beta release [bug fixes & AMS-LaTeX fitting].
-%
-% Revision 2.10 1994/07/01 01:19:46 ross
-% removed undefined references
-%
-% Revision 2.9 1994/06/09 12:51:27 ross
-% Release 3beta.
-%
-% NEW for version 2.9 based on unreleased code for version 2.6+.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyall.doc b/Master/texmf-dist/source/generic/xypic/xyall.doc
deleted file mode 100644
index d1a376d5dbc..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyall.doc
+++ /dev/null
@@ -1,93 +0,0 @@
-%% $Id: xyall.doc,v 3.3 1996/12/19 03:31:56 krisrose Exp $
-%%
-%% Xy-pic ``All features'' option.
-%% Copyright (c) 1993-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{all}{All features}{\stripRCS$Revision: 3.3 $}%
- {Kristoffer H.~Rose}{krisrose@brics.dk}%
- {BRICS/Computer Science, University of Aarhus, Ny Munkegade, building 540,
- DK--8000 Aarhus~C}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-As a special convenience, this feature loads a subset of
-\Xy-pic,\footnote{The name `all' hints at the fact that these were all the
- available options at the time `all' was added.} namely the extensions:
-|curve| (\cf~\S??g[:curve]), |frame| (\S??g[:frame]), |cmtip| (\S??g[:tips]),
-|line| (\S??g[:line]), |rotate| (\S??g[:rotate]), |color| (\S??g[:color]),
-and the following features: |matrix| (\S??g[:matrix]), |arrow|
-(\S??g[:arrow]), and |graph| (\S??g[:graph]).
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\DOCHEADER
-
-Here we go:
-
-\DOCMODE(
-\xyrequire{curve}
-\xyrequire{frame}
-\xyrequire{cmtip}
-\xyrequire{line}
-\xyrequire{rotate}
-\xyrequire{color}
-
-\xyrequire{matrix}
-\xyrequire{arrow}
-\xyrequire{graph}
-\DOCMODE)
-
-That is all.
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xyall.doc,v $
-% 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.12 1994/10/25 11:34:25 kris
-% Interim release just before v3 [works with AMS-LaTeX 1.2]...
-%
-% Revision 2.11 1994/07/05 10:37:32 kris
-% Third 3beta release [bug fixes].
-% Experimental graph feature included (for ECCT-94 presentation).
-%
-% Revision 2.9 1994/06/09 14:59:19 kris
-% Release 3beta.
-%
-% NEW file to go in version 2.9!
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyarc.doc b/Master/texmf-dist/source/generic/xypic/xyarc.doc
deleted file mode 100644
index 5c392285b70..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyarc.doc
+++ /dev/null
@@ -1,1436 +0,0 @@
-%% $Id: xyarc.doc,v 3.4 1997/05/18 01:13:24 ross Exp $
-%%
-%% Xy-pic ``Circles, Ellipses and Arcs'' feature.
-%% Copyright (c) 1995-1997 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The XY-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The XY-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{arc}{Circle, Ellipse, Arc feature}{\stripRCS$Revision: 3.4 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\noindent
-This feature provides a means to a specify circles of arbitrary radius,
-drawn with a variety of line styles. Similarly ellipses may be specified,
-having arbitrary major/minor axes aligned in any direction.
-A circular arc joining two points can be constructed with specified
-tangent direction at one end.
-
-All the curves described here---circles, ellipses and sectors of
-these---are constructed using the curves from the |xycurve| extension.
-As such any comments given there concerning memory requirements are
-equally valid here, perhaps even more so. Use of the |xyps| \PS\
-back-end is highly recommended.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-The arcs are not truly circular or elliptical, but are approximations
-given by cubic B\'ezier segments. Hence the |xycurve| feature must be loaded.
-
-\DOCMODE(
-\xyrequire{curve}
-\xycatcodes
-\DOCMODE)
-
-The basic <object> defined here is |\arc|.
-So far it is only implemented as a <decor>ation,
-called |\ellipse|.
-
-\DOCMODE(
-\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#{\xy@{ARC}{\hbox\bgroup\save@}%
-% \let\endarc@=\endarc@@\arc@{#1}}
-%\xydef@\endarc@@{\xy@{endARC}{\leave@\origDirection@
-\DOCMODE)
-
-
-We start by recording the curve <style> and initialising
-some methods and <pos> names, to be able to easily access
-important <pos> and <direction> information.
-
-When the |...| in |\arc...{|<style>|}| is particularly simple,
-e.g. <empty> or |^| or |_|, then we can branch immediately
-to |\fullCircle@|. Otherwise more parsing is required.
-
-\DOCMODE(
-\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@ }%
-% \xy@{doCircARCs}{\leave@ \doCircleArcs@}\endarc@ }%
- \xyFN@\getarcparams@#1@}\fi\fi\fi
- \next@ }
-\DOCMODE)
-
-When further parsing is required, using |\getarcparams@|, then
-an |@| token is used to mark the end of the relevant tokens.
-
-Before any parsing at all the current $p$ and $c$ are recorded as named
-<pos>itions "0@p" and "0@c", as well as a point "0@m" along the line in the
-current direction from $p$. A method |\origDirection@| is defined to
-artificially re-impose this direction independent of the $p$ and $c$
-that may be current at the time. |\startDirection@| is initialised to
-this method, though parsing may change its value.
-Other methods are initialised, in particular the default orientation;
-their values can be expected to change with subsequent parsing.
-
-\DOCMODE(
-\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@@}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\message{circles,}
-\DOCMODE)
-
-\subsection{Full Circles}
-
-The |xyarc| feature allows a much wider range of possibilities
-for typesetting circles than is available with |\cir|.
-Firstly the radius is no longer restricted to a finite collection of sizes.
-Secondly fancy line (curve) styles are available, as with curved arrows.
-Finally there are a variety of ways of specifying the desired radius,
-relative to other parts of the picture being built, as in the following
-example.
-
-\begin{code}
-\xy 0;/r5pc/:*\dir{*}="p",*+!DR{p};
-p+(.5,-.5)*\dir{*}="c",*+++!L{c}**\dir{-}
-,{\ellipse<>{:}},{\ellipse(.5){}}
-,0;(.5,.5)::,"p";"c",{\ellipse(.5){.}}
-,{\ellipse<5pt>{=}}\endxy
-\end{code}
-$$\docode$$
-\displaycode
-
-The following give circles centred at $c$.
-\begin{defs}
-|\ellipse<>{|<style>|}| & radius $ = \mathop{\hbox{dist}}(p,c)$ \cr
-|\ellipse<|<dimen>|>{..}| & radius is the <dimen> \cr
-|\ellipse(|<num>|){|<style>|}| & unit circle scaled <num>,\hfill\break
-in the current basis. \cr
-\end{defs}%
-%
-\noindent
-Note that if the current basis is not square then the latter variant,
-namely |\ellipse(|<num>|)|, will typeset an ellipse rather than a circle.
-On the other hand the first two variants always specify true circles.
-In the 2nd case, i.e. when <dimen> is <empty>, the size of the object
-at $p$ is taken into account when drawing the circle; if this is not
-desired then kill the size using a null object, e.g. |;*{};|.
-
-Currently the |\ellipse| macro works only as a <decor>. In future versions
-there will be an <object> called |\arc| having elliptical shape,
-via |\circleEdge| with possibly unequal extents. Also it will be possible
-to |\connect\arc|, which will set the current connection so that any place
-on the full ellipse, not just the visible sector, will be accessible using
-an extension to the usual <place> mechanism.
-
-\TODO: make this be!!
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The simplest cases of full circles go straight to |\circleArc@|.
-
-\DOCMODE(
-\xydef@\fullCircle@{\xy@{fullCIRC}{\let\endDirection@=\relax
- \let\doCircleArc@=\doMergeEndArc@@}\circleArc@ }%
-\DOCMODE)
-
-If the first non-space token following |\arc| is |<| then the current
-$c$ is taken to be the centre of the circle or ellipse, or sector thereof.
-The first parsing is done to interpret information concerning the radius,
-(or axes of an ellipse) along with an orientation. This can be specified
-either as absolute dimensions, enclosed in |<|\dots|>|,
-or relative to the current basis by |(|\dots|)|, or based on the line
-$\overline{pc}$ using |<>| or |<,|<dimen>|>| or |(,|<num>|)|.
-
-\DOCMODE(
-\xydef@\getarcparams@{%
- \ifx\space@\next \expandafter\DN@\space{\xyFN@\getarcparams@}%gobble spaces
- \else\addLT@\ifx \next \xy@{<}{}%
- \addGT@{\addLT@\DN@##1}{\splitRadius@dim##1,,@}%
-% \else\ifx \next (\xy@{(}{}\DN@(##1){\splitRadius@##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@ }
-\DOCMODE)
-
-The centre is now stored as |"0@0"|, since the value of |"0@c"|
-will be changed to agree with |"0@p"|. This is so that start/finish
-directions will agree, ensuring all four quadrants be drawn.
-The following method is actually executed after all the radius/axes
-information has been parsed.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-When a full circle or ellipse is required then there are three methods
-which must be invoked when establishing the local basis change.
-
-\begin{itemize}
-\item[|\arcScale@|]
-Initially this has value |\arcScale@@| which is based on $\overline{pc}$.
-It is changed only by |(|<num>|)| and |(|<num>|,|<num>|)|;
-see the code for |\splitRadius@| below. When executed,
-this method will establish the required basis, at least partially.
-
-\DOCMODE(
-\xydef@\arcScale@@{\xy@{arcSCALE@@}{\save@
- \cfromid@{0@0}\pfromc@\cfromid@{0@p}\setbase@\X@p\Y@p\X@c\Y@c}}
-\DOCMODE)
-
-\item[|\arcRadius@|]
-Initially <empty>, this changes with |<|<dimen>|,|<dimen>|>| and
-|<|<dimen>|>| to |\arcScale@dim| which gets the radius by a <slide>
-of given <dimen> along the line $\overline{pc}$.
-
-\DOCMODE(
-\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}}}
-\DOCMODE)
-
-
-\item[|\ellipseRatio@|]
-Initially <empty>, this changes with |<|<dimen>|,|<dimen>|>| to
-|\ellipseScale@dim| which establishs the $(|\X@basey|,|\Y@basey|)$
-by a <slide> perpendicular to the line $\overline{pc}$,
-or to |\ellipseScale@| with |(,|<num>|)| to simply set the
-perpendicular basis direction using <num> as a coordinate.
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-\end{itemize}
-
-The methods |\splitRadius@dim| and |\splitRadius@| complete the
-interpretation of the radius/axes specification. They must determine
-whether one or two pieces of information have been explicitly provided,
-and act accordingly.
-
-\DOCMODE(
-\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 }
-\DOCMODE)
-
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\message{ellipses,}
-\DOCMODE)
-
-\subsection{Ellipses}
-
-There are several ways to specify an ellipse, apart from the method
-illustrated above in which the basis must be changed from square.
-Basically we must specify the lengths of the major and minor axes.
-Also it is necessary to specify an alignment for one axis.
-
-\medskip
-In the following, the ellipse is centred on $c$ and one axis is aligned
-along the line $\overline{pc}$, except with the final variant where
-it aligns with the current basis. When used <num> is treated
-as a scale factor, multiplying an appropriate length.
-%
-\begin{defs}
-|\ellipse<|<dimen>|,|<dimen>|>{|..|}| & given axes lengths \cr
-|\ellipse<,|<dimen>|>{|<style>|}| & one axis is $\overline{pc}$ \cr
-|\ellipse(,|<num>|){|<style>|}| & ...perp. axis scaled \cr
-|\ellipse(|<num>|,|<num>|){|..|}| & scaled axes aligned\hfill\break
-with basis. \cr
-\end{defs}
-
-In the latter variant, if the second <num> is <empty> then
-this is equivalent to both <num>s having the same value,
-which is in turn equivalent to the final variant for circles.
-
-\begin{code}
-\xy 0;/r5pc/:*\dir{*},*++!DR(.5){p}
-*\frm{-};p+(.5,-.5)*\dir{*}="c",
-**\dir{-},*+!UL{c},"c",
-,{\ellipse(1,.4){:}},{\ellipse(,.75){}}
-,{\ellipse<15pt,10pt>{=}}
-;*{};{\ellipse<,10pt>{.}}\endxy
-\end{code}
-$$\docode$$
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-As with full circles, full ellipses require little preparation.
-
-\DOCMODE(
-\xydef@\fullEllipse@{\xy@{fullELLIPSE}%
- {\def\startDirection@{}\let\doCircleArc@=\doMergeEndArc@@}%
- \ellipseArc@
- \xy@{doCIRCarcs}{\leave@ \doCircleArcs@}\endarc@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Drawing arcs}
-
-This method is common to full circles, ellipses and circular arcs.
-It first executes the methods |\arcScale@|, |\arcRadius@|, |\ellipseRatio@|
-where necessary, then examines |\arcOrient@@| to decide if the arc is to be
-typeset clockwise or counter-clockwise.
-
-\DOCMODE(
-\xydef@\ellipseArc@{%
- \arcScale@ \arcRadius@ \ellipseRatio@
- \xy@{arcCONTROLS}{\baseOrient@ \arcControls@ \let\bstartPLACE@=\relax }}
-\DOCMODE)
-
-Here is where the ``control points'' are defined, for each of the
-four B\'ezier cubic segments, using coordinates in the constructed
-basis. The endpoints of the segments---though, not necessarily
-of the arc---are stored as "0p", "1c", "2c", "3c" and the tangential
-control points are stored as "1m", "2m", \dots, "8m".
-
-\DOCMODE(
-\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}%
- }
-\DOCMODE)
-
-Drawing the circle/ellipse/arc means tracing along the requisite cubic
-segments. The method |\doCircleArc@@| is used for full circles/ellipses
-when complete segments are to be typeset.
-The methods |\doMergeStartArc@|, |\doMergeEndArc@@| and |\doMergeBothArc@|
-are used when a segment is not complete. The work by ``merging'' the
-initial/final point of the curved segment with the appropriate point
-required to be at the extremity of the arc. Typesetting of the curve
-should not take place within the region covered by this merged object.
-
-To overcome the difficulty of the curve leaving then re-entering this
-region, a second merge is performed to extend it suitably. This is
-the purpose of |\cfromcontrols@|. Due to the ``convex-hull property''
-of the B\'ezier cubic segment, a point can be constructed from
-the end-points and control points which can be used to extend
-the rectangle to cover a suitable portion of the curve.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-The next method controls which segments are typeset.
-It is rather primitive and could well be improved; e.g. to be more like
-|\doEllipseSectors@| with |\forwardSectors@| and |\backwardSectors@|.
-
-First it calculates the |\startDirection@@| as a number, using the current
-base. Next it calculates |\quadDirection@| which records the angle of
-the $y$-axis in the current base.
-Depending on the required orientation, read from |\arcOrient@@|, this
-latter number is adjusted to be minimal greater than |\startDirection@@|
-for a counter-clockwise arc, or maximal less than it for a clockwise one.
-Similarly the value of |\endDirection@@| is made larger or smaller
-than |\startDirection@@|, according to orientation, by adding $\pm8192$
-if necessary.
-
-Each required segment is typeset using |\doCircleArc@@| except that the
-final segment uses the value of |\doCircleArc@|. When the end-point is
-the original $c$ then this value is |\doMergeEndArc@@|, so that the arc will
-stop at the edge of this <pos>, otherwise |\doCircleArc@@| is used.
-
-(The following macro can be shortened by making use of the methods
-|\forwardSectors@| and |\backwardSectors@|, as in |\doEllipseSectors@|.
-
-\DOCMODE(
-\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 % \forwardSectors@
- \ifnum\endDirection@@>\quadDirection@
- \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{0}}%
- \else
- \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{0}}%
- \fi
-%
- \else % \arcOrient@@ = _
-%
- \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 %\backwardSectors@
- \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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\message{elliptical arcs,}
-\DOCMODE)
-
-\subsection{Circular and Elliptical Arcs}
-
-The |xyarc| feature handles arcs to be specified in two essentially
-different ways, according to what information is provided by the user.
-We call these the ``radius-unknown/end-points known'' and the
-``radius-known/end-points unknown'' cases.
-
-\subsubsection*{radius unknown, end-points known}
-The simplest case, though not necessarily the most common, is that of
-a circular arc from $p$ to $c$, with radius and centre unspecified.
-To uniquely specify the arc, the tangent direction at $p$ is taken
-to be along the current direction, given by |\Direction|, as set by the
-latest <connect>ion. If no connection has been used, then the default
-<direction> is ``up''.
-%
-\begin{defs}
-|\ellipse_{|<style>|}| & clockwise arc from $p$ to $c$ \cr
-|\ellipse^{|<style>|}| & counter-clockwise arc \cr
-|\ellipse{|<style>|}| & also counter-clockwise \cr
-\end{defs}
-%
-With this information only, a unique circle can be found
-whose radius and centre need not be specified in advance.
-For a unique arc it is sufficient to specify the orientation
-around the circle.
-
-The exception is when the current direction is from $p$ to $c$,
-in which case no circle exists. Instead a straight line is typeset
-accompanied by the following message:
-$$
-|Xy-pic Warning: straight arc encountered |
-$$
-
-The following example shows how, given three points $o$, $p$ and $c$,
-to continue the line $\overline{op}$ by a circular arc to $c$ joining
-smoothly at $p$.
-
-\begin{code}
-\xy 0;/r5pc/:*=+\dir{*}*+!UR{p};
-p+(.5,-.5)*\dir{*}="o",*+!UL{o}
-,+(0,.81)*=<6.1pt>\dir{*}*\frm{-}="c"
-,*+!DL{c},"o",**\dir{-},
-"c",{\ellipse_{}},{\ellipse^{.}}
-%
-,"o"+(1.5,.2)*\dir{*}="a"*+!UL{a}
-,"o";p+/_1pc/,**{},"a",{\ellipse_{}}
-\endxy
-\end{code}
-$$\docode$$
-\displaycode
-%
-\noindent
-Note how the remainder of the circle can be specified separately.
-The example also shows how to specify an arc which leaves a particular
-point perpendicular to a specific direction.
-
-\medskip
-Slightly more complicated is when the tangent direction at $p$ is specified,
-but different from the current direction; a unique circular arc can still
-be defined. More complicated is when a specific tangent direction is
-required also at $c$. In this case the arc produced is a segment
-of an ellipse. (If the required tangent at $p$ points to $c$ then a straight
-segment is drawn, as in the circular case described above.)
-%
-\begin{defs}
-|\ellipse|<dir>$_p$|,|<orient>|{..}| & circular \cr
-|\ellipse|<dir>$_p$|,|<orient>|,|<dir>$_c$|{..}| & elliptical \cr
-|\ellipse|<dir>$_p$|,|<orient><dir>$_c$|{..}| & elliptical\cr
-|\ellipse|<dir>$_p$|,|<orient>,=<dir>$_c$|{..}| & elliptical\cr
-|\ellipse`|<coord><orient>|{..}| & elliptical\cr
-\end{defs}
-%
-In these cases <dir>$_p$ and <dir>$_c$ are <direction> specifications,
-as in figure~??g[xy.doc:f.object] and note~??g[xy.doc:<direction>],
-and <orient> must be either |^| or |_|
-for anti-/clockwise respectively, defaulting to |^| if <empty>.
-Beware that the |(*|<pos><decor>|*)| form {\em must\/} be used for this
-<direction> variant, as if an object modifier.
-
-The second and third cases in the above table generally
-give identical results. The second `|,|' is thus optional, except
-in two specific situations:
-\begin{itemize}
-\item[1.] <orient> is empty and <dir>$_c$ has |^| or |_| as
-the first token;
-\item[2.] <orient> is |^| and <dir>$_c$ has |^| as first token.
-Without the |,| then |^|{}|^| would be interpreted by \TeX\ as part of
-a special ligature for a hexadecimal character code.
-\end{itemize}
-If both <orient> and <dir>$_c$ are <empty> then even the first `|,|'
-can be omitted.
-%
-\begin{code}
-\xy 0;/r5pc/:*=<8.1pt>\dir{*}="p",*\frm{-}
-,*++!U{p},"p";p+(.5,-.5)*+\dir{*}="o"
-,*+!UL{o},+(0,.81)*=<8.1pt>\dir{*}="c"
-,*\frm{-},*++!L{c},"o"**\dir{-},"c"
-,{\ellipse :a(50),_:0{:}}
-,{\ellipse :a(30),_:a(-45){}}
-,{\ellipse :a(40),_{.}},
-;*{};{\ellipse :a(20),^=_{=}}\endxy
-\end{code}
-$$\docode$$
-\displaycode
-%
-Note that only the slope of <dir>$_p$ and <dir>$_c$ is significant;
-rotations by 180$^\circ$ being immaterial.
-
-\begin{code}
-\xy 0;/r5pc/:*\dir{*}="p",*+!UR{p}
-;p+(.5,-.5)*\dir{*}="o",*++!L{o}**\dir{-}
-,p+(.5,.5)*\dir{*}="c",*++!D{c},"c"
-;p+(1,.1)*\dir{*}="q",*++!L{q}**\dir{-}
-,"o";"p",**{};"c"
-,{\ellipse![["o";"p"]],_![["q";"c"]]{}}
-,{\ellipse![["o";"p"]],![["c";"q"]]{.}}
-\endxy
-\end{code}
-$$\docode$$
-\displaycode
-%
-The |=| variant establishes the <direction> parsing to begin with
-the direction resulting from <dir>$_p$ instead of the original direction.
-If <dir>$_c$ is required to be the original direction then use |:0|.
-It cannot be <empty> since this is interpreted as requiring
-a circular arc with unspecified tangent at $c$; see the example above.
-However when <dir>$_p$ and <dir>$_c$ are parallel there is a
-whole family\footnote{Indeed this is always so. The algorithm used for
-the general case tends toward parallel lines---clearly unsuitable.}
-of possible ellipses with the specified tangents.
-
-With no further hint available, a choice is made based on the distance
-between $p$ and $c$. If the required direction is perpendicular to
-$\overline{pc}$ this choice results in a circular arc.
-The optional factor in |=(|<num>|)| is used to alter this choice;
-the default |(1)| is assumed when nothing follows the |=|.
-This factor is used to ``stretch'' the ellipse along the specified direction.
-For a negative <num> the orientation reverses.
-%
-\begin{code}
-\xy ;/r5pc/:*+=<10.1pt>\dir{*}="p";p*\frm{-}
-,*++!UR{p},p+(.5,-.5)*\dir{*}="o",**\dir{-}
-,*+!UL{o},+(0,.81)*=<8.1pt>\dir{*}="c"
-,*\frm{-},*++!DL{c},"c"
-,{\ellipse r,={}},{\ellipse r,=(2){.}}
-,{\ellipse r,^=(3){.}},{\ellipse r,=(-2){}}
-,{\ellipse r,=(-1){.}}\endxy
-\end{code}
-$$\docode$$
-\displaycode
-
-The final variant uses the directions from $p$ and $c$ to the
-given <coord>. If <orient> is <empty> then the orientation is
-determined to give the shortest path along the ellipse. Specifying
-an <orient> of |^| or |_| will force the orientation, even if this
-means travelling `the long way' around the ellipse.
-For example, see next figure.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph{Alternative curves}
-In some cases the circular or elliptic curve can be replaced by a curve with
-different shape, having the same tangent directions at the end-points.
-When a full circle/ellipse is specified then one gets instead a closed
-curve constructed from 4 spline segments. Other variants use a single
-segment, 2 or 3 segments, or some portion of all 4 segments.
-Possibilities are given in the following table.
-%
-\begin{defs}
-|\ellipse~e ...{|<..>|}| & elliptical, as above \cr
-|\ellipse~q ...{|<..>|}| & parabolic segments \cr
-|\ellipse~c ...{|<..>|}| & cubic segments \cr
-|\ellipse~i ...{|<..>|}| & interpolating cubic \cr
-|\ellipse~p ...{|<..>|}| & cuspidal cubic \cr
-|\ellipse~c(|<num>|)...{|<..>|}|\kern-20pt &\kern20pt cubic segments,
- \hfil\break with ``looseness''\cr
-\end{defs}%
-%
-In the latter case the <num>, typically between 0 and 1, controls
-how soon the curve begins to bend away from the tangent direction.
-Smaller values give tighter curves --- 0 for straight lines ---
-with |~c| being the same as |~c(1)| and |~q| is |~c(.66667)|,
-that is <num>$={2\over3}$.
-
-The curve produced by the ``interpolating'' variant |~i| actually
-passes through the control point |"x"|, with slope parallel
-to the line $\overline{pc}$. Since the tangents at $p$ and $c$
-point toward |"x"| the curvature is quite gentle until near |"x"|
-where the curve bends rapidly, yet smoothly. This is obtained also
-by using |~c(1.33333)|, that is <num>$={4\over3}$. Since $|<num>|>1$
-the ``convex hull property'' does not hold; indeed the curve is entirely
-outside the convex hull of $p$, $c$ and |"x"|, apart from those points
-themselves.
-
-The `cuspidal' variant |~p| is equivalent to |~c(2)|. It exhibits a cusp.
-For $|<num>|>2$ the curve is so ``loose'' that it exhibits loops.
-(The author offers no guarantees on the usefulness of such curves
-for any particular purpose; however they do look nice.~\smiley)
-
-\begin{code}
-\xy 0;/r6pc/:*+\dir{*}="p",*+!UR{p},"p";
-p+(.5,-.5)*+\dir{*}="c",*+!UL{c}
-,"p"+(.825,-.25)="x"*\dir{+},"c"
-,{\xycompile{\ellipse`"x"{-}}}
-,{\xycompile{\ellipse~q`"x"^{.}}}
-,{\xycompile{\ellipse~c`"x"{.}}}
-,{\xycompile{\ellipse~c(.3)`"x"^{:}}}
-,{\xycompile{\ellipse~c(2.3)`"x"{-}}}
-,{\xycompile{\ellipse~i`"x"^{.}}}
-,{\xycompile{\ellipse~p`"x"^{-}}}
-\endxy
-\end{code}
-$$\hss\docode\hss$$
-\displaycode
-
-{\bf Hint: }
-When exploring to find the best location for the ``control-point''
-(e.g. the |"x"| in the above example), then use |\xycompile| as
-shown, changing the location outside of the compilation. This speeds up
-the reprocessing with the changed value.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Furthermore, the ellipses are not true ellipses, but are constructed from
-four B\'ezier cubic curves, one for each quadrant of the circle or ellipse.
-To do this it is sufficient to establish
-the control points for each cubic segment. This is straightforward, using
-the following ``magic number'', given a square basis such that the desired
-circle is the unit circle, or rectangular basis for which the ``unit circle''
-is the desired ellipse. Thus |~e| is equivalent to |~c(.5517847)|.
-
-\DOCMODE(
-\xydef@\arcmagic@@{0.5517847}
-\xylet@\arcmagic=\arcmagic@@
-\DOCMODE)
-
-This is the magic number, exactly given by
-${1\over12}\bigl(\sqrt{385}-13\bigr)$,
-that helps construct the B\'ezier cubic curve
-that best approximates a quarter-turn arc of a circle.
-It does so with remarkable accuracy,
-differing by at most .5\% of the radius at any angle;
-the average deviation along the whole quadrant being less than .13\%.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph{Avoiding overflows}
-If <dir>$_p$ and <dir>$_c$ are intended to be equal then the method of
-the previous paragraph should be used. However it may happen that
-``nearly parallel'' directions may be specified, perhaps by accident.
-There is then the possibility of ``numerical overflow'' or a ``division by
-zero'' error. The latter may be accompanied by a warning message:
-\begin{eqnarray*}
-&|Xy-pic Warning: division by 0 in |\\
-&\qquad |\intersect@, replaced by 50|
-\end{eqnarray*}
-This indicates that the number 50 has been used as the result of a
-division by zero. In many contexts this will produce an acceptable result.
-However it may lead to an ``overflow'' in other situations, or to drawing
-beyond the normal page boundary. This can be controlled using a <decor>
-of type |,{\zeroDivideLimit{|<num>|}},| prior to specifying the |\ellipse|.
-The value 50 will be replaced by <num> whenever a ``division by zero''
-would otherwise be encountered in an intersection calculation.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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 }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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@ }
-% \ellipseArc@ \xy@@{\doCircleArcs@}\endarc@ }
-\DOCMODE)
-
-The following methods calculate the centre of a circle using the
-perpendicular to the required angle at $p$ and the perpendicular bisector
-of the line $\overline{pc}$.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{radius known, end-points unknown}
-The language for these is a combination of most of that used above,
-but the interpretation of the <direction>s is different...
-%
-\begin{defs1}
-|\ellipse<|<radius>|>|<dir>$_1$|,|<orient>|,|<dir>$_2$|{..}|\cr
-|\ellipse<|<radius>|>|<dir>$_1$|,|<orient>|,=|<dir>$_2$|{..}|\cr
-\end{defs1}
-%
-where <radius> is one of the forms used above to describe a circle
-or ellipse. Not all of the ellipse will be typeset---only that arc
-starting with <dir>$_1$ as tangent vector, tracing via <orient>
-until the tangent points in direction <dir>$_2$.
-This effectively extends the notation used with |\cir|
-in ??g[xy.doc:objectlib.circles].
-Note that rotating a given <dir>$_i$ by 180$^\circ$ specifies
-a different arc on the same ellipse/circle.
-Reversing the <orient> no longer gives the complementary arc,
-but this complement rotated 180$^\circ$.
-%
-\begin{code}
-\xy 0;/r5pc/:*\dir{*}="p",*+!DR{p};
-p+(.5,-.5)*\dir{*}="c",*+!UL{c}**\dir{-}
-,"c",{\ellipse<15pt>_,=:a(45){=}}
- ,{\ellipse<>__,=:a(30){-}}
-,{\ellipse(1,.4){.}}
- ,{\ellipse(1,.4)_,=:a(120){-}}
-,{\ellipse(,.75){.}}
- ,{\ellipse(,.75)_,^,^{-}}\endxy
-\end{code}
-$$\docode$$
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph{parsing of directions}
-
-\DOCMODE(
-\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@(##1)##2@{\xy@{()}{\leave@}\parEllipse@{##1}{##2}}%
- \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@ }
-\DOCMODE)
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-When the starting direction is along the line $\overline{pc}$ then a
-straight segment is typeset, ignoring any requested ending direction.
-
-\DOCMODE(
-\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@ }%
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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@@{\leave@ \doCircleArcs@}\endarc@ }
- \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 }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%\begin{code}
-%\end{code}
-%$$\docode$$
-
-%\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xyarc.doc,v $
-% Revision 3.4 1997/05/18 01:13:24 ross
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/18 14:21:23 ross
-% Ross's version
-%
-% Revision 3.3.1.1 1996/12/18 08:50:58 ross
-% *** empty log message ***
-%
-% Revision 3.2 1995/09/19 18:20:20 ross
-% Bug fix release.
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% NEW for version 3.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/Master/texmf-dist/source/generic/xypic/xyarrow.doc b/Master/texmf-dist/source/generic/xypic/xyarrow.doc
deleted file mode 100644
index 203c877c451..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyarrow.doc
+++ /dev/null
@@ -1,1881 +0,0 @@
-%% $Id: xyarrow.doc,v 3.5 1997/05/28 13:05:01 krisrose Exp $
-%%
-%% Xy-pic ``Arrows and Paths'' feature.
-%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% 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-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{arrow}{Arrow and Path feature}{\stripRCS$Revision: 3.5 $}%
- {Kristoffer H.~Rose}{krisrose@brics.dk}%
- {BRICS/Computer Science, University of Aarhus, Ny Munkegade, building 540,
- DK--8000 Aarhus~C}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This feature provides \Xy-pic with the arrow paradigm presented
- in~\cite{R92:HowTPDAT}.
-
- \NOTE: |\PATH| command incompatibly changed for version 3.3 (the
- |\ar| command is unaffected).
-
- The basic concept introduced is the "path": a connection that
- "starts" from $c$ (the current object), "ends" at a specified object,
- and may be split into several "segments" between intermediate
- specified objects that can be individually labelled, change style,
- have breaks, etc.
-
- \S??[path] is about the |\PATH| primitive, including the syntax of
- paths, and \S??[arrow] is about the |\ar| customisation of paths to
- draw arrows using \Xy-pic directional objects.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Paths}
-??=[path]
-
-\DOCMODE(
-\message{path,}
-\DOCMODE)
-
- The fundamental commands of this feature are ??c![\PATH] and
- ??c![\afterPATH] that will parse the <path> according to the grammar
- in figure~??[f.path] with notes below.
-
-\begin{figure*}[tb]
-\begin{syntax}
-%
- \multispan{3}{{\tt\string\PATH} <path>\hfil}
- & interpret <path>
-\cr
-%
- \multispan{3}{{\tt\string\afterPATH\string{<decor>\string}} <path>\hfil}
- & interpret <path> and then run <decor>
-\cr
-\noalign{\nobreak\smallskip\nobreak\hrule\nobreak\smallskip\nobreak}
-%
- <path>
- &\iss & ??c![~] <action> |{| <stuff> |}| <path>
- & set ??!^[<action>] to <stuff>
-\cr
- &\orr & ??c![~] <which> |{| <labels> |}| <path>
- & add ??!^[<labels> prefix for some segments]
-\cr
- &\orr & ??c![~] |{| <stuff> |}| <path>
- & set ??!^[failure continuation] to <stuff>
-\cr
- &\orr & ??c!['] <segment> <path>
- & make ??!^[straight segment]
-\cr
- &\orr & ??c![`] <turn> <segment> <path>
- & make ??!^[turning segment]
-\cr
- &\orr & <segment>
- & make ??!^[last segment]
-\cr
-\noalign{\smallskip}
-%
- <turn>
- &\iss & <diag> <turnradius>
- & ??!^[1/4 turn] starting in <diag>
-\cr
- &\orr & <cir> <turnradius>
- & ??!^[explicit turn]
-\cr
-%
- <turnradius>
- &\iss & <empty>
- & use default turn radius
-\cr
- &\orr & ??c![/] <dimen>
- & set "turnradius" to <dimen>
-\cr
-\noalign{\smallskip}
-%
- <segment>
- &\iss & <path-pos> <slide> <labels>
- & ??!^[segment] with <slide> and <labels>
-\cr
-\noalign{\smallskip}
-%
- <slide>
- &\iss & <empty> \orr\ ??c![<] <dimen> ??c![>]
- & optional ??!^[slide]: <dimen> in the ``above'' direction
-\cr
-\noalign{\smallskip}
-%
- <labels>
- &\iss & ??c![^] <anchor> <it> <alias> <labels>
- & ??!^[label with <it>] "above" <anchor>
-\cr
- &\orr & ??c![_] <anchor> <it> <alias> <labels>
- & ??!^[label with <it>] "below" <anchor>
-\cr
- &\orr & ??c![|] <anchor> <it> <alias> <labels>
- & ??!^[break with <it>] at <anchor>
-\cr
- &\orr & <empty>
- & no more labels
-\cr
-\noalign{\smallskip}
-%
- <anchor>
- &\iss & ??c![-] <anchor> \orr\ <place>
- & label/break placed relative to the <place> where ??c![-] is a synonym
- for ??c![<>(.5)]
-\cr
-\noalign{\smallskip}
-%
- <it>
- &\iss & <digit>\orr<letter>\orr|{|<text>|}|\orr<cs>
- & <it> is a ??!^[default label]
-\cr
- &\orr & ??c![*] <object>
- & <it> is an <object>
-\cr
- &\orr & ??c![@] <dir>
- & <it> is a <dir>ectional
-\cr
- &\orr & |[| <shape> |]| <it>
- & use |[|<shape>|]| for <it>
-\cr
-\noalign{\smallskip}
-%
- <alias>
- &\iss & <empty> \orr\ ??c![=]|"|<id>|"|
- & optional ??!^[name for label object]
-\cr
-\end{syntax}
-\caption{\protect<path>s}
-??=[f.path]
-\end{figure*}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Parsing:}
-
- |\afterPATH| sets up |\afterPATH@| and initialise all the actions
- (see note~??[<action>] below) before invoking the actual <path>
- parser. |\PATH| is just a dummy interface.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- |\PATH@| is the parser for <path>: it eats the <path> until it fails
- and then calls the `failure continuation' which will eventually
- become |\empty| which ends the parsing. \HACK: The
- `|\ifPATHsingle@|' switch switches the <segment> parsing "off"; this
- is used by the graph feature to parse stand-alone <slide> <labels>
- sequences.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- |\PATHsetting@| just reads an <action> or <which> determining which
- action stuff to set and then does it---we treat the failure
- continuation as an action here even though it is not, strictly
- speaking. The four actions are explained in the appropriate notes
- below.
-
-\DOCMODE(
-\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 <action> 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@}
-\DOCMODE)
-
- Next the setup for straight segments including the last: they set
- |\PATHinit@@| to initialise, \ie, slide, |\PATHextra@@| to do what is
- needed after the ??c![=] action, and finally |\PATHpost@@| is set to
- any operations to be done after the entire segment is typeset but
- before the next is read. |\PATHcontinue@@| is used internally to
- distinguish the ordinary segments from the last.
-
-\DOCMODE(
-\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@}}
-\DOCMODE)
-
- Setup for turning segments is in note~??[turning segment].
-
- A <segment> is interpreted as follows after $p$ has been set to the
- previous end object, $c$ to the <pos> given at the start of the
- segment, and |\PATHslide@@| to the slide:
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\begin{enumerate}
-\item
- Expand |\PATHinit@@| (for straight segments this just sets up the
- direction and applies the <slide>).
-\item
- Expand |\PATHaction={|<stuff>|}| as set using |~={|<stuff>|}|.
-\item
- Sets |\PATHcontinue@@| to any continuation set with |~{|<stuff>|}|).
-\item
- Construct list of <labels> specified by the user through |~|<which>
- setup. Those applicable to the present segment are inserted before
- the user's <labels> in the sequence |<>=|.
-\item
- Store $p,c$ as "start","end" of segment.
-\item
- Interpret <labels> (see below), including the ones added by the
- |~|<when>\dots\ <setup>.
-\end{enumerate}
-%
- |\PATHsegment@@| performs this except the last two points:
-
-\DOCMODE(
-\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@@}
-\DOCMODE)
-
- |\PATHlabels@| parses all <labels> of a <segment>. This sets
- |\PATHlabelit@@| to the operation building the label in question.
- Then some parsing stores the tokens ??c![<>(.5)] for each ??c![-] in
- the <anchor> and finally passes control to the kernel <place> parser
- with these tokens as the head. This then in turn calls |\PATHit@|
- that parses <it> and applies the chosen operation. After the last we
- continue with the accumulated subsegment actions.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- The individual operations bound to |\PATHlabelit@@| are discussed as
- appropriate in the notes.
-
- After the last break and label we typeset the last piece of the
- connection.
-
-\DOCMODE(
-\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@@}
-\DOCMODE)
-
- \BUG: The order of the breaks determines the order of the
- subsegments. This is maybe a feature.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{notes}
-
-\note??=[<action>]
-%
- An <action> can be either of the characters |=/|. The associated
- <stuff> is saved and used to call
-$$
- ??c![\PATHaction]<action>|{|<stuff>|}|
-$$
- "before" and "after" each segment (including all <labels>) for
- ??c![=] and ??c![/], respectively.
-
- The default ??c![\PATHaction] macro just expands to ``??c![\POS]
- <stuff> |\relax|'' thus <stuff> should be of the form <pos> <decor>.
- The user can redefine this---in fact the ??c![\ar] command described
- in \S??[arrow] below is little more than a special ??c![\PATHaction]
- command and a clever defaulting mechanism.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Here is the default ??c![\PATHaction]:
-
-\DOCMODE(
-\xydef@\PATHaction@default#1#2{\xy@{PATHaction#1{#2}}{}\POS#2\relax}
-\xylet@\PATHaction=\PATHaction@default
-\DOCMODE)
-
- It is called using |\PATHaction@| to expand the action control
- sequences back to their <stuff> first:
-
-\DOCMODE(
-\xydef@\PATHaction@#1#2{\expandafter\PATHaction\expandafter#1\expandafter{#2}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[<labels> prefix for some segments]
-%
- It is possible to include a number of default <labels> "before" the
- <labels> of the actual <segment> are interpreted, using
- |~|<which>|{|<labels>|}|. The specified <which> determines for which
- segments the indicated <labels> should be prefixed as follows:
-$$
-\begin{tabular}{\otherbar c\otherbar l\otherbar}
-\hline
- <which> & applied to\dots \\
-\hline
- ??c![<] & next segment only \\
- ??c![>] & last segment only \\
- ??c![=] & every segment \\
-\hline
-\end{tabular}
-$$
- (when several apply to the same segment they are inserted in the
- sequence |<>+|).
-
- This is useful to draw connections with a `center marker' in
- particular with arrows, \eg, the `mapsto' example explained below can
- be changed into a `breakto' example: typing
-%
-\begin{code}
-\xy*+{0}\PATH
- ~={**\dir{-}}
- ~>{|>*\dir{>}}
- ~+{|*\dir{/}}
- '(10,1)*+{1} '(20,-2)*+{2} (30,0)*+{3}
-\endxy
-\end{code}
-\displaycode
-\noindent\unskip
-%
- will typeset
-$$
- \docode
-$$
- Note, however, that what goes into |~+{|\dots|}| is <labels> and thus
- not a <pos> -- it is not an action in the sense explained above.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[failure continuation]
-%
- Specifying |~{|<stuff>|}| will set the ``failure continuation'' to
- <stuff>. This will be inserted when the last <segment> is
- expected---it can even replace it or add more <segment>s, \ie,
-%
-\begin{code}
-\xy *+{0} \PATH ~={**\dir{-}}
- ~{'(20,-2)*+{2} (30,0)*+{3}} '(10,1)*+{1}
-\endxy
-\end{code}
-\displaycode
-%
- is equivalent to
-%
-\begin{code}
-\xy *+{0} \PATH ~={**\dir{-}}
- '(10,1)*+{1} '(20,-2)*+{2} (30,0)*+{3}
-\endxy
-\end{code}
-\displaycode
-%
- typesetting
-$$
- \docode
-$$
- because when |\endxy| is seen then the parser knows that the next
- symbol is neither of the characters |~'`| and hence that the last
- <segment> is to be expected. Instead, however, the failure
- continuation is inserted and parsed, and the <path> is finished by
- the inserted material.
-
- Failure continuations can be nested:
-%
-\begin{code}
-\xy *+{0} \PATH ~={**\dir{-}}
- ~{~{(30,0)*+{3}}
- '(20,-2)*+{2}} '(10,1)*+{1}
-\endxy
-\end{code}
-\displaycode
-%
- will also typeset the connected digits.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[straight segment]
-%
- A ``straight segment'' is interpreted as follows:
-%
-\begin{enumerate}
-\item
- First $p$ is set to the end object of the previous segment (for the
- first segment this is $c$ just before the path command) and $c$ is
- set to the <pos> starting the <segment>, and the current <slide> is
- applied.
-\item
- Then the |=| and |<| "segment actions" are expanded (in that
- sequence) and the |<| action is cleared. The resulting $p$ and $c$
- become the "start" and "end" object of the segment.
-\item
- Then all <labels> (starting with the ones defined as described in
- note~??[<labels> prefix for some segments] below).
-\end{enumerate}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- The code expanding the actions is part of the parsing above.
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[segment]
-%
- A "segment" is a part of a <path> between a previous and a new
- "target" given as a <path-pos>: normally this is just a <pos> as
- described in~\S??g[xy.doc:pos] but it can be changed to something
- else by changing the control sequence ??c![\PATHafterPOS] to be
- something other than ??c![\afterPOS].
-
-\DOCMODE(
-\xylet@\PATHafterPOS@default=\afterPOS
-\xylet@\PATHafterPOS=\PATHafterPOS@default
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[turning segment]??=[1/4 turn]??=[explicit turn]
-%
- A "turning" segment is one that does not go all the way to the given
- <pos> but only as far as required to make a turn towards it. The $c$
- is set to the actual turn object after a turning segment such that
- subsequent turning or other segments will start from there, in
- particular the last segment (which is always straight) can be used to
- finish a winding line.
-
- What the turn looks like is determined by the <turn> form:
-%
-\begin{description}
-
-\item[<empty>]
- Nothing between the ??c![`] and the <pos> is interpreted the same as
- giving just the <diag> last used "out" of a turn.
-
-\item[<diag>]
- Specifying a single <diag> $d$ is the same as specifying either of
- the <cir>cles $d$??c![^] or $d$??c![_], depending on whether the specified
- <pos> has its center `above' or `below' the line from $p$ in the
- <diag>onal direction.
-
-\item[<cir>]
- When a full explicit <cir>cle is available then the corresponding
- <cir>cle object is placed such that its ingoing direction is a
- continuation of a straight connection from $p$ and the outgoing
- direction points such that a following straight (or last) segment
- will connect it to $c$ (with the same slide).
-
-\end{description}
-%
- Here is an example using all forms of <turn>s:
-%
-\begin{code}
-\xy <4pc,0pc>:(0,0)
- *+\txt{base}="base"
- \PATH ~={**\dir{-}?>*\dir{>}}
- `l (-1,-1)*{A} ^a
- ` (1,-1)*{B} ^b
- `_ul (1, 0)*{C} ^c
- `ul^l "base" ^d
- "base" ^e
-\endxy
-\end{code}
-$$
-\docode
-$$
- was typeset by
-%
-\displaycode
-
- \BUG: Turns are only really resonable for paths that use straight
- lines like the one above.
-
- \NOTE: Always write a valid <pos> after a <turn>, otherwise any
- following ??c![^] or ??c![_] labels can confuse the parser. So if
- you intend the |^r| in |`^r| to be a label then write |`,^r|, using a
- dummy ??c![,] <pos>ition.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- We need to keep track of the current "in" and "out" <diag>
- directions as well as the current radius.
-
-\DOCMODE(
-\xydef@\PATHlastout@@{3}
-\DOCMODE)
-
- The startup routine is just a selection of the two kinds of <turn>:
-
-\DOCMODE(
-\xydef@\PATHturn@{\afterCIRorDIAG\PATHturn@cir\PATHturn@diag}
-\DOCMODE)
-
- In both cases the trick is to set up a |\PATHinit@@| method that
- typesets the right circle segment at the right location. The
- simplest one is when there is a full <cir> available because that
- should just be used directly. The only complication is that we
- forbid $180^\circ$ turns:
-
-\DOCMODE(
-\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@{<turn> cannot be half or full}{%
-You asked for a <turn>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@}
-\DOCMODE)
-
- "Procedure for <diag> turns": Builds initial part of |\PATHinit@@|
- that computes the missing "orient" and "out" from "in" and the $c$
- passed through the segment. This initial segment should set
- "orient" as follows:
-$$
- \xy <9mm,0mm>: <0mm,4mm>::
- ,(1,1) *+\dir{*}!D *!LU{p}
- ,(0,0);(4,4)**\dir{-}
- ?< *!/+\jot/\composite{{.}*!/+\jot/{.}*!/+2\jot/{.}}
- ?> *!/-\jot/\composite{{.}*!/-\jot/{.}*!/-2\jot/{.}}
- ?(.6)*!/1ex/\dir{>} *^!/-1ex/{|^|} *_!/-1ex/{|_|}
- \endxy
-$$
- \ie, as the sign of the inner product $\vec{pc} \cdot \hat{"in"}$,
- and set "out" as for the <cir>cle "in" "orient".
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- |\PATHturn@i| is where |\PATHinit@@| is defined to do the following:
-%
-\begin{itemize}
-
-\item[{??_[turni1]}]
- Setup the default "in", "orient", and "out" as defined by the call
- from the above macros. Set "radius" parameter to the current
- "turnradius" value. The commands in |\toks@| are run to do any
- last-minute fixing of the defaults.
-
-\item[{??_[turni2]}]
- The segment will leave $p$ in direction "in" and pretend to be
- meeting $c$ in direction "out". Thus the center of the <cir>cle
- object to be used for the actual <turn> object is located at the
- intersection of the line through $p+"radius"\hat{v}_"in"$ in
- direction $\vec{v}_"in"$ and the line through
- $c+"radius"\hat{v}_"out"$ in direction $\vec{v}_"out"$. Here we
- compute $p+R\hat{v}_"in"$ using $R="radius"$ if this is the initial
- turn and $R="radius"\pm"slide"$ if it is a continuation turn.
-
-\item[{??_[turni2b]}]
- Save $p$ and "base" for later.
-
-\item[{??_[turni3]}]
- Compute $c+"radius"\hat{v}_"out"$ and use the kernel |\intersect@|
- primitive to compute the turn circle segment center.
-
-\item[{??_[turni3b]}]
- However, if the intersection point lies on the `wrong side' of $p$,
- \ie, if $\vec{pc} \cdot "in"$ is negative, then we should not use the
- intersection point but the point as close to $p$ as possible because
- the connection from $p$ to the turn should at least have zero
- length---in fact we set it to have 8sp length to make sure that a
- sugsegment is typeset!
-
-\item[{??_[turni4]}]
- Modify "radius" to use for the actual circle segment by the "slide":
- either positively (for "orient" ??c![_]) or negatively (for "orient"
- ??c![^]), and drop the circle segment (bypassing |\cir| to use the
- internal settings from above).
-
-\item[{??_[turni5]}]
- Store in |\PATHpostpos@@| the true end of the circle segment and code
- to prevent the application of the "slide" for the start of the next
- <segment>.
-
-\item[{??_[turni6]}]
- Move $c$ to true beginning of the circle segment.
-
-\item[{??_[turni7]}]
- Restore saved $p$ and "base", and slide $p$ finally.
-
-\end{itemize}
-
-\DOCMODE(
-\xylet@\PATHpostpos@@=\empty
-
-\xydef@\PATHturn@i#1#2#3{%
- \DN@##1{\def\PATHinit@@{\xy@@{%
- \def\CIRin@@{#1}\def\CIRorient@@{#2}\def\CIRout@@{#3}%?*[turni1]
- \ifnum\CIRin@@=8 \let\CIRin@@=\PATHlastout@@ \fi
- \R@=\turnradius@
- ##1\relax}%
- \xy@@{\count@=\CIRin@@ %?*[turni2]
- \ifPATHomitslide@@ \dimen@=-\PATHslide@@
- \ABfromdiag@ \advance\X@p-\B@ \advance\Y@p\A@ \fi
- \enter@{\pfromthep@ \basefromthebase@}}%?*[turni2b]
- \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}%?*[turni3]
- \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@}%?*[turni3b]
- \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@@ %?*[turni4]
- \advance\R@\dimen@ii
- \drop@\literal@{\hbox\bgroup\cir@i}}%
- \xy@@{\X@p=\X@c \Y@p=\Y@c %?*[turni5]
- \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@@ %?*[turni6]
- \dimen@=\expandafter\ifx\CIRorient@@\CIRacw@-\fi\R@c
- \ABfromdiag@ \advance\X@c-\B@ \advance\Y@c\A@ \czeroEdge@}%
- \xy@@{\leave@ %?*[turni7]
- \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}
-\DOCMODE)
-
- The final macro takes care of the v2.6 format for changing
- "turnradius": using ??c![/]<dimen> right after the <turn>.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- This just stores a <diag> vector of the specified lenght in
- $|<|A|,|B|>|$ thus acting as an optimised version of
- |\Directionfromdiag@|:
-
-\DOCMODE(
-\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 <diag>?}\fi}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The default used for "turnradius" can be set by the operation
-%
-\begin{defs1}
- ??c![\turnradius] <add op> |{|<dimen>|}|\cr
-\end{defs1}
-\noindent\unskip
-%
- that works like the kernel ??c![\objectmargin] etc. commands; it defaults
- to 10pt.
-
-\DOCMODE(
-\xydef@\turnradius@{10pt}
-
-\xydef@\turnradius{\afterADDOP{\Addop@@\turnradius@}}
-\DOCMODE)
-
-\begin{exercise}
- Typeset
-\begin{code}
-\xy *+{A}*\cir<10pt>{}="me"
- \PATH `ul^ur,"me" "me" |>*:(1,-.25)\dir{>}
-\endxy
-\end{code}
-$$\docode$$
-%
- using <turn>s.
-%
-\answertext{Here is what the author did:??c[\cir]}
-\answercode
-\answertext\displaycode
-\answertext{The trick is getting the arrow head right: the |:| modifier to
- the explicit {\tt\string\dir} <object> does that.}
-\end{exercise}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[last segment]
-%
- The last segment is exactly as a straight one except that the ??c![>]
- action (if any) is executed (and cleared) just after the ??c![<]
- action.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- (The code implementing this is merged with the parsing.)
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[slide]
-%
- ``Sliding'' a segment means moving each of the $p,c$ objects in the
- direction perpendicular to the current direction at each.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- (The code implementing this is merged with the parsing, using the
- |\PATHslide@@| control sequence to hold the current slide.)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[label with <it>]
-%
- Labelling means that <it> is dropped relative to the current segment
- using a ??c![?] <pos>ition. This thus depends on the user setting up
- a connection with a ??c![**] <pos> as one of the actions---typically
- the~??c![=] action is used for this (see note~??[straight segment]
- for the details). The only difference between ??c![^] and ??c![_] is
- that they shift the label in the ??c![^] respectively ??c![_]
- direction; for straight segments it is placed in the ``superscript''
- or ``subscript'' position.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The operations used by |\PATHlabels@| to put labels above and below
- (with ??c![^] and ??c![_]) are trivial, taking two arguments and
- placing the label immediately; for convenience the |\drop| head are
- named separately such that they may be redefined:
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- These emulate the effect of the <modifier>s |!C|
- |+<|2"labelmargin"|>| <perp> |!P| <unperp> where <perp>,<unperp> are
- |^|,|_| for |^|-labels and |_|,|^| for |_|-labels. The last hack
- using |\lastobjectbox@| aims at both setting that right and setting
- the label as an object (such that modifiers take effect) even though
- its placement is peculiar.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Labels will be separated from the connection by the "label"\-"margin"
- that you can set with the operation
-%
-\begin{defs1}
- ??c![\labelmargin] <add op> |{|<dimen>|}|
-\end{defs1}
-\noindent\unskip
-%
- that works like the kernel ??c![\objectmargin] command; in fact
- "labelmargin" defaults to use "objectmargin" if not set.
-
-\DOCMODE(
-\xylet@\labelmargin@=\objectmargin@
-
-\xydef@\labelmargin{\afterADDOP{\Addop@@\labelmargin@}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[break with <it>]??=[piece]
-%
- Breaking means to ``slice a hole'' in the connection and insert <it>
- there. This is realized by typesetting the connection in question in
- "subsegments", one leading to the break and one continuing after the
- break as described in notes~??[<action>] and~??[straight segment].
-
- The special control sequence ??c![\hole] is provided to make it easy to
- make an empty break.
-
-\DOCMODE(
-\xydef@\hole{\hbox{\dimen@=\objectmargin@ \kern2\dimen@
- \vrule height\dimen@ depth\dimen@ width\z@}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Subsegments are typeset using the `|\Cbreak@@|' method.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[default label]
-%
- Unless <it> is a full-fledged <object> (by using the ??c![*] form),
- it is typeset using a ??c![\labelbox] object (initially similar to
- ??c![\objectbox] of basic \Xy-pic but using ??c![\labelstyle] for the
- style).
-
- \REMARK: You can only omit the |{}|s around single letters, digits,
- and control sequences.
-
-\DOCMODE(
-\xylet@\labelstyle=\scriptstyle
-\xydef@\labelbox#1{\hbox{$\m@th\labelstyle{#1}$}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[name for label object]
-%
- A label is an object like any other in the \Xy-picture. Inserting an
- <alias> ??c![=]|"|<id>|"| saves the label object as |"|<id>|"| for
- later reference.
-
-\begin{exercise}
- Typeset
-%
-\begin{code}
-\xy(0,0)
- \ar @{-->} (30,7) ^A="a"
- \POS(10,12)*+\txt{label} \ar "a"
-\endxy
-\end{code}
-$$\docode$$
-%
-\answercode
-\answertext{The author did \displaycode}
-\end{exercise}
-
-\DOCMODE(
-\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
-
-%{\xyuncatcodes \gdef\next#1{\POS!C="#1"\relax}}
-\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@}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{notes}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Arrows}
-??=[arrow]
-
-\begin{figure*}[tb]
-\vfil
-\begin{syntax}
-%
- \multispan{3}{{\tt\string\ar} <arrow> <path>\hfil}
- & make <arrow> along <path>
-\cr
-\noalign{\nobreak\smallskip\nobreak\hrule\nobreak\smallskip\nobreak}
-%
- <arrow>
- &\iss & <form>\star
- & <arrow> has the <form>s
-\cr
-\noalign{\smallskip}
-%
- <form>
- &\iss & ??c![@] <variant>
- & use <variant> of arrow
-\cr
- &\orr & ??c![@] <variant> |{| <tip> |}|
- & ??!^[build arrow] using <variant> of a standard stem and <tip> for
- the head
-\cr
- &\orr & ??c![@] <variant> |{| <tip> <conn> <tip> |}|
- & ??!^[build arrow] using <variant> of <tip>, <conn>, <tip>
- as arrow tail, stem, and head (in that order)
-\cr
- &\orr & ??c![@] <connchar>
- & change stem to the indicated <connchar>
-\cr
- &\orr & ??c![@!]
- & dash the arrow stem by doubling it
-\cr
- &\orr & ??c![@/] <direction> <dist> |/|
- & ??!^[curve] arrow the <dist>ance towards <direction>
-\cr
- &\orr & ??c![@(] <direction> |,| <direction> |)|
- & curve to fit with ??!^[in-out directions]
-\cr
- &\orr & ??c![@`] |{| <control point list> |}|
- & ??!^[curve setup] with explicit control points
-\cr
- &\orr & |@[| <shape> |]|
- & add |[|<shape>|]| to ??!^[object <modifier>s] for all objects
-\cr
- &\orr & ??c![@*] |{| <modifier>\star\ |}|
- & add ??!^[object <modifier>s] for all objects
-\cr
- &\orr & ??c![@<] <dimen> |>|
- & ??!^[slide arrow] the <dimen>
-\cr
- &\orr & ??c![|] <anchor> <it>
- & break each segment at <anchor> with <it>
-\cr
- &\orr & ??c![^] <anchor> <it> \orr\ ??c![_] <anchor> <it>
- & label each segment at <anchor> with <it>
-\cr
- &\orr & ??c![@?]
- & ??!^[reverse meaning of above and below]
-\cr
-\noalign{\smallskip}
-%
- <variant>
- &\iss & <empty> \orr\ ??c![^] \orr\ ??c![_] & \cr
- & & \orr\ ??c![0] \orr\ ??c![1] \orr\ ??c![2] \orr\ ??c![3]
- & <variant>: plain, above, below, double, or triple
-\cr
-\noalign{\smallskip}
-%
- <tip>
- &\iss & <tipchar>\star
- & directional named as the sequence of <tipchar>s
-\cr
- &\orr & <dir>
- & ??!^[any <dir>ectional]
-\cr
-\noalign{\smallskip}
-%
- <tipchar>
- &\iss & |<|\orr|>|\orr|(|\orr|)|\orr||||\orr|'|\orr|`|\orr|+|\orr|/|
- & recognised tip characters
-\cr
- &\orr & <letter> \orr\ <space>
- & more tip characters
-\cr
-\noalign{\smallskip}
-%
- <conn>
- &\iss & <connchar>\star
- & directional named as the sequence of <connchar>s
-\cr
- &\orr & <dir>
- & ??!^[any <dir>ectional]
-\cr
-\noalign{\smallskip}
-%
- <connchar>
- &\iss & |-|\orr|.|\orr|~|\orr|=|\orr|:|
- & recognised connector characters
-\cr
-\end{syntax}
-\caption{\protect<arrow>s.}??=[f.arrow]
-\vfil
-\end{figure*}
-
-\DOCMODE(
-\message{\string\ar,}
-\DOCMODE)
-
- Arrows are paths with a particularly easy syntax for setting up
- arrows with "tail", "stem", and "head" in the style
- of~\cite{R92:HowTPDAT}. This is provided by a single <decor>ation
- the syntax of which is described in figure~??[f.arrow] (with the
- added convention that a raised `\star' means 0 or more repetitions of
- the preceeding nonterminal).
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Parsing:}
-
- The ??c![\ar] command effectively translates the <arrow> into a
- ??c![\PATH] command that initialises the tail, stem, and head of it as
- required to get the desired <arrow>.
-
- The translation of the <arrow> is saved in the following variables:
-
-\DOCMODE(
-\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
-\DOCMODE)
-
- ??c![\ar] stores the defaults; it loads an intermediate command to
- avoid problems when used as first command in compiled matrix
- entry\dots
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- |\ar@| is where we parse the sequence of <form>s and continue with
- typesetting the arrow afterwards.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- \NOTE: Makes use of the "new compilation principle" to parse a
- <place> vacuously\dots
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- |\ar@form| handles one <form>:
-
-\DOCMODE(
-\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 <form>ation (\meaning\next)}{}%
- \xyFN@\ar@}
-\DOCMODE)
-
- |\ar@i| sets the remaining defaults and then allows |\ar@ii|-|iv| to
- pick up any tail, stem, and head using a {|$|} as terminator.%$
-
-\DOCMODE(
-\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 <arrow>: \meaning\next\space not valid}{}\fi \next@}
-\DOCMODE)
-
- |\ar@x| is the final macro that passes control to the <path>
- interpreter. It is a bit clumsy because we must pass the right
- character tokens; it could definitely be more efficient by calling
- <path> internals directly\dots
-
-\DOCMODE(
-\xydef@\ar@x{%
- \let\arsavedPATHafterPOS@@=\PATHafterPOS \let\PATHafterPOS=\arafterPOS@
- \toks@={\ar@PATH}%
- \expandafter\addtotoks@\expandafter{\expandafter{\artail@@}}%#1
- \expandafter\addtotoks@\expandafter{\expandafter{\arstem@@}}%#2
- \expandafter\addtotoks@\expandafter{\expandafter{\arstemprefix@@}}%#3
- \expandafter\addtotoks@\expandafter{\expandafter{\arhead@@}}%#4
- \expandafter\addtotoks@\expandafter{\expandafter{\armodifiers@@}}%#5
- \expandafter\addtotoks@\expandafter{\expandafter{\arinit@@}}%#6
- \expandafter\addtotoks@\expandafter{\expandafter{\arexit@@}}%#7
- \expandafter\addtotoks@\expandafter{\expandafter{\arlabels@@}}%#8
- \addtotoks@{\afterar@@}%#9
- \expandafter\DNii@\expandafter{\the\toks@}\toks@={}%
-%
-%{\let\x=\expandafter \x\x\x\DNii@\x\x\x{\nextii@}\W@{RUN: \codeof\nextii@}}%
-%
- \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
-\DOCMODE)
-
- <tip>s and <conn>ectors are interpreted by these that leave any
- <variant> in |\toks@ii| and the sequence of <tipchar>s or <connchar>s
- characters in |\toks@|:
-
- The work is really done in |\arcomponent@| that builds |\toks@|
- with something conforming to the |\arcomponenttype@@| and then
- passes control to |\arcomponent@@|:
-
-\DOCMODE(
-\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@@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{notescontd}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[build arrow]
-
- Building an <arrow> is simply using the specified directionals (using
- ??c![\dir] of~\S??g[xy.doc:objectlib.directionals]) to build a path:
- the first <tip> becomes the "??w![arrow tail]" of the arrow, the
- <conn>ection in the middle becomes the "??w![arrow stem]", and the
- second <tip> becomes the "??w![arrow head]". If a <variant> is given
- before the |{| then that variant ??c![\dir] is used for all three.
- For example,
-%
-\begin{code}
-\xy\ar @^{(->} (20,7)\endxy
-\end{code}
-\displaycode
-%
- typesets
-%
-$$\docode$$
-
-\begin{exercise}
- Typeset these arrows:
-%
-\begin{code}
-\xy ;<1pc,0pc>:
- \POS(0,0)*+{A}
- \ar +(-2,3)*+{A'}*\cir{}
- \ar @2 +( 0,3)*+{A''}*\cir{}
- \ar @3 +( 2,3)*+{A'''}*\cir{}
- \POS(6,0)*+{B}
- \ar @1{||.>>} +(-2,3)*+{B'}*\cir{}
- \ar @2{||.>>} +( 0,3)*+{B''}*\cir{}
- \ar @3{||.>>} +( 2,3)*+{B'''}*\cir{}
-\endxy
-\end{code}
-$$\docode$$
-%
-\answertext{Here is the entire \Xy-picture of the exercise:}
-\answercode
-\answertext\displaycode
-\answertext{The first batch use the default |{->}| specification.}
-\end{exercise}
-
- The above is a flexible scheme when used in conjunction with the
- kernel ??c![\newdir] to define all sorts of arrowheads and -tails. For
- example,
-%
-\begin{code}
-\newdir{|>}{!/4.5pt/\dir{|}
- *:(1,-.2)\dir^{>}
- *:(1,+.2)\dir_{>}}
-\end{code}
-\displaycode
-\gdocode
-%
- defines a new arrow tip that makes
-%
-\begin{code}
-\xy (0,0)*+{A}
- \ar @{=|>} (20,3)*+{B}
-\endxy
-\end{code}
-\displaycode
-%
- typeset
-%
-$$\docode$$
-%
- Notice that the fact that the directional uses only <tipchar>
- characters means that it blends naturally with the existing tips.
-
-\begin{exercise}
- Often tips used as `tails' have their ink on the wrong side of the
- point where they are placed. Fortunately space is also a <tipchar>
- so we can define |\dir{ >}| to generate a `tail' arrow. Do this such
- that
-%
-\begin{code}
-\xy (0,0)*+{A}="a", (20,3)*+{B}="b"
- \ar @{>->} "a";"b" < 2pt>
- \ar @{ >->} "a";"b" <-2pt>
-\endxy
-\end{code}
-\displaycode
-%
- typesets
-%
-$$
- \newdir{ >}{{}*!/-5pt/\dir{>}}
- \docode
-$$
-%
-\begin{code}
-\newdir{ >}{{}*!/-5pt/\dir{>}}
-\end{code}
-\answercode
-\answertext{The author used \displaycode}
-\end{exercise}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[any <dir>ectional]
-
- Specifying a <dir> as a <tip> or <conn> means that ??c![\dir]<dir> is
- used for that <tip> or <conn>. For example,
-%
-\begin{code}
-\xy\ar @{<^{|}>} (20,7)\endxy
-\end{code}
-\displaycode
-%
- typesets
-%
-$$\docode$$
-%
- When using this you must specify a |{}| dummy <dir>ectional in order
- to ignore one of the tail, stem, or tip components, \eg,
-%
-\begin{code}
-\xy\ar @{{}{+}>} (20,7)\endxy
-\end{code}
-\displaycode
-%
- typesets
-%
-$$\docode$$
-%
- In particular ??c![*]<object> is a <dir> so any <object> can be used
- for either of the tail, stem, or head component:
-%
-\begin{code}
-\xy\ar @{*{x}*{y}*{z}} (20,7)\endxy
-\end{code}
-\displaycode
-%
- typesets
-%
-$$\docode$$
-%
- \NOTE: A |*| introduces an <object> whereas the directional
- `$\xy*+!<0pt,-\jot>\dir{*}\endxy$' is typeset by the <dir> |{*}|.
-
-\begin{exercise}
- Typeset
-\begin{code}
-\xy
- \ar @{>>*\composite{\dir{x}*\dir{+}}<<}
- (20,7)
-\endxy
-\end{code}
-$$\docode$$
- using only one |\ar| command.
-%
-\answertext{The author used}
-\answercode
-\answertext\displaycode
-\end{exercise}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[curve]
-%
- "Curving" the arrow using $??c![/]d\ell|/|$, where $d$ is a
- <direction> and $\ell$ a <dimen>sion, makes the stem a curve which is
- similar to a straight line but has had it's center point `dragged'
- the distance~$\ell$ in~$d$:
-%
-\begin{code}
-\xy
- \POS (0,10) *\cir<2pt>{} ="a"
- , (20,-10)*\cir<2pt>{} ="b"
- \POS"a" \ar @/^1ex/ "b"|\uparrow
- \POS"a" \ar @/_1ex/ "b"|\downarrow
-%
- \POS (20,10) *\cir<2pt>{} ="a"
- , (40,-10)*\cir<2pt>{} ="b"
- \POS"a" \ar @/u1ex/ "b"|u
- \POS"a" \ar @/d1ex/ "b"|d
-\endxy
-\end{code}
-$$\docode$$
-%
- was typeset by
-%
-\displaycode
-%
- $\ell$ defaults to |.5pc| if omitted.
-
- This is really just a shorthand for curving using the more general
- form described next: $??c![@/]d\ell|/|$ is the same as |@`{{**{}
- ?+/|$d~2\ell~$|/}}| which makes the (quadratic) curve pass through
- the point defined by the <pos> |**{} ?+/|$d\ell$|/|.
-
-\DOCMODE(
-\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@}}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[in-out directions]
-%
- Using ??c![@(]$d_2$|,|$d_2$|)| where $d_1,d_2$ are simple
- <direction>s (as described in note~??g[xy.doc:<direction>] except it
- is not possible to use |()|s) will typeset the arrow curved such that
- it leaves the source in direction $d_1$ and enters the target from
- direction~$d_2$.
-
-\begin{exercise}
- Typeset
-%
-\begin{code}
-\xy *{\circ}="b" \ar@(ur,ul) c
- \ar@{.>}@(dr,ul) (20,0)*{\bullet}
-\endxy
-\end{code}
-$$\docode$$
-\answercode
-\answertext{The author used \displaycode\noindent Note that it is essential
- that the curving specification comes after the arrow style.}
-\end{exercise}
-
-\DOCMODE(
-{\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@}
-\DOCMODE)
-
- \TODO: implement this efficiently and properly get rid of the no-|()|
- restriction!
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[curve setup]
-%
- The final curve form is the most general one: |@`{|<control point
- lists>|}| sets the control points explicitly to the ones in the
- <control point lists> (where they should be separated by~|,|). See
- the curve extension described in~\S??g[:curve] for the way the
- control points are used; when the control points list is parsed $p$
- is the source and $c$ the target of the arrow.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Curving simply uses ??c![\crvi] instead of ??c![\dir]. The
- only tricky bit is to put the control points on the stack
- right.
-
-\DOCMODE(
-\xydef@\ar@curve{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\ar@curve}%gobble spaces
- \else\ifx \bgroup\next \let\next@=\ar@curve@load
- \else\ifx "\next \DN@"##1"{\ar@curve@{"##1"}}%
- \else \xyerror@{@= <form> must be followed by \string"<id>\string" or
- {<control point list>}}{}%
- \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}
-\DOCMODE)
-
- \TODO: The parsing is trivial and should be extended to include more
- exotic control point forms.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[object <modifier>s]
-%
- |@[|\dots|]| and |@*{|\dots|}| formations define what object
- <modifier>s should be used when building objects that are part of the
- arrow. This is mostly useful in conjunction with extensions that
- define additional |[|<shape>|]| modifiers, \eg, if a |[red]|
- <modifier> changes the colour of an object to red then |@[red]|
- will make the entire arrow red; similarly if it is desired to make
- and entire arrow invisible then |@*{i}| can be used.
-
-\DOCMODE(
-\xydef@\ar@modifiers#1{%
- \expandafter\def\expandafter\armodifiers@@\expandafter{\armodifiers@@#1}%
- \xyFN@\ar@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[slide arrow]
-%
- ??c![@<]$D$|>| will slide (each segment of) the arrow the dimension $D$
- as explained in note~??[slide].
-
-\DOCMODE(
-{\xyuncatcodes \catcode`\#=6 \catcode`\@=11 %
- \gdef\next<#1>{\def\arafterPOS@@{<#1>}\xyFN@\ar@}}
-\xylet@\ar@slide=\next
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[reverse meaning of above and below]
-%
- ??c![@?] reverse the meaning of `above' and `below' for this particular
- arrow.
-
-\DOCMODE(
-\xydef@\ar@upsidedown{\let\next=\PATHlabelabove@@
- \let\PATHlabelabove@@=\PATHlabelbelow@@ \let\PATHlabelbelow@@=\next}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{notescontd}
-
- All the features of <path>s described above are available for arrows.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection*{End \& log}
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xyarrow.doc,v $
-% Revision 3.5 1997/05/28 13:05:01 krisrose
-% Fixed missing breaks bug.
-%
-% Revision 3.4 1997/05/18 01:14:25 krisrose
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/19 03:31:56 krisrose
-% Maintenance release
-%
-% Revision 3.2 1995/09/19 18:22:27 kris
-% Bug fix 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.11 1994/07/05 10:37:32 kris
-% Third 3beta release [bug fixes].
-% Experimental graph feature included (for ECCT-94 presentation).
-%
-% Revision 2.10 1994/06/15 12:55:07 kris
-% Second 3beta release: bug fixes.
-%
-% 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 10:25:18 kris
-% Release 3alpha.
-%
-% Revision 2.6.9.1 1994/03/07 04:22:46 kris
-% Last internal 3alpha and pre-2.7 release.
-%
-% NEW for version 2.7 based of path and arrow code in xypic.doc 2.6.1.1.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs how we are formatted:
-% Local Variables:
-% mode:latex
-% fill-prefix:"\t"
-% fill-column:77
-% paragraph-separate:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% paragraph-start:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xycmactex.doc b/Master/texmf-dist/source/generic/xypic/xycmactex.doc
deleted file mode 100644
index 5e156789e39..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xycmactex.doc
+++ /dev/null
@@ -1,71 +0,0 @@
-%% $Id: xycmactex.doc,v 3.3 1996/12/18 08:54:25 ross Exp $
-%%
-%% Xy-pic ``CMacTeX'' driver interface option.
-%% Copyright (c) 1995-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{cmactex}{CMacTeX driver}{\stripRCS$Revision: 3.3 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Thomas Kiffe's {CMac\TeX} application uses \dvips\ as its dvi-driver.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\DOCMODE(
-\xyrequire{dvips}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xycmactex.doc,v $
-% Revision 3.3 1996/12/18 08:54:25 ross
-% no changes
-%
-% Revision 3.1 1995/09/05 20:28:57 ross
-% Releasing version 3.1!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% NEW for version 3.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xycmtip.doc b/Master/texmf-dist/source/generic/xypic/xycmtip.doc
deleted file mode 100644
index 5f337fb6c15..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xycmtip.doc
+++ /dev/null
@@ -1,93 +0,0 @@
-%% $Id: xycmtip.doc,v 3.3 1996/12/19 03:31:56 krisrose Exp $
-%%
-%% Xy-pic ``Computer Modern tips'' extension.
-%% Copyright (c) 1992-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{cmtip}{Computer Modern tip extension}{\stripRCS$Revision: 3.3 $}%
- {Kristoffer H.~Rose}{krisrose@brics.dk}%
- {BRICS/Computer Science, University of Aarhus, Ny Munkegade, building 540,
- DK--8000 Aarhus~C}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This extension is a dummy that merely loads the `tips' extension and
- defines the obsolete ??c![\UseComputerModernTips] and
- ??c![\NoComputerModernTips] selection commands.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\subsection{Fonts}
-
- Load `tips'; the default is |cm| at |10| point so all is well.
-
-\DOCMODE(
-\xyrequire{tips}\xycatcodes
-\DOCMODE)
-
- Define the obsolete selection commands.
-
-\DOCMODE(
-\xydef@\UseComputerModernTips{\SelectTips{cm}{10}\UseTips}
-\xydef@\NoComputerModernTips{\NoTips}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{End \& log}
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xycmtip.doc,v $
-% 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.6 1993/10/21 20:36:09 kris
-% NEW file to go in version 2.7!
-%
-% Extracted from xypic.doc 2.6.1.1.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs how we are formatted:
-% Local Variables:
-% mode:latex
-% fill-prefix:"\t"
-% fill-column:77
-% paragraph-separate:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% paragraph-start:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xycolor.doc b/Master/texmf-dist/source/generic/xypic/xycolor.doc
deleted file mode 100644
index dfbb4d05b4f..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xycolor.doc
+++ /dev/null
@@ -1,349 +0,0 @@
-%% $Id: xycolor.doc,v 3.3 1996/12/19 03:50:08 ross Exp $
-%%
-%% Xy-pic ``Colour extension'' option.
-%% Copyright (c) 1993-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{color}{Colour extension}{\stripRCS$Revision: 3.3 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This extension provides the ability to request that any object be displayed
-in a particular colour.
-
-It requires a suitable `driver' option to provide the necessary |\special|
-commands to implement the effects. Thus
-$$
-\xy
- *+\txt<.8\hsize>{Using this extension will have no effect on the output
- unless used with a dvi-driver that explicitly supports it.}
- *\frm{-}
-\endxy
-$$
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-All effects defined in the |color| extension can be implemented using most
-\PS\ <driver>s, and some non-\PS\ ones, loaded using |\xyoption{xyps}|.
-This file provides `generic' code which is known to work correctly with
-most drivers. For driver-specific variations, consult the appropriate
-<driver> file.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%\paragraph*{Colour}
-Colours are specified as a <shape> modifier which gives the name of the
-colour requested. It is applied to the whole of the current <object>
-whether this be text, an \Xy-pic line, curve or arrow-tip, or a composite
-object such as a matrix or the complete picture. However some DVI drivers
-may not be able to support the colour in all of these cases.
-%
-\begin{defs}
-|[|<colour name>|]| & use named colour\cr
-\noalign{\smallskip}
-??c![\newxycolor]|{|<name>|}{|<code>|}|\kern-20pt &\kern25pt
- define colour \cr
-??c![\UseCrayolaColors] & load colour names \cr
-\end{defs}
-%
-If the DVI-driver cannot support colour then a request for colour
-only produces a warning message in the log file. After two such
-messages subsequent requests are ignored completely.
-
-\DOCMODE(
-\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.}}%
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-There are two methods, perhaps used simultaneously, for handling requests
-for colour. The |\xylocalColor@| is the normal method, colouring whatever
-objects \TeX\ typesets from fonts. The more specialized |\xycolor@| is used
-with the \PS\ back-end. This is necessary since some <driver>s assume that
-the current colour should be `black' when the contents of a |\special| is
-interpreted, e.g. within \PS.
-
-Thus a <driver> which supports both colour and \PS\ must define a method
-to handle |\xylocalColor@| but should leave alone |\xycolor@|. The latter
-method will be adjusted appropriately when a \PS\ <driver> is installed.
-
-\DOCMODE(
-\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\xycolor@@=\xyNoColor@
- \let\xycolorwarning@=\xycolorwarning@@ }
-\xylet@\UnloadColor@@=\UnloadColor@
-
-\xyaddunsupport{color}{\UnloadColor@@\relax}
-\DOCMODE)
-
-This next macro is to inherit a default colour from the surrounding
-document, perhaps using one already defined by \LaTeXe
-
-\DOCMODE(
-\ifx\current@color\undefined \xydef@\xybasecolor@{}%
-\else \def\xybasecolor@{\current@color}\fi
-
-%\xydef@\xycmath@{\hbox\bgroup\dimen@=.55ex \checkxycolor@ \xyinside@}
-%\xydef@\xycnomath@{\hbox\bgroup\dimen@=\z@ \checkxycolor@ \xyinside@}
-
-%\xydef@\checkxycolor@{\ifx\xybasecolor@\empty\else
-% \expandafter\imposexycolor@\fi}
-%\xydef@\imposexycolor@{\xylocalColor@}
-\DOCMODE)
-
-A commonly used method is to maintain a colour-stack.
-The following commands are for use with such a setup, however they should
-only be called from code installed from a <driver>-file. Different drivers
-may do things differently; e.g. |dvips| uses a single |\special| via:
-|\def\xycolor@push@@#1{\special{color push #1}}|, but Textures uses two:
-|\xydef@\xycolor@push#1{\special{color push}\special{color #1}}|.
-Since the colour-stack idea was proposed by Tomas Rokicki,the |dvips| method
-is the default behaviour.
-
-\DOCMODE(
-\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@@
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Named colours and colour models}
-
-New colour names are created with |\newxycolor|, taking two arguments.
-Firstly a name for the colour is given, followed by the code which will
-ultimately be passed to the output device in order to specify the colour.
-If the current driver cannot support colour, or grayscale shading, then
-the new name will be recognised, but ignored during typesetting.
-
-\DOCMODE(
-\xydef@\newxycolor#1#2{\newxyColor{#1}{}{}{#2}{}}
-\xydef@\newxyColor#1#2#3#4{\newxycolor@{#1}{#2}{#3}{#4}{}}
-\DOCMODE)
-
-For \PS\ devices, the \Xy-ps \PS\ dictionary defines operators |rgb|,
-|cmyk| and |gray| corresponding to the standard RGB and CMYK colour models
-and grayscale shadings.
-Colours and shades are described as:
-$r\;g\;b$ |rgb| or $c\;m\;y\;k$ |cmyk| or $s$ |gray|, where the parameters
-are numbers in the range $0\le r,g,b,c,m,y,k,s\le 1$.
-The operators link to the built-in colour models
- or, in the case of |cmyk| for earlier versions of \PS, give a simple
-emulation in terms of the RGB model.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Existing color names can be overridden using |\newxycolor@#1#2\relax|.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-Standard colour names which are defined automatically correspond
-to the three primaries |red|, |green|, |blue| and their complements
-|cyan|, |magenta|, |yellow| as well as three extreme grayscale shades
-|black|, |white|, |gray|.
-
-\DOCMODE(
-\xydef@\xystandardcolors@{%
-% \newxycolor@{black}{1.}{gray}{}\relax % Textures reverses gray-scales
-% \newxycolor@{white}{0.}{gray}{}\relax %
-% \newxycolor@{black}{0.}{gray}{}\relax % This is normal for PostScript
-% \newxycolor@{white}{1.}{gray}{}\relax %
- \newxycolor@{black}{0. 0. 0.}{rgb}{}\relax % avoid the hassles.
- \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 }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\NOTE: The driver file must call |\xystandardcolors@| before these colours
-become accessible. This is to allow any <driver>-specific definitions
-to be active when these colours are defined.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Saving colour and styles}
-%
-When styles are saved using |[=|<word>|]|, see~??c[[=],
-then the current colour setting (if any) is saved also.
-Subsequent use of |[|<word>|]| recovers the colour and accompanying
-line-style settings.
-
-Further colour names are defined by the command |\UseCrayolaColours| that
-loads the |crayon| option, in which more colours are defined. Consult the
-file |xyps-col.doc| for the colours and their specifications in the RGB
-or CMYK models.
-
-\DOCMODE(
-\xydef@\UseCrayolaColors{\xyrequire{crayon}\xyuncatcodes}%
-% \xyinputorelse@{xyps-col}{\xyerror@{Could not load xyps-col}{}}}
-\DOCMODE)
-
-\DOCMODE1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%\subparagraph*{xyps-col.tex:}
-\subparagraph*{xycrayon.tex:}
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%\subsubsection{{\tt xyps-col.doc}:}
-\subsubsection{{\tt xycrayon.doc}:}
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%\inputdoc!{xyps-col.doc}
-\inputdoc!{xycrayon.doc}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{\PS\ colour}
-%
-When \PS\ driver support is available, the method for handling colour
-within diagrams may be different. The reason for this is that some
-dvi-drivers reset the colour to black before placing the contents of the
-|\special|. To counter this, the \PS\ code maintains its own colour-stack.
-Support is established within a separate file |xyps-c.tex|, loaded from
-the appropriate <driver>-files.
-
-\DOCMODE(
-\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
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xycolor.doc,v $
-% Revision 3.3 1996/12/19 03:50:08 ross
-% Maintenance release.
-%
-% Revision 3.3 1996/12/18 08:56:49 ross
-% minor updates
-%
-% Revision 3.2 1995/09/19 18:20:20 ross
-% Bug fix release.
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.14 1995/07/06 02:56:02 kris
-% Buglets...
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% Revision 2.10 1994/06/15 12:46:03 ross
-% Second release 3beta.
-% Colour and line style saving works; label colouring bug fixed.
-%
-% Revision 2.9 1994/06/09 14:39:49 ross
-% Release 3beta.
-%
-% NEW for version 2.9 by by Ross Moore.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xycrayon.doc b/Master/texmf-dist/source/generic/xypic/xycrayon.doc
deleted file mode 100644
index 4be9d637d29..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xycrayon.doc
+++ /dev/null
@@ -1,82 +0,0 @@
-%% $Id: xycrayon.doc,v 3.3 1996/12/18 08:58:16 ross Exp $
-%%
-%% Xy-pic ``Crayola colours'' PostScript backend support.
-%% Copyright (c) 1995-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{crayon}{Crayola Colours}{\stripRCS$Revision: 3.3 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This option provides the command to install definitions for the 68 colours
-recognised by name by Tomas Rokicki's |dvips| driver~\cite{dvips}.
-This command must be called from a <driver>-file which can actually
-support the colours.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\DOCHEADER
-
-The colour definitions themselves are in the file |xyps-col.tex|.
-They are not loaded directly here since it is not known which <driver> is
-to be used. Different <driver>s may redefine the |\xynewcolor@| macro
-to set the colour by name or colour-model.
-
-\DOCMODE(
-\xydef@\installCrayolaColors@{%
- \xyinputorelse@{xyps-col}{\xyerror@{Could not load Crayola colours}{}}%
- \let\installCrayolaColors@=\relax
- \xyuncatcodes }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xycrayon.doc,v $
-% Revision 3.3 1996/12/18 08:58:16 ross
-% cosmetic updates
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/05 07:58:43 ross
-% Ready for v3 release?
-%
-#
-% NEW for version 3.1 by Ross Moore 1995/03/18.
-%
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xycurve.doc b/Master/texmf-dist/source/generic/xypic/xycurve.doc
deleted file mode 100644
index 0c14745e7c0..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xycurve.doc
+++ /dev/null
@@ -1,4920 +0,0 @@
-%% $Id: xycurve.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Xy-pic ``Curves and Splines'' extension.
-%% Copyright (c) 1993-1997 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@ens-lyon.fr>
-%%
-%% 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, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{curve}{Curve and Spline extension}{\stripRCS$Revision: 3.7 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This option provides \Xy-pic with the ability to typeset spline curves
-by constructing curved connections using arbitrary directional objects
-and by encircling objects similarly. "Warning": Using curves can be
-quite a strain on \TeX's memory; you should therefore limit the length
-and number of curves used on a single page. Memory use is less when
-combined with a backend capable of producing its own curves; \eg, the
-\PS\ backend).
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Curved connections}
-??=[curved connections]
-
-\DOCMODE(
-\message{curve,}
-\DOCMODE)
-
- Simple ways to specify curves in \Xy-pic are as follows:
- \begin{defs}
-|**\crv{|<poslist>|}| & curved connection \cr
-|**\crvs{|<dir>|}| & get <poslist> from the stack \cr
-|\curve{|<poslist>|}| & as a <decor>ation \cr
- \end{defs}
-\noindent\unskip
- in which <poslist> is a list of valid <pos>itions.
- The decoration form |\curve| is just an abbreviation for |\connect\crv|.
- As usual, the current $p$ and $c$
- are used as the start and finish of the connection, respectively.
- Within <poslist> the <pos>itions are separated by |&|.
-A full description of the syntax for |\crv| is given in figure~??[f.curve].
-
-\begin{code}
-\xy (0,20)*[o]+{A};(60,0)*[o]+{B}="B"
-**\crv{}\POS?(.4)*_+!UR{0},"B"
-**\crv{(30,30)}\POS?*^+!D{1},"B"
-**\crv{(20,40)&(40,40)} \POS?*^+!D{2},"B"
-**\crv{(10,20)&(30,20)&(50,-20)&(60,-10)}
-\POS?*+^!UR{4} \endxy
-\end{code}
-$$\docode$$\goodbreak\goodbreak
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-We need a counter to track the number of control points, (i.e. the number of
-<pos>s in <poslist>) and provide a macro to read it.
-Also a token list which will store the vital information for
-later use, to allow curved connections to work properly.
-
-\DOCMODE(
-\xynew@{count}\crv@cnt@
-\xydef@\xynumctrlpts@{\the\crv@cnt@}
-\xynew@{toks}\crvpts@
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-If <poslist> is empty a straight connection is computed.
-When the length of <poslist> is one or two then the curve is uniquely
-determined as a single-segment B\'ezier quadratic or cubic spline.
-The tangents at $p$ and $c$ are along the lines connecting
-with the adjacent control point.
-With three or more <pos>itions a cubic B-spline construction is used.
-B\'ezier cubic segments are calculated from the given control points.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The previous picture was typeset using:
-\begin{code}
-\xy (0,20)*+{A};(60,0)*+{B}
-**\crv{}
-**\crv{(30,30)}
-**\crv{(20,40)&(40,40)}
-**\crv{(10,20)&(30,20)&(50,-20)&(60,-10)}
-\endxy
-\end{code}
-\displaycode
-\noindent except for the labels, which denote the number of entries in the
-<poslist>. (Extending this code to include the labels is set below as
-an exercise).
-
-\begin{code}
-\xy (0,20)*[o]+{A};(60,0)*[o]+{B}="B"
-**\crv{} \POS?(.4)*_+!UR{0},"B"
-**\crv{(30,30)} \POS?*^+!D{1},"B"
-**\crv{(20,40)&(40,40)} \POS?*^+!D{2},"B"
-**\crv{(10,20)&(30,20)&(50,-20)&(60,-10)}
-\POS?*+^!UR{4} \endxy
-\end{code}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The |?|-operator of \S??g[xy.doc:pos] (note~??g[xy.doc:<place>])
- is used to find arbitrary <place>s along a curve in the usual way.
-
-\begin{exercise}
-Extend the code given for the curves in the previous picture
-so as to add the labels giving the number of control points.
-\answertext{This is the code that was actually used:}
-\answercode
-\answertext\displaycode
-\end{exercise}
-
- Using |?| will set the current direction to be tangential at that
- <place>, and one can <slide> specified distances
- along the curve from a found <place> using the |?|\dots|/|<dimen>|/|
- notation:
-
-\begin{code}
-\xy (0,20)*+{A};(60,0)*+{B}
-**\crv{(10,20)&(30,20)&(50,-20)&(60,-10)}
- ?<*\dir{<} ?>*\dir{>}
- ?(.65)*{\oplus} *!LD!/^-5pt/{x}
- ?(.65)/12pt/*{\oplus} *!LD!/^-5pt/{x'}
- ?(.28)*=0{\otimes}-/40pt/*+{Q}="q"
- +/100pt/*+{P};"q" **\dir{-}
-\endxy
-\end{code}
-
-$$\docode$$
-
-\begin{exercise}
-Suggest code to produce something like the above picture;
-the spline curve is the same as in the previous picture.
-"Hints": The line is 140pt long and touches $0.28$ of the way from
-$A$ to $B$ and the $x$ is 0.65 of the way from $A$ to $B$.
-\answertext{This is the code that was used to typeset the picture:}
-\answercode
-\answertext\displaycode
-\end{exercise}
-
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The positions in <poslist> specify
-{\em control points\/} which determine the initial and final directions
-of the curve---leaving $p$ and arriving at $c$---and how the curve
-behaves in between, using standard spline constructions.
-In general, control points need not lie upon the actual curve.
-
-A natural spline parameter varies in the interval $[0,1]$ monotonically
-along the curve from $p$ to $c$. This is used to specify <place>s along
-the curve, however there is no easy relation to arc-length.
-Generally the parameter varies more rapidly where the curvature is
-greatest. The following diagram illustrates this effect for a cubic
-spline of two segments (3 control points).
-
-\begin{code}
-\def\ssz#1{\hbox{$_{^{#1}}$}}
-\xy (0,0)*+{A};(30,-10)*+{B}="B",**\dir{-},
-"B"**\crv{(5,20)&(20,25)&(35,20)}
- ?<(0)*\dir{<}="a" ?>(1)*\dir{>}="h"
- ?(.1)*\dir{<}="b" ?(.9)*\dir{>}="i"
- ?(.2)*\dir{<}="c" ?(.8)*\dir{>}="j"
- ?(.3)*\dir{<}="d" ?(.7)*\dir{>}="k"
- ?(.4)*\dir{<}="e" ?(.6)*\dir{>}="l"
- ?(.5)*\dir{|}="f",
- "a"*!RC\txt{\ssz{(\lt)}};
- "h"*!LC\txt{\ssz{\;(\gt)}},**\dir{.},
- "b"*!RD{\ssz{.1}};
- "i"*!L{\ssz{\;.9}},**\dir{-},
- "c"*!RD{\ssz{.2}};
- "j"*!L{\ssz{\;.8}},**\dir{-},
- "d"*!RD{\ssz{.3}};
- "k"*!L{\ssz{\;.7}},**\dir{-},
- "e"*!RD{\ssz{.4}};
- "l"*!LD{\ssz{.6}},**\dir{-},
- "f"*!D!/^-3pt/{\ssz{.5}}
-\endxy
-\end{code}
-$$\docode$$
-
-\begin{exercise}
-Write code to produce a picture such as the one above.
-("Hint": Save the locations of places along the curve for later
-use with straight connections.)
-\answertext{Here is the code that was used to typeset the picture:}
-\answercode
-\answertext\displaycode
-\end{exercise}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-To have the same <pos> occuring as a multiple control point simply use
-a delimiter, which leaves the <pos> unchanged. Thus
-|\curve{|<pos>|&}| uses a cubic spline, whereas |\curve{|<pos>|}| is
-quadratic.
-
-Repeating the same control point three times in succession results in
-straight segments to that control point. Using the default styles this
-is an expensive way to get straight lines, but it allows for extra
-effects with other styles.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Curve Objects:}
-
-At present the syntax is supported for using a |\curve| object only
-as a decoration, constructed from a |\crv| object used as a connection.
-
-\DOCMODE(
-\xydef@\curve{\connect\crv}
-\DOCMODE)
-
-The more general |\crv| object currently works as a connection.
-In future this object-type will be extended to allow closed curves as
-the boundaries of objects.
-
-\DOCMODE(
-\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@@}% default style
-\xydef@\afterCURVEaction@{}% default after-curve action
-\xydef@\@endcurve{}%
-\xydef@\endcrv@@{\endcrv@\POS}%
-\xydef@\pure@crv{\relax}
-\DOCMODE)
-
- The |\@endcurve| inserted here ensures that subsequent parsing
- with |\checkendcurve@| (see below) will terminate cleanly.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The |\crvs| object has restricted functionality with choice of styles and
-is always used for curves only.
-It has a single braced argument which can be used to set curve styles.
-Its main use is for re-typesetting different portions of the same curve,
-for example the subsegments of a curved arrow/path segment.
-
-This is done by first examinining |\bstartPLACE@|.
-If |\relax| or undefined, then the curve is set using |\@crv@| to
-decide the style. If |\bstartPLACE@| is |\empty| then the curve is fully
-processed as a connection but nothing is actually typeset; this is used
-by curved arrows where the curve is first set as ``invisible'' before
-breaks and labels are processed.
-When |\bstartPLACE@| contains a number, normally within the range 0 to 1,
-this is interpreted as a <place> along a curved connection that has already
-been established. No typesetting may occur before this <place>.
-
-In this case the control point information is discarded since the curve
-can be recovered using |\splinereset@|. The current $p$ and $c$ are no
-longer the endpoints of the curve but are <pos>itions along the curve
-between which the typesetting should occur.
-The value of |\bstartPLACE@| is typically a <place> along the curve
-which is within the <pos> at $p$. It is used to help locate the edge of
-this <pos> where typesetting should commence.
-Similarly |\bendPLACE@| is typically a <place> along the curve
-which is within the <pos> at $c$.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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{}
-\DOCMODE)
-
-\BUG: this should use a |\Step@@| method to get the spacing for dotting; this
-will eliminate the need for templates\dots
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{figure*}[tp]
-\begin{syntax}
-%
- \multispan{3}{{\tt\string\curve}<modifier>|{|<curve-object><poslist>|}|\hfil}
- & construct curved connection
-\cr
-%
-\noalign{\nobreak\smallskip\nobreak\hrule\nobreak\smallskip\nobreak}
-%
- <modifier>
- &\iss & <empty>
- & zero or more modifiers possible; default is |~C|
-\cr
- &\orr & |~|<curve-option> <modifier>
- & set <curve-option>
-\cr
-%
-\noalign{\smallskip}
-%
- <curve-option>
- &\iss & |p|\orr|P|\orr|l|\orr|L|\orr|c|\orr|C|
- & ??!^[show only] control points (|p|=points),
- joined by lines (|l|=lines), or curve only (|c|=curve)
-\cr
-%
- &\orr & |pc|\orr|pC|\orr|Pc|\orr|PC|
- & show ??!^[control points] ??!^[and curve]
-\cr
-%
- &\orr & |lc|\orr|lC|\orr|Lc|\orr|LC|
- & show ??!^[lines joining] control points ??!^[and curve]
-\cr
-%
- &\orr & |cC|
- & plot curve twice, with and without specified formatting
-\cr
-%
-\noalign{\smallskip}
-%
- <curve-object>
- &\iss & <empty>
- & use the appropriate default style
-\cr
-%
- & \orr & |~*|<object> <curve-object>
- & specify the ??!^[``drop'' object] and ??!^[maybe more]
-\cr
-%
- & \orr & |~**|<object> <curve-object>
- & specify ??!^[``connect'' object] and ??!^[maybe more]
-\cr
-%
-\noalign{\smallskip}
-%
- <poslist>
- &\iss & <empty> \orr\ <pos> <delim> <poslist>\kern-15pt
- & \kern20pt list of positions for control points
-\cr
-%
- &\orr & |~@| \orr\ |~@| <delim> <poslist>
- & add the current ??!^[stack] to the control points
-\cr
-%
-\noalign{\smallskip}
-%
- <delim>
- & \iss & {\tt\&}
- & allowable delimiter
-\cr
-%
-\end{syntax}
-\caption{Syntax for curves.}
-??=[f.curve]
-\vfil
-\end{figure*}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Parsing:}
-
-Two separate parsers are required: one for |\curve...|, the other for the
-contents of |{...}|.
-
-Set |\curveSTYLE@| to be the default of |\xycurve@@| then examine
-the following tokens to see if this must be changed.
-
- Set |\curveSTYLE@| to be the default of |\xycurve@@| then examine
- the following tokens to see if this must be changed.
-
-"Procedure": If the first token of |#1| (from |\crv@|) is |~| then
- a letter should follow, determining how to set the style.
- If instead it is an active control sequence then issue
- a warning message, but let it do its thing anyway.
- However |\parsecurve@| is a normal thing to encounter,
- so no warning is required.
- Currently a single letter without the |~| will be recognised,
- but two-letter combinations definitely need the |~|.
-
-\DOCMODE(
-\xydef@\parseCURVE@{\def\curveSTYLE@{\xycurve@@}\def\afterCURVEaction@{}%
- \xyFN@\parseCURVE@@}
-\xydef@\parseCURVE@@{%
- \ifx\space@\next\expandafter\DN@\space{\xyFN@\parseCURVE@@}% gobble spaces
- \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@ }%
-\DOCMODE)
-
- Options are normally specified using |~|.
- Sometimes this can be safely omitted; if such a case is
- encountered then a warning message is issued advising to use |~|.
- This nicety may be removed in future versions.
-
-\DOCMODE(
-\xydef@\xyactive@Warning{\xywarning@{expandable control sequences should
- not be here, results are unpredictable in diagrams.}}% (2)
-\xydef@\xytilde@Warning{Please use ~ to set curve style.}% (3a)
-\DOCMODE)
-
- Examine the next token to see if it determines a curve style.
- Currently only |p|, |l| and |c| are recognised, along with
- the uppercase variants |P|, |L| and |C|.
- When one of these letters is encountered, set |\curveSTYLE@|
- and keep examining tokens with |\setafterCURVEaction@|.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
- |\setafterCURVEaction@| examines tokens to see if a 2-letter
- combination is being specified; e.g. |pc|, |lC|, etc.
- Alternatively another |~| can set a new specification.
-
-\DOCMODE(
-\xydef@\setafterCURVEaction@{%
- \ifx\next~\DN@~{\xyFN@\setcurveSTYLE@@}%
- \else\ifcat a\noexpand\next\DN@{\setafterCURVEaction@@}%
- \else\DN@{\xyFN@\parseCURVE@@}%
- \fi\fi \next@}
-\DOCMODE)
-
- Currently the only 2-letter specifications have either
- |c| or |C| as the 2nd letter.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- When |\parsecurve@| is encountered, this signifies the end
- of this part of the parsing. The only active control
- sequence that should be encountered legitimately here is
- |\@endcurve|, which signifies that the <poslist> is
- empty and default styles are required. Otherwise assume we
- the subsequent tokens are from |#2| of |\crv@|. Control
- passes to |\xycurve@@| to prepare for reading the <crv-object>s
- and <poslist>.
-
-\DOCMODE(
-\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@}%
-\DOCMODE)
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- These were originally provided for sophisticated-user access.
- They are otherwise undocumented and may be removed.
-
-\DOCMODE(
-\xylet@\savecurve=\xycurve@@
-\xylet@\samecurve=\xy@curve@
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- |\xy@crvmods@| handles reading the <curve-object>s,
- \ie\ the ``drop'' object and the ``connect'' object.
-
-\medskip
-"Procedure":??_[crvob1]~Get next token.??_[crvob2]~Is it a |~|?
- ??_[crvob4]~If not, exit.
-??_[crvob2a]~If so, is it followed by a |*|?
-??_[crvob2b]~If not, issue a message and go back to ??_[crvob1].
- Otherwise, ??_[crvob3]~is there a second |*|?
-??_[crvob3a]~If not then read and store the ``drop'' object,
-??_[crvob3b]~else, read and store the ``connect'' object.
-When finished, in either case, ??_[crvob5]~look for further specifications.
-??_[crvob3c]~An empty ``drop'' object is not allowed, so this actually
-gives the default of |\zerodot|.
-
-\DOCMODE(
-\xydef@\xycrvmods@{\xyFN@\xy@crvmods@}%?*[crvob1]
-
-\xydef@\xy@crvmods@{%
- \ifx\space@\next\expandafter\DN@\space{\xyFN@\xy@crvmods@}%gobble spaces
- \else\ifx\next ~\DN@ ~{\xyFN@\xy@crvmods@@}%?*[crvob2]
- \else\DN@{\xy@crvmods@@@@}\fi\fi \next@}%?*[crvob4]
-\xydef@\xy@crvmods@@@@{\xyFN@\checkendcurve@}%
-
-\xydef@\xy@crvmods@@{%
- \ifx\space@\next\expandafter\DN@\space{\xyFN@\xy@crvmods@@}%gobble spaces
- \else\ifx\next *\DN@ *{\xyFN@\xy@@crvmods@}%?*[crvob2a]
- \else\addAT@\ifx\next\addAT@\DN@{\xyFN@\xy@@crvaddstack}%
- \else\DN@{\xywarning@{badly-formed curve option}\xyFN@\xy@crvmods@}%?*[crvob2b]
- \fi\fi\fi \next@}%
-
-\xydef@\xy@@crvmods@{%
- \ifx\space@\next\expandafter\DN@\space{\xyFN@\xy@@crvmods@}%gobble spaces
- \else\ifx\next *\DN@ *{\xyFN@\xy@@crvmods@@}%?*[crvob3]
- \else\DN@{\xy@crv@mods@@}\fi\fi \next@}%?*[crvob3a]
-
-\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}}%?*[crvob3c]
- \else \def\xycrvdrop@{ #1{#2}}\fi
- \xyFN@\xy@crvmods@ }%?*[crvob5]
-
-\xydef@\xy@@crvmods@@#1#{\DN@##1{\xy@@crvmods@@@{#1}{##1}}\next@}%?*[crvob3b]
-\xydef@\xy@@crvmods@@@#1#2{\def\xycrvconn@{ #1{#2}}\xyFN@\xy@crvmods@ }%
-\DOCMODE)
-%
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Parsing of the <poslist> is quite simple, recognising few special tokens:
-
-\begin{itemize}
-\item
- |\endcurve| and |\endxy| terminate reading of control points.
-\item
- |&|, |\\| and |\relax| delimit $<pos>$itions
-\item
- anything else is treated as a $<pos>$, being handled by the |\POS@|
- parser.
-\end{itemize}
-
-\DOCMODE(
-\xydef@\checkendcurve@{%
- \ifx\space@\next\expandafter\DN@\space{\xyFN@\checkendcurve@}%gobble spaces
- \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\addAND@\ifx\next\addAND@\DN@{\clearsearchflag@\searchnextpt@}%
- \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@}}
-\DOCMODE)
-
-There could be a problem in that an invalid token would cause
-an infinite loop, passing back and forth between |\checkendcurve@|
-and |\POS@|. This is avoided by setting a flag |\setsearchflag@|
-when the |\POS@| parser is called, not following a valid delimiter.
-Encountering a valid delimiter clears the flag. If |\checkendcurve@|
-is called with the flag set, a warning message is issued
-and the token is skipped; the flag remains set.
-Processing continues, but it is possible that the wrong number of
-positions will be read; presumably there is some kind of error that
-needs to be fixed anyway.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-It is possible for the final |\endcurve| to be omitted, but only when the
-next token is |\endxy|. A warning message is written to the log file,
-protesting against this sloppy \TeX-ing.\smiley
-
-\DOCMODE(
-\xydef@\sloppyendcrv@{%
-\xywarning@{Please use \string\endcurve\space to end the curve.}\endxycurve@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Creation of the |\crv| is completed when |\endcrv@| is encountered.
- At this point the usual methods |\Drop@@| and |\Connect@@| are
- defined. Extra information is retained, using |\saveshape@| and
- |\savecrvparams@| for the benefit of methods which treat the curve
- as a connection.
-
-\DOCMODE(
-\xydef@\endcrv@{\saveshape@ %\def\Upness@{0}%
- \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@ %\noexpand\initbreaks@
- }%
- \wdz@=\z@
- \ht\z@=\z@ \dp\z@=\z@ }
-\DOCMODE)
-
-The control names |\crvXY@pre@| and |\crvXY@post@| are used to
-transfer style information passed with |\preconnect@| to subsegments.
-
-\DOCMODE(
-\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@}}
-\DOCMODE)
-
- The values of |\X@min|, |\X@max|, \etc\ are used to compute the extents
- |\L@c|, |\R@c|, \etc\ of the object. This information must be maintained
- after the group is closed, unless the ``hidden'' attribute is required
- or we are inside a matrix construction.
-
- In calculating the size of the box containing the curve |\X@min|,
- |\X@max|, \etc\ are initialised to describe the minimum rectangle
- enclosing $p$ and $c$. At the same time we save the current scope.
-
-\DOCMODE(
-\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 }
-\DOCMODE)
-
- |\saveshape| is used to pass necessary information up one level of
- grouping.
-
-\DOCMODE(
-\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@}}%
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xydef@\splineEdge{\rectangleEdge}
-\DOCMODE)
-
-\TODO:
-This can be improved. For example, trace along the spline until an
-appropriate point is found. There may be more than one such point,
-so extra criteria may be required.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{notes}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[``drop'' object]
-The ``drop'' object is set once, then ``dropped'' many times at appropriately
-spaced places along the curve. If directional, the direction from $p$ to $c$
-is used.
-Default behaviour is to have tiny dots spaced sufficiently closely as to
-give the appearance of a smooth curve.
-Specifying a larger size for the ``drop'' object is a way of getting
-a dotted curve (see the example in the next note).
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[``connect'' object]
-The ``connect'' object is also dropped at each place along the curve.
-However, if non-empty, this object uses the tangent direction at each
-place. This allows a directional object to be specified, whose
-orientation will always match the tangent. To adjust the spacing of
-such objects, use an empty ``drop'' object of non-zero size as shown here:
-%
-\begin{code}
-\xy (0,0)*+{A}; (50,-10)*+{B}
-**\crv{~*=<4pt>{.} (10,10)&(20,0)&(40,15)}
-**\crv{~*=<8pt>{}~**!/-5pt/\dir{>}(10,-20)
- &(40,-15)} \endxy
-\end{code}
-$$\docode$$
-\displaycode
-%
-\noindent
-When there is no ``connect'' object then the tangent calculations
-are not carried out, resulting in a saving of time and memory;
-this is the default behaviour.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[maybe more]
-The ``drop'' and ``connect'' objects can be specified as many times
-as desired. Only the last specification of each type will actually have
-any effect. (This makes it easy to experiment with different styles.)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[show only]
-Complicated diagrams having several spline curves can take quite a long time
-to process and may use a lot of \TeX's memory. A convenient device,
-especially while developing a picture, is to show only the location of the
-control points or to join the control points with lines, as a stylized
-approximation to the spline curve. The <curve-option>s |~p| and |~l| are
-provided for this purpose. Uppercase versions |~P| and |~L| do the same
-thing but use any <curve-object>s that may be specified, whereas the
-lowercase versions use plain defaults: small cross for |~p|, straight
-line for |~l|.
-Similarly |~C| and |~c| set the spline curve using any
-specified <curve-option>s or as a (default) plain curve.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[and curve]
-Use of |~p|, |~l|, etc. is extended to enable both the curve
-and the control points to be easily shown in the same picture.
-Mixing upper- and lower-case specifies whether the <curve-option>s are
-to be applied to the spline curve or the (lines joining) control points.
-See the examples accompanying the next two notes.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[control points]
-By default the control points are marked with a small cross,
-specified by |*\dir{x}|. The ``connect'' object is ignored completely.
-
-\begin{code}
-\xy (0,0)*+{A};(50,-10)*+{B}
-**\crv~pC{~*=<\jot>{.}(10,-10)&(20,15)
- &(40,15)} \endxy
-\end{code}
-$$\docode$$
-was typeset by \dots
-\displaycode
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[lines joining]
-With lines connecting control points the default ``drop'' object is empty,
-while the ``connect'' object is |\dir{-}| for simple straight lines.
-If non-empty, the ``drop'' object is placed at each control point.
-The ``connect'' object may be used to specify a fancy line style.
-
-\begin{code}
-\xy (0,0)*+{A};(50,-10)*+{B}
-**\crv~Lc{~**\dir{--}~*{\oplus}
- (20,20)&(35,15)} \endxy
-\end{code}
-$$\docode$$
-was typeset by \dots
-\displaycode
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[stack]
-When a stack of <pos>itions has been established using the |@i| and |@+|
-commands, these positions can be used and are appended to the <poslist>.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{notes}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Spline Methods}
-
-Each |\curve| has to set the sliding abilities.
-This is done by a call to |\crvconnect@@| which gives values to
-the methods |\Creset@@|, |\Cshavep@|, etc.
-These values depend on the style of the curve itself.
-
-\DOCMODE(
-\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@}%
-}
-\DOCMODE)
-
-When straight lines are required \dots
-
-\DOCMODE(
-\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@
-}
-\DOCMODE)
-
-These are the actual methods used for a sequence of straight segments.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE(
-\xydef@\straitintercept@{\noCintercept@@}
-\xydef@\straitbreak@{\straightCbreak@@}
-\xydef@\straitlast@{\straightClast@@}
-\DOCMODE)
-
-When curved segments are required \dots
-
-\DOCMODE(
-\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@
-}
-\DOCMODE)
-
-These are the actual methods.
-
-{\em Reset} the spline parameters:
-\begin{description}
-\item[|\xycrvptsnum@|:] expands to a control sequence, whose name
-incorporates the correct scoping level, giving the number of control points.
-
-\item[|\the\crvpts@|:]
-reads the control point locations and other information from a token list.
-
-\item[|\xysplineparams@|:]
-set to a control sequence name, incorporating the correct scoping level,
-which will allow access to the Be\'zier control points for each
-spline segment, when required.
-
-\item[|\xysplineedges@|:]
-set to a control sequence name, incorporating the correct scoping level,
-which gives the spline parameters of the edges of objects at $p$ and $c$;
-
-\item[|\segmentnum@|:] reset to $0$.
-
-\item[|\splinecorrect@p| and |\splinecorrect@c|:] reset to $0$
-until changed by a |\Cshavep@| or |\Cshavec@|.
-
-\item[|\splinelength@|:] reset to $0$ until changed by a |\Cshavep@|,
-|\Cshavec@| or |\Calong@|; this is needed by |\Cshavep@| and |\Cshavec@|
-to quickly locate where to slide from, especially when it is necessary
-to slide across more than a single spline segment.
-
-\item[|\splineplace@|:] reset to $.5$.
-\end{description}
-
-\DOCMODE(
-\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}%
-}
-\DOCMODE)
-
-{\em Shaving} to the appropriate edge.
-This is simply a matter of reading the stored edge information
-and storing the appropriate value in |\splinecorrect@p|
-or |\splinecorrect@c|. The difficult part is to construct the
-correct control sequence name and then to extract the correct
-part of the text in its expansion.
-
-\DOCMODE(
-\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@}%\W@{**shave**<\tmp@>***}%
- \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 % something may be wrong here!!
- \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 %\W@{**slide**<\the\dimen@>***}%
-%% 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}
-\DOCMODE)
-
-The method |\splinealong@#1| finds places along the curve, when |#1| is
-given as a factor, normally between 0 and 1. The location of the edges
-of the objects at $p$ and $c$ are stored in |\splinecorrect@p| and
-|\splinecorrect@c|.
-These are the places found if the factor is either 0 or 1.
-If an edge is non-zero then it is actually possible to move to points inside
-that edge by specifying a factor less than 0 or greater than 1.
-
-\DOCMODE(
-\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@}}%
-\DOCMODE)
-
-The parameter |#2| in |\splinealong@@#1#2#3| allows for a subsequent slide
-through a given <dimen> along the curve, from the place specifed by the
-factor in |#1|.
-
-The information supplied in |#1| must be converted to the segment number and
-parameter value of the specified point. These will be calculated and stored
-temporarily in |\count@| and |dimen@| before the values are passed respectively
-to |\splinesegment@| which chooses the segment, and |\spline@find| to locate
-the point on this segment.
-
-To do the calculation, first we correct for the parameter values of the edges
- of the objects at the end-points, which are stored in |\splinecorrect@p| and
-|\splinecorrect@c|. If the resulting number $x$ is not an integer then
-|\count@| is set to $1+\floor{x}$ while |\dimen@| becomes $(x-\floor{x})|\p@|$.
-If $x$ is an integer: $x=0$ gives |\count@=1| and |\dimen@=\z@|,
-otherwise $|\count@|=x$ and |\dimen@=\p@|.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
- This macro checks whether the required sliding has been carried out,
-or whether it is necessary to continue sliding along the next segment.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-
-\paragraph*{Breaks}
-%
-Typesetting breaks in curves is quite involved.
-The |\bstartPLACE@| and |\bendPLACE@| are used to hold parameter
-values for the positions of the beginning and end of a segment,
-respectively, when known. The default values of |\relax| indicate
-that these values need to be found, usually from the start- and
-end-edges of the curve. The value of |\empty| for |\bstartPLACE@|
-is used initially with a new curved connection, to set up all its
-parameters --- no typesetting takes place. This is used by curved
-arrows to set up the connection before places can
-be found for any breaks.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-These are called in the actual setting of curved sub-segments.
-
-\DOCMODE(
-\xydef@\splinebreak@{%
-\splinetrace@{***new break*** this:\bthisPLACE@ }%
- \ifx\bthisPLACE@\empty\def\bendPLACE@{1}%
- \else\edef\bendPLACE@{\bthisPLACE@}\let\bthisPLACE@\empty\fi
-%\xystatus@{BR1}%
- \ifx\bprevPLACE@\relax\def\bstartPLACE@{0}\else\expandafter\bprevPLACE@\fi
- \edef\bprevPLACE@{\def\noexpand\bstartPLACE@{\bendPLACE@}\pfromthec@}%
-\splinetrace@{splineBREAK: \bstartPLACE@ <> \bendPLACE@}%
-%\xystatus@{BR}%
- \edef\cv@brend{\cfromthec@}%
- \edef\cv@brstart{\cfromthep@}%
- \expandafter\connect\expandafter\crvs\crvSTYLE@@{}% ? optimise
- \let\cv@brend=\relax
- \let\cv@brstart=\relax
-\splinetrace@{**break done**}%
-}
-
-\xydef@\splinelast@{\splinereset@ \lastbreaks@ %\splinetracing
-\splinetrace@{splineLAST}%
-%\xystatus@{LA}%
- \edef\cv@brend{\cfromthec@}%
- \edef\cv@brstart{\cfromthep@}%
- \expandafter\connect\expandafter\crvs\crvSTYLE@@{}% ? optimise
- \let\cv@brend=\relax
- \let\cv@brstart=\relax
-\splinetrace@{**last done**}%
- \resetbreaks@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Intersection with a curved connection}
-Just as the intersection of two lines (??g[xy.doc:intercept]) can be found,
-so can the intersection of a straight line with a curved connection,
-or the intersection of a curve with a straight connection.
-
-\begin{code}
-\xy*+{A}="A";p+/r5pc/+(0,15)*+{B}="B"
- ,p+<1pc,3pc>*+{C}="C"
- ,"A"+<4pc,-1pc>*+{D}="D",{\ar@/_/"C"}
- ,?!{"A";"B"**@{-}}*++{\oplus}
-\endxy \quad \xy
- *+{A}="A";p+/r5pc/+(0,15)*+{B}="B",
- ,p+<1pc,3pc>*+{C}="C"
- ,"A"+<4pc,-1pc>*+{D}="D","A";"B"**@{-}
- ,?!{"D",{\ar@/_/"C"}}*++{\oplus}
-\endxy
-\end{code}
-$$\docode$$
-\displaycode
-
-When the line separates the end-points of a curve an intersection can always
-be found. If there is more than one then that occurring earliest along the
-curve is the one found.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Presume the end-points of the spline segment are at $(X_p,Y_p)$ and
-$(X_c,Y_c)$ with $(L_p,U_p)$ and $(R_p,D_p)$ as two points on the line.
-Then the macro |\xysidesofinterval@| returns 3 pieces of information.
-\begin{itemize}
-\item |\next| expands to 2 characters, each from $\{+,-,0\}$
- indicating which side of, or on, the line lies either end-point;
-\item |\this@| expands to either $+$ or $-$ indicating which
- end is closer to the line, returning $+$ if equi-distant;
-\item |\howclose@| contains a non-negative <num> indicating the distance
- to the nearest end-point.
-\end{itemize}
-
-\DOCMODE(
-\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@}%
-% \def\splinepoint@{\splineIpt@@}%
- \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\count@\m@ne
- \advance\dimen@\segmentnum@\p@ \advance\dimen@-\p@
- \dimen@nth\count@\dimen@ % \divide\dimen@\count@
- \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@{%\global\advance\splineval@-.5\splinedepth@
- \expandafter\ifx\this@-\relax
- \X@c=\X@p \Y@c=\Y@p \global\advance\splineval@-\splinedepth@
- \fi \splinefinishf@ }%
-\DOCMODE)
-
-When the line misses the convex hull of the curve's control points
-it is still possible to get the point of closest approach.
-
-\DOCMODE(
-\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{%\begingroup
- \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@ }
-\DOCMODE)
-
-This is for straight connections intercepting with a curve.
-It requires a redefinition of |\PLACE@intercept@| to recognise
-that the intercept is with a curved connection.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\TODO:
-If both connections are curves, only the line joining the end-points
-of the first connection is used. Find a way to do better than this.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-If the line does not separate the end-points then there may be no
-intersection with the curve. If there is one then either the line is
-tangential or necessarily there will also be at least one other intersection.
-A message $$|perhaps no curve intersection, or many.|$$
-is written to the log-file, but a search for an intersection will still be
-performed and a ``sensible'' place found on the curve.
-In the usual case of a single quadratic or cubic segment, the place nearest
-the line is found and the tangent direction is established.
-
-The following examples show this, and show how to get the place on the line
-nearest to the curve.
-
-\begin{code}
-\xy *+{A}="A";p+/r5pc/+(0,15)*+{B}="B",
- ,p-<.5pc,2pc>*+{C}="C","A"+<6pc,-.5pc>
- ,*+{D}="D","A",{\ar@/_25pt/"B"}
- ,?!{"C";"D"**@{-}}*\dir{x}="E"
- ,+/_2pc/="F";"E"**@{-},?!{"C";"D"}
- ,*{\otimes}\endxy\qquad\xy
- *+{A}="A";p+/r5pc/+(0,15)*+{B}="B",
- ,p-<.5pc,2pc>*+{C}="C"
- ,"A"+<7pc,.5pc>*+{D}="D","A"
- ,{\ar@/_40pt/"B"},?!{"C";"D"**@{-}}
- ,*{\otimes}\endxy
-\end{code}
-$$\docode$$
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The warning message, that no intersection may exist, always occurs inside
-a grouping so it can safely switch itself off for deeper levels.
-
-\DOCMODE(
-\xydef@\nointerceptwarning@{\let\nointerceptwarning@=\relax
- \xywarning@{perhaps no curve intersection, or many. }}
-
-\xydef@\intercepthull@{\nointerceptwarning@
- \expandafter\def\expandafter\prevnext@\expandafter{\next}%
- \splinetestcvxhull@}
-\DOCMODE)
-
-When the line meets the convex hull of the current control points,
-then a closer point exists inside the current portion of the curve.
-We must ``decast'' to find it, after storing the closest value known
-so far, within |\prevhowclose@|.
-
-\DOCMODE(
-\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@@ }
-\DOCMODE)
-
-If the line does not cross into the convex hull, then we use
-the distance from the control points to determine whether or not
-there can be a closer point. The value of |\prevhowclose@|
-indicates the best so far, while |\howcvxclose@| temporarily
-holds the distance to the closest control point. When this is
-nearer then there will be a closer point on the curve.
-
-\DOCMODE(
-{\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
-% \ifdim\dimen@<\howclose@ \relax
-% \ifdim\howclose@<\prevhowclose@\relax \edef\prevhowclose@{\howclose@}\fi
-% \DN@{\begingroup\splinedecast@@ \endgroup}%
-% \else\ifdim\howclose@>\prevhowclose@ \relax \DN@{\splineHadvance@}%
-% \else \DN@{\splineHadvance@ }\fi\fi \next@ }
-\xydef@\interceptoutsidehull@{\dimen@=\howcvxclose@ \relax
-% \global\splineval@=\z@
-\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}}
-\DOCMODE)
-
-For cubic segments it is necessary to look at both control-points
-off the curve and compare their distances; hence the use of
-|\prevhowcvxclose@|, initially set to |\maxdimen|.
-
-\DOCMODE(
-\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=\splinepoint@
- \global\let\splinepoint=\relax
- \def\splineadvance@{\intercepthull@}}%
- \splinedecast@@ }%
-\DOCMODE)
-
-This macro |\splineHadvance@| is used at the end of a |\splinedecast@|
-in order to pass information from out of a subsegment, to help decide
-whether there is any point in further searching.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Miscellaneous features}
-%
-The command |\clearcurve| was originally provided to discard the curve
-information, and return to the graphics state before the curve was read,
-if this is ever found to be necessary. This will probably be removed.
-
-\DOCMODE(
-\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@
-\DOCMODE)
-
-\TODO:
-Define an |\extendcurve| as a <postcurve> which allows the curve
-to be continued smoothly past the endpoint $c$.
-
-A macro can be used within the modifier, to provide different labels
-at each control point. For example\dots
-
-\begin{code}
-\newcount\cptlabel\global\cptlabel=0
-\def\nextcptlabel{\global\advance\cptlabel 1 %
- \number\cptlabel}
-\xy (0,0)*+{A}; (50,-10)*+{B}
-**\crv~Pc{~*{\nextcptlabel}(10,-10)
- &(20,15)&(30,-15)&(40,15)} \endxy
-\end{code}
-$$\docode$$
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Two control sequences are provided to access the control points.
-Firstly |\numcontrolpts| returns the number of them,
-while |\xycontrolpt|<num> sets $c$ to be the particular control point.
-Here <num> must be a single digit, grouped integer \eg\ |{-15}|
-or count register containing a numerical value.
-If larger than |\numcontrolpts| then $c$ becomes the end-point of the curve,
-while if zero it becomes the starting point.
-A negative value sets both $p$ and $c$ to be the starting point,
-whereas other values leave $p$ unchanged.
-
-\DOCMODE(
-\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@
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Storing control point locations:}
-
-Upon starting to read the control points for a curve,
-first set the counter |\crv@cnt@| to be zero.
-Store the position of $p$ and $c$ and the current base in control sequences
-|\cv@start|, |\cv@end| and |\cv@restore| for later retrieval and to
-reinstate the current graphics state. |\cv@start| is a little more
-complicated in order to retain the existing value of $p$.
-
-\DOCMODE(
-\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@
-\DOCMODE)
-
-
-The position of each control point is stored as the expansion
-of a control sequence whose name encodes its place within the $<poslist>$.
-Expanding this control sequence sets $c$ to be the appropriate position.
-
-\DOCMODE(
-\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@}%
-}
-\DOCMODE)
-% use of |\xycrvptsnum@| here is not desirable, but it works.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Alternate curve styles:}
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-There is the potential to do many other things here, by using |\afterCURVE|,
-once the list of control points has been read.
-
-\DOCMODE(
-\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@
-\DOCMODE)
-
-In fact this is essentially how |\controlpts| and |\convexhull|
-were interfaced before extensions were added to change styles.
-
-\begin{code}
-\def\controlpts{\afterCURVE{\xyctrlpts}%
- \readxycurve}
-\def\convexhull{\afterCURVE{\xycvxhull}%
- \readxycurve}
-\end{code}
-\displaycode
-
-\noindent
-The real work is done by |\xyctrlpts| and |\xycvxhull|.
-At the point when these macros are expanded the graphics state has the
-restored $p$ and $c$ to their original values,
-\ie\ the end-points of the curve.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{|\controlpts|:}
-
-This macro visits in order each of the control points dropping the requisite
-object. The connection style is not used and the direction does not change.
-For a loop-counter we use |\count@@@|.
-
-\DOCMODE(
-\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@
-\DOCMODE)
-
-The token list |\crvpts@| stores the following information:
-current scope ||, location of $p$ and $c$,
-number of control points |\crv@cnt@| and their locations.
-It does this by storing |\def|s for control sequence names,
-depending on the scope, which expand to this information.
-Thus by executing |\the\crvpts@| at the right level,
-the information is conveniently recovered via control sequences which
-do not conflict with anything else, and whose names can be reconstructed.
-
-\DOCMODE(
-\xydef@\addtocrvpts@#1{\crvpts@=\expandafter{\the\crvpts@#1}}
-\DOCMODE)
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Convex Hull:}
-
-This macro visits in order each of the control points dropping the requisite
-object. With the previous as $p$ and the current one as $c$, a connection
-is set in the requisite style. For a loop-counter we use |\count@@@|.
-
-Use a group |{\expandafter\POS\xycrvconn@}| else the |\loop@| gets upset.
-This does not affect the size of the \Xy-picture, since the dropped objects
-are not similarly shrouded.
-
-Also used for the trivial case where there are no control points, hence
-a straight line between $p$ and $c$ is what is requested.
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Spline constructions}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The control sequence |\xysplineparams@| provides a way to access a control
-sequence name that is unique to the current \Xy-pic scope.
-This control sequence will be used to store the parameters which determine
-the spline curve. Similarly |\xysplineedges@| will be used to store the
-parameter values and lengths (along the squine) to the locations where
-the spline crosses the edge of the objects at the ends $p$ and $c$.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xydef@\savespline@{%
-\splinetrace@{savespline@:}%
-% \edef\endspline@{\endgroup
- \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@}%
-}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-One new box register is required, for the object used to actually
-set the curve, \dots
-
-\DOCMODE(
-\xynew@{box}\splinebox@
-\DOCMODE)
-
-\dots\ and 4 dimen registers ...
-
-\DOCMODE(
-\xynew@{dimen}\splineval@
-\DOCMODE)
-\dots\ which is for tracking the natural spline parametrization;
-
-\DOCMODE(
-\xynew@{dimen}\splinedepth@
-\DOCMODE)
-\dots\ which is for tracking he depth of the recursive algorithms;
-
-\DOCMODE(
-\xynew@{dimen}\splinetol@
-\DOCMODE)
-\dots\ which contains the tolerance for the spline,
-(this can probably be shifted to an ordinary macro);
-
-\DOCMODE(
-\xynew@{dimen}\splinelength@
-\DOCMODE)
-\dots\ which accumulates a measure of the length along a spline curve.
-(Currently this is not being used, as most things can be done
-satisfactorily using the spline parametrization only.)
-
-
-Some new conditionals are also required. These are for testing whether
-successive places on the squine are sufficiently close together,
-and whether the objects should be placed or not.
-
-\DOCMODE(
-\xynew@{if}\ifsplinefar@
-\xynew@{if}\ifsplineplot@ % to plot points or not
-\DOCMODE)
-
-Provide some tracing ability, for debugging.
-
-\DOCMODE(
-\xydef@\splinetracing{\let\splinetrace@=\W@}
-\xydef@\splineignore@#1{}
-\xylet@\splinetrace@=\splineignore@
-\DOCMODE)
-
-\medskip
-
-The parameters for the current section of the spline are stored indirectly
-in |\xysplineparams@|, while information concerning the places where the
-spline crosses the edges of objects at $p$ and $c$ is stored indirectly in
-|\xysplineedges|.
-A control sequence |\readsplineparams@| is used to extract this information.
-Each spline type must provide a |\getsplineparams@| which
-puts the information into easily usable form.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-The edge locations are stored as $x.y$
-where $x+1$ = spline-segment number and
-$y$ or $1-y$ = parameter value of the start, resp. finish,
-in the segment $x+1$.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\noindent Sometimes \TeX\ will run short of memory when many curves are
-used without a backend with special support for curves. In that case
-the following commands, that obey normal \TeX\ groupings, may be
-helpful:
-%
-\begin{defs1}
-|\SloppyCurves| \cr
-|\splinetolerance{|<dimen>|}| \cr
-\end{defs1}
-\noindent\unskip
-%
-allow adjustment of the tolerance used to typeset curves. The first sets
-tolerance to .8pt, after which |\splinetolerance{0pt}| resets to
-the original default of fine curves.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Some useful methods for accurate division by integers.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Before constructing the curve we first examine the ``drop'' object,
-setting it in an |\xybox|. The size of this object determines the
-spacing of objects placed along the curve, via the {\em tolerance\/}
-of the spline. This determines the maximum separation of places at
-which objects will be dropped; \ie\ when two adjacent places would
-be separated by more than this amount, the spline algorithm
-constructs another place on the curve intermediate between these two.
-
-\noindent{\bf Note: } Alter the spline tolerance by adjusting the size
-of the ``drop'' object. In particular, a dotted line can be achieved by
-setting an empty object with non-zero size. If the size is zero then the
-default tolerance is used. Initially this is .4pt; it may be altered
-using |\splinetolerance|<dimen>, where <dimen> must be greater than
-zero, else the initial tolerance is reset.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-Similarly examine the ``connect'' object. If none has been specified
-then there is no need to calculate the tangent direction at each
-place along the curve. This saves on both time and memory requirement.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-"Procedure":
-(1)~If |\xycrvdrop@| is empty, define |\splinedrop@| to expand
-to |\copy\zerodotbox@|, thus creating a curve constructed from small dots.
-Otherwise (2a)~set the |\splinebox@| with the specified object and
-(2b)~use |\copy\splinebox@| as the expansion of |\splinedrop@|.
-(3)~Set |\splinetol@| to be $\sqrt2\times$ maximum of width and
-height+depth of the box.
-
-If |\xycrvconn@| is empty~(4)~then |\splineconn@| is set to |\relax|.
-(5)~Otherwise it is necessary to reset the direction at each
-place along the curve before dropping the object specified
-by |\xycrvconn@|.
-
-\DOCMODE(
-\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@ % %(5)
- \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
-\DOCMODE)
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-This stops objects being placed too close together along the spline.
-It is necessary at the beginning of a segment with a non-zero edge.
-Otherwise, with a large |\splinetolerance@|, the accuracy of the
-place-finding mechanism results in being so deep in the tree that
-objects placed at every level on the way up would be much too close.
-
-\DOCMODE(
-\xydef@\splinetooclose@{\aftergroup\aftergroup\aftergroup\splinetooclose@@}
-\xydef@\splinetooclose@@{\def\splineplotpt@{\relax}}
-\DOCMODE)
-
-Each place along the curve is tested according to a |\splinetest@|.
-Normally this is for visibility according to the extent of the objects
-at the end-points of the curve.
-When an edge is crossed then the |\splinecontinue| routine is called
-to decide how the behaviour may change e.g. whether the recursion
-should continue or exit to the top of the existing tree.
-
-\DOCMODE(
-\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@
-
-\DOCMODE)
-
-Points where segments join lie at the top of the recursive tree.
-They are tested directly against the objects at the endpoints,
-in order to decide whether or not they are visible.
-
-\DOCMODE(
-\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@
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This routine is used to find where the spline crosses
-the edges of the objects at $p$ and $c$.
-First (1)~ we set up the tests which will determine when
-the edge has been crossed. Then commence the scan.~(2)
-
-\DOCMODE(
-\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@{}%
-% \else\DNii@{0.0}\ifx\bendPLACE@\nextii@\DN@{}\fi
- \fi\fi % use the saved values
- \fi\fi\fi \next@ }% %(2)
-
-\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}}%
-% \ifInside@\aftergroup\splineplot@true\else\aftergroup\splineplot@false\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
-\DOCMODE)
-
-(3)~Start a new group and bind some macros appropriate
-to finding the starting edge.
-(4)~start the spline algorithm, using a small tolerance.
-(5)~Close the group, thus removing the bindings of~(3).
-(6)~Record the information, which has been stored globally.
-(7)~Do the same for the ending edge.
-(8)~Clear the global information.
-After this, set the curve as usual.~(9)
-
-\DOCMODE(
-\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@}% %(6)
- \global\let\splineedges@=\relax % %(8)
-\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 % %(3)
-\splinetrace@{scan for start}%
- \global\let\splineadvance@=\splineadvance@@ %(3)
- \let\spline@start=\splinefindStart@ %(3)
- \let\spline@end=\spline@end@@ %(3)
- \let\splinefinish@=\splinefinish@@
- \let\splinewhich=\relax
- \global\splinelength@=\z@
-% \let\splinerec@=\splineSrec@
- \def\splinerec@{\let\splinerec@=\splineSrec@ \splinedecast@@}%
- \edef\splineedges@{}%
- \expandafter\let\xysplineedges@\relax
-% \bgroup
- \xylowtolerance@ \splined@@
- \ifx\splineedges@\empty\expandafter\splineslowScan@\fi
- \ifx\splineedges@\relax\expandafter\splinenostart@\fi
- \egroup }% %(4)
-
-\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 % %(3)<-----------
- \bgroup % %(7)
-\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@
-% \let\splinerec@=\splineErec@
- \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@}% %(6)
- \global\let\breakedges@=\relax % %(8)
-\splinetrace@{break params: \xybreakedges@::\bstartPLACE@--\bendPLACE@}%
- \expandafter\let\xysplineedges@\xybreakedges@ }
-
-\xydef@\getcrvsegsnum@{% sets \count@
- \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 }%% first test initial point.
-}
-
-\xydef@\splinefindStart@{%
- \expandafter\crv@cnt@\xycrvptsnum@\relax
- \ifnum\crv@cnt@>\tw@
- \crv@cnt@=\@ne \splineplot@false \splinesegment@{\crv@cnt@}%
- {\splineStarttest %% test end of segment.
- \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@@
-}
-\DOCMODE)
-
-This finds the first spline segment whose endpoint is beyond the edge of
-the object.
-
-\DOCMODE(
-\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@
-}
-\DOCMODE)
-
-Finding the end is similar, but the spline is searched in reverse order.
-
-\DOCMODE(
-\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 }%% first test initial point.
-}
-
-\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@
-% \global\advance\splineval@ .5\splinedepth@
- \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 %% test end of segment.
- \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@
-}
-\DOCMODE)
-
-These are the tests, to determine when the edge-point has been found.
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-\DOCMODE(
-\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@
-% \global\advance\splineval@ .5\splinedepth@
- \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{% gobbles |\splinecancel|
- \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
-%\xystatus@{SS}%
- \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\splinetest@=\splineStarttest
- \global\let\splineEndtest=\splineBreakStarttest@
- \global\let\splinetest@=\splineBreakStarttest@
-% \global\let\splinerec@=\splineSrec@
- \gdef\splinerec@{\global\let\splinerec@=\splineSrec@ \splinedecast@@}%
- \global\let\splinepoint=\relax
- \global\let\spline@end=\checkfoundSbreak@
-% \global\let\splinegoal@=\splineRecordBreakValue@
- \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 %\checkfoundSbreak@
- \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\crv@cnt@=\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@@ %(3)
- \let\spline@start=\splinefindBStart@ %(3)
- \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@ \global\splinedepth@=.5\p@}
- \global\splineval@=\z@ \splinedepth@=.5\p@}
-
-\xydef@\breakendcontinue@{\bgroup
- \edef\tmp@{\X@p = \the\X@c \Y@p=\the\Y@c}\cv@end\tmp@ % <--- irrelevant ?
- \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}%
-%\xystatus@{EE}%
- \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\splinetest@=\splineEndtest
- \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@=\splineRecordEndBreakValue@
- \global\let\splinegoal@=\splineRecordEBreakValue@
- \global\let\splinefinish@=\splinefinish@@
- \splinerec@ }
-
-\xydef@\splineRecordEBreakValue@{%\getcrvsegsnum@
-\splinetrace@{\the\count@\space segments, \the\splineval@}%
-% \ifnum\segmentnum@>\z@ \dimen@=\segmentnum@\p@ \else \dimen@=\p@\fi
-% \advance\dimen@-\splineval@\relax
-% \ifnum\count@>\@ne \divide\dimen@\count@\fi
-% \global\splineval@=\dimen@
- \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 %\checkfoundEbreak@
- \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@ }
-\DOCMODE)
-
-This appends the new information to that currently stored in the control
-sequence referenced by |\xysplineparams@|. It is temporarily stored
-globally in |\splineparams@|, to be later transferred to
-(the c.s. referenced by) |\xysplineparams@| when at the appropriate
-level of groupingl.
-
-\DOCMODE(
-\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
-% \ifx\breakedges@\relax\relax\else\ifx\breakedges@\empty\else
-% \ifdim\splineval@<\p@\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@\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
-% \multiply\splineval@\m@ne \advance\splineval@\p@ % <---------- !!!
- \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@ }%
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Use the following distance approximation:
-
-$$
-dist = \cases{
-dX + .5 dY/dX dY & if $dY/dX dY \lt (\sqrt2-1)\times dX $\cr
-{3\sqrt2\over4} dX + {\sqrt2\over4} dY/dX dY
-& if $(\sqrt2-1)\times dX \lt dY/dX dY \lt dX $\cr
-}$$
-and similarly, interchanging $dY$ and $dX$ when $dY \gt dX$.
-
-$\sqrt2 \approx 1.41422$,\
-$(\sqrt2)/2 \approx 0.70711$,\
-$(\sqrt2)/4 \approx 0.353555$,\
-$3(\sqrt2)/4 \approx 1.060665$
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE(
-\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@}%
-}}
-\DOCMODE)
-
-\DOCMODE(
-\xydef@\spline@end@{\lastsplinepoint@ \egroup \egroup
- \ht\z@=\z@ \dp\z@=\z@ \wdz@=\z@ \boxz@}%
-\gdef\splinetest@{\splineplot@true}
-\xydef@\spline@end@@{\egroup \egroup}
-\DOCMODE)
-
-
- ...value for |\splinerec@| for the fast find...
-
-\DOCMODE(
-\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@}%
-\DOCMODE)
-
-The macro |\spline@find#1#2| attempts to finds a specific point on a single
-spline segment.
- |#1| is the parameter value, in the range [0,1] on that segment;
- |#2| is a <dimen> denoting how much further to slide along the segment.
-It really only checks whether |#2| has a negative value before passing the
-information to |\spline@@find#1#2|, which does the actual search.
-
-If |#2| is negative then the spline segment is searched in the reverse direction,
-starting at its endpoint.
-This is done by reversing the order of the control points, hence the parameter
-value found as $x$ implies that we really want $1-x$ on the un-reversed segment.
-Similarly the resulting vaules for |\d@X| and |\d@Y| must be negated.
-The instructions to do this are loaded into a macro |\postfind@| which is expanded
-once the search has been completed.
-For an unreversed segment |\postfind@| expands to |{}|.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-
-
-\DOCMODE(
-\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
-% \global\splinedepth@=\p@
- \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@ }
-\DOCMODE)
-
-\DOCMODE(
-\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@ }%
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xydef@\splinefocus@{%
- \d@X=\dimen5\relax \d@Y=\dimen7\relax \setsplinedir@ }
-
-\xydef@\splinesegment@#1{}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-There are some extra hooks.
-
-\DOCMODE(
-\xydef@\xyprecurve@{}
-\xydef@\xypostcurve@{}
-\DOCMODE)
-
-\DOCMODE(
-\xydef@\splineset@{%
-\splinetrace@{splineset@:}%
- \ifx\bstartPLACE@\empty %\splinetrace@{invisible curve}%
- \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@ }
-\DOCMODE)
-
-For the actual setting, provide hooks which will allow
-alternative back-ends to be used in the special cases.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-The special cases are handled just like the normal case except
-However the control sequence names provide a place for
-rebinding to accomodate alternative back-ends.
-
-\DOCMODE(
-\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@{ }%+=<10pt>[o]{}}%
- \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@@}
-
-\DOCMODE)
-
-This establishes the test appropriate to actually setting
-the spline curve. Global definitions are used.
-This may not always be necessary!!
-
-\BUG: the |7.5pt| below should be the |\Step@@| method to be included.
-
-\DOCMODE(
-\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 %6
- \let\spline@start=\spline@start@
- \let\spline@end=\spline@end@ %5
- \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@ %\emptyspline@
- \fi %%\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 % ifdim\dimen7=\z@
- \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@ }}
-\DOCMODE)
-
-|\splineTrec@| is the initial value for |\splinerec@| when a spline
-is being set. It descends the tree of places on the spline (1) until the
-required parameter value is found (2a) or is sufficiently close (2b).
-At this point call |\splinesetting@| and |\splinecontinue| to
-setup, and proceed with, the actual type-setting.
-
-\DOCMODE(
-\xydef@\splineTrec@{{%
- \advance\splineval@\splinedepth@ % (1)
- \ifdim\dimen5=\splineval@ % (2a)
- \aftergroup\splinecontinue % (3)
- \else \dimen@=\dimen5\advance\dimen@-\splineval@
- \ifdim\dimen@<\z@ \dimen@=-\dimen@ \fi
- \ifdim\dimen@<.001\p@ % possibly too high ? % (2b)
- \aftergroup\splinecontinue % (3)
- \else
- \ifdim\dimen5<\splineval@\aftergroup\splinedecast@@ % (1)
- \else \aftergroup\splineadvance@ % (1)
- \fi\fi\fi}}
-\DOCMODE)
-
-Setting the curve uses the current |\splinerec@@| and
-sets |\splinepoint| to |\splineplotpt@| to cause objects to be typeset.
-This must be done via a |\gdef| rather than a |\global\let|
-since it is sometimes necessary to omit the object when it would
-be too close, see |\splinetooclose@|.
-
-\DOCMODE(
-%\xydef@\splinesetting@{\xyFN@\splinesetting@@}
-\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@}}
-\DOCMODE)
-
-This handles, for each point of the curve,
-whether to place an <object> or horizontal glue.
-
-\DOCMODE(
-\xydef@\splineplotpt@{{\global\advance\dimen@i-\X@c
- \splinetest@ \DN@{\splineglue@}\ifsplineplot@
-% \splineStarttest@ \ifsplineplot@
-% \splineEndtest@ \ifsplineplot@
- \DN@{\dosplineplotpt@}%
-% \fi\fi
- \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@}}
-\DOCMODE)
-
-These handle the ``cleaning up'' after a point on the curve has been located.
-
-\DOCMODE(
-\xydef@\splinefinish@@{\postspline@ \splinegoal@ \splinecancel@ }
-
-\xydef@\splinecancel@{%
- \global\let\splinerec@=\relax
- \global\let\splinepoint=\relax
- \global\let\splinecontinue=\relax
-% \global\let\splinedecast@@=\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@
-% \setsplineTangent@ }
- \splinesetdir@ }
-
-\xylet@\splinefinish@\splinefinish@@
-\xylet@\splinewhich\splineDwhich@
-
-\xydef@\squinewhich@{%
- \ifdim\dimen5>\squinelength % \X@c=\L@c \Y@c=\D@c
- \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 %%% hack which works.
- \squinefinish}
-\xydef@\squineDwhich@{%
- \ifdim\dimen5>\squinelength % \X@c=\L@c \Y@c=\D@c
- \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 %%% hack which works.
- \squinefinish}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection{B\'ezier quadratic splines --- squines}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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@ }
-
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Use the registers |\A@| and |\B@| to store the coordinates of the
-single control point. The whole curve lies within the convex
-polygon with vertices at $p$, $(p+a)/2$, $(c+a)/2$ and $c$
-where $a$ denotes the control point. Set |\X@max|, |\X@min|, |\Y@max|
-and |\Y@min| to be the extremes of the coordinates of these 4 points.
-There may not actually be any point on the curve achieving these
-extremes, but certainly we get pretty close.
-
-\DOCMODE(
-\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 }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The algorithm used for computing coordinates of points on quadratic
-B\'ezier splines is essentially that used by D. E. Knuth in
-|picmac.tex|\cite{picmac} (aka |gpxmac.tex|).
-It is a recursive de Casteljau algorithm of the ``divide and conquer'' type.
-(In Knuth's macros these types of curves were
-given the name ``squines''. This explains some of the control
-sequence names used here.)
-
-The differences from Knuth's algorithm are simply to allow
-more of the available information to be used at points along the spline.
-In particular the tangent direction can be calculated and tests can be
-performed to decide when to break out of the algorithm, rather than
-letting it run its full course.
-
-\DOCMODE(
-\xydef@\squinedecast@{\halve@dimen\splinedepth@ %\divide\splinedepth@\tw@
- \R@c=\L@c \advance\L@c\X@p \halve@dimen\L@c %\divide\L@c\tw@
- \advance\R@c\X@c \halve@dimen\R@c %\divide\R@c\tw@
- \A@=\L@c \advance\A@\R@c \halve@dimen\A@ %\divide\A@\tw@
- \D@c=\U@c \advance\U@c\Y@p \halve@dimen\U@c %\divide\U@c\tw@
- \advance\D@c\Y@c \halve@dimen\D@c %\divide\D@c\tw@
- \B@=\U@c \advance\B@\D@c \halve@dimen\B@ %\divide\B@\tw@
- \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}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The tangent direction is computed from the displacement to the ``recursive''
-control point.
-
-\DOCMODE(
-\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 }
-\DOCMODE)
-
-We need a way to access the information in |\splineparams|.
-
-\DOCMODE(
-\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,}}%
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Start the picture by (1)~setting a box, as usual.
-(2)~Initialize global variables; these must be global since they are
-used to store information which must be preserved outside the grouping
-which is vital to the recursive nature of the algorithm.
-(3)~Move horizontally to the starting point at $p$.
-(4)~Begin by handling the starting point; \ie\ decide whether it is to be
-plotted or not.
-
-\DOCMODE(
-\xydef@\squine@start@{\setboxz@h\bgroup % %(1)
- \global\splinelength@=\z@ \global\dimen@i=\z@ \global\dimen3=\z@ % %(2)
- \kern\X@p % %(3)
- {\squinesetparams@ \X@c=\X@p \Y@c=\Y@p \firstsplinepoint@ % %(4)
- }\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@@{%
-% \global\splinedepth@=\p@
- \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 }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection{B\'ezier cubic splines}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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@ }
-
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Use the registers |\A@|, |\B@|, |\dimen3| and |\dimen5| to store coordinates
-of the two control points, denoted $l$ and $r$ say. The whole curve lies
-within the convex polygon $p$, $(p+l)/2$, $(c+r)/2$ and $c$ where the vertices are
-not necessarily in this order. Set |\X@max|, |\X@min|, |\Y@max|
-and |\Y@min| to be the extremes of the coordinates of these 4 points.
-There may not actually be any point on the curve achieving these
-extremes, but certainly we get pretty close.
-
-\DOCMODE(
-\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
-}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The recursive algorithm for cubic B\'ezier splines is similar to the
-quadratic one. Now there are two ``recursive'' control points to be
-calculated upon each subdivision.
-
-On the $p$-side:
-\begin{eqnarray*}
-p_p &=& p \\
-l_p &=& (p+l)/2 \\
-r_p &=& (p+2l+r)/4 \\
-c_p &=& (p+3l+3r+c)/8 \\
-\end{eqnarray*}
-while on the $c$-side
-\begin{eqnarray*}
-p_c &=& (p+3l+3r+c)/8 \\
-l_c &=& (l+2r+c)/4 \\
-r_c &=& (r+c)/2 \\
-c_c &=& c \\
-\end{eqnarray*}
-Notice that $c_p=p_c$ and that the tangents match there.
-
-\DOCMODE(
-\xydef@\cubicdecast@{\halve@dimen\splinedepth@ %\divide\splinedepth@\tw@
- \A@=\L@c \advance\A@\R@c \halve@dimen\A@ %\divide\A@\tw@
- \advance\R@c\X@c \halve@dimen\R@c %\divide\R@c\tw@
- \B@=\U@c \advance\B@\D@c \halve@dimen\B@ %\divide\B@\tw@
- \advance\D@c\Y@c \halve@dimen\D@c %\divide\D@c\tw@
- \advance\L@c\X@p \halve@dimen\L@c %\divide\L@c\tw@
- \advance\U@c\Y@p \halve@dimen\U@c %\divide\U@c\tw@
- \begingroup
- \X@c=\R@c \advance\X@c\L@c \halve@dimen\X@c %\divide\X@c\tw@
- \advance\X@c\A@ \halve@dimen\X@c %\divide\X@c\tw@
- \Y@c=\D@c \advance\Y@c\U@c \halve@dimen\Y@c %\divide\Y@c\tw@
- \advance\Y@c\B@ \halve@dimen\Y@c %\divide\Y@c\tw@
- \R@c=\L@c \advance\R@c\A@ \halve@dimen\R@c %\divide\R@c\tw@
- \D@c=\U@c \advance\D@c\B@ \halve@dimen\D@c %\divide\D@c\tw@
- \bgroup \splinerec@
- \egroup \splinepoint \endgroup
- \X@p=\L@c \advance\X@p\R@c \halve@dimen\X@p %\divide\X@p\tw@
- \advance\X@p\A@ \halve@dimen\X@p %\divide\X@p\tw@
- \L@c=\R@c \advance\L@c\A@ \halve@dimen\L@c %\divide\L@c\tw@
- \Y@p=\U@c \advance\Y@p\D@c \halve@dimen\Y@p %\divide\Y@p\tw@
- \advance\Y@p\B@ \halve@dimen\Y@p %\divide\Y@p\tw@
- \U@c=\D@c \advance\U@c\B@ \halve@dimen\U@c %\divide\U@c\tw@
- \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}}
-\DOCMODE)
-
-\DOCMODE(
-\xydef@\cubiced@@{%
-% \global\splinedepth@=\p@
- \splinedepth@=\p@
- \global\splineval@=\z@
- \spline@start
- \global\dimen@i=\X@p \global\dimen3=\Y@p
- \splinerec@ \spline@end }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The tangent direction is computed from the displacement to the ``recursive''
-control point.
-
-\DOCMODE(
-\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
-% \ifdim\X@c=\X@p \ifdim\Y@c=\Y@p
-% \d@X=\L@c \d@Y=\U@c \advance\d@X-\X@p \advance\d@Y-\Y@p
-% \ifdim\d@X=\z@ \ifdim\d@Y=\z@
-% \d@X=\R@c \d@Y=\D@c \advance\d@X-\X@p \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 }
-\DOCMODE)
-
-We need a way to access the information in |\splineparams|.
-
-\DOCMODE(
-\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 }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Start the picture by (1)~setting a box, as usual.
-(2)~Initialize global variables; these must be global since they are
-used to store information which must be preserved outside the grouping
-which is vital to the recursive nature of the algorithm.
-(3)~Move horizontally to the starting point at $p$.
-(4)~Begin by handling the starting point; \ie\ decide whether it is to be
-plotted or not.
-
-\DOCMODE(
-\xydef@\cubic@start@{\setboxz@h\bgroup % %(1)
- \global\splinelength@=\z@ \global\dimen@i=\z@ \global\dimen3=\z@ % %(2)
- \kern\X@p % %(3)
- {\cubicsetparams@ \X@c=\X@p \Y@c=\Y@p \R@c=\X@c \D@c=\Y@c
- \firstsplinepoint@ }\bgroup
-} % %(4)
-
-\xydef@\cubicsetparams@{%
- \expandafter\expandafter\expandafter\getsplineparams@\xysplineparams@
- \global\dimen@i=\X@p \global\dimen3=\Y@p }
-\DOCMODE)
-
-\DOCMODE(
-\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,}%
- }%
-\DOCMODE)
-
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection{B-splines}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The cases of 3 and 4 control points have some special simplifying features.
-
-\DOCMODE(
-\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 }%
-\DOCMODE)
-
-Now for the general case of $\ge5$ control points.
-
-\DOCMODE(
-\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\splined@@=\cubiced@@
- \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@@{%
-% \global\splinedepth@=\p@
- \splinedepth@=\p@
- \global\splineval@=\z@
- \spline@start
- \global\dimen@i=\X@p \global\dimen3=\Y@p
- \splinerec@ \spline@end }
-\DOCMODE)
-
-\DOCMODE(
-\xydef@\bsplineconnect@{\splineconnect@ \crvconnect@@
- \let\splinesegment@=\bsplinesegment@ }%
-
-\xydef@\getbsplineparams@{\getcubicparams@}
-
-\xydef@\dobspline@{\xysplineparams@ \scanbspline@ \firstbspline@ }%
-\DOCMODE)
-
- Registers |\dimen3| and |\dimen5| are used globally, since the
- standard local registers are already used.
-
-\DOCMODE(
-\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 %%% very important to |\relax|
- \ifnum\count@=3\relax
- \advance\X@c-\A@ \dimen@nth4\X@c % \divide\X@c by4
- \advance\X@c\dimen3\relax
- \advance\Y@c-\B@ \dimen@nth4\Y@c % \divide\Y@c by4
- \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 % \divide\X@c by6\relax
- \advance\Y@c 7\dimen5 \advance\Y@c-2\B@
- \dimen@nth6\Y@c % \divide\Y@c by6\relax
- \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@ % \divide\A@\tw@
- \B@=\Y@c \advance\B@\dimen5 \halve@dimen\B@ % \divide\B@\tw@
- \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@ % \divide\A@ by3
- \advance\B@\Y@c \dimen@nth3\B@ % \divide\B@ by3\relax
- \advance\X@c\A@ \halve@dimen\X@c % \divide\X@c\tw@
- \advance\Y@c\B@ \halve@dimen\Y@c % \divide\Y@c\tw@
- \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 % \divide\X@c by6\relax
- \advance\Y@c 7\dimen5\advance\Y@c-2\B@
- \dimen@nth6\Y@c % \divide\Y@c by6\relax
- \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 % \divide\X@c by4
- \advance\X@c \dimen3\relax
- \advance\Y@c-\B@ \dimen@nth4\Y@c % \divide\Y@c by4
- \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@@
-\DOCMODE)
-
-\DOCMODE(
-\xydef@\scanbspline@{\splined@@@}
-\DOCMODE)
-
-\DOCMODE(
-\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@ %\advance\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 % dimen5 and dimen7 are NOT global here
-\splinetrace@{** adjusting edges **}%
- \readsplineparams@ \adjust@forsegments@
-% \count@@=\dimen7\divide\count@@\p@
-% \advance\dimen7-\count@@\p@ \advance\count@@\@ne
-% \count@=\dimen5\divide\count@\p@
-% \advance\dimen5-\count@\p@ \advance\count@\@ne
-\splinetrace@{params:\xysplineparams@}%
-\splinetrace@{segment \segmentnum@:<\the\dimen5,\the\dimen7>:\xysplineedges@}%
-% \expandafter\ifnum\segmentnum@=\count@
-% \else
-% \expandafter\ifnum\segmentnum@<\count@\dimen5=\p@
-% \else\dimen5=\z@ \fi\fi
-% \expandafter\ifnum\segmentnum@=\count@@
- \multiply\dimen7by\m@ne \advance\dimen7by\p@
-% \else
-% \expandafter\ifnum\segmentnum@>\count@@\dimen5=\p@\dimen7=\p@
-% \else\dimen7=\z@ \fi\fi
- \expandafter\edef\xysplineedges@{%
- \noexpand\z@;\the\dimen5,\noexpand\z@;\the\dimen7,}%
- \edef\tmp@{\egroup
- \noexpand\def\expandafter\noexpand\xysplineedges@{\xysplineedges@}}%
- \tmp@ }
-\DOCMODE)
-
-These macros select the correct B\'ezier control points for each
-segment of the spline. This is needed for finding places on the
-constructed curves.
-
-In general there are 5 types of segment: first, second, middle,
-penultimate, final. The conversion from B-spline to B\'ezier is
-slightly different for each type.
-For middle segments the B\'ezier control points are determined
-in the following way:
-\begin{eqnarray*}
-X_{B_i}^{(1)} &=& {1\over3}\left( 2X^{(i)} + X^{(i+1)}\right)\\
-X_{B_i}^{(2)} &=& {1\over3}\left( X^{(i)} + 2X^{(i+1)}\right)\\
-X_{B_i}^{(0)} &=&
-{1\over6}\left( X^{(i-1)} + 4X^{(i)} + X^{(i+1)}\right)\\
-&=& {1\over6}\left( X^{(i-1)} + 7X_{B_i}^{(1)} - 2X_{B_i}^{(2)}\right)\\
-X_{B_i}^{(3)} &=&
-{1\over6}\left( X^{(i)} + 4X^{(i+1)} + X^{(i+2)}\right)\\
-&=& {1\over6}\left( X^{(i+2)} + 7X_{B_i}^{(2)} - 2X_{B_i}^{(1)}\right)\\
-\end{eqnarray*}
-
-\DOCMODE(
-\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@ % \divide\A@ by3\relax
- \advance\B@ by2\dimen5 \dimen@nth3\B@ % \divide\B@ by3\relax
- \dimen@=\dimen3 \advance\dimen@ by2\X@c
- \dimen@nth3\dimen@ % \divide\dimen@\thr@@
- \global\dimen3=\dimen@
- \dimen@=\dimen5 \advance\dimen@ by2\Y@c
- \dimen@nth3\dimen@ % \divide\dimen@\thr@@
- \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 % \divide\X@p by6\relax
- \advance\Y@p-2\dimen5\advance\Y@p by7\B@
- \dimen@nth6\Y@p % \divide\Y@p by6\relax
-}
-
-\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 % \divide\X@c by6\relax
- \advance\Y@c by7\dimen5\advance\Y@c-2\B@
- \dimen@nth6\Y@c % \divide\Y@c by6\relax
-\splinetrace@{>>: \the\X@c, \the\Y@c }%
-}
-\DOCMODE)
-
-For the second segment the expression for $X_{B_2}^{(0)}$ is different.
-Similarly the expression for $X_{B_{n-1}}^{(3)}$ is altered for the
-penultimate segment.
-
-\begin{eqnarray*}
-X_{B_2}^{(0)} &=&
-{1\over4}\left( X^{(1)} + 4X_{B_2}^{(1)} - X_{B_2}^{(2)}\right)\\
-X_{B_{n-1}}^{(3)} &=&
-{1\over4}\left( X^{(3)} + 4X_{B_{n-1}}^{(2)} - X_{B_{n-1}}^{(1)}\right)\\
-\end{eqnarray*}
-
-\DOCMODE(
-\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 % \divide\X@p by4\relax
- \advance\Y@p-\dimen5\advance\Y@p by4\B@
- \dimen@nth4\Y@p % \divide\Y@p by4\relax
-\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 % \divide\X@c by4\relax
- \advance\Y@c by4\dimen5\advance\Y@c-\B@
- \dimen@nth4\Y@c % \divide\Y@c by4\relax
-}
-\DOCMODE)
-
-For the first segment the first three B\'ezier control points are always
-determined in the same way:
-\begin{eqnarray*}
-X_{B_1}^{(0)} = X^{(0)} & X_{B_1}^{(1)} = X^{(1)}
- & X_{B_1}^{(2)} = {1\over2}(X_{B_1}^{(1)}+X^{(2)})\\
-\hbox{3+~segments}&
- & X_{B_1}^{(3)} = {1\over6}(7X_{B_1}^{(2)} - 2X_{B_1}^{(1)} + X^{(3)})\\
-\hbox{~2~segments}&
- & X_{B_1}^{(3)} = {1\over4}(4X_{B_1}^{(2)} - X_{B_1}^{(1)} + X^{(3)})\\
-\end{eqnarray*}
-
-
-\DOCMODE(
-\xydef@\bsegment@i{%
- \xycontrolpt@\z@ \X@p=\the\X@c \Y@p=\the\Y@c
-% \ifx\cv@start\relax
-% \bgroup\csname cv@0\endcsname
-% \edef\tmp@{\egroup \X@p=\the\X@c \Y@p=\the\Y@c}\tmp@
-% \else\xycontrolpt@\z@ \X@p=\the\X@c \Y@p=\the\Y@c\fi
-\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 % \divide\X@c by6\relax
- \advance\Y@c by7\dimen5\advance\Y@c-2\B@
- \dimen@nth6\Y@c % \divide\Y@c by6\relax
- }
-\DOCMODE)
-
-The last segment is determined symmetrically from the final four
-control points:
-\begin{eqnarray*}
-X_{B_n}^{(3)} = X^{(n+2)} & X_{B_n}^{(2)} = X^{(n+1)}
- & X_{B_n}^{(1)} = {1\over2}(X_{B_n}^{(2)}+X^{(n)})\\
-\hbox{3+~segments}&
- & X_{B_n}^{(0)} = {1\over6}(X^{(n-1)}-2X_{B_n}^{(2)}+7X_{B_n}^{(1)})\\
-\hbox{~2~segments}&
- & X_{B_n}^{(0)} = {1\over4}(X^{(1)}-X_{B_n}^{(2)}+4X_{B_n}^{(1)})\\
-\end{eqnarray*}
-
-\DOCMODE(
-\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@ % \divide\A@\tw@
- \B@=\Y@c \advance\B@\dimen5 \halve@dimen\B@ % \divide\B@\tw@
- \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@ }
-\DOCMODE)
-
-This is the switching-yard.
-
-\DOCMODE(
-\xydef@\bsplinesegment@#1{\xybsplinemethods@
- \count@@=#1\relax
- \ifnum\count@@=\@ne % first segment
- \bsegment@i \bsegment@i@iv
- \else\ifnum\count@@=\tw@ % second segment
- \bsegment@@ii@iii \bsegment@@ii@i \bsegment@@iv
-% \else\expandafter\count@\xycrvcnt@\advance\count@\m@ne
- \else\expandafter\count@\xycrvptsnum@\advance\count@\m@ne
- \ifnum\count@@=\count@ % last segment
- \bsegment@z \bsegment@z@i
- \else\advance\count@\m@ne
- \ifnum\count@@=\count@ % penult. segment
- \bsegment@@ii@iii \bsegment@@i \bsegment@@y@iv
- \else % middle segments
- \bsegment@@ii@iii \bsegment@@i \bsegment@@iv
- \fi\fi\fi\fi
- \expandafter\def\expandafter\segmentnum@\expandafter{\number#1}%
- \bsplined@ }
-\DOCMODE)
-
-Here are the differences for 3 control points.
-
-\DOCMODE(
-\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 % \divide\X@c by4\relax
- \advance\Y@c 4\dimen5\advance\Y@c-\B@
- \dimen@nth4\Y@c % \divide\Y@c by4\relax
- \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 % \divide\X@p by4\relax
- \advance\Y@p 4\B@ \advance\Y@p-\dimen5 %
- \dimen@nth4\Y@p % \divide\Y@p by4\relax
- \fi\fi
- \expandafter\def\expandafter\segmentnum@\expandafter{\number#1}%
- \bsplined@ }
-\DOCMODE)
-
-Here are the differences for 4 control points.
-
-\DOCMODE(
-\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 %\xycontrolpt@{5}%
- \fi\fi\fi
- \expandafter\def\expandafter\segmentnum@\expandafter{\number#1}%
- \bsplined@ }
-\DOCMODE)
-
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Circles and Ellipses}
-??=[circles+ellipses]
-
-\noindent Here we describe the means to a specify circles of arbitrary
-radius, drawn with arbitrary line styles. When large-sized objects are
-used they are regularly spaced around the circle. Similarly ellipses
-may be specified, but only those having major/minor axes aligned in
-the standard directions; spacing of objects is no longer regular, but
-is bunched toward the narrower ends.
-
-Such a circle or ellipse is specified using\dots
-\begin{defs1}
-|\xycircle|<vector>|{|<style>|}|
-\end{defs1}
-\noindent
-where the components of the <vector> determine the lengths of the axis
-for the ellipse; thus giving a circle when equal.
-The <style> can be any <conn>, as in ??g[xyarrow.doc:f.arrow] that works
-with curved arrows---many do. Alternatively <style> can be any <object>,
-which will be placed equally-spaced about the circle at a separation
-to snugly fit the <object>s.
-If <empty> then a solid circle or ellipse is drawn.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\TODO: Recognize special <style>s; e.g. |.| for dotted with |\zerodot|,
-|=| for a doubled circle --- alter the radius, draw two circles;
-|:| for double dotted (perhaps use |\doubled@|, |\tripled@|);
-|>| and |<| for chevrons;
-any others?
-
-To use any of these special symbols as the <object> for <style> then
-enclose it within extra braces, \eg~|\xycircle<20pt>{{>}}|.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The curves are not truly circular or elliptical, but are approximations
-given by cubic B\'ezier segments. Hence the |xycurve| feature must be loaded.
-
-\DOCMODE(
-\message{circles,}
-\DOCMODE)
-
-The circles are constructed from four B\'ezier cubic curves, one for each
-quadrant of the circle or circle. To do this it is sufficient to establish
-the control points for each cubic segment. This is straightforward, using
-the following ``magic number'', given a square basis such that the desired
-circle is the unit circle, or rectangular basis for which the ``unit circle''
-is the desired circle.
-
-\DOCMODE(
-\xydef@\Circmagic@@{0.5517847}
-\xylet@\Circmagic=\Circmagic@@
-\xydef@\twoPi@{6.2831852}
-\xydef@\fullPi@{3.1415926}
-\xydef@\halfPi@{1.5707963}
-\DOCMODE)
-
-This is the magic number, exactly given by
-${1\over12}\bigl(\sqrt{385}-13\bigr)$,
-that helps construct the B\'ezier cubic curve
-that best approximates a quadrant of a circle.
-It does so with remarkable accuracy,
-differing by at most .5\% of the radius at any angle;
-the average deviation along the whole quadrant being less than .13\%.
-The basic <object> defined here is |\circle|.
-
-\DOCMODE(
-\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 <radius>: must be <vector> or <empty>}{}\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
-}
-
-%\xydef@\buildcircle@{\save@
-%% \cubicCircleControls@@
-% \ifx\circleSTYLE@\empty\DN@{\solidcircle@{}}%
-% \else \expandafter\DN@\expandafter{\addDASH@{}}\relax
-% \ifx\next@\circleSTYLE@ \DN@{%
-% \expandafter\addDASH@\expandafter{\expandafter{\addDASH@{}}}}%
-% \else\DN@{\circledobjects@}\fi\fi\next@ \leave@}
-\DOCMODE)
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-The hook |\dosolidcircle@@| is provided so that back-ends may
-provide an alternative method to draw the circles/ellipses.
-Note that the token following |\solidcircle@| will be a group
-representing the <style> to be used.
-
-\DOCMODE(
-\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@
-\DOCMODE)
-
-This places objects equally spaced around a circle,
-according to angular position.
-
-\BUG: objects are not equally spaced around ellipses constructed this way.
-To get regular spacing around ellipses, in terms or arc-length say,
-is much more difficult, both theoretically and practically.
-
-\TODO: the size of the resulting <object> does not take into account
-the size of the <object> dropped around the circle.
-
-\DOCMODE(
-\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@ % \divide\dimen@\numobjects\relax
- \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@ }%
-%\def\placeQuadrants@{\placeAllQuadrants@}
-
-\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@
-% \cubicCircleControls@@
- \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@{}}%
-% \else\DN@{\circledobjects@}%
- \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@\dashedcircle@#1{\expandafter\expandafter\expandafter
-% \circletemplate@\expandafter\expandafter\expandafter{%
-% \expandafter\addDASH@\addDASH@{}}{}\circledobjects@ }%
-
-\xydef@\dottedcircle@#1{%
- \expandafter\def\expandafter\circleSTYLE@\expandafter{%
-% \expandafter{\addDOT@{}}}%
- \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
-
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{code}
-\xy 0;/r5pc/:*\dir{*}
- ;p+(.5,-.5)*\dir{*}="c"
-,**\dir{-},*+!UL{c},"c"
-,*\xycircle(1,.4){++\dir{<}}
-,*\xycircle(1,1){++\dir{>}}
-,*\xycircle<15pt,10pt>{}
-;*\xycircle<10pt>{{.}}
-\endxy
-\end{code}
-$$\docode$$
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-{\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@
- }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Quadratic Splines}
-??=[quadsplines]
-
-Quadratic B\'ezier splines, as distinct from cubic B\'ezier splines,
-are constructed from parabolic arcs, using `control points' to determine
-the tangents where successive arcs are joined.
-
-Various implementations of such curves exist.
-The one adopted here is consistent with the |xfig| drawing utility and
-\TPIC\ implementations. These have the property of beginning and ending
-with straight segments, half the length to the corresponding adjacent
-control-point. Furthermore the midpoint between successive control-points
-lies on the spline, with the line joining the control-points being tangent
-there.
-
-Such curves are specified, either as a <decor> or as an <object>,
-using\dots
-\begin{defs1}
-|\qspline{|<style>|}|
-\end{defs1}
-\noindent
-where the start and end of the curve are at $p$ and $c$ respectively.
-The control-points are taken from the current stack, see~??g[xy.doc:stack].
-If this stack is empty then a straight line is constructed.
-
-The following example compares the quadratic spline with the gentler
-curving B-spline having the same control points, using |\crvs|.
-%
-\begin{code}
-\xy /r1.5pc/:,+<5pc,3pc>*+{P};p
-@(,+(2,2)*{+}@+, +(2,-2)*{+}@+
-,+(2,2)*{+}@+, +(2,0)*+{C}="C"
-,*\qspline{},"C",**\crvs{.}
-,@i @)\endxy
-\end{code}
-$$\docode$$
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-If the current stack is empty, simply pass everything to |\crvs@|, as if
-the request originated from a |\crvs| or |\ar|. Otherwise we must build up
-the segments of the spline.
-
-\DOCMODE(
-\xydef@\qspline{\hbox\bgroup\crvresetbreaks@ \xy@spline@}
-
-\xydef@\xy@spline@#1#{\if\sempty@ \DN@{\crvs@{}\resetbreaks@}%
- \else\DN@{\xy@spline@i{#1}}\fi \next@ }%
-\DOCMODE)
-
-The |#1| parameter to |\xy@spline@i| is to allow
-alternative implementations; currently it is ignored.
-When |#1| is indeed empty,
-
-\DOCMODE(
-\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 % \divide\X@c\tw@
- \halve@dimen\Y@c % \divide\Y@c\tw@
- \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 % \divide\X@c\tw@
- \halve@dimen\Y@c % \divide\Y@c\tw@
- \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 % \divide\X@c\tw@
- \halve@dimen\Y@c % \divide\Y@c\tw@
- \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 }%
-\DOCMODE)
-
-The initial and final points in a segment are stored as |@p| and |@c|
-respectively. Where needed, the control is in |@m|.
-
-\DOCMODE(
-\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 }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xycurve.doc,v $
-% Revision 3.7 1999/02/16 15:12:50 krisrose
-% Interim release (Y&Y fonts now free).
-%
-% Revision 3.6 1998/03/06 01:28:05 krisrose
-% Releasing (with Y&Y fonts).
-%
-% Revision 3.4 1997/05/18 01:13:24 ross
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/18 09:01:45 ross
-% major revisions for the new BREAK methods
-% spline edge-finding is more robust
-% spline-breaks fully implemented
-% intersections of curve with straight connections implemented
-% improved tracings
-% adjusted methods for styles
-%
-% Revision 3.2 1995/09/19 18:20:20 ross
-% Bug fix release.
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/05 07:58:43 ross
-% Ready for v3 release?
-%
-% Revision 2.12 1994/10/25 03:01:14 ross
-% Final 3beta release [bug fixes & AMS-LaTeX fitting].
-%
-% Revision 2.12 1994/09/05 08:22:11 ross
-% incorporates some speed-ups, extra documentation
-%
-% Revision 2.11 1994/07/05 09:27:52 ross
-% Minor fixes; use 2.11 kernel stack code.
-%
-% Revision 2.9 1994/06/09 14:50:54 ross
-% Release 3beta.
-%
-% Revision 2.8 1994/04/08 10:36:40 ross
-% Second 3alpha release.
-%
-% Revision 2.7 1994/03/08 02:06:01 kris
-% Release 3alpha.
-%
-% Revision 2.6.9.1 1994/03/07 04:22:46 ross
-% Last internal 3alpha and pre-2.7 release.
-%
-% NEW for version 2.7 inspired by Knuth's picmac.tex.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xydoc.back b/Master/texmf-dist/source/generic/xypic/xydoc.back
deleted file mode 100644
index 8b137891791..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xydoc.back
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/Master/texmf-dist/source/generic/xypic/xydoc.bib b/Master/texmf-dist/source/generic/xypic/xydoc.bib
deleted file mode 100644
index ca8bbaac87b..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xydoc.bib
+++ /dev/null
@@ -1,764 +0,0 @@
-% $Id: xydoc.bib,v 3.6 1998/03/06 01:28:05 krisrose Exp $
-%
-% BibTeX References for the Xy-pic documentation.
-%
-% 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-1997 Kristoffer H. Rose <krisrose at ens-lyon.fr>
-%
-% 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, write to the Free Software Foundation, Inc.,
-% 675 Mass Ave, Cambridge, MA 02139, USA.
-%
-% CONTENTS:
-% Journals, publishers, and institutions.
-% Special TeX definitions.
-% My TeX production.
-% Other TeX related references, sorted by author.
-% Other references, sorted by author.
-% Log.
-%
-% NOTE: uses the abbreviations \TeX, \MF, \LaTeX, \AMS, \PiCTeX, and \Xy.
-
-@Preamble{"\label{BIBLIOGRAPHY}"}
-
-%
-% JOURNALS, PUBLISHERS, AND INSTITUTIONS.
-
-% Journals given in BibTeX standard styles:
-@string{cacm = "Communications of the ACM"}
-@string{sicomp = "SIAM Journal on Computing"}
-@string{tcs = "Theoretical Computer Science"}
-
-@string{jfp = "Journal of Functional Programming"}
-@string{lasc = "{LISP} and Symbolic Computation"}
-@string{spe = "Software Practice and Experience"}
-
-% Publishers...
-@string{A-W = "Addison-Wesley"}
-@string{N-H = "North-Holland"}
-@string{P-H = "Prentice-Hall"}
-@string{S-V = "Springer-Verlag"}
-@string{LNCS = "{LNCS}"}
-
-% Organizations...
-@string{ACM = "Association for Computing Machinery"}
-@string{AMS = "American Mathematical Society"}
-@string{DIKU = "{DIKU}, University of Copenhagen"}
-
-%
-% Xy-pic (most recent first).
-
-% Start of v3 as `published' from DIKU on the form required for
-% registration with PUF and ANL...
-
-% Kit.
-@Misc{RM95:Xy-pic,
- author = "Kristoffer H. Rose and Ross R. Moore",
- title = "{\Xy}-pic, version 3",
- month = jun,
- year = 1995,
- howpublished = "computer software kit",
- note = "includes
- User's Guide~\cite{R95:Xy-picUG}, and
- Reference Manual~\cite{RM95:Xy-picRM}"
-}
-
-% 1.
-@Manual{R95:Xy-picUG,
- author = {Kristoffer H. Rose},
- YEAR = {1995},
- TITLE = {{\Xy}-pic User's Guide},
- organization = {{DIKU}, University of Copenhagen},
- address = {Universitetsparken 1, DK--2100 K{\o}benhavn {\O}},
- month = jun,
- edition = {3.0},
- keywords = {diagram, picture, graph, arrow, curve, commutative diagram},
- summary = {{\Xy}-pic is a package for typesetting graphs and
- diagrams using Knuth's \TeX\ typesetting system.
- \Xy-pic works with most of the many formats
- available, \eg, plain \TeX, \LaTeX, \AMS-\LaTeX, and
- \AMS-\TeX. Several styles of input for various
- diagram types are supported; they all share a
- mnemonic notation based on the logical composition
- of visual components used},
- supersedes = {D-200},
- SEMNO = {D-237},
- PUF = {---},
- ID = {Man}
-}
-
-% 2.
-@Manual{RM95:Xy-picRM,
- author = {Kristoffer H. Rose and Ross R. Moore},
- YEAR = {1995},
- TITLE = {{\Xy}-pic Reference Manual},
- organization = {{DIKU}, University of Copenhagen},
- address = {Universitetsparken 1, DK--2100 K{\o}benhavn {\O}},
- month = jun,
- edition = {3.0},
- keywords = {diagram, picture, graph, arrow, curve, commutative diagram},
- summary = {{\Xy}-pic is a package for typesetting graphs and
- diagrams. It is structured as several modules, each
- defining a custom notation for a particular kind of
- graphical object or structure. Example objects are
- arrows, curves, frames, and colouring/rotation on
- drivers that support it; these can be organised in
- matrix, directed graph, path, polygon, knot, and
- 2-cell structure. Xy-pic works with most formats,
- including LaTeX, AMS-LaTeX, AMS-TeX, and plain TeX,
- and has been used to typeset complicated diagrams
- from many application areas including category
- theory, automata theory, algebra, neural networks,
- and database theory},
- supersedes = {D-201},
- SEMNO = {D-238},
- PUF = {---},
- ID = {Man}
-}
-
-% 3.
-@Misc{RM95:Xy-picCSTC,
- author = "Kristoffer H. Rose and Ross R. Moore",
- title = "{\Xy}-pic Complete Sources with {\TeX}\-nical Commentary",
- month = jun,
- year = 1995,
- howpublished = "not yet available"
-}
-
-% 4.
-@Misc{R95:Xy-picUnix,
- author = "Kristoffer H. Rose",
- title = "{\Xy}-pic Unix Distribution",
- month = jun,
- year = 1995,
- howpublished = "computer software"
-}
-
-% 5.
-@Misc{M95:Xy-picMac,
- author = "Ross R. Moore",
- title = "{\Xy}-pic Macintosh Distribution",
- month = jun,
- year = 1995,
- howpublished = "computer software"
-}
-
-% 6.
-@Misc{M95:Xy-picMacFonts,
- author = "Ross R. Moore",
- title = "{\Xy}-pic fonts, for Macintosh",
- month = jun,
- year = 1995,
- howpublished = "computer software"
-}
-
-% 7.
-@Misc{M95:Xy-macXFonts,
- author = "Ross R. Moore",
- title = "{\Xy}-pic extra font sizes, for Macintosh",
- month = jun,
- year = 1995,
- howpublished = "computer software"
-}
-
-% End of v3.
-
-
-@Misc{Xy-picHP,
- author = "Kristoffer H. Rose",
- title = "The {\Xy}-pic Home Page",
- howpublished = "\url{http://www.ens-lyon.fr/\~{}krisrose/Xy-pic.html}"
-}
-
-
-% Start of v2.12 as registered with Australian National Library:
-
-% Kit.
-@Misc{RM94:Xy-pic,
- author = "Kristoffer H. Rose and Ross R. Moore",
- title = "{\Xy}-pic, version 2.12",
- month = oct,
- year = 1994,
- howpublished = "computer software kit: ISBN 1 86408 117 1",
- note = "includes software, User's Guide and Reference
- Manual"
-}
-
-% 1.
-@TechReport{R94:Xy-picUGII,
- author = "Kristoffer H. Rose and Ross R. Moore",
- title = "{\Xy}-pic User's Guide and Installation Instructions",
- institution = "MPCE, Macquarie University",
- year = 1994,
- month = oct,
- type = "Mathematics Report",
- number = "94--148 (revised), ISBN 1 86408 125 2",
- address = "NSW 2109, Australia"
-}
-
-% 2.
-@TechReport{RM94:Xy-picRM,
- title = "{\Xy}-pic Reference Manual",
- author = "Kristoffer H. Rose and Ross R. Moore",
- institution = "MPCE, Macquarie University",
- year = 1994,
- month = oct,
- type = "Mathematics Report",
- number = "94--155, ISBN 1 86408 133 3",
- address = "NSW 2109, Australia",
- note = "Available with URL {ftp:/\kern-1pt/ftp.brics.dk\slash
- Staff\slash krisrose\slash TeX\slash xyrefer.ps}"
-}
-
-% 3.
-@Misc{RM94:Xy-picCSTC,
- author = "Kristoffer H. Rose and Ross R. Moore",
- title = "{\Xy}-pic Complete Sources with {\TeX}\-nical Commentary",
- year = 1994,
- month = oct,
- howpublished = "ISBN 1 86408 141 4"
-}
-
-% 4.
-@Misc{R94:Xy-picUnix,
- author = "Kristoffer H. Rose",
- title = "{\Xy}-pic Unix Distribution",
- year = 1994,
- month = oct,
- howpublished = "computer software: ISBN 1 86408 149 X",
- note = "Available with URL {ftp:/\kern-1pt/ftp.diku.dk\slash diku\slash
- users\slash kris\slash TeX\slash xy212run.tar.gz}"
-}
-
-% 5.
-@Misc{M94:Xy-picMac,
- author = "Ross R. Moore",
- title = "{\Xy}-pic Macintosh Distribution",
- year = 1994,
- month = oct,
- howpublished = "computer software: ISBN 1 86408 157 0",
- note = "Available with URL {ftp:/\kern-1pt/ftp.diku.dk\slash
- diku\slash users\slash kris\slash TeX\slash
- xy212mac.sit.hqx}"
-}
-
-% 6.
-@Misc{M94:Xy-picMacFonts,
- author = "Ross R. Moore",
- title = "{\Xy}-pic fonts, for Macintosh",
- year = 1994,
- month = oct,
- howpublished = "computer software: ISBN 1 86408 165 1",
- note = "Available with URL {ftp:/\kern-1pt/ftp.diku.dk\slash
- diku\slash users\slash kris\slash TeX\slash
- xy212mac.sit.hqx}"
-}
-
-% 7.
-@Misc{M94:Xy-macXFonts,
- author = "Ross R. Moore",
- title = "{\Xy}-pic extra font sizes, for Macintosh",
- year = 1994,
- month = oct,
- howpublished = "computer software: ISBN 1 86408 173 2",
- note = "Available with URL {ftp:/\kern-1pt/ftp.diku.dk\slash
- diku\slash users\slash kris\slash TeX\slash
- xymacxf.sit.hqx}"
-}
-
-% End of v2.12 as registered with Australian National Library...
-
-@TechReport{R94:Xy-picUG,
- author = "Kristoffer H. Rose",
- title = "{\Xy}-pic User's Guide",
- institution = "MPCE, Macquarie University",
- year = 1994,
- type = "Mathematics Report",
- number = "94--148",
- address = "NSW 2109, Australia",
- month = jun,
- note = "For version 2.10+. Latest version available with
- URL {\tt ftp:/\kern-1pt/ftp.diku.dk\slash diku\slash
- users\slash kris\slash TeX\slash xy\slash xyguide.ps}"
-}
-
-@TechReport{RM94:Xy-picRM-old,
- title = "{\Xy}-pic Reference Manual",
- author = "Kristoffer H. Rose and Ross R. Moore",
- institution = "MPCE, Macquarie University",
- year = 1994,
- month = jun,
- type = "Mathematics Report",
- number = "94--155",
- address = "NSW 2109, Australia",
- note = "For version 2.10+. Latest version available with
- URL {ftp:/\kern-1pt/ftp.diku.dk\slash diku\slash
- users\slash kris\slash TeX\slash xyrefer.ps}"
-}
-
-@Manual{M94:TypesettingNNX,
- title = "Typesetting Neural Nets using {\Xy}-pic",
- author = "Ross R. Moore",
- year = 1994,
- note = "Available through~\cite{Xy-picHP}"
-}
-
-@Misc{R94:Xy-picNCD,
- author = "Kristoffer H. Rose",
- title = "{\Xy}-pic and Notation for Categorical Diagrams",
- howpublished = "Invited talk at ECCT-94",
- year = 1994,
- month = jul,
- note = "Available through~\cite{Xy-picHP}"
-}
-
-@InProceedings{R92:HowTPDAT,
- author = "Kristoffer H. Rose",
- title = "How to Typeset Pretty Diagram Arrows with
- {\TeX}---Design Decisions used in {\Xy}-pic",
- pages = "183-190",
- booktitle = "{Euro\TeX~'92}---Proceedings of the 7th European
- {\TeX} Conference",
- year = 1992,
- editor = "Ji{\v{r}}{\'\i} Zlatu{\v{s}}ka",
- organization = "Czechoslovak {\TeX} Users Group",
- address = "Prague, Czechoslovakia",
- month = sep
-}
-
-% Kit.
-@Misc{R92:Xy-pic,
- author = "Kristoffer H. Rose",
- title = "{\Xy}-pic, version 2.6",
- year = 1992,
- howpublished = "computer software kit",
- note = "includes User's Manual~\cite{R92:TypesettingDXUM}"
-}
-
-@InProceedings{R92:TypesettingDXUM,
- author = "Kristoffer H. Rose",
- title = "Typesetting Diagrams with {\Xy}-pic: User's Manual",
- pages = "273-292",
- booktitle = "{Euro\TeX~'92}---Proceedings of the 7th European
- {\TeX} Conference",
- year = 1992,
- editor = "Ji{\v{r}}{\'\i} Zlatu{\v{s}}ka",
- organization = "Czechoslovak {\TeX} Users Group",
- address = "Prague, Czechoslovakia",
- month = sep
-}
-
-@Misc{R92:ExercisesX,
- author = "Kristoffer H. Rose",
- title = "Exercises in {\Xy}-pic",
- howpublished = "Handout at tutorial given at {Euro\TeX~'92}",
- year = 1992,
- month = sep,
- note = "Available by anonymous ftp in {\tt ftp.diku.dk:
- /diku\slash users\slash kris\slash TeX\slash
- Obsolete\slash xypicex.ps.Z}"
-}
-
-@Misc{R92:xypic.doc,
- author = "Kristoffer H. Rose",
- title = "{\Xy}-pic Macros: Technical Documentation",
- howpublished = "{\tt xypic.doc} of the {\Xy}-pic version 2.6 release",
- year = 1992,
- month = oct
-}
-
-@TechReport{H91:Xy-picTGDT,
- author = "Kristoffer H. Holm",
- title = "{\Xy}-pic: Typesetting Graphs and Diagrams with {\TeX}",
- institution = DIKU,
- year = 1991,
- type = "Student report",
- number = "91--7--10",
- address = "Universitets\-parken 1, {DK}-2100 K\o{}ben\-havn \O",
- month = jul,
- note = "Obsolete"
-}
-
-@Misc{R91:xy.doc,
- author = "Kristoffer H. Rose",
- title = "{\Xy}-pic Macros: Technical Documentation",
- howpublished = "{\tt xy.doc} of the $\beta$-release of the
- {\Xy}-pic package",
- year = 1991,
- month = nov,
- note = "Obsolete"
-}
-
-@Unpublished{HD90:DrawingGD,
- author = "Kristoffer H. Holm and Hans Dybkj\ae{}r",
- title = "Drawing Graphs and Diagrams",
- note = "Documents the obsolete {\tt graphs} macros",
- year = 1990,
- month = sep
-}
-
-%
-% TeX RELATED REFERENCES, SORTED BY AUTHOR.
-
-@Manual{AMS95:AMS-LaTeX,
- title = "{\AMS}-{\LaTeX} Version 1.2 User's Guide",
- organization = "American Mathematical Society",
- edition = "1.2b",
- year = 1995,
- month = jan
-}
-
-@Manual{AMS94:AMS-LaTeX,
- title = "{\AMS}-{\LaTeX} Version 1.2 User's Guide",
- organization = "American Mathematical Society",
- edition = "1.2",
- year = 1994,
- month = oct
-}
-
-@Manual{AMS91:AMS-LaTeX,
- title = "{\AMS}-{\LaTeX} Version 1.1 User's Guide",
- organization = "American Mathematical Society",
- edition = "1.1",
- year = 1991
-}
-
-@Manual{B:DiagramM,
- title = "The Diagram Macros",
- author = "Michael Barr",
- note = "Available by anonymous ftp from {\tt
- triples.math.mcgill.ca:\-/pub/texmacros/diagdoc.tex}"
-}
-
-@Manual{B:UsersGD3,
- title = "User's Guide for Diagram 3",
- author = "Francis Borceux",
- address = "{L}ouvain-la-{N}euve",
- note = "Available from the author, borceux@agel.ucl.ac.be"
-}
-
-@Manual{B94:ExpandedPT,
- title = "Expanded plain {\TeX}",
- author = "Karl Berry",
- edition = "version 2.6",
- year = 1994,
- month = may,
- note = "Available for anonymous ftp from CTAN in {\tt
- macros\slash eplain\slash doc}."
-}
-
-@Book{GMS94:LaTeXC,
- author = "Michel Goossens and Frank Mittelbach and Alexander Samarin",
- title = "The {\LaTeX} Companion",
- publisher = A-W,
- year = 1994
-}
-
-@article{HO87:TypesettingCSFTFT,
- author = "Roswitha T. Haas and Kevin C. O'Kane",
- title = "Typesetting Chemical Structure Formulas with the Text
- Formatter \TeX/\LaTeX",
-journal = "Computers \& Chemistry",
- year = 1987,
- volume = 11,
- number = 4,
- pages = "251-271"
-}
-
-@Article{K82:PIC-LTG,
- author = "Brian W. Kernighan",
- title = "{PIC}---A Language for Typesetting Graphics",
- journal = spe,
- year = 1982,
- volume = 12,
- number = 1,
- pages = "1-21"
-}
-
-@Manual{KC:eqn,
- title = "Typesetting Mathematics -- User's Guide",
- author = "B. W. Kernighan and L. L. Cherry",
- organization = "Bell labs"
-}
-
-@TechReport{K91:PIC-GLT,
- author = "Brian W. Kernighan",
- title = "{PIC}---A Graphics Language for Typesetting",
- institution = "{AT\&T} Bell Laboratories",
- year = 1991,
- type = "Computing Science Technical Report",
- number = 116,
- address = "Murray Hill, New Jersey 07974",
- month = may
-}
-
-@Book{K84:TeXbook,
- author = "Donald E. Knuth",
- title = "The {\TeX}book",
- publisher = A-W,
- year = 1984
-}
-
-@Book{K86:ComputerMT,
- author = "Donald E. Knuth",
- title = "Computer Modern Typefaces",
- publisher = A-W,
- year = 1986,
- volume = "A",
- series = "Computers \& Typesetting"
-}
-
-@Book{K86:MFbook,
- author = "Donald E. Knuth",
- title = "The {\MF}book",
- publisher = A-W,
- year = 1986
-}
-
-@Manual{K88:EEPIC,
- title = "{EEPIC} -- Extensions to epic and {\LaTeX} Picture
- Environment 1.1",
- author = "Conrad Kwok",
- organization = "Dept. of Electrical Engineering and Computer
- Science, University of California, Davis",
- year = 1988,
- month = feb
-}
-
-@Book{L86:LaTeX,
- author = "Leslie Lamport",
- title = "{\LaTeX}---A Document Preparation System",
- publisher = A-W,
- year = 1986
-}
-
-@Book{L94:LaTeX,
- author = "Leslie Lamport",
- title = "{\LaTeX}---A Document Preparation System",
- publisher = A-W,
- year = 1994,
- edition = "2nd"
-}
-
-@Misc{L88:latex.tex,
- author = "Leslie Lamport",
- title = "{\LaTeX} Version 2.09",
- howpublished = "{\tt latex.tex} of {\LaTeX} distribution",
- year = 1988,
- month = aug
-}
-
-@Manual{L88:FeynmanLRGFD,
- title = "A {\LaTeX} Routine for Generating feynman Diagrams",
- author = "Michael Levine",
- edition = "1.0",
- year = 1988,
- month = oct,
- OPTnote = "{CTAN} {\tt macros/\-latex/\-contrib\slash \-feynman}"
-}
-
-@Article{N60:ReportALA60,
- author = "P. Naur and others",
- title = "Report on the Algorithmic Language {ALGOL} 60",
- journal = cacm,
- year = 1960,
- volume = 3,
- pages = "299-314"
-}
-
-@Manual{O79:NROFF/TROFFUM,
- title = "{NROFF/TROFF} User's Manual",
- author = "J. F. Osanna",
- organization = "Bell Laboratories",
- address = "Murray Hill, N.J.",
- year = 1979
-}
-
-@TechReport{P86:EnhancementsPEL,
- author = "Sunil Podar",
- title = "Enhancements to the Picture Environment of {\LaTeX}",
- institution = "Dept. of Computer Science, S.U.N.Y. at Stony Brook",
- year = 1986,
- number = "86-17",
- month = jul
-}
-
-@Manual{ps,
- title = "PostScript Language Reference Manual",
- organization = "Adobe Systems Incorporated",
- edition = "second",
- year = 1990
-}
-
-@Manual{R87:UsersMDM,
- title = "User's Manual for Diagram Macros",
- author = "John Reynolds",
- year = 1987,
- month = dec,
- note = "Available by anonymous ftp from {\tt e.ergo.cs.cmu.edu}"
-}
-
-@Manual{dvips,
- title = "{DVIPS}: A {\TeX} Driver",
- author = "Tomas Rokicki",
- note = "Distributed with the dvips program found on CTAN archives"
-}
-
-@Manual{textures,
- title = "Textures User's Guide",
- organization = "Blue Sky Research",
- address = "Portland, Oregon",
- year = 1988,
- month = dec
-}
-
-@Book{S82:JoyT,
- author = "Michael D. Spivak",
- title = "The Joy of {\TeX}---A Gourmet Guide to Typesetting
- with the {\AMS-\TeX} Macro Package",
- publisher = A-W,
- year = 1982
-}
-
-@Book{S90:JoyT,
- author = "Michael D. Spivak",
- title = "The Joy of {\TeX}---A Gourmet Guide to Typesetting
- with the {\AMS-\TeX} Macro Package",
- edition = "second",
- publisher = AMS,
- year = 1990
-}
-
-@Misc{TWG-TDS,
- key = "TWG-TDS-0.98",
- author = "TUG Working Group TWG-TDS",
- title = "A Directory Structure for {\TeX} Files version 0.98",
- howpublished = "URL",
- year = 1995,
- month = may,
- note = "Available with URL {ftp:/\kern-1pt\slash
- jasper.ora.com\slash pub\slash twg-tds/}"
-}
-
-@Manual{T93:OzTeXUG,
- title = "{\OzTeX} User's Guide",
- author = "Andrew Trevorrow",
- address = "19 Abbot Lane, North Adelaide 5006, Australia",
- edition = "1.6",
- year = 1993,
- month = jul
-}
-
-@Manual{T90:CommutativeDT,
- title = "Commutative Diagrams in {\TeX}",
- author = "Paul Taylor",
- organization = "Department of Computing, Imperial College",
- address = "180 Queens Gate, London SW7 2BZ",
- year = 1990,
- month = jul
-}
-
-@Manual{T93:CommutativeDTV4,
- title = "Commutative Diagrams in {\TeX} (version 4)",
- author = "Paul Taylor",
- organization = "Department of Computing, Imperial College",
- address = "180 Queens Gate, London SW7 2BZ",
- year = 1993,
- month = jan
-}
-
-@Manual{W86:PiCTeXM,
- title = "The {\PiCTeX} Manual",
- author = "Michael J. Wichura",
- organization = "University of Washington",
- year = 1987
-}
-
-@Misc{W87:pictex.tex,
- author = "Michael J. Wichura",
- title = "{\PiCTeX}, Version 1.1",
- howpublished = "{\tt pictex.tex} of {\PiCTeX} distribution",
- year = 1987,
- month = sep
-}
-
-% $Log: xydoc.bib,v $
-% Revision 3.6 1998/03/06 01:28:05 krisrose
-% Releasing (with Y&Y fonts).
-%
-% Revision 3.4 1997/05/28 13:02:24 krisrose
-% Fixed missing breaks bug.
-%
-% Revision 3.3 1996/12/19 03:31:56 krisrose
-% Maintenance release
-%
-% Revision 3.2 1995/09/19 18:22:27 kris
-% Bug fix 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.14 1995/07/06 02:56:02 kris
-% Buglets...
-%
-% 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.11 1994/07/05 10:37:32 kris
-% Third 3beta release [bug fixes].
-% Experimental graph feature included (for ECCT-94 presentation).
-%
-% Revision 2.10 1994/06/15 12:55:07 kris
-% Second 3beta release: bug fixes.
-%
-% 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.
-%
-% Revision 2.6.9.1 1994/03/07 04:22:46 kris
-% Last internal 3alpha and pre-2.7 release.
-%
-% Name changed from xypicman.bib to xydoc.bib.
-%
-% Revision 2.6.1.1 1992/07/01 07:08:24 kris
-% Send to EuroTeX '92...
-%
-% Revision 2.6 1992/06/24 01:23:34 kris
-% Unchanged from xy.bib v.2.5.
-%
-% Revision 2.1 1992/01/02 14:54:07 kris
-% Release version.
-%
-% Revision 1.4 1991/11/27 06:44:34 kris
-% Fits \beta-test on DIKU.
-%
-% Revision 1.3 1991/08/23 01:05:45 kris
-% Tidied up; fits report.tex[1.28].
-%
-% Revision 1.2 1991/08/05 04:02:12 kris
-% As used in student report 91-7-10.
-%
-% Revision 1.1 91/07/23 14:49:06 kris
-% Fits report.tex[1.5].
diff --git a/Master/texmf-dist/source/generic/xypic/xydoc.sty b/Master/texmf-dist/source/generic/xypic/xydoc.sty
deleted file mode 100644
index 0d5bb0c7a69..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xydoc.sty
+++ /dev/null
@@ -1,1270 +0,0 @@
-%% $Id: xydoc.sty,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Style for Xy-pic documentation under LaTeX.
-%% Copyright (c) 1993-1997 Kristoffer H. Rose <krisrose@ens-lyon.fr>
-%%
-%% 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-1997 Kristoffer H. Rose <krisrose@ens-lyon.fr>
-%%
-%% 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, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Since the documentation files may have Danish ISO Characters...
-
-\input{latin1.sty}
-
-% We use two and three columns (see with \INDEX command)...
-
-\RequirePackage{multicol}
-
-% ACTIVE CHARACTERS: "<|? are active (set before loading Xy-pic to make the
-% parsing work)...and redefine LaTeX \dospecials at the same time but do NOT
-% tell it to redefine ? because we want to use that in code!
-
-\catcode`\"=\active
-\let"=\relax
-\catcode`\<=\active
-\let<=\relax
-\catcode`\|=\active
-\let|=\relax
-\catcode`\?=\active
-\let?=\relax
-
-\def\dospecials{%
- \do\ \do\\\do\{\do\}\do\$\do\&\do\#\do\^\do\_\do\%\do\~\do\"\do\<\do\|}
-
-%\catcode9=10
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% LOAD Xy-pic...
-
-\makeatother
-
-\input xy
-\xyoption{all}
-\xyoption{knot}
-\xyoption{2cell}
-\xyoption{poly}
-\xyoption{web}
-\xyoption{arc}
-\input xydoc.back
-\CompileMatrices
-\UseCrayolaColors
-
-\xycatcodes \catcode`\"=12 \catcode`\<=12 \catcode`\|=12 \catcode`\?=12
-\def\next{\RequirePackage[draft,dvips]{graphics}} % hack :-)
-
-\ifx\xydvipsloaded\undefined
- \ifx\xytexturesloaded\undefined
- \else\def\next{\RequirePackage[textures]{graphics}}\fi
-\else\def\next{\RequirePackage[dvips]{graphics}}\fi
-\next
-
-\xycatcodes \catcode`\"=\active \catcode`\<=\active \catcode`\|=\active
- \catcode`\?=\active
-\xyuncatcodes\makeatletter % be paranoid
-
-\def\PStest#1#2{\ifx\empty\whichPSspecials@#1\else#2\fi}
-\def\PStype{\dvitype@\unskip}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% TIME OF DAY
-
-\count@=\time \divide\count@ by 60\relax
-\count@@=\count@ \multiply\count@@ by -60 \advance\count@@ by \time
-\edef\now{\number\count@:\ifnum 10>\count@@ 0\fi \number\count@@}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% LOGOS: METAFONT logo uses the logo10 font; AMS logo uses the math
-% italic font; and others just use the default fonts.
-
-\font\logofont=logo10
-\def\MF{{\logofont META}\-{\logofont FONT}}
-\def\AMS{{\the\textfont2 A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}}
-\def\PiCTeX{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC\kern-.11em\TeX}
-\def\LaTeXe{{\LaTeX\kern.15em$2_{\textstyle\varepsilon}$}}
-\def\OzTeX{{O\kern-.03em z\kern-.15em\TeX}}
-\def\Textures{{\sc Textures}}
-\def\dvips{{\sc dvips}}
-\def\TPIC{{\sc tpic}}
-\def\xdvi{{\sc xdvi}}
-\def\dvitops{{\sc dvitops}}
-
-%...and PS, unix, and BNF with footnote inserted at the first use...
-
-\newif\ifPSuntold \PSuntoldtrue
-\def\PS{\protect\PS@}
-\def\PS@{{\sc Post\-Script}\xyFN@\PS@i}
-\def\PS@i{\let\next@=\PS@ii
- \ifx.\next \else\ifx,\next \else\ifx:\next \else\ifx;\next \else\ifx!\next
- \else\ifx?\next \else \let\next@=\PS@iii \fi\fi\fi\fi\fi\fi \next@}
-\def\PS@ii#1{#1\PS@iii}
-\def\PS@iii{%
- \ifPSuntold \global\PSuntoldfalse
- \footnote{{\sc Post\-Script} is a registered Trademark of Adobe,
- Inc.~\cite{ps}.}%
- \fi}
-
-\newif\ifunixuntold \unixuntoldtrue
-\def\unix{\protect\unix@}
-\def\unix@{{\sc unix}\xyFN@\unix@i}
-\def\unix@i{\let\next@=\unix@ii
- \ifx.\next \else\ifx,\next \else\ifx:\next \else\ifx;\next \else\ifx!\next
- \else\ifx?\next \else \let\next@=\unix@iii \fi\fi\fi\fi\fi\fi \next@}
-\def\unix@ii#1{#1\unix@iii}
-\def\unix@iii{%
- \ifunixuntold \global\unixuntoldfalse
- \footnote{{\sc Unix} is a trademark of Bell Labs.}%
- \fi}
-
-\newif\ifBNFuntold \BNFuntoldtrue
-\def\BNF{{\footnotesize BNF}%
- \ifBNFuntold \global\BNFuntoldfalse
- \footnote{{\footnotesize BNF} is the notation for ``meta-linguistic
- formulae'' first used by \cite{N60:ReportALA60} to describe the
- syntax of the Algol programming language. We use it with the
- conventions of the \TeX\-book~\cite{K84:TeXbook}: `\iss' is read ``is
- defined to be'', `\orr' is read ``or'', and `<empty>' denotes
- ``nothing''; furthermore, `<id>' denotes anything that expands into a
- sequence of \TeX\ character tokens, `<dimen>' and `<factor>' denote
- decimal numbers with, respective without, a dimension unit (like {\tt
- pt} and {\tt mm}), <number> denotes possibly signed integers, and
- <text> denotes \TeX\ text to be typeset in the
- appropriate mode. We have chosen to annotate the syntax with brief
- explanations of the `action' associated with each rule; here
- `$\from$' should be read `is copied from'.}%
- \fi}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% `OTHER' CHARACTERS: miscellaneous characters of category `other' ... it is
-% essential that space is done last!
-
-\begingroup
- \catcode`\"=12 \gdef\dq{"}
- \catcode`\<=12 \gdef\otherless{<}
- \catcode`\>=12 \gdef\othergreater{>}
- \catcode`\|=12 \gdef\otherbar{|}
- \catcode`\@=12 \gdef\otherat{@}
- \catcode`\|=0 \catcode`\<=1 \catcode`\>=2
- |catcode`|\=12 |gdef|otherescape<\>
- |catcode`|{=12 |gdef|otherbgroup<{>
- |catcode`|}=12 |gdef|otheregroup<}>
- |catcode`|$=12 |gdef|othermath<$>
- |catcode`|&=12 |gdef|otherand<&>
- |catcode`|#=12 |gdef|otherparameter<#>
- |catcode`|^=12 |gdef|othersuper<^>
- |catcode`|_=12 |gdef|othersub<_>
- |catcode`|%=12 |gdef|othercomment<%>
- |catcode`| =12|gdef|otherspace< >|endgroup
-
-\def\ordinarybars{\catcode`\|=12}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% ABBREVIATIONS:
-
-\def\ie{{\it i}.{\it e}.} \def\Eg{{\it E}.{\it g}.}
-\def\eg{{\it e}.{\it g}.} \def\Ie{{\it I}.{\it e}.}
-\def\cf{{\it cf}.} \def\Cf{{\it Cf}.}
-\def\aka{{\it aka\/}}
-\def\etc{{\it etc}.}
-
-% LOCAL DEFINITIONS...
-%
-% \RSN, \TODO, and \DRAFT used wherever something is NOT FINISHED.
-%
-\def\RSN{Real Soon Now}
-\def\TODO#1{{\bf To Do#1}}
-\def\BUG#1{{\bf Bug#1}}
-\def\NOTE#1{{\bf Note#1}}
-\def\HACK#1{{\bf Hack#1}}
-\def\REMARK#1{{\bf Remark#1}}
-\def\DRAFT#1{\framebox{\it Draft #1}\vrule width0pt height 2em depth 1em\relax}
-
-\def\smiley{\hbox{\rlap{$\bigcirc$}\kern1.3\p@$\scriptstyle\ddot\smile$}}
-\def\frowny{\hbox{\rlap{$\bigcirc$}\kern1.3\p@$\scriptstyle\ddot\frown$}}
-\def\half{{\slashedfrac12}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% HTML generation stuff.
-
-\RequirePackage{html}
-
-\let\DEF=\def
-\let\IMG=\relax
-\newenvironment{IMAGE}{}{}
-\newenvironment{CENTER}{}{\noindent\unskip\ignorespaces}
-
-%% Pretty hyperlinks :-)
-
-{\makeatletter
- \catcode`\~=\active \catcode`\/=\active \catcode`\_=\active
- \gdef\setupurl@{%
- \catcode`\~=\active \def~{\ensuremath{\sim}}%
- \catcode`\&=12 %
- \catcode`\_=\active \def_{\ensuremath{\sb-}}%
- \catcode`\/=\active \def/{\futurelet\next\urlslash@}}
- \gdef\url{\begingroup $\langle$\nobreak\textsc{url}:
- \setupurl@\futurelet\next\url@}
- \gdef\url@#1{\emph{#1}\nobreak$\rangle$\endgroup}
- \gdef\urlslash@{\ifx /\next \def\next@/{\string/\kern-.2em\string/}%
- \else \def\next@{\slash}\fi \next@}
- \gdef\newurl#1#{\begingroup\setupurl@\newurl@{#1}}
- \gdef\newurl@#1#2{\gdef#1{\url{#2}}\endgroup}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% EMPHASISING:
-
-\def"#1"{{\relax \ifmmode \mathchoice
- {\hbox{\normalsize\it\relax#1\/}}%
- {\hbox{\normalsize\it\relax#1\/}}%
- {\hbox{\scriptsize\it\relax#1\/}}%
- {\hbox{\scriptsize\it\relax#1\/}}%
- \else\it#1\/\fi}}
-
-% Special `Notes' enumeration.
-
-\newcounter{note}
-\def\thenote{\thesection\alph{note}}
-\newif\ifnotes@
-
-\def\notescontd{\ifnotes@ \@toodeep \fi \notes@true
- \subsubsection*{Notes}\nobreak\list{\thenote.}%
- {\leftmargin=1.5pc \labelwidth=1pc \labelsep=.5pc
- \usecounter{note}%
- \def\makelabel##1{\thenote.\hss}}%
- \expandafter\c@note\notescount@@}
-\def\endnotescontd{\xdef\notescount@@{\the\c@note}\endlist}
-
-\def\notes{\xdef\notescount@@{0}\notescontd}
-\let\note=\item
-\let\endnotes=\endnotescontd
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% DOCUMENT CLASSIFICATION...
-
-% Some options may prefer a ``\BIBLIOGRAPHY'' different from xydoc.bib in
-% plain style!
-
-\def\BIBLIOGRAPHY{%
- \bibliographystyle{plain}
- \bibliography{xydoc}
- \addtocontents{toc}{%
- \protect\contentsline{section}{References}{\protect\pageref{BIBLIOGRAPHY}}}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% GENERIC MATH:
-
-\mathchardef\lt=\dq 313C
-\mathchardef\gt=\dq 313E
-\mathchardef\from=\dq 3220
-\mathcode`\*=\dq 2202
-\def\abs#1{\left\vert#1\right\vert}
-\def\sgn{\hbox{sgn}}
-\def\floor#1{\left\lfloor#1\right\rfloor}
-\def\ceil#1{\left\lceil#1\right\rceil}
-\def\Det#1{\left\otherbar
- {\arraycolsep=.2em \begin{array}{cc}#1\end{array}}\right\otherbar}
-
-% Some LaTeXs don't have this:
-\newbox\Boxbox@
-\setbox\Boxbox@=\hbox{\vrule height 5pt depth 0pt width .4pt %
- \rlap{\vrule height 5pt depth -4.6pt width 4.2pt}%
- \vrule height .4pt depth 0pt width 4.2pt %
- \vrule height 5pt depth 0pt width .4pt}
-\def\Box{\relax\ifmmode\expandafter\vcenter\fi{\copy\Boxbox@}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% BNF:
-
-{\setboxz@h{$^{\hbox{\small0}}$}%
- \xdef\histrut{\hbox{\vrule height\the\ht0 depth\the\dp0 width\z@}}}
-
-\def<#1>{\relax\ifmmode\histrut\expandafter\textrm\fi
- {\rm$\langle${\ignorespaces#1}$\rangle$}}
-\def\iss{\relax
- \ifmmode\histrut\expandafter\mathrel\fi{\hbox{$\longrightarrow$}}}
-\def\orr{\relax\ifmmode\histrut\expandafter\mathrel\fi{\hbox{$~\vert~$}}}
-
-\def\star{\hbox{*}}
-\def\plus{\ensuremath{^+}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%% SHOULD USE \parbox...
-
-\leftmargin=0pt % LaTeX hack...
-
-\newenvironment{syntax}%
-{$$\tabskip=.5em plus1fil \dimen@=\hsize \advance\dimen@-\leftmargin
- \halign to\dimen@\bgroup
- \strut##\unskip\hfil&\hfil##\hfil
- &##\hfil&\hsize=.5\hsize\vtop{\noindent##}\hfil\cr
- \noalign{\nobreak\hrule\nobreak\smallskip}%
- \multispan{3}Syntax\hfil &Action \cr
- \noalign{\nobreak\smallskip\nobreak\hrule\nobreak\smallskip\nobreak}}%
-{\crcr\noalign{\nobreak\smallskip\nobreak\hrule\nobreak}\egroup$$%
- \ignorespaces}
-
-\def\topofdefs{\hrule\nobreak\smallskip}
-\def\bottomofdefs{\nobreak\smallskip\nobreak\hrule\nobreak}
-
-\newenvironment{defs}%
-{$$\tabskip=.5em plus1fil \dimen@=\hsize \advance\dimen@-\leftmargin
- \halign to\dimen@\bgroup \strut##\unskip\hfil
- \tabskip=.5em&\hsize=.5\hsize\vtop{\noindent##}\hfil
- \tabskip=.5em plus1fil\cr
- \noalign{\topofdefs}}%
-{\crcr\noalign{\bottomofdefs}\egroup$$\ignorespaces}
-
-\newenvironment{defs1}%
-{$$\tabskip=.5em plus1fil \dimen@=\hsize \advance\dimen@-\leftmargin
- \halign to\dimen@\bgroup \strut##\unskip\hfil\cr
- \noalign{\topofdefs}}%
-{\crcr\noalign{\bottomofdefs}\egroup$$\ignorespaces}
-
-\newenvironment{unformatteddefs}%
-{\vspace{\bigskipamount}\topofdefs}%
-{\bottomofdefs\vspace{\bigskipamount}\ignorespaces}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% INLINE VERBATIM: use |...| with || in ... for a single |. Almost not
-% ``fragile'' in the LaTeX sense: the ... must be a balanced token list when
-% ``moving'' and control sequences get an extra space except at the end...
-
-\newcount\barnest@
-
-\def|{\leavevmode\hbox\bgroup \global\barnest@=\z@
- \tt \let\do\@makeother\dospecials \frenchspacing
- \xyFN@\bar@}
-
-\def\cs#1{\texttt{\otherescape#1}}
-
-% Hack: we need to cater for both ordinary spaces (\space@) and space `other'
-% tokens (\otherspace)...all become simple spaces.
-
-\def\bar@{\ifx |\next \let\next@=\bar@x
- \else\expandafter\ifx\otherbar\next \let\next@=\bar@x
- \else\ifx \space@\next \expandafter\DN@\space{\space@\xyFN@\bar@}%
- \else\expandafter\ifx \otherspace\next
- \expandafter\DN@\otherspace{\space@\xyFN@\bar@}%
- \else
- \ifx \bgroup\next \global\advance\barnest@\@ne \fi
- \ifx \egroup\next \global\advance\barnest@\m@ne \fi
- \DN@{\expandafter\bar@@\string}%
- \fi\fi\fi\fi \next@}
-\def\bar@@#1{#1\xyFN@\bar@}
-
-\def\bar@x#1{\egroup
- \ifnum\z@=\barnest@\else \W@{Warning: Unbalanced \string|TEXT\string| where
- \string{\string}-count is \the\barnest@}\fi
- \xyFN@\rebar@}
-
-\def\rebar@{\ifx |\next \hbox{\tt\char124}\fi}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% INLINE AND DISPLAYED TeX CODE:
-
-\newwrite\thecode@
-
-% Making the chunk is the most work...it goes into a temporary file that
-% lives while the chunk lives.
-
-\newenvironment{code}{%
- \begingroup \aftergroup\endcode@
- \immediate\openout\thecode@=\jobname.tmp %
- \let\do\@makeother\dospecials \endlinechar=10 \futurelet\next\code@}{}
-\def\endcode@{\immediate\closeout\thecode@}
-
-% \code@* is the where the dirty work is done: it is called for each line in
-% the code chunk under construction and will finish it if that line contains
-% *exactly* "\end{code}".
-
-{\lccode`\0=`\\\lccode`\[=`\{\lccode`\]=`\}\lowercase{%
- \expandafter\gdef\expandafter\code@\space{\code@i}
- \gdef\code@i#1^^J{\code@ii#10end[code]\code@@}
- \gdef\code@ii#10end[code]#2\code@@{\def\1{#1}\def\2{#2}%
- \ifx\2\empty \immediate\write\thecode@{\codeof\1}\let\next@=\code@i
- \else \def\next@{\oldcodes@\endgroup\end{code}}%
- \fi \next@}}}
-
-\def\oldcodes@{\catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\#=6 %
- \catcode`\%=14\relax}
-
-% Setting the code is just reading it...
-
-\def\gdocode{\expandafter\@@input\jobname.tmp \ifhmode\unskip\fi}
-
-\newcount\frozeninputlineno % hack to keep right file/lineno...
-
-\ifx\inputlineno\undefined
- \def\docode{\unskip{\gdocode}}
-\else
-\def\docode{\unskip{\frozeninputlineno=\inputlineno
- \let\@@inputlineno=\inputlineno
- \def\inputlineno{\frozeninputlineno:\the\@@inputlineno}%
- \gdocode}}
-\fi
-
-% Showing the code is just putting TeX in verbatim mode before reading.
-
-\def\thecode{{\catcode``=13 \@noligs \let\do\@makeother \dospecials
- \catcode`\ =10 \let\par\space\obeylines \frenchspacing \tt
- \input\jobname.tmp \unskip}}
-
-\def\displaycode{{\inputdoc.{\jobname.tmp}}%
- \ignorespaces}
-
-% Writing the code to a(nother) file is a simple combination of \code and
-% \showcode.
-
-\def\writecode#1{{\let\do\@makeother\dospecials \endlinechar=10 %
- \def\next@{\immediate\write#1}\expandafter\writecode@\@@input\jobname.tmp }}
-
-\def\writecode@{\futurelet\next\writecode@i}
-\def\writecode@i{\ifx\next\egroup\else \expandafter\writecode@ii \fi}
-\def\writecode@ii#1^^J{\def\1{#1}\next@{\codeof\1}\futurelet\next\writecode@}
-
-\def\writecodecode#1{%
- \immediate\write#1{\string\begin\string{code\string}}%
- \writecode#1%
- \immediate\write#1{\string\end\string{code\string}}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% EXERCISES & ANSWERS: accumulated as subsubsections on .ans file...
-
-\newif\ifExercises \Exercisesfalse
-\newwrite\answ@
-
-\AtBeginDocument{%
- \immediate\openout\answ@=\jobname.ans
- \immediate\write\answ@{\othercomment\space\jobname.ans: \today, \now.}
-}
-
-\def\exerciseprefix{}
-\newcount\exercisenumber \exercisenumber=0
-\def\restartexercises#1{\edef\exerciseprefix{#1}\exercisenumber=0 }
-
-\newenvironment{exercise}{\global\Exercisestrue
- \global\advance\exercisenumber by 1 %
- \edef\@currentlabel{\the\exercisenumber}%
- \edef\next@{\noexpand\label{Exercise-\exerciseprefix\the\exercisenumber}}%
- \next@
- \paragraph*{Exercise~\exerciseprefix\the\exercisenumber:}\begingroup
- \def\IW@##1{\immediate\write\answ@{##1}}\IW@{}%
- \IW@{\otherescape xyuncatcodes}%
- \IW@{\otherescape paragraph*{Answer to exercise
- \exerciseprefix\the\exercisenumber\space
- (p.\string\pageref{Exercise-\exerciseprefix\the\exercisenumber}):}%
- \string\label{Answer-\exerciseprefix\the\exercisenumber}}%
- \IW@{\othercomment}}%
- {\IW@{}\endgroup}
-
-\def\answertext#1{{\DN@{#1}\DNii@##1:->##2<-:{{\IW@{##2}}}%
- \expandafter\nextii@\meaning\next@<-:}}
-
-\def\answercode{\writecodecode\answ@}
-\def\answerdisplaycode{\answertext\displaycode}
-
-\def\Answers{\ifExercises \Exercisesfalse \global\count1=\z@
- \def\next{\immediate\closeout\answ@ \input\jobname.ans}%
- \expandafter\next\fi}
-
-\def\ANSWERS{\ifExercises
- \section{Answers to all exercises}
- \Answers
- \immediate\openout\answ@=\jobname.ans
- \immediate\write\answ@{\othercomment\space\jobname.ans: \today, \now.}
-\fi}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% PRINTING MACRO FILES AS DOCUMENTATION
-
-% \inputdoc <type> {<file>} will read <file>.doc, extracting either
-
-% * a verbatim input file with line numbers if <type> is 0 (ignoring \DOCMODE
-% commands in the file),
-% * the reference manual body if <type> is the character 1, or
-% * the TeXnical documentation body if <type> is the character 2.
-
-% For the second and third types to work, <file>.doc must have the structure
-
-% <header>
-% \DOCMODE<mode>
-% <stuff>
-% \DOCMODE<mode>
-% <stuff>
-% :
-% :
-% \DOCMODE3
-% <stuff>
-
-% where each <mode> can be either of the characters
-
-% 0 to designate that the following <stuff> should be ignored,
-
-% 1 to designate that the following <stuff> is TeX source material to
-% be included only in the reference manual,
-
-% 2 to designate that the following <stuff> is TeX source material to
-% be included only in the TeXnical documentation,
-
-% 3 to designate that the following <stuff> is TeX source material to
-% be included in the reference manual and the TeXnical document,
-
-% . for unnumbered program file listing
-% : for numbered program file listing
-
-% ! for stuff in the same mode as the context
-
-% ( to designate that the following <stuff> is code that is included in
-% <file>.tex that should also be typeset verbatim in the TeXnical document,
-% or
-
-% ) to designate that the following <stuff> is of the same kind as the
-% <stuff> preceeding the most recent \DOCMODE).
-
-% Furthermore, the command \DOCHEADER is available after the first \DOCMODE2
-% command to insert the <header> verbatim. The last command must be
-% \DOCMODE3 in order to ensure that the end of the file is seen by both
-% document types!
-
-% Finally the reference PREFIX is set to the file name so that `global'
-% references across files are possible...
-
-% The <file>.tex to be distributed should include the <header> and all
-% <stuff> between \DOCMODE( and \DOCMODE).
-
-\let\thedocmode@=0
-
-% Default is for reference documentation...
-
-\let\originalxyprovide=\xyprovide
-\let\originalcurrentxydriver=\currentxydriver
-
-\def\specialxyprovide#1#2#3#4#5#6{%
- \let\xyprovide=\originalxyprovide
- \edef\OPROPER{#2}\edef\OVERSION{#3}%
- \def\OAUTHOR{#4}\def\OAUTHOREMAIL{#5}\def\OAUTHORADDRESS{#6}%
- \def\next{#1}\edef\xyoption@@{\codeof\next}%
- \expandafter\section\expandafter{\OPREFIX\OPROPER}??g=[#1]%
- \subsubsection*{\noindent\rlap{\small\bf
- Vers. \OVERSION\ by~\OAUTHOR\ <\OAUTHOREMAIL>}\LOADAS{#1}}%
- \DN@##1##2##3##4##5##6##7.{\CompilePrefix{xy##1##2##3##4##5##6}}%
- \next@#1-000.%
- \xyprovide{#1}{#2}{#3}{#4}{#5}{#6}}
-
-\def\specialxysubprovide#1#2#3#4#5#6{%
- \let\xyprovide=\originalxyprovide
- \edef\OPROPER{#2}\edef\OVERSION{#3}%
- \def\OAUTHOR{#4}\def\OAUTHOREMAIL{#5}\def\OAUTHORADDRESS{#6}%
- \def\next{#1}\edef\xyoption@@{\codeof\next}%
- \expandafter\subsection\expandafter{\OPREFIX\OPROPER}??g=[#1]%
- \subsubsection*{\noindent\rlap{\small\bf
- Vers. \OVERSION\ by~\OAUTHOR\ <\OAUTHOREMAIL>}\LOADAS{#1}}%
- \DN@##1##2##3##4##5##6##7.{\CompilePrefix{xy##1##2##3##4##5##6}}%
- \next@#1-000.%
- \xyprovide{#1}{#2}{#3}{#4}{#5}{#6}}
-
-\def\OSECTION#1{\let\xyprovide=\specialxyprovide
- \def\OPREFIX{}%
- \def\LOADAS##1{\\*Load as: {\tt\string\xyoption\string{##1\string}}}%
- \input{#1}\runxywith@ \inputdoc!{#1}}
-
-\def\DSECTION#1{\let\xyprovide=\specialxysubprovide
- \def\OPREFIX{}%
- \def\LOADAS##1{\\*Load as: {\tt\string\xyoption\string{##1\string}}}%
- \let\orignewdriver=\newdriver \let\origxyaddsupport=\xyaddsupport
- \def\newdriver##1{\orignewdriver{##1}\xyendinput}%
- \def\xyaddsupport##1##2{\expandafter\xyadddriversupport@\expandafter{%
- \xyoption@@}{##1}{\ignorespaces}}%
- \input{#1}%
- \let\newdriver=\orignewdriver \let\xyaddsupport=\origxyaddsupport
- \inputdoc!{#1}}
-
-\def\SQUEEZE{}
-
-\def\defaultdocmode@{\docmode@}
-
-% \inputdoc MODE {FILE} loads FILE in docmode MODE. ! means `current'.
-
-\gdef\inputdoc#1#2{%
- \mayshrinktt@true
- \if#1!\relax \let\DocMode@=\defaultdocmode@
- \else\if#10\relax \numbercode@true \let\DocMode@=\docmode@@@
- \else\if#11\relax \let\DocMode@=\docmode@
- \else\if#12\relax \let\DocMode@=\docmode@@
- \else\if#1:\relax \mayshrinktt@false\numbercode@true \let\DocMode@=\docmode@@@
- \else\if#1.\relax \mayshrinktt@false\numbercode@false\let\DocMode@=\docmode@@@
- \else\xyerror@{panic...unknown DOCMODE \string?!\string?}{}%
- \fi\fi\fi\fi\fi\fi
- {\questprefix{#2}\expandafter\let\csname DOCMODE\endcsname=\DocMode@
- \endlinechar=`\^^J%
- \def\next@{\csname DOCMODE\endcsname @}\expandafter\next@\@@input#2 }%
- \ifmayshrinktt@\medbreak\fi}
-
-\let\^^J=\ % such that `\ ' works at end of line!
-
-% First variant is for the reference manual: ignore everything except lines
-% with MODE 1 or 3.
-
-\let\lastdocmode@=0
-
-\def\docmode@#1{%
- \ifx#11\let\next@=\relax \let\lastdocmode@=1\relax
- \else\ifx#12\let\next@=\docs@ \let\lastdocmode@=2\relax
- \else\ifx#13\let\next@=\relax \let\lastdocmode@=3\relax
- \else\ifx#1@\let\next@=\docs@
- \else\ifx#1(\let\next@=\docs@
- \else\ifx#1)\DN@{\docmode@\lastdocmode@}%
- \else\let\next@=\docs@ \let\lastdocmode@=0\relax
- \fi\fi\fi\fi\fi\fi \next@}
-
-% Second variant is for the technical docs: typeset everything normally
-% except areas with MODE ( that are typeset verbatim, areas with MODE 0,
-% and 1 which are ignored, and areas with MODE @ which are stuffed into a
-% file (used for the \DOCHEADER feature):
-
-\def\docmode@@#1{%
- \ifx#11\let\next@=\docs@ \let\lastdocmode@=1\relax
- \else\ifx#12\let\next@=\relax \let\lastdocmode@=2\relax
- \else\ifx#13\let\next@=\relax \let\lastdocmode@=3\relax
- \else\ifx#1@\let\next@=\docc@
- \else\ifx#1(\let\next@=\docv@
- \else\ifx#1)\DN@{\docmode@@\lastdocmode@}%
- \else\let\next@=\docs@ \let\lastdocmode@=0\relax
- \fi\fi\fi\fi\fi\fi \next@}
-
-% Third is for verbatim...
-
-\def\docmode@@@#1{\docv@}
-
-% Here are the three interpretation macros: first one that skips...
-
-\def\docs@{%
- \begingroup\skipspecials@ \let\docm@=\docm@i \let\docecho@=\relax
- \def\docfinish@{\global\let\thedocmode@=\next
- \endgroup \xyuncatcodes \csname DOCMODE\endcsname\thedocmode@}%
- \docm@}
-
-% ..then the one that typesets verbatim: it needs a special hack to be able
-% to recognize the end of files when using \inputdoc0...
-
-\newif\ifnumbercode@ % number lines!
-\def\lineno@{\ifx\inputlineno\undefined\else\the\inputlineno\fi}
-
-\def\docv@{%
- \par\vspace{1ex}\begingroup \skipspecials@
- \def\docm@{\xyFN@\docvm@}%
- \def\docvm@{\ifx\next\egroup \DN@{\endgroup\par\vspace{1ex}}%
- \else \let\next@\docm@i \fi \next@}%
- \parfillskip\@flushglue \parskip\z@ \def\par{}\obeylines\tt
- \catcode``=13 \@noligs \let\do\@makeother\dospecials
-%
- \catcode`\%=13 %make % act as ?...
-%
- \frenchspacing\@vobeyspaces \activateTABandFF@
- \def\docecho@{\ifx\next\empty\vspace{1ex}\else
- \hbox{%
- \ifnumbercode@\hbox to 1.5pc{\tinyrm\lineno@\hss}%
- \else\hbox to\leftmargin{\hss}\fi
- \setbox0=\hbox\bgroup\next\egroup\box0}\fi}%
- \def\docfinish@{\global\let\thedocmode@=\next \endgroup
- \xyuncatcodes \par\vspace{1ex}\csname DOCMODE\endcsname\thedocmode@}%
- \docm@}
-
-\def\tinyrm{\tiny\rm}
-
-% ...with some trickery to get TABs interpreted right:
-
-\newdimen\tabw@
-
-\def\activeTAB@{\egroup \dimen@=\wdz@
- \divide\dimen@\tabw@ \multiply\dimen@\tabw@ \advance\dimen@\tabw@
- \wdz@=\dimen@ \boxz@ \setboxz@h\bgroup}%
-
-\def\activeFF@{\egroup
- \dimen@=\hsize \advance\dimen@-\wdz@ \advance\dimen@-2pc %
- \boxz@ \raise.7ex\hbox to\dimen@{\hrulefill}\setboxz@h\bgroup}
-
-% They are activated by \activateTABandFF@ that also picks a \tt font size
-% that will allow 77 characters = 9.7 tabstops per line propvided the
-% conditional mayshrinktt@ is true...
-
-\newif\ifmayshrinktt@
-
-{\catcode`\^^I=\active \catcode`\^^L=\active \let^^L=\par
- \gdef\activateTABandFF@{\setboxz@h{00000000}\tabw@=\wdz@ \dimen@=\hsize
- \ifnumbercode@ \advance\dimen@-1.5pc \fi
- \ifmayshrinktt@
- \ifdim 9.7\tabw@>\dimen@\small\tt\setboxz@h{00000000}\tabw@=\wdz@\fi
- \ifdim 9.7\tabw@>\dimen@\footnotesize\tt\setboxz@h{00000000}\tabw@=\wdz@\fi
- \fi
- \catcode`\^^I=\active \let^^I=\activeTAB@
- \catcode`\^^L=\active \let^^L=\activeFF@ }}
-
-% ...and finally one that makes code out of the block:
-
-\def\docc@{%
- \par\begingroup \skipspecials@ \let\docm@=\docm@i
- \def\par{}\obeylines \catcode``=13 \@noligs \let\do\@makeother \dospecials
- \@vobeyspaces \immediate\openout\thecode@=\jobname.tmp %
- \def\docecho@{{\immediate\write\thecode@{\codeof\next}}}%
- \def\docfinish@{\immediate\closeout\thecode@ \global\let\thedocmode@=\next
- \endgroup\xyuncatcodes \csname DOCMODE\endcsname\thedocmode@}%
- \docm@}
-
-\def\DOCHEADER{%
- \numbercode@true \inputdoc0{\jobname.tmp}}
-
-% Sic.
-
-\let\W=\W@
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% CROSS REFERENCES AND INDEXING AND SUCH
-
-% Use ?? as a cross reference code -- even in verbatim (because ? is excluded
-% from \dospecials in the header):
-
-% ?? <codes> [ <id> ]
-
-% will create a reference and/or label and/or index entry and possibly even
-% typeset <id>---what is done depends on <codes> that should be a sequence of
-% characters selected from the following:
-
-% ! typeset <id>
-% - do nothing*
-
-% : set PREFIX to <id> and do \mylabel{PREFIX:}*
-% = as \mylabel{PREFIX:<id>}*
-
-% ? as \myref{PREFIX:<id>}*
-% ^ \myref{PREFIX:<id>} lifted as superscript*
-% _ \myref{PREFIX:<id>} in \tinyrm font*
-% g global: set PREFIX to null temporarily
-
-% p as \mypageref{PREFIX:<id>}*
-
-% w as \index{<id>} for words
-% c as \index{\string<id>} for control sequences
-% C as \index{[\string<id>]} for modifiers etc
-
-% * as \mylinelabel{<id>}
-
-% If none of the <codes> letters was a *ed one then a \myref{PREFIX:<id>} is
-% added automatically (so ??[<id>] gives a simple reference).
-
-% NOTE: Use VERY PRIVATE names for *everything* because ??s may occur
-% *everywhere* !! Also before loading \Xy-pic because we need to bind ?.
-
-\def?{\relax\let\questchar@=\otherquest@ \futurelet\questnext@\quest@}
-\newif\ifquestdone@
-
-{\catcode`\%=\active
- \gdef%{\let\questchar@=\otherpercent@ \futurelet\questnext@\quest@}}
-
-{\catcode`\?=12 \catcode`\%=12 \gdef\otherquest@{?}\gdef\otherpercent@{%}}
-
-\def\quest@{\ifx ?\questnext@ \def\questnext@?{\quest@@}%
- \else \let\questnext@=\questchar@ \fi \questnext@}
-
-\def\quest@@#1[#2]{\relax\questdone@false
- \let\questref@=\myref \let\questpageref@=\mypageref
- \let\questecho@@=\relax \def\doquest@##1{{##1{#2}}}\quest@@@#1@}
-
-\def\quest@@@#1{\relax
- \ifx @#1\def\questnext@{\ifquestdone@\else \doquest@\questref@ \fi}%
- \else\ifx !#1\def\questnext@{\doquest@\questecho@@ \quest@@@}%
- \else\ifx -#1\def\questnext@{\questdone@true \quest@@@}%
- \else\ifx :#1\def\questnext@{\doquest@\questprefix \questdone@true \quest@@@}%
- \else\ifx =#1\def\questnext@{\doquest@\mylabel \questdone@true \quest@@@}%
- \else\ifx ?#1\def\questnext@{\doquest@\questref@ \questdone@true \quest@@@}%
- \else\ifx g#1\def\questnext@{%
- \let\questref@=\globalref \let\questpageref@=\globalpageref \quest@@@}%
- \else\ifx ^#1\def\questnext@{\doquest@\liftedref@ \questdone@true \quest@@@}%
- \else\ifx _#1\def\questnext@{\doquest@\mylineref \questdone@true \quest@@@}%
- \else\ifx p#1\def\questnext@{\doquest@\questpageref@ \questdone@true
- \quest@@@}%
- \else\ifx w#1\def\questnext@{\doquest@\index \questdone@true \quest@@@}%
- \else\ifx c#1\def\questnext@{\doquest@{\index code}\questdone@true
- \let\questecho@@=\codeecho@ \quest@@@}%
- \else\ifx C#1\def\questnext@{\doquest@{\index Code}\questdone@true
- \let\questecho@@=\Codeecho@ \quest@@@}%
- \else\ifx *#1\def\questnext@{\doquest@\mylinelabel \questdone@true \quest@@@}%
- \else \def\questnext@##1{\xyerror@{\string?\string?\string##1 undefined}}%
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \questnext@}
-
-\def\liftedref@#1{$^{\hbox{\small\questref@{#1}}}$}
-
-\def\questprefix#1{\def\questprefix@@{#1}}
-\def\questprefix@@{}
-
-\def\codeecho@#1{\relax
- \ifmmode\expandafter\hbox\fi{\DN@{#1}\tt\codeof\next@\unskip}}
-
-\def\Codeecho@#1{\relax
- \ifmmode\expandafter\hbox\fi{\DN@{#1}\tt[\codeof\next@\unskip]}}
-
-% REPLACEMENT for LaTeX cross reference macros...using \codeof...
-
-\def\mylabel#1{\@bsphack \if@filesw {%
- \expandafter\DN@\expandafter{\questprefix@@:#1}\let\thepage\relax
- \def\protect{\noexpand\noexpand\noexpand}%
-\xdef\@gtempa{\write\@auxout{\string
- \newlabel{\codeof\next@}{{\@currentlabel}{\thepage}}}}}\@gtempa
- \if@nobreak \ifvmode\nobreak\fi\fi\fi\@esphack}
-
-\def\mylinelabel#1{\@bsphack \if@filesw {%
- \expandafter\DN@\expandafter{\questprefix@@:#1}\let\thepage\relax
- \def\protect{\noexpand\noexpand\noexpand}%
-\xdef\@gtempa{\write\@auxout{\string
- \newlabel{\codeof\next@}{{l.\thelineno@}{\thepage}}}}}\@gtempa
- \if@nobreak \ifvmode\nobreak\fi\fi\fi\@esphack}
-
-%Was:
-%\def\label#1{\@bsphack\if@filesw {\let\thepage\relax
-% \def\protect{\noexpand\noexpand\noexpand}%
-%\xdef\@gtempa{\write\@auxout{\string
-% \newlabel{#1}{{\@currentlabel}{\thepage}}}}}\@gtempa
-% \if@nobreak \ifvmode\nobreak\fi\fi\fi\@esphack}
-
-\def\myref#1{\expandafter\globalref\expandafter{\questprefix@@:#1}}
-
-\def\mylineref#1{\hbox{\tinyrm\questref@{#1}}}
-
-\def\globalref#1{\DN@{#1}%
- \edef\next@{\codeof\next@}%
- \@ifundefined{r@\next@}{{\bf \string?\string?}%
- \@warning{Reference `\next@' on page \thepage\space undefined}}%
- {\edef\@tempa{\@nameuse{r@\next@}}\expandafter
- \@car\@tempa \@nil\null}}
-
-%Was:
-%\def\ref#1{\@ifundefined{r@#1}{{\bf ??}\@warning
-% {Reference `#1' on page \thepage \space
-% undefined}}{\edef\@tempa{\@nameuse{r@#1}}\expandafter
-% \@car\@tempa \@nil\null}}
-
-\def\mypageref#1{\expandafter\globalpageref\expandafter{\questprefix@@:#1}}
-
-\def\globalpageref#1{\DN@{#1}%
- \edef\next@{\codeof\next@}%
- \@ifundefined{r@\next@}{{\bf \string?\string?}%
- \@warning{Reference `\next@' on page \thepage\space undefined}}%
- {\edef\@tempa{\@nameuse{r@\next@}}\expandafter
- \@cdr\@tempa \@nil\null}}
-
-%Was:
-%\def\pageref#1{\@ifundefined{r@#1}{{\bf ??}\@warning
-% {Reference `#1' on page \thepage \space
-% undefined}}{\edef\@tempa{\@nameuse{r@#1}}\expandafter
-% \@cdr\@tempa\@nil\null}}
-
-% \newlabel *is* redefined because LaTeX plays tricks with it at
-% \end{document}.
-
-\def\newlabel#1#2{\DN@{#1}\edef\next@{\codeof\next@}%
-% \@ifundefined{r@\next@}{}{\@warning{Label `#1' multiply defined}}%
- \global\@namedef{r@\next@}{#2}}
-
-% Was:
-%\def\newlabel#1#2{\@ifundefined{r@#1}{}{\@warning{Label `#1' multiply
-% defined}}\global\@namedef{r@#1}{#2}}
-
-\def\@testdef #1#2#3{\DN@{#2}\edef\next@{\codeof\next@}%
- \def\@tempa{#3}\expandafter \ifx \csname #1@\next@\endcsname
- \@tempa \else \@tempswatrue \fi}
-
-% Was:
-%\def\@testdef #1#2#3{\def\@tempa{#3}\expandafter \ifx \csname #1@#2\endcsname
-% \@tempa \else \@tempswatrue \fi}
-
-% Here is our variant \index command: It is a hack...
-
-%Dummy eats pre-{} argument
-\def\index#1#{\@bsphack\begingroup \@sanitize\@index}
-
-%Real stuff uses pre-{} argument
-\def\@wrindex#1#{\csname @wrindex@#1\endcsname}
-
-\def\@wrindex@#1{\let\thepage\relax
- \DNii@{#1}\edef\nextii@{\codeof\nextii@}\DN@{}%
- \expandafter\futurelet\expandafter\next\expandafter\quoteidxentry@\nextii@ @%
- \expandafter\futurelet\expandafter\next\expandafter\@wrindex@beautify\next@\@wrindex@beautify
- \edef\next@{\codeof\next@}%
- \edef\@tempa{\write\@indexfile{%
-% \string\indexentry{\expandafter\shavebackslash@\next@
-% \string @\next@}{\thepage}}}%
- \string\indexentry{\expandafter\shavebackslash@\next@}{\thepage}}}%
- \expandafter\endgroup\@tempa
- \if@nobreak \ifvmode\nobreak\fi\fi \@esphack}
-
-\def\@wrindex@code#1{\let\thepage\relax
- \DNii@{#1}\edef\nextii@{\codeof\nextii@}\DN@{}%
- \expandafter\futurelet\expandafter\next\expandafter\quoteidxentry@\nextii@ @%
- \edef\@tempa{\write\@indexfile{%
- \string\indexentry{\expandafter\shavebackslash@\next@
- \string @\string{\string}\string\verb\string"\string"\next@\string"\string"}{\thepage}}}%
- \expandafter\endgroup\@tempa
- \if@nobreak \ifvmode\nobreak\fi\fi \@esphack}
-
-\def\@wrindex@Code#1{\let\thepage\relax
- \DNii@{[#1]}\edef\nextii@{\codeof\nextii@}\DN@{}%
- \expandafter\futurelet\expandafter\next\expandafter\quoteidxentry@\nextii@ @%
- \edef\@tempa{\write\@indexfile{%
- \string\indexentry{\expandafter\shavebackslash@\next@
- \string @\string{\string}\string\verb\string"\string"\next@\string"\string"}{\thepage}}}%
- \expandafter\endgroup\@tempa
- \if@nobreak \ifvmode\nobreak\fi\fi \@esphack}
-
-\def\filelinedef#1#2{\def\theindexfile{#1}\def\theindexline{#2}}
-
-\def\@wrindex@def#1{%
- \DNii@{#1}\edef\nextii@{\codeof\nextii@}\DN@{}%
- \expandafter\futurelet\expandafter\next\expandafter\quoteidxentry@\nextii@ @%
- \edef\@tempa{\write\@indexfile{%
- \string\indexentry{\expandafter\shavebackslash@\next@
- \string @\string{\string}\string\verb\string"\string"\next@\string"\string"%
- \string |seexyfile{\codeof\theindexfile}{\codeof\theindexline}}{\thepage}}}%
- \expandafter\endgroup\@tempa
- \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
-
-\expandafter\let\csname @wrindex@ def\endcsname=\@wrindex@def
-
-\def\shavebackslash@#1{\expandafter\ifx\otherescape#1\else#1\fi}
-
-\def\quoteidxentry@#1{\DNii@{\futurelet\next\quoteidxentry@}%
- \ifx !#1\edef\next@{\next@\dq#1}%
- \else\expandafter\ifx\otherat#1\edef\next@{\next@\dq#1}%
- \else\expandafter\ifx\dq#1\edef\next@{\next@\dq#1}%
- \else\expandafter\ifx\otherbar#1\edef\next@{\next@\dq#1}%
- \else\expandafter\ifx\otherescape#1\edef\next@{\next@#1}%
- \DNii@{\futurelet\next\quoteidxentry@escape}%
- \else\ifx\space@\next\edef\next@{\next@\space}%
- \DNii@{\futurelet\next\quoteidxentry@#1}%
- \else\ifx#1@\let\nextii@=\relax
- \else \edef\next@{\next@#1}\fi\fi\fi\fi\fi\fi\fi \nextii@}
-
-\def\quoteidxentry@escape#1{\DNii@{\futurelet\next\quoteidxentry@}%
- \expandafter\ifx\otherbgroup#1\edef\next@{\next@\otherbgroup}%
- \else\expandafter\ifx\otheregroup#1\edef\next@{\next@\otheregroup}%
- \else\ifx\space@\next\edef\next@{\next@\space}%
- \DNii@{\futurelet\next\quoteidxentry@#1}%
- \else \DNii@{\quoteidxentry@#1}\fi\fi\fi \nextii@}
-
-{\catcode`\$=12 \catcode`\<=12 \catcode`\"=12
- \gdef\@wrindex@beautify{%
- \ifx $\next \let\next\@wrindex@extractdollar %$
- \else\ifx <\next \let\next\@wrindex@extractsyntax
- \else\ifx "\next \let\next\@wrindex@extractemph
- \else \let\next\@wrindex@literal \fi\fi\fi \next}
-
- \gdef\@wrindex@extractdollar$#1$#2\@wrindex@beautify{%
- \def\next{#2}\ifx\next\empty \DN@{#1@$#1$}\fi}
-
- \gdef\@wrindex@extractsyntax<#1>#2\@wrindex@beautify{%
- \def\next{#2}\ifx\next\empty \DN@{#1@<#1>}\fi}
-
- \gdef\@wrindex@extractemph""#1""#2\@wrindex@beautify{%
- \def\next{#2}\ifx\next\empty \DN@{#1@\emph{#1}}\fi}}
-
-\def\@wrindex@literal#1\@wrindex@beautify{\DN@{#1@#1}}
-
-% Document format is two columns...
-
-\let\SAVEDmaketitle=\maketitle
-\def\maketitle{\begin{multicols}{2}[\SAVEDmaketitle]%
- \renewenvironment{quotation}{\endgraf\noindent\ignorespaces}{\endgraf}%
- \renewenvironment{figure}[1][]{\center\leavevmode}{\endcenter}%
-}
-
-% ...until the index where it changes to three columns!
-
-\def\INDEX{%
- \end{multicols}
- \let\PREINDEXtheindex=\theindex \let\PREINDEXendtheindex=\endtheindex
- \renewenvironment{theindex}%
- {\let\twocolumn=\beginmulticolsindex \let\onecolumn=\relax
- \PREINDEXtheindex \addcontentsline{toc}{section}{Index}}%
- {\PREINDEXendtheindex}
- \xyinputorelse@@{\jobname.ind}{(no index yet)}%
- \let\theindex=\PREINDEXtheindex \let\endtheindex=\PREINDEXendtheindex}
-
-\def\beginmulticolsindex[#1]{%
- \global\let\PRETWOtheindex=\theindex
- \global\let\PRETWOendtheindex=\endtheindex
- \renewenvironment{theindex}{}{\aftergroup\finishmulticols}%
- \begin{multicols}{3}[#1]\begin{theindex}}%
-
-\def\finishmulticols{\end{multicols}%
- \global\let\theindex=\PRETWOtheindex
- \global\let\endtheindex=\PRETWOendtheindex
- \end{theindex}}
-
-\def\indexspace{\vspace{1ex}}
-\def\seexyfile#1#2#3{{\tt#1}:{\tinyrm#2}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Set page size to A4...with sligthly wider text when two columns
-
-\setlength{\oddsidemargin}{-1cm}
-\setlength{\evensidemargin}{-1cm}
-\setlength{\textwidth}{17cm}
-
-\setlength{\columnsep}{2pc}
-
-\setlength{\topmargin}{-1.4cm}
-\setlength{\headheight}{0.7cm}
-\setlength{\headsep}{0.7cm}
-\setlength{\textheight}{23.7cm}
-%\setlength{\footheight}{0.7cm}
-\setlength{\footskip}{1.1cm}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tracing auxiliary
-
-\def\notracingall{\tracingonline\z@\tracingcommands\z@\tracingstats\z@
- \tracingpages\z@\tracingoutput\z@\tracinglostchars\z@
- \tracingmacros\z@\tracingparagraphs\z@\tracingrestores\z@
- \showboxbreadth5 \showboxdepth5}
-
-% Show bad boxes as plain TeX!
-
-\hbadness=1000
-
-% Show memory use!
-
-\tracingstats=1
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% RCS date...
-
-\def\printdate#1{\edef\next@{#1}\expandafter\printdate@\next@ @}
-\def\printdate@#1/#2/#3@{%
- \ifcase#2\or January\or February\or March\or April\or
- May\or June\or July\or August\or September\or October\or November\or
- December\fi\space
- \eatzero@#3, \ifnum100>#1\relax19\fi#1}
-\def\eatzero@#1{\ifx0#1\else#1\fi}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Font tables...from the standard testfont.tex:
-
-\newcount\m
-\newcount\n
-\newcount\p
-\newdimen\dim@
-\newif\ifskipping
-
-{\xycatcodes
-
-\gdef\fontfigure#1{%
- \begin{figure}[tp]
- {\font\testfont=#1 \testfont \fonttable}
- \caption{Font table for \protect\texttt{#1}.}
- \label{f.#1}
- \end{figure}}
-
-\global\chardef\other=12
-\catcode`\"=\other
-
-\global\font\eighttt = cmtt8
-
-\gdef\twodigits#1{\ifnum #1<10 0\fi \number#1}
-
-\gdef\setbaselineskip{\setbox0=\hbox{\n=0
-\loop\char\n \ifnum \n<255 \advance\n 1 \repeat}
-\baselineskip=6pt \advance\baselineskip\ht0 \advance\baselineskip\dp0 }
-
-\gdef\setchar#1{{\escapechar-1\message{\string#1 character = }%
- \def\do##1{\catcode`##1=\other}\dospecials
- \read-1 to\next
- \expandafter\finsetchar\next\next#1}}
-\gdef\finsetchar#1#2\next#3{\global\chardef#3=`#1
- \ifnum #3=`\# \global\chardef#3=#2 \fi}
-\gdef\promptthree{\setchar\background
- \setchar\starting \setchar\ending}
-
-\gdef\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}} % octal constant
-\gdef\hex#1{\hbox{\rm\H{}\tt#1}} % hexadecimal constant
-\gdef\setdigs#1"#2{\gdef\h{#2}% \h=hex prefix; \0\1=corresponding octal
- \m=\n \divide\m by 64 \xdef\0{\the\m}%
- \multiply\m by-64 \advance\m by\n \divide\m by 8 \xdef\1{\the\m}}
-\gdef\testrow{\setbox0=\hbox{\penalty 1\def\\{\char"\h}%
- \\0\\1\\2\\3\\4\\5\\6\\7\\8\\9\\A\\B\\C\\D\\E\\F%
- \global\p=\lastpenalty}} % \p=1 if none of the characters exist
-\gdef\oddline{\cr
- \noalign{\nointerlineskip}
- \multispan{19}\hrulefill&
- \setbox0=\hbox{\lower 2.3pt\hbox{\hex{\h x}}}\smash{\box0}\cr
- \noalign{\nointerlineskip}}
-\gdef\evenline{\loop\skippingfalse
- \ifnum\n<256 \m=\n \divide\m 16 \chardef\next=\m
- \expandafter\setdigs\meaning\next \testrow
- \ifnum\p=1 \skippingtrue \fi\fi
- \ifskipping \global\advance\n 16 \repeat
- \ifnum\n=256 \let\next=\endchart\else\let\next=\morechart\fi
- \next}
-\gdef\morechart{\cr\noalign{\hrule\penalty5000}
- \chartline \oddline \m=\1 \advance\m 1 \xdef\1{\the\m}
- \chartline \evenline}
-\gdef\chartline{&\oct{\0\1x}&&\Ch@&&\Ch@&&\Ch@&&\Ch@&&\Ch@&&\Ch@&&\Ch@&&\Ch@&&}
-\gdef\chartstrut{\lower4.5pt\vbox to14pt{}}
-\gdef\fonttable{$$\global\n=0
- \halign to\hsize\bgroup
- \chartstrut##\tabskip0pt plus10pt&
- &\hfil##\hfil&\vrule##\cr
- \lower6.5pt\null
- &&&\oct0&&\oct1&&\oct2&&\oct3&&\oct4&&\oct5&&\oct6&&\oct7&\evenline}
-\gdef\endchart{\cr\noalign{\hrule}
- \raise11.5pt\null&&&\hex 8&&\hex 9&&\hex A&&\hex B&
- &\hex C&&\hex D&&\hex E&&\hex F&\cr\egroup$$\par}
-\gdef\Ch@{\setbox0=\hbox{\char\n}%
- \ifdim\ht0>7.5pt\reposition
- \else\ifdim\dp0>2.5pt\reposition\fi\fi
- \box0\global\advance\n 1 }
-\gdef\reposition{\setbox0=\vbox{\kern2pt\box0}\dim@=\dp0
- \advance\dim@ 2pt \dp0=\dim@}
-\gdef\centerlargechars{
- \def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}}}
-}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% END OF DEFINITIONS
-
-\endinput
-
-$Log: xydoc.sty,v $
-Revision 3.7 1999/02/16 15:12:50 krisrose
-Interim release (Y&Y fonts now free).
-
-Revision 3.6 1998/03/06 01:28:05 krisrose
-Releasing (with Y&Y fonts).
-
-Revision 3.5 1997/05/29 22:46:43 krisrose
-Fixed "missing breaks" and tidied up documentation!
-
-Revision 3.4 1997/05/18 01:14:25 krisrose
-Essential bugfixes.
-
-Revision 3.3 1996/12/19 03:31:56 krisrose
-Maintenance release
-
-Revision 3.2 1995/09/19 18:22:27 kris
-Bug fix 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.14 1995/07/06 02:56:02 kris
-Buglets...
-
-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.11 1994/07/05 10:37:32 kris
-Third 3beta release [bug fixes].
-Experimental graph feature included (for ECCT-94 presentation).
-
-Revision 2.10 1994/06/15 12:55:07 kris
-Second 3beta release: bug fixes.
-
-Revision 2.9 1994/06/09 14:59:19 kris
-Release 3beta.
-
-Revision 2.8.3.8 1994/05/05 06:13:13 kris
-Compilation works and is documented.
-Matrix object outline bug fixed.
-
-Revision 2.8.3.7 1994/05/04 08:16:25 kris
-Also has option depedency list now.
-
-Revision 2.8.3.6 1994/05/04 07:14:13 kris
-Compiling matrices work :-) :-) !!
-
-Revision 2.8.3.5 1994/05/04 03:51:05 kris
-Efficient queueing *and* compilation of matrices *almost* there :-) !!
-
-Revision 2.8.3.4 1994/05/03 12:42:52 kris
-Compiling of matrices soon to follow :-) ...
-
-Revision 2.8.3.3 1994/05/03 11:01:35 kris
-Compiling to file finished in kernel...
-
-Revision 2.8.3.2 1994/05/03 07:37:06 kris
-Fiddling for 2.9...
-
-Revision 2.8.3.1 1994/04/19 08:15:02 kris
-Going on holiday...
-
-Revision 2.8.1.2 1994/04/13 11:44:13 kris
-PostScript update patch and various fixes...
-
-Revision 2.8 1994/04/08 04:30:00 kris
-Second (bug fix) 3alpha release.
-
-Revision 2.7.2.4 1994/03/28 10:58:05 kris
-Curve bugs fixed [Ross].
-Edge logic overhauled...still shaky?
-PostScript added and maybe working!
-
-Revision 2.7.2.3 1994/03/28 04:07:38 kris
-Holiday is over :-)
-
-Revision 2.7.2.2 1994/03/13 07:54:52 kris
-Bug fixes and @@ `map over stack'.
-
-Revision 2.7.2.1 1994/03/11 11:47:11 kris
-Documentation prettyfied.
-Stacks added.
-
-Revision 2.7.1.1 1994/03/10 05:26:53 kris
-Date format fixed.
-
-Revision 2.7 1994/03/08 02:06:01 kris
-Release 3alpha.
-
-Revision 2.6.9.1 1994/03/07 04:22:46 kris
-Last internal 3alpha and pre-2.7 release.
-
-NEW for Xy-pic version 2.7.
diff --git a/Master/texmf-dist/source/generic/xypic/xydocps.doc b/Master/texmf-dist/source/generic/xypic/xydocps.doc
deleted file mode 100644
index 10d8ef21835..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xydocps.doc
+++ /dev/null
@@ -1,34 +0,0 @@
-%% $Id: xydocps.doc,v 3.6 1998/03/06 01:28:05 krisrose Exp $
-%%
-%% Xy-pic ``PostScript Dictionary creation'' template file.
-%% Copyright (c) 1993-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-
-\input xy
-\xyoption{ps}
-\xyoption{dvips}
-\xyoption{color}
-\xyoption{line}
-\xyoption{rotate}
-
-\xyReloadDrivers
-\dumpPSdict{xyREPLACEWITHSHORTVERSIONdict.pro}
-
-\bye
diff --git a/Master/texmf-dist/source/generic/xypic/xydummy.doc b/Master/texmf-dist/source/generic/xypic/xydummy.doc
deleted file mode 100644
index d6f644f8d87..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xydummy.doc
+++ /dev/null
@@ -1,97 +0,0 @@
-%% $Id: xydummy.doc,v 3.3 1996/12/19 03:31:56 krisrose Exp $
-%%
-%% Xy-pic ``Dummy'' option.
-%% Copyright (c) 1993-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{dummy}{Dummy option}{\stripRCS$Revision: 3.3 $}%
- {Kristoffer H.~Rose}{krisrose@brics.dk}%
- {BRICS/Computer Science, University of Aarhus, Ny Munkegade, building 540,
- DK--8000 Aarhus~C}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This option is provided as a template for new options, it provides
- neither features nor extensions but it does count how many times it
- is requested.
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- Even though the option does nothing it still has a standard \Xy-pic
- header:
-
-\DOCHEADER
-
- Next follows two declarations that are used to count the number of
- invocations:
-
-\DOCMODE(
-\xynew@{count}\xydummyrequires@@
-\DOCMODE)
-
- This is used by the option to output a message every time it is
- loaded with |\xyoption| or |\xyrequire|:
-
-\DOCMODE(
-\xyeveryrequest{dummy}{\global\advance\xydummyrequires@@\@ne
- \W@{The `dummy' option was used \the\xydummyrequires@@\space times!}}
-\DOCMODE)
-
- (|\W@| is an \Xy-pic primitive that outputs its argument.)
-
- Then the option ends:
-
-\DOCMODE(
-\xyendinput
-\DOCMODE)
-
- Finally |xydummy.doc| is maintained using RCS and thus contains the
- following revision log:
-
-\DOCMODE(
-% $Log: xydummy.doc,v $
-% 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.7 1994/03/08 02:06:01 kris
-% Release 3alpha.
-%
-% NEW file to go in version 2.7!
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-prefix:"\t"
-% fill-column:77
-% paragraph-separate:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% paragraph-start:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xydvidrv.doc b/Master/texmf-dist/source/generic/xypic/xydvidrv.doc
deleted file mode 100644
index de533801865..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xydvidrv.doc
+++ /dev/null
@@ -1,98 +0,0 @@
-%% $Id: xydvidrv.doc,v 3.3 1996/12/18 09:12:40 ross Exp $
-%%
-%% Xy-pic ``dvidrv-driver'' option.
-%% Copyright (c) 1995-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{dvidrv}{dvidrv driver}{\stripRCS$Revision: 3.3 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This driver provides support for the ``emtex'' |\special| commands, when
-using one of the standard dvi-drivers: |dvidot|, |dvihplj|, |dvimsp|,
-|dviscr| or |dvivik|, that come with Eberhard Mattes' em-\TeX\ distribution.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\paragraph*{Driver installation}
-\DOCMODE(
-\xydef@\dvidrv@@#1{\dvimessage@{dvidrv}{#1}}
-
-\newdriver{%
- \xyaddsupport{emtex}\dvidrvEmTeX@@
- \xyaddsupport{line}\dvidrvLine@@
-}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Supported |\special| effects are...
-%
-\begin{itemize}
-
-\item em-\TeX\ line-drawing |\special|s.
-\DOCMODE(
-\xydef@\dvidrvEmTeX@@{\dvidrvEmTeX@}%
-\xydef@\dvidrvEmTeX@{\setupxyEMTeX@}%
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item variable line-widths % and poly-lines.
-\DOCMODE(
-\xydef@\dvidrvLine@@{\dvidrvLine@}%
-\xydef@\dvidrvLine@{\xywithoption{emtex}{\installEMline@}}%
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{itemize}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xydvidrv.doc,v $
-% Revision 3.3 1996/12/18 09:12:40 ross
-% no changes
-%
-% Revision 3.1 1995/09/05 20:28:57 ross
-% Releasing version 3.1!
-%
-%
-% NEW for version 3.1
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xydvips.doc b/Master/texmf-dist/source/generic/xypic/xydvips.doc
deleted file mode 100644
index fa08fa7b7f2..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xydvips.doc
+++ /dev/null
@@ -1,329 +0,0 @@
-%% $Id: xydvips.doc,v 3.3 1996/12/18 09:13:14 ross Exp $
-%%
-%% Xy-pic ``dvips-driver'' option.
-%% Copyright (c) 1995-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{dvips}{DVIPS driver}{\stripRCS$Revision: 3.3 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This driver provides support for "all extensions" when using the \dvips\
-driver by Tomas Rokicki~\cite{dvips}. It has been tested with dvips
-version~5.55a and dvipsk version~5.58f.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\paragraph*{Driver installation}
-\DOCMODE(
-\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{cmtip}\relax
-}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Supported |\special| effects are...
-%
-\begin{itemize}
-
-\item colour, using direct color specials and \PS.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-DVIPS uses the colour-stack method, due to Tomas Rokicki.
-
-\DOCMODE(
-\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@
- }
-\DOCMODE)
-
-If neither support file |colordvi.tex| nor |colordvi.sty| can be found,
-then the normal colour support will not be available. However the colour
-support for the \PS\ back-end can still be used.
-
-\DOCMODE(
-\xydef@\NoDVIPScolordvi@{\xywarning@{%
- Neither colordvi.tex nor colordvi.sty could be found.}%
- \xyBEcolorcheck@}%
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item crayon colours.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The 68 colours that |dvips| recognizes by name are not loaded unless the
-|crayon| option has been requested.
-
-\DOCMODE(
-\xydef@\dvipsCrayola@@{\dvipsColor@@\dvipsCrayola@}
-
-\xydef@\dvipsCrayola@{%
- \let\prevxycolor@=\newxycolor@
- \def\newxyDVIPScolor@##1##2##3{\prevxycolor@{##1}{}{##1}}%
- \let\newxycolor@=\newxyDVIPScolor@ \dvipsInclude@{color.pro}%
-% \xyinputorelse@{colordvi.tex}%
-% {\NoDVIPScolordvi@\let\newxycolor@=\prevxycolor@}%
- \installCrayolaColors@
- \let\newxycolor@=\prevxycolor@ }%
-\DOCMODE)
-
-Although any order of loading options: |ps|, |dvips|, |color| and |crayon|
-produces the desired result visually, the \PS\ code can be different
-with different loading order. The most easily readable is obtained when
-|crayon| is requested last.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item \PS\ back-end.
-\DOCMODE(
-\xydef@\dvipsPS@@{\dvipsPS@}
-
-\xydef@\dvipsPS@unload{\UnloadPS@
- \let\UnloadPS@@=\UnloadPS@
- \let\dvipsPS@@=\dvipsPS@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-|dvips| has three kinds of \PS\ |\special| which can be used.
-These may be used with various features other than just the \PS\ backend.
-
-\DOCMODE(
-\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
-% \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
- \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{! mark{#1}stopped cleartomark}}
- \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
-\DOCMODE)
-
-All the \PS\ definitions passed to |dvips| by reading the
-dictionary file are stored in a \PS\ dictionary which it defines,
-called |SDict|. This must be the current dictionary whenever an \Xy-ps
-command is to be executed.
-This will be the case whenever the |\special{" |{\it commands}|}| or
-|\special{! |{\it commands}|}| forms are used, but not when the
-|\special{ps:: |{\it commands}|}| form is used.
-Thus the |\dvipsSpecial@| macro includes code to open |SDict| and
-close it when finished; so also does the |\dvipsRaw@| type, since this
-is used with \Xy-pic\ \PS\ operators whose definitions have been placed
-within |SDict|.
-
-The |currentpoint| is defined for the ``raw'' specials.
-
-\DOCMODE(
-\xydef@\dvipsCurrpt@{\let\xyPScurrpt@@=\dvipsCurrpt@@}%
-\xydef@\dvipsCurrpt@@{\PSraw@@{xyp}}
-\DOCMODE)
-
-The \PS\ operator called |xyp| is defined in |xyps-ps| for storing the
-location read from |currentpoint|.
-
-\medskip
-
-This installs the \PS\ backend.
-
-\DOCMODE(
-\xydef@\dvipsPS@{\dvipsPStypes@
- \let\dvipsPS@@=\PSspecials@true
- \let\UnloadPS@@=\dvipsPS@unload
- \let\installxyps@@=\relax \installxyps@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item rotated/scaled diagrams and text, using \PS.
-\DOCMODE(
-\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{}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item variable line-widths and poly-lines, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item extra frames and fills, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item patterns and tiles, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item \TPIC\ drawing commands.
-\DOCMODE(
-\xydef@\dvipsTPIC@@{\dvipsTPIC@}
-\xydef@\dvipsTPIC@{\setupxyTPIC@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item em-\TeX\ drawing commands.
-\DOCMODE(
-\xydef@\dvipsEM@@{\dvipsEM@}
-\xydef@\dvipsEM@{\setupxyEMTeX@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{itemize}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xydvips.doc,v $
-% Revision 3.3 1996/12/18 09:13:14 ross
-% minor improvements to file-loading commands
-%
-% Revision 3.2 1995/09/19 18:20:20 ross
-% Bug fix release.
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% NEW for version 3.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xydvitops.doc b/Master/texmf-dist/source/generic/xypic/xydvitops.doc
deleted file mode 100644
index c6e0c0a6423..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xydvitops.doc
+++ /dev/null
@@ -1,346 +0,0 @@
-%% $Id: xydvitops.doc,v 3.3 1996/12/18 09:14:36 ross Exp $
-%%
-%% Xy-pic ``DVITOPS-driver'' option.
-%% Copyright (c) 1995-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{dvitops}{DVITOPS driver}{\stripRCS$Revision: 3.3 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\def\DVITOPS{{\sc dvitops}}
-This file provides support for the \DVITOPS\ driver by James
-Clark. As of September 1995, it has not been fully tested.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\DOCMODE(
-\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{tpic}\dvitopsTPIC@@
- \xyaddsupport{cmtip}\relax
-}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Supported |\special| effects are...
-%
-\begin{itemize}
-
-\item colour, using direct color specials for |gray|, |rgb| and |hsb| colour
- models; and \PS\ colour within diagrams;
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DVITOPS\ has a method for using colours locally, however it only colours
-``regions'', which cannot be nested. To use this within \Xy-pic\
-diagrams would be just asking for trouble.
-
-\DOCMODE(
-\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@
- }
-\DOCMODE)
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item crayon colours.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The 68 colours are those that |dvips| recognizes by name,
-thanks to Tomas Rokicki.
-
-\DOCMODE(
-\xydef@\dvitopsCrayon@@{\dvitopsColor@@\dvitopsCrayon@}
-\xydef@\dvitopsCrayon@{\installCrayolaColors@}%
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item \PS\ back-end.
-\DOCMODE(
-\xydef@\dvitopsPS@@{\dvipsPS@}
-
-\xydef@\dvitopsPS@unload{\UnloadPS@
- \let\UnloadPS@@=\UnloadPS@
- \let\dvitopsPS@@=\dvitopsPS@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DVITOPS\ has two kinds of |\special| which can be used; `inline' and
-`prolog' for including header files. Also there are the `begin' and `end'
-types for defining regions.
-
-\DOCMODE(
-\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
-% \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
- \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
-\DOCMODE)
-
-Rotations and transformations use a different mechanism, so |\xyPScurrpt@@|
-can be set to |\relax|.
-
-\DOCMODE(
-\xydef@\dvitopsCurrpt@{\global\let\xyPScurrpt@@=\relax}%
-\DOCMODE)
-
-\medskip
-
-This installs the \PS\ backend.
-
-\DOCMODE(
-\xydef@\dvitopsPS@{\dvitopsPStypes@
- \let\installxyps@@=\relax \installxyps@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item rotated/scaled diagrams and text, using \DVITOPS\ specials;
- however these may not be nested.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE(
- \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}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item variable line-widths and poly-lines, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item extra frames and fills, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item patterns and tiles, using \PS\
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item \TPIC\ drawing commands.
-\DOCMODE(
-\xydef@\dvitopsTPIC@@{\dvitopsTPIC@}
-
-\xydef@\dvitopsTPIC@{\setupxyTPIC@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{itemize}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xydvitops.doc,v $
-% Revision 3.3 1996/12/18 09:14:36 ross
-% minor improvements to file-loading commands
-%
-% Revision 3.2 1995/09/19 18:21:41 ross
-% Bug fix release.
-%
-% Revision 3.1 1995/09/05 20:28:57 ross
-% Releasing version 3.1!
-%
-% NEW for version 3.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-prefix:"\t"
-% fill-column:77
-% paragraph-separate:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% paragraph-start:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyemtex.doc b/Master/texmf-dist/source/generic/xypic/xyemtex.doc
deleted file mode 100644
index ce17198297f..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyemtex.doc
+++ /dev/null
@@ -1,243 +0,0 @@
-%% $Id: xyemtex.doc,v 3.3 1996/12/18 09:18:00 ross Exp $
-%%
-%% Xy-pic ``em-TeX'' back-end extension.
-%% Copyright (c) 1995-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{emtex}{em-TeX backend}{\stripRCS$Revision: 3.3 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Eberhard Matte's {em-\TeX} implementation provides a suite of |\special|
-commands to facilitate the drawing of lines, both on-screen and with various
-printing devices. This `back-end' extension allows the lines in \Xy-pic
-diagrams to be drawn using these methods.
-
-Note that this extension does not have to be used with {em-\TeX}. Better
-results may be obtained using the \PS\ back-end and \dvips\ <driver>, since
-a version of \dvips\ is available for em-\TeX. However, in particular for
-screen previewing purposes, it may be convenient to use this back-end.
-Furthermore note that \dvips\ is capable of supporting em-\TeX |\special|s.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-Once loaded using |\xyoption{emtex}|, with an appropriate <driver> also
-specified either already or subsequently, the following commands are
-available to turn the em-\TeX\ backend off/on.
-%
-\begin{defs}
-|\NoEMspecials| & turns off em-\TeX\ specials.\kern-50pt\cr
-|\UseEMspecials| & reinstates em-\TeX\ specials.\kern-30pt
-\end{defs}
-
-\DOCMODE(
-\xynew@{if}\ifEMspecials@
-\xydef@\UseEMspecials{\EMspecials@true}
-\xydef@\NoEMspecials{\EMspecials@false}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The |\special|s}
-
-\DOCMODE(
-\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}}}
-\DOCMODE)
-
-These place the actual |\special|s and allow tracing:
-
-\DOCMODE(
-{\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}
-\DOCMODE)
-
-Currently these are not used by \Xy-pic.
-
-\DOCMODE(
-%\xydef@\xyemtex@message#1{\xyEM@special{message #1}}
-%\xydef@\xyemtex@graph#1{\xyEM@special{graph #1}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{re-bindings}
-
-This is similar to the mechanism used by the \PS\ back-end to rebind
-``hooks'' to incorporate a switch according to the current value of
-|\ifEMspecials@|.
-
-\DOCMODE(
-\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}}%
-\DOCMODE)
-
-Allow only one instance of |\setupxyEM@|; thereafter simply do
-|\reloadxyEM@| to turn on anything that has been turned off.
-
-\DOCMODE(
-\xydef@\setupxyEMTeX@{\xywarning@{using em-TeX specials}%
- \EMalternative@{\solid@}{solid}%
-% \EMalternative@{\point@}{point}%
- \EMalternative@{\splinesolid@}{splinesolid}%
- \let\setupxyEM@=\reloadxyEM@
- \activateEM@ }
-
-\xydef@\xyunloadEM@{\xywarning@{EM specials turned off}%
-% \xywithoption{curve}{\xysetup@@\uninstallEMcurves@ }%
- \xywithoption{line}{\xysetup@@\uninstallEMline@ }%
-% \xywithoption{frame}{\xysetup@@\uninstallEMframes@ }%
- \EMspecials@false
- \let\setupxyEM@=\reloadxyEM@ }
-
-\xydef@\activateEM@{%
- \xywithoption{line}{\xysetup@@\installEMline@}%
-% \xywithoption{curve}{\xysetup@@\installEMcurves@}%
-% \xywithoption{frame}{\xysetup@@\installEMframes@}%
- \EMspecials@true }
-
-\xydef@\reloadxyEM@{\xywarning@{EM specials back on}\activateEM@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{straight lines}
-
-\DOCMODE(
-\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@@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{spline curves}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\noindent
-Of the curves defined in the |xycurve| extension, only solid spline curves
-are supported. This is done by treating the spline as a polygon (poly-line)
-with many segments.
-
-\DOCMODE(
-\xydef@\xyemtex@splinesolid@{\setbox\splinebox@=\copy\voidb@x
- \multiply\splinetol@\thr@@
- \gdef\splineextra@@{\xyemtex@moveto\gdef\splineextra@@{\xyemtex@lineto}}%
- \def\xycrvdrop@{ }\def\xycrvconn@{}\splineset@@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{line width}
-
-\DOCMODE(
-\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}%
-\DOCMODE)
-
-\DOCMODE(
-\xydef@\UseEMlinewidth{\installEMline@}%
-\xydef@\NoEMlinewidth{\uninstallEMline@}%
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xyemtex.doc,v $
-% Revision 3.3 1996/12/18 09:18:00 ross
-% fixed bug affecting line-widths
-%
-% Revision 3.1 1995/09/05 20:28:57 ross
-% Releasing version 3.1!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% NEW for version 3.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyframe.doc b/Master/texmf-dist/source/generic/xypic/xyframe.doc
deleted file mode 100644
index 7387f91163f..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyframe.doc
+++ /dev/null
@@ -1,1213 +0,0 @@
-%% $Id: xyframe.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Xy-pic ``Frames and Brackets'' extension.
-%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% 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-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{frame}{Frame and Bracket extension}{\stripRCS$Revision: 3.7 $}%
- {Kristoffer H.~Rose}{krisrose@brics.dk}%
- {BRICS/Computer Science, University of Aarhus, Ny Munkegade, building 540,
- DK--8000 Aarhus~C}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The |frame| extension provides a variety of ways to puts frames in
- \Xy-pictures.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The frames are \Xy-pic <object>s on the form
-%
-\begin{defs1}
- ??c![\frm]|{| <frame> |}| \cr
-\end{defs1}
-\noindent\unskip
-%
- to be used in <pos>itions: Dropping a frame with
- |*|\dots|\frm{|<frame>|}| will frame the~$c$ object; connecting with
- |**|\dots |\frm{|\dots<frame>|}| will frame the result of $c|.|p$.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{\Xy-pic interface}
-
- The frames are integrated in \Xy-pic as <object>s as follows. They
- generate a dummy object, then define the |\Drop@@| action to place
- the requested frame. The |\Connect@@| operation is defined to place
- the requested frame around the current "and" the previous object
- (using the |\cmerge@| command of the kernel).
-
-\DOCMODE(
-\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@{0}\else \quotient@\Leftness@\L@c\wdz@ \fi
-% \ifdim\dimen@=\z@ \def\Upness@{0}\else \quotient@\Upness@\U@c\dimen@ \fi
- \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@}
-\DOCMODE)
-
- The main command is |\frm@| which looks up if a custom control
- sequence is available for the requested frame or whether the generic
- `curve along the edge' code should be invoked.
-
-\DOCMODE(
-\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!}{}}
-\DOCMODE)
-
- This extra command is used to define |\Drop@@| for each frame such
- that |\frmradius@@| is available.
-
-\DOCMODE(
-\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@}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Below we distinguish between `ordinary' frames, `brackets' and
- `fills'; last we present how some frames can be added to other
- objects using object modifier <shape>s.
-
-\begin{figure*}[p]
-\vfill
-$$
-%
- \newcount\R \newcount\C
- \def\n{\advance\R1 \C0 \POS(\R,\C)}
- \def\F#1#2#3{\advance\C1 \def\1{#1}\def\3{#3}%
- \POS(\R,\C)*+\txt{Framed with\\\tt\string\frm\codeof\1\\frame%
- \ifx\3\empty\else ??^[#3]\relax\fi}*\frm#1*\frm{#2}}
-%
-\R0 \C0 \xy
- %
- \POS 0;<0cm,-1.7cm>:<3.2cm,0cm>:: \relax
- \F{{}}{}{dummy} \F{{.}}{}{rect} \F{<44pt>{.}}{}{rect}
- %
- \n\F{{-}}.{rect}="top"\F{<8pt>{-}}.{rect} \F{<44pt>{-}}.{rect}
- \n\F{{=}}.{rect} \F{<8pt>{=}}.{rect} \F{<44pt>{=}}.{rect}
- \n\F{{--}}.{rect} \F{{o-}}.{rect} \F{<44pt>{--}}.{rect}
- \n\F{{,}}.{shade} \F{<5pt>{,}}.{shade} \F{{-,}}.{shade}
- \n\F{{o}}.{circ} \F{<8pt>{o}}.{circ} \F{{.o}}.{circ}
- \n\F{{oo}}.{circ} \F{<8pt>{oo}}.{circ} \F{{-o}}.{circ}
- \n\F{{e}}.{ellip} \F{<20pt,8pt>{e}}.{ellip} \F{{.e}}.{ellip}
- \n\F{{ee}}.{ellip} \F{<20pt,8pt>{ee}}.{ellip} \F{{-e}}.{ellip}="bot"
- %
-% \n\POS+(0,1)*=<20pt,10pt>{}="5,0"*\frm{*}!CR!<\jot,0pt>
-% *!L{\leftarrow\txt{Framed with {\tt\string\frm\string{*\string}}
-% frame \dots\ should only be used\\for relatively small (and probably
-% empty) objects}}
- %
- \POS"top"."bot"!CL!<-2\jot,0pt>*\frm{\{}
- *++!R\txt<2cm>{These are over\-layed with the
- {\tt\string\frm\string{.\string}} frame
- above to show the way they are centered
- on the object}
-\endxy
-$$
-\caption{Plain \protect<frame>s.}
-??=[f.frm]
-%\vspace{3ex}
-\vfill
-$$
-%
- \newcount\R \newcount\C
- \def\n{\advance\R1 \C0 \POS(\R,\C)}
- \def\F#1#2#3{\advance\C1 \def\1{#1}\def\3{#3}%
- \POS(\R,\C)*+\txt{Framed with\\\tt\string\frm\codeof\1\\frame%
- \ifx\3\empty\else ??^[#3]\relax\fi}*\frm#1*\frm{#2}}
-%
-\R0 \C0 \xy
- %
- \POS 0;<0cm,-1.7cm>:<3.2cm,0cm>:: \relax
- \n\F{{_\}}}.{braces} \F{{^\}}}.{braces} \F{{\{}}.{braces} \F{{\}}}.{braces}
- \n\F{{_)}}.{paren} \F{{^)}}.{paren} \F{{(}}.{paren} \F{{)}}.{paren}
- %
-\endxy
-$$
-\caption{Bracket \protect<frame>s.}
-??=[f.bfrm]
-\vfill
-\end{figure*}
-
-
-\subsection{Frames}
-??=[frames]
-
- Figure~??[f.frm] shows the possible frames and the applicable
- <modifier>s with reference to the notes below.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{notes}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[dummy]
-
- The |\frm{}| frame is a dummy useful for not putting a frame on
- something, \eg, in macros that take a <frame> argument.
-
-\DOCMODE(
-\xydefcsname@{frm{}}{}
-\xyletcsnamecsname@{frm[]{}}{frm{}}
-\xyletcsnamecsname@{frm[o]{}}{frm{}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[rect]
-
- "Rectangular" frames include |\frm{.}|, |\frm{-}|, |\frm{=}|,
- |\frm{--}|, |\frm{==}|, and |\frm{o-}|. They all make rectangular
- frames that essentially trace the border of a rectangle-shaped
- object.
-
- The <frame>s |\frm{-}| and |\frm{=}| allow an optional "corner
- radius" that rounds the corners of the frame with quarter circles of
- the specified radius. This is not allowed for the other frames---the
- |\frm{o-}| frame always gives rounded corners of the same size as the
- used dashes (when |\xydashfont| is the default one then these are
- |5pt| in radius).
-
-\begin{exercise}
-%
- How do you think the author typeset the following?
-%
-\begin{code}
-\xy
- (0,0) *++={A} *\frm{o} ;
- (10,7) *++={B} *\frm{o} **\frm{.}
-\endxy
-\end{code}
-$$\docode$$
-%
-\answertext{Here is how:}
-\answercode
-\answertext\displaycode
-\end{exercise}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The commands still hack away with rules and stuff\dots
-
- |\frm{.}| just fills the edges of the object rectangle border with
- dots using dots as in dotted connections in the kernel.
-
-\DOCMODE(
-\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
-\DOCMODE)
-
- The |\frm|<variant>|{-}| and |\frm|<variant>|{=}| set a single/double
- frame that just surrounds the current object; if a <radius> is given
- then it should be a |<|<dimen>|>| where the <dimen> will be used for
- the corner radius.
-
- The commands for |\frm{-}| and |\frm{=}| are quite similar in that
- they just call |\framed@| one or two times, respectively, with the
- corner radius and $L,R,D,U$ extents reflecting the size of the frame.
- |\framed@| then sets the horizontal and vertical fill commands to
- generate rules of the right length, then calls |\framed@@| where the
- real work is done.
-
-\DOCMODE(
-\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{=}}
-\DOCMODE)
-
- When the line extension is also loaded then we use the line thickness
- for frames:
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
- |\framed@@| is where we build a box with the sides of the frame
- displaced appropriately. \TODO{Generalise this to handle any
- directional!}
-
-\DOCMODE(
-% Procedure:
-% %0 setup hrulefill and vrulefill as apropriate...
-% %1 Lower R to be less than half of both (U+D) and (L+R).
-% %2 Start vbox at (X-L,Y-D) except center overshoot.
-% %3 Generate corner CO4 at R; w[\A@] := -1/2 width(corner);
-% r[\B@] := 1/2 rulewidth; h[\dimen@ii] := U+D+2w;
-% %4 Row 1: hbox to W{kern w CO4 hrulefill CO3 kern w}.
-% %5 Row 2: hbox to W{kern-r vbox to h{vrulefill}
-% hfill vbox to h{vrulefill} kern-r}.
-% %6 Row 3: hbox to W{kern w CO1 hrulefill CO2 kern w}.
-
-\xydef@\framed@@#1{\setboxz@h{\R@=#1\relax
- \dimen@=\L@c \advance\dimen@\R@c \dimen@ii=\U@c \advance\dimen@ii\D@c %1
- \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 %2
- \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@ %3
- \dimen@=\L@c \advance\dimen@\R@c \advance\dimen@-.2\p@
- \setboxz@h to\dimen@{\kern\A@ \boxz@ \framehfill\corn@@3\R@\kern\A@}%4
- \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@}%6
- \advance\dimen@ii-\ht\z@
- \dimen@=\L@c \advance\dimen@\R@c \advance\dimen@.2\p@
- \nointerlineskip\hbox to\dimen@{% %5
- \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@}
-\DOCMODE)
-
- The dashed frames `dash' with the dash used for dashed lines.
-
-\DOCMODE(
-\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@@}}
-\DOCMODE)
-
-\BUG: Setting the corner-radius to less than 10pt has no effect when
- using |\frm{o-}|; instead a default size of |.8\xydashl@| is used.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[shade]
-
- The frame |\frm{,}| puts a shade, built from rules, into the picture
- beneath the (assumed rectangular) object, thereby giving the illusion
- of `lifting' it; |\frm<|<dimen>|>{,}| makes this shade <dimen> deep.
-
- |\frm{-,}| combines a |\frm{-}| with a |\frm{,}|.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- A black rule is just that, a shade is two rules placed under and left
- of the rectangular object outline.
-
-\DOCMODE(
-\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@
- % \advance\B@-\xydashw@ \advance\dimen@ii-.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}
-\DOCMODE)
-
-The |\blacked| option is subsumed within a more general |\filled|; see below.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[circ]
-
- Circles done with |\frm{o}| have radius as $(R+L)/2$ and with
- |\frm<|<dimen>|>{o}| have radius as the <dimen>; |\frm{oo}| makes a
- double circle with the outermost circle being the same as that of
- |\frm{o}|.
-
-\begin{exercise}
- What is the difference between |*\cir{}| and |*\frm{o}|?
-\answertext{The |*\cir{}| operation changes $c$ to be round whereas
- |*\frm{o}| does not change $c$ at all.}
-\end{exercise}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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@
-\DOCMODE)
-
-The code here is repetitive and could be improved.
-The only purpose of |\let\framehfill=\frm@dashh@@| etc. is to serve
-as a marker for the required style: solid/dashed/dotted.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[ellip]
-
- Ellipses specified using |\frm{e}| have axis lengths $(R+L)/2$ and
- $(U+D)/2$, while those with |\frm<|<dimen,dimen>|>{e}| use the given
- lengths for the axes. |\frm{ee}| makes a double ellipse with outermost
- ellipse being the same as that of |\frm{e}|.
-
- Without special support to render the ellipses, either via a <driver>
- or using the |arc| feature, the ellipse will be drawn as a circle of
- radius approximately the average of the major and minor axes.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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@ \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@\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@@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{notes}
-
- \TODO: Allow <frame variant>s like those used for directionals, \ie,
- |\frm2{-}| should be the same as |\frm{=}|. Add |\frm{o,}| and more
- brackets.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Brackets}
-??=[brackets]
-
- The possible brackets are shown in figure~??[f.bfrm] with notes
- below.
-
-\begin{notescontd}
-
-\note??=[braces]
-
- "Braces" are just the standard plain \TeX\ large braces inserted
- correctly in \Xy-pic pictures with the `nib' aligned with the
- reference point of the object they brace.
-
-\begin{exercise}
-%
- How do you think the author typeset the following?
-%
-\begin{code}
-\xy
- (0,0) *+++{A} ;
- (10,7) *+++{B} **\frm{.}
- **\frm{^\}} ; **\frm{_\}}
-\endxy
-\end{code}
-$$\docode$$
-%
-\answertext{Here is how:}
-\answercode
-\answertext\displaycode
-\answertext{The trick in the last line is to ensure that the reference point
- of the merged object to be braced is the right one in each case.}
-\end{exercise}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- They just use the pieces of plain \TeX\ brace delimiters at |\Bigg|
- size and those of |\overbrace| and |\underbrace|.
-
-\DOCMODE(
-\xydefcsname@{frm{\{}}{\addtoDrop@@{\lbraced}}
-\xydefcsname@{frm{\}}}{\addtoDrop@@{\rbraced}}
-
-\xydefcsname@{frm{^\}}}{\addtoDrop@@{\ubraced}}
-\xydefcsname@{frm{_\}}}{\addtoDrop@@{\dbraced}}
-\DOCMODE)
-
- The horizontal ones mimick the plain \TeX\ ones quite closely:
-
-\DOCMODE(
-\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@}}
-\DOCMODE)
-
- The inserted extra |.5pt| at |(1)| is the authours
- responsibility\dots
-
- The vertical ones repeat the above for the vertical brace extension
- characters:
-
-\DOCMODE(
-{\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@}}
-\DOCMODE)
-
- An \emph{ad hoc} correction to compensate for the `undershoot' of
- top/bottom segments is added at |(1)|.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[paren]
-
- "Parenthesis" are like braces except they have no nib and thus do not
- depend on where the reference point of $c$ is.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xydefcsname@{frm{(}}{\addtoDrop@@{\lparenthesized}}
-\xydefcsname@{frm{)}}{\addtoDrop@@{\rparenthesized}}
-
-\xydefcsname@{frm{^)}}{\addtoDrop@@{\uparenthesized}}
-\xydefcsname@{frm{_)}}{\addtoDrop@@{\dparenthesized}}
-\DOCMODE)
-
- The horizontal ones repeat the braces only without a nib:
-
-\DOCMODE(
-\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@}}
-\DOCMODE)
-
- The vertical ones are very like braces including the ad hoc
- correction.
-
-\DOCMODE(
-\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@}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{notescontd}
-
- \BUG: The brackets above require that the computer modern |cmex| font
- is loaded in \TeX\ font position~3.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Filled regions}
-
- In addition to the above there is a special frame that ``fills'' the
- inside of the current object with ink: ??c![\frm{*}] and
- ??c![\frm{**}]; the latter is intended for \emph{emphasizing\/} and
- thus ``strokes'' the outline, using the thinnest black line available
- on the printer or output device; furthermore it moits the actual
- filling in case this would obscure further text typeset on top.
- Some alteration to the shape is possible, using |*\frm<dimen>{*}|.
- Hence rectangular, oval, circular and elliptical shapes can be
- specified for filling.
- The following examples illustrate this in each case:
-%
-\begin{center}
-\def\X[#1]#2{\relax\xy*=<2em>{}*=<3em,1.4em>[#1][F.]{}#2\endxy}%
-\begin{tabular}{cccc}
-\hline
- \strut<object> & |\frm{*}| & |\frm{**}| & |\frm<6pt>{*}| \\
-\hline
- \X[]{} & \X[]{*\frm{*}} & \X[]{*\frm{**}} & \X[]{*\frm<6pt>{*}} \\
- \X[o]{} & \X[o]{*\frm{*}} & \X[o]{*\frm{**}} & \X[o]{*\frm<6pt>{*}} \\
-\hline
-\end{tabular}
-\end{center}
-%
- However, filling non-rectangular shapes will result in a rectangle
- unless a driver is used that supports arbitrary filling. With some
- drivers the above fills will thus all be identical, as rectangular.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-When the previous <object> has |\rectangleEdge| then the shape is either
-oval or rectangular, depending on whether a <dimen> has been specified,
-using the <dimen> as radius for the corners, but not exceeding half the
-shorter side-length.
-
-When the current <object> has |\circleEdge| then the region is elliptical,
-using the extents |R+L| and |U+D| as the major/minor axes, or circular
-if a <dimen> is specified. The <dimen> will become the radius after reducing
-to a maximum of half the longest side of the enclosing rectangle.
-With |\zeroEdge| presume rectangular, or circular if a <dimen> is supplied.
-
-The default for |\frm{**}| is to just make a plain frame.
-
-\DOCMODE(
-\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 }
-\DOCMODE)
-
-The default implementation uses only |\bblacked@|, in all cases.
-The distinction between |\frm{*}| and |\frm{**}| can be ignored.
-
-\DOCMODE(
-\xylet@\filledRectangle@@=\bblacked@
-\xylet@\filledCircle@@=\bblacked@
-\xylet@\filledEllipse@@=\bblacked@
-\xylet@\filledOval@@=\bblacked@
-\DOCMODE)
-
-Alternative implementations may use these, in which the parameter |#1|
-is the contents of a |\vbox| filling to the height, depth and width
-of the region to be filled.
-
-\DOCMODE(
-\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@@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Framing as object modifier}
-??=[modifier]
-%
- In addition, frames may be accessed using the special |[F|<frame>|]|
- object modifier <shape>s that will add the desired <frame> to the
- current object. The frame appropriate to the edge of the object
- will be chosen (presently either rectangular or elliptical).
-
- If shape modifiers need to be applied to the <frame> alone then they
- can be included using |:| as separator. Thus |[F-:red]| will make a
- red frame (provided the color extension is active, of course).
- Additionally the variant of frames using |<|<dimen>|>| can be
- accessed by specifying |[|\dots|:<|<dimen>|>]|.
-
-\DOCMODE(
-\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@@}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The following are used to ensure that the current styles, after
- typesetting, are those of the <object>, rather than the <frame>.
-
-\DOCMODE(
-\xydef@\saveframestyles@{%
- \edef\afterframe@preStyle@{\preXY@style@}%
- \edef\afterframe@postStyle@{\postXY@style@}}
-
-\xydef@\restoreframestyles@{%
- \xdef\preXY@style@{\afterframe@preStyle@}\def\afterframe@preStyle@{}%
- \xdef\postXY@style@{\afterframe@postStyle@}\def\afterframe@postStyle@{}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Here are some simple examples using this feature.
-%
-\begin{code}
-\xy *+<1.5pt>[F**:white]++[F**:red]
-\txt{text with background}
-,+!D+/d1pc/,*++[F**:black][white]
-\txt\bf{bold white on black}\endxy
-\end{code}
-$$\docode$$
-\displaycode
-Notice that when multiple frame-modifiers are used, the frames
-are actually placed in reverse order, so that earlier ones
-are printed on top of later ones.
-
- \TODO: The frame option is not quite complete yet: some new frames
- and several new brackets should be added.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Using curves for frames}
-??=[curved frames]
-%
- If the curve option is loaded, then circular and elliptical frames of
- arbitrary radius can be constructed, by specifying |\UseCurvedFrames|.
- This can be negated by |\UseFontFrames|. Both of these commands obey
- normal \TeX\ grouping. Furthermore, dotted and dashed frames now have
- a regular spacing of their constituent objects. The usual warnings
- about memory requirements for large numbers of curves apply here also.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Use the |\xycircle| setup in |xycurve.doc| to implement circular
-and elliptical frames.
-
-\DOCMODE(
-\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@
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Finally, the frame extension is added to the <driver> system:
-
-\DOCMODE(
-\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@
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection*{End \& log}
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xyframe.doc,v $
-% Revision 3.7 1999/02/16 15:12:50 krisrose
-% Interim release (Y&Y fonts now free).
-%
-% Revision 3.6 1998/03/06 01:28:05 krisrose
-% Releasing (with Y&Y fonts).
-%
-% Revision 3.4 1997/05/18 01:14:25 krisrose
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/19 03:31:56 krisrose
-% Maintenance release
-%
-% Revision 3.2 1995/09/19 18:22:27 kris
-% Bug fix 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.14 1995/07/05 22:11:03 kris
-% Buglets...
-%
-% 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.10 1994/06/15 12:55:07 kris
-% Second 3beta release: bug fixes.
-%
-% 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.
-%
-% Revision 2.6.9.1 1994/03/07 04:22:46 kris
-% Last internal 3alpha and pre-2.7 release.
-%
-% NEW for version 2.7 based on frame code in xypic.doc 2.6.1.1.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs how we are formatted:
-% Local Variables:
-% mode:latex
-% fill-prefix:"\t"
-% fill-column:77
-% paragraph-separate:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% paragraph-start:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% TeX-parse-self:nil
-% LaTeX-indent-level:1
-% TeX-brace-indent-level:1
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xygraph.doc b/Master/texmf-dist/source/generic/xypic/xygraph.doc
deleted file mode 100644
index 718d12a2182..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xygraph.doc
+++ /dev/null
@@ -1,710 +0,0 @@
-%% $Id: xygraph.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Xy-pic ``Graph Combinator feature'' option.
-%% Copyright (c) 1994-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% 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-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{graph}{Graph feature}{\stripRCS$Revision: 3.7 $}%
- {Kristoffer H.~Rose}{krisrose@brics.dk}%
- {BRICS/Computer Science, University of Aarhus, Ny Munkegade, building 540,
- DK--8000 Aarhus~C}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This option implements `\Xy-graph', a special "combinatoric drawing
- language" suitable for diagrams like flow charts, directed graphs,
- and various forms of trees. The base of the language is reminiscent
- of the PIC~\cite{K82:PIC-LTG} language because it uses a notion of
- the `current location' and is based on `moves'. But the central
- construction is a `map' combinator that is borrowed from functional
- programming.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- \Xy-graph makes use of facilities of the `arrow' feature option of
- \S??g[:arrow], which is therefore required.
-
-\DOCMODE(
-\xyrequire{arrow}\xycatcodes
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Figure~??[f.graph] summarises the syntax of a <graph> with notes
- below. A <graph> can appear either in an \Xy-picture (as <decor>) or
- ``stand-alone''.\footnote{In fact \LaTeX\ users can use a |graph|
- environment.} \NOTE: If you use ??c![\xygraph]|{|\dots|}| inside
- constructions where |&| is significant (like plain \TeX's
- ??c![\halign] or \LaTeX's ??c![array] environment) then make sure to
- add an extra level of braces around it.
-
-\begin{figure*}[tb]
-\begin{syntax}
-%
- \multispan{3}{{\tt\string\xygraph\string{<graph>\string}}\hfil}
- & typeset <graph>
-\cr
-\noalign{\nobreak\smallskip\nobreak\hrule\nobreak\smallskip\nobreak}
-%
- ??w![<graph>]
- &\iss & <step>\star
- & interpret <step>s in sequence
-\cr
-\noalign{\smallskip}
- ??w![<step>]
- &\iss & <node>
- & ??!^[move] to the <node>
-\cr
- &\orr & |-|<arrow> <node> <labels>
- & ??!^[draw] line to <node>, with <labels>
-\cr
- &\orr & |:|<arrow> <node> <labels>
- & ??!^[draw] <arrow> to <node>, with <labels>
-\cr
- &\orr & |(| <list> |)|
- & ??!^[map] current node over <list>
-\cr
-\noalign{\smallskip}
-%
- ??w![<node>]
- &\iss & |[| <move> |]|
- & new node <move>d relative to current
-\cr
- &\orr & |&| \orr\ |\\|
- & new node in ??!^[next column/row]
-\cr
- &\orr & |"|<id>|"|
- & previously ??!^[saved] node
-\cr
- &\orr & |?|
- & currently ??!^[mapped] node
-\cr
- &\orr & <node> <it>
- & <node> with <it> ??!^[typeset and saved] there
-\cr
- &\orr & <node> |=| |"|<id>|"|
- & <node> ??!^[saved] as |"|<id>|"|
-\cr
- &\orr & <node> |!| <escape>
- & augment node with material in another mode
-\cr
-\noalign{\smallskip}
-%
- ??w![<move>]
- &\iss & <hop>\star\
- & ??!^[<hop>s] (|dulr|) from current node
-\cr
- &\orr & <hop>\star\ <place> <move>
- & do ??!^[<hop>s] but use its <place> and <move> again
-\cr
-\noalign{\smallskip}
-%
- ??w![<list>]
- &\iss & <graph> |,| <list> \orr\ <graph>
- & ??!^[list of subgraphs]
-\cr
-\noalign{\smallskip}
-%
- ??w![<escape>]
- &\iss & |{| <pos> <decor> |}|
- & ??!^[perform <pos> <decor>]
-\cr
- &\orr & |M| <matrix>
- & ??!^[insert <matrix>]
-\cr
- &\orr & |P| <polygon>
- & ??!^[insert <polygon>]
-\cr
- &\orr & |E| <ellipse>
- & ??!^[insert <ellipse>]
-\cr
- &\orr & |~| <setup>
- & ??!^[setup parameters]
-\cr
-\end{syntax}
-\caption{\protect<graph>s}??=[f.graph]
-\end{figure*}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Parsing:}
-
- The parser does almost everything that this feature does because it
- is all implemented directly on top of other constructions, notably
- the kernel stack and the <arrow> construction.
-
- The graph state always has the current value of |?| both as the
- stacktop and in the special <id> |"?NODE"|.
-
-\DOCMODE(
-\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@{%
-%
-%\W@{GRAPH: next=\meaning\next}%
-%
- \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@}%
- % HACK: ONLY POP WHEN NONEMPTY...WHY EVER NONEMPTY?
- \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 <node>: \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 <move>: \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
-%
-%\W@{NODE@i: next=\meaning\next}%
-%
- \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@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{notes}
-%
-\note??=[move]
-%
- A "move" is to establish a new "current node".
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[draw]
-%
- To "draw" something is simply to draw a line or the specified <arrow>
- from the current node to the specified target node. The target then
- becomes the current node. All the features of arrows as described
- in~\S??g[:arrow] can be used, in particular arrows can be labelled and
- segmented, but with the change that <path-pos> means <node> as
- explained in note~\S??g[xyarrow.doc:segment].
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[map]??=[mapped]??=[list of subgraphs]
-%
- To "map over a list" is simply to save the current node and then
- interpret the <list> with the following convention:
-%
-\begin{itemize}
-\item Start each element of the list with the current node as saved and $p$
- as the previous list element, and
-\item let the |?| <node> refer to the saved current node explicitly.
-\end{itemize}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[next column/row]
-%
- The |&| and |\\| special moves are included to make it simple to enter
- `matrix-like' things as graphs -- note that they will not be
- automatically aligned, however, for that you should use the |!M|
- escape.
-
- |&| is the same as |[r]| and |\\| is the same as
- |[r]!{y+(0,-1)-(0,0)}| which uses a kernel escape to moves to the
- first column in the next row (where the first column is on the
- $y$-axis of the current coordinate system).
-
- \NOTE: If you use the form |*{|\dots|}| for nodes then you don't
- have to change them if you decide to use an \Xy-matrix.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[typeset and saved]??=[saved]
-%
- Typeset <it> and make it the current node. Also saves <it> for later
- reference using |"|<id>|"|: if <it> is a simple letter, or digit,
- then just as |"|<it>|"|; if <it> is of the form
- |{|"text"|}| or |*|\dots|{|"text"|}| then as |"|"text"|"|.
-
- With the |=| addition it is possible to save explicitly in case
- several nodes have the same text or a node has a text that it is
- impractical to use for reference. In fact using the form
- <it>|="|<id>|"| will "only" save the node as |"|<id>|"| and "not" as
- |"|<it>|"|! As a special convenience |""| (thus the empty <id>)
- always refers to the last completed node, so adding |=""| after a
- node merely means it should "not" be saved under its proper name.
-
-\begin{exercise}
- How did the author typeset this?
-%
-\begin{code}
-\xygraph{
- []A="A1" :@/^/ [r]A
- :@/^/ [r]A
- :@/^/ "A1" }
-\end{code}
-$$\docode$$
-%
-\answercode
-\answertext{The first $A$ was named to allow reference from the last:
- \displaycode}
-\end{exercise}
-
-\note??=[<hop>s]
-%
- Moving by a series of "hops" is simply moving in a grid as the
- sequence of |dulr| (for down/up/left/right) indicates. The grid is a
- standard cartesian coordinate system with 3pc unit unless the current
- base is redefined using |[]!{|\dots|}| with an appropriate <pos>ition
- containing |:| and |::| as described in note~??g[xy.doc:base].
-
- \TODO: Describe the use of <move>s with <place>s in detail \dots\ in
- particular (1)~`until perpendicular to \dots' and (2)~`until
- intercepts with \dots' can be coded\dots
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[perform <pos> <decor>]
-%
- This `escapes' into the \Xy-pic kernel language and interprets the
- <pos> <decor>. The current node is then set to the resulting $c$
- object and the grid from the resulting "base".
-
- The effect of the <pos> <decor> can be completely hidden from
- \Xy-graph by entering it as |{\save| <pos> <decor> |\restore}|.
-
-\DOCMODE(
-\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 <escape>}{}\xyFN@\NODE@i}%
- \fi\fi\fi\fi\fi \next@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[insert <matrix>]
-%
- It is possible to insert a <matrix> in a graph provided the `matrix'
- option described in~\S??g[:matrix] has been loaded: it overwrites the
- node with the result of |\xymatrix|<matrix>. Afterwards the graph
- grid is set as the top left `square' of the matrix, \ie, with |[d]|
- and |[r]| adjusted as they work in the top left entry.
-
- \BUG: |[dr]| immediately after the matrix will work as expected, \eg,
- make the center of |"2,2"| the current node, but others might not, \eg,
- |[rr]| will not necessarily place the current node on top of |"1,3"|.
-
-\DOCMODE(
-\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@}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[insert <polygon>]??=[insert <ellipse>]
-%
- It is possible to insert a <polygon> or an <ellipse> in a graph
- provided the |poly| option described in~\S??g[:poly] or the |arc|
- option described in~\S??g[:arc] has been loaded, respectively:
- it will have $c$ as the current node, $p$ as the previous one, and
- the the current base has the <hop>s |[r]| and |[u]| as base vectors.
-
- \NOTE: lattices, knots, \etc, can also be used but no special syntax
- is useful since the |!{|\dots|}| syntax is adequate.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[setup parameters]
-%
- This allows setting of some parameters of the graph: |!~|<setup>
- should be one of the following:
-%
-\begin{defs}
-%
- |!~:{| <arrow> |}| & include with every |:| arrow \cr
- |!~-{| <arrow> |}| & include with every |-| line \cr
- |!~*{| <modifiers> |}| & include with every non-|*| node \cr
- |!~|<letter>|{| <graph> |}| & define new graph escape |!|<letter>
-%
-\end{defs}
-\noindent\unskip
-%
- These are destructive: the previous value is lost; the default is
- established by the sequence |!~:{}| |!~-{@{-}}| |!~*{+}| making |:|
- create simple arrows, |-| plain lines, and formatting default nodes
- in math mode with the default objectmargin.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- The last possibility is also available as a command
-%
-\begin{defs1}
-%
- ??c![\newgraphescape]|{|<letter>|}{|<graph>|}| \cr
-%
-\end{defs1}
-\noindent\unskip
-%
- that makes the specified escape generate the <graph> as a macro; with
- it it is possible to pass arguments to the <graph> using the standard
- \TeX\ |\def| method: The declaration code
-%
-\begin{code}
-\newgraphescape{i}#1#2{
- []!{+0="o#2"*=<10pt>{};p!#1**{},"o#2"
- -/4pt/*!E\cir<2pt>{}
- +0;p-/:a(-30)24pt/**\dir{-}="X2"
- ;p-/:a(-60)24pt/="X1"**\dir{-}
- ;?(.5),="i#2",
- p-/:a(-60)24pt/**\dir{-},
- "o#2"."i#2"."X1"."X2"}}
-\end{code}
-{\gdocode}%
-\displaycode\noindent
-%
- is (rather complicated kernel code) that makes the node escape
- |!i|$dn$ typeset an `inverter' oriented with the $d$ corner as the
- output with input named |"i|$n$|"| and output named |"o|$n$|"| such
- that the graph
-%
-\begin{code}
-\xygraph{ []!iR1 ("i1"[l]x - "i1") - [r]z }
-\end{code}
-\displaycode\noindent
-%
- will typeset
-$$
-\docode
-$$
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The ??c![\newgraphescape]<letter> declaration defines a macro with
- name |\graph !|<letter>. It is slightly complicated by the fact that
- we accept \LaTeX-style |[n]| arguments (when using \LaTeX, that
- is~\smiley). Thus an internal macro named |\G!|<letter> is defined
- using the appropriate command definition primitve; this is in turn
- invoked by |\graph !|<letter> after activating the <graph> parser.
-
-\DOCMODE(
-\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 <escape> !#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 <escape> !#1}\fi \next}
-\DOCMODE)
-
-%\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-%\note??=[use <prefix>]
-%%
-% This will setup a <prefix> such that all the entries of the graph
-% will get that prefix.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{notes}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The final exercise illustrates much of the above.
-
-\begin{exercise}
-%
- Typeset
-%
-\begin{displaymath}
-\begin{code}
-\SelectTips{cm}{}
-\objectmargin={1pt}
-\xygraph{ !{0;(.77,-.77):0}
- !~:{@{-}|@{>}}
- w (:[r(.6)]{x_1}
- ,:[d]z:[r]y:[u(.6)]{x_2}:"x_1":"z"
- :@( {"w";"z"}, {"y";"z"})"z":"x_2") }
-\end{code}
-\docode
-\end{displaymath}
-%
-\answercode
-\answertext{The author did\displaycode It also shows that one \emph{can} use
- |{}|s inside delimited arguments \emph{provided} one adds a space to
- avoid the |{}|s being shaved off!}
-\end{exercise}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection*{End \& log}
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xygraph.doc,v $
-% Revision 3.7 1999/02/16 15:12:50 krisrose
-% Interim release (Y&Y fonts now free).
-%
-% Revision 3.6 1998/03/06 01:28:05 krisrose
-% Releasing (with Y&Y fonts).
-%
-% Revision 3.4 1997/05/18 01:14:25 krisrose
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/19 03:31:56 krisrose
-% Maintenance release
-%
-% Revision 3.2 1995/09/19 18:22:27 kris
-% Bug fix 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.11 1994/07/05 10:37:32 kris
-% Third 3beta release [bug fixes].
-% Experimental graph feature included (for ECCT-94 presentation).
-%
-% New for v3...
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs how we are formatted:
-% Local Variables:
-% mode:latex
-% fill-prefix:"\t"
-% fill-column:77
-% paragraph-separate:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% paragraph-start:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% LaTeX-indent-level:1
-% TeX-brace-indent-level:1
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyguide.man b/Master/texmf-dist/source/generic/xypic/xyguide.man
deleted file mode 100644
index fa96c7b5c6c..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyguide.man
+++ /dev/null
@@ -1,2285 +0,0 @@
-%% $Id: xyguide.man,v 3.6 1998/03/06 01:28:05 krisrose Exp $
-%%
-%% ``Xy-pic User's Guide''.
-%%
-%% 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-1997 Kristoffer H. Rose <krisrose@ens-lyon.fr>
-%%
-%% 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, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-
-\documentclass{article}
-%begin{latexonly}
-\usepackage{xydoc}
-%end{latexonly}
-\begin{htmlonly}
-\usepackage{xyhtmldoc}
-\end{htmlonly}
-\input{version}
-\CompilePrefix{xygui-}
-\makeindex
-\begin{document}
-
-\title{ \Xy-pic User's Guide }
-\author{ Kristoffer H. Rose\quad<krisrose@ens-lyon.fr>\thanks{%
- Laboratoire de l'Informatique du Parall\'elisme,
- Ecole Normale Sup\'erieure de Lyon;
- 46, All\'ee d'Italie; F--69364 Lyon 7, France.}}
-\date{Version \xyversion, \printdate{\xydate}}
-\maketitle
-
-\begin{abstract}
-%
- \Xy-pic is a package for typesetting graphs and diagrams using
- Knuth's \TeX\ typesetting system. \Xy-pic works with most of the
- many formats available; \eg, plain \TeX, \LaTeX, and \AMS-\TeX.
- Several styles of input for various diagram types are supported; they
- all share a mnemonic notation based on the \emph{logical composition
- of visual components}. This guide concentrates on how to typeset
- ``matrix-like'' diagrams, such as ??w![commutative diagrams], in the
- following style:
-%
-\begin{displaymath}
-\begin{code}
-\xymatrix{
- U \ar@/_/[ddr]_y \ar@/^/[drr]^x
- \ar@{.>}[dr]|-{(x,y)} \\
- & X \times_Z Y \ar[d]^q \ar[r]_p
- & X \ar[d]_f \\
- & Y \ar[r]^g & Z }
-\end{code}
-%
-\docode
-\end{displaymath}
-%
-was typeset by the \Xy-pic input lines
-%
-\displaycode\noindent
-%
-Such diagrams have the following characteristics:
-%
-\begin{itemize}
-
-\item
- Specified as a matrix of entries that are automatically aligned in rows and
- columns.
-
-\item
- Any entry may be connected to any other entry using a variety of
- arrow styles all rotated and stretched as required.
-
-\item
- Arrows may be decorated with labels that are tied to a specified
- point along the arrow and extend in a particular direction; and
- arrows may be paired, cross, and visit/bend around other entries ``on
- the way.''
-
-\end{itemize}
-%
- Several other styles of input are supported; a short survey of the
- possibilities is included last at the end along with information on
- how \Xy-pic can be obtained.
-%
-\end{abstract}
-
-\tableofcontents
-
-
-
-\section*{Preface}\noindent
-\addcontentsline{toc}{section}{Preface}%
-%
- This guide explains some features of \Xy-pic that are relevant to
- typesetting of ``matrix-like diagrams'' as used in, for example,
- category theory; please refer to the reference
- manual~\cite{RM95:Xy-picRM} for complete information on the described
- constructions. The guide assumes that you have some experience in
- using \TeX\ for typesetting mathematics, \eg, have
- studied~\cite[ch.~16--19]{K84:TeXbook}, \cite[sec.~3.3]{L94:LaTeX},
- or~\cite{S90:JoyT}, and that \Xy-pic is installed on your \TeX\
- system as described in the |INSTALL| file accompanying the
- distribution.
-
- The first section describes what you need to get started, in
- particular all that is needed to typeset the diagram in the abstract.
- Section~??[arrows] and~??[entries] explain advanced use of arrows and
- entries, respectively. Finally, section~??[avail] explains where and
- under what conditions \Xy-pic is available, gives the relation of
- version \xyversion\ to previous versions, and lists further sources
- of information.
-
- Throughout we give exercises that you should be able to solve as you
- go along; all exercises are answered at the end just prior to the
- references and index.
-
-
-
-\section{Basics}
-??=[basics]
-%
- This section explains the \Xy-diagram construction concepts needed to
- get started with typesetting matrix-like diagrams.
-
-
-\subsection{Loading}
-??=[basics.loading]
-%
- The \Xy-pic setup used in this guide is loaded??w[loading] by
- inserting the lines
-%
-\begin{defs1}
- \cs{input} |xy| \cr
- ??c![\xyoption]|{all}|
-\end{defs1}
-\noindent\unskip
-%
- in the definitions part of your
- document.\footnote{??w![\LaTeXe]~\cite{L94:LaTeX} users can use
- ??c![\usepackage]|[all]{xy}|.} If you wish to load only the
- features you use, or you wish to use non-standard facilities like the
- |v2| backwards compatibility mode\footnote{If you use the version~2
- loading command \cs{input} |xypic| (or the |xypic| document style
- option) then the ??c![v2] option described in section ??[compat] will
- be loaded automatically.} or the ??c![ps] \PS\ backend then this is
- also possible as described in the reference
- manual~\cite{RM95:Xy-picRM}.
-
-
-\subsection{Entries}
-??=[basics.entries]
-%
- A diagram is created by the command
-%
-\begin{defs1}
- ??c![\xymatrix]|{|~\dots~|}|
-\end{defs1}
-\noindent\unskip
-%
- where the ``\dots'' should be replaced by \emph{entries}??w[entry] to
- be aligned in \emph{??w![rows]} and \emph{??w![columns]} where
-%
-\begin{itemize}
-
-\item
- entries in a row are separated by ??c![&],\footnote{Thus when using
- \protect\Xy-constructions involving |&| inside other tabular
- constructions then enclose the \protect\Xy-pic construction in an
- extra pair of braces!} and
-
-\item
- entire rows are separated by ??c![\\].
-
-\end{itemize}
-%
- For example,
-\begin{displaymath}
-\begin{code}
-\xymatrix{
- A &*+[F]{\sum_{i=n}^m {i^2}} \\
- & {\bullet} & D \ar[ul] }
-\end{code}
-\docode
-\end{displaymath}
-%
- was typeset by
-%
-\displaycode\noindent
-%
- Notice the following:
-%
-\begin{itemize}
-
-\item
- entries are typeset as mathematics (using ``??w![text style]'');
- entries should not start with a macro (as illustrated by the use of
- |{}| around |\bullet|\,.
-
-\item
- all entries are centered and the separation between rows and columns
- is usually quite large in a diagram,
-
-\item
- empty entries at the end of rows may be omitted,
-
-\item
- ``\Xy-decorations'' (here |\ar[ul]|) in entries allow drawing of
- arrows and such relative to the entries without changing the overall
- layout, and
-
-\item
- ``\Xy-modifiers'' (here |*+[F]|) first in entries allow changing the
- format and shape in many ways.
-
-\end{itemize}
-
-
-
-\subsection{Arrows}
-??=[basics.arrows]
-%
- An ``??w![arrow]'' in an \Xy-pic diagram is a generic term for the
- drawn decorations between the entries of the basic matrix structure.
- In \Xy-pic all arrows must be specified along with the entry in which
- they start; this is called their \emph{??w![base entry]}. Each
- particular arrow command then refers explicitly to its
- \emph{??w![target entry]}. This is obtained using the ??c![\ar]
- command which accepts many options of which we will describe a few
- here and some more in section~??[arrows]. In its simplest form an
- arrow is entered as |\ar[|\emph{hop}|]| where \emph{??w![hop]} is
- a sequence of single letters: ??c![u] for up, ??c![d] for down,
- ??c![l] for left, and ??c![r] for right, \eg, the arrow |\ar[ur]|
- reads ``typeset an arrow from the current entry to that one up and one
- right.''
-
-\begin{exercise}
- Which entry does ??C![] refer to?
-\answertext{The target |[]| is the current entry itself.}
-\end{exercise}
-
-\vspace{\medskipamount}\noindent
-%
- The relative ??w![coordinates] specified in this way are purely
- logical, \eg, if the diagram contains very wide entries then
- ``diagonal'' arrows will be nearly horizontal. The constructed arrows
- are aligned along the line between the centers of the base and target
- entries; they will not automatically disappear under entries that
- they cross (we discuss how this is achieved in
- section~??[arrows.pass]).
-
- The ??w![arrow style] kan be changed by writing the command as
- |\ar@|\emph{style}|[|\emph{hop}|]|. This will be described in
- more detail in section~??[arrows.styles]; here we just list the most
- common ??c![@]\emph{style}s (obvious variations also work):
-%
-\begin{displaymath}
-\begin{code}
- \DEF\st#1{\hbox{\lower1ex\rlap{\kern1pc %
- \xy*{}+/r2pt/\ar@{#1},<1pc,-1.8pc>*{}\endxy}|@{#1}|}}
- \st{=>}\quad\st{.>}\quad\st{:>}\quad\st{~>}\quad\st{-->}\quad\st{-}\quad\st{}
-\end{code}
-\begin{IMAGE}
-\docode
-\end{IMAGE}
-\end{displaymath}
-
-\begin{exercise}
-%
- Typeset
-%
-\begin{displaymath}
-\begin{code}
-\xymatrix{
- {\bullet} \ar@{--}[d]\ar@{=}[dr]\ar@{-}[r]
- & {\bullet} \ar@{.}[d] \\
- {\bullet} & {\bullet} \ar[l] }
-\end{code}
-\docode
-\end{displaymath}
-%
-\answercode
-\answertext{The author did }
-\answerdisplaycode
-\answertext{\noindent Notice how
- $\bullet$ has been enclosed in |{}| since it is an ``expandable''
- entity, \ie, a defined macro: this is recommended.}
-\end{exercise}
-
-
-\subsection{Labels}
-??=[basics.labels]
- You can put ??w![label]s on arrows. Labels are conceptualized as
- sub- and superscripts on arrows such that they are placed in the
- usual positions (as ``limits''), \ie, ??c![^] reads ``above'' and
- ??c![_] ``below'' on an arrow pointing right. Notice that the
- positions depend \emph{only} on the direction of the arrow, the
- absolute notions of ``up,'' ``down,'' etc. are not important. For
- example,
-%
-\begin{code}
-$\xymatrix@1{
- X\ar[r]^a_b & Y & Z\ar[l]^A_B }$
-\end{code}
-\displaycode\noindent
-%
- will set \begin{IMAGE}\docode\end{IMAGE} (the ??c![@1] is a
- special code that can be
- used for ``one-line'' diagrams to improve the placement on the line;
- more such spacing codes are described in section~??[entries.resizing]).
-
- It is possible to use labels that are not single letters, digits, or
- control sequences: if a simple math formula in the default style
- (script style) is desired then simply enclose in |{|\dots|}|. In
- practice anything can be used as a label as described in
- section~??[arrows.objects].
-
- Each label is placed perpendicular to the arrow at the point halfway
- between the centers of the base and target objects. This is usually
- the most æsthethic, however, in diagrams where the sizes of the
- entries vary much it is sometimes nicer to place the label at the
- center of the actual arrow??w[label centered on arrow]. This
- behaviour is requested by inserting a ??c![-] (minus) right after the
- |^| or~|_|:
-%
-\begin{code}
-$\xymatrix@1{
- A\times B\times C\times D \ar[r]^-{+} &B
-}$
-\end{code}
-%
-\begin{IMAGE}
-\docode
-\end{IMAGE} was typeset by
-%
-\displaycode\noindent
-%
- (it becomes
-%
-\begin{code}
-$\xymatrix@1{
- A\times B\times C\times D \ar[r]^{+} &B
-}$
-\end{code}
-%
-\begin{IMAGE}
-\docode
-\end{IMAGE}without the~|-|). In fact |-| is in just one of the may
- possible placings of labels described in section~??[arrows.places].
-
-\begin{exercise}
-%
- Typeset the second axiom of category theory as
-%
-\begin{displaymath}
-\begin{code}
-\xymatrix{
- A \ar[r]^f \ar[dr]_{f;g}
- & B \ar[d]^g \ar[dr]^{g;h} \\
- & C \ar[r]_h & D }
-\end{code}
-\docode
-\end{displaymath}
-%
-\answercode
-\answertext{The author used }
-\answerdisplaycode
-\end{exercise}
-
-
-\subsection{Breaks}
-??=[basics.breaks]
- It is also possible to ``??w![break]'' an arrow with a label using the
- ??c![|] character:
-%
-\begin{code}
-$\xymatrix@1{A\ar[r]|f&B}$
-\end{code}
-%
- \thecode\ will set
-\begin{IMAGE}
-\docode
-\end{IMAGE}.
-
- If you just want an empty break you should use the special
- ??c![\hole] break:
-%
-\begin{code}
-$\xymatrix@1{ A\ar[r]|\hole & B }$
-\end{code}
-%
- the arrow \begin{IMAGE}\docode\end{IMAGE} was typeset by
- including \thecode\ in the text.
-
- A different use of breaks is to place a label somewhere in a diagram
- outside the normal matrix mesh??w[entry outside matrix]: this is
- accomplished by ``breaking'' an ??w![invisible arrow] obtained using
- the ??c![@{}] ??w![arrow style]: the square
-%
-\begin{displaymath}
-\begin{code}
-\xymatrix{\ar @{} [dr] |{=}
- A \ar[d] \ar[r] & B \ar[d] \\
- B \ar[r] & C }
-\end{code}
-\docode
-\end{displaymath}
-%
- was typeset by
-%
-\displaycode\noindent
-%
- There is more on breaks in section~??[arrows.pass].
-
-\begin{exercise}
-%
- Typeset the first axiom of category theory as the display
-%
-\begin{displaymath}
-\begin{code}
-\xymatrix{
- A \ar[d]_f \ar[r]^f
- & B \ar[dl]|{i_B} \ar[d]^g \\
- B \ar[r]_g & C }
-\end{code}
-\docode
-\end{displaymath}
-%
-\answercode
-\answertext{The author entered }
-\answerdisplaycode
-\end{exercise}
-
-
-\subsection{Curving}
-??=[basics.bends]
-%
- Arrows can be made to ??w![curve], for example to avoid going through
- another entry, using the special style |@/|\emph{curving}|/|. The
- simplest styles of \emph{curving} are the following, shown applied
- to an arrow from $A$ to $B$:
-%
-\begin{displaymath}
-\begin{code}
-\DEF\a#1{*\hbox{\DEF\1{#1}\enspace\tt\codeof\1}& A \ar#1[r] & B}
-\xymatrix @R-1.4pc{
- \a{@/^/} \\
- \a{@/_/} \\
- \a{@/_1pc/} }
-\end{code}
-\begin{IMAGE}
-\docode
-\end{IMAGE}??c[@/^/]??c[@/_/]
-\end{displaymath}
-%
- As the last example shows a dimension can be inserted just after |^|
- or |_| if more or less curving is desired.
-
- In case it is easier to specify the in- and out-going directions of
- the curving then that is also possible: use
-%
-\begin{defs1}
- ??c![@(]\emph{in}|,|\emph{out}|)|
-\end{defs1}
-\noindent\unskip
-%
- where \emph{in} and \emph{out} are one of the following
- \emph{??w![direction]s}:
-%
-\begin{displaymath}
-\begin{code}
-\xy *=<2pc>[o][F]{}="c",
- "c"; (-1,-1)**{},p+/3pc/ *+{|dl|} **@{-}?>*@{>},
- "c"; ( 0,-1)**{},p+/3pc/ *+{|d|} **@{-}?>*@{>},
- "c"; ( 1,-1)**{},p+/3pc/ *+{|dr|} **@{-}?>*@{>},
- "c"; ( 1, 0)**{},p+/3pc/ *+{|r|} **@{-}?>*@{>},
- "c"; ( 1, 1)**{},p+/3pc/ *+{|ur|} **@{-}?>*@{>},
- "c"; ( 0, 1)**{},p+/3pc/ *+{|u|} **@{-}?>*@{>},
- "c"; (-1, 1)**{},p+/3pc/ *+{|ul|} **@{-}?>*@{>},
- "c"; (-1, 0)**{},p+/3pc/ *+{|l|} **@{-}?>*@{>}
-\endxy
-\end{code}
-\docode
-\end{displaymath}
-\noindent\unskip
-%
- In this case the curving is computed such that the curve begins at the
- base entry in the \emph{in} direction and ends at the target entry
- from the \emph{out} direction (this means that $|@(|d_1|,|d_2|)|$
- and $|@(|d_2|,|d_1|)|$ are mirror images. See
- section~??[arrows.changing] for more directions).
-
-\begin{exercise}
-%
- Typeset
-%
-\begin{displaymath}
-\begin{code}
-\xymatrix{
- x \ar@(ul,dl)[]|{id} \ar@/^/[rr]|f
- && f(x) \ar@/^/[ll]|{f^{-1}} }
-\end{code}
-\docode
-\end{displaymath}
-%
-\answercode
-\answertext{The author did }
-\answerdisplaycode
-\answertext{\noindent Note that both arrows are
- curved ``above'' relative to their direction.}
-\end{exercise}
-
-
-\subsection{Speeding up typesetting}
-??=[basics.speeding]
-%
- One thing that you will notice is that \Xy-pic is sometimes slow in
- typesetting diagrams (this is to be expected considering the number
- of drawing operations performed as reflected by the number last in
- each |xymatrix| message). If you follow the rule of starting all
- entries with a (nonexpandable) character or |{| then you can insert
- the declaration
-%
-\begin{defs1}
- ??c![\CompileMatrices]
-\end{defs1}
-\noindent\unskip
-%
- in the preamble of your document: this will create temporary
- files\footnote{The temporary files are named the same as your
- document but |.tex| is replaced by |-|$n$|.xyc| where $n$ is a
- sequence number.} containing \emph{compiled} versions of each
- matrix that can be loaded very quickly; they are automatically
- recreated when a matrix is changed.
-
- If this causes some diagrams to not work, then such compilation can be
- explicitly switched off by using ??c![\xymatrixnocompile] in place of
- |\xymatrix|. Compilation can be switched off completely with
- ??c![\NoCompileMatrices] (which respects \TeX\ grouping as does
- ??c![\CompileMatrices], by the way).
-
- And if you are still not satisfied with the speed then you can add
- the following:
-%
-\begin{defs1}
- ??c![\OnlyOutlines]
-\end{defs1}
-\noindent\unskip
-%
- which will omit all compiled pictures; the additional command
- ??c![\ShowOutlines] will add a dotted rectangle outlining the size of
- the picture.
-
-
-
-\section{More Arrows and Labels}
-??=[arrows]
-%
- In this section we explain a number of variations of the
- ??w![arrow]??c[\ar] commands that are useful in ??w![commutative
- diagrams].
-
-
-\subsection{Explicit label positioning}
-??=[arrows.places]
-%
- The ??w![label]??w[explicit positioning] commands explained in
- section~??[basics.labels] place the label text near the point along
- the arrow halfway between the centers of the base and target entries.
- This, however, may be changed by inserting a \emph{place} between
- the ??c![^], ??c![_], or ??c![|], and the actual label (in fact |-|
- is a \emph{place}). In general you may insert the following:
-%
-\begin{itemize}
-
-\item
- ??c![<] will place the label at the point where the actual arrow
- begins, \ie, ``appears from under'' the base, so
-%
-\begin{code}
-$\xymatrix@1{A\ar[r]^<{+}&B}$
-\end{code}
-%
- \thecode\ will typeset \begin{IMAGE}\docode\end{IMAGE}.
-
-\item
- Similarly, ??c![>] will place the label at the point where the actual
- arrow ends, \ie, ``disappears below'' the target, so
-%
-\begin{code}
-$\xymatrix@1{A\ar[r]^>{+}&B}$
-\end{code}
-%
- \thecode\ will typeset \begin{IMAGE}\docode\end{IMAGE}.
-
-\item
- ??c![<<] and ??c![>>] will place the following label at a point just
- a bit\footnote{``A bit'' is in fact a \TeX\ ??c![\jot] which is usually
- 3pt.}\ further from the beginning and end of the arrow, so
-%
-\begin{code}
-$\xymatrix@1{A\ar[r]^>>{+}&B}$
-\end{code}
-%
- \thecode\ will typeset \begin{IMAGE}\docode\end{IMAGE}.
- Using more |<|s or |>|s will move the label further in.
-
-\item
- A factor in ??c![()]s: $|(|a|)|$ indicates that the label should be
- ``tied'' to the point $a$ of the way from the center of the base entry
- (called ??c![(0)]) to the center of the target (called ??c![(1)])
- instead of in the middle, so
-%
-\begin{code}
-$\xymatrix@1{A\ar[r]^(.3){+}&B}$
-\end{code}
-%
- \thecode\ will typeset \begin{IMAGE}\docode\end{IMAGE}.
-
-\item
- A factor can be given \emph{after} some |<| or |>|s, in which case
- the place is computed as if the base was specified by the
- |<|s and target specified by the |>|s. Hence
-%
-\begin{code}
-$\xymatrix@1{A\ar[r]^<(0){+}&B}$
-\end{code}
-%
- \thecode\ will typeset \begin{IMAGE}\docode\end{IMAGE}.
-
-\item
- Finally, there is a simple way to denote the place on an arrow where
- it ??w![intersects]??w[crossing arrows] with a straight line between
- two points: the place |!{|$t_1$|;|$t_2$|}|??c[!{;}] places the label
- relative to the point on the arrow where the line from the target
- $t_1$ to the target $t_2$ crosses it. \BUG: Only works for straight
- arrows at present.
-
-\end{itemize}
-%
- As usual more possibilities can be found in the reference
- manual~\cite[fig. 2]{RM95:Xy-picRM}.
-
-\begin{exercise}??=[x.intercept]
-%
- Typeset
-%
-\begin{displaymath}
-\begin{code}
-\xymatrix{
- 1 \ar[rr] ^-{1000000x}
- \ar[dr] _(.2){2000x} |!{[d];[rr]}\hole
- && 1000000 \\
- 1000 \ar[r] _{2x}
- \ar[urr] _>>>>{x^2}
- & 2000 }
-\end{code}
-\docode
-\end{displaymath}
-%
-\answercode
-\answertext{The author used the display }
-\answerdisplaycode
-\answertext{\noindent In particular
- notice how the break was specified to happen exactly where the two
- arrows cross. For an easier but not so general method see
- exercise~??[x.cube] last in section~??[arrows.pass].}
-\end{exercise}
-
-
-\subsection{Labeling with any object}
-??=[arrows.objects]
-%
- \Xy-pic supports a general format for entering any \TeX\
- ??w![text]??w[text label] as labels (as well as entries to be
- explained later). The character |*| is reserved for this: in its
- simplest form |*{|\emph{math}|}| will typeset the \emph{math}
- material as an object. This is like |{|\emph{math}|}| except that
- the default style is ignored and there is no added blank margin.
-
- However, in general??w[label with any object] the following form of
- ??c![*]\emph{object}??w[object] is available:
-%
-\begin{defs1}
-|*|\emph{modifiers}|{|\emph{text}|}|
-\end{defs1}
-\noindent\unskip
-%
- where \emph{modifiers}??w[object modifier] can be used to change
- the ??w![shape] and ??w![size] of the constructed object. The
- following are the most common, the full list of possibilities can be
- found in the reference manual~\cite[fig. 3]{RM95:Xy-picRM}:
-%
-\begin{defs}
- ??c![+] & ??w![grow] \cr
- |+<|\emph{dimen}|>| & grow by \emph{dimen} \cr
- ??c![+=] & grow to enclosing ??w![square] \cr
- ??c![-] & ??w![shrink] \cr
- |-<|\emph{dimen}|>| & shrink by \emph{dimen} \cr
- ??c![-=] & shrink to contained square \cr
- ??c![!] & do not center \cr
- ??C![o] & round??w[round shape] \cr
- ??C![l] ??C![r] ??C![u] ??C![d] & adjust left, right,\dots??w[adjust] \cr
- ??C![F] ??C![F=] &
-\begin{IMAGE}
-\xy*[F-]\hbox{\strut~frame~}\endxy
-\end{IMAGE}??w[frame]
-%
-\begin{IMAGE}
-\xy*[F=]\hbox{\strut~double~}\endxy
-\end{IMAGE}??w[double frame]\cr
- ??C![F.] ??C![F--]
- &
-\begin{IMAGE}
-\xy*[F.]\hbox{\strut~dotted~}\endxy
-\end{IMAGE}??w[dotted frame]
-%
-\begin{IMAGE}
-\xy*[F--]\hbox{\strut~dashed~}\endxy
-\end{IMAGE}??w[dashed frame]\cr
- ??C![F-,] ??C![F-:<3pt>]
- &
-\begin{IMAGE}
-\xy*[F-,]\hbox{\strut~shaded~}\endxy
-\end{IMAGE}??w[shaded frame]
-\begin{IMAGE}
-\xy*[F-:<3pt>]\hbox{\strut~rounded~}\endxy
-\end{IMAGE}??w[rounded frame]
-\end{defs}
-\noindent\unskip
-%
- Since objects specified this way start with no margin, a single |+|
- is usually included to get the ??w![default spacing].
-
-\begin{exercise}
-%
-\begin{code}
-\xymatrix@1{ A \ar[r]^*+[o][F-]{x} & B }
-\end{code}
-%
- Typeset $\smash{\docode}$~.
-%
-\answercode
-\answertext{The author typed }
-\answerdisplaycode
-\end{exercise}
-\vspace{3ex}
-
- There can only be one \emph{boxing}. This can be any box
- generation command. The following are the most useful
- \emph{boxing}|{|\emph{text}|}| combinations:
-%
-%\filbreak
-\begin{defs}
- ??c![@]\emph{variant}|{|\emph{tip}|}| & ??w![tip] (or ??w![shaft]) object \cr
- ??c![\txt]|{|\dots|}| & ordinary \emph{??w![text]} \cr
- ??c![\composite]|{|\dots??c![*]\dots|}| & ??w![combined objects] \cr
- ??c![\frm]|{}| & ??w![repeat last object]
-\end{defs}
-\noindent\unskip
-%
- (the possibilities for \emph{variant} and \emph{tip} are given in the
- following section). Finally, ??c![\hbox]|{|\dots|}|\footnote{The
- plain \TeX\ command |\hbox| corresponds to |\mbox| in \LaTeX\
- and |\text| in the \AMS\ variants.} is a quick way to ensure
- text-mode interpretation of a single object. However, ??c![\txt]
- allows the use of ??c![\\] in \emph{text} to create a ??w![line
- break], and the special form |\txt<6pc>{|\dots|}| will constrain the
- text to a ??w![centered] 6pc wide column. By the way, |\txt| can be
- used outside of \Xy-pic constructions.
-
- Finally, several objects can be combined using the last form; the
- |*|s serve to separate the composed object.
-
-\begin{exercise}
-%
-\begin{code}
-\xymatrix@1{
- A \ar @{/*\composite{{+}*{\times}}/} [rr]
- ^*+\txt{High\\label}
- && B}
-\end{code}
-%
- Typeset $\docode$~.
-%
-\answercode
-\answertext{The author did }
-\answerdisplaycode
-\end{exercise}
-
-\vskip-\baselineskip
-\subsection{More arrow styles}
-??=[arrows.styles]
-%
- The ??w![arrow style]s described in section~??[basics.arrows] are all
- examples of the general \emph{??w![arrow style]} constructions
-%
-\begin{defs1}
-??c![@]\emph{??w![variant]}|{|\emph{??w![tail]} \emph{??w![shaft]}
- \emph{??w![head]}|}|\cr
-??c![@]\emph{variant}|{|\emph{head}|}|
-\end{defs1}
-\noindent\unskip
-%
- that in describes arrows with the indicated \emph{tail},
- \emph{shaft}, and \emph{head} (on the first form the tail and
- head can be omitted; the second style defaults to having no tail and
- a standard shaft).??w[arrow head]??w[arrow shaft]??w[arrow tail]
-
- The following possibilities exist for \emph{head} and \emph{tail}
- which we will denote \emph{tips} (here shown as heads):
-%
-\begin{unformatteddefs}
-\begin{code}
-{\DEF\DT#1#{\DTx{#1}}
- \DEF\DTx#1#2{\Dx{#1}{#2}&\xy-(4,0)*{};(4,2)*+{}**{}?>*@#1{#2} **@#1{.}\endxy}
- \DEF\Dx#1#2{\hbox{\DEF\1{#2}\enspace{\tt\codeof\1}\index code{#2}}}
- \DEF\Darray#1{{\let\\=\cr \tabskip=2em plus 1fil minus.8em %
- \halign to\hsize{&\hfil$##$\tabskip=1em&$##$\hfil\tabskip=2em plus 1fil \cr
- #1\crcr}}}
- %
- \Darray{%
- \DT{<} &\DT{>} &\DT{x} \\
- \DT{<<} &\DT{>>} &\DT{+} \\
- \DT{|<} &\DT{>|} &\DT{|} \\
- \DT{|<<} &\DT{>>|} &\DT{||} \\
- \DT{(} &\DT{)} &\DT{o} \\
- \DT{/} &\DT{//}}}
-\end{code}
-\begin{IMAGE}
-\docode
-\end{IMAGE}
-\end{unformatteddefs}
-%
- and the \emph{shaft} should be one of the following:??w[dotted
- arrow]??w[dashed arrow]??w[squiggly arrow]
-%
-\begin{unformatteddefs}
-\begin{code}
-{\DEF\DC#1#{\DCx{#1}}
- \DEF\DCx#1#2{ \Dx{#1}{#2} & \xy *+{} ; (12,4)*+{} **@#1{#2}\endxy}
- \DEF\Dx#1#2{\hbox{\DEF\1{#2}\enspace\tt\codeof\1\index code{#2}}}
- \DEF\Darray#1{{\let\\=\cr \tabskip=2em plus 1fil %
- \halign to\hsize{&\hfil$##$\tabskip=1em&$##$\hfil\tabskip=2em plus 1fil \\
- #1\crcr}}}
- \Darray{%
- \DC{-} &\DC{--} \\
- \DC{~} &\DC{~~} \\
- \DC{.} }}%
-\end{code}
-\begin{IMAGE}
-\docode
-\end{IMAGE}
-\end{unformatteddefs}
-\goodbreak
-%
- The \emph{variant} should be empty or one of the following:
-%
-\begin{defs}
-??c![^] & ``above'' variant??w[half arrow] \cr
-??c![_] & ``below'' variant \cr
-|2| & ``double'' variant??w[double arrow] \cr
-|3| & ``triple'' variant??w[triple arrow]
-\end{defs}
-\noindent\unskip
-%
- Here are some standard arrows in this notation, all from $A$ to $B$
- as usual:
-%
-\begin{displaymath}
-\begin{code}
-\DEF\a#1{*\hbox{\DEF\next{#1}\tt\codeof\next}& A \ar#1[rr] && B}
-\xymatrix @R-1.8pc @C-1pc {
- \a{@{<->}} \\
- \a{@^{<->}} \\
- \a{@_{<->}} \\
- \a{@2{<->}} \\
- \a{@3{<->}} }
-\end{code}
-\begin{IMAGE}
-\docode
-\end{IMAGE}
-\end{displaymath}
-%
- As a special convenience |=| and |:| are provided as abbreviations
- for |-| and |.| with variant forced to~|2|.
-
- As it can be seen, the variant will affect the \emph{entire} arrow.
- Sometimes this is not what is wanted. In that case a \emph{local
- variant} can be used by entering any of the \emph{tail},
- \emph{shaft}, and \emph{head}, on the following form:
-%
-\begin{defs1}
-\emph{variant}|{|\emph{tip}|}|\cr
-\emph{variant}|{|\emph{shaft}|}|
-\end{defs1}
-\noindent\unskip
-%
- Here are some arrows where this is required:
-%
-\begin{displaymath}
-\begin{code}
-\DEF\a#1{*\hbox{\DEF\next{#1}\tt\codeof\next}& A \ar#1[r] & B}
-\xymatrix @R-1.8pc{
-\a{@{^{(}->}} \\
-\a{@{|-_{>}}} }
-\end{code}
-\begin{IMAGE}
-\docode
-\end{IMAGE}
-\end{displaymath}
-%
- Notice that there is no distinction between shafts and tips using
- this form, thus it is necessary to include all three of
- \emph{tail}, \emph{shaft}, and \emph{head}, when using it. The
- advantage is that it is possible then to ``fill with a tip.''??w[tip in
- shaft]??w[shaft as tip] Furthermore, the following additional
- possibilities are available when using this notation:
-%
-\begin{unformatteddefs}
-\begin{code}
-{\DEF\DT#1#{\DTx{#1}}
- \DEF\DTx#1#2{\Dx{#1}{#2}&\xy-(4,0)*{};(4,2)*+{}**{}?>*@#1{#2} **@#1{.}\endxy}
- \DEF\Dx#1#2{\hbox{\DEF\1{#1{#2}}\enspace{\tt\codeof\1}\index code{#1{#2}}}}
- \DEF\Darray#1{{\let\\=\cr \tabskip=0pt plus 1fil %
- \halign to\hsize{&\hfil$##$\tabskip=1em&$##$\hfil\tabskip=1em plus 1fil \cr
- #1\crcr}\bigskip}}
- \Darray{%
- \DT{|-} &\DT^{|-} &\DT_{|-} \\
- &&\DT {|=} &\DT3{|-} \\
- \DT{*} &\DT^{`} &\DT_{`} \\
- &&\DT^{'} &\DT_{'} }}%
-\end{code}
-\begin{IMAGE}
-\docode
-\end{IMAGE}
-\end{unformatteddefs}
-\noindent\unskip
-%
- The even more general form |*|\emph{object} can be used, where
- \emph{object} refers to any of the constructions described in
- section~??[arrows.objects].
-
-\begin{exercise}
-%
-\begin{code}
-\xymatrix{
- A \ar @/^/ @{^{<}-_{>}} [r]
- \ar @/_/ @{{*}{x}{*}} [r] & B }
-\end{code}
-%
- Typeset $\docode$~.
-%
-\answercode
-\answertext{The author entered }
-\answerdisplaycode
-\end{exercise}
-
-
-\subsection{Sliding arrows sideways}
-??=[arrows.sliding]
-%
- It is often desirable to have several ??w![parallel] arrows between
- two objects. This can be done by ??w![sliding] either or both arrows
- ??w![sideways] a distance given as a \TeX\ dimension enclosed in
- ??c![@<>]s: it specifies how far ``sideways'' the arrow should be
- moved, \eg,
-%
-\begin{code}
-\xymatrix{
- A \ar@<1ex>[dr]^a_{.} \\
- & B \ar@<1ex>[ul]^b \ar@<1ex>[r]^c
- & C \ar@<1ex>[l]^d_{.} }
-\end{code}
-\displaycode
-%
-\noindent will typeset
-%
-\begin{displaymath}
-\docode
-\end{displaymath}
-%
- A positive distance will slide the arrow in the ``|^|-direction,'' \eg,
- the two arrows above are slid in the direction of the labels~$a$,
- $b$, $c$, and $d$, respectively; a negative distance in the
- ``|_|-direction.'' The distance |<@1ex>| is often appropriate since it
- corresponds roughly to the height of letters like ``x,'' in the type size
- being used.
-
-\begin{exercise}
-%
-\begin{code}
-\xymatrix@1{
- A \ar@/^/[r] \ar@/^/@<-1ex>[r] & B }
-\end{code}
-%
- Typeset $\docode$~.
-%
-\answercode
-\answertext{The author typed }
-\answerdisplaycode
-\end{exercise}
-
-
-\subsection{More targets}
-??=[arrows.targets]
-%
- The ??w![target] address can be given in a large number of formats
- called \emph{??w![position]s}. The full range of possibilities is
- described in the reference manual~\cite[fig. 1]{RM95:Xy-picRM}; here
- is a number of useful ones in addition to the \emph{hop} format
- described in section~??[basics.arrows]:
-%
-\begin{itemize}
-
-\item
- $|[|r|,|c|]|$??C[], where $r,c$ are integers, denotes the
- \emph{??w![relative entry]} found $r$~??w![rows] below and
- $c$~??w![columns] to the right of the current entry (the ??w![current
- entry] itself is thus |[0,0]|). This always corresponds to a
- |[|\emph{??w![hop]}|]|, \eg, |[1,2]| is the same as |[drr]| and
- |[-2,0]| is the same as |[uu]|.
-
-\item
- $|"|r|,|c|"|$, where $r,c$ are positive integers, denotes the
- \emph{??w![absolute entry]} found in the $r$th row and $c$th column
- of the diagram. The top left entry is |"1,1"|.
-
-\item
- $t'??c![;]t$~, where $t'$ is any target, changes the ??w![base entry]
- of the present arrow to $t'$ and then sets the target to $t$ relative
- to the original base entry. For example,
-%
-\begin{code}
-\xymatrix{ A \\
- B & C \ar@<1ex>[ul]
- \ar@<1ex>[ul];[] }
-\end{code}
-\displaycode
-%
-\noindent\unskip typesets
-%
-\begin{displaymath}
-\docode
-\end{displaymath}
-%
- \ie, the second |\ar[ul]| arrow starts at the |[ul]| entry and ends
- in the current entry.
-
-\end{itemize}
-%
- See section~??[entries.naming] for how to use a label as a target.
-
-
-\subsection{Changing the target}
-??=[arrows.changing]
-%
- It is possible to ??w![overwrite] a ??w![target] with another by
- appending something of the form ??c![*]\emph{object} to it. This
- has the effect of typesetting the \emph{object} at the current
- position, thus effectively on top of the target, and then use what
- was typeset as the target.
-
- A target may also have its ??w![position] changed??w[changing
- position]??w[adjusting position]??w[moving target] by one of the
- following constructions:
-%
-\begin{itemize}
-
-\item
- ??c![+]\emph{vector} or ??c![-]\emph{vector} which changes the
- target to be a zero-sized one at the position obtained by adding or
- subtracting the \emph{vector} to its center, or
-
-\item
- ??c![!]\emph{vector} which moves the center of the target by the
- \emph{vector};
-
-\end{itemize}
-%
- where a \emph{??w![vector]} should have the form
-%
-\begin{itemize}
-
-\item
- $|<|D_x|,|D_y|>|$ , where $D_x,D_y$ are \TeX\ dimensions, is the
- vector with those coordinates??w[vector coordinates],
-
-
-\item
- the following ``corner offsets'' of a target are vectors as shown:
-%
-\begin{displaymath}
-\begin{code}
-\DEF\corner#1{\POS"box"+0;"box"+#1 **@{-} ?>*@{>} +/1pc/ *\hbox{\tt#1}}
-%
-\xy 0.(-11,-6).(11,6)!C="box"*\frm{.},"box";
- "box"+L**@{.}, "box"+R**@{.}, "box"+D**@{.}, "box"+U**@{.}
-%
- \corner{L} \corner{R} \corner{D} \corner{U}
- \corner{DL}\corner{DR}\corner{UL}\corner{UR}
-\endxy
-\end{code}
-\begin{IMAGE}
-\docode
-\end{IMAGE}
-\end{displaymath}
-%
- (they must be specified in upper case)??w[vector to corner], and
-
-\item
- ??c![/]$d$ \emph{dimen}|/| is the \emph{vector} going
- \emph{dimen} in the particular ??w![direction]??w[vector in
- direction] $d$ which can be either the eight simple ones in
- section~??[basics.bends], empty to denote that the
- \emph{??w![current direction]} (the last direction of an arrow)
- should be used, or one of the following:
-%
-\begin{defs}
- |va(|$\alpha$|)|??c[va()] & ??w![absolute angle] \cr
- $d$|:a(|$\alpha$|)|??c[:a()] & ??w![relative angle] in ??w![degrees] \cr
- $d$|:(|$x$,$y$|)|??c[:()] & ??w![relative vector] \cr
- $d$??c![^] / $d$??c![_] & short for |:a(90)| / |:a(-90)|
-\end{defs}
-\noindent\unskip
-%
- where the $d$ in the last four may be empty to denote the ``current
- direction.''
-
-\item
- ??c![0] is the zero vector.
-
-\end{itemize}
-%
- Many, many more possibilities are described in the reference
- manual~\cite{RM95:Xy-picRM}.
-
-\begin{exercise}
- What is the difference between a target $t$ and the target $t$|+0|?
-\answertext{The size: $t$|+0| always has zero size.}
-\end{exercise}
-
-
-\subsection{Arrows passing under}
-??=[arrows.pass]
-%
- Arrows can pass under??w[arrow passing under] (or via) any other
- entry: Just insert ??c![']$t$, \ie, a quote (apostrophe) character
- followed by a target, for each entry that should be visited except
- the last, ``ordinary \& final'' entry:
-%
-\begin{code}
-\xymatrix{
- {\circ}
- \ar@{|-->} '[dr] ^a
- '[rr]+D*{\bullet} ^b
- [drrr] ^c
- & {\circ} & {\circ} & {\circ} \\
- {\circ} & {\circ} & {\circ} & {\circ} }
-\end{code}
-\displaycode
-\noindent
- typesets
-%
-\begin{displaymath}
-\docode
-\end{displaymath}
-%
- As you see, labels are set separately on each ??w![segment].
-
-\begin{exercise}??=[x.cube]
-%
- Typeset the ``lambda ??w![cube]''??w[crossing arrows]
-%
-\begin{displaymath}
-\begin{code}
-\xymatrix@!0{
- & \lambda\omega \ar@{-}[rr]\ar@{-}'[d][dd]
- & & \lambda C \ar@{-}[dd]
-\\
- \lambda2 \ar@{-}[ur]\ar@{-}[rr]\ar@{-}[dd]
- & & \lambda P2 \ar@{-}[ur]\ar@{-}[dd]
-\\
- & \lambda\underline\omega \ar@{-}'[r][rr]
- & & \lambda P\underline\omega
-\\
- \lambda{\to} \ar@{-}[rr]\ar@{-}[ur]
- & & \lambda P \ar@{-}[ur]
-}
-\end{code}
-\docode
-\end{displaymath}
-%
-\noindent\unskip
-%
- \emph{Hint}: ``going under'' an empty entry leaves a small gap at
- that location.??w[crossing arrows] The compactness is achieved using
- a trick described in section~??[entries.resizing].
-%
-\answercode
-\answertext{The author constructed }
-\answerdisplaycode
-\answertext{A special thing is added: |@!| forces rows and columns to be
- equally spaced as discussed in section~??[entries.resizing]; |@!0|
- furthermore makes the spacing ignore the entry sizes, giving a
- completely fixed grid. The gaps could also be made with the
- |!|\dots\ crossing notation of exercise~??[x.intercept] last in
- section~??[arrows.places] but the above is shorter.}
-\end{exercise}
-
-
-\subsection{More bending arrows}
-??=[arrows.bend]
-%
- Finally, arrows can ??w![bend] around entries: just insert
- ??c![`]$d\,t$, \ie, a backquote and a ??w![direction] $d$ followed by
- a target $t$, for each ``??w![turn]'' that starts out in the
- $d$-direction and ends in a ??w![quarter turn] towards the
- target~$t$. This is different from the curving??w[curve] described
- earlier in that all turns consist of a straight part ending in a turn
- which is a multiple of \slashedfrac18 ??w![circle segments], and each
- segment allows separate ??w![label]s.
-
- The possible directions are those of section~??[basics.bends] and
- ??[arrows.changing], and the possible targets include all those
- discussed above. Actually the direction is only required for the
- first in a series of turns since the final direction of one turn is
- the obvious choice for the following turn. Furthermore, turns can be
- changed from the default by adding either ??c![^]$d$ for
- anticlockwise turn to $d$ or ??c![_]$d$ for clockwise turn to $d$,
- where $d$ is the ``exit direction'' of the turn.
-
- Finally, the turns will have ??w![radius] 10pt by default, but this
- can be changed to any dimension $R$ from a particular turn and
- onwards by inserting ??c![/]$R$ immediately after the |``| of the
- turn??w[changing turn radius]. Here is an example involving all of
- these features:
-%
-\begin{code}
-\xymatrix{
- {\circ} \ar `r[d] ^a
- `[rr] ^b
- `/4pt[rr] ^c
- `[rrr] ^d
- `_dl[drrr]^e
- [drrr]^f
- & {\circ} & {\circ} & {\circ} \\
- {\circ} & {\circ} & {\circ} & {\circ} }
-\end{code}
-\displaycode
-\noindent
-%
- typesets
-%
-%
-\begin{displaymath}
-\docode
-\end{displaymath}
-%
- The example illustrates the following points:
-%
-\begin{itemize}
-
-\item
- If the segment can not be made as short as required then it will
- point ``past'' the target. This is useful for ``??w![going around]''
- entries.
-
-\item
- There is \emph{one |`| per turn} thus each target appears as many
- times as there are turns towards it, except the last target that
- appears one more time namely both with |`| for each turn towards it
- \emph{and} once as an ``ordinary'' target to set the final stretch.
-
-\item
- The sizes of the intermediate targets are ignored.
-
-\end{itemize}
-
-\begin{exercise}
-%
- Typeset
-\begin{IMAGE}$%
-%
-\begin{code}
-\xymatrix@1{
- A \ar@<-2pt> `d[r] `[r] [r]
- \ar@<+2pt> `d[r] `[r] [r] & B }
-\end{code}
-%
- \docode$
-\end{IMAGE}~.
-%
-\answercode
-\answertext{The author typed }
-\answerdisplaycode
-\end{exercise}
-
-
-\subsection{Defining new arrow types}
-??=[arrows.defining]
-%
- Last in this treatment of arrows we will explain how ??w![new arrows]
- can be defined??w[defining arrows]. The crucial fact is that the
- characters used for \emph{??w![tip]s} and \emph{??w![shaft]s} are
- restricted to the following:
-%
-\begin{defs}
- |><||ox+/()[]|\verb*+ + &\quad \emph{tip} characters??w[tip characters]\cr
- |-.~:=| &\quad \emph{shaft} characters??w[shaft characters]
-\end{defs}
-\noindent\unskip
-%
- When an arrow is interpreted by \Xy-pic it is first split into the
- three components and then each component is looked up in a library of
- so-called ``??w![directionals].'' It is possible to add new such
- directionals using the command
-%
-\begin{defs1}
- ??c![\newdir]|{| \emph{directional} |}{| \emph{composite} |}|
-\end{defs1}
-\noindent\unskip
-%
- where \emph{directional} should be a sequence either of tip
- characters or of shaft characters, and \emph{composite} should be a
- list of objects??w[combined objects] separated with ??c![*] just like
- the argument to ??c![\composite] described in
- section~??[arrows.objects]. If arrows of a particular
- \emph{??w![variant]} (always one of the letters |^_23|) needs an
- alternate definition then another declaration can be given with the
- variant inserted between |\newdir| and the first |{|.
-
- There is one ??w![object modifier] which is very useful in this
- context, in addition to those of section~??[arrows.objects]:
-%
-\begin{defs}
- ??c![!]\emph{vector} &\quad shift object \emph{vector}
-\end{defs}
-\noindent\unskip
-%
- (where the possibilities for \emph{vector} are described in
- section~??[arrows.changing]). Combined with the direction code this
- is very powerful, for example,
-%
-\begin{code}
-\newdir{|>}{%
- !/4.5pt/@{|}*:(1,-.2)@^{>}*:(1,+.2)@_{>}}
-\end{code}
-\displaycode
-\noindent\unskip
-%
- defines a new tip that makes
-%
-\begin{code}
-\xymatrix{ A \ar @{=|>} [r] & B }
-\end{code}
-\displaycode
-\noindent\unskip
-%
- typeset
-%
-\begin{code}
-\newdir{|>}{!/4.5pt/@{|}*:(1,-.2)@^{>}*:(1,+.2)@_{>}}
-\xymatrix{ A \ar @{=|>} [r] & B }
-\end{code}
-%
- $\docode$~. Notice how the ``relative direction'' is used here to
- rotate??w[rotation] some of the composed components.
-
-\begin{exercise}??=[arrows.def.ex]
- Often tips used as ``tails'' have their ink on the wrong side of the
- point where they are placed. Fortunately space (\verb*+ +) is also a
- tip character so we can define the directional \verb*+ >+ to generate
- a ``tail-spaced'' arrow. Do this such that
-%
-\begin{code}
-\xymatrix{ A \ar @{>->} @< 2pt> [r]
- \ar @{ >->} @<-2pt> [r] & B }
-\end{code}
-\displaycode
-\noindent
-%
- typesets
-%
-\begin{displaymath}
-\begin{code}
-\newdir{ >}{{}*!/-5pt/@{>}}
-\xymatrix{ A \ar @{>->} @< 2pt> [r]
- \ar @{ >->} @<-2pt> [r] & B }
-\end{code}
-\docode
-\begin{code}
-\newdir{ >}{{}*!/-5pt/@{>}}
-\end{code}
-\end{displaymath}
-%
-\answercode
-\answertext{The author used }
-\answerdisplaycode
-\end{exercise}
-
- Finally, when \Xy-pic diagrams are used in conjunction with Knuth's
- \emph{??w![computer modern fonts]} then the declaration
-%
-\begin{defs1}
- ??c![\SelectTips{cm}{}]
-\end{defs1}
-\noindent\unskip
-%
- will change the tips to some that look similar, \eg,
-%
-\begin{code}
-$\SelectTips{cm}{}
- \xymatrix@1{A\ar@{->>|}[r]&B}$
-\end{code}
-\displaycode\noindent
-%
- typesets
-\begin{IMAGE}
-\docode
-\end{IMAGE}. The second argument (here |{}|) can be used
- to specify a point size |{10}|, |{11}|, or |{12}|, if desired (the
- default is |{10}|\footnote{Except when \Xy-pic is loaded as a
- \LaTeXe\ package where the default size is used.}); |{cm}| can be
- replaced by |{eu}| and |{xy}| to get tips in ``Euler'' and the
- default technical style, respectively. The declaration respects
- \TeX\ grouping.
-
-\begin{exercise}
-\begin{code}
-\xymatrix@1{
- A \ar[r] |-{\SelectTips{cm}{}\object@{>>}}
- |>{\SelectTips{eu}{}\object@{>}}
- & B }
-\end{code}
-%
- Typeset $\docode$~. \emph{Hint}: With the construction
- ??c![\object]\emph{object} one can typeset an \Xy-pic \emph{object}
- (anything that could follow a |*| in section~??[arrows.objects]) in
- any context.
-%
-\answercode
-\answertext{The author typed }
-\answerdisplaycode
-\end{exercise}
-
-
-
-\section{More Entries}
-??=[entries]
-%
- This section explains what can go in an entry and how the general
- form of the entries??w[entry] is changed.
-
-
-\subsection{Manual entry formatting}
-??=[entries.manual]
-%
- All the entries we have seen thus far have been simple math objects.
- However, it is possible to change the ??w![format] of an individual
- ??w![entry]??w[entry format] by using the form:
-%
-\begin{defs1}
- ??c![*]\emph{object} \emph{arrows}
-\end{defs1}
-\noindent\unskip
-%
- This allows complete control over what object is placed in the entry,
- overriding any spacing and other conventions for the entry. This was
- how the frame was obtained in the figure in
- section~??[basics.entries].
-
- A simple use of this is to insert ??w![text in entries]??w[entries
- with text]??w[labels with text] using ??c![\txt] objects just like
- labels as described above in section~??[arrows.objects]:
-%
-\begin{code}
-\xymatrix{
- *\txt{A very long and stupid\\program}
- \ar[rr]^-{\txt{weird\\arrow}}
- &&*\txt<2pc>{Com\-pli\-cated\\Code}}
-\end{code}
-\displaycode
-%
-\noindent will typeset
-%
-\begin{displaymath}
-\docode
-\end{displaymath}
-
-\begin{exercise}
-%
-\begin{code}
-\xymatrix{
- *=0{\bullet}
- \ar@/^/[dr]!U|1
- \ar@/^/[drr]!U|2
- \ar@/^/[drrr]!U|3
-\\
- &*+[F]\txt{x}
- &*+[F]\txt{x\\x}
- &*+[F]\txt{x\\x\\x}
-}
-\end{code}
-%
- Typeset
-%
-\begin{displaymath}
-\docode
-\end{displaymath}
-%
-\answercode
-\answertext{The author typed}
-\answerdisplaycode
-\end{exercise}
-
-
-\subsection{Extra entries outside the matrix}
-??=[entries.extra]
-%
- It is possible to put ??w![extra entries]??w[entries outside matrix]
- in your diagrams that are not part of any ``entry'' of the matrix
- created by |&| and |\\|. This is done with the
- \emph{??w![excursion]} command
-%
-\begin{defs1}
- |\save|~$t$~|\restore|
-\end{defs1}
-\noindent\unskip
-%
- where $t$ should be a target in one of the formats described in
- sections~??[arrows.targets]-??[arrows.changing]. $t$ can do
- any kind of typesetting desired, for example,
-%
-\begin{code}
-\xymatrix{
- A \ar@{-}[dr]
- &{}\save[]+<3cm,0cm>*\txt<8pc>{%
- This is a very big commentary
- but it does not otherwise affect
- the diagram.}
- \ar[l] \ar[d] \restore \\
- & B \ar@{-}[r] & C \ar@{-}[r] & D
-}
-\end{code}
-\displaycode
-%
-\noindent will typeset
-%
-\begin{displaymath}
-\docode
-\end{displaymath}
-%
- It illustrates how a ``down'' arrow does not necessarily have to point
- particularly straight down -- in this case because it is based in the
- displaced pseudo entry.
-
-
-\subsection{Spacing and rotation}
-??=[entries.resizing]
-%
- The |*|\emph{object} form described above can be used to space
- individual objects differently, however, it is also possible to
- change the overall ??w![spacing] of a matrix by inserting the
- following codes \emph{between} |\xymatrix| and the following |{|:
-%
-\begin{defs}
- ??c![@=]\emph{dimen} & set spacing \cr
- ??c![@R=]\emph{dimen} & set row spacing \cr
- ??c![@C=]\emph{dimen} & set column spacing \cr
- ??c![@M=]\emph{dimen} & set entry default margin \cr
- ??c![@W=]\emph{dimen} & set entry default width \cr
- ??c![@H=]\emph{dimen} & set entry default height \cr
- ??c![@L=]\emph{dimen} & set label margin
-\end{defs}
-\noindent\unskip
-%
- ??c![=] can be replaced by any of ??c![+], ??c![+=], ??c![-],
- and ??c![-=] of section~??[arrows.objects] with the same meaning,
- \ie, replace ``set'' with ``increase,'' ``increase to at most,''
- ``decrease,'' and ``decrease to at least,'' respectively. For example,
-%
-\begin{code}
-$\xymatrix@1@=0pt@M=0pt{A&B\\C&D}$
-\end{code}
-%
- \thecode\ in the text typesets \begin{IMAGE}\docode\end{IMAGE}.
-
- In case \emph{??w![uniform spacing]} is desired, several alternative
- forms exist.
-%
-\begin{defs}
- ??c![@!] & force all spaces equal \cr
- |@!0| & --- and ignore entry sizes \cr
- |@!R| & force equal row spacing \cr
- |@!C| & force equal column spacing
-\end{defs}
-\noindent\unskip
-%
- Finally a special notation allows \emph{??w![rotation]} of an
- entire matrix:
-%
-\begin{defs}
- ??c![@]\,$d$ & rotate towards $d$
-\end{defs}
-\noindent\unskip
-%
- Only the matrix grid will rotate, however, not the actual contents.
-
-\begin{exercise}
-\begin{code}
-\xymatrix@dr@C=1pc{
- a \ar[r]\ar@{->>}[d] & a' \ar@{.>>}[d] \\
- b \ar@{.>>}[r] & b' }
-\end{code}
-%
- Typeset the ``strip lemma'' $$\docode$$
-%
-\answercode
-\answertext{The author entered the display}
-\answerdisplaycode
-\end{exercise}
-
-
-\subsection{Entry style}
-??=[entries.style]
-%
- As mentioned above, the entries of a diagram are set in math mode in
- text style. You may change this by redefinining the macro
- ??c![\objectstyle]??w[entry style], and the label style by redefining
- ??c![\labelstyle]??w[label style]. We can combine this with the
- above to get ``small diagrams,'' \eg, typing
-%
-\begin{code}
-$\left(
- \def\objectstyle{\scriptstyle}
- \def\labelstyle{\scriptstyle}
- \vcenter{\xymatrix @-1.2pc @ur {
- A \ar[r]^{a} & B \ar[d]^{b} \\
- A'\ar[u]^{a'} & B'\ar[l]^{b'} }}
-\right)$
-\end{code}
-\displaycode
-%
-\begin{code}
-$\left(
- \DEF\objectstyle{\scriptstyle}
- \DEF\labelstyle{\scriptstyle}
- \vcenter{\xymatrix @-1.2pc @ur {
- A \ar[r]^{a} & B \ar[d]^{b} \\
- A'\ar[u]^{a'} & B'\ar[l]^{b'} }}
-\right)$
-\end{code}
-\noindent in a paragraph will typeset ``\begin{IMAGE}\docode\end{IMAGE}.''
-
- You can even abandon the use of math mode entirely: the command
- |\def| |\objectstyle| |{\hbox}|\ will change the format of entries to
- plain text.??w[plain text entries]
-
- Similarly, all entries are rectangular by default, but it is possible
- to change this to \emph{??w![round]??w[elliptical]??w[circular]} by
- declaring the default \emph{modifiers}??w[object
- modifier]??w[default modifier] to be applied to all entries that do
- not override them (\cf\ section~??[arrows.objects]):
-%
-\begin{code}
-\entrymodifiers={++[o][F-]}
-\SelectTips{cm}{}
-\xymatrix @-1pc {
- *\txt{start} \ar[r]
- & 0 \ar@(r,u)[]^b \ar[r]_a
- & 1 \ar[r]^b \ar@(r,d)[]_a
- & 2 \ar[r]^b
- \ar `dr_l[l] `_ur[l] _a [l]
- &*++[o][F=]{3}
- \ar `ur^l[lll]`^dr[lll]^b [lll]
- \ar `dr_l[ll] `_ur[ll] [ll] }
-\end{code}
-\displaycode
-%
-\noindent will typeset
-%
-\begin{displaymath}
-\docode
-\end{displaymath}
-%
- Notice how we obtain the double ring using the |*|\emph{object}
- form which then has to include all the desired modifiers (and how the
- use of computer modern tips is nice for diagrams as these).
-
-
-\subsection{Naming for later use as targets}
-??=[entries.naming]
-%
- If you build an entry with a long and complicated excursion then you
- might wish to be able to refer to it later. \Xy-pic provides a
- mechanism for this: there is a special ??w![target] form which we
- haven't discussed yet:
-%
-\begin{defs1}
- $t$ ??c![=]|"|\emph{name}|"|
-\end{defs1}
-\noindent\unskip
-%
- This will introduce the new target |"|\emph{name}|"| which will
- refer to the target just before the |=|. This is particularly useful
- inside excursions, of course, and can also be used after
- labels??w[labels as targets].
-
-\begin{exercise}
-%
-\begin{code}
-\xymatrix{
- A \ar[r] ^a="a" & B \ar[r] ^b="b" & C
- \ar @/^/ "a";"b" }
-\end{code}
-%
- Typeset $\docode$.
-%
-\answercode
-\answertext{The author typed }
-\answerdisplaycode
-\answertext{\noindent Notice the use
- of both explicit base and target in the arrow between the labels.}
-\end{exercise}
-
-
-\subsection{Grouping objects}
-??=[entries.grouping]
-%
- Sometimes you wish to frame or otherwise treat a rectangle of objects
- as a single object??w[grouping]. This is possible with the last two
- target position forms that we will mention:
-%
-\begin{defs}
- $t$|.|$s$ & merge $t$ with simple $s$ \cr
- |{|$t$|}| & make $t$ simple
-\end{defs}
-\noindent\unskip
-%
- The first will enlarge $t$ to also ``??w![cover]'' the ``simple'' $s$
- (simple means that it cannot have changes etc.\ attached unless
- encapsulated in |{}|s). Here is an example where we ??w![merge] and
- frame:
-%
-\begin{code}
-\xymatrix @R=1pc {
- 1,1 & 1,2 & 1,3 & 1,4 & 1,5 \\
- 2,1 & 2,2 & 2,3 & 2,4 & 2,5
- \save "1,2"."2,4"*[F.]\frm{}
- \ar"1,1" \ar"2,1" \ar"1,5" \ar"2,5"
- \restore }
-\end{code}
-\displaycode
-\noindent will typeset
-\begin{displaymath}
-\docode
-\end{displaymath}
-%
- As you can see, the center of the merged object is the same as the
- one of the target \emph{before} the ``|.|.''
-
- Finally a more advanced example where we create two merged objects
- with center in their ``real'' center, ??w![name] them and then connect
- to them. It also shows how macros can be used inside diagrams: they
- should always expand to ``commands'' like |\ar|\dots, etc.:
-%
-\begin{displaymath}
-\begin{code}
-\def\g#1{\save
- [].[dr]!C="g#1"*[F]\frm{}\restore}%
-\xymatrix{
- \g1 A\ar[r]&B\ar[d]&\g2 A'\ar[r]&B'\ar[d]\\
- C\ar[u]&D\ar[l]& C'\ar[u]&D'\ar[l]
- \ar @{.>} "g1" ;"1,4"
- \ar @{-->} "2,1";"g2" }
-\end{code}
-\docode
-\end{displaymath}
-%
- can be typeset by
-%
-\displaycode\noindent
-%
- Then we can make arrows from/to the two frames by using the two new
- targets |"g1"| and |"g2"| as shown.
-
-\begin{exercise}
-%
- Change the lambda cube of exercise~??[x.cube] such it is enclosed in
- a transparent (\ie, dotted) cube.
-%
-\answertext{The author added the \Xy-code}
-\begin{code}
-\save [].[dd].[ddrr].[rr]*[F.]\frm{}="back"
- \restore
-\end{code}
-\answercode
-\answerdisplaycode
-\answertext{in the entry with $\lambda\omega$, and}
-\begin{code}
- \save [].[dd].[ddrr].[rr]*[F.]\frm{}
- \ar@{.} +UL;"back"+UL \ar@{.} +UR;"back"+UR
- \ar@{.} +DL;"back"+DL \ar@{.} +DR;"back"+DR
- \restore
-\end{code}
-\answercode
-\answerdisplaycode
-\answertext{in the entry with $\lambda2$ to produce}
-\begin{code}
-\xymatrix @!0 {
- & \lambda\omega \ar@{-}[rr]\ar@{-}'[d][dd]
- \save [].[dd].[ddrr].[rr]*[F.]\frm{}="back"\restore
- & & \lambda C \ar@{-}[dd]
-\\
- \lambda2 \ar@{-}[ur]\ar@{-}[rr]\ar@{-}[dd]
- \save [].[ddrr]*[F.]\frm{}
- \ar@{.} +UL;"back"+UL \ar@{.} +UR;"back"+UR
- \ar@{.} +DL;"back"+DL \ar@{.} +DR;"back"+DR \restore
- & & \lambda P2 \ar@{-}[ur]\ar@{-}[dd]
-\\
- & \lambda\underline\omega \ar@{-}'[r][rr]
- & & \lambda P\underline\omega
-\\
- \lambda{\to} \ar@{-}[rr]\ar@{-}[ur]
- & & \lambda P \ar@{-}[ur] }
-\end{code}
-\answercode
-\answertext{$$\begin{IMAGE}\docode\end{IMAGE}$$}
-\end{exercise}
-
-
-
-\section{Availability and Further Information}
-??=[avail]
-%
- Below we describe how to and the conditions for obtaining \Xy-pic
- version~\xyversion, the compatibility with previous versions, and we
- conclude with a few appetisers to lure the reader into reading more
- about \Xy-pic.
-
-
-\subsection{Getting \Xy-pic}
-??=[avail.ftp]
-%
- The easiest way to retrieve??w[retrieving {\Xy}-pic] the latest version
- of \Xy-pic is through the \Xy-pic home page~\cite{Xy-picHP} on the
- ??w![World Wide Web]; it is also available by Internet ??w![ftp] from
- \url{ftp://ftp.diku.dk/diku/users/kris/TeX/} as well as
- \url{ftp://ftp.mpce.mq.edu.au/pub/maths/TeX/} in files starting with
- |xy|. Finally, \Xy-pic has been contributed to the CTAN archives
- where it is located in the directory \texttt{macros\slash generic\slash
- diagrams\slash xypic}.
-
-\paragraph*{License:}
-%
- \Xy-pic is free software in the sense that it is available under the
- following ??w![license]??w[copyright] conditions:
-%
-\begin{center}\ordinarybars
-\begin{tabular}{|l|}
- \hline
- ~\Xy-pic: Graphs and Diagrams with \TeX~\\
- \quad\copyright~1991--1997\quad Kristoffer H. Rose\\
- \quad\copyright~1994--1997\quad Ross Moore\\
- \hline
-\end{tabular}
-\end{center}
-%
-\begin{quotation}
-%
- The \Xy-pic package is ??w![free software]; you can redistribute it
- and/or modify it under the terms of the ??w![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 \emph{without any ??w![warranty]}; without even the
- implied warranty of \emph{merchantability} or \emph{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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-%
-\end{quotation}
-%
- In practice this means that you are free to use \Xy-pic for your
- documents but if you distribute any part of \Xy-pic (including
- modified versions) to someone then you are obliged to ensure that the
- full source text of \Xy-pic is available to them (the full text of
- the license in the file ??c![COPYING] explains this in somewhat more
- detail~\smiley~).
-
-
-\subsection{Backwards compatibility}
-??=[compat]
-%
- The first widely distributed version of \Xy-pic was ??w![version 2]
- (from release 1.40 to release 2.6). A special
- \emph{??w![compatibility]} mode is used automatically if the
- ??w![old style of loading] is used (using files named ??c![xypic.tex]
- and ??c![xypic.sty]). You can also mix old and new diagrams in a
- document if you load as described in section~??[basics.loading] and
- add the declaration ??c![\xyoption]|{v2}|. This provides almost full
- backwards compatibility: the following are the only known exceptions:
-%
-\begin{itemize}
-
-\item
- Automatic ``shortening'' of arrow tails by ??c![|<<] break was a bug
- and has been ``fixed'' so it does not work any more. \emph{Fix}: Put a
- |||<\hole| break before it as described in section~??[arrows.styles].
-
-\item
- The release~2.6 ??c![*] position operator is not available.
- \emph{Fix}: Use the |:| and |::| operators (described in detail in
- the reference manual~\cite{RM95:Xy-picRM}).
-
-\item
- Using $t_1|;|t_2|:(|x|,|y|)|$ as the target of an arrow command does
- not work. \emph{Fix}: Enclose it in braces, \ie, write
- $|{|t_1|;|t_2|:(|x|,|y|)}|$.
-
-\item
- The old ??c![\pit], ??c![\apit], and ??c![\bpit] commands are not
- defined. \emph{Fix}: Use |*@{>}| (or |\tip|) with variants and
- rotation.
-
-\item
- The even older notation where an argument in braces to |\rto| and the
- others was automatically taken to be a ``tail'' is not supported.
- \emph{Fix}: Use the supported |||<|\dots\ notation.
-
-\end{itemize}
-%
- Finally note that sometimes the spacing with version~\xyversion\ is
- ``improved'' relative to earlier versions~\smiley~. Please report all
- other things that do not work the same in version~2.6 and~\xyversion\
- to the author.
-
-
-\subsection{Further reading}
-??=[avail.further]
-%
- The reference manual~\cite{RM95:Xy-picRM} describes several more
- input modes that are useful when the diagram is not organised as a
- matrix. We'll give some examples of such diagrams but refer to the
- reference manual for the details.
-%
-\begin{itemize}
-
-\item The ``??w![graph]'' feature allows input of data structured as
- \emph{??w![directed graphs]} to make it easy to produce such
- pictures as
-%
-\begin{displaymath}
-%
-% From xygraph.doc.
-%
-\begin{code}
-\SelectTips{cm}{}
-\objectmargin={1pt}
-\xygraph{ !{0;(.77,-.77):0}
- !~:{@{-}|@{>}}
- w (:[r(.6)]{x_1}
- ,:[d]z:[r]y:[u(.6)]{x_2}:@/_/"x_1" (:@/_/"x_2") :"z"
- :@( {"w";"z"}, {"y";"z"})"z" :"x_2" ) }
-\end{code}
-\begin{IMAGE}
-\docode
-\end{IMAGE}
-\end{displaymath}
-
-\item The ``??w![knot]'' feature allows drawing of mathematical \emph{knots
- and ??w![links]} like
-%
-% From xyknot.doc:
-%
-\begin{displaymath}
-%
-\UseComputerModernTips
-\vtop{\vbox{\xygraph{!{0;/r1.5pc/:} !{\vover}[u]
- !{\hcap[-2]<<} [d] !{\vover-} [ruu] !{\hcap[2]><}}\smallskip}
-\hbox{\qquad\ \small simple link}}\hfil
-%
-% Figure-eight
-%
-\vtop{\vbox{\xygraph{!{0;/r1.5pc/:}
- [u] !{\vloop<(-.005)\khole||\vcrossneg \vunder- }
- [] !{\ar @{-}@'{p-(1,0)@+}+(-1,1)}
- [ul] !{\vcap[3]>\khole}
- [rrr] !{\ar @{-}@'{p-(0,1)@+}-(1,1)}
-}\smallskip}\hbox{\small figure-8 knot}}\hfil\quad
-%
-% cinque-foil
-%
-\vtop{\vbox{\xygraph{!{0;/r1.25pc/:}
- !P5"a"{~>{}} !P10"b"{~:{(1.7487,0):}~>{}}
- !P20"c"{~={-9}~:{(2.2,0):}~>{}}
- !{\xunderv~{"b3"}{"b2"}{"a2"}{"a1"}}
- !{\xunderv~{"b5"}{"b4"}{"a3"}{"a2"}}
- !{\xunderv~{"b7"}{"b6"}{"a4"}{"a3"}}
- !{\xunderv~{"b9"}{"b8"}{"a5"}{"a4"}}
- !{\xunderv~{"b1"}{"b10"}{"a1"}{"a5"}}
- !{\vloop~{"c3"}{"c2"}{"b2"}{"b1"}<<}
- !{\vloop~{"c7"}{"c6"}{"b4"}{"b3"}<<}
- !{\vloop~{"c11"}{"c10"}{"b6"}{"b5"}<<}
- !{\vloop~{"c15"}{"c14"}{"b8"}{"b7"}<<}
- !{\vloop~{"c19"}{"c18"}{"b10"}{"b9"}<<}
-}\smallskip}\hbox{\quad\ \small cinquefoil}}
-%
-\vbox{\hbox to 2em{\hss}}
-\end{displaymath}
-
-\item The ``??w![2cell]'' feature provides special support for
- \emph{categorical ??w![twocells]} like
-%
-\begin{displaymath}
-%
-% From xy2cell.doc.
-%
-\begin{code}
-\begin{xy}
- *+{A}="A",+<1cm,1.5cm>*+{B}="B",
- +<2cm,0pt>*+{C}="C",
- +<1cm,-1.5cm>*+{D}="D",
-"A";"B",{\uppertwocell^\alpha{}},
-"B";"C",{\twocell^\zeta_\xi{\gamma}},
-"C"; \afterPOS{\drop\compositemap{}}"D"
-\POS "A";
- \afterPOS{\drop\lowertwocell{}}"D"
-\end{xy}
-\end{code}
-\begin{IMAGE}
-\docode
-\end{IMAGE}
-\end{displaymath}
-
-\item The ``??w![poly]'' feature allows \emph{??w![polygon-like]}
- structures:
-%
-\begin{displaymath}
-%
-% From xypoly.doc:
-%
-\begin{code}
-\begin{xy}
-/r2pc/: ="A", +(.2,1.5)="B","A",
-{\xypolygon6{~:{(1,-.1):(0,.33)::}
- ~<>{;"B"**@{-}}}}\endxy
-\qquad \xy /r2pc/:
-{\xypolygon4"A"{~:{(0,.7)::}}},+(.7,1.1),
-{\xypolygon4"B"{~:{(.8,0):(0,.75)::}}},
-"A1";"B1"**@{.},"A2";"B2"**@{.},
-"A3";"B3"**@{.},"A4";"B4"**@{.}
-\endxy\qquad \xy /r2pc/:
-{\xypolygon3"A"{~:{(0,.7)::}}},+(.7,1.1),
-{\xypolygon3"B"{~:{(-.85,0):(-.15,.8)::}}}
-,"A1"\PATH~={**@{.}}'"B2"'"A3"'"B1"
-'"A2"'"B3"'"A1"
-\end{xy}
-\end{code}
-\begin{IMAGE}
-\docode
-\end{IMAGE}
-\end{displaymath}
-
-\item The ``??w![web]'' feature allows composition in lattices such as
-%
-\begin{displaymath}
-%
-% From xyweb.doc:
-%
-\begin{code}
-\def\latticebody{\dimen0=\latticeX pt
- \ifdim\dimen0>0pt \divide\dimen0 by 64
- \dimen0=\latticeY\dimen0 \relax
- \ifdim 0pt>\dimen0 \dimen0=-\dimen0 \fi
- \ifdim 2.5pt>\dimen0 \drop{\bullet}%
- \else\drop{.}\fi \else\drop{.}\fi}
-\begin{xy}
-*\xybox{0;<1.5pc,1.28mm>:<.41pc,1.12pc>::
-,0,{\croplattice{-3}5{-5}5
- {-1.3}{4.5}{-3.4}{4.4}}}="L"
-,{"L"+L \ar "L"+!R*+!L{\sigma^{(1)}}}
-,{"L"+D \ar "L"+!U*+!D{\sigma^{(2)}}}
-\end{xy}
-\end{code}
-\begin{IMAGE}
-\docode
-\end{IMAGE}
-\end{displaymath}
-
-\item The ``??w![arc]'' feature is suitable for effects like
-%
-\begin{displaymath}
-%
-% From xyarc.doc:
-%
-\begin{code}
-\begin{xy}
-0;/r5pc/:*@{*}="p",*+!DR{p};
-p+(.5,-.5)*@{*}="c",*+!UL{c}**@{-}
-,"c",{\ellipse<15pt>_,=:a(45){=}}
- ,{\ellipse<>__,=:a(30){-}}
-,{\ellipse(1,.4){.}}
- ,{\ellipse(1,.4)_,=:a(120){--}}
-,{\ellipse(,.75){.}}
- ,{\ellipse(,.75)_,^,^{-}}
-\end{xy}
-\end{code}
-\begin{IMAGE}
-\docode
-\end{IMAGE}
-\end{displaymath}
-
-\end{itemize}
-%
- In each case the figure is produced with relatively few lines using
- techniques documented in the respective sections of the reference
- manual together with the details of the \Xy-pic kernel and
- extensions, ``arrow,'' and ``matrix'' features as used in this guide;
- further extensions provide support for use of colour, \PS\ effects,
- and much more.
-
- Finally, the following documents might prove useful: \emph{How to
- Typeset Pretty Diagram Arrows with {\TeX}}~\cite{R92:HowTPDAT}
- presents some of the design decisions behind \Xy-pic,
- \emph{{\Xy}-pic and Notation for Categorical
- Diagrams}~\cite{R94:Xy-picNCD} explains how the modularity of \Xy-pic
- can be used to obtain complex effects with commutative diagrams, and
- \emph{Typesetting Neural Nets using
- {\Xy}-pic}~\cite{M94:TypesettingNNX} explains how \emph{neural
- networks} can be typeset using the package. Finally, a collection of
- complex examples is maintained on the \Xy-pic home page and the ftp
- servers discussed above.
-
-
-\subsection{Credits}
-??=[avail.credits]
-%
- \Xy-pic version 2 was a small package created by the author. The
- present version \xyversion\ is the result of more than three years of
- continued collaboration with Ross Moore,\footnote{Mathematics
- Department, Macquarie University, Sydney, Australia 2109;
- e-mail: ross@mpce.mq.edu.au.} and would never have been developed
- without his support and \TeX-nical expertise.\footnote{Partial
- funding for this collaboration has been provided by a Macquarie
- University Research Grant (MURG), by the Australian Research Council
- (ARC), and through a research agreement with the Digital Equipment
- Corporation (DEC).} This includes many of the modes mentioned above
- which were created for use within specialised branches of
- mathematics, however, the notations are designed to fit quite
- naturally within the framework of \Xy-pic and are useful more
- generally. Finally, we are grateful to Y\&Y Inc.\ for making very
- nicely done \PS\ versions of the \Xy-pic fonts available.
-
-
-\appendix\section{Answers to all exercises}
-\Answers
-
-\BIBLIOGRAPHY
-\INDEX
-
-\end{document}
-
-
-% $Log: xyguide.man,v $
-% Revision 3.6 1998/03/06 01:28:05 krisrose
-% Releasing (with Y&Y fonts).
-%
-% Revision 3.5 1997/05/29 21:02:36 krisrose
-% Fixed "missing breaks"...and tidied up documentation!
-%
-% Revision 3.4 1997/05/18 01:14:25 krisrose
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/19 13:17:15 krisrose
-% Maintenance release.
-%
-% Revision 3.2 1995/09/19 18:22:27 kris
-% Bug fix 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.10 1994/06/15 12:55:07 kris
-% Second 3beta release: bug fixes.
-%
-% 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.
-%
-% Revision 2.6.9.1 1994/03/07 04:22:46 kris
-% Last internal 3alpha and pre-2.7 release.
-%
-% Reformatted for LaTeX with companion xydoc.sty.
-% Renamed from xypicman.doc to xyguide.man.
-%
-% Revision 2.6.1.1 1992/07/01 07:08:24 kris
-% Send to EuroTeX '92...
-%
-% Revision 2.6 1992/06/24 01:23:34 kris
-% Reorganised...
-% Documented new features: hooks, triple lines, positions, and LaTeXdiagrams.
-%
-% Revision 2.5 1992/02/24 03:30:54 kris
-% Documented changes in xypic.doc[2.5].
-%
-% Revision 2.4 1992/01/22 02:15:10 kris
-% Cosmetic changes; removed \pit and introduced \rotate.
-%
-% Revision 2.3 1992/01/13 01:51:02 kris
-% Changed to use `pure' XPPT [1.20].
-% Several cosmetic changes, e.g., corrected definition of \ddtor in footnote.
-%
-% Revision 2.2 1992/01/09 04:05:40 kris
-% Patched to fix problem with \text and support AMS-LaTeX.
-%
-% Revision 2.1 1992/01/02 14:54:07 kris
-% Release version.
-%
-% Revision 1.7 1991/12/17 04:53:23 kris
-% Version distributed as `final draft' on Usenet.
-% Added bent arrows properly; support for double tips; proper \Text;
-% fixed name clashes...
-% This version is for bug fixes only!!
-%
-% Revision 1.6 1991/12/06 08:53:06 kris
-% Draft ready for wider distribution...
-% Fits xypic.doc[1.39]; still needs better examples.
-%
-% Revision 1.5 1991/12/03 07:53:28 kris
-% Extended with the xypic.doc[1.37] possibility for exotic arrow
-% tips; also added description of \merge.
-%
-% Revision 1.4 1991/12/02 06:08:42 kris
-% Fixed various things; fits xypic.doc[1.36].
-%
-% Revision 1.3 1991/12/01 07:40:07 kris
-% Corresponds to xypic.doc[1.35].
-%
-% Revision 1.2 1991/11/28 04:42:49 kris
-% Corresponds to xypic.doc[1.34].
-% Cleaned up a lot; now only bending arrows are missing...and good examples.
-%
-% Revision 1.1 1991/11/27 06:48:17 kris
-% Initial: \beta-test on DIKU.
-%
-% Based on version in DIKU student report 91-7-10.
-
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-prefix:"\t"
-% fill-column:77
-% paragraph-separate:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% paragraph-start:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyidioms.doc b/Master/texmf-dist/source/generic/xypic/xyidioms.doc
deleted file mode 100644
index 6fe56625ac5..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyidioms.doc
+++ /dev/null
@@ -1,283 +0,0 @@
-%% $Id: xyidioms.doc,v 3.4 1997/05/18 01:14:25 krisrose Exp $
-%%
-%% Format-dependent idioms for Xy-pic.
-%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% 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-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyidiomsloaded\empty \message{not reloaded}\endinput \fi
-\let\xyidiomsloaded=\empty
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This included file provides some common ??w![idioms] whose definition
- depends on the used format such that \Xy-pic can use predefined
- ??w![dimension registers] etc.\ and yet still be independent of the
- format under which it is used. The current ??w![version]
- (\stripRCS$Revision: 3.4 $) handles ??w![plain \TeX] (version 2
- and 3~\cite{K84:TeXbook}), ??w![\AMS-\TeX] (version 2.0 and
- 2.1~\cite{S90:JoyT}), ??w![\LaTeX] (version 2.09~\cite{L86:LaTeX}
- and~$2\varepsilon$~\cite{L94:LaTeX}), ??w![\AMS-\LaTeX] (version 1.0,
- 1.1~\cite{AMS91:AMS-LaTeX}, and~1.2), and eplain (version
- 2.6~\cite{B94:ExpandedPT})\footnote{The `v2' feature introduces some
- name conflicts, in order to maintain compatibility with earlier
- versions of \Xy-pic.\hfill}.
- ??w[system dependencies]??w[format dependencies]
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}
-\DOCHEADER
-\noindent
- This is a separate file so that we can abort the definitions easily
- using |\endinput|.
-
-\paragraph*{Scratch registers:}
-%
- All the formats currently treated allow the use of the following
- plain \TeX\ ??w![scratch register conventions]
- (\cf~\cite[p.346]{K84:TeXbook})
-%
-\begin{itemize}
-\item
- |\count@| is available as a local scratch counter register.
-\item
- |\dimen@|, |\dimen@i|, |\dimen@ii|, |\dimen3| to |\dimen9|, and
- |\dimen255| are available as scratch dimension registers.
-\item
- |\skip@|, |\skip1| to |\skip9|, and |\skip255| are available as
- scratch skip registers.
-\item
- |\toks@| and |\toks1| to |\toks9| are available as scratch token
- lists.
-\item
- |\boxz@| and |\box1| to |\box9| are available as scratch box
- registers.
-\end{itemize}
-%
- with the constraint that ??c![\global] should never (always)
- be used when assigning to number 0, 2, 4, 6, 8, and 255 (1, 3, 5, 7,
- and 9).
-
-\paragraph*{\Xy-specific scratch registers:}
-%
- We first give new names to dimension registers 4, 6, and 8, since
- none of the formats do that: |\A@|, |\B@|, and |\R@| are specific to
- \Xy-pic and will be referred to as ??w![$A$], ??w![$B$], and
- ??w![$R$] in comments.
-
-\DOCMODE(
-\xywarnifdefined\A@ \dimendef\A@=4
-\xywarnifdefined\B@ \dimendef\B@=6
-\xywarnifdefined\R@ \dimendef\R@=8
-\DOCMODE)
-
- Some shared scratch registers are defined last.
-
-\paragraph*{Idioms:}
-%
- First check that |\undefined| is indeed undefined\dots or rather: the
- same as an extremely unlikely control sequence that we are making up:
-
-\DOCMODE(
-\ifx\undefined\AveryUNLIKELYc@ntr@lSEQUENCE@@\else
-\errmessage{Xy-pic Error: \string\undefined\space defined.}\fi
-\DOCMODE)
-
- These idioms are so common they are just conditionally defined:
-
-\DOCMODE(
-\ifx\undefined\literal@ \def\literal@#1{#1}\fi
-\ifx\undefined\eat@ \def\eat@#1{}\fi
-
-\xydef@\xyFN@{\futurelet\next} % Now private because of AMS-LaTeX change.
-\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
-\DOCMODE)
-
-\paragraph*{Delayed setup:}
-%
- This is used when it is advantageous to delay loading of something
- until after the preamble, \ie, after all options, \etc, have been
- loaded. This is particularly true for nested ??c![\xywithoption]
- uses that will otherwise be executed repeatedly. Currently properly
- supported with \LaTeXe\ and the |amsppt| style of \AMS-\TeX.
-
-\DOCMODE(
-\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
-\DOCMODE)
-
- Similarly, the following provides a place to insert `trailing
- messages' if the format supports it; otherwise it just throws away
- the argument (useful for repeating the most important warnings).
-
-\DOCMODE(
-\xywarnifdefined\xyclosedown@@
-
-\ifx\AtEndDocument\undefined \let\xyclosedown@@=\eat@
-\else \def\xyclosedown@@#1{\AtEndDocument{#1}}\fi
-\DOCMODE)
-
- This may be useful to hook into specialised mechanisms for including
- |\special| material on the page.
-
-\DOCMODE(
-\xylet@\xy@begindvi=\literal@
-\DOCMODE)
-
- For example, \LaTeXe\ (post Dec~'94) defines an |\AtBeginDvi| macro
- to allow zero-sized material to be placed at the beginning of each
- shipped-out page. Among other uses, this allows such material not to
- be discarded, when on a page containing only floats. This is used by
- \Xy-pic in connection with the \PS\ header dictionary |xyps-ps.doc|.
-
-\DOCMODE(
-\ifx\undefined\AtBeginDvi\else
- \AtBeginDocument{\let\xy@begindvi=\AtBeginDvi}
- \AtBeginDvi{\global\let\xy@begindvi=\literal@}\fi
-\DOCMODE)
-
-\paragraph*{Shared scratch registers:}
-%
- Everything else in this file is also done by \AMS-\TeX\ so we exit
- here when using that format after renaming their |\toks@@| to
- |\toks@ii|\dots
-
-\DOCMODE(
-\ifx\amstexloaded@\relax
-\xylet@\toks@ii=\toks@@ \endinput \fi
-\DOCMODE)
-
- Thus the job of allocating scratch registers is simple except for
- counters where we only have one so we use \LaTeX\ scratch counters
- when available and otherwise allocate two new ones:
-
-\DOCMODE(
-\ifx\@tempcnta\undefined
-\xynew@{count}\count@@
-\xynew@{count}\count@@@
-\else
-\xylet@\count@@=\@tempcnta
-\xylet@\count@@@=\@tempcntb
-\fi
-\DOCMODE)
-
- Finally the second scratch token register not available with \LaTeX.
-
-\DOCMODE(
-\ifx\undefined\toks@ii \toksdef\toks@ii=2 \fi
-\DOCMODE)
-
-\paragraph*{End \& log:}
-%
- That's all.
-
-\DOCMODE(
-\endinput
-
-% $Log: xyidioms.doc,v $
-% Revision 3.4 1997/05/18 01:14:25 krisrose
-% Essential bugfixes.
-%
-% 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.11 1994/07/05 10:37:32 kris
-% Third 3beta release [bug fixes].
-% Experimental graph feature included (for ECCT-94 presentation).
-%
-% Revision 2.9 1994/06/09 15:02:49 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.
-%
-% Revision 2.6.9.1 1994/03/07 04:22:46 kris
-% Last internal 3alpha and pre-2.7 release.
-%
-% Now contains scratch register allocations.
-% Cleaned of AMS-TeX special macros.
-% Renamed from xyamstex.doc to xyidioms.doc for version 2.7.
-%
-% Revision 2.4 1992/01/22 02:15:10 kris
-% \\ works with AMS-LaTeX: don't use \Let@ [Werner Struckmann/Darrel Hankerson]
-% Made redefinition of \text conditional.
-%
-% Revision 2.3 1992/01/10 21:43:09 kris
-% Fixed AMS-LaTeX name clash problems.
-%
-% Revision 2.2 1992/01/09 04:05:40 kris
-% Patched to fix problem with \text and support AMS-LaTeX.
-%
-% Revision 2.1 1992/01/02 14:55:27 kris
-% Release version.
-%
-% Revision 1.3 1991/12/17 04:51:16 kris
-% Version distributed with `final draft' on Usenet.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-prefix:"\t"
-% fill-column:77
-% paragraph-separate:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% paragraph-start:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyimport.doc b/Master/texmf-dist/source/generic/xypic/xyimport.doc
deleted file mode 100644
index a2cff8f9642..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyimport.doc
+++ /dev/null
@@ -1,245 +0,0 @@
-%% $Id: xyimport.doc,v 3.6 1998/03/06 01:28:05 krisrose Exp $
-%%
-%% Xy-pic ``Import feature'' option.
-%% Copyright (c) 1993-1997 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@ens-lyon.fr>
-%%
-%% 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, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{import}{Import graphics extension}{\stripRCS$Revision: 3.6 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This feature provides the ability to easy add labels and annotations to
-graphics prepared outside \TeX\ or \LaTeX. An \Xy-pic graphics environment
-is established whose coordinates match that within the contents of the
-imported graphic, making it easy to specify exactly where a label should be
-placed, or arrow drawn to highlight a particular feature.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-A command |\xyimport| is defined which is used, in conjunction with
-imported graphics, to establish a coordinate system appropriate to the
-particular graphics. This enables <pos>itions within the graphic to be easily
-located, either for labelling or adding extra embellishing features.
-It is used in either of the follow ways:
-%
-\begin{defs1}
-|\xyimport(|{\em width}|,|{\em height}|){|<graphic>|}| \cr
-|\xyimport(|{\em width}|,|{\em height}|)(|%
- {\em$x$-off}|,|{$y$-off}|){|<graphic>|}|
-\end{defs1}
-
-\begin{code}
-\def\ellipA{\resizebox{6cm}{!}{%
- \includegraphics{import1.eps}}}
-\xy
-\xyimport(3.7,3.7)(1.4,1.4){\ellipA}*\frm{-}
-,!D+<2pc,-1pc>*+!U\txt{%
- framed contents of graphics file}\endxy
-\qquad\qquad
-\xy\xyimport(3.7,3.7)(1.4,1.4){\ellipA}
-,!D+<2pc,-1pc>*+!U\txt{Rational points
- on the elliptic curve: $x^3+y^3=7$}
-,(1,0)*+!U{1},(-1,0)*+!U{-1}
-,(0,1)*+!R{1},(0,-1)*+!R{-1}
-,(2,-1)*+!RU{P},(-1,2)*+!RU{-P}
-,(1.3333,1.6667)*+!UR{-2P}
-,(1.6667,1.3333)*!DL{\;2P}
-,(-.5,1.9)*++!DL{3P},(1.9,-.5)*!DL{\;-3P}
-,(-1,2.3)*+++!D{\infty}*=0{},{\ar+(-.2,.2)}
-,(.5,2.3)*+++!D{\infty}*=0{},{\ar+(-.2,.2)}
-,(2.3,-1)*+++!L{\infty}*=0{},{\ar+(.2,-.2)}
-\endxy
-\end{code}
-
-\begin{figure*}[t]
-%
-% example appears early so it will not float too far away.
-%
-% Special care needed in case there is no graphics available...
-\ifx\includegraphics\undefined \def\resizebox#1#2#3{%
- \vbox to6cm{\vss\hbox to6cm{\hss(Picture import1.eps omitted)\hss}\vss}}\fi
-$$\docode$$
-\caption{importing a graphic for labelling}??=[importing]
-\end{figure*}
-
-\noindent
-Normally the <graphics> will be a box containing a graphic imported
-using the commands from packages such as |graphics|, |epsf| or
-|epsfig|, or using other commands provided by the local \TeX\
-implementation. However the <graphic> could be {\em any} balanced
-\TeX\ material whatsoever; provided it occupies non-zero size, both
-vertically and horizontally.
-
-The {\em width} and {\em height} are <number>s given in the coordinate
-system for the {\em contents of the <graphics>}. These are not dimensions,
-but coordinate-lengths, using the units appropriate to the picture displayed
-by <graphic>.
-
-When provided, |(|{\em$x$-off}|,|{$y$-off}|)| give the distance in
-coordinate units from bottom-left corner to where the origin of coordinates
-should be located, usually within area covered by the <graphic>.
-Usually the negatives of these numbers will give the coordinate location
-of the bottom-left corner of the <graphic>. If no offsets are supplied
-then the origin is presumed to lie at the bottom-left corner.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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 }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Normally the |\xyimport| command is used at the beginning of an |\xy..\endxy|
-environment. It is not necessary to give any basis setup, for this is
-deduced by measuring the dimensions of the <graphic> and using the supplied
-{\em width}, {\em height} and offsets.
-The <graphic> itself defines named <pos> called |"import"|, located at the
-origin and having appropriate extents to describe the area covered by
-the <graphic>. This makes it particularly easy to surround the <graphic>
-with a frame, as on the left side of figure~??[importing],
-or to draw axes passing through the origin.
-
-% Special care needed in case there is no graphics available...
-\ifx\includegraphics\undefined \def\resizebox#1#2#3{%
- \vbox to6cm{\vss\hbox to6cm{\hss(Picture import1.eps omitted)\hss}\vss}}\fi
-
-Here is the code used to apply the labelling in figure~??[importing]:
-\displaycode
-
-This example uses the \LaTeXe\ standard |graphics| package to import
-the graphics file |import1.eps|; other packages could have been used
-instead. e.g. |epsfig|, |epsf|, or the \expandafter|\string\picture|
-or \expandafter|\string\illustration| commands in \Textures\ on the
-Macintosh.
-
-The only possible problems that can occur are when the graphics package is
-loaded after \Xy-pic has been loaded. Generally it is advisable to have
-\Xy-pic loading {\em after} all other macro packages.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xyimport.doc,v $
-% Revision 3.6 1998/03/06 01:28:05 krisrose
-% Releasing (with Y&Y fonts).
-%
-% Revision 3.4 1997/05/18 01:13:24 ross
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/18 09:19:22 ross
-% no changes
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.14 1995/07/05 22:10:51 kris
-% Buglets...
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-%
-% NEW for version 3.0 by by Ross Moore.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\endinput
-$$
-\xy\xyimport(37,37)(18,18){\ellB}
-,!D+<1pc,-1pc>*+!U\txt{Rational points
-on the elliptic curve: $x^3+y^3=1729$}
-,(10,0)*+!U{10},(-10,0)*+!U{-10}
-,(0,10)*+!R{10},(0,-10)*+!R{-10}
-,(1,12)*+!DL{P_1}
-,(12,1)*+!DL{-P_1=(12\,,1)}
-,(10,9)*!LD{\;\;\;P_2=(10\,,9)}
-,(9,10)*++!D{\;\;-P_2}
-,(-15.5,17.5)*+!DL{-P_1-P_2}
-,(17.5,-15.5)*+!DL{P_1+P_2}
-,(13,-7)*+!UR{-2P_1-P_2\;\;}
-,(18,-3)*+++!L{\infty}*=0{},{\ar+(2,-2)}
-,(3,18)*+++!D{\infty}*=0{},{\ar+(-2,2)}
-\endxy
-$$
-
-\end{document}
diff --git a/Master/texmf-dist/source/generic/xypic/xyknot.doc b/Master/texmf-dist/source/generic/xypic/xyknot.doc
deleted file mode 100644
index e3c3f132b92..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyknot.doc
+++ /dev/null
@@ -1,2014 +0,0 @@
-%% $Id: xyknot.doc,v 3.4 1997/05/18 01:13:24 ross Exp $
-%%
-%% Xy-pic ``Knots and Links'' feature.
-%% Copyright (c) 1994-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this macro package; if not, write to the Free Software Foundation,
-%% Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{knot}{Knots and Links feature}{\stripRCS$Revision: 3.4 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\noindent
- This feature provides a language for specifying knots, links and
- general arrangements of crossing strings.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\TODO: Document this feature!
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\DOCMODE(
-\message{knots and links,}
-\DOCMODE)
-
-This |knot| feature is really a `construction kit', providing pieces which
-may be placed appropriately to form knots and links.
-The types of pieces provided are of two kinds: the ``crossings'',
-representing one string crossing over or under another;
-and ``joins'' which are used to connect what would otherwise be loose ends.
-Several types of each are provided, along with a simple way of specifying
-where to place arrowheads and labels.
-
-\begin{figure*}[tb]
-\begin{syntax}
-%
- <knot-piece>
- &\iss & <piece><scale><knot-labels>
- & interpret knot-piece
-\cr
-\noalign{\smallskip}
-%
- <piece>
- &\iss & <crossing>\orr<join>
- & piece is a ??!^[crossing] or a ??!^[join]
-\cr
-\noalign{\smallskip}
-%
- <scale>
- &\iss & <empty>\orr~|-|~\orr |[|<num>|]|
- & invert or ??!^[scale the knot piece]; \cr
-& & \orr |~|<pos><pos><pos><pos>
- & ??!^[alter size and shape] using the <pos>s
-\cr
-%
-\noalign{\smallskip}
-<knot-labels>
- &\iss & <empty>\orr <knot-tips><knot-labels>
- & arrowtips at ends, aligned with orientation
-\cr
-%
-\noalign{\smallskip}
- & & \orr <where><what><knot-labels>
- & list??^[knot-labels] of ??!^[arrowtips, breaks and labels]
-\cr
-%
-\noalign{\smallskip}
- & & \orr |@|<adjust><knot-labels>
- & ??!^[adjust hole] position for a <crossing>;
- \newline adjust other parameter??^[join control] for a <join>.
-\cr
-%
-\noalign{\smallskip}
- <knot-tips>
- & \iss &~~~|==|\orr|=!| & ??!^[arrowtips] at both/neither end
- \cr
- & & \orr|=<|\orr|=>| & ??!^[arrowtips] also at start/finish
-\cr
-\noalign{\smallskip}
-%
- <where>
- & \iss &~~~||||\orr||||<adjust> & `over' string on a <crossing>;%
- ??^[which string]
- \newline middle??^[join places] place on a <join>.
-\cr
- & & \orr|<|\orr|<|<adjust> & initial portion of `under' string
- on a <crossing>;??^[which string]
- \newline earlier??^[join places] place on a <join>.
-\cr
- & & \orr|>|\orr|>|<adjust> & final portion of `under' string
- on a <crossing>;??^[which string]
- \newline later??^[join places] place on a <join>.
-\cr
-%
-\noalign{\smallskip}
- <adjust>
- & \iss &~~~|(+|<num>|)|\orr|(-|<num>|)|
- & ??!^[adjustment] from current value of parameter
-\cr
- & & \orr|(=|<num>|)|\orr|(|<num>|)| & set parameter value??^[adjustment]
-\cr
-\noalign{\smallskip}
-%
- <what>
- &\iss & ~~~|>|\orr|<| & arrowhead aligned with/against ??!^[orientation]
-\cr
- & & \orr|\knothole|\orr|\khole| & leave ??!^[hole in the string]
-\cr
- & & \orr|{|<text>|}| & set??^[simple label] <text> as label,
- using |\labelstyle|
-\cr
- & & \orr|{*|<object>|}| & drop <object>??^[knot object]
-\cr
- & & \orr|{|<anchor><it>|}| & <break> or label??^[knot object]
- as on an <arrow>
-\cr
- & & \orr|||| & ??!^[null-break]
-\cr
-%
-\end{syntax}
-\caption{\protect<knot-piece> construction set}
-??=[f.path]
-\end{figure*}
-
-
-All the pieces ultimately use curves from the |curve| extension, usually
-indirectly via the |arrow| feature.
-As such, processing can be memory-intensive and may seem rather slow.
-All the warnings and advice given elsewhere on techniques to handle pages
-and individual diagrams with many curves are especially applicable when
-using this feature.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-Most constructions use |\ar| so make sure this feature is loaded.
-
-\DOCMODE(
-\xyrequire{arrow}\xycatcodes
-\DOCMODE)
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\centerline{
-%
-\UseComputerModernTips
-\vtop{\vbox{\xygraph{!{0;/r1.5pc/:} !{\vover}[u]
- !{\hcap[-2]<<} [d] !{\vover-} [ruu] !{\hcap[2]><}}\smallskip}
-\hbox{\qquad\ \small simple link}}\hfil
-%
-% Figure-eight
-%
-\vtop{\vbox{\xygraph{!{0;/r1.5pc/:}
- [u] !{\vloop<(-.005)\khole||\vcrossneg \vunder- }
- [] !{\ar @{-}@'{p-(1,0)@+}+(-1,1)}
- [ul] !{\vcap[3]>\khole}
- [rrr] !{\ar @{-}@'{p-(0,1)@+}-(1,1)}
-}\smallskip}\hbox{\small figure-8 knot}}\hfil\quad
-%
-% cinque-foil
-%
-\vtop{\vbox{\xygraph{!{0;/r1.25pc/:}
- !P5"a"{~>{}} !P10"b"{~:{(1.7487,0):}~>{}}
- !P20"c"{~={-9}~:{(2.2,0):}~>{}}
- !{\xunderv~{"b3"}{"b2"}{"a2"}{"a1"}}
- !{\xunderv~{"b5"}{"b4"}{"a3"}{"a2"}}
- !{\xunderv~{"b7"}{"b6"}{"a4"}{"a3"}}
- !{\xunderv~{"b9"}{"b8"}{"a5"}{"a4"}}
- !{\xunderv~{"b1"}{"b10"}{"a1"}{"a5"}}
- !{\vloop~{"c3"}{"c2"}{"b2"}{"b1"}<<}
- !{\vloop~{"c7"}{"c6"}{"b4"}{"b3"}<<}
- !{\vloop~{"c11"}{"c10"}{"b6"}{"b5"}<<}
- !{\vloop~{"c15"}{"c14"}{"b8"}{"b7"}<<}
- !{\vloop~{"c19"}{"c18"}{"b10"}{"b9"}<<}
-}\smallskip}\hbox{\quad\ \small cinquefoil}}
-}%
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection*{Crossings}
-
-A ``crossing'' is intended to represent two strings passing close by,
-but not meeting. The macros provided specify typesetting within a square
-cell of coordinate values; using a non-square basis alters this shape,
-but see also note~??[alter size and shape] below, for the technique
-that was used in the ``cinquefoil'' example above.
-
-\begin{notes}
-\note??=[crossing]
-Several families of crossing are provided. Those having names as |\v...|
-and |\h...| are designed to stack respectively vertically and
-horizontally. More precisely the current <pos> starts at the top-left
-corner and finishes at either the bottom-left or top-right.
-Say that a crossing is either a `vertical crossing' or `horizontal
-crossing' respectively.
-
-This certainly applies to the |\..cross..| and |\..twist..| families,
-see figure~??[f.crossings] in which the strings enter and leave the
-square all with vertical tangents or all with horizontal tangents.
-Indeed {\em all} crossings are either vertical or horizontal, with
-the final letter indicating which for the |\xover..| families.
-
-Furthermore there is a natural {\em orientation\/} for each crossing,
-as well as along each strand. This corresponds to the order in which ink
-is applied to the printed page, following the natural parametrization of
-each strand as a curved connection or arrow.
-This orientation determines whether a crossing is `over' (mathematically,
-positive or right-handed) or `under' (mathematically, negative or
-left-handed). It is used in determining the location of labels and the
-direction of arrowheads placed along the strings.
-Note that |\..cross..| and |\..twist..| crossings may set the same
-curves, but with different orientation and label-positioning.
-
-\begin{figure*}[ht]
-$$
-\knotholesize{5pt}\UseComputerModernTips
- \xygraph{!{0;/r2pc/:}="O"
- [] !{\vcross<>|>>><{x}|{y}>{z}}
- [rur]!{\vcrossneg<>|>>><{x}|{y}>{z}}
- [rur]!{\vuncross<>|>>><{x}|{y}>{z}}
- [urrr]!{\hcross<>|>>><{x}|{y}>{z}}
- [r]!{\hcrossneg<>|>>><{x}|{y}>{z}}
- [r]!{\huncross<>|>>><{x}|{y}>{z}}
- "O" !{+(.5,-1.5)}
- [] !{*\txt\small\tt{\string\vcross}}
- [rr]!{*\txt\small\tt{\string\vcrossneg}}
- [rr]!{*\txt\small\tt{\string\vuncross}}
- [rrr]!{*\txt\small\tt{\string\hcross}}
- [rr]!{*\txt\small\tt{\string\hcrossneg}}
- [rr]!{*\txt\small\tt{\string\huncross}}
- "O" !{+(0,-3)}
- [] !{\vtwist<>|>>><{x}|{y}>{z}}
- [rur]!{\vtwistneg<>|>>><{x}|{y}>{z}}
- [rur]!{\vuntwist<>|>>><{x}|{y}>{z}}
- [urrr]!{\htwist<>|>>><{x}|{y}>{z}}
- [r]!{\htwistneg<>|>>><{x}|{y}>{z}}
- [r]!{\huntwist<>|>>><{x}|{y}>{z}}
- "O" !{+(.5,-4.5)}
- !{*\txt\small\tt{\string\vtwist}}
- [rr]!{*\txt\small\tt{\string\vtwistneg}}
- [rr]!{*\txt\small\tt{\string\vuntwist}}
- [rrr]!{*\txt\small\tt{\string\htwist}}
- [rr]!{*\txt\small\tt{\string\htwistneg}}
- [rr]!{*\txt\small\tt{\string\huntwist}}
- "O" !{+(0,-6)}
- []!{\xoverv<>|>>><{x}|{y}>{z}}
- [urr]!{\xunderv<>|>>><{x}|{y}>{z}}
- [urr]!{\xunoverv<>|>>><{x}|{y}>{z}}
- [urrr]!{\xoverh<>|>>><{x}|{y}>{z}}
- [r]!{\xunderh<>|>>><{x}|{y}>{z}}
- [r]!{\xunoverh<>|>>><{x}|{y}>{z}}
- "O" !{+(.5,-7.5)}
- !{*\txt\small\tt{\string\xoverv}}
- [rr]!{*\txt\small\tt{\string\xunderv}}
- [rr]!{*\txt\small\tt{\string\xunoverv}}
- [rrr]!{*\txt\small\tt{\string\xoverh}}
- [rr]!{*\txt\small\tt{\string\xunderh}}
- [rr]!{*\txt\small\tt{\string\xunoverh}}
- "O" !{+(0,-9)}
- !{\vover<>|>>><{x}|{y}>{z}}
- [rur]!{\vunder<>|>>><{x}|{y}>{z}}
- [rur]!{\vunover<>|>>><{x}|{y}>{z}}
- [urrr]!{\hover<>|>>><{x}|{y}>{z}}
- [r]!{\hunder<>|>>><{x}|{y}>{z}}
- [r]!{\hunover<>|>>><{x}|{y}>{z}}
- "O" !{+(.5,-10.5)}
- !{*\txt\small\tt{\string\vover}}
- [rr]!{*\txt\small\tt{\string\vunder}}
- [rr]!{*\txt\small\tt{\string\vunover}}
- [rrr]!{*\txt\small\tt{\string\hover}}
- [rr]!{*\txt\small\tt{\string\hunder}}
- [rr]!{*\txt\small\tt{\string\hunover}}
-}$$
-\caption{knot crossings with orientations and label positions}%
-??=[f.crossings]
-\end{figure*}
-
-\noindent
-Figure~??[f.crossings] displays the orientation on all the crossings,
-grouping them into subfamilies consisting of right-handed, left-handed
-and non-crossings. Also indicated are the default positions for labels
-and arrow-tips; each piece uses the same code for tips and labels,
-e.g. |\vover<>||>>><{x}||{y}>{z}|.
-
-The |\x...| crossings do not stack easily since their tangents are at
-$45^\circ$ to the coordinate axes. It is the last letter in the name
-which denotes whether the particular crossing is vertical or horizontal.
-On the other hand |\vover|\,, |\vunder| etc. stack vertically on top of
-a |\vcross|\,, |\vtwist| etc.; similarly |\hover| stacks at the left
-of |\hcross|\,, |\htwist| etc.
-
-\begin{code}
-$$\xy 0;/r1pc/:
- ,{\vunder\vtwist\vtwist\vunder-}\endxy
-\qquad\qquad\qquad \xy 0;/r1pc/:+(0,-1.5)
- ,{\hover\hcross\hcross\hover-}\endxy$$
-\end{code}
-\docode
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{Parsing}
-
-\DOCMODE(
-\xydef@\xykparsecross@{%
- \def\xykSCALE@@{}\edef\xyknotPLACE{\xykmidPLACE@}%
- \let\xykparser@=\xykparsecross@@
- \def\xykdefaultbreak@{\let\xykbreak@=\xykforetemp@
- \def\xyknotPLACE{(.5)}\appendtoholder@}%
- \xyFN@\xykparsescale@ }
-
-{\xyuncatcodes \catcode`@=11
-\gdef\next{%
- \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsecross@@}%
- \else\addLT@\ifx\next \addLT@\DN@{\xyprecross@}%
- \else\addGT@\ifx\next \addGT@\DN@{\xypostcross@}%
- \else\addEQ@\ifx\next \addEQ@\DN@{\xyFN@\xykparsetips@@}%
- \else\ifx|\next\DN@|{\xymidcross@}%
- \else\addAT@\ifx\next \addAT@\DN@(##1){%
- \xyadjustBREAK@i##1@@\xyFN@\xykparsecross@@}%
- \else\DN@{\afterknot@}%
- \fi\fi\fi\fi\fi\fi \next@ }}
-\xylet@\xykparsecross@@=\next
-\DOCMODE)
-
-\DOCMODE(
-\xydef@\xyprecross@{%
- \def\xykholder@{\xykprebreak@@}%
- \edef\xyknotPLACE{\xykprePLACE@}%
- \xyFN@\xykparsebreak@}
-
-\xydef@\xypostcross@{%
- \def\xykholder@{\xykpostbreak@@}%
- \edef\xyknotPLACE{\xykpostPLACE@}%
- \xyFN@\xykparsebreak@}
-
-\xydef@\xymidcross@{%
- \def\xykholder@{\xykmidbreak@@}%
- \edef\xyknotPLACE{\xykmidPLACE@}%
- \xyFN@\xykparsebreak@}
-\DOCMODE)
-
-These macros are common to most crossings.
-
-\DOCMODE(
-\xydef@\xykcross@#1{\xykcheckTIPS@
- \expandafter\toks@\expandafter{\expandafter#1\knotSTYLE}}
-
-\xydef@\xykoverstring@{\addtotoks@{{}}\xykmidbreak@ \xyknottips@}
-\xydef@\xykunderstring@{\xykprebreak@ \xykpostbreak@ \xyknottips@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{``cross'' crossings:}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The initialisation\dots
-
-\DOCMODE(
-\xydef@\vcross{\begingroup\def\afterknot@{\xyvcross}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-\xydef@\hcross{\begingroup\def\afterknot@{\xyhcross}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-\xydef@\vcrossneg{\begingroup\def\afterknot@{\xyvcrossneg}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-\xydef@\hcrossneg{\begingroup\def\afterknot@{\xyhcrossneg}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-\xydef@\vuncross{\begingroup\def\afterknot@{\xyvuncross}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{}%
- \xyFN@\xykparsecross@ }%
-\xydef@\huncross{\begingroup\def\afterknot@{\xyhuncross}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{}%
- \xyFN@\xykparsecross@ }%
-\DOCMODE)
-
-The interface\dots
-
-\DOCMODE(
-\xydef@\xyvcross{\xykcross@\xykcrossv
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyhcross{\xykcross@\xykcrossh
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
-
-\xydef@\xyvcrossneg{\xykcross@\xykcrossv
- \xykunderstring@ \xykoverstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyhcrossneg{\xykcross@\xykcrossh
- \xykunderstring@ \xykoverstring@ \xykhvobject@{+(1,0)}}
-
-\xydef@\xyvuncross{\xykcross@\xykuncrossv
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyhuncross{\xykcross@\xykuncrossh
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
-\DOCMODE)
-
-The drawing code\dots
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<",{\xykz_\ar #1@'{"_<"**{}?(.25)@+,?+(.375,0)@+,
- "_>";"^>"**{}?-(.375,0)@+,?(.25)@+}"_>"#3#4#5},
- "_<",{\xykz^\ar #2@'{"^<"**{}?(.25)@+,?+(.375,0)@+,
- "^>";"_>"**{}?-(.375,0)@+,?(.25)@+}"^>"#6#7#8}
- \restore\POS #9}}
-\xylet@\xykcrossv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "_<",{\xykz_\ar #1@'{"_>"**{}?(.25)@+,?+(0,.375)@+,
- "^>";"^<"**{}?-(0,.375)@+,?(.25)@+}"^>"#3#4#5},
- "_>",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?+(0,.375)@+,
- "^<";"^>"**{}?-(0,.375)@+,?(.25)@+}"^<"#6#7#8}
- \restore\POS #9}}
-\xylet@\xykcrossh=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<",{\xykz^\ar #1@'{"_<"**{}?(.25)@+,?(.375)+(.375,0)@+,
- "^>";"_>"**{}?(.375)-(.375,0)@+,?(.25)@+}"^>"#3#4#5},
- "_<",{\xykz^\ar #2@'{"^<"**{}?(.25)@+,?(.375)+(.375,0)@+,
- "_>";"^>"**{}?(.375)-(.375,0)@+,?(.25)@+}"_>"#6#7#8}
- \restore\POS #9}}
-\xylet@\xykuncrossv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "_<",{\xykz^\ar #1@'{"_>"**{}?(.25)@+,?(.375)+(0,.375)@+,
- "^<";"^>"**{}?(.375)-(0,.375)@+,?(.25)@+}"^<"#3#4#5},
- "_>",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?(.375)+(0,.375)@+,
- "^>";"^<"**{}?(.375)-(0,.375)@+,?(.25)@+}"^>"#6#7#8}
- \restore\POS #9}}
-\xylet@\xykuncrossh=\next
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{``over'' crossings:}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The initialisation\dots
-
-\DOCMODE(
-\xydef@\vover{\begingroup\def\afterknot@{\xyvover}%
- \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{|(.725)\knothole}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\hover{\begingroup\def\afterknot@{\xyhover}%
- \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{|(.725)\knothole}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\vunder{\begingroup\def\afterknot@{\xyvunder}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.8)}%
- \def\xykmidPLACE@{(.2)}\def\xykpostbreak@@{|(.275)\knothole}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\hunder{\begingroup\def\afterknot@{\xyhunder}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.8)}%
- \def\xykmidPLACE@{(.2)}\def\xykpostbreak@@{|(.275)\knothole}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\vunover{\begingroup\def\afterknot@{\xyvunover}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\hunover{\begingroup\def\afterknot@{\xyhunover}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{}%
- \xyFN@\xykparsecross@ }%
-
-
-\xydef@\xoverv{\begingroup\def\afterknot@{\xyxoverv}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
- \def\xykmidPLACE@{(.15)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\xunderv{\begingroup\def\afterknot@{\xyxunderv}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
- \def\xykmidPLACE@{(.15)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\xoverh{\begingroup\def\afterknot@{\xyxoverh}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
- \def\xykmidPLACE@{(.15)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\xunderh{\begingroup\def\afterknot@{\xyxunderh}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
- \def\xykmidPLACE@{(.85)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\xunover{\begingroup\def\afterknot@{\xyxunover}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
- \def\xykmidPLACE@{(.15)}\def\xykpostbreak@@{}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\xunoverv{\begingroup\def\afterknot@{\xyxunoverv}%
- \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.8)}%
- \def\xykmidPLACE@{(.2)}\def\xykpostbreak@@{}%
- \xyFN@\xykparsecross@ }%
-
-\xydef@\xunoverh{\begingroup\def\afterknot@{\xyxunoverh}%
- \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.8)}%
- \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{}%
- \xyFN@\xykparsecross@ }%
-\DOCMODE)
-
-The interface\dots
-
-\DOCMODE(
-\xydef@\xyvover{\xykcross@\xykoverv
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyhover{\xykcross@\xykoverh
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
-
-\xydef@\xyvunder{\xykcross@\xykoverv
- \xykunderstring@ \xykoverstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyhunder{\xykcross@\xykoverh
- \xykunderstring@ \xykoverstring@ \xykhvobject@{+(1,0)}}
-
-\xydef@\xyvunover{\xykcross@\xykunoverv
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyhunover{\xykcross@\xykunoverh
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
-
-
-\xydef@\xyxoverv{\xykcross@\xykxoverv
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyxunderv{\xykcross@\xykxoverv
- \xykunderstring@ \xykoverstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyxoverh{\xykcross@\xykxoverh
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
-
-\xydef@\xyxunderh{\xykcross@\xykxoverh
- \xykunderstring@ \xykoverstring@ \xykhvobject@{+(1,0)}}
-
-\xydef@\xyxunover{\xykcross@\xykxoverv
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
-
-\xydef@\xyxunoverv{\xykcross@\xykxunoverv
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyxunoverh{\xykcross@\xykxunoverh
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
-
-\DOCMODE)
-
-The drawing code\dots
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<",{\xykz^\ar #1@'{"^>"**{}?(.25)@+,?(.625)+(0,-.125)@+,
- "_>";"^>"**{}?(.625)-(.125,0)@+,?(.25)@+}"_>"#3#4#5},
- "_<",{\xykz^\ar #2@'{"^<"**{}?(.25)@+,?(.625)+(.125,0)@+,
- "^>";"^<"**{}?(.625)-(0,.125)@+,?(.25)@+}"^>"#6#7#8},\restore\POS#9}}
-\xylet@\xykoverv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "_<",{\xykz^\ar #1@'{"^<"**{}?(.25)@+,?(.625)+(.125,0)@+,
- "^>";"^<"**{}?(.625)-(0,.125)@+,?(.25)@+}"^>"#3#4#5},
- "_>",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?(.625)+(0,.125)@+,
- "^<";"_<"**{}?(.625)+(.125,0)@+,?(.25)@+}"^<"#6#7#8},\restore\POS#9}}
-\xylet@\xykoverh=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<",{\xykz^\ar #1@'{"^>"**{}?(.25)@+,?-(0,.175)@+,?(.75)@+}
- "^>"#3#4#5},
- "_<",{\xykz^\ar #2@'{"^<"**{}?(.25)@+,?+(.125,0)@+,
- "_>"**{}?+(0,.7)@+,"_>";"^>"**{}?-(.125,0)@+,?(.25)@+}
- "_>"#6#7#8},\restore\POS#9}}
-\xylet@\xykunoverv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "_<",{\xykz^\ar #1@'{"^<"**{}?(.25)@+,?+(.175,0)@+,?(.75)@+}
- "^<"#3#4#5},
- "_>",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?+(0,.125)@+,
- "^>"**{}?-(.7,0)@+,"^>";"^<"**{}?-(0,.125)@+,?(.25)@+}
- "^>"#6#7#8},\restore\POS#9}}
-\xylet@\xykunoverh=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<";"^>"**{}?="^_","_<";"_>"**{}?;"^_",**{}?="^_",
- "^>",{\xykz^\ar #1@'{"^_"@+}"_<"#3#4#5},
- "^<",{\xykz_\ar #2@'{"^_"@+}"_>"#6#7#8},\restore\POS#9}}
-\xylet@\xykxoverv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<";"_<"**{}?="^_","^>";"_>"**{}?;"^_",**{}?="^_",
- "^<",{\xykz_\ar #1@'{"^_"@+}"_>"#3#4#5},
- "_<",{\xykz_\ar #2@'{"^_"@+}"^>"#6#7#8},\restore\POS#9}}
-\xylet@\xykxoverh=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<";"^>"**{}?="^_","_<";"_>"**{}?;"^_",**{}?="^_",
- "^>",{\xykz^\ar #1@'{"^_"@+}"_>"#3#4#5},
- "^<",{\xykz^\ar #2@'{"^_"@+}"_<"#6#7#8},\restore\POS#9}}
-\xylet@\xykxunoverv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<";"_<"**{}?="^_","^>";"_>"**{}?;"^_",**{}?="^_",
- "^<",{\xykz^\ar #1@'{"^_"@+}"^>"#3#4#5},
- "_<",{\xykz^\ar #2@'{"^_"@+}"_>"#6#7#8},
- \restore\POS#9}}
-\xylet@\xykxunoverh=\next
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{``twist'' crossings:}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The initialisation\dots
-
-\DOCMODE(
-\xydef@\vtwist{\begingroup\def\afterknot@{\xyvtwist}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-\xydef@\htwist{\begingroup\def\afterknot@{\xyhtwist}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-\xydef@\vtwistneg{\begingroup\def\afterknot@{\xyvtwistneg}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-\xydef@\htwistneg{\begingroup\def\afterknot@{\xyhtwistneg}%
- \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
- \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
- \xyFN@\xykparsecross@ }%
-\xydef@\vuntwist{\begingroup\def\afterknot@{\xyvuntwist}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
- \def\xykmidPLACE@{(.85)}\def\xykpostbreak@@{}%
- \xyFN@\xykparsecross@ }%
-\xydef@\huntwist{\begingroup\def\afterknot@{\xyhuntwist}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
- \def\xykmidPLACE@{(.85)}\def\xykpostbreak@@{}%
- \xyFN@\xykparsecross@ }%
-\DOCMODE)
-
-The interface\dots
-
-\DOCMODE(
-\xydef@\xyvtwist{\xykcross@\xyktwistv
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyvtwistneg{\xykcross@\xyktwistv
- \xykunderstring@ \xykoverstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyvuntwist{\xykcross@\xykuntwistv
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
-
-\xydef@\xyhtwist{\xykcross@\xyktwisth
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
-
-\xydef@\xyhuntwist{\xykcross@\xykuntwisth
- \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
-
-\xydef@\xyhtwistneg{\xykcross@\xyktwisth
- \xykunderstring@ \xykoverstring@ \xykhvobject@{+(1,0)}}
-\DOCMODE)
-
-The drawing code\dots
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^>",{\xykz_\ar #1@'{"_>"**{}?(.25)@+,?-(.375,0)@+,
- "_<";"^<"**{}?+(.375,0)@+,?(.25)@+}"_<"#3#4#5},
- "^<",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?+(.375,0)@+,
- "_>";"^>"**{}?+(-.375,0)@+,?(.25)@+}"_>"#6#7#8}
- \restore\POS #9}}
-\xylet@\xyktwistv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^>",{\xykz^\ar #1@'{"_>"**{}?(.125)@+,?(.375)-(.25,0)@+,
- ?(.625)-(.25,0)@+,?(.875)@+}"_>"#3#4#5},
- "^<",{\xykz^\ar #2@'{"_<"**{}?(.125)@+,?(.375)+(.25,0)@+,
- ?(.625)+(.25,0)@+,?(.875)@+}"_<"#6#7#8}
- \restore\POS #9}}
-\xylet@\xykuntwistv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<",{\xykz_\ar #1@'{"^>"**{}?(.25)@+,?+(0,-.375)@+,
- "_>";"_<"**{}?+(0,.375)@+,?(.25)@+}"_>"#3#4#5},
- "_<",{\xykz^\ar #2@'{"_>"**{}?(.25)@+,?+(0,.375)@+,
- "^>";"^<"**{}?-(0,.375)@+,?(.25)@+}"^>"#6#7#8}
- \restore\POS #9}}
-\xylet@\xyktwisth=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
- "^<",{\xykz^\ar #1@'{"^>",**{}?(.125)@+,?(.375)+(0,-.25)@+,
- ?(.625)+(0,-.25)@+,?(.875)@+}"^>"#3#4#5},
- "_<",{\xykz^\ar #2@'{"_>",**{}?(.125)@+,?(.375)+(0,.25)@+,
- ?(.625)+(0,.25)@+,?(.875)@+}"_>"#6#7#8},\restore\POS #9}}
-\xylet@\xykuntwisth=\next
-
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[scale the knot piece]
-The above examples also show how to use |-| to get the mirror-image of a
-particular crossing. Any numerical scale factor can be used by enclosing
-it within |[..]| e.g. |[2.3]| scaling a single piece without affecting
-the rest of the picture. The scale-factor {\em must\/} occur before any
-label or arrow-tip specifiers, see below). Vertical crossings remain
-vertical under scalings; the current <pos> still moves by 1 coordinate
-unit in the `down' direction. Similarly horizontal crossings remain
-horizontal. The single character |-| is a shorthand version for |[-1]|,
-effectively giving a half-turn rotation in a rectangular basis.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xydef@\xykparsescale@{%
- \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsescale@}%
- \else\addDASH@\ifx\next \addDASH@\DN@{\def\xykSCALE@@{-1}%
- \xyFN@\xykparser@}%
- \else\ifx[\next \DN@[##1]{\dimen@=##1\p@
- \ifdim\dimen@=\z@\xywarning@{\xykscaleerror@}%
- \else\edef\xykSCALE@@{\expandafter\removePT@\the\dimen@}\fi
- \xyFN@\xykparser@}%
- \else\ifx~\next \DN@~##1##2##3##4{%
- \def\xykSCALE@@{@{##1}{##2}{##3}{##4}}\xyFN@\xykparser@}%
- \else\DN@{\xyFN@\xykparser@}%
- \fi\fi\fi\fi \next@}
-
-\xydef@\xykscaleerror@{Ignoring zero scale factor}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[alter size and shape]
-A knot-piece need not be rectangular. By specifying
-|~|<pos>$_1$<pos$_2$><pos$_3$><pos$_4$> the four corners |UL|, |UR|,
-|DL|, |DR| are set to the given <pos>s respectively.
-The local basis is established so that
-\begin{eqnarray*}
-r\hbox{--hop}&\!\!\leftrightarrow\!\!&
-{\textstyle{1\over2}}\bigl(\hbox{<pos$_2$>}-\hbox{<pos$_1$>}
-+\hbox{<pos$_4$>} -\hbox{<pos$_3$>}\bigr) \\
-u\hbox{--hop}&\!\!\leftrightarrow\!\!&
-{\textstyle{1\over2}}\bigl(\hbox{<pos$_1$>}-\hbox{<pos$_3$>}
-+\hbox{<pos$_2$>} -\hbox{<pos$_1$>}\bigr)\;.
-\end{eqnarray*}
-
-\note??=[adjust hole]
-With a non-rectangularly shaped piece it will usually be necessary to
-adjust the place where the `hole' occurs in the `under' string. This is
-done by specifying |@(|<num>|)|, with $0\le <num>\le1$ being the parameter
-value of the new location for the hole.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-%\xydef@\xykobject@{%
-% \ifx\xykSCALE@@\empty\DN@{\xykkeepscale@}%
-% \else \DN@{\xyksavescale@{}}%
-% \fi \next@ }
-
-\xydef@\xykhobject@{\aftergroup\xykhadjust@
- \ifx\xykSCALE@@\empty\DN@{\xykkeepscale@}%
- \else \DN@{\xyksavescale@{}}%
- \fi \next@ }
-
-\xydef@\xykvobject@{\aftergroup\xykvadjust@
- \ifx\xykSCALE@@\empty\DN@{\xykkeepscale@}%
- \else \DN@{\xyksavescale@{}}%
- \fi \next@ }
-
-\xydef@\xykhvobject@{\aftergroup\xykhvadjust@
- \ifx\xykSCALE@@\empty\DN@{\xykkeepscale@}%
- \else \DN@{\xyksavescale@{}}%
- \fi \next@ }
-
-\xydef@\xykhuobject@{\aftergroup\xykhuadjust@
- \ifx\xykSCALE@@\empty\DN@{\xykkeepscale@}%
- \else \DN@{\xyksavescale@{}}%
- \fi \next@ }
-\DOCMODE)
-
-\DOCMODE(
-\xydef@\xyksavescale@#1#2{%
- \expandafter\ifx\the\Edge@c\zeroEdge\relax \def\xyksaveEdgec{}%
- \else
- \edef\xyksaveEdgec{\noexpand\Edge@c={\expandafter\noexpand\the\Edge@c}%
- \L@c=\the\L@c \R@c=\the\R@c \D@c=\the\D@c \U@c=\the\U@c}%
- \fi
-%
- \edef\next@##1##2{\endgroup
- \def\noexpand\xyksaveEdgec{}%
- \def\noexpand\xykSCALE@@\noexpand{##1}%
- \def\noexpand\xykjoincontrol\noexpand{\xykjoincontrol}%
- \noexpand\toks@\noexpand{##2}%
- \noexpand\xy@@{\def\noexpand\xyksaveEdgec{}%
- \def\noexpand\xykSCALE@@{##1}%
- \def\noexpand\xykjoincontrol{\xykjoincontrol}}}%
- \expandafter\expandafter\expandafter\next@
- \expandafter\expandafter\expandafter{\expandafter\xykSCALE@@\expandafter}%
- \expandafter{\the\toks@}%
-%
- \xykrescale@ #1\the\toks@\restore\POS#2}
-
-\xydef@\xykkeepscale@{%
- \edef\next@##1{\endgroup \noexpand\toks@={##1}%
- \def\noexpand\xykjoincontrol{\xykjoincontrol}}%
- \expandafter\next@\expandafter{\the\toks@}%
- \def\xykSCALE@@{}\def\xyksaveEdgec{}%
- \xy@@{\def\xykSCALE@@{}\def\xyksaveEdgec{}}%
- \edef\next@{\def\noexpand\xykjoincontrol{\xykjoincontrol}}%
- \expandafter\xy@@\expandafter{\next@}%
- \xyknoflexscale@ \the\toks@}
-\DOCMODE)
-
-\DOCMODE(
-\xydef@\xykrescale@{\expandafter\xykcheckscale@\xykSCALE@@ !}%
-
-\xydef@\xykcheckscale@#1#2!{%
- \expandafter\DN@\expandafter{\codeof{#1}}%
- \expandafter\DNii@\expandafter{\codeof{@}}%
- \ifx\next@\nextii@\relax\DN@{\xykflexiscale@#2%
- \xy@@{\divide\X@xbase2\divide\X@ybase2\divide\Y@xbase2\divide\Y@ybase2%
- \def\xykSCALE@@{}}\def\xykSCALE@@{}%
- \expandafter\toks@\expandafter{\afterFLEX@}}%
- \else\DN@{\save \xykrescale@@}\fi \next@ }
-
-\xydef@\xykflexiscale@{%
- \expandafter\def\expandafter\afterFLEX@\expandafter{\the\toks@}%
- \xykflexiscale@@ }
-
-\xydef@\xykrescale@@{%
- \edef\next@{\X@xbase=\xykSCALE@@\X@xbase \X@ybase=\xykSCALE@@\X@ybase
- \Y@xbase=\xykSCALE@@\Y@xbase \Y@ybase=\xykSCALE@@\Y@ybase}%
- \expandafter\xy@@\expandafter{\next@}%
- \ifdim\xykSCALE@@\p@<\z@\relax \DN@{\xyknegflexscale@}%
- \else\DN@{\xyknoflexscale@}\fi \next@ }
-\DOCMODE)
-
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4{\save="@",
- #1,="^<",\POS"@",#2,="^>",\POS"@",#3,="_<",\POS"@",#4,="_>",
- (0,0);"^>"-"^<"+"_>"-"_<":"^<"-"_<"+"^>"-"_>"::}}
-\xylet@\xykflexiscale@@=\next
-
-{\xyuncatcodes \gdef\next{\save ="^<",
- +(1,0)="^>",-(1,1)="_<",+(1,0)="_>"\restore }}
-\xylet@\xyknoflexscale@@=\next
-\xylet@\xyknoflexscale@=\next
-
-{\xyuncatcodes \gdef\next{\save ="_>",
- +(-1,1)="^<",+(1,0)="^>",-(1,1)="_<"\restore }}
-\xylet@\xyknegflexscale@@=\next
-\xylet@\xyknegflexscale@=\next
-
-{\xyuncatcodes \gdef\next{\save ="_<",
- +(1,0)="_>",+(-1,1)="^<",+(1,0)="^>"\restore }}
-\xylet@\xykhscale@@=\next
-
-{\xyuncatcodes \gdef\next{\save ="^>",
- -(1,0)="^<",+(1,-1)="_>",-(1,0)="_<"\restore }}
-\xylet@\xykvscale@@=\next
-\DOCMODE)
-
-
-\DOCMODE(
-\xydef@\xykhadjust@{%
- \let\xyknoflexscale@=\xykhscale@@
- \let\xyknegflexscale@=\xyknegflexscale@@ }
-
-\xydef@\xykvadjust@{%
- \let\xyknoflexscale@=\xyknoflexscale@@
- \let\xyknegflexscale@=\xykhscale@@ }
-
-\xydef@\xykhvadjust@{%
- \let\xyknoflexscale@=\xyknoflexscale@@
- \let\xyknegflexscale@=\xyknegflexscale@@ }
-
-\xydef@\xykhuadjust@{%
- \let\xyknoflexscale@=\xykhscale@@
- \let\xyknegflexscale@=\xykvscale@@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[arrowtips, breaks and labels]
-The |knot| feature allows for the easy placement of the following objects
-along the strings of a crossing:\par
-\begin{itemize}
-\item labels on the strings;
-\item arrowheads for direction or orientation;
-\item holes in strings, allowing another string to be drawn passing over.
-\end{itemize}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note ??=[which string]
-The characters |<|, |>| and |||| are used to indicate to which string
-portion the object is associated; with |||| denoting the string which
-crosses the other, while |<| and |>| denote the initial and final
-portions of the `crossed' string.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xydef@\xykprebreak@{%
- \ifx\xykprebreak@@\empty\addtotoks@{{}}\else
- \expandafter\addtotoks@\expandafter{\expandafter{\xykprebreak@@}}\fi}
-
-\xydef@\xykpostbreak@{%
- \ifx\xykpostbreak@@\empty\addtotoks@{{}}\else
- \expandafter\addtotoks@\expandafter{\expandafter{\xykpostbreak@@}}\fi}
-
-\xydef@\xykmidbreak@{%
- \ifx\xykmidbreak@@\empty\addtotoks@{{}}\else
- \expandafter\addtotoks@\expandafter{\expandafter{\xykmidbreak@@}}\fi}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note ??=[simple label]
-A simple label enclosed in braces, for example |\vcross>{x}|, is set in
-math-mode using the |\labelstyle|, at a pre-determined place on the string
-portion, shifted in either the `above' or `below' direction from the curve
-at this point. (For each crossing depicted in figure~??[f.crossings] only
-default values are used for the place and shift-direction.)
-
-\note ??=[knot object]
-If the first character within the braces |{..}| is |*| e.g.
-|\htwist>{*|<object>|}|, then a general <object> may be placed as a label.
-Furthermore if the first character is |^| or |_| or ||||, then
-the interpretation is, e.g. |\vtwist<{^|<anchor><it>|}|,
-as in ??g[xyarrow.doc:f.arrow]
-to place <it> as a label along an |\ar| of the |arrow| feature.
-
-\note ??=[orientation]
-A second character |<| or |>| specifies that an arrowhead should appear
-at the pre-determined place on the chosen string.
-Here |>| denotes an arrowhead pointing with the natural orientation,
-while |<| points against. Due to the curvature of the strings, it is
-usually best to |\UseComputerModernTips| rather than normal arrow-tips.
-
-\note ??=[hole in the string]
-To generate a `hole' use |\knothole|, or simply |\khole|, as following
-token. This generates a `break', in the sense of
-??g[xyarrow.doc:break with <it>].
-Indeed such a `hole' is used to separate the two portions of the `crossed'
-string. Default size for the hole is 5pt, which is alterable via
-|\knotholesize{|<dimen>|}|; normally used to set the size for {\em all}\/
-holes in a diagram.
-
-\note ??=[null-break]
-If the resulting |\khole| is either too large or perhaps non-existent,
-this could be due to a technicality in the way breaks in curves are
-handled. This problem should not occur with the standard crossings, using
-a rectangular basis, but it may occur with non-rectangular bases.
-An easy `fix' is to include an extra {\em null-break}\ on the string,
-using |<|||, |>||| or ||||||, which should place the zero-sized break at
-parameter value .5 on the curve. The specification should precede a
-|\khole| at a higher parameter value, or come after one at a lower value.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The aim of the above `fix' is to position the null-break as close as
-possible to where the curve is farthest from the line joining its
-end-points, which is usually at parameter value |(.5)|.
-
-\DOCMODE(
-\xydef@\xykparsebreak@{%
- \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsebreak@}%
- \else \addLT@\ifx\next
- \expandafter\appendtoholder@\xykbacktemp@\next@
- \addLT@\DN@{\xyFN@\xykparser@}%
- \else \addGT@\ifx\next
- \expandafter\appendtoholder@\xykforetemp@\next@
- \addGT@\DN@{\xyFN@\xykparser@}%
- \else \ifx|\next
- \expandafter\appendtoholer@\xyknulltemp@\next@
- \DN@|{\xyFN@\xykparser@}%
- \else \ifx\next \bgroup\DN@##1{\checkgroupbreak@##1@}%
- \else \ifx (\next\DN@(##1){\xyadjustknotPLACE@i##1@@%
- \xyFN@\xykparsebreak@}%
- \else \ifx\next \knothole@\DN@##1{\expandafter\appendtoholder@@
- \expandafter{\expandafter|\xyknotPLACE\knothole}\next@
- \xyFN@\xykparser@}%
- \else
- \expandafter\xykdefaultbreak@\xykbreak@\next@
- \DN@{\xyFN@\xykparser@}%
- \fi\fi\fi\fi\fi\fi\fi \next@ }
-\DOCMODE)
-
-Templates for arrowheads.
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next{^>*\dir{>}}}
-\xylet@\xykforetips@=\next
-
-{\xyuncatcodes \gdef\next{^<*\dir{<}}}
-\xylet@\xykbacktips@=\next
-
-{\xyuncatcodes \gdef\next{*!/-1pt/=0\dir{>}}}
-\xylet@\xykforetemp@=\next
-
-{\xyuncatcodes \gdef\next{*!/1pt/=0\dir{<}}}
-\xylet@\xykbacktemp@=\next
-
-{\xyuncatcodes \gdef\next{*=<\xykholesize>[o]{}}}
-\xylet@\xykholetemp@=\next
-\xydef@\knothole@{\hbox to\xykholesize{%
- \dimen@=\xykholesize \divide\dimen@\tw@
- \hfill \vrule height\dimen@ depth\dimen@ width\z@ }}
-\xylet@\knothole=\knothole@
-\xylet@\khole=\knothole@
-
-{\xyuncatcodes \gdef\next{*=<0pt>{}}}
-\xylet@\xyknulltemp@=\next
-\xylet@\xykbreak@=\xyknulltemp@
-\DOCMODE)
-
-When the next token is a begin-group character |{| then look at the first
-token inside the group. If it is |^|,|_| or |||| then the group contents
-will be an <anchor> for user-chosen places along the string.
-Otherwise the place is taken to be the already specified |\xyknotPLACE|
-and the group contains a label, to be set in the usual way for labels,
-using |_| due to the orientation of the curve.
-However if the first token is |*| then the user is assumed to be
-dropping his own label, possibly with <object> modifiers.
-
-\DOCMODE(
-\xydef@\checkgroupbreak@#1#2@{%
- \ifx|#1\DN@{\appendtoholder@@#1#2\next@ \xyFN@\xykparser@}%
- \else \ifx_#1\DN@{\appendtoholder@@_#2\next@ \xyFN@\xykparser@}%
- \else \ifx^#1\DN@{\appendtoholder@@^#2\next@ \xyFN@\xykparser@}%
- \else
- \def\next##1\next{\expandafter\DNii@\expandafter{\xyk@@##1}}%
- \expandafter\next\xyknotPLACE\next
- \ifx*#1%
- \expandafter\DN@\expandafter{%
- \expandafter\appendtoholder@@\nextii@#1#2\next@ \xyFN@\xykparser@}%
- \else %\expandafter\DNii@\expandafter{\expandafter\xyk@@\xyknotPLACE}%
- \expandafter\DN@\expandafter{%
- \expandafter\appendtoholder@@\nextii@{#1#2}\next@ \xyFN@\xykparser@}%
- \fi\fi\fi\fi \next@ }
-\DOCMODE)
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next{%
- \expandafter{\expandafter^\xyknotPLACE##1}}}%
- \DN@{\xydef@\xykholder@@##1}\DNii@{\expandafter\toks@}%
- \expandafter\expandafter\expandafter\next@
- \expandafter\expandafter\expandafter{\expandafter\nextii@\next}
-
-\xydef@\appendtoholder@#1\next@{\xykholder@@{#1}%
- \DN@##1{\expandafter\DN@\expandafter{\xykholder@##1}}%
- \expandafter\next@\expandafter{\the\toks@}\appendtoholder@@@ }
-
-\xydef@\appendtoholder@@#1\next@{%
- \DN@##1\next@{\expandafter\DN@\expandafter{\xykholder@##1}}%
- \next@#1\next@ \appendtoholder@@@}%
-
-\xydef@\appendtoholder@@@{%
- \expandafter\expandafter\expandafter\DN@
- \expandafter\expandafter\expandafter{\next@}%
- \DNii@{\expandafter\def\xykholder@}%
- \expandafter\nextii@\expandafter{\next@}}
-\DOCMODE)
-
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next{%
- \expandafter{\expandafter|\xyknotPLACE##1}}}%
-\DN@{\xydef@\xykholer@@##1}\DNii@{\expandafter\toks@}%
- \expandafter\expandafter\expandafter\next@
- \expandafter\expandafter\expandafter{\expandafter\nextii@\next}
-
-\xydef@\appendtoholer@#1\next@{\xykholer@@{#1}%
- \DN@##1{\expandafter\DN@\expandafter{\xykholder@##1}}%
- \expandafter\next@\expandafter{\the\toks@}\appendtoholder@@@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-??=[knot-labels]
-Multiple breaks, arrow-heads and labels may be specified along the
-two strings of a crossing; simply place their specifications one after
-another; e.g. |<>||>>><{x}||{y}>{z}| was used in figure~??[f.crossings].
-
-The only proviso is that all `breaks' along a single strand must occur
-with increasing order of parameter position. On the `crossed' string
-this includes the automatic `hole' to create space for the other string.
-Hence it is advisable to use just the |(+..)| and |(-..)| variants for
-small adjustments, and to keep these correctly ordered.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xydef@\xykz#1{\let\xyk@@=#1\xy@@{\let\xyk@@=#1}}
-{\xyuncatcodes \global\let\next=_}
-\xylet@\xyk@@=\next
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-??=[adjustment]
-Adjustment of position along the strings can be achieved using a <factor>,
-as in |\vover||(+.1)>|. Allowed syntax is |(|<sign><num>|)| where <sign>
-is |+| or |-| to increment or decrement from the pre-defined value.
-Also allowable are |=| or <empty> to set the parameter position to <num>,
-which must lie between 0 and 1 to have any meaning.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This parses adjustments of the |\xyknotPLACE|.
-
-\DOCMODE(
-\xydef@\xyadjustknotPLACE@i{%
- \ifx\xyknotPLACE\empty\DN@{\dimen@=.5\p@}%
- \else\DN@{\expandafter\xygetknotPLACE@@\xyknotPLACE}%
- \fi \next@ \relax \let\xywhichknotPLACE@@=\xysetknotPLACE@@
- \xyFN@\xyadjustknotPLACE@}
-
-\xydef@\xyadjustknotPLACE@{\expandafter\ifx\space@\next
- \expandafter\DN@\space{\xyFN@\xyadjustknotPLACE@}%
- \else\addDASH@\ifx\next\DN@{\xyadjustknotPLACE@@}%
- \else\addPLUS@\ifx\next\DN@{\xyadjustknotPLACE@@}%
- \else\addEQ@\ifx\next\addEQ@\DN@{\dimen@=\z@ \xyadjustknotPLACE@@}%
- \else \DN@{\dimen@=\z@ \xyadjustknotPLACE@@}%
- \fi\fi\fi\fi \next@}
-
-\xydef@\xyadjustknotPLACE@@#1@@{\advance\dimen@#1\p@
- \expandafter\xysetknotPLACE@\expandafter{\the\dimen@}}
-
-\xydef@\xysetknotPLACE@#1{%
- \expandafter\xywhichknotPLACE@@\expandafter{\removePT@#1}}
-
-{\xyuncatcodes\gdef\next#1{\def\xyknotPLACE{(#1)}}}%
-\xylet@\xysetknotPLACE@@=\next
-
-{\xyuncatcodes \catcode`@=11
- \gdef\next(#1){\DN@\next@{#1}\ifx\next@\empty
- \dimen@=\z@\else\dimen@=#1\p@ \fi}}%
-\xylet@\xygetknotPLACE@@=\next
-\DOCMODE)
-
-These use the same mechanism to adjust parameters stored in
-|\xykpostbreak@@| and |\xykjoincontrol@@|.
-
-\DOCMODE(
-%\xydef@\xyadjustJOIN@i#1@@{\xykjoincontrol@i{#1}}%
-\xydef@\xyadjustJOIN@i{%
- \ifx\xykjoincontrol\empty\DN@{\dimen@=.75\p@}%
- \else\DN@{\expandafter\xygetknotPLACE@@\expandafter(\xykjoincontrol)}%
- \fi \next@ \relax \let\xywhichknotPLACE@@=\xysetjoincontrol@
- \xyFN@\xyadjustknotPLACE@}
-
-%\xydef@\xyadjustBREAK@i#1@@{\def\xykpostbreak@@{|(##1)\knothole}}%
-\xydef@\xyadjustBREAK@i{%
- \ifx\xykpostbreak@@\empty\DN@{\dimen@=.5\p@}%
- \else\DN@{\expandafter\xygetpostBREAK@\xykpostbreak@@}%
- \fi \next@ \relax \let\xywhichknotPLACE@@=\xysetpostbreak@
- \xyFN@\xyadjustknotPLACE@}
-
-\xydef@\xygetpostBREAK@|#1\knothole{\DN@{#1}%
- \ifx\next@\empty\dimen@=.5\p@\else \xygetknotPLACE@@#1\fi}
-
-\xydef@\xysetpostbreak@#1{\def\xykpostbreak@@{|(#1)\knothole}}
-\xydef@\xysetjoincontrol@#1{\edef\xykjoincontrol{#1}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-??=[arrowtips]
-Arrowheads can also be placed at either, or both, ends of of the strings
-forming a crossing. This is governed by a pair of booleans,
-initially |{FF}|.
-It is changed for {\em all}\/ subsequent strings in a diagram by
-|\knottips{..}| where the recognised values are |{FF}|, |{FT}|, |{TF}|
-and |{TT}|, denoting tips (|T|) or not (|F|) at the start and end of each
-string. To add arrowtips at the start of strings in a particular crossing,
-append the 2-character combination |=<|\,; similarly |=>| adds tips at the
-ends, if not already requested. The combinations |==| and |=!| specify
-both (|{TT}|) and none (|{FF}|) respectively.
-These 2-character pairs can be mixed in with any specifications for labels
-and breaks, etc. Multiple pairs compound their effect; in particular
-|=<=>| gives the same result as |==|, while |=!=<| is needed to change
-|{FT}| into |{TF}|.
-
-These are best used with single pieces, as in the following equation.
-%
-\begin{code}
-\UseComputerModernTips \knottips{FT}
-\def\Conway#1{\mathord{\nabla\Bigl[\,
- \raise5pt\xybox{0;/r1pc/:#1}\,\Bigr]}}
-$$
-\Conway\htwist - \Conway\htwistneg
- \;=\; -z\,\Conway\huntwist $$
-\end{code}
-\docode
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xydef@\xykparsetips@{%
- \def\xyknotTIPS@@{}\def\xyknotPLACE{}%
- \let\xykparser@=\xykparsetips@@
- \xyFN@\xykparser@ }
-
-\xydef@\xykparsetips@@{%
- \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsetips@@}%
- \else\addLT@\ifx\next
- \ifx\xyknotTIPS@@\empty \def\xyknotTIPS@@{TF}%
- \else\DN@{FF}\ifx\next@\xyknotTIPS@@ \def\xyknotTIPS@@{TF}%
- \else\DN@{FT}\ifx\next@\xyknotTIPS@@ \def\xyknotTIPS@@{TT}%
- \fi\fi\fi
- \addLT@\DN@{\xyFN@\xykparser@}%
- \else\addGT@\ifx\next
- \ifx\xyknotTIPS@@\empty \def\xyknotTIPS@@{FT}%
- \else\DN@{FF}\ifx\next@\xyknotTIPS@@ \def\xyknotTIPS@@{FT}%
- \else\DN@{TF}\ifx\next@\xyknotTIPS@@ \def\xyknotTIPS@@{TT}%
- \fi\fi\fi
- \addGT@\DN@{\xyFN@\xykparser@}%
- \else\addEQ@\ifx\next \def\xyknotTIPS@@{TT}%
- \addEQ@\DN@{\xyFN@\xykparser@}%
- \else \ifx!\next \def\xyknotTIPS@@{FF}\DN@!{\xyFN@\xykparser@}%
- \else\DN@{\xyFN@\xykparser@}%
- \fi\fi\fi\fi\fi \next@ }
-\DOCMODE)
-
-This reads the setting for tips on string ends.
-
-\DOCMODE(
-\xydef@\xykcheckTIPS@{%
- \ifx\xyknotTIPS@@\empty \edef\xyknotTIPS@@{\xyknotTIPS@}\fi
- \DN@{FF}\ifx\next@\xyknotTIPS@@\def\tmp@{}%
- \else\DN@{FT}\ifx\next@\xyknotTIPS@@
- \expandafter\def\expandafter\tmp@\expandafter{\xykforetips@}%
- \else\DN@{TF}\ifx\next@\xyknotTIPS@@
- \expandafter\def\expandafter\tmp@\expandafter{\xykbacktips@}%
- \else
- \DN@##1\next@{\DN@{\xykforetips@##1}}%
- \expandafter\next@\xykbacktips@\next@
- \DNii@{\expandafter\def\expandafter\tmp@\expandafter}%
- \expandafter\nextii@\expandafter{\next@}%
- \fi\fi\fi \def\xyknotTIPS@@{}}
-
-\xydef@\xyknottips@{%
- \ifx\tmp@\empty\addtotoks@{{}}\else
- \expandafter\addtotoks@\expandafter{\expandafter{\tmp@}}\fi}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%\end{notes}
-
-\subsection*{Joins}
-\note??=[join]
-The ``joins'' are used to connect the loose ends of crossing strings.
-In particular ``loops'' and ``caps'' are for placing on ends of
-horizontal or vertical `twist' and `cross' crossings, leaving the
-current <pos> fixed. The ``bends'' join non-adjacent crossings of
-the same type, either horizontal or vertical.
-
-The |\xcap..| pieces are designed to join adjacent |\xover..| pieces;
-they move $c$ either vertically or horizontally,
-as appropriate. Finally the |\xbend..| pieces allow for smooth joins
-of $45^\circ$ slopes to horizontal or vertical slopes. For these the
-actual positioning of the piece, see figure~??[f.knotjoins],
-is not entirely obvious.
-
-\begin{figure*}[ht]
-$$
-\knotholesize{5pt}\UseComputerModernTips
-\xygraph{!{0;/r2pc/:}="O" %[]!{\NoPSspecials}
- [ll] !{*=0\dir{o},{\vloop<>|>>><{x}|{y}>{z}},*=0\dir{x}}
- [rr]!{*=0\dir{o},{\vcap<>|>>><{x}|{y}>{z}},*=0\dir{x}}
- [urr]!{*=0\dir{o},{\vcap-<>|>>><{x}|{y}>{z}},*=0\dir{x}}
- [u(.5)rr]!{*=0\dir{o},{\vloop-<>|>>><{x}|{y}>{z}},*=0\dir{x}}
- [d(.5)rr]!{*=0\dir{o},{\hloop<>|>>><{x}|{y}>{z}},*=0\dir{x}}
- [rr]!{*=0\dir{o},{\hcap<>|>>><{x}|{y}>{z}},*=0\dir{x}}
- [rrr]!{*=0\dir{o},{\hcap-<>|>>><{x}|{y}>{z}},*=0\dir{x}}
- [rr]!{*=0\dir{o},{\hloop-<>|>>><{x}|{y}>{z}},*=0\dir{x}}
- "O"!{+(.5,-.5)}
- [ll]!{*\txt\small\tt{\string\vloop}} [rr]!{*\txt\small\tt{\string\vcap}}
- [rr]!{*\txt\small\tt{\string\vcap-}}[rr]!{*\txt\small\tt{\string\vloop-}}
- [rr]!{*\txt\small\tt{\string\hloop}}[rr]!{*\txt\small\tt{\string\hcap}}
- [rr]!{*\txt\small\tt{\string\hcap-}}[rr]!{*\txt\small\tt{\string\hloop-}}
- "O"!{-(1,3)} %[]!{\NoPSspecials}
- [ur]!{*=0\dir{o},{\xcapv<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [urr]!{*=0\dir{o},{\sbendv<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [r] !{*=0\dir{o},{\zbendv<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [dr] !{*=0\dir{o},{\sbendh<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [r] !{*=0\dir{o},{\zbendh<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [r] !{*=0\dir{o},{\xcaph<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- "O"!{-(1.5,3.5)}
- [rr]!{*\txt\small\tt{\string\xcapv}}
- [rr]!{*\txt\small\tt{\string\sbendv}}
- [rr]!{*\txt\small\tt{\string\zbendv}}
- [rr]!{*\txt\small\tt{\string\sbendh}}
- [rr]!{*\txt\small\tt{\string\zbendh}}
- [rr]!{*\txt\small\tt{\string\xcaph}}
-"O"!{+(0,-5)} %[]!{\NoPSspecials}
- [ll] !{*=0\dir{o},{\xbendr<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [ur] !{*=0\dir{o},{\xbendl<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [urr]!{*=0\dir{o},{\xbendu<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [r] !{*=0\dir{o},{\xbendd<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- "O"!{-(3.5,6.5)}
- [rr]!{*\txt\small\tt{\string\xbendr}}
- [rr]!{*\txt\small\tt{\string\xbendl}}
- [rr]!{*\txt\small\tt{\string\xbendu}}
- [rr]!{*\txt\small\tt{\string\xbendd}}
- "O"!{+(2,-5)} %[]!{\NoPSspecials}
- [r(4)] !{*=0\dir{o},{\xbendd-<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [ur] !{*=0\dir{o},{\xbendu-<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [r] !{*=0\dir{o},{\xbendl-<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- [urr] !{*=0\dir{o},{\xbendr-<>|>>><{x}|{y}>{z}},*=0\dir{+}}
- "O"!{+(4.5,-6.5)}
- [rr]!{*\txt\small\tt{\string\xbendd-}}
- [rr]!{*\txt\small\tt{\string\xbendu-}}
- [rr]!{*\txt\small\tt{\string\xbendl-}}
- [rr]!{*\txt\small\tt{\string\xbendr-}}
-}$$
-\caption{knot joins, with orientations, labels and shifts}%
- ??=[f.knotjoins]
-\end{figure*}
-
-\noindent
-Figure~??[f.knotjoins] displays the orientation on the joins.
-Also indicated are default positions for labels and arrow-tips;
-each piece uses the same code,
-e.g. |\vloop|\ |<>||>>><{x}||{y}>{z}|. Furthermore the current <pos>
-before the piece is drawn is marked using $\;^{_{\xybox{*\dir{o}}}}\;$;
-that afterwards is indicated by
-$\;^{_{\xybox{*\dir{x}}}}\;$ or $\;^{_{\xybox{*\dir{+}}}}\;$.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The ability to scale in size and place arrow-tips, breaks, labels etc.
-apply also to <join> pieces. The only difference is\dots
-
-\note??=[join places]
-The three places referred to by |<|\,,||||\,,|>| are all on a single
-string. In particular |||| is always at the middle of the <join>,
-whereas |<| and |>| are at {\em earlier} and {\em later} parameter
-values respectively. Any adjustments??^[adjustment] involving breaks
-should occur in increasing parameter order.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{Parsing}
-
-\DOCMODE(
-\xydef@\xykparsejoin@{%
- \def\xykSCALE@@{}%
- \edef\xyknotPLACE{\xykmidPLACE@}%
- \let\xykparser@=\xykparsejoin@@
- \def\xykdefaultbreak@{\let\xykbreak@=\xykforetemp@
- \def\xyknotPLACE{(.5)}\appendtoholder@}%
-% \edef\xyknotPLACE{\xykmidPLACE@}\appendtoholder@}%
- \xyFN@\xykparsescale@ }
-\DOCMODE)
-
-\DOCMODE(
-{\xyuncatcodes \catcode`@=11
-\gdef\next{%
- \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsejoin@@}%
- \else\addLT@\ifx\next \let\xykbreak@=\xykbacktemp@
- \def\xykdefaultbreak@{\def\xyknotPLACE{(.5)}%
-% \def\xykdefaultbreak@{\edef\xyknotPLACE{\xykmidPLACE@}%
- \appendtoholder@}\addLT@\DN@{\xyprecross@}%
- \else\addGT@\ifx\next \let\xykbreak@=\xykforetemp@
- \def\xykdefaultbreak@{\def\xyknotPLACE{(.5)}%
-% \def\xykdefaultbreak@{\edef\xyknotPLACE{\xykmidPLACE@}%
- \appendtoholder@}\addGT@\DN@{\xypostcross@}%
- \else\ifx|\next \let\xykbreak@=\xyknulltemp@
-% \else\ifx|\next \let\xykbreak@=\xykholetemp@
- \def\xykdefaultbreak@{\def\xyknotPLACE{(.5)}%
-% \def\xykdefaultbreak@{\edef\xyknotPLACE{\xykmidPLACE@}%
- \appendtoholer@}\DN@|{\xymidcross@}%
- \else\addEQ@\ifx\next \addEQ@\DN@{\xyFN@\xykparsetips@@}%
-% \else\addAT@\ifx\next \addAT@\DN@{\xykjoincontrol@}%
- \else\addAT@\ifx\next \addAT@\DN@(##1){%
- \xyadjustJOIN@i##1@@\xyFN@\xykparsejoin@@}%
- \else\DN@{\afterknot@}%
- \fi\fi\fi\fi\fi\fi \next@ }}
-\xylet@\xykparsejoin@@=\next
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\note??=[join control]
-A parameter can be altered, using |@|<adjust>, to effect subtle
-adjustments to the shape of any join. Within a rectangular basis the
-horizontal or vertical tangents are preserved and overall reflection
-or rotation symmetry is preserved. Thus this parameter affects the
-`flatness' of a cap or loop, or the amount of curvature is s-bends and
-z-bends. For |\xcap..|s and |\xbend..|s the $45^\circ$ angle is altered;
-this is especially useful to match the tangents when a knot-piece
-has been specified using the technique of note~??[alter size and shape].
-
-The normal range for these parameters is between 0 and 1. Other values
-can be used with interesting results---the parameter determines the
-location of control points for a B\'ezier cubic curve.
-
-\begin{tabular}{ccl}
-piece & value & effect on\dots \\
-\noalign{\hrule}
-|\..cap| & .25 & flatness of cap;\\
-|\..loop| & .75 & flatness of loop;\\
-|\sbend..| & .75 & curvature in the `s';\\
-|\zbend..| & .75 & curvature in the `z';\\
-|\xcap..| & .5 & height of cap, slope at base;\\
-|\xbend..| & .5 & curvature, slope at base.\\
-\noalign{\hrule}
-\end{tabular}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{notes}
-
-The following example gives three ways of specifying a `trefoil' knot,
-using the |poly| feature to establish the location of the vertices for
-knot-pieces. In each the <crossing>s are calculated to fit together
-smoothly; a different way of creating <join>s is used in each.
-Also the third displays subtle changes of the ??^![join control].
-
-\begin{code}
-\def\TrefoilA{\xygraph{!{0;/r.75pc/:}
- !P3"a"{~>{}}!P9"b"{~:{(1.3288,0):}~>{}}
- !P3"c"{~:{(2.5,0):}~>{}}
- !{\vover~{"b2"}{"b1"}{"a1"}{"a3"}}
- !{"b4";"b2"**\crv{"c1"}}
- !{\vover~{"b5"}{"b4"}{"a2"}{"a1"}}
- !{"b7";"b5"**\crv{"c2"}}
- !{\vover~{"b8"}{"b7"}{"a3"}{"a2"}}
- !{"b1";"b8"**\crv{"c3"}}}}
-%
-\def\TrefoilB{\xygraph{!{0;/r.75pc/:}
- !P3"a"{~>{}}!P9"b"{~:{(1.3288,0):}~>{}}
- !P3"c"{~:{(2.5,0):}~>{}}
- !{\vover~{"b2"}{"b1"}{"a1"}{"a3"}}
- !{\vcap~{"c1"}{"c1"}{"b4"}{"b2"}@(+.1)}
- !{\vover~{"b5"}{"b4"}{"a2"}{"a1"}}
- !{\vcap~{"c2"}{"c2"}{"b7"}{"b5"}@(+.2)}
- !{\vover~{"b8"}{"b7"}{"a3"}{"a2"}}
- !{\vcap~{"c3"}{"c3"}{"b1"}{"b8"}}}}
-%
-\def\TrefoilC{\xygraph{!{0;/r.75pc/:}
- !P3"a"{~>{}}
- !P12"b"{~:{(1.414,0):}~>{}}
- !{\vover~{"b2"}{"b1"}{"a1"}{"a3"}}
- !{\save 0;"b2"-"b5":"b5",
- \xcaph @(+.1)\restore}
- !{\vover~{"b6"}{"b5"}{"a2"}{"a1"}}
- !{\save 0;"b6"-"b9":"b9",
- \xcaph @(+.2)\restore}
- !{\vover~{"b10"}{"b9"}{"a3"}{"a2"}}
- !{\save 0;"b10"-"b1":"b1",
- \xcaph @(+.3)\restore} }}
-$$\TrefoilA\quad\TrefoilB
- \quad\TrefoilC$$
-\end{code}
-\docode
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xydef@\xykjoincontrol@@{.75}%
-\xydef@\xyk@joincontrol@#1{\DN@{#1}%
- \ifx\next@\empty\edef\xykjoincontrol@@{.75}%
- \else\dimen@=#1\p@
- \edef\xykjoincontrol@@{\expandafter\removePT@\the\dimen@}\fi}
-\xylet@\xykjoincontrol\empty %\xyk@joincontrol@
-
-\xydef@\xykjoincontrol@(#1){\DN@{#1}%
- \ifx\next@\empty\edef\xykjoincontrol{\xykjoincontrol@@}%
- \else\dimen@=#1\p@
- \edef\xykjoincontrol{\expandafter\removePT@\the\dimen@}%
- \fi \xyFN@\xykparsejoin@@ }
-
-\xydef@\xykjoincontrol@i#1{\DN@{#1}%
- \ifx\next@\empty\edef\xykjoincontrol{\xykjoincontrol@@}%
- \else\dimen@=#1\p@
- \edef\xykjoincontrol{\expandafter\removePT@\the\dimen@}\fi}
-\DOCMODE)
-
-These macros are common to most joins.
-
-\DOCMODE(
-\xydef@\xykjoin@#1{%
- \expandafter\toks@\expandafter{\expandafter#1\knotSTYLE}}
-
-\xydef@\xyksetjoin@{\xykcheckTIPS@
- \xykprebreak@ \xykmidbreak@ \xykpostbreak@ \xyknottips@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{``cap'' joins:}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The initialisation\dots
-
-\DOCMODE(
-\xydef@\hcap{\begingroup\def\afterknot@{\xyhcap}%
- \def\xykprePLACE@{(.385)}\def\xykpostPLACE@{(.615)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.25}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\vcap{\begingroup\def\afterknot@{\xyvcap}%
- \def\xykprePLACE@{(.385)}\def\xykpostPLACE@{(.615)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.25}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\xcapv{\begingroup\def\afterknot@{\xyxcapv}%
- \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.8)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\xcaph{\begingroup\def\afterknot@{\xyxcaph}%
- \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.8)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
- \xyFN@\xykparsejoin@ }%
-\DOCMODE)
-
-The interface\dots
-
-\DOCMODE(
-\xydef@\xyvcap{\xykjoin@\xykcapv \xyksetjoin@ \xykhobject@{}}
-\xydef@\xyhcap{\xykjoin@\xykcaph \xyksetjoin@ \xykvobject@{}}
-\xydef@\xyxcapv{\xykjoin@\xykxcapv \xyksetjoin@ \xykvobject@{+(0,-1)}}
-\xydef@\xyxcaph{\xykjoin@\xykxcaph \xyksetjoin@ \xykhobject@{+(1,0)}}
-\DOCMODE)
-
-The drawing code\dots
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "_>",{\xyksaveEdgec},{\xykz_\ar #1@'{"^>"**{}?(\xykjoincontrol)@+
- ,?-(.25,0)@+,"_<";"^<"**{}?+(.25,0)@+,?(\xykjoincontrol)@+}
- "_<"#3#4#5#6},\restore \POS#7}}
-\xylet@\xykcapv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "_<",{\xyksaveEdgec},{\xykz_\ar #1@'{"_>"**{}?(\xykjoincontrol)@+,
- ?+(0,.25)@+,"^<";"^>"**{}?-(0,.25)@+,?(\xykjoincontrol)@+}
- "^<"#3#4#5#6}
- \restore \POS#7}}
-\xylet@\xykcaph=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "^>";"_>"**{}?="^_","^<";"_<"**{}?;"^_",**{}?(\xykjoincontrol)="^_",
- "_<",{\xyksaveEdgec},{\xykz_\ar #1@'{"^_"@+}
- "^<"#3#4#5#6},\restore \POS#7}}
-\xylet@\xykxcapv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "^<";"^>"**{}?="^_","_<";"_>"**{}?;"^_",**{}?(\xykjoincontrol)="^_",
- "_>",{\xyksaveEdgec},{\xykz_\ar #1@'{"^_"@+}
- "_<"#3#4#5#6},\restore \POS#7}}
-\xylet@\xykxcaph=\next
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{``loop'' joins:}
-
-The initialisation and interface\dots
-
-\DOCMODE(
-\xydef@\hloop{\begingroup\def\afterknot@{\xyhloop}%
- \def\xykprePLACE@{(.07)}\def\xykpostPLACE@{(.93)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.75}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\vloop{\begingroup\def\afterknot@{\xyvloop}%
- \def\xykprePLACE@{(.07)}\def\xykpostPLACE@{(.93)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.75}%
- \xyFN@\xykparsejoin@ }%
-
-\xydef@\xyvloop{\xykjoin@\xykloopv \xyksetjoin@ \xykhobject@{}}
-\xydef@\xyhloop{\xykjoin@\xyklooph \xyksetjoin@ \xykvobject@{}}
-\DOCMODE)
-
-The drawing code\dots
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "_>",{\xykz_\ar #1@'{"^>"**{}?(\xykjoincontrol)@+,?(1.25)-(.25,0)@+,
- "_<";"^<"**{}?(1.25)+(.25,0)@+,?(\xykjoincontrol)@+}"_<"#3#4#5#6}
- \restore \POS#7}}
-\xylet@\xykloopv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "_<",{\xykz_\ar #1@'{"_>"**{}?(\xykjoincontrol)@+,?(1.25)+(0,.25)@+,
- "^<";"^>"**{}?(1.25)+(0,-.25)@+,?(\xykjoincontrol)@+}"^<"#3#4#5#6}
- \restore \POS#7}}
-\xylet@\xyklooph=\next
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{``bend'' joins:}
-
-The initialisation\dots
-
-\DOCMODE(
-\xydef@\zbendh{\begingroup\def\afterknot@{\xyzbendh}%
- \def\xykprePLACE@{(.25)}\def\xykpostPLACE@{(.75)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{\xykjoincontrol@@}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\sbendv{\begingroup\def\afterknot@{\xysbendv}%
- \def\xykprePLACE@{(.25)}\def\xykpostPLACE@{(.75)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{\xykjoincontrol@@}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\sbendh{\begingroup\def\afterknot@{\xysbendh}%
- \def\xykprePLACE@{(.25)}\def\xykpostPLACE@{(.75)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{\xykjoincontrol@@}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\zbendv{\begingroup\def\afterknot@{\xyzbendv}%
- \def\xykprePLACE@{(.25)}\def\xykpostPLACE@{(.75)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{\xykjoincontrol@@}%
- \xyFN@\xykparsejoin@ }%
-
-
-\xydef@\xbendr{\begingroup\def\afterknot@{\xyxbendr}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.75)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\xbendl{\begingroup\def\afterknot@{\xyxbendl}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.75)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\xbendu{\begingroup\def\afterknot@{\xyxbendu}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.75)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
- \xyFN@\xykparsejoin@ }%
-\xydef@\xbendd{\begingroup\def\afterknot@{\xyxbendd}%
- \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.75)}%
- \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
- \xyFN@\xykparsejoin@ }%
-\DOCMODE)
-
-
-The interface\dots
-
-\DOCMODE(
-\xydef@\xyzbendh{\xykjoin@\xykzbendh \xyksetjoin@ \xykhvobject@{+(1,-1)}}
-\xydef@\xysbendv{\xykjoin@\xyksbendv \xyksetjoin@ \xykhvobject@{+(1,-1)}}
-\xydef@\xysbendh{\xykjoin@\xyksbendh \xyksetjoin@ \xykhuobject@{+(1,1)}}
-\xydef@\xyzbendv{\xykjoin@\xykzbendv \xyksetjoin@ \xykhuobject@{+(1,1)}}
-
-\xydef@\xyxbendr{\xykjoin@\xykxbendr \xyksetjoin@ \xykhvobject@{+(1,-1)}}
-\xydef@\xyxbendl{\xykjoin@\xykxbendl \xyksetjoin@ \xykhvobject@{+(0,-1)}}
-\xydef@\xyxbendu{\xykjoin@\xykxbendu \xyksetjoin@ \xykhvobject@{+(1,0)}}
-\xydef@\xyxbendd{\xykjoin@\xykxbendd \xyksetjoin@ \xykhvobject@{+(1,-1)}}
-\DOCMODE)
-
-
-The implementation\dots
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "^<",{\xyksaveEdgec},
- {\xykz^\ar #1@'{"^>"**{}?(\xykjoincontrol)@+,
- "_>";"_<"**{}?(\xykjoincontrol)@+}"_>"#3#4#5#6}%
- \restore \POS#7}}
-\xylet@\xykzbendh=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "^<",{\xyksaveEdgec},
- {\xykz_\ar #1@'{"_<"**{}?(\xykjoincontrol)@+,
- "_>";"^>"**{}?(\xykjoincontrol)@+}"_>"#3#4#5#6}%
- \restore \POS#7}}
-\xylet@\xyksbendv=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "_<",{\xyksaveEdgec},
- {\xykz_\ar #1@'{"_>"**{}?(\xykjoincontrol)@+,
- "^>";"^<"**{}?(\xykjoincontrol)@+}"^>"#3#4#5#6}%
- \restore \POS#7}}
-\xylet@\xyksbendh=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "_<",{\xyksaveEdgec},
- {\xykz^\ar #1@'{"^<"**{}?(\xykjoincontrol)@+,
- "^>";"_>"**{}?(\xykjoincontrol)@+}"^>"#3#4#5#6}%
- \restore \POS#7}}
-\xylet@\xykzbendv=\next
-
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "^<"-(0,.5),{\xyksaveEdgec},
- {\xykz_\ar #1@'{"_<";"_>"**{}?(\xykjoincontrol)@+,}"_>"#3#4#5#6}%
- \restore \POS#7}}
-\xylet@\xykxbendr=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "^>"-(0,.5),{\xyksaveEdgec},
- {\xykz^\ar #1@'{"_>";"_<"**{}?(\xykjoincontrol)@+,}"_<"#3#4#5#6}%
- \restore \POS#7}}
-\xylet@\xykxbendl=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "_<"+(.5,0),{\xyksaveEdgec},
- {\xykz_\ar #1@'{"_>";"^>"**{}?(\xykjoincontrol)@+,}"^>"#3#4#5#6}%
- \restore \POS#7}}
-\xylet@\xykxbendu=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
- "^<"+(.5,0),{\xyksaveEdgec},
- {\xykz^\ar #1@'{"^>";"_>"**{}?(\xykjoincontrol)@+,}"_>"#3#4#5#6}%
- \restore \POS#7}}
-\xylet@\xykxbendd=\next
-
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{Changing the string-style}
-%
-It is not necessary to use solid curves; any style available to curves
-and arrows can be chosen using\dots
-%
-\begin{defs}
-|\knotstyle{|<char>|}| & use |\dir{|<char>|}| \cr
-|\knotstyles{|<char>|}{|<char>|}| & two styles \cr
-|\knotSTYLE{|<code>|}| & use <code> \cr
-\end{defs}
-%
-In each case the new style applies to {\em all} subsequent knot pieces,
-except that the two styles apply only to crossings.
-The latter case allows use of object <modifier>s. The <code> consists of
-two groups |{..}{..}|\,, each containing <arrow> forms, as in
-??g[xyarrow.doc:f.arrow] and notes~??g[xyarrow.doc:build arrow],
-??g[xyarrow.doc:object <modifier>s].
-Only the first <arrow> form is used with <join>s whereas the two forms
-are used respectively with the two strings of a <crossing> in the order
-that they are drawn.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next{{@{-}}{@{-}}}}
-\xylet@\knotSTYLE=\next
-
-{\xyuncatcodes \gdef\next#1{\def\knotSTYLE{{@{#1}}{@{#1}}}}}
-\xylet@\knotstyle=\next
-
-{\xyuncatcodes \gdef\next#1#2{\def\knotSTYLE{{@{#1}}{@{#2}}}}}
-\xylet@\knotstyles=\next
-
-{\xyuncatcodes \gdef\next#1{\def\knotSTYLE{#1}}}
-\xylet@\KNOTstyle=\next
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Initialisation:}\ default values for the methods.
-
-\DOCMODE(
-\xydef@\knotholesize@#1{\def\xykholesize{#1}}
-\xydef@\xykholesize{5pt}
-\xylet@\knotholesize=\knotholesize@
-\xylet@\holesize=\knotholesize@
-
-\xydef@\knottips#1{\def\xyknotTIPS@{#1}}
-\xydef@\xyknotTIPS@{FF}
-\xydef@\xyknotTIPS@@{}
-
-\xydef@\xykSCALE@@{}
-
-%\xydef@\xyknotbreak@@{}%
-\xydef@\xykprebreak@@{}%
-\xydef@\xykpostbreak@@{}%
-\xydef@\xykmidbreak@@{}%
-
-\xydef@\xykprePLACE@{(.25)}%
-\xydef@\xykpostPLACE@{(.75)}%
-\xydef@\xykmidPLACE@{}%
-\xylet@\xykPLACE@=\xykmidPLACE@
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%\subsection*{Flexible crossings}
-
-%Xtwist
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-{\gdef\next#1#2#3#4{%\message{#1:#2:#3:#4}%
- \save(0,0);"#2"-"#1"+"#4"-"#3":(.5,0):
- "#3"-"#1"+"#4"-"#2"::(0,.5)::}}
-\xylet@\xykflexbase@=\next
-\xylet@\xykflexbase=\xykflexbase@
-\DOCMODE)
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8{\xykflexbase{#1}{#2}{#3}{#4}%
-% \save(0,0);"#2"-"#1"+"#4"-"#3":(.5,0):
-% "#3"-"#1"+"#4"-"#2"::(0,.5)::
- "#1",{\ar @{#5}@'{"#1"+(0,.125)@++(.1875,.125)@+,
- "#4"-(.1875,.25)@++(.1875,.125)@+}"#4" #6},
- "#2",{\ar @{#5}@'{"#2"+(0,.125)@++(-.1875,.125)@+,
- "#3"+(.1875,-.25)@++(-.1875,.125)@+}"#3" #7}%
-\restore \POS#8}}
-\xylet@\Xtwist=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8{\xykflexbase{#1}{#2}{#3}{#4}%
-% \save(0,0);"#2"-"#1"+"#4"-"#3":(.5,0):
-% "#3"-"#1"+"#4"-"#2"::(0,.5)::
- "#1",{\ar @{#5}@'{"#1"+(0,.0625)@++(.1875,.0625)@+,
- "#3"+(.1875,-.125)@++(-.1875,.0625)@+}"#3" #6},
- "#2",{\ar @{#5}@'{"#2"+(0,.0625)@++(-.1875,.0625)@+,
- "#4"-(.1875,.125)@++(.1875,.0625)@+}"#4" #7}%
-\restore \POS#8}}
-\xylet@\Xuntwist=\next
-\DOCMODE)
-
-
-%Xover
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\xykflexbase{#1}{#2}{#3}{#4}%
-% \save(0,0);"#2"-"#1"+"#4"-"#3":(.5,0):
-% "#3"-"#1"+"#4"-"#2"::(0,.5)::
- "#1",{\ar @{#5}@'{"#1"+(.1875,.0625)@++(.1875,.1875)@+,
- "#4"+(-#9,-.125)@+}"#4" #6},
- "#2",{\ar @{#5}@'{"#2"+(-.1875,.0625)@++(-.1875,.1875)@+,
- "#3"+(#9,-.125)@+}"#3" #7}%
-\restore \POS#8}}
-\xylet@\Xover=\next
-
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\xykflexbase{#1}{#2}{#3}{#4}%
-% \save(0,0);"#2"-"#1"+"#4"-"#3":(.5,0):
-% "#3"-"#1"+"#4"-"#2"::(0,.5)::
- "#1",{\ar @{#5}@'{"#1"+(.1875,.0625)@++(.1875,.1875)@+,
- "#2"+(-.1875,.0625)@+}"#2" #6},
-% "#3"+(#9,-.125)@+}"#3" #6},
- "#3",{\ar @{#5}@'{"#3"+(#9,-.125)@+,"#3"+(.25,-.25)@+,
-% "#2",{\ar @{#5}@'{"#2"+(-.1875,.0625)@++(-.1875,.1875)@+,
- "#4"+(-#9,-.125)@+}"#4" #7}%
-\restore \POS#8}}
-\xylet@\Xunover=\next
-\DOCMODE)
-
-
-%Xcap
-
-\DOCMODE(
-{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\xykflexbase{#1}{#2}{#3}{#4}%
-% \save(0,0);"#2"-"#1"+"#3"-"#4":(.5,0):
-% "#4"-"#1"+"#3"-"#2"::(0,.5)::
- "#1",{\ar @{#5}@'{"#1"+(0,.125)@++(.125,.25)@+,
- "#4"+(-.125,.375)@++(.125,-.25)@+}"#4" #6},
-\restore \POS#7}}
-\xylet@\Xcap=\next
-\DOCMODE)
-
-
-%XXover
-
-\DOCMODE(
-{\xyuncatcodes \catcode`@=11
- \gdef\next#1#2#3#4#5#6#7#8#9{\dimen@=#1\p@
- \ifdim\dimen@=\z@ \DN@{\Xunover{#2}{#3}{#4}{#5}{#8}{#6}{#7}{"#5"}}%
- \else\ifdim\dimen@>\z@
- \DNii@{#6}\ifx\nextii@\empty
- \DN@{\Xover{#2}{#3}{#4}{#5}{#8}{|(.45)\knothole}{#7}{"#5"}}%
- \else \DN@{\Xover{#2}{#3}{#4}{#5}{#8}{#6}{#7}{"#5"}}\fi
- \else
- \DNii@{#7}\ifx\nextii@\empty
- \DN@{\Xover{#2}{#3}{#4}{#5}{#8}{#6}{|(.45)\knothole}{"#5"}}%
- \else\DN@{\Xover{#2}{#3}{#4}{#5}{#8}{#6}{#7}{"#5"}}\fi
- \fi\fi
- \def\tmp@{{#9}}\ifx\tmp@\empty\def\tmp@{{0}}\else\dimen@=#9\p@\fi
- \expandafter\next@\tmp@ }}
-\xylet@\XXover=\next
-
-{\xyuncatcodes \catcode`@=11
- \gdef\next#1#2#3#4#5#6#7#8{\dimen@=#1\p@
- \ifdim\dimen@=\z@ \DN@{\Xuntwist{#2}{#4}{#3}{#5}{#8}{#6}{#7}{"#5"}}%
- \else\ifdim\dimen@>\z@
- \DNii@{#6}\ifx\nextii@\empty
- \DN@{\Xtwist{#2}{#4}{#3}{#5}{#8}{|(.45)\knothole}{#7}{"#5"}}%
- \else \DN@{\Xtwist{#2}{#4}{#3}{#5}{#8}{#6}{#7}{"#5"}}\fi
- \else
- \DNii@{#7}\ifx\nextii@\empty
- \DN@{\Xtwist{#2}{#4}{#3}{#5}{#8}{#6}{|(.45)\knothole}{"#5"}}%
- \else\DN@{\Xtwist{#2}{#4}{#3}{#5}{#8}{#6}{#7}{"#5"}}\fi
- \fi\fi \next@ }}
-\xylet@\XXtwist=\next
-
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
- simplified switch-like interface
-
-
-\DOCMODE(
-{\xyuncatcodes \catcode`@=11
- \gdef\next#1#2#3#4{\dimen@=#1\p@
- \ifdim\dimen@=\z@ \DN@{\xykuncrossv{#4}{#2}{#3}{+(0,-1)}}%
- \else\ifdim\dimen@>\z@
- \DNii@{#2}\ifx\nextii@\empty
- \DN@{\xyktwistv{#4}{|\knothole}{#3}{+(1,0)}}%
- \else \DN@{\xyktwistv{#4}{#2}{#3}{+(1,0)}}\fi
- \else
- \DNii@{#3}\ifx\nextii@\empty
- \DN@{\xyktwistv{#4}{#2}{|\knothole}{+(0,-1)}}%
- \else\DN@{\xyktwistv{#4}{#2}{#3}{+(0,-1)}}\fi
- \fi\fi \next@ }}
-\xylet@\Vcross=\next
-
-{\xyuncatcodes \catcode`@=11
- \gdef\next#1#2#3#4{\dimen@=#1\p@
- \ifdim\dimen@=\z@ \DN@{\xykuncrossh{#4}{#2}{#3}{+(0,-1)}}%
- \else\ifdim\dimen@<\z@
- \DNii@{#2}\ifx\nextii@\empty
- \DN@{\xyktwisth{#4}{|\knothole}{#3}{+(1,0)}}%
- \else \DN@{\xyktwisth{#4}{#2}{#3}{+(1,0)}}\fi
- \else
- \DNii@{#3}\ifx\nextii@\empty
- \DN@{\xyktwisth{#4}{}{|\knothole}{+(1,0)}}%
- \else\DN@{\xyktwisth{#4}{#2}{#3}{+(1,0)}}\fi
- \fi\fi \next@ }}
-\xylet@\Hcross=\next
-
-{\xyuncatcodes \catcode`@=11
- \gdef\next#1#2#3{\dimen@=#1\p@ \save
- \ifdim\dimen@<\z@
- \DN@{\POS="@",p="@@",(0,0);(-1,0):(0,-1)::"@@";"@",}%
- \else\DN@{}\fi
- \next@ \xykcaph{#3}{#2}\restore }}
-\xylet@\Hcap=\next
-
-{\xyuncatcodes \catcode`@=11
- \gdef\next#1#2#3{\dimen@=#1\p@ \save
- \ifdim\dimen@<\z@
- \DN@{\POS="@",p="@@",(0,0);(0,-1)::"@@";"@",}%
- \else\DN@{}\fi
- \next@ \xykcapv{#3}{#2}\restore }}
-\xylet@\Vcap=\next
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xyknot.doc,v $
-% Revision 3.4 1997/05/18 01:13:24 ross
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/18 09:20:49 ross
-% no changes
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% Created by Ross Moore, September 1994.
-\DOCMODE)
diff --git a/Master/texmf-dist/source/generic/xypic/xylatex.ini b/Master/texmf-dist/source/generic/xypic/xylatex.ini
deleted file mode 100644
index 3ba119f8437..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xylatex.ini
+++ /dev/null
@@ -1,77 +0,0 @@
-%% $Id: xylatex.ini,v 3.3 1996/12/19 03:31:56 krisrose Exp $ -*-latex-*-
-%%
-%% Generate LaTeX + Xy-pic format file.
-%% Copyright (c) 1993-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-
-% Load LaTeX (2e) but don't dump yet.
-% (This ca
-
-\let\xypicsaveddump=\dump
-\let\dump=\endinput
-\input latex.ltx
-
-% KERNEL:
-%
-\input xy
-
-% Extensions and features: You can replace this line with selective loading
-% of particular options if you like.
-%
-\xyoption{all}
-
-% BACKEND: Default is NOT to load any backend but by uncommenting the
-% following line you can include the PostScript backend by default.
-%
-%\xyoption{ps}
-
-% DRIVERS: Default is NOT to load any driver but by uncommenting the
-% following line you can include the DVIPS driver (or any other one you
-% choose) by default (this will not select it, only make it available).
-%
-%\xyoption{dvips}
-
-% Finally dump the format file (using the hack above):
-%
-\xypicsaveddump
-
-% $Log: xylatex.ini,v $
-% Revision 3.3 1996/12/19 03:31:56 krisrose
-% Maintenance release
-%
-% Revision 3.2 1995/09/19 18:22:27 kris
-% Bug fix release.
-%
-% Revision 3.0 1995/07/07 20:14:21 kris
-% Major release w/new User's Guide!
-%
-% Revision 2.14 1995/07/06 02:56:02 kris
-% Buglets...
-%
-% 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.10 1994/06/15 12:55:07 kris
-% Second 3beta release: bug fixes.
-%
-% NEW file to go in version 2.10!
diff --git a/Master/texmf-dist/source/generic/xypic/xyline.doc b/Master/texmf-dist/source/generic/xypic/xyline.doc
deleted file mode 100644
index 40fa19abedb..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyline.doc
+++ /dev/null
@@ -1,664 +0,0 @@
-%% $Id: xyline.doc,v 3.6 1998/03/06 01:28:05 krisrose Exp $
-%%
-%% Xy-pic ``Line Width'' extension.
-%% Copyright (c) 1993-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@ens-lyon.fr>
-%%
-%% 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, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{line}{Line styles extension}{\stripRCS$Revision: 3.6 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This extension provides the ability to request various effects related
- to the appearance of straight lines; \eg. thickness, non-standard dashing,
- and colour.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-These are effects which are not normally available within \TeX.
-Instead they require a suitable `back-end' option to provide the necessary
-|\special| commands, or extra fonts, together with appropriate
-commands to implement the effects. Thus
-$$
-\xy
- *+\txt<.8\hsize>{Using this extension will have no effect on the output
- unless used with a backend that explicitly supports it.}
- *\frm{-}
-\endxy
-$$
-
-The extension provides special effects that can be used with any \Xy-pic
-<object>, by defining |[|<shape>|]| modifiers.
-The modification is local to the <object> currently being built,
-so will have no effect if this object is never actually used.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Adjusting line thickness}
-
-
-The following table lists the modifiers primarily to alter the thickness
-of lines used by \Xy-pic. They come in two types --- either a single keyword,
-or using the key-character |||| with the following text parsed.
-%
-\begin{defs}%
- |[thicker]| & double line thickness \cr
- |[thinner]| & halve line thickness \cr
- |[||(|<num>|)]| & multiple of usual thickness\cr
- |[||<|<dimen>|>]| & set thickness to <dimen>\cr
- |[|||<dimen>|]| & also sets to <dimen>\cr
- |[||=|<word>|]| & make |[|<word>|]| set current style settings\cr
- |[||*]| & reuse previous style\cr
- |[butt]| & butt cap at ends\cr
- |[roundcap]| & round cap at ends\cr
- |[projcap]| & projecting square cap.\cr
-\end{defs}
-%
-\noindent
-Later settings of the linewidth override earlier settings;
-multiple calls to |[thicker]| and |[thinner]| compound,
-but the other variants set an absolute thickness.
-The line-thickness specification affects arrow-tips as well as the
-thickness of straight lines and curves.
-Three kinds of line-caps are available; they are discussed below
-in the section on `poly-lines'.
-%
-\begin{code}
-\xy/r8pc/:*++\txt\huge{C}="c"
-,0*++\txt\huge{P}="p",
-,"p",{\ar@*{[|(1)]}"p";"c"<20pt>}
-,"p",{\ar@*{[|(4)]}"p";"c"<14pt>}
-,"p",{\ar@*{[|(10)]}"p";"c"<4pt>}
-,"p",{\ar@*{[|(20)]}"p";"c"<-16pt>}
-\endxy
-\end{code}
-$$\docode$$
-\medskip
-\displaycode
-%
-Using the \PS\ back-end, the size of the arrow-head grows
-aesthetically with the thickness of the line used to draw it.
-This growth varies as the square-root of the thickness;
-thus for very thick lines (20+ times normal) the arrowhead
-begins to merge with the stem.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Load the |style| extension to establish the necessary infra-structure.
-
-\DOCMODE(
-%\xydefcsname@{shape [|...]}#1{\xyFN@\xywidthchar@#1@@}%
-\xydefcsname@{*stylechar@|@}#1{\xyFN@\xywidthchar@#1@@}%
-
-%\xydefcsname@{shape [thinner]}{\xyshape@thinner@}
-%\xydefcsname@{shape [thicker]}{\xyshape@thicker@}
-\xydefcsname@{style [thinner]}{\xyshape@thinner@}
-\xydefcsname@{style [thicker]}{\xyshape@thicker@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Implementation}
-
-Record the line thickness locally in a dimen register.
-The initial value is read from the |xydash10| font.
-Each time |\xylinethick@| is changed, its previous value is stored
-as the expansion of |\xyprevwidth@@|, in case this is needed by
-a specific back-end.
-
-\DOCMODE(
-\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@}%gobble spaces
-% \else\ifx @\next \DN@ @@{\addtotoks@{\checkXyStyle@}}%
- \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@ *@@{\addtotoks@{\checkXyStyle@}}%
-% \else\ifx *\next \DN@ *@@{\checkXyStyle@}%
- \else\ifx *\next \DN@ *@@{\recoverXyStyle@}%
-% \else\addEQ@\ifx \next \addEQ@\DN@##1@@{%
-% \addtotoks@{\checkXyStyle@\xynamestyle@{##1}}}%
- \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@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The diagram in figure~??g[xyrotate.doc:rotate and flips],
-page~??gp[xyrotate.doc:rotate and flips], uses different line-thicknesses
-and colours.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Poly-lines}
-
-By a `poly-line' we mean a path built from straight line segments having no
-gaps where each segment abuts the next. The poly-line could be the edges of
-a polygon, either closed or open if the end-points are different.
-
-The reason for considering a poly-line as a separate <object>, rather than
-simply as a <path> built from straight lines, becomes apparent only when
-the lines have appreciable thickness. Then there are several standard ways
-to fashion the `joins' (where segments meet). Also the shape of the `caps'
-at either end of the poly-line can be altered.
-
-The following modifiers are used to determine the shapes of the line `caps'
-and `joins':
-%
-\begin{defs}%
- |[||J|<val>|]| & join style, <val> = 0, 1 or 2\cr
- |[mitre]| & mitre-join, same as |[||J0]|\cr
- |[roundjoin]| & round join, same as |[||J1]|\cr
- |[bevel]| & bevel-join, same as |[||J2]|\cr
- |[||C|<val>|]| & end-cap, <val> = 0, 1 or 2\cr
- |[butt]| & ``butt'' cap, same as |[||C0]|\cr
- |[roundcap]| & round cap, same as |[||C1]|\cr
- |[projcap]| & ``projecting square'' cap,\hfil\break same as |[||C2]|\cr
- |[||M(|<num>|)]| & set mitrelimit to <num>$\ge1$\cr
-\end{defs}
-%
-\noindent
-These effects are currently implemented only with the \PS\ back-end
-or when using |\xypolyline| (described below) with a \PS\ <driver>.
-In this case the `cap' setting can be applied to any segment, straight
-or curved, whether part of a poly-line or not; however the `join' setting
-applies only to poly-lines. Arrow-tips are not affected.
-The defaults are to use round joins and round-cap ends.
-
-Adjusting the miter-limit affects how far miters are allowed to protrude
-when two wide lines meet at small angles. The <num> is in units of the
-line-thickness. Higher values mean using bevels only at smaller angles,
-while the value of 1 is equivalent to using bevels at all angles.
-The default miter-limit is 10.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Current values are stored in case these are needed within nested portions
-of diagrams.
-
-\DOCMODE(
-\xydef@\xylinecap@{2}
-\xydef@\xylinejoin@{2}
-\xydef@\xylinemiter@{10}
-\DOCMODE)
-
-%These are simple methods that alter the stored values.
-%
-%\DOCMODE(
-%\xydef@\xysetlinecap@@#1{\xylinestyle@{C}{#1}{\def\xylinecap@{#1}}}
-%\xydef@\xysetlinejoin@@#1{\xylinestyle@{J}{#1}{\def\xylinejoin@{#1}}}
-%\xydef@\xysetmiterlimit@@#1{\xylinestyle@{M}{#1}{\def\xylinemiter@{#1}}}
-%\DOCMODE)
-%
-%Finally we need the interface to pass the new values to a <driver>.
-%
-%\DOCMODE(
-%\xydef@\xynolinestyle@@#1#2#3{\let\next=#1\relax #3%
-% \ifx\next C\DN@{\xyundefinedLine@{linecap}{#2}@@}%
-% \else\ifx\next J\DN@{\xyundefinedLine@{linejoin}{#2}@@}%
-% \else\ifx\next M\DN@{\xyundefinedLine@{miterlimit}{#2}@@}%
-% \fi\fi\fi \next@ }
-%
-%\xylet@\xylinestyle@\xynolinestyle@@
-%\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Recognise keywords for `line-caps' and `line-joins':
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\DOCMODE(
-\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@}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-These use the more sophisticated approach that is easier to adjust for
-different <driver>s.
-
-\DOCMODE(
-\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}}}
-\DOCMODE)
-
-Implementation of line-caps:
-
-\DOCMODE(
-\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@
-\DOCMODE)
-
-Implementation of line-joins:
-
-\DOCMODE(
-\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@
-\DOCMODE)
-
-Implementation of miter-limit:
-
-\DOCMODE(
-\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@
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The path taken by the `poly-line' this is read as the list of <pos>itions
-in the current `stack', ignoring size extents.
-The macro |\xypolyline| is used as a <decor>; it reads the <pos>itions from
-the stack, but leaves the stack intact for later use.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Implementation of `poly-lines'.
-
-\DOCMODE(
-\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@}}%
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The following diagram illustrates the use of line-thickness, line-joins
-and line-caps with poly-lines. It contains an example of each of the styles.
-
-\begin{code}
-\xycompileto{poly}%
-{/r4pc/:,*[|<5pt>][thicker]\xybox{%
- *+(3,2){}="X"
-;@={p+CU,p+LU,p+LD,p+RD,p+RU,p+CU}
- ,{0*[miter]\xypolyline{}}
- ,{\xypolyline{*}},@i@)
-,"X",*+(2.5,1.5){}="X"
-,@={!CU,!LU,!LD,!RD,!RU,!CU}
- ,{0*[gray][roundjoin]\xypolyline{}}
- ,{0*[gray]\xypolyline{*}},@i@)
-,"X",*+(2,1){}="X"
-,@={!CU,!LU,!LD,!RD,!RU,!CU}
- ,{0*[white]\xypolyline{*}}
- ,{0*[bevel]\xypolyline{}},@i@)
-,"X"-(.7,0)*++\txt\LARGE{A}="a"
-,"X"+(.7,0)*++\txt\LARGE{B}="b"
-,{\ar@{-}@*{[butt][thinner]}"a";"b"<1pc>}
-,{\ar@{-}@*{[roundcap][thinner]}"a";"b"}
-,{\ar@{-}@*{[projcap][thinner]}"a";"b"<-1pc>}
-}}
-\end{code}
-$$\docode$$
-\displaycode
-\noindent
-Note the use of |{0*[...]\xypolyline{..}}| to apply style-modifiers
-to a polyline. The |@={!..}| method for loading the stack gives
-equivalent results to using |;@={p+..}|, since |\xypolyline|
-ignores the edge extents of each <pos> in the stack.
-
-Note also that the argument |#1| to |\xypolyline| affects what
-is typeset. Allowable arguments are:
-%
-\begin{defs}
-|\xypolyline{}| & solid line\cr
-|\xypolyline{.}| & dotted line\cr
-|\xypolyline{-}| & dashed line\cr
-|\xypolyline{*}| & fill enclosed polygon\cr
-|\xypolyline{?}| & fill enclosed polygon using even-odd rule\cr
-|\xypolyline{{*}}| & use |\dir{*}| for lines\cr
-|\xypolyline{<toks>}|\kern-20pt & \kern20pt using |\dir{<toks>}| \cr
-\end{defs}
-\noindent
-The latter cases one has |**\dir{...}| being used to connect the vertices
-of the polyline, with |{{*}}| being needed to get |**\dir{*}|.
-Similarly |**\dir| is used when a <driver> is not available to specifically
-support polylines; in particular the two `fill' options |*| and |?| will
-result in a dotted polygon outline the region intended to be filled.
-
-In all cases it is up to the user to load the stack before calling
-|\xypolyline{|\dots|}|. A particularly common case is the outline of
-an existing \Xy-pic <object>, as in the example above. Future extensions
-to |\frm| will provide a simplified mechanism whereby the user need not
-call |\xypolyline| explicitly for such effects.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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}}@@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-When there is no special support this handles the various cases using
-ordinary thin line types.
-
-\DOCMODE(
-\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 }
-\DOCMODE)
-
-Gobble the collected positions in |{\xyps@list}|; recover the vertices
-from the stack, then set straight lines in the appropriate style.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Initially poly-lines are uninstalled, until loaded by a <driver>.
-
-\DOCMODE(
-\xylet@\xy@polystyle@@=\xypolynospec@
-
-\xydef@\UninstallPolylines@{%
- \UnloadpolySpecials@
- \let\xy@polystyle@@=\xypolynospec@ }
-\UninstallPolylines@
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Installation}
-
-Initially there is no support for the actual effects.
-
-\DOCMODE(
-\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@}@@}%
-\DOCMODE)
-
-Nothing further can be done unless allowed by a specific <driver>, which
-must establish an alternative expansions to be bound to |\xylinewidth@@|
-and the other hooks.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This is a possible alternative for |\xylinewidth@@|. Indeed it is used
-with the \PS\ support, which then redefines just |\xylineSpecial@@|.
-
-\DOCMODE(
-\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@
-\DOCMODE)
-
-These need to be rebound by a back-end which supports variation in the
-line-thickness.
-
-\DOCMODE(
-\xydef@\transxyline@#1{\edef\next@{\removePT@#1}}
-
-\xylet@\transxyline@@=\DN@
-\xylet@\xylineSpecial@@=\eat@
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xyline.doc,v $
-% Revision 3.6 1998/03/06 01:28:05 krisrose
-% Releasing (with Y&Y fonts).
-%
-% Revision 3.3 1996/12/18 09:22:29 ross
-% adjustments for styles now within the kernel code
-% fixed problem with line-widths
-%
-% Revision 3.2 1995/09/19 18:21:41 ross
-% Bug fix release.
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% Revision 2.12 1994/10/25 03:01:14 ross
-% Final 3beta release [bug fixes & AMS-LaTeX fitting].
-%
-% Revision 2.11 1994/07/05 09:27:49 ross
-% fixed documentation bug
-%
-% Revision 2.10 1994/06/15 12:46:03 ross
-% Second release 3beta.
-% Colour and line style saving works; label colouring bug fixed.
-%
-% Revision 2.9 1994/06/09 14:39:49 ross
-% Release 3beta.
-%
-% NEW for version 2.9 by Ross Moore.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xymacpat.xyp b/Master/texmf-dist/source/generic/xypic/xymacpat.xyp
deleted file mode 100644
index 2987acd7bbe..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xymacpat.xyp
+++ /dev/null
@@ -1,61 +0,0 @@
-% $Id: xymacpat.xyp,v 3.3 1996/12/18 09:25:21 ross Exp $
-%
-% Patterns for Xy-pic tile extension.
-% Copyright (c) 1995-1996 Ross Moore <ross@mpce.mq.edu.au>
-%
-% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-% See the companion README and INSTALL files for further information.
-% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%
-% The Xy-pic package is free software; you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by the
-% Free Software Foundation; either version 2 of the License, or (at your
-% option) any later version.
-%
-% The Xy-pic package is distributed in the hope that it will be useful, but
-% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-% for more details.
-%
-% You should have received a copy of the GNU General Public License along
-% with this package; if not, write to the Free Software Foundation, Inc.,
-% 675 Mass Ave, Cambridge, MA 02139, USA.
-%
-mac01 00 <FFFFFFFFFFFFFFFF>
-mac02 08 <DDFF77FFDDFF77FF>
-mac03 16 <DD77DD77DD77DD77>
-mac04 32 <AA55AA55AA55AA55>
-mac05 16 <55FF55FF55FF55FF>
-mac06 32 <AAAAAAAAAAAAAAAA> <AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA>
-mac07 16 <EEDDBB77EEDDBB77> <EEEEEEDDDDDDBBBBBB777777EEEEEEDDDDDDBBBBBB777777>
-mac08 48 <8888888888888888> <888888888888888888888888888888888888888888888888>
-mac09 40 <B130031BD8C00C8D> <B1B1B13030300303031B1B1BD8D8D8C0C0C00C0C0C8D8D8D>
-mac10 56 <8010022001084004> <808080101010020202202020010101080808404040040404>
-mac11 36 <FF888888FF888888> <FFFFFF888888888888888888FFFFFF888888888888888888>
-mac12 42 <FF808080FF080808> <FFFFFF808080808080808080FFFFFF080808080808080808>
-mac13 63 <8000000000000000> <808080000000000000000000000000000000000000000000>
-mac14 58 <8040200002040800> <808080404040202020000000020202040404080808000000>
-mac15 49 <8244394482010101> <828282444444393939444444828282010101010101010101>
-mac16 34 <F87422478F172271> <F8F8F87474742222224747478F8F8F171717222222717171>
-mac17 48 <55A04040550A0404> <555555A0A0A04040404040405555550A0A0A040404040404>
-mac18 50 <2050888888880502> <202020505050888888888888888888888888050505020202>
-mac19 31 <BF00BFBFB0B0B0B0> <BFBFBF000000BFBFBFBFBFBFB0B0B0B0B0B0B0B0B0B0B0B0>
-mac20 64 <0000000000000000>
-mac21 60 <8000080080000800>
-mac22 56 <8800220088002200>
-mac23 48 <8822882288228822>
-mac24 48 <AA00AA00AA00AA00>
-mac25 32 <FF00FF00FF00FF00> <FFFFFF000000FFFFFF000000FFFFFF000000FFFFFF000000>
-mac26 48 <1122448811224488> <111111222222444444888888111111222222444444888888>
-mac27 48 <FF000000FF000000> <FFFFFF000000000000000000FFFFFF000000000000000000>
-mac28 56 <0102040810204080> <010101020202040404080808101010202020404040808080>
-mac29 56 <AA00800088008000> <AAAAAA000000808080000000888888000000808080000000>
-mac30 49 <FF80808080808080> <FFFFFF808080808080808080808080808080808080808080>
-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/Master/texmf-dist/source/generic/xypic/xymatrix.doc b/Master/texmf-dist/source/generic/xypic/xymatrix.doc
deleted file mode 100644
index 4c269ad502a..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xymatrix.doc
+++ /dev/null
@@ -1,1345 +0,0 @@
-%% $Id: xymatrix.doc,v 3.4 1997/05/18 01:14:25 krisrose Exp $
-%%
-%% Xy-pic ``Matrix'' feature.
-%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% 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-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{matrix}{Matrix feature}{\stripRCS$Revision: 3.4 $}%
- {Kristoffer H.~Rose}{krisrose@brics.dk}%
- {BRICS/Computer Science, University of Aarhus, Ny Munkegade, building 540,
- DK--8000 Aarhus~C}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This option implements ``\Xy-matrices'', \ie, matrices where it is
- possible to refer to the entry objects by their row/column address.
- We first describe the general form of \Xy-matrices in~\S??[matrix],
- then in~\S??[coord] we summarise the new <coord>inate forms used to
- refer to entries. In~\S??[spacing] we explain what parameters can be
- set to change the spacing and orientation of the matrix, and
- in~\S??[entries] we explain how the appearance of the entries can be
- changed.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{\Xy-matrices}
-??=[matrix]
-%
- The fundamental command of this feature is
-%
-\begin{defs1}
- ??c![\xymatrix] <setup> |{|<rows>|}|
-\end{defs1}
-\noindent\unskip
-%
- that reads a ??w![matrix] of entries in the generic \TeX\ row\&column
- format, \ie, where rows are separated with ??c![\\] and contain
- columns separated with ??c![&] (we discuss in the following sections
- what <setup> can be). Thus a matrix with "maxrow" rows and "maxcol"
- columns where each entry contains "row"|,|"col" is entered as
-$$
-\begin{array}{llll}
-|\xymatrix{|\\
-~{|1,1 &|} &{|1,2 &|}\quad\cdots &{|1,|"maxcol"| \\|} \\
-~{|2,1 &|} &{|2,2 &|} &{|2,|"maxcol"| \\|} \\
-~~\vdots &\qquad\ddots \\
-~{"maxrow"|,1 &|}&{"maxrow"|,2 &|} &{"maxrow"|,|"maxcol"| }|}
-\end{array}
-$$
- (\TeX\-nically the |&| character represents any `alignment tab', \ie,
- character with category code~4).
-
- A ??w![<matrix>] can appear either in an \Xy-picture (as <decor>) or
- ``stand-alone''.
-
- The aspects in which |\xymatrix| differs from ordinary matrix
- constructions, such as Plain \TeX's |\matrix{|\dots|}| and \LaTeX's
- |array| environment, are
-%
-\begin{itemize}
-
-\item
- arbitrary \Xy-pic <decor>ations may be specified in each entry and
- will be interpreted in a state where $c$ is the current entry,
-
-\item
- the entire matrix is an object itself with reference point as the top
- left entry, and
-
-\item
- a progress message ``|<xymatrix| "rows"|x|"cols" "size"|>|'' is
- printed for each matrix with $"rows"\times"cols"$ entries and \Xy-pic
- complexity "size" (the number of primitive operations performed),
- unless the declaration ??c![\SilentMatrices] is issued.
-
-\item
- Entries starting with a ??c![*] are special (described
- in~\S??[entries])\footnote{In general it is recommended that entries
- start with a non-expanding token, \ie, an ordinary (non-active)
- character, {\tt\otherbgroup}, or |\relax|, for compilation to work.},
- so use |{*}| to get a $\star$.
-
-\end{itemize}
-%
- For example,
-%
-\begin{code}
-\xy
- \xymatrix{A&B\\C&D}
- \drop\frm{-}
- \drop\cir<8pt>{}
-\endxy
-\end{code}
-\displaycode
-%
-\noindent
- will typeset
-%
-$$\docode$$
-%
- \BUG: Matrix nesting is not safe.
-
- Matrices are often quite slow to typeset so as a convenience all
- matrices can be set to compile (and not) automatically with the
- declarations
-%
-\begin{defs1}
-|\CompileMatrices| \cr
-|\NoCompileMatrices| \cr
-\end{defs1}
-\noindent\unskip
-%
- Matrices can be compiled or not individually, by using the explicit
- commands ??c![\xymatrixcompile] and ??c![\xymatrixnocompile] as
- well as by encapsulating in the usual
- |\xycompileto{|"name"|}{|\dots|}| (see note~??g[xy.doc:compile]).
-
- \NOTE: Matrices will only compile correctly if all entries start with
- a nonexpandable token, \ie, |{| or |\relax| or some non-active
- character.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{On the following code:}
-
- The complexity of this option stems from the fact that we cannot
- build the actual \Xy-picture until after the matrix has been typeset
- so that we know the sizes and places of all the entries. The
- handling described here is thus separated into several subprocedures.
-
-\paragraph*{Setup:}
-
- Not much---only to keep track of the rows and columns. These are not
- accesible to the user---should they?
-
-\DOCMODE(
-\xynew@{count}\Row
-\xynew@{count}\Col
-
-\xydef@\maxrow@{0} % highest row number used
-\xydef@\maxcol@{0} % highest column number used
-\xydef@\maxcolrow@{0} % a row with maximal number of columns
-\DOCMODE)
-
- There are some user-defined parameters summarised later.
-
- The following is an experimental set of `optimal' queueing macros
- using two queues and two counters to keep track of the progress.
-
-\DOCMODE(
-\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@@{}}
-\DOCMODE)
-
- \HACK: intended to make the addition of tokens to the token list
- faster: we first add to the `small' |\queue@@| as many times as we
- have added to the `big' |\queue@| before that. So we know we should
- always expand |\queue@@|: this is done first (last in the macro
- text). Then we call |\addq@@| that will either add to the small one
- or add the small one to the big one and then clear the small one!
-
- "Usage": Call |\clearq@| first. Then use |\addq@| as many times as
- desired. To get the queue in |\queue@| call |\finishq@| and use it.
- Finally clear |\queue@| (globally) or continue.
-
-\paragraph*{Main procedure:}
-
- Here is the main code which is concerned with initialisations and
- output of messages explaining how far the matrix construction has
- progressed.
-
-\DOCMODE(
-\xynew@{count}\matrixsize@
-\xynew@{if}\ifnoisymatrices@ \noisymatrices@true
-
-\xydef@\SilentMatrices{\noisymatrices@false}
-\xydef@\NoisyMatrices{\noisymatrices@true}
-
-\xydef@\xymatrixnocompile{\global\matrixsize@=\z@
- \ifnoisymatrices@\message{<xymatrix}\fi
- \if\inxy@
- \DN@{\nter@{}\xy@\xymatrix{\enter@{%
- \def\noexpand\xy@minX@@{\xy@minX@@}\def\noexpand\xy@maxX@@{\xy@maxX@@}%
- \def\noexpand\xy@minY@@{\xy@minY@@}\def\noexpand\xy@maxY@@{\xy@maxY@@}%
- \edef\noexpand\xymatrixprefix@@{\codeof\xymatrixprefix@@}}}}%
- \else \DN@{\xy \nter@\endxy \xy@\xymatrix{\nter@{}}}\fi \next@
- \xy@@{\save@ \edef\matrixorigin@{\X@c=\the\X@c \Y@c=\the\Y@c}%
- \edef\xy@minX@@{\the\X@c}\edef\xy@maxX@@{\the\X@c}%
- \edef\xy@minY@@{\the\Y@c}\edef\xy@maxY@@{\the\Y@c}}%
- \xdef\maxrow@{0}\xdef\maxcol@{0}\xdef\maxcolrow@{0}%
- \mkHWdefaults@ \xymatrix@prefix""}
-
-\xylet@\xymatrix=\xymatrixnocompile
-
-\xydef@\xymatrixprefix@@{}
-
-\xydef@\xymatrix@prefix"#1"{\DN@{#1}\edef\xymatrixprefix@@{\codeof\next@}%
- \DNii@##1{\xy@{"#1"}{\edef\xymatrixprefix@@{##1}}}%
- \expandafter\nextii@\expandafter{\xymatrixprefix@@}%
- \xyFN@\xymatrix@setup}
-
-\xydef@\xymatrix@setup{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@setup}%gobble spaces
- \else\ifx \bgroup\next \let\next@=\xymatrix@ii
- \else\addAT@\ifx\next \addAT@\DN@{\xy@{@}{}\xyFN@\xymatrix@at}%
- \else\ifx "\next \let\next@=\xymatrix@prefix
- \else \DN@{\xyerror@{\string\xymatrix<setup>{<rows>} expected}{}}%
- \fi\fi\fi\fi \next@}
-
-\xydef@\xymatrix@ii#1{%
-%
-%\W@{ H@max=\meaning\H@max}%
-%\W@{ W@max=\meaning\W@max}%
-%\W@{ HW@max=\meaning\HW@max}%
-%\W@{ mkHrow@={\meaning\mkHrow@}}%
-%\W@{ mkWcol@={\meaning\mkWcol@}}%
-%\W@{ mkHmax@={\meaning\mkHmax@}}%
-%\W@{ mkWmax@={\meaning\mkWmax@}}%
-%\W@{ mkHWmax@={\meaning\mkHWmax@}}%
-%
- \xymatrix@pretypeset{#1}%
-% \ifnum\maxcol@=\z@ \mkWcol@ \mkWmax@ %\mkHrow@ \mkHmax@
- \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}
-\DOCMODE)
-
- Here is where compilation of matrices is turned on/off.
-
-\DOCMODE(
-\xydef@\xymatrixcompile#1#{\xymatrixcompile@{#1}}
-\xydef@\xymatrixcompile@#1#2{\xycompile{\xymatrixnocompile#1{#2}}}
-
-\xydef@\CompileMatrices{\let\xymatrix=\xymatrixcompile}
-\xydef@\NoCompileMatrices{\let\xymatrix=\xymatrixnocompile}
-\DOCMODE)
-
- \TODO: Proper nesting that ensures that the matrix state is
- reestablished after the current one has been typeset.
-
- Each subprocedure is explained below.
-
-\paragraph*{Set row-rotation:}
-
- This sets the general direction of the rows as the current direction
- indicates. This direction is not known until \Xy-time so it gets put
- into the row/column definitions.
-
-\DOCMODE(
-\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{%?*[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}}
-\DOCMODE)
-
-\paragraph*{Pretypeset:}
-
- The purpose of this is to
-%
-\begin{itemize}
-\item
- set box8 to an halign with all the entries properly typeset to be
- measured in the next step, and
-\item
- store in a queue the operations that will define each entry as an
- object once the measurement is done and the distances between rows
- and columns is known.
-\end{itemize}
-%
- This is achieved as follows: Row/column counters, maxima, and queues
- are reset. The tab- and interlineskip is removed to make taking the
- constructed box apart easier. And the halign template is used to
- apply an appropriate action for each entry that updates the counters
- and queue.
-
- The special |\xymatrixsavedCOORD@| is used to store the original
- |\COORD@| except when diagrams are nested.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- The first entry in each row is special; in particular it moves the
- entries from the columns of the previous row (if any) into the
- second-level queue:
-
-\DOCMODE(
-\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@@}
-\DOCMODE)
-
- The common part should first typeset the object. Then the resulting
- <setup> commands should be emitted as described below.
-
- While typesetting the entry, \Xy-commands are "disabled" by
- redefining |\xy@| to just `eat' its arguments, so they don't
- interfere\dots
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
- Finally the following ensures that the last row in the diagram is
- treated correctly: if the last entry was an empty row then we ignore
- the row entirely if the |\ifoldxymatrix@| switch is set just as we
- ignore |*|-entries above.
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
- Furthermore the code (??_[edge])~sets the edge and extents of the
- object and (??_[extents])~adds the object to the size of the matrix.
- \BUG: Currently ignores upness and leftness parameters.
-
-\DOCMODE(
-\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{%
- % #1=R,#2=Upn,#3=C,#4=Leftn,#5=L,#6=R,#7=D,#8=U,#9=Edge.
- \global\Row=#1\global\Col=#3\relax
- \ifnum#3=\@ne
- \ifnum#1=\@ne \xy@@{\matrixorigin@}%?*[1,1]
- \else \count@@=#1\advance\count@@\m@ne %?*[r,1]
- \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 %?*[r,c]
- \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@@}%?*[edge]
- \xy@@{%?*[extents]
- \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}}
-\DOCMODE)
-
- The following procedure represents the similarity of the four lines
- for the coordinates in the computation above\dots \TODO: describe
- this properly\dots
-
-\DOCMODE(
-\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@@{%
- % Emit R := min(#1,#5#2) + min(#3,#5#4)
- \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@@{%
- % Emit #1 := #1 + #2*[ R + #3#4 ]
- \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}
-\DOCMODE)
-
- \BUG: It should be possible to change te adjustment more profoundly
- for individual entries, rows, and columns.
-
-\paragraph*{Measure:}
-
- Take the created box8 apart to define the macros |\Wcol@|"col" and
- |\Hrow@|"row" containing the width and height of the bounding box of
- the entries in the row/column. Finally the commands collected in the
- queue are executed (hopefully they'll invoke |\pre@emit| a number of
- times). This is a hook because some special cases won't need it\dots
-
-\DOCMODE(
-\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
-\DOCMODE)
-
- \TODO: Allow non-default spacing between particular rows/columns as
- well as different justification of the entire matrix\dots
-
-\paragraph*{Typeset:}
-
- Retypeset the entire diagram using a hacked halign: its template
- typesets each entry as
-$$
- |\POS|\,|"|"row"|,|"col"|"|\,|*|\,"object"\,|\relax|\,"\Xy-commands"|\relax|
-$$
- where "object" is the contents of the entry translated into \Xy-pic
- <object> form and "\Xy-commands" entails the commands used in this
- particular entry.
-
-\DOCMODE(
-\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@={}}
-\DOCMODE)
-
- Here are the template execution macros: We reset the |\queue@| for
- each entry, |\drop| it the usual way except first all \Xy-commands
- are `redirected' to the queue, and then typeset them.
-
-\DOCMODE(
-\xydef@\entry@{\relax \global\advance\Row\@ne \global\Col=\z@ \entry@@}
-\DOCMODE)
-
- Again some parsing determines whether this is a |*|-object or a
- normal object:
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
- Dropping the entry is just retypesetting it at the right location
- again ignoring the \Xy-stuff:
-
-\DOCMODE(
-\xydef@\dropentry@#1#2{\drop@{#1}{\xyeatall@
- \ifx\xymatrixsavedCOORD@\relax \let\xymatrixsavedCOORD@=\COORD@ \fi
- \let\COORD@=\xymatrixCOORD@ #2}}
-\DOCMODE)
-
- The macros used for queuing are these; only the toks9 replacement is
- tricky; furthermore queueing is "not" done if we are saving because
- the effect will give the same result without risk of extremely long
- lines in the compiled file!
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\paragraph*{Insert:}
-
- Finally we insert the matrix in the \Xy-picture logically by ensuring
- that it has the right size
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
- \TODO: Should handle other forms than reference point at center
- of~|"1,1"| as hardcoded here. In particular reference point at
- baseline of |"1,1"| would be useful\dots
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{New coordinate formats}
-??=[coord]
-%
- It is possible within entries to refer to all the entries of the
- \Xy-matrix using the following special <coord>inate forms:
-%
-\begin{defs}
-%
- {}\kern-10pt|"|$r$|,|$c$|"|\kern5pt
- & Position and extents of entry in row $r$, column $c$ (top left is
- |"1,1"|)
-\cr
- {}\kern-15pt|[|$\Delta r$|,|$\Delta c$|]|\kern10pt
- & $\Delta r$ rows below, $\Delta c$ columns right of current entry
-\cr
- {}\kern-15pt|[| <hop>\star\ |]|\kern10pt
- & entry reached by <hop>s; each <hop> is one of |dulr| describing
- one `move' to a neighbor entry
-\cr
- {}\kern-15pt|[| <hop>\plus\ <place>\ |]|
- & <place> on straight line to "non-empty" |[|<hop>\star|]|
-\cr
-\end{defs}
-\noindent\unskip
-%
- So the current entry has the synonyms |[0,0]|, |[]|, |[rl]|, |[ud]|,
- |[dudu]|, etc., as well as its `absolute' name |"|$r$|,|$c$|"|.
-
- These forms are useful for defining diagrams where the entries are
- related, \eg,
-%
-\begin{code}
-$$\xy
-\xymatrix{
- A \POS[];[d]**\dir{~},
- [];[dr]**\dir{-} \\
- B & C \POS[];[l]**\dir{.} }
-\endxy$$
-\end{code}
-\docode
-%
- was typeset by
-%
-\displaycode
-%
- If an entry outside the \Xy-matrix is referenced then an error is
- reported.
-
- In case several matrices are used in the same diagram, and they refer
- to each other, then it is useful to give the matrices different
- |"|<prefix>|"| <setup> such that they can refer to each other using
- the following special coordinate forms that all have the same meaning
- except the target entry is picked from a particular matrix:
-%
-\begin{defs1}
- |"|<prefix>$r$|,|$c$|"| \cr
- |["|<prefix>|"|$\Delta r$|,|$\Delta c$|]| \cr
- |["|<prefix>|"| <hop>\star\ |]| \cr
- |["|<prefix>|"| <hop>\plus\ <place>\ |]| \cr
-\end{defs1}
-\noindent\unskip
-%
- In fact absolute references "must" always be given using
- |"|<prefix><row>|,|<col>|"|, "even inside the matrix itself".
-
- Here is an example using this:
-%
-\begin{code}
-\xy
- \xymatrix"*"{%
- A & B \\
- C & D }%
- \POS*\frm{--}
- \POS-(10,3)
- \xymatrix{%
- A' \ar@{.}["*"] & B' \ar@{.}["*"] \\
- C' \ar@{.}["*"] & D' \ar@{.}["*"] }%
- \POS*\frm{--}
-\endxy
-\end{code}
-$$\docode$$
-%
- was typeset (using the `frame' extension and `arrow' feature) by
-%
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- These handle the parsing and interpretation of bracketed
- <coord>inates; the number is computed already at parse time:
-
-\DOCMODE(
-\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 <coord> (\codeof\next@): illegal [...] target form}{}%
- \xyFN@\xymatrixCOORD@ii}
-
-\xydef@\xymatrixCOORD@other#1,#2]{%
- \advance\count@#1\advance\count@@#2\xymatrixCOORD@x}
-\DOCMODE)
-
- The next does the actual lookup at \Xy-time where we can still print
- an error message using the saved original form.
-
-\DOCMODE(
-\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}{}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Spacing and rotation}
-??=[spacing]
-%
- Any matrix can have its ??w![spacing]??w[matrix spacing] and
- ??w![orientation]??w[matrix orientation] changed by adding <setup>
- `switches' between |\xymatrix| and the opening |{|.
-
- The default spacing between entries of matrix is changed with the
- switches
-%
-\begin{defs1}
- ??c![@R]<add~op> <dimen> \cr
- ??c![@C]<add~op> <dimen> \cr
- ??c![@] <add~op> <dimen> \cr
-\end{defs1}
-\noindent\unskip
-%
- that change ??w![row spacing], ??w![column spacing], and both,
- respectively, as indicated by the <add~op> and <dimen>, where the
- <dimen> may be omitted and can be given as one of |R| and |C| to
- indicate the current value of the parameter in question. \NOTE: there
- is "no default".
-
- In addition, \Xy-pic can be instructed to use a `??w![fixed grid]'
- for the matrix with the switches
-%
-\begin{defs1}
- ??c![@!R] \cr
- ??c![@!C] \cr
- ??c![@!]
-\end{defs1}
-\noindent\unskip
-%
- that ensure that the row spacing, column spacing, and both,
- respectively, pretending that "all" entries have the size of the
- largest entry (without modifying the real size of the entries, of
- course, only the spacing -- to get the entries to "really" have the
- same size use a |@*|\dots\ <setup> described in \S??[entries]
- below). The special variants
-%
-\begin{defs1}
- ??c![@!0] \cr
- ??c![@!=]<dimen>
-\end{defs1}
-\noindent\unskip
-%
- pretend that entries have zero or <dimen> height and width for
- computing row and column spacing; as above inserting |R| or |C| just
- after the |!| makes this affect only the row "or" column spacing,
- \eg, |@!R0| means that the row spacing only is between the centers of
- the rows.
-
- Finally, the spacing of things that are typeset can be adjusted
- separately:
-%
-\begin{defs1}
- ??c![@M]<add~op> <dimen> \cr
- ??c![@W]<add~op> <dimen> \cr
- ??c![@H]<add~op> <dimen> \cr
- ??c![@L]<add~op> <dimen>
-\end{defs1}
-\noindent\unskip
-%
- will adjust the ??w![entry margin], ??w![entry width], ??w![entry
- height], and ??w![label separation] used (the latter is actually
- passed to the arrow feature).
-
-\DOCMODE(
-\xylet@\xymatrix@addop@@=\relax
-
-\xydef@\xymatrix@at{\def\xymatrix@addop@@{\xymatrix@R\xymatrix@C}%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@at}%gobble spaces
- \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{\def\everyentry@{\vphantom(}%)
- \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@{<addop> or <direction> or one of RCMLHW*! 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}%gobble spaces
- \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@}%gobble spaces
- \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@}%gobble spaces
- \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}
-\DOCMODE)
-
- The spacing can also be changed for en entire \TeX\ group by the
- declarations
-%
-\begin{defs1}
- |\xymatrixrowsep| <add~op> |{|<dimen>|}| \cr
- |\xymatrixcolsep| <add~op> |{|<dimen>|}| \cr
-\end{defs1}
-\noindent\unskip
-%
- The default spacing for both is |2pc|.
-
-\DOCMODE(
-\xydef@\xymatrixrowsep@{2pc}
-\xydef@\xymatrixcolsep@{2pc}
-
-\xydef@\xymatrixrowsep{\afterADDOP{\Addop@@\xymatrixrowsep@}}
-\xydef@\xymatrixcolsep{\afterADDOP{\Addop@@\xymatrixcolsep@}}
-\DOCMODE)
-%
- \TODO: optimize processing of matrices with constant grid.
-
- An entire matrix can be rotated by adding a rotation <setup> of the
- form
-%
-\begin{defs1}
- |@|<direction> \cr
-\end{defs1}
-\noindent\unskip
-%
- This will set the orientation of the rows to <direction> (the default
- corresponds to |r|, \ie, rows are oriented left to right).
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The code is the first procedure of the main matrix code above
- (??_[rotation]); factors are used by |\pre@emit|.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Entries}
-??=[entries]
-%
- The appearance of a single entry can be modified by entering it as
-%
-\begin{defs1}
-??c![*] <object> <pos> <decor>
-\end{defs1}
-\noindent\unskip
-%
- This makes the particular entry ignore the entry modifiers and
- typeset as a kernel object with the same reference point as the
- (center of) the default object would have had.
-
- Additional object <modifier>s may be added to an otherwise ordinary
- entry by using the forms
-%
-\begin{defs1}
-??c![**]|[|<shape>|]| <entry> \cr
-%|**| <add~op> <size> \cr
-|**{|<modifier>*|}| <entry> \cr
-\end{defs1}
-\noindent\unskip
-%
- The first sets the default <shape> for objects
- (\cf~note~??g[xy.doc:<shape>]), the second a default size (change,
- \cf~note~??g[xy.doc:<object> size]), and the last makes it possible
- to add any <object> modifier of~\S??g[xy.doc:object], \eg, for
- recentering entries after the ??w![default entry] form which is
- equivalent to `|!C| |+<|$2\times"object"\-"margin"$|>|' (with the
- effect of centering the object and add the "object"\-"margin") to all
- sides.
-
-\begin{exercise}
- Typeset the following diagram:
-%
-\begin{code}
-\xymatrix @!=1pc {
- **[l] A\times B
- \ar[r]^{/A} \ar[d]_{/B}
- & B \ar[d]^{\times A}
-\\
- A \ar[r]_{B\times}
- & **[r] B\times A
-}
-\end{code}
-$$\docode$$
-%
-\answercode
-\answertext{The author did \displaycode}
-\end{exercise}
-
- It is also possible to use these |@|<setup>s (as usual between
- |\xymatrix| and the leading |{|):
-%
-\begin{defs1}
-??c![@*]|[|<shape>|]| \cr
-|@*| <add~op> <size> \cr
-\end{defs1}
-\noindent\unskip
-%
- which are equivalent to changing all entries to behave as if they had
- started with the similar |**|-form. \TODO: Allow |**|<add~op><size>
- <entry> for entries.
-
- If the default set of entry modifiers should be changed then the
- following declaration must be issued before the |\xymatrix| command;
- this is the only way to actually switch the initial default centering
- and spacing off:
-%
-\begin{defs1}
-??c![\entrymodifiers]|={| <modifier>\star\ |}|
-\end{defs1}
-
-\begin{exercise}
- How did the author typeset the following matrix?
-%
-\begin{code}
-\entrymodifiers={=<1pc>[o][F-]}
-\xymatrix @ur {
- A \save[];[r] **\dir{-},
- [];[dr]**\dir{-},
- [];[d] **\dir{-}\restore
- & B \\
- C & D }
-\end{code}
-$$\docode$$
-%
-\answercode
-\answertext{Modifiers are used to make all entries round with a frame -- the
- general form is used to ensure that the sequence is well-defined.
- Finally the matrix is rotated to make it possible to enter it as a
- simple square: \displaycode}
-\end{exercise}
-
- \BUG: The four constructions |@*[|\dots|]|, |**[|\dots|]|, |@*|
- <add~op> <size>, and, |**{|\dots|}|, "accumulate in reverse order".
- Only entries starting with a single |*| completely override the
- modifiers <setup> with a |@*|-construction.
-
-\DOCMODE(
-\xydef@\xymatrix@mods{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@mods}%gobble spaces
- \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 @*<addop><size> <setup>.}{}\xyFN@\xymatrix@setup}
-
-\xywarnifdefined\entrymodifiers
-\expandafter\def\addEQ@\entrymodifiers#1{\def\entrymodifiers@{#1}\ignorespaces}
-
-\xydef@\entrymodifiers@{\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 \boxz@}}
-\DOCMODE)
-
- Finally, the following is specially suited for `one-line' matrices
- included in text:
-%
-\begin{defs1}
-??c![@1] \cr
-\end{defs1}
-\noindent\unskip
-%
- will insert a `math strut' (|\vphantom(|) into each entry to make its
- centering appropriate for text.
-
- This is just an abbreviation using the following declaration which
- will setup <decor> that should be inserted before everything else in
- each entry. Initially it is empty but
-%
-\begin{defs1}
-??c![\everyentry]|={| <decor> |}|
-\end{defs1}
-\noindent\unskip
-%
- will insert <decor> first in each entry; inside the counter registers
- ??c![\Row] and ??c![\Col] are set to the current entry's row and
- column, respectively. For example,
-%
-\begin{code}
-\everyentry={{\the\Row,\the\Col}}
-\xymatrix @*[F]@*[o] {
- {} \POS[];[r]**\dir{..} & \\
- {} \POS[];[ur]**\dir{--}
-}
-\end{code}
-\displaycode
-\noindent\unskip
-%
- will typeset
-%
-$$\docode$$
-
-\DOCMODE(
-\xywarnifdefined\everyentry
-\expandafter\def\addEQ@\everyentry#1{\def\everyentry@{#1}\ignorespaces}
-
-\xylet@\everyentry@=\empty
-\DOCMODE)
-
- \noindent\NOTE: When using compilation, changes to |\everyentry| and
- |\entrymodifiers| will "not" result in recompilation even when the
- constructed matrix changes -- you may have to remove the |.xyc| file
- manually.
-
-\begin{exercise}
- How did the author typeset the following diagram?
-%
-\begin{code}
-\xymatrix @W=3pc @H=1pc @R=0pc @*[F-] {%
- : \save+<-4pc,1pc>*\hbox{\it root}
- \ar[]
- \restore
-\\
- {\bullet}
- \save*{}
- \ar`r[dd]+/r4pc/`[dd][dd]
- \restore
-\\
- {\bullet}
- \save*{}
- \ar`r[d]+/r3pc/`[d]+/d2pc/
- `[uu]+/l3pc/`[uu][uu]
- \restore
-\\
- 1 }
-\end{code}
-$$\docode$$
-%
- "Hints": The arrow feature was used to make the bending arrows and
- the frame extension for the frames around each cell.
-%
-\answercode
-\answertext{Here is how: \displaycode}
-\end{exercise}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection*{End \& log}
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xymatrix.doc,v $
-% Revision 3.4 1997/05/18 01:14:25 krisrose
-% Essential bugfixes.
-%
-% 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.14 1995/07/06 02:56:02 kris
-% Buglets...
-%
-% 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.11 1994/07/05 10:37:32 kris
-% Third 3beta release [bug fixes].
-% Experimental graph feature included (for ECCT-94 presentation).
-%
-% Revision 2.9 1994/06/09 15:02:49 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.
-%
-% Revision 2.6.9.1 1994/03/07 04:22:46 kris
-% Last internal 3alpha and pre-2.7 release.
-%
-% NEW for version 2.7 extracted from diagram code in xypic.doc 2.6.1.1.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs how we are formatted:
-% Local Variables:
-% mode:latex
-% fill-prefix:"\t"
-% fill-column:77
-% paragraph-separate:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% paragraph-start:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% LaTeX-indent-level:1
-% TeX-brace-indent-level:1
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xymovie.doc b/Master/texmf-dist/source/generic/xypic/xymovie.doc
deleted file mode 100644
index a2b891243d4..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xymovie.doc
+++ /dev/null
@@ -1,161 +0,0 @@
-%% $Id: xymovie.doc,v 3.5 1997/05/28 13:05:01 krisrose Exp $
-%%
-%% Xy-pic ``Movie Storyboard extension'' option.
-%% Copyright (c) 1996-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% 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-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{movie}{Movie Storyboard extension}{\stripRCS$Revision: 3.5 $}%
- {Kristoffer H.~Rose}{krisrose@brics.dk}%
- {BRICS/Computer Science, University of Aarhus, Ny Munkegade, building 540,
- DK--8000 Aarhus~C}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This extension interprets the ??c![\scene] primitive of the
- ??c![movie] class, setting the progress indicators to dummy values.
- The following assumes that your are familiar with the |movie| class.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The size of the frame is determined by the command
-%
-\begin{defs1}
-??c![\MovieSetup]|{width=|"width"|,height=|"height"|,|\dots|}|
-\end{defs1}
-\noindent\unskip
-%
- (the \dots\ indicate the other arguments required by the |movie|
- class but silently ignored by the \Xy-pic |movie| extension).
-
- \NOTE: This extension still experimental and subject to change. The
- only documentation is in the |movie.cls| source file.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The implementation mimics the aspects of the |keyval| package needed
- here, namely reading the ??c![height] and ??c![width] parameters.
-
-\DOCMODE(
-\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}%
-}
-\DOCMODE)
-
- The progress macros all default to
-
-\DOCMODE(
-\xydef@\theScene{0}
-\xydef@\theF{0}
-\xydef@\theFr{1}
-\xydef@\F#1{#1(0)}
-\xydef@\Fr#1{#1(1)}
-\DOCMODE)
-
- We need to interpret and ignore the arguments to |\scene| except the
- |*| which is used on the last scene since this means that we should
- output the scene with progress values corresponding to ``The End''.
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xymovie.doc,v $
-% Revision 3.5 1997/05/28 13:05:01 krisrose
-% Fixed missing breaks bug.
-%
-% Revision 3.4 1997/05/18 02:37:17 krisrose
-% Fits movie.cls 3.4...still experimental.
-%
-% Revision 1.1 1997/05/18 01:22:10 krisrose
-% Initial revision
-%
-% NEW for version 3.4.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs how we are formatted:
-% Local Variables:
-% mode:latex
-% fill-prefix:"\t"
-% fill-column:77
-% paragraph-separate:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% paragraph-start:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% TeX-parse-self:nil
-% LaTeX-indent-level:1
-% TeX-brace-indent-level:1
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xynecula.doc b/Master/texmf-dist/source/generic/xypic/xynecula.doc
deleted file mode 100644
index 2185441aa29..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xynecula.doc
+++ /dev/null
@@ -1,594 +0,0 @@
-%% $Id$
-%%
-%% Xy-pic ``Necula extensions'' option.
-%% Copyright (c) 1998 George C. Necula <necula@cs.cmu.edu>
-%%
-%% 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 <krisrose@ens-lyon.fr>
-%%
-%% 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, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{necula}{Necula's extensions}{\stripRCS$Revision: 0.0 $}%
- {George C. Necula}{necula@cs.cmu.edu}%
- {School of Computer Science,
- Carnegie Mellon University,
- 5000 Forbes Avenue,
- Pittsburgh, PA 15213-3891, USA}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This option contains two extensions of the \Xy-pic kernel: A way to
- expand \TeX\ macros in object <modifier>s, and a way to specify
- arbitrary polygons as the <shape> of an object.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Expansion}
-
- The special syntax ??c![e|]<macros>|||| is introduced in
- an object ??w![<modifier>]s and ??w![<coord>]inates. It
- expands the given \TeX\ <macros> (with |\edef|) before
- reinterpretation as a <modifier> of <coord>, respectively.
-
-\DOCMODE(
-\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@}%gobble spaces
- \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@}%gobble spaces
- \else\ifx e\next
- \expandbeforenext@\COORD@
- \else
- \DN@{\xy@oldCOORD@}\fi\fi
- \next@}%
-\let\COORD@=\xy@newCOORD@
-\DOCMODE)
-
- This code may become part of the \Xy-pic kernel at a certain point.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Polygon shapes}
-
- A polygon <shape> is specified as
-%
-\begin{defs1}
-%
- ??c![[P:]<pos>|,|\dots|,|<pos>|]|
-%
-\end{defs1}
-\noindent\unskip
-%
- where |[P:|$p_1$|,|\dots|,|$p_n$|]| denotes the shape obtained by
- tracking the edge with each $p_i$ a position relative to the object
- reference point. <vector>s and <corner>s can be used
- directly; otherwise use |-p| to get the relative position.
-
- \NOTE: Do not use |{}| or |[]| in the <pos>itions.
-
- \BUG: The algorithm assumes that the reference point is always inside
- the polygon.
-
- It is possible to frame polygons is also possible.
-
-\DOCMODE(
-% Define the polygon as a stylechar so that it is deferred
-\xydefcsname@{*stylechar@P@}#1{\Pshape@#1@}
-\xynew@{count}\c@poly@count \c@poly@count=\z@ % Polygon identifiers
-
-\xydef@\Pshape@:#1@{% Strip the mandatory :
- \addtotoks@{%
-% \xy@showthe c{Before parse}\xy@showthe p{Before parse}%
-% \xy@showdim{Before parse}%
- \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
- % Save the old values of Lc for shifting
- \edef\poly@saveLcshape{\the\L@c}%
- \polygonEdge@Outer% Set U,R,D,L
- \poly@setEdge
- % Now shift the object to keep it centered
- \dimen@=\poly@saveLcshape\advance\dimen@-\L@c
- \advance\R@p -\dimen@
-% \xy@showthe c{After parse}%
-}}
-
-% Set the edge
-% A polygonal edge is represented as \polygonEdge x1,y1;x2,y2;...;xn,yn@id@
-% where xi,yi define the vertices of the polygonal edge as displacement from
-% the object reference point (xn=x1,yn=y1), and id is a numerical id used for
-% caching the result of the last intersection operation. The cached values for
-% polygon id are stored in the global macro poly@cache<id>.
-\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}}
-
-% Define the polygon framing operations
-\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}
-
-% A polygon is maintained as a list of relative positions, as follows:
-% poly@list = Xdimen_0,Ydimen_0;...;Xdimen_n,Ydimen_n @
-% The list is closed, i.e., the first and last element coincide
-% Each polygon has an id storred in \poly@id
-% Each polygon caches the result of the last intersection operation
-% as d@x,d@y,x1,y1,x2,y2 where the first two values define the slope
-% and the two sets of points are the two intersection points
-% These values are storred in \poly@cache<id>.
-%
-%
-% Helper function for dealing with polygon lists
-
-% Map over a polygon list. Make sure you define
-% \let\poly@map@next=\poly@map before. Then, you can define
-% \let\poly@map@next=\poly@map@stop if you want to stop the traversal
-
-\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@}
-
-% Parse a polygon definition
-
-\xydef@\poly@parse #1,{%
- \ifx #1\relax %Done. Copy the head of the list at its end
- \poly@close
- \let\next@=\relax
- \else
- % Save everything
- \save@
- % Process the position using POS
- \POS #1%
- % Now add the new c to the list
- \edef\tmp@{{\the\X@c}{\the\Y@c}}%
- \expandafter\poly@append\tmp@
- \restore
- \let\next@=\poly@parse % continue parsing
- \fi
- \next@
-}
- % Append to the list of polygon points
-\xydef@\poly@append#1#2{\expandafter\poly@append@\poly@list{#1,#2;}}
-\xydef@\poly@append@#1@#2{\global\def\poly@list{#1#2@}}
-
- % Close the polygon
-\xydef@\poly@close{\expandafter\poly@close@\poly@list}
-\xydef@\poly@close@#1,#2;#3@{\poly@append{#1}{#2}}
-
-% Draw a polygon at the current location
-
-\xydef@\draw@polygon{% First separate the head
-% \W@{Drawing polygon \poly@list}\xy@showthe c{ Centered at}%
- \save@
- % Set the origin to point at the reference point
- \X@origin=\X@c \Y@origin=\Y@c
- \poly@setp % Set p at the beginning of the polygon and set poly@rest
- % Zero the edges
- \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
-}
-
- % Set p to the first element. Requires the origin to be
- % at the reference point
-\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
-% \W@{Next segment is at offset #1,#2 and absolute \the\X@c,\the\Y@c}%
- \expandafter\connect@\expandafter\dir\poly@dir%
- \X@p=\X@c\Y@p=\Y@c}
-
-% Polygonal edge
-% Requires c to be the reference point
-\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
-% \ifpoly@badinters
-% \xyerror@{Could not find intersection for polygon}\fi
- }%0
- \or \DN@{\polygonEdge@Under}%1
- \or \DN@{\polygonEdge@Dist}%2
- \or \DN@{\rectangleProp@}%3 I do not understand Prop!
- \or \DN@{\polygonEdge@Inner}%4
- \or \DN@{\polygonEdge@Outer}%5
- \else \DN@{}\fi
- \next@}
-
-
-\newif\ifpoly@badinters
-
-\xydef@\polygonEdge@Inters{%
-% \W@{Edge intersection with (\the\X@c, \the\Y@c) -> (\the\X@p,\the\Y@p)}%
-% \W@{ for polygon: \poly@id}%
-% \W@{ with list: \poly@list}%
-% \W@{ with cache: \poly@cache}%
- % Check the cache first
- \ifx\poly@cache\poly@empty
- \poly@intersdoit
- \else
- \expandafter\poly@intersprobecache\poly@cache @%
- \fi
-% \xy@showthe c{Inters res}%
-}
-
-%
-% Redefine poly@cachehit to poly@cachehitdisable to diable polygon caching
-\xydef@\poly@cachehit#1#2{%
-% \W@{ intersection point found in cache}%
- \X@c=#1\Y@c=#2}
-
-\xydef@\poly@cachehitdisable#1#2{\poly@intersdoit}
-%\let\poly@cachehit=\poly@cachehitdiasable% Uncomment this line to disable $
-
-
-% Probes the cache
-%
-\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
-}
-
-
-% Computes the intersection between the line cp and the edge.
-% Both intersection points are stored in the cache, the one in the
-% direction towards p first.
-\xydef@\poly@intersdoit{%
-% \W@{ intersection not in cache. Computing it}%
- % Save A@ and B@ because we cannot change them
- \edef\polyoldA@{\the\A@}\edef\polyoldB@{\the\B@}%
- % Initialize the intersection points
- \def\poly@intersneg{}\def\poly@interspos{}%
- \save@
- \poly@setorigin % Set origin at the beginning of the polygon and
- % set poly@rest
- \def\zeroDivide@{\poly@badinterstrue}% Handle the division by zero except.
- \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@ % Restore A@ and B@
- \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
-}
-
-
- % Set origin to the first point. Define poly@rest
- % Requires c to be set to the reference point
-\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@}}
-
-
-
-
-%
-% Compute one intersection with a given edge
-% c is set to the reference point, p is set to the end of the ray
-% origin is set to the start of the segment
-\xydef@\poly@interseg#1#2{%
- % Default is no intersection
-% \W@{ Intersection with edge (\the\X@origin,\the\Y@origin) -> (#1,#2)}%
- % Compute the absolute values
- \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
- % Set R@c and U@c to the distance to end of segment
- \R@c=\poly@saveXcinters \advance\R@c -\X@origin
- \U@c=\poly@saveYcinters \advance\U@c -\Y@origin
- % Now call intersect to set X@c and Y@c to the intersection point
- \intersect@
- \A@=\X@c \B@=\Y@c % Save result
- \restore
- \ifpoly@badinters
-% \W@{ \space failed after intersect}%
- \else
-% \W@{ \space after intersect@ (\the\A@,\the\B@)}%
- % Verify that it is on the segment from origin to (#1, #2)
-
-\poly@isonseg\X@origin\Y@origin\A@\B@\poly@saveXcinters\poly@saveYcinters
- \ifpoly@badinters
-% \W@{ \space failed after seg check}%
- \else
- % Verify that (A,B) is on the ray from c to p
- \poly@isonray\X@c\Y@c\A@\B@\X@p\Y@p
- \ifpoly@badinters
- % It is on the negative ray
-% \W@{ \space a negative intersection}%
- \edef\poly@intersneg{\the\A@,\the\B@}%
- \else
-% \W@{ \space a positive intersection}%
- \edef\poly@interspos{\the\A@,\the\B@}%
- \fi
- \fi
- \fi
- % Set the origin to the start of the next segment
- \X@origin=\poly@saveXcinters\Y@origin=\poly@saveYcinters
-}
-
-
-%
-% Computes the distance from reference point to the intersection
-%
-\xydef@\polygonEdge@Dist{\xyerror@{Dist is not yet implemented for polygons}}
-
-%
-% Checks that #1 <= #2 <= #3 or that #3 <= #2 <= #1
-% Sets ifpoly@badinters otherwise
-% ifpoly@closedrange decides whether the second inequality is also checked
-% All checks are done with a precision of 100*almostz@ =~ 5000sp = 0.08pt
-\newif\ifpoly@closedrange
-\xydef@\poly@isinrange#1#2#3{%
- \ifpoly@badinters \else
- \dimen@=#1\dimen@i=#2\dimen@ii=#3\relax
-% \W@{check if in \ifpoly@closedrange closed\else open\fi\space
-% range 1=\the\dimen@,2=\the\dimen@i,3=\the\dimen@ii}%
- \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
-% \ifpoly@badinters \W@{ failed}\else\W@{ succeeded}\fi
- \fi}
-
-%
-% Checks that (#3,#4) is on a segment defined by (#1,#2)->(#5,#6)
-\xydef@\poly@isonseg#1#2#3#4#5#6{%
- % Check X first
- \poly@closedrangetrue
- \poly@isinrange{#1}{#3}{#5}%
- \poly@isinrange{#2}{#4}{#6}%
-
-}
-
-%
-% Checks that (#3,#4) is on a ray defined by (#1,#2)->(#5,#6)
-\xydef@\poly@isonray#1#2#3#4#5#6{%
- % Check X first
- \poly@closedrangefalse
- \poly@isinrange{#1}{#3}{#5}%
- \poly@isinrange{#2}{#4}{#6}%
-
-}
-%
-% Test whether (Xp,Yp) is inside the polygon (or on the edge)
-% Sets \ifInside@ accordingly
-\xydef@\polygonEdge@Under{%
-% \W@{}\W@{Edge Under with c=(\the\X@c,\the\Y@c) and p=(\the\X@p,\the\Y@p)}%
-% \W@{ for polygon: \poly@list}%
- % Save A@ and B@
- \edef\polysaveA@under{\the\A@}\edef\polysaveB@under{\the\B@}%
- % Save X@c and Y@c
- \edef\poly@saveXcUnder{\the\X@c}\edef\poly@saveYcUnder{\the\Y@c}%
- % Compute the intersection
- \polygonEdge@Inters
- \ifpoly@badinters% p is very close to c
- \Inside@true
- \else
- \A@=\X@c\B@=\Y@c
- % Restore c
- \X@c=\poly@saveXcUnder\Y@c=\poly@saveYcUnder
- % Now verify that the intersection point is on the ray c->p
- \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
-% \ifInside@\W@{->inside}\else\W@{->outside}\fi
-}
-
-%
-% Compute the inner rectangle
-%
-\xydef@\polygonEdge@Inner{%
-% \W@{}\W@{Edge Inner with (\the\X@c, \the\Y@c) -> (\the\X@p,\the\Y@p)}%
-% \W@{ for polygon: \poly@list}%
-% \W@{ with cache: \poly@cache}%
- % Save everything except c
- \enter@{\basefromthebase@ \pfromthep@ \DirectionfromtheDirection@}%
- % Save c in Lc,Dc
- \L@c=\X@c \D@c=\Y@c
- % Compute the two intersection points
- \polygonEdge@Inters
- \ifpoly@badinters
- \czeroEdge@
- \else
- % Save the result in Rc,Uc and in X@c,Y@c
- \expandafter\poly@getinterspoints\poly@cache @%
- % Now compute the inner rectangle centered
- \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@
-% \xy@showthe c{After inner}%
-}
-
-\xydef@\poly@getinterspoints#1,#2,#3,#4,#5,#6@{%
- \R@c=#3\U@c=#4\X@c=#5\Y@c=#6}
-
-%
-% Compute the outer rectangle (set Uc,Dc,Lc,Rc and Edgec).
-% Does not change Xc,YC
-%
-\xydef@\polygonEdge@Outer{%
-% \W@{Computing outer for \poly@list}\xy@showthe c{Before outer}%
- % Save everything except c
- \enter@{\basefromthebase@ \pfromthep@ \DirectionfromtheDirection@}%
- \czeroEdge@ % Zero out c
- \let\poly@map@next=\poly@map
- \poly@mapExpand\poly@findextent\poly@list
- \Edge@c={\rectangleEdge}%
- \leave@
-% \xy@showthe c{After outer}
-}
-
-\xydef@\poly@findextent#1#2{%
-% \xy@showthe c{Before find extent}%
-% \W@{ extx=#1, exty=#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
-% \xy@showthe c{ After extent}%
-}
-
-% Change to account for polynomial shapes, in addition to circular ones
-%
-\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
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- \BUG: This code should be merged with the `frame' and `poly'
- options.
-
- The example at the end of \S??g[:smart] illustrates the extensions.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-% $Log$
-% Received from George.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-prefix:"\t"
-% fill-column:77
-% paragraph-separate:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% paragraph-start:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyoztex.doc b/Master/texmf-dist/source/generic/xypic/xyoztex.doc
deleted file mode 100644
index 4a5e34df9be..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyoztex.doc
+++ /dev/null
@@ -1,316 +0,0 @@
-%% $Id: xyoztex.doc,v 3.3 1996/12/18 09:26:26 ross Exp $
-%%
-%% Xy-pic ``OzTeX'' driver interface option.
-%% Copyright (c) 1995-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{oztex}{OzTeX driver}{\stripRCS$Revision: 3.3 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This driver provides the necessary interface to support the \PS\ back-end and
-other \PS\ effects when using the DVI driver of versions 1.8+ of \OzTeX\ by
-Andrew Trevorrow,\footnote{\OzTeX\ is a shareware implementation of \TeX\ for
-Macintosh available from many bulletin boards and ftp sites; v1.5 and earlier
-versions were freeware. Email contact: <akt@kagi.com>.} "Earlier versions
-of \OzTeX\ should instead use the driver option |\xyoption{17oztex}|."
-
-Effects such as colour, line-thickness and rotated or scaled diagrams are
-only partially supported in that the effects cannot be applied to any text or
-symbols placed using fonts. This is due to the nature of \OzTeX\ <driver>,
-whose optimization of the placement of font-characters precludes the
-applicability of such effects. Furthermore the \PS\ dictionary must be
-available in a file called |global.ps| or appended to the
-|OzTeXdict.pro|. However with version 1.8 and later of \OzTeX, there is the
-alternative of using the |dvips| <driver>, which does support all the \PS\
-effects available in \Xy-pic.
-
-\NOTE: To use \Xy-pic effectively with \OzTeX\ requires changing several
-memory parameters. In particular a `Big-\TeX' is needed, along with an
-increase in the |pool_size| parameter. Explicit instructions are contained
-in the file |INSTALL.|\-|OzTeX| of the \Xy-pic distribution.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\DOCMODE(
-\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
-}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Supported |\special| effects are...
-%
-\begin{itemize}
-
-\item colour, using \PS, but not of font-characters.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\DOCMODE(
-\xydef@\oztexColor@@{\OzTeXColours@}
-
-\xydef@\OzTeXColours@{\OzTeXPStypes@
- \let\xylocalColor@=\xyNoColor@@ \def\xycolor@{\xycolor@@}%
- \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%\XYpredict@
- \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@
- }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item crayon colours, similarly restricted.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The 68 colours are those that |dvips| recognizes by name,
-thanks to Tomas Rokicki.
-
-\DOCMODE(
-\xydef@\OzTeXCrayon@@{\installCrayolaColors@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item \PS\ back-end.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xydef@\oztexPS@@{\oztexPS@}
-
-\xydef@\oztexPSunload@{\UnloadPS@
- \def\xyPSdictname{}\UsePSdict@@false
- \let\installxyps@@=\relax
- \let\UnloadPS@@=\UnloadPS@
- \xyPSshapes@true
- \let\oztexPS@@=\oztexPS@ }
-\DOCMODE)
-
-\DOCMODE(
-\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
-% \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
- \OzTeXCurrpt@ }
-
-{\catcode`\^^M=\active %
- \gdef\next{\catcode`\^^M=\active \let^^M=\space \obeyspaces}}
-\xylet@\obeyOzTeXlines@=\next
-\DOCMODE)
-
-The \PS\ operators |@bxy| and |@exy| are defined in |xyps-ps| for bypassing
-the mechanism used in \OzTeX\ to isolate code passed in |\special| commands.
-Although it is possible (albeit difficult) to devise \PS\ to deduce the
-current location for use with the ``raw'' specials, this information cannot
-be used to do rotations and scaling as with other <driver>s.
-Hence the value of |\xyPScurrpt@@| is taken to be empty.
-
-\DOCMODE(
-\xydef@\OzTeXCurrpt@{\let\xyPScurrpt@@=\OzTeXCurrpt@@}%
-\xydef@\OzTeXCurrpt@@{\PSraw@@{xyp}}
-\DOCMODE)
-
-\medskip
-
-This avoids dumping the dictionary into the dvi-file, making sure
-that instead it goes into a file, specified by |\xyPSdictname|,
-which defaults to |global.ps|.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-The parameters |#1#2#3| of |\xyOzTeXheader| gobble tokens
-that are unnecessary with \OzTeX.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item variable line-widths and poly-lines, using \PS.
-\DOCMODE(
-\xydef@\oztexLine@@{\oztexLine@}
-
-\xydef@\oztexLine@{\OzTeXPStypes@
- \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%\XYpredict@
- \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}\installPSline@ }%
- \else\DN@{\xydriverfail@{line-styles are}\UnloadLine@\relax}\fi
- \next@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item extra frames and fills, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item patterns and tiles, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item rotated/scaled diagrams and text, recognised but not supported.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-In fact \OzTeX\ cannot support rotations and scaling.
-Instead we go through all the motions of providing \PS\ support,
-then set a flag that causes a limited number of warning messages to be
-generated as requests are made for these effects.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-This never worked properly. It requires too much hacking at Trevorrow's
-code for little gain, since text-rotation can never work anyway.
-Use the \dvips\ option instead!
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-The default code will just do nothing as far as the output is concerned...
-
-\DOCMODE(
-\let\OzTeXRotScale@=\xyRotScale@@
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{itemize}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xyoztex.doc,v $
-% Revision 3.3 1996/12/18 09:26:26 ross
-% improvements to file-loading commands
-% fixed missing @ bug
-%
-% Revision 3.2 1995/09/19 18:21:41 ross
-% Bug fix release.
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% NEW for version 3.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xypic.doc b/Master/texmf-dist/source/generic/xypic/xypic.doc
deleted file mode 100644
index 631e0e10b1a..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xypic.doc
+++ /dev/null
@@ -1,75 +0,0 @@
-%% $Id: xypic.doc,v 3.3 1996/12/19 03:31:56 krisrose Exp $
-%%
-%% Xy-pic v2 compatibility loading.
-%% Copyright (c) 1993-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This file (version \stripRCS$Revision: 3.3 $) just loads the |v2|
- feature.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\DOCHEADER
-
- Here it is\dots
-
-\DOCMODE(
-\input xyv2
-\endinput
-\DOCMODE)
-
- The log reveals that this was originally the main file.
-
-\DOCMODE(
-% $Log: xypic.doc,v $
-% 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.10 1994/06/15 12:55:07 kris
-% Second 3beta release: bug fixes.
-%
-% Revision 2.7 1994/03/08 02:06:01 kris
-% Release 3alpha.
-%
-% Revision 2.6.9.1 1994/03/07 04:22:46 kris
-% Last internal 3alpha and pre-2.7 release.
-%
-% This file NEW for version 2.7 for backwards compatibility.
-% Original xypic.doc renamed to xy.doc.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-prefix:"\t"
-% fill-column:77
-% paragraph-separate:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% paragraph-start:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xypic.map b/Master/texmf-dist/source/generic/xypic/xypic.map
deleted file mode 100644
index 9fd5279567e..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xypic.map
+++ /dev/null
@@ -1,66 +0,0 @@
-%% $Id: xypic.map,v 3.7 1999/02/16 15:12:50 krisrose Exp krisrose $
-%%
-%% Xy-pic PostScript type 1 font map for DVIPS.
-%% Copyright (c) 1995-1997 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-%% 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.
-
-% USAGE:
-% Put this line in your DVIPS (and/or other PS driver) header
-% file directory (uncommented, starting in column 1):
-%
-% p+ xypic.map
-%
-% THANKS to Y&Y Inc. for making the much improved PFB fonts available to
-% TeX community.
-
-
-xydash10 XYDASH10 <xydash10.pfb
-xyatip10 XYATIP10 <xyatip10.pfb
-xyatip11 XYATIP10 "1.1 ExtendFont" <xyatip10.pfb
-xyatip12 XYATIP10 "1.2 ExtendFont" <xyatip10.pfb
-xybtip10 XYBTIP10 <xybtip10.pfb
-xybtip11 XYBTIP10 "1.1 ExtendFont" <xybtip10.pfb
-xybtip12 XYBTIP10 "1.2 ExtendFont" <xybtip10.pfb
-
-xybsql10 XYBSQL10 <xybsql10.pfb
-xycirc10 XYCIRC10 <xycirc10.pfb
-
-xycmat10 XYCMAT10 <xycmat10.pfb
-xycmat11 XYCMAT10 "1.1 ExtendFont" <xycmat10.pfb
-xycmat12 XYCMAT10 "1.2 ExtendFont" <xycmat10.pfb
-xycmbt10 XYCMBT10 <xycmbt10.pfb
-xycmbt11 XYCMBT10 "1.1 ExtendFont" <xycmbt10.pfb
-xycmbt12 XYCMBT10 "1.2 ExtendFont" <xycmbt10.pfb
-
-xyeuat10 XYEUAT10 <xyeuat10.pfb
-xyeuat11 XYEUAT10 "1.1 ExtendFont" <xyeuat10.pfb
-xyeuat12 XYEUAT10 "1.2 ExtendFont" <xyeuat10.pfb
-xyeubt10 XYEUBT10 <xyeubt10.pfb
-xyeubt11 XYEUBT10 "1.1 ExtendFont" <xyeubt10.pfb
-xyeubt12 XYEUBT10 "1.2 ExtendFont" <xyeubt10.pfb
-
-% Obsolete fonts not included by default (and not available for PDF).
-%xyline10 XYLINE10 <xyline10.pfa
-%xyqc10 XYQC10 <xyqc10.pfa
-%xymisc10 XYMISC10 <xymisc10.pfa
diff --git a/Master/texmf-dist/source/generic/xypic/xypic.sty b/Master/texmf-dist/source/generic/xypic/xypic.sty
deleted file mode 100644
index 1a493530c68..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xypic.sty
+++ /dev/null
@@ -1,29 +0,0 @@
-%% $Id: xypic.sty,v 3.3 1996/12/19 03:31:56 krisrose Exp $ -*-tex-*-
-%%
-%% LaTeX style option to load Xy-pic in version 2 compatibility mode.
-%% by Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% 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.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/Master/texmf-dist/source/generic/xypic/xypoly.doc b/Master/texmf-dist/source/generic/xypic/xypoly.doc
deleted file mode 100644
index 5c4dac00198..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xypoly.doc
+++ /dev/null
@@ -1,1262 +0,0 @@
-%% $Id: xypoly.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Xy-pic ``Polygon'' feature.
-%% Copyright (c) 1994-1997 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this macro package; if not, write to the Free Software Foundation,
-%% Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{poly}{Polygon feature}{\stripRCS$Revision: 3.7 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\noindent
- This feature provides a means for specifying the locations of
- vertices for regular polygons, with any number ($\ge 3$) of sides.
- Polygons can be easily drawn and/or the vertex positions used to constuct
- complex graphics within an \Xy-picture. Many non-regular polygons can
- be specified by setting a non-square basis.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-Some of the effects use |\ar| so make sure the `arrow' feature is loaded.
-\DOCMODE(
-\xyrequire{arrow}\xycatcodes
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\message{polygons,}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\medskip
-
-A polygon is most easily specified using \dots
-\begin{defs}
- |\xypolygon|<number>|{}| & \quad with <number> sides;\cr
- |\xypolygon|<number>|{|<tok>|}|\kern-30pt &\quad\quad <tok> at vertices;\cr
- |\xypolygon|<number>|{|<object>|}|\kern-60pt &\cr
- \multispan2 \quad\quad with a general <object> at each vertex;\hfill\cr
-%% \multispan2 |!P| \quad alias for |\xypolygon| within |\xygraph| \cr
-\end{defs}
-\unskip\noindent
-%
-Here <number> is a sequence of digits, giving the number of sides.
-If used within an |\xy|\dots|\endxy| environment then the polygon
-will be centred on $c$, the current <pos>. However an |\xypolygon|
-can be used outside such an environment, as ``stand-alone'' polygon;
-the whole picture must be specified within the |\xypolygon| command.
-
-In either case the shape is obtained by spacing vertices equally
-around the ``unit circle'' with respect to the current basis.
-If this basis is non-square then the vertices will lie on an ellipse.
-Normally the polygon, with at most 12 vertices, is oriented so as to
-have a flat base when specified using a standard square basis.
-With more than 12~vertices the orientation is such that the line
-from the centre to the first vertex is horizontal, pointing to the right.
-Any other desired orientation can be obtained, with any number of vertices,
-by using the |~={|\dots|}| as described below.
-
-\medskip
-The general form for |\xypolygon| is \dots
-\begin{defs1}
- |\xypolygon|<number>|"|<prefix>|"{|<switches>\dots|}|
-\end{defs1}\unskip\noindent
-%
-where the |"|<prefix>|"| and <switches> are optional.
-Their uses will be described shortly.
-
-\medskip
-
-A |\xypolygon| establishes positions for the vertices of a polygon.
-At the same time various things may be typeset,
-according to the specified <switches>.
-An <object> may be dropped at each vertex, ``spokes'' drawn to the
-centre and successive vertices may be connected as the polygon's ``sides''.
-Labels and breaks can be specified along the spokes and sides.
-
-Each vertex is automatically named:
-|"1"|, |"2"|, \ldots, |"|<number>|"| with |"0"| as centre.
-When a <prefix> has been given,
-names |"|<prefix>|0"|, \dots, |"|<prefix><number>|"| are used instead.
-While the polygon is being constructed the macro |\xypolynum| expands to
-the number of sides, while |\xypolynode| expands to the number
-of each vertex, spoke and side at the time it is processed.
-This occurs in the following order:
-{\it vertex}$\,1$, {\it spoke}$\,1$, {\it vertex}$\,2$,
-{\it spoke}$\,2$, {\it side}$\,1$, {\it vertex}$\,3$,
-{\it spoke}$\,3$, {\it side}$\,2$, \dots , {\it vertex}$\;n$,
-{\it spoke}$\;n$, {\it side}$\;n-1$, {\it side}$\;n$
-where the final side joins the last vertex to the first.
-
-The macro |\xypolyname| holds the name of the polygon,
-which is <prefix> if supplied. In this case the value of
-|\xypolynum| is also stored as |\|<prefix>|NUMSIDES|,
-accessible outside the polygon.
-
-As stated above, a polygon with up to 12 vertices is oriented
-so as to have a flat base, when drawn using a standard square basis.
-Its vertices are numbered in anti-clockwise order, commencing with the one
-at horizontal-right of centre, or the smallest angle above this
-(see example below).
-With more than 12 vertices then vertex |"1"| is located on the horizontal,
-extending to the right from centre (assuming a standard square basis).
-By providing a switch of the form |~={|<angle>|}| then the vertex |"1"|
-will be located on the unit circle at <angle>$^\circ$ anti-clockwise
-from ``horizontal'' --- more correctly, from the $X$-direction in the
-basis to be used when setting the polygon, which may be established
-using a |~:{|\dots|}| switch.
-
-\begin{code}
-\def\objectstyle{\scriptscriptstyle}
-\xy \xygraph{!{/r2pc/:}
-[] !P3"A"{\bullet}
-"A1"!{+U*++!D{1}} "A2"!{+LD*+!RU{2}}
-"A3"!{+RD*+!LU{3}} "A0"
-[rrr]*{0}*\cir<5pt>{}
-!P6"B"{~<-\cir<5pt>{}}
-"B1"1 "B2"2 "B3"3 "B4"4 "B5"5 "B6"6 "B0"
-[rrr]0 !P9"C"{~*{\xypolynode}}}\endxy
-\end{code}
-$$\docode$$\nobreak
-\begin{exercise}
-Give code to typeset these.
-\answertext{Here is the code actually used to typeset the |\xypolygon|s,
-within an |\xygraph|. It illustrates three different ways to place
-the numbers. Other ways are also possible.}
-\answercode
-\answertext\displaycode
-\end{exercise}
-\goodbreak\goodbreak
-
-One important use of <prefix> is to allow the vertices of more than one
-polygon to be accessed subsequently within the same picture.
-Here are some examples of this,
-incorporating the |~:{|\dots|}| switch to perform simple rescalings.
-Firstly the edges of a dodecahedron as a planar graph:
-
-\begin{code}
-\xy /l1.5pc/:,{\xypolygon5"A"{}},
-{\xypolygon5"B"{~:{(1.875,0):}~>{}}},
-{\xypolygon5"C"{~:{(-2.95,0):}~>{}}},
-{\xypolygon5"D"{~:{(-3.75,0):}}},
-{"A1"\PATH~={**@{-}}'"B1"'"C4"'"B2"},
-{"A2"\PATH~={**@{-}}'"B2"'"C5"'"B3"},
-{"A3"\PATH~={**@{-}}'"B3"'"C1"'"B4"},
-{"A4"\PATH~={**@{-}}'"B4"'"C2"'"B5"},
-{"A5"\PATH~={**@{-}}'"B5"'"C3"'"B1"},
-"C1";"D1"**@{-},"C2";"D2"**@{-},
-"C3";"D3"**@{-},"C4";"D4"**@{-},
-"C5";"D5"**@{-} \endxy
-\end{code}
-$$\docode$$
-\displaycode
-
-\noindent
-Next a hexagonal pyramid, a rectangular box
-and an octahedral crystal specified as a triangular anti-prism.
-Notice how the |~:{|\dots|}| switch is used to create non-square bases,
-allowing the illusion of 3D-perspective in the resulting diagrams:
-
-\begin{code}
-\xy/r2pc/: ="A", +(.2,1.5)="B","A",
-{\xypolygon6{~:{(1,-.1):(0,.33)::}
- ~<>{;"B"**@{-}}}}\endxy
-\quad \xy /r2pc/:
-{\xypolygon4"A"{~:{(0,.7)::}}},+(.7,1.1),
-{\xypolygon4"B"{~:{(.8,0):(0,.75)::}}},
-"A1";"B1"**@{.},"A2";"B2"**@{.},
-"A3";"B3"**@{.},"A4";"B4"**@{.}
-\endxy\quad \xy /r2pc/:
-{\xypolygon3"A"{~:{(0,.7)::}}},+(.7,1.1),
-{\xypolygon3"B"{~:{(-.85,0):(-.15,.8)::}}}
-,"A1"\PATH~={**@{.}}'"B2"'"A3"'"B1"
-'"A2"'"B3"'"A1" \endxy
-\end{code}
-$$\docode$$
-\displaycode
-
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-|\xypolynode| simply reads the value of a counter called |\xypolynode@|.
-It is set initially at -1, to indicate no polygon yet. This is used to
-establish the default naming in case polygons are nested.
-
-\DOCMODE(
-\xynew@{count}\xypolynode@\xypolynode@=\m@ne
-\xydef@\xypolynode{\the\xypolynode@}
-
-\xydef@\xypolyNUMSIDES@{}
-\xydef@\xypolynum{\xypolyNUMSIDES@}
-\DOCMODE)
-
-To allow recursion the values of |\xypolyNUMSIDES@| and |\xypolynode@| are saved
-upon entering an |\xypolygon|, to be restored at the end.
-
-\DOCMODE(
-\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@}}
-\DOCMODE)
-
-Read the number of vertices by parsing digits.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-Next we check whether a prefix has been supplied for creating the vertex
-names. If so it is stored as |\xypolyPREFIX@|, which otherwise expands to
-empty. The number of sides is also stored using the prefix.
-
-\DOCMODE(
-\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 }
-\DOCMODE)
-
-Currently any tokens remaining before the opening brace are
-discarded, with an accompanying message.
-
-\DOCMODE(
-\xydef@\xypoly@@i#1#{\begingroup
- \DN@{#1}\ifx\next@\empty\else
- \xywarning@{discarding unused tokens: #1}\fi \xypoly@@ }
-\DOCMODE)
-
-Next it is time to analyse the braced information,
-e.g. to set switches and/or adjust the scale.
-If this information is empty |{}| then the default
-values are used.
-
-\DOCMODE(
-\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@{}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Vertex object:}
-
-Unless the first character is |~|, signifying a ``switch'', then the whole
-of the braced material is taken as specifying the <object> for each vertex.
-It will be typeset with a circular edge using |\drop[o]...|,
-except when there is just a single token <tok>.
-In this case it is dropped as |\drop=0{|<tok>|}|, having zero size.
-An object can also be dropped at each vertex using the switch |~*{|\dots|}|,
-in which case it will be circular, with the current {\it objectmargin\/}
-applied.
-
-The next example illustrates three different ways of specifying a |\circ|
-at the vertices.
-
-\begin{code}
-\xy/r2pc/: {\xypolygon12{\circ}},
-+/r5pc/,{\xypolygon10{~<{-}~>{}{\circ}}},
-+/r5pc/,{\xypolygon8{~*{\circ}~<=}}\endxy
-\end{code}
-$$\docode$$
-
-\displaycode
-
-\DOCMODE(
-{\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@\def\xypolyVERTEX@{*[o]{##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}%
-% \checkpolytok@\xypolyVERTEX@{*=0}##1@@!\relax
- \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}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Switches}{}\hfill
-\par{}
-
-\noindent
-The allowable switches are given in the following table:
-%
-\begin{defs}
-|~:{|\ldots|}| & useful for rescaling.\cr
-|~*{|<object>|}| & <object> at each vertex.\cr
-|~={|<angle>|}| & align first vertex.\cr
-|~<{|\ldots|}| & directional for ``spokes'';\cr
-|~<<{|<arrow>|}| & use <arrow> for spokes;\cr
-|~<>{|\ldots|}| & labels \& breaks on spokes.\cr
-|~>{|\ldots|}| & directional for ``sides'';\cr
-|~><{|<arrow>|}| & use <arrow> for sides;\cr
-|~>>{|\ldots|}| & labels \& breaks on sides.\cr
-\end{defs}
-%
-\noindent
-Using |~<<{|<arrow>|}| or |~><{|<arrow>|}| is most appropriate
-when arrowheads are required on the sides or spokes, or when
-labels/breaks are required. Here <arrow> is as in
-figure~??g[xyarrow.doc:f.arrow],
-so it can be used simply to specify the style of directional to be used.
-Thus |~<<{}| sets each spoke as a default arrow,
-pointing outwards from the centre; |~<<{@{-}}| suppresses the arrowhead,
-while |~><{@{}}| uses an empty arrow along the sides.
-Labels and breaks are specified with |~<>{|\ldots|}| and |~>>{|\ldots|}|,
-where the |{|\ldots|}| use the notation for a <label>,
-as in figure~??g[xyarrow.doc:f.path].
-
-When no tips or breaks are required then the switches |~<{|\ldots|}|
-and |~>{|\ldots|}| are somewhat faster, since less processing is needed.
-Labels can still be specified with |~<>{|\ldots|}| and |~>>{|\ldots|}|,
-but now using the kernel's <place> notation of figure~??g[xy.doc:f.pos].
-In fact any kernel code can be included using these switches.
-With |~<>| the current $p$ and $c$ are the centre and vertex respectively,
-while for |~>>| they are the current vertex and the previous vertex.
-(The connection from vertex |"|<number>|"| to vertex |"1"| is done last.)
-The pyramid above is an example of how this can be used.
-Both |~<{|\ldots|}| and |~<<{|<arrow>|}| can be
-specified together, but only the last will actually be used;
-similarly for |~>{|\ldots|}| and |~><{|<arrow>|}|.
-
-\begin{code}
-\def\alphanum{\ifcase\xypolynode\or A
-\or B\or C\or D\or E\or F\or G\or H\fi}
-\xy/r3pc/: {\xypolygon3{~={40}}},
-{\xypolygon4{~={40}~>{{--}}}},
-{\xypolygon5{~={40}}},
-{\xypolygon6{~={40}~>{{--}}}},
-{\xypolygon11{~={40}}},
-{\xypolygon50{~={40}~>.}}, +/r8pc/,
-{\xypolygon7{~<<{@{-}}~><{}
- ~<>{|*@{x}}~*{\alphanum}
- ~>>{_{\alpha_\xypolynode^{}}}}}
-\endxy
-\end{code}
-$$\docode$$
-\displaycode
-
-
-Use of the |~={|\ldots|}| switch was described earlier.
-When using the |~:{|\ldots|}| more can be done than just setting the base.
-In fact any kernel code can be supplied here.
-It is processed prior to any other part of the polygon.
-The graphics state has $c$ at the centre of the polygon,
-$p$ at the origin of coordinates within the picture and
-has basis unchanged from what has previously been established.
-The current point $c$ will be reset to the centre following any code
-interpreted using this switch.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Note that |~!| was appended by |\xypoly@@|, in order to indicate the end
-of the braced tokens. The macro |\xypolywhich@| is the main parser,
-with |\xypoly@SPOKES@| and |\xypoly@SIDES@| handling the subcases
-for |~<| and |~>|.
-
-\DOCMODE(
-\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{\def\xypolyVERTEX@{*+[o]{##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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-A further simplification exists for sides and spokes without <arrow>s.
-If <tok> is a single character then |~>|<tok>, |~>{|<tok>|}|, |~>{{|<tok>|}}|
-all specify the directional |\dir{|<tok>|}|; similarly with the |~<| switch.
-On the other hand, compound directionals require all the braces,
-e.g. |~>{{--}}| and |~>{2{.}}|.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This is achieved with the macro
-|\checkpolytok@#1#2#3#4@!#5| which handles the bare <tok> case
-by adding braces around <tok> which has been passed as |#3|, preceeding
-it with |#2|. This is then |\def|'d to the control-sequence name
-passed as |#1|. Finally continue with the command passed as |#5|.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\medskip
-
-After all switches have been processed, remaining tokens
-are used to specify the <object> for each vertex.
-Such tokens will be used directly after a |\drop|,
-so can include object <modifier>s as in figure~??g[xy.doc:f.object].
-If an <object> has already been specified, using the |~*| switch,
-then the following message will be written to the \TeX\ log:
-
-\begin{center}
-\noindent{\tt Xy-pic Warning: vertex already specified,
-discarding unused tokens:}
-\end{center}
-%
-with tokens at the end indicating what remains unprocessed.
-Similarly extra tokens before the |{|\dots|}| generate a message:
-
-\begin{center}
-\noindent|Xy-pic Warning: discarding unused tokens: |
-\end{center}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Nested Polygons}{}\hfill
-\par{}
-
-\noindent
-When |\xypolygon| is specified within either a |~<>{|\dots|}|
-or |~>>{|\dots|}| switch for another polygon,
-then the inner polygon inherits a name which incorporates also the number
-of the part on which it occurs, as given by |\xypolynode|.
-This name is accessed using |\xypolyname|.
-In the following example the inner polygon is
-placed using |~<>| in order to easily adjust its orientation
-to the outward direction of the spokes.
-
-\begin{code}
-\xypolygon4{~:{/r5pc/:}
- ~<>{*\frm<8pt>{o}\xypolygon4{~:{/-2pc/:}
- ~*{\xypolyname\xypolynode}}}
- [o]=<5pc>{\xypolynode}}
-\end{code}
-$$\docode$$
-\displaycode
-
-Notice how nested polygons inherit names |"1,1"|, |"1,2"|, \dots,
-|"4,1"|, \dots, |"4,4"| for their vertices. If a <prefix> is supplied
-at the outermost level then the names become: |"|<prefix>$i,j$|"|.
-Specifying a <prefix> for the inner polygon overrides this naming scheme.
-The same names may then be repeated for each of the inner polygons,
-allowing access afterwards only to the last---possibly useful as a
-memory saving feature when the vertices are not required subsequently.
-
-Four levels of nesting gives a quite acceptable ``Sierpinski gasket''.
-The innermost triangle is provided by |\blacktriangle|
-from the \AMS\ symbol font |msam5|, at 5-point size.
-Further levels can be achieved using the \PS\ backend,
-otherwise line segments become too small to be rendered using \Xy-fonts.
-
-\begin{code}
-\font\msamv=msam5 at 5pt
-\def\blacktriangle{{\msamv\char'116}}
-\def\objectstyle{\scriptscriptstyle}
-\xypolygon3{~:{/r5.2pc/:}
- ~>{}~<>{?\xypolygon3"a"{~:{(.5,0):}
- ~>{}~<>{?\xypolygon3"b"{~:{(.5,0):}
- ~>{}~<>{?\xypolygon3"c"{~:{(.5,0):}
- ~>{}~<>{?\xypolygon3"d"{~:{(.5,0):}
-~<>{?*!/d.5pt/=0\hbox{\blacktriangle}}
-}} }} }} }} }
-\end{code}
-$$\docode$$\goodbreak
-\displaycode
-
-\noindent
-Note the use of naming in this example; when processing this manual
-it saves 13,000+ words of main memory and 10,000+ string characters
-as well as 122 strings and 319 multi-letter control sequences.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\begin{figure*}[ht]
-{\footnotesize \def"#1"{\edef\qq{#1}\expandafter\futurelet\expandafter\next\expandafter\q\qq}%
-\def\q{\ifx-\next \def\next-{~\llap{$-$}}\else \def\next{~}\fi \next}%
-\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}cllllllllll}
-$n$ & $\sin{\pi\over n}$ & $\cos{\pi\over n}$
- & $\sin{2\pi\over n}$ & $\cos{2\pi\over n}$
- & $\sin{3\pi\over n}$ & $\cos{3\pi\over n}$
- & $\sin{4\pi\over n}$ & $\cos{4\pi\over n}$
- & $\sin{5\pi\over n}$ & $\cos{5\pi\over n}$\cr
- 0 & "\sinPIon0" & "\cosPIon0" & "\sinTwoPIon0" & "\cosTwoPIon0"
- & "\sinThreePIon0" & "\cosThreePIon0" & "\sinFourPIon0" & "\cosFourPIon0"
- & "\sinFivePIon0" & "\cosFivePIon0"\cr
- 1 & "\sinPIon1" & "\cosPIon1" & "\sinTwoPIon1" & "\cosTwoPIon1"
- & "\sinThreePIon1" & "\cosThreePIon1" & "\sinFourPIon1" & "\cosFourPIon1"
- & "\sinFivePIon1" & "\cosFivePIon1"\cr
- 2 & "\sinPIon2" & "\cosPIon2" & "\sinTwoPIon2" & "\cosTwoPIon2"
- & "\sinThreePIon2" & "\cosThreePIon2" & "\sinFourPIon2" & "\cosFourPIon2"
- & "\sinFivePIon2" & "\cosFivePIon2"\cr
- 3 & "\sinPIon3" & "\cosPIon3" & "\sinTwoPIon3" & "\cosTwoPIon3"
- & "\sinThreePIon3" & "\cosThreePIon3" & "\sinFourPIon3" & "\cosFourPIon3"
- & "\sinFivePIon3" & "\cosFivePIon3"\cr
- 4 & "\sinPIon4" & "\cosPIon4" & "\sinTwoPIon4" & "\cosTwoPIon4"
- & "\sinThreePIon4" & "\cosThreePIon4" & "\sinFourPIon4" & "\cosFourPIon4"
- & "\sinFivePIon4" & "\cosFivePIon4"\cr
- 5 & "\sinPIon5" & "\cosPIon5" & "\sinTwoPIon5" & "\cosTwoPIon5"
- & "\sinThreePIon5" & "\cosThreePIon5" & "\sinFourPIon5" & "\cosFourPIon5"
- & "\sinFivePIon5" & "\cosFivePIon5"\cr
- 6 & "\sinPIon6" & "\cosPIon6" & "\sinTwoPIon6" & "\cosTwoPIon6"
- & "\sinThreePIon6" & "\cosThreePIon6" & "\sinFourPIon6" & "\cosFourPIon6"
- & "\sinFivePIon6" & "\cosFivePIon6"\cr
- 7 & "\sinPIon7" & "\cosPIon7" & "\sinTwoPIon7" & "\cosTwoPIon7"
- & "\sinThreePIon7" & "\cosThreePIon7" & "\sinFourPIon7" & "\cosFourPIon7"
- & "\sinFivePIon7" & "\cosFivePIon7"\cr
- 8 & "\sinPIon8" & "\cosPIon8" & "\sinTwoPIon8" & "\cosTwoPIon8"
- & "\sinThreePIon8" & "\cosThreePIon8" & "\sinFourPIon8" & "\cosFourPIon8"
- & "\sinFivePIon8" & "\cosFivePIon8"\cr
- 9 & "\sinPIon9" & "\cosPIon9" & "\sinTwoPIon9" & "\cosTwoPIon9"
- & "\sinThreePIon9" & "\cosThreePIon9" & "\sinFourPIon9" & "\cosFourPIon9"
- & "\sinFivePIon9" & "\cosFivePIon9"\cr
-10 & "\sinPIon{10}" & "\cosPIon{10}"& "\sinTwoPIon{10}"& "\cosTwoPIon{10}"
- &"\sinThreePIon{10}"&"\cosThreePIon{10}"&"\sinFourPIon{10}"&"\cosFourPIon{10}"
- & "\sinFivePIon{10}" & "\cosFivePIon{10}"\cr
-11 & "\sinPIon{11}" & "\cosPIon{11}"& "\sinTwoPIon{11}"& "\cosTwoPIon{11}"
- &"\sinThreePIon{11}"&"\cosThreePIon{11}"&"\sinFourPIon{11}"&"\cosFourPIon{11}"
- & "\sinFivePIon{11}" & "\cosFivePIon{11}"\cr
-12 & "\sinPIon{12}" & "\cosPIon{12}"& "\sinTwoPIon{12}"& "\cosTwoPIon{12}"
- &"\sinThreePIon{12}"&"\cosThreePIon{12}"&"\sinFourPIon{12}"&"\cosFourPIon{12}"
- & "\sinFivePIon{12}" & "\cosFivePIon{12}"\cr
-\end{tabular*}}
-\caption{Trigonometry tables for Polygon vertices.}
-??=[f.trigonometry]
-\end{figure*}
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Coordinates for the vertices are read from trigonometry tables using control
-sequences
-%
-\begin{defs}
- |\cosPIon|$n$ & |\sinPIon|$n$ \cr
- |\cosTwoPIon|$n$ & |\sinTwoPIon|$n$ \cr
- |\cosThreePIon|$n$ & |\sinThreePIon|$n$ \cr
- |\cosFourPIon|$n$ & |\sinFourPIon|$n$ \cr
- |\cosFivePIon|$n$ & |\sinFivePIon|$n$ \cr
-\end{defs}\unskip\noindent
-%
-which expand to the values of $\cos{\pi\over n}$, $\sin{\pi\over n}$,
-$\cos{2\pi\over n}$, \dots, $\sin{5\pi\over n}$ and are also available for
-other uses. The parameter~$n$ must be a non-negative integer up to~12.
-The complete table is in figure~??[f.trigonometry].
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Specific Polygons:}
-
-All the information from the switches is passed as 8 separate
-parameters to a macro appropriate to the number of sides.
-The parameters have the following uses, and are set as shown:
-
-\begin{defs}
-|#1| & pre-arrow: set by |~<<{...}| else |;|\cr
-|#2| & vertex <object>, set by |~*{...}| \cr
-|#3| & prefix for naming \cr
-|#4| & post-vertex: empty with |\ars| else |**@{...}| \cr
- & ~~where |{...}| is set by |~<{...}| \cr
-|#5| & post-arrow/vertex: set by |~<>{...}| \cr
-|#6| & pre-edge/arrow, set by |~><{...}| \cr
-|#7| & post-edge: empty with |\ars| else |**@{...}| \cr
- & ~~where |{...}| is set by |~>{...}| \cr
-|#8| & post-arrow/edge, set by |~>>{...}| \cr
-\end{defs}
-
-The organisation of this information is done by |\xyPolygon@@@#1|
-which takes as a single parameter a macro appropriate to the
-number of sides, supplied by |\xypoly@@@|.
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-Here is |\xyPolygon@@@|. It constructs a list of tokens to be
-interpreted, after having closed the grouping that was current
-while parsing.
-It starts by setting the value of |\xypolyNUMSIDES@|,
-then a |\save| before adjusting the scale according to the value
-of |\xypolySCALE@|.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-Note how |\endgroup| closes the grouping.
-All the information for the layout of the polygon is contained in
-|\xypolyNUMSIDES@| and the specific polygon macro
-contained in the final |\next@|.
-
-\medskip
-
-Here is where the polygons are defined, individually.
-
-\DOCMODE(
-\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 }
-\DOCMODE)
-
-\DOCMODE(
-\xydef@\xylargePolygon@#1#2{%
- \dimen@=#1\p@
- \xyPolygon@@@\xypolygon@@}
-% \xyerror@{Sorry, polygons with #2 sides are not implemented; maximum 12.}{}}
-\DOCMODE)
-
-We need a looping construction that will not interfere with others used
-at a high level.
-
-\DOCMODE(
-\xydef@\xypolyrepeat@{\fi}
-\xydef@\xypolybody@{}
-\xydef@\xypolyiterate@{\xypolybody@\expandafter\xypolyiterate@\else\fi}
-\xydef@\xypolyloop@#1\xypolyrepeat@{\def\xypolybody@{#1}\xypolyiterate@}
-\DOCMODE)
-
-The counter |\xypolynode@| keeps track of the current vertex, spoke and side.
-Since the user may choose to place another |\xypolygon| along any such
-piece, it is necessary to calculate the angle for each vertex afresh,
-using only information passed via the parameters |#1|,\dots,|#9|.
-
-\DOCMODE(
-\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 }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-
-\xyendinput
-
-% $Log: xypoly.doc,v $
-% Revision 3.7 1999/02/16 15:12:50 krisrose
-% Interim release (Y&Y fonts now free).
-%
-% Revision 3.4 1997/05/18 01:13:24 ross
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/18 09:28:35 ross
-% cosmetic changes in documentation
-%
-% Revision 3.1 1995/09/05 20:28:57 ross
-% Releasing version 3.1!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% Revision 2.12 1994/10/25 03:01:14 ross
-% Final 3beta release [bug fixes & AMS-LaTeX fitting].
-%
-% Created by Ross Moore, September 1994.
-
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyps-c.doc b/Master/texmf-dist/source/generic/xypic/xyps-c.doc
deleted file mode 100644
index 4c3857ceb0c..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyps-c.doc
+++ /dev/null
@@ -1,187 +0,0 @@
-%% $Id: xyps-c.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Xy-pic ``Colour extension'' PostScript backend support.
-%% Copyright (c) 1993-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-%% 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
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Colour}
-
-The included file |xyps-c.tex| (version \stripRCS$Revision: 3.7 $) provides
-\PS\ support for the effects defined in the |color| extension
-in~\S??g[:color].
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The \PS\ style methods are required, so ensure that they are loaded.
-
-\DOCMODE(
-\expandafter\ifx \csname xyps-sloaded\endcsname\empty\else
- \xyinputorelse@{xyps-s}{\xyerror@{Could not load xyps-s}{}}%
- \xycatcodes\fi
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This file is loaded and its effects are activated automatically whenever
-|\xyoption{color}| is requested and the current <driver> supports
-colours using \PS. Should there be any need to turn off this support,
-the following commands are available; they obey usual \TeX\ groupings.
-%
-\begin{defs}
-|\NoPScolor| & remove \PS\ support\kern-50pt\cr
-|\UsePScolor| & reinstate \PS.
-\end{defs}
-%
-Without \PS\ support some drivers may still be able to provide some
-support for colours. These commands are not guaranteed to work adequately
-with all drivers. They are provided primarily for testing and
-trouble-shooting; \eg~with <driver> configurations untested by the
-authors of \Xy-pic, who should be notified of any difficulties.
-
-\DOCMODE(
-\xydef@\UsePScolor{\installPScolor@}
-\xydef@\NoPScolor{\UnloadColor@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Installation}
-
-Installation consists of rebinding the macros |\xycolor@| and |\newxycolor@|
-and of reloading the standard colours to include a description for \PS.
-This installation should be delayed till after |color| and |ps| themselves
-have been installed.
-
-\DOCMODE(
-\xydef@\installPScolor@{\installPSstyle@
- \let\xymath@=\xyPSmath@ \let\xynomath@=\xyPSnomath@
- \let\checkxyPScolor@=\checkxyPScolor@@
- \let\xycolor@@=\xyPScolor@@
- \xystandardcolors@
- \xyuncatcodes }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-All effects defined in the |color| extension can
-be implemented using the \PS\ dictionary, loaded by |xyps-ps|.
-This file provides ``generic'' \PS\ code which is known to work
-correctly with most drivers. No attempt is made to provide special
-code for particular drivers; for driver-specific variations, consult
-the appropriate |xy|<driver>|.doc| file.
-
-\DOCMODE(
-\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
-\DOCMODE)
-
-\DOCMODE(
-\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{#1 /xycolor{#1}def }
-\xydef@\xyPS@color@@#1{\xyPSsplitPS@{{#1}cc}{}}
-\xydef@\xycolor@raw@@#1{\PSraw@@{xyc}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\endinput
-
-% $Log: xyps-c.doc,v $
-% Revision 3.7 1999/02/16 15:12:50 krisrose
-% Interim release (Y&Y fonts now free).
-%
-% Revision 3.3 1996/12/18 10:05:50 ross
-% minor improvements to file-loading commands
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% Revision 2.9 1994/06/09 14:38:56 ross
-% Release 3beta.
-% Includes support for special effects: Rotations, Scaling, Line-width, Colour.
-% Back-ends are separated into separate files.
-% More back-ends are supported, experimentally --- needs testing.
-%
-% Revision 2.9 1994/06/09 14:38:56 ross
-% Release 3beta.
-% Includes support for special effects: Rotations, Scaling, Line-width, Colour.
-% Back-ends are separated into separate files.
-% More back-ends are supported, experimentally --- needs testing.
-%
-% NEW for version 2.9 by by Ross Moore.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyps-col.doc b/Master/texmf-dist/source/generic/xypic/xyps-col.doc
deleted file mode 100644
index 886c891edf5..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyps-col.doc
+++ /dev/null
@@ -1,165 +0,0 @@
-%% $Id: xyps-col.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Xy-pic ``Crayola colour names'' PostScript colour support.
-%% Copyright (c) 1995-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-%% 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-col}{Crayola Colours}{\stripRCS$Revision: 3.7 $}%
-% {Ross Moore}{ross@mpce.mq.edu.au}%
-% {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This option provides definitions for the 68 colours recognised by name by
-Tomas Rokicki's |dvips| driver~\cite{dvips}. These colours become available
-for use in \Xy-pic pictures and diagrams, as |[|<shape>|]| modifiers.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-Only makes sense to load this after |color| and with a <driver> that
-supports it. Indeed this file should only be called from a <driver>-file.
-
-\DOCMODE(
-\xyrequire{color}\xycatcodes
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The information has been copied from Rokicki's |color.pro| \PS\ prolog file:
-``There are 68 predefined colours, with names taken primarily from the
-Crayola crayon box of 64 colours''~\cite[\S16.1]{dvips}.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Different <driver>s may redefine the |\xynewcolor@| macro to set the colour
-by name or by the cmyk-values.
-
-\DOCMODE(
-\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}{}{}%
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\endinput
-
-% $Log: xyps-col.doc,v $
-% Revision 3.7 1999/02/16 15:12:50 krisrose
-% Interim release (Y&Y fonts now free).
-%
-% Revision 3.3 1996/12/18 10:02:23 ross
-% no changes
-%
-% Revision 3.1 1995/09/05 20:28:57 ross
-% Releasing version 3.1!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% Revision 2.12 1995/04/03 05:42:16 ross
-%
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyps-f.doc b/Master/texmf-dist/source/generic/xypic/xyps-f.doc
deleted file mode 100644
index fc3794d5815..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyps-f.doc
+++ /dev/null
@@ -1,270 +0,0 @@
-%% $Id: xyps-f.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Xy-pic ``Frame extension'' PostScript backend support.
-%% Copyright (c) 1995-1997 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-%% 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
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Frames}
-
-The included file |xyps-f.tex| (version \stripRCS$Revision: 3.7 $) provides
-\PS\ support for the effects defined in the |frame| extension described
-in~\S??g[:frame]. It implements some effects otherwise unattainable.
-
-This file is loaded and its effects are activated automatically whenever
-|\xyoption{frame}| is requested and the current <driver> supports \PS\
-effects for frames. Should there be any need to turn off this support, the
-following commands are available; they obey usual \TeX\ groupings.
-%
-\begin{defs}
-|\NoPSframes| & remove \PS\ support\kern-50pt \cr
-|\UsePSframes| & reinstate \PS.
-\end{defs}
-%
-Without \PS\ support ellipses may be shown as circles and all filled
-regions may be represented as black rectangles.
-These commands are provided primarily for testing and trouble-shooting;
-\eg~with <driver> configurations untested by the authors of \Xy-pic,
-who should be notified of any difficulties.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Installation}
-
-The <driver>-file must call the following macro to rebind control sequences
-defined in |xyframe|, thereby allowing the \PS\ methods to be used.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Frames: solid, dotted and dashed}
-
-For solid frames use \PS\ ovals, otherwise adjust the spacing between dashes
-or dots according to the lengths, both vertical and horizontal.
-
-\DOCMODE(
-\xydef@\xyPSframed@body@{\DN@{\framed@body@}%
- \ifx\framehfill\frm@solidh@@
- \DN@{\xyPSframed@oval@\xyPSoval@Special}%
-% \else\ifdim\frmradius@@=\z@\else
- \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@}
-\DOCMODE)
-
-In practice the parameters |#1| and |#2| will hold <dimen>s.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-
-These may be used for dashed frames.
-
-\DOCMODE(
-\xydef@\xyPSdashhfill@{{\SemiDirectionChar=95 \Direction=3072 \xyPSdash@}}
-\xydef@\xyPSdashvfill@{{\SemiDirection=31 \Direction=1023 \xyPSdash@}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{ovals and circles}
-
-The width, height, corner-radius are available as |\dimen@i|, |\dimen@ii|
-and |\R@| respectively; we only need |\R@| here,
-since the extents hold the real information that we need.
-
-\DOCMODE(
-\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@
-% \R@=\frmradius@@
- \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}}
-\DOCMODE)
-
-The \PS\ operators |ov|, |ox| etc. are defined within |xyps-pro|,
-having scope limited to |XYdict| and sub-dictionaries.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Filled regions}
-
-\DOCMODE(
-\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
-}
-\DOCMODE)
-
-Rectangles are treated as a special case of ovals.
-The |#2| parameter signifies whether the outline of the object
-should also be stroked (|#2|=|\relax|) after being filled.
-Such a stroke is always in black.
-
-\DOCMODE(
-%\xydef@\xyPSfillrect@Special#1#2{%
-% \ifx#2\relax\PSmacro@{#1 sfr}%
-% \else\PSmacro@{#1 fr}\fi}
-\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}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\endinput
-
-% $Log: xyps-f.doc,v $
-% Revision 3.7 1999/02/16 15:12:50 krisrose
-% Interim release (Y&Y fonts now free).
-%
-% Revision 3.4 1997/05/18 01:13:24 ross
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/18 10:07:22 ross
-% cosmetic changes to macro-names
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-%
-% NEW for version 3.0 by by Ross Moore.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyps-l.doc b/Master/texmf-dist/source/generic/xypic/xyps-l.doc
deleted file mode 100644
index 8dc1d1a1ae4..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyps-l.doc
+++ /dev/null
@@ -1,195 +0,0 @@
-%% $Id: xyps-l.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Xy-pic ``Line extension'' PostScript backend support.
-%% Copyright (c) 1993-1997 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-%% 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
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Line-styles}
-
-The included file |xyps-l.tex| (version \stripRCS$Revision: 3.7 $) provides
-\PS\ support for the effects defined in the |line| extension described
-in~\S??g[:line].
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The \PS\ style methods are required, so ensure that they are loaded.
-
-\DOCMODE(
-\expandafter\ifx\csname xyps-sloaded\endcsname\empty\else
- \xyinputorelse@{xyps-s}{\xyerror@{Could not load xyps-s}{}}%
- \xycatcodes\fi
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This file is loaded and its effects are activated automatically whenever
-|\xyoption{line}| is requested and the current <driver> supports
-\PS\ line styles. Should there be any need to turn off this support,
-the following commands are available; they obey usual \TeX\ groupings.
-%
-\begin{defs}
-|\NoPSlines| & remove \PS\ support\kern-50pt\cr
-|\UsePSlines| & reinstate \PS.
-\end{defs}
-%
-Without \PS\ support lines can be expected to be displayed in the default
-style, having thickness of $.4$pt.
-These commands are provided primarily for testing and trouble-shooting;
-\eg~with <driver> configurations untested by the authors of \Xy-pic,
-who should be notified of any difficulties.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Installation}
-
-The <driver>-file must call the following macro to rebind a control sequence
-defined in |xyline|, thereby allowing the \PS\ method to be used.
-The purpose of the |\xyPSlinew@| hook is to allow the \PS\ style sequencing
-method to be used with other back-ends, changing just the contents of the
-|\special|s actually placed.
-
-\DOCMODE(
-\xydef@\installPSline@{\installPSstyle@
- \installPSlinestyles@ \installPSpolylines@ }
-
-\xydef@\UsePSlines{\installPSline@}
-\xydef@\NoPSlines{\UnloadLine@\relax}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{widths, joins and caps}
-
-This, and the rebindings below, is all that is needed for the cleaner,
-more sophisticated way.
-
-\DOCMODE(
-\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
-}
-\DOCMODE)
-
-The \PS\ operators |lw|, |lc|, |lj|, |ml| are defined in |xyps-ps| to set the
-|linewidth|, |linecap|, |linejoin|, |miterlimit| graphics-state parameters,
-respectively.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Poly-lines}
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\endinput
-
-% $Log: xyps-l.doc,v $
-% Revision 3.7 1999/02/16 15:12:50 krisrose
-% Interim release (Y&Y fonts now free).
-%
-% Revision 3.4 1997/05/18 01:13:24 ross
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/18 10:05:50 ross
-% minor improvements to file-loading commands
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% Revision 2.9 1994/06/09 14:38:56 ross
-% Release 3beta.
-% Includes support for special effects: Rotations, Scaling, Line-width, Colour.
-% Back-ends are separated into separate files.
-% More back-ends are supported, experimentally --- needs testing.
-%
-% Revision 2.9 1994/06/09 14:38:56 ross
-% Release 3beta.
-% Includes support for special effects: Rotations, Scaling, Line-width, Colour.
-% Back-ends are separated into separate files.
-% More back-ends are supported, experimentally --- needs testing.
-%
-% NEW for version 2.9 by by Ross Moore.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyps-pro.doc b/Master/texmf-dist/source/generic/xypic/xyps-pro.doc
deleted file mode 100644
index 165e601261f..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyps-pro.doc
+++ /dev/null
@@ -1,253 +0,0 @@
-%% $Id: xyps-pro.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Xy-pic ``PostScript Prolog'' for PostScript support.
-%% Copyright (c) 1993-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@ens-lyon.fr>
-%%
-%% 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, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-%% 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\let\csname xyps-proloaded\endcsname=\empty %
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This included file (version \stripRCS$Revision: 3.7 $) provides the \PS\ prolog
-file. This contains the definitions of the main \PS\ programming structures
-required to support the \PS\ effects available in \Xy-pic. A separate file
-|xypsdict.doc| describes the extra \PS\ needed to support the \PS\ back-end.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\paragraph*{\PS\ Prolog}
-
-This creates the \PS\ dictionary called |XYdict| within the usual |userdict|
-or any other dictionary supplied by the specific driver.
-Commands loaded here are ones which may by used by extensions other than the
-\PS\ back-end, which loads many more commands into this dictionary using
-the code to be found in |xypsdict.tex|.
-
-\DOCMODE(
-\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 %/xycp{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}%
-%
-%\PSspecialdict@@{%
-\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
-% /grulexy{gsave xyrulth 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
-% /xyclip{closepath fill grestore}bind def
-% /xyeoclip{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 dup dup neg dup dup neg oval 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%
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\endinput
-
-% $Log: xyps-pro.doc,v $
-% Revision 3.7 1999/02/16 15:12:50 krisrose
-% Interim release (Y&Y fonts now free).
-%
-% Revision 3.6 1998/03/06 01:28:05 krisrose
-% Releasing (with Y&Y fonts).
-%
-% Revision 3.3 1996/12/18 10:00:34 ross
-% requires larger PostScript dictionary
-% uses \xydriversselected@@ for optional loading with OzTeX
-%
-% Revision 3.1 1995/09/05 20:28:57 ross
-% Releasing version 3.1!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-%
-% NEW for version 3.1 by by Ross Moore.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyps-ps.doc b/Master/texmf-dist/source/generic/xypic/xyps-ps.doc
deleted file mode 100644
index c4c4bb4d35c..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyps-ps.doc
+++ /dev/null
@@ -1,750 +0,0 @@
-%% $Id: xyps-ps.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Xy-pic ``PS-PS'' PostScript support.
-%% Copyright (c) 1993-1997 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@ens-lyon.fr>
-%%
-%% 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, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-%% 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
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The included file |xyps-ps.tex| (version\stripRCS$Revision: 3.7 $)
-provides support for \PS\ |\special| commands used by the |ps| backend
-extension as well as \PS-based options, to produce special effects
-not available directly with \TeX.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\paragraph*{\PS\ {\tt\string\special} commands}
-
-The \PS\ |\special|s which are used by \Xy-ps fall into four broad
-classes:
-%
-\begin{enumerate}
-\item execute a piece of code, e.g. to draw some graphic object;
-\item add a new \PS\ definition to the existing dictionary of commands;
-\item change the value of some parameters, storing them for later use; and
-\item read \PS\ commands from a pre-existing file.
-\end{enumerate}
-
-Since different drivers may provide different syntax for these classes
-of command, \Xy-ps has different macros to optimize to interface to the
-different drivers. Initially these control-sequence names are bound to
-macros that do nothing. Upon specifying a driver, they will be bound
-to a macro appropriate for that driver.
-
-\DOCMODE(
-\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@
-}
-\DOCMODE)
-
-Unloading \PS\ requires also turning off the \PS-backend,
-if it has been loaded.
-
-\DOCMODE(
-\xydef@\UnloadPS@{\UnloadPSps@
- \expandafter\ifx\csname xypsloaded\endcsname\unknown\PSspecials@false
- \else\expandafter\NoPSspecials\fi}
-\xylet@\UnloadPS@@=\UnloadPS@
-
-%\xyaddunsupport{ps}\UnloadPS@@
-\DOCMODE)
-
-\DOCMODE(
-\ifx\undefined\dvitype@\xydef@\dvitype@{null}\fi
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Some drivers, in particular versions of \Textures\ earlier than 1.7, require
-the \PS\ dictionary to be included with every page shipped out.
-We do this by providing a routine which rebinds the |\shipout| primitive to
-a macro |\xyPSshipout@| which prepends the \Xy-ps \PS\ dictionary to the box
-being shipped-out. This routine |\@PSshipout| is called, if necessary, when
-the driver has been specified.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-The box register |\box9| is assumed to be a scratch register, used globally
-according to \TeX\ conventions.
-
-When the \PS\ backend is loaded then we need to rebind |\shipout| to include
-the full dictionary.
-
-\DOCMODE(
-\xydef@\xyPSshipout@PSii{%
- \ifUsePSdict@@\let\XYshipdict@=\includeXYPSdict@@
- \else\def\XYshipdict@{\XYpredict@@\XYdict@@}\fi
- \xyrealshipout@\vbox{\XYshipdict@\box9}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-These two control sequences are used in the DVI-driver files
-to control when the \PS\ <driver> can be altered.
-
-\DOCMODE(
-\xydef@\firstPS@{%\fixedxydriver@
- \global\let\firstPS@@=\relax \global\let\firstPS@=\relax}
-\xylet@\firstPS@@=\firstPS@
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-\subsection{Installation}
-%
-To install use of \PS\ requires loading the \PS\ dictionary.
-However this can only be done when a <driver> is known to be able to
-support it. Hence the |\installxyps@| command should be called only from
-within a <driver>-file.
-
-Furthermore, the <driver>-file should define a value for |\installxyps@@|
-to including anything specific to that <driver>; even if only
-|\let\installxyps@@=\relax|. If |\dumpPSdict| has been specified,
-then the dictionary must be written first, so it can be used with the
-subsequent processing (see the subsection below).
-
-\DOCMODE(
-\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
-\DOCMODE)
-
-In case no <driver> was known when a call to the |\installxyps@| method
-was queued, e.g. by |\dumpPSdict{}| before any |\xyoption{|<driver>|}|,
-then a check is made to see there is now a known <driver> which
-supports \PS. If so then this installation is cancelled since another
-should follow, otherwise the default <driver> of |dvips| is assumed.
-The command |\xyPSdriver#1| is provided to allow users to change this
-default <driver>. This may be necessary when multiple <driver>s are
-required and the final one specified does not support \PS.
-
-\DOCMODE(
-\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@ }
-
-%\xylet@\installxyps@@=\installxyps@orig
-
-\xydef@\defaultinstallps@#1#2{%
- \xywarning@{no driver specified, using #1 }%
- \xyrequire{#1}\csname #1@xy@ps\endcsname{}}
-
-\xydef@\null@xy@ps{\installxyps@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection*{\PS\ escape}
-??=[postscript escape]
-
-An extra <shape> modifier key allows arbitrary \PS\ code
-to be applied to the current <object>.
-%
-\begin{defs}
- |[!|<postscript code>|]| & for special effects\cr
- |[psxy]| & stores current location.\cr
-\end{defs}
-
-\DOCMODE(
-\xydefcsname@{shape [!...]}#1{%\tracingall%
- \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@ }
-\DOCMODE)
-%
-\noindent
-Normally the <postscript code> will be a simple command to alter the
-\PS\ graphics state:
-e.g. |[!1 0 0 setrgbcolor]| changes the colour used to render parts of
-the <object>.
-Any number of such <shape> modifiers is allowable,
-however it is more efficient
-to combine them into a single modifier, whenever possible.
-
-It is very important that braces |{| and |}| do not
-appear explicitly in any <postscript code>, as this may upset the
-\Xy-pic <object> parsing. However it is acceptable to have a
-control sequence name here, expanding into more
-intricate \PS\ code. This will not be expanded until
-a later (safe) time.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-Due to differences within the DVI-drivers, such simple \PS\
-commands need not affect every part of an <object>.
-In particular the lines, curves and arrowheads generated
-by \Xy-pic use a different mechanism,
-which should give the same result with all drivers.
-This involves redefining some \PS\ procedures
-which are always read prior to rendering one of these objects.
-One simple way to specify a red line is as follows;
-the |xycolor| extension provides more sophisticated support for colour.
-The <shape> modifiers described in the previous section also use
-this mechanism, so should work correctly with all drivers.
-
-\begin{code}
-\def\colorxy(#1){%
- /xycolor{#1 setrgbcolor}def}
-...
-\connect[!\colorxy(1 0 0)]\dir{-}
-...
-\end{code}
-\displaycode
-
-\noindent
-Note how the braces are inserted within the expansion of the
-control sequence |\colorxy|,
-which happens after parsing of the <connection>.
-The following table shows which graphics parameters are
-treated in this way, their default settings, and the type of
-\PS\ code needed to change them.
-%
-\begin{defs}
-colour &|/xycolor{0 setgray}def| \cr
-line-width&|/xywidth{.4 setlinewidth}def|\kern-7pt \cr
-dashing &|/xydash{[] 0 setdash}def| \cr
-line-cap &|/xycap{1 setlinecap}def| \cr
-line-join &|/xyjoin{1 setlinejoin}def|\kern-7pt \cr
-\end{defs}
-%
-\noindent
-This feature is meant primarily for modifying the rendering
-of objects specified in \TeX\ and \Xy-pic, not for drawing new objects
-within \PS. No guarantee can be given of the current location,
-or scale, which may be different with different drivers.
-However a good \PS\ programmer will be able to overcome
-such difficulties and do much more. To aid in this the special
-modifier |[psxy]| is provided to record the location where the
-reference point of the current <object> will be placed.
-Its coordinates are stored with keys |xyXpos| and |xyYpos|.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-When the |\special| is placed the following registers contain important
-values:
-|\L@p| = horizontal displacement of \Xy-pic reference point from
-the \TeX\ reference point (i.e. left-hand end of the box)
- of the initial object;
-|\D@p| = vertical displacement of \Xy-pic reference point from
- the \TeX\ reference point (i.e. the baseline) of the initial object;
-|\R@p| = horizontal offset, resulting from <shape> modifiers;
-|\U@p| = vertical offset, initially |-\D@p| but alterable
- by <shape> modifiers.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-It is necessary to know the current \PS\ location.
-Unfortunately the |currentpoint| operator frequently has no value.
-The following code overcomes this difficulty.
-
-Some drivers may need to define this differently...
-
-\DOCMODE(
-\xydef@\xyPScurrpt@@@{\PSspecial@@{xyi}\PSraw@@{userdict begin xyx end}}
-\ifx\undefined\xyPScurrpt@@ \xylet@\xyPScurrpt@@=\xyPScurrpt@@@ \fi
-
-%\xydef@\xyPScurrpt@@@{\PSspecial@@{userdict begin
-% 0 0 transform grestore gsave itransform
-% /xyYpos exch def /xyXpos exch def end}}
-
-%\xydef@\xyPScurrpt@@@{%
-% \PSspecial@@{0 0 transform grestore gsave itransform }%
-% \PSraw@@{userdict begin /xyYpos exch def /xyXpos exch def end}}
-\DOCMODE)
-
-The \PS\ operator called |xyx| is defined below, for storing the
-location placed on the stack by |xyi|.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection{Technical Note}:
-The scoping is achieved by using two |\specials| so that the
-resulting \PS\ file should ultimately look like:
-\begin{defs1}
-|... {| special code before|}| <object> |{|special code after|} ...|
-\end{defs1}
-The ``code after'' is to cancel the effect, returning the graphics
-state to what it was prior to the ``code before''.
-Not all DVI-drivers can achieve this sequencing. In particular \OzTeX\
-collects all |\specials| in the DVI-file and places their contents
-at the beginning of the \PS\ file: any effect would be cancelled
-immediately after it has been established.
-
-The user can add code to both parts by expressing the <shape> modifier
-as follows:
-%
-\begin{defs1}
- ??c![*]\dots|!|<code before>|<>|<code after>|]|\dots\ .\cr
-\end{defs1}
-%
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{Further Technical Note}:
-The ``code before'' does two things in addition to that code given
-explicitly by the user. Firstly it issues a |gsave| then it opens
-a new dictionary on the dictionary stack. The ``code after''
-contains the matching |grestore| after closing the new dictionary.
-
-Since objects can be built as |\composite|s and diagrams can be nested,
-there is the possibility of generating long chains of nested
-\PS\ dictionaries. For this reason the dictionary is kept
-small, allowing only 8 key-value pairs to be |def|ined within it.
-If more are required, the user should define a private
-dictionary to hold the extra key-value pairs, making sure that it is
-open when its entries need to be accessed.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xywarnifdefined\xyPSshapechar@
-\xywarnifdefined\xyPSsplitshape@
-
-{\xyuncatcodes \catcode`@=11
- \gdef\xyPSshapechar@#1@@{\xyPSsplitshape@#1<><>@@}%
- \gdef\xyPSsplitshape@#1<>#2<>#3@@{\xyPSsplitPS@{#1}{#2}}}
-
-%\xydef@\xyPSsplitPS@#1#2{%\aftergroup\show\aftergroup\relax
-% \def\xyPSpre@{#1}\def\xyPSpost@{#2}\modPSboxz@ }
-
-\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}}%
-\DOCMODE)
-
-The \PS\ operators |pu|, |pp|, |xyg| and |xyf| are defined below,
-for push/pop of the |XYddict| stack, preceded/followed by a
-|gsave|/|grestore| of the \PS\ graphics state.
-
-\DOCMODE(
-\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@{}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Some utility macros for controlling writing to the log-file.
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection*{\PS\ Header file}
-
-This creates a flag to indicate whether the user wishes to get the \PS\
-dictionary from an external header file.
-
-\DOCMODE(
-\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{<xyps: including \xyPSdictname}}
-\xylet@\includePSmessage@=\includePSmessage@@
-
-\xydef@\xyPSdictknown@{%
-% \immediate\closein\xyPSdictread@
- \immediate\closein\xyread@
- \xywarning@{File \xyPSdictname\space already exists}
- \message{ Do you wish to overwrite it \string? y/n }%
- \read16 to \next
- \DNii@{\xywarning@{You did not type Y or N -- try again please}%
- \xyPSdictknown@}%
- \DN@{Y }\ifx\next@\next \DNii@{\writePSdict@@}%
- \else\DN@{y }\ifx\next@\next \DNii@{\writePSdict@@}%
- \else\DN@{n }\ifx\next@\next \DNii@{\cancelPSdict@}%
- \else\DN@{N }\ifx\next@\next \DNii@{\cancelPSdict@}%
- \fi\fi\fi\fi \nextii@ }
-
-\xydef@\cancelPSdict@{%
- \xywarning@{cancelling dump of PostScript dictionary}}
-
-\xydef@\noDictmessage@{%
- \xywarning@{\dvitype@\space does not support the use of a header file}}
-\DOCMODE)
-
-These macros are also defined in |xyps.doc|. To avoid warning messages
-about redefinitions, that mechanism has been disabled.
-
-\DOCMODE(
-\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
-% \ifx\xyPSdictname\undefined\xyPSdefaultdict\fi
- \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
-\DOCMODE)
-
-This is used to write the dictionary to a file, suitable for inclusion
-as a resource within any \PS\ document. It is fully conforming to
-Adobe's document structuring guidelines.
-
-\DOCMODE(
-\xywarnifdefined\xyPS@@
-\xywarnifdefined\xyPS@@@
-{\catcode`|=14 \catcode`\%=12 \catcode`\<=1 \catcode`\>=2 |
- \gdef\xyPS@@<%%>\gdef\xyPS@@@<%!>}
-
-%\xydef@\writePSdict@@{\writePSdict@ \let\writePSdict@@=\relax}
-\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{<xyps: dumping \xyPSdictname}|
- \def\PSdict@@@##1{\immediate\write\xywrite@{##1}}|
- \let\xyPSobeylines@@=\obeyoutlines@
- \let\firstPS@@=\relax
- \let\endXYdict@=\relax
- \PSdict@@@{\xyPS@@@ PS-Adobe-3.0 Resource-procset}|
- \PSdict@@@{\xyPS@@ Title: \xyPSdictname}|
- \PSdict@@@{\xyPS@@ Version: REPLACEWITHVERSION}|
- \PSdict@@@{\xyPS@@ Creator: Xy-ps backend to Xy-pic}|
- \PSdict@@@{\xyPS@@ DocumentSuppliedProcSets: XYdict}|
- \ifx\dvitype@\undefined
- \PSdict@@@{\xyPS@@ For: use with Xy-pic}\else
- \PSdict@@@{\xyPS@@ For: \dvitype@ use of Xy-pic}\fi
- \PSdict@@@{\xyPS@@ BeginResource: procset XYdict}|
- \def\PSspecialdict@@##1{\PSdict@@@{##1^^J}}|
- \let\PSdict@@=\PSdict@@@ \let\xy@begindvi=\literal@|
- \UsePSdict@@false\XYpredict@@|
- \XYdict@@|
- \PSdict@@@{\xyPS@@ EndResource}|
- \immediate\closeout\xywrite@
- \message{>}|
- \endgroup}}}
-\DOCMODE)
-
-Within the expansion of |\XYdict@| the end-of-line tokens are still active.
-The following expansion seems to work on all systems so far tested.
-
-\DOCMODE(
-\xywarnifdefined\obeyoutlines@
-{\catcode`\^^M=\active%
- \gdef\obeyoutlines@{\catcode`\^^M=\active \def^^M{^^J}%
- \newlinechar=`\^^J\obeyspaces}}
-\DOCMODE)
-
-The dictionary of \PS\ commands is split into two pieces according to whether
-they are relevent to general \PS\ effects or only to the \PS\ backend.
-These pieces are generated from code within the files |xyps-pro.tex| and
-|xypsdict.tex|.
-These files have corresponding |.doc| versions for documentation.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The following commands cause the parts of the \PS\ dictionary to be read
-from the appropriate files. If |\ifUsePSdict@@| gives |\iftrue| then there
-may be no need to do anything, since the definitions will be subsequently
-loaded from the header file. Normally it is only necessary to read these
-files once, using |\XYpredict@|. However some <driver>s may need it more
-frequently, so instead call |\XYpredict@@| directly.
-
-\DOCMODE(
-\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@}}
-
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This command is for use in macro-packages, providing an easy way to force
-the dictionary to load, when it has not done so using the usual mechanisms.
-
-\DOCMODE(
-
-\xydef@\forceload@XYdict{%
- \let\includeXYPSdict@=\includeXYPSdict@r
- \let\XYpredict@=\XYpredict@r
- \let\XYdict@=\XYdict@@ \expandafter\installxyps@ }
-
-\DOCMODE)
-
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Extensions}
-
-Several included files handle standard \PS\ implementations of
-\Xy-pic extensions.
-
-A conditional |\ifxyPSshapes@| is used to indicate whether the special shape
-effects implemented in |xyps-r.tex| can actually be fully supported by the
-current driver. When not available, then an attempt to use these effects
-simply results in a warning message.
-After two attempts the warning message ``turns itself off'';
-subsequent attempts are simply ignored cleanly.
-
-\DOCMODE(
-\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 <driver> does not fully support PostScript effects}}%
-\DOCMODE)
-
-\paragraph*{Allow new \PS\ effects to be defined.}
-%
-This section describes how |\newxyPSshape| is used to define a new effect
-which is available only in \PS; \ie\ having no analogue elsewhere within
-\Xy-pic.
-
-The new effect will be called via |[|<name>|]|, which gets interpreted as
-referring to |\csname xyshape@|<name>|@\endcsname|.
-Hence a control sequence of this form must first be created,
-if it does not already exist.
-Its initial expansion is simply |\xyundefinedEffect@{|<name>|}{}@@|
-which produces a warning message.
-
-\DOCMODE(
-\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}}%
-\DOCMODE)
-
-When an implementation of the effect is available then
-|\csname xyshape@|<name>|@\endcsname| is rebound
-to |\csname xyPSshape@|<name>|@\endcsname|,
-which expands to the contents of |#2| in |\newxyPSshape#1#2|.
-If |#2| is empty then the expansion is the |\xyPSnotimplemented@@`|<name>|'@@|
-warning message, which is especially useful during development.
-
-\DOCMODE(
-\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}}%
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\endinput
-
-% $Log: xyps-ps.doc,v $
-% Revision 3.7 1999/02/16 15:12:50 krisrose
-% Interim release (Y&Y fonts now free).
-%
-% Revision 3.6 1998/03/06 01:28:05 krisrose
-% Releasing (with Y&Y fonts).
-%
-% Revision 3.4 1997/05/18 01:13:24 ross
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/19 03:50:08 ross
-% Maintenance release.
-%
-% Revision 3.3 1996/12/18 09:55:56 ross
-% improvements to the file-loading commands
-% more robust installation procedures
-% shorter tracing messages
-% dictionary no longer loads multiply
-%
-% Revision 3.2 1995/09/19 18:21:41 ross
-% Bug fix release.
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-%
-% NEW for version 3.1 by by Ross Moore.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyps-r.doc b/Master/texmf-dist/source/generic/xypic/xyps-r.doc
deleted file mode 100644
index a329cce379a..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyps-r.doc
+++ /dev/null
@@ -1,226 +0,0 @@
-%% $Id: xyps-r.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Xy-pic ``PostScript Rotations and Scaling''.
-%% Copyright (c) 1993-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-%% 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
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Rotations and scaling}
-
-The included file |xyps-r.tex| (version \stripRCS$Revision: 3.7 $) provides
-\PS\ support for the effects defined in the |rotate| extension described
-in~\S??g[:rotate].
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The \PS\ style methods are required, so ensure that they are loaded.
-
-\DOCMODE(
-\expandafter\ifx\csname xyps-sloaded\endcsname\empty\else
- \xyinputorelse@{xyps-s}{\xyerror@{Could not load xyps-s}{}}%
- \xycatcodes\fi
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This file is loaded and its effects are activated automatically whenever
-|\xyoption{rotate}| is requested and the current <driver> supports
-\PS\ rotations. Should there be any need to turn off this support,
-the following commands are available; they obey usual \TeX\ groupings.
-%
-\begin{defs}
-|\NoPSrotate| & remove \PS\ support\kern-50pt\cr
-|\UsePSrotate| & reinstate \PS.
-\end{defs}
-%
-Without \PS\ support diagrams can be expected to be displayed unrotated
-and unscaled.
-These commands are provided primarily for testing and trouble-shooting;
-\eg~with <driver> configurations untested by the authors of \Xy-pic,
-who should be notified of persistent difficulties.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Installation}
-
-Call the following macro to allow the \PS\ mechanisms to be used.
-
-\DOCMODE(
-\xydef@\installPSrotscale@{\installPSstyle@
- \let\xyRotate@@=\xyPSrotate@@
-% \let\xySpecialRotate@@=\xyPSspecialRotate@
- \let\doSpecialRotate@@=\doPSspecialRotate@@
-% \let\xyRotnamed@=\xyPSpsxy@
-% \let\xyRot@named@=\xyPSrot@named@@
- \let\xyscale@@=\xyPSscale@@
- \xyPSshapes@true
- \xyuncatcodes }
-
-\xydef@\UsePSrotate{\installPSrotscale@}
-\xydef@\NoPSrotate{\UnloadRotate@\relax}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-All effects defined in the |rotate| extension can be implemented using a \PS\
-<driver>. However different <driver>s need not handle things in the same way;
-different \PS\ code may be required to match the specific environment used
-by the <driver>.
-
-This file provides generic \PS\ code which is known to work correctly with
-most drivers. It is written so as to indicate where modifications may be
-made to accomodate specific <driver>s. For such driver-specific variations,
-consult the appropriate <driver>-file, called |xy|<driver>|.doc|.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Transform lists}
-
-\DOCMODE(
-\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@}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Rescaling}
-
-\DOCMODE(
-\xydef@\xyPSscale@@#1#2{%
- \xyPSsplitPS@{\xyscale@start(#1,#2)}{\xyscale@end}%
- \xyPSrotSplit@\xyPSpsxy@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Rotations}
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-The \PS\ operator |xyr| is defined in |xyps-ps.doc|, to store the given
-parameter as a rotation angle.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Shearing}
-
-This feature is not implemented yet.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{PostScript commands}
-
-The \PS\ codes to start the rotation or scaling are given as functions,
-|xyrot@start| and |xyscale@start| with arguments to include a specification
-of the rotation-angle or scaling factors.
-
-\DOCMODE(
-\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{}}
-\DOCMODE)
-
-These strings are placed using |\xyPSsplitPS@| so as to correctly
-occur before and after the code for the actual <object> being typeset.
-This is always followed by |\xyPSpsxy@|, which results in \PS\ code
-to identify the current position, storing it with keys |xyXpos| and |xyYpos|
-so as to be accessible to the code for the rotation or scaling.
-
-A specific <driver> must either call |\xyRotScale@@| to use this default
-mechanism, or define its own macro to be called at installation time,
-which sets alternative expansions to |\xyrot@start(#1)|,
-|\xyscale@start(#1,#2)|, |\xyrot@end| and |\xyscale@end|.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\endinput
-
-% $Log: xyps-r.doc,v $
-% Revision 3.7 1999/02/16 15:12:50 krisrose
-% Interim release (Y&Y fonts now free).
-%
-% Revision 3.3 1996/12/18 10:05:50 ross
-% minor improvements to file-loading commands
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% Revision 2.9 1994/06/09 14:38:56 ross
-% Release 3beta.
-% Includes support for special effects: Rotations, Scaling, Line-width, Colour.
-% Back-ends are separated into separate files.
-% More back-ends are supported, experimentally --- needs testing.
-%
-% Revision 2.9 1994/06/09 14:38:56 ross
-% Release 3beta.
-% Includes support for special effects: Rotations, Scaling, Line-width, Colour.
-% Back-ends are separated into separate files.
-% More back-ends are supported, experimentally --- needs testing.
-%
-% NEW for version 2.9 by by Ross Moore.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyps-s.doc b/Master/texmf-dist/source/generic/xypic/xyps-s.doc
deleted file mode 100644
index 990f03d6253..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyps-s.doc
+++ /dev/null
@@ -1,144 +0,0 @@
-%% $Id: xyps-s.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Xy-pic ``Style extension'' PostScript support.
-%% Copyright (c) 1995-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-%% 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
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This included file (version \stripRCS$Revision: 3.7 $) provides a \PS\
-interface for the effects defined in the |style| extension.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\paragraph*{\PS\ Style lists}
-
-Note: The contents of the style lists |\preXY@style@| and |\postXY@style@|
-should be `raw' \PS\ code.
-
-This prevents |\special|s from being inserted twice, once by |\Connect@@|
-and once by |\Drop@@|, with straight lines using |\xyPSstraight@|.
-
-\DOCMODE(
-\xydef@\xykillstyles@@{\Unloadstyle@}%
-%\xydef@\xykillstyles@@{%
-% \let\xypre@Style@@=\relax \let\xypost@Style@@=\relax}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{\PS\ Escape Style}
-
-\DOCMODE(
-\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@
-\DOCMODE)
-
-
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Installation}
-
-The <driver>-file must call the following macro to rebind a control sequence
-defined in |xystyle|, thereby allowing the \PS\ mechanisms to be used.
-
-\DOCMODE(
-\xydef@\installPSstyle@{%
-% \let\preXYstyle@=\xyPSprestyle@@
-% \let\postXYstyle@=\xyPSpoststyle@@
- \def\preXYstyle@@{\xyPSpre@}%
- \let\xydoprestyles@=\xyPSrawstyleA@
- \let\xydopoststyles@=\xyPSrawZ@
- \let\xykillstyles@=\xykillstyles@@
- }
-\xydef@\xyPSrawstyleA@#1{\xyPSrawA@{{#1}{}}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\endinput
-
-% $Log: xyps-s.doc,v $
-% Revision 3.7 1999/02/16 15:12:50 krisrose
-% Interim release (Y&Y fonts now free).
-%
-% Revision 3.3 1996/12/18 10:07:44 ross
-% style-handling code moved to xyps-ps
-% minor improvements to file-loading commands
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% Revision 2.9 1994/06/09 14:38:56 ross
-% Release 3beta.
-% Includes support for special effects: Rotations, Scaling, Line-width, Colour.
-% Back-ends are separated into separate files.
-% More back-ends are supported, experimentally --- needs testing.
-%
-% Revision 2.9 1994/06/09 14:38:56 ross
-% Release 3beta.
-% Includes support for special effects: Rotations, Scaling, Line-width, Colour.
-% Back-ends are separated into separate files.
-% More back-ends are supported, experimentally --- needs testing.
-%
-% NEW for version 2.9 by by Ross Moore.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyps-t.doc b/Master/texmf-dist/source/generic/xypic/xyps-t.doc
deleted file mode 100644
index 2140cd7e002..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyps-t.doc
+++ /dev/null
@@ -1,168 +0,0 @@
-%% $Id: xyps-t.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Xy-pic ``Pattern and Tile extension'' PostScript support.
-%% Copyright (c) 1993-1997 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-%% 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
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Patterns and tiles}
-
-The included file |xyps-t.tex| (version \stripRCS$Revision: 3.7 $) provides
-\PS\ support for the effects defined in the |tile| extension described
-in~\S??g[:tile].
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The \PS\ style methods are required, so ensure that they are loaded.
-
-\DOCMODE(
-\expandafter\ifx\csname xyps-sloaded\endcsname\empty\else
- \xyinputorelse@{xyps-s}{\xyerror@{Could not load xyps-s}{}}%
- \xycatcodes\fi
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This file is loaded and its effects are activated automatically whenever
-|\xyoption{tile}| is requested and the current <driver> supports
-\PS\ patterns. Should there be any need to turn off this support,
-the following commands are available; they obey usual \TeX\ groupings.
-%
-\begin{defs}
-|\NoPStiles| & remove \PS\ support\kern-50pt\cr
-|\UsePStiles| & reinstate \PS.
-\end{defs}
-%
-Without \PS\ support tile patterns can be expected to be displayed as
-solid black.
-These commands are provided primarily for testing and trouble-shooting;
-\eg~with <driver> configurations untested by the authors of \Xy-pic,
-who should be notified of any difficulties.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Installation}
-
-Installation consists of rebinding the macros |\xypattern@| and
-|\newxypattern@| and of reloading the standard patterns to include a
-description for \PS. This installation should be delayed till after
-|pattern| and the \PS\ <driver> have been installed.
-
-\DOCMODE(
-\xydef@\installPSpatterns@{\installPSstyle@
- \let\xypattern@=\xyPSpattern@@
- \let\xypatternwarning@=\relax
- \xystandardpatterns@
- \xyuncatcodes }
-
-\xylet@\UnloadPSpatterns@=\Unloadpattern@
-
-\xydef@\UsePStiles{\installPSpatterns@}
-\xydef@\NoPStiles{\UnloadPSpatterns@\relax}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-All effects defined in the |tile| extension can be implemented using
-the \PS\ dictionary, loaded by |xyps-ps|.
-This file provides ``generic'' \PS\ code which is known to work
-correctly with most drivers. No attempt is made to provide special
-code for particular drivers; for driver-specific variations, consult
-the appropriate |xy|<driver>|.doc| file.
-
-\DOCMODE(
-\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}%\xyPSpattern@@}
-
-\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}{}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\endinput
-
-% $Log: xyps-t.doc,v $
-% Revision 3.7 1999/02/16 15:12:50 krisrose
-% Interim release (Y&Y fonts now free).
-%
-% Revision 3.4 1997/05/18 01:13:24 ross
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/18 10:05:50 ross
-% minor improvements to file-loading commands
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% NEW for version 3.0 by by Ross Moore.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyps.doc b/Master/texmf-dist/source/generic/xypic/xyps.doc
deleted file mode 100644
index b083c7250ce..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyps.doc
+++ /dev/null
@@ -1,1209 +0,0 @@
-%% $Id: xyps.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Xy-pic ``PostScript backend''.
-%% Copyright (c) 1993-1997 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-%% 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.7 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\Xy-ps is a `back-end' which provides \Xy-pic with the ability to produce DVI
-files that use \PS\ |\specials| for drawing rather than the \Xy-pic fonts.
-
-In particular this makes it possible to print \Xy-pic DVI files on
-systems which do not have the ability to load the special fonts. The
-penalty is that the generated DVI files will only function with one
-particular DVI driver program. Hence whenever \Xy-ps is activated it
-will warn the user:
-$$
-\xy
- *+\txt<.8\hsize>{\Xy-pic Warning: The produced DVI file is "not
- portable": It contains \PS\ {\tt\string\special}s for <one
- particular> driver}
- *\frm{-}
-\endxy
-$$
-A more complete discussion of the pros and cons of using this backend
-is included below.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-%\paragraph*{Declarations.}
-%
-%\DOCMODE(
-%\xyinputorelse@{xyps-ps}{\xydrivernoload@{xyps-ps}}
-%\DOCMODE)
-%
-%\DOCMODE1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%\paragraph*{xyps-ps.tex:}
-%??c[xyps-ps.tex]
-%\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%\paragraph*{xyps-ps.doc:}
-%??c[xyps-ps.doc]
-%\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%\inputdoc!{xyps-ps.doc}
-%
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Choosing the DVI-driver}
-??=[choosing DVI-driver]
-
-Including |\xyoption{ps}| within the document preamble, tells \Xy-pic that
-the \PS\ alternative to the fonts should be used, provided the means to do
-this is also specified. This is done by also specifying a dvi-driver which
-is capable of recognising and interpreting |\special| commands. Although
-the file |xyps.tex| is read when the option request is encountered, the
-macros contained therein will have no effect until an appropriate driver
-has also been loaded.
-
-With \LaTeXe\ both the backend and driver may be specified, along with other
-options, via a single |\usepackage| command,
-see~\cite[page~317]{GMS94:LaTeXC}; e.g.
-%
-\begin{defs1}
-|\usepackage[ps,textures,color,arrow]{xy}|
-\end{defs1}
-\noindent\unskip
-%
-The rebindings necessary to support \PS\ are not effected until the
-|\begin{document}| command is encountered. This means that an alternative
-driver may be selected, by another |\xyoption{|<driver>|}|, at any time
-until the |\begin{document}|. Only the macros relevant to last named
-<driver> will actually be installed.
-
-
-The following table describes available support for \PS\ drivers.
-Please consult the individual driver sections in part~??g[:drivers] for the
-exact current list.
-For each <driver> there is a corresponding file named |xy|<driver>|.tex|
-which defines the necessary macros, as well as a documentation file named
-|xy|<driver>|.doc|. The spelling is all lower-case, designed to be both
-descriptive and unique for the 1st 8 characters of the file names.
-
-\vspace{.5pc}\noindent
-\begin{tabular}{@{\hspace{1pt}}ll@{\hspace{0pt}}}
-\hline
-<driver> & \hfil Description\hfil \\
-\hline
-\tt dvips & Tomas Rokicki's \dvips \\
-\tt dvips & Karl Berry's |dvipsk| \\
-\tt dvips & Thomas Kiffe's \dvips\ for Macintosh\\
-\tt textures & Blue Sky Research's \Textures\ v1.7+ \\
-\tt 16textures & Blue Sky Research's \Textures\ v1.6 \\
-\tt oztex & Andrew Trevorrow's \OzTeX\ v1.8+ \\
-\tt 17oztex & Andrew Trevorrow's \OzTeX\ v1.7 \\
-%\tt ln & Digital Corp. printers & $-$ \\
-%\tt dvitops &James Clark's dvitops & $?$ \\
-%\tt emtex & Eberhard Matte's em-\TeX & $-$ \\
-\hline
-\end{tabular}
-\vspace{.5pc}
-%$*$ denotes full support, for all the features the driver can handle;
-%$?$ denotes that some features have not been tested, but may still work;
-%$-$ denotes no support as yet.
-
-Other DVI-drivers may also work using one of these files, if they use
-conventions similar to |dvips|, \OzTeX\ or \Textures. Alternatively
-it should not be too difficult to write the files required, using these
-as a basis indicating the type of information needed to support the
-specific |\special| commands. Anyone attempting to do this should inform
-the author and convey a successful implementation to him for inclusion
-within the \Xy-pic distribution.
-
-\NOTE: In some previous versions of \Xy-pic the \PS\ backend and driver
-were loaded simultaneously by a command of the form
-|\UsePSspecials{|<driver>|}|. For backward-compatibility these commands
-should still work, but now loading the latest version of the given
-<driver>. However their future use is discouraged in
-favour of the option-loading mechanism, via |\xyoption{|<driver>|}|.
-This latter mechanism is more flexible, both in handling upgrades of the
-actual driver support and in being extensible to support more general
-forms of |\special| commands.
-
-\medskip
-
-Once activated the \PS\ backend can be turned off and on again at will,
-using the user following commands:
-%
-\begin{defs}
- ??c![\NoPSspecials] & cancels \PS \cr
- ??c![\UsePSspecials{}] & restores \PS
-\end{defs}
-\noindent\unskip
-%
-These obey normal \TeX\ scoping rules for environments; hence it is
-sufficient to specify |\NoPSspecials| within an environment or grouping.
-Use of \PS\ will be restored upon exiting from the environment.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The default level of \PS\ is [4], see below.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\TODO: There is redundancy between here and |\UsePSspecials@|.
-The value of |\setupxyPS@| \PS\ level could be set here rather than later
-in |\PSspecials@|.
-
-\DOCMODE(
-\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@{\xyerror@{PostScript specials for `#2' not supported}{}}%
- \ifx\next\relax \DN@{\UsePSspecials@{#2}{}}%
-% \else \DN@{\expandafter\UsePSspecials@\csname#2@\endcsname#1}\fi
- \else \DN@{\UsePSspecials@{#2}{#1}}\fi
- \fi
- \else
- \DN@{#2}\ifx\next@\empty \DN@{\PSspecials@true}%
- \else
-% \edef\next@{\expandafter\string\csname#2@\endcsname}%
- \DN@{#2}%
- \edef\nextii@{\expandafter\string\whichPSspecials@}%
- \ifx\next@\nextii@\DN@{\PSspecials@true}%
- \else
- \ifx\firstPS@@\relax
- \DN@{\xyerror@{Only one PS <driver> 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 <driver> to #2 }%
-% \DN@{\expandafter\UsePSspecials@\csname#2@\endcsname#1}%
- \DN@{\UsePSspecials@{#2}{#1}}%
- \fi
- \fi
- \fi
- \fi
- \fi \next@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The following control sequences will also load the corresponding driver.
-They are retained for backwards compatibility only;
-they may be phased out of future releases:
-%
-\begin{defs}
- |\UseDVIPSspecials| & |dvips| \cr
- |\UsePostScriptSpecials| & |dvips|\cr
- |\UseTexturesPSspecials| & |Textures| \cr
- |\UseTexturesSpecials| & |Textures|
-\end{defs}
-%
-\DOCMODE(
-\xydef@\UseDVIPSspecials{\UsePSspecials@\dvips@}
-\xydef@\UseTexturesPSspecials{\UsePSspecials@\Textures@}
-\xydef@\UseTexturesSpecials{\UsePSspecials@\Textures@}
-\xydef@\UsePostScriptSpecials{\UsePSspecials@\dvips@}
-\xydef@\UseOzTeXspecials{\UsePSspecials@\OzTeX@}
-\xydef@\UseDVITOPSspecials{\UsePSspecials@\dvitops@}
-%\xylet@\UseDVIPSSpecials=\UseDVIPSspecials
-%\xylet@\UsePSspecials=\UsePostScriptSpecials
-%\xylet@\UseTeXturesPSspecials=\UseTexturesPSspecials
-%\xylet@\UseTexturesSpecials=\UseTexturesPSspecials
-%\xylet@\UseTeXturesSpecials=\UseTexturesSpecials
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\message{drivers,}
-\DOCMODE)
-
-First the driver is specified by |\UsePSspecials{|<driver>|}|.
-This causes a special driver file to be read.
-Use of fonts is restored at any point by calling |\NoPSspecials|,
-after which use of \PS\ is re-instated by simply |\UsePSspecials|,
-without need of an argument.
-The commands described above for specific drivers are simply aliases
-for |\UsePSspecials@{|<driver>|}|.
-
-Once the new bindings have been setup, then the use of |\special|s is
-governed by the value of the conditional |\ifPSspecials@|.
-
-\DOCMODE(
-\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}}
-%\xydef@\dviwindo@{\loadPSdriver@{ps-wdo}{dviwindo}}
-%\xydef@\dviwin@{\loadPSdriver@{ps-win}{dviwin}}
-%\xydef@\pubps@{\loadPSdriver@{ps-pub}{pubps}}
-\DOCMODE)
-
-The driver file contains definitions which are specific
-to the particular driver.
-Note that some drivers may not be able to support all of the \PS\
-effects that can be requested from within \Xy-pic. When an unsupported effect
-is encountered, it is simply ignored; a warning message will be produced
-unless too many such messages have already been issued.
-
-\DOCMODE(
-\global\newif\ifPSspecials@
-%\xydef@\UsePSspecials@#1{\gdef\whichPSspecials@{#1}\xyFN@\PSspecials@}
-\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}}
-%
-%\xydef@\xyPSraw@{%
-% \ifPSspecials@\expandafter\PSraw@@\else\expandafter\eat@\fi }
-\DOCMODE)
-
-% To install the back-end requires loading the \PS\ dictionary.
-% However this can only be done when a <driver> is known to be able to
-% support it. Hence the following command should be called only from
-% within a <driver>-file.
-%
-% \DOCMODE(
-% \DN@{\csname newif\endcsname\ifUsePSdict@@\DN@{}}
-% \ifx\undefined\UsePSdict@@true\else\DN@{}\fi \next@
-% \DOCMODE)
-%
-% Furthermore, the <driver>-file should define a value for |\installxyps@@|
-% to including anything specific to that <driver>; even if only
-% |\let\installxyps@@=\relax|. If |\dumpPSdict| has been specified,
-% then the dictionary must be written first, so it can be used with the
-% subsequent processing.
-%
-% \DOCMODE(
-% \xylet@\dumpPSdict@@=\relax
-%
-% \xydef@\installxyps@{%
-% \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}\xycatcodes
-% \installxyps@@ \installxyps@x
-% \global\let\UsePSspecials=\UsePSspecials@x
-% % \let\installxyps@@=\eat@
-% \PSspecials@true }
-%
-% \xylet@\installxyps@@=\relax
-%
-% \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@ }
-% \DOCMODE)
-%
-% In case no <driver> was known when a call to the |\installxyps@| method
-% was queued, e.g. by |\dumpPSdict{}| before any |\xyoption{|<driver>|}|,
-% then a check is made to see there is now a known <driver> which
-% supports \PS. If so then this installation is cancelled since another
-% should follow, otherwise the default <driver> of |dvips| is assumed.
-% The command |\xyPSdriver#1| is provided to allow users to change this
-% default <driver>. This may be necessary when multiple <driver>s are
-% required and the final one specified does not support \PS.
-%
-% \DOCMODE(
-% \xydef@\xydefaultdriver@{dvips}
-% \xydef@\xyPSdriver#1{\def\xydefaultdriver@{#1}}
-%
-% \xydef@\installxyps@orig{%
-% \DN@{null}\ifx\next@\currentxydriver@\DN@{%
-% \expandafter\defaultinstallps@\expandafter{\xydefaultdriver@}}%
-% \else \DN@{}%
-% \expandafter\expandafter\expandafter\ifx
-% \expandafter\csname\currentxydriver@ @xy@ps\endcsname\relax
-% \DN@{\expandafter\defaultinstallps@\expandafter{\xydefaultdriver@}}%
-% \else \DN@##1{}\fi
-%\xywarning@{will install \currentxydriver@\space shortly}%}%
-% \fi \next@ }
-%
-% %\xylet@\installxyps@@=\installxyps@orig
-%
-% \xydef@\defaultinstallps@#1#2{%
-% \xywarning@{no driver specified, using #1 }%
-% \xyoption{#1}\csname #1@xy@ps\endcsname{}}
-%
-% \xydef@\null@xy@ps{\installxyps@}
-% \DOCMODE)
-
-Unloading the \PS-backend is handled by the |unload| <driver>.
-
-\DOCMODE(
-\xyaddunsupport{ps}{\csname UnloadPS@@\endcsname}
-\DOCMODE)
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{adding new drivers}
-??=[new drivers]
-
-Other drivers can be added by including an appropriate control-sequence name
-for the driver at this point. The purpose of an expansion such as
-|\xydef@\OzTeX@{\noexpand\OzTeX@}| is so that this name always refers to
-a unique token. The macro |\PSspecials@@| defined below, detects this token
-and then calls up the appropriate macro to make the necessary bindings.
-
-Thus adding a new driver involves 5 steps:
-\begin{itemize}
-\item 1
-Define a new control sequence, as just explained.
-\item 2
-Define appropriately named macros to generate the desired |\special|s.
-(See the existing ones for examples of what is needed here.)
-\item 3
-Define a macro that will perform the appropriate bindings of the
-different classes of |\special|. (See the existing ones for examples of
-what is needed here.)
-\item 4
-Determine how frequently the \Xy-ps dictionary must be included within
-the PostScript file. Once (at the beginning) is the ideal, however it
-may be necessary to include it with every page---this is the case with
-\Textures. Also if the dictionary can be loaded as a header or prolog,
-determine whether this can be done only once or must be for each page.
-Also check whether a specific name is required, as with \OzTeX.
-\item 5
-Check to see whether the |\dumpPSdict| macro correctly writes the dictionary
-to a file. The |\endlinechar| can be important here.
-\end{itemize}
-
-\Xy-ps works by rebinding existing control sequence names, in the \Xy-pic
-kernel and extensions, to have new expansions. These new expansions may
-eventually typeset nothing, or at most an empty box; instead they use a
-|\special| command to place \PS\ code directly into the |.dvi| file
-(or |DVI2| resources in the case of \Textures on the Macintosh).
-The new expansions alter the \TeX\ processing, often simplifying it
-considerably hence leading to savings in both time and memory requirement.
-
-It should not be possible to mix |\specials| intended for different drivers.
-Thus the first use of |\PSspecials@| will establish which driver is required
-then rebinds |\UsePSspecials@| so that no other driver can be used;
-subsequent attempts to use |\UsePSspecials@| simply result in the same
-driver being reinstated.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-An optional argument to the |\UsePSspecials| command
-allows for some control over precisely when \PS\
-|\specials| will be used.
-Similarly |\UseDVIPSspecials| and |\UseTexturesSpecials|, etc. can take an
-optional argument.
-
-For example, |\UsePSspecials[1]| replaces only font characters
-with a \PS\ drawing of the same character.
-Both the \PS\ and the bitmapped fonts should produce (virtually)
-identical printed images. This is primarily a test mode.
-
-|\UsePSspecials[2]| also only replaces font characters but such
-that the number of possible directions is 8192, so that arrowheads
-turns and hooks fit better.
-
-|\UsePSspecials[3]| draws straight and dotted lines from a
-single |\special| command, and similarly for circle segments.
-The printed output should be identical to that obtained with
-|\UsePostScriptSpecials[2]|, but the size of the |.ps| file should
-be smaller.
-
-|\UsePSspecials[4]| is the default level;
-all PostScript is turned on. Dotted curves use equally spaced dots,
-dashed curves have curved dashes; even dashed lines are better.
-
-|\UsePSspecials[0]| does no rebinding of fonts at all.
-It allows the special effects, such as rotation, scaling, colour, etc
-defined in extensions, to be implemented while using the Xy-pic fonts.
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Why use \PS}
-??=[why PostScript]
-
-At some sites users have difficulty installing the extra fonts used by
-\Xy-pic. The |.tfm| files can always be installed locally but it may
-be necessary for the |.pk| bitmap fonts (or the |.mf| \MF\ fonts) to
-be installed globally, by the system administrator, for printing to
-work correctly. If \PS\ is available then \Xy-ps allows this
-latter step to be bypassed.
-
-\NOTE: with \Xy-ps it is still necessary to have the |.tfm| font
-metric files correctly installed, as these contain information vital
-for correct typesetting.
-
-\medskip\noindent
-Other advantages obtained from using \Xy-ps are the following:
-\begin{itemize}
-\item[$\bullet$]
-Circles and circle segments can be set for arbitrary radii.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item[$\bullet$]
-solid lines are straighter and cleaner.
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-They are no longer typeset as a
-collection of fixed-sized segments (drawn from the |xydash10| font).
-Previously special placement algorithms were required, to construct lines of
-arbitrary length in up to 8192 distinct directions, from the 128 characters
-in the font. These algorithms are no longer required, giving improved
-\TeX\ processing, as well as having smooth lines of arbitrary length and
-direction limited only by the resolution of the \PS\ device.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item[$\bullet$]
-The range of possible angles of directionals is greatly increased.
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-For arrow tips, hooks, and turns, there are now 8192 possible orientations
-rather than just the 128 contained in the |xyatip10|, |xybtip10|, and
-|xybsql10| fonts.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item[$\bullet$]
-Spline curves are smoother. True dotted and dashed versions are now
-possible, using equally spaced segments which are themselves curved.
-
-\item[$\bullet$]
-The \PS\ file produced by a driver from an \Xy-ps DVI file is in
-general significantly smaller than one produced by processing an
-`ordinary' DVI file using the same driver. One reason for this is
-that no font information for the \Xy-pic fonts is required in the
-\PS\ file; this furthermore means that the use of \Xy-pic does
-not in itself limit the \PS\ file to a particular
-resolution.\footnote{Most \TeX\ \PS\ drivers store the images of
-characters used in the text as bitmaps at a particular resolution.
-This means that the \PS\ file can only be printed without loss
-of quality (due to bitmap scaling) at exactly this resolution.}
-
-\item[$\bullet$]
-The latest version of \Xy-pic now enables special effects such as
-variable line thickness, gray-level and colour. Also, rotation of text
-and (portions of) diagrams is now supported with some drivers.
-Similarly whole diagrams can be scaled up or down to fit a given area on the
-printed page. Future versions will allow the use of regions
-filled with colour and/or patterns, as well as other attractive effects.
-
-\end{itemize}
-
-Some of the above advantages are significant, but they come at a price.
-Known disadvantages of using \Xy-ps include the following:
-
-\begin{itemize}
-
-\item[$\bullet$]
-A DVI file with specials for a particular \PS\ driver can only
-be previewed if a previewer is available that supports exactly the
-same |\special| format.
-A separate \PS\ previewer will usually be required.\par
-\smallskip
-However recent versions of |xdvi| support viewing of \PS\
-using either the GhostScript program or via ``Display PostScript''.
-The \PS\ produced by \Xy-ps can be viewed this way
-
-\item[$\bullet$]
-DVI files created using \Xy-ps in fact lose their ``device-independence''.
-So please do not distribute DVI files with \PS\ specials---send either
-the \TeX\ source code, expecting the recipient to have \Xy-pic~\smiley,
-or send a (compressed) \PS\ file.
-\end{itemize}
-
-\noindent
-The latter comment applies to files in which any special `back-end' support
-is required, not just to \PS. Of course it can be ignored when you know
-the configuration available to the intended recipient.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{\PS\ header file:}
-
-With some DVI-drivers it is more efficient to have the \PS\ commands
-that \Xy-ps needs loaded initially from a separate ``header'' file.
-To use this facility the following commands are available\dots
-\begin{defs1}
- ??c![\UsePSheader{}] \cr
- ??c![\UsePSheader{<filename>}] \cr
- ??c![\dumpPSdict{<filename>}] \cr
- ??c![\xyPSdefaultdict]
-\end{defs1}
-\xyPSdefaultdict
-Normally it is sufficient to invoke |\UsePSheader{}|, which invokes the
-default name of {\tt\xyPSdictname}, referring to the current
-version of \Xy-pic.
-The optional <filename> allows a different file to be used.
-Placing |\dumpPSdict{..}| within the document preamble causes the dictionary
-to be written to the supplied <filename>.
-
-\DOCMODE(
-\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
-% \ifx\xyPSdictname\undefined\xyPSdefaultdict\fi
- \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
-\DOCMODE)
-
-See the documentation for the specific driver to establish where the
-dictionary file should be located on any particular \TeX\ system.
-Usually it is sufficient to have a copy in the current working directory.
-Invoking the command |\dumpPSdict{}| will place a copy of the requisite
-file, having the default name, in the current directory.
-This file will be used as
-the dictionary for the current processing, provided it is on the
-correct directory path, so that the driver can locate it when needed.
-Consult your local system administrator if you experience difficulties.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The `dump' cannot be performed until a driver has been installed.
-This ensures that the correct `end-of-line' character is used.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Multiple instances of |\UsePSheader| and |\dumpPSdict| are possible, only
-the last will determine which file is used for the current document.
-The command |\xyPSdefaultdict| reverts to the default name.
-
-Allowing an arbitrary <filename> with |\UsePSheader| is for flexibility,
-to accommodate systems that may impose special requirements
-on the filenames of files to be used as \PS\ header files.
-\OzTeX\ is one such. It also caters for advanced users of \Xy-pic
-who may wish to experiment with customised \PS\ to obtain new effects.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Hooking into \Xy-pic}
-??=[hooks]
-
-\DOCMODE(
-\message{hooks,}
-\DOCMODE)
-
-This next macro streamlines the rebinding process.
-
-\DOCMODE(
-\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}}%
-\DOCMODE)
-
-The commands |\setupxyPSlevelA@|, |\setupxyPSlevelB@|, |\setupxyPSlevelC@|
-and |\setupxyPSlevelD@| actually perform the rebindings.
-Each may be called precisely once, and each requires all lower levels are
-also set.
-
-\DOCMODE(
-\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@}%
-% \xywithoption{cmtip}{\xyPScmtips@}%
- \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}%
-% \xyPSalternative@{\squiggle@}{squiggled}%
- \xywithoption{curve}{%
- \xyPSalternative@{\splinedashed@}{splinedashed}%
- \xyPSalternative@{\splinedotted@}{splinedotted}}%
- \gdef\setupxyPSlevelD@{}%\PSincrease@{4}}%
- \setupxyPSlevelC@ }
-\DOCMODE)
-
-The bindings are not performed until |\setupxyPS@| is called.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{Kernel improvements}
-??=[kernel]
-
-\subsubsection*{Directionals:}
-
-These macros standardise the way a character is described in \PS.
-First give the |\Direction| code then the operator name,
-which is just a simple character string.
-The modifiers |\xyPSfont@| and |\xyPSsemifont@| are empty in all
-but the most primitive level of \PS\ usage. When non-empty
-they restrict to using only angles corresponding to actual font
-characters.
-
-\DOCMODE(
-\xydef@\xyPSchar@#1{%
- \PSmacro@{\the\Direction\space \xyPSfont@ #1}}
-
-\xydef@\xyPSsemichar@#1{%
- \PSmacro@{\the\Direction\space \xyPSsemifont@ #1}}
-\DOCMODE)
-
-These macros provide \PS\ code to round a |\Direction| code to that
-corresponding to the nearest font character code, for Directional and
-semi-Directional fonts respectively.
-
-\DOCMODE(
-\xydef@\xyPSfont@{f }%{xyfont }
-\xydef@\xyPSsemifont@{fs }%{xysdfont }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Before any binding we save the original expansions of control-sequences
-whose names will be subject to rebinding. We give these first for each font.
-
-\paragraph*{tips}
-Arrow heads in |\xyatipfont| and |\xybtipfont|
-
-The tips are all set as zero-sized characters\dots
-
-\DOCMODE(
-\xydef@\xyPStip@{\xyPSchar@{t}}%{\xyPSchar@{tip}}
-%\xydef@\xyPSatip@{\xyPSchar@{a}}%{\xyPSchar@{atip}}
-%\xydef@\xyPSbtip@{\xyPSchar@{b}}%{\xyPSchar@{btip}}
-\xydef@\xyPSTip@{\xyPSchar@{/XT tt}}%{\xyPSchar@{Tip}}
-\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}}%{\xyPSchar@{Ttip}}
-\xydef@\xyPSTip@eu@{\xyPSchar@{/ET tt}}%{\xyPSchar@{Tip}}
-\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}}%{\xyPSchar@{Ttip}}
-\DOCMODE)
-
-The mechanism to handle Computer Modern tips is a little different.
-Here we must rebind |\xycm@| to avoid any calls to font names.
-When |\PSspecialstrue| then we expand a macro which will
-look at the following token to decide which type of tip
-is required after |\tip@x|.
-
-\DOCMODE(
-%\xydef@\xyPScmtips@{\xyPSalternative@{\xycm@}{cm}}%
-\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}}%{\xyPSchar@{cmtip}}
-\xydef@\xyPScmatip@{\xyPSchar@{ca}}%{\xyPSchar@{cmatip}}
-\xydef@\xyPScmbtip@{\xyPSchar@{cb}}%{\xyPSchar@{cmbtip}}
-\DOCMODE)
-
-From version 3.3 the font coding has changed, for greater flexibility
-and consistency. In particular |\xycm@| is no longer defined.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\paragraph*{hooks, turns and squiggles:}
-squiggles from: |\xybsqlfont|
-
-The hooks are zero-sized characters\dots
-
-\DOCMODE(
-\xydef@\xyPShook@{\xyPSchar@{h}}%{\xyPSchar@{hook}}
-\xydef@\xyPSahook@{\xyPSchar@{ha}}%{\xyPSchar@{ahook}}
-\xydef@\xyPSbhook@{\xyPSchar@{hb}}%{\xyPSchar@{bhook}}
-\DOCMODE)
-
-\dots so are the turns\dots
-
-\DOCMODE(
-\xydef@\xyPSaturn@{\xyPSchar@{ta}}%{\xyPSchar@{aturn}}
-\xydef@\xyPSbturn@{\xyPSchar@{tb}}%{\xyPSchar@{bturn}}
-\DOCMODE)
-
-This handles squiggles as individual characters.
-Squiggled connections should be handled separately, e.g. by
- having |\xyPSsquiggle@| set the connection by something like
- |\edef\Connect@@{\noexpand\xyPSsquiggled@ {\the\Direction}}|.
-
-\DOCMODE(
-\xydef@\xyPSsquiggle@{\xyPSchar@{g}}%{\xyPSchar@{squigl}}
-\DOCMODE)
-
-\TODO:
-define composite |\xyPSsquiggled@|
-
-\TODO:
-define composite |\xyPSdashsquiggled@|
-
-\paragraph*{dashes and stoppers:}
-using characters from: |xydashfont|
-
-A stopper contributes zero size.
-However a dash gets its size from the italic correction in the
-|xydashfont|, accessed here using |\origxyline@@|.
-
-\DOCMODE(
-\xydef@\xyPSstopper@{\xyPSchar@{st}}%{\xyPSchar@{stopper}}
-
-%\xydef@\xyPSfliptrue@{\DN@{\xyPSsemichar@{true dash}}}
-\xydef@\xyPSfliptrue@{\DN@{\xyPSsemichar@{T d}}}
-
-\xydef@\xyPSdash@{%
-% \DN@{\xyPSsemichar@{false dash}}%
- \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 }
-\DOCMODE)
-
-\subsubsection*{Circles}
-
-full circles and circle segments: |\xycircfont|
-
-This handles the cases where a font character is called using |\circhar#1|.
-
-\DOCMODE(
-\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}%
-\DOCMODE)
-
-This replaces just the font character, called using |\circhar@@#1|.
-
-\DOCMODE(
-\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@}}
-\DOCMODE)
-
-This next macro will allow for more general circle segments to be
-done in \PS. The two parameters are the starting angle
-and finishing angle respectively, measured anti-clockwise.
-
-\DOCMODE(
-\xydef@\xyPScirc@#1#2{\edef\tmp@{\expandafter\removePT@\the\R@}%
-% \PSmessage{\tmp@\space #1 #2 circ}\PSmacro@{\tmp@\space #1 #2 circ}}
- \PSmacro@{\tmp@\space #1 #2 o}}
-\DOCMODE)
-
-These gives full circles and circle segments built from quarter turns.
-
-\DOCMODE(
-\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@}}
-\DOCMODE)
-
-\subsubsection*{Lines}
-solid, dashed and dotted; without using segments.
-
-This is based on |\straight@|. It is used by all three types of line,
-taking an appropriate macro as the parameter |#1|.
-
-\DOCMODE(
-\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@@ }
-\DOCMODE)
-
-This is not needed unless styles are used, hence |xyps-s| is loaded.
-
-\DOCMODE(
-\xylet@\xykillstyles@=\relax
-\DOCMODE)
-
-Here is how solid lines are done.
-
-\DOCMODE(
-%\xydef@\xyPSsolid@{\ifInvisible@ \let\next@=\no@@
-% \else \DN@{\xyPSstraight@\xyPSsolid@@@}\fi \next@ }
-
-\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@}
-\DOCMODE)
-
-
-This replaces the \Xy-pic |\dash@| to give dashed lines:
-
-\DOCMODE(
-%\xydef@\xyPSdashed@{\line@ \def\Connect@@{\xyPSstraight@\xyPSdashed@@}}
-%\xydef@\xyPSdashed@@{\edef\tmp@{%
-% \expandafter\removePT@\the\d@X\space\expandafter\removePT@\the\d@Y }%
-% \PSmessage{dashed line: \tmp@}\PSmacro@{\tmp@\space dd}}
-\DOCMODE)
-
-This replaces the \Xy-pic |\point@| to give dotted lines.
-\Xy-pic defines |\zerodot| to be a small centred square
-with side length |\xydashw@|. The \PS\ substitute is
-a round dot of this radius.
-
-\DOCMODE(
-\xydef@\xyPSpoint@{\xyPSzerodot@\egroup
- \Invisible@false \Hidden@false \def\Leftness@{.5}\def\U@pness@{.5}\ctipEdge@
-% \def\Drop@@{\styledboxz@}\def\Connect@@{\xyPSstraight@\xyPSdotted@}}
- \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\xyPSdottedSpread@}}
-
-%\xydef@\xyPSdotted@{\edef\tmp@{%
-% \expandafter\removePT@\the\d@X\space\expandafter\removePT@\the\d@Y }%
-% \PSmessage{dotted line: \tmp@}\PSmacro@{\tmp@\space dt}}
-\xydef@\xyPSzerodot@{\PSmessage{dot:}\PSmacro@{p}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Frames}\leavevmode
-
-These are used for dashed frames.
-
-%\DOCMODE(
-%\xydef@\xyPSdashhfill@{{\SemiDirectionChar=95 \Direction=3072 \xyPSdash@}}
-%\xydef@\xyPSdashvfill@{{\SemiDirection=31 \Direction=1023 \xyPSdash@}}
-%\DOCMODE)
-
-This may do circular frames.
-
-%\DOCMODE(
-%\xydef@\xyPScircled@#1{{\R@=#1\relax
-% \setboxz@h{\dimen@=\X@c\advance\dimen@-\R@c\kern\dimen@
-% \raise\Y@c\hbox{\xyPSCIRfull@}}%
-% \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}}
-%\DOCMODE)
-
-\paragraph*{Curves}\leavevmode
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xyps.doc,v $
-% Revision 3.7 1999/02/16 15:12:50 krisrose
-% Interim release (Y&Y fonts now free).
-%
-% Revision 3.4 1997/05/18 01:13:24 ross
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/19 03:50:08 ross
-% Maintenance release.
-%
-% Revision 3.3 1996/12/18 09:31:46 ross
-% revised interface to straight connections
-% revised interface for tips, handles arbitrary scaling
-% driver/option-loading now uses \xyrequire
-%
-% Revision 3.2 1995/09/19 18:21:41 ross
-% Bug fix release.
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.14 1995/07/05 22:10:30 kris
-% Buglets...
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% Revision 2.12 1994/10/25 03:01:14 ross
-% Final 3beta release [bug fixes & AMS-LaTeX fitting].
-%
-% Revision 2.11 1994/07/05 06:34:32 ross
-% fixed bug with quadratic curves
-% fixed minor documentation bugs
-%
-% Revision 2.10 1994/06/15 12:46:03 ross
-% Second release 3beta.
-% Colour and line style saving works; label colouring bug fixed.
-%
-% Revision 2.9 1994/06/09 14:50:54 ross
-% Release 3beta.
-% Includes support for special effects: Rotations, Scaling, Line-width, Colour.
-% Back-ends are separated into separate files.
-% More back-ends are supported, experimentally --- needs testing.
-%
-% Revision 2.8 1994/04/08 10:36:40 ross
-% Second 3alpha release.
-%
-% Revision 2.7 1994/03/28 10:57:02 ross
-% First version.
-%
-% Initial version by Ross Moore based on XYps 2.6.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xypsdict.doc b/Master/texmf-dist/source/generic/xypic/xypsdict.doc
deleted file mode 100644
index 34a63c0c4c5..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xypsdict.doc
+++ /dev/null
@@ -1,375 +0,0 @@
-%% $Id: xypsdict.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Xy-pic ``PostScript backend prolog''.
-%% Copyright (c) 1995-1997 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@ens-lyon.fr>
-%%
-%% 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, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-%% 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.
-
-%\let\xypsdictloaded=\empty %
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This file contains the addendum to the dictionary of \PS\ commands which
-need to be available to the \PS\ driver when the \PS\ back-end has been
-requested.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection*{\PS\ backend Dictionary}
-
-Open a group and set some constants.
-Make sure the preliminary part is also loaded, in case |\XYpredict@|
-has not been set to |\relax|.
-Then make line-ends active.
-
-\DOCMODE(
-\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
-% /xypspt{72 72.27 div dup scale}bind 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@@{%
-% /xy{mark exch countdictstack /xylevel exch def xyopen xycolor stopped
-% xyclose cleartomark}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
-% /cma{exch gchksavexy xyfscale cm halfxytip xystroke}def
-% /cmb{exch gchksavexy xyfscale xyopp cm halfxytip xystroke}def
-% /cmab{exch gchksavexy xyfscale gsave cm halfxytip stroke
-% grestore xyopp cm halfxytip xystroke}def
- /ct /cmtip load def /ca /cmatip load def /cb /cmbtip load def}%
-%
-\PSdict@@{%
-% /halfxytip{xyfsize mul 2 div exch xyfsize mul neg tipwidth 0 0 moveto
-% dup dup 5 -2 roll dup dup 4 2 roll mul 5 1 roll 3 1 roll curveto}bind def
-% /eu{2 3 div 1 8 div 7 16 div}def
-% /cm{1 3 div 1 5 div 1 2 div}def
-% /XY{1 3 div 1 2 div .31}def
-% /eua{exch gchksavexy xyfscale eu halfxytip xystroke}def
-% /eub{exch gchksavexy xyfscale xyopp eu halfxytip xystroke}def
-% /euab{exch gchksavexy xyfscale gsave eu halfxytip stroke
-% grestore xyopp eu halfxytip xystroke}def
-% /xya{exch gchksavexy xyfscale XY halfxytip xystroke}def
-% /xyb{exch gchksavexy xyfscale xyopp XY halfxytip xystroke}def
-% /xyab{exch gchksavexy xyfscale gsave XY halfxytip stroke
-% grestore xyopp XY halfxytip xystroke}def
-%
- /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@@{/aTip{gchksavexy halfTip xystroke}def
-% /bTip{gchksavexy xyopp halfTip xystroke}def }
-%
-\PSdict@@{%/halfTip{360 32 div neg rotate halftip}bind def
-% /halfTtip{.31 mul 1 atan rotate halftip}bind def
-% /Tip{gchksavexy gsave halfTip stroke grestore
-% xyopp halfTip xystroke}def
-% /Ttip{gchksavexy xysegl neg 0 rlineto 0 0 moveto
-% gsave -1 halfTtip stroke grestore xyopp -1 halfTtip xystroke}def
-%
- /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@@{/halfstop{90 rotate xysegl 1.4 mul 0 rlineto}bind def}
-%\PSdict@@{/astop{gsavexy halfstop xystroke}def}
-%\PSdict@@{/bstop{gsavexy xyopp halfstop xystroke}def}
-%\PSdict@@{/abstop{gsavexy 90 rotate xysegl 1.4 mul
-% dup 2 div 0 rmoveto neg 0 rlineto xystroke}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%
-\DOCMODE)
-
-Close the group and clean-up.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\endinput
-
-% $Log: xypsdict.doc,v $
-% Revision 3.7 1999/02/16 15:12:50 krisrose
-% Interim release (Y&Y fonts now free).
-%
-% Revision 3.6 1998/03/06 01:28:05 krisrose
-% Releasing (with Y&Y fonts).
-%
-% Revision 3.4 1997/05/18 01:13:24 ross
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/19 03:50:08 ross
-% Maintenance release.
-%
-% Revision 3.3 1996/12/18 09:36:42 ross
-% PostScript support for scaling arrow-tips: CM and Euler
-%
-% Revision 3.2 1995/09/19 18:21:41 ross
-% Bug fix release.
-%
-% Revision 3.1 1995/09/05 20:28:57 ross
-% Releasing version 3.1!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-%
-% new for version 3.1.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xypspatt.doc b/Master/texmf-dist/source/generic/xypic/xypspatt.doc
deleted file mode 100644
index e26fce5181a..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xypspatt.doc
+++ /dev/null
@@ -1,182 +0,0 @@
-%% $Id: xypspatt.doc,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Xy-pic ``PostScript pattern prolog''.
-%% Copyright (c) 1995-1998 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1998 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-%% 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.
-%%
-%\let\xypspattloaded=\empty %
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This file contains the addendum to the dictionary of \PS\ commands which
-need to be available to the \PS\ driver when patterns have been requested.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection*{\PS\ pattern support}
-
-Open a group, set the catcodes to normal and make line-ends active.
-
-\DOCMODE(
-\begingroup \xycatcodes \xyPSobeylines@@%
-%
-\PSdict@@{/XYdict where pop begin XYdict begin}%
-%
-%
-% use as: /name <data> :t to create a pattern object in XYdict
-%
-% eg <data>: /bk[1 1 1]def /fg[0 0 0]def
-% <B1B1B13030300303031B1B1BD8D8D8C0C0C00C0C0C8D8D8D> fg bk
-%
-% (be careful with setmatrix , for consistency across <driver>s
-%
-\PSdict@@{/:patt
-{XYddict begin
-14 dict begin
-/BGnd exch def % null OR color spec in rgb, as an array
-/FGnd exch def % color spec in rgb, as an array
-/PaintData exch def % pattern spec as a Hex string, 16 x 3-component
-/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 % defined according to BGnd and FGnd colours
- {{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 % xyport not{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 % stack: x y dx dy rF
- 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} %hack for Ghostscript
- {/.buildpattern where {pop % hack for older Ghostscript
- forecolor backcolor :patt setpattern % hack for older Ghostscript
- }{pop pop setcolpattern}ifelse}ifelse} % hack for Ghostscript
-% pop forecolor backcolor :patt setpattern} % hack for Ghostscript
- {pop setcolpattern}ifelse}
- {5 eq{/setcolorspace where{ %
- /.setcolorspace where{pop pop pop pop pop setcolpattern} % Ghostscript
- {/.buildpattern where {pop % hack for older Ghostscript
- :patt setpattern % hack for older Ghostscript
- }{pop pop pop pop setcolpattern}ifelse}ifelse} %hack for Ghostscript
-% pop :patt setpattern} % hack for Ghostscript
- {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%
-\DOCMODE)
-
-Close the group and clean-up.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\endinput
-
-% $Log: xypspatt.doc,v $
-% Revision 3.7 1999/02/16 15:12:50 krisrose
-% Interim release (Y&Y fonts now free).
-%
-% Revision 3.3 1996/12/18 09:38:37 ross
-% minor change to prevent multiple loading
-%
-% Revision 3.2 1995/09/19 18:21:41 ross
-% Bug fix release.
-%
-% Revision 3.1 1995/09/05 20:28:57 ross
-% Releasing version 3.1!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-%
-% new for version 3.1.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyrecat.doc b/Master/texmf-dist/source/generic/xypic/xyrecat.doc
deleted file mode 100644
index 89b3c828f84..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyrecat.doc
+++ /dev/null
@@ -1,95 +0,0 @@
-%% $Id: xyrecat.doc,v 3.3 1996/12/19 03:31:56 krisrose Exp $
-%%
-%% Xy-pic ``Reset Category Codes'' utility.
-%% Copyright (c) 1994-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\noindent
- However, it is possible to `repair' the problem in case any of the
- characters |#$&'+-.<=>`| change category code:
-%
-\begin{defs1}
-|\xyresetcatcodes|
-\end{defs1}
-\noindent\unskip
-%
- will load the file ??c![xyrecat.tex] (version
- \stripRCS$Revision: 3.3 $) to do it.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}
-\DOCHEADER
-\noindent
- The command is defined in |xy.doc|: the purpose of this file is to be
- reloadable such that the characters can be reread by \TeX\ with fresh
- catcodes.
-
- The code redefines the special |\add|\dots|@| control sequences used
- for parsing of just those characters, assuming |\next| is defined
- correctly before loading it:
-
-\DOCMODE(
-%\xyreuncatcodes
-\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
-
-% $Log: xyrecat.doc,v $
-% 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?
-%
-% NEW file to go in version 3!
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-prefix:"\t"
-% fill-column:77
-% paragraph-separate:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% paragraph-start:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyrefer.man b/Master/texmf-dist/source/generic/xypic/xyrefer.man
deleted file mode 100644
index 6322060fd17..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyrefer.man
+++ /dev/null
@@ -1,509 +0,0 @@
-%% $Id: xyrefer.man,v 3.7 1999/02/16 15:12:50 krisrose Exp $
-%%
-%% Wrapper to print ``Xy-pic Reference Manual''.
-%% Copyright (c) 1994-1998 Kristoffer H. Rose <krisrose@brics.dk>.
-%% All rights reserved.
-
-\documentclass{article}
-\usepackage{xydoc}
-\xyoption{knot}
-\xyoption{crayon}
-\xyoption{tile}
-\makeindex
-\begin{document}
-
-\title{ \Xy-pic Reference Manual }
-
-\author{
- Kristoffer H. Rose\\<krisrose@brics.dk>\thanks{%
- BRICS, Computer Science, Aarhus University (bld. 540),
- Ny Munkegade, DK--8000~Aarhus C, Denmark.}
- \and
- Ross Moore\\<ross@mpce.mq.edu.au>\thanks{%
- MPCE (Mathematics dept.), Macquarie University,
- North Ryde, Sydney, Australia NSW~2109.}
-}
-\date{Version \xyversion\quad<\xydate>}
-\maketitle
-
-\begin{abstract}
- This document summarises the capabilities of the \Xy-pic package for
- typesetting graphs and diagrams in \TeX. For a general introduction
- as well as availability information and conditions refer to the
- User's Guide~\cite{R95:Xy-picUG}.
-
- A characteristic of \Xy-pic is that it is built around a "kernel
- drawing language" which is a concise notation for general graphics,
- \eg,
-%
-\begin{code}
-\xy (3,0)*{A} ; (20,6)*+{B}*\cir{} **\dir{-}
- ? *_!/3pt/\dir{)} *_!/7pt/\dir{:}
- ?>* \dir{>} \endxy
-\end{code}
-%
-$$\docode$$
-%
- was drawn by the \Xy-pic kernel code
-%
-\displaycode\noindent
-%
- It is an object-oriented graphic language in the most literal sense:
- `objects' in the picture have `methods' describing how they typeset,
- stretch, etc. However, the syntax is rather terse.
-
- Particular applications make use of "extensions" that enhance the
- graphic capabilities of the kernel to handle such diagrams as
-%
-\begin{code}
-\xy *[o]=<40pt>\hbox{Round}="o"*\frm{oo},
- +<5em,-5em>@+,
- (46,11)*+\hbox{Square}="s" *\frm{-,},
- -<5em,-5em>@+,
- "o";"s" **{} ?*+\hbox{Bend}="b"*\frm{.},
- "o";"s"."b" **\crvs{-},
- "o"."b";"s" **\crvs{-} ?>*\dir{>}
-\endxy
-\end{code}
-\vspace{-2pc}
-$$\docode$$
-%
- which was typeset by
-%
-\displaycode
-\noindent
-%
- using the `curve' and `frame' extensions.
-
- All this is made accessible through the use of "features" that provide
- convenient notation such that users can enter special classes of
- diagrams in an intuitive form, \eg, the diagram
-%
-\begin{code}
-\xymatrix{
- U \ar@/_/[ddr]_y \ar[dr] \ar@/^/[drr]^x \\
- & X \times_Z Y \ar[d]^q \ar[r]_p
- & X \ar[d]_f \\
- & Y \ar[r]^g & Z }
-\end{code}
-$$\docode$$
-%
- was typeset using the `matrix' features by the \Xy-pic input lines
-%
-\displaycode
-
- Features exist for many kinds of input; here is a knot typeset using
- the `knots and links' feature:
-%
-\begin{code}
-\xygraph{!{0;/r1pc/:/u.7pc/::}="A"
- "A" [u(2.5)r]!{\xcapv[-1.5]}
- [u]!{\xcaph\xcapv[1.5]|(-.15)\khole}
- "A" [u]!{\xcapv[-3]}
- [u]!{\xcaph[3]>(-.035)\khole}[rr]!{\xcapv[3]}
- "A" [ur] !{\xunderh}
- "A" [r] !{\xcapv-} [ur] !{\xcapv}
- "A" [dr] !{\xunderh}
- "A" [dd] !{\xoverh} [r]!{\xoverh}
- "A" [rddd] !{\xunderh} [r] !{\xcapv}
- "A" [ddd] !{\xcapv-\xcaph-} [r] !{\xcaph-}}
-\end{code}
-$$\docode$$
-%
- The current implementation is programmed entirely within
- ``standard \TeX\ and \MF'', \ie, using \TeX\ macros (no |\special|s)
- and with fonts designed using \MF. Optionally special `drivers' make
- it possible to produce DVI files with `specials' for extra graphics
- capabilities, \eg, using \PS.
-\end{abstract}
-
-\pagebreak
-\tableofcontents
-\listoffigures
-
-\begin{figure}[b]
-\hbox to\hsize{%
- \includegraphics{kris.eps}
- \raise2em\hbox{Kristoffer Rose}\hss
- Ross Moore
- \includegraphics{ross.eps}}
-\end{figure}
-
-
-\section*{Preface}
-
- This reference manual gives concise descriptions of the modules of
- \Xy-pic, written by the individual authors. Please direct any
- \TeX\-nical question or suggestion for improvement directly to the
- author of the component in question, preferably by electronic mail
- using the indicated address. Complete documents and printed
- technical documentation or software is most useful.
-
- The first part documents the \Xy-pic kernel which is always loaded.
- The remaining parts describe the three kinds of options: "extensions"
- in part~??g[:extensions] extend the kernel graphic capabilities,
- "features" in part~??g[:features] provide special input syntax for
- particular diagram types, and "drivers" in part~??g[:drivers] make it
- possible to exploit the printing capabilities supported by DVI driver
- programs. For each option it is indicated how it should be loaded.
- The appendices contain answers to all the exercises, a summary of the
- compatibility with version~2, and list some reasons why \Xy-pic might
- sometimes halt with a cryptic \TeX\ error.
-
-\paragraph*{License.}
-%
- \Xy-pic is free software in the sense that it is available under the
- following ??w![license]??w[copyright] conditions:
-$$
-\xy*+[F-]\txt{\Xy-pic: Graphs and Diagrams with \TeX\\
- \copyright~1991--1998\quad Kristoffer H. Rose\\
- \copyright~1994--1998\quad Ross Moore\hglue2.75em\hglue1bp}\endxy
-$$
-\begin{quotation}
-%
- The \Xy-pic package is ??w![free software]; you can redistribute it
- and/or modify it under the terms of the ??w![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 ??w![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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-%
-\end{quotation}
-%
- In practice this means that you are free to use \Xy-pic for your
- documents but if you distribute any part of \Xy-pic (including
- modified versions) to someone then you are obliged to ensure that the
- full source text of \Xy-pic is available to them (the full text of
- the license in the file ??c![COPYING] explains this in somewhat more
- detail~\smiley~).
-
-\paragraph*{Notational conventions.}
-%
- We give descriptions of the "syntax" of pictures as \BNF??w[BNF]
- rules; in explanations we will use upper case letters like $X$ and
- $Y$ for <dimen>sions and lower case like $x$ and $y$ for <factor>s.
-
-
-
-\part{The Kernel}
-??g=[kernel]
-\subsubsection*{\noindent\rlap{\small\bf
- Vers. \xyversion\ by Kristoffer H. Rose <krisrose@brics.dk>}}
-\def\GROUP{part}\def\FILE{part}
-\CompilePrefix{xy.doc-}
-\inputdoc!{xy.doc}
-
-
-
-\part{Extensions}
-??g=[extensions]
-\def\GROUP{part}\def\FILE{section}%
-
- This part documents the graphic capabilities added by each standard
- extension option. For each is indicated the described version
- number, the author, and how it is loaded.
-
- Many of these are only fully supported when a suitable "driver"
- option (described in part~??g[:drivers]) is also loaded, however, all
- added constructions are always "accepted" even when not supported.
-
-\OSECTION{xycurve.doc}
-\OSECTION{xyframe.doc}
-\OSECTION{xytips.doc}
-\OSECTION{xyline.doc}
-\OSECTION{xyrotate.doc}
-\OSECTION{xycolor.doc}
-\OSECTION{xytile.doc}
-\OSECTION{xyimport.doc}
-\OSECTION{xymovie.doc}
-\OSECTION{xyps.doc}
-\OSECTION{xytpic.doc}
-\OSECTION{xyemtex.doc}
-\OSECTION{xynecula.doc}
-
-
-
-
-\part{Features}
-??g=[features]
-\def\GROUP{part}\def\FILE{section}%
-
- This part documents the notation added by each standard feature
- option. For each is indicated the described version number, the
- author, and how it is loaded.
-
- The first two, `all' and `dummy', described in~\S\S??g[:all]
- and~??g[:dummy], are trivial features that nevertheless prove useful
- sometimes. The next two, `arrow' and `2cell', described
- in~\S??g[:arrow] and~??g[:2cell], provide special commands for
- objects that `point'. The following, `matrix' in~\S??g[:matrix],
- `graph' in~\S??g[:graph], `poly' in~\S??g[:poly], and `knot'
- in~\S??g[:knot], are "input modes" that support different overall
- structuring of (parts of) \Xy-pictures.
-
-\OSECTION{xyall.doc}
-\OSECTION{xydummy.doc}
-\OSECTION{xyarrow.doc}
-\OSECTION{xy2cell.doc}
-\OSECTION{xymatrix.doc}
-\OSECTION{xygraph.doc}
-\OSECTION{xypoly.doc}
-\OSECTION{xyweb.doc}
-\OSECTION{xyarc.doc}
-\OSECTION{xyknot.doc}
-\OSECTION{xysmart.doc}
-
-
-
-\part{Drivers}
-??g=[drivers]
-\def\GROUP{part}\def\FILE{sub-section}%
-
- This part describes `drivers' that customise the parts of the DVI
- file generated from \Xy-pictures to exploit special capabilities of
- particular DVI driver programs through \TeX\'s |\special| command.
- This makes the DVI files non-portable but is needed for full support
- of some of the \Xy-pic extensions (described in
- part~??g[:extensions]).
-
- Figure~??g[:f-drivers] at the end of this part summarises the
- extensions supported by all drivers.
-
-%Alphabetically...
-\makeatletter
-\def\@listD{\leftmargin1em
- \parsep 4\p@ \@plus2\p@ \@minus\p@
- \topsep 4\p@ \@plus2\p@ \@minus4\p@
- \itemsep\z@ \@plus\p@ }
-\let\@listi\@listD
-\let\PS@orig=\PS
-\def\PS{{\small\PS@orig}}
-\makeatother
-
-\section{Support for Specific Drivers}
-
-\DSECTION{xydvidrv.doc}
-\DSECTION{xydvips.doc}
-\DSECTION{xydvitops.doc}
-\DSECTION{xyoztex.doc}
-\DSECTION{xy17oztex.doc}
-\DSECTION{xytextures.doc}
-\DSECTION{xy16textures.doc}
-\DSECTION{xyxdvi.doc}
-
-\begin{figure*}[bt]
-\begin{center}
-%
-{\makeatletter \global\let\DoXXX=\xydriver@unload@support@@}
-%
-\def\beginXXX{\def\next{\otherbar c\otherbar}%
- \def\doii##1##2{%
- \expandafter\def\expandafter\next\expandafter{\next c\otherbar}}%
- \DoXXX\relax
- \def\1##1{\begin{tabular}{##1}}\expandafter\1\expandafter{\next}}
-%
-\def\ClearXXX{%
- \def\doii##1##2{\expandafter\gdef\csname##1XXX\endcsname{-}}%
- \DoXXX}
-%
-\def\SetXXX#1{%
- \def\doii##1##2{\expandafter\gdef\csname##1XXX\endcsname{+}}%
- \csname xydriver@#1@support@@\endcsname}
-%
-\def\XXXentry#1#2{#1&#2}
-\def\XXXlastentry#1#2{#1\\\hline}
-%
-\def\EchoXXX{\gdef\doii##1##2##3{%
- \ifx##3\relax \expandafter\XXXlastentry \else \expandafter\XXXentry\fi
- {\tt##1}{##3}}}
-%
-\def\PrintXXX{\gdef\doii##1##2##3{%
- \ifx##3\relax \expandafter\XXXlastentry \else \expandafter\XXXentry\fi
- {\csname##1XXX\endcsname}{##3}}}
-%
-\def\Head{\hline \EchoXXX \DRIVERvsEXTENSION &\DoXXX\relax}
-\def\do#1{\expandafter\ifx\csname xydriver@#1@support@@\endcsname\DoXXX
- \expandafter\dontdoRow\else\expandafter\doRow\fi{#1}}
-\def\doRow#1{{\tt#1}\ClearXXX\SetXXX{#1}\PrintXXX&\DoXXX\relax}
-\def\dontdoRow#1{}
-\def\Rows{\csname xydriversloaded@@\endcsname}
-%
-\def\DRIVERvsEXTENSION{\hbox{\kern.1em %
- \lower.25ex\hbox{\tiny<driver>}%
- \kern-.15em$\bigm\backslash$\kern-.11em %
- \raise.5ex\hbox{\tiny<extension>}}}
-%
-\beginXXX
- \Head\relax\Rows
-\end{tabular}
-\end{center}
-\caption{Extension implementation replaced by use of \protect<driver\protect>
- specials.}??g=[f-drivers]
-\end{figure*}
-
-\makeatletter
-\let\do=\eat@ \def\doii#1#2{}
-\let\xyrequire=\eat@
-\makeatother
-
-\medskip\noindent
-The following \TeX\ implementation is also supported,
-but currently uses the \dvips\ driver.
-
-\DSECTION{xycmactex.doc}
-%\DSECTION{xydvipub.doc}
-%\DSECTION{xydviwindo.doc}
-
-Other implementations not specifically mentioned here
-may well work with one of the named <driver>s, though
-perhaps not all features will actually be supported.
-
-\makeatletter
-\let\@listi\@listI
-\let\PS=\PS@orig
-\makeatother
-
-\section{Extra features using \PS\ drivers}
-
- This section acknowledges the support for extra features available
- when using a <driver> that supports use of |\special| commands with
- native \PS. Extra macros are required to take advantage of this;
- these are loaded automatically in conjunction with extensions
- specified using the |\xyoption| command, provided a <driver> which
- supports the extension, as indicated in ??g[:f-drivers], has also been
- specified.
-
- Commands are also provided to turn off/on use of these features.
- Such switches are particularly useful when developing complicated
- diagrams, or when the intended output device does not support \PS;
- e.g. for on-screen display. Alternatively, when attempting to use
- drivers for which no explicit support has been provided, some
- features may work others may not. Please inform the authors of
- \Xy-pic of any successes or failures of such attempts.
-
-\inputdoc!{xyps-ps.doc}
-\inputdoc!{xyps-c.doc}
-\inputdoc!{xyps-f.doc}
-\inputdoc!{xyps-l.doc}
-\inputdoc!{xyps-r.doc}
-\inputdoc!{xyps-t.doc}
-
-\section{Extra features using \TPIC\ drivers}
-
- Similarly a few extensions are supported better when |\special|
- commands in the \TPIC\ format are supported.
-
-\inputdoc!{xytp-f.doc}
-
-
-
-\part*{Appendices}\label{Appendices}
-\addtocontents{toc}{\protect\contentsline
- {part}{Appendices}{\protect\pageref{Appendices}}}%
-
-\appendix
-\def\GROUP{appendices}\def\FILE{appendix}%
-
-\ANSWERS
-
-\OSECTION{xyv2.doc}
-
-\section{Common Errors}
-
- In this appendix we describe some common cases where small mistakes
- in \Xy-pictures result in \TeX\ error messages that may seem cryptic.
-
-\paragraph*{! Box expected.\\*%
- ! A <box> was supposed to be here.}
-
- This message is common when an \Xy-pic <object> is mistyped such that
- \Xy-pic expects but does not find a \TeX\ <box> construction.
-
-\paragraph*{! LaTeX Error: Bad math environment delimiter.\\*%
- ! File ended while scanning use of \texttt{\string\xycompiled}.\\*
- ! Argument of \texttt{\string\codeof@} has an extra \}.}
-
- These errors can happen while reading an incomplete compiled picture
- (such a beast is created when \Xy-pic crashes during compilation due
- to a syntax error or other such problem).
-
-\paragraph*{! Missing \} inserted.}
-
- This happens when |\endxy| was left out.
-
-
-\bigskip\TODO: Also include the more obscure ones\dots
-
-
-
-\ANSWERS
-\BIBLIOGRAPHY
-\INDEX
-
-\end{document}
-
-% $Log: xyrefer.man,v $
-% Revision 3.7 1999/02/16 15:12:50 krisrose
-% Interim release (Y&Y fonts now free).
-%
-% Revision 3.5 1997/05/29 21:02:36 krisrose
-% Fixed "missing breaks"...and tidied up documentation!
-%
-% Revision 3.4 1997/05/18 04:59:43 krisrose
-% Essential bugfixes.
-% Also includes preliminary movie extension...
-%
-% Revision 3.3 1996/12/19 03:31:56 krisrose
-% Maintenance release
-%
-% Revision 3.2 1995/09/19 18:22:27 kris
-% Bug fix 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.14 1995/07/05 22:21:32 kris
-% Buglets...
-%
-% 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.11 1994/07/05 10:37:32 kris
-% Third 3beta release [bug fixes].
-% Experimental graph feature included (for ECCT-94 presentation).
-%
-% Revision 2.10 1994/06/15 12:55:07 kris
-% Second 3beta release: bug fixes.
-%
-% 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:11:01 kris
-% Release 3alpha.
-%
-% NEW for version 2.7.
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-prefix:"\t"
-% fill-column:77
-% paragraph-separate:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% paragraph-start:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyrotate.doc b/Master/texmf-dist/source/generic/xypic/xyrotate.doc
deleted file mode 100644
index 0500208b343..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyrotate.doc
+++ /dev/null
@@ -1,538 +0,0 @@
-%% $Id: xyrotate.doc,v 3.3 1996/12/18 09:40:16 ross Exp $
-%%
-%% Xy-pic ``Rotate and Scale extension'' option.
-%% Copyright (c) 1993-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{rotate}{Rotate and Scale extension}{\stripRCS$Revision: 3.3 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This extension provides the ability to request that any object be displayed
-rotated at any angle as well as scaled in various ways.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-These are effects which are not normally available within \TeX.
-Instead they require a suitable `back-end' option to provide the necessary
-|\special| commands, or extra fonts, together with appropriate
-commands to implement the effects. Thus
-$$
-\xy
- *+\txt<.8\hsize>{Using this extension will have no effect on the output
- unless used with a backend that explicitly supports it.}
- *\frm{-}
-\endxy
-$$
-
-\DOCMODE(
-\xydef@\xyundefinedRotate@#1#2@@{%\egroup %
- \xywarning@{The #1 #2 effect is not implemented with the current driver.}}%
-\DOCMODE)
-
-The extension provides special effects that can be used with any \Xy-pic
-<object> by defining |[|<shape>|]| modifiers.
-The modification is local to the <object> currently being built,
-so will have no effect if this object is never actually used.
-
-The following table lists the modifiers that have so far been
-defined. They come in two types -- either
-a single keyword, or a key-character with the following text treated
-as a single argument.
-%
-\begin{defs}
- |[@]| & align with current direction\cr
- |[@|<direction>|]| & align to <direction>\cr
- |[@!|<number>|]| & rotate <number> degrees\cr
-% |[@=|<word>|]| & make |[|<word>|]| repeat the current transformations\cr
-% |[@*]| & use previous transformations \cr
-\noalign{\smallskip}
- |[*|<number>|]| & scale by <number> \cr
- |[*|<num>$_x$,<num>$_y$|]| & scale $x$ and $y$ separately \cr
-%\noalign{\smallskip}
-% |[<|<direction>|]| & shear y-axis to <direction> \cr
-\noalign{\smallskip}
- |[left]| & rotate anticlockwise by 90$^\circ$ \cr
- |[right]| & rotate (clockwise) by 90$^\circ$ \cr
- |[flip]| & rotate by 180$^\circ$; same as |[*-1,-1]| \cr
- |[dblsize]| & scale to double size \cr
- |[halfsize]| & scale to half size \cr
-\end{defs}
-%
-These |[|<shape>|]| modifiers specify transformations of the <object>
-currently being built. If the object has a rectangle edge then the size of
-the rectangle is transformed to enclose the transformed object; with
-a circle edge the radius is altered appropriately.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\TODO:
-There should be an
- |[@*]| form which repeats the set of transformations applied to the last
-object which has been transformed, possibly in an earlier diagram.
-Also an |[@=|<word>|]| form allowing a set of transformations to be saved
-and used later, simply by specifying |[|<word>|]|.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\medskip
-
-Each successive transformation acts upon the result of all previous. One
-consequence of this is that the order of the shape modifiers can make a
-significant difference in appearance---in general, transformations do not
-commute. Even successive rotations can give different sized rectangles if
-taken in the reverse order.
-
-Sometimes this change of size is not desirable. The following commands are
-provided to modify this behaviour.
-%
-\begin{defs}
- |\NoResizing| & prevents size adjustment \cr
- |\UseResizing| & restores size adjustments \cr
-\end{defs}
-%
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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@
- }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\noindent
-The |\NoResizing| command is also useful to have at the beginning of a
-document being typeset using a driver that cannot support scaling effects,
-in particular when applied to whole diagrams. In any case an unscaled
-version will result, but now the spacing and positioning will be appropriate
-to the unscaled rather than the scaled size.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Interface}
-
-Recognize the <shape> characters and keywords.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Each style modifier adds code to one, or both, of two global lists.
-These contents of these lists, called |\preXYtransform@@|
-and |\postXYtransform@@|.
-An implementation must define macros which are to be bound
-to the control sequence names |\preXYtransform@| and |\postXYtransform@|,
-which are prepended and appended to the |\Drop@@| and |Connect@@| methods
-for the current <object>.
-
-Also |\Drop@@| and |\Connect@@| must be modified, if this has not already
-been done as indicated by |\xy@transform@| having expansion |\relax|.
-
-\DOCMODE(
-\xydef@\preXYtransform@{}
-\xydef@\postXYtransform@{}
-
-\xywarnifdefined\preXYtransform@@
-\xywarnifdefined\postXYtransform@@
- \gdef\preXYtransform@@{}
- \gdef\postXYtransform@@{}
-\xydef@\xy@transform@{}
-\xydef@\preShape@@{}
-\xydef@\postShape@@{}
-\DOCMODE)
-
-The transformations must be implemented by emulating the adjoint coordinate
-transformations. This requires that code be added to |preXYtransform@@|
-in reverse order to the order of occurrence of the <shape> modifiers.
-The code is added to |\postXYtransform@@| in natural order, so that each
-addition to |\preXYtransform@@| can be closed off, if necessary,
-in a correctly nested sequence.
-
-\DOCMODE(
-\xydef@\modXYtransform@{%
- \ifx\xy@transform@\empty
- \transformDrop@\transformConnect@\resetTransform@\fi
-%\show\preShape@@
- \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@@{}}
-\DOCMODE)
-
-\BUG: The reference point does not move correctly in \PS\ when a shift
-modifier has been applied before a rotation. The object prints outside
-of its bounding |\rectangleEdge|. Fix this!!
-
-Global macros are used, so that the same styles can be reused by
-successive objects without having to re-interpret <shape> modifiers,
-as described next.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Saving transformations}
-
-Once specified for an <object>, the collection of transformations can be
-assigned a name, via |[>|<name>|]|.
-The <name> here is any collection of letters
-or other characters up to the closing |]|.
-Subsequent use of |[>|<name>|]|, with the same or other <objects>s,
-will re-establish the saved transformations, acting on the new <object>
-with initial reference point appropriate to this <object>.
-
-\NOTE: Such namings are global and permanent.
-They are intended to allow a particular set of transformations to be
-easily repeated for different objects inside various pictures and diagrams
-within the same document.
-
-\DOCMODE(
-\xydef@\xynametransform@#1{%
- \DN@{\expandafter\gdef\expandafter#1\expandafter{\the\toks@}}\next@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Scaling and Scaled Text}
-
-The <shape> modifier can contain either a single scale factor, or a pair
-indicating different factors in the $x$- and $y$-directions.
-Negative values are allowed, to obtain reflections in the
-coordinate axes, but not zero.
-
-\DOCMODE(
-\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@}}%
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Some particular scalings.
-
-\DOCMODE(
-\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)}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Rotation and Rotated Text}
-
-Within |[@...]| the |...| are parsed as a <direction> locally, based on the
-current direction. The value of count register |\Direction| contains the
-information to determine the requested direction.
-When no <direction> is parsed then |[@]| requests a rotation to align with
-the current direction.
-
-The special sequence |[@!...]| is provided to pass an angle directly to
-the back-end. The \Xy-pic size and shape of the <object> with |\rectangleEdge|
-is unchanged, even though the printed form may appear rotated.
-This is a feature that must be implemented specially by the back-end.
-For example, using the \PS\ back-end, |[@!45]| will show the object rotated
-by 45$^\circ$ inside a box of the size of the unrotated object.
-
-\DOCMODE(
-\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@@{%\transformDrop@
- \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@@}
-\DOCMODE)
-
-\TODO: Provide example of repeated, named transformation.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Installation}
-
-Initially there is no support for the actual effects.
-They will be processed according to size/shape requirements,
-but the actual rotation or re-sizing is ommitted.
-A <driver> file is required to implement the effects.
-It need to define alternative expansions to which
-|\xyRotate@@#1|, |\xySpecialRotate@@#1@@|, |\doSpecialRotate@@#1@@|
-and |\xyscale@@#1#2| can be bound.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This adjusts the sizes of |\L@c|, |\R@c|, |\U@c| and |\D@c| appropriately.
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-Some particular rotations.
-
-\DOCMODE(
-\xydef@\xyshape@left@{\xyrotatechar@ v(0,1)@@}
-\xydef@\xyshape@right@{\xyrotatechar@ v(0,-1)@@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Reflections}
-
-Reflections can be specified by a combination of rotation and a flip ---
-either |[hflip]| or |[vflip]|.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Shear transformations}
-
-\DOCMODE(
-\xydef@\xyshearchar@{\xyundefinedRotate@{shearing}}
-\DOCMODE)
-
-\TODO: Provide the structure to support these; then implement it in \PS.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-The following diagram requires various options to be loaded and installed.
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\xyrequire{rotate}\xyrequire{color}\xyrequire{crayon}\xyrequire{line}%
-\xyuncatcodes
-
-\paragraph*{Example}
-
-The diagram in figure~??[rotate and flips] illustrates many of the effects
-described above as well as some additional ones defined by the |color| and
-|rotate| extensions.
-
-\begin{figure*}[t]
-\begin{code}
-\UseCrayolaColors
-\xy\drop[*1.25]\xybox{\POS
-(0,0)*{A};(100,40)*{B}**{}
- ?<<*[@_][red][o]=<5pt>{\heartsuit};
- ?>>>*[@_][Plum][o]=<3pt>{\clubsuit}
- **[|*][|.5pt][thicker]\dir{-},
-?(.1)*[left]!RD\txt{label 1}*[red]\frm{.}
-?(.2)*[!gsave newpath
- xyXpos xyYpos moveto 50 dup rlineto
- 20 setlinewidth 0 0 1 setrgbcolor stroke
- grestore][psxy]{.},
-?(.2)*[@]\txt{label 2}*[red]\frm{.},
-?(.2)*[BurntOrange]{*},
-?(.3)*[halfsize]\txt{label 3}*[red]\frm{.}
-?(.375)*[flip]\txt{label 4}*[red]\frm{.}
-?(.5)*[dblsize]\txt{label 5}*[red]\frm{.}
-?(.5)*[WildStrawberry]{*},
-?(.7)*[hflip]\txt{label 6}*[red]\frm{.}
-?(.8)*[vflip]\txt{label 7}*[red]\frm{.}
-?(.9)*[right]!LD\txt{label 8}*[red]\frm{.}
-?(.5)*[@][*.66667]!/^30pt/
- \txt{special effect: aligned text}
- *[red]\frm{.}
-}\endxy
-\end{code}
-$$\docode$$
-\caption{Rotations, scalings and flips}
-??=[rotate and flips]
-\end{figure*}
-
-\begin{exercise}
-Suggest the code used by the author to typeset ??[rotate and flips].
-\answercode
-\answertext{This is how the author specified the diagram:}
-\answertext\displaycode
-\end{exercise}
-
-The actual code is given in the solution to the exercise.
-Use it as a test of the capabilities of your DVI-driver.
-The labels should fit snugly inside the accompanying rectangles,
-rotated and flipped appropriately.
-
-\BUG: This figure also uses colours, alters line-thickness and includes
-some \PS\ drawing.
-The colours may print as shades of gray,
-with the line from $A$ to $B$ being thicker than normal.
-The wider band sloping downwards may have different width and length
-according to the DVI-driver used; this depends on the coordinate system
-used by the driver, when `raw' \PS\ code is included.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xyrotate.doc,v $
-% Revision 3.3 1996/12/18 09:40:16 ross
-% no changes
-%
-% Revision 3.2 1995/09/19 18:21:41 ross
-% Bug fix release.
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% Revision 2.12 1994/10/25 03:01:14 ross
-% Final 3beta release [bug fixes & AMS-LaTeX fitting].
-%
-% Revision 2.11 1994/07/05 06:38:37 ross
-% some documentation was left out previously
-%
-% Revision 2.10 1994/06/15 12:46:03 ross
-% Second release 3beta.
-% Colour and line style saving works; label colouring bug fixed.
-%
-% Revision 2.9 1994/06/09 14:39:49 ross
-% Release 3beta.
-%
-% NEW file to go in version 2.9 by Ross Moore.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xysmart.doc b/Master/texmf-dist/source/generic/xypic/xysmart.doc
deleted file mode 100644
index 2c1cfb82077..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xysmart.doc
+++ /dev/null
@@ -1,569 +0,0 @@
-%% $Id$
-%%
-%% Xy-pic ``Smart Path feature'' option.
-%% Copyright (c) 1998 George C. Necula <necula@cs.cmu.edu>
-%%
-%% 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 <krisrose@ens-lyon.fr>
-%%
-%% 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, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{smartpath}{Smart Path option}{\stripRCS$Revision: 0.0 $}%
- {George C. Necula}{necula@cs.cmu.edu}%
- {School of Computer Science,
- Carnegie Mellon University,
- 5000 Forbes Avenue,
- Pittsburgh, PA 15213-3891, USA}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This extends the `arrow' feature, which is therefore required, with a
- ``smart'' <path> between two <pos>itions.
-
-\DOCMODE(
-\xyrequire{arrow}\xycatcodes
-\DOCMODE)
-
- The <turn> syntax is extended with the construction
-%
-\begin{defs1}
-%
- ??w![<turn>] \iss ??c![`s] <diag> |_| <diag> <turnradius>
-%
-\end{defs1}
-\noindent\unskip
-%
- ??c![\ar]"in"|_|"out"|/5pt| which draws a connector leaving $p$ in the
- "in" <diag>onal direction and arrives at $c$ in the "out" <diag>onal
- direction, using |5pt| turns. The connector contains only horizontal
- or vertical lines and $\frac18$ sectors of circles of the given
- (optional) <turnradius>.
-
- \BUG: Any labels are placed at the end of the connection.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-% The smart connection algorithm is as follows:
-%
-% A smart connector consists only of horizontal and vertical straight
-% segments connected with 1/4 circles. 1/8 circles might be use at the start
-% and end of the connector to reach a horizontal or a vertical.
-%
-% All possible connectors can be reduced to a series of equivalence classes,
-% where two connectors are considered equivalent if they are identical after
-% removing from each of them all the horizontal and vertical straight
-% segments. Such a connector is called a representative.
-%
-% The algorithm first computes 10 representatives that start and end in the
-% given directions and have at most one point where the orientation is
-% changed. 5 of the representatives start counter-clockwise and the other
-% 5 start clockwise. Among the counter-clockwise representatives, 1 does not
-% have any change in orientation (one arc of circle starting and ending in the
-% given directions). The other 4 are obtained by changing the orientation in
-% the four points where the circle is tangent to a horizontal or a vertical.
-%
-% For each representative the algorithm determines if it can be extended with
-% horizontal and vertical segments to reach the destination point when
-% starting in the source point (the directions are already right by
-% construction). For example, horizontal straight lines could be inserted
-% in all the points where the representative is tangent to a horizontal line.
-% In each such point a straight line segment can be inserted to extend the
-% connector horizontally but only in the same direction of the connector at
-% that point (the direction of the connetor in a point is towards the
-% destination). For example, if the horizontal distance between the source and
-% destination points is Dx and the horizontal distance between the start and
-% the end of the representative connector is dx then the distance ``Dx - dx''
-% must be covered using horizontal straight lines. This distance is
-% distributed equally among all the horizontal extension points of the right
-% direction. If no such points exist, then the representative is discarded.
-% The cost of a connector is the length of the representative plus the total
-% length of straight extension segments, i.e., |Dx-dx| + |Dy-dy|.
-%
-% The algorithm selects among all the representatives that are not discarded,
-% the one leading to the shortest connection.
-
-
-% Change the PATHturn@ to recognize `s as a smart PATH.
-\let\origPATHturn@=\PATHturn@
-\def\PATHturn@{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHturn@}%gobble spaces
- \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@}% Let the original routines do the parsing
- \else
- \DN@{\origPATHturn@}%
- \fi\fi
- \next@}
-
-
-% Changed PATHturn@cir to allow half or full turns
-\xydef@\PATHsmartturn@cir{%
- \edef\next@{{\CIRin@@}{\expandafter\noexpand\CIRorient@@}{\CIRout@@}}%
- \expandafter\PATHturn@i\next@}
-
-
-% This is the changed function for placing the turn
-\xydef@\PATHsmartturn@i#1#2#3{%
- \DN@##1{%
- \def\PATHinit@@{%
- \xy@@{%
- \def\sm@CIRin{#1}\def\sm@CIRout{#3}% The IN and OUT directions. Ignore
- % the orientation
- \ifx\sm@CIRout\empty %Only on direction is given. Use it as OUT and
- %use the previous direction as IN
- \let\sm@CIRout=\sm@CIRin
- \let\sm@CIRin=\PATHlastout@@
- \fi
- ##1\relax}%
- \xy@@{\enter@{\basefromthebase@}}%
- \xy@@{\sm@conn}% Draw the connection
- \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
- % touch the edge
- \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}% Store the last direction
- \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}% A very long connector
-
-% This computes and draws the connection
-\xydef@\sm@conn{
-% \xy@showthe p{Source}\xy@showthe c{Dest}%
-% \W@{Computing connector from p in \sm@CIRin\space to c in \sm@CIRout
-% .Radius is \turnradius@}%
- %Adjust the end points to the edge of the objects in the given directions
- \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@
- % Now leave room for one dash to start with (for placing arrow tails)
- \count@=\sm@CIRin\count@=\the\count@
- \dimen@=\xydashl@ \ABfromdiag@
- % Drop the arrow tail in the right place
- \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@
- % Draw a straight connection from p to c
- \sm@stri
- % Set p to the end of the connection
- \X@p=\X@c \Y@p=\Y@c
- \leave@
-% \xy@showthe p{After adjust}%
- \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@ % The final segment will be drawn by PATH@segment
- % Clear the tail setting for the last segment
- \def\PATHlabelsnext@@{}%
- \leave@
-% \xy@showthe c{After adjust}%
- % Set the turn radius
- \R@=\turnradius@
- \cirrestrict@@%Adjust the radius to fit the circles
- % Initialize variables
- \let\sm@circles=\sm@nil
- \edef\sm@bestcost{\sm@maxcost}% Best so far is very bad
- \sm@trycircles 1%Try counter clockwise first
- \sm@trycircles{-1}%Try clockwise after
-%
-% Now check the best
-%
- \ifdim\sm@bestcost<\sm@maxcost
-% \W@{}\W@{Best: \meaning\sm@bestconn}%
- \cfromp@
-% \xy@showthe p{Source}%
- \expandafter\sm@conndraw\sm@bestconn
- \else
- \xyerror@{Cannot draw the smart connector}{}%
- \fi
-}
-
-% Compute and examine 5 representatives, for the orientation given
-% as #1 (1 for counter-clockwise and -1 for clockwise).
-\xydef@\sm@trycircles#1{%
- \ifnum #1>0% Compute the opposite orientation
- \def\sm@CIRorienti{-1}%
- \else
- \def\sm@CIRorienti{1}%
- \fi
- % Generate lists of triples (IN,ORIENT,OUT) so that OUT_1=IN_2 and
- % IN=IN_1 and OUT=OUT_2, and such that ORIENT_1=#1m ORIENT_2=-ORIENT_1
- % Then try each list in turn.
- %Try one circle first (a singleton list)
- \edef\tmp@{{{\sm@CIRin}{#1}{\sm@CIRout}}}%
- \expandafter\sm@trycirclelist\expandafter{\tmp@\sm@nil}%
- %Now try lists of two circles.
- %Advance "in" so that it is a multiple of 90 degrees (that is, odd)
- \count@@=\sm@CIRin\count@@=\the\count@@\count@=\count@@
- \sm@roundcount@{#1}%
- \edef\sm@savecount@{\the\count@}%
- % See if we need to add a 1/8 starting circle
- \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@}% Advance 90 deg.
- \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@}% Advance 90 deg.
- \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@}% Advance 90 deg.
- \edef\tmp@{{{\sm@CIRin}{#1}{\the\count@}}%
- {{\the\count@}{\sm@CIRorienti}{\sm@CIRout}}}%
- \expandafter\sm@trycirclelist\expandafter{\tmp@\sm@nil}%
-}
-
-% Advance the direction in \count@ by #1 (each unit is 45deg) in the
-% dirction #2, taking care of wrap-around
-\xydef@\sm@advancecount@#1#2{%
-% \W@{Advancing count from \the\count@\space by #1\space
-% in \xy@showorient #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@
-% \W@{ Resulting count@=\the\count@}%
-}
-
-% Round counter to the next odd element (multiple of 90deg)
-% in the given direction
-\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
-
-% Given a representative described as a list of triplets ending with sm@nil,
-% verify if is can be extended to the right destination
-\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}% Clear the extension points
- \def\sm@dxp{0pt}\def\sm@dxm{0pt}%
- \def\sm@dyp{0pt}\def\sm@dym{0pt}% Reset the extensions
- \def\sm@segs{}% % Clear the segment list
- \sm@firstsegtrue % Mark the first segment
- \def\sm@connlen{0pt}% % Initialize the connector length
- \let\sm@tryclcont=\sm@trycirclelist@i
- \sm@trycirclelist@i #1%Strip {} to expose the list elements
-%
-% The connector was processed
-%
-% Add an extra segment at then end, if ending in a multiple of 90 deg
- \count@@=\sm@CIRout\count@@=\the\count@\count@=\the\count@
- \sm@roundcount@{1}% Direction does not matter
- \ifnum\count@=\count@@
- \edef\sm@segs{\sm@segs{{\the\count@}{1}{\the\count@}}}%Accum segment
- \fi
-% \W@{After trying CL deltax=\the\R@p, deltay=\the\U@p}%
-% \sm@showext{\space}%
-% \W@{ \space Segs: \meaning\sm@segs}%
- %Now see if the connector can be extended enough
- \A@=\X@p\advance\A@\R@p\advance\A@ -\X@c\A@=-\A@ % A=Dx
- \B@=\Y@p\advance\B@\U@p\advance\B@ -\Y@c\B@=-\B@ % B=Dy
- \sm@acceptabletrue
-% \W@{ \space Dx=\the\A@, Dy=\the\B@}%
- \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
- %Compute the cost of the connector
- \dimen@=\sm@connlen\advance\dimen@\A@\advance\dimen@\B@
-% \W@{ \space Cost is \the\dimen@}%
- %See if it is best so far
- \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}}
-
-% Process the next element in the list that describes the representative
-%
-\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{%
-% \W@{Trying one turn in #1\space orient #2\space out #3}%
- %Compute deltax in R@p and deltay in U@p. Move them to center first.
- \dimen@=\ifnum #2<0 -\fi\R@
- \count@=#1\count@=\the\count@ \ABfromdiag@
- \advance\R@p -\B@ \advance\U@p \A@
-% \xy@showdim{ After center}%
- % Move them to exit
- \count@=#3\count@=\the\count@ \ABfromdiag@
- \advance\R@p \B@ \advance\U@p -\A@
-% \xy@showdim{ After turn}%
-% \xy@showthe p{ }%
- % Now update the extension points
- \sm@computeext{#1}{#2}{#3}%
-}
-
-%
-% Compute the extensions
-%
-\xydef@\sm@computeext#1#2#3{%
-% \W@{Computing extents for turn in #1\space orient #2\space out #3}%
- \ifsm@firstseg
- \sm@accumext#1%
- \sm@firstsegfalse
- \fi
- \count@@=#1\count@@=\the\count@@\count@=\count@@
- \dimen@=\sm@connlen
-% \W@{Before rounding count@=\the\count@, count@@=\the\count@@}%
- \sm@roundcount@{#2}%
-% \W@{After rounding count@=\the\count@, count@@=\the\count@@}%
- \ifnum \count@=\count@@
- \sm@advancecount@ 1{#2}% Advance by 90 degrees if odd. By 45 first
- \advance\dimen@ 0.7854\R@% It was incremented with 1/8 circle
- \ifnum \count@=#3% Check if done
- \else
- \sm@advancecount@ 1{#2}% Another 45
- \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@}% Save the connector length
- \sm@accumext{\the\count@}%
- \edef\sm@segs{\sm@segs{{#1}{#2}{\the\count@}}}%Accum segment
- \ifnum\the\count@=#3 \else
- \edef\tmp@{{\the\count@}{#2}{#3}}%Recursive call
- \expandafter\sm@computeext\tmp@
- \fi
-}
-
-%
-% Accumulate the extensions
-%
-\xydef@\sm@accumext#1{%
-% \W@{Accumulating extent for #1}%
-% \sm@showext{Before accum:}%
- \ifcase #1%
- \or \count@@=\sm@extvm\advance\count@@ by1%
- \edef\sm@extvm{\the\count@@}% 1 is V-
- \or\or \count@@=\sm@exthp\advance\count@@ by1%
- \edef\sm@exthp{\the\count@@}% 3 is H+
- \or\or \count@@=\sm@extvp\advance\count@@ by1%
- \edef\sm@extvp{\the\count@@}% 5 is V+
- \or\or \count@@=\sm@exthm\advance\count@@ by1%
- \edef\sm@exthm{\the\count@@}% 7 in H-
- \fi
-% \sm@showext{After accum:}%
-}
-
-
-% Draw a computed connector.
-% 1,2,3,4 - dx+, dx-, dv+, dv- (lengths of straight connectors in each
-% direction)
-% 5 - a list of segments, each enclosed in a pair of braces.
-\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}%Save deltas
- \sm@drawseglist #5\sm@nil}
-\xydef@\sm@drawseglist#1{% Get the first segment
- \ifx #1\sm@nil \def\sm@contlist{}\else
- \sm@drawseg #1\fi
- \sm@contlist}
-
-%
-% Draw a segment
-%
-\xydef@\sm@drawseg#1#2#3{% A segment is CIRin+CIRorient+CIRout
-% \W@{Drawing segment in=#1\space out=\space #3}\xy@showthe c{Seg start}%
- \def\CIRin@@{#1}\def\CIRout@@{#3}%
- \sm@straight%See if a straight line is needed here. Insert it and
- %reset c if needed
- \ifnum\CIRin@@=\CIRout@@ \else
- % Compute the center of the circle
- \count@=\CIRin@@
- \dimen@=\ifnum #2<0 -\fi\R@
- \ABfromdiag@
- \advance\X@c -\B@ \advance\Y@c \A@
-% \xy@showthe c{Center of circle}%
-% \xy@showdim{Before center}%
- \ifnum #2>0 \def\CIRorient@@{\CIRacw@}%
- \else \def\CIRorient@@{\CIRcw@}\fi
- \drop@\literal@{\hbox\bgroup\cir@i}% Place the circle
- % Now move the the end of the arc
- \dimen@=\ifnum #2<0 -\fi\R@
- \count@=\CIRout@@\count@=\count@%Wierd. If I remove this last assignm
-% %\count@ is not set
- \ABfromdiag@
-% \xy@showthe c{Before advance}%
-% \xy@showdim{Before advance}%
- \advance\X@c\B@ \advance\Y@c-\A@
-% \xy@showthe c{After circle}%
-% \xy@showdim{After circle}%
- \fi
-}
-
-\xydef@\sm@straight{%
- \U@c=\z@\D@c=\U@c\L@c=\U@c\R@c=\U@c
- \pfromc@ %Set p at the beginning of the segment
- \ifcase \CIRin@@ \or% 1 is V-
- \A@=\sm@dym\advance \Y@c\A@ %Wierd. I have to use the temporary A@!!
- \or\or % 3 is H+
- \A@=\sm@dxp\advance \X@c\A@
- \or\or % 5 is V+
- \A@=\sm@dyp\advance \Y@c\A@
- \or\or % 7 is H-
- \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{%
-% \W@{Drawing straight connection}\xy@showthe p{StrSrc}\xy@showthec{StrDst}%
- \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@}
-
-% Compute and draw a connector. External interface
-% 1 - in (for p)
-% 2 - out (for c)
-% 3 - suggested radius
-\xydef@\smconn#1#2#3{%
- \edef\sm@CIRin{#1}\edef\sm@CIRout{#2}%Memorize the directions
- \R@=#3\R@=\the\R@
- \sm@conn}
-
-\xyendinput
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Here is an example illustrating a smart <path> (as well as the
-% extensions of the `necula' extension of \S??[:necula]).
-%%
-%\xyuncatcodes\xyrequire{necula}\xycatcodes
-%\begin{code}
-%\def\triangle{[P:DL+/d1pc/,RC+/r1pc/,UL+/u1pc/]}%
-%\def\diamond{[P:DL,DR,RC+/r1pc/,UR,UL,LC+/l1pc/]}
-%\xy
-%\xytracing\POS
-% 0 *+<5mm>e|\triangle|[F-]\txt{Test}="one" ,
-% <2cm,1cm> *+<5mm>e|\diamond|[F.]\txt{Test}="two"
-% \ar @{>->} `sdr_d/30pt "one"
-%\endxy
-%\end{code}
-%\displaycode\noindent
-%%
-% will typeset
-%%
-%$$\docode$$
-
- \BUG: This code should probably be merged with the `arrow' feature.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Finally the log.
-
-\DOCMODE(
-% $Log$
-% Received from George.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-prefix:"\t"
-% fill-column:77
-% paragraph-separate:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% paragraph-start:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xytex.ini b/Master/texmf-dist/source/generic/xypic/xytex.ini
deleted file mode 100644
index 48e45e20d2f..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xytex.ini
+++ /dev/null
@@ -1,60 +0,0 @@
-%% $Id: xytex.ini,v 3.3 1996/12/19 03:31:56 krisrose Exp $ -*-latex-*-
-%%
-%% Generate plain + Xy-pic format file.
-%% Copyright (c) 1993-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-
-% Load plain.tex
-%
-\input plain.tex
-
-% (Any other format parts should be loaded here before Xy-pic).
-
-% Load Xy-pic kernel:
-%
-\input xy
-
-% Extensions and features: You can replace this line with selective loading
-% of particular options if you like.
-%
-\xyoption{all}
-
-% Now dump the format file.
-%
-\dump
-\endinput
-
-% $Log: xytex.ini,v $
-% 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.14 1995/07/06 02:56:02 kris
-% Buglets...
-%
-% Revision 2.13 1995/07/04 15:11:17 kris
-% Ready to release v3?
-%
-% Revision 2.10 1994/06/15 12:55:07 kris
-% Second 3beta release: bug fixes.
-%
-% NEW file to go in version 2.10!
diff --git a/Master/texmf-dist/source/generic/xypic/xytextures.doc b/Master/texmf-dist/source/generic/xypic/xytextures.doc
deleted file mode 100644
index 3b6be2c6b40..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xytextures.doc
+++ /dev/null
@@ -1,291 +0,0 @@
-%% $Id: xytextures.doc,v 3.3 1996/12/18 09:41:45 ross Exp $
-%%
-%% Xy-pic ``Textures'' driver interface option.
-%% Copyright (c) 1995-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{textures}{Textures driver}{\stripRCS$Revision: 3.3 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This driver provides support for version 1.7+ of Blue Sky Research's
-\Textures\ application for Macintosh\footnote{Macintosh is a trademark of
-Apple Computer Inc.}. It incorporates support for colour and all of
-\Xy-pic's \PS\ effects. Earlier versions of \Textures\ should instead use
-the driver option |\xyoption{16textures}|.
-
-Notice that version 1.7 suffers from a printing bug which may cause a \PS\
-error. A fix is kludged by making sure the first page has been shown in the
-viewer before any pages with diagrams are sent to the printer.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\DOCMODE(
-\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
-}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Supported |\special| effects are...
-%
-\begin{itemize}
-
-\item colour, both on-screen and with \PS\
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Textures uses the colour-stack method, but it requires a separate
-|\special| to set the new colour after having pushed the previous colour
-onto the stack.
-
-\DOCMODE(
-\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@
- }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item crayon colours.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The 68 colours are those that |dvips| recognizes by name,
-thanks to Tomas Rokicki.
-
-\DOCMODE(
-\xydef@\texturesCrayon@@{\texturesColor@@\texturesCrayon@}
-\xydef@\texturesCrayon@{\installCrayolaColors@}%
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item \PS\ back-end.
-
-\DOCMODE(
-\xydef@\texturesPS@@{\texturesPS@}
-\xydef@\texturesPSunload@{\UnloadPS@
- \let\UnloadPS@@=\UnloadPS@
- \let\texturesPS@@=\texturesPS@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Versions 1.7 and later of \Textures\ have the following kinds of |\special|,
-the first two executing in the environment defined by the dictionary
-|userdict|. In particular these versions of \Textures\ now allow the
-\PS\ dictionary to be loaded into the main working dictionary.
-
-\begin{itemize}
-\item |\special{rawpostscript #1}| puts code directly into the \PS\ file.
-\item |\special{postscript #1}| wraps the code within |sps|...|eps|,
-which involves a basis change within a |save/restore| pair.
-\item |\special{prePostScript #1}| places the \PS\ code within the header
-dictionary, called |TeXdict|.
-\end{itemize}
-Each of these has a corresponding version for reading the \PS\ commands
-from a file.
-
-\DOCMODE(
-\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
-\DOCMODE)
-
-The |currentpoint| is defined for the ``raw'' specials.
-For Textures this is the same as |\xyPScurrpt@@@|, in |xyps-ps.doc|.
-
-\DOCMODE(
-\xydef@\texturesCurrpt@{\let\xyPScurrpt@@=\texturesCurrpt@@}%
-\xydef@\texturesCurrpt@@{\PSspecial@@{xyi}\PSraw@@{userdict begin xyx end}}
-
-%\xydef@\texturesCurrpt@@{\PSspecial@@{%
-% 0 0 transform grestore gsave itransform }%
-% \PSraw@@{userdict begin /xyYpos exch def /xyXpos exch def end}}
-\DOCMODE)
-
-The \PS\ operator called |xyx| is defined in |xyps-ps| for storing the
-location placed on the stack by |xyi|.
-
-\medskip
-
-This installs the \PS\ backend.
-
-\DOCMODE(
-\xydef@\texturesPS@{\texturesPStypes@
- \let\texturesPS@@=\relax
- \let\UnloadPS@@=\texturesPSunload@
- \let\installxyps@@=\relax \installxyps@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item rotated/scaled diagrams and text, using \PS.
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item variable line-widths and poly-lines, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item extra frames and fills, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item patterns and tiles, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{itemize}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xytextures.doc,v $
-% Revision 3.3 1996/12/18 09:41:45 ross
-% minor improvements to file-loading commands
-%
-% Revision 3.2 1995/09/19 18:21:41 ross
-% Bug fix release.
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% NEW for version 3.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xytile.doc b/Master/texmf-dist/source/generic/xypic/xytile.doc
deleted file mode 100644
index c1509987bbb..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xytile.doc
+++ /dev/null
@@ -1,472 +0,0 @@
-%% $Id: xytile.doc,v 3.4 1997/05/18 01:13:24 ross Exp $
-%%
-%% Xy-pic ``Pattern and Tile extension'' option.
-%% Copyright (c) 1993-1997 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{tile}{Pattern and Tile extension}{\stripRCS$Revision: 3.4 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This extension provides the ability to request that a filled region be
-tiled using a particular pattern.
-
-This is an effect not normally available within \TeX.
-Instead it requires a suitable <driver> option to provide the necessary
-|\special| commands, together with any extra commands needed to implement
-the effects. Thus
-$$
-\xy
- *+\txt<.8\hsize>{Using this extension will have no effect on the output
- unless used with a dvi-driver that explicitly supports it.}
- *\frm{-}
-\endxy
-$$
-All effects defined in the |tile| extension can be implemented using most
-\PS\ <driver>s, loaded as |\xyoption{|<driver>|}|.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-Like using color, tiling with patterns is an instance of a special style,
-since use of a pattern has no effect on the size or shape of the <object>
-being typeset. It only affects how the <object> will appear on the printed
-page or on-screen.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\LoadAllPatterns{xymacpat}
-\def\MacPatterns{\begin{figure*}[ht]
-$$
-%
- \newcount\R \newcount\C
- \def\n{\advance\R1 \C0 \POS(\R,\C)}
- \def\F##1{\advance\C1 %
- \POS(\R,\C)*+\txt\small{\phantom{filled}\\{\phantom{pattern}}}*[thicker]\frm{-},*[##1]\frm{**},
- +D*+!U\txt\small{##1}}
-%
-\R-1 \C0 \xy
- 0;<0cm,-1.5cm>:<1.5cm,0cm>:: \relax
-% \n,{\C1\POS(\R,\C)}
- \n\F{mac01}\F{mac02}\F{mac03}\F{mac04}\F{mac05}\F{mac06}\F{mac07}\F{mac08}
- \n\F{mac09}\F{mac10}\F{mac11}\F{mac12}\F{mac13}\F{mac14}\F{mac15}\F{mac16}
- \n\F{mac17}\F{mac18}\F{mac19}\F{mac20}\F{mac21}\F{mac22}\F{mac23}\F{mac24}
- \n\F{mac25}\F{mac26}\F{mac27}\F{mac28}\F{mac29}\F{mac30}\F{mac31}\F{mac32}
- \n\F{mac33}\F{mac34}\F{mac35}\F{mac36}\F{mac37}\F{mac38}
-%
-\endxy
-$$
-\caption{The 38 standard Macintosh patterns.}
-??=[f.macpats]
-\end{figure*}\let\MacPatterns=\relax}
-\MacPatterns
-
-\paragraph*{Patterns}
-Patterns are specified as a <shape> modifier, similar to the way colours
-are specified by name.
-The pattern is applied to the whole of the current <object> whether this be
-text, an \Xy-pic line, curve or arrow-tip, or a composite object such as
-a matrix or the complete picture. However some DVI-drivers may not support
-use of patterns in all cases.
-
-If the current DVI-driver cannot support patterns then a request for one
-simply produces a warning message in the log file. After two such
-messages subsequent requests are ignored completely.
-%
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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.}}%
-\DOCMODE)
-
-This allows new patterns to be specified from raw data.
-Make sure the usual catcodes are in place before the data is tokenised.
-
-\DOCMODE(
-\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}{}}
-\DOCMODE)
-
-Existing pattern names can be overridden using |\newxypattern@#1#2\relax|.
-
-\DOCMODE(
-\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 }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-\begin{defs}
-|[|<name>|]| & use named pattern \hfill \cr
-\noalign{\smallskip}
-\multispan2{??c![\newxypattern]|{|<name>|}{|<data>|}|}\cr
-&\omit specify new pattern using <data>\hfil\cr
-\noalign{\smallskip}
-\multispan2{|\UsePatternFile{|<file>|}|}\cr
-&\omit sets default file for patterns\hfil \cr
-\noalign{\smallskip}
-\multispan2{|\LoadAllPatterns{|<file>|}|}\cr
-&\omit load all patterns in <file>\hfil \cr
-\noalign{\smallskip}
-\multispan2{|\LoadPattern{|<name>|}{|<file>|}|}\cr
-&\omit load named pattern from <file> \hfil\cr
-\noalign{\smallskip}
-\multispan2{|\AliasPattern{|<alias>|}{|<name>|}{|<file>|}|}\cr
-&\omit let <alias> denote pattern from <file>.\hfil
-\end{defs}
-%
-Although pattern data may be specified directly using |\newxypattern|, it is
-more usual to load it from a <file> in which many patterns are defined by
-name, each on a separate line. By convention such files always end in |.xyp|
-(\Xy-pattern) so no extension should be specified. The pattern is then
-requested using either the name supplied in the file or by an alias. Once
-|\UsePatternFile| has been used, then a null <file> argument to the other
-commands will still find patterns in the default file. The default remains in
-effect for the current level of \TeX\ grouping.
-
-For example, the following picture
-\begin{code}
-\AliasPattern{bricks}{mac12}{xymacpat}
-\AliasPattern{bars}{mac08}{xymacpat}
-\xy *+<5pc,3.1pc>{},{*[bricks]\frm{**}}
- ,*+<2.5pc>[o]{},*[bars]\frm{**}
-\endxy
-\end{code}
-$$\docode$$
-uses `filled' frames from the |frame| feature:
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-There are two methods, perhaps used simultaneously, for handling requests
-for a pattern. The |\xylocalpattern@| is the normal method, patterning
-whatever objects \TeX\ typesets from fonts or rules.
-The more specialized |\xypattern@| is used with a \PS\ <driver>.
-
-Thus a <driver> which supports both pattern and \PS\ must define a method to
-handle |\xylocalpattern@| but should leave alone |\xypattern@|. The latter
-method will be adjusted appropriately when a \PS\ <driver> is installed.
-
-\DOCMODE(
-\xydef@\xyNopattern@#1{}
-\xylet@\xypattern@@=\xyNopattern@
-\xydef@\xyNopattern@@#1#2{\xypatternwarning@}
-
-\xylet@\xypattern@=\xypattern@@
-\xylet@\xylocalpattern@=\xyNopattern@@
-\DOCMODE)
-
-This is to facilitate unloading patterns when the <driver> is changed
-to one that does not support this feature. This is the default state,
-until an appropriate <driver> is loaded.
-
-\DOCMODE(
-\xydef@\Unloadpattern@{%
- \let\xylocalpattern@=\xyNopattern@@
- \let\xypattern@=\xyNopattern@
- \let\xypatternwarning@=\xypatternwarning@@ }
-
-\Unloadpattern@
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Pattern data}
-A region is tiled using copies of a single `cell' regularly placed so as to
-seamlessly tile the entire region. The <data> appearing as an argument to
-|\newxypattern| is ultimately passed to the dvi-driver.
-
-The simplest form of pattern data is: <num> <Hex-data>, where the data
-is a 16-character string of Hexadecimal digits; i.e. 0--9, $A$--$F$.
-Each Hex-digit equates to 4 binary bits, so this data contains 64 bits
-representing pixels in an $8\times8$ array.
-The <num> is an integer counting the number of `0's among the 64 bits.
-Taken as a fraction of 64, this number or its complement, represents the
-average density of `on' pixels within a single cell of the pattern.
-Drivers unable to provide the fine detail of a pattern may simply use this
-number, or its complement, as a gray-level or part of a colour specification
-for the whole region to be tiled.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-A desirable set of standard patterns could be specified to be always loaded.
-If such a set emerges indeed as being frequently desirable then it will be
-included here.
-
-\DOCMODE(
-\xydef@\xystandardpatterns@{}%
-\DOCMODE)
-
-\NOTE: The driver file must call |\xystandardpatterns@| before these
-patterns become accessible. This is to allow any <driver>-specific
-definitions to be active when these patterns are defined.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-The character |!| is used to delimit comments within pattern-data
-files.
-
-\DOCMODE(
-\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@{\futurelet\next\getxypattern@@}
-\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@ }
-
-%\xydef@\parsepattern@#1 #2!#3\relax{\message{#1:#2}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\medskip
-\noindent
-The file |xymacpat.xyp| contains defining data for the 38 standard
-patterns available with the Macintosh Operating system.
-Figure~??[f.macpats] displays all these patterns.
-
-% Comment this line an uncomment one below, to move the patterns to a
-% later page.
-
-%\MacPatterns
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%\clearpage
-\paragraph*{Rotating and Resizing Patterns}
-%
-Some implementations of patterns are sufficiently versatile to allow extra
-parameters to affect the way the pattern data is interpreted. \PS\ is one
-such implementation in which it is possible to rotate the whole pattern and
-even to expand or contract the sizes of the basic cell.
-
-Due to the raster nature of output devices, not all such requests can be
-guaranteed to produce aesthetic results on all devices. In practice only
-rotations through specific angles (e.g 30$^\circ$, 45$^\circ$, 60$^\circ$)
-and particular scaling ratios can be reliably used.
-Thus there is no sophisticated interface provided by \Xy-pic to access these
-features. However the `\PS\ escape' mechanism does allow a form of access,
-when a \PS\ <driver> is handling pattern requests.
-
-Special \PS\ operators |pa| and |pf| set the pattern angle (normally 0)
-and `frequency' measured in {\em cells per inch}. Hence, when used as an
-<object>-modifier, |[! 30 pa 18.75 pq]| rotates the pattern by 30$^\circ$
-clockwise and uses a smaller pattern cell (larger frequency).
-The default frequency of $12.5=300/(8\times3)$ means that
-each pixel in a pattern cell corresponds, on a device of resolution
-300{\small dpi}, to a $3\times3$ square of device pixels;
-on such a device $18.75$ uses $2\times2$ squares.
-
-At 300{\small dpi} a frequency of $9.375=300/(8\times4)$ uses $4\times4$
-squares. These match the natural size for pixels on a 75{\small dpi} screen
-and are pretty close for 72{\small dpi} screens.
-Though appropriate for screen displays, these are `too chunky' for high
-quality printed work. Doubling the frequency is too fine for some patterns,
-hence the intermediate choice of $12.5$ as default.
-In order for printed output to match the screen view, a \PS\ operator |macfreq|
-has been defined to facilitate requests for $9.375$, via |[!macfreq]|.
-
-The next diagram displays changes to the frequency.
-%
-$$
- \newcount\R \newcount\C
- \def\n{\advance\R1 \C0 \POS(\R,\C)}
- \def\F#1#2{\advance\C1 %
- \POS(\R,\C)*+\txt\small{filled\\pattern}*[thicker]\frm{-}
- ,*[! #2 pq][#1]\frm{**},
- +D*+!U\txt\small{#2}}
-%
-\R-1 \C0 \xy
- 0;<0cm,-1.5cm>:<2.0cm,0cm>:: \relax
-% \n,{\C1\POS(\R,\C)}
- \n\F{mac38}{9.375}\F{mac38}{12.5}\F{mac38}{18.75}\F{mac38}{37.5}
- \n\F{mac16}{9.375}\F{mac16}{12.5}\F{mac16}{18.75}\F{mac16}{37.5}
-%
-\endxy
-$$
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-\paragraph*{Saving patterns: \ }
-%
-When styles are saved using ??c[[=]<word>|]|, see note~??g[xy.doc:define
-<shape>] of \S??g[xy.doc:object], then the current pattern (if any) is also
-saved. Subsequent use of |[|<word>|]| recovers the pattern as well as colour
-and line-style settings. This includes any explicit variations applied using
-the ``Style Escape'' mechanism.
-
-Here is a variation of an earlier example, with extra effects.
-\begin{code}
-\UsePatternFile{xymacpat}
-\AliasPattern{bricks}{mac12}{}
-\LoadPattern{mac28}{}\LoadPattern{mac05}{}
-\xy *=0[! macfreq -45 pa][mac28][|=Bars]{}
-,*+<12pc,4pc>{}*[bricks]\frm{**}
-,-<3.5pc,0pt>,*+<2.65pc>[o]{},*[Bars]\frm{**}
-,*[thicker]\frm{o},+<6pc,0pt>
-,*+<5pc, 2.7pc>{},*[mac05]\frm{**},*\frm{-,}
-,*[white]\txt\Large\bf\sf{Kilroy\\was here}
-\endxy
-\end{code}
-$$\docode$$
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Add this extension to the driver-tables as ``unload'',
-unless an already-loaded driver can support it:
-
-\DOCMODE(
-\DN@{\xyaddunsupport{tile}\Unloadpattern@}%
-\ifx\xyeverywithoption@tile@\undefined
-\else\ifx\xyeverywithoption@tile@\empty
-\else
- \DN@{\xysetup@@{\xywithoption{tile}{\xyeverywithoption@tile@\xydriversloaded@@}}}%
-\fi\fi \next@
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Uncomment this to move the patterns to a later page.
-
-%\MacPatterns
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xytile.doc,v $
-% Revision 3.4 1997/05/18 01:13:24 ross
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/18 09:43:06 ross
-% documentation change
-%
-% Revision 3.2 1995/09/19 18:21:41 ross
-% Bug fix release.
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-%
-% NEW for version 3.0 by by Ross Moore.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xytips.doc b/Master/texmf-dist/source/generic/xypic/xytips.doc
deleted file mode 100644
index 93136a7e92f..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xytips.doc
+++ /dev/null
@@ -1,239 +0,0 @@
-%% $Id: xytips.doc,v 3.3 1996/12/19 04:12:13 krisrose Exp $
-%%
-%% Xy-pic ``More Tips'' extension.
-%% Copyright (c) 1992-1996 Kristoffer H. Rose <kris@diku.dk>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <kris@diku.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{tips}{More Tips extension}{\stripRCS$Revision: 3.3 $}%
- {Kristoffer H.~Rose}{kris@diku.dk}%
- {BRICS/Computer Science, University of Aarhus, Ny Munkegade, building 540,
- DK--8000 Aarhus~C}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This extension provides several additional styles of `tips' for use
- (primarily) as arrow heads, and makes it possible to define
- customised tips. This is used to support tips that mimic the style
- of the Computer Modern fonts\footnote{This function was earlier
- supported by the |cmtip| extension which is still included in the
- distribution but is now obsolete.} by Knuth~(see
- \cite{K86:ComputerMT} and \cite[appendix~F]{K84:TeXbook}) and of the
- Euler math fonts distributed by the \AMS.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
- First save the \Xy-commands that may need restoring.
-
-\DOCMODE(
-\xylet@\tip@xy=\tip@
-\xylet@\atip@xy=\atip@
-\xylet@\btip@xy=\btip@
-
-\xylet@\Tip@xy=\Tip@
-\xylet@\Ttip@xy=\Ttip@
-
-\xylet@\tipjot@xy=\tipjot@
-\DOCMODE)
-
- Next declare the fonts (initially the original |cm| style).
-
-\DOCMODE(
-\xyfont@\xy@@atfont=xycmat10
-\xyfont@\xy@@btfont=xycmbt10
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Font selection is done with the command
-%
-\begin{defs1}
-??c![\SelectTips] |{|<family>|}| |{|<size>|}|
-\end{defs1}
-%
-\DOCMODE(
-\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}
-\DOCMODE)
-\noindent\unskip
-%
- where the <family> and <size> should be selected from the following
- table.
-%
-\begin{center}
-\def\TIPS#1#2{\hbox{\SelectTips{#1}{#2}\UseTips
- $\xy;/r1pc/**{}?>*@{>}**{-}\endxy~
- \xy;/r1pc/**{}?>*@2{>}**@2{-}\endxy~
- \xy;/r1pc/**{}?>*@3{>}**@3{-}\endxy$}}%
-\leavevmode
-\begin{tabular}{\otherbar c\otherbar c\otherbar c\otherbar c\otherbar}
-\hline
- Family & ??c![10] & ??c![11] & ??c![12] \\
-\hline
- {}??c![xy] &{}\TIPS{xy}{10} &{}\TIPS{xy}{11} &{}\TIPS{xy}{12} \\
- {}??c![cm] &{}\TIPS{cm}{10} &{}\TIPS{cm}{11} &{}\TIPS{cm}{12} \\
- {}??c![eu] &{}\TIPS{eu}{10} &{}\TIPS{eu}{11} &{}\TIPS{eu}{12} \\
-\hline
-\end{tabular}
-\end{center}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The table is really encoded in control sequences
- |\tipfamily|~<family> that look very much alike since all the
- currently existing combinations are merely alternative fonts. This
- is likely to change, however, \dots\smiley
-
- First |cm|, \ie, computer modern: these are simplified by the fact
- that we can use the normal double arrows.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
- Next Euler tips: the single tips merely reuse the |cm| code except
- for the sligtly smaller distance between double tips; the double
- arrows have to be recoded to mimic the steeper Euler appearance.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Once a selection is made, the following commands are available:
-%
-\begin{defs}
-??c![\UseTips] & activate selected tips\cr
-??c![\NoTips] & deactivate\cr
-\end{defs}
-%
-\DOCMODE(
-\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}
-\DOCMODE)
-\noindent\unskip
-%
- They are local and thus can be switched on and/or off for individual
- pictures using the \TeX\ grouping mechanism, \eg,
-%
-\begin{code}
-\SelectTips{cm}{10}
-\xy*{} \ar
- @{*{\UseTips\dir_{<<}}-*{\NoTips\dir{>}}}
- (20,5)*{} \endxy
-\end{code}
-\displaycode
-\noindent
-%
- will typeset
-$$
-\docode
-$$
- regardless of which tips are used otherwise in the document.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{End \& log}
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xytips.doc,v $
-% Revision 3.3 1996/12/19 04:12:13 krisrose
-% New for this maintenance release.
-%
-% Generalisation of xycmtip.doc,v 3.1 1995/09/05 20:31:32 kris Exp krisrose
-%
-% 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.6 1993/10/21 20:36:09 kris
-% NEW file to go in version 2.7!
-%
-% Extracted from xypic.doc 2.6.1.1.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs how we are formatted:
-% Local Variables:
-% mode:latex
-% fill-prefix:"\t"
-% fill-column:77
-% paragraph-separate:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% paragraph-start:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xytp-f.doc b/Master/texmf-dist/source/generic/xypic/xytp-f.doc
deleted file mode 100644
index ed15b6fff6b..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xytp-f.doc
+++ /dev/null
@@ -1,306 +0,0 @@
-%% $Id: xytp-f.doc,v 3.3 1996/12/18 09:49:07 ross Exp $
-%%
-%% Xy-pic ``Frame extension'' TPIC backend support.
-%% Copyright (c) 1995-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xytpfloaded\empty \message{not reloaded}\endinput \fi
-\let\xytpfloaded=\empty \xycatcodes
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection{frames.}
-
-The included file |xytp-f.tex|
-(version \stripRCS$Revision: 3.3 $) provides \TPIC\ support
-for some of the effects defined in the |frame| extension.
-This file is loaded and its effects are activated automatically whenever
-|\xyoption{frame}| is requested and the current <driver> supports both
-\TPIC\ and frames. Should there be any need to turn off this support,
-the following commands are available; they obey usual \TeX\ groupings.
-%
-\begin{defs}
-|\NoTPICframes| & remove \TPIC\ support\kern-50pt \cr
-|\UseTPICframes| & reinstate \TPIC.
-\end{defs}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Installation}
-
-The <driver>-file must call the following macro to rebind control sequences
-defined in |xyframe|, thereby allowing the \TPIC\ methods to be used.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Frames: solid, dotted and dashed}
-
-\DOCMODE(
-\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@\xyTPICframed@oval@#1{\vglue\U@c
-% \hbox{\hglue\L@c\xyTPICoval@{}\hglue\R@c}\vglue\D@c}
-\DOCMODE)
-
-Dotted and dashed circles have no particular support, whereas
-solid circles and ellipses can use |\xyTPICfullcircle@|.
-
-\DOCMODE(
-\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@@ }
-\DOCMODE)
-
-In practice the parameters |#1| and |#2| will hold <dimen>s.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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@ }
-
-%\xydef@\xyTPICoval@i#1{\bgroup
-% \let\framehfill=\frm@solidh@@
-% \let\framevfill=\frm@solidv@@
-% \let\framed@body@@=\framed@body@
-% \edef\tmp@{{\R@}}\expandafter\framed@@\tmp@
-% \egroup }
-\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@ }
-
-%\xylet@\xyTPICoval@=\xyTPICrect@
-
-\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@\xyTPICoval@Special#1{\TPICmacro@@{#1 fp}}
-%\xydef@\xyTPICdotoval@Special#1{\TPICmacro@@{#1 fp}}
-%\xydef@\xyTPICdashoval@Special#1{\TPICmacro@@{#1 fp}}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{Filled regions}
-
-\DOCMODE(
-\xydef@\xyTPICfilledRegion#1#2{\vglue\U@c
- \hbox{\hglue\L@c#1#2\empty\hglue\R@c}\vglue\D@c}
-
-\xydef@\filledRectangle@TPIC@@{%\W@{tp:\the\R@}%
- \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@@
-}
-\DOCMODE)
-
-Rectangles are treated as a special case of ovals.
-The |#2| parameter signifies whether the outline of the object
-should also be stroked (|#2|=|\relax|) after being filled.
-Such a stroke is always in black.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\endinput
-
-% $Log: xytp-f.doc,v $
-% Revision 3.3 1996/12/18 09:49:07 ross
-% cosmetic changes to macro names
-%
-% Revision 3.1 1995/09/05 20:28:57 ross
-% Releasing version 3.1!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-%
-% NEW for version 3.0 by by Ross Moore.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xytpic.doc b/Master/texmf-dist/source/generic/xypic/xytpic.doc
deleted file mode 100644
index 02cddcb977f..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xytpic.doc
+++ /dev/null
@@ -1,472 +0,0 @@
-%% $Id: xytpic.doc,v 3.3 1996/12/18 09:50:38 ross Exp $
-%%
-%% Xy-pic ``tpic'' TPIC backend, for lines, curves and fills.
-%% Copyright (c) 1995-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{tpic}{TPIC backend}{\stripRCS$Revision: 3.3 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\ifx\undefined\TPIC \def\TPIC{{\smc tpic}}\fi
-This option allows the \Xy-pic fonts to be replaced by \TPIC\ |\special|s,
-when used with a dvi-driver capable of supporting them. Extra capabilities
-include smoother lines, evenly spaced dotted/dashed curves, variable
-line-widths, gray-scale fills of circles, ellipses and polygonal regions.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Use of \TPIC\ |\special|s offers an alternative to the \Xy-pic fonts. However
-they require a dvi-driver that is capable of recognizing and interpreting
-them. One such viewer is |xdvik|, Karl Berry's modification to the |xdvi|
-viewer on \unix\ systems running X-windows or a derivative. |dvipsk|, Karl
-Berry's modification to |dvips| also handles \TPIC\ |\special|s, so
-|xdvik|/|dvipsk| is an good combination for quality screen-display and
-\PS\ printing.
-
-Once loaded using |\xyoption{tpic}|, with an appropriate <driver> also
-specified either already or subsequently, the following commands are
-available to turn the \TPIC\ backend off/on.
-%
-\begin{defs}
-|\NoTPICspecials| & turns off \TPIC\ specials.\kern-50pt\cr
-|\UseTPICspecials| & reinstates \TPIC\ specials.\kern-30pt
-\end{defs}
-
-\DOCMODE(
-\xynew@{if}\ifTPICspecials@
-\xydef@\UseTPICspecials{\TPICspecials@true}
-\xydef@\NoTPICspecials{\TPICspecials@false}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-There is a limit to the number of points allowable in a path. For paths
-constructed by \Xy-pic, which includes spline curves, when the limit
-is reached the path is automatically flushed and a new path commenced.
-The following command can be used to customise this limit---initially
-set at $300$ for use with \xdvi---to suit alternative <driver>s.
-%
-\begin{defs}
-|\maxTPICpoints{|<num>|}| & set maximum for paths
-\end{defs}
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Each object involving \TPIC\ |\special|s must set the style, using
-|\xytpic@set@| to store a macro as the expansion of |\xytpic@style@@|.
-Currently this is global, since a \TPIC\ object must be completed once
-it has been started --- perhaps this is not necessary.
-
-Note that |\xytpic@set@| uses |\xdef|, but has a |\noexpand| in its
-expansion; this forces expansion of the argument, when there is one,
-to the control sequence passed as the first token following |\xytpic@set@|.
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-Here are the actual |\specials| that get placed in the dvi-file.
-
-\DOCMODE(
-\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
-% \xytpic@ip
- \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@psb#1{\xyTPIC@special{:[begin] #1}}
-%\xydef@\xytpic@pse#1{\xyTPIC@special{:[end]}}
-%
-\xydef@\xytpic@wh{\xyTPIC@special{sh 0}} % obsolete
-\xydef@\xytpic@bk{\xyTPIC@special{sh 1}} % obsolete
-
-\xydef@\xyTPIC@special#1{\special{#1}}
-\xydef@\xyTPIC@noisy#1{\W@{TPIC: #1}\special{#1}}
-\xydef@\NoisyTPIC{\let\xyTPIC@special=\xyTPIC@noisy}
-\DOCMODE)
-
-Some effects may require a \TPIC\ |\special| to be placed both
-before and after the <object>.
-
-\DOCMODE(
-\xydef@\xyTPICsplit@#1#2{\setboxz@h{#1\boxz@#2}}%
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\TPIC\ uses units of `milli-inches' for coordinates,
-but inches for dot-separations and dash-length.
-
-\DOCMODE(
-\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@}}%
-\DOCMODE)
-
-The \TPIC\ location is calculated relative to the current \TeX\ reference
-point. Hence most \TPIC\ objects start at the $(0,0)$ location.
-
-\DOCMODE(
-\xydef@\xytpic@dot@@{\xytpic@pa00}
-\xydef@\xytpic@width@{\xytpic@pt{\xylinethick@}%
- \expandafter\xytpic@pn\expandafter{\the\count@}}
-%\xylet@\xytpic@width@=\relax
-
-\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@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{re-bindings}
-
-This is similar to the mechanism used by the \PS\ back-end to rebind
-``hooks'' to incorporate a switch according to the current value of
-|\ifTPICspecials@|.
-
-\DOCMODE(
-\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}}%
-\DOCMODE)
-
-Allow only one instance of |\setupxyTPIC@|; thereafter simply do
-|\reloadxyTPIC@| to turn on anything that has been turned off.
-
-\DOCMODE(
-\xydef@\setupxyTPIC@{\xywarning@{using TPIC specials}%
- \TPICalternative@{\solid@}{solid}%
- \TPICalternative@{\dash@}{dashed}%
- \TPICalternative@{\point@}{point}%
- \TPICalternative@{\circhar@@}{circhar}%
- \TPICalternative@{\splinesolid@}{splinesolid}%
-% \TPICalternative@{\splinedashed@}{splinedashed}%
-% \TPICalternative@{\splinedotted@}{splinedotted}%
- \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@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{straight lines}
-
-\DOCMODE(
-\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@@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{spline curves}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\noindent
-Of the curves defined in the |xycurve| extension, only solid spline curves
-are supported. This is done by treating the spline as a polygon (poly-line)
-with many segments. The dotted or dashed variants do not work correctly.
-
-Implementations of \TPIC\ draw dashed polygons such that the start and
-finish of each segment is solid. Since these segments can be very short,
-the effect is simply to create a solid line. Similarly the shortness of the
-segments tends to give nothing at all for large portions of a dotted curve.
-What is needed is an implementation whereby the on/off nature of a dashed
-or dotted polygon is determined by the accumulated length, not the length
-along just the current segment.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\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 %\zerodot
- \SloppyCurves %\splinetol@=\xydashl@ % \xytpic@ip
- \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@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{line width}
-
-\DOCMODE(
-\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@}%
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{circles and ellipses}
-
-Here we catch circles and ellipses specified using the |\xycircle| command
-from the |xycurve| extension. Since TPIC supports only solid circles,
-we catch it only when the <style> is either |{}| or |{-}|.
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-This replaces just the font character, called using |\circhar@@#1|.
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-\paragraph*{quadratic splines}
-
-\DOCMODE(
-\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 }
-\DOCMODE)
-
-\DOCMODE(
-\xydef@\installTPICcurves@{%
- \let\dosolidcircle@@=\xydoTPICcircle@
- \let\xy@spline@ii@@=\xyTPIC@spline@ii@
- }
-\xydef@\uninstallTPICcurves@{%
- \let\dosolidcircle@@=\dosolidcircle@
- \let\xy@spline@ii@@=\xy@spline@ii }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{frames}
-\DOCMODE(
- \xywithoption{frame}{\xyinputorelse@{xytp-f}{}}
-\DOCMODE)
-
-Implement color fills by reading from a |\TPICfillcolor|.
-Implement pattern fills by reading from a |\TPICfillpatt|.
-Read these whenever a fill is requested.
-
-
-\DOCMODE(
-\xydef@\uninstallTPICframes@{\UnloadFrames@}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xytpic.doc,v $
-% Revision 3.3 1996/12/18 09:50:38 ross
-% adjusted Drop@@ for styles
-% minor improvements to file-loading commands
-%
-% Revision 3.2 1995/09/19 18:21:41 ross
-% Bug fix release.
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% NEW for version 3.1 by Ross Moore 1995/03/18.
-% replaces xyps-col.doc
-%
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% fill-prefix:""
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyv2.doc b/Master/texmf-dist/source/generic/xypic/xyv2.doc
deleted file mode 100644
index aa237e4c2e5..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyv2.doc
+++ /dev/null
@@ -1,868 +0,0 @@
-%% $Id: xyv2.doc,v 3.4 1997/05/18 01:14:25 krisrose Exp $
-%%
-%% Xy-pic ``Version 2 compatibility'' feature.
-%% Copyright (c) 1993-1995 Kristoffer H. Rose <kris@diku.dk>
-%%
-%% 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-1995 Kristoffer H. Rose <kris@diku.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{v2}{Version 2 Compatibility}{\stripRCS$Revision: 3.4 $}%
- {Kristoffer H.~Rose}{krisrose@brics.dk}%
- {BRICS/Computer Science, University of Aarhus, Ny Munkegade, building 540,
- DK--8000 Aarhus~C}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- This \FILE\ describes the special backwards compatibility with
- \Xy-pic version~2: diagrams written according to the ``Typesetting
- diagrams with \Xy-pic: User's Manual''~\cite{R92:TypesettingDXUM}
- should typeset correctly with this loaded. The compatibility is
- available either as an \Xy-option or through the special files
- |xypic.sty| and |xypic.tex| described below.
-
- There are a few exceptions to the compatibility: the features described
- in~\S??[unsupported] below are not provided because they are not as
- useful as the author originally thought and thus virtually never
- used. And one extra command is provided to speed up typesetting of
- documents with \Xy-pic version~2 diagrams by allowing the new
- compilation functionality with old diagrams.
-
- The remaining sections list all the obsolete commands and suggest
- ways to achieve the same things using \Xy-pic \xyversion, \ie,
- without the use of this option. They are grouped as to what part of
- \Xy-pic replaces them; the compilation command is described last.
-
- \NOTE: ``version 2'' is meant to cover all public releases of \Xy-pic
- in 1991 and 1992, \ie, version 1.40 and versions~2.1 through~2.6.
- The published manual cited above (for version 2.6) is the reference
- in case of variations between these versions, and only things
- documented in that manual will be supported by this
- option!\footnote{In addition a few of the experimental facilities
- supported in v2.7--2.12 are also supported.}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
- Before we start, the old name macro.
-
-\DOCMODE(
-\xylet@\XY=\Xy
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Unsupported incompatibilities}
-??=[unsupported]
-
- Here is a list of known incompatibilities with version 2 even when
- the |v2| option is loaded.
-%
-\begin{itemize}
-\item
- Automatic `shortening' of arrow tails using ??c![|<<] breaks was a
- bug and has been `fixed' so it does not work any more.
- Put a |||<\hole| break before it.
-\item
- The version~2.6 ??c![*] position operator is not available. The
- version 2.6 construction $t_0|;|t_1|*(|x|,|y|)|$ should be replaced by
- the rather long but equivalent construction
-$$
-\begin{array}{r@{}l}
- |{|\,t_0\,|;p+/r/:|\,t_1\,|=|&|"1";p+/u/,x;(0,0);:|\\
- &|"1";p+/r/,y;(0,0);::|\,|(|x|,|y|)}|
-\end{array}
-$$
- In most cases $t_0|;|t_1|**{}?(|x|)|$,
- possibly with a trailing $|+/^|\dots|/|$, suffices instead.
-\item
- Using $t_0|;|t_1|:(|x|,|y|)|$ as the target of an arrow command does
- not work. Enclose it in braces, \ie, write
-$$
- |{|\,t_0\,|;|\,t_1\,|:(|x|,|y|)}|
-$$
-\item
- The older ??c![\pit], ??c![\apit], and ??c![\bpit] commands are not
- defined. Use |\dir{>}| (or |\tip|) with variants and rotation.
-\item
- The even older notation where an argument in braces to |\rto| and the
- others was automatically taken to be a `tail' is not supported. Use
- the supported |||<|\dots\ notation.
-\end{itemize}
-%
- If you do not use these features then your version~2 (and earlier)
- diagrams should typeset the same with this option loaded except that
- sometimes the spacing with version~3 is slightly different from that
- of version~2.6 which had some spacing bugs.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Obsolete kernel features}
-??=[kernel]
-
- The following things are added to the kernel by this option and
- described here: idioms, obsolete positions, obsolete connections, and
- obsolete objects. For each we show the suggested way of doing the
- same thing without this option:
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{Removed \protect\AMS-\TeX\ idioms}
-
- Some idioms from \AMS-\TeX\ are no longer used by \Xy-pic: the
- definition commands ??c![\define] and ??c![\redefine], and the size
- commands ??c![\dsize], ??c![\tsize], ??c![\ssize], and ??c![\sssize].
- Please use the commands recommended for your format---for plain \TeX\
- these are |\def| for the first two and |\displaystyle|, |\textstyle|,
- |\scriptstyle|, and |\scriptscriptstyle| for the rest. The |v2|
- option ensures that they are available anyway.
-
-\DOCMODE(
-\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
-\DOCMODE)
-
- Version also 2 used the \AMS-\TeX\ ??c![\text] and a (non-object) box
- construction ??c![\Text] which are emulated---|\text| is only defined
- if not already defined, however, using the native one (of \AMS-\TeX\
- or \AMS-\LaTeX\ or whatever) if possible. Please use the |\txt|
- object construction described in~\S??g[xy.doc:objectlib.text]
- directly since it is more general and much more efficient!
-
-\DOCMODE(
-\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}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{Obsolete state}
-
- Upto version 2.6 users could access the state variables ??c![\cL],
- ??c![\cR], ??c![\cH], and ??c![\cD], which are defined.
-
-\DOCMODE(
-\xylet@\cL=\L@c
-\xylet@\cR=\R@c
-\xylet@\cD=\D@c
-\xylet@\cH=\U@c
-\DOCMODE)
-
- From v2.7 to 2.12 users could use the names of the state |\dimen|
- registers ??c![\Xmin], ??c![\Xmax], ??c![\Ymin], and ??c![\Ymax];
- ??c![\Xp], ??c![\Yp] ??c![\Dp], ??c![\Up], ??c![\Lp], and ??c![\Rp];
- ??c![\Xc], ??c![\Yc] ??c![\Dc], ??c![\Uc], ??c![\Lc], and ??c![\Rc];
- ??c![\Xorigin], ??c![\Yorigin], ??c![\Xxbase], ??c![\Yxbase],
- ??c![\Xybase], and ??c![\Yybase]. Now the same effect can be
- achieved using <corner>s but |v2| defines the aliases.
-
-\DOCMODE(
-\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
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{Obsolete position manipulation}
-
- In version~2 many things were done using individual <decor> control
- sequences that are now done using <pos> operators.
-%
-\begin{defs}
- Version 2 positioning\hfil & Replacement \cr
- \noalign{\nobreak\smallskip\nobreak\hrule\nobreak\smallskip\nobreak}
- ??c![\go]<pos> & |\POS;p,|<pos> \cr
- ??c![\aftergo]|{|<decor>|}|<pos> \kern-2pc \cr
- &\kern-3pc|\afterPOS{|<decor>|};p,|<pos> \cr
- ??c![\merge] & |\POS.p\relax| \cr
- ??c![\swap] & |\POS;\relax| \cr
- ??c![\Drop]|{|<text>|}| & |\drop+{|<text>|}| \cr
-\end{defs}
-%
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- The code is basically that of |xy.doc| 2.6\dots
-
-\DOCMODE(
-\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@}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{Obsolete connections}
-
- These connections are now implemented using directionals.
-%
-\begin{defs}
- Version 2 connection\hfil & Replacement \cr
- \noalign{\nobreak\smallskip\nobreak\hrule\nobreak\smallskip\nobreak}
- ??c![\none] & |\connect h\dir{}| \cr
- ??c![\solid] & |\connect h\dir{-}| \cr
- ??c![\Solid] & |\connect h\dir2{-}| \cr
- ??c![\Ssolid] & |\connect h\dir3{-}| \cr
- ??c![\dashed] & |\connect h\dir{--}| \cr
- ??c![\Dashed] & |\connect h\dir2{--}| \cr
- ??c![\Ddashed] & |\connect h\dir3{--}| \cr
- ??c![\dotted] & |\connect h\dir{.}| \cr
- ??c![\Dotted] & |\connect h\dir2{.}| \cr
- ??c![\Ddotted] & |\connect h\dir3{.}| \cr
- ??c![\dottedwith]|{|<text>|}|& |\connect h{|<text>|}| \cr
-\end{defs}
-%
- Note how the `hidden' specifier |h| should be used because version~2
- connections did not affect the size of diagrams.
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{Obsolete tips}
-
- These objects all have |\dir|-names now:
-%
-\begin{defs}
- Version 2 tip\hfil & Replacement \cr
- \noalign{\nobreak\smallskip\nobreak\hrule\nobreak\smallskip\nobreak}
- ??c![\notip] & |\dir{}| \cr
- ??c![\stop] & |\dir{||}| \cr
- ??c![\astop] & |\dir^{||}| \cr
- ??c![\bstop] & |\dir_{||}| \cr
- ??c![\tip] & |\dir{>}| \cr
- ??c![\atip] & |\dir^{>}| \cr
- ??c![\btip] & |\dir_{>}| \cr
- ??c![\Tip] & |\dir2{>}| \cr
- ??c![\aTip]
- & \kern-2pc|\object=<5pt>:(32,-1)\dir^{>}|\kern-1pc \cr
- ??c![\bTip]
- & \kern-2pc|\object=<5pt>:(32,+1)\dir_{>}|\kern-1pc \cr
- ??c![\Ttip] & |\dir3{>}| \cr
- ??c![\ahook] & |\dir^{(}| \cr
- ??c![\bhook] & |\dir_{(}| \cr
- ??c![\aturn] & |\dir^{'}| \cr
- ??c![\bturn] & |\dir_{'}| \cr
-\end{defs}
-%
-\DOCMODE(
-\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_{'}}
-\DOCMODE)
-
- The older commands |\pit|, |\apit|, and |\bpit|, are not provided.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{Obsolete object constructions}
-
- The following object construction macros are made obsolete by the
- enriched <object> format:
-%
-\begin{defs}
- Version 2 object\hfil & Replacement \cr
- \noalign{\nobreak\smallskip\nobreak\hrule\nobreak\smallskip\nobreak}
- ??c![\rotate]|(|<factor>|)|<tip> \kern-4pc \cr
- &\kern-3pc |\object:(|<factor>|,|<factor>|){|<tip>|}| \cr
- ??c![\hole] & |\object+{}| \cr
- ??c![\squash]<tip> & |\object=0{|<tip>|}| \cr
- ??c![\grow]<tip> & |\object+{|<tip>|}| \cr
- |\grow<|<dimen>|>|<tip> & |\object+<|<dimen>|>{|<tip>|}| \cr
- ??c![\squarify]|{|<text>|}| & |\object+={|<text>|}| \cr
- |\squarify<|<dimen>|>{|<text>|}| \kern-4pc \cr
- &\kern-3pc |\object+=<|<dimen>|>{|<text>|}| \cr
-\end{defs}
-\noindent\unskip
-%
- where rotation is done in a slightly different manner in
- version~\xyversion\ (it was never accurate in version~2).
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- These are mostly just the unmodified version 2.6 code:
-
-\DOCMODE(
-\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}}
-\DOCMODE)
-
- We also reimplement the version~2 undocumented ??c![\qc] quarter
- circle which is now called |\corn@@| of the frame extension.
-
-\DOCMODE(
-\xydef@\qc{\corn@@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Obsolete extensions \& features}
-??=[extensions]??=[features]
-
- Version~2 had commutative diagram functionality corresponding to the
- |frames| extension and parts of the |matrix| and |arrow| features.
- These are therefore loaded and some extra definitions added to
- emulate commands that have disappeared.
-
-\subsubsection*{Frames}
-
- The version 2 frame commands are emulated using the frame extension
- (as well as the |\dotframed|, |\dashframed|, |\rounddashframed|
- commands comm\-unicated to some users by electronic mail):
-%
-\begin{defs}
- Version 2 object\hfil & Replacement \cr
- \noalign{\nobreak\smallskip\nobreak\hrule\nobreak\smallskip\nobreak}
- ??c![\framed] & |\drop\frm{-}| \cr
- |\framed<|<dimen>|>| & |\drop\frm<|<dimen>|>{-}| \cr
- ??c![\Framed] & |\drop\frm{=}| \cr
- |\Framed<|<dimen>|>| & |\drop\frm<|<dimen>|>{=}| \cr
- ??c![\dotframed] & |\drop\frm{.}| \cr
- ??c![\dashframed] & |\drop\frm{--}| \cr
- ??c![\rounddashframed] & |\drop\frm{o-}| \cr
- ??c![\circled] & |\drop\frm{o}| \cr
- ??c![\Circled] & |\drop\frm{oo}| \cr
-\end{defs}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- For each of the above commands (and a few hidden ones) we parse the
- above and convert to the proper format.
-
-\DOCMODE(
-\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@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{Matrices}
-
- The ??c![\diagram] <rows> ??c![\enddiagram] command is provided as an
- alias for |\xymatrix{| <rows> |}| centered in math mode and
- ??c![\LaTeXdiagrams] changes it to use |\begin| \dots\ |\end| syntax.
- |v2| sets a special internal `old matrix' flag such that
- trailing~|\\| are ignored and entries starting with~|*| are safe.
-
-\DOCMODE(
-\xyrequire{matrix}\xycatcodes
-\DOCMODE)
-
-\DOCMODE(
-\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@}% Declared in Compiling
- \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{}
-\DOCMODE)
-
- ??c![\NoisyDiagrams] is ignored because the matrix feature always
- outputs progress messages.
-
- Finally the version 2 ??c![\spreaddiagramrows],
- |\spread|\-|diagramcolumns|??c[\spreaddiagramcolumns] spacing
- commands are emulated using |\xymatrixrowsep| and |\xymatrixcolsep|:
-
-\DOCMODE(
-\xydef@\spreaddiagramrows#1{\addPLUS@\xymatrixrowsep{#1}}
-\xydef@\spreaddiagramcolumns#1{\addPLUS@\xymatrixcolsep{#1}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsubsection*{Arrows}
-
- The main arrow commands of version 2 were the ??c![\morphism] and
- ??c![\definemorphism] commands which now have been replaced by the
- |\ar| command.
-
- |v2| provides them as well as uses them to define the version~2
- commands ??c![\xto], ??c![\xline], ??c![\xdashed], ??c![\xdotted],
- ??c![\xdouble], and all the derived commands |\dto|, |\urto|, \dots;
- the |\arrow| commands of the $\beta$-releases of v3 is also provided.
-
- Instead of commands like |\rrto| and |\uldouble| you should use the
- arrow feature replacements |\ar[rr]| and |\ar@{=}[ul]|.
-
- The predefined turning solid arrows |\lltou|, \dots, |\tord| are
- defined as well; these are now easy to do with <turn>s.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% translating `old' arrows into `new' ones:
-% \\\([durl][durl]*\)to \\ar[\1]
-% \\\([durl][durl]*\)line \\ar@{-}[\1]
-% \\\([durl][durl]*\)dashed \\ar@{--}[\1]
-% \\\([durl][durl]*\)dotted \\ar@{.}[\1]
-% \\\([durl][durl]*\)double \\ar@{=}[\1]
-
-\DOCMODE(
-\xyrequire{arrow}\xycatcodes
-\xylet@\arrow=\ar
-\DOCMODE)
-
- |\morphism| is a reduced version of the |\ar| command.
-
-\DOCMODE(
-%\xyuncatcodes \catcode35=6
-% \def\next#1#2#3{\relax \PATH ~={#1} ~>{\POS?>*{#2}\relax} ~<{\POS;?<*{#3};\relax}}
-%\xycatcodes
-%\xylet@\morphism=\next
-
-{\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@ %KLUDGE!
- \let\PATHlabelbelow@@=\PATHlabelbelow@
- \let\connect=\preconnect#1\let\connect=\connect@iii}
-\DOCMODE)
-
- \TODO: Unpack this to what |\PATH| does\dots
-
- |\definemorphism| is essentially unchanged except we now use the
- privacy checking commands.
-
-\DOCMODE(
-\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
-\DOCMODE)
-
- \TODO: These could be "hugely" optimised by using the |arrow| feature
- directly\dots
-
- Next the predefined bent morphisms of version 2. These required some
- hacking to work; I hope this doesn't mean that the <path> semantics
- has changed to much\dots\frowny
-
-\DOCMODE(
-\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
-\DOCMODE)
-
- Finally the version 2 arrow radius default command that actually
- never worked but some people might have hoped\dots
-
-\DOCMODE(
-\xydef@\TurnRadius{\addEQ@\turnradius}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Obsolete loading}
-??=[loading]
-
- The v2 User's Manual says that you can load \Xy-pic with the command
- ??c![\input xypic] and as a \LaTeX~2.09 `style option' |[xypic]|.
- This is made synonymous with loading this option by the files
- ??c![xypic.tex] and ??c![xypic.sty] distributed with the |v2| option.
-
-\DOCMODE1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{description}
-
-\item[|xypic.tex|:]
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\subsubsection*{xypic.doc}
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\inputdoc!{xypic.doc}
-
-\DOCMODE1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\item[|xypic.sty|:]
- Loads |xy.sty| and the |v2| feature.
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\subsubsection*{xypic.sty}
-\inputdoc0{xypic.sty}
-
-\DOCMODE1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\end{description}
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
-\subsection{Compiling v2-diagrams}
-??=[compiling]
-
- In order to make it possible to use the new compilation features even
- on documents written with \Xy-pic v2, the following command was
- added in v2.12:
-%
-\begin{defs1}
-|\diagramcompileto{| <name> |}| \dots\ |\enddiagram| \cr
-\end{defs1}
-\noindent\unskip
-%
- which is like the ordinary diagram command except the result is
- compiled (see note~??g[xy.doc:compile]). Note that compilation is
- not quite safe in all cases!
-
-\DOCMODE(
-\xydef@\diagramcompileto#1#2\enddiagram{\relax
- \diagram@{\NoCompileMatrices\xycompileto{#1}}{#2}}
-\DOCMODE)
-
- There is also the following command that switches on "automatic
- compilation" of all diagrams created with the v2 |\diagram| \dots\
- |\enddiagram| command:
-%
-\begin{defs1}
-|\CompileAllDiagrams| |{| <prefix> |}| \cr
-|\NoCompileAllDiagrams| \cr
-|\ReCompileAllDiagrams| \cr
-\end{defs1}
-\noindent\unskip
-%
- will apply |\xycompileto{|<prefix>$n$|}{|\dots|}| to each diagram
- with~$n$ a sequence number starting from~1. Use |\CompileMatrices|
- and |\CompilePrefix| instead!
-
- If for some reason a diagram does not work when compiled then replace
- the |\diagram| command with |\diagramnocompile| (or in case you are
- using the \LaTeX\ form, |\begin{diagramnocompile}|).
-
-\DOCMODE(
-\xydef@\diagramnocompile#1\enddiagram{\relax\diagram@\literal@{#1}}
-\DOCMODE)
-
-\DOCMODE(
-\xydef@\CompileAllDiagrams#1{\CompilePrefix{#1}\CompileMatrices}
-\xydef@\NoCompileAllDiagrams{\NoCompileMatrices}
-\xydef@\ReCompileAllDiagrams{\CompileMatrices}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\subsection*{End \& log}
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xyv2.doc,v $
-% Revision 3.4 1997/05/18 01:14:25 krisrose
-% Essential bugfixes.
-%
-% Revision 3.3 1996/12/19 14:43:55 krisrose
-% Maintenance release.
-%
-% Revision 3.2 1995/09/19 18:22:27 kris
-% Bug fix 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.14 1995/07/05 22:10:12 kris
-% Buglets...
-%
-% 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.11 1994/07/05 10:37:32 kris
-% Third 3beta release [bug fixes].
-% Experimental graph feature included (for ECCT-94 presentation).
-%
-% Revision 2.10 1994/06/15 12:55:07 kris
-% Second 3beta release: bug fixes.
-%
-% 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.
-%
-% Revision 2.6.9.1 1994/03/07 04:22:46 kris
-% Last internal 3alpha and pre-2.7 release.
-%
-% NEW file to go in version 2.7 (extracted from xy.doc 2.6.1.1).
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-prefix:"\t"
-% fill-column:77
-% paragraph-separate:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% paragraph-start:"^[ \t\f]*$\\|^[^\t]\\|\\\\\\\\\\|\\$\\$\\|[^\n\\\\][%&]"
-% TeX-parse-self:nil
-% LaTeX-indent-level:1
-% TeX-brace-indent-level:1
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyweb.doc b/Master/texmf-dist/source/generic/xypic/xyweb.doc
deleted file mode 100644
index 06b77d7e310..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyweb.doc
+++ /dev/null
@@ -1,326 +0,0 @@
-%% $Id: xyweb.doc,v 3.3 1996/12/18 09:52:11 ross Exp $
-%%
-%% Xy-pic ``Lattice and web'' feature.
-%% Copyright (c) 1994-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{web}{Lattice and web feature}{\stripRCS$Revision: 3.3 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\noindent
- This feature provides macros to facilitate typesetting of arrangements
- of points within a 2-dimensional lattice or ``web-like'' structure.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\message{lattices,}
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-We need two counters and macros to access their values.
-
-\DOCMODE(
-\xynew@{count}\lattice@A
-\xynew@{count}\lattice@B
-\xydef@\latticeA{\lattice@A}
-\xydef@\latticeB{\lattice@B}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%\subsection{Lattices}
-%\noindent
-Currently the only routines implemented with this feature are some ``quick
-and dirty'' macros for dropping objects at the points of an integer lattice.
-\TODO: More sophisticated routines will be developed for later versions of
-\Xy-pic, as the need arises.
-
-Mathematically speaking, let $\vec u$ and $\vec v$ be vectors pointing in
-independent directions within the plane. Then the lattice spanned by
-$\vec u$ and $\vec v$ is the infinite set of points $L$ given by:
-$$
-L\;=\; \bigl\{ a\,\vec u + b\,\vec v\;;\;
-\mbox{ for $a$, $b$ integers} \bigr\}\,.
-$$
-Within \Xy-pic the vectors $\vec u$ and $\vec v$ can be established
-as the current coordinate basis vectors.
-The following macros typeset a finite subset of an abstract lattice.
-%
-\begin{defs}
-|\xylattice#1#2#3#4| & points in lattice\cr
-|\croplattice#1#2#3#4#5#6#7#8|\kern-44pt&\cr
- &\dots in specific rectangle.\cr
-\end{defs}
-%
-\noindent
-The parameters |#1| \dots |#4| are to be integers
-$a_{\min}$, $a_{\max}$, $b_{\min}$ and $b_{\max}$,
-so that the portion of the lattice to be typeset
-is that collection of vectors in $L$ for which
-$a_{\min} \le a \le a_{\max}$ and $b_{\min} \le b \le b_{\max}$.
-%
-\begin{code}
-\def\latticebody{%
-\ifnum\latticeA=1 \ifnum\latticeB=-1 %
-\else\drop{\circ}\fi\else\drop{\circ}\fi}
-\xy *\xybox{0;<1.5pc,1mm>:<1mm,1.5pc>::
-,0,{\xylattice{-4}4{-3}3}
- ,(1,-1)="a"*{\bullet}*+<2pt>!UL{a}
- ,(-1,1)."a"*\frm{.}}="L"
-,{"L"+L \ar "L"+R*+!L{s^{(1)}}}
-,{"L"+D \ar "L"+U*+!D{s^{(2)}}}
-\endxy
-\end{code}
-$$\docode$$
-\displaycode
-
-In the above code, notice how the basis is first established then the
-|\xylattice| typeset. Doing this within an |\xybox| allows axes
-to be sized and placed appropriately.
-Since lattice points are determined by their (integer) coordinate
-displacements, they can be revisited to add extra <object>s into
-the overall picture. More generally, the origin for lattice-coordinates
-is the current <pos> $c$, when the |\xylattice| command is encountered.
-Easy accessibility is maintained, as seen in the next example.
-
-\medskip
-
-When the basis vectors $\vec u$ and $\vec v$ are not perpendicular
-the collection of points with $a,b$ in these ranges will fill out
-a skew parallelogram. Generally it is useful to plot only those points
-lying within a fixed rectangle.
-This is the purpose of |\croplattice|, with its extra parameters
-|#5| \dots |#8| determining the `cropping' rectangle within which
-lattice points will be typeset. Other points will not be typeset
-even when $a$ and $b$ are within the specified ranges.
-Explicitly the horizontal range of the cropping rectangle is $X_{\min}$
-to $X_{\max}$, with $X_{\min}$ being the $X$-coordinate of the vector
-$|#5|\times\vec u$, where |#5| is a <number> (not necessarily an integer).
-Similarly $X_{\max}$ is the $X$-coordinate of $|#6|\times\vec u$.
-The vertical extents are $Y_{\min}$ and $Y_{\max}$, given by the
-$Y$-coordinates of $|#7|\times\vec v$ and $|#8|\times\vec v$ respectively.
-%
-\begin{code}
-\def\latticebody{%
-\ifnum\latticeA=1 \ifnum\latticeB=-1 %
-\else \drop{\circ}\fi\else
-\ifnum\latticeA=0 \ifnum\latticeB=1\else
-\drop{\circ}\fi\else\drop{\circ}\fi\fi}
-\xy +(2,2)="o",0*\xybox{%
- 0;<3pc,1.5mm>:<0.72pc,1.65pc>::,{"o"
- \croplattice{-4}4{-4}4{-2.6}{2.6}{-3}3}
- ,"o"+(0,1)="a"*{\bullet}*+!D{\alpha}
- ,"o"+(1,-1)="b"*{\bullet}*+!L{\beta}
- ,"o"+(0,-1)="c","o"+(-1,1)="d"
- ,"a"."c"="e",!DR*{};"a"**\dir{.}
- ,"e",!UL*{};"c"**\dir{.}
- ,"b"."d"="f",!DL*{};"b"**\dir{.}
- ,"f",!UR*{};"d"**\dir{.}
- ,"e"."f"*\frm{.}}="L","o"."L"="L"
- ,{"L"+L \ar "L"+R*+!L{s^{(1)}}}
- ,{"L"+D \ar "L"+U*+!D{s^{(2)}}}
-\endxy
-\end{code}
-$$\docode$$
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The routines |\xylattice| and |\croplattice| simply cycle through the
-allowable range of values for |\lattice@A| and |\lattice@B|,
-with |\lattice@B| varying within the inner loop.
-
-\DOCMODE(
-\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 }
-\DOCMODE)
-
-With |\xylattice| getting the picture size correct is simply
-a matter of passing |\X@min|, |X@max|, etc. outside of the inner group.
-However with |\croplattice| these are first set to correspond to the
-`cropping rectangle' then subsequently merged with their original
-values.
-
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The |\latticebody| macro.}
-At each lattice point within the specified range for $a,b$ (and within
-the cropping rectangle when |\croplattice| is used), a macro called
-|\latticebody| is expanded. This is meant to be user-definable,
-so as to be able to adapt to any specific requirement.
-It has a default expansion given by \dots
-$$
-|\def\latticebody{\drop{\bullet}}|\,.
-$$
-The following macros may be useful when specifying what to do at each
-point of the lattice.
-%
-\begin{defs}
-|\latticebody| & expanded at lattice points \cr
-|\defaultlatticebody|\kern-20pt & \kern20pt resets to default \cr
-|\latticeA| & $a$-value of lattice point\cr
-|\latticeB| & $b$-value of lattice point\cr
-|\latticeX| & $X$-coord, offset in |pt|s\dots\cr
-|\latticeY| & $Y$-coord, \dots from lattice origin.\cr
-\end{defs}
-As in the examples presented above, the object dropped at the lattice
-point can be varied according to its location, or omitted altogether.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The default |\latticebody| macro \dots
-
-\DOCMODE(
-\xydef@\deflatticebody@{\def\latticebody{\drop{\bullet}}}
-\xydef@\defaultlatticebody{\deflatticebody@}
-\deflatticebody@
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-In the final example the |\latticebody| macro
-performs a calculation to decide which lattice points
-should be emphasised:
-%
-\begin{code}
-\def\latticebody{\dimen0=\latticeX pt
- \ifdim\dimen0>0pt \divide\dimen0 by 64
- \dimen0=\latticeY\dimen0 \relax
- \ifdim 0pt>\dimen0 \dimen0=-\dimen0 \fi
- \ifdim 10pt>\dimen0 \drop{\bullet}%
- \else\drop{.}\fi \else\drop{.}\fi}
-\xy*\xybox{0;<3pc,2.57mm>:<.83pc,2.25pc>::
-,0,{\croplattice{-3}5{-5}5
- {-1.3}{4.5}{-3.4}{4.4}}}="L"
-,{"L"+L \ar "L"+!R*+!L{\sigma^{(1)}}}
-,{"L"+D \ar "L"+!U*+!D{\sigma^{(2)}}}
-\endxy
-\end{code}
-%\displaycode
-$$\docode$$
-\displaycode
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xyweb.doc,v $
-% Revision 3.3 1996/12/18 09:52:11 ross
-% no changes
-%
-% Revision 3.1 1995/09/05 20:36:33 ross
-% Release!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/05 10:36:22 ross
-% Ready for v3 release?
-%
-% NEW for version 3.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% End:
diff --git a/Master/texmf-dist/source/generic/xypic/xyxdvi.doc b/Master/texmf-dist/source/generic/xypic/xyxdvi.doc
deleted file mode 100644
index 0a33c52cf24..00000000000
--- a/Master/texmf-dist/source/generic/xypic/xyxdvi.doc
+++ /dev/null
@@ -1,335 +0,0 @@
-%% $Id: xyxdvi.doc,v 3.3 1996/12/18 09:53:22 ross Exp $
-%%
-%% Xy-pic ``xdvi-driver'' option.
-%% Copyright (c) 1995-1996 Ross Moore <ross@mpce.mq.edu.au>
-%%
-%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
-%% See the companion README and INSTALL files for further information.
-%% Copyright (c) 1991-1996 Kristoffer H. Rose <krisrose@brics.dk>
-%%
-%% The Xy-pic package is free software; you can redistribute it and/or modify
-%% it under the terms of the GNU General Public License as published by the
-%% Free Software Foundation; either version 2 of the License, or (at your
-%% option) any later version.
-%%
-%% The Xy-pic package is distributed in the hope that it will be useful, but
-%% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-%% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-%% for more details.
-%%
-%% You should have received a copy of the GNU General Public License along
-%% with this package; if not, write to the Free Software Foundation, Inc.,
-%% 675 Mass Ave, Cambridge, MA 02139, USA.
-%%
-\ifx\xyloaded\undefined \input xy \fi
-
-\xyprovide{xdvi}{XDVI driver}{\stripRCS$Revision: 3.3 $}%
- {Ross Moore}{ross@mpce.mq.edu.au}%
- {Mathematics Department, Macquarie University, NSW~2109, Australia}
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-This driver provides support for extensions when using variants of the
-|xdvi| driver, by Eric Cooper, Bob Scheifler, Mark Eichin and others.
-It has been used successfully with |xdvi| patchlevel 20, by Paul Vojta,
-and |xdvik| version~18f, by Karl Berry.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Some of the supported features assume that the implementation of |xdvi| is
-linked to a \PS\ renderer; e.g. {\it Ghostscript} or {\sc Display \PS}.
-If such support is not available, then invoking |xdvi| using the command
-|xdvi -hushspecials| will suppress warning messages that might otherwise
-be produced.
-One drawback of such a setup is that much of the \PS\ is not
-rendered until after all of the font characters, etc. have been placed on
-the page. Thus text that was meant to be placed on top of a filled or
-patterned region may appear to be obscured by it. However when printed,
-using a \PS\ printer, the correct placement is obtained.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\paragraph*{Header:}\leavevmode
-\DOCHEADER
-
-\paragraph*{Driver installation}
-\DOCMODE(
-\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@
-}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Supported |\special| effects are...
-%
-\begin{itemize}
-
-\item colour, using \PS.
-
-Not all versions of |xdvi| support color |\special|s, so there is no direct
-support for colour. However parts of pictures rendered using \PS\ may
-appear coloured, due to interpretation of colour commands within the \PS.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-Disable the |\xylocalColor@| but enable the |\xycolor@| for use by \PS.
-
-\DOCMODE(
-\xydef@\xdvi@Color@{\xdviPStypes@
- \let\xylocalColor@=\xyNoColor@@
-% \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@\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@
- }
-\DOCMODE)
-
-If neither support file |colordvi.tex| nor |colordvi.sty| can be found,
-then the normal colour support will not be available. However the colour
-support for the \PS\ back-end can still be used.
-
-\DOCMODE(
-\xydef@\NoXDVIcolordvi@{\xywarning@{%
- Neither colordvi.tex nor colordvi.sty could be found.}%
- \xyBEcolorcheck@}%
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item crayon colours.
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The 68 colours that |xdvi| recognizes by name are not loaded unless the
-|crayon| option has been requested.
-
-\DOCMODE(
-\xydef@\xdviCrayola@@{\xdviColor@@\xdviCrayola@}
-
-\xydef@\xdviCrayola@{%
- \let\prevxycolor@=\newxycolor@
- \def\newxyXDVIcolor@##1##2##3{\prevxycolor@{##1}{}{##1}}%
- \let\newxycolor@=\newxyXDVIcolor@
- \installCrayolaColors@
- \let\newxycolor@=\prevxycolor@ }%
-\DOCMODE)
-
-Although any order of loading options: |ps|, |xdvi|, |color| and |crayon|
-produces the desired result visually, the \PS\ code can be different
-with different loading order. The most easily readable is obtained when
-|crayon| is requested last.
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item \PS\ back-end.
-\DOCMODE(
-\xydef@\xdviPS@@{\xdviPS@}
-
-\xydef@\xdviPS@unload{\UnloadPS@
- \let\UnloadPS@@=\UnloadPS@
- \let\xdviPS@@=\xdviPS@ }
-\DOCMODE)
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-The latest versions of |xdvi| recognise most forms of |\special| command
-that are recognised by |dvips|; these are used to support \PS\ effects.
-
-\DOCMODE(
-\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{! mark{#1}stopped cleartomark}}
- \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
-\DOCMODE)
-
-All the \PS\ definitions passed to |xdvi| by reading the
-dictionary file are stored in a \PS\ dictionary which it defines,
-called |SDict|. This must be the current dictionary whenever an \Xy-ps
-command is to be executed.
-This will be the case whenever the |\special{" |{\it commands}|}| or
-|\special{! |{\it commands}|}| forms are used, but not when the
-|\special{ps:: |{\it commands}|}| form is used.
-Thus the |\xdviSpecial@| macro includes code to open |SDict| and
-close it when finished; so also does the |\xdviRaw@| type, since this
-is used with \Xy-pic\ \PS\ operators whose definitions have been placed
-within |SDict|.
-
-The |currentpoint| is defined for the ``raw'' specials.
-
-\DOCMODE(
-\xydef@\xdviCurrpt@{\let\xyPScurrpt@@=\xdviCurrpt@@}%
-\xydef@\xdviCurrpt@@{\PSraw@@{xyp}}
-\DOCMODE)
-
-The \PS\ operator called |xyp| is defined in |xyps-ps| for storing the
-location read from |currentpoint|.
-
-\medskip
-
-This installs the \PS\ backend.
-
-\DOCMODE(
-\xydef@\xdviPS@{\xdviPStypes@
- \let\xdviPS@@=\PSspecials@true
- \let\UnloadPS@@=\xdviPS@unload
- \let\installxyps@@=\relax \installxyps@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item rotated/scaled diagrams and text, using \PS.
-\DOCMODE(
-\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{}}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item variable line-widths and poly-lines, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item extra frames and fills, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item patterns and tiles, using \PS.
-\DOCMODE(
-\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@ }
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\item \TPIC\ drawing commands.
-\DOCMODE(
-\xydef@\xdviTPIC@@{\xdviTPIC@}
-
-\xydef@\xdviTPIC@{\setupxyTPIC@}
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\end{itemize}
-
-\DOCMODE2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\paragraph*{The end \& Log}\leavevmode
-
-\DOCMODE(
-\xyendinput
-
-% $Log: xyxdvi.doc,v $
-% Revision 3.3 1996/12/18 09:53:22 ross
-% minor improvements to file-loading commands
-%
-% Revision 3.2 1995/09/19 18:21:41 ross
-% Bug fix release.
-%
-% Revision 3.1 1995/09/05 20:28:57 ross
-% Releasing version 3.1!
-%
-% Revision 3.0 1995/07/07 20:13:19 ross
-% Major release w/new User's Guide!
-%
-% Revision 2.13 1995/07/04 15:04:51 ross
-% Ready for release of v3.
-%
-% NEW for version 3.
-\DOCMODE)
-
-\DOCMODE3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% Tell Emacs that this is a LaTeX document and how it is formatted:
-% Local Variables:
-% mode:latex
-% fill-column:77
-% End: