diff options
author | Karl Berry <karl@freefriends.org> | 2010-06-12 00:48:49 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-06-12 00:48:49 +0000 |
commit | b7d09128d54f9b6bb737e80e906499037529904e (patch) | |
tree | 68ea16ac010aeee726f77bcec9162525feb14a7e /Master/texmf-dist/source/generic | |
parent | 457703ea12a711958a619ba5f9e665242c1dcfe7 (diff) |
xypic 3.8.1 (11jun10)
git-svn-id: svn://tug.org/texlive/trunk@18907 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/generic')
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} -\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: |