summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/algorithms
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/algorithms
Initial commit
Diffstat (limited to 'macros/latex/contrib/algorithms')
-rw-r--r--macros/latex/contrib/algorithms/COPYING510
-rw-r--r--macros/latex/contrib/algorithms/README19
-rw-r--r--macros/latex/contrib/algorithms/THANKS20
-rw-r--r--macros/latex/contrib/algorithms/algorithms.dtx1272
-rw-r--r--macros/latex/contrib/algorithms/algorithms.ins69
-rw-r--r--macros/latex/contrib/algorithms/algorithms.pdfbin0 -> 332453 bytes
6 files changed, 1890 insertions, 0 deletions
diff --git a/macros/latex/contrib/algorithms/COPYING b/macros/latex/contrib/algorithms/COPYING
new file mode 100644
index 0000000000..2d2d780e60
--- /dev/null
+++ b/macros/latex/contrib/algorithms/COPYING
@@ -0,0 +1,510 @@
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations
+below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes a de-facto standard. To achieve this, non-free programs must
+be allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control
+compilation and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at least
+ three years, to give the same user the materials specified in
+ Subsection 6a, above, for a charge no more than the cost of
+ performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply, and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License
+may add an explicit geographical distribution limitation excluding those
+countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser 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 Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "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
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY 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
+LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms
+of the ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library.
+It is safest to attach them to the start of each source file to most
+effectively convey the exclusion of warranty; and each file should
+have at least the "copyright" line and a pointer to where the full
+notice is found.
+
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or
+your school, if any, to sign a "copyright disclaimer" for the library,
+if necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James
+ Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/macros/latex/contrib/algorithms/README b/macros/latex/contrib/algorithms/README
new file mode 100644
index 0000000000..f2a7588c1e
--- /dev/null
+++ b/macros/latex/contrib/algorithms/README
@@ -0,0 +1,19 @@
+The "algorithms" bundle provides two environments, "algorithmic" and
+"algorithm", which are designed to be used together but may be used
+separately.
+
+The "algorithmic" environment provides an environment for describing
+algorithms and the "algorithm" environment provides a "float" wrapper
+for algorithms (implemented using "algorithmic" or some other method at
+the author's option).
+
+The reason that two environments are provided is to allow the author
+maximum flexibility.
+
+The algorithms bundle is (currently) licensed under the Lesser GPL
+license, which is a Free Software license. It may, in the future, be
+released under the standard LaTeX license (the Latex Project Public
+License).
+
+
+ -- Rogério Brito <rbrito@users.berlios.de> Fri, 2 Jun 2006 21:54:10 -0300
diff --git a/macros/latex/contrib/algorithms/THANKS b/macros/latex/contrib/algorithms/THANKS
new file mode 100644
index 0000000000..82287f243b
--- /dev/null
+++ b/macros/latex/contrib/algorithms/THANKS
@@ -0,0 +1,20 @@
+This file mentions people who have contributed with code or with ideas
+for the algorithms package. If your name is missing from the credits,
+please get in touch with the current maintainer of the package to
+correct this in the next relese.
+
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+Current Maintainer (2005-present):
+ Rogério Brito
+
+Original Author (1996-2004):
+ Peter Williams
+
+Other Contributions (in lexicographic order):
+ * Arnaud Giersch
+ * Arnaud Legrand
+ * Fabian Mörchen
+ * Joachim Reichel
+ * John Perry
+ * Manuel López-Ibáńez
+ * Peter Wilson
diff --git a/macros/latex/contrib/algorithms/algorithms.dtx b/macros/latex/contrib/algorithms/algorithms.dtx
new file mode 100644
index 0000000000..f90ef4799d
--- /dev/null
+++ b/macros/latex/contrib/algorithms/algorithms.dtx
@@ -0,0 +1,1272 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 1994-2004 Peter Williams <pwil3058@bigpond.net.au>
+% Copyright (C) 2005-2009 Rogério Brito <rbrito@ime.usp.br>
+%
+% This document file is free software; you can redistribute it and/or
+% modify it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 2 of the
+% License, or (at your option) any later version.
+%
+% This document file 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 Lesser
+% General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public License
+% along with this document file; if not, write to the Free Software
+% Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+% USA.
+%
+% \fi
+%
+% \iffalse
+%<algorithm>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<algorithm>\ProvidesPackage{algorithm}
+%<algorithm> [2009/08/24 v0.1 Document Style `algorithm' - floating environment]
+%
+%<algorithmic>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<algorithmic>\ProvidesPackage{algorithmic}
+%<algorithmic> [2009/08/24 v0.1 Document Style `algorithmic']
+%
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[latin1]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[sc]{mathpazo}
+\usepackage[pdfstartview={FitH}]{hyperref}
+\usepackage{algorithm}
+\usepackage{algorithmic}
+\usepackage{multicol}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{algorithms.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+%\CheckSum{0}
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \changes{v0.1}{2009/08/24}{Migrated the package to .ins and .dtx format}
+%
+% \GetFileInfo{algorithm.sty}
+% \GetFileInfo{algorithmic.sty}
+% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ }
+% \DoNotIndex{\@ne}
+% \DoNotIndex{\advance,\begingroup,\catcode,\closein}
+% \DoNotIndex{\closeout,\day,\def,\edef,\else,\empty,\endgroup}
+%
+% \title{The \textsf{algorithms} bundle\thanks{This document
+% corresponds to \textsf{algorithms}~\fileversion,
+% dated~\filedate.}}
+% \author{Rogério Brito\\ \href{mailto:rbrito@ime.usp.br}{\texttt{rbrito@ime.usp.br}}}
+%
+% \newcommand{\keyword}[1]{\texttt{#1}}
+% \newcommand{\nameoffile}[1]{\texttt{#1}}
+%
+% \setcounter{tocdepth}{2}
+%
+% \addtocontents{toc}{\protect\begin{multicols}{2}}
+% \maketitle
+% \tableofcontents
+% \listofalgorithms
+%
+% % \newtheorem{warning}{Warning}
+% \renewcommand{\thewarning}{}
+%
+% \section{Introduction}
+%
+% This package provides two environments, \keyword{algorithmic} and
+% \keyword{algorithm}, which are designed to be used together but may,
+% depending on the necessities of the user, be used separately.
+%
+% The \keyword{algorithmic} environment provides an environment for
+% describing algorithms and the \keyword{algorithm} environment provides
+% a ``float'' wrapper for algorithms (implemented using
+% \keyword{algorithmic} or some other method at the users's option).
+% The reason for two environments being provided is to allow the user
+% maximum flexibility.
+%
+% This work may be distributed and/or modified under the conditions of
+% the GNU Lesser General Public License, either version 2 of the
+% License, or (at your option) any later version, as published by the
+% Free Software Foundation. See the file \nameoffile{COPYING} included
+% in this package for further details.
+%
+% Currently, this package consists of the following files:
+% \begin{itemize}
+% \item \nameoffile{algorithms.ins}: the driver file
+% \item \nameoffile{algorithms.dtx}: the source file
+% \item \nameoffile{COPYING}: the license file
+% \item \nameoffile{README}: remarks about the package
+% \item \nameoffile{THANKS}: mentions of thanks for contributors to
+% the package
+% \end{itemize}
+%
+% Starting with with the 2009-08-24 release, the package is now
+% versioned and this document corresponds to version~\fileversion.
+%
+% If you use this package, the author would kindly appreciate if you
+% mentioned it in your documents, so as to let the package be better
+% known and have more contributors, to make it better for the community
+% itself. This is \emph{not} required by the license: it's just a
+% friendly request.
+%
+%\section{Installation}
+%
+% The installation procedure of \textsf{algorithms} follows the usual
+% practice of packages shipped with a pair of
+% \nameoffile{.ins}/\nameoffile{.dtx}---simply type the comand:
+% \begin{quote}
+% \texttt{latex algorithms.ins}
+% \end{quote}
+% and the \nameoffile{.sty} files will be generated. Copy them to a
+% place that is referenced by your \LaTeX{} distribution. To generate
+% the documentation, type:
+% \begin{quote}
+% \texttt{latex algorithms.dtx}
+% \end{quote}
+%
+% \section[Environment: \keyword{algorithmic}]%
+% {The \keyword{algorithmic} Environment}
+% \label{sec:algorithmic-envir}
+% Within an \keyword{algorithmic} a number of commands for typesetting
+% popular algorithmic constructs are available. In general, the
+% commands provided can be arbitrarily nested to describe quite complex
+% algorithms. An optional argument to the \verb+\begin{algorithmic}+
+% statement can be used to turn on line numbering by giving a positive
+% integer indicating the required frequency of line numbering. For
+% example, \verb+\begin{algorithmic}[5]+ would cause every fifth line
+% to be numbered.
+%
+% \subsection{The Simple Statement}
+%
+% The simple statement takes the form
+% \begin{verbatim}
+% \STATE <text>
+% \end{verbatim}
+% and is used for simple statements. For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \STATE $S \leftarrow 0$
+% \end{algorithmic}
+% \end{verbatim}
+% would produce
+% \begin{algorithmic}
+% \STATE $S \leftarrow 0$
+% \end{algorithmic}
+% With line numbering selected for every line, using,
+% \begin{verbatim}
+% \begin{algorithmic}[1]
+% \STATE $S \leftarrow 0$
+% \end{algorithmic}
+% \end{verbatim}
+% we would get
+% \begin{algorithmic}[1]
+% \STATE $S \leftarrow 0$
+% \end{algorithmic}
+%
+% \begin{warning}
+% For users of earlier versions of \keyword{algorithmic} this
+% construct is a cause of an incompatibility. In the earlier version,
+% instead of starting simple statements with the \verb+\STATE+
+% command, simple statements were entered as free text and terminated
+% with \verb+\\+ command. Unfortunately, this simpler method failed
+% to survive the modifications necessary for statement numbering.
+% However, the \verb+\\+ command can still be used to force a line
+% break within a simple statement.
+% \end{warning}
+%
+%\subsection{The \emph{if-then-else} Statement}
+%
+% The \emph{if-then-else} construct takes the forms:
+% \begin{verbatim}
+% \IF{<condition>} <text> \ENDIF
+% \IF{<condition>} <text1> \ELSE <text2> \ENDIF
+% \IF{<condition1>} <text1> \ELSIF{<condition2>} <text2> \ELSE <text3> \ENDIF
+% \end{verbatim}
+%
+% In the third of these forms there is no limit placed on the number of
+% \verb+\ELSIF{<condition>}+ that may be used. For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \IF{some condition is true}
+% \STATE do some processing
+% \ELSIF{some other condition is true}
+% \STATE do some different processing
+% \ELSIF{some even more bizarre condition is met}
+% \STATE do something else
+% \ELSE
+% \STATE do the default actions
+% \ENDIF
+% \end{algorithmic}
+% \end{verbatim}
+% would produce
+% \begin{algorithmic}
+% \IF{some condition is true}
+% \STATE do some processing
+% \ELSIF{some other condition is true}
+% \STATE do some different processing
+% \ELSIF{some even more bizarre condition is met}
+% \STATE do something else
+% \ELSE
+% \STATE do the default actions
+% \ENDIF
+% \end{algorithmic}
+% with appropriate indentations.
+%
+% \subsection{The \emph{for} Loop}
+%
+% The \emph{for} loop takes two forms. Namely:
+% \begin{verbatim}
+% \FOR{<condition>} <text> \ENDFOR
+% \FORALL{<condition>} <text> \ENDFOR
+% \end{verbatim}
+%
+% \noindent For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \FOR{$i=0$ to $10$}
+% \STATE carry out some processing
+% \ENDFOR
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \FOR{$i=0$ to $10$}
+% \STATE carry out some processing
+% \ENDFOR
+% \end{algorithmic}
+% and
+% \begin{verbatim}
+% \begin{algorithmic}[1]
+% \FORALL{$i$ such that $0\leq i\leq 10$}
+% \STATE carry out some processing
+% \ENDFOR
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}[1]
+% \FORALL{$i$ such that $0\leq i\leq 10$}
+% \STATE carry out some processing
+% \ENDFOR
+% \end{algorithmic}
+%
+% \subsubsection{The \emph{to} Connective}
+% As may be clear from the usage of loops above, we usually want to
+% specify ranges over which a variable will assume values. To help make
+% this typographically distinct, the \keyword{algorithmic} package now
+% supports the \algorithmicto{} connective, which can be used like:
+% \begin{verbatim}
+% \begin{algorithmic}
+% \FOR{$i=0$ \TO $10$}
+% \STATE carry out some processing
+% \ENDFOR
+% \end{algorithmic}
+% \end{verbatim}
+% to produce the output
+% \begin{algorithmic}
+% \FOR{$i=0$ \TO $10$}
+% \STATE carry out some processing
+% \ENDFOR
+% \end{algorithmic}
+%
+% \subsection{The \emph{while} Loop}
+%
+% The \emph{while} loop takes the form
+% \begin{verbatim}
+% \WHILE{<condition>} <text> \ENDWHILE
+% \end{verbatim}
+% For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \WHILE{some condition holds}
+% \STATE carry out some processing
+% \ENDWHILE
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \WHILE{some condition holds}
+% \STATE carry out some processing
+% \ENDWHILE
+% \end{algorithmic}
+%
+% \subsection{The \emph{repeat-until} Loop}
+%
+% The \emph{repeat-until} loop takes the form.
+% \begin{verbatim}
+% \REPEAT <text> \UNTIL{<condition>}
+% \end{verbatim}
+% For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \REPEAT
+% \STATE carry out some processing
+% \UNTIL{some condition is met}
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \REPEAT
+% \STATE carry out some processing
+% \UNTIL{some condition is met}
+% \end{algorithmic}
+%
+% \subsection{The Infinite Loop}
+%
+% The infinite loop takes the form.
+% \begin{verbatim}
+% \LOOP <text> \ENDLOOP
+% \end{verbatim}
+% For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \LOOP
+% \STATE this processing will be repeated forever
+% \ENDLOOP
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \LOOP
+% \STATE this processing will be repeated forever
+% \ENDLOOP
+% \end{algorithmic}
+%
+% \subsection{The Logical Connectives}
+%
+% The connectives \algorithmicand, \algorithmicor, \algorithmicxor{} and
+% \algorithmicnot{} can be used in boolean expressions in the familiar,
+% expected way:
+% \begin{verbatim}
+% <expression> \AND <expression>
+% <expression> \OR <expression>
+% <expression> \XOR <expression>
+% \NOT <expression>
+% \end{verbatim}
+% according to their arity.\footnote{But there is nothing that prevents
+% the user from violating the arity, from a syntatic point of view.}
+% For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \IF{\NOT ($year \bmod 400$ \XOR $year \bmod 100$ \XOR $year \bmod 4$)}
+% \STATE $year$ does not represent a leap year.
+% \ENDIF
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \IF{\NOT ($year \bmod 400$ \XOR $year \bmod 100$ \XOR $year \bmod 4$)}
+% \STATE $year$ does not represent a leap year.
+% \ENDIF
+% \end{algorithmic}
+%
+% \subsection{The Precondition}
+%
+% The precondition (that must be met if an algorithm is to correctly
+% execute) takes the form:
+% \begin{verbatim}
+% \REQUIRE <text>
+% \end{verbatim}
+% For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \REQUIRE $x \neq 0$ and $n \geq 0$
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \REQUIRE $x \neq 0$ and $n \geq 0$
+% \end{algorithmic}
+%
+% \subsection{The Postcondition}
+%
+% The postcondition (that must be met after an algorithm has correctly
+% executed) takes the form:
+% \begin{verbatim}
+% \ENSURE <text>
+% \end{verbatim}
+% For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \ENSURE $x \neq 0$ and $n \geq 0$
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \ENSURE $x \neq 0$ and $n \geq 0$
+% \end{algorithmic}
+%
+% \subsection{Returning Values}
+%
+% The \keyword{algorithmic} environment offers a special statement for
+% explicitly returning values in algorithms. It has the syntax:
+% \begin{verbatim}
+% \RETURN <text>
+% \end{verbatim}
+% For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \RETURN $(x+y)/2$
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \RETURN $(x+y)/2$
+% \end{algorithmic}
+%
+%
+% \subsubsection{The ``true'' and ``false'' Values}
+%
+% Since many algorithms have the necessity of returning \emph{true} or
+% \emph{false} values, \keyword{algorithms}, starting with version
+% 2006-06-02, includes the keywords \verb+\TRUE+ and \verb+\FALSE+,
+% which are intented to print the values in a standard fashion, like the
+% following snippet of an algorithm to decide if an integer $n$ is even or
+% odd:
+% \begin{verbatim}
+% \begin{algorithmic}
+% \IF{$n$ is odd}
+% \RETURN \TRUE
+% \ELSE
+% \RETURN \FALSE
+% \ENDIF
+% \end{algorithmic}
+% \end{verbatim}
+% The code above produces the following output:
+% \begin{algorithmic}
+% \IF{$n$ is odd}
+% \RETURN \TRUE
+% \ELSE
+% \RETURN \FALSE
+% \ENDIF
+% \end{algorithmic}
+%
+% \subsection{Printing Messages}
+%
+% Another feature of the \keyword{algorithmic} environment is that it
+% currently provides a standard way of printing values (which is an
+% operation used enough to merit its own keyword). It has the syntax:
+% \begin{verbatim}
+% \PRINT <text>
+% \end{verbatim}
+% For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \PRINT \texttt{``Hello, World!''}
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \PRINT \texttt{``Hello, World!''}
+% \end{algorithmic}
+%
+% \subsection{Comments}
+%
+% Comments may be inserted at most points in an algorithm using the form:
+% \begin{verbatim}
+% \COMMENT{<text>}
+% \end{verbatim}
+% For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \STATE do something \COMMENT{this is a comment}
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \STATE do something \COMMENT{this is a comment}
+% \end{algorithmic}
+% Because the mechanisms used to build the various algorithmic structures
+% make it difficult to use the above mechanism for placing comments at the
+% end of the first line of a construct, the commands \verb+\IF+,
+% \verb+\ELSIF+, \verb+\ELSE+, \verb+\WHILE+, \verb+\FOR+, \verb+\FORALL+,
+% \verb+\REPEAT+ and \verb+\LOOP+ all take an optional argument which will
+% be treated as a comment to be placed at the end of the line on which
+% they appear. For example,
+% \begin{algorithmic}
+% \REPEAT[this is comment number one]
+% \IF[this is comment number two]{condition one is met}
+% \STATE do something
+% \ELSIF[this is comment number three]{condition two is met}
+% \STATE do something else
+% \ELSE[this is comment number four]
+% \STATE do nothing
+% \ENDIF
+% \UNTIL{hell freezes over}
+% \end{algorithmic}
+%
+% \subsection{An Example}
+%
+% The following example demonstrates the use of the \keyword{algorithmic}
+% environment to describe a complete algorithm. The following input
+% \begin{verbatim}
+% \begin{algorithmic}
+% \REQUIRE $n \geq 0$
+% \ENSURE $y = x^n$
+% \STATE $y \leftarrow 1$
+% \STATE $X \leftarrow x$
+% \STATE $N \leftarrow n$
+% \WHILE{$N \neq 0$}
+% \IF{$N$ is even}
+% \STATE $X \leftarrow X \times X$
+% \STATE $N \leftarrow N / 2$
+% \ELSE[$N$ is odd]
+% \STATE $y \leftarrow y \times X$
+% \STATE $N \leftarrow N - 1$
+% \ENDIF
+% \ENDWHILE
+% \end{algorithmic}
+% \end{verbatim}
+% will produce
+% \begin{algorithmic}
+% \REQUIRE $n \geq 0$
+% \ENSURE $y = x^n$
+%
+% \STATE $y \leftarrow 1$
+% \STATE $X \leftarrow x$
+% \STATE $N \leftarrow n$
+% \WHILE{$N \neq 0$}
+% \IF{$N$ is even}
+% \STATE $X \leftarrow X \times X$
+% \STATE $N \leftarrow N / 2$
+% \ELSE[$N$ is odd]
+% \STATE $y \leftarrow y \times X$
+% \STATE $N \leftarrow N - 1$
+% \ENDIF
+% \ENDWHILE
+% \end{algorithmic}
+% which is an algorithm for finding the value of a number taken to a
+% non-negative power.
+%
+% \subsection[Options/Customization]%
+% {Options and Customization}
+%
+% There is a single option, \keyword{noend}\label{kwd:noend} that may be
+% invoked when the \texttt{algorithmic} package is loaded. With this
+% option invoked the \emph{end} statements are omitted in the output.
+% This allows space to be saved in the output document when this is an
+% issue.
+%
+% \subsubsection{Changing Indentation}
+% \label{sec:changing-indentation}
+% In the spirit of saving vertical space (which is especially important
+% when submitting a paper for a journal, where space is frequently limited
+% for authors), the \keyword{algorithmic} environment offers, beginning
+% with the version released in 2005-05-08, a way to control the amount of
+% indentation that is used by a given algorithm.
+%
+% The amount of indentation to be used is given by the command
+% \begin{verbatim}
+% \algsetup{indent=lenght}
+% \end{verbatim}
+% where \emph{length} is any valid length used by \TeX. The default value
+% of the indentation used by the \keyword{algorithmic} environment is $1$
+% em (for ``backward compatibility reasons''), but a value of $2$ em or
+% more is recommended, depending on the publication. For example, the
+% snippet
+% \begin{verbatim}
+% \algsetup{indent=2em}
+% \begin{algorithmic}[1]
+% \STATE $a \leftarrow 1$
+% \IF{$a$ is even}
+% \PRINT ``$a$ is even''
+% \ELSE
+% \PRINT ``$a$ is odd''
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \algsetup{indent=2em}
+% \begin{algorithmic}[1]
+% \STATE $a \leftarrow 1$
+% \IF{$a$ is even}
+% \PRINT ``$a$ is even''
+% \ELSE
+% \PRINT ``$a$ is odd''
+% \ENDIF
+% \end{algorithmic}
+% while
+% \begin{verbatim}
+% \algsetup{indent=5em}
+% \begin{algorithmic}[1]
+% \STATE $a \leftarrow 1$
+% \IF{$a$ is even}
+% \PRINT ``$a$ is even''
+% \ELSE
+% \PRINT ``$a$ is odd''
+% \end{algorithmic}
+% \end{verbatim}
+% would produce
+% \algsetup{indent=5em}
+% \begin{algorithmic}[1]
+% \STATE $a \leftarrow 1$
+% \IF{$a$ is even}
+% \PRINT ``$a$ is even''
+% \ELSE
+% \PRINT ``$a$ is odd''
+% \ENDIF
+% \end{algorithmic}
+% \algsetup{indent=1em}
+%
+% The intended use of this option is to allow the author to omit the
+% \emph{end} (see Section~\ref{kwd:noend} for details) statements without
+% loosing readability, by increasing the amount of indentation to a
+% suitable level.
+%
+% \subsubsection{Changing Line Numbering}
+%
+% As mentioned in Section~\ref{sec:algorithmic-envir} and illustrated in
+% Section~\ref{sec:changing-indentation}, \keyword{algorithms} already
+% provides you with the possibility of numbering lines.
+%
+% Starting with the version released in 2005-07-05, you can now change two
+% aspects of line numbering: the size of the line numbers (which, by
+% default, is \verb+\footnotesize+) and the delimiter used to separate the
+% line number from the code (which, by default, is \verb+:+, i.e., a
+% colon).
+%
+% You can change the size of the line numbers using the command:
+% \begin{verbatim}
+% \algsetup{linenosize=size}
+% \end{verbatim}
+% where \emph{size} is any of the various commands provided by \LaTeX\ to
+% change the size of the font to be used. Among others, useful values are
+% \verb+\tiny+, \verb+\scriptsize+, \verb+\footnotesize+ and
+% \verb+\small+. Please see the complete list of sizes in your \LaTeX\
+% documentation.
+%
+% As another frequently requested feature, you can change the delimiter
+% used with the line numbers by issuing the command:
+% \begin{verbatim}
+% \algsetup{linenodelimiter=delimiter}
+% \end{verbatim}
+% where \emph{delimiter} is any ``well-formed'' string, including the
+% empty string. With this command, you can change the colon to a period
+% (\verb+.+) by issuing the command
+% \begin{verbatim}
+% \algsetup{linenodelimiter=.}
+% \end{verbatim}
+% or even omit the delimiter, by specifying the empty string or a space
+% (\verb+\ +), whatever seems best for your document.
+%
+% As an example of such commands, the code produced by
+% \begin{verbatim}
+% \algsetup{
+% linenosize=\small,
+% linenodelimiter=.
+% }
+% \begin{algorithmic}[1]
+% \STATE $i \leftarrow 10$
+% \RETURN $i$
+% \end{algorithmic}
+% \end{verbatim}
+% would be something like
+%
+% \algsetup{
+% linenosize=\small,
+% linenodelimiter=.
+% }
+% \begin{algorithmic}[1]
+% \STATE $i \leftarrow 10$
+% \RETURN $i$
+% \end{algorithmic}
+% \algsetup{linenosize=\footnotesize,
+% linenodelimiter=:}
+%
+% \subsubsection{Customization}
+%
+% In order to facilitate the use of this package with foreign languages,
+% all of the words in the output are produced via redefinable macro
+% commands. The default definitions of these macros are:
+% \begin{verbatim}
+% \newcommand{\algorithmicrequire}{\textbf{Require:}}
+% \newcommand{\algorithmicensure}{\textbf{Ensure:}}
+% \newcommand{\algorithmicend}{\textbf{end}}
+% \newcommand{\algorithmicif}{\textbf{if}}
+% \newcommand{\algorithmicthen}{\textbf{then}}
+% \newcommand{\algorithmicelse}{\textbf{else}}
+% \newcommand{\algorithmicelsif}{\algorithmicelse\ \algorithmicif}
+% \newcommand{\algorithmicendif}{\algorithmicend\ \algorithmicif}
+% \newcommand{\algorithmicfor}{\textbf{for}}
+% \newcommand{\algorithmicforall}{\textbf{for all}}
+% \newcommand{\algorithmicdo}{\textbf{do}}
+% \newcommand{\algorithmicendfor}{\algorithmicend\ \algorithmicfor}
+% \newcommand{\algorithmicwhile}{\textbf{while}}
+% \newcommand{\algorithmicendwhile}{\algorithmicend\ \algorithmicwhile}
+% \newcommand{\algorithmicloop}{\textbf{loop}}
+% \newcommand{\algorithmicendloop}{\algorithmicend\ \algorithmicloop}
+% \newcommand{\algorithmicrepeat}{\textbf{repeat}}
+% \newcommand{\algorithmicuntil}{\textbf{until}}
+% \newcommand{\algorithmicprint}{\textbf{print}}
+% \newcommand{\algorithmicreturn}{\textbf{return}}
+% \newcommand{\algorithmictrue}{\textbf{true}}
+% \newcommand{\algorithmicfalse}{\textbf{false}}
+% \end{verbatim}
+%
+% If you would like to change the definition of these commands to another
+% content, then you should use, in your own document, the standard
+% \LaTeX{} command \keyword{renewcommand}, with an usage like this:
+% \begin{verbatim}
+% \renewcommand{\algorithmicrequire}{\textbf{Input:}}
+% \renewcommand{\algorithmicensure}{\textbf{Output:}}
+% \end{verbatim}
+%
+% \paragraph{About the Way Comments Are Formatted}
+%
+% The formatting of comments is implemented via a single argument command
+% macro which may also be redefined. The default definition is
+% \begin{verbatim}
+% \newcommand{\algorithmiccomment}[1]{\{#1\}}
+% \end{verbatim}
+% and another option that may be interesting for users familiar with
+% C-like languages is to redefine the comments to be
+% \begin{verbatim}
+% \renewcommand{\algorithmiccomment}[1]{// #1}
+% \end{verbatim}
+% Comments produced this way would be like this:
+% \renewcommand{\algorithmiccomment}[1]{// #1}
+% \begin{algorithmic}
+% \STATE $i \leftarrow i + 1$ \COMMENT{Increments $i$}
+% \end{algorithmic}
+% This second way to present comments may become the default in a future
+% version of this package.
+%
+% \section[Environment: \keyword{algorithm}]%
+% {The \keyword{algorithm} Environment}
+%
+% \subsection{General}
+%
+% When placed within the text without being encapsulated in a floating
+% environment \texttt{algorithmic} environments may be split over a page
+% boundary, greatly detracting from their appearance.\footnote{This is the
+% expected behaviour for floats in \LaTeX. If you don't care about
+% having your algorithm split between pages, then one option that you
+% have is to ignore the \texttt{algorithm} environment.} In addition, it
+% is useful to have algorithms numbered for reference and for lists of
+% algorithms to be appended to the list of contents. The
+% \texttt{algorithm} environment is meant to address these concerns by
+% providing a floating environment for algorithms.
+%
+% \subsection{An Example}
+% To illustrate the use of the \texttt{algorithm} environment, the
+% following text
+% \begin{verbatim}
+% \begin{algorithm}
+% \caption{Calculate $y = x^n$}
+% \label{alg1}
+% \begin{algorithmic}
+% \REQUIRE $n \geq 0 \vee x \neq 0$
+% \ENSURE $y = x^n$
+% \STATE $y \leftarrow 1$
+% \IF{$n < 0$}
+% \STATE $X \leftarrow 1 / x$
+% \STATE $N \leftarrow -n$
+% \ELSE
+% \STATE $X \leftarrow x$
+% \STATE $N \leftarrow n$
+% \ENDIF
+% \WHILE{$N \neq 0$}
+% \IF{$N$ is even}
+% \STATE $X \leftarrow X \times X$
+% \STATE $N \leftarrow N / 2$
+% \ELSE[$N$ is odd]
+% \STATE $y \leftarrow y \times X$
+% \STATE $N \leftarrow N - 1$
+% \ENDIF
+% \ENDWHILE
+% \end{algorithmic}
+% \end{algorithm}
+% \end{verbatim}
+% produces Algorithm~\ref{alg1} which is a slightly modified version of
+% the earlier algorithm for determining the value of a number taken to an
+% integer power. In this case, provided the power may be negative
+% provided the number is not zero.
+%
+% \begin{algorithm}[H]
+% \caption{Calculate $y = x^n$}
+% \label{alg1}
+% \begin{algorithmic}
+% \REQUIRE $n \geq 0 \vee x \neq 0$
+% \ENSURE $y = x^n$
+%
+% \STATE $y \leftarrow 1$
+% \IF{$n < 0$}
+% \STATE $X \leftarrow 1 / x$
+% \STATE $N \leftarrow -n$
+% \ELSE
+% \STATE $X \leftarrow x$
+% \STATE $N \leftarrow n$
+% \ENDIF
+%
+% \WHILE{$N \neq 0$}
+% \IF{$N$ is even}
+% \STATE $X \leftarrow X \times X$
+% \STATE $N \leftarrow N / 2$
+% \ELSE[$N$ is odd]
+% \STATE $y \leftarrow y \times X$
+% \STATE $N \leftarrow N - 1$
+% \ENDIF
+% \ENDWHILE
+% \end{algorithmic}
+% \end{algorithm}
+%
+% The command \verb+\listofalgorithms+ may be used to produce a list of
+% algorithms as part of the table contents as shown at the beginning of
+% this document. An auxiliary file with a suffix of \texttt{.loa} is
+% produced when this feature is used.
+%
+% \subsection{Options}
+%
+% The appearance of the typeset algorithm may be changed by use of the
+% options: \texttt{plain}, \texttt{boxed} or \texttt{ruled} during the
+% loading of the \texttt{algorithm} package. The default option is
+% \texttt{ruled}.
+%
+% The numbering of algorithms can be influenced by providing the name of
+% the document component within which numbering should be recommenced.
+% The legal values for this option are: \texttt{part}, \texttt{chapter},
+% \texttt{section}, \texttt{subsection}, \texttt{subsubsection} or
+% \texttt{nothing}. The default value is \texttt{nothing} which causes
+% algorithms to be numbered sequentially throughout the document.
+%
+% \subsection{Customization}
+%
+% In order to facilitate the use of this package with foreign languages,
+% methods have been provided to facilitate the necessary modifications.
+%
+% The title used in the caption within \texttt{algorithm} environment can
+% be set by use of the standard \verb+\floatname+ command which is
+% provided as part of the \texttt{float} package which was used to
+% implement this package. For example,
+% \begin{verbatim}
+% \floatname{algorithm}{Procedure}
+% \end{verbatim}
+% would cause \textbf{Procedure} to be used instead of \textbf{Algorithm}
+% within the caption of algorithms.
+%
+% In a manner analogous to that available for the built in floating
+% environments, the heading used for the list of algorithms may be changed
+% by redefining the command \verb+listalgorithmname+. The default
+% definition for this command is
+% \begin{verbatim}
+% \newcommand{\listalgorithmname}{List of Algorithms}
+% \end{verbatim}
+%
+% \subsubsection{Placement of Algorithms}
+%
+% One important fact that many users may not have noticed is that the
+% \texttt{algorithm} environment is actually built with the \texttt{float}
+% package and \texttt{float}, in turn, uses David Carlisle's \textsf{here}
+% style option. This means that the floats generated by the
+% \texttt{algorithm} environment accept a special option, namely,
+% \textbf{[H]}, with a capital `H', instead of the usual `h' offered by
+% plain \LaTeX.
+%
+% This option works as a stronger request of ``please put the float
+% here'': instead of just a suggestion for \LaTeX, it actually means ``put
+% this float HERE'', which is something desired by many. The two
+% algorithms typeset in this document use this option.
+%
+% \medskip
+% \begin{warning}
+% You \emph{can't} use the `H' positioning option together with the
+% usual `h' (for ``here''), `b' (for ``bottom'') etc. This is a
+% limitation (as far as I know) of the \texttt{float.sty} package.
+% \end{warning}
+%
+% \section[References in Algorithms]%
+% {Labels and References in Algorithms}
+%
+% With the release of 2005-07-05, now \keyword{algorithmic} accepts labels
+% and references to specific lines of a given algorithm, so you don't have
+% to hardcode the line numbers yourself when trying to explain what the
+% code does in your texts. Thanks to Arnaud Legrand for the suggestion
+% and patch for this highly missed feature.
+%
+% An example of its use is shown in Algorithm~\ref{alg2}.
+% \begin{algorithm}[H]
+% \caption{Calculate $y = x^n$}
+% \label{alg2}
+% \begin{algorithmic}[1]
+% \REQUIRE $n \geq 0 \vee x \neq 0$
+% \ENSURE $y = x^n$
+% \STATE $y \leftarrow 1$
+% \IF{$n < 0$}
+% \STATE $X \leftarrow 1 / x$
+% \STATE $N \leftarrow -n$
+% \ELSE
+% \STATE $X \leftarrow x$
+% \STATE $N \leftarrow n$
+% \ENDIF
+% \WHILE{$N \neq 0$}
+% \IF{$N$ is even}\label{alg:n-is-even}
+% \STATE $X \leftarrow X \times X$
+% \STATE $N \leftarrow N / 2$
+% \ELSE\label{alg:n-is-odd}
+% \STATE $y \leftarrow y \times X$
+% \STATE $N \leftarrow N - 1$
+% \ENDIF
+% \ENDWHILE
+% \end{algorithmic}
+% \end{algorithm}
+% See that, in line~\ref{alg:n-is-even}, we deal with the case of $N$
+% being even, while, in line~\ref{alg:n-is-odd}, we give treatment to the
+% case of $N$ being odd. The numbers you see on this document were
+% generated automatically from the source document.
+%
+%
+% \section[Known Issues]{Issues Between \texttt{algorithms} and
+% \href{http://www.ctan.org/tex-archive/help/Catalogue/entries/tocbibind.html}{\texttt{tocbibind}}
+% or \href{http://www.ctan.org/tex-archive/help/Catalogue/entries/memoir.html}{\texttt{memoir}}}
+%
+% It
+% \href{http://groups.google.com/group/comp.text.tex/browse_thread/thread/4094e0c4f4fbd83e/a80a3f4666c794f0?fwc=1}{has
+% been discussed} in late 2005 that \texttt{algorithms} may have bad
+% interactions with the
+% \href{http://www.ctan.org/tex-archive/help/Catalogue/entries/tocbibind.html}{\texttt{tocbibind}}
+% or the
+% \href{http://www.ctan.org/tex-archive/help/Catalogue/entries/memoir.html}{\texttt{memoir}}
+% package (which includes \texttt{tocbibind}).
+%
+% A workaround has been suggested for the problem. After including
+% something like
+% \begin{verbatim}
+% \usepackage[nottoc]{tocbibind}
+% \end{verbatim}
+% in the preamble of your document, you can put, after
+% \verb+\begin{document}+, the following snippet of code:
+% \begin{verbatim}
+% \renewcommand{\listofalgorithms}{\begingroup
+% \tocfile{List of Algorithms}{loa}
+% \endgroup}
+%
+% \makeatletter
+% \let\l@algorithm\l@figure
+% \makeatother
+% \end{verbatim}
+% which should make the command \verb+\listofalgorithms+ work as expected.
+%
+% \section[General Hints]{Hints for Typesetting Algorithms}
+%
+% Here are some short hints on typesetting algorithms:
+% \begin{itemize}
+% \item Don't overcomment your pseudo-code. If you feel that you need to
+% comment too much, then you are probably doing something wrong: you should
+% probably detail the inner workings of the algorithm in regular text
+% rather than in the pseudo-code;
+% \item Similarly, don't regard pseudo-code as a low-level programming
+% language: \emph{don't pollute your algorithms} with punctuation marks
+% like semi-colons, which are necessary in C, C++ and Java, but not in
+% pseudo-code. Remember: your readers \emph{are not} compilers;
+% \item Always document what the algorithm receives as an input and what it
+% returns as a solution. Don't care to say in the \verb+\REQUIRE+ or in the
+% \verb+\ENSURE+ commands \emph{how} the algorithm does what it does. Put
+% this in the regular text of your book/paper/lecture notes;
+% \item If you feel that your pseudo-code is getting too big, just break it
+% into sub-algorithms, perhaps abstracting some tasks. Your readers will
+% probably thank you.
+% \end{itemize}
+%
+% Of course, you should follow those hints with common sense. Well, anything
+% should be done with common sense.
+%
+% \addtocontents{toc}{\protect\end{multicols}}
+% \end{document}
+%
+%\StopEventually{}
+%<algorithm>\RequirePackage{float}
+%<algorithm>\RequirePackage{ifthen}
+%<algorithm>\newcommand{\ALG@within}{nothing}
+%<algorithm>\newboolean{ALG@within}
+%<algorithm>\setboolean{ALG@within}{false}
+%<algorithm>\newcommand{\ALG@floatstyle}{ruled}
+%<algorithm>\newcommand{\ALG@name}{Algorithm}
+%<algorithm>\newcommand{\listalgorithmname}{List of \ALG@name s}
+%
+%<algorithm>% Declare Options:
+%<algorithm>% * first: appearance
+%<algorithm>\DeclareOption{plain}{
+%<algorithm> \renewcommand{\ALG@floatstyle}{plain}
+%<algorithm>}
+%<algorithm>\DeclareOption{ruled}{
+%<algorithm> \renewcommand{\ALG@floatstyle}{ruled}
+%<algorithm>}
+%<algorithm>\DeclareOption{boxed}{
+%<algorithm> \renewcommand{\ALG@floatstyle}{boxed}
+%<algorithm>}
+%<algorithm>% * then: numbering convention
+%<algorithm>\DeclareOption{part}{
+%<algorithm> \renewcommand{\ALG@within}{part}
+%<algorithm> \setboolean{ALG@within}{true}
+%<algorithm>}
+%<algorithm>\DeclareOption{chapter}{
+%<algorithm> \renewcommand{\ALG@within}{chapter}
+%<algorithm> \setboolean{ALG@within}{true}
+%<algorithm>}
+%<algorithm>\DeclareOption{section}{
+%<algorithm> \renewcommand{\ALG@within}{section}
+%<algorithm> \setboolean{ALG@within}{true}
+%<algorithm>}
+%<algorithm>\DeclareOption{subsection}{
+%<algorithm> \renewcommand{\ALG@within}{subsection}
+%<algorithm> \setboolean{ALG@within}{true}
+%<algorithm>}
+%<algorithm>\DeclareOption{subsubsection}{
+%<algorithm> \renewcommand{\ALG@within}{subsubsection}
+%<algorithm> \setboolean{ALG@within}{true}
+%<algorithm>}
+%<algorithm>\DeclareOption{nothing}{
+%<algorithm> \renewcommand{\ALG@within}{nothing}
+%<algorithm> \setboolean{ALG@within}{true}
+%<algorithm>}
+%<algorithm>\DeclareOption*{\edef\ALG@name{\CurrentOption}}
+%
+%<algorithm>% ALGORITHM
+%<algorithm>%
+%<algorithm>\ProcessOptions
+%<algorithm>\floatstyle{\ALG@floatstyle}
+%<algorithm>\ifthenelse{\boolean{ALG@within}}{
+%<algorithm> \ifthenelse{\equal{\ALG@within}{part}}
+%<algorithm> {\newfloat{algorithm}{htbp}{loa}[part]}{}
+%<algorithm> \ifthenelse{\equal{\ALG@within}{chapter}}
+%<algorithm> {\newfloat{algorithm}{htbp}{loa}[chapter]}{}
+%<algorithm> \ifthenelse{\equal{\ALG@within}{section}}
+%<algorithm> {\newfloat{algorithm}{htbp}{loa}[section]}{}
+%<algorithm> \ifthenelse{\equal{\ALG@within}{subsection}}
+%<algorithm> {\newfloat{algorithm}{htbp}{loa}[subsection]}{}
+%<algorithm> \ifthenelse{\equal{\ALG@within}{subsubsection}}
+%<algorithm> {\newfloat{algorithm}{htbp}{loa}[subsubsection]}{}
+%<algorithm> \ifthenelse{\equal{\ALG@within}{nothing}}
+%<algorithm> {\newfloat{algorithm}{htbp}{loa}}{}
+%<algorithm>}{
+%<algorithm> \newfloat{algorithm}{htbp}{loa}
+%<algorithm>}
+%<algorithm>\floatname{algorithm}{\ALG@name}
+%
+%<algorithm>\newcommand{\listofalgorithms}{\listof{algorithm}{\listalgorithmname}}
+%
+%
+%<algorithmic>% The algorithmic.sty package:
+%
+%<algorithmic>\RequirePackage{ifthen}
+%<algorithmic>\RequirePackage{keyval}
+%<algorithmic>\newboolean{ALC@noend}
+%<algorithmic>\setboolean{ALC@noend}{false}
+%<algorithmic>\newcounter{ALC@unique} % new counter to make lines numbers be internally
+%<algorithmic>\setcounter{ALC@unique}{0} % different in different algorithms
+%<algorithmic>\newcounter{ALC@line} % counter for current line
+%<algorithmic>\newcounter{ALC@rem} % counter for lines not printed
+%<algorithmic>\newcounter{ALC@depth}
+%<algorithmic>\newlength{\ALC@tlm}
+%<algorithmic>%
+%<algorithmic>\DeclareOption{noend}{\setboolean{ALC@noend}{true}}
+%<algorithmic>%
+%<algorithmic>\ProcessOptions
+%<algorithmic>%
+%<algorithmic>% For keyval-style options
+%<algorithmic>\def\algsetup{\setkeys{ALG}}
+%<algorithmic>%
+%<algorithmic>% For indentation of algorithms
+%<algorithmic>\newlength{\algorithmicindent}
+%<algorithmic>\setlength{\algorithmicindent}{0pt}
+%<algorithmic>\define@key{ALG}{indent}{\setlength{\algorithmicindent}{#1}}
+%<algorithmic>\ifthenelse{\lengthtest{\algorithmicindent=0pt}}%
+%<algorithmic> {\setlength{\algorithmicindent}{1em}}{}
+%<algorithmic>%
+%<algorithmic>% For line numbers' delimiters
+%<algorithmic>\newcommand{\ALC@linenodelimiter}{:}
+%<algorithmic>\define@key{ALG}{linenodelimiter}{\renewcommand{\ALC@linenodelimiter}{#1}}
+%
+%<algorithmic>%
+%<algorithmic>% For line numbers' size
+%<algorithmic>\newcommand{\ALC@linenosize}{\footnotesize}
+%<algorithmic>\define@key{ALG}{linenosize}{\renewcommand{\ALC@linenosize}{#1}}
+%
+%<algorithmic>%
+%<algorithmic>% ALGORITHMIC
+%<algorithmic>\newcommand{\algorithmicrequire}{\textbf{Require:}}
+%<algorithmic>\newcommand{\algorithmicensure}{\textbf{Ensure:}}
+%<algorithmic>\newcommand{\algorithmiccomment}[1]{\{#1\}}
+%<algorithmic>\newcommand{\algorithmicend}{\textbf{end}}
+%<algorithmic>\newcommand{\algorithmicif}{\textbf{if}}
+%<algorithmic>\newcommand{\algorithmicthen}{\textbf{then}}
+%<algorithmic>\newcommand{\algorithmicelse}{\textbf{else}}
+%<algorithmic>\newcommand{\algorithmicelsif}{\algorithmicelse\ \algorithmicif}
+%<algorithmic>\newcommand{\algorithmicendif}{\algorithmicend\ \algorithmicif}
+%<algorithmic>\newcommand{\algorithmicfor}{\textbf{for}}
+%<algorithmic>\newcommand{\algorithmicforall}{\textbf{for all}}
+%<algorithmic>\newcommand{\algorithmicdo}{\textbf{do}}
+%<algorithmic>\newcommand{\algorithmicendfor}{\algorithmicend\ \algorithmicfor}
+%<algorithmic>\newcommand{\algorithmicwhile}{\textbf{while}}
+%<algorithmic>\newcommand{\algorithmicendwhile}{\algorithmicend\ \algorithmicwhile}
+%<algorithmic>\newcommand{\algorithmicloop}{\textbf{loop}}
+%<algorithmic>\newcommand{\algorithmicendloop}{\algorithmicend\ \algorithmicloop}
+%<algorithmic>\newcommand{\algorithmicrepeat}{\textbf{repeat}}
+%<algorithmic>\newcommand{\algorithmicuntil}{\textbf{until}}
+%<algorithmic>\newcommand{\algorithmicprint}{\textbf{print}}
+%<algorithmic>\newcommand{\algorithmicreturn}{\textbf{return}}
+%<algorithmic>\newcommand{\algorithmicand}{\textbf{and}}
+%<algorithmic>\newcommand{\algorithmicor}{\textbf{or}}
+%<algorithmic>\newcommand{\algorithmicxor}{\textbf{xor}}
+%<algorithmic>\newcommand{\algorithmicnot}{\textbf{not}}
+%<algorithmic>\newcommand{\algorithmicto}{\textbf{to}}
+%<algorithmic>\newcommand{\algorithmicinputs}{\textbf{inputs}}
+%<algorithmic>\newcommand{\algorithmicoutputs}{\textbf{outputs}}
+%<algorithmic>\newcommand{\algorithmicglobals}{\textbf{globals}}
+%<algorithmic>\newcommand{\algorithmicbody}{\textbf{do}}
+%<algorithmic>\newcommand{\algorithmictrue}{\textbf{true}}
+%<algorithmic>\newcommand{\algorithmicfalse}{\textbf{false}}
+%<algorithmic>\def\ALC@item[#1]{%
+%<algorithmic>\if@noparitem \@donoparitem
+%<algorithmic> \else \if@inlabel \indent \par \fi
+%<algorithmic> \ifhmode \unskip\unskip \par \fi
+%<algorithmic> \if@newlist \if@nobreak \@nbitem \else
+%<algorithmic> \addpenalty\@beginparpenalty
+%<algorithmic> \addvspace\@topsep \addvspace{-\parskip}\fi
+%<algorithmic> \else \addpenalty\@itempenalty \addvspace\itemsep
+%<algorithmic> \fi
+%<algorithmic> \global\@inlabeltrue
+%<algorithmic>\fi
+%<algorithmic>\everypar{\global\@minipagefalse\global\@newlistfalse
+%<algorithmic> \if@inlabel\global\@inlabelfalse \hskip -\parindent \box\@labels
+%<algorithmic> \penalty\z@ \fi
+%<algorithmic> \everypar{}}\global\@nobreakfalse
+%<algorithmic>\if@noitemarg \@noitemargfalse \if@nmbrlist \refstepcounter{\@listctr}\fi \fi
+%<algorithmic>\sbox\@tempboxa{\makelabel{#1}}%
+%<algorithmic>\global\setbox\@labels
+%<algorithmic> \hbox{\unhbox\@labels \hskip \itemindent
+%<algorithmic> \hskip -\labelwidth \hskip -\ALC@tlm
+%<algorithmic> \ifdim \wd\@tempboxa >\labelwidth
+%<algorithmic> \box\@tempboxa
+%<algorithmic> \else \hbox to\labelwidth {\unhbox\@tempboxa}\fi
+%<algorithmic> \hskip \ALC@tlm}\ignorespaces}
+%<algorithmic>%
+%<algorithmic>\newenvironment{algorithmic}[1][0]{
+%<algorithmic>\setcounter{ALC@depth}{\@listdepth}%
+%<algorithmic>\let\@listdepth\c@ALC@depth%
+%<algorithmic>\let\@item\ALC@item%
+%<algorithmic> \newcommand{\ALC@lno}{%
+%<algorithmic>\ifthenelse{\equal{\arabic{ALC@rem}}{0}}
+%<algorithmic>{{\ALC@linenosize \arabic{ALC@line}\ALC@linenodelimiter}}{}%
+%<algorithmic>}
+%<algorithmic>\let\@listii\@listi
+%<algorithmic>\let\@listiii\@listi
+%<algorithmic>\let\@listiv\@listi
+%<algorithmic>\let\@listv\@listi
+%<algorithmic>\let\@listvi\@listi
+%<algorithmic>\let\@listvii\@listi
+%<algorithmic> \newenvironment{ALC@g}{
+%<algorithmic> \begin{list}{\ALC@lno}{ \itemsep\z@ \itemindent\z@
+%<algorithmic> \listparindent\z@ \rightmargin\z@
+%<algorithmic> \topsep\z@ \partopsep\z@ \parskip\z@\parsep\z@
+%<algorithmic> \leftmargin \algorithmicindent%1em
+%<algorithmic> \addtolength{\ALC@tlm}{\leftmargin}
+%<algorithmic> }
+%<algorithmic> }
+%<algorithmic> {\end{list}}
+%<algorithmic> \newcommand{\ALC@it}{%
+%<algorithmic> \stepcounter{ALC@rem}%
+%<algorithmic> \ifthenelse{\equal{\arabic{ALC@rem}}{#1}}{\setcounter{ALC@rem}{0}}{}%
+%<algorithmic> \stepcounter{ALC@line}%
+%<algorithmic> \refstepcounter{ALC@unique}%
+%<algorithmic> \item\def\@currentlabel{\theALC@line}%
+%<algorithmic> }
+%<algorithmic> \newcommand{\ALC@com}[1]{\ifthenelse{\equal{##1}{default}}%
+%<algorithmic>{}{\ \algorithmiccomment{##1}}}
+%<algorithmic> \newcommand{\REQUIRE}{\item[\algorithmicrequire]}
+%<algorithmic> \newcommand{\ENSURE}{\item[\algorithmicensure]}
+%<algorithmic> \newcommand{\PRINT}{\ALC@it\algorithmicprint{} \ }
+%<algorithmic> \newcommand{\RETURN}{\ALC@it\algorithmicreturn{} \ }
+%<algorithmic> \newcommand{\TRUE}{\algorithmictrue{}}
+%<algorithmic> \newcommand{\FALSE}{\algorithmicfalse{}}
+%<algorithmic> \newcommand{\AND}{\algorithmicand{} }
+%<algorithmic> \newcommand{\OR}{\algorithmicor{} }
+%<algorithmic> \newcommand{\XOR}{\algorithmicxor{} }
+%<algorithmic> \newcommand{\NOT}{\algorithmicnot{} }
+%<algorithmic> \newcommand{\TO}{\algorithmicto{} }
+%<algorithmic> \newcommand{\STATE}{\ALC@it}
+%<algorithmic> \newcommand{\STMT}{\ALC@it}
+%<algorithmic> \newcommand{\COMMENT}[1]{\algorithmiccomment{##1}}
+%<algorithmic> \newenvironment{ALC@inputs}{\begin{ALC@g}}{\end{ALC@g}}
+%<algorithmic> \newenvironment{ALC@outputs}{\begin{ALC@g}}{\end{ALC@g}}
+%<algorithmic> \newenvironment{ALC@globals}{\begin{ALC@g}}{\end{ALC@g}}
+%<algorithmic> \newenvironment{ALC@body}{\begin{ALC@g}}{\end{ALC@g}}
+%<algorithmic> \newenvironment{ALC@if}{\begin{ALC@g}}{\end{ALC@g}}
+%<algorithmic> \newenvironment{ALC@for}{\begin{ALC@g}}{\end{ALC@g}}
+%<algorithmic> \newenvironment{ALC@whl}{\begin{ALC@g}}{\end{ALC@g}}
+%<algorithmic> \newenvironment{ALC@loop}{\begin{ALC@g}}{\end{ALC@g}}
+%<algorithmic> \newenvironment{ALC@rpt}{\begin{ALC@g}}{\end{ALC@g}}
+%<algorithmic> \renewcommand{\\}{\@centercr}
+%<algorithmic> \newcommand{\INPUTS}[1][default]{\ALC@it\algorithmicinputs\ \ALC@com{##1}\begin{ALC@inputs}}
+%<algorithmic> \newcommand{\ENDINPUTS}{\end{ALC@inputs}}
+%<algorithmic> \newcommand{\OUTPUTS}[1][default]{\ALC@it\algorithmicoutputs\ \ALC@com{##1}\begin{ALC@outputs}}
+%<algorithmic> \newcommand{\ENDOUTPUTS}{\end{ALC@outputs}}
+%<algorithmic> \newcommand{\GLOBALS}{\ALC@it\algorithmicglobals\ }
+%<algorithmic> \newcommand{\BODY}[1][default]{\ALC@it\algorithmicbody\ \ALC@com{##1}\begin{ALC@body}}
+%<algorithmic> \newcommand{\ENDBODY}{\end{ALC@body}}
+%<algorithmic> \newcommand{\IF}[2][default]{\ALC@it\algorithmicif\ ##2\ \algorithmicthen%
+%<algorithmic>\ALC@com{##1}\begin{ALC@if}}
+%<algorithmic> \newcommand{\ELSE}[1][default]{\end{ALC@if}\ALC@it\algorithmicelse%
+%<algorithmic>\ALC@com{##1}\begin{ALC@if}}
+%<algorithmic> \newcommand{\ELSIF}[2][default]%
+%<algorithmic>{\end{ALC@if}\ALC@it\algorithmicelsif\ ##2\ \algorithmicthen%
+%<algorithmic>\ALC@com{##1}\begin{ALC@if}}
+%<algorithmic> \newcommand{\FOR}[2][default]{\ALC@it\algorithmicfor\ ##2\ \algorithmicdo%
+%<algorithmic>\ALC@com{##1}\begin{ALC@for}}
+%<algorithmic> \newcommand{\FORALL}[2][default]{\ALC@it\algorithmicforall\ ##2\ %
+%<algorithmic>\algorithmicdo%
+%<algorithmic>\ALC@com{##1}\begin{ALC@for}}
+%<algorithmic> \newcommand{\WHILE}[2][default]{\ALC@it\algorithmicwhile\ ##2\ %
+%<algorithmic>\algorithmicdo%
+%<algorithmic>\ALC@com{##1}\begin{ALC@whl}}
+%<algorithmic> \newcommand{\LOOP}[1][default]{\ALC@it\algorithmicloop%
+%<algorithmic>\ALC@com{##1}\begin{ALC@loop}}
+%<algorithmic> \newcommand{\REPEAT}[1][default]{\ALC@it\algorithmicrepeat%
+%<algorithmic>\ALC@com{##1}\begin{ALC@rpt}}
+%<algorithmic> \newcommand{\UNTIL}[1]{\end{ALC@rpt}\ALC@it\algorithmicuntil\ ##1}
+%<algorithmic> \ifthenelse{\boolean{ALC@noend}}{
+%<algorithmic> \newcommand{\ENDIF}{\end{ALC@if}}
+%<algorithmic> \newcommand{\ENDFOR}{\end{ALC@for}}
+%<algorithmic> \newcommand{\ENDWHILE}{\end{ALC@whl}}
+%<algorithmic> \newcommand{\ENDLOOP}{\end{ALC@loop}}
+%<algorithmic> }{
+%<algorithmic> \newcommand{\ENDIF}{\end{ALC@if}\ALC@it\algorithmicendif}
+%<algorithmic> \newcommand{\ENDFOR}{\end{ALC@for}\ALC@it\algorithmicendfor}
+%<algorithmic> \newcommand{\ENDWHILE}{\end{ALC@whl}\ALC@it\algorithmicendwhile}
+%<algorithmic> \newcommand{\ENDLOOP}{\end{ALC@loop}\ALC@it\algorithmicendloop}
+%<algorithmic> }
+%<algorithmic> \renewcommand{\@toodeep}{}
+%<algorithmic> \begin{list}{\ALC@lno}{\setcounter{ALC@rem}{0}\setcounter{ALC@line}{0}%
+%<algorithmic> \itemsep\z@ \itemindent\z@ \listparindent\z@%
+%<algorithmic> \partopsep\z@ \parskip\z@ \parsep\z@%
+%<algorithmic> \labelsep 0.5em \topsep 0.2em%
+%<algorithmic>\ifthenelse{\equal{#1}{0}}
+%<algorithmic> {\labelwidth 0.5em }
+%<algorithmic> {\labelwidth 1.2em }
+%<algorithmic>\leftmargin\labelwidth \addtolength{\leftmargin}{\labelsep}
+%<algorithmic> \ALC@tlm\labelsep
+%<algorithmic> }
+%<algorithmic>}
+%<algorithmic>{\end{list}}
+%\Finale
+%\PrintChanges
+%\PrintIndex
diff --git a/macros/latex/contrib/algorithms/algorithms.ins b/macros/latex/contrib/algorithms/algorithms.ins
new file mode 100644
index 0000000000..fc915d5b90
--- /dev/null
+++ b/macros/latex/contrib/algorithms/algorithms.ins
@@ -0,0 +1,69 @@
+%%
+%% Copyright (C) 1994-2004 Peter Williams <pwil3058@bigpond.net.au>
+%% Copyright (C) 2005-2009 Rogério Brito <rbrito@ime.usp.br>
+%%
+%% This document file is free software; you can redistribute it and/or
+%% modify it under the terms of the GNU Lesser General Public License as
+%% published by the Free Software Foundation; either version 2 of the
+%% License, or (at your option) any later version.
+%%
+%% This document file 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 Lesser
+%% General Public License for more details.
+%%
+%% You should have received a copy of the GNU Lesser General Public License
+%% along with this document file; if not, write to the Free Software
+%% Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+%% USA.
+%%
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\input docstrip.tex
+
+\keepsilent
+
+\usedir{tex/latex/algorithms}
+
+\preamble
+This is a generated file.
+
+Copyright (C) 1994-2004 Peter Williams <pwil3058@bigpond.net.au>
+Copyright (C) 2005-2009 Rogério Brito <rbrito@ime.usp.br>
+
+This document file is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+This document file 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 Lesser
+General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this document file; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+USA.
+
+\endpreamble
+
+\generate{\file{algorithm.sty}{\from{algorithms.dtx}{algorithm}}}
+\generate{\file{algorithmic.sty}{\from{algorithms.dtx}{algorithmic}}}
+
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following files into a directory searched by LaTeX:}
+\Msg{*}
+\Msg{* \space\space algorithm.sty}
+\Msg{* \space\space algorithmic.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file}
+\Msg{* `algorithms.dtx' through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+
+\endbatchfile
diff --git a/macros/latex/contrib/algorithms/algorithms.pdf b/macros/latex/contrib/algorithms/algorithms.pdf
new file mode 100644
index 0000000000..7169b6c715
--- /dev/null
+++ b/macros/latex/contrib/algorithms/algorithms.pdf
Binary files differ