diff options
author | Karl Berry <karl@freefriends.org> | 2009-07-22 23:08:59 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2009-07-22 23:08:59 +0000 |
commit | dfeea9a4beea2a4684832f62f59d5c58d89a43b6 (patch) | |
tree | 5afa6cff3fd0cb9945e1b47bc1fb1d49f89c45f8 /Master/texmf-dist | |
parent | 3507bcf91b0217c7c689bbf7906f8dea250c9166 (diff) |
rm asymptote-by-example, renamed to ...-zh-cn
git-svn-id: svn://tug.org/texlive/trunk@14385 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
26 files changed, 0 insertions, 7338 deletions
diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/AsymptoteByExample.pdf b/Master/texmf-dist/doc/support/asymptote-by-example/AsymptoteByExample.pdf Binary files differdeleted file mode 100644 index d2244fadc10..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/AsymptoteByExample.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/README b/Master/texmf-dist/doc/support/asymptote-by-example/README deleted file mode 100644 index 9a9f8648893..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/README +++ /dev/null @@ -1,12 +0,0 @@ -Asymptote by Example is an Asymptote tutorial in Simplified Chinese by milksea at ctex.org. - -Asymptote 1.70 should be used to compile the example. - -The document is released under GPL. - -If you are interested in the process of development you may observe - - http://code.google.com/p/ctex-doc/updates/list - -Report feedback in the Issues section of ctex-doc project, -or in http://bbs.ctex.org forum. diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/license.txt b/Master/texmf-dist/doc/support/asymptote-by-example/license.txt deleted file mode 100644 index d17df37628c..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/license.txt +++ /dev/null @@ -1,716 +0,0 @@ -\chapter{GNU GENERAL PUBLIC LICENSE} -\label{chap:license} - -\begin{center} -{\parindent 0in - -Version 3, 29 June 2007 - -Copyright \copyright\ 2007 Free Software Foundation, Inc. \texttt{http://fsf.org/} - -\bigskip -Everyone is permitted to copy and distribute verbatim copies of this - -license document, but changing it is not allowed.} - -\end{center} - - -\section{Preamble} - -The GNU General Public License is a free, copyleft license for -software and other kinds of works. - -The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. 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 -them 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 prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - -For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. 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. - -Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - -For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - -Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - -Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - -The precise terms and conditions for copying, distribution and -modification follow. - - -\section{Terms and Conditions} - - -\begin{enumerate} - -\addtocounter{enumi}{-1} - -\item Definitions. - -``This License'' refers to version 3 of the GNU General Public License. - -``Copyright'' also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - -``The Program'' refers to any copyrightable work licensed under this -License. Each licensee is addressed as ``you''. ``Licensees'' and -``recipients'' may be individuals or organizations. - -To ``modify'' a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a ``modified version'' of the -earlier work or a work ``based on'' the earlier work. - -A ``covered work'' means either the unmodified Program or a work based -on the Program. - -To ``propagate'' a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - -To ``convey'' a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - -An interactive user interface displays ``Appropriate Legal Notices'' -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - -\item Source Code. - -The ``source code'' for a work means the preferred form of the work -for making modifications to it. ``Object code'' means any non-source -form of a work. - -A ``Standard Interface'' means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - -The ``System Libraries'' of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -``Major Component'', in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - -The ``Corresponding Source'' for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - -The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - -The Corresponding Source for a work in source code form is that -same work. - -\item Basic Permissions. - -All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - -You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - -Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - -\item Protecting Users' Legal Rights From Anti-Circumvention Law. - -No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - -When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - -\item Conveying Verbatim Copies. - -You may convey 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; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - -You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - -\item Conveying Modified Source Versions. - -You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - \begin{enumerate} - \item The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - \item The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - ``keep intact all notices''. - - \item You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - \item If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. -\end{enumerate} -A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -``aggregate'' if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - -\item Conveying Non-Source Forms. - -You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - \begin{enumerate} - \item Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - \item Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - \item Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - \item Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - \item Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - \end{enumerate} - -A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - -A ``User Product'' is either (1) a ``consumer product'', which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, ``normally used'' refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - -``Installation Information'' for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - -If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - -The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - -Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - -\item Additional Terms. - -``Additional permissions'' are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - -When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - -Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - \begin{enumerate} - \item Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - \item Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - \item Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - \item Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - \item Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - \item Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - \end{enumerate} - -All other non-permissive additional terms are considered ``further -restrictions'' within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - -If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - -Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - -\item Termination. - -You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - -However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - -Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - -Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - -\item Acceptance Not Required for Having Copies. - -You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - -\item Automatic Licensing of Downstream Recipients. - -Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - -An ``entity transaction'' is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - -You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - -\item Patents. - -A ``contributor'' is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's ``contributor version''. - -A contributor's ``essential patent claims'' are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, ``control'' includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - -Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - -In the following three paragraphs, a ``patent license'' is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To ``grant'' such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - -If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. ``Knowingly relying'' means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - -If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - -A patent license is ``discriminatory'' if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - -Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - -\item No Surrender of Others' Freedom. - -If 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 convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - -\item Use with the GNU Affero General Public License. - -Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - -\item Revised Versions of this License. - -The Free Software Foundation may publish revised and/or new versions of -the GNU 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 that a certain numbered version of the GNU General -Public License ``or any later version'' applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - -If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - -Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - -\item Disclaimer of Warranty. - -\begin{sloppypar} - 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. -\end{sloppypar} - -\item Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN - WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES - AND/OR CONVEYS 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. - -\item Interpretation of Sections 15 and 16. - -If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - -\end{enumerate} - - -\section{End of Terms and Conditions} - -\begin{center} -How to Apply These Terms to Your New Programs -\end{center} - -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 -state the exclusion of warranty; and each file should have at least -the ``copyright'' line and a pointer to where the full notice is found. - -{\footnotesize -\begin{verbatim} -<one line to give the program's name and a brief idea of what it does.> - -Copyright (C) <textyear> <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 3 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, see <http://www.gnu.org/licenses/>. -\end{verbatim} -} - -Also add information on how to contact you by electronic and paper mail. - -If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - -{\footnotesize -\begin{verbatim} -<program> Copyright (C) <year> <name of author> - -This program 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. -\end{verbatim} -} - -The hypothetical commands {\tt show w} and {\tt show c} should show -the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an ``about box''. - -You should also get your employer (if you work as a programmer) or -school, if any, to sign a ``copyright disclaimer'' for the program, if -necessary. For more information on this, and how to apply and follow -the GNU GPL, see \texttt{http://www.gnu.org/licenses/}. - -The GNU 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 Lesser General Public License instead of this License. But -first, please read \texttt{http://www.gnu.org/philosophy/why-not-lgpl.html}. - - -\endinput diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/CLEAN.bat b/Master/texmf-dist/doc/support/asymptote-by-example/src/CLEAN.bat deleted file mode 100755 index d206eb4691c..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/CLEAN.bat +++ /dev/null @@ -1,3 +0,0 @@ -del main-??.pdf
-del *.bak *.???~
-del *.log *.aux *.toc *.out *.ilg *.ind *.idx *.bbl *.blg
\ No newline at end of file diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/MAKEPDF.bat b/Master/texmf-dist/doc/support/asymptote-by-example/src/MAKEPDF.bat deleted file mode 100755 index 8eb57e3c541..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/MAKEPDF.bat +++ /dev/null @@ -1,8 +0,0 @@ -xelatex main
-asy main
-xelatex main
-makeindex main
-bibtex main
-xelatex main
-xelatex main
-ren main.pdf AsymptoteByExample.pdf
\ No newline at end of file diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/asy.bib b/Master/texmf-dist/doc/support/asymptote-by-example/src/asy.bib deleted file mode 100644 index 539d9a2d775..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/asy.bib +++ /dev/null @@ -1,63 +0,0 @@ -% This file was created with JabRef 2.4.2. -% Encoding: UTF8 - -@ARTICLE{quanjing, - author = {曲安京}, - title = {商高、趙爽與劉徽關於勾股定理的證明}, - journal = {數學傳播}, - year = {1998}, - volume = {20}, - number = {3}, - owner = {milksea}, - timestamp = {2009.05.14} -} - -@MANUAL{asyman, - title = {Asymptote: the Vector Graphics Language}, - author = {Andy Hammerlindl and John Bowman and Tom Prince}, - edition = {1.70}, - year = {2009}, - note = {这是 Asymptote 的官方手册。milksea 给出了文档的一个翻译,见 \url{http://code.google.com/p/asy4cn/}。}, - owner = {milksea}, - timestamp = {2009.05.13} -} - -@MANUAL{mpman, - title = {\MP: A User's Manual}, - author = {John D. Hobby and {the MetaPost development team}}, - edition = {1.005}, - month = {May}, - year = {2008}, - owner = {milksea}, - timestamp = {2009.06.16} -} - -@BOOK{knuth1986, - title = {The \MF{}book}, - publisher = {Addison Wesley}, - year = {1986}, - author = {Donald Ervin Knuth}, - volume = {C}, - series = {Computers \& Typesetting}, - owner = {milksea}, - timestamp = {2009.06.16} -} - -@MANUAL{pstricks, - title = {PSTricks: PostScript macros for Generic \TeX{}}, - author = {Timothy Van Zandt}, - edition = {97}, - month = {July}, - year = {2003}, - owner = {milksea}, - timestamp = {2009.05.19} -} - -@comment{jabref-meta: selector_publisher:} - -@comment{jabref-meta: selector_author:} - -@comment{jabref-meta: selector_journal:} - -@comment{jabref-meta: selector_keywords:} - diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/asymptote.sty b/Master/texmf-dist/doc/support/asymptote-by-example/src/asymptote.sty deleted file mode 100644 index c16f1be1fbd..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/asymptote.sty +++ /dev/null @@ -1,268 +0,0 @@ -%%% Asymptote style file for LaTeX -%%% Contributed by Tom Prince 14 May 2003 -%%% Modified by John Bowman -%%% Adapted from comment.sty (Under GPL v2) - -% again modified by milksea - -\ProvidesPackage{asymptote}[2009/05/12 v1.06 Asymptote style file for LaTeX, modified by milksea] -\RequirePackage{keyval} -\RequirePackage{ifthen} -\RequirePackage{ifpdf} -\RequirePackage{ifxetex} -\newif\ifASYinline -\DeclareOption{inline}{\ASYinlinetrue} -\ProcessOptions* - -% Work around jobname bug in MiKTeX 2.5 and 2.6: -% Turn stars in file names (resulting from spaces, etc.) into minus signs -\def\fixstar#1*#2\relax{\def\argtwo{#2}\ifx\argtwo\empty\gdef\Jobname{#1}\else -\fixstar#1-#2\relax\fi} -\expandafter\fixstar\jobname*\relax - -\RequirePackage{color,graphicx} - -\def\makeinnocent#1{\catcode`#1=12 } -\def\csarg#1#2{\expandafter#1\csname#2\endcsname} -\newwrite\AsyStream -\newread\AsyTestStream -\newread\AsyTestTeXStream -\def\AsyFile{\jobname.asy} - -\openin\AsyTestStream=\jobname_.pre -\ifeof\AsyTestStream -\else -\input \jobname_.pre -\fi -\closein\AsyTestStream% - -\immediate\openout\AsyStream=\AsyFile -\immediate\write\AsyStream{if(!settings.multipleView)}% -\immediate\write\AsyStream{ settings.batchView=false;}% - -\newif\ifASYattach -\newif\ifASYtex - -\newif\ifASYPDF -\ifpdf - \ASYPDFtrue - \immediate\write\AsyStream{settings.tex="pdflatex";}% -\fi -\ifxetex - \ASYPDFtrue - \immediate\write\AsyStream{settings.tex="xelatex";}% -\fi - -\ifASYinline -\immediate\write\AsyStream{settings.inlinetex=true;}% -\immediate\write\AsyStream{deletepreamble();}% -\fi - -\newbox\ASYbox -\newcounter{asy} - -\def\ProcessAsymptote#1% start it all off -{\begingroup - \def\CurrentAsymptote{#1}% - \let\do\makeinnocent \dospecials - \makeinnocent\^^L% and whatever other special cases - \endlinechar`\^^M \catcode`\^^M=12 \xAsymptote} -{\catcode`\^^M=12 \endlinechar=-1 % - \gdef\xAsymptote{% - \expandafter\ProcessAsymptoteLine} - \gdef\ProcessAsymptoteLine#1^^M{\def\test{#1} - \csarg\ifx{End\CurrentAsymptote Test}\test - \edef\next{\noexpand\EndOfAsymptote{\CurrentAsymptote}}% - \else \ThisAsymptote{#1}\let\next\ProcessAsymptoteLine - \fi \next} -} - -\def\ASYstringmeaning#1{\expandafter\ASYgobblearrow\meaning#1} -\def\ASYstringcsnoescape#1{\expandafter\ASYgobbleescape\string#1} -{\escapechar-1 - \expandafter\expandafter\expandafter\gdef - \expandafter\expandafter\expandafter\ASYgobblearrow - \expandafter\string\csname macro:->\endcsname{} -} -\def\ASYgobbleescape#1{\ifnum`\\=`#1 \else #1\fi} - -\def\WriteAsyLine#1{\def\ASYtmp{#1}% - \immediate\write\AsyStream{\ASYstringmeaning\ASYtmp}} - -\def\gedefappend#1#2{% - \toks@ = \expandafter{#1}% - \global\edef#1{\the\toks@ #2}% -}% -\def\globalASYdefs{} -\def\WriteGlobalAsyLine#1{\def\ASYtmp{#1^^J}% -\gedefappend\globalASYdefs{\ASYstringmeaning\ASYtmp}} - -\def\EndOfAsymptote#1{\endgroup\end{#1}% - \csname After#1Asymptote\endcsname} -\def\AsymptoteEndDef#1{{\escapechar=-1\relax - \csarg\xdef{End#1Test}{\string\\end\string\{#1\string\}}% - }} - -\def\AfterasyAsymptote{% - \ifx\ASYwidth\empty - \ifx\ASYheight\empty - \else - \immediate\write\AsyStream{size(0,\ASYheight);}% - \fi - \else - \ifx\ASYheight\empty - \immediate\write\AsyStream{size(\ASYwidth,0);}% - \else - \immediate\write\AsyStream{size(\ASYwidth,\ASYheight);}% - \fi - \fi - \ASYtexfalse - \ifASYattach - \def\ASYdefaultviewportwidth{0} - \else - \def\ASYdefaultviewportwidth{\the\linewidth} - \ifASYinline - \ASYtextrue - \fi - \fi - \ifx\ASYviewportwidth\empty - \ifx\ASYviewportheight\empty - \else - \immediate\write\AsyStream{viewportsize=(0,\ASYviewportheight);}% - \fi - \else - \ifx\ASYviewportheight\empty - \immediate\write\AsyStream{viewportsize=(\ASYviewportwidth,0);}% - \else - \immediate\write% - \AsyStream{viewportsize=(\ASYviewportwidth,\ASYviewportheight);}% - \fi - \fi - \gdef\ASYwidth{} - \gdef\ASYheight{} - \gdef\ASYviewportwidth{\ASYdefaultviewportwidth} - \gdef\ASYviewportheight{} - \immediate\write\AsyStream{\@charrb);}% - \immediate\write\AsyStream{// End of Asymptote Figure \the\c@asy}% - \ifASYtex - \openin\AsyTestStream=\Jobname-\the\c@asy_.tex - \else - \ifASYPDF - \openin\AsyTestStream=\Jobname-\the\c@asy.pdf - \else - \openin\AsyTestStream=\Jobname-\the\c@asy.eps - \fi - \fi - \ifeof\AsyTestStream - \ifASYtex - \PackageWarning{asymptote}{file \Jobname-\the\c@asy_.tex does not exist}% - \else - \openin\AsyTestTeXStream=\Jobname-\the\c@asy_.tex - \ifeof\AsyTestTeXStream - \ifASYPDF - \PackageWarning{asymptote}{file \Jobname-\the\c@asy.pdf does not exist}% - \else - \PackageWarning{asymptote}{file \Jobname-\the\c@asy.eps does not exist}% - \fi - \else - \catcode`:=12 - \input \Jobname-\the\c@asy_.tex% - \fi - \closein\AsyTestTeXStream% - \fi - \closein\AsyTestStream% - \else - \closein\AsyTestStream% - \ifASYtex - \catcode`:=12 - \input \Jobname-\the\c@asy_.tex% - \else - \ifASYattach - \ifASYPDF - \openin\AsyTestStream=\Jobname-\the\c@asy-0.pdf - \fi - \ifeof\AsyTestStream - \setbox\ASYbox=\hbox{\includegraphics{\Jobname-\the\c@asy}}% - \else - \setbox\ASYbox=\hbox{\includegraphics{\Jobname-\the\c@asy-0}}% - \fi - \textattachfile{\Jobname-\the\c@asy.pdf}{\phantom{\copy\ASYbox}}% - \vskip-\ht\ASYbox% - \indent% - \box\ASYbox% - \closein\AsyTestStream% - \else - \includegraphics{\Jobname-\the\c@asy}% - \fi - \fi - \fi - \global\ASYattachfalse - \relax% - \endgroup} -\gdef\ASYwidth{}% -\define@key{ASYkeys}{width}{% - \gdef\ASYwidth{#1}% -} -\gdef\ASYheight{}% -\define@key{ASYkeys}{height}{% - \gdef\ASYheight{#1}% -} -\gdef\ASYviewportwidth{\ASYdefaultviewportwidth}% -\define@key{ASYkeys}{viewportwidth}{% - \gdef\ASYviewportwidth{#1}% -} -\gdef\ASYviewportheight{}% -\define@key{ASYkeys}{viewportheight}{% - \gdef\ASYviewportheight{#1}% -} -\define@key{ASYkeys}{attach}[true]{% - \ifthenelse{\equal{#1}{true}}{\global\ASYattachtrue}{\global\ASYattachfalse}% -} -\newcommand\asy[1][]{% - \begingroup - \let\par\empty - \stepcounter{asy}% - \setkeys{ASYkeys}{#1}% - \immediate\write\AsyStream{}% - \immediate\write\AsyStream{// Beginning of Asymptote Figure \the\c@asy}% - \immediate\write\AsyStream{eval(quote\@charlb}% - \immediate\write\AsyStream{defaultfilename='\Jobname-\the\c@asy';}% - \immediate\write\AsyStream{if(settings.render < 0) settings.render=4;}% - \ifASYattach - \immediate\write\AsyStream{settings.inlineimage=false;}% - \immediate\write\AsyStream{settings.embed=false;}% - \immediate\write\AsyStream{settings.outformat='pdf';}% - \immediate\write\AsyStream{settings.toolbar=true;}% - \else - \immediate\write\AsyStream{settings.inlineimage=true;}% - \immediate\write\AsyStream{settings.embed=true;}% - \immediate\write\AsyStream{settings.outformat='';}% - \immediate\write\AsyStream{settings.toolbar=false;}% - \fi - \immediate\write\AsyStream{\globalASYdefs}% - \let\ThisAsymptote\WriteAsyLine% - \ProcessAsymptote{asy}% -} -\AsymptoteEndDef{asy} -\def\asydef{% - \let\ThisAsymptote\WriteGlobalAsyLine% - \ProcessAsymptote{asydef}} -\AsymptoteEndDef{asydef} -\def\AfterasydefAsymptote{} - -\AtEndDocument{\immediate\closeout\AsyStream} - -\newcommand{\ASYanimategraphics}[5][]{% -\openin\AsyTestStream=_#3.pdf -\ifeof\AsyTestStream% -\else% -\animategraphics[{#1}]{#2}{_#3}{#4}{#5}% -\fi% -} - -\def\Asymptote{{\tt Asymptote}} - -%%% Local Variables: -%%% mode: latex -%%% TeX-master: "shared" -%%% End: diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/asysyntex.sty b/Master/texmf-dist/doc/support/asymptote-by-example/src/asysyntex.sty deleted file mode 100644 index 8571fecf4e7..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/asysyntex.sty +++ /dev/null @@ -1,304 +0,0 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{asysyntex}[2008/06/19 v1.77] - -\RequirePackage{xcolor} -\colorlet{comment}{green!50!black} -\colorlet{string}{blue!50!black} -\colorlet{background}{olive!25} - -\RequirePackage{listings} - -% 语言定义 -% keywords 对应 asy-keyword-name -% keywords=[2] 对应 asy-type-name -% keywords=[3] 对应 asy-function-name -% keywords=[4] 对应 asy-variable-name -\lstdefinelanguage{Asymptote}{alsoletter={}, - sensitive=true,% - keywords={and, controls, tension, atleast, curl, if, else, while, for, do, - return, break, continue, struct, typedef, new, access, import, unravel, - from, include, quote, static, public, private, restricted, this, explicit, - true, false, null, cycle, newframe, operator}, - keywords=[2]{Braid, FitResult, Label, Legend, Rmf, TreeNode, abscissa, arc, - arrowhead, binarytree, binarytreeNode, block, bool, bool3, bounds, bqe, - circle, conic, coord, coordsys, cputime, ellipse, file, filltype, frame, - grid3, guide, horner, hsv, hyperbola, indexedTransform, int, inversion, - key, line, linefit, marginT, marker, mass, object, pair, parabola, path, - path3, pen, picture, point, position, projection, real, revolution, scaleT, - scientific, segment, side, slice, splitface, string, surface, - tensionSpecifier, ticklocate, ticksgridT, tickvalues, transform, - transformation, tree, triangle, trilinear, triple, vector, vertex, void}, - keywords=[3]{AND, Arc, ArcArrow, ArcArrows, Arrow, Arrows, Automatic, - AvantGarde, BBox, BWRainbow, BWRainbow2, Bar, Bars, BeginArcArrow, - BeginArrow, BeginBar, BeginDotMargin, BeginMargin, BeginPenMargin, Blank, - Bookman, Bottom, BottomTop, Bounds, Break, Broken, BrokenLog, Ceil, Circle, - CircleBarIntervalMarker, Cos, Courier, CrossIntervalMarker, DefaultFormat, - DefaultLogFormat, Degrees, Dir, DotMargin, DotMargins, Dotted, Draw, - Drawline, Embed, EndArcArrow, EndArrow, EndBar, EndDotMargin, EndMargin, - EndPenMargin, Fill, FillDraw, Floor, Format, Full, Gaussian, Gaussrand, - Gaussrandpair, Gradient, Grayscale, Helvetica, Hermite, HookHead, - InOutTicks, InTicks, J, Label, Landscape, Left, LeftRight, LeftTicks, - Legend, Linear, Link, Log, LogFormat, Margin, Margins, Mark, MidArcArrow, - MidArrow, NOT, NewCenturySchoolBook, NoBox, NoMargin, NoModifier, NoTicks, - NoTicks3, NoZero, NoZeroFormat, None, OR, OmitFormat, OmitTick, OutTicks, - Ox, Oy, Palatino, PaletteTicks, Pen, PenMargin, PenMargins, Pentype, - Portrait, RadialShade, Rainbow, Range, Relative, Right, RightTicks, Rotate, - Round, SQR, Scale, ScaleX, ScaleY, ScaleZ, Seascape, Shift, Sin, Slant, - Spline, StickIntervalMarker, Straight, Symbol, Tan, TeXify, Ticks, Ticks3, - TildeIntervalMarker, TimesRoman, Top, TrueMargin, UnFill, UpsideDown, - Wheel, X, XEquals, XOR, XY, XYEquals, XYZero, XYgrid, XZEquals, XZZero, - XZero, XZgrid, Y, YEquals, YXgrid, YZ, YZEquals, YZZero, YZero, YZgrid, Z, - ZX, ZXgrid, ZYgrid, ZapfChancery, ZapfDingbats, _cputime, _draw, _eval, - _image, _labelpath, _strokepath, _texpath, aCos, aSin, aTan, abort, abs, - accel, acos, acosh, acot, acsc, add, addArrow, addMargins, addSaveFunction, - addnode, addnodes, addpenarc, addpenline, addseg, adjust, alias, align, - all, altitude, angabscissa, angle, angpoint, animate, annotate, - anticomplementary, antipedal, apply, approximate, arc, arcarrowsize, - arccircle, arcdir, arcfromcenter, arcfromfocus, arclength, arcnodesnumber, - arcpoint, arcsubtended, arcsubtendedcenter, arctime, arctopath, array, - arrow, arrow2, arrowbase, arrowbasepoints, arrowsize, asec, asin, asinh, - ask, assert, asy, asycode, asydir, asyfigure, asyfilecode, asyinclude, - asywrite, atan, atan2, atanh, atbreakpoint, atexit, atime, attach, attract, - atupdate, autoformat, autoscale, autoscale3, axes, axes3, axialshade, axis, - axiscoverage, azimuth, babel, background, bangles, bar, barmarksize, - barsize, basealign, baseline, bbox, beep, begin, beginclip, begingroup, - beginpoint, between, bevel, bezier, bezierP, bezierPP, bezierPPP, bezulate, - bibliography, bibliographystyle, binarytree, binarytreeNode, binomial, - binput, bins, bisector, bisectorpoint, bispline, blend, boutput, box, bqe, - breakpoint, breakpoints, brick, buildRestoreDefaults, buildRestoreThunk, - buildcycle, bulletcolor, canonical, canonicalcartesiansystem, - cartesiansystem, case1, case2, case3, cbrt, cd, ceil, center, - centerToFocus, centroid, cevian, change2, changecoordsys, checkSegment, - checkconditionlength, checker, checklengths, checkposition, checktriangle, - choose, circle, circlebarframe, circlemarkradius, circlenodesnumber, - circumcenter, circumcircle, clamped, clear, clip, clipdraw, close, cmyk, - code, colatitude, collect, collinear, color, colorless, colors, colorspace, - comma, compassmark, complement, complementary, concat, concurrent, cone, - conic, conicnodesnumber, conictype, conj, connect, containmentTree, - contains, contour, contour3, controlSpecifier, convert, coordinates, - coordsys, copy, cos, cosh, cot, countIntersections, cputime, crop, - cropcode, cross, crossframe, crosshatch, crossmarksize, csc, csv, - cubicroots, curabscissa, curlSpecifier, curpoint, currentarrow, - currentexitfunction, currentmomarrow, currentpolarconicroutine, curve, cut, - cutafter, cutbefore, cyclic, cylinder, debugger, deconstruct, defaultdir, - defaultformat, defaultpen, defaultspline, defined, degenerate, degrees, - delete, deletepreamble, determinant, diagonal, diamond, diffdiv, dimension, - dir, dirSpecifier, dirtime, display, distance, divisors, do_overpaint, dot, - dotframe, dotsize, downcase, draw, drawAll, drawDoubleLine, drawFermion, - drawGhost, drawGluon, drawMomArrow, drawPhoton, drawScalar, drawVertex, - drawVertexBox, drawVertexBoxO, drawVertexBoxX, drawVertexO, drawVertexOX, - drawVertexTriangle, drawVertexTriangleO, drawVertexX, drawarrow, - drawarrow2, drawline, drawtick, duplicate, elle, ellipse, - ellipsenodesnumber, embed, embed3, empty, enclose, end, endScript, endclip, - endgroup, endl, endpoint, endpoints, eof, eol, equation, equations, erase, - erf, erfc, error, errorbar, errorbars, eval, excenter, excircle, exit, - exitXasyMode, exitfunction, exp, expi, expm1, exradius, extend, extension, - extouch, fabs, factorial, fermat, fft, fhorner, figure, file, filecode, - fill, filldraw, filloutside, fillrule, filltype, find, finite, - finiteDifferenceJacobian, firstcut, firstframe, fit, fixedscaling, floor, - flush, fmdefaults, fmod, focusToCenter, font, fontcommand, fontsize, foot, - format, frac, frequency, fromCenter, fromFocus, fspline, functionshade, - gamma, generate_random_backtrace, generateticks, gergonne, getc, getint, - getpair, getreal, getstring, gettriple, gluon, gouraudshade, graph, - graphic, gray, grestore, grid, grid3, gsave, halfbox, hatch, hdiffdiv, - hermite, hex, histogram, history, hline, hprojection, hsv, hyperbola, - hyperbolanodesnumber, hyperlink, hypot, identity, image, incenter, - incentral, incircle, increasing, incrementposition, indexedTransform, - initXasyMode, initdefaults, input, inradius, insert, inside, integrate, - interactive, interior, interp, interpolate, intersect, intersection, - intersectionpoint, intersectionpoints, intersections, intouch, inverse, - inversion, invisible, is3D, isDuplicate, isogonal, isogonalconjugate, - isotomic, isotomicconjugate, isparabola, italic, item, key, kurtosis, - kurtosisexcess, label, labelaxis, labelmargin, labelpath, labels, - labeltick, labelx, labelx3, labely, labely3, labelz, labelz3, lastcut, - latex, latitude, latticeshade, layer, layout, ldexp, leastsquares, legend, - legenditem, length, lift, limits, line, linear, linecap, linejoin, - linemargin, lineskip, linetype, linewidth, link, list, lm_enorm, - lm_evaluate_default, lm_lmdif, lm_lmpar, lm_minimize, lm_print_default, - lm_print_quiet, lm_qrfac, lm_qrsolv, locale, locate, locatefile, location, - log, log10, log1p, logaxiscoverage, longitude, lookup, magnetize, makeNode, - makedraw, makepen, map, margin, markangle, markangleradius, markanglespace, - markarc, marker, markinterval, marknodes, markrightangle, markuniform, - mass, masscenter, massformat, math, max, max3, maxbound, maxcoords, - maxlength, maxratio, maxtimes, mean, medial, median, midpoint, min, min3, - minbound, minipage, minratio, mintimes, miterlimit, momArrowPath, - momarrowsize, monotonic, nativeformat, natural, needshipout, newl, newpage, - newslide, newton, newtree, nextframe, nextnormal, nextpage, nib, - nodabscissa, none, normalvideo, notaknot, numberpage, nurb, object, offset, - onpath, opacity, opposite, orientation, orig_circlenodesnumber, - orig_circlenodesnumber1, orig_draw, orig_ellipsenodesnumber, - orig_ellipsenodesnumber1, orig_hyperbolanodesnumber, - orig_parabolanodesnumber, origin, orthic, orthocentercenter, outformat, - outline, outprefix, output, overwrite, pack, pad, pairs, palette, parabola, - parabolanodesnumber, parallel, partialsum, path, path3, pattern, pause, - pdf, pedal, periodic, perp, perpendicular, perpendicularmark, phantom, - photon, piecewisestraight, point, polar, polarconicroutine, polargraph, - polygon, postcontrol, postscript, pow10, ppoint, prc, prc0, precision, - precontrol, prepend, print_random_addresses, project, projection, purge, - pwhermite, quadrant, quadraticroots, quantize, quarticroots, quotient, - radialshade, radians, radicalcenter, radicalline, radius, rand, randompath, - rd, read1, read2, read3, readline, realmult, realquarticroots, rectangle, - rectangular, rectify, reflect, relabscissa, relative, relativedistance, - reldir, relpoint, reltime, remainder, remark, removeDuplicates, rename, - replace, report, rescale, rescale2, resetdefaultpen, restore, - restoredefaults, reverse, reversevideo, rf, rfind, rgb, rgba, rgbint, rmf, - rms, rotate, rotateO, rotation, round, roundbox, roundedpath, - roundrectangle, samecoordsys, sameside, sample, save, savedefaults, - saveline, scale, scale3, scaleO, scaleT, scaleless, scientific, search, - searchtree, sec, secondaryX, secondaryY, seconds, section, sector, seek, - seekeof, segment, sequence, setpens, sgn, sgnd, sharpangle, sharpdegrees, - shift, shiftless, shipout, shipout3, show, side, simeq, simpson, sin, - single, sinh, size, size3, skewness, skip, slant, sleep, slope, slopefield, - solve, solveBVP, sort, sourceline, sphere, split, sqrt, square, srand, - standardizecoordsys, startScript, startTrembling, stdev, step, stickframe, - stickmarksize, stickmarkspace, stop, straight, straightness, string, - stripdirectory, stripextension, stripfile, strokepath, subdivide, subitem, - subpath, substr, sum, surface, symmedial, symmedian, system, tab, tableau, - tan, tangent, tangential, tangents, tanh, tell, tensionSpecifier, - tensorshade, tex, texcolor, texify, texpath, texpreamble, texreset, - texshipout, texsize, textpath, thick, thin, tick, tickMax, tickMax3, - tickMin, tickMin3, ticklabelshift, ticklocate, tildeframe, tildemarksize, - tile, tiling, time, times, title, titlepage, topbox, transform, - transformation, transpose, tremble, trembleFuzz, tremble_circlenodesnumber, - tremble_circlenodesnumber1, tremble_draw, tremble_ellipsenodesnumber, - tremble_ellipsenodesnumber1, tremble_hyperbolanodesnumber, - tremble_marknodes, tremble_markuniform, tremble_parabolanodesnumber, - triangle, triangleAbc, triangleabc, triangulate, tricoef, tridiagonal, - trilinear, trim, trueMagnetize, truepoint, tube, uncycle, unfill, uniform, - unit, unitrand, unitsize, unityroot, unstraighten, upcase, updatefunction, - upscale, uptodate, usepackage, usersetting, usetypescript, usleep, value, - variance, variancebiased, vbox, vector, vectorfield, verbatim, view, vline, - vprojection, windingnumber, word, write, xaxis, xaxis3, xaxis3At, xaxisAt, - xequals, xinput, xlimits, xoutput, xpart, xscale, xscaleO, xtick, xtick3, - xtrans, yaxis, yaxis3, yaxis3At, yaxisAt, yequals, ylimits, ypart, yscale, - yscaleO, ytick, ytick3, ytrans, zaxis3, zaxis3At, zero, zero3, zlimits, - zpart, ztick, ztick3, ztrans}, - keywords=[4]{AliceBlue, Align, Allow, AntiqueWhite, Apricot, Aqua, - Aquamarine, Aspect, Azure, BeginPoint, Beige, Bisque, Bittersweet, Black, - BlanchedAlmond, Blue, BlueGreen, BlueViolet, Both, Break, BrickRed, Brown, - BurlyWood, BurntOrange, CCW, CW, CadetBlue, CarnationPink, Center, - Centered, Cerulean, Chartreuse, Chocolate, Coral, CornflowerBlue, Cornsilk, - Crimson, Crop, Cyan, Dandelion, DarkBlue, DarkCyan, DarkGoldenrod, - DarkGray, DarkGreen, DarkKhaki, DarkMagenta, DarkOliveGreen, DarkOrange, - DarkOrchid, DarkRed, DarkSalmon, DarkSeaGreen, DarkSlateBlue, - DarkSlateGray, DarkTurquoise, DarkViolet, DeepPink, DeepSkyBlue, - DefaultHead, DimGray, DodgerBlue, Dotted, Draw, E, ENE, EPS, ESE, Emerald, - EndPoint, Euler, Fill, FillDraw, FireBrick, FloralWhite, ForestGreen, - Fuchsia, Gainsboro, GhostWhite, Gold, Goldenrod, Gray, Green, GreenYellow, - Honeydew, HookHead, Horizontal, HotPink, I, IgnoreAspect, IndianRed, - Indigo, Ivory, JOIN_IN, JOIN_OUT, JungleGreen, Khaki, LM_DWARF, LM_MACHEP, - LM_SQRT_DWARF, LM_SQRT_GIANT, LM_USERTOL, Label, Lavender, LavenderBlush, - LawnGreen, LeftJustified, LeftSide, LemonChiffon, LightBlue, LightCoral, - LightCyan, LightGoldenrodYellow, LightGreen, LightGrey, LightPink, - LightSalmon, LightSeaGreen, LightSkyBlue, LightSlateGray, LightSteelBlue, - LightYellow, Lime, LimeGreen, Linear, Linen, Log, Logarithmic, Magenta, - Mahogany, Mark, MarkFill, Maroon, Max, MediumAquamarine, MediumBlue, - MediumOrchid, MediumPurple, MediumSeaGreen, MediumSlateBlue, - MediumSpringGreen, MediumTurquoise, MediumVioletRed, Melon, MidPoint, - MidnightBlue, Min, MintCream, MistyRose, Moccasin, Move, MoveQuiet, - Mulberry, N, NE, NNE, NNW, NW, NavajoWhite, Navy, NavyBlue, NoAlign, - NoCrop, NoFill, NoSide, OldLace, Olive, OliveDrab, OliveGreen, Orange, - OrangeRed, Orchid, Ox, Oy, PC, PaleGoldenrod, PaleGreen, PaleTurquoise, - PaleVioletRed, PapayaWhip, Peach, PeachPuff, Periwinkle, Peru, PineGreen, - Pink, Plum, PowderBlue, ProcessBlue, Purple, RK2, RK3, RK3BS, RK4, RK5CK, - RK5DP, RK5F, RawSienna, Red, RedOrange, RedViolet, Rhodamine, - RightJustified, RightSide, RosyBrown, RoyalBlue, RoyalPurple, RubineRed, S, - SE, SSE, SSW, SW, SaddleBrown, Salmon, SandyBrown, SeaGreen, Seashell, - Sepia, Sienna, Silver, SimpleHead, SkyBlue, SlateBlue, SlateGray, Snow, - SpringGreen, SteelBlue, Suppress, SuppressQuiet, Tan, TeXHead, Teal, - TealBlue, Thistle, Ticksize, Tomato, Turquoise, UnFill, VERSION, Value, - Vertical, Violet, VioletRed, W, WNW, WSW, Wheat, White, WhiteSmoke, - WildStrawberry, XYAlign, YAlign, Yellow, YellowGreen, YellowOrange, - addpenarc, addpenline, align, allowstepping, angularsystem, animationdelay, - appendsuffix, arcarrowangle, arcarrowfactor, arrow2sizelimit, arrowangle, - arrowbarb, arrowdir, arrowfactor, arrowhookfactor, arrowlength, - arrowsizelimit, arrowtexfactor, authorpen, axis, axiscoverage, - axislabelfactor, background, backgroundcolor, backgroundpen, barfactor, - barmarksizefactor, basealign, baselinetemplate, beveljoin, bigvertexpen, - bigvertexsize, black, blue, bm, bottom, bp, brown, bullet, byfoci, - byvertices, camerafactor, chartreuse, circlemarkradiusfactor, - circlenodesnumberfactor, circleprecision, circlescale, cm, codefile, - codepen, codeskip, colorPen, coloredNodes, coloredSegments, - conditionlength, conicnodesfactor, count, cputimeformat, - crossmarksizefactor, currentcoordsys, currentpatterns, currentpen, - currentpicture, currentposition, currentprojection, curvilinearsystem, - cuttings, cyan, darkblue, darkbrown, darkcyan, darkgray, darkgreen, - darkgrey, darkmagenta, darkolive, darkred, dashdotted, dashed, datepen, - dateskip, debuggerlines, debugging, deepblue, deepcyan, deepgray, - deepgreen, deepgrey, deepmagenta, deepred, default, defaultControl, - defaultS, defaultbackpen, defaultcoordsys, defaultfilename, defaultformat, - defaultmassformat, defaultpen, diagnostics, differentlengths, dot, - dotfactor, dotframe, dotted, doublelinepen, doublelinespacing, down, - duplicateFuzz, ellipsenodesnumberfactor, eps, epsgeo, epsilon, evenodd, - extendcap, fermionpen, figureborder, figuremattpen, firstnode, firststep, - foregroundcolor, fuchsia, fuzz, gapfactor, ghostpen, gluonamplitude, - gluonpen, gluonratio, gray, green, grey, hatchepsilon, havepagenumber, - heavyblue, heavycyan, heavygray, heavygreen, heavygrey, heavymagenta, - heavyred, hline, hwratio, hyperbolanodesnumberfactor, identity4, ignore, - inXasyMode, inch, inches, includegraphicscommand, inf, infinity, - institutionpen, intMax, intMin, invert, invisible, itempen, itemskip, - itemstep, labelmargin, landscape, lastnode, left, legendhskip, - legendlinelength, legendmargin, legendmarkersize, legendmaxrelativewidth, - legendvskip, lightblue, lightcyan, lightgray, lightgreen, lightgrey, - lightmagenta, lightolive, lightred, lightyellow, linemargin, lm_infmsg, - lm_shortmsg, longdashdotted, longdashed, magenta, magneticPoints, - magneticRadius, mantissaBits, markangleradius, markangleradiusfactor, - markanglespace, markanglespacefactor, mediumblue, mediumcyan, mediumgray, - mediumgreen, mediumgrey, mediummagenta, mediumred, mediumyellow, middle, - minDistDefault, minblockheight, minblockwidth, mincirclediameter, - minipagemargin, minipagewidth, minvertexangle, miterjoin, mm, - momarrowfactor, momarrowlength, momarrowmargin, momarrowoffset, - momarrowpen, monoPen, morepoints, nCircle, newbulletcolor, ngraph, nil, - nmesh, nobasealign, nodeMarginDefault, nodesystem, nomarker, nopoint, - noprimary, nullpath, nullpen, numarray, ocgindex, oldbulletcolor, olive, - orange, origin, overpaint, page, pageheight, pagemargin, pagenumberalign, - pagenumberpen, pagenumberposition, pagewidth, paleblue, palecyan, palegray, - palegreen, palegrey, palemagenta, palered, paleyellow, - parabolanodesnumberfactor, perpfactor, phi, photonamplitude, photonpen, - photonratio, pi, pink, plain, plus, preamblenodes, pt, purple, r3, r4a, - r4b, randMax, realDigits, realEpsilon, realMax, realMin, red, - relativesystem, reverse, right, roundcap, roundjoin, royalblue, salmon, - saveFunctions, scalarpen, sequencereal, settings, shipped, - signedtrailingzero, solid, springgreen, sqrtEpsilon, squarecap, squarepen, - startposition, stdin, stdout, stepfactor, stepfraction, steppagenumberpen, - stepping, stickframe, stickmarksizefactor, stickmarkspacefactor, textpen, - ticksize, tildeframe, tildemarksizefactor, tinv, titlealign, titlepagepen, - titlepageposition, titlepen, titleskip, top, trailingzero, treeLevelStep, - treeMinNodeWidth, treeNodeStep, trembleAngle, trembleFrequency, - trembleRandom, tremblingMode, undefined, unitcircle, unitsquare, up, - urlpen, urlskip, version, vertexpen, vertexsize, viewportmargin, - viewportsize, vline, white, wye, xformStack, yellow, ylabelwidth, - zerotickfuzz, zerowinding}, - morecomment=[l]{//},% 注释 - morecomment=[s]{/*}{*/},% 注释 - morestring=[b]",% 字符串 - morestring=[b]',% 字符串 -} -% 定义别名 -\lstalias{asy}{Asymptote} -\lstset{% - language=asy, - escapechar=`, - columns=fixed, - basewidth=0.55em, - basicstyle={\ttfamily}, - keywordstyle={\bfseries}, - keywordstyle=[2]{\bfseries}, - keywordstyle=[3]{}, - keywordstyle=[4]{}, - commentstyle={\color{comment}}, - stringstyle={\color{string}}, - xleftmargin={2em}, - xrightmargin={2em}, - tabsize=8, - backgroundcolor={\color{background}}, - numberstyle=\footnotesize, - stepnumber=1, - numbersep=5pt} -% -\def\oldvert{|} % 保存字符 | 的旧定义(其 catcode 在此定义读入时已确定) -\lstMakeShortInline\| - -\endinput - -% vim:tw=77: diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/cleantmp b/Master/texmf-dist/doc/support/asymptote-by-example/src/cleantmp deleted file mode 100644 index 0c42a47a24f..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/cleantmp +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -rm main-??.pdf -rm *.bak *.???~ -rm *.log *.aux *.toc *.out *.ilg *.ind *.idx *.bbl *.blg diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/CJKmove.sty b/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/CJKmove.sty deleted file mode 100644 index e85eb526a90..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/CJKmove.sty +++ /dev/null @@ -1,120 +0,0 @@ -%# -*- coding:GBK -*- -% CJKmove.sty -% -% ƶ CJK ַʹù̶λúʹС1em bounding box -% ֱŰʱַƫƵУ -% ˺ CJK xeCJK Ч -% -% ߣmilksea - -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{CJKmove}[2008/08/10 ver 0.1] - -% frame ѡÿ CJK ַ߿鿴ַ bounding box λ -\newif\if@CJK@framed -\@CJK@framedfalse -\DeclareOption{frame}{\@CJK@framedtrue} -\DeclareOption{noframe}{\@CJK@framedfalse} -\DeclareOption*{% - \PackageWarning{CJKmove}{Unknown option \CurrentOption}% -} -\ProcessOptions - -\ifx\XeTeXinputencoding\undefined - \RequirePackage{CJK} -\else - \RequirePackage{xeCJK} -\fi - -% \CJK@symbolԭĶ -\let\CJK@symbol\CJKsymbol - -% ƶ CJK ַ -\def\CJK@moved@symbol#1{% - \leavevmode - \vbox to 1em{% - \vss - \hbox to 1em{% - \raise\CJK@movey em\hbox{\kern\CJK@movex em\CJK@symbol{#1}}\hss - }% - }% -} - -% ӿ CJK ַ -\def\CJK@framed@symbol#1{% - \bgroup - \fboxsep=0pt - \fbox{\CJK@symbol{#1}}% - \egroup -} - -% ӿƶ CJK ַ -\def\CJK@moveframed@symbol#1{% - \bgroup - \fboxsep=0pt - \fbox{\CJK@moved@symbol{#1}}% - \egroup -} - -% ݼӿѡض CJK ַ -\if@CJK@framed - \def\CJKmove{\let\CJKsymbol\CJK@moveframed@symbol} - \def\CJKnomove{\let\CJKsymbol\CJK@framed@symbol} -\else - \def\CJKmove{\let\CJKsymbol\CJK@moved@symbol} - \def\CJKnomove{\let\CJKsymbol\CJK@symbol} -\fi - -% ַͬ -\def\CJKpunctsymbol{\expandafter\CJKsymbol} - -% 趨ˮƽҺֱϵƶ룬Ϊ֣λ em -\def\setCJKmove#1#2{ - \def\CJK@movex{#1}% - \def\CJK@movey{#2}% -} -% Ĭƶ룺SimSun vertical ģʽ -\def\resetCJKmove{% - \def\CJK@movex{0}% - \def\CJK@movey{0.4}% -} - -% ʼ -\resetCJKmove -\CJKnomove - -\endinput - - -ѡ - - frame CJK ַӿ - - noframe ӿ - - -÷ - - \CJKmove CJK ַƶģʽ - - \CJKnomove CJK ַƶģʽ - - \setCJKmove <x> <y> x em y em - - \resetCJKmove ƶ룬ĬΪ 0.4em SimSun - - -ע - - ͬҪòͬƶ - - -BUG - - bounding box ƺĻDz - - -TODO - - ֲ֧ȿġɹ涨ȺͿƽƵ bounding box - diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/area.asy b/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/area.asy deleted file mode 100644 index d6234f546f1..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/area.asy +++ /dev/null @@ -1,37 +0,0 @@ -// 一段 Bezier 曲线的面积(相对 x 轴,逆时钟环绕为正)
-// 直接利用 S = ∫-y(t)*x'(t) dt 做 0 到 1 的定积分得到
-// 其中 z(t) = (x(t), y(t)) = (1-t)^3*z0 + 3t*(1-t)^2*c0 + 3t^2*(1-t)*c1 + t^3*z1
-private real area(pair z0, pair c0, pair c1, pair z1)
-{
- return (3*c1.y*(z0.x - 2*z1.x) - z0.y*(3*c1.x - 10*z0.x + z1.x)
- - 3*c0.y*(c1.x - 2*z0.x + z1.x) + (6*c1.x + z0.x - 10*z1.x)*z1.y
- + 3*c0.x*(c1.y - 2*z0.y + z1.y))/20.;
-}
-
-// 一条路径的有向面积
-// 仅当路径是闭合的时候,有正确的几何意义,此时应具有平移不变性
-real area(path[] p)
-{
- real A = 0;
- for (path g : p) {
- for (int i = 0; i < length(g); ++i) {
- pair z0 = point(g, i), z1 = point(g, i+1);
- pair c0 = postcontrol(g, i), c1 = precontrol(g, i+1);
- A += area(z0, c0, c1, z1);
- }
- }
- return A;
-}
-
-
-// 应返回 3.14xxx 和 -314.xxx,后面的位不准
-write(area(unitcircle));
-write(area(reverse(circle((-2,3), 10))));
-
-import graph;
-// 应返回 3.14159265358979 和 -314.159265358979,这里 15 位都是准确的
-write(area(Circle((0,0), 1)));
-write(area(reverse(Circle((-2,3), 10))));
-
-write(area(Circle((0,0), 1, 16)));
-write(nCircle);
diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/hanoi.asy b/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/hanoi.asy deleted file mode 100644 index 8470c4ae2ef..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/hanoi.asy +++ /dev/null @@ -1,95 +0,0 @@ -struct Peg
-{
- private struct Disk
- {
- private int size;
-
- picture draw(pen p = pink+1mm)
- {
- picture pic;
- fill(pic, scale(5mm+size*7.5mm, 4mm)*box((-1/2,-1/2),(1/2,1/2)), p);
- label(pic, string(size));
- return pic;
- }
- void operator init(int size)
- {
- this.size = size;
- }
- }
-
- private Disk[] disks;
- private string name;
-
- string getname()
- {
- return name;
- }
-
- picture draw(pen p = blue+1mm)
- {
- picture pic;
- int n = disks.length;
- fill(pic, box((-2mm, -4mm),(2mm,40mm)), gray);
- fill(pic, box((-4cm, -10mm), (4cm, -4mm)), gray);
- label(pic, name, (0,-5mm), align=down);
- for (int k = 0; k < n; ++k)
- add(pic, disks[k].draw(), (0,k*5mm));
- return pic;
- }
-
- void operator init(int n, string name)
- {
- for (int k = n; k > 0; --k)
- disks.push(Disk(k));
- this.name = name;
- }
-
- static void transfer(Peg a, Peg b)
- {
- Disk disk = a.disks.pop();
- b.disks.push(disk);
- }
-}
-from Peg unravel transfer;
-
-
-import animation;
-//usepackage("animate");
-//usepackage("movie15");
-settings.tex = "pdflatex";
-
-void solvehanoi(int n)
-{
- animation ani;
- int step = 0;
- Peg A = Peg(n,"A"), B = Peg(0,"B"), C = Peg(0,"C");
-
- picture pic;
- add(pic, A.draw().fit(), 0, align=NW);
- add(pic, B.draw().fit(), 0, align=NE);
- add(pic, C.draw().fit(), 0, align=S);
- ani.add(pic);
- void solve(Peg src, Peg dest, Peg mid, int k)
- {
- if (k != 0) {
- solve(src, mid, dest, k-1);
-
- transfer(src, dest);
- ++step;
- write(format("%3d: ", step)
- + src.getname() + " -> " + dest.getname());
- picture pic;
- add(pic, A.draw().fit(), 0, align=NW);
- add(pic, B.draw().fit(), 0, align=NE);
- add(pic, C.draw().fit(), 0, align=S);
- ani.add(pic);
-
- solve(mid, dest, src, k-1);
- }
- }
- solve(A, B, C, n);
- //label(ani.pdf(delay=500));
- ani.movie(delay=500);
-}
-
-solvehanoi(2);
diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/hyper.asy b/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/hyper.asy deleted file mode 100644 index d61a5183c51..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/hyper.asy +++ /dev/null @@ -1,54 +0,0 @@ -real r = 5cm;
-
-draw(circle(0,r), black+1);
-dot(0);
-
-path hyperline(pair origin, real r, real deg1, real deg2, bool iscycle=false)
-{
- deg1 %= 360;
- deg2 %= 360;
- bool isCCW;
- if (abs(deg1-deg2) == 180) {
- if (iscycle)
- return shift(origin) * (arc(0, r*dir(deg1), r*dir(deg2)) -- cycle);
- else
- return shift(origin) * (r*dir(deg1) -- r*dir(deg2));
- }
- if (deg1 > deg2) {
- if (deg1-deg2 > 180) {
- deg1 -= 360;
- isCCW = true;
- }
- else
- isCCW = false;
- }
- else {
- if (deg2-deg1 > 180) {
- deg2 -= 360;
- isCCW = false;
- }
- else
- isCCW = true;
- }
-
- real delta = isCCW ? deg2-deg1 : deg1-deg2;
- pair z1 = r * dir(deg1), z2 = r * dir(deg2);
- real rad = r/Cos(delta/2);
- pair c = rad * dir((deg1+deg2)/2);
- if (iscycle)
- return shift(origin) *
- (arc(c, z1, z2, !isCCW) & arc(0, z2, z1, !isCCW)) -- cycle;
- else
- return shift(origin) * arc(c, z1, z2, !isCCW);
-}
-
-path[] g1, g2;
-for (real t = 30; t <= 180; t += 30) {
- for (real angle = 0; angle < 360; angle += 30) {
- g1.push(hyperline(0, r, angle, angle+t, true));
- g2.push(hyperline(0, r, angle, angle+t, false));
- }
-}
-fill(g1, evenodd);
-draw(g2, orange+0.6);
-shipout(bbox(Fill(white)));
diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/movie15.sty b/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/movie15.sty deleted file mode 100644 index fa3ac0aa929..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/movie15.sty +++ /dev/null @@ -1,4259 +0,0 @@ -% Copyright 2004--2008 Alexander Grahn -% -% This material is subject to the LaTeX Project Public License. See -% http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html -% for the details of that license. -% -% This package allows inclusion of multimedia content into PDF files -% following Adobe's PDF-1.5 and 1.6 specifications. -% - -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{movie15}[2008/10/08] -\RequirePackage{keyval} -\RequirePackage{ifthen} -\RequirePackage{ifpdf} -\RequirePackage{ifdraft} - -\newboolean{@MXV@iiiDfeat} % enable 3D features from PDF-1.6 spec? -\setboolean{@MXV@iiiDfeat}{false}% -\newboolean{@MXV@iiid} %set to true if a 3D file is being embedded -\newboolean{@MXV@draft} %according to global setting -\newboolean{@MXV@@draft} %per inclusion setting - -\ifdraft{%globally set by document class - \setboolean{@MXV@draft}{true}% -}{% - \setboolean{@MXV@draft}{false}% -}% - -%override global setting -\DeclareOption{draft}{% - \setboolean{@MXV@draft}{true}% -} -\DeclareOption{final}{% - \setboolean{@MXV@draft}{false}% -} - -\DeclareOption{3D}{% - \setboolean{@MXV@iiiDfeat}{true}% -} - -\newboolean{@MXV@dvips} -\newboolean{@MXV@dvipdfmx} -\ifpdf - \setboolean{@MXV@dvips}{true} -\else - \setboolean{@MXV@dvips}{false} -\fi -\setboolean{@MXV@dvipdfmx}{false} - -\DeclareOption{dvips}{% - \setboolean{@MXV@dvips}{true}% - \setboolean{@MXV@dvipdfmx}{false}% -} -\DeclareOption{dvipdfmx}{% - \setboolean{@MXV@dvips}{false}% - \setboolean{@MXV@dvipdfmx}{true}% -} - -\DeclareOption*{% - \PackageWarning{movie15}{Unknown option \CurrentOption} -} - -\ProcessOptions*\relax - -%testing for correct TeX version, -\ifpdf - \ifnum\pdftexversion<120 - \PackageError{movie15}{% - pdfeTeX, version >= 1.20, required - }{% - Install a more recent version! - }% - \fi -\fi - -\ifx\@undefined\pdfmdfivesum - \def\pdfmdfivesum file #1{#1} -\fi - -%for conditionals where \ifthenelse doesn't work -\gdef\@MXV@if#1{\csname if#1\endcsname}% - -\newboolean{@MXV@beamer} %set to true if beamer class has been loaded -%\newboolean{@MXV@powerdot} %the same for -\newboolean{@MXV@presentation} %used with presentation making package? -\newboolean{@MXV@hide} %contents hidden on the current slide? -\@ifclassloaded{beamer}{% - \setboolean{@MXV@beamer}{true}% - \setboolean{@MXV@presentation}{true}% -}{% - \setboolean{@MXV@beamer}{false}% - \setboolean{@MXV@presentation}{false}% -} -%\@ifclassloaded{powerdot}{% -% \setboolean{@MXV@powerdot}{true}% -% \setboolean{@MXV@presentation}{true}% -%}{% -% \setboolean{@MXV@powerdot}{false}% -% \setboolean{@MXV@presentation}{false}% -%} - -\AtBeginDocument{% - \provideboolean{Hy@colorlinks}% set by hyperref - \ifHy@colorlinks% coloured (movieref-)link text instead of link border - \gdef\@MXV@pdfborder{/Border [0 0 0]}% - \else% - \gdef\@MXV@pdfborder{}% - \fi% -} - -\RequirePackage{everyshi}% -\newcount\@MXV@page% counter for absolute page number -\EveryShipout{% - \global\advance\@MXV@page by 1% -} - -%define our own label making commands -\def\@MXV@newlabel#1#2{{% - \expandafter\xdef\csname#1\endcsname{#2}}}% - -\def\@MXV@getlabelvalue#1{% - \expandafter\ifx\csname#1\endcsname\relax% - undefined% - \else% - \csname#1\endcsname% - \fi% -}% - -%macro for writing labels to external *.aux file -\def\@MXV@labeltoaux#1#2{% - \@bsphack\protected@write\@auxout{}{% - \string\@MXV@newlabel{#1}{#2}% - \string\@MXV@newlabel{@#1@}{\@MXV@getlabelvalue{#1}}% - }\@esphack% - \ifthenelse{% - \equal{\@MXV@getlabelvalue{#1}}{undefined}\OR% - %double check that the value hasn't changed - \NOT\equal{\@MXV@getlabelvalue{#1}}{\@MXV@getlabelvalue{@#1@}}% - }{% - \ifthenelse{\isundefined{\@MXV@warning}}{% issue warning only once, at end - \gdef\@MXV@warning{}% of document - \AtEndDocument{% - \PackageWarningNoLine{movie15}{% - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\MessageBreak - @@ Rerun to get object references right! @@\MessageBreak - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}% - }% - }{}% - }{}% -}% -% -\ifpdf% - %for storing pdf object numbers (must be counters) - \newcount\@MXV@adict% - \newcount\@MXV@aadict% - % - %returns pdf page object number - \def\@MXV@pdfpageref#1{% - \expandafter\ifx\csname#1\endcsname\relax% - 0% - \else% - \expandafter\pdfpageref\csname#1\endcsname\space% - \fi% - }% -\else\if@MXV@dvipdfmx%do nothing -\else% - \PassOptionsToPackage{pdfmark}{hyperref}% -\fi\fi - -%counter for absolute number of inclusions, -%used for labelling each annotation -\newcount\@MXV@includes - -%counter for absolute number of movie players -\newcount\@MXV@players - -%counter for absolute number of movierefs -\newcount\@MXV@links - -%measuring things -%textbox -\newdimen\@MXV@width -\newdimen\@MXV@height -\newdimen\@MXV@depth -\newdimen\@MXV@totalheight -\newdimen\@MXV@@boxdepth -%for centring the textbox within display box -\newdimen\@MXV@traiselen -\newdimen\@MXV@braiselen -%for compatibility options -\newdimen\@MXV@start -\newdimen\@MXV@end - -%stores textbox given as argument to text option -\newsavebox{\@MXV@textbox} - -%some booleans we need -\newboolean{@MXV@autoplay} -\newboolean{@MXV@autostop} -\newboolean{@MXV@autoresume} -\newboolean{@MXV@autoclose} -\newboolean{@MXV@autopause} -\newboolean{@MXV@mouse}%mouse interaction -\newboolean{@MXV@inline}%inline movie data -\newboolean{@MXV@attachment}%make embedded file extractable? -\newboolean{@MXV@externalviewer}%if true, screen annot will be removed -\newboolean{@MXV@url} -\newboolean{@MXV@boxopt}%true if text option is set -\newboolean{@MXV@textoverposter} -\newboolean{@MXV@runposter}% render poster from movie at runtime -\newboolean{@MXV@linkplay}% for \movieref command -\newboolean{@MXV@linkpause} -\newboolean{@MXV@linkresume} -\newboolean{@MXV@linkstop} -\newboolean{@MXV@linkclose} -\newboolean{@MXV@linkreset} -\newboolean{@MXV@issound} - -%macro to reset all macros and booleans -\def\@MXV@reset{% - \setboolean{@MXV@autoplay}{false}% - \setboolean{@MXV@autostop}{true}% - \setboolean{@MXV@autoresume}{false}% - \setboolean{@MXV@autopause}{false}% - \setboolean{@MXV@autoclose}{false}% - \setboolean{@MXV@mouse}{false}% - \setboolean{@MXV@inline}{true}% - \setboolean{@MXV@attachment}{true}% - \setboolean{@MXV@externalviewer}{false}% - \setboolean{@MXV@issound}{false}% - \setboolean{@MXV@url}{false}% - \setboolean{@MXV@boxopt}{false}% - \setboolean{@MXV@textoverposter}{true}% - \setboolean{@MXV@runposter}{false}% - \setboolean{@MXV@linkplay}{true}% - \setboolean{@MXV@linkpause}{false}% - \setboolean{@MXV@linkresume}{false}% - \setboolean{@MXV@linkstop}{false}% - \setboolean{@MXV@linkclose}{false}% - \setboolean{@MXV@linkreset}{false}% - \setboolean{@MXV@requirereopen}{false}% - \ifthenelse{\boolean{@MXV@draft}}{% - \setboolean{@MXV@@draft}{true}% - }{% - \setboolean{@MXV@@draft}{false}% - }% - % - \gdef\@MXV@label{}% for movieref - \gdef\@MXV@@label{}% for movieref - \gdef\@MXV@mime{@MXV@auto}% - \gdef\@MXV@player{}% - \gdef\@MXV@fsentry{}% - \gdef\@MXV@repeat{}% - \gdef\@MXV@@repeat{}% - \gdef\@MXV@volume{100}% - \gdef\@MXV@@volume{}% - \gdef\@MXV@ctrls{}% - \gdef\@MXV@@ctrls{}% - \gdef\@MXV@palindrome{}% - \gdef\@MXV@rate{}% - \gdef\@MXV@startat{}% - \gdef\@MXV@@startat{}% - \gdef\@MXV@endat{}% - \gdef\@MXV@poevent{}% - \gdef\@MXV@pcevent{}% - \gdef\@MXV@box##1##2##3{\raisebox{0pt}[##2][##3]{\makebox[##1]{}}}% - \setlength{\@MXV@depth}{0pt}% - \setlength{\@MXV@height}{0pt}% - \setlength{\@MXV@width}{0pt}% - \setlength{\@MXV@braiselen}{0pt}% - \setlength{\@MXV@traiselen}{0pt}% - \gdef\@MXV@boxdepth{}% - \gdef\@MXV@boxheight{}% - \gdef\@MXV@boxwidth{}% - % - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \setboolean{@MXV@iiid}{false}% - \gdef\@MXV@aac{30}% aperture angle of camera - \gdef\@MXV@roll{0}% camera roll angle - \gdef\@MXV@background{}% - \gdef\@MXV@jscriptiiidfile{}% - \gdef\@MXV@coo{0 0 0}% centre of orbit - \gdef\@MXV@ctoc{0 -1 0}% centre of orbit to camera vector - \gdef\@MXV@roo{0}% radius of orbit - \gdef\@MXV@viewsfile{}% file containing views of the 3D object - \setboolean{@MXV@viewsprovided}{false}% - \setboolean{@MXV@defaultviewprovided}{false}% - \gdef\@MXV@iiidview{}% - \gdef\@MXV@iiidtoolb{/TB false}% don't show toolbar by default - \gdef\@MXV@iiidia{}% 3D interactive by default - \gdef\@MXV@calc{}% camera aperture for coo and roo calculation - \setboolean{@MXV@iiidgetview}{false}% - \gdef\@MXV@iiidopt{}% option string to be passed to internal macro - \setboolean{@MXV@resource}{false}% - \gdef\@MXV@resourcetree{}% name tree of embedded 3D resources - \xdef\@MXV@animstyle{}% - \gdef\@MXV@iiidpalindrome{/Subtype/Linear}% forward - \gdef\@MXV@iiidrate{}% animation speed - \global\@MXV@iiidrepeat=-1% repeat count - \gdef\@MXV@lights{}% default lighting scheme - \gdef\@MXV@render{}% default render mode scheme - }{}% -}% - -%missing package error message -\def\@MXV@missing#1{% - \PackageError{movie15}{% - Package `#1' has not been loaded yet - }{% - Put the line `\protect\usepackage{#1}' somewhere after - `\protect\usepackage{movie15}' to the preamble of your - document! - }% -} - -%3D-need-be-enabled error message -\def\@MXV@neediiiD{% - \PackageError{movie15}{% - If you wish to embed 3D objects, enable the\MessageBreak - 3D feature first by passing option `3D' to movie15!\MessageBreak - Make sure the `fp' package for fixed point calculus\MessageBreak - is installed in your TeX system - }{Package `fp' is available from CTAN.}% -} - -%macro to guess the mime type of the media file -\def\@MXV@guessmime#1#2{% - \ifthenelse{\equal{#2}{aiff}\OR\equal{#2}{AIFF}\OR% - \equal{#2}{aif}\OR\equal{#2}{AIF}\OR% - \equal{#2}{aifc}\OR\equal{#2}{AIFC}}{% - \gdef\@MXV@mime{audio/aiff}% - }{% - \ifthenelse{\equal{#2}{wav}\OR\equal{#2}{WAV}}{% - \gdef\@MXV@mime{audio/wav}% - }{% - \ifthenelse{\equal{#2}{wma}\OR\equal{#2}{WMA}}{% - \gdef\@MXV@mime{audio/x-ms-wma}% - }{% - \ifthenelse{\equal{#2}{wmv}\OR\equal{#2}{WMV}}{% - \gdef\@MXV@mime{video/x-ms-wmv}% - }{% - \ifthenelse{\equal{#2}{au}\OR\equal{#2}{AU}\OR% - \equal{#2}{snd}\OR\equal{#2}{SND}}{% - \gdef\@MXV@mime{audio/basic}% - }{% - \ifthenelse{\equal{#2}{mid}\OR\equal{#2}{MID}\OR% - \equal{#2}{rmi}\OR\equal{#2}{RMI}}{% - \gdef\@MXV@mime{audio/midi}% - }{% - \ifthenelse{\equal{#2}{mov}\OR\equal{#2}{MOV}\OR% - \equal{#2}{qt}\OR\equal{#2}{QT}}{% - \gdef\@MXV@mime{video/quicktime}% - }{% - \ifthenelse{\equal{#2}{mp3}\OR\equal{#2}{MP3}\OR% - \equal{#2}{m3u}\OR\equal{#2}{M3U}}{% - \gdef\@MXV@mime{audio/x-mp3}% - }{% - \ifthenelse{\equal{#2}{mp4}\OR\equal{#2}{MP4}}{% - \gdef\@MXV@mime{video/mp4}% - }{% - \ifthenelse{\equal{#2}{avi}\OR\equal{#2}{AVI}}{% - \gdef\@MXV@mime{video/avi}% - }{% - \ifthenelse{\equal{#2}{gif}\OR\equal{#2}{GIF}}{% - \gdef\@MXV@mime{image/gif}% - }{% - \ifthenelse{\equal{#2}{mpeg}\OR\equal{#2}{MPEG}\OR% - \equal{#2}{mpg}\OR\equal{#2}{MPG}}{% - \gdef\@MXV@mime{video/mpeg}% - }{% - \ifthenelse{\equal{#2}{smil}\OR\equal{#2}{SMIL}}{% - \gdef\@MXV@mime{application/smil}% - }{% - \ifthenelse{\equal{#2}{swf}\OR\equal{#2}{SWF}}{% - \gdef\@MXV@mime{application/x-shockwave-flash}% - }{% - \ifthenelse{\equal{#2}{prc}\OR\equal{#2}{PRC}}{% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \setboolean{@MXV@iiid}{true}% - \gdef\@MXV@mime{model/prc}% (unofficial) - \gdef\@MXV@iiidsubtype{PRC}% - }{% - \@MXV@neediiiD% - }% - }{% - \ifthenelse{\equal{#2}{u3d}\OR\equal{#2}{U3D}}{% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \setboolean{@MXV@iiid}{true}% - \gdef\@MXV@mime{model/u3d}% (unofficial) - \gdef\@MXV@iiidsubtype{U3D}% - }{% - \@MXV@neediiiD% - }% - }{% - \ifthenelse{\equal{#2}{ra}\OR\equal{#2}{RA}}{ - \gdef\@MXV@mime{audio/vnd.rn-realaudio}% - }{% - \ifthenelse{% - \equal{#2}{rv}\OR\equal{#2}{RV}\OR - \equal{#2}{rm}\OR\equal{#2}{RM}% - }{% - \gdef\@MXV@mime{application/vnd.rn-realmedia}% - }{% - \PackageError{movie15}{% - I couldn't determine MIME type of file:\MessageBreak`#1':\MessageBreak - Unknown file name extension: `#2' - }{% - When using media files of unknown type or with a\MessageBreak - non-standard file name extension, the MIME type must\MessageBreak - explicitly be specified. Try option `mimetype=<mime type>'! - }% - }}}}}}}}}}}}}}}}}}% -} - -%sets @MXV@issound boolean -\def\@MXV@@issound#1/#2:{% argument: \@MXV@mime. - \def\@MXV@firstarg{#1}% - \def\@MXV@audio{audio}% - \ifx\@MXV@firstarg\@MXV@audio% - \setboolean{@MXV@issound}{true}% - \fi% -} - -%draft box -\def\@MXV@draftbox#1#2#3#4{%width height depth filename - \edef\@MXV@oldfboxsep{\the\fboxsep}% - \setlength{\fboxsep}{-\fboxrule}% - \framebox[#1][l]{% - \vrule width 0pt height #2 depth #3% - \edef\@tempa{#4}% - \raisebox{\depth}[0pt][0pt]{ \ttfamily\expandafter\strip@prefix\meaning\@tempa}% - }% - \setlength{\fboxsep}{\@MXV@oldfboxsep}% -} - -\ifthenelse{\boolean{@MXV@iiiDfeat}}{% 3D related definitions and macros - \RequirePackage{fp}% needed for fixed point calculus - \newread\@MXV@@viewsfile% file handle for views file - \newcount\@MXV@viewscount%counter for number of 3D views per inclusion - \newboolean{@MXV@viewsprovided}%3d views file provided? - \newboolean{@MXV@iiidgetview}% print current 3D settings? - \newboolean{@MXV@defaultviewprovided}%default 3D view provided? - \newboolean{@MXV@resource}%3d resource file provided? - \ifpdf\else\newcount\@MXV@rescount\fi% number of embedded resource files - \newcount\@MXV@iiidrepeat% play count - \newcount\@MXV@iiidoncurpage%index of 3D annot on current page - \global\@MXV@iiidoncurpage=0% - \gdef\@MXV@oldpage{0}% needed together with previous counter - - %macro for building the transformation matrix - \def\@MXV@ciiwmatrix#1 #2 #3 #4 #5 #6 #7 #8 {% - % #1,#2,#3 centre of orbit coordinates (coo) - % #4,#5,#6 centre of orbit to camera direction vector (c2c) - % #7 orbital radius (roo) - % #8 camera roll (roll) - %view vector (opposite to c2c) - \FPupn\@MXV@viewx{#4 neg}% - \FPupn\@MXV@viewy{#5 neg}% - \FPupn\@MXV@viewz{#6 neg}% - %normalize view vector - \FPupn\@MXV@modulo{\@MXV@viewx{} copy mul % - \@MXV@viewy{} copy mul + % - \@MXV@viewz{} copy mul + 2 swap root% - }% - \FPupn\@MXV@viewx{\@MXV@viewx{} \@MXV@modulo{} div}% - \FPupn\@MXV@viewy{\@MXV@viewy{} \@MXV@modulo{} div}% - \FPupn\@MXV@viewz{\@MXV@viewz{} \@MXV@modulo{} div}% - %camera roll - \FPupn\@MXV@sinroll{#8 180.0 div \FPpi{} mul sin}% - \FPupn\@MXV@cosroll{#8 180.0 div \FPpi{} mul cos}% - % - %top and bottom views - \FPupn\@MXV@leftx{-1.0}% - \FPupn\@MXV@lefty{0.0}% - \FPupn\@MXV@leftz{0.0}% - % - \FPifneg\@MXV@viewz% top view - %up-vector - \FPupn\@MXV@upx{0.0}% - \FPupn\@MXV@upy{1.0}% - \FPupn\@MXV@upz{0.0}% - \else% bottom view - %up-vector - \FPupn\@MXV@upx{0.0}% - \FPupn\@MXV@upy{-1.0}% - \FPupn\@MXV@upz{0.0}% - \fi% - \FPupn\@MXV@sumxy{\@MXV@viewx{} abs \@MXV@viewy{} abs add}% - \FPifeq\@MXV@sumxy{0}\else% other views than top and bottom - %up-vector = up_world - (up_world dot view) view - \FPupn\@MXV@upx{\@MXV@viewz{} \@MXV@viewx{} mul neg}% - \FPupn\@MXV@upy{\@MXV@viewz{} \@MXV@viewy{} mul neg}% - \FPupn\@MXV@upz{\@MXV@viewz{} \@MXV@viewz{} mul neg 1.0 add}% - %normalize up-vector - \FPupn\@MXV@modulo{\@MXV@upx{} copy mul \@MXV@upy{} copy % - mul + \@MXV@upz{} copy mul + 2 swap root}% - \FPupn\@MXV@upx{\@MXV@upx{} \@MXV@modulo{} div}% - \FPupn\@MXV@upy{\@MXV@upy{} \@MXV@modulo{} div}% - \FPupn\@MXV@upz{\@MXV@upz{} \@MXV@modulo{} div}% - %left vector = up x view - \FPupn\@MXV@leftx{\@MXV@viewz{} \@MXV@upy{} mul % - \@MXV@viewy{} \@MXV@upz{} mul sub}% - \FPupn\@MXV@lefty{\@MXV@viewx{} \@MXV@upz{} mul % - \@MXV@viewz{} \@MXV@upx{} mul sub}% - \FPupn\@MXV@leftz{\@MXV@viewy{} \@MXV@upx{} mul % - \@MXV@viewx{} \@MXV@upy{} mul sub}% - %normalize left vector - \FPupn\@MXV@modulo{\@MXV@leftx{} copy mul \@MXV@lefty{} % - copy mul + \@MXV@leftz{} copy mul + 2 swap root}% - \FPupn\@MXV@leftx{\@MXV@leftx{} \@MXV@modulo{} div}% - \FPupn\@MXV@lefty{\@MXV@lefty{} \@MXV@modulo{} div}% - \FPupn\@MXV@leftz{\@MXV@leftz{} \@MXV@modulo{} div}% - \fi% - %apply camera roll - \FPupn\@MXV@leftxprime{\@MXV@leftx{} \@MXV@cosroll{} mul \@MXV@upx{} \@MXV@sinroll{} mul +}% - \FPupn\@MXV@leftyprime{\@MXV@lefty{} \@MXV@cosroll{} mul \@MXV@upy{} \@MXV@sinroll{} mul +}% - \FPupn\@MXV@leftzprime{\@MXV@leftz{} \@MXV@cosroll{} mul \@MXV@upz{} \@MXV@sinroll{} mul +}% - \FPupn\@MXV@upxprime{\@MXV@upx{} \@MXV@cosroll{} mul \@MXV@leftx{} \@MXV@sinroll{} mul sub}% - \FPupn\@MXV@upyprime{\@MXV@upy{} \@MXV@cosroll{} mul \@MXV@lefty{} \@MXV@sinroll{} mul sub}% - \FPupn\@MXV@upzprime{\@MXV@upz{} \@MXV@cosroll{} mul \@MXV@leftz{} \@MXV@sinroll{} mul sub}% - \FPupn\@MXV@leftx{\@MXV@leftxprime}% - \FPupn\@MXV@lefty{\@MXV@leftyprime}% - \FPupn\@MXV@leftz{\@MXV@leftzprime}% - \FPupn\@MXV@upx{\@MXV@upxprime}% - \FPupn\@MXV@upy{\@MXV@upyprime}% - \FPupn\@MXV@upz{\@MXV@upzprime}% - %rotation matrix - \xdef\@MXV@matrix{\@MXV@leftx\space\@MXV@lefty\space\@MXV@leftz\space% - \@MXV@upx\space\@MXV@upy\space\@MXV@upz\space% - \@MXV@viewx\space\@MXV@viewy\space\@MXV@viewz}% - %translation vector - \FPupn\@MXV@roo{#7 abs}% - \FPifeq\@MXV@roo{0}\FPupn\@MXV@roo{0.000000000000000001}\fi% - \FPupn\@MXV@transx{#1 \@MXV@roo{} \@MXV@viewx{} mul sub}% - \FPupn\@MXV@transy{#2 \@MXV@roo{} \@MXV@viewy{} mul sub}% - \FPupn\@MXV@transz{#3 \@MXV@roo{} \@MXV@viewz{} mul sub}% - %transformation matrix - \xdef\@MXV@matrix{% - \@MXV@matrix\space\@MXV@transx\space\@MXV@transy\space\@MXV@transz% - }% - } - - %macro for parsing one line of 3D views file - \newcommand{\@MXV@parseline}[6][]{% - \xdef\@MXV@xname{#1}% name of the view (optional) - \ifthenelse{\equal{#2}{}}{% - \xdef\@MXV@coo{0 0 0}% - }{% - \xdef\@MXV@coo{#2}% - }% - \ifthenelse{\equal{#3}{}}{% - \xdef\@MXV@ctoc{0 -1 0}% - }{% - \xdef\@MXV@ctoc{#3}% - }% - \ifthenelse{\equal{#4}{}}{% - \xdef\@MXV@roo{0}% - }{% - \xdef\@MXV@roo{#4}% - }% - \ifthenelse{\equal{#5}{}}{% - \xdef\@MXV@roll{0}% - }{% - \xdef\@MXV@roll{#5}% - }% - \ifthenelse{\equal{#6}{}}{% - \xdef\@MXV@aac{30}% - }{% - \xdef\@MXV@aac{#6}% - }% - } - - %macro for generating an array of 3D views (varray) - \def\@MXV@buildva{% - \global\@MXV@viewscount=0% - \xdef\@MXV@varray{}% empty varray - % - %default view - \edef\@MXV@args{\@MXV@coo\space\@MXV@ctoc\space\@MXV@roo\space\@MXV@roll\space}% - \expandafter\@MXV@ciiwmatrix\@MXV@args% build C2W matrix - \xdef\@MXV@xname{Default}% - \@MXV@viewobj% create pdf object of 3D view - \edef\@MXV@defaultview{\@MXV@@viewobj}% - % - %read out 3D views file - \IfFileExists{\@MXV@viewsfile}{% - \edef\@MXV@endlinechar{\the\endlinechar}% - \endlinechar=-1% suppress trailing space at input line end - \openin\@MXV@@viewsfile=\@MXV@viewsfile% - \loop% - \read\@MXV@@viewsfile to \@MXV@inputline% - \if\@MXV@inputline\relax\else% - \expandafter\@MXV@parseline\@MXV@inputline% - \edef\@MXV@args{\@MXV@coo\space\@MXV@ctoc\space\@MXV@roo\space\@MXV@roll\space}% - \expandafter\@MXV@ciiwmatrix\@MXV@args% build C2W matrix - \global\advance\@MXV@viewscount by 1% - \ifthenelse{\equal{\@MXV@xname}{}}{% - \xdef\@MXV@xname{View \the\@MXV@viewscount}% - }{}% - \@MXV@viewobj% create pdf object of 3D view - %append current view obj ref to VA array - \xdef\@MXV@varray{\@MXV@varray\space\@MXV@@viewobj}% - \setboolean{@MXV@viewsprovided}{true}% - \repeat% - \closein\@MXV@@viewsfile% - \endlinechar=\@MXV@endlinechar% reset endlinechar - }{}% - % - %make the first view in the VA array the default view, if no default one has - %explicitly been provided, but if the VA array itself is empty too (no - %additional views provided) use our fallback view (c2c=0 -1 0) as default - \ifthenelse{\NOT\boolean{@MXV@defaultviewprovided}% - \AND\boolean{@MXV@viewsprovided}}{% - \xdef\@MXV@defaultview{/3DV /F}% - }{% - \xdef\@MXV@defaultview{/3DV \@MXV@defaultview}% - }% - } - - %following macros, including the 3D inclusion macro have driver specific - %implementations - \ifpdf% - %pdfLaTeX versions - %macro for creating 3D view object - \def\@MXV@viewobj{% - %projection dict - \pdfobj {<</Subtype/P/FOV \@MXV@aac/PS/Min>>}% - \pdfrefobj\pdflastobj% - % - \pdfobj {<<% - /MS/M% define the view as C2W matrix - /CO \@MXV@roo% orbital radius - /P \the\pdflastobj\space 0 R% - /C2W [\@MXV@matrix]% - /XN(\@MXV@xname)% name of the view appearing in the drop down list - \@MXV@background% - \@MXV@lights% - \@MXV@render% - >>}\pdfrefobj\pdflastobj% - \xdef\@MXV@@viewobj{\the\pdflastobj\space 0 R}% - }% - - %macro for creating resource objects from 3D and image files, to be used - %in 3D JavaScript - \def\@MXV@addresource#1{% - %determine file type - \filename@parse{#1}% - \ifthenelse{% - \equal{\filename@ext}{u3d}\OR% - \equal{\filename@ext}{U3D}% - }{% - \def\@MXV@restype{U3D}% - }{% - \def\@MXV@restype{image}% - }% - \ifthenelse{\equal{\@MXV@restype}{image}}{% - %embed the same image file only once - \ifthenelse{\equal{\@MXV@getlabelvalue{\pdfmdfivesum file {#1}}}{undefined}}{% - \immediate\pdfximage {#1}% - \xdef\@MXV@resourcetree{% build name tree for embedded resources - \@MXV@resourcetree\space (#1) \the\pdflastximage\space 0 R% - }% - \@MXV@newlabel{\pdfmdfivesum file {#1}}{\the\pdflastximage}% - }{% - \xdef\@MXV@resourcetree{% - \@MXV@resourcetree\space (#1) \@MXV@getlabelvalue{\pdfmdfivesum file {#1}}\space 0 R% - }% - }% - }{% - %embed the same 3D file only once - \ifthenelse{\equal{\@MXV@getlabelvalue{\pdfmdfivesum file {#1}}}{undefined}}{% - \pdfobj stream % - attr {% - /Subtype/\@MXV@restype% - }% - file {#1}% - \pdfrefobj\pdflastobj% - \xdef\@MXV@resourcetree{% - \@MXV@resourcetree\space (#1) \the\pdflastobj\space 0 R% - }% - \@MXV@newlabel{\pdfmdfivesum file {#1}}{\the\pdflastobj}% - }{% - \xdef\@MXV@resourcetree{% - \@MXV@resourcetree\space (#1) \@MXV@getlabelvalue{\pdfmdfivesum file {#1}}\space 0 R% - }% - }% - }% - } - - %3D inclusion macro - \newcommand{\@MXV@includeiiid}[5][]{% - %insert box or poster - \@MXV@box{#2}{#3}{#4}% - % - \if@MXV@externalviewer\else% - \setkeys{MXV@iiid}{#1}%process deferred options - \ifnum\@MXV@iiidrepeat=0\else% - \edef\@MXV@animstyle{% animation style dict - /AN <<% - \@MXV@iiidpalindrome\@MXV@iiidrate/PC \the\@MXV@iiidrepeat% - >>% - }% - \fi% - %java script file, stream object - \IfFileExists{\@MXV@jscriptiiidfile}{% - \pdfobj stream file {\@MXV@jscriptiiidfile}% - \pdfrefobj\pdflastobj% - \xdef\@MXV@jscriptiiid{/OnInstantiate \the\pdflastobj\space 0 R}% - }{\xdef\@MXV@jscriptiiid{}}% - % - %build the array of 3D views - \@MXV@buildva% - \fi% - % - %3D stream object - \if@MXV@inline% - \ifthenelse{% - \NOT\boolean{@MXV@presentation}\OR% - \equal{\@MXV@getlabelvalue{\@MXV@label.3dstream}}{undefined}% - }{% - \pdfobj stream% - attr {% - /Subtype/\@MXV@iiidsubtype% - \if@MXV@externalviewer\else% - /VA [\@MXV@varray]% - /DV/F% use first entry in VA as default view - \@MXV@animstyle% - \@MXV@jscriptiiid% - \if@MXV@resource% - /Resources <<% - /Names [\@MXV@resourcetree]% - >>% - \fi% - \fi% - }% - file {#5}% - \pdfrefobj\pdflastobj% - \edef\@MXV@iiidstream{\the\pdflastobj}% - \if@MXV@presentation% - \@MXV@newlabel{\@MXV@label.3dstream}{\@MXV@iiidstream}% - \fi% - }{% - \edef\@MXV@iiidstream{\@MXV@getlabelvalue{\@MXV@label.3dstream}}% - }% - \fi% - % - \makebox[0pt][r]{\makebox[#2][l]{% - %insert FileAttachment annotation - \ifthenelse{\boolean{@MXV@inline}\AND\boolean{@MXV@externalviewer}% -% since Reader 7.0.7, we cannot place a file attachment annot behind -% the 3D annot :-( -% \OR\boolean{@MXV@attachment} - }{% - \pdfannot width #2 height #3 depth #4 {% - /Subtype /FileAttachment% - /F 0% - /T (\@MXV@filename)% - /Contents (3D Object (\@MXV@mime))% - \if@MXV@externalviewer% - /Name/Paperclip% - /C [1 1 1]% - \else% - /AP <</N<<>>/R<<>>/D<<>>>>% - \fi% - /FS <<% - /F(#5)% - /Type/Filespec% - /EF << /F \@MXV@iiidstream\space 0 R >>% - >>% - }% - }{% - \if@MXV@url% - %insert Link annotation, if 3D file is a URL - \pdfannot width #2 height #3 depth #4 {% - /Subtype /Link% - /F 0% - \if@MXV@externalviewer% - \@MXV@urlattr% - \else% - /H /N% - /Border [0 0 0]% - \fi% - /A <</URI (#5) /S/URI>>% - /Contents (3D Object (\@MXV@mime))% - }% - \else% - %else insert Launch action for local external 3D file - \if@MXV@inline\else% - \pdfannot width #2 height #3 depth #4 {% - /Subtype /Link% - /F 0% - \if@MXV@externalviewer% - \@MXV@runattr% - \else% - /H /N% - /Border [0 0 0]% - \fi% - /A <<% - /F (#5)% - /S /Launch% - >>% - /Contents (3D Object (\@MXV@mime))% - }% - \fi% - \fi% - }% - % - \if@MXV@externalviewer\else% - %appearance dict dummy, to be shared by all 3D annots - \ifthenelse{\isundefined{\@MXV@apdict}}{% - \pdfobj stream attr {/BBox [0 0 0.001 0.001]} {}\pdfrefobj\pdflastobj% - \xdef\@MXV@apdict{/AP << /N \the\pdflastobj\space 0 R >>}% - }{}% - %3D reference dict - \if@MXV@presentation% - \ifthenelse{% - \equal{\@MXV@getlabelvalue{\@MXV@label.3dref}}{undefined}% - }{% - \pdfobj {<<% - /Type/3DRef% - /3DD \@MXV@iiidstream\space 0 R% 3D stream object - >>}\pdfrefobj\pdflastobj% - \edef\@MXV@iiidstreamorref{\the\pdflastobj}% - \@MXV@newlabel{\@MXV@label.3dref}{\the\pdflastobj}% - }{% - \edef\@MXV@iiidstreamorref{\@MXV@getlabelvalue{\@MXV@label.3dref}}% - }% - \else% - \edef\@MXV@iiidstreamorref{\@MXV@iiidstream}% - \fi% - %annotation object of subtype `3D' - \pdfannot width #2 height #3 depth #4 {% - /Subtype/3D% - /F 4% we cannot put F 5 here; bug in Reader; 3D annot would be - /T (\@MXV@filename)% disabled even if plugin were available - /Contents (3D Object (\@MXV@mime))% - \ifx\@MXV@@label\@empty\else% - /NM (\@MXV@@label)% - \fi% - /P \@MXV@pdfpageref{@MXV@annot\the\@MXV@includes.page}% - \@MXV@apdict% /AP <</N<<>>/R<<>>/D<<>>>> doesn't work here - \@MXV@defaultview% - \@MXV@iiidia% - /3DD \@MXV@iiidstreamorref\space 0 R% 3D stream or reference object - /3DA << \@MXV@activation\@MXV@deactivation\@MXV@iiidtoolb >>% - }% - %label for later annot obj number determination, to be used in - %movieref's - \ifx\@MXV@@label\@empty\else% - \@MXV@labeltoaux{@MXV@\@MXV@@label.annot}{\the\pdflastannot}% - \@MXV@newlabel{@MXV@\@MXV@@label.annot}{\the\pdflastannot}% - \fi% - \fi}}% - }% - \else\if@MXV@dvipdfmx% - %dvipdfmx versions - %macro for creating 3D view object - \def\@MXV@viewobj{% - %projection dict - \special{pdf:obj @pdict\the\@MXV@includes_\the\@MXV@viewscount <<% - /Subtype/P/FOV \@MXV@aac/PS/Min% - >>}% - % - \special{pdf:obj @viewobj\the\@MXV@includes_\the\@MXV@viewscount <<% - /MS/M% define the view as C2W matrix - /CO \@MXV@roo% orbital radius - /P @pdict\the\@MXV@includes_\the\@MXV@viewscount% - /C2W [\@MXV@matrix]% - /XN(\@MXV@xname)% name of the view appearing in the drop down list - \@MXV@background% - \@MXV@lights% - \@MXV@render% - >>}% - \xdef\@MXV@@viewobj{@viewobj\the\@MXV@includes_\the\@MXV@viewscount}% - }% - - %macro for creating resource objects from 3D and image files, to be used - %in 3D JavaScript - \def\@MXV@addresource#1{% - %determine file type - \filename@parse{#1}% - \ifthenelse{% - \equal{\filename@ext}{u3d}\OR% - \equal{\filename@ext}{U3D}% - }{% - \def\@MXV@restype{U3D}% - }{% - \def\@MXV@restype{image}% - }% - \ifthenelse{\equal{\@MXV@restype}{image}}{% - %embed the same image file only once - \ifthenelse{\equal{\@MXV@getlabelvalue{\pdfmdfivesum file {#1}}}{undefined}}{% - %increment counter of embedded resource files - \global\advance\@MXV@rescount by 1% - %create Image XObject from next raster image - \special{pdf:image @resource\the\@MXV@rescount\space(#1)}% - \xdef\@MXV@resourcetree{% build name tree for embedded resources - \@MXV@resourcetree\space(#1) @resource\the\@MXV@rescount% - }% - \@MXV@newlabel{\pdfmdfivesum file {#1}}{@resource\the\@MXV@rescount}% - }{% - \xdef\@MXV@resourcetree{% - \@MXV@resourcetree\space(#1) \@MXV@getlabelvalue{\pdfmdfivesum file {#1}}% - }% - }% - }{% - %embed the same 3D file only once - \ifthenelse{\equal{\@MXV@getlabelvalue{\pdfmdfivesum file {#1}}}{undefined}}{% - \global\advance\@MXV@rescount by 1% - \special{pdf:fstream @resource\the\@MXV@rescount\space(#1) <<% - /Subtype/\@MXV@restype>>}% - \xdef\@MXV@resourcetree{% - \@MXV@resourcetree\space(#1) @resource\the\@MXV@rescount% - }% - \@MXV@newlabel{\pdfmdfivesum file {#1}}{@resource\the\@MXV@rescount}% - }{% - \xdef\@MXV@resourcetree{% - \@MXV@resourcetree\space(#1) \@MXV@getlabelvalue{\pdfmdfivesum file {#1}}% - }% - }% - }% - } - - %3D inclusion macro - \newcommand{\@MXV@includeiiid}[5][]{% - %insert box or poster - \@MXV@box{#2}{#3}{#4}% - % - \if@MXV@externalviewer\else% - \setkeys{MXV@iiid}{#1}%process deferred options - \ifnum\@MXV@iiidrepeat=0\else% - \edef\@MXV@animstyle{% animation style dict - /AN <<% - \@MXV@iiidpalindrome\@MXV@iiidrate/PC \the\@MXV@iiidrepeat% - >>% - }% - \fi% - %java script file, stream object - \IfFileExists{\@MXV@jscriptiiidfile}{% - \special{pdf:fstream @jscriptiiid\the\@MXV@includes\space(\@MXV@jscriptiiidfile)}% - \xdef\@MXV@jscriptiiid{/OnInstantiate @jscriptiiid\the\@MXV@includes}% - }{\xdef\@MXV@jscriptiiid{}}% - % - %build the array of 3D views - \@MXV@buildva% - \fi% - % - %3D stream object - \if@MXV@inline% - \ifthenelse{% - \NOT\boolean{@MXV@presentation}\OR% - \equal{\@MXV@getlabelvalue{\@MXV@label.3dstream}}{undefined}% - }{% - \special{pdf:fstream @iiiDfile\the\@MXV@includes\space(#5) <<% - /Subtype/\@MXV@iiidsubtype% - \if@MXV@externalviewer\else% - /VA [\@MXV@varray]% - /DV/F% use first entry in VA as default view - \@MXV@animstyle% - \@MXV@jscriptiiid% - \if@MXV@resource% - /Resources <</Names [\@MXV@resourcetree]>>% - \fi% - \fi% - >>}% - \edef\@MXV@iiidstream{@iiiDfile\the\@MXV@includes}% - \if@MXV@presentation% - \@MXV@newlabel{\@MXV@label.3dstream}{\@MXV@iiidstream}% - \fi% - }{% - \edef\@MXV@iiidstream{\@MXV@getlabelvalue{\@MXV@label.3dstream}}% - }% - \fi% - % - \makebox[0pt][r]{\makebox[#2][l]{% - %insert FileAttachment annotation - \ifthenelse{\boolean{@MXV@inline}\AND\boolean{@MXV@externalviewer}% -% since Reader 7.0.7, we cannot place a file attachment annot behind -% the 3D annot :-( -% \OR\boolean{@MXV@attachment} - }{% - \special{pdf:annot width \the#2 height \the#3 depth \the#4 <<% - /Subtype /FileAttachment% - /F 0% - /T (\@MXV@filename)% - /Contents (3D Object (\@MXV@mime))% - \if@MXV@externalviewer% - /Name/Paperclip% - /C [1 1 1]% - \else% - /AP <</N<<>>/R<<>>/D<<>>>>% - \fi% - /FS <<% - /F(#5)% - /Type/Filespec% - /EF << /F \@MXV@iiidstream >>% - >>% - >>}% - }{% - \if@MXV@url% - %insert Link annotation, if 3D file is a URL - \special{pdf:annot width \the#2 height \the#3 depth \the#4 <<% - /Subtype /Link% - /F 0% - \if@MXV@externalviewer% - \@MXV@urlattr% - \else% - /H /N% - /Border [0 0 0]% - \fi% - /A <</URI (#5) /S/URI>>% - /Contents (3D Object (\@MXV@mime))% - >>}% - \else% - %else insert Launch action for local external 3D file - \if@MXV@inline\else% - \special{pdf:annot width \the#2 height \the#3 depth \the#4 <<% - /Subtype /Link% - /F 0% - \if@MXV@externalviewer% - \@MXV@runattr% - \else% - /H /N% - /Border [0 0 0]% - \fi% - /A <<% - /F (#5)% - /S /Launch% - >>% - /Contents (3D Object (\@MXV@mime))% - >>}% - \fi% - \fi% - }% - % - \if@MXV@externalviewer\else% - %appearance dict dummy, to be shared by all 3D annots - \ifthenelse{\isundefined{\@MXV@apdict}}{% - \special{pdf:stream @apdict\space()<</BBox[0 0 0.001 0.001]>>}% - \xdef\@MXV@apdict{/AP << /N @apdict >>}% - }{}% - %3D reference dict - \if@MXV@presentation% - \ifthenelse{% - \equal{\@MXV@getlabelvalue{\@MXV@label.3dref}}{undefined}% - }{% - \special{pdf:obj @iiiDref\the\@MXV@includes <<% - /Type/3DRef% - /3DD \@MXV@iiidstream% 3D stream object - >>}% - \edef\@MXV@iiidstreamorref{@iiiDref\the\@MXV@includes}% - \@MXV@newlabel{\@MXV@label.3dref}{\the\pdflastobj}% - }{% - \edef\@MXV@iiidstreamorref{\@MXV@getlabelvalue{\@MXV@label.3dref}}% - }% - \else% - \edef\@MXV@iiidstreamorref{\@MXV@iiidstream}% - \fi% - %annotation object of subtype `3D' - \special{pdf:annot @3Dannot\the\@MXV@includes\space width \the#2 height \the#3 depth \the#4 <<% - /Subtype/3D% - /F 4% we cannot put F 5 here; bug in Reader; 3D annot would be - /T (\@MXV@filename)% disabled even if plugin were available - /Contents (3D Object (\@MXV@mime))% - \ifx\@MXV@@label\@empty\else% - /NM (\@MXV@@label)% - \fi% - /P @thispage% - \@MXV@apdict% /AP <</N<<>>/R<<>>/D<<>>>> doesn't work here - \@MXV@defaultview% - \@MXV@iiidia% - /3DD \@MXV@iiidstreamorref% 3D stream or reference object - /3DA << \@MXV@activation\@MXV@deactivation\@MXV@iiidtoolb >>% - >>}% - %label for later annot obj number determination, to be used in - %movieref's - \ifx\@MXV@@label\@empty\else% - \@MXV@labeltoaux{@MXV@\@MXV@@label.annot}{@3Dannot\the\@MXV@includes}% - \@MXV@newlabel{@MXV@\@MXV@@label.annot}{@3Dannot\the\@MXV@includes}% - \fi% - \fi}}% - }% - \else% - %dvips versions - %macro for creating 3D view object and associated projection dict - \def\@MXV@viewobj{% - %projection dict - \pdfmark{% - pdfmark=/OBJ,% - Raw={% - /_objdef {pdict\the\@MXV@includes_\the\@MXV@viewscount}% - /type/dict% - }% - }% - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {pdict\the\@MXV@includes_\the\@MXV@viewscount} <<% - /Subtype/P/FOV \@MXV@aac/PS/Min% - >>% - }% - }% - % - \pdfmark{% - pdfmark=/OBJ,% - Raw={% - /type/dict% - /_objdef {viewobj\the\@MXV@includes_\the\@MXV@viewscount}% - }% - }% - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {viewobj\the\@MXV@includes_\the\@MXV@viewscount} <<% - /MS/M% - /CO \@MXV@roo% - /P {pdict\the\@MXV@includes_\the\@MXV@viewscount}% - /C2W[\@MXV@matrix]% - /XN(\@MXV@xname)% - \@MXV@background% - \@MXV@lights% - \@MXV@render% - >>% - }% - }% - \xdef\@MXV@@viewobj{{viewobj\the\@MXV@includes_\the\@MXV@viewscount}}% - }% - % - %macro for creating resource objects from 3D and image files - \def\@MXV@addresource#1{% - %determine file type - \filename@parse{#1}% - \ifthenelse{% - \equal{\filename@ext}{u3d}\OR% - \equal{\filename@ext}{U3D}% - }{% - \def\@MXV@restype{U3D}% - }{% - \def\@MXV@restype{image}% - }% - \ifthenelse{\equal{\@MXV@restype}{image}}{% - %embed the same image file only once - \ifthenelse{\equal{\@MXV@getlabelvalue{\pdfmdfivesum file {#1}}}{undefined}}{% - %increment counter of embedded resource files - \global\advance\@MXV@rescount by 1% - %create Image XObject from next raster image - \special{ps:% read image resource from file - [ /_objdef {resource\the\@MXV@rescount} /NI pdfmark - save gsave - { - /showpage {} def - /setpagedevice /pop load def - newpath clip - (#1) run - } ?pdfmark - 0 0 1 [1 0 0 1 0 0] {} image %empty dummy, in case #1 is not - grestore restore %a valid image file - }% - \xdef\@MXV@resourcetree{% build name tree for embedded resources - \@MXV@resourcetree\space (#1) {resource\the\@MXV@rescount}% - }% - \@MXV@newlabel{\pdfmdfivesum file {#1}}{resource\the\@MXV@rescount}% - }{% - \xdef\@MXV@resourcetree{% - \@MXV@resourcetree\space (#1) {\@MXV@getlabelvalue{\pdfmdfivesum file {#1}}}% - }% - }% - }{% - %embed the same 3D file only once - \ifthenelse{\equal{\@MXV@getlabelvalue{\pdfmdfivesum file {#1}}}{undefined}}{% - \global\advance\@MXV@rescount by 1% - \special{ps: - [ /_objdef {resource\the\@MXV@rescount} /type/stream /OBJ pdfmark - [ {resource\the\@MXV@rescount} <<% - /Subtype/\@MXV@restype% - >> /PUT pdfmark% - [ {resource\the\@MXV@rescount} (#1) (r) file /PUT pdfmark - }% - \xdef\@MXV@resourcetree{% - \@MXV@resourcetree\space (#1) {resource\the\@MXV@rescount}% - }% - \@MXV@newlabel{\pdfmdfivesum file {#1}}{resource\the\@MXV@rescount}% - }{% - \xdef\@MXV@resourcetree{% - \@MXV@resourcetree\space (#1) {\@MXV@getlabelvalue{\pdfmdfivesum file {#1}}}% - }% - }% - }% - } - % - %3D inclusion macro - \newcommand{\@MXV@includeiiid}[5][]{% - % - \if@MXV@externalviewer\else% - \setkeys{MXV@iiid}{#1}%process deferred options - \ifnum\@MXV@iiidrepeat=0\else% - \edef\@MXV@animstyle{% animation style dict - /AN <<% - \@MXV@iiidpalindrome\@MXV@iiidrate/PC \the\@MXV@iiidrepeat% - >>% - }% - \fi% - %java script file, stream object - \IfFileExists{\@MXV@jscriptiiidfile}{% - \pdfmark{% - pdfmark=/OBJ,% - Raw={% - /_objdef {jscriptiiid\the\@MXV@includes}% - /type/stream% - }% - }% - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {jscriptiiid\the\@MXV@includes}% - (\@MXV@jscriptiiidfile) (r) file% - }% - }% - \xdef\@MXV@jscriptiiid{% - /OnInstantiate {jscriptiiid\the\@MXV@includes}% - }% - }{\def\@MXV@jscriptiiid{}}% - % - %build the array of 3D views - \@MXV@buildva% - \fi% - % - %3D stream object - \if@MXV@inline% - \ifthenelse{% - \NOT\boolean{@MXV@presentation}\OR% - \equal{\@MXV@getlabelvalue{\@MXV@label.3dstream}}{undefined}% - }{% - \pdfmark{% - pdfmark=/OBJ,% - Raw={% - /_objdef {iiiDfile\the\@MXV@includes}% - /type/stream% - }% - }% - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {iiiDfile\the\@MXV@includes} <<% - /Subtype/\@MXV@iiidsubtype% - \if@MXV@externalviewer\else% - /VA [\@MXV@varray]% - /DV/F% use first entry in VA as default view - \@MXV@animstyle% - \if@MXV@resource% - /Resources <<% - /Names [\@MXV@resourcetree]% - >>% - \fi% - \@MXV@jscriptiiid% - \fi% - >>% - }% - }% - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {iiiDfile\the\@MXV@includes}% - (#5) (r) file% - }% - }% - \edef\@MXV@iiidstream{iiiDfile\the\@MXV@includes}% - \if@MXV@presentation% - \@MXV@newlabel{\@MXV@label.3dstream}{\@MXV@iiidstream}% - \fi% - }{% - \edef\@MXV@iiidstream{\@MXV@getlabelvalue{\@MXV@label.3dstream}}% - }% - \fi% - % - %insert FileAttachment annotation - \ifthenelse{\boolean{@MXV@inline}\AND\boolean{@MXV@externalviewer}% -% \OR\boolean{@MXV@attachment} - }{% - \makebox[0pt][l]{% - \pdfmark[\phantom{\@MXV@box{#2}{#3}{#4}}]{% - pdfmark=/ANN,% - Subtype=/FileAttachment,% - Raw={% - /F 0% - /T (\@MXV@filename)% - /Contents (3D Object (\@MXV@mime))% - \if@MXV@externalviewer% - /Name/Paperclip% - /C [1 1 1]% - \else% - /AP <</N<<>>/R<<>>/D<<>>>>% - \fi% - /FS <<% - /F(#5)% - /Type/Filespec% - /EF <</F {\@MXV@iiidstream}>>% - >>% - }% - }% - }% - }{% - \if@MXV@url% - %insert Link annotation, if 3D file is a URL - \makebox[0pt][l]{% - \pdfmark[\phantom{\@MXV@box{#2}{#3}{#4}}]{% - pdfmark=/ANN,% - Subtype=/Link,% - Raw={% - /F 0% - \if@MXV@externalviewer% - /C [\@urlbordercolor]% - /H \@pdfhighlight% - \else% - /H /N% - /Border [0 0 0]% - \fi% - /Action <</URI (#5) /S/URI>>% - /Contents (3D Object (\@MXV@mime))% - }% - }% - }% - \else% - %else insert Launch action for local external 3D file - \if@MXV@inline\else% - \makebox[0pt][l]{% - \pdfmark[\phantom{\@MXV@box{#2}{#3}{#4}}]{% - pdfmark=/ANN,% - Subtype=/Link,% - Raw={% - /F 0% - \if@MXV@externalviewer% - /C [\@urlbordercolor]% - /H \@pdfhighlight% - \else% - /H /N% - /Border [0 0 0]% - \fi% - /Action <<% - /F (#5)% - /S /Launch% - >>% - /Contents (3D Object (\@MXV@mime))% - }% - }% - }% - \fi% - \fi% - }% - \if@MXV@externalviewer% - \phantom{\@MXV@box{#2}{#3}{#4}}% - \else% - %appearance dict dummy, to be shared by all 3D annots - \ifthenelse{\isundefined{\@MXV@apdict}}{% - \pdfmark{% - pdfmark=/OBJ,% - Raw={% - /_objdef {apdict}% - /type/stream% - }% - }% - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {apdict}% - ()% - }% - }% - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {apdict} - <</BBox [0 0 0.001 0.001]>> - }% - }% - \xdef\@MXV@apdict{/AP << /N {apdict}>>}% - }{}% - %3D reference dict - \if@MXV@presentation% - \ifthenelse{% - \equal{\@MXV@getlabelvalue{\@MXV@label.3dref}}{undefined}% - }{% - \pdfmark{% - pdfmark=/OBJ,% - Raw={% - /_objdef {iiiDref\the\@MXV@includes}% - /type/dict% - }% - }% - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {iiiDref\the\@MXV@includes} <<% - /Type/3DRef% - /3DD {\@MXV@iiidstream}% 3D stream object - >>% - }% - }% - \edef\@MXV@iiidstreamorref{iiiDref\the\@MXV@includes}% - \@MXV@newlabel{\@MXV@label.3dref}{\@MXV@iiidstreamorref}% - }{% - \edef\@MXV@iiidstreamorref{\@MXV@getlabelvalue{\@MXV@label.3dref}}% - }% - \else% - \edef\@MXV@iiidstreamorref{\@MXV@iiidstream}% - \fi% - %annotation object of subtype `3D' - \pdfmark[\phantom{\@MXV@box{#2}{#3}{#4}}]{% - pdfmark=/ANN,% - Subtype=/3D,% - Raw={% - /_objdef {3Dannot\the\@MXV@includes}% - /F 4% - /T (\@MXV@filename)% - \ifx\@MXV@@label\@empty\else% - /NM (\@MXV@@label)% - \fi% - /Contents (3D Object (\@MXV@mime))% - /P {ThisPage}% - \@MXV@apdict% /AP <</N<<>>/R<<>>/D<<>>>> doesn't work here - \@MXV@defaultview% - \@MXV@iiidia% - /3DD {\@MXV@iiidstreamorref}% 3D stream or reference object - /3DA <<\@MXV@activation\@MXV@deactivation\@MXV@iiidtoolb>>% - }% - }% - \ifx\@MXV@@label\@empty\else% - \@MXV@labeltoaux{@MXV@\@MXV@@label.annot}{\the\@MXV@includes}% - \@MXV@newlabel{@MXV@\@MXV@@label.annot}{\the\@MXV@includes}% - \fi% - \fi% - }% - \fi\fi% -}{} - -%settings for newly opened media players -\def\@MXV@settings#1#2#3#4#5#6#7{% - var settings={% - privateData: {% - paused: false - }, - autoPlay: false, - visible: false, - volume: #7 - #1% showUI (controls) - #2% palindrome - #3% repeat - #4% rate - #5% startAt - #6% endAt - }; -} - -%JavaScript event handler routines for 2D media activation -\def\@MXV@events#1#2#3{% #1: playerid, #2: mouse?, #3: autoplay? - var events=new app.media.Events({% - %on focus change from one movie to another, events are fired in the - %following order: (1) onBlur, (2) onFocus, (3) afterBlur, (4) afterFocus - onBlur: function (e) {% - if(focusonplayer > 0){% - focusonplayer=0; - } - }, - afterBlur: function (e) {% - %only resume if we click outside of any media - if(focusonplayer==0){% - try{ - e.target.settings.privateData.paused=false; - e.target.play(); - }catch(e){} - } - }, - onFocus: function (e) {% - focusonplayer=#1; - }, - afterFocus: function (e) {% - if(!e.target.isPlaying){%play on click if paused - try{ - e.target.settings.privateData.paused=false; - e.target.play(); - if(!e.target.isPlaying){%still not playing?! - %sometimes play() fails, in particular if the movie has reached - %its end before getting the focus; but this works: - if( - e.target.settings.startAt.time - || e.target.settings.startAt.frame - || e.target.settings.startAt.marker - || e.target.id == 'vnd.adobe.swname:AAPL_QuickTime' - ){ - e.target.seek(e.target.settings.startAt); - }else{ - e.target.stop(); - } - e.target.play(); - } - } - catch (e){} - } - \@MXV@if{#2}% - else{% - %media can only be paused if mouse option is set - try{ - e.target.pause(); - e.target.settings.privateData.paused=true; - }catch (e){} - } - \fi% - \if@MXV@issound\else e.target.visible=true;\fi% - }, - onPlay: function (e) {% - e.target.settings.privateData.paused=false; - }, - onPause: function (e) {% - e.target.settings.privateData.paused=true; - }, - afterReady: function (e) {% - try{ - if( - e.target.settings.startAt.time - || e.target.settings.startAt.frame - || e.target.settings.startAt.marker - ){ - e.target.play(); - e.target.pause(); - e.target.stop(); - e.target.settings.privateData.paused=false; - e.target.seek(e.target.settings.startAt); - } - \if@MXV@issound\else e.target.visible=true;\fi% - \@MXV@if{#3} - e.target.settings.privateData.paused=false; - e.target.play(); - \fi - } - catch (e){} - } - }); -}% - -%output driver specific implementations of the 2D inclusion macro -\ifpdf% - %pdfLaTeX version - \def\@MXV@includemovie#1#2#3#4{% - %insert box or poster - \@MXV@box{#1}{#2}{#3}% - % - \if@MXV@externalviewer\else% - %new action dict - \pdfobj reserveobjnum% - \@MXV@adict=\pdflastobj% - % - %new additional actions dict - \pdfobj reserveobjnum% - \@MXV@aadict=\pdflastobj% - % - \fi% - %embedded file entry `/EF' - \if@MXV@inline% - %embed the same media file only once - \ifthenelse{\equal{\@MXV@getlabelvalue{\pdfmdfivesum file {#4}}}{undefined}}{% - \pdfobj stream % - attr {% - /Type/EmbeddedFile% - /Subtype (\@MXV@mime)% - }% - file {#4}% - \pdfrefobj\pdflastobj% - \edef\@MXV@efentry{% - /EF << /F \the\pdflastobj\space 0 R >>% - }% - \@MXV@newlabel{\pdfmdfivesum file {#4}}{\the\pdflastobj}% - }{% - \edef\@MXV@efentry{% - /EF << /F \@MXV@getlabelvalue{\pdfmdfivesum file {#4}}\space 0 R >>% - }% - }% - \else\def\@MXV@efentry{}\fi% - % - \ifthenelse{\boolean{@MXV@externalviewer}\AND\NOT\boolean{@MXV@inline}}{}{% - %new file specification object - \pdfobj {<<% - /F(#4)% - \@MXV@fsentry% - \@MXV@efentry% - /Type/Filespec% - >>}\pdfrefobj\pdflastobj% - \edef\@MXV@filespec{\the\pdflastobj}% - }% - % - \makebox[0pt][r]{\makebox[#1][l]{% - %insert FileAttachment annotation - \ifthenelse{\boolean{@MXV@inline}\AND\boolean{@MXV@externalviewer}\OR% - \boolean{@MXV@attachment}% - }{% - \pdfannot width #1 height #2 depth #3 {% - /Subtype /FileAttachment% - /F 0% - /T (\@MXV@filename)% - /Contents (Media File (\@MXV@mime))% - \if@MXV@externalviewer% - %a coloured border, as with external links, would be much nicer - /Name/Paperclip% - /C [1 1 1]% - \else% - /AP <</N<<>>/R<<>>/D<<>>>>% - \fi% - /FS \@MXV@filespec\space 0 R% - }% - }{% - \if@MXV@url% - %insert Link annotation, if media file is a URL - \pdfannot width #1 height #2 depth #3 {% - /Subtype /Link% - /F 0% - \if@MXV@externalviewer% - \@MXV@urlattr% - \else% - /H /N% - /Border [0 0 0]% - \fi% - /A <</URI (#4) /S/URI>>% - /Contents (Media File (\@MXV@mime))% - }% - \else% - %else insert Launch action for local external media file - \if@MXV@inline\else% - \pdfannot width #1 height #2 depth #3 {% - /Subtype /Link% - /F 0% - \if@MXV@externalviewer% - \@MXV@runattr% - \else% - /H /N% - /Border [0 0 0]% - \fi% - /A <<% - /F (#4)% - /S /Launch% - >>% - /Contents (Media File (\@MXV@mime))% - }% - \fi% - \fi% - }% - % - \if@MXV@externalviewer\else% - %annotation object of subtype `Screen' - \pdfannot width #1 height #2 depth #3 {% - /Subtype /Screen% - /Border [0 0 0]% no border (PDF-1.1) - /BS <</S/S/W 0>>% no border (PDF-1.5) - /F 5% disable annot if multimedia is not available - /T (\@MXV@filename)% - /Contents (Media File (\@MXV@mime))% - /P \@MXV@pdfpageref{@MXV@annot\the\@MXV@includes.page} 0 R% - /A \the\@MXV@adict\space 0 R% - /AA \the\@MXV@aadict\space 0 R% - /AP <</N<<>>/R<<>>/D<<>>>>% - }\edef\@MXV@screenannot{\the\pdflastannot}% - %label for later annot obj number determination, to be used in - %movieref's only - \ifx\@MXV@@label\@empty\else% - \@MXV@labeltoaux{@MXV@\@MXV@@label.annot}{\@MXV@screenannot}% - \@MXV@newlabel{@MXV@\@MXV@@label.annot}{\@MXV@screenannot}% - \fi% - % - %new media clip object of subtype `Media Clip Data' (/S/MCD) - \pdfobj {<<% - /D \@MXV@filespec\space 0 R% - /P <</TF(TEMPACCESS)>>% - /S/MCD% - /CT (\@MXV@mime)% - >>}\pdfrefobj\pdflastobj% - % - %new rendition object of subtype `Media Rendition' (/S/MR) - \pdfobj {<<% - /C \the\pdflastobj\space 0 R% - /S/MR% - /SP <</BE<</O 0.0>>>>% - /P <<% - \@MXV@player% - /BE <<% - /F 2% - \@MXV@@repeat\@MXV@@volume\@MXV@@ctrls% - /D <</S /F>>% - >>% - >>% - >>}\edef\@MXV@mediarendition{\the\pdflastobj}\pdfrefobj\pdflastobj% - %label for later rendition obj number determination - \ifx\@MXV@@label\@empty\else% - \@MXV@labeltoaux{@MXV@\@MXV@@label.rendition}{\@MXV@mediarendition}% - \@MXV@newlabel{@MXV@\@MXV@@label.rendition}{\@MXV@mediarendition}% - \fi% - % - %action dictionary - \pdfobj useobjnum \@MXV@adict {<<% - /R \@MXV@mediarendition\space 0 R% - /S/Rendition% - /OP 0% fallback if /JS doesn't work or is empty - \@MXV@activationjsentry% - /AN \@MXV@screenannot\space 0 R% - >>}\pdfrefobj\pdflastobj% - % - %create play/stop/resume/pause actions - \pdfobj {<<% - /R \@MXV@mediarendition\space 0 R% - /S/Rendition% - \@MXV@pageopenopentry% /OP fallback if /JS doesn't work - \@MXV@pageopenjsentry% - /AN \@MXV@screenannot\space 0 R% - >>}\edef\@MXV@pageopenaction{\the\pdflastobj}\pdfrefobj\pdflastobj% - % - \pdfobj {<<% - /R \@MXV@mediarendition\space 0 R% - /S/Rendition% - \@MXV@pagecloseopentry% - \@MXV@pageclosejsentry% - /AN \@MXV@screenannot\space 0 R% - >>}\edef\@MXV@pagecloseaction{\the\pdflastobj}\pdfrefobj\pdflastobj% - % - %populate additional actions dictionary - \pdfobj useobjnum \@MXV@aadict {<<% - /PO \@MXV@pageopenaction\space 0 R% - /PC \@MXV@pagecloseaction\space 0 R% - >>}\pdfrefobj\pdflastobj% - \fi}}% - }% -\else\if@MXV@dvipdfmx - %dvipdfmx version - \def\@MXV@includemovie#1#2#3#4{% - %insert box or poster - \@MXV@box{#1}{#2}{#3}% - % - \if@MXV@externalviewer\else% - %new action dict - \special{pdf:obj @MXV@adict\the\@MXV@includes << >>}% - % - %new additional actions dict - \special{pdf:obj @MXV@aadict\the\@MXV@includes << >>}% - % - \fi% - %embedded file entry `/EF' - \if@MXV@inline% - %embed the same media file only once - \ifthenelse{\equal{\@MXV@getlabelvalue{\pdfmdfivesum file {#4}}}{undefined}}{% - \special{pdf:fstream @fstream\the\@MXV@includes\space(#4) <<% - /Type/EmbeddedFile% - /Subtype (\@MXV@mime)% - >>}% - \edef\@MXV@efentry{% - /EF << /F @fstream\the\@MXV@includes >>% - }% - \@MXV@newlabel{\pdfmdfivesum file {#4}}{@fstream\the\@MXV@includes}% - }{% - \edef\@MXV@efentry{% - /EF << /F \@MXV@getlabelvalue{\pdfmdfivesum file {#4}} >>% - }% - }% - \else\def\@MXV@efentry{}\fi% - % - \ifthenelse{\boolean{@MXV@externalviewer}\AND\NOT\boolean{@MXV@inline}}{}{% - %new file specification object - \special{pdf:obj @filespec\the\@MXV@includes <<% - /F(#4)% - \@MXV@fsentry% - \@MXV@efentry% - /Type/Filespec% - >>}% - \edef\@MXV@filespec{@filespec\the\@MXV@includes}% - }% - % - \makebox[0pt][r]{\makebox[#1][l]{% - %insert FileAttachment annotation - \ifthenelse{\boolean{@MXV@inline}\AND\boolean{@MXV@externalviewer}\OR% - \boolean{@MXV@attachment}% - }{% - \special{pdf:annot width \the#1 height \the#2 depth \the#3 <<% - /Subtype /FileAttachment% - /F 0% - /T (\@MXV@filename)% - /Contents (Media File (\@MXV@mime))% - \if@MXV@externalviewer% - %a coloured border, as with external links, would be much nicer - /Name/Paperclip% - /C [1 1 1]% - \else% - /AP <</N<<>>/R<<>>/D<<>>>>% - \fi% - /FS \@MXV@filespec% - >>}% - }{% - \if@MXV@url% - %insert Link annotation, if media file is a URL - \special{pdf:annot width \the#1 height \the#2 depth \the#3 <<% - /Subtype /Link% - /F 0% - \if@MXV@externalviewer% - \@MXV@urlattr% - \else% - /H /N% - /Border [0 0 0]% - \fi% - /A <</URI (#4) /S/URI>>% - /Contents (Media File (\@MXV@mime))% - >>}% - \else% - %else insert Launch action for local external media file - \if@MXV@inline\else% - \special{pdf:annot width \the#1 height \the#2 depth \the#3 <<% - /Subtype /Link% - /F 0% - \if@MXV@externalviewer% - \@MXV@runattr% - \else% - /H /N% - /Border [0 0 0]% - \fi% - /A <<% - /F (#4)% - /S /Launch% - >>% - /Contents (Media File (\@MXV@mime))% - >>}% - \fi% - \fi% - }% - % - \if@MXV@externalviewer\else% - %annotation object of subtype `Screen' - \special{pdf:annot @screenannot\the\@MXV@includes\space width \the#1 height \the#2 depth \the#3 <<% - /Subtype /Screen% - /Border [0 0 0]% no border (PDF-1.1) - /BS <</S/S/W 0>>% no border (PDF-1.5) - /F 5% disable annot if multimedia is not available - /T (\@MXV@filename)% - /Contents (Media File (\@MXV@mime))% - /P @thispage% - /A @MXV@adict\the\@MXV@includes% - /AA @MXV@aadict\the\@MXV@includes% - /AP <</N<<>>/R<<>>/D<<>>>>% - >>}% - \edef\@MXV@screenannot{@screenannot\the\@MXV@includes}% - %label for later annot obj number determination, to be used in - %movieref's only - \ifx\@MXV@@label\@empty\else% - \@MXV@labeltoaux{@MXV@\@MXV@@label.annot}{\@MXV@screenannot}% - \@MXV@newlabel{@MXV@\@MXV@@label.annot}{\@MXV@screenannot}% - \fi% - % - %new media clip object of subtype `Media Clip Data' (/S/MCD) - \special{pdf:obj @mediaclipdata\the\@MXV@includes <<% - /D \@MXV@filespec% - /P <</TF(TEMPACCESS)>>% - /S/MCD% - /CT (\@MXV@mime)% - >>}% - % - %new rendition object of subtype `Media Rendition' (/S/MR) - \special{pdf:obj @mediarendition\the\@MXV@includes <<% - /C @mediaclipdata\the\@MXV@includes% - /S/MR% - /SP <</BE<</O 0.0>>>>% - /P <<% - \@MXV@player% - /BE <<% - /F 2% - \@MXV@@repeat\@MXV@@volume\@MXV@@ctrls% - /D <</S /F>>% - >>% - >>% - >>}% - \edef\@MXV@mediarendition{@mediarendition\the\@MXV@includes}% - %label for later rendition obj number determination - \ifx\@MXV@@label\@empty\else% - \@MXV@labeltoaux{@MXV@\@MXV@@label.rendition}{\@MXV@mediarendition}% - \@MXV@newlabel{@MXV@\@MXV@@label.rendition}{\@MXV@mediarendition}% - \fi% - % - %action dictionary - \special{pdf:put @MXV@adict\the\@MXV@includes <<% - /R \@MXV@mediarendition% - /S/Rendition% - /OP 0% fallback if /JS doesn't work or is empty - \@MXV@activationjsentry% - /AN \@MXV@screenannot% - >>}% - % - %create play/stop/resume/pause actions - \special{pdf:obj @pageopenaction\the\@MXV@includes <<% - /R \@MXV@mediarendition% - /S/Rendition% - \@MXV@pageopenopentry% /OP fallback if /JS doesn't work - \@MXV@pageopenjsentry% - /AN \@MXV@screenannot% - >>}% - \edef\@MXV@pageopenaction{@pageopenaction\the\@MXV@includes}% - % - \special{pdf:obj @pagecloseaction\the\@MXV@includes <<% - /R \@MXV@mediarendition% - /S/Rendition% - \@MXV@pagecloseopentry% - \@MXV@pageclosejsentry% - /AN \@MXV@screenannot% - >>}% - \edef\@MXV@pagecloseaction{@pagecloseaction\the\@MXV@includes}% - % - %populate additional actions dictionary - \special{pdf:put @MXV@aadict\the\@MXV@includes <<% - /PO \@MXV@pageopenaction% - /PC \@MXV@pagecloseaction% - >>}% - \fi}}% - }% -\else% - %dvips version - \def\@MXV@includemovie#1#2#3#4{% - %insert FileAttachment annotation - \ifthenelse{\boolean{@MXV@inline}\AND\boolean{@MXV@externalviewer}\OR% - \boolean{@MXV@attachment}% - }{% - \makebox[0pt][l]{% - \pdfmark[\phantom{\@MXV@box{#1}{#2}{#3}}]{% - pdfmark=/ANN,% - Subtype=/FileAttachment,% - Raw={% - /F 0% - /T (\@MXV@filename)% - /Contents (Media File (\@MXV@mime))% - \if@MXV@externalviewer% - /Name/Paperclip% - /C [1 1 1]% - \else% - /AP <</N<<>>/R<<>>/D<<>>>>% - \fi% - /FS {filespec\the\@MXV@includes}% - }% - }% - }% - }{% - \if@MXV@url% - %insert Link annotation, if media file is a URL - \makebox[0pt][l]{% - \pdfmark[\phantom{\@MXV@box{#1}{#2}{#3}}]{% - pdfmark=/ANN,% - Subtype=/Link,% - Raw={% - /F 0% - \if@MXV@externalviewer% - /C [\@urlbordercolor]% - /H \@pdfhighlight% - \else% - /H /N% - /Border [0 0 0]% - \fi% - /Action <</URI (#4) /S/URI>>% - /Contents (Media File (\@MXV@mime))% - }% - }% - }% - \else% - %else insert Launch action for local external media file - \if@MXV@inline\else% - \makebox[0pt][l]{% - \pdfmark[\phantom{\@MXV@box{#1}{#2}{#3}}]{% - pdfmark=/ANN,% - Subtype=/Link,% - Raw={% - /F 0% - \if@MXV@externalviewer% - /C [\@urlbordercolor]% - /H \@pdfhighlight% - \else% - /H /N% - /Border [0 0 0]% - \fi% - /Action <<% - /F (#4)% - /S /Launch% - >>% - /Contents (Media File (\@MXV@mime))% - }% - }% - }% - \fi% - \fi% - }% - % - \if@MXV@externalviewer% - \@MXV@box{#1}{#2}{#3}% - \else% - %annotation object of subtype `Screen' - \pdfmark[\@MXV@box{#1}{#2}{#3}]{% - pdfmark=/ANN,% - Subtype=/Screen,% - Border={0 0 0},% - Raw={% - /_objdef {screenannot\the\@MXV@includes}% - /F 5% - /T (\@MXV@filename)% - /Contents (Media File (\@MXV@mime))% - /BS <</S/S/W 0>>% no border (PDF-1.5) - /P {ThisPage}% - /AA {aadict\the\@MXV@includes}% - /AP <</N<<>>/R<<>>/D<<>>>>% - }% - }% - \ifx\@MXV@@label\@empty\else% - \@MXV@labeltoaux{@MXV@\@MXV@@label.annot}{\the\@MXV@includes}% - \@MXV@newlabel{@MXV@\@MXV@@label.annot}{\the\@MXV@includes}% - \fi% - % - %entire action entry moved outside screen annotation - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {screenannot\the\@MXV@includes} <<% - /A <<% - /R {mediarendition\the\@MXV@includes}% - /S/Rendition% - /OP 0% fallback, if /JS doesn't work or is empty - \@MXV@activationjsentry% - /AN {screenannot\the\@MXV@includes}% - >>% - >>% - }% - }% - % - %new rendition object of subtype `Media Rendition' (/S/MR) - \pdfmark{% - pdfmark=/OBJ,% - Raw={% - /type/dict% - /_objdef {mediarendition\the\@MXV@includes}% - }% - }% - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {mediarendition\the\@MXV@includes} <<% - /C {mediaclipdata\the\@MXV@includes}% - /S/MR% - %screen parameters: fully transparent, hidden if audio mime type - /SP <</BE<</O 0.0>>>>% - /P <<%Media Play Parameters - \@MXV@player% - /BE <<%Parameters need only be honored by the player in - %the best effort sense - /F 2%scale media's width and height to fit the - %annotation rectangle - \@MXV@@repeat\@MXV@@volume\@MXV@@ctrls% - /D <</S /F>>%movie remains opened - >>% - >>% - >>% - }% - }% - % - %new media clip object of subtype `Media Clip Data' (/S/MCD) - \pdfmark{% - pdfmark=/OBJ,% - Raw={% - /_objdef {mediaclipdata\the\@MXV@includes}% - /type/dict% - }% - }% - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {mediaclipdata\the\@MXV@includes} <<% - /D {filespec\the\@MXV@includes}% - /P <</TF(TEMPACCESS)>>% - /S/MCD% - /CT (\@MXV@mime)% mime type - >>% - }% - }% - \fi% - % - %new file specification object - \ifthenelse{\boolean{@MXV@externalviewer}\AND\NOT\boolean{@MXV@inline}}{}{% - \pdfmark{% - pdfmark=/OBJ,% - Raw={% - /_objdef {filespec\the\@MXV@includes}% - /type/dict% - }% - }% - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {filespec\the\@MXV@includes} <<% - \@MXV@fsentry - /F(#4)% file name - /Type/Filespec% - >>% - }% - }% - }% - % - %embedded file entry `/EF' - \if@MXV@inline% - %embed the same media file only once - \ifthenelse{\equal{\@MXV@getlabelvalue{\pdfmdfivesum file {#4}}}{undefined}}{% - %new stream object - \pdfmark{% - pdfmark=/OBJ,% - Raw={% - /_objdef {fstream\the\@MXV@includes}% - /type/stream% - }% - }% - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {fstream\the\@MXV@includes}% - (#4) (r) file% read in file contents - }% - }% - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {fstream\the\@MXV@includes} <<% - /Type/EmbeddedFile% - /Subtype(\@MXV@mime)% - >>% - }% - }% - \edef\@MXV@moviestream{fstream\the\@MXV@includes}% - \@MXV@newlabel{\pdfmdfivesum file {#4}}{fstream\the\@MXV@includes}% - }{% - \edef\@MXV@moviestream{\@MXV@getlabelvalue{\pdfmdfivesum file {#4}}}% - }% - % put the embedded file entry into file spec object - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {filespec\the\@MXV@includes} <<% - /EF << /F {\@MXV@moviestream} >>% - >>% - }% - }% - \fi% - % - \if@MXV@externalviewer\else% - %create actions for page open/close events - \pdfmark{% - pdfmark=/OBJ,% - Raw={% - /_objdef {pageopenaction\the\@MXV@includes}% - /type/dict% - }% - }% - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {pageopenaction\the\@MXV@includes} <<% - /R {mediarendition\the\@MXV@includes}% - /S/Rendition% - \@MXV@pageopenopentry% /OP fallback, if /JS doesn't work - \@MXV@pageopenjsentry% - /AN {screenannot\the\@MXV@includes}% - >>% - }% - }% - \pdfmark{% - pdfmark=/OBJ,% - Raw={% - /_objdef {pagecloseaction\the\@MXV@includes}% - /type/dict% - }% - }% - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {pagecloseaction\the\@MXV@includes} <<% - /R {mediarendition\the\@MXV@includes}% - /S/Rendition% - \@MXV@pagecloseopentry% - \@MXV@pageclosejsentry% - /AN {screenannot\the\@MXV@includes}% - >>% - }% - }% - % - %create and populate additional actions dictionary, always add entries - %for page open/close events - \pdfmark{% - pdfmark=/OBJ,% - Raw={% - /type/dict% - /_objdef {aadict\the\@MXV@includes}% - }% - }% - % - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {aadict\the\@MXV@includes} <<% - /PO {pageopenaction\the\@MXV@includes}% - /PC {pagecloseaction\the\@MXV@includes}% - >>% - }% - }% - \fi% - }% -\fi\fi - -%definition of user command `\includemovie' -\newcommand{\includemovie}[4][]{% - %test for hyperref package - \ifpdf\else% - \ifthenelse{\isundefined{\pdfmark}\AND\isundefined{\@pdfm@mark}}{\@MXV@missing{hyperref}}{}% - \fi% - % - \leavevmode% - \@MXV@reset% all macros and options - \setkeys{MXV@user}{#1}% parse options - % - %total height of text - \@MXV@totalheight=\@MXV@height% - \advance\@MXV@totalheight by \@MXV@depth% - %traiselen=distance at which text is to be raised to centre it vertically - %braiselen=vertical centre of media box (auxiliary measure) - \@MXV@traiselen=0.5\@MXV@height% - \advance\@MXV@traiselen by -0.5\@MXV@depth% - % - \ifthenelse{\equal{#3}{}}{% no height argument - \@MXV@braiselen=0.5\@MXV@height% - }{%override height of text, height argument given - \@MXV@braiselen=#3% - \@MXV@braiselen=0.5\@MXV@braiselen% - \setlength{\@MXV@height}{#3}% - }% - % - \ifthenelse{\equal{\@MXV@boxdepth}{}}{% no depth option given - \ifthenelse{\lengthtest{\@MXV@totalheight>\@MXV@height}}{% - %depth of text only taken into account, if the total height - %is smaller than the height of the display box - \advance\@MXV@braiselen by -0.5\@MXV@depth% - }{% - \@MXV@depth=0pt% - }% - }{%override depth of text, depth option given - \setlength{\@MXV@@boxdepth}{\@MXV@boxdepth}% - \advance\@MXV@braiselen by -0.5\@MXV@@boxdepth% - \setlength{\@MXV@depth}{\@MXV@boxdepth}% - }% - %finally centre text vertically - \ifthenelse{\NOT\equal{#3}{}\OR\NOT\equal{\@MXV@boxdepth}{}}{% - \advance\@MXV@traiselen by -\@MXV@braiselen% - \@MXV@traiselen=-\@MXV@traiselen% - \savebox{\@MXV@textbox}{\raisebox{\@MXV@traiselen}[0pt][0pt]{% - \usebox{\@MXV@textbox}}}% - }{}% - \ifthenelse{\equal{#2}{}}{}{%override horiz. dimension of text - \setlength{\@MXV@width}{#2}% - %centre text horizontally - \savebox{\@MXV@textbox}{\makebox[\@MXV@width][c]{\usebox{\@MXV@textbox}}}% - }% - % - %find out whether the contents should be hidden or not (for presentations) - \setboolean{@MXV@hide}{false}% -% \ifthenelse{\boolean{@MXV@powerdot}}{% -% \ifthenelse{\boolean{pd@overlay}}{}{% -% \ifthenelse{\pd@method=2}{}{% -% \setboolean{@MXV@hide}{true}% -% }% -% }% -% }{}% - \ifthenelse{\boolean{@MXV@beamer}}{% - \ifthenelse{\boolean{beamer@anotherslide}}{% - \setboolean{@MXV@hide}{true}% - }{}% - }{}% - % - \ifthenelse{\boolean{@MXV@hide}}{% - %insert whitespace instead of annot - \phantom{\vrule width \@MXV@width height \@MXV@height depth \@MXV@depth}% - }{% - \ifthenelse{\NOT\boolean{@MXV@url}\AND\boolean{@MXV@inline}}{% - \IfFileExists{#4}{}{% - \PackageError{movie15}{% - File `#4' cannot be opened for embedding.\MessageBreak - Did you forget to set option `url' or `inline=false'? - }{% - Try any of the options `url' or `inline=false'! - }% - }% - }{}% - % - %guess the mime type based on the filename extension - \filename@parse{#4}% - \ifthenelse{\equal{\@MXV@mime}{@MXV@auto}}{% - \@MXV@guessmime{#4}{\filename@ext}}{}% - \if\filename@ext\relax% - \xdef\@MXV@filename{\filename@base}% - \else% - \xdef\@MXV@filename{\filename@base.\filename@ext}% - \fi% - \expandafter\@MXV@@issound\@MXV@mime:% - % - %if 3D object is not embedded inline we must use some external player :( - \ifthenelse{% - \boolean{@MXV@iiid}% - \AND\NOT\boolean{@MXV@inline}% - }{% - \setboolean{@MXV@externalviewer}{true}% - }{}% - % - %some link attributes (if hyperref not loaded) - \ifthenelse{\isundefined{\@pdfborder}}{% - \def\@MXV@urlattr{}% - \def\@MXV@runattr{}% - }{% - \edef\@MXV@urlattr{% - \if@MXV@beamer% - /Border [1 1 1]% - \else% - /Border [\@pdfborder]% - \fi% - /C [\@urlbordercolor]% - /H \@pdfhighlight% - }% - \edef\@MXV@runattr{% - \if@MXV@beamer% - /Border [1 1 1]% - \else% - /Border [\@pdfborder]% - \fi% - /C [\@runbordercolor]% - /H \@pdfhighlight% - }% - }% - % - \global\advance\@MXV@includes by 1%increment counter - % - %label this annotation for later page number determination - \@MXV@labeltoaux{@MXV@annot\the\@MXV@includes.page}{% - \noexpand\the\@MXV@page}% - % - %label this annotation for later annot id number determination & - %check for multiply-defined labels - % \@MXV@label --> automatic (presentation mode) or user defined label - % \@MXV@@label = \@MXV@label (non presentation doc classes) - % \@MXV@@label = \@MXV@label + physical page No. (presentation mode) - \ifx\@MXV@label\@empty% - %when used with presentation packages, annots must be labelled, - %use the media file name, if no label provided - \ifthenelse{\boolean{@MXV@presentation}}{% - \xdef\@MXV@label{#4}% - }{}% - \fi% - \ifx\@MXV@label\@empty\else% - \ifthenelse{\boolean{@MXV@presentation}}{% - %in presentation mode, the label must be extended by the physical page No. - \xdef\@MXV@@label{\@MXV@label.\@MXV@getlabelvalue{@MXV@annot\the\@MXV@includes.page}}% - }{% - \xdef\@MXV@@label{\@MXV@label}% - }% - \fi% - \ifx\@MXV@@label\@empty\else% - \ifthenelse{% - \NOT\equal{\@MXV@getlabelvalue{@MXV@\@MXV@@label.annotid}}{undefined}% - \AND% - \NOT\equal{\@MXV@getlabelvalue{@MXV@\@MXV@@label.annotid}}{% - \the\@MXV@includes}% - }{% - \PackageWarning{movie15}{% - Label `\@MXV@label' multiply defined% - }% - \ifthenelse{\isundefined{\@MXV@multiwarning}}{% - \gdef\@MXV@multiwarning{}% - \AtEndDocument{% - \PackageWarningNoLine{movie15}{% - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\MessageBreak - @@ There were multiply-defined labels! @@\MessageBreak - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}% - }% - }{}% - }{}% - \if@MXV@@draft% - \@MXV@labeltoaux{@MXV@\@MXV@label.draft}{true}% - \else% - \@MXV@labeltoaux{@MXV@\@MXV@label.draft}{false}% - \fi% - \@MXV@labeltoaux{@MXV@\@MXV@@label.annotid}{\the\@MXV@includes}% - \if@MXV@presentation\else% - \@MXV@newlabel{@MXV@\@MXV@@label.annotid}{\the\@MXV@includes}% - \fi% - \fi% - % - \ifthenelse{\boolean{@MXV@@draft}}{}{% - \ifthenelse{\boolean{@MXV@externalviewer}}{% - \ifx\@MXV@label\@empty\else% - \@MXV@labeltoaux{@MXV@\@MXV@label.externalviewer}{true}% - \@MXV@newlabel{@MXV@\@MXV@label.externalviewer}{true}% - \fi% - }{% - %what is to be put into movie link annot depends on the following - \ifx\@MXV@label\@empty\else% - \@MXV@labeltoaux{@MXV@\@MXV@label.externalviewer}{false}% - \@MXV@newlabel{@MXV@\@MXV@label.externalviewer}{false}% - \fi% - % - %depending on options do content specific stuff - \ifthenelse{\boolean{@MXV@iiid}}{% - % #### 3D #### - \if@MXV@externalviewer\else% - \ifthenelse{\equal{\@MXV@iiidpalindrome}{/Subtype/Oscillating}}{% - \global\multiply\@MXV@iiidrepeat by 2% - }{}% - \ifthenelse{\boolean{@MXV@autoplay}\OR\boolean{@MXV@autoresume}}{% - \def\@MXV@activation{/A/PV/AIS/L}% open 3D object, run animation - }{% - \if@MXV@runposter% - \def\@MXV@activation{/A/PV/AIS/I}%open 3D obj but don't run animation - \else% - \def\@MXV@activation{/A/XA}% explicit activation by user - \fi% - }% - \if@MXV@autostop% - \def\@MXV@deactivation{/D/PI/DIS/I}% - \else% - \if@MXV@autopause% - \def\@MXV@deactivation{/D/PI/DIS/I}% - \else% - \if@MXV@autoclose% - \def\@MXV@deactivation{/D/PI/DIS/U}% - \else%@MXV@continue - \def\@MXV@deactivation{/D/PI/DIS/L}% - \fi% - \fi% - \fi% - %counter for 3D inclusion on current page - \ifthenelse{% - \equal{% - \@MXV@getlabelvalue{@MXV@annot\the\@MXV@includes.page}% - }{\@MXV@oldpage}% - }{% - \global\advance\@MXV@iiidoncurpage by 1% - }{% - \global\@MXV@iiidoncurpage=1% - }% - \xdef\@MXV@oldpage{\@MXV@getlabelvalue{% - @MXV@annot\the\@MXV@includes.page}}% - \fi% - \ifx\@MXV@label\@empty\else% - \@MXV@labeltoaux{@MXV@\@MXV@label.3D}{true}% - \@MXV@newlabel{@MXV@\@MXV@label.3D}{true}% - \@MXV@labeltoaux{@MXV@\@MXV@label.3Dlights}{\@MXV@lights}% - \@MXV@newlabel{@MXV@\@MXV@label.3Dlights}{\@MXV@lights}% - \@MXV@labeltoaux{@MXV@\@MXV@label.3Drender}{\@MXV@render}% - \@MXV@newlabel{@MXV@\@MXV@label.3Drender}{\@MXV@render}% - \fi% - \ifx\@MXV@@label\@empty\else% - \@MXV@labeltoaux{@MXV@\@MXV@@label.3Doncurpage}{\the\@MXV@iiidoncurpage}% - \@MXV@newlabel{@MXV@\@MXV@@label.3Doncurpage}{\the\@MXV@iiidoncurpage}% - \fi% - }{%#### 2D #### - %get the player ID - \if@MXV@presentation% - \ifthenelse{% - \equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.playerid}}{undefined}% - }{% - \global\advance\@MXV@players by 1%increment counter - }{% - \global\@MXV@players=\@MXV@getlabelvalue{@MXV@\@MXV@label.playerid}% - }% - \@MXV@labeltoaux{@MXV@\@MXV@label.playerid}{\the\@MXV@players}% - \@MXV@newlabel{@MXV@\@MXV@label.playerid}{\the\@MXV@players}% - \edef\@MXV@currplayer{\the\@MXV@players}% - \else% - \ifx\@MXV@label\@empty\else% - \@MXV@labeltoaux{@MXV@\@MXV@label.playerid}{\the\@MXV@includes}% - \@MXV@newlabel{@MXV@\@MXV@label.playerid}{\the\@MXV@includes}% - \fi% - \edef\@MXV@currplayer{\the\@MXV@includes}% - \fi% - % - \ifx\@MXV@startat\@empty% default start position - \gdef\@MXV@startat{, startAt: 0}% - \fi% - %write player settings to aux file - \ifx\@MXV@label\@empty\else% - \@MXV@labeltoaux{@MXV@\@MXV@label.mouse}{% - \if@MXV@mouse true\else false\fi}% - \@MXV@labeltoaux{@MXV@\@MXV@label.showUI}{\@MXV@ctrls}% - \@MXV@labeltoaux{@MXV@\@MXV@label.palindrome}{\@MXV@palindrome}% - \@MXV@labeltoaux{@MXV@\@MXV@label.repeat}{\@MXV@repeat}% - \@MXV@labeltoaux{@MXV@\@MXV@label.rate}{\@MXV@rate}% - \@MXV@labeltoaux{@MXV@\@MXV@label.startAt}{\@MXV@startat}% - \@MXV@labeltoaux{@MXV@\@MXV@label.endAt}{\@MXV@endat}% - \@MXV@labeltoaux{@MXV@\@MXV@label.volume}{\@MXV@volume}% - \@MXV@labeltoaux{@MXV@\@MXV@label.autoplay}{% - \if@MXV@autoplay true\else false\fi}% - \@MXV@labeltoaux{@MXV@\@MXV@label.3D}{false}% - \@MXV@labeltoaux{@MXV@\@MXV@label.issound}{% - \if@MXV@issound true\else false\fi}% - % - \@MXV@newlabel{@MXV@\@MXV@label.mouse}{% - \if@MXV@mouse true\else false\fi}% - \@MXV@newlabel{@MXV@\@MXV@label.showUI}{\@MXV@ctrls}% - \@MXV@newlabel{@MXV@\@MXV@label.palindrome}{\@MXV@palindrome}% - \@MXV@newlabel{@MXV@\@MXV@label.repeat}{\@MXV@repeat}% - \@MXV@newlabel{@MXV@\@MXV@label.rate}{\@MXV@rate}% - \@MXV@newlabel{@MXV@\@MXV@label.startAt}{\@MXV@startat}% - \@MXV@newlabel{@MXV@\@MXV@label.endAt}{\@MXV@endat}% - \@MXV@newlabel{@MXV@\@MXV@label.volume}{\@MXV@volume}% - \@MXV@newlabel{@MXV@\@MXV@label.autoplay}{% - \if@MXV@autoplay true\else false\fi}% - \@MXV@newlabel{@MXV@\@MXV@label.3D}{false}% - \@MXV@newlabel{@MXV@\@MXV@label.issound}{% - \if@MXV@issound true\else false\fi}% - % - \fi% - % - \ifthenelse{\boolean{@MXV@autoplay}\OR\boolean{@MXV@runposter}}{% - \xdef\@MXV@pageopenopentry{/OP 4}% - }{% - \if@MXV@autoresume% - \xdef\@MXV@pageopenopentry{/OP 3}% - \else% - \xdef\@MXV@pageopenopentry{/OP 2}% - \fi% - }% - % - \if@MXV@autostop% - \xdef\@MXV@pagecloseopentry{/OP 1}% - \else% - \if@MXV@autopause% - \xdef\@MXV@pagecloseopentry{/OP 2}% - \else% - \if@MXV@autoclose% - \xdef\@MXV@pagecloseopentry{/OP 1}% - \else% @MXV@continue - \xdef\@MXV@pagecloseopentry{/OP 3}% - \fi% - \fi% - \fi% - % - %JavaScripts for playback control - %script for page invisible event - \if@MXV@autopause% - \xdef\@MXV@pageclosejsentry{% - /JS ( - try{% - if(player\@MXV@currplayer.isPlaying){% - player\@MXV@currplayer.pause(); - player\@MXV@currplayer.settings.privateData.paused=true; - } - focusonplayer=-1; %page change - player\@MXV@currplayer.visible=false; - } - catch(e){} - )% - }% - \else% - \if@MXV@autostop% - \xdef\@MXV@pageclosejsentry{% - /JS ( - try{% - player\@MXV@currplayer.settings.privateData.paused=false; - %players tend to be bugged, always stop from playing state - if(!player\@MXV@currplayer.isPlaying){ - player\@MXV@currplayer.play(); - } - player\@MXV@currplayer.stop(); - if( - player\@MXV@currplayer.settings.startAt.time - || player\@MXV@currplayer.settings.startAt.frame - || player\@MXV@currplayer.settings.startAt.marker - || player\@MXV@currplayer.id == - 'vnd.adobe.swname:AAPL_QuickTime' - ){ - player\@MXV@currplayer.seek(% - player\@MXV@currplayer.settings.startAt); - } - focusonplayer=-1; - player\@MXV@currplayer.visible=false; - } - catch(e){} - )% - }% - \else% - \if@MXV@autoclose% - \xdef\@MXV@pageclosejsentry{% - /JS ( - try{% - player\@MXV@currplayer.close(app.media.closeReason.general); - focusonplayer=-1; %page change - player\@MXV@currplayer.visible=false; - } - catch(e){} - )% - }% - \else% - \xdef\@MXV@pageclosejsentry{%@MXV@continue - /JS ( - try{% - focusonplayer=-1; %page change - player\@MXV@currplayer.visible=false; - } - catch(e){} - )% - }% - \fi% - \fi% - \fi% - % - %script for activation/resume on page open event - \xdef\@MXV@pageopenjsentry{% - /JS ( - try{% - if(player\@MXV@currplayer.isOpen){% - %drag the player on the current slide (presentation mode) - player\@MXV@currplayer.page=this.pageNum; - %... and make it visible - \if@MXV@issound\else player\@MXV@currplayer.visible=true;\fi% - % - %start or resume media which have autoplay option set; - %also resume paused media which have autoresume option set - \if@MXV@autoplay% - player\@MXV@currplayer.settings.privateData.paused=false; - player\@MXV@currplayer.play(); - if(!player\@MXV@currplayer.isPlaying){% still not playing?! - if( - player\@MXV@currplayer.settings.startAt.time - || player\@MXV@currplayer.settings.startAt.frame - || player\@MXV@currplayer.settings.startAt.marker - || player\@MXV@currplayer.id=='vnd.adobe.swname:AAPL_QuickTime' - ){ - player\@MXV@currplayer.seek( - player\@MXV@currplayer.settings.startAt); - }else{ - player\@MXV@currplayer.stop(); - } - player\@MXV@currplayer.play(); - } - \else% - \if@MXV@autoresume% - if(player\@MXV@currplayer.settings.privateData.paused){% - player\@MXV@currplayer.settings.privateData.paused=false; - player\@MXV@currplayer.play(); - if(!player\@MXV@currplayer.isPlaying){% - if( - player\@MXV@currplayer.settings.startAt.time - || player\@MXV@currplayer.settings.startAt.frame - || player\@MXV@currplayer.settings.startAt.marker - || player\@MXV@currplayer.id == - 'vnd.adobe.swname:AAPL_QuickTime' - ){ - player\@MXV@currplayer.seek(% - player\@MXV@currplayer.settings.startAt); - }else{ - player\@MXV@currplayer.stop();% - } - player\@MXV@currplayer.play(); - } - } - \fi% - \fi% - } - else{% - throw 'isClosed'; - } - } - catch(e){% - \@MXV@if{\if@MXV@autoplay true\else\if@MXV@runposter true\else % - false\fi\fi}% - if(focusonplayer==undefined){% - var focusonplayer=0; %shared by all annots - } - \@MXV@settings{\@MXV@ctrls}{\@MXV@palindrome}{\@MXV@repeat}% - {\@MXV@rate}{\@MXV@startat}{\@MXV@endat}{\@MXV@volume}% - \@MXV@events{\@MXV@currplayer}% - {\if@MXV@mouse true\else false\fi}% - {\if@MXV@autoplay true\else false\fi}% - var player\@MXV@currplayer=app.media.openPlayer({% - settings: settings, - events: events - }); - \fi% - }% - ) - }% - % - %script for normal activation by mouse click - \xdef\@MXV@activationjsentry{% - /JS ( - app.focusRect=true;% - if(focusonplayer==undefined){% - var focusonplayer=0; %shared by all annots - } - \@MXV@settings{\@MXV@ctrls}{\@MXV@palindrome}{\@MXV@repeat}% - {\@MXV@rate}{\@MXV@startat}{\@MXV@endat}{\@MXV@volume}% - \@MXV@events{\@MXV@currplayer}{\if@MXV@mouse true\else false\fi}% - {true}% - var player\@MXV@currplayer=app.media.openPlayer({% - settings: settings, - events: events - }); - ) - }% - }% - }% - }% draft? - % - %insert link target, if media has been labelled - \ifthenelse{\NOT\equal{\@MXV@@label}{}}{% - \raisebox{\@MXV@height}{% - \ifpdf% - \pdfdest name {@MXV@\@MXV@@label} xyz % - \else% - \hypertarget{@MXV@\@MXV@@label}{}% - \fi% - }% - }{}% - % - \ifthenelse{\boolean{@MXV@@draft}}{% - \makebox[0pt][l]{\usebox{\@MXV@textbox}}% - \@MXV@draftbox{\@MXV@width}{\@MXV@height}{\@MXV@depth}{#4}% - }{% - %insert textbox, obscured by poster - \ifthenelse{\boolean{@MXV@boxopt}\AND\NOT\boolean{@MXV@textoverposter}}{% - \makebox[0pt][l]{\usebox{\@MXV@textbox}}% - }{}% - % - %insert annotation - \ifthenelse{\boolean{@MXV@iiid}}{% - \edef\@MXV@iiidopt{[\@MXV@iiidopt]}% - \expandafter\@MXV@includeiiid\@MXV@iiidopt{\@MXV@width}{\@MXV@height}{\@MXV@depth}{#4}% - }{% - \@MXV@includemovie{\@MXV@width}{\@MXV@height}{\@MXV@depth}{#4}% - }% - % - %insert textbox, overprinting the poster - \ifthenelse{\boolean{@MXV@boxopt}\AND\boolean{@MXV@textoverposter}}{% - \makebox[0pt][r]{\usebox{\@MXV@textbox}}% - }{}% - }% - }% -} - -%for remote control of media -\newcommand\movieref[3][]{% - \ifpdf\else% - \ifthenelse{\isundefined{\pdfmark}\AND\isundefined{\@pdfm@mark}}{\@MXV@missing{hyperref}}{}% - \fi% - \leavevmode% - % save text argument - \savebox{\@MXV@textbox}{\ifHy@colorlinks\color{\@linkcolor}\fi#3}% - % - %find out whether the contents should be hidden or not (for presentations) - \setboolean{@MXV@hide}{false}% -% \ifthenelse{\boolean{@MXV@powerdot}}{% -% \ifthenelse{\boolean{pd@overlay}}{}{% -% \ifthenelse{\pd@method=2}{}{% -% \setboolean{@MXV@hide}{true}% -% }% -% }% -% }{}% - \ifthenelse{\boolean{@MXV@beamer}}{% - \ifthenelse{\boolean{beamer@anotherslide}}{% - \setboolean{@MXV@hide}{true}% - }{}% - }{}% - % - \ifthenelse{\boolean{@MXV@hide}}{% - %put whitespace instead of link annot - \phantom{\usebox{\@MXV@textbox}}% - }{% - \@MXV@reset% - % - \xdef\@MXV@label{#2}% - % - \global\advance\@MXV@links by 1%increment link counter - % - %label this link for later page number determination - \@MXV@labeltoaux{@MXV@link\the\@MXV@links.page}{\noexpand\the\@MXV@page}% - % - \ifthenelse{\boolean{@MXV@presentation}}{% - %in presentation mode the label must be extended by the physical page No. - \xdef\@MXV@@label{\@MXV@label.\@MXV@getlabelvalue{@MXV@link\the\@MXV@links.page}}% - }{% - \xdef\@MXV@@label{\@MXV@label}% - }% - % - %check if label is defined at all - \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@@label.annotid}}{undefined}}{% - \usebox{\@MXV@textbox}% write out text box - \PackageWarning{movie15}{% - Reference `\@MXV@label' on page \thepage \space undefined% - }% - \ifthenelse{\isundefined{\@MXV@undefwarning}}{% - \gdef\@MXV@undefwarning{}% - \AtEndDocument{% - \PackageWarningNoLine{movie15}{% - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\MessageBreak% - @@ There were undefined references! @@\MessageBreak% - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}% - }% - }{}% - }{% - \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.draft}}{true}}{% - \setboolean{@MXV@@draft}{true}% if the screen annotation is in draft mode - }{}% - \if@MXV@@draft\else% - \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.externalviewer}}{true}}{% - \setboolean{@MXV@externalviewer}{true}% - }{% - \setboolean{@MXV@externalviewer}{false}% - }% - \if@MXV@externalviewer\else% - %movieref used in 3D context? - \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.3D}}{true}}{% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \setboolean{@MXV@iiid}{true}% - }{% - \@MXV@neediiiD% - }% - }{}% - % - %actions completely different in 3D & 2D context - \ifthenelse{\boolean{@MXV@iiid}}{% #### 3D #### - %retrieve default lighting scheme - \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.3Dlights}}{undefined}}{% - \edef\@MXV@lights{}% - }{% - \edef\@MXV@lights{\@MXV@getlabelvalue{@MXV@\@MXV@label.3Dlights}}% - }% - %retrieve default render mode - \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.3Drender}}{undefined}}{% - \edef\@MXV@render{}% - }{% - \edef\@MXV@render{\@MXV@getlabelvalue{@MXV@\@MXV@label.3Drender}}% - }% - \setkeys{MXV@user}{#1}% - \if@MXV@defaultviewprovided% define a new view, - %using any of the coo, c2c, roo, caa options - \xdef\@MXV@xname{}% - \edef\@MXV@args{\@MXV@coo\space\@MXV@ctoc\space\@MXV@roo\space\@MXV@roll\space}% - \expandafter\@MXV@ciiwmatrix\@MXV@args% build C2W matrix - \@MXV@viewobj% create pdf object of 3D view - \edef\@MXV@iiidview{\@MXV@@viewobj}% - %else use the indexed view specified by option `3Dviewindex' - \fi% - % - %create JavaScript (options 3Djscript, 3Dcalculate, 3Dgetview) - \ifthenelse{\NOT\equal{\@MXV@jscriptiiidfile}{}% - \OR\NOT\equal{\@MXV@calc}{}% - \OR\boolean{@MXV@iiidgetview}% - }{% - \edef\@MXV@linkjscriptiiid{% - try{% - %fill hash (annot3D) with refs to Annot3D objects - annot3D['\@MXV@label']=getAnnots3D(% - \@MXV@getlabelvalue{% - @MXV@annot\@MXV@getlabelvalue{@MXV@\@MXV@@label.annotid}.page% - }-1% - )[\@MXV@getlabelvalue{@MXV@\@MXV@@label.3Doncurpage}-1];% - annot3D['\@MXV@label'].activated=true;% - }catch(e){% - try{% - annot3D=new Array;% - annot3D['\@MXV@label']=getAnnots3D(% - \@MXV@getlabelvalue{% - @MXV@annot\@MXV@getlabelvalue{@MXV@\@MXV@@label.annotid}.page% - }-1% - )[\@MXV@getlabelvalue{@MXV@\@MXV@@label.3Doncurpage}-1];% - annot3D['\@MXV@label'].activated=true;% - }catch(e){% - var spc=String.fromCharCode(32);% - app.alert('3D' + spc + 'annotation' + spc + 'could' + spc +% - 'not' + spc + 'be' + spc + 'activated!');% - }% - }% - }% - \if@MXV@iiidgetview% - \edef\@MXV@linkjscriptiiid{% - \@MXV@linkjscriptiiid - try{ - %JavaScript to print the camera settings of the current view - var camera=annot3D['\@MXV@label'].context3D.scene.cameras.getByIndex(0);% - var coo=camera.targetPosition;% - var c2c=camera.position.subtract(coo);% - var roo=c2c.length;% - c2c.normalize();% - % - %assemble result string - %{<coo_x> <coo_y> <coo_z>}{<c2c_x> <c2c_y> <c2c_z>}{<roo>}{<aac>} - var spc=String.fromCharCode(32);% - var res='{';% - var x = (Math.abs(coo.x) < 1e-18 ? 0 : coo.x);% - var y = (Math.abs(coo.y) < 1e-18 ? 0 : coo.y);% - var z = (Math.abs(coo.z) < 1e-18 ? 0 : coo.z);% - if(Math.sqrt(x*x + y*y + z*z) > 0){% - res+=util.printf('\%s' + spc + '\%s' + spc + '\%s',% - (Math.abs(x) < 1.001e-6 && Math.abs(x) > 0 ?% - util.printf('\%.18f', x): x),% - (Math.abs(y) < 1.001e-6 && Math.abs(y) > 0 ?% - util.printf('\%.18f', y): y),% - (Math.abs(z) < 1.001e-6 && Math.abs(z) > 0 ?% - util.printf('\%.18f', z): z)% - );% - }% - res+='}{';% - x = (Math.abs(c2c.x) < 1e-18 ? 0 : c2c.x);% - y = (Math.abs(c2c.y) < 1e-18 ? 0 : c2c.y);% - z = (Math.abs(c2c.z) < 1e-18 ? 0 : c2c.z);% - if(!(x==0 && y==-1 && z==0)){% - res+=util.printf('\%s' + spc + '\%s' + spc + '\%s',% - (Math.abs(x) < 1.001e-6 && Math.abs(x) > 0 ?% - util.printf('\%.18f', x): x),% - (Math.abs(y) < 1.001e-6 && Math.abs(y) > 0 ?% - util.printf('\%.18f', y): y),% - (Math.abs(z) < 1.001e-6 && Math.abs(z) > 0 ?% - util.printf('\%.18f', z): z)% - );% - }% - res+='}{';% - if(roo > 0.11e-17){% - res+=util.printf('\%s',% - (roo < 1.001e-6 ? util.printf('\%.18f', roo): roo)% - );% - }% - res+='}{';% - %determine the camera roll (camera.roll is bugged) - %camera up-vector from camera.up, the latter being the positional vector - %of the actual camera up-vector tip - var up = camera.up.subtract(camera.position);% - up.normalize();% - %find the camera up-vector up0, that corresponds to zero roll - %(Gram-Schmitt orthogonalisation) - var worldup=new annot3D['\@MXV@label'].context3D.Vector3();% - worldup.set(0,0,1);% - var out=c2c.scale(-1);% - var up0=worldup.subtract(out.scale(out.dot(worldup)));% - up0.normalize();% - var up0xup=up0.cross(up);% - var roll=0;% - if(up0xup.length>0){% - up0xup.normalize();% - var up0dotup=up.dot(up0);% - up0dotup=(Math.abs(up0dotup) > 1 ? Math.round(up0dotup) : up0dotup);% - %compute the angle between camera up and up0 vectors - roll=Math.acos(up0dotup)*180/Math.PI*out.dot(up0xup);% - }% - if(util.printf('\%.5f', roll)!=0){% - res+=util.printf('\%s', roll);% - }% - res+='}{';% - aac=camera.fov * 180/Math.PI;% - if(util.printf('\%.5f', aac)!=30){% - res+=util.printf('\%s',% - (Math.abs(aac) < 1.001e-6 ? util.printf('\%.18f', aac): aac)% - );% - }% - res+='}';% - %open pop-up displaying the result string - var settings={% - initialize: function(dialog) {% - dialog.load({% - 'text': res% - });% - },% - description: {% - name: 'Current' + spc + '3D' + spc + 'Camera' + spc + 'Settings',% - elements: [% - {% - type: 'static_text',% - name: 'Add' + spc + 'the' + spc + 'following' + spc + 'line' + spc +% - 'to' + spc + 'a' + spc + 'file' + spc + 'of' + spc +% - 'predefined' + spc + 'views.' + spc +% - '(See' + spc + 'option' + spc + '3Dviews!)'% - },% - {% - type: 'edit_text',% - item_id: 'text',% - alignment: 'align_fill',% - readonly: false% - },% - {% - type: 'ok',% - ok_name: 'Close'% - }% - ]% - }% - };% - app.execDialog(settings);% - }catch(e){% - var spc=String.fromCharCode(32);% - app.alert('Error' + spc + 'while' + spc + 'executing' + spc +% - '3Dgetview:' + spc + e);% - }% - }% - \fi% - \ifx\@MXV@calc\@empty\else% - \edef\@MXV@linkjscriptiiid{% - \@MXV@linkjscriptiiid - try{ -% console.show(); -% console.clear(); - %constructor for doubly linked list - function List(){% - this.first_node=null;% - this.last_node=new Node(undefined);% - }% - List.prototype.push_back=function(x){% - var new_node=new Node(x);% - if(this.first_node==null){% - this.first_node=new_node;% - new_node.prev=null;% - }else{% - new_node.prev=this.last_node.prev;% - new_node.prev.next=new_node;% - }% - new_node.next=this.last_node;% - this.last_node.prev=new_node;% - };% - List.prototype.move_to_front=function(it){% - var node=it.get();% - if(node.next!=null && node.prev!=null){% - node.next.prev=node.prev;% - node.prev.next=node.next;% - node.prev=null;% - node.next=this.first_node;% - this.first_node.prev=node;% - this.first_node=node;% - }% - };% - List.prototype.begin=function(){% - var i=new Iterator();% - i.target=this.first_node;% - return(i);% - };% - List.prototype.end=function(){% - var i=new Iterator();% - i.target=this.last_node;% - return(i);% - };% - function Iterator(it){% - if( it!=undefined ){% - this.target=it.target;% - }else {% - this.target=null;% - }% - }% - Iterator.prototype.set=function(it){this.target=it.target;};% - Iterator.prototype.get=function(){return(this.target);};% - Iterator.prototype.deref=function(){return(this.target.data);};% - Iterator.prototype.incr=function(){% - if(this.target.next!=null){this.target=this.target.next;}% - };% - %constructor for node objects that populate the linked list - function Node(x){% - this.prev=null;% - this.next=null;% - this.data=x;% - }% - function sqr(r){return(r*r);}%helper function - %The following code borrows heavily from Bernd Gaertners `Miniball' software, - %originally written in C++, for computing the smallest enclosing ball of a - %set of points; see: http://www.inf.ethz.ch/personal/gaertner/miniball.html - function Basis(){% - this.m=0;% - this.q0=new Array(3);% - this.z=new Array(4);% - this.f=new Array(4);% - this.v=new Array(new Array(3), new Array(3), new Array(3), new Array(3));% - this.a=new Array(new Array(3), new Array(3), new Array(3), new Array(3));% - this.c=new Array(new Array(3), new Array(3), new Array(3), new Array(3));% - this.sqr_r=new Array(4);% - this.current_c=this.c[0];% - this.current_sqr_r=0;% - this.reset();% - }% - Basis.prototype.center=function(){return(this.current_c);};% - Basis.prototype.size=function(){return(this.m);};% - Basis.prototype.pop=function(){--this.m;};% - Basis.prototype.excess=function(p){% - var e=-this.current_sqr_r;% - for(var k=0;k<3;++k){% - e+=sqr(p[k]-this.current_c[k]);% - }% - return(e);% - };% - Basis.prototype.reset=function(){% - this.m=0;% - for(var j=0;j<3;++j){% - this.c[0][j]=0;% - }% - this.current_c=this.c[0];% - this.current_sqr_r=-1;% - };% - Basis.prototype.push=function(p){% - var i, j;% - var eps=1e-32;% - if(this.m==0){% - for(i=0;i<3;++i){% - this.q0[i]=p[i];% - }% - for(i=0;i<3;++i){% - this.c[0][i]=this.q0[i];% - }% - this.sqr_r[0]=0;% - }else {% - for(i=0;i<3;++i){% - this.v[this.m][i]=p[i]-this.q0[i];% - }% - for(i=1;i<this.m;++i){% - this.a[this.m][i]=0;% - for(j=0;j<3;++j){% - this.a[this.m][i]+=this.v[i][j]*this.v[this.m][j];% - }% - this.a[this.m][i]*=(2/this.z[i]);% - }% - for(i=1;i<this.m;++i){% - for(j=0;j<3;++j){% - this.v[this.m][j]-=this.a[this.m][i]*this.v[i][j];% - }% - }% - this.z[this.m]=0;% - for(j=0;j<3;++j){% - this.z[this.m]+=sqr(this.v[this.m][j]);% - }% - this.z[this.m]*=2;% - if(this.z[this.m]<eps*this.current_sqr_r){% - return(false);% - }% - var e=-this.sqr_r[this.m-1];% - for(i=0;i<3;++i){% - e+=sqr(p[i]-this.c[this.m-1][i]);% - }% - this.f[this.m]=e/this.z[this.m];% - for(i=0;i<3;++i){% - this.c[this.m][i]=this.c[this.m-1][i]+this.f[this.m]*this.v[this.m][i];% - }% - this.sqr_r[this.m]=this.sqr_r[this.m-1]+e*this.f[this.m]/2;% - }% - this.current_c=this.c[this.m];% - this.current_sqr_r=this.sqr_r[this.m];% - ++this.m;% - return(true);% - };% - function Miniball(){% - this.L=new List();% - this.B=new Basis();% - this.support_end=new Iterator();% - }% - Miniball.prototype.mtf_mb=function(it){% - var i=new Iterator(it);% - this.support_end.set(this.L.begin());% - if((this.B.size())==4){return;}% - for(var k=new Iterator(this.L.begin());k.get()!=i.get();){% - var j=new Iterator(k);% - k.incr();% - if(this.B.excess(j.deref()) > 0){% - if(this.B.push(j.deref())){% - this.mtf_mb(j);% - this.B.pop();% - if(this.support_end.get()==j.get()){% - this.support_end.incr();% - }% - this.L.move_to_front(j);% - }% - }% - }% - };% - Miniball.prototype.check_in=function(b){% - this.L.push_back(b);% - };% - Miniball.prototype.build=function(){% - this.B.reset();% - this.support_end.set(this.L.begin());% - this.mtf_mb(this.L.end());% - };% - Miniball.prototype.center=function(){% - return(this.B.center());% - };% - Miniball.prototype.radius=function(){% - return(Math.sqrt(this.B.current_sqr_r));% - };% - %create Miniball object - var mb=new Miniball();% - %aperture angle of the virtual camera - var aac=\@MXV@calc;% - %list of mesh nodes - var meshes=annot3D['\@MXV@label'].context3D.scene.meshes;% - %auxiliary vectors - var dir=new annot3D['\@MXV@label'].context3D.Vector3();% - var up=new annot3D['\@MXV@label'].context3D.Vector3();% - var corner=new annot3D['\@MXV@label'].context3D.Vector3();% - %auxiliary 4x4 matrix - var bbox4x4=new annot3D['\@MXV@label'].context3D.Matrix4x4();% - %iterate over all mesh nodes in the scene - for(i=0;i<meshes.count;i++){% - var mesh=meshes.getByIndex(i);% - %get the bbox of the mesh (local coordinates) - var bbox=mesh.computeBoundingBox();% - %local to parent transformation matrix - var trans=mesh.transform.transpose;% - %build local to world transformation matrix by recursively - %multiplying the parent's transf. matrix on the left - var parent=mesh.parent;% - while(parent.transform){% - trans=parent.transform.transpose.multiply(trans);% - parent=parent.parent;% - }% - %transform the local bounding box corner coordinates to - %world coordinates for bounding sphere determination; - %Matrix4x4 method transformDirection(<Vector3>) seems - %to be bugged, therefore we must resort to the - %multiply(<Matrix4x4>) method using an auxiliary matrix - %which contains the local bounding box corner coordinates - % - %auxiliary matrix from bbox.min coordinates - bbox4x4.setView(bbox.min, dir, up);% - %transform to world coordinates - bbox4x4=trans.multiply(bbox4x4.transpose);% - %extract the transformed coordinates - corner.set(bbox4x4.transpose.translation);% - %check-in corner position into Miniball - mb.check_in(new Array(corner.x, corner.y, corner.z));% - %the same procedure with bbox.max - bbox4x4.setView(bbox.max, dir, up);% - bbox4x4=trans.multiply(bbox4x4.transpose);% - corner.set(bbox4x4.transpose.translation);% - mb.check_in(new Array(corner.x, corner.y, corner.z));% - %and with all remaining 6 bbox corners - corner.set(bbox.min.x, bbox.max.y, bbox.max.z);% - bbox4x4.setView(corner, dir, up);% - bbox4x4=trans.multiply(bbox4x4.transpose);% - corner.set(bbox4x4.transpose.translation);% - mb.check_in(new Array(corner.x, corner.y, corner.z));% - corner.set(bbox.min.x, bbox.min.y, bbox.max.z);% - bbox4x4.setView(corner, dir, up);% - bbox4x4=trans.multiply(bbox4x4.transpose);% - corner.set(bbox4x4.transpose.translation);% - mb.check_in(new Array(corner.x, corner.y, corner.z));% - corner.set(bbox.min.x, bbox.max.y, bbox.min.z);% - bbox4x4.setView(corner, dir, up);% - bbox4x4=trans.multiply(bbox4x4.transpose);% - corner.set(bbox4x4.transpose.translation);% - mb.check_in(new Array(corner.x, corner.y, corner.z));% - corner.set(bbox.max.x, bbox.min.y, bbox.min.z);% - bbox4x4.setView(corner, dir, up);% - bbox4x4=trans.multiply(bbox4x4.transpose);% - corner.set(bbox4x4.transpose.translation);% - mb.check_in(new Array(corner.x, corner.y, corner.z));% - corner.set(bbox.max.x, bbox.min.y, bbox.max.z);% - bbox4x4.setView(corner, dir, up);% - bbox4x4=trans.multiply(bbox4x4.transpose);% - corner.set(bbox4x4.transpose.translation);% - mb.check_in(new Array(corner.x, corner.y, corner.z));% - corner.set(bbox.max.x, bbox.max.y, bbox.min.z);% - bbox4x4.setView(corner, dir, up);% - bbox4x4=trans.multiply(bbox4x4.transpose);% - corner.set(bbox4x4.transpose.translation);% - mb.check_in(new Array(corner.x, corner.y, corner.z));% - }% - %compute the smallest enclosing bounding sphere - mb.build();% - %bounding sphere centre - var coo=new annot3D['\@MXV@label'].context3D.Vector3();% - coo.set((mb.center())[0], (mb.center())[1], (mb.center())[2]);% - %radius of orbit - var roo=mb.radius()/ Math.sin(aac * Math.PI/ 360.);% - %result string - var res='';% - var spc=String.fromCharCode(32);% - if(aac!=30){% - res+=util.printf('3Daac=\%s,' + spc,% - (Math.abs(aac) < 1.001e-6 && Math.abs(aac) > 0 ?% - util.printf('\%.18f', aac): aac)% - );% - }% - if(coo.length){% - res+=util.printf( '3Dcoo=\%s' + spc + '\%s' + spc + '\%s,'% - + spc,% - (Math.abs(coo.x) < 1.001e-6 && Math.abs(coo.x) > 0 ?% - util.printf('\%.18f', coo.x): coo.x),% - (Math.abs(coo.y) < 1.001e-6 && Math.abs(coo.y) > 0 ?% - util.printf('\%.18f', coo.y): coo.y),% - (Math.abs(coo.z) < 1.001e-6 && Math.abs(coo.z) > 0 ?% - util.printf('\%.18f', coo.z): coo.z)% - );% - }% - res+=util.printf(% - '3Droo=\%s,' + spc, (roo < 1.001e-6 ? util.printf('\%.18f', roo): roo) - );% - var settings={% - initialize: function(dialog){% - dialog.load({% - 'text': res% - });% - },% - description: {% - name: '3D' + spc + 'Camera' + spc + 'Settings',% - elements: [% - {% - type: 'static_text',% - name: 'Copy' + spc + 'and' + spc + 'paste' + spc +% - 'the' + spc + 'following' + spc + 'to' + spc +% - 'the' + spc + 'option' + spc + 'list' + spc +% - 'of' + spc + spc + '\string\\\string\\includemovie!'% - },% - {% - type: 'edit_text',% - item_id: 'text',% - alignment: 'align_fill',% - readonly: false% - },% - {% - type: 'ok',% - ok_name: 'Close'% - }% - ]% - }% - };% - app.execDialog(settings);% - }catch(e){% - var spc=String.fromCharCode(32);% - app.alert('Error' + spc + 'while' + spc + 'executing' + spc +% - '3Dcalculate:' + spc + e);% - }% - }% - \fi% - %create stream from user provided JavaScript file - \ifx\@MXV@jscriptiiidfile\@empty\else% - \ifthenelse{% create only once - \equal{\@MXV@getlabelvalue{\pdfmdfivesum file {\@MXV@jscriptiiidfile}}}{undefined}% - }{% - \ifpdf% - \pdfobj stream file {\@MXV@jscriptiiidfile}% - \pdfrefobj\pdflastobj% - \edef\@MXV@userjscriptiiidstream{\the\pdflastobj\space 0 R}% - \@MXV@newlabel{\pdfmdfivesum file {\@MXV@jscriptiiidfile}}{\the\pdflastobj}% - \else\if@MXV@dvipdfmx - \special{pdf:fstream @linkuserjscriptiiid\the\@MXV@links\space(\@MXV@jscriptiiidfile)}% - \edef\@MXV@userjscriptiiidstream{@linkuserjscriptiid\the\@MXV@links}% - \@MXV@newlabel{\pdfmdfivesum file {\@MXV@jscriptiiidfile}}{@linkuserjscriptiid\the\@MXV@links}% - \else% - \pdfmark{% - pdfmark=/OBJ,% - Raw={% - /_objdef {linkuserjscriptiiid\the\@MXV@links}% - /type/stream% - }% - }% - \pdfmark{% - pdfmark=/PUT,% - Raw={% - {linkuserjscriptiiid\the\@MXV@links}% - (\@MXV@jscriptiiidfile) (r) file% - }% - }% - \edef\@MXV@userjscriptiiidstream{% - {linkuserjscriptiiid\the\@MXV@links}% - }% - \@MXV@newlabel{\pdfmdfivesum file {\@MXV@jscriptiiidfile}}% - {linkuserjscriptiiid\the\@MXV@links}% - \fi\fi% - }{% - \ifpdf% - \edef\@MXV@userjscriptiiidstream{% - \@MXV@getlabelvalue{\pdfmdfivesum file {\@MXV@jscriptiiidfile}}\space 0 R% - }% - \else% - \edef\@MXV@userjscriptiiidstream{% - {\@MXV@getlabelvalue{\pdfmdfivesum file {\@MXV@jscriptiiidfile}}}% - }% - \fi% - }% - \fi% - \edef\@MXV@jscriptiiidaction{% - /Next <<% - /S/JavaScript% - /JS (\@MXV@linkjscriptiiid)% - \ifx\@MXV@jscriptiiidfile\@empty\else% - /Next <<% - /S/JavaScript% - /JS \@MXV@userjscriptiiidstream% user provided script - >>% - \fi% - >>% - }% - }{\edef\@MXV@jscriptiiidaction{}}% - }{% #### 2D #### - \setkeys{MXV@user}{#1}% - %retrieve original settings - \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.mouse}}{true}}{% - \setboolean{@MXV@mouse}{true}% - }{% - \setboolean{@MXV@mouse}{false}% - }% - \edef\@MXV@ctrls{\@MXV@getlabelvalue{@MXV@\@MXV@label.showUI}}% - \edef\@MXV@palindrome{\@MXV@getlabelvalue{@MXV@\@MXV@label.palindrome}}% - \edef\@MXV@repeat{\@MXV@getlabelvalue{@MXV@\@MXV@label.repeat}}% - \edef\@MXV@rate{\@MXV@getlabelvalue{@MXV@\@MXV@label.rate}}% - \edef\@MXV@startat{\@MXV@getlabelvalue{@MXV@\@MXV@label.startAt}}% - \edef\@MXV@endat{\@MXV@getlabelvalue{@MXV@\@MXV@label.endAt}}% - \edef\@MXV@volume{\@MXV@getlabelvalue{@MXV@\@MXV@label.volume}}% - \if@MXV@linkreset\else% - \setkeys{MXV@user}{#1}%override with new settings - \fi% - % - \edef\@MXV@operation{}% - % - %get the player ID - \edef\@MXV@currplayer{\@MXV@getlabelvalue{@MXV@\@MXV@label.playerid}}% - % - %see whether a sound inclusion is being referenced - \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.issound}}{true}}{% - \setboolean{@MXV@issound}{true}% - }{% - \setboolean{@MXV@issound}{false}% - }% - % - %create /OP and /JS entries - \if@MXV@linkplay% - \edef\@MXV@operation{% - /OP 0% - /JS (% - if(focusonplayer==undefined){% - var focusonplayer=0; %shared by all annots - }% - \@MXV@settings{\@MXV@ctrls}{\@MXV@palindrome}{\@MXV@repeat}% - {\@MXV@rate}{\@MXV@startat}{\@MXV@endat}{\@MXV@volume}% - \@MXV@events{\@MXV@currplayer}% - {\if@MXV@mouse true\else false\fi}% - {true}% - \if@MXV@requirereopen\else - try{% - \ifx\@MXV@@startat\@empty - player\@MXV@currplayer.seek(% - player\@MXV@currplayer.settings.startAt% - ); - \else - player\@MXV@currplayer.seek(\@MXV@@startat); - \fi - player\@MXV@currplayer.play(); - \ifx\@MXV@@startat\@empty - player\@MXV@currplayer.seek(% - player\@MXV@currplayer.settings.startAt% - ); - \else - player\@MXV@currplayer.seek(\@MXV@@startat); - \fi - }% - catch(e)\@charlb% - \fi% - try{% - if(player\@MXV@currplayer.isOpen){% - player\@MXV@currplayer.close(% - app.media.closeReason.general); - player\@MXV@currplayer=null; - }% - }% - catch(e){}% - % - try{% - var player\@MXV@currplayer=app.media.openPlayer({% - settings: settings,% - events: events% - });% - }% - catch (e){}% - \if@MXV@requirereopen\else - \@charrb% - \fi% - )% - }% - \fi% - \if@MXV@linkresume% resume/pause - \edef\@MXV@operation{% - /OP 3% - /JS (% - try{% - \if@MXV@issound\else player\@MXV@currplayer.visible=true;\fi% - if(!player\@MXV@currplayer.isPlaying){% - player\@MXV@currplayer.settings.privateData.paused=false; - player\@MXV@currplayer.play(); - if(!player\@MXV@currplayer.isPlaying){% - %media at end will restart from beginning - if( - player\@MXV@currplayer.settings.startAt.time - || player\@MXV@currplayer.settings.startAt.frame - || player\@MXV@currplayer.settings.startAt.marker - || player\@MXV@currplayer.id == - 'vnd.adobe.swname:AAPL_QuickTime' - ){ - player\@MXV@currplayer.seek( - player\@MXV@currplayer.settings.startAt); - }else{ - player\@MXV@currplayer.stop(); - } - player\@MXV@currplayer.play(); - }% - }% - else{% - player\@MXV@currplayer.pause(); - player\@MXV@currplayer.settings.privateData.paused=true; - }% - }% - catch(e){% open new player if not yet open - if(focusonplayer==undefined){% - var focusonplayer=0; %shared by all annots - }% - \@MXV@settings{\@MXV@ctrls}{\@MXV@palindrome}{\@MXV@repeat}% - {\@MXV@rate}{\@MXV@startat}{\@MXV@endat}{\@MXV@volume}% - \@MXV@events{\@MXV@currplayer}% - {\if@MXV@mouse true\else false\fi}% - {true}% - try{% - var player\@MXV@currplayer=app.media.openPlayer({% - settings: settings,% - events: events% - }); - }% - catch (e){}% - }% - )% - }% - \fi% - \if@MXV@linkstop% - \edef\@MXV@operation{% - /OP 1% - /JS (% - try{% - if(!player\@MXV@currplayer.isPlaying){% - player\@MXV@currplayer.settings.privateData.paused=false; - player\@MXV@currplayer.play(); - }% - player\@MXV@currplayer.stop(); - if( - player\@MXV@currplayer.settings.startAt.time - || player\@MXV@currplayer.settings.startAt.frame - || player\@MXV@currplayer.settings.startAt.marker - || player\@MXV@currplayer.id == - 'vnd.adobe.swname:AAPL_QuickTime' - ){ - player\@MXV@currplayer.seek(% - player\@MXV@currplayer.settings.startAt); - } - }% - catch(e){}% - )% - }% - \fi% - \if@MXV@linkpause% pause/resume - \edef\@MXV@operation{% - /OP 2% - /JS (% - try{% - \if@MXV@issound\else player\@MXV@currplayer.visible=true;\fi% - if(!player\@MXV@currplayer.isPlaying){% - player\@MXV@currplayer.settings.privateData.paused=false; - player\@MXV@currplayer.play(); - if(!player\@MXV@currplayer.isPlaying){% - %media at end will restart from beginning - if( - player\@MXV@currplayer.settings.startAt.time - || player\@MXV@currplayer.settings.startAt.frame - || player\@MXV@currplayer.settings.startAt.marker - || player\@MXV@currplayer.id == - 'vnd.adobe.swname:AAPL_QuickTime' - ){ - player\@MXV@currplayer.seek( - player\@MXV@currplayer.settings.startAt); - }else{ - player\@MXV@currplayer.stop(); - } - player\@MXV@currplayer.play(); - }% - }% - else{% - player\@MXV@currplayer.pause(); - player\@MXV@currplayer.settings.privateData.paused=true; - }% - }% - catch(e){% open new player if not yet open - if(focusonplayer==undefined){% - var focusonplayer=0; %shared by all annots - }% - \@MXV@settings{\@MXV@ctrls}{\@MXV@palindrome}{\@MXV@repeat}% - {\@MXV@rate}{\@MXV@startat}{\@MXV@endat}{\@MXV@volume}% - \@MXV@events{\@MXV@currplayer}% - {\if@MXV@mouse true\else false\fi}% - {true}% - try{% - var player\@MXV@currplayer=app.media.openPlayer({% - settings: settings,% - events: events% - }); - }% - catch (e){}% - }% - )% - }% - \fi% - \if@MXV@linkclose% - \edef\@MXV@operation{% - /OP 1% - /JS (% - try{% - player\@MXV@currplayer.close(% - app.media.closeReason.general); - player\@MXV@currplayer=null; - }% - catch(e){}% - )% - }% - \fi% - }% - \fi% - \fi% - % - \ifpdf% - \ifthenelse{\isundefined{\@pdfborder}}{% - \def\@MXV@linkattr{}% - }{% - \edef\@MXV@linkattr{% - \if@MXV@beamer% - \@MXV@pdfborder% - \else% - /Border [\@pdfborder]% - \fi% - /C [\@linkbordercolor]% - /H \@pdfhighlight% - }% - }% - % - \pdfstartlink% - attr{\@MXV@linkattr}% - user{% - /Subtype /Link% - /A <<% - /S/GoTo% - /D (@MXV@\@MXV@@label)% - \if@MXV@@draft\else% - \if@MXV@externalviewer\else% - \if@MXV@iiid% - \ifx\@MXV@iiidview\@empty\else% - /Next <<% - /S/GoTo3DView% - /TA \@MXV@getlabelvalue{@MXV@\@MXV@@label.annot}\space 0 R% - /V \@MXV@iiidview% - \fi% - \@MXV@jscriptiiidaction% - \ifx\@MXV@iiidview\@empty\else% - >>% - \fi% - \else% - /Next <<% - /S/Rendition% - /R \@MXV@getlabelvalue{@MXV@\@MXV@@label.rendition}\space 0 R% - /AN \@MXV@getlabelvalue{@MXV@\@MXV@@label.annot}\space 0 R% - \@MXV@operation% - >>% - \fi% - \fi% - \fi% - >>% - }% - \usebox{\@MXV@textbox}% write out text box - \pdfendlink% - \else\if@MXV@dvipdfmx - \ifthenelse{\isundefined{\@pdfborder}}{% - \def\@MXV@linkattr{}% - }{% - \edef\@MXV@linkattr{% - \if@MXV@beamer% - \@MXV@pdfborder% - \else% - /Border [\@pdfborder]% - \fi% - /C [\@linkbordercolor]% - /H \@pdfhighlight% - }% - }% - % - \special{pdf:bannot <<% - \@MXV@linkattr% - /Subtype /Link% - /A <<% - /S/GoTo% - /D (@MXV@\@MXV@@label)% - \if@MXV@@draft\else% - \if@MXV@externalviewer\else% - \if@MXV@iiid% - \ifx\@MXV@iiidview\@empty\else% - /Next <<% - /S/GoTo3DView% - /TA \@MXV@getlabelvalue{@MXV@\@MXV@@label.annot}% - /V \@MXV@iiidview% - \fi% - \@MXV@jscriptiiidaction% - \ifx\@MXV@iiidview\@empty\else% - >>% - \fi% - \else% - /Next <<% - /S/Rendition% - /R \@MXV@getlabelvalue{@MXV@\@MXV@@label.rendition}% - /AN \@MXV@getlabelvalue{@MXV@\@MXV@@label.annot}% - \@MXV@operation% - >>% - \fi% - \fi% - \fi% - >>% - >>}% - \usebox{\@MXV@textbox}% write out text box - \special{pdf:eannot}% - \else% - \pdfmark[{\usebox{\@MXV@textbox}}]{% - pdfmark=/ANN,% - Subtype=/Link,% - Color=\@linkbordercolor,% - AcroHighlight=\@pdfhighlight,% - Raw={% - \@MXV@pdfborder% - /_objdef {linkannot\the\@MXV@links}% - /Action <<% - /S/GoTo% - /D/@MXV@\@MXV@@label% - \if@MXV@@draft\else% - \if@MXV@externalviewer\else% - \if@MXV@iiid% - \ifx\@MXV@iiidview\@empty\else% - /Next <<% - /S/GoTo3DView% - /TA \@MXV@getlabelvalue{@MXV@\@MXV@@label.annot}% - /V \@MXV@iiidview% - \fi% - \@MXV@jscriptiiidaction% - \ifx\@MXV@iiidview\@empty\else% - >>% - \fi% - \else% - /Next <<% - /S /Rendition% - /R {mediarendition\@MXV@getlabelvalue{@MXV@\@MXV@@label.annotid}}% - /AN {screenannot\@MXV@getlabelvalue{@MXV@\@MXV@@label.annot}}% - \@MXV@operation% - >>% - \fi% - \fi% - \fi% - >>% - }% - }% - \fi\fi% - }% - }% -} - -%set to true for certain \movieref options, which require the media player to -%be re-opened -\newboolean{@MXV@requirereopen} - -%standard keys to be processed first -%key definitions for options to \includemovie -\define@key{MXV@user}{draft}[true]{% - \setboolean{@MXV@@draft}{#1}% -} -\define@key{MXV@user}{final}[true]{% - \ifthenelse{\equal{#1}{true}}{% - \setboolean{@MXV@@draft}{false}% - }{% - \setboolean{@MXV@@draft}{true}% - }% -} -\define@key{MXV@user}{label}{%for use with movieref - \gdef\@MXV@label{#1}% -} -\define@key{MXV@user}{controls}[true]{% - \setboolean{@MXV@requirereopen}{true}% - \xdef\@MXV@ctrls{, showUI: #1}% - \xdef\@MXV@@ctrls{/C #1}% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \gdef\@MXV@iiidtoolb{/TB #1}% - }{}% -} -\define@key{MXV@user}{toolbar}[true]{% - \xdef\@MXV@ctrls{, showUI: #1}% - \xdef\@MXV@@ctrls{/C #1}% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \gdef\@MXV@iiidtoolb{/TB #1}% - }{}% -} -\define@key{MXV@user}{volume}{% - \def\@MXV@@volume{/V #1}% - \def\@MXV@volume{#1}% - \setboolean{@MXV@requirereopen}{true}% -} -\define@key{MXV@user}{mimetype}{% - \ifthenelse{\equal{#1}{model/u3d}}{% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \setboolean{@MXV@iiid}{true}% - \xdef\@MXV@iiidsubtype{U3D}% - }{\@MXV@neediiiD}% - }{}% - \def\@MXV@mime{#1}% -} -\define@key{MXV@user}{playerid}{% - \def\@MXV@player{% - /PL<</MU [<</PID<</U (vnd.adobe.swname:#1)>>>>]>>% - }% -} -\define@key{MXV@user}{autoplay}[true]{% - \setboolean{@MXV@autoplay}{#1}% - \if@MXV@autoplay% - \setboolean{@MXV@autoresume}{false}% - \fi% -} -\define@key{MXV@user}{autostop}[true]{% - \setboolean{@MXV@autostop}{#1}% - \if@MXV@autostop% - \setboolean{@MXV@autopause}{false}% - \fi% -} -\define@key{MXV@user}{autoresume}[true]{% - \setboolean{@MXV@autoresume}{#1}% - \if@MXV@autoresume% - \setboolean{@MXV@autoplay}{false}% - \setboolean{@MXV@autoclose}{false}% - \fi% -} -\define@key{MXV@user}{autopause}[true]{% - \setboolean{@MXV@autopause}{#1}% - \if@MXV@autopause% - \setboolean{@MXV@autostop}{false}% - \setboolean{@MXV@autoclose}{false}% - \fi% -} -\define@key{MXV@user}{autoclose}[true]{% - \setboolean{@MXV@autoclose}{#1}% - \if@MXV@autoclose% - \setboolean{@MXV@autostop}{false}% - \setboolean{@MXV@autopause}{false}% - \fi% -} -\define@key{MXV@user}{continue}[true]{% - \setboolean{@MXV@autostop}{false}% - \setboolean{@MXV@autopause}{false}% - \setboolean{@MXV@autoclose}{false}% -} -\define@key{MXV@user}{open}[true]{% - %no longer supported; once open, media remains loaded - %to avoid reloading when media is to be played again -} -\define@key{MXV@user}{mouse}[true]{% - \setboolean{@MXV@mouse}{#1}% - \setboolean{@MXV@requirereopen}{true}% - \ifthenelse{\equal{false}{#1}\AND\boolean{@MXV@iiiDfeat}}{% - \def\@MXV@iiidia{/3DI #1}% - }{}% -} -\define@key{MXV@user}{palindrome}[true]{% - \xdef\@MXV@palindrome{, palindrome: #1}% - \setboolean{@MXV@requirereopen}{true}% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \gdef\@MXV@iiidpalindrome{/Subtype/Oscillating}% - }{}% -} -\define@key{MXV@user}{rate}{% - \setboolean{@MXV@requirereopen}{true}% - \xdef\@MXV@rate{, rate: #1}% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \gdef\@MXV@iiidrate{/TM #1}% - }{}% -} -\define@key{MXV@user}{repeat}[Infinity]{% - \setboolean{@MXV@requirereopen}{true}% - \ifthenelse{% - \equal{#1}{Infinity}\OR% - \equal{#1}{0}% - }{% - \xdef\@MXV@repeat{, repeat: Infinity}% - \xdef\@MXV@@repeat{/RC 0}% - }{% - \xdef\@MXV@repeat{, repeat: #1}% - \xdef\@MXV@@repeat{/RC #1}% - }% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \ifthenelse{\equal{#1}{Infinity}}{% - \global\@MXV@iiidrepeat=-1% - }{% - \global\@MXV@iiidrepeat=#1% - }% - }{}% -} -\define@key{MXV@user}{startat}{% - \xdef\@MXV@startat{, startAt: {#1}}% - \xdef\@MXV@@startat{{#1}}% -} -\define@key{MXV@user}{endat}{% - \setboolean{@MXV@requirereopen}{true}% - \xdef\@MXV@endat{, endAt: {#1}}% -} -\define@key{MXV@user}{poster}[true]{% - \ifthenelse{\equal{#1}{true}}{% option without arg - \setboolean{@MXV@runposter}{true}% - }{% - \def\@MXV@box##1##2##3{% - \ifpdf% - \mbox{\pdfximage width ##1 height ##2 depth ##3 {#1}}% - \pdfrefximage\pdflastximage% - \else% - \ifthenelse{\isundefined{\includegraphics}}{\@MXV@missing{graphics}}{}% - \@MXV@totalheight=##2% - \advance\@MXV@totalheight by ##3% - \raisebox{-##3}[##2][##3]{% - \includegraphics[% - width=##1,height=##2,totalheight=\@MXV@totalheight,clip]{#1}% - }% - \fi% - }% - }% -} -\define@key{MXV@user}{externalviewer}[true]{% - \setboolean{@MXV@externalviewer}{#1}% -} -\define@key{MXV@user}{inline}[true]{% - \if@MXV@url% - \setboolean{@MXV@inline}{false}% - \else% - \setboolean{@MXV@inline}{#1}% - \fi% - \if@MXV@inline\else% - \setboolean{@MXV@attachment}{false}% - \fi% -} -\define@key{MXV@user}{url}[true]{% - \setboolean{@MXV@url}{#1}% - \if@MXV@url% - \setboolean{@MXV@inline}{false}% - \setboolean{@MXV@attachment}{false}% - \def\@MXV@fsentry{/FS /URL}% - \fi% -} -\define@key{MXV@user}{attach}[true]{% - \setboolean{@MXV@attachment}{#1}% - \if@MXV@attachment% - \setboolean{@MXV@inline}{true}% - \fi% -} -\define@key{MXV@user}{text}{% - \setboolean{@MXV@boxopt}{true}% - \savebox{\@MXV@textbox}{#1}% - \@MXV@width=\wd\@MXV@textbox% - \@MXV@height=\ht\@MXV@textbox% - \@MXV@depth=\dp\@MXV@textbox% -} -\define@key{MXV@user}{textoverposter}[true]{% - \setboolean{@MXV@textoverposter}{#1}% -} -\define@key{MXV@user}{depth}{%set depth of display area - \gdef\@MXV@boxdepth{#1}% -} -%3D specific options -\define@key{MXV@user}{3Dbg}{% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \def\@MXV@background{/BG<</CS/DeviceRGB/C[#1]>>}% - }{\@MXV@neediiiD}% -} -\define@key{MXV@user}{3Djscript}{% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \IfFileExists{#1}{% - \def\@MXV@jscriptiiidfile{#1}% - }{% - \PackageError{movie15}{Script file `#1' cannot be opened for embedding% - }{% - Make sure file `#1' exists and is readable!% - }% - }% - }{\@MXV@neediiiD}% -} -\define@key{MXV@user}{3Dcoo}{% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \def\@MXV@coo{#1}% - \setboolean{@MXV@defaultviewprovided}{true}% - }{\@MXV@neediiiD}% -} -\define@key{MXV@user}{3Dc2c}{% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \def\@MXV@ctoc{#1}% - \setboolean{@MXV@defaultviewprovided}{true}% - }{\@MXV@neediiiD}% -} -\define@key{MXV@user}{3Droo}{% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \def\@MXV@roo{#1}% - \setboolean{@MXV@defaultviewprovided}{true}% - }{\@MXV@neediiiD}% -} -\define@key{MXV@user}{3Daac}{% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \def\@MXV@aac{#1}% - \setboolean{@MXV@defaultviewprovided}{true}% - }{\@MXV@neediiiD}% -} -\define@key{MXV@user}{3Droll}{% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \def\@MXV@roll{#1}% - \setboolean{@MXV@defaultviewprovided}{true}% - }{\@MXV@neediiiD}% -} -\define@key{MXV@user}{3Dviews}{% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \IfFileExists{#1}{% - \def\@MXV@viewsfile{#1}% - }{% - \PackageError{movie15}{3D views file `#1' cannot be opened% - }{% - Make sure file `#1' exists and is readable!% - }% - }% - }{\@MXV@neediiiD}% -} -\define@key{MXV@user}{3Dlights}{% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \gdef\@MXV@lights{/LS <</Subtype/#1>>}% - }{\@MXV@neediiiD}% -} -\define@key{MXV@user}{3Drender}{% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \gdef\@MXV@render{/RM <</Subtype/#1>>}% - }{\@MXV@neediiiD}% -} -%options for \movieref command -\define@key{MXV@user}{play}[true]{% - \setboolean{@MXV@linkplay}{#1}% - \if@MXV@linkplay% - \setboolean{@MXV@linkpause}{false}% - \setboolean{@MXV@linkresume}{false}% - \setboolean{@MXV@linkstop}{false}% - \setboolean{@MXV@linkclose}{false}% - \fi% -} -\define@key{MXV@user}{pause}[true]{% - \setboolean{@MXV@linkpause}{#1}% - \if@MXV@linkpause% - \setboolean{@MXV@linkresume}{false}% - \setboolean{@MXV@linkstop}{false}% - \setboolean{@MXV@linkclose}{false}% - \setboolean{@MXV@linkplay}{false}% - \fi% -} -\define@key{MXV@user}{resume}[true]{% - \setboolean{@MXV@linkresume}{#1}% - \if@MXV@linkresume% - \setboolean{@MXV@linkpause}{false}% - \setboolean{@MXV@linkstop}{false}% - \setboolean{@MXV@linkclose}{false}% - \setboolean{@MXV@linkplay}{false}% - \fi% -} -\define@key{MXV@user}{stop}[true]{% - \setboolean{@MXV@linkstop}{#1}% - \if@MXV@linkstop% - \setboolean{@MXV@linkpause}{false}% - \setboolean{@MXV@linkresume}{false}% - \setboolean{@MXV@linkclose}{false}% - \setboolean{@MXV@linkplay}{false}% - \fi% -} -\define@key{MXV@user}{close}[true]{% - \setboolean{@MXV@linkclose}{#1}% - \if@MXV@linkclose% - \setboolean{@MXV@linkpause}{false}% - \setboolean{@MXV@linkresume}{false}% - \setboolean{@MXV@linkstop}{false}% - \setboolean{@MXV@linkplay}{false}% - \fi% -} -\define@key{MXV@user}{reset}[true]{% - \setboolean{@MXV@linkreset}{#1}% - \if@MXV@linkreset% - \setboolean{@MXV@requirereopen}{true}% - \fi% -} -\define@key{MXV@user}{default}[true]{% synonyme for `reset' - \setboolean{@MXV@linkreset}{#1}% - \if@MXV@linkreset% - \setboolean{@MXV@requirereopen}{true}% - \fi% -} -\define@key{MXV@user}{3Dviewindex}{% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \ifthenelse{% - \equal{#1}{F}% - \OR\equal{#1}{L}% - \OR\equal{#1}{N}% - \OR\equal{#1}{P}% - \OR\equal{#1}{D}% - }{% - \gdef\@MXV@iiidview{/#1}% any of F, L, N, P, D - }{% - \gdef\@MXV@iiidview{#1}% number (index) - }% - \setboolean{@MXV@defaultviewprovided}{false}% - }{\@MXV@neediiiD}% -} -\define@key{MXV@user}{3Dcalculate}[30]{% - %calculate optimal 3D settings for roo and coo for a given aac - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \gdef\@MXV@calc{#1}% - }{\@MXV@neediiiD}% -} -\define@key{MXV@user}{3Dgetview}[true]{% - %print current 3D camera settings - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \setboolean{@MXV@iiidgetview}{#1}% - }{\@MXV@neediiiD}% -} -\define@key{MXV@user}{3Dresource}{% - \ifthenelse{\boolean{@MXV@iiiDfeat}}{% - \IfFileExists{#1}{% - \setboolean{@MXV@resource}{true}% - \xdef\@MXV@iiidopt{3Dresource=#1, \@MXV@iiidopt}% - }{% - \PackageError{movie15}{3D resource file `#1' cannot be opened% - }{% - Make sure file `#1' exists and is readable!% - }% - }% - }{\@MXV@neediiiD}% -} - -%compatibility options for \movie and \hyperlinkmovie commands -\define@key{MXV@user}{borderwidth}{% - %ignored; acroread doesn't draw borders around screen annots anyway -} -\define@key{MXV@user}{height}{%set height of display area - \gdef\@MXV@boxheight{#1}% -} -\define@key{MXV@user}{width}{%set width of display area - \gdef\@MXV@boxwidth{#1}% -} -\define@key{MXV@user}{autostart}[true]{% - \xdef\@MXV@autostart{, autoplay=#1}% -} -\define@key{MXV@user}{loop}[Infinity]{% - \xdef\@MXV@loop{, repeat=#1}% -} -\define@key{MXV@user}{once}[]{% - \xdef\@MXV@loop{, repeat=1}% -} -\define@key{MXV@user}{showcontrols}[true]{% - \xdef\@MXV@showcontrols{, controls=#1}% -} -\define@key{MXV@user}{start}{% - \gdef\@MXV@starttime##1s{% - \global\@MXV@start=##1pt% - }% - \@MXV@starttime #1% -} -\define@key{MXV@user}{duration}{% - \gdef\@MXV@durationtime##1s{% - \global\@MXV@end=##1pt% - }% - \@MXV@durationtime #1% -} - -%options to be passed to internal macro \@MXV@includeiiid -\define@key{MXV@iiid}{3Dresource}{% - \@MXV@addresource{#1}% -} - -%compatibility macros -\providecommand\movie[3][]{% - \ifpdf\else% - \ifthenelse{\isundefined{\pdfmark}\AND\isundefined{\@pdfm@mark}}{\@MXV@missing{hyperref}}{}% - \fi% - \leavevmode% - \@MXV@reset% - \def\@MXV@autostart{}\def\@MXV@loop{}\def\@MXV@showcontrols{}% - \def\@MXV@starttime{}\def\@MXV@durationtime{}% - \setkeys{MXV@user}{#1}% - % - %sanity checks - \if@MXV@boxopt% - \PackageError{movie15}{% - Option `text' cannot be used with command `\string\movie'.\MessageBreak - Instead, put text into the 1st argument of `\string\movie' - }{}% - \fi% - % - \ifx\@MXV@durationtime\@empty\else\ifx\@MXV@startat\@empty\else% - \PackageError{movie15}{% - Options `startat' and `duration' cannot be used\MessageBreak - together.\MessageBreak - Possible combinations are `startat'/`endat',\MessageBreak - `start'/`endat' or `start'/`duration' - }{}% - \fi\fi% - % - %option list - \edef\@MXV@movieoptions{#1\@MXV@autostart\@MXV@loop\@MXV@showcontrols}% - % - %determine playback section - \ifx\@MXV@starttime\@empty\else% - \edef\@MXV@movieoptions{\@MXV@movieoptions, % - startat=time:\strip@pt\@MXV@start}% - \fi% - \ifx\@MXV@durationtime\@empty\else% - \advance\@MXV@end by \@MXV@start% - \edef\@MXV@movieoptions{\@MXV@movieoptions, % - endat=time:\strip@pt\@MXV@end}% - \fi% - % - %text option from 2nd argument - \savebox{\@MXV@textbox}{#2}% - \edef\@MXV@movieoptions{[\@MXV@movieoptions, text={\noexpand\usebox{% - \noexpand\@MXV@textbox}}]}% - \expandafter% - \includemovie\@MXV@movieoptions{\@MXV@boxwidth}{\@MXV@boxheight}{#3}% -} - -\newcommand\hyperlinkmovie[3][]{% - \ifpdf\else% - \ifthenelse{\isundefined{\pdfmark}\AND\isundefined{\@pdfm@mark}}{\@MXV@missing{hyperref}}{}% - \fi% - \leavevmode% - \@MXV@reset% - \def\@MXV@autostart{}\def\@MXV@loop{}\def\@MXV@showcontrols{}% - \def\@MXV@starttime{}\def\@MXV@durationtime{}% - \setkeys{MXV@user}{#1}% - % - %sanity check - \ifx\@MXV@durationtime\@empty\else\ifx\@MXV@startat\@empty\else% - \PackageError{movie15}{% - Options `startat' and `duration' cannot be used\MessageBreak - together.\MessageBreak - Possible combinations are `startat'/`endat',\MessageBreak - `start'/`endat' or `start'/`duration' - }{}% - \fi\fi% - % - %option list - \edef\@MXV@movieoptions{#1\@MXV@autostart\@MXV@loop\@MXV@showcontrols}% - % - %determine playback section - \ifx\@MXV@starttime\@empty\else% - \edef\@MXV@movieoptions{\@MXV@movieoptions, % - startat=time:\strip@pt\@MXV@start}% - \fi% - \ifx\@MXV@durationtime\@empty\else% - \advance\@MXV@end by \@MXV@start% - \edef\@MXV@movieoptions{\@MXV@movieoptions, % - endat=time:\strip@pt\@MXV@end}% - \fi% - % - \edef\@MXV@movieoptions{[\@MXV@movieoptions]}% - \expandafter\movieref\@MXV@movieoptions{#2}{#3}% -} diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/recplot.asy b/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/recplot.asy deleted file mode 100644 index 2c3ddca9f31..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/recplot.asy +++ /dev/null @@ -1,61 +0,0 @@ -// 使用自适应方法产生 y = f(x) 的图象 guide
-guide plot(real f(real), real min, real max, int nplotpoints=10, int maxrec=7)
-{
- if (nplotpoints < 2)
- nplotpoints = 2;
- // 描初始的 nplotpoints 个点,并估计函数变化幅度
- pair[] fpoints;
- real fmax = -infinity, fmin = infinity;
- for (int i = 0; i <= nplotpoints; ++i) {
- real x = min + i/nplotpoints * (max-min);
- pair z = (x, f(x));
- fmax = max(fmax, z.y);
- fmin = min(fmin, z.y);
- fpoints.push(z);
- }
- // 定义辅助的递归函数:在规定的递归次数之内,在两个样本点之间描新点
- // 误差 fuzz 达到函数变化幅度估计值的 1/500 为止
- // 这个误差值在一般屏幕显示上只有一两个像素
- real fuzz = max(0.002(fmax-fmin), realEpsilon);
- guide helper(int nrec, pair a, pair b)
- {
- if (nrec == 0)
- return b;
- pair mid = (a+b)/2;
- pair z = (mid.x, f(mid.x));
- if (abs(z.y-mid.y) < fuzz)
- return z -- b;
- else
- return helper(nrec-1, a, z) -- helper(nrec-1, z, b);
- }
- // 递归构造 guide
- guide g = fpoints[0];
- for (int i = 0; i < nplotpoints; ++i)
- g = g -- helper(maxrec, fpoints[i], fpoints[i+1]);
- return g;
-}
-
-
-
-//////////////////////////////////////////
-
-real f(real x) {return 2sin(x^3);}
-real min = -5.0, max = 5.0;
-
-// 用自适应方法绘制函数 f(x)
-guide g = scale(1cm)*plot(f, min, max);
-draw(g, red+1pt);
-for (int i = 0; i < size(g); ++i) {
- draw(point(g,i), blue+2pt);
-}
-write(size(g));
-
-
-// 用 graph 模块的默认方法(均匀取点)绘制函数 f(x)
-import graph;
-guide h = shift(-5cm*I)*scale(1cm)*graph(f, min, max);
-draw(h, orange+1pt);
-for (int i = 0; i < size(h); ++i) {
- draw(point(h,i), blue+2pt);
-}
-write(size(h));
diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/stars.asy b/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/stars.asy deleted file mode 100644 index 3d4fd93ef75..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/stars.asy +++ /dev/null @@ -1,70 +0,0 @@ -settings.tex = "xelatex";
-
-srand(seconds());
-
-usepackage("xeCJK");
-texpreamble(
-"\setCJKmainfont{FZSongHeiTi_GB18030}");
-
-Label L =
-"\fontsize{16bp}{20bp}\selectfont
-\begin{minipage}{3em}
-天上星\par
-亮晶晶\par
-永燦爛\par
-長安寧
-\end{minipage}";
-
-path unitstar(int n = 5, real r = 0, real angle = 90)
-{
- guide g;
- if (n < 2) return nullpath;
- real rot = 180/n;
- if (r == 0) {
- if (n < 5)
- r = 1/4;
- else
- r = Cos(2rot) / Cos(rot);
- }
- for (int k = 0; k < n; ++k)
- g = g -- dir(angle+2k*rot) -- r * dir(angle+(2k+1)*rot);
- g = g -- cycle;
- return g;
-}
-
-pen operator %(pen p, real x) {return interp(white, p, x/100);}
-pen[] colors = {blue%50, yellow%50, red%50, orange%50};
-for (int i = 0; i < 100; ++i)
-{
- pair pos = (unitrand() * 12cm, unitrand()*9cm);
- int r = rand();
- if (r < randMax/3)
- fill(shift(pos) * scale(2+unitrand()*3) * unitstar(4),
- colors[rand()%colors.length]);
- else if (r < 2/3*randMax)
- fill(shift(pos) * scale(2+unitrand()*3) * unitstar(5),
- colors[rand()%colors.length]);
- else
- draw(pos, white+1bp);
-}
-
-
-fill(circle((2cm,8cm),0.5cm), paleyellow);
-unfill(circle((1.7cm,7.9cm), 0.5cm));
-
-pair orig=(9cm,0.5cm), end=(1cm,4cm);
-path tail = orig{NW} .. {W}end;
-path tailN = orig{NW} .. {W}(end+N);
-path tailS = orig{NW} .. {W}(end+S);
-
-radialshade(circle(orig, 0.5cm), yellow, orig, 0.1cm, darkblue, orig, 0.5cm);
-for (int i = 0; i < 1000; ++i) {
- real t = unitrand()^3;
- real r = (0.2 + t)*cm;
- pair z = point(tail, t) + r*(unitrand()-1/2, unitrand()-1/2);
- draw(z,interp(yellow,white,unitrand())+1bp);
-}
-
-label(L, (12cm,9cm), align=SW, yellow, Fill(darkblue+opacity(0.5)));
-
-shipout(bbox(Fill(darkblue)));
diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/tiling.asy b/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/tiling.asy deleted file mode 100644 index d13bf6f0d79..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/tiling.asy +++ /dev/null @@ -1,34 +0,0 @@ -// tiling.asy
-// 铺砌图案
-// by milksea
-import math;
-size(15cm);
-
-void sheephead(pair pos, pen color)
-{
- path headleft = (0,1.5){SE} .. tension 1.4 .. (0.5,-0.2){dir(-150)} ..
- {NW}(0,0);
- path headbottom = (0,0){SE} .. {dir(30)}(0.5,-0.2) ..{SE}(3,0);
- path head = headleft & headbottom &
- shift(3,0)*reverse(headleft) & shift(0,1.5)*reverse(headbottom) & cycle;
-
- path eye = circle((2.6,1.2), 0.1);
- path[] ear = (2.3,1.3) .. (2.1,1.5) .. (2.2,1.7)
- & (2.2,1.7) .. (2.4,1.6) .. (2.5,1.4);
- path muzzle = circle((3.5,0.5), 0.15);
- path mouth = (3,0.4) .. (3.4,0.1) .. (3.6,0.2);
-
- filldraw(shift(pos) * head, color, linewidth(2));
- fill(shift(pos) * (eye ^^ muzzle));
- draw(shift(pos) * (ear ^^ mouth), linewidth(2));
-}
-
-for (int i = 0; i < 8; ++i) {
- for (int j = 0; j < 8; ++j) {
- pair pos = (i*3.0, j*1.5);
- pen color = (i+j)%2==0 ? cyan : yellow;
- sheephead(pos, color);
- }
-}
-
-clip(ellipse((12,6), 10, 5));
diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/xiantu.asy b/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/xiantu.asy deleted file mode 100644 index dbd186448dd..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/figure-src/xiantu.asy +++ /dev/null @@ -1,63 +0,0 @@ -//pen operator %(pen p, real x) {return interp(white, p, x/100);}
-pen operator %(pen p, real x) {return p + opacity(x/100);}
-
-pen helpline = gray + 0.4;
-pen zhu = red + 0.8;
-pen huang = yellow + 0.8;
-
-path[] grid(pair z1, pair z2, real xstep = 1, real ystep = xstep)
-{
- path[] g;
- pair lb = minbound(z1, z2);
- pair rt = maxbound(z1, z2);
- for (real x = ceil(lb.x/xstep)*xstep; x <= rt.x; x += xstep)
- g.push((x, lb.y) -- (x, rt.y));
- for (real y = ceil(lb.y/ystep)*ystep; y <= rt.y; y += ystep)
- g.push((lb.x, y) -- (rt.x, y));
- return g;
-}
-
-unitsize(1cm);
-settings.tex = "xelatex";
-
-usepackage("xeCJK");
-usepackage("CJKmove");
-texpreamble(
-"\setCJKmainfont[RawFeature={script=hani:language=CHN:vertical:+valt}]
-{FZSongHeiTi_GB18030}
-%\XeTeXuseglyphmetrics=0
-\setCJKmove{-0.45}{0.5}
-\CJKmove
-");
-defaultpen(fontsize(10.5)); // 五号
-
-Label vert(Label L)
-{
- return rotate(-90) * L;
-}
-
-draw(grid((0,0), (7,7)), helpline);
-draw(shift(4)*rotate(degrees((3,4)))*grid((0,0), (5,5)), helpline);
-
-path huangshi = box((3,3), (4,4));
-path[] zhushi = (0,3)--(4,0)--(7,4)--(3,7)--cycle ^^ reverse(huangshi);
-filldraw(zhushi, zhu%10, zhu);
-fill(huangshi, huang%50);
-draw((0,3)--(4,3) ^^ (4,0)--(4,4) ^^ (7,4)--(3,4) ^^ (3,7)--(3,3), zhu);
-
-label(vert("中黃實"), (3.5,3.5), 0.5huang);
-label(vert("朱實"), (2,4), right, 0.5zhu);
-label(vert("弦實"), (5,4), left, interp(0.5huang,0.5zhu,0.5));
-label(Label("句三",MidPoint,Rotate(down)), (4,0)--(4,3), LeftSide);
-label(Label("股四",MidPoint,Rotate(left)), (0,3)--(4,3), RightSide);
-label(Label("弦五",MidPoint,Rotate((4,-3))), (0,3)--(4,0), LeftSide);
-
-label(vert("朱實六黃實\ 一"), (0,3.5), left, fontsize(14)); // 四号字
-label(vert("弦實二十五朱及黃"), (7,3.5), right, fontsize(14));
-
-label(vert("弦圖"), (3.5,7), 4up, fontsize(16)); // 三号字
-
-label(vert(minipage("句股各自乘,併之為弦實,開方除之即弦。
-案:弦圖又可以句股相乘為朱實二,倍之為朱實四,
-以句股之差自相乘為中黃實,加差實亦成弦實。", 64)), (3.5,0), 4down);
-
diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/main.tex b/Master/texmf-dist/doc/support/asymptote-by-example/src/main.tex deleted file mode 100644 index fd76bfd0cd5..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/main.tex +++ /dev/null @@ -1,117 +0,0 @@ -%# -*- coding: utf-8 -*- -\documentclass[cs4size,oneside,openany,nofonts,UTF8,CJKnormalspaces] - {ctexbook}[2009/05/20] -\linespread{1.0} - -%\includeonly{tiling} - -\usepackage{amsmath} - -\usepackage{makeidx} -\makeindex - -\usepackage{geometry} -\geometry{screen,left=0.5cm,right=0.5cm,top=2cm,bottom=1cm} - -\usepackage{fancyhdr} -\renewcommand{\headrulewidth}{0pt} -\pagestyle{fancy} -\fancyhf{} -\lhead{\normalfont\rightmark} -\rhead{\normalfont\thepage} -\fancypagestyle{plain}{\fancyhf{}} - -\usepackage{float} -\floatplacement{htbp} -\AtBeginDocument{ - \renewcommand{\topfraction}{0.9} % default 0.7 - \renewcommand{\bottomfraction}{0.5} % default 0.3 - \renewcommand{\textfraction}{0.1} % default 0.2 - \renewcommand{\floatpagefraction}{0.8} % default 0.5 - \setlength{\floatsep}{3pt plus 1pt minus 1pt} % default 12pt plus2pt minus2pt - \setlength{\textfloatsep}{6pt plus 1pt minus 1pt} % default 20pt plus2pt minus4pt - \setlength{\intextsep}{3pt plus 1pt minus 1pt} % default 12pt plus2pt minus2pt -} - -\usepackage{caption} -\captionsetup{skip=6pt} % default 10pt - -\usepackage{xltxtra} -\usepackage{myfonts} - -\usepackage{multicol} - -\usepackage{xcolor} -\pagecolor{lightgray!50} - -\usepackage{asymptote} -\usepackage{graphicx} -\usepackage{hyperref} -\hypersetup{ - bookmarksopen=false, - pdfpagemode=FullScreen, - colorlinks=false, - pdfborder=0 0 0 -} -\renewcommand\figureautorefname{图} - -\usepackage{asysyntex} -\usepackage{listings} -\lstloadlanguages{[LaTeX]TeX} -\newcommand*\texcode{\expandafter\lstinline[language={[LaTeX]TeX}]} - - -\newcommand*\prgname[1]{\textsf{#1}} -\newcommand*\Asy{\textsf{Asymptote}} -\newcommand*\asyversion{1.70} -\begin{document} - -\frontmatter - -% 标题页 -\begin{titlepage} -\vspace*{\stretch{1}} -\begin{center} - {\zihao{2}\bfseries - \Asy\ 范例教程} -\bigskip - - {\zihao{3}\sffamily - milksea} -\bigskip - - {\today} -\end{center} -\vspace*{\stretch{3}} -\end{titlepage} - -% 版权页 -\begingroup -\setlength{\parindent}{0pt} -\vspace*{\stretch{1}} -本文是基于 \Asy\ \asyversion{} 的一组教程。 - -\url{http://asy4cn.googlecode.com/} -\medskip - -版权所有\copyright\ 2009 milksea, milksea@163.com - -{\setlength{\leftskip}{2em} -在 GNU General Public License(GNU 通用公共许可证)的条款下授予复制、发布和/或修改此文档的许可。许可证条款见附录 \ref{chap:license}。\par} -\endgroup -\newpage - -\tableofcontents - -\mainmatter -\include{xiantu} -\include{tiling} - -\appendix -\include{gpl-3.0} - -\printindex - -\bibliographystyle{plain} -\bibliography{asy} -\end{document} diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/makepdf b/Master/texmf-dist/doc/support/asymptote-by-example/src/makepdf deleted file mode 100644 index 7c172040044..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/makepdf +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -xelatex main -asy main -xelatex main -makeindex main -bibtex main -xelatex main -xelatex main -mv main.pdf AsymptoteByExample.pdf diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/myfonts.sty b/Master/texmf-dist/doc/support/asymptote-by-example/src/myfonts.sty deleted file mode 100644 index d67ddcf6b3d..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/myfonts.sty +++ /dev/null @@ -1,18 +0,0 @@ -\ProvidesPackage{myfonts} - -% Lucida 系列字体设置 -\setmainfont[Mapping=tex-text,Scale=0.95]{Lucida Bright} -\setsansfont[Mapping=tex-text,Scale=0.95]{Lucida Sans} -\setmonofont[Scale=0.95]{Lucida Sans Typewriter Std} - -% 方正系列字体设置 -\setCJKmainfont[BoldFont={FZXiaoBiaoSong-B05}, ItalicFont={FZKai-Z03}]{FZShuSong_GB18030-Z01} -\setCJKsansfont[BoldFont={FZHei-B01}]{FZXiHei I-Z08} -\setCJKmonofont[BoldFont={FZCuYuan-M03}]{FZZhunYuan-M02} - -\setCJKfamilyfont{rm}[BoldFont={FZXiaoBiaoSong-B05}, ItalicFont={FZKai-Z03}]{FZShuSong_GB18030-Z01} -\setCJKfamilyfont{sf}[BoldFont={FZHei-B01}]{FZXiHei I-Z08} -\setCJKfamilyfont{tt}[BoldFont={FZCuYuan-M03}]{FZZhunYuan-M02} - -\endinput - diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/tiling.pdf b/Master/texmf-dist/doc/support/asymptote-by-example/src/tiling.pdf Binary files differdeleted file mode 100644 index c4dc61a6a8f..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/tiling.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/tiling.tex b/Master/texmf-dist/doc/support/asymptote-by-example/src/tiling.tex deleted file mode 100644 index 47cfc74cf14..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/tiling.tex +++ /dev/null @@ -1,306 +0,0 @@ -%# -*- coding: utf-8 -*- -% tiling.tex -% asymptotebyexample 的一章,曲线绘制和编程入门 - -\chapter{André Deledicq 的铺砌插画} -\nocite{pstricks} - -André 是一名兴趣广泛的法国数学教师,在他的新著《Le monde des pavages》(《铺 -砌世界》)中,打算画一幅有关羊的铺砌插画: -\begin{figure}[H] - \centering - \includegraphics{tiling.pdf} - \caption{André 理想中的铺砌图} - \label{fig:tiling} -\end{figure} - -André 很清楚他要画的图形的数学理论,但 André 的朋友 Timothy 告诉他要画这样 -的图形多少是需要一些编程的知识的,对于他这样一位往日对计算机并不通晓的人来说 -可能会有困难。不过 André 并不以为意:这世上还有什么比数学更难的呢?于是他兴 -致勃勃的开始了。 - -\section{从矩形到铺砌} -\label{sec:rect2tiling} - -铺砌图,顾名思义,就是像铺地板砖一样,把许多相同样式的图形平铺开来。不过,并 -不是什么图形都可以平铺填满整个平面的——比如圆形就不行。把许多圆形一个挨一个 -排列起来,也只能得到 -\begin{figure}[H] -\centering -\begin{asy} -size(0,2cm); -for (int i = 0; i < 3; ++i) - for (int j = 0; j < 10; ++j) - filldraw(circle((j,i), 0.5), lightblue); -\end{asy} -\end{figure} -\noindent 或者是 -\begin{figure}[H] -\centering -\begin{asy} -size(0,2cm); -for (int i = 0; i < 3; ++i) - for (int j = 0; j < 10; ++j) - filldraw(circle((j+0.5(i%2),sqrt(3)/2*i), 0.5), lightblue); -\end{asy} -\end{figure} -\noindent 都会留下许多空隙。而矩形、平行四边形、六边形等等都可以不留空隙地把平面铺满。 - -但问题是,如何设计出 André 理想中的那种看起来形状不规则的铺砌图案呢? - -身为数学教师的 André 当然有办法。其实不规则铺砌图案还是规则图案的变形。 -André 要画的羊形铺砌图,其实就是从矩形铺砌变化而来的。只要把一个矩形图案的上 -下两边、左右两边分别变形,使得变形后的上边与下边、左边与右边还对应重合,就依 -然可以完美地拼合起来。这正是铺砌图案最基本的构成方式: -\begin{figure}[H] -\centering -\begin{asy} -size(0,5cm); -defaultpen(linewidth(1mm)); -path rec = box((0,0), (2,1)); -draw(rec); - -draw(shift(3,0)*rec, gray+0.5mm); -guide left = (0,1) -- (-0.2,0.8) -- (0,0.6) -- (0.1,0.1) -- (0,0); -guide bot = (0,0) -- (0.2,0.1) -- (1.6,-0.1) -- (2,0); -draw(shift(3,0) * (left ^^ shift(2,0)*left), heavyblue); -draw(shift(3,0) * (bot ^^ shift(0,1)*bot), heavygreen); - -guide shape = left & bot & shift(2,0)*reverse(left) - & shift(0,1)*reverse(bot) & cycle; -for (int i = 0 ; i < 2; ++i) - for (int j = 0; j < 4; ++j) - filldraw(shift(0.5+j,-1.5+0.5i)*scale(0.5)*shape, lightblue); -\end{asy} -\end{figure} - -有了这个方法,对复杂的铺砌图,也只要从一个基本形状(比如矩形、正六边形)开始 -变形,就等到铺砌所需要的一块“砖”。 - -因此,要画出羊头形状铺砌图,只要把一个矩形按照上面的要求变形为一个羊头形状, -在不同的位置重复画出就可以了。 - -\section{变量与曲线} - -下面的问题就是,怎么画一个羊头呢?更具体地说,怎么画出羊头的曲线呢? - -那么,首先要了解如何在 \Asy{} 中描述曲线。\ref{sec:linedraw} 节中提到 |--| 连 -结一组坐标就成为直(折)线段;类似地,用 |..| 连结坐标就得到经过这些坐标点的 -曲线: -\begin{lstlisting} -size(5cm,0); -pair z1 = (0,1), z2 = (1,1), z3 = (2,1), - z4 = (0,0), z5 = (1,0), z6 = (2,0); -path p = z4 .. z1 .. z2 .. z6; -draw(p, gray+2mm); -\end{lstlisting} -\begin{figure}[H] - \centering -\begin{asy} -size(5cm,0); -pair z1 = (0,1), z2 = (1,1), z3 = (2,1), - z4 = (0,0), z5 = (1,0), z6 = (2,0); -path p = z4 .. z1 .. z2 .. z6; -draw(p, gray+2mm); -dot(Label("1", align=NW), z1); -dot(Label("2", align=NE), z2); -dot("3", z3); -dot("4", z4); -dot("5", z5); -dot("6", z6); -\end{asy} -\end{figure} - -在这里,我们定义了一些变量\index{变量}以使代码清晰(这里略去了画点和标签的代 -码)。|pair|\index{pair@\lstinline=pair=} 类型的变量 |z1|, \ldots, |z6| 保存 -六个坐标\index{坐标},|path|\index{path@\lstinline=path=} 类型的变量 |p| 保存 -一条曲线路径\index{路径}。因而上面 |size| 之后的绘图代码就相当于 -\begin{lstlisting} -draw( (0,0) .. (0,1) .. (1,1) .. (2,0), gray+2mm ); -\end{lstlisting} -其中前面的一句 |size(5cm,0)|\index{size@\lstinline=size=} 表示代码中的坐标只 -是相对位置,最后将整个图形按比例放缩为 $5$\,cm 宽\footnote{注意坐标、图形会被 -放缩,但画笔的宽度不会放缩。}。类似地,也可以使用 |size(0,4cm)| 把图形放缩到 -$4$\,cm 高。 - -最重要的当然还是曲线的表示。以 |..| 连结的坐标会以一种尽量接近圆弧的方式连为 -经过这些点的光滑曲线。与画直线类似,|cycle|\index{cycle@\lstinline=cycle=} 可 -以作为一个特殊的坐标产生闭合曲线,即一条闭路径\index{路径!闭路径}: -\begin{lstlisting} -path q = z4 .. z1 .. z2 .. z6 .. cycle; -draw(q, gray+2mm); -\end{lstlisting} -\begin{figure}[H] - \centering -\begin{asy} -size(5cm,0); -pair z1 = (0,1), z2 = (1,1), z3 = (2,1), - z4 = (0,0), z5 = (1,0), z6 = (2,0); -path q = z4 .. z1 .. z2 .. z6 .. cycle; -draw(q, gray+2mm); -dot(Label("1", align=NW), z1); -dot(Label("2", align=NE), z2); -dot("3", z3); -dot("4", z4); -dot("5", z5); -dot("6", z6); -\end{asy} -\end{figure} - -变量不仅仅是给了坐标、路径等对象一个简洁的名字,它也使得对同一个对象重复使用 -并进行不同的操作变得十分方便: -\begin{lstlisting} -fill(q, lightblue); -draw(q, gray+2mm); -\end{lstlisting} -\begin{figure}[H] - \centering -\begin{asy} -size(5cm,0); -pair z1 = (0,1), z2 = (1,1), z3 = (2,1), - z4 = (0,0), z5 = (1,0), z6 = (2,0); -path q = z4 .. z1 .. z2 .. z6 .. cycle; -fill(q, lightblue); -draw(q, gray+2mm); -dot(Label("1", align=NW), z1); -dot(Label("2", align=NE), z2); -dot("3", z3); -dot("4", z4); -dot("5", z5); -dot("6", z6); -\end{asy} -\end{figure} - -就像使用 |box| 可以直接得到矩形一样,最常用的曲线:圆、椭圆和圆弧,也可以使用 -现成的命令得到: -\begin{table}[H] -\noindent -\begin{tabular}{ll} -|circle(c, r)| & 圆心 |c|,半径 |r| 的圆,这是逆时针方向的闭曲线; \\ -|ellipse(c, a, b)| & 中心为 |c|,长半轴 |a|,短半轴 |b| 的椭圆,这也是逆时针 -方向的闭曲线; \\ -|arc(c, r, angle1, angle2)| & 圆心 |c|,半径 |r|,角度从 |angle1| 到 |angle2| -的圆弧。 -\end{tabular} -\end{table} - -例如: -\begin{lstlisting} -filldraw( circle((0,0), 1cm), lightblue, gray+2mm ); -draw( arc((5cm,0), 1cm, 45, 135), gray+2mm ); -\end{lstlisting} -\begin{figure}[H] -\centering -\begin{asy} -filldraw( circle((0,0), 1cm), lightblue, gray+2mm ); -draw( arc((5cm,0), 1cm, 45, 135), gray+2mm ); -\end{asy} -\end{figure} - -一条用 |cycle| 产生的闭路径和简单地把首尾结点重合的路径是非常不同的。首先,只 -有闭路径可以填充颜色;其次,使用 |cycle| 连结的曲线在起点处是光滑连接的,而如 -果只是首尾结点重合则不会光滑连接。试将下面的曲线 |q2| 与上面的曲线 |q| 比较: -\begin{lstlisting} -path q2 = z4 .. z1 .. z2 .. z6 .. z4; -draw(q2, gray+2mm); -\end{lstlisting} -\begin{figure}[H] -\centering -\begin{asy} -size(5cm,0); -pair z1 = (0,1), z2 = (1,1), z3 = (2,1), - z4 = (0,0), z5 = (1,0), z6 = (2,0); -path q2 = z4 .. z1 .. z2 .. z6 .. z4; -draw(q2, gray+2mm); -dot(Label("1", align=NW), z1); -dot(Label("2", align=NE), z2); -dot("3", z3); -dot("4", z4); -dot("5", z5); -dot("6", z6); -\end{asy} -\end{figure} - -现在有了绘制曲线的方法,画出一个羊头就只是把草稿上的坐标连接起来而已。André -有一个纸上的草图,于是在描出几个点以后,他很快得到这样的结果(这里给图形增加 -了辅助网格): -\begin{lstlisting} -size(0,4cm); -pen outline = black+1mm; -// `\color{comment}头` -path head = (0.5,-0.2) .. (0.6,0.5) .. (0.2,1.3) .. (0,1.5) .. (0,1.5) - .. (0.4,1.3) .. (0.8,1.5) .. (2.2,1.9) .. (3,1.5) .. (3.2,1.3) - .. (3.6,0.5) .. (3.4,-0.3) .. (3,0) .. (2.2,0.4) .. (0.5,-0.2) .. cycle; -filldraw(head, cyan, outline); -dot(head, red+1mm); // `\color{comment}画出羊头路径上的结点` -// `\color{comment}五官` -fill( circle((2.65,1.25), 0.12), outline ); -fill( (3.5,0.3) .. (3.35,0.45) .. (3.5,0.6) .. (3.6,0.4) .. cycle, outline ); -draw( (3,0.35) .. (3.3,0.1) .. (3.6,0.05), outline ); -draw( (2.3,1.3) .. (2.1, 1.5) .. (2.15,1.7), outline ); -draw( (2.1,1.7) .. (2.35,1.6) .. (2.45,1.4), outline ); -\end{lstlisting} -\begin{figure}[H] - \centering -\begin{asy} -size(0,4cm); -import math; -add(scale(1/2)*shift(0,-1)*grid(8,5,gray)); -dot(Label("$O$",align=left), 0); -label("$1$", (0,1), align=W); label("$2$", (0,2), align=W); -label("$1$", (1,-0.5), align=S); label("$2$", (2,-0.5), align=S); -label("$3$", (3,-0.5), align=S); label("$4$", (4,-0.5), align=S); -pen outline = black+1mm; -path head = (0.5,-0.2) .. (0.6,0.5) .. (0.2,1.3) .. (0,1.5) .. (0,1.5) - .. (0.4,1.3) .. (0.8,1.5) .. (2.2,1.9) .. (3,1.5) .. (3.2,1.3) - .. (3.6,0.5) .. (3.4,-0.3) .. (3,0) .. (2.2,0.4) .. (0.5,-0.2) .. cycle; -filldraw(head, cyan, outline); -dot(head, red+1mm); -fill( circle((2.65,1.25), 0.12), outline ); -fill( (3.5,0.3) .. (3.35,0.45) .. (3.5,0.6) .. (3.6,0.4) .. cycle, outline ); -draw( (3,0.35) .. (3.3,0.1) .. (3.6,0.05), outline ); -draw( (2.3,1.3) .. (2.1, 1.5) .. (2.15,1.7), outline ); -draw( (2.1,1.7) .. (2.35,1.6) .. (2.45,1.4), outline ); -\end{asy} -\end{figure} - -在一开始,André 使用 -\begin{lstlisting} -pen outline = black+1mm; -\end{lstlisting} -定义一个 |pen|\index{pen@\lstinline=pen=} 类型的变量 |outline| 表示用来画羊头 -轮廓的画笔\index{画笔},以备使用。 - -然后,André 直接用 |..| 连结一组坐标来定义羊的头部轮廓: -\begin{lstlisting} -path head = (0.5,-0.2) .. (0.6,0.5) .. (0.2,1.3) .. (0,1.5) .. (0,1.5) - .. (0.4,1.3) .. (0.8,1.5) .. (2.2,1.9) .. (3,1.5) .. (3.2,1.3) - .. (3.6,0.5) .. (3.4,-0.3) .. (3,0) .. (2.2,0.4) .. (0.5,-0.2) .. cycle; -\end{lstlisting} -需要尖角的时候,就使用重复的相同点(如这里的起点);曲线变化大的地方,取的点 -也比较密集。 - -最后五官的绘制。眼睛是填充的小黑圆,鼻子是黑色的卵形,耳朵和嘴都是简单的曲线。 - -于是,只要把这样一个图形一个挨一个地重复画许多遍,就可以得到 André 想要的铺 -砌效果了。设计羊头形状的工作无疑是最关键也最复杂的,因此 André 的任务现在就 -已经完成了一半。 - -不过继承了法国完美主义风气的 André 老师,很快挑出了毛病:这只羊头部的轮廓, -并不完全是按照 \ref{sec:rect2tiling} 节对矩形变形得到的——他的手稿基本上是这 -样设计的,但在使用 \Asy{} 上绘图时则只是在手稿上相当随意地取了一些结点连结得 -到曲线,这个轮廓想必也并不能严丝合缝地一个个拼起来。还有一件很令他恼火的事情 -则是:要画出羊头的轮廓,他要画的点太多了,一个尖角用两个结点表示,也太不符合 -他的简洁美学了。因此,这个看上去相当不错的羊头一号,就被 André 老师无情地否 -决掉了。他决定发扬数学教师严谨简洁的作风,再做出更完美的羊头二号来。 - -\section{细致的曲线调整与曲线操作} - -\section{子图和循环} - -\section{路径剪裁} - -\endinput - -% vim:tw=77: - diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/xiantu-ancient.pdf b/Master/texmf-dist/doc/support/asymptote-by-example/src/xiantu-ancient.pdf Binary files differdeleted file mode 100644 index ba9153bb789..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/xiantu-ancient.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/xiantu.pdf b/Master/texmf-dist/doc/support/asymptote-by-example/src/xiantu.pdf Binary files differdeleted file mode 100644 index a01d3546e64..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/xiantu.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/support/asymptote-by-example/src/xiantu.tex b/Master/texmf-dist/doc/support/asymptote-by-example/src/xiantu.tex deleted file mode 100644 index 568d7184f91..00000000000 --- a/Master/texmf-dist/doc/support/asymptote-by-example/src/xiantu.tex +++ /dev/null @@ -1,717 +0,0 @@ -%# -*- coding: utf-8 -*- -% xiantu.tex -% asymptotebyexample 的一章,最基础的画图知识 - -\chapter{赵爽的弦图} -\label{chap:xiantu} -\nocite{quanjing} - -赵爽博士是位老知识分子,研究兴趣是天文历法与算学,一生精研《周髀算经》。不过 -赵老爷子年轻的时候书籍都是手写,最近才紧跟时代潮流用上了电脑。现在他要修订他 -研究《周髀算经》的札记,决定使用 \LaTeX{} 来排版。 - -现在他遇到一个难题,就是他要画出笔记中讲解勾股定理的一幅弦图。听人介绍,几经 -比较之后,他决定使用现在炒得火热的 \Asy{}。 - -赵博士的原图是手画的,线框多有不直不准的,\autoref{fig:xiantuancient} 就是旧 -年据手稿做的雕版图,赵博士并不满意。赵爽博士理想中的图,线条要平整美观,文字 -要清楚整齐,图形还要上色:朱实自然得用红色,黄实也该用黄色,以与注文一致—— -就是\autoref{fig:xiantu} 的样子。 - -\begin{figure} - \centering - \includegraphics[height=\textheight-2\baselineskip]{xiantu-ancient.pdf} - \caption{旧年做的雕版} - \label{fig:xiantuancient} -\end{figure} -\begin{figure} - \centering - \includegraphics{xiantu.pdf} - \caption{理想中的新版本} - \label{fig:xiantu} -\end{figure} - -计议已定,赵博士要开始正式的绘图了。 - -\section{绘图环境} - -\Asy{} 的安装并不复杂,在 Windows 下面就是下载运行那个安装包,在 Linux 下面一 -般也只需要下载对应的压缩包,解压就可以使用了。哦,赵博士用的就是 Windows。 - -点图标运行 \Asy{},就出现了交互式\index{交互式}的命令行,提示符是一个 -\verb=>=。输入命令: -\begin{lstlisting} -draw((0,0) -- (3cm,4cm)); // `\color{comment}一条直线` -\end{lstlisting} -赵博士装的 GSView 立即弹了出来,里面已经画出一条倾斜的直线。再输入 -|quit|\index{quit@\lstinline=quit=},程序退出,并留下了一个叫做 -\verb=out.eps= 的图形文件, -小菜一碟。 - -这里稍稍解释一下上面的一句代码。|draw|\index{draw@\lstinline=draw=} 是画线的 -命令,更准确地说,是 \Asy{} 中的函数\index{函数}:它带有一个参数\index{参数} -|(0,0) -- (3cm,4cm)|,参数外面是圆括号,整个命令以分号结束。里面的 -|(0,0) -- (3cm,4cm)| 是由两个坐标\index{坐标}连接而成的直线,坐标是在直角坐标 -系下的,可以带单位 |mm|, |cm|, |pt|, |bp|, |inch|, |inches|,% -\index{mm@\lstinline=mm=}\index{cm@\lstinline=cm=}\index{pt@\lstinline=pt=}% -\index{bp@\lstinline=bp=}\index{inch@\lstinline=inch=}% -\index{inches@\lstinline=inches=}% -其意义与在\TeX{} 中的一样,如果不带单位,则默认为 |bp|。行末以 |//| 开头的是 -注释,另有一种在 |/* */| 之间的注释\index{注释},与 C 语言相同。 - -\index{编译} -不过赵博士写书讲求胸有成竹方才下笔,因此他更愿意使用更一种方式:打开一个文本 -编辑器,把上面的绘图命令都录入完毕,保存为一个名为 \verb=line.asy= 的文件,最 -后把这个文件拖动到 \Asy{} 的图标上面,就完成了整个作图。 - -赵博士的小侄子不屑于这种快捷图标的编译方式,他直接进入命令行,输入 -\verb=asy=,就进入了 \Asy{} 的交互环境;要是输入 \verb=asy line=,就画出了刚 -才的保存的直线。 - - -\section{直线与绘图命令} -\label{sec:linedraw} - -弦图的图形其实很简单,都是直线、方块、三角形这些,而且为了计算的简便,所有长 -度也都是整数值。那么,首先就是在 \Asy{} 中来画直线。 - -\index{画线} -正如前面试验的时候做的那样,一条直线就是用 |--|\index{--@\lstinline=--=} 把坐 -标连起来,再使用 |draw| 命令,直线就画出来了。事实上,可以用 |--| 把坐标点连 -成折线: -\begin{lstlisting} -draw( (0,0) -- (1cm,0) -- (2cm,0.5cm) -- (1cm,1cm) -- (0,1cm) ); -\end{lstlisting} -\begin{figure}[H] -\centering -\begin{asy} -draw( (0,0) -- (1cm,0) -- (2cm,0.5cm) -- (1cm,1cm) -- (0,1cm) ); -\end{asy} -\end{figure} - -像这样把坐标用 |--| 连结起来的,就成为一条路径\index{路径}。把直线而稍做修改 -,在后面连上一个特殊的坐标 |cycle|\index{cycle@\lstinline=cycle=},就可以得到 -一条首尾相接的闭路径\index{路径!闭路径}。如: -\begin{lstlisting} -draw( (0,0) -- (1cm,0) -- (2cm,0.5cm) -- (1cm,1cm) -- (0,1cm) -- cycle ); -\end{lstlisting} -\begin{figure}[H] -\centering -\begin{asy} -draw( (0,0) -- (1cm,0) -- (2cm,0.5cm) -- (1cm,1cm) -- (0,1cm) -- cycle ); -\end{asy} -\end{figure} - -画一条路径可以使用不同的颜色、粗细的笔,这只要给 |draw| 命令多加一个画笔 -\index{画笔}参数(多个参数用逗号分开): -\begin{lstlisting} -draw((0,0) -- (1cm,0) -- (2cm,0.5cm) -- (1cm,1cm) -- (0,1cm), darkblue+1mm); -\end{lstlisting} -\begin{figure}[H] -\centering -\begin{asy} -draw((0,0) -- (1cm,0) -- (2cm,0.5cm) -- (1cm,1cm) -- (0,1cm), darkblue+1mm); -\end{asy} -\end{figure} -这里 |darkblue| 是颜色,|1mm| 是线的粗细。|darkblue+1mm| 即指一毫米宽的深 -蓝色粗线。(可用的颜色\index{颜色}名称可以参考 \cite{asyman}) - -赵博士画的是“勾三股四弦五”的红色三角形,这很容易: -\begin{lstlisting} -draw( (0,0) -- (4cm,0) -- (0,3cm) -- cycle, red+0.5mm ); -\end{lstlisting} -\begin{figure}[H] -\centering -\begin{asy} -draw( (0,0) -- (4cm,0) -- (0,3cm) -- cycle, red+0.5mm ); -\end{asy} -\end{figure} - -\index{填充} -不过现在还需要的是实心的三角形,因此就需要一个新的绘图命令 -|fill|\index{fill@\lstinline=fill=},即填充。于是,红色三角形就成为 -\begin{lstlisting} -fill( (0,0) -- (4cm,0) -- (0,3cm) -- cycle, red ); -\end{lstlisting} -\begin{figure}[H] -\centering -\begin{asy} -fill( (0,0) -- (4cm,0) -- (0,3cm) -- cycle, red ); -\end{asy} -\end{figure} - -但这样一来三角形的颜色就太重了,而且边界也不清楚。因此似乎应该先用浅红色填充 -一遍,然后再用深红色勾边。好在可以使用一个命令 -|filldraw|\index{filldraw@\lstinline=filldraw=} 同时完成这两件事情,这样就不 -需要把一条路径写两遍了。即有: -\begin{lstlisting} -filldraw((0,0) -- (4cm,0) -- (0,3cm) -- cycle, - fillpen=palered, drawpen=red+0.5mm); -\end{lstlisting} -\begin{figure}[H] -\centering -\begin{asy} -filldraw((0,0) -- (4cm,0) -- (0,3cm) -- cycle, - fillpen=palered, drawpen=red+0.5mm); -\end{asy} -\end{figure} -这里可以简单地直接写两个参数 |palered, red+0.5mm|,不过为了清晰起见还是使用 -“$\text{键}=\text{值}$”的写法,明确表示出填充的画笔和描线的画笔。 - -现在,赵博士的整个弦图的框架就呼之欲出了,就是画出四个三角形 -(\autoref{fig:xiantuskeleton}): -\begin{lstlisting} -filldraw( (4cm,0) -- (4cm,3cm) -- (0,3cm) -- cycle, - fillpen=palered, drawpen=red+0.5mm); -filldraw( (7cm,4cm) -- (4cm,4cm) -- (4cm,0) -- cycle, - fillpen=palered, drawpen=red+0.5mm); -filldraw( (3cm,7cm) -- (3cm,4cm) -- (7cm,4cm) -- cycle, - fillpen=palered, drawpen=red+0.5mm); -filldraw( (0,3cm) -- (3cm,3cm) -- (3cm,7cm) -- cycle, - fillpen=palered, drawpen=red+0.5mm); -\end{lstlisting} -\begin{figure} -\centering -\begin{asy} -filldraw( (4cm,0) -- (4cm,3cm) -- (0,3cm) -- cycle, - fillpen=palered, drawpen=red+0.5mm); -filldraw( (7cm,4cm) -- (4cm,4cm) -- (4cm,0) -- cycle, - fillpen=palered, drawpen=red+0.5mm); -filldraw( (3cm,7cm) -- (3cm,4cm) -- (7cm,4cm) -- cycle, - fillpen=palered, drawpen=red+0.5mm); -filldraw( (0,3cm) -- (3cm,3cm) -- (3cm,7cm) -- cycle, - fillpen=palered, drawpen=red+0.5mm); -\end{asy} -\caption{弦图的初步框架}\label{fig:xiantuskeleton} -\end{figure} - -还应该画出弦图的中间的“黄实”,用黄色填充。这部分是一个正方形,可以使用现成 -的 \lstinline[mathescape]|box($\text{角点}$, $\text{角点}$)| -\index{box@\lstinline=box=} 命令来产生矩形的路径,因而填充正中间的正方形就可 -以用: -\begin{lstlisting} -fill( box((3cm,3cm), (4cm,4cm)), yellow ); -\end{lstlisting} -这个填充的命令应该放在画线之前(以免覆盖描的红线)。 - -回顾前面的代码,赵博士觉得连续地写四个 |filldraw| 命令太重复了。他读了 \Asy{} -的文档 \cite{asyman},才知道多条路径可以用符号 |^^|\index{^@\lstinline=^^=} -连起来,一起使用,于是立即着手改进原来的代码。 - -而且,由于还打算在图的后面画出参考网格,图形的颜色还应该设置为半透明\index{透 -明}的。好在这并不难实现,只要稍稍改动一下填充的画笔,使用 -\lstinline[mathescape]|opacity($\text{数值}$)| -\index{opacity@\lstinline=opacity=} -来设定有一定不透明度(取值为 $0\sim1$)的画笔,并把它加在原来的画笔上。于是赵 -博士最后写出了这样的代码: -\begin{lstlisting} -fill( box((3cm,3cm), (4cm,4cm)), opacity(0.5)+yellow ); -filldraw( (4cm,0) -- (4cm,3cm) -- (0,3cm) -- cycle - ^^ (7cm,4cm) -- (4cm,4cm) -- (4cm,0) -- cycle - ^^ (3cm,7cm) -- (3cm,4cm) -- (7cm,4cm) -- cycle - ^^ (0,3cm) -- (3cm,3cm) -- (3cm,7cm) -- cycle, - fillpen=opacity(0.1)+red, drawpen=red+0.5mm ); -\end{lstlisting} -至此,弦图的主要框架(\autoref{fig:xiantuskeleton2})就此完成。 -\begin{figure}[H] -\centering -\begin{asy} -fill( box((3cm,3cm), (4cm,4cm)), opacity(0.5)+yellow ); -filldraw( (4cm,0) -- (4cm,3cm) -- (0,3cm) -- cycle - ^^ (7cm,4cm) -- (4cm,4cm) -- (4cm,0) -- cycle - ^^ (3cm,7cm) -- (3cm,4cm) -- (7cm,4cm) -- cycle - ^^ (0,3cm) -- (3cm,3cm) -- (3cm,7cm) -- cycle, - fillpen=opacity(0.1)+red, drawpen=red+0.5mm ); -\end{asy} -\caption{弦图的进一步优化的框架}\label{fig:xiantuskeleton2} -\end{figure} - - -\section{图形变换与功能模块的使用} - -然后是画作为长度参考的网格。其实网格一开始就该在图中画出来,这样后面画图准确 -与否才能看得清楚。不过现在赵博士是重作旧图,图样已定,网格就搁在弦图的主要图 -形后面才画了。 - -按说这个网格是十分简单的,无非就是画一些灰色的纵横细线。比如这个 $3\times3$ -的网格: -\begin{lstlisting} -draw( (0,0) -- (3cm,0) - ^^ (0,1cm) -- (3cm,1cm) - ^^ (0,2cm) -- (3cm,2cm) - ^^ (0,3cm) -- (3cm,3cm), - gray ); -draw( (0,0) -- (0,3cm) - ^^ (1cm,0) -- (1cm,3cm) - ^^ (2cm,0) -- (2cm,3cm) - ^^ (3cm,0) -- (3cm,3cm), - gray ); -\end{lstlisting} -\begin{figure}[H] -\centering -\begin{asy} -draw( (0,0) -- (3cm,0) - ^^ (0,1cm) -- (3cm,1cm) - ^^ (0,2cm) -- (3cm,2cm) - ^^ (0,3cm) -- (3cm,3cm), - gray ); -draw( (0,0) -- (0,3cm) - ^^ (1cm,0) -- (1cm,3cm) - ^^ (2cm,0) -- (2cm,3cm) - ^^ (3cm,0) -- (3cm,3cm), - gray ); -\end{asy} -\end{figure} - -可无疑这个办法显得太麻烦了,赵博士要画的是 $7\times7$ 的网格,就要分别画出 -$16$ 条直线。这样的代码不仅不好写,而且容易出错,修改一下也很麻烦。 - -赵博士看到了手册 \cite{asyman} 中讲循环语句的用法,似乎可以完成这件事。可是以 -赵博士的年龄,再去看什么编程什么变量的,命令不能一条一条执行下来,很不习惯, -头脑就往往转不清楚。 - -\index{模块!math@\prgname{math}} -于是赵博士就去论坛上咨询,一些人劝他去用几行循环语句,甚至有人已经把完整的函 -数做好了。但有一个结果特别引人注目,有人指出,在 \prgname{math} 模块中已经定 -义好了一个 |grid| 函数,只要拿来用就可以了。赵博士立即精神大振,来看这个 -|grid| 函数:\index{grid@\lstinline=grid=} -\begin{lstlisting} -picture grid(int Nx, int Ny, pen p=currentpen) -\end{lstlisting} -这个是在 \prgname{math} 模块中 |grid| 函数的原型。\index{原型}它说明 |grid| -函数有 |Nx|, |Ny| 两个整数类型的必需参数,一个可选的画笔,并且返回一个 -|picture|(图)\index{picture@\lstinline=picture=}类型的对象。 - -\index{导入}\index{模块!导入} -要使用模块的功能,需要在绘图之前导入这个模块,这只要使用 -\index{import@\lstinline=import=} -\begin{lstlisting} -import `模块名`; -\end{lstlisting} -因此,要使用 \prgname{math} 模块中的 |grid| 函数,只要在代码中写 -\begin{lstlisting} -import math; -\end{lstlisting} -就可以了。 - -|grid| 函数的行为看起来很奇怪,调用它会在一个单独的图上画出一个 -|Nx|${}\times{}$|Ny| 的网格,网格的左下角在原点,间距为 $1$。要使用 |grid| 函 -数画的图形,要使用 \lstinline[mathescape]|add($\text{图}$)| -\index{add@\lstinline=add=} 命令,把这个图形加在当前的图上: -\begin{lstlisting} -import math; -add(grid(10,10,gray)); -\end{lstlisting} -\begin{figure}[H] -\centering -\begin{asy} -import math; -add(grid(10,10,gray)); -\end{asy} -\end{figure} -不过直接这样做的结果是只能得到一个小得已经看不清的网格。因此,必须对图形进行放缩。 - -\index{变换}\index{仿射变换} -\index{变换!平移}\index{变换!旋转}\index{变换!放缩} -\index{变换!错切}\index{变换!反射} -\Asy{} 提供了平移、旋转、放缩、倾斜、反射等各种的仿射变换,来对坐标、路径、图 -形等元素进行变换(严格的函数原型参考 \cite{asyman}): -\index{shift@\lstinline=shift=} -\index{scale@\lstinline=scale=} -\index{xscale@\lstinline=xscale=} -\index{yscale@\lstinline=yscale=} -\index{rotate@\lstinline=rotate=} -\index{slant@\lstinline=slant=} -\index{reflect@\lstinline=reflect=} -\begin{lstlisting} -shift(`坐标`) // `\color{comment}按坐标平移` -shift(x, y) // `\color{comment}按` (x, y) `\color{comment}平移` -scale(`倍数`) // `\color{comment}按倍数放缩` -xscale(`倍数`) // `\color{comment}$x$ 轴方向按倍数放缩` -yscale(`倍数`) // `\color{comment}$y$ 轴方向按倍数放缩` -scale(x, y) // `\color{comment}在 $x$ 轴、$y$ 轴方向分别按倍数` x, y `\color{comment}放缩` -rotate(`角度`, z=(0,0)) // `\color{comment}按角度绕中心` z`\color{comment}(默认为原点,逆时针)旋转` -slant(`因子`) // `\color{comment}按一定因子向右倾斜` -reflect(a, b) // `\color{comment}相对直线` a--b `\color{comment}反射` -\end{lstlisting} -使用一个变换就是把这个变换乘在被变换对象的左边。例如一个放缩一个单位正方形: -\begin{lstlisting} -draw( scale(2cm) * box((0,0), (1,1)) ); -\end{lstlisting} -\begin{figure}[H] -\centering -\begin{asy} -draw( scale(2cm) * box((0,0), (1,1)) ); -\end{asy} -\end{figure} -这样的变换可以连续地做下去,例如 -\begin{lstlisting} -draw( rotate(90) * slant(0.3) * scale(1cm) * box((0,0), (1,1)) ); -\end{lstlisting} -就是把一个单位正方形先放大,再倾斜,再旋转 $90^\circ$: -\begin{figure}[H] -\centering -\begin{asy} -draw( rotate(90) * slant(0.3) * scale(1cm) * box((0,0), (1,1)) ); -\end{asy} -\end{figure} - -有了这些变换,画出一个合适大小的网格就不再是什么难事了: -\begin{lstlisting} -import math; -add( scale(5mm) * grid(4, 4, gray) ); -\end{lstlisting} -\begin{figure}[H] -\centering -\begin{asy} -import math; -add( scale(5mm) * grid(4, 4, gray) ); -\end{asy} -\end{figure} - -赵博士的弦图有两个网格,不仅要大小合适,而且其中一个需要进行旋转和平移。平移 -的位置很明显,但旋转仍然需要一些计算。当然这难不倒精研天文算学多年的赵博士, -这里弦实($5\times5$ 的正方形)可以看作是顺时针旋转得到的,从朱实的三角形容易 -看出旋转的角度正好是 $\arctan(3/4)$。\Asy{} 中也可以方便地调用返回角度的反三 -角函数 |aTan|\index{aTan@\lstinline=aTan=} 来计算这个角度。更详细的数学函数列 -表,参看 \cite{asyman}。 - -于是,赵博士弦图中的网格,就可以这样方便地画出来了 -(\autoref{fig:xiantugrid}): -\begin{lstlisting} -// `\color{comment}网格` -import math; -add( scale(1cm) * grid(7, 7, gray) ); -add( shift(0,3cm) * rotate(-aTan(3/4)) * scale(1cm) * grid(5, 5, gray) ); -// `\color{comment}弦图主体` -fill( box((3cm,3cm), (4cm,4cm)), opacity(0.5)+yellow ); -filldraw( (4cm,0) -- (4cm,3cm) -- (0,3cm) -- cycle - ^^ (7cm,4cm) -- (4cm,4cm) -- (4cm,0) -- cycle - ^^ (3cm,7cm) -- (3cm,4cm) -- (7cm,4cm) -- cycle - ^^ (0,3cm) -- (3cm,3cm) -- (3cm,7cm) -- cycle, - fillpen=opacity(0.1)+red, drawpen=red+0.5mm ); -\end{lstlisting} -\begin{figure}[htbp] -\centering -\begin{asy} -// 网格 -import math; -add( scale(1cm) * grid(7, 7, gray) ); -add( shift(0,3cm) * rotate(-aTan(3/4)) * scale(1cm) * grid(5, 5, gray) ); -// 弦图主体 -fill( box((3cm,3cm), (4cm,4cm)), opacity(0.5)+yellow ); -filldraw( (4cm,0) -- (4cm,3cm) -- (0,3cm) -- cycle - ^^ (7cm,4cm) -- (4cm,4cm) -- (4cm,0) -- cycle - ^^ (3cm,7cm) -- (3cm,4cm) -- (7cm,4cm) -- cycle - ^^ (0,3cm) -- (3cm,3cm) -- (3cm,7cm) -- cycle, - fillpen=opacity(0.1)+red, drawpen=red+0.5mm ); -\end{asy} -\caption{带网格的弦图草图} -\label{fig:xiantugrid} -\end{figure} - - -\section{标注文字} - -\index{标注}\index{标签} -现在要进行的是文字的标注。按照勾股定理的约定,赵博士打算在一个红色三角形内标 -注“朱实”,在黄色矩形处标注“黄实”,并为拼得的整个大矩形标注“弦实”;在另 -一红色三角形的三边标注“勾三”、“股四”、“弦五”的尺寸;最后在图形两侧加上 -说明的文字。 - -在标注文字之前,对于中文标签\index{标签!中文标签},应该先定义好中文环境和字体 -。\Asy{} 会调用 \LaTeX{} 来进行标签的处理,因而需要设置的就是 \LaTeX{} 的编译 -引擎\index{LaTeX@\LaTeX!引擎}与一般的中文 \LaTeX{} 文件导言区。在这里,赵博士决定使 -用 \XeTeX{}\index{XeTeX@\XeTeX} 引擎与 -\prgname{xeCJK}\index{xeCJK@\prgname{xeCJK}} 宏包来处理中文。为此,在 \Asy{} -源文件中,他使用了下面的设置代码: -\begin{lstlisting} -settings.tex = "xelatex"; -usepackage("xeCJK"); -texpreamble("\setCJKmainfont{SimSun}"); -\end{lstlisting} -这里第一行是设置编译时所用的 \TeX{} 引擎。后面 -|usepackage|\index{usepackage@\lstinline=usepackage=} 命令就是 \LaTeX{} 中的 -\texcode|\usepackage| 命令的一个包装形式,里面的字符串参数就是宏包名;而 -|texpreamble|\index{texpreamble@\lstinline=texpreamble=} 命令则把接收的参数直 -接放进 \LaTeX{} 的导言区。 - -进行上述设置后,就可以正确使用中文标签了。标注的命令很简单,就是 -|label|\index{label@\lstinline=label=},参数正是标签文字和标签的位置。例如: -\begin{lstlisting} -draw( (0,0) -- (1cm,1cm) -- (2cm,0) ); -label( "`\color{string}中间`", (1cm,0cm) ); -\end{lstlisting} -就得到 -\begin{figure}[H] -\centering -\begin{asy} -settings.tex = "xelatex"; -usepackage("xeCJK"); -texpreamble("\setCJKmainfont{SimSun}"); -draw( (0,0) -- (1cm,1cm) -- (2cm,0) ); -label( "中间", (1cm,0cm) ); -\end{asy} -\end{figure} - -可以在标签中使用任意的 \LaTeX{} 代码,包括数学公式,例如: -\begin{lstlisting} -label("$x = \sin\alpha$", (0,0)); -\end{lstlisting} -就会正确地得到 $x = \sin\alpha$ 的标签。 - -现在,我们可以给弦图加上“朱实”、“黄实”和“弦实”的标签了。在前面的框架代 -码后面加上 -\begin{lstlisting} -label("`\color{string}朱实`", (2cm,4cm)); -label("`\color{string}黄实`", (3.5cm,3.5cm)); -label("`\color{string}弦实`", (5cm,4cm)); -\end{lstlisting} -以及设置字体的代码,就得到\autoref{fig:xiantupartlabel} 的结果。 -\begin{figure} -\centering -\begin{asy} -settings.tex = "xelatex"; -usepackage("xeCJK"); -texpreamble("\setCJKmainfont{SimSun}"); -import math; -add( scale(1cm) * grid(7, 7, gray) ); -add( shift(0,3cm) * rotate(-aTan(3/4)) * scale(1cm) * grid(5, 5, gray) ); -fill( box((3cm,3cm), (4cm,4cm)), opacity(0.5)+yellow ); -filldraw( (4cm,0) -- (4cm,3cm) -- (0,3cm) -- cycle - ^^ (7cm,4cm) -- (4cm,4cm) -- (4cm,0) -- cycle - ^^ (3cm,7cm) -- (3cm,4cm) -- (7cm,4cm) -- cycle - ^^ (0,3cm) -- (3cm,3cm) -- (3cm,7cm) -- cycle, - fillpen=opacity(0.1)+red, drawpen=red+0.5mm ); -label("朱实", (2cm,4cm)); -label("黄实", (3.5cm,3.5cm)); -label("弦实", (5cm,4cm)); -\end{asy} -\caption{带部分标注的弦图}\label{fig:xiantupartlabel} -\end{figure} - -下面则是要给三角形的三边进行标注。 - -\index{标签!路径上的标签} -与前面在一个点处标注不同,这里实际是给一条路径(直线)标注标签。因此,想要得 -到的是距离这条路径的中点一定方向距离加一个标签,而不是简单地取路径上的一点作 -为标签的位置。好在 \Asy{} 确实也提供了这样的功能,仍然使用 |label| 命令,基本 -语法是:\index{label@\lstinline=label=} -\begin{lstlisting} -label(`标签`, `路径`) -\end{lstlisting} -这里默认会在路径中间的右侧(沿着路径行进方向)加标签。例如: -\begin{lstlisting} -draw( (0,0) -- (4cm,2cm), linewidth(0.5mm) ); -label("粗线条", (0,0) -- (4cm,2cm)); -\end{lstlisting} -(其中的 |linewidth|\index{linewidth@\lstinline=linewidth=} 函数用来表示具有 -一定线宽\index{线宽}的画笔)这段代码将得到 -\begin{figure}[H] -\centering -\begin{asy} -settings.tex = "xelatex"; -usepackage("xeCJK"); -texpreamble("\setCJKmainfont{SimSun}"); -draw( (0,0) -- (4cm,2cm), linewidth(0.5mm) ); -label("粗线条", (0,0) -- (4cm,2cm)); -\end{asy} -\end{figure} - -现在,赵博士就可以给三角形的三边加上“勾三”、“股四”、“弦五”的标签了,只 -要稍稍注意一下标签摆放的默认方向: -\begin{lstlisting} -filldraw( (4cm,0) -- (4cm,3cm) -- (0,3cm) -- cycle, - fillpen=opacity(0.1)+red, drawpen=red+0.5mm ); -label( "勾三", (4cm,3cm) -- (4cm,0) ); -label( "股四", (0,3cm) -- (4cm,3cm) ); -label( "弦五", (4cm,0) -- (0,3cm) ); -\end{lstlisting} -\begin{figure}[H] -\centering -\begin{asy} -settings.tex = "xelatex"; -usepackage("xeCJK"); -texpreamble("\setCJKmainfont{SimSun}"); -filldraw( (4cm,0) -- (4cm,3cm) -- (0,3cm) -- cycle, - fillpen=opacity(0.1)+red, drawpen=red+0.5mm ); -label( "勾三", (4cm,3cm) -- (4cm,0) ); -label( "股四", (0,3cm) -- (4cm,3cm) ); -label( "弦五", (4cm,0) -- (0,3cm) ); -\end{asy} -\end{figure} - -不过,为了得到正确的标签位置,不得不把原来逆时针画的线用顺时针方向重写,这多 -少让赵博士有些恼火:为什么不能在路径的左边标注标签呢?确实可以,很简单,只要 -给 |label| 命令再加上 |align=LeftSide|\index{align@\lstinline=align=} -\index{LeftSide@\lstinline=LeftSide=} 选项(或者简单地只用 |LeftSide|)就指定 -了在左边放置对齐。同理,还有向右对齐的 -|RightSide|\index{RightSide@\lstinline=RightSide=},在中间对齐的 -|Center|\index{Center@\lstinline=Center=} 以及一般意义的相对方向 -\lstinline[mathescape]|Relative($\text{方向}$)|。% -\index{Relative@\lstinline=Relative=}% -例如: -\begin{lstlisting} -draw( (0,0) -- (4cm,2cm), blue, Arrow ); -label( "LeftSide", (0,0) -- (4cm,2cm), align=LeftSide ); -label( "RightSide", (0,0) -- (4cm,2cm), align=RightSide ); -label( "Center", (0,0) -- (4cm,2cm), align=Center ); - -draw( (6cm,0)--(8cm,2cm), blue, Arrow ); -label( "E", (6cm,0)--(8cm,2cm), Relative(E) ); -label( "S", (6cm,0)--(8cm,2cm), Relative(S) ); -label( "W", (6cm,0)--(8cm,2cm), Relative(W) ); -label( "N", (6cm,0)--(8cm,2cm), Relative(N) ); -\end{lstlisting} -\begin{figure}[H] -\centering -\begin{asy} -draw( (0,0) -- (4cm,2cm), blue, Arrow ); -label( "LeftSide", (0,0) -- (4cm,2cm), align=LeftSide ); -label( "RightSide", (0,0) -- (4cm,2cm), align=RightSide ); -label( "Center", (0,0) -- (4cm,2cm), align=Center ); - -draw( (6cm,0)--(8cm,2cm), blue, Arrow ); -label( "E", (6cm,0)--(8cm,2cm), Relative(E) ); -label( "S", (6cm,0)--(8cm,2cm), Relative(S) ); -label( "W", (6cm,0)--(8cm,2cm), Relative(W) ); -label( "N", (6cm,0)--(8cm,2cm), Relative(N) ); -\end{asy} -\end{figure} -|E|, |S|, |W|, |N|\index{E@\lstinline=E=}\index{S@\lstinline=S=} -\index{W@\lstinline=W=}\index{N@\lstinline=N=} 分别是东南西北四个罗盘方向,% -\index{罗盘方向}用在 |Relative| 函数里面就表示相对于路径方向的四个方向。为明 -确,这里用 |Arrow|\index{Arrow@\lstinline=Arrow=} 选项在画线时加了箭头。 -\index{箭头} - -不过,这样的标签还是不能令赵博士满意。赵博士给三角形加标签,还希望标签随着三 -角形的边作旋转,使标签沿着边排列。为此,赵博士不得不又仔细查看了 -\cite{asyman},在讲标注文字一节(label)他找到了一个构造标签的更高级的办法, -即不仅仅是使用一个简单的字符串,而是使用\index{Label@\lstinline=Label=} -\begin{lstlisting} -Label(`标签`) -\end{lstlisting} -函数进行构造。里面的“标签”参数仍然可以是原来的字符串,或是通过这个函数构造 -出来的高级的标签。这个函数可以带许多可选的其他参数,如 -\lstinline[mathescape]|position=$\text{位置}$| -\index{position@\lstinline=position=} 的参数就可以指定标签放在路径中点之外的 -其他地方;而 \lstinline[mathescape]|embed=$\text{嵌入变换方式}$| -\index{embed@\lstinline=embed=} 的参数则可以解决标签自动旋转的问题。 - -这里暂且放下 |position| 参数。只来看 |embed| 参数的一个特例:% -\lstinline[mathescape]|Rotate($\text{方向}$)|% -\index{Rotate@\lstinline=Rotate=}。这个参数会让标签向着给定的方向旋转,如: -\begin{lstlisting} -draw( (0,0)--(4cm,2cm), blue, Arrow ); -label( Label("Rotate", Rotate((4,2))), - (0,0)--(4cm,2cm) ); -\end{lstlisting} -\begin{figure}[H] -\centering -\begin{asy} -draw( (0,0)--(4cm,2cm), blue, Arrow ); -label( Label("Rotate", Rotate((4,2))), - (0,0)--(4cm,2cm) ); -\end{asy} -\end{figure} -这里坐标 $(4,2)$ 正是这条直线的绘制方向。 - -终于,使用了上面的全部功能,赵博士完成了全部的图形标注工作 -(\autoref{fig:xiantulabel}): -\begin{lstlisting} -settings.tex = "xelatex"; -usepackage("xeCJK"); -texpreamble("\setCJKmainfont{SimSun}"); - -import math; -add( scale(1cm) * grid(7, 7, gray) ); -add( shift(0,3cm) * rotate(-aTan(3/4)) * scale(1cm) * grid(5, 5, gray) ); - -fill( box((3cm,3cm), (4cm,4cm)), opacity(0.5)+yellow ); -filldraw( (4cm,0) -- (4cm,3cm) -- (0,3cm) -- cycle - ^^ (7cm,4cm) -- (4cm,4cm) -- (4cm,0) -- cycle - ^^ (3cm,7cm) -- (3cm,4cm) -- (7cm,4cm) -- cycle - ^^ (0,3cm) -- (3cm,3cm) -- (3cm,7cm) -- cycle, - fillpen=opacity(0.1)+red, drawpen=red+0.5mm ); - -label("朱实", (2cm,4cm)); -label("黄实", (3.5cm,3.5cm)); -label("弦实", (5cm,4cm)); -label( Label("勾三",Rotate(S)), (4cm,0)--(4cm,3cm), LeftSide ); -label( Label("股四",Rotate(E)), (4cm,3cm)--(0,3cm), LeftSide ); -label( Label("弦五",Rotate((4,-3))), (0,3cm)--(4cm,0), LeftSide ); -\end{lstlisting} -\begin{figure}[htbp] -\centering -\begin{asy} -settings.tex = "xelatex"; -usepackage("xeCJK"); -texpreamble("\setCJKmainfont{SimSun}"); - -import math; -add( scale(1cm) * grid(7, 7, gray) ); -add( shift(0,3cm) * rotate(-aTan(3/4)) * scale(1cm) * grid(5, 5, gray) ); - -fill( box((3cm,3cm), (4cm,4cm)), opacity(0.5)+yellow ); -filldraw( (4cm,0) -- (4cm,3cm) -- (0,3cm) -- cycle - ^^ (7cm,4cm) -- (4cm,4cm) -- (4cm,0) -- cycle - ^^ (3cm,7cm) -- (3cm,4cm) -- (7cm,4cm) -- cycle - ^^ (0,3cm) -- (3cm,3cm) -- (3cm,7cm) -- cycle, - fillpen=opacity(0.1)+red, drawpen=red+0.5mm ); - -label("朱实", (2cm,4cm)); -label("黄实", (3.5cm,3.5cm)); -label("弦实", (5cm,4cm)); -label( Label("勾三",Rotate(S)), (4cm,0)--(4cm,3cm), LeftSide ); -label( Label("股四",Rotate(E)), (4cm,3cm)--(0,3cm), LeftSide ); -label( Label("弦五",Rotate((4,-3))), (0,3cm)--(4cm,0), LeftSide ); -\end{asy} -\caption{带标注的完整弦图} -\label{fig:xiantulabel} -\end{figure} - - -\section*{习题} - -\begin{enumerate} - \item 查阅参考手册 \cite{asyman},看看都有哪些颜色可用。看看你的系统中安装 - 了哪些中文字体。然后修改\autoref{fig:xiantulabel},使用另一种你喜欢的字体 - 进行标注;并且将“朱实”、“黄实”和“弦实”分别用红、黄、橙色标注。 - - \item 查阅参考手册 \cite{asyman},看看 |draw|、|fill|、|label| 等命令都可以 - 带哪些可选的参数,并自己举例子试验一下效果。 - - \item 代码 -\begin{lstlisting} -path zhushi = (4cm,0) -- (4cm,3cm) -- (0,3cm) -- cycle; -\end{lstlisting} - 可以把一个三角形的路径保存在变量 |zhushi| 中,以后就可以使用 - |draw(zhushi)| 这样的命令对此路径进行操作了\footnote{关于变量定义和使用的 - 详细内容,参考后面的章节或手册 \cite{asyman}。}。 - - 考虑如何利用平移和旋转变换,只定义一个三角形的路径,就把弦图中的四个红色 - 三角形都画出来。 - - \item 查阅手册 \cite{asyman} 和 \Asy{} 自带的例子,研究模块 - \prgname{roundedpath} 的用法。并利用它尝试画出下面的图形: -\begin{figure}[H] -\centering -\begin{asy} -import roundedpath; -pen thick = linewidth(0.8pt); -path p = (0,0) -- (0,2cm) -- (1cm,3.25cm) -- (2cm,2cm) -- (2cm,0) - -- (0,2cm) -- (2cm, 2cm) -- (0,0) -- (2cm,0); -draw(roundedpath(p, 8pt), thick); -\end{asy} -\end{figure} - - 看看 \Asy{} 中还有什么用法简单而又有趣的模块。 - - \item (较难)研究在 \LaTeX{} 里中文直排的方法,尽量精确地复现出赵博士理想 - 中的弦图效果(\autoref{fig:xiantu})。 -\end{enumerate} - -\endinput - -% vim:tw=77: - |