From 9b9579f2f1c4c73e0a1d5c88a38fa35bbd1586d8 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Wed, 11 Jan 2006 23:51:54 +0000
Subject: trunk/Master/texmf-dist/source/latex/computational-complexity

git-svn-id: svn://tug.org/texlive/trunk@198 c570f23f-e606-0410-a88d-b1316a301751
---
 .../source/latex/computational-complexity/cc.dtx   | 11493 +++++++++++++++++++
 1 file changed, 11493 insertions(+)
 create mode 100644 Master/texmf-dist/source/latex/computational-complexity/cc.dtx

(limited to 'Master/texmf-dist/source/latex/computational-complexity/cc.dtx')

diff --git a/Master/texmf-dist/source/latex/computational-complexity/cc.dtx b/Master/texmf-dist/source/latex/computational-complexity/cc.dtx
new file mode 100644
index 00000000000..5a7fa8ffdf3
--- /dev/null
+++ b/Master/texmf-dist/source/latex/computational-complexity/cc.dtx
@@ -0,0 +1,11493 @@
+% \iffalse meta-comment
+%
+% Copyright 2000, 2003, computational complexity, Michael Nüsken
+% 
+% This file is part of computational complexity macro package.
+%
+% It may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.2
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+%    http://www.latex-project.org/lppl.txt
+% and version 1.2 or later is part of all distributions of LaTeX 
+% version 1999/12/01 or later.
+%
+% -----------------------------------------------------------
+% 
+% Look for %*% in this file, when you try to find \documentclass or
+% changeable options.
+%
+%<*chartab>
+%\fi
+% \CheckSum{6340}
+%% \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         \~}
+% \iffalse meta-comment
+%</chartab>
+% \fi
+% \iffalse meta-comment
+%<*driver>
+\begin{filecontents}{texrefs.bib}
+DANTE Books:
+
+@Book{knu94,
+  author =       {Knuth, Donald E.},
+  title =        {The \TeX{}book},
+  publisher =    {Addison Wesley},
+  year =         1994,
+  pages =        {IX, 483},
+  edition =      {Incorp. the final corr. made in 1994 Reading, Mass.},
+  isbn =         {0-201-13447-0/0-201-13448-9},
+}
+
+@Book{knu84,
+  author =       {Donald Ervin Knuth},
+  title =        {The \TeX{}book},
+  publisher =    {Addison-Wesley},
+  year =         1984,
+  address =      {Reading, Mass.},
+  pages =        {IX, 483},
+  isbn =         {0-201-13448-9},
+  xedition =     {2nd print},
+}
+  annote =       {This is the definitive and complete user manual to
+                 the \TeX{} computerized typesetting system. \TeX{} software
+                 offers both writers and publishers the opportunity to
+                 produce technical text, with the speed and efficiency
+                 of a computer system.},
+
+@Book{det97,
+  author =       {Detig, Christine},
+  title =        {Der \LaTeX{} Wegweiser},
+  publisher =    {MITP-Verlag},
+  year =         1997,
+  pages =        236,
+  isbn =         {3-8266-0256-0},
+}
+  annote =       {29,80 DM
+
+      Eine leichtverst{\"{a}}ndliche, aufgabenorientierte Einf{\"{u}}hrung f{\"{u}}r
+      \LaTeXe{}-Anf{\"{a}}nger, die trotz ihrer K{\"{u}}rze nicht nur die
+      elementaren \LaTeX{}-Befehle, sondern auch die hinter ihnen
+      stehenden Konzepte erl{\"{a}}utert: Wichtige \LaTeX{}-Erweiterungspakete
+      und Hilfswerkzeuge werden mit vielen Beispielen anschaulich
+      erkl{\"{a}}rt. Es fehlen jedoch Hinweise, wie eigene Befehle oder
+      Umgebungen definiert werden. Zum Buch gibt es noch das
+      Wegweiser-Online-Center, in dem Sie weitere Informationen zum
+      Buch abfragen k{\"{o}}nnen. [TK 1/1997]}
+
+@Book{abd95,
+  author =       {Abdelhamid, Rames},
+  title =        {Das Vieweg \LaTeXe{} Buch},
+  publisher =    {Vieweg},
+  address =      {Wiesbaden},
+  year =         1995,
+  isbn =         {3-528-25145-X},
+}
+  annote =       {39,80 DM}
+
+@Book{lam95,
+  author =       {Lamport, Leslie},
+  title =        {Das \LaTeX{}-Handbuch},
+  publisher =    {Addison-Wesley Publ.},
+  year =         1995,
+  edition =      {1st},
+  isbn =         {3-89319-826-1},
+}
+  annote =       {69,90 DM
+
+      Analog zum \TeX{}book das Standardwerk zu \LaTeX{}. Die deutsche
+      Ausgabe wurde sehr gut und verst{\"{a}}ndlich {\"{u}}bersetzt und mit einem
+      Anhang der deutschen Besonderheiten versehen. Die Aufteilung in
+      einzelne Kapitel ist bei Lamport nicht immer sehr gelungen;
+      nahezu alles wird zweimal erkl{\"{a}}rt, einmal ausf{\"{u}}hrlich im
+      Einf{\"{u}}hrungsteil, einmal zusammenfassend im Referenzteil. Man mu{\"{s}}
+      sich die Informationen regelrecht zusammensuchen. Daher ist
+      Abdelhamids Das Vieweg-\LaTeXe{}-Buch vorzuziehen.},
+
+@Book{lam94,
+  author =       {Lamport, Leslie},
+  title =        {\LaTeX{} - A Document Preparation System},
+  publisher =    {Addison-Wesley Publ.},
+  year =         1994,
+  isbn =         {0-201-52983-1},
+  edition =      {2nd},
+}
+  annote =       {74,00 DM
+
+      Die englischsprache Originalausgabe des Buchs von Lamport: Es
+      beschreibt in der 2. Auflage die neue Standard-LaTeX-Version
+      \LaTeXe{}. Da die deutschsprachige Ausgabe sehr gut und
+      verst{\"{a}}ndlich {\"{u}}bersetzt wurde, ist das "Original" nicht mehr so
+      gefragt.}
+
+XBook{lam94,
+  author =       {Leslie Lamport},
+  title =        {\LaTeX{}: A Document Preparation System User's Guide and Reference Manual},
+  publisher =    {Addison Wesley Longman, Inc.},
+  year =         1994,
+  isbn =         {0-201-52983-1},
+  month =        {July},
+}
+  annote =       {This authoritative user's guide and reference manual
+                 for the \LaTeX{} computer typesetting system has been
+                 revised to document features now available in the new
+                 standard software release \LaTeXe{}. Other parts of the
+                 book have been revised, as well, reflecting several
+                 years of user comments and suggestions.}
+
+@Book{kop97a,
+  author =       {Kopka, Helmut},
+  title =        {\LaTeX{} - Band 1: Einf{\"{u}}hrung},
+  publisher =    {Addison Wesley Longmann},
+  year =         1997,
+  isbn =         {3-8273-1025-3},
+  edition =      {2. korr. Nachdruck},
+}
+  annote =       {69,90 DM
+
+      Eine gut verst{\"{a}}ndliche Einf{\"{u}}hrung, die leider mit jeder Auflage
+      immer dicker und nicht unbedingt "geordneter" und "richtiger"
+      wurde. Der Kenner wird sich {\"{u}}ber die wirklich sehr gute
+      Befehls{\"{u}}bersicht freuen. Im deutschsprachigen Raum das
+      Nachschlagewerk {\"{u}}ber \LaTeX{}, das als dreib{\"{a}}ndiges Werk neu
+      aufgelegt wird.}
+
+@Book{kopdal99,
+  author =       {Kopka, Helmut and Daly, Patrick W.},
+  title =        {A Guide to \LaTeX{} - Document Preparation for Beginners and Advanced Users},
+  publisher =    {Addison-Wesley Publ.},
+  year =         1999,
+  isbn =         {0-201-42777-X/0-201-39825-7},
+  pages =        {XV, 600},
+  edition =      {3rd},
+}
+  annote =       {52,00 DM
+
+      Die englische "{\"{U}}bersetzung" von Kopkas "LaTeX - Eine Einf{\"{u}}hrung"
+      ist nicht einfach "nur {\"{u}}bersetzt", sondern wurde auch an den
+      nicht-deutschen Leserkreis angepa{\"{s}}t.}
+
+@Book{kopdal95,
+  author =       {Kopka, Helmut and Daly, Patrick W.},
+  title =        {A Guide to \LaTeX{} - Document Preparation for Beginners and Advanced Users},
+  publisher =    {Addison-Wesley Publ.},
+  year =         1995,
+  isbn =         {0-201-42777-X},
+  edition =      {2nd},
+}
+  annote =       {52,00 DM
+
+      Die englische "{\"{U}}bersetzung" von Kopkas "LaTeX - Eine Einf{\"{u}}hrung"
+      ist nicht einfach "nur {\"{u}}bersetzt", sondern wurde auch an den
+      nicht-deutschen Leserkreis angepa{\"{s}}t.}
+
+@Book{kat97,
+  author =       {Katzenbeisser, Stefan},
+  title =        {Von der Idee zum Dokument, Einf{\"{u}}hrung in \TeX{} und \LaTeX{}},
+  publisher =    {R. Oldenbourg Verlag},
+  address =      {M{\"{u}}nchen},
+  year =         1997,
+  isbn =         {3-486-24182-6},
+  edition =      {2nd},
+}
+  annote =       {69,00 DM [TK 1/1998] }
+
+@Book{lie96,
+  author =       {Liebing, Arnulf},
+  title =        {Erstes Arbeiten mit \TeX{}},
+  publisher =    {Prentice Hall},
+  year =         1996,
+  pages =        192,
+  isbn =         {3-8272-9521-1},
+}
+  annote =       {39,95 DM [TK 4/1997]}
+
+@Book{die94,
+  author =       {Dietsche, Luzia and Lammarsch, Joachim},
+  title =        {\LaTeX{} zum Loslegen - Ein Soforthelfer f{\"{u}}r den Alltag},
+  publisher =    {Springer},
+  year =         1994,
+  isbn =         {3-540-56545-0},
+}
+  annote =       {39,90 DM; nicht mehr lieferbar!
+
+      Aus \LaTeX{}-Kursen an der Universit{\"{a}}t Heidelberg ist dieses
+      kompakte, f{\"{u}}r den Anf{\"{a}}nger und auch den etwas
+      fortgeschritteneren \LaTeX{}-Benutzer gut geeignete B{\"{u}}chlein
+      entstanden. Wie die \LaTeX{}-Kurzbeschreibung von Hubert Partl oder
+      der Kompaktf{\"{u}}hrer \LaTeX{} von Reinhard Wonneberger empfehlenswert
+      f{\"{u}}r alle mit schmalerem Geldbeutel oder Platzmangel im
+      B{\"{u}}cherregal ;-) Leider beschreibt es nur das alte \LaTeX{}
+      2.09. [TK 2/1994]}
+
+@Book{kna97,
+  author =       {Knappen, J{\"{o}}rg},
+  title =        {Schnell ans Ziel mit \LaTeXe{}},
+  publisher =    {R. Oldenbourg Verlag},
+  address =      {M{\"{u}}nchen},
+  year =         1997,
+  isbn =         {3-486-24199-0},
+}
+  annote =       {48,00 DM
+
+      Knappe, aber {\"{u}}bersichtliche Darstellung der wichtigsten
+      \LaTeXe{}-Befehle. F{\"{u}}r \LaTeX{}-Anwender ohne Erfahrung. [TK 4/1997]}
+
+Weiterf{\"{u}}hrende Literatur {\"{u}}ber \LaTeX{}
+
+@Book{goomit96d,
+  author =       {Goossens, Michel and Mittelbach, Frank and Samarin, Alexander},
+  title =        {Der \LaTeX{}-Begleiter},
+  publisher =    {Addison Wesley Longmann},
+  year =         1996,
+  isbn =         {3-89319-646-3},
+  edition =      {2. korr. Nachdruck},
+}
+  annote =       {79,90 DM
+
+      {\"{U}}bersetzung des erfolgreichen englischen Buches }
+
+@Book{goomit95,
+  author =       {Goossens, Michel and Mittelbach, Frank and Samarin, Alexander},
+  title =        {The \LaTeX{} Companion},
+  publisher =    {Addison-Wesley Publ.},
+  year =         1995,
+  isbn =         {0-201-54199-8},
+  edition =      {2nd},
+}
+  annote =       {83,70 DM
+
+      Die langerwartete Erg{\"{a}}nzung zu Lamports "Das \LaTeX{}-Handbuch"
+      (bzw. "LaTeX - A Document Preparation System") beschreibt, wie
+      man \LaTeXe{} (und auch das "alte" \LaTeX{} 2.09) an seine
+      Bed{\"{u}}rfnisse anpassen kann, wie man "Classes" und "Packages"
+      schreibt und vieles mehr. Durch die Beschreibung vieler
+      Programme und Makropakete rund um \LaTeX{} ist es die erste Quelle,
+      wenn Fragen rund um \LaTeX{} auftauchen. [TK 4/1993]}
+
+@Book{kop97b,
+  author =       {Kopka, Helmut},
+  title =        {\LaTeX{} - Band 2: Erg{\"{a}}nzungen - mit einer Einf{\"{u}}hrung in METAFONT},
+  publisher =    {Addison Wesley Longmann},
+  year =         1997,
+  isbn =         {3-8273-1229-9},
+  edition =      {2nd},
+}
+  annote =       {69,90 DM
+
+      In Band 2 wird \LaTeXe{}, die neue offizielle \LaTeX{}-Version,
+      beschrieben (ist in der neuesten Auflage von Band 1
+      enthalten). Au{\"{s}}erdem werden noch Erg{\"{a}}nzungen, wie zus{\"{a}}tzliche
+      Zeichens{\"{a}}tze (AMS-Fonts, Altdeutsch, Runen, Schach, ...),
+      Einbindung von Postscript-Schriften, Musiknotensatz, Grafik,
+      PiCTeX und Metafont vorgestellt.}
+
+@Book{kop97c,
+  author =       {Kopka, Helmut},
+  title =        {\LaTeX{} - Band 3: Erweiterungen},
+  publisher =    {Addison Wesley Longmann},
+  year =         1997,
+  isbn =         {3-89319-666-8},
+  edition =      {1st},
+}
+  annote =       {69,90 DM
+
+      Der letzte Band der Kopkaschen Trilogie, behandelt
+      \LaTeX{}-Interna, beschreibt die Erstellung von \LaTeXe{}-Klassen und
+      -Pakete und stellt die Standard-\LaTeXe{}-Klassen und einige
+      Erg{\"{a}}nzungspakete vor.  Au{\"{s}}erdem enth{\"{a}}lt es eine kurzgefa{\"{s}}te
+      Vorstellung der Programmiersprache \TeX{}, des WEB-Systems und der
+      \TeX{}-/MF-Quellen.}
+
+@Book{gra97,
+  author =       {Gr{\"{a}}tzer, Georg},
+  title =        {Math into \LaTeX{}},
+  publisher =    {Birkh{\"{a}}user},
+  address =      {Boston},
+  year =         1997,
+  isbn =         {0-8176-3805-?},
+  edition =      {2nd},
+}
+  annote =       {58,50 USD
+
+      aktuelle Darstellung des \AMS\LaTeX{}-Pakets [TK 1/1998] }
+
+Kompaktf{\"{u}}hrer/Nachschlagewerke f{\"{u}}r \LaTeX{}
+
+@Book{hei96,
+  author =       {Heilmann, Axel},
+  title =        {\LaTeX{}-Vademecum, Ein Kompaktf{\"{u}}hrer f{\"{u}}r Einsteiger und Fortgeschrittene},
+  publisher =    {Springer},
+  address =      {Berlin, Heidelberg},
+  year =         1996,
+  isbn =         {3-540-60522-3},
+}
+  annote =       {38,00 DM
+
+      Kleines und praktisches Nachschlagewerk, kann und will nicht den
+      \LaTeX{}-Begleiter ersetzen, ist aber eine gute Erg{\"{a}}nzung,
+      eigenwilliges Querformat. Auch wenn dies der Untertitel
+      suggeriert, ist es nicht zum Einstieg f{\"{u}}r Anf{\"{a}}nger geeignet,
+      sondern zum Nachschlagen, nachdem man sich bereits eingearbeitet
+      hat. [TK 1/1996]}
+
+@Book{won93,
+  author =       {Wonneberger, Reinhard},
+  title =        {Kompaktf{\"{u}}hrer \LaTeX{}},
+  publisher =    {Addison-Wesley},
+  year =         1993,
+  isbn =         {3-89319-589-0},
+  edition =      {3rd},
+}
+  annote =       {29,80 DM
+
+      sehr gut geeignet, um einen ersten Eindruck zu bekommen}
+
+@Book{schpot97,
+  author =       {Schwarz, Stefan and Potucek, Rudolf},
+  title =        {Das \TeX{}ikon - Referenzhandbuch f{\"{u}}r \TeX{}, \LaTeX{} und \LaTeXe{}},
+  publisher =    {Addison-Wesley},
+  address =      {Bonn},
+  year =         1997,
+  isbn =         {3-89319-690-0},
+}
+  annote =       {69,90 DM
+
+      alphabetisch sortiertes Lexikon, das alle \TeX{}- und \LaTeX{}-Befehle
+      dokumentiert [TK 1/1997]}
+
+@Preamble{"\providecommand{\AMS}{{{\ensuremath{\mathcal{AMS}}}}}
+  \newcommand{\ams}[1]{\ifx\protect\noexpand\protect\AMS{}\fi}
+  \providecommand{\secondary}[1]{.}"}
+@Manual{ams96,
+  key =          "{\protect\AMS}",
+  title =        {\AMS{}-\LaTeX{} Version 1.2, User's Guide},
+  organization = "{\ams{AMS}}{\relax{}}{\relax{}}American Mathematical Society",
+  year =         1996,
+  note =         {Part of the standard \LaTeXe{} distribution.  
+                  Usually \url{texmf/doc/latex/amslatex/amsldoc.dvi}.
+                  Also available at CTAN:
+                  \url{ftp://ftp.dante.de/tex-archive/macros/latex}\relax
+                  \url{/required/amslatex/math/amsldoc.tex}.},
+  xurl =          {ftp://ftp.dante.de/tex-archive/macros/latex/required/amslatex/math/amsldoc.tex}
+}
+
+@Preamble{"\providecommand{\BibTeX}{\textsc{Bib}\TeX{}}"}
+@Manual{pat88,
+  title =        {\BibTeX{}ing},
+  author =       {Oren Patashnik},
+  year =         1988,
+  note =         {Usually \url{texmf/doc/bibtex/base/btxdoc.dvi}
+                  Also available at CTAN:
+                  \url{ftp://ftp.dante.de/tex-archive/biblio/bibtex}\relax
+                  \url{/distribs/doc/btxdoc.*}.},
+}
+
+@Manual{dal99,
+  title =        {Natural Science Citations and References},
+  author =       {Patrick W. Daly},
+  month =        5,
+  year =         1999,
+  note =         {Version 7.0.
+                  Part of the standard \LaTeXe{} distribution.
+                  Usually \url{texmf/doc/latex/natbib/natbib.dvi}.
+                  Available from CTAN:
+                  \url{ftp://ftp.dante.de/tex-archive/macros/latex}\relax
+                  \url{/contrib/supported/natbib/natbib.*}.},
+  xurl =          {ftp://ftp.dante.de/tex-archive/macros/latex/contrib/supported/natbib/natbib.*}
+}
+
+
+
+
+
+Volume A, The TeXbook (Reading, Massachusetts: Addison-Wesley, 1984), x+483pp.
+ISBN 0-201-13447-0
+Volume B, TeX: The Program (Reading, Massachusetts: Addison-Wesley, 1986), xviii+600pp.
+ISBN 0-201-13437-3
+Volume C, The METAFONTbook (Reading, Massachusetts: Addison-Wesley, 1986), xvi+451pp.
+ISBN 0-201-13445-4
+Volume D, METAFONT: The Program (Reading, Massachusetts: Addison-Wesley, 1986), xviii+566pp.
+ISBN 0-201-13438-1
+Volume E, Computer Modern Typefaces (Reading, Massachusetts: Addison-Wesley, 1986), xvi+588pp.
+ISBN 0-201-13446-2
+
+@preamble{"\providecommand{\metafont}{\textsf{METAFONT}}"}
+
+@Book{knu86a,
+  author =       {Donald Ervin Knuth},
+  title =        {The \TeX{}book},
+  series =       {Computers \& Typesetting},
+  volume =       {A},
+  publisher =    {Addison Wesley Longman, Inc.},
+  year =         1984,
+  pages =        {x+483},
+  isbn =         {0-201-13447-0}
+}
+
+@Book{knu86b,
+  author =       {Donald Ervin Knuth},
+  title =        {\TeX{}: The Program},
+  series =       {Computers \& Typesetting},
+  volume =       {B},
+  publisher =    {Addison Wesley Longman, Inc.},
+  year =         1986,
+  pages =        {xviii+600},
+  isbn =         {0-201-13437-3}
+}
+
+@Book{knu86c,
+  author =       {Donald Ervin Knuth},
+  title =        {The \metafont{}book},
+  series =       {Computers \& Typesetting},
+  volume =       {C},
+  publisher =    {Addison Wesley Longman, Inc.},
+  year =         1986,
+  pages =        {xvi+451},
+  isbn =         {0-201-13445-4}
+}
+
+@Book{knu86d,
+  author =       {Donald Ervin Knuth},
+  title =        {\metafont{}: The Program},
+  series =       {Computers \& Typesetting},
+  volume =       {D},
+  publisher =    {Addison Wesley Longman, Inc.},
+  year =         1986,
+  pages =        {xviii+566},
+  isbn =         {0-201-13438-1}
+}
+
+@Book{knu86e,
+  author =       {Donald Ervin Knuth},
+  title =        {Computer Modern Typefaces},
+  series =       {Computers \& Typesetting},
+  volume =       {E},
+  publisher =    {Addison Wesley Longman, Inc.},
+  year =         1986,
+  pages =        {xvi+588},
+  isbn =         {0-201-13446-2}
+}
+
+From http://members.tripod.com/~upem/texlatex.html
+
+@Book{spi97,
+  author =       {Michael Spivak},
+  title =        {Joy of \TeX{}},
+  publisher =    {American Mathematical Society},
+  year =         1997,
+  isbn =         {0-821-82997-1},
+  month =        {July},
+}
+  annote =       {The Joy of \TeX{}; is the user-friendly guide to
+                 AMSTeX;, a software package based on the computer
+                 typesetting language \TeX{}.  AMSTeX; was designed to
+                 simplify typesetting of mathematical quantities,
+                 equations, and displays, and to format the output
+                 according to any of various preset style
+                 specifications.  This second edition of Joy reflects
+                 the changes introduced on Version 2.0 of the AMSTeX;
+                 macro package. The first two parts of the manual,
+                 'Starters' and 'Main Courses', teach the reader how
+                 to typeset the kind of text and mathematics one
+                 ordinarily encounters. 'Sauces and Pickles', the
+                 third section, treats more exotic problems and
+                 includes a 60-page dictionary of special
+                 \TeX{}niques. The manual also includes descriptions of
+                 conventions of mathematical typography to help the
+                 novice technical typist. Appendices list handy
+                 summaries of frequently used and more esoteric
+                 symbols. This manual is useful for technical typists
+                 as well as scientists who prepare their own
+                 manuscripts. For the novice, exercises sprinkled
+                 generously throughout each chapter encourage the
+                 reader to sit down at a terminal and learn through
+                 experimentation.}
+
+                       
+@Book{sawkra94,
+  author =       {Stanley A. Sawyer and Steven G. Krantz},
+  title =        {Text Primer for Scientists},
+  publisher =    {CRC Press, Inc.},
+  year =         1994,
+  key =          0849371597,
+  month =        {November}
+}
+
+@Book{hoe97,
+  author =       {Alan Hoenig},
+  title =        {\TeX{} Unbound: \LaTeX{} and \TeX{} Strategies for Fonts, Graphics, and More},
+  publisher =    {Oxford University Press, Incorporated},
+  year =         1997,
+  isbn =         {0-195-09686-X},
+  month =        {December},
+}
+  annote =       {LaTeX is the premiere software of choice for writers
+                 who need to prepare technical information in a clear
+                 and elegant manner. This unique book tells how to use
+                 \LaTeX{} or \TeX{} with files prepared with everyday office
+                 software such as Lotus or Wordperfect and how to set
+                 up software links with Acrobat and hyper-text using
+                 \LaTeX{} for Internet communication. Illustrated. 640
+                 pp.}
+
+@Book{sal95,
+  author =       {David Salomon},
+  title =        {The Advanced \TeX{}book},
+  publisher =    {Springer-Verlag New York, Incorporated},
+  year =         1995,
+  isbn =         {0-387-94556-3},
+  month =        {August},
+}
+  annote =       {A complete course in \TeX{} that will be suitable for
+                 users of \TeX{} who want to advance beyond the basics.
+                 The initial chapters introduce the essential workings
+                 of \TeX{} and the later chapters cover a wide range of
+                 advanced topics such as macros, conditionals, tokens,
+                 leaders, file I/O, the line- and page-break
+                 algorithms, and output routines.}
+
+
+@Book{goomit93,
+  author =       {Michel Goossens and Frank Mittelbach and Alexander Samarin},
+  title =        {The \LaTeX{} Companion},
+  publisher =    {Addison Wesley Longman, Inc.},
+  year =         1993,
+  isbn =         {0-201-54199-8},
+}
+  annote =       {A companion to Leslie Lamport's original user's guide to \LaTeX{}. }
+
+
+                          
+@Book{goomit96g,
+  author =       {Michel Goossens and Frank Mittelbach and Sebastian Rahtz},
+  title =        {The \LaTeX{} Graphics Companion},
+  publisher =    {Addison Wesley Longman, Inc.},
+  year =         1996,
+  isbn =         {0-201-85469-4},
+}
+  annote =       {Complementing The \LaTeX{} Companion, this new graphics
+                 companion book addresses one of the most common needs
+                 among users of the \LaTeX{} typesetting system: the
+                 incorporation of graphics into text. In addition to
+                 packages for general drawing, the book also describes
+                 more specific tools for mathematicians, physicists,
+                 chemists, engineers, and people interested in
+                 business graphics, games and music typesetting.}
+
+ISBN:  0-201-43311-7
+                Title:  The \LaTeX{} Web Companion
+                Author:  Michel Goossens,Sebastian Rahtz
+                Publisher:  Addison Wesley Longman, Inc.
+                Date Published:  February 1999
+                URL:  The \LaTeX{} Web Companion 
+                Format:  Trade Paper
+
+
+
+
+                ISBN:  0-201-42777-X
+                Title:  Guide to \LaTeXe{}: Document Preparation for Beginners and Advanced Users
+                Author:  Helmut Kopka, Patrick W. Daly
+                Publisher:  Addison Wesley Longman, Inc.
+                Date Published:  June 1995
+                URL:  Guide to \LaTeXe{}: Document Preparation for Beginners & Advanced Users 
+                Format:  Trade Paper
+
+                 Kopka and Daly provide a highly accessible tutorial
+                 for users new to \LaTeX{}. Fully revised to cover the
+                 latest version of \LaTeX{}, this second edition presents
+                 a thorough explanation of the internals of the
+                 system. \LaTeX{} commands not available within the
+                 earlier version of \LaTeX{} are highlighted, making the
+                 book useful for users still working with the earlier
+                 release.
+
+
+
+
+                ISBN:  0-817-63805-9
+                Title:  Math into \LaTeX{}: An Introduction to \LaTeX{} and \AMS\LaTeX{}
+                Author:  George Gratzer
+                Publisher:  Birkhauser Boston
+                Date Published:  November 1995
+                URL:  Math into \LaTeX{}: An Introduction to \LaTeX{} & \AMS\LaTeX{} 
+                Format:  Trade Paper
+
+
+
+
+                ISBN:  0-131-20973-6
+                Title:  \LaTeX{} Notes; Practical Tips for Preparing Technical Documents
+                Author:  J. Kenneth Shultis,Designed by Kenneth Shultis
+                Publisher:  Prentice Hall
+                Date Published:  February 1994
+                URL:  \LaTeX{} Notes: Practical Tips for Preparing Technical Documents, Version 1.4 
+                Format:  Trade Paper
+
+                 A guide for engineers and scientists who are
+                 currently using \LaTeX{}, this volume provides recipes
+                 and tricks--including shortcuts and extensions not
+                 found elsewhere--for the most useful operation of
+                 \LaTeX{} for preparing technical documents. Covers the
+                 full range of \LaTeX{} topics--fonts, text formatting
+                 and lists, formatting pages, math and equations,
+                 tables, graphics, large documents, useful styles,
+                 macros, and miscellaneous tricks.
+
+
+
+
+                ISBN:  0-136-05908-2
+                Title:  \LaTeX{} for Everyone: A Reference Guide and Tutorial for Typesetting Documents Using a Computer
+                Author:  Jane Hahn
+                Publisher:  Prentice Hall
+                Date Published:  February 1993
+                URL:  \LaTeX{} for Everyone: A Reference Guide & Tutorial for Typesetting Documents Using a Computer 
+                Format:  Trade Paper
+
+                 Full of easy-to-understand examples, this is a
+                 complete reference guide and tutorial for typesetting
+                 documents using \LaTeX{} software. It covers matters of
+                 style; typesetting mathematics; customization;
+                 preparing large documents; and more.
+
+
+
+
+                ISBN:  0-471-93471-2
+                Title:  \LaTeX{} Line by Line; Tips and Techniques for Document Processing
+                Author:  Antoni Diller
+                Publisher:  John Wiley & Sons, Incorporated
+                Date Published:  January 1993
+                URL:  \LaTeX{} Line by Line: Tips & Techniques for Document Processing 
+                Format:  Trade Paper
+
+
+
+                          
+                ISBN:  0-898-71383-8
+                Title:  Learning \LaTeX{}
+                Author:  David F. Griffiths,Desmond J. Higham
+                Publisher:  Soc Indus-
+                Date Published:  December 1996
+                URL:  Learning \LaTeX{} 
+                Format:  Trade Paper
+
+                 A short book that covers the essentials without
+                 getting lost in details.
+
+
+\end{filecontents}
+\begin{filecontents}{texexample.sty}
+%% Environment for LaTeX2e examples
+\usepackage{moreverb}
+\newcounter{texexample}
+\newdimen\texexamplerightwidth
+\newdimen\texexampleleftwidth
+\def\texexamplerightportion{.52}
+\global\leftmargin\z@
+\let\texexamplesize\footnotesize
+\newenvironment{texexample}
+{%
+  \texexamplerightwidth=\texexamplerightportion\hsize
+  \texexampleleftwidth=.96\hsize
+  \advance\texexampleleftwidth-\leftmargin
+  \advance\texexampleleftwidth-\texexamplerightwidth
+  \stepcounter{texexample}\edef\tmpfile{\jobname-tmp\thetexexample.tex}%
+  \bgroup\verbatimwrite{\tmpfile}}
+{\endverbatimwrite\egroup
+  \begin{flushleft}
+    \hrule height0pt
+    \begin{minipage}[t]{\texexampleleftwidth}
+      \vskip\z@\texexamplesize
+      \verbatimtabinput{\tmpfile}%
+    \end{minipage}%
+    \hglue.04\hsize
+    \begin{minipage}[t]{\texexamplerightwidth}
+      \vskip\z@\small\sloppy
+      \hfuzz=2cm%
+      %%\raggedright
+      %%\hrule\vskip2pt
+      \input{\tmpfile}%
+      %%\vskip2pt\hrule
+      \vskip\z@
+    \end{minipage}
+  \end{flushleft}
+  \par\ignorespacesafterend\noindent
+}
+\end{filecontents}
+\begin{filecontents}{tab-struct.tex}
+  \begin{center}
+    \texexamplesize
+    \begin{minipage}[t]{.44\hsize}
+      \obeylines
+      \meta{secondary file contents}
+      |\documentclass{cc}|
+      ~
+      \meta{personal macros and packages}
+      ~
+      |%\ccpublish{}{}{}{}|
+      |\contact{|\meta{contact email address}|}|
+      |\received{|\meta{received date}|}|
+      |\title{|\meta{title}|}|
+      %%|%\titlehead{|\meta{running head title}|}|
+      |\author{|\meta{author list}|}|
+      %%|%\authorhead{|\meta{running head authors}|}|
+      %%|%\authorlist{|\meta{title author list}|}|
+      ~
+      |\begin{abstract}|
+        \quad\meta{abstract}
+        |\end{abstract}|
+      ~
+      |\begin{keywords}|
+        \quad\meta{keywords}
+        |\end{keywords}|
+      ~
+      |\begin{subject}|
+        \quad\meta{subject classification} 
+        |\end{subject}|
+      ~
+      |\begin{document}|
+        ~
+        \meta{article text}
+        ~
+        |\begin{acknowledge}|
+          \quad\meta{acknowledgments}
+          |\end{acknowledge}|
+        ~
+        |\bibliography{|\meta{bibliography files}|}|
+        ~
+        |\end{document}|
+    \end{minipage}\quad\vrule\quad
+    \begin{minipage}[t]{.5\hsize}
+\begin{verbatim}
+\author{
+  First A. Author\\
+  Department of Mathematics\\
+  University of Somewhere\\
+  Somewhere, USA 99999\\
+  \email{faa@ford.somewhere.edu}\\
+  \homepage
+    {http://www.somewhere.edu/~faa/}
+  \currentaddress
+  Somewhere Sunny\\
+  SAMOA\\
+  \email{faa@sunny.samoa.gov}
+  \and
+  Second B. Author\\
+  Faculty of Computer Science\\
+  Anyplace College\\
+  Anyplace, CANADA Z9Z 1X1\\
+  \email{author@pearson.anyplace.edu}
+  \otheraddress
+  Private address of
+    \textsc{Second B. Author}:\\
+  Green Road\\
+  Notown, MOON\\
+  \and
+  Third C. van~Author\\
+  Electrical Engineering Division \\
+  Institute of Nowhere\\
+  Nowhere, ANTARCTICA\\
+  \email{tcauthor@penguin.nowhere.ant}
+  }
+\end{verbatim}
+    \end{minipage}
+  \end{center}
+\end{filecontents}
+\begin{filecontents}{tab-thmenv.tex}
+  \begin{center}
+    \texexamplesize
+    {\catcode`\|=12\gdef\vvv{|}}
+    \begin{tabular}[t]{ll\vvv}
+      environment & title \\\hline
+      %%|open| & Open Question \\
+      |answer| & Answer \\
+      |assumption| & Assumption \\
+      |claim| & Claim \\
+      |conjecture| & Conjecture \\
+      |convention| & Convention \\
+      |corollary| & Corollary \\
+      %%|counterexample| & Counterexample \\
+      |definition| & Definition \\
+      |example| & Example \\
+      |exercise| & Exercise \\
+      |fact| & Fact \\
+      |hypothesis| & Hypothesis \\
+      |lemma| & Lemma \\
+      |notation| & Notation \\
+    \end{tabular}\begin{tabular}[t]{ll} environment & title \\\hline
+      |note| & Note \\
+      |observation| & Observation \\
+      |openquestion| & Open Question \\
+      |problem| & Problem \\
+      |proposition| & Proposition \\
+      |question| & Question \\
+      |remark| & Remark \\
+      |result| & Result \\
+      |theorem| & Theorem \\
+      |thesis| & Thesis \\
+      |warning| & Warning \\*[2mm]
+      |namedtheorem| & \meta{user specified}
+    \end{tabular}
+  \end{center}
+\end{filecontents}
+\begin{filecontents}{tab-algo.tex}
+  \begin{center}
+    \begin{texexample}
+\begin{algorithm}{rs}[Repeated
+  squaring]
+\item An element
+  $x \in \mathbb{Z}_{m}$ and
+  an exponent $e \in \{ 2,
+  \dots, \varphi(m)\}$.
+\item $x^{e} \in \mathbb{Z}_{m}$.
+  \begin{block}
+  \item
+    Compute the binary
+    representation $(e_{n},
+    \dots, e_{0})$ of $e$.
+  \item
+    \algolabel{B}
+    $z \gets x$.
+  \item
+    \algolabel{D}
+    \begin{forblock}
+      {$i = n-1, \dots, 0$} 
+      \algolabel{C}
+    \item $z \gets z^{2}$.
+      \begin{ifblock}
+        {$e_{i}=1$}
+      \item $z \gets z * x$.
+      \end{ifblock}
+    \end{forblock}
+  \item
+    \algolabel{G}
+    \RETURN $z$.
+  \end{block}
+\end{algorithm}
+\hrule\medskip
+B: \stepref{rs}{B}\\
+C: \ref{rs-C}, \whole\ref{rs-C}\\
+D: \short\ref{rs-D},
+   \whole\ref{rs-D}
+\end{texexample}
+  \end{center}
+\end{filecontents}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %*% This is the beginning of the documentation!
+\errorcontextlines9999
+\documentclass[noccpublish%
+,multilingual,english,%
+ %*% Insert options here:
+ %,ccite%
+ %,noams%
+]{cc}
+
+% do not use cccite but get it's file information!
+{\let\ccorgProvidesPackage\ProvidesPackage
+  \def\ProvidesPackage#1[#2]{\ccorgProvidesPackage{#1}[#2]\endinput}%
+  \usepackage{cccite}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Personal definitions and \usepackage commands
+
+\dimen254\marginparwidth
+\let\ccorgmaketitle\maketitle
+\usepackage{doc}
+\normalmarginpar
+\let\maketitle\ccorgmaketitle
+\marginparwidth\dimen254
+\providecommand{\SortIndex}[2]{}
+
+\newcommand{\lclass}[1]{\textsf{#1}}
+\newcommand{\Lclass}[1]{\lclass{#1}%
+  \SortIndex{#1}{\protect\lclass{#1} (class)\encapchar usage}%
+  \index{classes:\levelchar{\protect\ttfamily#1}\encapchar usage}}
+\newcommand{\lpackage}[1]{\textsf{#1}}
+\newcommand{\Lpackage}[1]{\lpackage{#1}%
+  \SortIndex{#1}{\protect\lpackage{#1} (package)\encapchar usage}%
+  \index{packages:\levelchar{\protect\ttfamily#1}\encapchar usage}}
+\newcommand{\lclo}[1]{\textsf{#1}}
+\newcommand{\Lclo}[1]{\lclo{#1}%
+  \SortIndex{#1}{\protect\lclo{#1} (option)\encapchar usage}%
+  \index{options:\levelchar{\protect\ttfamily#1}\encapchar usage}}
+\newcommand{\lenv}[1]{\texttt{#1}}
+\newcommand{\Lenv}[1]{\lenv{#1}%
+  \SortIndex{#1}{\protect\lenv{#1} (environment)\encapchar usage}%
+  \index{environments:\levelchar{\protect\ttfamily#1}\encapchar usage}}
+\newcommand{\lfile}[1]{\texttt{#1}}
+\newcommand{\file}[1]{\lfile{#1}%
+  \SortIndex{#1}{\protect\lfile{#1} (file)\encapchar usage}%
+  \index{files:\levelchar{\protect\ttfamily#1}\encapchar usage}}
+
+\newcommand{\ccLINK}{%
+  \url{http://link.springer.de/link/service/journals/00037/}%
+  \begingroup\urlstyle{tt}\Url}
+\newcommand{\cchomepage}{\url{http://www-math.upb.de/~aggathen/cc/}%
+  \begingroup\urlstyle{tt}\Url}
+\newcommand{\ps}{PostScript\texttrademark}
+\providecommand{\texttrademark}{}
+\newcommand{\AMS}{%
+  \ensuremath{\mathcal{A}}%
+  \kern-.25em
+  \lower.5ex\hbox{\ensuremath{\mathcal{M}}}%
+  \kern-.15em
+  \ensuremath{\mathcal{S}}%
+  }
+
+\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}
+\newcommand{\textcal}[1]{\ensuremath{\mathcal{#1}}\/}
+
+\usepackage{texexample}
+
+\providecommand{\mathbb}[1]{\mathbf{#1}}% should be math blackboard bold ...
+
+\makeatletter
+\let\@listi\@listiv
+\let\@listI\@listi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %*% optional packages
+% \usepackage{multicol}
+% \usepackage{hyperref}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% doc.sty settings
+
+\newcommand{\VRULE}{|}
+\MakeShortVerb{\|}
+
+\settowidth{\MacroIndent}{\rmfamily\scriptsize M000\ }
+\def\MacroFont{\fontencoding\encodingdefault
+                   \fontfamily\ttdefault
+                   \fontseries\mddefault
+                   \fontshape\updefault
+                   \footnotesize}
+\let\AltMacroFont\MacroFont
+\expandafter\newif\csname ifbst\endcsname \bsttrue
+\expandafter\newif\csname ifoldbst\endcsname \oldbsttrue
+
+\makeatletter
+\def\CodelinePrefix#1{%
+  \gdef\fileprefix{#1}%
+  \setcounter{CodelineNo}{0}%
+  \renewcommand{\theCodelineNo}{\rmfamily\scriptsize
+    #1\arabic{CodelineNo}}%
+  \def\special@index##1{\if@filesw
+    \immediate\write\@indexfile
+    {\string\indexentry{##1}%
+      {#1\number\c@CodelineNo}}\fi}%
+  }
+% \let\CodelinePrefix\@gobble
+\makeatother
+
+\DoNotIndex{\',\.,\@M,\@@input,\@Alph,\@alph,\@addtoreset,\@arabic}
+\DoNotIndex{\@badmath,\@centercr,\@cite}
+\DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue}
+\DoNotIndex{\@input,\@ixpt,\@m,\@minus,\@mkboth}
+\DoNotIndex{\@ne,\@nil,\@nomath,\@plus,\roman,\@set@topoint}
+\DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb}
+\DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt}
+\DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt}
+\DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace}
+\DoNotIndex{\advance,\ast,\begin,\begingroup,\bfseries,\bgroup,\box}
+\DoNotIndex{\bullet}
+\DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption}
+\DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass}
+\DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist}
+\DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup}
+\DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter}
+\DoNotIndex{\fbox,\Finale}
+\DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef}
+\DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule}
+\DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\fi,\ifcase,\or,\fi}
+\DoNotIndex{\ifhmode,\fi,\ifvmode,\fi,\ifnum,\fi,\iftrue,\fi,\ifx,\fi}
+\DoNotIndex{\input}
+\DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark}
+\DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright}
+\DoNotIndex{\month,\newcommand,\newcounter,\newenvironment}
+\DoNotIndex{\NeedsTeXFormat,\newdimen}
+\DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number}
+\DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@}
+\DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip}
+\DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions}
+\DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright}
+\DoNotIndex{\refstepcounter,\relax,\renewcommand}
+\DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily}
+\DoNotIndex{\secdef,\selectfont,\setbox,\setcounter,\setlength}
+\DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space}
+\DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase}
+\DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt}
+\DoNotIndex{\viipt,\vipt,\vskip,\vspace}
+\DoNotIndex{\wd,\xiipt,\year,\z@}
+
+\DoNotIndex{\ ,\space}
+\DoNotIndex{\",\$,\&,\,,\/,\[,\],\{,\}}
+\DoNotIndex{\@@eqncr,\@auxout,\@bsphack}
+\DoNotIndex{\@centering,\@clsextension,\@clubpenalty}
+\DoNotIndex{\@currentlabel,\@currenvir,\@currext}
+\DoNotIndex{\@donoparitem}
+\DoNotIndex{\@eqcnt,\@eqncr,\@eqnnum,\@eqnsel,\@eqnswfalse,\@eqnswtrue}
+\DoNotIndex{\@esqhack,\@evenfoot,\@evenhead,\@for}
+\DoNotIndex{\@oddhead,\@oddfoot}
+\DoNotIndex{\@firstoftwo,\@fnsymbol,\@height}
+\DoNotIndex{\@ifempty,\@ifnotempty,\@ifstar,\@ifundefined}
+\DoNotIndex{\@ifclassloaded,\@ifpackageloaded}
+\DoNotIndex{\@inlabelfalse,\@inlabeltrue,\@item,\@itemlabel,\@itempenalty}
+\DoNotIndex{\@labels,\@listctr}
+\DoNotIndex{\@makefnmark,\@makefntext,\@maketitle,\@minipagefalse}
+\DoNotIndex{\@nbitem,\@newlistfalse,\@nobreakfalse,\@nocnterr}
+\DoNotIndex{\@nocounterr,\@noitemargfalse,\@noitemarg}
+\DoNotIndex{\@onlypreamble,\@opargbegintheorem}
+\DoNotIndex{\@openbib@code,\@parboxrestore,\@ptsize,\@roman,\@seccntformat}
+\DoNotIndex{\@secondoftwo,\@sect,\@setfontsize,\@ssect,\@startsection}
+\DoNotIndex{\@tempa,\@tempb,\@tempc}
+\DoNotIndex{\@temptokena,\@textsuperscript,\@thanks,\@thefnmark,\@thm}
+\DoNotIndex{\@topnum,\@topsep,\@totalleftmargin,\@undefined}
+\DoNotIndex{\@width,\@xifempty}
+\DoNotIndex{\and,\addtocounter,\appendix,\arabic,\arraycolsep}
+\DoNotIndex{\AtBeginDocument,\AtEndDocument}
+\DoNotIndex{\baselineskip,\bf,\bfseries,\bibcite,\bibitem,\bigskip,\bigstar}
+\DoNotIndex{\bibliography,\bibliographystyle,\bibname,\bigcirc,\blacksquare}
+\DoNotIndex{\c@enumi,\c@enumii,\c@enumiii,\c@enumiv,\c@equation}
+\DoNotIndex{\c@footnote,\c@namedth@@r@m,\c@page,\c@section}
+\DoNotIndex{\centering,\chapter,\CheckCommand,\circ}
+\DoNotIndex{\ClassError,\ClassWarning,\ClassWarningNoLine}
+\DoNotIndex{\clearpage,\clubpenalty,\copyright,\count,\count@,\csname}
+\DoNotIndex{\CurrentOption}
+\DoNotIndex{\DeclareTextFontCommand,\dimen@}
+\DoNotIndex{\displaystyle,\displaywidth,\displaywidowpenalty}
+\DoNotIndex{\do,\documentclass}
+\DoNotIndex{\edef,\endcsname,\endminipage,\endsplit}
+\DoNotIndex{\endnamedth@@r@m,\endnamedtheorem,\endpr@@f,\endproof}
+\DoNotIndex{\enskip,\eqno,\eqnarray,\errhelp,\errmessage}
+\DoNotIndex{\etalchar,\evensidemargin}
+\DoNotIndex{\fboxsep,\finalhyphendemerits}
+\DoNotIndex{\footnote,\footnoterule,\footnotesize}
+\DoNotIndex{\gobble@nil}
+\DoNotIndex{\hb@xt@,\headheight,\ht}
+\DoNotIndex{\if,\fi,\if@eqnsw,\fi,\if@filesw,\fi,\if@inlabel,\fi}
+\DoNotIndex{\if@newlist,\fi,\if@nmbrlist,\fi,\if@nobreak,\fi}
+\DoNotIndex{\if@noitemarg,\fi,\if@noparitem,\fi}
+\DoNotIndex{\iffalse,\fi,\ifinner,\fi,\ifmmode,\fi}
+\DoNotIndex{\csname iftagsleft@\endcsname}
+\DoNotIndex{\ifodd,\fi,\ifvoid,\fi}
+\DoNotIndex{\ignorespaces,\ignorespacesafterend,\immediate,\include}
+\DoNotIndex{\indent,\inputlineno,\item,\itemsep,\itemindent,\itshape}
+\DoNotIndex{\label,\labelenumi,\labelenumii,\labelenumiii,\labelenumiv}
+\DoNotIndex{\labelitemi,\labelsep,\labelwidth,\Large,\large,\lastbox,\lastskip}
+\DoNotIndex{\leftmargin,\linewidth,\LoadClass,\lozenge}
+\DoNotIndex{\makelabel,\MakeUppercase,\marginparsep,\marginparwidth,\mbox}
+\DoNotIndex{\medskip,\medskipamount,\message,\MessageBreak,\minipage}
+\DoNotIndex{\newblock,\newbox,\newcount,\newif,\newskip}
+\DoNotIndex{\newtheorem,\newtoks,\next}
+\DoNotIndex{\noalign,\nocite,\noexpand,\nointerlineskip,\nonumber}
+\DoNotIndex{\normalfont,\normalsize}
+\DoNotIndex{\oddsidemargin,\offinterlineskip}
+\DoNotIndex{\p@enumiv,\PackageError,\PackageWarning,\PackageWarningNoLine}
+\DoNotIndex{\pagebreak,\pageref,\paperwidth,\paperheight,\paragraph}
+\DoNotIndex{\parindent,\parsep,\parshape,\parskip,\partopsep}
+\DoNotIndex{\PassOptionsToClass,\PassOptionsToPackage}
+\DoNotIndex{\prevdepth,\ProvidesPackage,\protected@edef,\qquad}
+\DoNotIndex{\ref,\refname,\removelastskip,\renewenvironment}
+\DoNotIndex{\RequirePackage,\reset@font,\rule}
+\DoNotIndex{\sbox,\sc,\scriptsize,\scshape,\section}
+\DoNotIndex{\show,\showbox,\showoutput}
+\DoNotIndex{\skip@,\sl,\small,\smallskip,\square}
+\DoNotIndex{\stepcounter,\string,\strut}
+\DoNotIndex{\subparagraph,\subsection,\subsubsection}
+\DoNotIndex{\tabskip,\tag,\text,\textbf,\textheight}
+\DoNotIndex{\textit,\textsc,\textsf,\textwidth}
+\DoNotIndex{\thanks,\theenumi,\theenumii,\theenumiii,\theenumiv,\theequation}
+\DoNotIndex{\thefootnote,\thenamedth@@r@m}
+\DoNotIndex{\theorembodyfont,\theorem@bodyfont,\theorem@headerfont}
+\DoNotIndex{\theoremstyle,\theorem@style}
+\DoNotIndex{\thepage,\thispagestyle,\today,\toks@}
+\DoNotIndex{\topmargin,\topsep,\topskip}
+\DoNotIndex{\unhbox,\unpenalty,\unskip,\upshape}
+\DoNotIndex{\Url,\urlstyle,\value,\vbox,\vphantom,\vss}
+\DoNotIndex{\widowpenalty,\write,\xdef,\xpt}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\errorcontextlines999
+ %*% To include the detailed explanation of the coding, comment out
+ %*%   the next line
+\OnlyDescription
+ %*% If you also want the bibliography style file cc2.bst in the
+ %*% documentation, comment out the next line
+\bstfalse
+ %*% If you also want the old bibliography style file cc.bst in the
+ %*% documentation, comment out the next line
+\oldbstfalse
+
+ %*% To produce a command index: add the following line for one run,
+ %*%   then run  makeindex -s gind.ist cc
+ %*%   and reprocess, with or without this line (much faster without)
+\EnableCrossrefs
+\CodelineIndex %Must stay if not \OnlyDescription
+
+
+ %*% If not \OnlyDescription:
+ %*% To produce a change history:  add the following line for one run,
+ %*%   then run  makeindex -s gglo.ist -o cc.gls cc.glo
+ %*%   and reprocess, with or without this line (faster without)
+\RecordChanges 
+
+\DisableCrossrefs %May stay; zapped by \EnableCrossrefs
+\CodelineNumbered %May stay
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% We are going to suppress some warnings:
+\newcommand{\suppressnextwarning}{%
+  \global\let\ccorgClassWarning\ClassWarning
+  \gdef\ClassWarning##1##2{\global\let\ClassWarning\ccorgClassWarning}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% paper data ...
+
+% \received{29 September 1999\\
+%   Revised 16 February 2000.\\
+%   Revised \today}
+
+\date{6 March 2000/29 August 2005/\today}
+\contact{nuesken@bit.uni-bonn.de}% or cc@upb.de
+
+\title{Preparing articles for\\\cc{}}%% ??? final versions ???
+\subtitle{User's manual}
+
+\author{%
+  Michael N{\"{u}}sken\\
+  b-it (Bonn-Aachen International Center for Information Technology)\\
+  Görresstr. 13\\
+  53113 Bonn,
+  Germany\\
+  \email{nuesken@bit.uni-bonn.de}\\
+  \homepage{http://www.math.upb.de/~nuesken/}
+  }
+
+\begin{abstract}
+  This text describes the \LaTeXe{} document class \Lclass{cc}, which
+  is recommended for typesetting articles accepted for \cc{}.
+\end{abstract}
+\begin{keywords}
+  \LaTeXe{} document class, computational complexity.
+\end{keywords}
+\suppressnextwarning\nosubject
+
+%%% end of paper data.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\let\ccorgbibpunct\bibpunct% allow usage of \bibpunct everywhere
+\suppressnextwarning
+\begin{document}
+\let\bibpunct\ccorgbibpunct% allow usage of \bibpunct everywhere
+
+\let\ccorgPrintDescribeMacro\PrintDescribeMacro
+\let\ccorgPrintDescribeEnv\PrintDescribeEnv
+\renewcommand{\PrintDescribeMacro}[1]{}
+\renewcommand{\PrintDescribeEnv}[1]{}
+
+
+\long\def\zzz#1{#1\endinput}\ifx\StopEventually\zzz\relax%
+\csname @ifundefined\endcsname{multicols}
+{{\scriptsize\tableofcontents}}
+{\begin{multicols}{2}
+    \scriptsize
+    \tableofcontents
+  \end{multicols}
+  \global\let\tableofcontents\relax
+}
+\else%
+\footnotetext[0]{This version includes the source code. The table of
+  contents is on the last page.}
+\fi%
+
+
+\section{Submission}
+\label{sec:submission}
+
+
+Submission of a manuscript implies 
+\begin{itemize}
+\item that the work described has not been published before except
+  possibly in conference proceedings; if the latter is the case, it
+  must be clearly acknowledged in the submission and a clearly marked
+  copy of the proceedings version should be sent as well (possibly by
+  separate mail);
+\item that it is not under consideration for publication elsewhere;
+\item that its eventual publication has been approved by all
+  coauthors;
+\item that, if and when the manuscript is accepted for publication,
+  the authors agree to automatically transfer the copyright to the
+  publisher; and
+\item that the manuscript will not be published elsewhere in any
+  language without the consent of the copyright holder.
+\end{itemize}
+Manuscripts must be in English.  
+%%
+Authors should send a \ps{} file plus a short cover email, giving the
+contact author's name and address, either to the Editor-in-Chief or to
+one of the Editors.  Submissions can also be sent by ordinary mail to
+the Editor-in-Chief.
+\begin{quotation}\obeylines%
+  Joachim von zur Gathen
+  b-it
+  Görresstr. 13
+  D-53113 Bonn
+  \textsc{Germany}
+  Email: \email{gathen@bit.uni-bonn.de}
+\end{quotation}
+Information about \cc{} can be found at the journal's homepage
+\cchomepage{}. There you also find a pointer to the publisher's page
+for \cc{}: \ccLINK{}, which contains the current editorial board,
+information about subscription and prices, and more.
+
+The following instructions only apply to final versions of
+\emph{accepted} manu\-scripts for \cc{}.  For a submission, you may
+follow these instructions or use your own setup and submit your
+article as a \ps{} file or a typeset manuscript.
+
+\cc{} expects authors of articles accepted for publication to submit
+camera-ready copy as a \LaTeXe{} source file. If that cannot be
+provided, \cc{} will typeset the article.  The editorial decision to
+accept or reject a manuscript is independent of the technology
+(computer or typewriter) used to prepare it.
+
+
+
+
+\section{Submission of the final version}
+\label{sec:camera}
+
+Camera-ready copy can be produced with \LaTeXe{} using the document
+class \Lclass{cc} which is described below.  All necessary files can
+be obtained in the WWW, see \cchomepage{} for the necessary files and
+installation instructions.  The older \LaTeX{} style file
+\file{cc.sty} should not be used anymore.  There is no corresponding
+plain\TeX{} style file.
+
+\subsection{Combining several files into one}
+
+When your article is typed, it might be distributed over several
+files.  But the \LaTeXe{} source file that you submit must consist of
+exactly \emph{one} file.  You may, however, use the \LaTeXe{}
+environments \SpecialEnvIndex{filecontents}\Lenv{filecontents} and
+\SpecialEnvIndex{filecontents*}\Lenv{filecontents*} to incorporate the
+contents of other \LaTeX{} or ASCII(!) files, respectively, into the
+main \LaTeXe{} source file.  These two environments can only be used
+\emph{before} the |\documentclass| command.  For example, \ps{} files
+can be handled this way.  (Note: it seems to be a feature that there
+must be a line break just after the environment's argument, in
+particular, a comment can only start on the following line.)
+
+\begin{texexamplesize}
+\begin{verbatim}
+\begin{filecontents}{section1.tex}
+  \section{First section}
+  ... \cite{Eucleides} wrote ...
+\end{filecontents}
+\begin{filecontents*}{picture.ps}
+%!PS-Adobe-2.0 EPSF-2.0
+...
+\end{filecontents*}
+\begin{filecontents*}{myrefs.bib}
+@book{Eucleides,
+author = {Eucleides},
+title = {Elements},
+year = {about 300 BC},
+}
+\end{filecontents*}
+\begin{filecontents}{main.bbl}
+\begin{thebibliography}{1}
+
+\bibitem[{Eucleides(about 300 BC)}]{Eucleides}
+\textsc{Eucleides} (about 300 BC).
+\newblock \emph{Elements}.
+
+\end{thebibliography}
+\end{filecontents}
+
+\documentclass{cc}
+\usepackage{graphics}
+% ...
+\begin{document}
+\includegraphics{picture.ps}
+\input{section1}
+\bibliography{journals,myrefs}
+\end{document}
+\end{verbatim}
+\end{texexamplesize}
+
+
+\subsection{Testing your final file}
+
+Once your source file is prepared like this, send it via email to
+\email{cctest@upb.de}.  It will then automatically be processed in a
+defined setup: |latex|, |bibtex|, |latex|, |latex|, |dvips| are
+executed unless an error occurs.  (Of course, |latex| calls
+\LaTeXe{}.)  The log files and the resulting \ps{} file will be sent
+back to you.  (This usually takes only a couple of minutes.)  Verify
+whether everything is ok.  If so, submit your \LaTeX{} file as the
+final version to \email{cc@upb.de}.  Mail sent to
+\email{cctest@upb.de} is not read by anyone; only the software
+described above is automatically executed.
+
+
+
+\section{Using the document class \Lclass{cc}}
+\label{sec:usage}
+
+The freeware document class \Lclass{cc} is intended for writing
+articles for \cc{}.  But you may, of course, also use this class for
+your other work.  For this purpose, several features of this class can
+be turned on or off.  (Using \Lclo{noccpublish} turns off the special
+requirements for \cc.  Furthermore, this document class can also be
+used as a package if desired.  Try |\usepackage{cc-cls}|.  Thus you
+can, for example, combine it with the \LaTeXe{} document class
+\Lclass{book}.)
+
+Before giving any description we would like to stress a major
+difference from standard \LaTeXe{}: References and citations are, by
+default, more informative.  We recommend this style.  See below for
+details.  (The new features can be turned off by options to
+|\documentclass|, see p.~\pageref{macro:documentclass}:
+\Lclo{noprefixes}, and \Lclo{cccite} or \Lclo{nonatbib},
+respectively.)
+
+After the optional \meta{secondary file contents}, the standard
+structure of a \cc{} article starts with
+\SpecialUsageIndex{\documentclass}|\documentclass{cc}| and continues
+with optional personal declarations, information concerning author,
+title and content, and finally the article text including
+acknowledgments and references.  The overall structure of a typical
+\LaTeXe{} file is shown in \ref{tab:structure}.  On \cc{}'s homepage
+you can also find a template file \file{cctemplate.tex} reflecting
+this.
+\begin{table}[tb!]
+  \input{tab-struct.tex}
+  \caption{Typical structure of the \LaTeXe{} source and an example of
+    an \texttt{\string\author} declaration}
+  \label{tab:structure}
+\end{table}
+
+Most \meta{personal macros and packages} can be freely used.  If your
+file is processed successfully when sent to \email{cctest@upb.de},
+then your macros and the packages you used should be ok.
+
+\SpecialUsageIndex{\contact}The \meta{contact email address} is the
+email address of the contact author.  It is required for \cc{} to
+facilitate communication between the publisher and the authors.
+\SpecialUsageIndex{\received}The author received a message
+acknowledging receipt of the manuscript, with the \meta{received
+  date}.  \SpecialUsageIndex{\title}The \meta{title} should be broken
+into balanced lines by |\\| if necessary.
+\SpecialUsageIndex{\author}The \meta{author list} contains the names
+and addresses of the authors separated by
+\SpecialUsageIndex{\and}|\and|, each address consisting of a line with
+full author name and some address lines separated by |\\|.  There
+should be no font or size changing commands.  If an address line is
+very long and not nicely broken, |\newline| forces a break.  Note the
+use of the tilde (|~|) in the name of the last author.  It guarantees
+that |van~Author| is considered as her last name.  Email and home page
+can be given as last line(s) of an address using the commands
+\SpecialUsageIndex{\email}|\email{|\meta{email-address}|}| and
+\SpecialUsageIndex{\homepage}|\homepage{|\meta{www-address}|}|.  To
+give a different current address, use
+\SpecialUsageIndex{\currentaddress}|\currentaddress| to separate the
+lines of the latter from the standard address.  It produces a new
+address block en\-titled
+|Current address of \textsc{|\meta{present author name}|}:\\| . %
+The command \SpecialUsageIndex{\otheraddress}|\otheraddress| can be
+used to specify another address block for the present author without
+such a heading.  An \meta{abstract}, \meta{keywords} and a
+\meta{subject classification} are required for articles in \cc{}.  The
+\SpecialEnvIndex{abstract}\meta{abstract} should summarize, in less
+than 150 words, the context, content and conclusions of the paper. It
+should not contain any references or citations.  (If you insist on
+them, you must use |\Abstract{|\meta{abstract}|}| instead of the
+\Lenv{abstract} environment.)  List four to six
+\SpecialEnvIndex{keywords}\meta{keywords} characterizing the article.
+A \SpecialEnvIndex{subject}\meta{subject classification} should be
+given according to the Mathematical Subject Classification 2000
+(MSC~2000), which can be found in the Internet, see \cc{}'s homepage
+\cchomepage{}.
+
+
+The \meta{article text} can be structured by |\section|,
+|\subsection|, and |\subsubsection|.  Use |\\| to split long headings.
+A table of contents should normally \emph{not} be used.  You can use
+diverse theorem and proof environments described below.  Finally your
+text might end with \meta{acknowledgments} including funding
+information, references to previous versions, and thanks for help.
+
+
+
+\subsection{Theorems and proofs}
+\label{sec:thm+proof}
+
+\SpecialEnvIndex{assumption} \SpecialEnvIndex{claim}
+\SpecialEnvIndex{conjecture} \SpecialEnvIndex{corollary}
+\SpecialEnvIndex{definition} \SpecialEnvIndex{example}
+\SpecialEnvIndex{exercise} \SpecialEnvIndex{fact}
+\SpecialEnvIndex{lemma} \SpecialEnvIndex{notation}
+\SpecialEnvIndex{note} \SpecialEnvIndex{observation}
+\SpecialEnvIndex{openquestion} \SpecialEnvIndex{problem}
+\SpecialEnvIndex{proposition} \SpecialEnvIndex{remark}
+\SpecialEnvIndex{result} \SpecialEnvIndex{theorem}
+\SpecialEnvIndex{namedtheorem} \SpecialEnvIndex{assumption*}
+\SpecialEnvIndex{answer} \SpecialEnvIndex{convention}
+\SpecialEnvIndex{question}
+\SpecialEnvIndex{thesis} \SpecialEnvIndex{warning}
+\SpecialEnvIndex{claim*} \SpecialEnvIndex{conjecture*}
+\SpecialEnvIndex{corollary*} \SpecialEnvIndex{definition*}
+\SpecialEnvIndex{example*} \SpecialEnvIndex{exercise*}
+\SpecialEnvIndex{fact*} \SpecialEnvIndex{lemma*}
+\SpecialEnvIndex{notation*} \SpecialEnvIndex{note*}
+\SpecialEnvIndex{observation*} \SpecialEnvIndex{openquestion*}
+\SpecialEnvIndex{problem*} \SpecialEnvIndex{proposition*}
+\SpecialEnvIndex{remark*} \SpecialEnvIndex{result*}
+\SpecialEnvIndex{theorem*} \SpecialEnvIndex{namedtheorem*}
+\SpecialEnvIndex{answer*} \SpecialEnvIndex{convention*}
+\SpecialEnvIndex{question*}
+\SpecialEnvIndex{thesis*} \SpecialEnvIndex{warning*}
+%%
+Typing theorems is much easier than finding or proving them.  We give
+some examples.
+\begin{texexample}
+\begin{theorem}\label{thm1}
+  This is a very simple theorem.
+\end{theorem}
+\end{texexample}
+This environment supports an optional argument.  Often it is used to
+supply source information:
+\begin{texexample}
+\begin{theorem}[\cite{knu84}]
+  \label{thm2}
+  This is a theorem
+  by somebody else.
+\end{theorem}
+\end{texexample}
+In rare occasions, you might prefer an unnumbered theorem:
+\begin{texexample}
+\begin{theorem*}
+  This theorem is so important
+  that it has no number.
+\end{theorem*}
+\end{texexample}
+Of course, we are not restricted to theorems:
+\begin{texexample}
+\begin{lemma}
+  \label{lemma}
+  We can also have lemmas.
+  \begin{enumerate}
+  \item\label{lemma:1}
+    It has two claims.
+  \item\label{lemma:2}
+    And it shows how lists
+    are used, formatted
+    and referenced.
+  \end{enumerate}
+\end{lemma}
+\end{texexample}
+You can replace |theorem| by |lemma| to obtain lemmas instead of
+theorems in the above examples.  Further, you can use the theorem-like
+environments listed in \ref{tab:thmenv}.
+\begin{table}[htb!]
+  \input{tab-thmenv.tex}
+  \caption{Defined theorem-like environments}
+  \label{tab:thmenv}
+\end{table}
+%%
+Each of these environments has a starred form which produces no
+number.  Moreover, you can give examples, and continue them.
+\begin{texexample}
+\begin{example}
+  \label{myfirst}
+  Or you give an example.
+\end{example}
+\begin{contexample}{myfirst}
+  Sometimes it is nice
+  to continue an example.
+\end{contexample}
+\end{texexample}
+Note \pagebreak[3] that an example is always terminated by a lozenge
+($\eoesymbol$).  You can redefine
+\SpecialUsageIndex{\eoesymbol}|\eoesymbol| if you prefer another (or
+no) symbol.  The other theorem-like environments can be continued in
+this way:\nobreak
+\begin{texexample}
+\begin{continued}{lemma}
+  This continues the lemma.
+\end{continued}
+\end{texexample}
+All this is not enough? Ok, we also support a theorem-like environment
+with a name that you can choose yourself.
+\begin{texexample}
+\begin{namedtheorem}{Fundamental
+    theorem}
+  \label{FunThm}
+  This is a simple named
+  theorem with a number.\qed
+\end{namedtheorem}
+\begin{namedtheorem*}{Fundamental
+    lemma}
+  \label{FunLemma}
+  This is a simple named
+  theorem without number.
+\end{namedtheorem*}
+\end{texexample}
+Note that the references to the labels are ``\ref{FunThm}'' and
+``\ref{FunLemma}'', respectively.
+
+
+Typing proofs is even easier:
+\begin{texexample}
+\begin{proof}
+  This is a very simple proof.
+\end{proof}
+\end{texexample}
+The \pagebreak[3] default qed symbol is an open square ($\qedsymbol$).
+Sometimes, not a proof but only an outline of a proof or a sketch is
+given.  This can be done as follows:\nobreak
+\begin{texexample}
+\begin{namedproof}
+  {Outline of proof}
+  [following \textsc{Third}]
+  This is a named proof.
+  Its title claims that this
+  is only an outline.
+\end{namedproof}
+\end{texexample}
+Typesetting of proofs should only be done with these proof
+environments.  There is one further problem.  Sometimes a proof (or an
+example) terminates with a list, an equation, or some other similar
+environment.  Then the end of proof mark often seems to be placed
+incorrectly.  If so, place \SpecialUsageIndex{\qed}|\qed| at the end
+of this environment.  Usually this fixes this problem.  (If not, maybe
+you can spend a few extra words at the end of your proof?)
+
+Typing equations can be done as usual.  But note that
+\Lpackage{amsmath} provides a lot of additional equation-like
+environments, see \cite{ams96} or Chapter~8 in \cite{goomit95}.
+
+
+
+\subsection{Labels and references}
+\label{sec:label+ref}
+
+Labels and references, as we use them, have been known since the time
+\LaTeX{} was born.  But note that references using the document class
+\Lclass{cc} are more informative than usual.  For example,
+\SpecialUsageIndex{\ref}|\ref{myfirst}| now produces: \ref{myfirst}.
+In the standard setup, you would have obtained: \bare\ref{myfirst}.
+If you use the document class option \Lclo{noprefixes}, |\ref| behaves
+as usual.  We recommend to adopt the new style.  You can access the
+bare (unprefixed) form with
+\SpecialUsageIndex{\bare\string\ref}|\bare\ref{myfirst}| unless you
+issue the document class option \Lclo{nobare}.  (The latter might be
+necessary to save space.)
+\begin{texexample}
+We have seen two theorems:\\
+\ref{thm1} and \bare\ref{thm2}.
+\end{texexample}
+%%
+Further, list items in theorem-like environments produce either only
+the item number or the theorem reference plus the item number,
+depending on whether the reference occurs near the theorem or not.
+(Near means, after this theorem (or lemma, \dots) and before the next
+theorem or equation.)  For example, |\ref{lemma:1}| here produces
+\ref{lemma:1}.  You can force the short form:
+\SpecialUsageIndex{\short\string\ref}|\short\ref{lemma:1}| yields
+\short\ref{lemma:1}, or the whole form:
+\SpecialUsageIndex{\whole\string\ref}|\whole\ref{lemma:1}| yields
+\whole\ref{lemma:1}.  If you issue the document class option
+\Lclo{notheoremitemprefixes}, subitems are referenced as in standard
+\LaTeXe{}: you always obtain the short form.
+
+
+
+\subsection{Bibliography and citations}
+\label{sec:bib+cite}
+
+The most comfortable citation scheme comes with the \Lpackage{natbib}
+package.  By default this is loaded.  Let's begin with an example:
+\begin{texexample}
+Don \citeauthor{knu84}'s design
+of \TeX{}, as described in The
+\TeX{}book \citep{knu84},
+enabled the typesetting of texts
+containing complicated formulas.
+In \citet{knu86b,knu86c,%
+knu86d,knu86e} the
+underlying programs and fonts
+are collected.  On this basis,
+\LaTeX{} and \LaTeXe{} were
+developed, see \citet{goomit95,%
+lam94,kopdal99}.
+(Graphics can be included in many
+ways, see \citealp*{goomit96g}.)
+\end{texexample}
+The command |\citet| (equivalent to |\cite|) is used for textual
+citations and the command |\citep| for parenthetical citations.
+Multiple citations are simply listed in one command.  The alternative
+commands |\citealt| and |\citealp| produce the same output but without
+parentheses.  This avoids nested parentheses in text which is already
+inside parentheses.  Note that the years are in parentheses in the
+running text, but without parentheses if the reference itself is in
+parentheses.  Several papers in the same year are distinguished as
+``\cite{knu86b}, \cite{knu86c}''.  Further examples:
+\begin{center}
+  \texexamplesize
+  \begin{tabular}{l@{$\;\Rightarrow\;$}l}
+    |\citet{knu84}| & \citet{knu84} \\
+    \multicolumn2{l}{\texttt{\string\citet
+        \string{knu84,knu86b,knu86c,knu86d,knu86e\string}}}\\
+    & \citet{knu84,knu86b,knu86c,knu86d,knu86e} \\
+    |\citep{knu84}| & \citep{knu84} \\
+    |\citealt{knu84}| & \citealt{knu84} \\
+    |\citealp{knu84}| & \citealp{knu84} \\
+    |\citeauthor{knu84}| & \citeauthor{knu84} \\
+    |\citeyear{knu84}| & \citeyear{knu84} \\
+    |\citet{goomit95}| & \citet{goomit95} \\
+    |\citet*{goomit95}| & \citet*{goomit95} \\
+    |\citeauthor*{goomit95}| & \citeauthor*{goomit95} \\
+  \end{tabular}
+\end{center}
+If the first author's name contains a \textsl{von} part, such as
+``della Robbia'', then |\citet{dRob98}| produces ``della Robbia
+(1998)'', even at the beginning of a sentence. One can force the first
+letter to be in upper case with the command |\Citet| instead. Other
+upper case commands also exist.  More features are documented with the
+\Lpackage{natbib} package, see \cite{dal99}.
+
+Bibliography is best produced using \BibTeX{}.  See \cite{kopdal99},
+\cite{lam94}, \cite{goomit95} or \cite{pat88} for information about
+using \BibTeX{}.  Then
+\SpecialUsageIndex{\bibliography}|\bibliography{|\meta{bibliography
+    files}|}| produces the bibliography.  (The
+\SpecialUsageIndex{\bibliographystyle}|\bibliographystyle| is
+automatically issued by the class, so you need not do this.)  In this
+case, the \BibTeX{} file(s) and the \texttt{.bbl} file should be
+embedded in the \LaTeXe{} source file using the \Lenv{filecontents}
+environment (see above).
+
+The \BibTeX{} file \file{journals.bib}, available on \cc{}'s homepage
+\cchomepage{}, contains macros for a number of journals and conference
+proceedings.  If in your document you have
+|\bibliography{journals,myrefs}|, then an entry |journal = FOCS99,| in
+your file \texttt{myrefs.bib} will produce: `Proceedings of the 40th
+Annual IEEE Symposium on Foundations of Computer Science, {\rm New
+  York City~NY}' when \BibTeX{} is run.  (Note that \texttt{journals}
+must precede your own bibliography file!)  Since this will be updated
+only sporadically, the latest conference proceedings may be missing
+here.
+
+\subsubsection{\dots{} without \Lpackage{natbib}}
+
+If the package \Lpackage{natbib} is not installed on your system for
+some obscure reason, you can issue the option \Lclo{cccite} to switch
+to the old \cc{} style of referring to the bibliography.  This still
+works but is not recommended any more.
+{\let\parencite\citep\let\citemul\citet\let\shortcite\citep
+\begin{texexample}
+Don \citeauthor{knu84}'s design
+of \TeX{}, as described in The
+\TeX{}book \parencite{knu84},
+enabled the typesetting of texts
+containing complicated formulas.
+In \citemul{knu86b,knu86c,%
+knu86d,knu86e} the
+underlying programs and fonts
+are collected.  On this basis,
+\LaTeX{} and \LaTeXe{} were
+developed, see \cite{goomit95},
+\cite{lam94}, \cite{kopdal99}.
+(Graphics can be included in many
+ways, see \shortcite{goomit96g}.)
+\end{texexample}
+}%
+Using numbered references are used if the references give no
+additional information.  (As most hand-made references do.)  This is
+not recommended:
+{%
+  \makeatletter
+  \aftergroup\bibstyle@egs%\bibpunct[, ]{(}{)}{;}{a}{,}{,}
+  \@fileswfalse% Do not write these citations
+  \bibstyle@plain
+  \NAT@set@cites
+  %\def\NAT@sort{1}%
+  \makeatother
+\begin{texexample}
+Don Knuth's design
+of \TeX{}, as described in The
+\TeX{}book \cite{knu84},
+enabled the typesetting of texts
+containing complicated formulas.
+In \cite{knu86b,knu86c,%
+knu86d,knu86e} the
+underlying programs and fonts
+are collected.  On this basis,
+\LaTeX{} and \LaTeXe{} were
+developed, see \cite{goomit95,%
+lam94,kopdal99}.
+(Graphics can be included in many
+ways, see \cite{goomit96g}.)
+\end{texexample}
+}%
+Note that only |\cite| makes sense here!  Although this is acceptable,
+the first style is preferred since it is more informative.
+
+
+
+
+
+\subsection{Mathematical typesetting {\`{a}} la \Lpackage{amsmath}}
+\label{sec:alaAMS}
+
+We recommend to use the features provided by \Lpackage{amsmath},
+\Lpackage{amsfonts}, and \Lpackage{amssymb}.  By default the class
+already loads these packages.  For example, the \Lenv{gather}
+environment allows you to combine several equations into one,
+\Lenv{gather*} produces no numbers.  The \Lenv{align} or \Lenv{align*}
+environments are similar to \Lenv{eqnarray} but you only need one
+ampersand |&|.  Other than \Lenv{eqnarray}, \Lenv{align} and all other
+\Lpackage{amsmath} environments take care of the position of the
+number: there will be no overlap between number and formula!  The
+\Lenv{multline} or \Lenv{multline*} environment allows you to type
+very long equations, the first line is flushed left, the last line is
+flushed right and all others are centered.  The \Lenv{alignat} or
+\Lenv{alignat*} environment allows you to put two or more equations on
+a line, aligned with those on the other lines.
+
+See \cite{ams96} or Chapter 8 in the \LaTeX{} companion
+\citep{goomit95} for a complete description.  But note that
+\Lpackage{amsthm} is not compatible with the \Lclass{cc} class and
+must not be used.  (The same holds for its derivative
+\Lpackage{apthm}.)
+
+
+
+\subsection{Reminders}
+\label{sec:reminders}
+
+\begin{itemize}
+  %\let\emph\textbf
+\item The following items tend to be overlooked:
+  \begin{itemize}
+  \item email address of contact author,
+  \item key words,
+  \item subject classification,
+  \item received date.
+  \end{itemize}
+  Please make sure you have filled them appropriately.
+\item Manuscripts are in \emph{(American) English}.  Authors are
+  encouraged to have their contribution checked for \emph{grammar},
+  and to use a spelling checker.  We emphasize that \emph{American
+    spelling} should be used.
+\item Use |\hyphenation{|\meta{hyphenation exceptions}|}| or |\-| if
+  words are not correctly hyphenated.
+\item \emph{Abbreviations} should be spelled out in full when first
+  used.  (With \LaTeX{}, try the package \Lpackage{acronym}.)
+\item Non-negative \emph{integers} up to twelve should
+  usually be spelled out.
+\item \emph{Funding information} and help from friends and referees go
+  into the acknowledgments section.
+\item \emph{Appendices} should not be used.
+  %%
+\item Read your |.log| file carefully.  There should be no
+  |Overfull \hbox|%
+  , and certainly no visible one (more than |1pt|).  If necessary,
+  reword the text.  (Sometimes |\begin{sloppypar}| \dots{}
+    |\end{sloppypar}| or local use of |\sloppy|,
+  |\tolerance=|\meta{number}, |\emergencystretch=|\meta{dimension}
+  help, see \cite{goomit95}.)
+\item \emph{Blank (redundant) spaces} should be minimized by careful
+  arrangement of tables and figures. 
+\item \emph{Avoid starting} a sentence with a symbol.
+\item It is best to \emph{avoid footnotes}.
+\item \emph{Figures and tables} are to be inserted in the text nearest
+  their first reference.  They should be arranged so as not to cause
+  an excessive amount of blank space on the remainder of the page.
+\item \cite{goomit96g} describe various ways to include
+  \emph{pictures} in \LaTeXe{}.  They also mention how to scale
+  pictures up or down, which can be used for fine tuning and to avoid
+  redundant white space.  (Try to stick to
+  |\includegraphics{|\meta{PostScript file}|}| and
+  |\input{|\meta{gnuplot \LaTeX{} file}|}|.)
+  
+  Alternatively, original India ink drawings are possible.  Please
+  send one set of originals which must be clear and clean.  Ensure
+  that the figures (including letterings and numbers) are large enough
+  to be clearly seen after reduction to 86\%.
+\item Recall that \LaTeX{} has tools to build \emph{lists}, the
+  environments \Lenv{itemize} and \Lenv{enumerate} are the most
+  frequent.  Please, use them!
+
+  Note that a list in a theorem is numbered differently than outside.
+\item \emph{Font selection} in \LaTeXe{}'s new font selection scheme
+  (nfss) should be done using the commands
+  \begin{center}
+    |\emph{...}|, |\texttt{...}|, |\textbf{...}|,
+    \\
+    |\textsf{...}|, |\textsc{...}|, |\textrm{...}|,
+  \end{center}
+  and so on.  Usually, you should only use the first one.  In any
+  case, try to use them as rarely as possible!  In math mode there are
+  similar commands.  Note that |\mathbb{|\meta{letter(s)}|}| produces
+  blackboard bold letters and |\mathcal{|\meta{letter(s)}|}| produces
+  calligraphic letters.  For mathematical operators you should not use
+  font selection but |\operatorname{|\text{name}|}|.
+\item Normally, you should not at all be concerned about \emph{line or
+    page breaks}.  Also, \emph{vertical space} should be correctly
+  adjusted by the document class.  Use the corresponding commands only
+  if no other solution is possible.  If you need to use |\\| in plain
+  text, you probably did something wrong.
+\end{itemize}
+
+
+
+\subsection{Commands for the journal editor and publishers}
+\label{sec:editor}
+
+The journal editor and publishers will insert the publishing data.
+The declaration
+\begin{center}
+  \SpecialUsageIndex{\ccpublish}%
+  |\ccpublish{|\meta{year}|}{|\meta{volume}|}|%^^A
+  |{|\meta{number}|}{|\meta{first page}|}|
+\end{center}
+will be inserted next to author and title information.  Further, the
+commands \SpecialUsageIndex{\electronic}|\electronic| and
+\SpecialUsageIndex{\printed}|\printed| switches the ISSN to the
+electronic or printed version, respectively.
+
+
+
+\subsection{Disclaimer}
+\label{sec:disclaimer}
+
+The macros are not guaranteed to be free of errors, and any bugs,
+inconsistencies, and suggestions for further improvement or other
+comments should be reported to \email{cc@upb.de}.
+
+
+\condbreak{1cm}
+
+\section{Quick upgrade: from bare \LaTeX{} to \Lclass{cc}}
+
+%  \changes{v2.03}{2003/05/26}{Added section on quickly upgrading to
+%    cc \dots}
+Replace your |\documentclass{...}| command with the line
+\begin{verbatim}
+\documentclass[nonatbib,noprefixes]{cc}
+\end{verbatim}
+\noindent
+and adjust author, title, keywords and subject classification
+according to \ref{tab:structure} (page \pageref{tab:structure}).  (In
+particular, all this information must appear before the
+|\begin{document}|.)
+%\end{document}
+The title may be too long for the running head.  You need
+to supply |\titlehead{|\meta{short title}|}| then.
+
+If there are any |\newtheorem| commands then turn them off and use the
+\Lclass{cc} theorem environments described in \ref{sec:thm+proof}.
+(Note that there is an environment \Lenv{namedtheorem} for
+theorem-like environments with unforeseen names.  You can also use
+this in a |\newenvironment| definition if necessary.)  If there are
+definitions for proofs or qed signs then turn them off, too; the
+\Lclass{cc} class provides these things.
+
+Optional: For better readability you are asked to switch to the new
+citation scheme.  To do so: add your |.bib|-file, throw away your
+handwritten environment \Lenv{thebibliography} and the command
+|\bibliographystyle| if present, and replace it with
+|\bibliography{|\meta{name of your |.bib|-file}|}|.  Then run |latex|
+twice and adjust the text at the citation points.
+
+\section{Make your document portable}
+
+%  \changes{v2.03}{2003/05/26}{Added section on making things portable
+%     \dots}
+In order to make your \Lclass{cc} source file portable to persons who
+did not yet install the \Lclass{cc} class, include the file
+|cc-cls-inline.tex|.  This file can be found on the journal's homepage
+\url{http://www-math.upb.de/~aggathen/cc/}.  Please do not forget to
+remove the following changes prior to sending your file to \cc{}, it
+will have no effect there.  You have two options:
+\begin{enumerate}
+\item Simply include the entire file |cc-cls-inline.tex| in your file
+  just before the |\documentclass| command.  This has the drawback
+  that your personal texts starts only after many lines irrelevant to
+  you.
+\item Insert your file in the following framework:
+  \verbatiminput{cc-portability-frame.tex}
+  This has the advantage that the \Lclass{cc} stuff is at the end.  The
+  drawback is that you need to call \LaTeX{} once more.
+\end{enumerate}
+
+\condbreak{1cm}
+
+\section{Commands}
+\label{sec:commands}
+
+\begin{description}
+\item
+  \label{macro:documentclass}
+  \DescribeMacro{\documentclass}|\documentclass[|\meta{options}|]{cc}|
+
+Possible \meta{options} are:
+\begin{itemize}
+\item any option from the \Lclass{article} document class.
+  (\Lclo{a4paper}, \Lclo{a4paper}, \Lclo{b5paper}, \Lclo{letterpaper},
+  \Lclo{legalpaper}, \Lclo{executivepaper}, \Lclo{landscape},
+  \Lclo{10pt}, \Lclo{11pt}, \Lclo{12pt}, \Lclo{oneside},
+  \Lclo{twoside}, \Lclo{draft}, \Lclo{final}, \Lclo{titlepage},
+  \Lclo{notitlepage}, \Lclo{onecolumn}, \Lclo{twocolumn},
+  \Lclo{leqno}, \Lclo{fleqn}, \Lclo{openbib}, though not all of them
+  might produce nice results.)  Note that all the \Lclo{*paper}
+  options invoke the option \Lclo{nocctextarea}, you need to add
+  \Lclo{cctextarea} after the \Lclo{*paper} option to get the same
+  text area as in \cc{} then.
+\item any option from the \AMS{} packages (if they are not disabled by
+  \Lclo{noams}).  (\Lclo{intlimits}, \Lclo{nointlimits},
+  \Lclo{sumlimits}, \Lclo{nosumlimits}, \Lclo{namelimits},
+  \Lclo{nonamelimits}, \Lclo{leqno}, \Lclo{reqno}, \Lclo{centertags},
+  \Lclo{tbtags}, \Lclo{cmex10}, \Lclo{fleqn}.)
+% \item \Lclo{final} (default): `This is a final version.'
+% \item \Lclo{draft}: `This a draft.'
+\item \Lclo{localnumbering}, \Lclo{longarticle} (default): theorem and
+  equation numbering is local to each section, e.g.\ Theorem~3.4.
+\item \Lclo{globalnumbering}, \Lclo{shortarticle}: theorem and equation
+  numbering is global, e.g.\ Theorem~17.
+\item \Lclo{ccpublish} (default): requirements as for publication in
+  \cc{}.
+\item \Lclo{noccpublish}: |\contact|, \Lenv{abstract}, \Lenv{keywords}
+  and \Lenv{subject} are optional now.
+\end{itemize}
+Further, the following \meta{options} are available.  They are mainly
+intended to deactivate certain standard features of the class, in
+cases where these cause trouble.
+\begin{itemize}
+\item \Lclo{ams} (default): use the \AMS{} packages
+  \Lpackage{amsmath}, \Lpackage{amsfonts}, \Lpackage{amssymb}.
+\item \Lclo{noams}: do not use the \AMS{} packages.
+\item \Lclo{cclayout}, \Lclo{nocclayout} turn the \cc{} layout on or
+  off.
+\item \Lclo{cctextarea}, \Lclo{nocctextarea} turn the \cc{} text area
+  on or off.  They are only effective with \Lclo{cclayout}.
+\item \Lclo{noothermargins}, \Lclo{classicalmargins},
+  \Lclo{printmargins}, \Lclo{balancedmargins}: Choose margin mode.
+  \Lclo{noothermargins} leaves the margins alone,
+  \Lclo{classicalmargins} leaves the outer margin but fits the inner
+  one to paper and text widths, \Lclo{printmargins} puts 5mm to the
+  outer edge, \Lclo{balancedmargins} makes both margins equal.
+\item \Lclo{autotitle} (default): at |\begin{document}| the title is
+    generated, and at |\end{document}| the receipt information and
+  affiliations are generated.
+\item \Lclo{noautotitle}: \SpecialUsageIndex{\maketitle}|\maketitle| and
+  \SpecialUsageIndex{\makeendtitle}|\makeendtitle| must be explicitly
+  written.
+\item \Lclo{ccsectioning} (default): use centered section headings and
+  in-line subsection and subsubsection headings.
+\item \Lclo{noccsectioning}: use section, subsection, subsubsection,
+  paragraph, subparagraph headings as with the \Lclass{article}
+  document class.
+\item \Lclo{natbib} (default): use the citation scheme provided by the
+  \Lpackage{natbib} package by Patrick W. Daly, the options
+  \Lclo{sort\&compress} (default), \Lclo{sort} and \Lclo{nosort}
+  decide whether multiple citations are sorted or not (compression
+  only affects numerical citations).
+\item \Lclo{cccite}: use the (old) author-year citation scheme of \cc.
+\item \Lclo{nocccite}, \Lclo{nonatbib}: do neither use the
+  \Lpackage{natbib} nor the \cc{} citation scheme.
+\item \Lclo{onecolumnbibliography} (default),
+  \Lclo{twocolumnbibliography}: With these options you can choose one
+  or two columns for the bibliography.
+\item \Lclo{cctheorems} (default): theorem like environments are
+  defined as described.
+\item \Lclo{nocctheorems}: theorem like environments are \emph{not}
+  defined at all.
+\item \Lclo{prefixes} (default): references to theorems, equations,
+  and so on, come with prefixes, e.g.\ 
+  \SpecialUsageIndex{\ref}|\ref{lemma}| produces `\ref{lemma}' rather
+  than only `\bare\ref{lemma}',
+\item \Lclo{noprefixes}: references behave as in standard \LaTeXe{},
+\item \Lclo{bare} (default): \SpecialUsageIndex{\label}|\label| produces two
+  labels instead of one, a long form for
+  \SpecialUsageIndex{\ref}|\ref| and a short form for
+  \SpecialUsageIndex{\bare\string\ref}|\bare\ref|,
+\item \Lclo{nobare}: \SpecialUsageIndex{\label}|\label|
+  works as usual, \SpecialUsageIndex{\bare\string\ref}|\bare\ref| is
+  equivalent to \SpecialUsageIndex{\ref}|\ref| (but gives a warning),
+\item \Lclo{theoremitemprefixes} (default): references to subtopics of
+  a theorem (or lemma ...) consist of the theorem reference and the
+  item reference, for example, |\ref{lemma:2}| produces
+  `\ref{lemma:2}'.  In fact, between \ref{lemma} and the following
+  theorem or equation (\ref{myfirst} in our case) you would have
+  obtained `\short\ref{lemma:2}'.  This short form can be forced by
+  \SpecialUsageIndex{\short\string\ref}|\short\ref{lemma:2}|.  You can
+  also force the whole form by
+  \SpecialUsageIndex{\whole\string\ref}|\whole\ref{lemma:2}|.
+\item \Lclo{notheoremitemprefixes}: with this option you always get
+  the short form.
+\item \Lclo{separateequationcounting}: Do not count equations together
+  with theorems, lemmas, \dots
+\item \Lclo{noseparateequationcounting} (default): Count equations
+  together with theorems, lemmas, \dots
+\item \Lclo{ccalgorithms} (default): Load the algorithms stuff.
+\item \Lclo{noccalgorithms}: Do not load the algorithms stuff.
+\end{itemize}
+And finally there are some options for font, input and multilingual
+support.
+\begin{itemize}
+\item \Lclo{OT1} (default): use the font encoding scheme OT1 (this is
+  standard with \LaTeX).
+\item \Lclo{T1}: use the new font encoding scheme T1 (256 characters
+  per font instead of 128).
+\item \Lclo{nolatin1} (default): do not use the input encoding scheme
+  latin1 (this is standard with \LaTeX).
+\item \Lclo{latin1}: use the input encoding scheme latin1 (so Umlaute,
+  {\"{a}}{\"{o}}{\"{u}}, and so on can be typed in literally).
+\item \Lclo{nobabel} (default): do not use \Lpackage{babel} for
+  multilingual support.
+\item \Lclo{babel} (default): load \Lpackage{babel} for multilingual
+  support (at an appropriate place, i.e.{} before \Lpackage{inputenc}),
+  required languages must be included as options to the
+  |\documentclass|.
+\item \Lclo{multilingual}: this is an abbreviation for \Lclo{T1},
+  \Lclo{latin1} and \Lclo{babel}.
+\item \Lclo{nomultilingual}: this is an abbreviation for \Lclo{OT1},
+  \Lclo{nolatin1} and \Lclo{nobabel}.
+\end{itemize}
+
+\item \DescribeMacro{\contact}|\contact{|\meta{contact email
+      address}|}|
+  
+  Preamble command to specify the email address of the contact author.
+  This is required for publications in \cc{}.
+
+\item \DescribeMacro{\received}|\received{|\meta{received date}|}|
+  
+  Preamble command to declare the received date of the manuscript.
+
+\item \DescribeMacro{\author}|\author{|\meta{author list}|}|
+  
+  Preamble command to specify the authors and their addresses.
+  Different authors are separated by \SpecialUsageIndex{\and}|\and|.
+  If you are not writing for \cc{} footnotes can be produced by
+  \SpecialUsageIndex{\thanks}|\thanks{|\meta{text}|}|.  If an author
+  has a different current address, use
+  \SpecialUsageIndex{\currentaddress}|\currentaddress|.  For an other
+  type of other address, use
+  \SpecialUsageIndex{\otheraddress}|\otheraddress| followed by a line
+  like
+  |Guest address of \textsc{|\meta{author name}|}|. %
+  Use the macros
+  \SpecialUsageIndex{\email}|\email{|\meta{email-address}|}| and
+  \SpecialUsageIndex{\homepage}|\homepage{|\meta{www-address}|}| to
+  specify the email address and home page, respectively.  The
+  combination of these things can be seen best in the example in
+  \ref{tab:structure}.
+  
+  Note that from this declaration also the list of authors in the
+  title and the short list of authors for the running head is derived.
+  Usually, the automatism should work well.  If not (maybe the
+  authors' names are very long), you can use
+  \SpecialUsageIndex{\authorhead}|\authorhead{|\meta{last name list}|}| %
+  to specify the author list for the running head.  Similarly, you can
+  use
+  \SpecialUsageIndex{\authorlist}|\authorlist{|\meta{name list}|}| %
+  if the the automatic extraction of the author names for the title
+  does not work as expected.
+
+\item \DescribeMacro{\title}|\title{|\meta{title}|}|
+  
+  Preamble command to specify the title.  If the title is not broken
+  nicely, you can use |\\| to improve line breaking.  Long titles do
+  not fit into the running head.  In this case please specify a
+  shorter version using
+  \SpecialUsageIndex{\titlehead}|\titlehead{|\meta{short title}|}|.
+
+\item \DescribeMacro{\subtitle}|\subtitle{|\meta{subtitle}|}|
+\item \DescribeMacro{\version}|\version{|\meta{version}|}|
+  
+  These preamble command allows to insert, e.g., `Preliminary version'
+  under the title.
+
+\item \DescribeMacro{\date}|\date{|\meta{date}|}|
+  
+  Preamble command, default is |\today|.  This date is \emph{not} used
+  when the article is published in \cc{}.
+  
+\item \DescribeEnv{abstract}|\begin{abstract}| \meta{text}
+    |\end{abstract}|
+  
+  Preamble environment to specify the abstract.  If the abstract
+  contains any |\ref| or |\cite| this does not work.  Try to avoid it.
+  If you cannot avoid it use |\Abstract{|\meta{text}|}|.
+  
+\item \DescribeEnv{keywords}|\begin{keywords}| \meta{list of keywords}
+    |\end{keywords}|
+  
+  Preamble environment to specify keywords.
+  
+\item \DescribeEnv{subject}|\begin{subject}| \meta{subject
+      classification} |\end{subject}|
+
+  Preamble environment to specify the subject classification.
+  
+\item \DescribeEnv{acknowledge}|\begin{acknowledge}|
+    \meta{acknowledgments} |\end{acknowledge}|
+  
+  Environment for acknowledgments.  Funding information can also be
+  included here.
+  
+\item \DescribeMacro{\bibliography}|\bibliography{|\meta{list of
+      bibliography files}|}|
+  
+  Command to produce the bibliography from the \meta{list of
+    bibliography files} using \BibTeX{}.
+  
+\item \DescribeEnv{theorem}|\begin{theorem}[|\meta{citation}|]|
+    \meta{theorem text} |\end{theorem}|
+\item \DescribeEnv{theorem*}|\begin{theorem*}[|\meta{citation}|]|
+    \meta{theorem text} |\end{theorem*}|
+  
+  Environment for theorems.  There are similar environments, for
+  example, \Lenv{lemma}, \Lenv{definition}, \Lenv{example}.  Compare
+  \ref{tab:thmenv} for a complete list.  Each of them has a starred
+  version that is not numbered.
+  
+\item \DescribeEnv{continued}|\begin{continued}{|\meta{label-key}|}|
+    \meta{theorem text} |\end{continued}|
+\item
+  \DescribeEnv{contexample}|\begin{contexample}{|\meta{label-key}|}|
+    \meta{example text} |\end{contexample}|
+  
+  Environment to continue theorems-like environments.  Note that
+  examples need a different environment since they use an end of
+  example mark.
+  
+\item
+  \DescribeEnv{namedtheorem}|\begin{namedtheorem}{|\meta{heading}|}[|\meta{citation}|]|
+    \\\meta{theorem text}
+    \\\null\hskip-\leftmargin\hskip\labelsep%
+    |\end{namedtheorem}|
+\item
+  \DescribeEnv{namedtheorem*}|\begin{namedtheorem*}{|\meta{heading}|}[|\meta{citation}|]|
+    \\\meta{theorem text}
+    \\\null\hskip-\leftmargin\hskip\labelsep%
+    |\end{namedtheorem*}|
+  
+  This also is an environment for theorems.  Other than
+  \Lpackage{theorem}, the \meta{heading}, e.g.\ `Theorem', is
+  specified explicitly.  Thus a `Fundamental Theorem' can be easily
+  typed.
+  
+\item \DescribeEnv{proof}|\begin{proof}[|\meta{citation}|]|
+    \meta{proof text} |\end{proof}|
+  
+  This is the standard environment to type proofs.  The default qed
+  symbol is an open square ($\qedsymbol$), but you can redefine
+  \SpecialUsageIndex{\qedsymbol}|\qedsymbol|.  You can use
+  \SpecialUsageIndex{\qed}|\qed| to force the qed symbol at an earlier
+  place.  This is usually necessary whenever a proof terminates with a
+  math environment or a list.
+  
+\item \DescribeEnv{namedproof}|\begin{namedproof}[|\meta{end of proof
+      mark}|]{|\meta{heading}|}[|\meta{citation}|]|
+    \\\meta{proof text}
+    \\\null\hskip-\leftmargin\hskip\labelsep%
+    |\end{namedproof}|
+
+  Environment to type proof-like things which differ in \meta{heading}
+  and optionally also in the \meta{end of proof mark}.  Note that the
+  latter is typeset in math mode.
+
+\item \DescribeEnv{enumerate}|\begin{enumerate}*| \meta{items}
+    |\end{enumerate}| 
+
+  This is simply a variant of the traditional \Lenv{enumerate}
+  environment, it continues a previously terminated list.  This allows
+  you to make intermediate remarks and then continue your numbered
+  list.
+  
+\item \DescribeMacro{\label}|\label{|\meta{key}|}|,
+  \DescribeMacro{\ref}|\ref{|\meta{key}|}|,
+  \DescribeMacro{\bare\string\ref}|\bare\ref{|\meta{key}|}|,
+  \DescribeMacro{\short\string\ref}|\short\ref{|\meta{key}|}|, \newline
+  \DescribeMacro{\whole\string\ref}|\whole\ref{|\meta{key}|}|
+  
+  These macros are used for referencing.  |\label| defines a label,
+  |\ref| produces a reference to the label with the corresponding
+  \meta{key}.  In the standard setup, a theorem will be referenced as
+  `Theorem 3.4' or the like.  Unless the document class option
+  \Lclo{nobare} was given, |\bare\ref| produces a short label, e.g.
+  `3.4'.
+  
+  The other two modifications are important for references to list
+  items in theorem-like environments.  Usually, the reference would be
+  the whole reference which is forced by |\whole\ref|, for example,
+  |\whole\ref{lemma:1}| is \whole\ref{lemma:1}.  But near the theorem,
+  that is until the next theorem or equation, a shortened form is used
+  which is forced by |\short\ref|, for example, |\short\ref{lemma:1}|
+  is \short\ref{lemma:1}.  This feature can be turned off by the
+  document class option \Lclo{notheoremitemprefixes}.
+  
+\item \DescribeEnv{thebibliography}|\begin{thebibliography}{}|
+    \\\DescribeMacro{\bibitem}|\bibitem[|\meta{label}|]{|\meta{key}|}|
+    \meta{bibliographic information}
+    \\\null\hskip-\leftmargin\hskip\labelsep%
+    |\end{thebibliography}|
+    
+  This environment is used to typeset the references.  For each
+  reference there is a |\bibitem|.  Usually, this is automatically
+  produced by \BibTeX{}.
+  
+\item
+  \DescribeMacro{\citet}|\citet*[|\meta{prefix}|][|\meta{postfix}|]{|\meta{key}|}|,
+  \newline
+  \DescribeMacro{\citep}|\citep*[|\meta{prefix}|][|\meta{postfix}|]{|\meta{key}|}|,
+  \newline
+  \DescribeMacro{\citealt}|\citealt*[|\meta{prefix}|][|\meta{postfix}|]{|\meta{key}|}|,
+  \newline
+  \DescribeMacro{\citealp}|\citealp*[|\meta{prefix}|][|\meta{postfix}|]{|\meta{key}|}|,
+  \newline
+  \DescribeMacro{\citeauthor}|\citeauthor*[|\meta{prefix}|][|\meta{postfix}|]{|\meta{key}|}|,
+  \newline
+  \DescribeMacro{\citeyear}|\citeyear[|\meta{prefix}|][|\meta{postfix}|]{|\meta{key}|}|
+
+  These macros are defined by the package \Lpackage{natbib}.  With the
+  option \Lclo{cccite} they loose most of their functionality.  With
+  the options \Lclo{nocccite} or \Lclo{nonatbib} they are not defined.
+
+  All of these can have a comma separated list of \meta{key}s.  The
+  star indicates that the full list of authors should be used if
+  possible.  The \meta{prefix} precedes, the \meta{postfix} follows
+  the citation.  If only one optional argument is present, it is
+  considered to be the \meta{postfix}.  The \meta{postifx} may be
+  empty to allow the specification of a \meta{prefix} only.  There are
+  several examples in \ref{sec:bib+cite}.
+  \begin{texexample}
+\citet{goomit95}\\
+\citeauthor{kopdal99}\\
+\citeyear{knu84}\\
+\cite{knu84,knu86b,knu86c}\\
+\citealt{lam94}\\
+\citep{goomit96g}\\
+This\nocite{pat88}
+produces no text but a
+bibliography entry.
+  \end{texexample}
+    
+\item \DescribeMacro{\cite}|\cite{|\meta{key}|}|,
+  \DescribeMacro{\citeauthor}|\citeauthor{|\meta{key}|}|,
+  \DescribeMacro{\citeyear}|\citeyear{|\meta{key}|}|,
+  \DescribeMacro{\citemul}|\citemul{|\meta{key}|}|, \newline
+  \DescribeMacro{\shortcite}|\shortcite{|\meta{key}|}|,
+  \DescribeMacro{\parencite}|\parencite{|\meta{key}|}|,
+  \DescribeMacro{\nocite}|\nocite{|\meta{key}|}|
+  
+  These obsolete macros are used for citations when the option
+  \Lclo{cccite} is used. 
+%   The different commands produce various combinations of a reference:
+%   \begin{texexample}
+% \cite{goomit95}\\
+% \citeauthor{kopdal99}\\
+% \citeyear{knu84}\\
+% \citemul{knu84,knu86b,knu86c}\\
+% \shortcite{lam94}\\
+% \parencite{goomit96g}\\
+% This\nocite{pat88}
+% produces no text but a
+% bibliography entry.
+%   \end{texexample}
+%   |\citemul| is used to cite several references of the same author(s).
+%   (In fact, with the option \Lclo{cccite}, the fourth line of the
+%   above example would have given: Knuth (1984, 1986a, 1986b).)
+  
+\item
+  \DescribeMacro{\headrulewidth}|\setlength{\headrulewidth}{|\meta{width}|}|
+  
+  If a head rule is desired, use this in the preamble. The default
+  value for \meta{width} is |.4pt|.  Note that this has only an effect
+  with the document class option \Lclo{noccpublish}.
+
+\item \DescribeMacro{\maketitle}|\maketitle|
+  
+  This command produces the title if not done yet.  You never need
+  this command unless you use the document class option
+  \Lclo{noautotitle}.
+
+\item \DescribeMacro{\makeendtitle}|\makeendtitle|
+  
+  This command produces receipt information and affiliations if not
+  done yet.  You do not need this command unless you use the document
+  class option \Lclo{noautotitle}.
+  
+\pagebreak[3]
+
+\item \DescribeMacro{\ccpublish}|\ccpublish{|\meta{year}|}|%
+  |{|\meta{volume}|}{|\meta{number}|}{|\meta{first page}|}|
+  
+  Preamble command to define \meta{year}, \meta{volume},
+  \meta{number}, and \meta{first page} of the final publication
+  \emph{by the editor}.  Not intended for use by anybody else.  Note
+  that this forces the document class options \Lclo{autotitle} and
+  \Lclo{ccpublish}.
+  
+\item \DescribeMacro{\electronic}|\electronic|,
+  \DescribeMacro{\printed}|\printed|
+  
+  Commands \emph{for the editor}. Switches the ISSN to the electronic
+  or to the printed version.
+  
+\end{description}
+
+
+\section{Commands for algorithms}
+
+The commands and environments related to algorithms can also be used
+independently, try |\usepackage{ccalgo}| to activate them.  For a
+longer example, see \ref{tab:algo}.
+\begin{table}[t!]
+  \input{tab-algo.tex}
+  \caption{An example algorithm}
+  \label{tab:algo}
+\end{table}
+\condbreak{1cm}
+\begin{description}
+\item
+  \DescribeEnv{algorithm}|\begin{algorithm}|%
+    |{|\meta{masterkey}|}[|\meta{citation}|]|\\
+    |\item |\meta{input}\\
+    |\item |\meta{output}\\
+    |\begin{block}|\\
+      |  |\meta{body}\\
+      |\end{block}|
+    \\\null\hskip-\leftmargin\hskip\labelsep%
+    |\end{algorithm}|
+  
+  This is a specialization of the following environment
+  \Lenv{namedalgorithm}.  You may define such specializations using
+  |\newalgorithm|.
+
+\item 
+  |\newalgorithm{|\meta{environment name}|}[|\meta{list of required
+    items}|]{|\meta{heading}|}|.
+
+  You can use this to specialize the following environment
+  \Lenv{namedalgorithm}.
+
+\item
+  \DescribeEnv{namedalgorithm}|\begin{namedalgorithm}|%
+    |{|\meta{heading}|}[|\meta{list of required items}|]|\\%
+    |{|\meta{masterkey}|}[|\meta{citation}|]|\\
+    |\item |\meta{first required item}\\
+    \dots\\
+    |\item |\meta{last required item}\\
+    |\begin{block}|\\
+      |  |\meta{body}\\
+      |\end{block}|
+    \\\null\hskip-\leftmargin\hskip\labelsep%
+    |\end{namedalgorithm}|
+  
+  Typesetting algorithms is an art by itself.  We hope that this
+  environment is flexible enough to reflect also your taste.  The
+  environment \Lenv{namedalgorithm} takes four arguments, two of them
+  are optional.  The \meta{list of required items} is a comma
+  separated list of titles for required items.  It defaults to:
+  |Input,Output|.  Thus the first required item is entitled |Input|
+  and the second and last required item is entitled |Output|.  An
+  interactive protocol might have many more required items, for
+  example,
+  |Common input,|%
+  |Prover's input,|%
+  |Verifier's input,|%
+  |Output|.
+  The \meta{heading} could be |Algorithm| or
+  |Extended Euclidean Algorithm|%
+  , it will be referenced together with the number (if any).  The
+  \meta{masterkey} is used to set a label; this is obligatory since
+  labels to steps or ranges of steps in the algorithm are created
+  using this.  Finally \meta{citation} usually is either a phrase
+  describing the algorithm, or a reference.
+  
+  The \meta{body} is a sequence of steps and blocks.
+  
+  |\item[|\meta{label}|]| starts a new step of the algorithm, either
+  numbered or labelled \meta{label}.  As usual, a |\label| command
+  after the item refers to the step, but it is wiser to use
+  \DescribeMacro{\algolabel}|\algolabel{|\meta{subkey}|}| instead
+  which is equivalent to |\label{|\meta{masterkey}|-|\meta{subkey}|}|.
+  (Note that also items with given \meta{label} can have an
+  |\algolabel| or a |\label|!)  A reference must then be written
+  \DescribeMacro{\stepref}|\stepref{|\meta{masterkey}|}{|\meta{subkey}|}|
+  or |\ref{|\meta{masterkey}|-|\meta{subkey}|}|.  If the standard
+  width of the item labels is not enough, use
+  \begin{center}
+    |\settowidth{\steplabelwidth}{\makeoptalgolabel{|\meta{widest label}|}}| %
+  \end{center}
+  before the first step in the algorithm to adjust this.  (If you have
+  a problem because your algorithm is longer than 99 steps then you
+  should better use
+  |\settowidth{\steplabelwidth}{\makealgolabel{999}}|%
+  .)
+  
+  |\begin{block}|~\meta{body}~|\end{block}| produces an indented
+  block.  An |\algolabel{|\meta{subkey}|}| before the \meta{body}
+  generates a reference
+  %\meta{masterkey}|-|\meta{subkey}
+  to the \emph{range} of steps inside the block.  Actually, the
+  environment \Lenv{block} is combined from environments
+  \Lenv{indention} and \Lenv{range}.  |\begin{indention}| \meta{body}
+    |\end{indention}| just produces some indented lines, while
+  |\begin{range}| |\algolabel{|\meta{subkey}|}| \meta{body}
+    |\end{range}| allows to reference a range of steps.
+
+
+  More advanced facilities might help you:
+  \begin{itemize}
+  \item |\begin{ifblock}{|\meta{condition}|}| \meta{body}
+      |\end{ifblock}|
+  \item |\begin{elifblock}{|\meta{condition}|}| \meta{body}
+      |\end{elifblock}|
+  \item |\begin{elseblock}| \meta{body} |\end{elseblock}|
+  \item |\begin{forblock}{|\meta{loop control}|}| \meta{body}
+      |\end{forblock}|
+  \item |\begin{whileblock}{|\meta{condition}|}| \meta{body}
+      |\end{whileblock}|
+  \item |\begin{untilblock}{|\meta{condition}|}| \meta{body}
+      |\end{untilblock}|
+  \item |\begin{blockwhile}{|\meta{condition}|}| \meta{body}
+      |\end{blockwhile}|
+  \item |\begin{blockuntil}{|\meta{condition}|}| \meta{body}
+      |\end{blockuntil}|
+  \end{itemize}
+  For example, the first of these is almost equivalent to:
+  \begin{verse}
+    |\item|\\
+    |  \IF |\meta{condition}| \THEN|\\
+    |\begin{block}|\\
+      |  |\meta{body}\\
+      |\end{block}|
+  \end{verse}
+  The actual implementation also takes care of a label to the entire
+  range of steps.  If you put a label in an \Lenv{ifblock}, you
+  reference the range containing the \textsf{If} step and the
+  \textsf{then} block.  If you need a reference for the \textsf{If}
+  step itself, or you use \meta{label} for all steps, then put
+  |\item[|\meta{label}|]\algolabel{|\meta{subkey}|}| before the
+  \Lenv{ifblock}.
+
+  Typesetting keywords is done as follows: |\keyword{|\meta{name}|}|
+  produces a keyword.  |\FOR|, |\DO|, |\WHILE|, |\REPEAT|,
+  |\UNTIL|, |\IF|, |\THEN|, |\ELSE|, |\RETURN| are predefined
+  keywords.  Further, |\COMMENT{|\meta{comment}|}| can be used to type
+  comments.
+\end{description}
+
+
+%  \changes{v2.03}{2005/08/29}{Added section on interaction with other
+%    packages}
+\section{Interaction with other packages}
+
+\begin{description}
+\item[\Lpackage{hyperref}] This package must be loaded after
+  \Lpackage{cc-cls}.  Otherwise, references will not work as expected
+  with \Lpackage{hyperref}.
+\end{description}
+
+
+\DocInput{cc.dtx}
+
+\Finale
+
+\end{document}
+%</driver>
+%<*quickref>
+\documentclass[shortarticle,noccpublish,noautotitle,%
+multilingual,english]{cc}
+
+\IfFileExists{texexample.sty}{}{%
+  \typeout{Some files are missing.}
+  \typeout{Please first do: latex cc.dtx}
+  \endinput
+  }
+
+\dimen254\marginparwidth
+\let\ccorgmaketitle\maketitle
+\usepackage{doc}
+\normalmarginpar
+\let\maketitle\ccorgmaketitle
+\marginparwidth\dimen254
+\MakeShortVerb{\|}
+
+\usepackage{texexample}
+
+
+\pagestyle{empty}
+\advance\textheight\headheight
+\headheight=0pt
+\advance\textheight\footskip
+\footskip=0pt
+
+\begin{document}
+
+\pagestyle{empty}
+\section*{Tables for quick reference}
+
+\bigskip
+
+\input{tab-algo}
+
+\clearpage
+\input{tab-struct}
+\enlargethispage{1cm}
+
+\input{tab-thmenv}
+
+\end{document}
+
+%</quickref>
+% meta-comment \fi
+%
+%  \expandafter\newif\csname ifstopped\endcsname
+%  \stoppedtrue
+%  \StopEventually{
+%    \ifstopped
+%    \setcounter{IndexColumns}{2}%
+%    \PrintIndex
+%    \condbreak{2cm}
+%    \bibliography{texrefs}
+%    \fi
+%  }
+%  \stoppedfalse
+%
+%  \condbreak{2cm}
+%  \addcontentsline{toc}{section}{\refname}\bibliography{texrefs}
+%  \makeendtitle\let\makeendtitle\relax%% We really want this!
+%
+% \cleardoublepage
+% \let\PrintDescribeEnv\ccorgPrintDescribeEnv
+% \let\PrintDescribeMacro\ccorgPrintDescribeMacro
+% \footnotesize
+% \part*{Source code}
+% \addcontentsline{toc}{part}{Source code}
+%
+%  \GetFileInfo{cc.cls}
+%
+% \section{Source of \filename}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%    \begin{macrocode}
+%<*cccls>
+%    \end{macrocode}
+%
+% \changes{v0.00}{1999/09/13}{Starting.  Michael N{\"{u}}sken, Paderborn}
+% \changes{v0.80}{1999/10/22}{Alpha version, built according to
+%   \texttt{cc.sty}.  Michael N{\"{u}}sken, Paderborn}
+% \changes{v0.90}{1999/11/09}{Beta version.  Michael N{\"{u}}sken, Paderborn}
+%
+%  This document class can only be used with \LaTeXe{}, so we make
+%  sure that an appropriate message is displayed when another \TeX{}
+%  format is used.
+%
+%  Announce the Class name and its version:
+%  \changes{v0.90}{2000/02/16}{Advanced version to 1.99}
+%  \changes{v1.99}{2000/02/29}{Advanced version to official 2.00}
+%  \changes{v2.00}{2000/05/29}{Add definition of \ignorespaces for
+%    \LaTeXe{} version of 1995/06/01.}
+%  \changes{v2.00}{2000/06/21}{Advanced version to 2.01}
+%  \changes{v2.01}{2001/08/28}{Advanced version to 2.02}
+%  \changes{v2.02}{2002/01/08}{Advanced version to 2.03}
+%  \changes{v2.03}{2005/08/29}{Advanced version to 2.04, Michael
+%    N{\"{u}}sken, now(!) Bonn}
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\providecommand\ignorespacesafterend{\@ignoretrue}
+\newif\ifclass
+\ifx\@currext\@clsextension\classtrue\else\classfalse\fi
+\ifclass\expandafter\ProvidesClass\else\expandafter\ProvidesPackage\fi
+{\ifclass cc\else cc-cls\fi}[2005/08/27 v2.04
+   computational complexity
+   \ifclass document class\else package\fi]
+%    \end{macrocode}
+%
+% \subsection{Load auxiliaries}
+%
+%  We load the auxiliaries that are needed at various places.  They
+%  contain macros for warnings, lots of new |\if|s, and more.
+%    \begin{macrocode}
+\RequirePackage{ccaux}
+%    \end{macrocode}
+%
+% \subsection{Declaration of Options}
+%
+%  The options \Lclo{localnumbering}, \Lclo{globalnumbering} or
+%  \Lclo{longarticle}, \Lclo{shortarticle} affect the numbering of
+%  theorem and equation like environments.  Either they are numbered
+%  globally, e.g. Theorem 23, or they are numbered within sections,
+%  e.g. Theorem 4.2.
+%    \begin{macrocode}
+\DeclareOption{localnumbering}{\@longarticletrue}
+\DeclareOption{globalnumbering}{\@longarticlefalse}
+\DeclareOption{longarticle}{\@longarticletrue}
+\DeclareOption{shortarticle}{\@longarticlefalse}
+%    \end{macrocode}
+%  The option \Lclo{cclayout} enables \cc's |\maketitle| and |\endmaketitle|,
+%  and the page dimensions are set according to \cc's requirements.
+%  If the option \Lclo{nocclayout} is used the page layout |cc| is
+%  still defined, but |\maketitle| and |\endmaketitle| are not defined
+%  and the page dimensions are left unchanged.  Also |\author|,
+%  |\title|, \dots{} are not required any more.
+% \changes{v2.00}{2000/04/10}{Added option cclayout.  Michael N{\"{u}}sken,
+%   Paderborn}
+%    \begin{macrocode}
+\DeclareOption{cclayout}{\@cclayouttrue}
+\DeclareOption{nocclayout}{\@cclayoutfalse}
+%    \end{macrocode}
+%  The options \Lclo{prefixes}, \Lclo{noprefixes} decide whether a
+%  reference produces `Theorem 4.2' or just `4.2'.  The options
+%  \Lclo{bare}, \Lclo{nobare} decide whether |\bare\ref| produces `4.2'
+%  or not.  These options are passed to the package
+%  \Lpackage{relabel}, which is responsible for this kind of trick.
+%    \begin{macrocode}
+\DeclareOption{prefixes}{%
+  \PassOptionsToPackage{\CurrentOption}{relabel}}
+\DeclareOption{noprefixes}{%
+  \ExecuteOptions{notheoremitemprefixes}%
+  \PassOptionsToPackage{\CurrentOption,nobare}{relabel}}
+\DeclareOption{bare}{\PassOptionsToPackage{\CurrentOption}{relabel}}
+\DeclareOption{nobare}{\PassOptionsToPackage{\CurrentOption}{relabel}}
+%    \end{macrocode}
+%  In multilingual setups it might be better to use the font
+%  encoding scheme T1 which uses 256 characters per font.
+%  By default latin1 input encoding is used.  If you need something
+%  else, this can be disabled.
+% \changes{v2.00}{2000/04/11}{Added options latin1/nolatin1.  Michael
+%   N{\"{u}}sken, Paderborn}
+%    \begin{macrocode}
+\DeclareOption{multilingual}{\ExecuteOptions{T1,latin1,babel}}
+\DeclareOption{nomultilingual}{\ExecuteOptions{OT1,nolatin1,nobabel}}
+\DeclareOption{T1}{\@Tonetrue}
+\DeclareOption{OT1}{\@Tonefalse}
+\DeclareOption{latin1}{\@latintrue}
+\DeclareOption{nolatin1}{\@latinfalse}
+\DeclareOption{babel}{\@babeltrue}
+\DeclareOption{nobabel}{\@babelfalse}
+%    \end{macrocode}
+%  The \AMS{} packages \Lpackage{amsmath}, \Lpackage{amsfonts} and
+%  \Lpackage{amssymb} provide many useful features.  Whether they are
+%  loaded or not is determined by the following two options.
+%    \begin{macrocode}
+\DeclareOption{ams}{\@amstrue}
+\DeclareOption{noams}{\@amsfalse}
+%    \end{macrocode}
+%  With \Lclo{autotitle} |\maketitle| and |\makeendtitle| are called
+%  automatically at the beginning or end of the document, respectively.
+%    \begin{macrocode}
+\DeclareOption{autotitle}{\@autotitletrue}
+\DeclareOption{noautotitle}{\@autotitlefalse}
+%    \end{macrocode}
+%  Sectioning for \cc{} is different from standard settings.  The
+%  following options turn this on or off.
+%    \begin{macrocode}
+\DeclareOption{ccsectioning}{\@ccsectioningtrue}
+\DeclareOption{noccsectioning}{\@ccsectioningfalse}
+%    \end{macrocode}
+%  Citation and bibliography can be done either with the
+%  \Lpackage{natbib} package by Richard W. Daly, or with the old \cc{}
+%  macros, or with standard \LaTeX{}.
+%  \changes{v2.01}{2001/08/28}{Added undocumented manualbibliography.
+%    Michael N{\"{u}}sken, Paderborn.}
+%  \changes{v2.02}{2001/12/13}{Added twocolumnbibliography.
+%    Michael N{\"{u}}sken, Paderborn.}
+%    \begin{macrocode}
+\DeclareOption{natbib}{\@natbibtrue\@cccitefalse}
+\DeclareOption{nonatbib}{\@natbibfalse\@cccitefalse}
+\DeclareOption{cccite}{\@natbibfalse\@cccitetrue}
+\DeclareOption{nocccite}{\@natbibfalse\@cccitefalse}
+\DeclareOption{manualbibliography}{\@manualbibliographytrue}
+\DeclareOption{twocolumnbibliography}{\@twocolumnbibliographytrue}
+\DeclareOption{onecolumnbibliography}{\@twocolumnbibliographyfalse}
+%    \end{macrocode}
+%  With \Lenv{natbib} you can choose whether you want multiple
+%  citations unsorted, sorted or compressed.
+%    \begin{macrocode}
+\DeclareOption{nosort}{%
+  \def\@natbibsort{}}
+\DeclareOption{sort}{%
+  \def\@natbibsort{\PassOptionsToPackage{sort}{natbib}}}
+\DeclareOption{sort&compress}{%
+  \def\@natbibsort{\PassOptionsToPackage{sort&compress}{natbib}}}
+%    \end{macrocode}
+%  Theorem like environments for \cc{} are different from standard
+%  settings.  The following options turn this on or off.
+%  \changes{v2.01}{2000/06/28}{Added cctheorems+separatelycounted.
+%    Michael N{\"{u}}sken, Paderborn.}
+%    \begin{macrocode}
+\DeclareOption{cctheorems}{\@cctheoremstrue\@standardtheoremstrue}
+\DeclareOption{cctheorems+separatelycounted}{%
+  \@cctheoremstrue\@standardtheoremsfalse}
+\DeclareOption{nocctheorems}{\@cctheoremsfalse}
+%    \end{macrocode}
+%  By default theorem-like environment are counted with equations.
+%  The following options turn this on or off.
+%  \changes{v2.02}{2001/12/06}{Added separateequationcounting.
+%    Michael N{\"{u}}sken, Paderborn.}
+%    \begin{macrocode}
+\DeclareOption{separateequationcounting}{\@ccnosepeqncntfalse}
+\DeclareOption{noseparateequationcounting}{\@ccnosepeqncnttrue}
+%    \end{macrocode}
+%  Theorem like environments for \cc{} are different from standard
+%  settings.  The following options turn this on or off.
+%    \begin{macrocode}
+\DeclareOption{ccalgorithms}{\@ccalgotrue}
+\DeclareOption{noccalgorithms}{\@ccalgofalse}
+%    \end{macrocode}
+%  See \Lpackage{ccthm} below for the effect of these options.
+%    \begin{macrocode}
+\DeclareOption{theoremitemprefixes}{%
+  \PassOptionsToPackage{\CurrentOption}{ccthm}}
+\DeclareOption{notheoremitemprefixes}{%
+  \PassOptionsToPackage{\CurrentOption}{ccthm}}
+\DeclareOption{enhancedprefixes}{% old
+  \PassOptionsToPackage{theoremitemprefixes}{ccthm}}
+\DeclareOption{standardprefixes}{% old
+  \PassOptionsToPackage{notheoremitemprefixes}{ccthm}}
+%    \end{macrocode}
+%  \cc{} requires received date, author, title, abstract, keywords,
+%  and subject classification.  With \Lclo{noccpublish} these things
+%  are optional.
+%    \begin{macrocode}
+\DeclareOption{ccpublish}{\@ccpublishtrue}
+\DeclareOption{noccpublish}{\@ccpublishfalse}
+%    \end{macrocode}
+%  \Lclo{cctextarea} means that the text part of the page is exactly as
+%  specified for \cc{}, it is the default with the class.  It's
+%  counterpart \Lclo{nocctextarea} is the default with the package
+%  version and with all options \Lclo{*paper}.
+% \changes{v2.01}{2001/02/22}{Added options cctextarea/nocctextarea.
+%   Michael N{\"{u}}sken, Paderborn}
+%
+%  \Lclo{classicalmargins} are as with the old \file{cc.sty}.
+%  \Lclo{printmargins} are as in the printed version, while
+%  \Lclo{balancedmargins} uses equal |\oddsidemargin| and
+%  |\evensidemargin|.
+%    \begin{macrocode}
+\DeclareOption{cctextarea}{\@cctextareatrue}
+\DeclareOption{nocctextarea}{\@cctextareafalse}
+\DeclareOption{noothermargins}{\@marginmode\m@ne}
+\DeclareOption{classicalmargins}{\@marginmode\z@}
+\DeclareOption{printmargins}{\@marginmode\@ne}
+\DeclareOption{balancedmargins}{\@marginmode\tw@}
+%    \end{macrocode}
+%  The following options are passed to the document class
+%  \Lclass{article}.  Since we prefer \Lclo{12pt}, the size options
+%  are handled slightly different.
+%    \begin{macrocode}
+\DeclareOption{10pt}{\def\@ccptsize{10}}
+\DeclareOption{11pt}{\def\@ccptsize{11}}
+\DeclareOption{12pt}{\def\@ccptsize{12}}
+\DeclareOption{a4paper}{\@cctextareafalse%
+  \PassOptionsToClass{\CurrentOption}{article}}
+\DeclareOption{a5paper}{\@cctextareafalse%
+  \PassOptionsToClass{\CurrentOption}{article}}
+\DeclareOption{b5paper}{\@cctextareafalse%
+  \PassOptionsToClass{\CurrentOption}{article}}
+\DeclareOption{letterpaper}{\@cctextareafalse%
+  \PassOptionsToClass{\CurrentOption}{article}}
+\DeclareOption{legalpaper}{\@cctextareafalse%
+  \PassOptionsToClass{\CurrentOption}{article}}
+\DeclareOption{executivepaper}{\@cctextareafalse%
+  \PassOptionsToClass{\CurrentOption}{article}}
+\DeclareOption{landscape}{\@cctextareafalse%
+  \PassOptionsToClass{\CurrentOption}{article}}
+\DeclareOption{oneside}{\@twosidefalse}
+\DeclareOption{twoside}{\@twosidetrue}
+\DeclareOption{leqno}{%
+  \PassOptionsToClass{\CurrentOption}{article}%
+  \PassOptionsToPackage{\CurrentOption}{amsmath}%
+  }
+\DeclareOption{reqno}{%
+  \PassOptionsToClass{\CurrentOption}{article}%
+  \PassOptionsToPackage{\CurrentOption}{amsmath}%
+  }
+\DeclareOption*{\OptionNotUsed
+  \PassOptionsToClass{\CurrentOption}{article}}
+%    \end{macrocode}
+%  Now, all options are defined.  We execute the default options.
+%    \begin{macrocode}
+\ifclass
+\ExecuteOptions{a4paper,12pt,cctextarea,balancedmargins,twoside,%
+  OT1,nolatin1,nobabel,%
+  localnumbering,bare,%
+  leqno,ams,ccpublish,cclayout,autotitle,ccsectioning,%
+  onecolumnbibliography,natbib,sort&compress,%
+  cctheorems,theoremitemprefixes,noseparateequationcounting,%
+  ccalgorithms}
+\else
+\ExecuteOptions{a4paper,12pt,nocctextarea,balancedmargins,twoside,%
+  OT1,nolatin1,nobabel,%
+  localnumbering,bare,%
+  leqno,ams,noccpublish,nocclayout,noautotitle,ccsectioning,%
+  onecolumnbibliography,natbib,sort&compress,%
+  cctheorems,theoremitemprefixes,noseparateequationcounting,%
+  ccalgorithms}
+\fi
+%    \end{macrocode}
+%  Then we process the class options.
+%    \begin{macrocode}
+\ProcessOptions\relax
+%    \end{macrocode}
+%  Finally, the pointsize is passed to the \Lclass{article} class and
+%  the sorting mode to the \Lpackage{natbib} package.
+%  \changes{v2.00}{2000/04/11}{Changed \cs{@ptsize} to
+%    \cs{@ccptsize}.  Michael N{\"{u}}sken, Paderborn.}
+%    \begin{macrocode}
+\PassOptionsToClass{\@ccptsize pt}{article}
+\if@twoside
+\PassOptionsToClass{twoside}{article}
+\else
+\PassOptionsToClass{oneside}{article}
+\fi
+\let\@ccptsize\@undefined
+\@natbibsort
+\let\@natbibsort\@undefined
+%    \end{macrocode}
+%  Give a warning when using weird features.
+%  \changes{v2.01}{2000/06/28}{Added warning for cctheorems+separatelycounted.
+%    Michael N{\"{u}}sken, Paderborn.}
+%    \begin{macrocode}
+\if@standardtheorems\else
+    \ClassWarning{cc}{You are using the non documented
+      feature\MessageBreak
+      cctheorems+separatelycounted.\MessageBreak
+      It is recommended not to use this.}
+\fi
+%    \end{macrocode}
+%
+% \subsection{Logo}
+%
+%  \begin{macro}{\cc}
+%  This is the logo of \cc{}.
+%    \begin{macrocode}
+\newcommand{\cc}{\textsf{computational complexity}}
+%    \end{macrocode}
+%  \end{macro}
+%
+% \subsection{Class and packages}
+%
+%  We load the document class \Lclass{article}.
+%    \begin{macrocode}
+\ifclass
+\LoadClass{article}[1999/01/07 v1.4a]
+\fi
+%    \end{macrocode}
+%  Optionally, the font encoding is switched to T1.  In any case, we
+%  use input encoding |latin1|, thus Umlaute and other special
+%  characters have a defined value.
+% \changes{v2.00}{2000/04/11}{Made inputenc optional.  Michael
+%   N{\"{u}}sken, Paderborn}
+% \changes{v2.00}{2000/06/21}{Added \cs{babel}\cs{def} and
+%   definitions for english and german words. Michael N{\"{u}}sken,
+%   Paderborn}
+% \changes{v2.01}{2000/09/15}{Forbid loading of german by pretending
+%   that this has been done already.
+%   Michael N{\"{u}}sken, Paderborn}
+%    \begin{macrocode}
+\if@Tone
+\RequirePackage[T1]{fontenc}
+\fi
+%%german.sty is not allowed. Use global options:
+%%multilingual,german.
+\@pass@ptions\@pkgextension{}{german}
+\global\expandafter\let\csname ver@german.\@pkgextension\endcsname\@empty
+\if@babel
+\RequirePackage{babel}
+\fi
+\if@latin
+% make this optional? yes.
+\RequirePackage[latin1]{inputenc}[1998/03/05 v0.97]
+\fi
+%    \end{macrocode}
+%  Next, we load the \AMS{} packages if required.  If not we define
+%  some commands that we need and that would have been provided by
+%  these packages.
+%    \begin{macrocode}
+\if@ams
+\RequirePackage{amsmath}[2000/01/15 v2.05]% 1997/03/20 v1.2d
+% amsmath contains amstext, amsgen, amsbsy, amsopn
+\RequirePackage{amsfonts}[1997/09/17 v2.2e]
+\RequirePackage{amssymb}[1996/11/03 v2.2b]
+\else
+\newcommand{\numberwithin}[3][\arabic]{%
+  \@ifundefined{c@#2}{\@nocounterr{#2}}{%
+    \@ifundefined{c@#3}{\@nocnterr{#3}}{%
+      \@addtoreset{#2}{#3}%
+      \expandafter\xdef\csname the#2\endcsname{%
+        \expandafter\noexpand\csname the#3\endcsname%
+        .\noexpand#1{#2}}}}%
+}
+%% \def\numberwithin#1#2{\@ifundefined{c@#1}{\@nocounterr{#1}}{%
+%%   \@ifundefined{c@#2}{\@nocnterr{#2}}{%
+%%   \@addtoreset{#1}{#2}%
+%%   \toks@\expandafter\expandafter\expandafter{\csname the#1\endcsname}%
+%%   \expandafter\xdef\csname the#1\endcsname
+%%     {\expandafter\noexpand\csname the#2\endcsname
+%%      .\the\toks@}}}}
+\let\@ifempty\cc@ifempty
+\let\@ifnotempty\cc@ifnotempty
+\let\bigstar\bullet
+\let\lozenge\circ
+\def\square{{\fboxsep.3em{\vbox{\hbox{\fbox{}}\vskip0pt}}}}
+\let\text\mbox% This is a poor man's version!
+\fi
+%    \end{macrocode}
+%  \begin{macro}{\email}
+%  \begin{macro}{\homepage}
+%  The package \Lpackage{url} defines macros to handle URLs and so
+%  on.  We also use this for email addresses and home page
+%  addresses.
+% \changes{v2.00}{2000/04/04}{Modified \cs{UrlSpecials} as proposed by
+%   Paul Daly.  Michael N{\"{u}}sken, Paderbon}
+%    \begin{macrocode}
+\RequirePackage{url}[1999/03/02 ver 1.4]
+\expandafter\def\expandafter\UrlSpecials\expandafter{%
+  \UrlSpecials\do\%{}}
+\providecommand{\email}{\begingroup\urlstyle{tt}\Url}
+\providecommand{\homepage}{\begingroup\scriptsize\urlstyle{tt}\Url}
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%
+% \subsection{Fixed fonts}
+%
+%  \begin{macro}{\ixpt}
+%  \begin{macro}{\xptsfbx}
+%  \begin{macro}{\textsfbx}
+%  For the (over)headline of the first page of an article and for
+%  the logo, some special font commands are needed.  |\ixpt|
+%  switches to 9pt fonts, |\xptsfbx| switches to 10pt sans serif font,
+%  and |\textsfbx| switches to bold sans serif font.
+%    \begin{macrocode}
+\providecommand{\ixpt}{\@setfontsize\ixpt\@ixpt{11}}
+\newcommand{\xptsfbx}{%
+  \@setfontsize\xpt\@xpt{12}\usefont{OT1}{cmss}{bx}{n}}
+\DeclareTextFontCommand{\textsfbx}{\usefont{OT1}{cmss}{bx}{n}}
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%  \end{macro}
+%
+% \subsection{Macros to collect data}
+%
+%  Most of the code for page layout is in the package
+%  \Lpackage{cclayout}.
+%    \begin{macrocode}
+\if@cclayout
+\RequirePackage{cclayout}
+\else
+%    \end{macrocode}
+%  \begin{macro}{\ps@cc}
+%    A variant of the page style \texttt{cc} is defined.  Use
+%    |\newcommand{\cctitlehead}{|\meta{title text}|}| to specify the
+%    text for the running heads, and
+%    |\newcommand{\ccauthorhead}{|\meta{author(s)}|}| to specify the
+%    authors for the running heads.
+%    \begin{macrocode}
+\newskip\headerindent \headerindent=10mm
+\newdimen\headrulewidth \headrulewidth.4pt
+\def\cctitlehead{}
+\def\ccauthorhead{}
+\def\ps@cc{\let\@mkboth\markboth
+     \def\@oddhead{\vbox{\hbox to\textwidth{\reset@font\strut
+         \null
+         \hfil
+         {\small\cctitlehead}%
+         \hbox to\headerindent{\hfil\thepage}%
+         }%
+       \if@ccpublish\else
+       \kern2.6\p@
+       \hrule\@height\headrulewidth\kern-\headrulewidth
+       \kern-2.6\p@
+       \fi
+       \vskip\z@
+       }%
+     }%
+     \def\@oddfoot{}
+     \def\@evenhead{\vbox{\hbox to\textwidth{\reset@font\strut
+         \hbox to\headerindent{\thepage\hfil}%
+         {\small\ccauthorhead}%
+         \hfil
+         \null
+         }%
+       \if@ccpublish\else
+       \kern2.6\p@
+       \hrule\@height\headrulewidth\kern-\headrulewidth
+       \kern-2.6\p@
+       \fi
+       \vskip\z@
+       }%
+     }%
+     \let\@evenfoot\@oddfoot
+     }
+%    \end{macrocode}
+%  \end{macro}
+%
+%    \begin{macrocode}
+\fi%@cclayout
+%    \end{macrocode}
+%
+%
+% \subsection{Sectioning}
+%
+%    \begin{macrocode}
+\if@ccsectioning
+%    \end{macrocode}
+%  For \cc{} we use different layout for |\section|, |\subsection| and
+%  |\subsubsection| titles.
+%    \begin{macrocode}
+\def\@seccntformat#1{\csname the#1\endcsname.\enskip}
+%    \end{macrocode}
+%  \begin{macro}{\section}
+%  Section titles are |\large|, |\bfseries| and centered.
+%    \begin{macrocode}
+\renewcommand{\section}{\@startsection{section}{1}{\z@}%
+  {-2.9ex\@plus-.5ex\@minus-.2ex}%
+  {1.5ex\@plus.5ex\@minus.2ex}%
+  {\normalfont\large\bfseries\centering}}
+% \ifclass\else
+% \renewcommand \thesection {\@arabic\c@section}
+% \fi
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\subsection}
+%  \begin{macro}{\subsubsection}
+%  Subsection and subsubsection titles are |\bfseries| and embedded in
+%  the text with 1~em distance.  And these text embedded titles shall
+%  always terminate with a full stop.
+%    \begin{macrocode}
+\def\dot@sect#1#2#3#4#5#6[#7]#8{%
+  \let\@sect\ccorg@sect\let\@ssect\ccorg@ssect
+  \@sect{#1}{#2}{#3}{#4}{#5}{#6}[#7]{#8.}}
+\def\dot@ssect#1#2#3#4#5{%
+  \let\@sect\ccorg@sect\let\@ssect\ccorg@ssect
+  \@ssect{#1}{#2}{#3}{#4}{#5.}}
+\def\add@dot{%
+  \let\ccorg@sect\@sect\let\ccorg@ssect\@ssect
+  \let\@sect\dot@sect\let\@ssect\dot@ssect}
+\renewcommand{\subsection}{%
+  \add@dot
+  \@startsection{subsection}{2}{\z@}%
+  {2.33ex\@plus.5ex\@minus.2ex}% was 12pt +-
+  {-1em}%
+  {\normalfont\normalsize\bfseries}}
+\renewcommand{\subsubsection}{%
+  \add@dot
+  \@startsection{subsubsection}{3}{\z@}%
+  {1.55ex\@plus.5ex\@minus.2ex}% was 8pt +-
+  {-1em}%
+  {\normalfont\normalsize\bfseries}}
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%  \begin{macro}{\paragraph}
+%  \begin{macro}{\subparagraph}
+%  Paragraphs and subparagraphs are inherited from the class.
+%    \begin{macrocode}
+\fi%@ccsectioning
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%
+% \subsection{Bibliography and citations}
+%
+%  The preferred access to bibliography and citations is via the
+%  package \Lpackage{natbib}.  It provides much more flexibility for
+%  the user and works with almost every bibliography style.
+%  \changes{v2.01}{2001/08/28}{Added undocumented manualbibliography.
+%    Michael N{\"{u}}sken, Paderborn.}
+%    \begin{macrocode}
+\if@natbib
+\RequirePackage{cc2cite}
+\if@manualbibliography
+\bibpunct{[}{]}{;}{n}{}{,}
+\fi
+\else%@natbib
+\if@cccite
+%    \end{macrocode}
+%
+%  The package \Lpackage{cccite} contains the definitions for the
+%  informative citation style like `Cook (1971)'.  It also issues
+%  |\bibliographystyle{\bibstyle@default}|, if no other style is
+%  defined before the |\bibliography| command.
+%    \begin{macrocode}
+\RequirePackage{cccite}
+%    \end{macrocode}
+%
+%  \begin{environment}{thebibliography}
+%    We redefine this envrionment in order to reflect the citation
+%    scheme given by \Lpackage{cccite} and to allow also the
+%    alternative style using numbers.
+%  \changes{v0.90}{1999/11/11}{Added \cs{condbreak\{8ex\}}.  Michael
+%  N{\"{u}}sken, Paderborn}
+%  \changes{v0.90}{2000/01/12}{Added toc entry.  Michael N{\"{u}}sken,
+%  Paderborn}
+%    \begin{macrocode}
+\renewcommand{\thebibliography}[1]{%
+  \condbreak{8ex}%
+  \section*{\refname
+    \addcontentsline{toc}{section}{\refname}%
+    \@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}}%
+  \vskip-\lastskip
+  \list{[\@arabic\c@enumiv] }%
+  {%
+    \labelwidth\z@
+    \labelsep\z@
+    \leftmargin\z@
+    \@openbib@code
+    \usecounter{enumiv}%
+    \let\p@enumiv\@empty
+    \renewcommand\theenumiv{\@arabic\c@enumiv}%
+    }%
+  \sloppy
+  \clubpenalty4000
+  \@clubpenalty \clubpenalty
+  \widowpenalty4000
+  \sfcode`\.\@m
+  \bibfont}
+\let\bibfont\small
+%    \end{macrocode}
+%  \end{environment}
+%  
+%  \begin{macro}{\@bibitem}
+%    Check whether this macro still is what we suppose it to be.  It
+%    is responsible for typesetting bibliography items that have to
+%    be numbered
+%    \begin{macrocode}
+\CheckCommand*\@bibitem[1]{\item\if@filesw \immediate\write\@auxout
+  {\string\bibcite{#1}{\the\value{\@listctr}}}\fi\ignorespaces}
+%    \end{macrocode}
+%  We redefine it, in order to procude brackets for the labels if no
+%  one is specified.
+%    \begin{macrocode}
+\def\@bibitem#1{\item\if@filesw \immediate\write\@auxout
+  {\string\bibcite{#1}{[\the\value{\@listctr}]}}\fi\ignorespaces}
+%    \end{macrocode}
+% \end{macro}
+%
+%  It is also possible to omit both, \Lpackage{natbib} and
+%  \Lpackage{cccite}.  Then only standard \LaTeXe{} citation and
+%  bibliography are available.  (However, \Lpackage{natbib} should
+%  even then work fine, so: use it.)
+%    \begin{macrocode}
+\else
+  \relax
+\fi%@cccite
+\fi%@natbib
+%    \end{macrocode}
+%  Optionally, we also provide a twocolumn bibliography.
+%  \changes{v2.02}{2001/12/13}{Added twocolumnbibliography.
+%    Michael N{\"{u}}sken, Paderborn.}
+%    \begin{macrocode}
+\if@twocolumnbibliography
+\RequirePackage{multicol}
+\newenvironment{nthebibliography}{%
+  \footnotesize
+  \let\bibfont\footnotesize
+  \let\section\subsubsection
+  \begin{multicols}2
+    \othebibliography}
+  {%
+    \vfill\vfill\vfill\vfill
+    \endothebibliography
+  \end{multicols}}
+\AtBeginDocument{%
+  \let\othebibliography\thebibliography
+  \let\endothebibliography\endthebibliography
+  \let\thebibliography\nthebibliography
+  \let\endthebibliography\endnthebibliography}
+\fi
+%    \end{macrocode}
+%
+% \subsection{Referencing}
+%
+%  \begin{macro}{\defprefix}
+%    \LaTeX{} already defined the features for nice references, although
+%    they were not really used.  The package \Lpackage{relabel} provides
+%    some macros to use these features.  Especially, a macro
+%    |\defprefix| is defined which allows to define a prefix for the
+%    label of a counter:
+%    |\defprefix{|\meta{counter}|}|\meta{definition}.
+%  \changes{v2.01}{2000/09/15}{Internationalized prefixes.
+%    Michael N{\"{u}}sken, Paderborn}
+%  \changes{v2.01}{2000/11/28}{Added \cs{chaptername}.
+%    Michael N{\"{u}}sken, Paderborn}
+%    \begin{macrocode}
+\RequirePackage{relabel}[1998/09/07 v1.01]
+\let\nref\ref
+%    \end{macrocode}
+%  \end{macro}
+%  We define prefixes for the standard counters.
+%    \begin{macrocode}
+\babel\def\partname{Part}[german=Teil,french=\protect\@Fpt partie]
+\defprefix{part}{\partname~}
+\babel\def\chaptername{Chapter}[german=Kapitel,french=Chapitre]
+\defprefix{chapter}{\chaptername~}
+\babel\def\sectionname{Section}[german=Abschnitt,french=Section]
+\defprefix{section}{\sectionname~}
+\babel\def\subsectionname{Section}[german=Abschnitt,french=Section]
+\defprefix{subsection}{\subsectionname~}
+\babel\def\subsubsectionname{Section}[german=Abschnitt,french=Section]
+\defprefix{subsubsection}{\subsubsectionname~}
+\let\ccorg@appendix\appendix
+\babel\def\appendixname{Appendix}[german=Anhang,french=Annexe]
+\def\appendix{%
+  \defprefix{section}{\appendixname~}%
+  \defprefix{subsection}{\appendixname~}%
+  \defprefix{subsubsection}{\appendixname~}%
+  \ccorg@appendix}
+\defprefix{equation}#1{(#1)}
+\babel\def\figurename{Figure}[german=Figur,french={\scshape Figure}]
+\defprefix{figure}{\figurename~}
+\babel\def\tablename{Table}[german=Tafel,french={\scshape Table}]
+\defprefix{table}{\tablename~}
+\numberallwithin{section}
+\AtBeginDocument{\@adjustnumbering}
+%    \end{macrocode}
+% \subsection{Theorems, Proofs and Algorithms}
+%
+%  All these things are imported.
+%    \begin{macrocode}
+\if@cctheorems
+\RequirePackage{ccthm}
+\RequirePackage{ccproof}
+\fi
+\if@ccalgo
+\RequirePackage{ccalgo}
+\fi
+%    \end{macrocode}
+%
+% \subsection{Other}
+%
+%  \begin{environment}{acknowledge}
+%    This environment simply constitues of an unnumbered section.
+%    \begin{macrocode}
+\babel\def\ccacknowledgementsname{Acknowledgements}[%
+  german=Danksagung,french=Remerciements]
+\newenvironment{acknowledge}{\section*{\ccacknowledgementsname}}{}
+%    \end{macrocode}
+%  \end{environment}
+%
+%  Label items in itemized lists with open circle.
+%    \begin{macrocode}
+\def\labelitemi{$\circ$}
+%    \end{macrocode}
+%  
+%  Set length of footnoterule, shorter than the default.
+%    \begin{macrocode}
+\def\footnoterule{\kern-3\p@\hrule\@width18mm\kern 2.6\p@}
+%    \end{macrocode}
+%
+%  \begin{macro}{\include}
+%    In \cc{}, we do not want to waste any place, so we redefine
+%    |\include| to be |\input| then.
+%    \begin{macrocode}
+\let\ccorg@include\include
+\newwarning{warn@include}{Note that \protect\include\space is equivalent
+  to \protect\input\space.}
+\renewcommand{\include}{%
+  \if@ccpublish
+    \ccClassWarning{warn@include}%
+    \let\next\input
+  \else
+    \let\next\ccorg@include
+  \fi
+  \next}
+%    \end{macrocode}
+%  \end{macro}
+%  
+%  Forget the class toggle.
+%    \begin{macrocode}
+% \let\ifclass\@undefined
+% \let\classtrue\@undefined
+% \let\classfalse\@undefined
+%</cccls>
+%    \end{macrocode}
+%
+%  \def\filename{ccaux.sty}
+%  \CodelinePrefix{H}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%
+%  It contains some definitions that are needed in several other files
+%  of our macro package.
+% \changes{v2.03}{2002/01/08}{New Package \lpackage{ccaux}
+%   collects some definitions that are needed by several other files.
+%   Michael N{\"{u}}sken, Paderborn}
+%    \begin{macrocode}
+%<*ccaux>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{ccaux}[2005/08/27 v2.04
+         computational complexity, auxiliaries.
+         Michael Nuesken, Bonn.]
+%    \end{macrocode}
+%  
+% \subsection{New ifs for document class options}
+%
+%    \begin{macrocode}
+\newif\if@longarticle \@longarticletrue
+\newif\if@cclayout \@cclayouttrue
+\newif\if@Tone \@Tonetrue
+\newif\if@latin \@latintrue
+\newif\if@babel \@babelfalse
+\newif\if@ams \@amstrue
+\newif\if@autotitle \@autotitletrue
+\newif\if@ccsectioning \@ccsectioningtrue
+\newif\if@cccite \@cccitefalse
+\newif\if@natbib \@natbibtrue
+\newif\if@manualbibliography \@manualbibliographyfalse
+\newif\if@twocolumnbibliography \@twocolumnbibliographyfalse
+\newif\if@cctheorems \@cctheoremstrue
+\newif\if@standardtheorems \@standardtheoremstrue
+\newif\if@ccnosepeqncnt \@ccnosepeqncnttrue
+\newif\if@ccalgo \@ccalgotrue
+\newif\if@theoremitemprefixes \@theoremitemprefixestrue
+\newif\if@ccpublish \@ccpublishfalse
+\newif\if@cctextarea \@cctextareatrue
+\newcount\@marginmode \@marginmode\tw@
+%    \end{macrocode}
+%  
+%  \subsection{Number equations and theorems within sections or chapter}
+%  In long articles, equations and theorems which also use this
+%  counter, figures and tables shall be numbered within sections.
+%  \changes{v2.01}{2000/06/28}{Added handling for cctheorems+separatelycounted.
+%    Michael N{\"{u}}sken, Paderborn.}
+%  \changes{v2.03}{2002/01/09}{Introduced macro \cs{ccTOPLEVEL}.
+%    Michael N{\"{u}}sken, Paderborn.}
+%  \changes{v2.03}{2002/01/24}{Introduced macros \cs{numberallwithin}
+%    and \cs{@adjustnumbering}.  Renamed \cs{ccTOPLEVEL} to
+%    \cs{cc@numberingtoplevel} and moved these things to ccaux.
+%    Michael N{\"{u}}sken, Paderborn.}
+%    \begin{macrocode}
+\def\numberallwithin#1{\gdef\cc@numberingtoplevel{#1}}
+\def\@adjustnumbering{%
+  \if@longarticle
+  \numberwithin{equation}\cc@numberingtoplevel
+  \numberwithin{figure}\cc@numberingtoplevel
+  \numberwithin{table}\cc@numberingtoplevel
+  \if@cctheorems\if@standardtheorems\else
+    \numberwithin{answer}\cc@numberingtoplevel
+    \numberwithin{assumption}\cc@numberingtoplevel
+    \numberwithin{claim}\cc@numberingtoplevel
+    \numberwithin{conjecture}\cc@numberingtoplevel
+    \numberwithin{convention}\cc@numberingtoplevel
+    \numberwithin{corollary}\cc@numberingtoplevel
+    \numberwithin{counterexample}\cc@numberingtoplevel
+    \numberwithin{definition}\cc@numberingtoplevel
+    \numberwithin{exercise}\cc@numberingtoplevel
+    \numberwithin{fact}\cc@numberingtoplevel
+    \numberwithin{hypothesis}\cc@numberingtoplevel
+    \numberwithin{lemma}\cc@numberingtoplevel
+    \numberwithin{notation}\cc@numberingtoplevel
+    \numberwithin{note}\cc@numberingtoplevel
+    \numberwithin{observation}\cc@numberingtoplevel
+    \numberwithin{open}\cc@numberingtoplevel
+    \numberwithin{openquestion}\cc@numberingtoplevel
+    \numberwithin{problem}\cc@numberingtoplevel
+    \numberwithin{proposition}\cc@numberingtoplevel
+    \numberwithin{question}\cc@numberingtoplevel
+    \numberwithin{remark}\cc@numberingtoplevel
+    \numberwithin{result}\cc@numberingtoplevel
+    \numberwithin{theorem}\cc@numberingtoplevel
+    \numberwithin{thesis}\cc@numberingtoplevel
+    \numberwithin{warning}\cc@numberingtoplevel
+    \numberwithin{exampleexample}\cc@numberingtoplevel
+  \fi\fi
+\fi}
+\numberallwithin{section}% redo this in the preamble, if necessary
+%    \end{macrocode}
+%
+% \subsection{Warnings}
+%
+% \changes{v2.01}{2000/09/11}{Now some warnings are collected until
+%      the end \dots{}  Michael N{\"{u}}sken, Paderborn}
+%  \begin{macro}{\newwarning}
+%  Define a warning message.
+%    \begin{macrocode}
+\newcommand{\newwarning}[2]{%
+  \expandafter\gdef\csname cc@warn@#1\endcsname{#2}%
+  \expandafter\def\csname cc@warncount@#1\endcsname{0}}
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\ccwarning}
+%  Issue a warning.
+%    \begin{macrocode}
+\newcommand{\ccClassWarning}[1]{%
+  \@ifundefined{cc@warn@#1}{%
+    \ClassWarning{cc}{Undefined warning.\MessageBreak
+      This should never occur.
+      Please inform nuesken@bit.uni-bonn.de .}%
+    }{}%
+  \expandafter\ifcase\csname cc@warncount@#1\endcsname\relax
+  \ClassWarning{cc}{\csname cc@warn@#1\endcsname.\MessageBreak
+    Possible further occurencies of this warning will be\MessageBreak
+    collected until the end of the document.\MessageBreak
+    This one was}%
+  \or
+  \AtEndDocument{%
+    \ClassWarningNoLine{cc}{Repeated warning collected \csname
+      cc@warncount@#1\endcsname\space times:\MessageBreak
+      \csname cc@warn@#1\endcsname}%
+    }%
+  \else
+  \fi
+  \expandafter\count@=0\csname cc@warncount@#1\endcsname\relax
+  \advance\count@\@ne
+  \expandafter\xdef\csname cc@warncount@#1\endcsname{\the\count@}%
+  }
+%    \end{macrocode}
+%  \end{macro}
+%
+% \subsection{Diverse}
+%
+% \changes{v2.03}{2002/01/10}{Fixed bug: \cs{if@babel} is not properly
+%   set when this is called, removed non-babel case.  Michael
+%   N{\"{u}}sken, Paderborn}
+% \changes{v2.03}{2002/03/07}{Added languages french, italian and
+%   spanish to \cs{babel}\cs{def} and adjusted for it.  Michael
+%   N{\"{u}}sken, Paderborn}
+% \changes{v2.03}{2003/06/04}{Fixed bug: if babel is not loaded now
+%   but will be later, then \cs{addto} must put its definitions in a
+%   temporary macro and add it to the appropriate one only after the
+%   preamble if the desired macro is defined by then and forget about
+%   it otherwise.}
+% \changes{v2.03}{2004/06/21}{\cs{ccaddto} must not call
+%   \cs{AtBeginDocument} when called inside the document (as for example
+%   happens in algorithms...)}
+%    \begin{macrocode}
+% \providecommand{\extdef}[2]{%
+%     \ifx#1\@undefined\relax\def#1{}\fi%
+%     \toks@=\expandafter{#1}%
+%     \toks255={#2}%
+%     \edef#1{\the\toks@\the\toks255}}
+\providecommand{\addto}[2]{%
+  \expandafter\ccaddto\expandafter{\csname
+  cc@\string#1\endcsname}{#2}{#1}}
+% \ccaddto is almost a copy of babel's \addto.
+% It's arguments are #1 = \cc@\FOO, #2=material, #3 = \FOO,
+% where \FOO is the macro where the material should be added and
+% \cc@\FOO the temporary macro to hold thing until the beginning of
+% the document.  (Hopefully not too late for the first selectlanguage!)
+\newcommand{\ccaddto}[3]{%
+  \ifx#1\@undefined
+    \def#1{#2}%
+    \AtBeginDocument{\expandafter\ccaddtonow\expandafter{#1}#3}%
+  \else
+    \ifx#1\relax
+      \def#1{#2}%
+      \AtBeginDocument{\expandafter\ccaddtonow\expandafter{#1}#3}%
+    \else
+      {\toks@\expandafter{#1#2}%
+        \xdef#1{\the\toks@}}%
+    \fi
+  \fi
+}
+\newcommand{\ccaddtoINDOC}[3]{%
+  \ifx#1\@undefined
+    \def#1{#2}%
+  \else
+    \ifx#1\relax
+      \def#1{#2}%
+    \else
+      {\toks@\expandafter{#1#2}%
+        \xdef#1{\the\toks@}}%
+    \fi
+  \fi
+}
+\AtBeginDocument{\global\let\ccaddto\ccaddtoINDOC}
+\newcommand{\ccaddtonow}[2]{%
+  \ifx#2\@undefined
+    \def#2{#1}%
+  \else
+    \ifx#2\relax
+      \def#2{#1}%
+    \else
+      {\toks@\expandafter{#2#1}%
+        \xdef#2{\the\toks@}}%
+    \fi
+  \fi
+}
+% \@ifempty and \@ifnotempty are def'd in amsmath.sty, but we need it
+% here.
+\def\cc@ifempty#1{\cc@xifempty#1@@..\@nil}
+\long\def\cc@xifempty#1#2@#3#4#5\@nil{%
+  \ifx#3#4\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+\long\def\cc@ifnotempty#1{\cc@ifempty{#1}{}}
+%    \end{macrocode}
+%  \begin{macro}{\babel}
+%    This shall simplify the addition of multilanguage support.  A
+%    macro |#1| that shall hold a name is assigned a version in
+%    english |#2|, german |#3|, french |#4|, italian |#5|, and spanish
+%    |#6|.  The english version is the default.  Each non-empty
+%    version is added to the |\captions|\meta{language} of that
+%    language.
+%    Admittedly, this technique is limited.  So we replace it\dots
+%  \changes{v2.03}{2005/08/29}{Replaced \cs{babel}\cs{def} with a more
+%    flexible construction.}
+%    \begin{macrocode}
+%%% \def\oldbabel\def#1#2#3#4#5#6{\def#1{#2}%
+%%%   \cc@ifnotempty{#2}{\addto\captionsenglish{\def#1{#2}}}%
+%%%   \cc@ifnotempty{#3}{%
+%%%     \addto\captionsgerman{\def#1{#3}}%
+%%%     \addto\captionsngerman{\def#1{#3}}%
+%%%   }%
+%%%   \cc@ifnotempty{#4}{\addto\captionsfrench{\def#1{#4}}}%
+%%%   \cc@ifnotempty{#5}{\addto\captionsitalian{\def#1{#5}}}%
+%%%   \cc@ifnotempty{#6}{\addto\captionsspanish{\def#1{#6}}}%
+%%% }
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\newbabel}
+%    This shall simplify the addition of multilanguage support.  A
+%    macro |#1| that shall hold a name is assigned a version in
+%    english |#2|.  Further, that definition is added to
+%    |\captionsenglish|.  The optional argument |#3| is a comma
+%    seperated list of equations \meta{language}=\meta{translation}.
+%    Each non-empty translation is added to the
+%    |\captions|\meta{language} of that language.
+%    \begin{macrocode}
+\def\babel\def#1#2{%
+  \@ifnextchar[{\n@wbabel{#1}{#2}}{\n@wbabel{#1}{#2}[]}}
+\def\n@wbabel#1#2[#3]{%
+  \def#1{#2}%
+  \cc@ifnotempty{#2}{\addto\captionsenglish{\def#1{#2}}}%
+  \babeladdtranslations#1{#3}%
+}
+\def\b@beladdlang#1=#2=#3\@@@#4{%
+  \cc@ifnotempty{#2}{%
+    %%% \@ifundefined{captions#1}{%
+    %%%   \ClassWarning{cc}{Language `#1' undefined, ignoring
+    %%%     translation \string#4=#2.}%
+    %%% }{%
+    \expandafter\addto\csname captions#1\endcsname{\def#4{#2}}%
+    %%% }%
+  }%
+}
+%    \end{macrocode}
+%    You can use the macro |\babeladdtranslations| at any time to add
+%    translations.  Example:
+%    \begin{center}
+%      |\babeladdtranslations\treename{german=Baum,french=arbre}|
+%   \end{center}
+%    will add |\def\treename{Baum}| to |\captionsgerman| and so on.
+%    \begin{macrocode}
+\def\babeladdtranslations#1#2{%
+  \@for\@tempa:=#2\do{\expandafter\b@beladdlang\@tempa==\@@@#1}%
+}
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\condbreak}
+%    This is H.~Partls |\condbreak| from \Lpackage{refman}
+%    (\file{refman.sty}).  Using |\condbreak{|\meta{length}|}| allows
+%    a pagebreak if there is at most \meta{length} space left on the
+%    current page.
+%  \changes{v2.03}{2004/03/22}{Moved \cs{condbreak} to  \lpackage{ccaux}}
+%    \begin{macrocode}
+\def\condbreak#1{%
+  \vskip 0pt plus #1%
+  \pagebreak[3]%
+  \vskip 0pt plus -#1%
+  \relax}
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \begin{environment}{enumerate}
+%    We extend the \Lenv{enumerate} by an optional |*|.  This simply
+%    continues a previously terminated \Lenv{enumerate}.  Using
+%    |\begin{enumerate}*| means that a previously terminated list is
+%    continued.
+%  \changes{v2.03}{2004/03/22}{Moved \lenv{enumerate} modification to
+%    \lpackage{ccaux}}
+%    \begin{macrocode}
+\let\ccorg@enumerate\enumerate
+\def\enumerate{\@ifstar{\count251\c@enumi
+        \count252\c@enumii
+        \count253\c@enumiii
+        \count254\c@enumiv
+        \ccorg@enumerate
+        \c@enumi\count251
+        \c@enumii\count252
+        \c@enumiii\count253
+        \c@enumiv\count254}%
+        {\ccorg@enumerate}}
+%    \end{macrocode}
+%  \end{environment}
+%    \begin{macrocode}
+%
+%</ccaux>
+%    \end{macrocode}
+%
+%  \GetFileInfo{cclayout.sty}
+%  \CodelinePrefix{L}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%
+%  \begin{macro}{\contact}
+%  The following macros supplement the traditional |\author|,
+%  |\title| and |\date| declarations.  First, |\contact| declares the
+%  email address of the contact author.
+%    \begin{macrocode}
+%<*cclayout>
+\let\@contact\relax
+\newcommand{\contact}[1]{\gdef\@contact{#1}}
+\AtBeginDocument{\if@ccpublish
+  \@ifundefined{@contact}{%
+    \ClassWarningNoLine{cc}{Who is the contact author?\MessageBreak
+      Use \protect\contact\space in the preamble!}%
+    }{}%
+  \fi}
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\received}
+%  The macro |\received| stores its argument, the received date.
+%    \begin{macrocode}
+\let\@received\relax
+\newcommand{\received}[1]{\gdef\@received{#1}}
+\AtBeginDocument{\if@ccpublish
+  \@ifundefined{@received}{%
+    \ClassWarningNoLine{cc}{Missing received date.\MessageBreak
+      Use \protect\received\space in the preamble.}{}%
+    }{}%
+  \fi}
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\titlehead}
+%  The following macros supplement the traditional |\author|,
+%  |\title| and |\date| declarations.  First, |\titlehead| can be
+%  used to declare a shortened version of the title to be used in
+%  the running head.  It simply stores its argument in a macro.
+%    \begin{macrocode}
+\let\@titlehead\relax
+\newcommand{\titlehead}[1]{\gdef\@titlehead{#1}}
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\authorhead}
+%  |\authorhead| can be used to declare a different author list for
+%  use in the head line. Usually, this should be automatically correct
+%  without using this.  It simply stores its argument in a macro.
+%    \begin{macrocode}
+\let\@authorhead\@undefined
+\newcommand{\authorhead}[1]{\gdef\@authorhead{#1}}
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\authorlist}
+%  |\authorlist| can be used to declare a different author list for
+%  use in the title.  Usually, this should be automatically correct
+%  without using this.  It simply stores its argument in a macro.
+%    \begin{macrocode}
+\let\@authorlist\@undefined
+\newcommand{\authorlist}[1]{\gdef\@authorlist{#1}}
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{environment}{abstract}
+%  \begin{macro}{\Abstract}
+%  The abstract is declared by the environment \Lenv{abstract} or the
+%  command |\Abstract{|\meta{text}|}|.  It is required for \cc{},
+%  otherwise optional (although you get a warning if there is no
+%  abstract).  (Note that the article class defines an abstract
+%  environment while the book class does not.)  Note that in the
+%  environment \Lenv{abstract} |\cite| and |\ref| are not allowed!
+%  You must use the command |\Abstract| if you need citation or
+%  references.  The environment \Lenv{abstract} simply stores its
+%  contents in a box.
+%    \begin{macrocode}
+\newbox\@abstract
+\let\abstract\@undefined\let\endabstract\@undefined
+\babel\def\ccabstractname{Abstract}[%
+  german=Zusammenfassung,french=R\'esum\'e]
+\newenvironment{abstract}
+  {\global\setbox\@abstract\@abstr{\ccabstractname}}
+  {\end@abstr}
+%    \end{macrocode}
+%  |\Abstract| stores its argument in a token list.
+%    \begin{macrocode}
+\newtoks\@abstract@toks
+\newcommand{\Abstract}{\global\@abstract@toks}
+%    \end{macrocode}
+%  \end{macro}
+%  \end{environment}
+%  \begin{environment}{keywords}
+%  Keywords are given using the environment \Lenv{keywords} which is
+%  similar to \Lenv{abstract}.  It simply stores its contents
+%  in a box.
+%    \begin{macrocode}
+\newbox\@keywords
+\babel\def\cckeywordsname{Keywords}[%
+  german=Stichworte,french=Mot-cl\'e]
+\newenvironment{keywords}
+  {\global\setbox\@keywords\@abstr{\cckeywordsname}}
+  {\end@abstr}
+%    \end{macrocode}
+%  \end{environment}
+%  \begin{environment}{subject}
+%  The environment \Lenv{subject} declares the subject
+%  classification.  It simply stores its contents
+%  in a box.
+%    \begin{macrocode}
+\newbox\@subject
+\babel\def\ccsubjectclassificationname{Subject classification}[%
+  german=Klassifizierung,french=Classification de suj\`et]
+\newenvironment{subject}
+  {\global\setbox\@subject\@abstr{\ccsubjectclassificationname}}
+  {\end@abstr}
+%    \end{macrocode}
+%  \end{environment}
+%  \begin{environment}{@abstr}
+%  The environment \Lenv{@abstr} is for internal use only.  It puts
+%  the contents in a box, preceded by its argument as a title.
+%    \begin{macrocode}
+\newdimen\@abstrwidth
+\newenvironment{@abstr}[1]{%
+  \vbox\bgroup
+  \hsize\@abstrwidth
+  \@parboxrestore
+  \small
+  \textbf{#1. }\ignorespaces}
+{%
+  \strut\par
+  \vskip\z@
+  \egroup
+  \ignorespacesafterend}
+%    \end{macrocode}
+%  \end{environment}
+%  \begin{macro}{\noabstract}
+%  \begin{macro}{\nokeywords}
+%  \begin{macro}{\nosubject}
+%  Usually, abstract, keywords and subject classification are
+%  optional.  But when published in \cc{} they are required.  The
+%  following commands allow you to omit one or more of them without
+%  getting an error message.
+%    \begin{macrocode}
+\newif\if@abstractoptional
+\if@ccpublish\@abstractoptionalfalse\else\@abstractoptionaltrue\fi
+\newcommand{\noabstract}{\ClassWarning{cc}{You are using a non
+    documented feature}\@abstractoptionaltrue}
+\newif\if@keywordsoptional
+\if@ccpublish\@keywordsoptionalfalse\else\@keywordsoptionaltrue\fi
+\newcommand{\nokeywords}{\ClassWarning{cc}{You are using a non
+    documented feature}\@keywordsoptionaltrue}
+\newif\if@subjectoptional
+\if@ccpublish\@subjectoptionalfalse\else\@subjectoptionaltrue\fi
+\newcommand{\nosubject}{\ClassWarning{cc}{You are using a non
+    documented feature}\@subjectoptionaltrue}
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%  \end{macro}
+%  \begin{macro}{\subtitle}
+%  \begin{macro}{\version}
+%  The macros |\subtitle| and |\version| allow to add a subtitle or
+%  version below the title.
+%    \begin{macrocode}
+\def\@subtitle{}
+\newcommand{\subtitle}[1]{\def\@subtitle{#1}}
+\def\@version{}
+\newcommand{\version}[1]{\def\@version{#1}}
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%  \begin{macro}{\ccpublish}
+%  The macro |\ccpublish| sets all data for an article to be published
+%  in \cc{}.
+%  \changes{v2.03}{2005/08/27}{Changed label at end of document to
+%    |!end!document!| to avoid a problem with \lpackage{hyperref}.
+%    (\lpackage{hyperref} does not allow |@| as part of label names.)}
+%    \begin{macrocode}
+\def\@cctxt{}
+\newif\if@cchead
+\newcommand{\ccpublish}[4]{%
+  \global\@ccpublishtrue
+  \global\@abstractoptionalfalse% Abstract required
+  \global\@keywordsoptionalfalse% Keywords required
+  \global\@subjectoptionalfalse% Subject class. required
+  \global\@ccheadtrue
+  \gdef\@ccyear{#1}%
+  \gdef\@ccvolume{#2}%
+  \gdef\@ccnumber{#3}%
+  \gdef\@ccfirst{#4}%
+  \gdef\@cctxt{cc \textbf{#2} (#1)}%
+  \global\@autotitletrue
+  \AtBeginDocument{\addtocounter{section}{-1}\refstepcounter{section}}%
+  \AtEndDocument{\label{!end!document!}}%
+  }
+\newcommand{\noccpublish}[1]{%
+  \global\@ccpublishfalse
+  \global\@abstractoptionaltrue% Abstract required
+  \global\@keywordsoptionaltrue% Keywords required
+  \global\@subjectoptionaltrue% Subject class. required
+  \global\@ccheadfalse
+  \gdef\@cctxt{#1}%
+  %%\global\@twosidefalse
+  }
+%    \end{macrocode}
+%  \end{macro}
+%  
+%  \begin{macro}{\printed}
+%  \begin{macro}{\electronic}
+%  The printed and the electronic version of \cc{} have different
+%  ISSNs.  |\printed| and |\electronic| set the corresponding ISSN.
+%  The ISSN for the printed version is preselected.
+%    \begin{macrocode}
+\def\printed@issn{1016-3328}%
+\def\electronic@issn{1420-8954}%
+\newcommand{\printed}{\let\issn\printed@issn}
+\newcommand{\electronic}{\let\issn\electronic@issn}
+\printed
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%  All environments and macros from this section can only be used in
+%  the preamble.
+%  \changes{v2.01}{2000/07/12}{Some things shall work until \cs{maketitle}!}
+%    \begin{macrocode}
+% \@onlypreamble\author
+% \@onlypreamble\title
+% \@onlypreamble\abstract
+% \@onlypreamble\Abstract
+% \@onlypreamble\keywords
+% \@onlypreamble\subject
+% \@onlypreamble\titlehead
+% \@onlypreamble\authorhead
+% \@onlypreamble\received
+\@onlypreamble\ccpublish
+\@onlypreamble\electronic
+\@onlypreamble\printed
+%    \end{macrocode}
+%
+% \subsection{Extract information from \cs{@author}}
+%
+%  The title is produces using the information provided by
+%  |\@author|.  But this contains the entire addresses.  The first
+%  line of each address is considered to be the name of an author.
+%  These names then occur in the title seperated by |\authorsep| and
+%  |\authorlastsep|.
+%    \begin{macrocode}
+\def\extractnamesfr@m@author{%
+  \@ifundefined{@authorlist}{%
+    \let\and\ignorespaces
+    \let\latest@name\relax
+    \count@\z@
+    \expandafter\extract@names\@author\and\and\@nil}{%
+    \@authorlist
+    }
+  }
+\def\extract@names#1\and#2\@nil{%
+  \cc@ifempty{#1}{%
+    \unskip\if\and\relax\else
+    \ifnum\count@>\tw@\authorlastsepmany\else\authorlastsep\fi
+    \fi\latest@name
+    \let\next\gobble@nil}%
+  {%
+    \unskip\and\latest@name
+    \ifx\latest@name\relax\else\let\and\authorsep\fi
+    \extract@name#1\\\@nil
+    \let\next\extract@names}%
+  \next#2\@nil}
+\def\gobble@nil#1\@nil{}
+\def\extract@name#1\\#2\@nil{\advance\count@\@ne\def\latest@name{#1}}
+%    \end{macrocode}
+%  \begin{macro}{\authorsep}
+%  \begin{macro}{\authorlastsep}
+%  \begin{macro}{\authorlastsepmany}
+%  These two macros are used between authors in the title that
+%  |\maketitle| produces.  |\authorlastsep| or |\authorlastsepmany| is
+%  used between the last two authors (the latter if there are more
+%  than two authors), otherwise |\authorsep| is used.  The negative
+%  penalty favors a line break after the comma.
+%  \changes{v2.01}{2000/07/06}{Added \cs{authorlastsepmany}.  Michael
+%    N{\"{u}}sken, Paderborn}
+%  \changes{v2.02}{2001/05/22}{Introduced \cs{AND}.  Michael
+%    N{\"{u}}sken, Paderborn}
+%    \begin{macrocode}
+\babel\def\ccAND{and}[german=und,french=et]
+\def\authorsep{,\penalty-5\ }
+\def\authorlastsep{\penalty-5\ \ccAND{} }
+\def\authorlastsepmany{,\penalty-5\ \ccAND{} }
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%  \end{macro}
+%  
+%  The running head uses either the name of the only author, or the
+%  last names of up to three authors, or the last name of the first
+%  author supplemented by |\textit{et al.}|.  This informations
+%  usually is extracted from the author list declared by |\author| in
+%  |\@author|.  Finally, it is stored in |\@authorhead|.
+%    \begin{macrocode}
+\newtoks\latest@lastname
+\newtoks\@firstname
+\let\@firstlastname\@temptokena
+\def\extractauthorheadfr@m@author{%
+  {%
+    \let\and\@empty
+    \latest@lastname{}%
+    \toks@{}%
+    \count@\m@ne
+    \expandafter\extract@lastnames\@author\and\and\@nil
+    \ifnum\count@<2
+    \xdef\@authorhead{\the\@firstname}
+    \else\ifnum\count@<4
+    \xdef\@authorhead{\the\toks@}%
+    \else
+    \xdef\@authorhead{\the\@firstlastname\noexpand\textit{ et al.}}%
+    \fi\fi
+    }%
+  \setbox0\hbox{\small\let\thanks\@gobble\@authorhead}%
+  \ifdim\wd0>.7\textwidth
+  \ClassWarningNoLine{cc}{Authorhead too long. Use
+    \protect\authorhead\space to specify\MessageBreak a shortened
+    author list for the headings!}%
+  \fi
+  }
+\def\extract@lastnames#1\and#2\@nil{%
+  \advance\count@\@ne
+  \cc@ifempty{#1}{%
+    \expandafter\cc@ifempty\expandafter{\the\toks@}{%
+      \edef\@tempa{\the\latest@lastname}%
+      }{%
+      \edef\@tempa{\the\toks@\authorheadlastsep\the\latest@lastname}%
+      }%
+    \toks@\expandafter{\@tempa}%
+    \let\next\gobble@nil
+    }{%
+    \expandafter\cc@ifempty\expandafter{\the\toks@}{%
+      \edef\@tempa{\the\latest@lastname}%
+      }{%
+      \edef\@tempa{\the\toks@\authorheadsep\the\latest@lastname}%
+      }%
+    \toks@\expandafter{\@tempa}%
+    \extract@lastname#1\\\@nil
+    \let\next\extract@lastnames}%
+  \ifnum\count@=\@ne\@firstlastname\expandafter{\the\toks@}\fi
+  \next#2\@nil}
+\def\gobble@nil#1\@nil{}
+\def\extract@lastname#1\\#2\@nil{%
+  \ifnum\count@=\z@\@firstname{#1}\fi
+  \extract@lastname@#1 \@nil}
+\def\extract@lastname@#1 #2\@nil{%
+  \cc@ifempty{#2}{\latest@lastname{#1}}{\extract@lastname@#2\@nil}}
+%    \end{macrocode}
+%  \begin{macro}{\authorheadsep}
+%  \begin{macro}{\authorheadlastsep}
+%  These two macros are used to seperate authors in the running head.
+%    \begin{macrocode}
+\def\authorheadsep{, }
+\def\authorheadlastsep{ \& }
+\def\authorheadlastsepmany{ \& }
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%  At the |\begin{document}| the |\@authorhead| is extracted from
+%  |\@author|, if no |\authorhead| command was used in the preamble.
+%    \begin{macrocode}
+\let\@author\relax
+\AtBeginDocument{%
+  \@ifundefined{@author}{\if@ccpublish
+    \ClassError{cc}{No \protect\author\space given}{Define an author
+      list in the preamble by \protect\author{...}}%
+    \else
+    \ClassWarningNoLine{cc}{No \protect\author\space given}%
+    \fi}{}
+  \@ifundefined{@authorhead}{\extractauthorheadfr@m@author}{}}
+%    \end{macrocode}
+%  At |\begin{document}| we can also check whether the |\@title|
+%  (declared by |\title|) or the |\@titlehead| (declared by
+%  |\titlehead|) is not too long.
+%    \begin{macrocode}
+\let\@title\relax
+\AtBeginDocument{%
+  \@ifundefined{@title}{\if@ccpublish
+    \ClassError{cc}{No \protect\title\space given}{Define a title in
+      the preamble by \protect\title{...}}%
+    \else
+    \ClassWarningNoLine{cc}{No \protect\title\space given}%
+    \fi}{}
+  \setbox0\hbox{\small\let\thanks\@gobble
+    \@ifundefined{@titlehead}{\let\\\ \@title}{\@titlehead}}%
+  \ifdim\wd0>.7\textwidth
+  \ClassError{cc}{Title too long for running head.\MessageBreak
+    Use \protect\titlehead\space to specify\MessageBreak a shortened
+      title for the headings!}{}%
+  \fi}
+%    \end{macrocode}
+%  For |\makeendtitle|, the affiliations which were given with the
+%  |\author| command to |\@author| must be formatted.  The address
+%  blocks are combined in a two column \Lenv{tabular}.
+%    \begin{macrocode}
+\def\extractaffilsfr@om@author{%
+  \parindent\z@
+  \init@affils
+  \begin{tabular}{@{}ll@{}}%
+    \expandafter\extract@affils\@author\and\and\@nil
+  \end{tabular}
+  \par
+}
+\def\init@affils{%
+  \let\and\relax
+  \@oddaffiltrue
+  }
+\def\extract@affils#1\and#2\@nil{%
+  \cc@ifempty{#1}{\let\next\gobble@nil}{%
+    \extract@affil#1\\\@nil
+    \let\next\extract@affils}%
+  \next#2\@nil}
+%    \end{macrocode}
+%  Each address is put in a \Lenv{@ffiliation} environment (defined
+%  below).  The |\currentaddress| macro is defined with the knowledge
+%  of the author name (which is the first line of the address).  Also
+%  the author name is typed in small capitals.
+%    \begin{macrocode}
+\def\extract@affil#1\\#2\@nil{%
+  \def\currentaddress{\otheraddress
+    Current address of \textsc{\ignorespaces#1}:\\}%
+  \begin{@ffiliation}
+    \textsc{\ignorespaces#1}\\#2
+  \end{@ffiliation}
+  \affilsep}
+%    \end{macrocode}
+%  \begin{macro}{\otheraddress}
+%  \begin{macro}{\affilsep}
+%  The macro |\otheraddress| seperates two address blocks for one
+%  author.  |\affilsep| simply decides whether to switch to the next
+%  column or to a new line in the surrounding \Lenv{tabular}.
+% \changes{v2.01}{2001/01/23}{Changed odd affiliation seperator.
+%   Michael N{\"{u}}sken, Paderborn}
+%    \begin{macrocode}
+\newcommand{\otheraddress}{\end{@ffiliation}\affilsep
+  \begin{@ffiliation}}
+\def\affilsep{%
+  \if@oddaffil\odd@sep\@oddaffilfalse
+  \else\even@sep\@oddaffiltrue
+  \fi
+  }
+\newif\if@oddaffil
+\def\odd@sep{&}%
+%\def\even@sep{\\*[\medskipamount]}%
+\def\even@sep{\end{tabular}\par\begin{tabular}{@{}ll@{}}}%
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%  \begin{environment}{@ffiliation}
+%    The environment \Lenv{@ffiliation} is used for each address
+%    block.  It produces a minipage whose lines are set like verse
+%    lines:  if a line is too long it continues indented.
+%    \begin{macrocode}
+\newenvironment{@ffiliation}
+               {%
+                 \minipage[t]{.48\hsize}
+                 \dimen@\hsize \advance\dimen@ -1.5em
+                 \everypar{\parshape 2 \z@ \hsize 1.5em \dimen@}%
+                 \def\\{\unskip\par}%
+                 }
+               {\strut\par\medskip\endminipage}
+%    \end{macrocode}
+%  \end{environment}
+%
+% \subsection{Page layout}
+%
+%  The document's text width must be exactly 141~mm; its height must be exactly
+%  213~mm from the top of caps in header to the baseline of the bottom line
+%  (disregarding descenders like `p' or `g' at the bottom).
+%  (Note that this is achieved by setting |\textheight| to 200~mm.)
+%  The abstract's width must be 120~mm.
+% \changes{v2.01}{2001/02/22}{The text area is only changed if
+%   \lclo{cctextarea} is active. Michael N{\"{u}}sken, Paderborn}
+% \changes{v2.01}{2001/08/20}{Removed bug: \cs{@abswidth} must always
+%   be defined.  Michael N{\"{u}}sken, Paderborn}
+%    \begin{macrocode}
+\if@cctextarea
+\textwidth=141mm
+\@abstrwidth=120mm
+\textheight=200mm
+\topmargin=0mm
+\oddsidemargin=12mm
+\evensidemargin=12mm
+\marginparwidth=25mm
+\headheight=1.25\headheight
+\ifnum\@marginmode<\z@\@marginmode\z@\fi
+\else
+\@abstrwidth0.85\textwidth
+\fi
+%    \end{macrocode}
+%  We fit the margins so that 1~in + |\oddsidemargin| + |\textwidth| +
+%  |\evensidemargin| + 1~in = |\paperwidth|.  (Note that the margins
+%  are usually measured with an offset of 1~in on each side.)
+%    \begin{macrocode}
+\typeout{Now adjusting margins.}
+\ifcase\@marginmode
+% marginmode 0
+\AtEndOfClass{%
+\oddsidemargin\paperwidth
+\advance\oddsidemargin-2in
+\advance\oddsidemargin-\textwidth
+\advance\oddsidemargin-\evensidemargin}
+\or
+% marginmode 1
+\AtEndOfClass{%
+\oddsidemargin\paperwidth
+\advance\oddsidemargin-2in
+\advance\oddsidemargin-\textwidth
+\evensidemargin=5mm
+\advance\oddsidemargin-\evensidemargin}
+\or
+% marginmode 2
+\AtEndOfClass{%
+\oddsidemargin\paperwidth
+\advance\oddsidemargin-2in
+\advance\oddsidemargin-\textwidth
+\oddsidemargin.5\oddsidemargin
+\evensidemargin\oddsidemargin}
+\fi
+%    \end{macrocode}
+%  Finally, the |\marginparwidth| is recalculated so that it does not
+%  fall off the paper.
+%    \begin{macrocode}
+\AtEndOfClass{%
+\marginparwidth1in
+\advance\marginparwidth-5mm
+\advance\marginparwidth-2\marginparsep
+\ifdim\evensidemargin<\oddsidemargin
+\advance\marginparwidth\evensidemargin
+\else
+\advance\marginparwidth\oddsidemargin
+\fi
+}
+%    \end{macrocode}
+% In this document, we have marginmode
+% \expandafter\the\csname @marginmode\endcsname{}
+% \expandafter\ifcase\csname @marginmode\endcsname
+%    (classical margins)
+% \or(print margins)
+% \or(balanced margins)
+% \fi
+% which results in the
+% following values:
+% \begin{center}
+%   \makeatletter
+%   \def\themm#1{\dimen@5.6233568#1\relax\divide\dimen@ by 16
+%     \expandafter\@themmchk\the\dimen@0000\@@@
+%     \edef\@tempa{\noexpand\th@mm\the\dimen@}\@tempa}
+%   \def\@themmchk#1.#2#3#4#5#6\@@@{\if#5p\else\if#5t\else\ifnum#5>4
+%     \advance\dimen@.0005pt\fi\fi\fi}
+%   \def\@gobblethree#1#2#3{}
+%   \edef\@tempa{\noexpand\def\noexpand\th@mm##1\expandafter
+%       \@gobblethree\the\p@}\@tempa{\@gobblerest#1{0}0000mm}
+%   \def\@gobblerest#1.#2#3#4#5mm{#1.#2#3#4mm}
+% \begin{tabular}[t]{l@{ = }r\VRULE}
+%   |\paperwidth| & \themm\paperwidth\\\hline
+%   |1in| & 25.400mm\\
+%   |\evensidemargin| & \themm\evensidemargin\\
+%   |\textwidth| & \themm\textwidth\\
+%   |\oddsidemargin| & \themm\oddsidemargin\\
+%   |1in| & 25.400mm\\\hline
+%   |\marginparsep| & \themm\marginparsep\\
+%   |\marginparwidth| & \themm\marginparwidth\\
+% \end{tabular}\begin{tabular}[t]{l@{ = }r}
+%   |\paperheight| & \themm\paperheight\\\hline
+%   |1in| & 25.400mm\\
+%   |\topmargin| & \themm\topmargin\\
+%   |\headheight| & \themm\headheight\\
+%   |\headsep| & \themm\headsep\\
+%   |\textheight| & \themm\textheight\\
+%   |\footskip| & \themm\footskip\\
+% \end{tabular}
+% \end{center}
+%
+%  \begin{macro}{\ps@cc}
+%    The page style \texttt{cc} is defined.   It uses only running
+%    heads.  On right (odd) pages, the title is written, on left
+%    (even) pages, the author(s) appear.  Further, the page number on
+%    the outer side and the journal identification (if |\ccpublish|
+%    was used) are printed.  Moreover, a head rule of width
+%    |\headrulewidth| is produced.  Note that |\ccpublish| disables
+%    this.
+%    \begin{macrocode}
+\newskip\headerindent \headerindent=10mm
+\newdimen\headrulewidth \headrulewidth.4pt
+\def\ps@cc{\let\@mkboth\markboth
+     \def\@oddhead{\vbox{\hbox to\textwidth{\reset@font\strut
+         {\small\@cctxt}%
+         \hfil
+         {\small
+           \@ifundefined{@titlehead}{%
+             \let\\\ %
+             \@title
+             }{%
+             \@titlehead
+             }}%
+         \hbox to\headerindent{\hfil\thepage}%
+         }%
+       \if@ccpublish\else
+       \kern2.6\p@
+       \hrule\@height\headrulewidth\kern-\headrulewidth
+       \kern-2.6\p@
+       \fi
+       \vskip\z@
+       }%
+     }%
+     \def\@oddfoot{}
+     \def\@evenhead{\vbox{\hbox to\textwidth{\reset@font\strut
+         \hbox to\headerindent{\thepage\hfil}%
+         {\small\@authorhead}%
+         \hfil
+         {\small\@cctxt}%
+         }%
+       \if@ccpublish\else
+       \kern2.6\p@
+       \hrule\@height\headrulewidth\kern-\headrulewidth
+       \kern-2.6\p@
+       \fi
+       \vskip\z@
+       }%
+     }%
+     \let\@evenfoot\@oddfoot
+     }
+%    \end{macrocode}
+%  \end{macro}
+%  Select \cc's page style at the end of the class.
+%    \begin{macrocode}
+\AtEndOfClass{\pagestyle{cc}}
+%    \end{macrocode}
+%
+%  If \Lclo{noautotitle} was not used, first and last page are
+%  generated automatically.
+%  \changes{v2.00}{2000/03/21}{Repairing \cs{cite} in \cs{Abstract}
+%    with option \protect\Lclo{natbib}. \cs{maketitle} must be
+%    executed only after \protect\Lpackage{natbib}'s
+%    \cs{AtBeginDocument} commands have been done.}
+%  \changes{v2.00}{2000/06/21}{Dirty trick.  \cs{maketitle} must be
+%    called after all other things \cs{AtBeginDocument} (especially
+%    after those inserted by \protect\Lpackage{natbib}) in order to
+%    handle citations correctly.  This is done via \cs{@onlypreamble}
+%    that disables the first token of its argument and executes the
+%    rest.}
+%    \begin{macrocode}
+\AtEndOfClass{%
+  \AtBeginDocument{\@onlypreamble{\author{\if@autotitle\maketitle\fi}}}
+  %\AtBeginDocument{\if@autotitle\maketitle\fi}
+  \AtEndDocument{\if@autotitle\makeendtitle\fi}
+  }
+%    \end{macrocode}
+%  
+%  \begin{macro}{\maketitle}
+%    |\maketitle| generates the first page.  It also produces errors
+%    or warnings if abstract, keywords, or subject are missing.
+%  \changes{v2.02}{2001/08/29}{Changed Abstract to quote. MN, Paderborn}
+%  \changes{v2.03}{2005/08/27}{Changed Abstract to @abstr. MN, Bonn}
+%    \begin{macrocode}
+\def\fourdigits#1{\ifnum#1<10\relax000#1\else
+  \ifnum#1<100\relax00#1\else
+  \ifnum#1<1000\relax0#1\else
+  #1\fi\fi\fi}
+\def\twodigits#1{\ifnum#1<10\relax0#1\else
+  \ifnum#1<100\relax#1\else
+  #1\fi\fi}
+\def\vertrulea{\rule[-7.583pt]{0pt}{7.583pt}}
+\def\vertruleb{\rule{2.25pt}{10.2pt}}
+\newtoks\cite@hook
+\renewcommand{\maketitle}{%
+  \global\@topnum\z@   % Prevents figures from going at top of page.
+  \cite@hook{}%
+  \if@cchead
+  \vbox to\z@{\vss
+    \@ifundefined{r@!end!document!}{\@tempcnta\z@}{%
+      \@tempcnta\@ne
+      \advance\@tempcnta-\@ccfirst
+      \edef\@tempa{%
+         \expandafter\@secondoftwo\csname r@!end!document!\endcsname}%
+      \advance\@tempcnta\@tempa%
+      }%
+    \setcounter{page}{\@ccfirst}%
+    \hbox to\textwidth{%
+      \vbox to\z@{\vss
+        \baselineskip=12pt%
+        \halign{\ixpt##\hfil\cr
+          comput. complex.~\textbf{\@ccvolume}~(\@ccyear),
+          \thepage\ -- \pageref{!end!document!}\cr
+          \issn/\expandafter\@gobbletwo\@ccyear%
+          %% use + instead                            --?
+          /\twodigits{\@ccnumber}\fourdigits{\thepage}--\the\@tempcnta\ 
+          \$ 1.50+0.20/0\cr}}\hss
+      \vbox to\z@{\vss
+        \offinterlineskip%
+        \halign{##&##\hfil\cr
+          \vertrulea&\ixpt
+          \copyright{} Birkh{\"{a}}user Verlag, Basel \@ccyear\cr
+          \noalign{\hrule}
+          \vertruleb\hskip1mm&%
+          \vbox to\z@{\vbox to\z@{\vss
+              \hbox{\xptsfbx computational complexity}}\vss}%
+          \cr}}}\vskip47.333pt}
+  \fi
+  \hrule\@height\z@
+  \vskip2.2ex% 4.0mm
+  \relax
+  \begin{center}
+    \if@ccpublish
+      \renewcommand{\footnote}[1]{\ClassWarningNoLine{cc}{There are no
+          footnotes allowed in title or author.\MessageBreak
+          Think about moving your remark to the acknowledgements}}%
+      \let\thanks\footnote
+    \else
+      \renewcommand{\footnote}[1]{\ClassWarningNoLine{cc}{In title or
+          author \protect\footnote\space does not work.\MessageBreak
+          Avoid footnotes or use \protect\thanks}}%
+      \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
+      \def\@makefnmark{%
+        \rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
+      \long\def\@makefntext##1{\parindent 1em\noindent
+        \hb@xt@1.8em{%
+          \hss\@textsuperscript{\normalfont\@thefnmark}}##1}%
+    \fi
+    {%
+      \Large\bfseries
+      \def\\{\penalty-\@M}%
+      \expandafter\MakeUppercase\expandafter{\@title}%
+      \par
+      }%
+    \@ifundefined{@subtitle}{}{{%
+        \large\itshape
+        \@subtitle
+        \par
+        }}
+    \@ifundefined{@version}{}{{%
+        \large\itshape
+        \@version
+        \par
+        }}
+    \bigskip
+    \vskip1.21ex% 2.2mm
+    \vskip\z@
+    {%
+      \large\scshape
+      \extractnamesfr@m@author
+      \par
+      }%
+    \if@ccpublish
+    \ifx\@date\today\else
+    \ClassWarningNoLine{cc}{Date ignored! (\@date)}%
+    \fi
+    \else{%
+      \vskip1ex
+      \large\@date\par
+      }\fi
+    \def\@tempa{\vskip5.5ex\let\@tempa\relax}%
+    \expandafter\cc@ifempty\expandafter{\the\@abstract@toks}{%
+      \ifvoid\@abstract
+        \if@abstractoptional
+        \ClassWarningNoLine{cc}{Missing abstract}%
+        \else
+        \ClassError{cc}{Missing abstract}
+        {Define an abstract in the preamble using
+          \protect\begin{abstract} ... \protect\end{abstract}.}%
+        \fi
+      \else
+        \@tempa\leavevmode\box\@abstract\par
+      \fi
+      }{%
+      \ifvoid\@abstract\else
+      \ClassWarningNoLine{cc}{Two abstracts,
+        using the one defined by \protect\Abstract}%
+      \fi
+      \@tempa\leavevmode
+      \@abstr{\ccabstractname}
+        \the\@abstract@toks
+      \end@abstr
+      }
+    \ifvoid\@keywords
+      \if@keywordsoptional
+      \ClassWarningNoLine{cc}{Missing keywords}%
+      \else
+      \ClassError{cc}{Missing keywords}
+      {Define keywords in the preamble using
+        \protect\begin{keywords} ... \protect\end{keywords}.}%
+      \fi
+    \else
+      \@tempa\leavevmode\box\@keywords\par
+    \fi
+    \ifvoid\@subject
+      \if@subjectoptional
+      \ClassWarningNoLine{cc}{Missing subject classification}%
+      \else
+      \ClassError{cc}{Missing subject classification}
+      {Define a subject classification in the preamble using
+        \protect\begin{subject} ... \protect\end{subject}.}%
+      \fi
+    \else
+      \@tempa\leavevmode\box\@subject\par
+    \fi
+    \@thanks
+  \end{center}
+  \thispagestyle{empty}
+  \setcounter{footnote}{0}%
+  \global\let\maketitle\relax
+  \global\let\thanks\@gobble
+  \global\let\@thanks\relax
+%    \end{macrocode}
+%  \changes{v2.01}{2000/07/12}{Some things shall work until
+%    \cs{maketitle} and not longer!}
+%    \begin{macrocode}
+  \global\let\author\@notprerr
+  \global\let\title\@notprerr
+  \global\let\abstract\@notprerr
+  \global\let\Abstract\@notprerr
+  \global\let\keywords\@notprerr
+  \global\let\subject\@notprerr
+  \global\let\titlehead\@notprerr
+  \global\let\authorhead\@notprerr
+  \global\let\received\@notprerr
+  \vskip\z@
+  \par\@afterindentfalse\@afterheading
+  }
+\let\@maketitle\@undefined
+\let\and\@undefined
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\makeendtitle}
+%    |\makeendtitle| is the counterpart of |\maketitle|, it generates
+%    the end of the last page with received date and affiliations.
+%    \changes{v2.00}{2000/03/10}{Added \cs{par}.}
+%    \changes{v2.01}{2000/08/23}{Added \cs{ManuscriptReceived}.}
+%    \begin{macrocode}
+\babel\def\ManuscriptReceived{Manuscript received }[%
+  german=Manuskript erhalten: ,%
+  french=Manuscrit re\c{c}u: ]
+\newcommand{\makeendtitle}{%
+  \par
+  \parindent\z@
+  \bigskip
+  \@ifundefined{@received}{}{%
+    \noindent{\small
+      \ManuscriptReceived\@received
+      \par}%
+    \medskip
+    }%
+  {\small
+    \extractaffilsfr@om@author
+    }%
+  %%\clearpage
+  \gdef\makeendtitle{\ClassWarning{cc}{\protect\makeendtitle\space
+      multiply used!}}
+  }
+%</cclayout>
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \def\filename{cc-cls.sty}
+%  \CodelinePrefix{S}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%
+%  It allows to use the document class \Lenv{cc} as a package via
+%  |\usepackage{cc-cls}|.
+%    \begin{macrocode}
+%<*ccsty>
+\input{cc.cls}
+%</ccsty>
+%    \end{macrocode}
+%
+%  \GetFileInfo{relabel.sty}
+%  \CodelinePrefix{R}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%    \begin{macrocode}
+%<*relabel>
+%    \end{macrocode}
+% \iffalse meta-comment
+%%% File: relabel.sty
+%% Copyright (C) 1998 Michael N\"{u}sken, all rights reserved.
+%
+% Copyright 1996 Michael N\"{u}sken.
+% All rights reserved. For further copyright information see the file
+% legal.txt, and any other copyright indicated in this file.
+% 
+%  This system 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.
+% 
+% 
+% IMPORTANT NOTICE:
+% 
+% Please do not request updates from us directly.  Distribution is
+% done through Mail-Servers and TeX organizations.
+% 
+% You are not allowed to change this file.
+% 
+% You are allowed to distribute this file.
+% 
+% You are NOT ALLOWED to take money for the distribution or use of
+% either this file or a changed version, except for a nominal charge
+% for copying etc.
+% \fi
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{relabel}[1998/09/07 v1.01 Relabel. MNuesken]
+%    \end{macrocode}
+%
+%  We declare some options.  \Lclo{prefixes} and \Lclo{noprefixes} turn
+%  the effects of this packages on or off.  \Lclo{bare} and
+%  \Lclo{nobare} turn the additional |\bare\ref|erences on or off.
+%    \begin{macrocode}
+\newif\if@prefixes
+\DeclareOption{prefixes}{\@prefixestrue}
+\DeclareOption{noprefixes}{\@prefixesfalse}
+\newif\if@bare
+\DeclareOption{bare}{\@baretrue}
+\DeclareOption{nobare}{\@barefalse}
+\ExecuteOptions{prefixes,nobare}
+\ProcessOptions\relax
+%    \end{macrocode}
+%
+% \subsection{Modifyable labelling and counting}
+%
+%  This new |\Label| command allows you to style the resulting labels
+%  on your own.
+%    \begin{macrocode}
+\newcommand*{\Label}[2]{\modify{#2}\label{#1}\revert}
+\newcommand*{\modify}[1]{\@bsphack%
+  \global\let\revert@currentlabel\@currentlabel
+  \global\let\revert@bare@currentlabel\@bare@currentlabel
+  \def\@tempb##1{#1}
+  \protected@edef\@currentlabel{\@tempb{\@currentlabel}}%
+  \@esphack}
+\newcommand*{\revert}{\@bsphack
+  \global\let\@currentlabel\revert@currentlabel
+  \global\let\@bare@currentlabel\revert@bare@currentlabel
+  \@esphack}
+\let\revert@currentlabel\relax
+\let\revert@bare@currentlabel\relax
+\newcommand*{\setcurrentlabel}[1]{%
+  \protected@edef\@currentlabel{#1}%
+  \let\@bare@currentlabel\@currentlabel}
+%    \end{macrocode}
+%  Provide some macros to handle prefixes and labels.
+%  \begin{macro}{\defprefix}
+%    This allows the definition of a prefix for a defined counter.
+%    This prefix is attached to each reference to an instance of this
+%    counter.  It can also be used for postfixes as follows:
+%    |\defprefix{equation}#1{(#1)}| defines a `prefix' for the
+%    equation counter which adds a \emph{pair} of parentheses.
+%    \begin{macrocode}
+\newcommand*{\defprefix}[1]{\if@prefixes
+  \def\next{\expandafter\def\csname p\string @#1\endcsname}%
+  \else\def\next{\def\next}\fi\next}
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\useprefix}
+%    Use the prefix.
+%    \begin{macrocode}
+\newcommand*{\useprefix}[1]{\csname p\string @#1\endcsname}
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\uselabel}
+%    Use the reference to the \meta{counter} given as first argument.
+%    This is intended for use in prefixes to subcounters.
+%    \begin{macrocode}
+\newcommand*{\uselabel}[1]{\csname p\string @#1\expandafter
+  \endcsname\csname the#1\endcsname}
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\defprefixcond}
+%    Obsolete.
+%    \begin{macrocode}
+\def\defprefixcond#1#2{\defprefix{#1}{\conduselabel{#2}}}
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\Iflabelchanged}
+%    Takes two arguments: a \meta{counter} and some \meta{conditional
+%    text}.  When referenced the \meta{conditional text} is printed if
+%    the \meta{counter} has the same value as at the |\label|
+%    command.
+%
+%    Attention! In the command |\EnumerationInTheorems| in the package
+%    \Lclass{ccthm} this had to be replaced by a more sophisticated
+%    approach: The basic value had to be the one that produced the
+%    heading of the surrounding theorem like environment rather than
+%    the actual value of this same counter which can change also if,
+%    e.g., an \Lenv{equation} is used.
+%    \begin{macrocode}
+\newcommand*{\Iflabelchanged}[2]{%
+  \protect\protect\protect\@@conduselabel
+  {{\protect\csname the#1\endcsname}}%
+  {{\csname the#1\endcsname}}%
+  {#2}%
+  }
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\conduselabel}
+%    Obsolete.
+%    \begin{macrocode}
+\def\conduselabel#1{% obsolete
+  \protect\protect\protect\@@conduselabel
+  {{\protect\csname the#1\endcsname}}%
+  {{\csname the#1\endcsname}}%
+  {\csname p\string @#1\endcsname{\csname the#1\endcsname}}%
+  }%
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\@@conduselabel}
+%    Compare the expanded version of the first two arguments.  If
+%    these are not equal or |\longlabeltrue| and not |\shortlabeltrue|
+%    then print the third argument.
+%    \begin{macrocode}
+\def\@@conduselabel#1#2#3{{%
+    \let\protect\relax
+%     \let\@tempa\relax\let\@tempc\relax\relax\relax
+    \edef\@tempa{#1}%
+    \edef\@tempc{#2}%
+%     \show\@tempa\show\@tempc
+    \ifx\@tempa\@tempc\relax\@condlabelfalse\else\@condlabeltrue\fi
+    \iflonglabel\@condlabeltrue\fi
+    \ifshortlabel\@condlabelfalse\fi
+    \if@condlabel #3\fi
+    }}
+\newif\if@condlabel
+\newif\iflonglabel  \longlabelfalse
+\newif\ifshortlabel \shortlabelfalse
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\short\ref}
+%  \begin{macro}{\whole\ref}
+%  \begin{macro}{\quiet\ref}
+%    Variing \texttt{\string\ref}'s.  |\short\ref{|\meta{key}|}|
+%    always prints a short version, that is omit as much as possible
+%    in |\@@conduselabel|.  |\whole\ref{|\meta{key}|}| forces the long
+%    version.  |\quiet\ref{|\meta{key}|}| prints nothing (this was
+%    once used to enable to analyse the reference structure of a
+%    complicated proof).
+%    \begin{macrocode}
+\def\short\ref#1{{\shortlabeltrue\ref{#1}}}
+\def\whole\ref#1{{\longlabeltrue\ref{#1}}}
+\def\quiet\ref#1{\vphantom{\ref{#1}}}
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%  \end{macro}
+%  \begin{macro}{\refstepcounter}
+%    Modify \texttt{\string\refstepcounter} to allow prefixes to be
+%    one-parameter macros. (Just added an
+%    \texttt{\string\expandafter}, see LaTeX2e doumentation.)
+%
+%  \changes{v2.03}{2005/08/29}{Added explanation interplay with
+%    \Lpackage{hyperref}.}
+%    The package \Lpackage{hyperref} replaces |\refstepcounter| with
+%    its own definition but calls the previous version.  Therefore it
+%    must be loaded \emph{after} this class.  This applies also to any other
+%    package that modifies |\refstepcounter| similarly.
+%    \begin{macrocode}
+\CheckCommand*\refstepcounter[1]{\stepcounter{#1}%
+     \protected@edef\@currentlabel
+        {\csname p@#1\endcsname\csname the#1\endcsname}%
+}
+\def\refstepcounter#1{\stepcounter{#1}%
+    \protected@edef\@currentlabel
+       {\csname p@#1\expandafter\endcsname\csname the#1\endcsname}%
+%                   ^^^^^^^^^^^^
+    \protected@edef\@bare@currentlabel
+       {\csname the#1\endcsname}%
+}
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\label}
+%    Modify \texttt{\string\label} to allow to store also the bare
+%    value of the label.
+%    \begin{macrocode}
+\if@bare
+\let\relabel@label\label
+\def\label#1{\ifx\@currentlabel\@bare@currentlabel\else
+  {\let\@currentlabel\@bare@currentlabel\relabel@label{bare@#1}}%
+  \fi\relabel@label{#1}}
+\def\bare\ref#1{\@ifundefined{r@bare@#1}{\ref{#1}}{\ref{bare@#1}}}
+\else
+\def\bare{\PackageWarning{relabel}{\string\bare\space disabled! (Use
+    option bare to enable it.)}}
+\fi
+\let\@bare@currentlabel\@currentlabel
+%    \end{macrocode}
+%  \end{macro}
+%    \begin{macrocode}
+%</relabel>
+%    \end{macrocode}
+%
+%  \GetFileInfo{thcc.sty}
+%  \CodelinePrefix{t}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%  \changes{v0.91}{2000/02/29}{Advanced version to official 2.00}
+%    \begin{macrocode}
+%<*thcc>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{thcc}[2000/02/29 v2.04
+         computational complexity, theorem layouts.
+         Michael Nuesken, Bonn.]
+%    \end{macrocode}
+%  We require Frank Mittelbach's \Lpackage{theorem} package.
+%    \begin{macrocode}
+\RequirePackage{theorem}[1995/11/23]
+\expandafter\xdef\csname ver@amsthm.sty\endcsname
+{2000/02/29 Forbidden by cc.cls/thcc.sty. Not loaded!}
+\expandafter\xdef\csname ver@apthm.sty\endcsname
+{2000/02/29 Forbidden by cc.cls/thcc.sty. Not loaded!}
+%    \end{macrocode}
+%  The macro |\shortcite| might have been provided by the package
+%  \Lpackage{cccite} or predecessors of it.  If not we let it be equal
+%  to the normal |\cite|.
+%    \begin{macrocode}
+\def\activate@shortcite{}
+\AtBeginDocument{%
+  \@ifpackageloaded{cccite}{%
+    \def\activate@shortcite{\let\cite\shortcite}
+    }{}
+  \@ifpackageloaded{natbib}{%
+    \def\activate@shortcite{%
+      \let\cite\citealt
+      \let\citet\citealt
+      \let\citep\citealp
+      }
+    }{}
+  }
+%    \end{macrocode}
+%  
+%  This is the standard theorem layout for \cc.  The theorem text is
+%  typeset slanted, the header terminates with a dot.  Inside the
+%  optional argument |\cite| is |\shortcite| which avoids double
+%  parentheses.
+%    \begin{macrocode}
+\def\th@cc{%
+  \normalfont\slshape
+  \def\@begintheorem##1##2{\item
+    [\hskip\labelsep \theorem@headerfont ##1\ ##2.]}%
+  \def\@opargbegintheorem##1##2##3{\item
+    [\hskip\labelsep \theorem@headerfont ##1\ ##2\ %
+    \normalfont({\activate@shortcite{}##3}).]}%
+  }
+%    \end{macrocode}
+%  
+%  This is the unnumbered theorem layout alike \cc, it only differs
+%  from  the standard theorem layout in that the number is not typed
+%  (argument 2).
+%    \begin{macrocode}
+\def\th@ccnn{%
+  \normalfont\slshape
+  \def\@begintheorem##1##2{\item
+    [\hskip\labelsep \theorem@headerfont ##1.]}%
+  \def\@opargbegintheorem##1##2##3{\item
+    [\hskip\labelsep \theorem@headerfont ##1\ %
+    \normalfont({\activate@shortcite{}##3}).]}%
+  }
+%    \end{macrocode}
+%  
+%  This is the unnumbered layout for proofs \cc.  The proof text is
+%  typeset upright, the header terminates with a dot and a double
+%  blank.
+%    \begin{macrocode}
+\def\th@ccproof{%
+  \normalfont\upshape
+  \def\@begintheorem##1##2{\item
+    [\hskip\labelsep \theorem@headerfont ##1.\ \ ]}%
+  \def\@opargbegintheorem##1##2##3{\item
+    [\hskip\labelsep \theorem@headerfont ##1\ %
+    \normalfont({\activate@shortcite{}##3}).\ \ ]}%
+  }
+%    \end{macrocode}
+%  
+%  This is the standard algorithm layout for \cc.  The algorithm text
+%  is typeset upright, the header terminate with a dot.  The optional
+%  argument follows the rest terminated with a dot (instead of being
+%  in parentheses).
+%    \begin{macrocode}
+\def\th@ccalgo{%
+  \normalfont\upshape
+  \def\@begintheorem##1##2{\item
+    [\hskip\labelsep \theorem@headerfont ##1\ ##2.]}%
+  \def\@opargbegintheorem##1##2##3{\item
+    [\hskip\labelsep \theorem@headerfont ##1\ ##2.] 
+    {\normalfont##3.\par}}%
+  }
+%    \end{macrocode}
+%  
+%  This is the unnumbered algorithm layout for \cc.  The number is
+%  omitted.
+%    \begin{macrocode}
+\def\th@ccalgonn{%
+  \normalfont\upshape
+  \def\@begintheorem##1##2{\item
+    [\hskip\labelsep \theorem@headerfont ##1.]}%
+  \def\@opargbegintheorem##1##2##3{\item
+    [\hskip\labelsep \theorem@headerfont ##1.] {\normalfont##3.\par}}%
+  }
+%    \end{macrocode}
+%  The default header font is the caps and small caps font.
+%    \begin{macrocode}
+\gdef\theorem@headerfont{\scshape}
+%</thcc>
+%    \end{macrocode}
+%
+%  \GetFileInfo{ccthm.sty}
+%  \CodelinePrefix{T}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%    \begin{macrocode}
+%<*ccthm>
+\ProvidesPackage{ccthm}[2000/02/29 v2.04
+  theorem environments for cc.  Michael Nuesken, Bonn.]
+%    \end{macrocode}
+%
+% \subsection{Theorem-like environments}
+%
+%  Referring to numerated items in theorem usually means that you
+%  also need to mention the theorem number.  With
+%  \Lclo{theoremitemprefixes} this is automatically done.
+%    \begin{macrocode}
+\newif\if@theoremitemprefixes
+\DeclareOption{theoremitemprefixes}{\@theoremitemprefixestrue}
+\DeclareOption{notheoremitemprefixes}{\@theoremitemprefixesfalse}
+\ExecuteOptions{theoremitemprefixes}
+\ProcessOptions\relax
+%    \end{macrocode}
+%
+%  Then, we load the packages for theorems and proofs.
+%  \Lpackage{theorem} by Frank Mittelbach provides more flexible ways
+%  to define new theorem-like environments.  \Lpackage{thcc} is
+%  \cc{}'s add-on to it, five new theorem styles are defined in it:
+%  one each for proofs, for unnumbered and  for numbered theorems, for
+%  unnumbered and for numbered algorithms.
+%    \begin{macrocode}
+\RequirePackage{theorem}[1995/11/23 v2.2c]
+\RequirePackage{thcc}
+\RequirePackage{relabel}
+%    \end{macrocode}
+%
+%  
+%  \begin{macro}{\everytheorem}
+%    As for proofs, we also introduce a token list |\everytheorem|
+%    that will be executed at the beginning of each theorem-like
+%    environment.
+%    \begin{macrocode}
+\newtoks\everytheorem
+\everytheorem{}
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\EnumerationInTheorems}
+%    This macro defines a new labeling scheme to be used inside
+%    theorems.  For example, the outer list is numbered with small
+%    roman numerals rather than with arabic numerals.  If
+%    \Lclo{theoremitemprefixes} is active, the prefixes are manipulated
+%    so as to contain the title (and number) of the surrounding
+%    theorem-like environment.
+%    \begin{macrocode}
+\if@theoremitemprefixes
+\def\EnumerationInTheorems#1{%
+  \let\@thm@currentlabel\@empty
+  \let\@thm@bare@currentlabel\@empty
+  \let\@@refstepcounter\refstepcounter
+  \def\refstepcounter##1{%
+    \let\refstepcounter\@@refstepcounter
+    \let\@@refstepcounter\@undefined
+    \refstepcounter{##1}%
+    \let\@thm@currentlabel\@currentlabel
+    \protected@edef\@thm@bare@currentlabel{{\csname the##1\endcsname}}%
+    }%
+  \def\theenumi{\@roman\c@enumi}%
+  \def\labelenumi{(\theenumi)}%
+  \defprefix{enumi}##1{%
+    %%\Iflabelchanged{#1}{\uselabel{#1}}%
+    \protect\protect\protect\@@conduselabel
+    {{\protect\csname the#1\endcsname}}%
+    {\@thm@bare@currentlabel}{\@thm@currentlabel}%
+    (##1)}%
+  %%\def\theenumii{\@alph\c@enumii}%
+  %%\def\labelenumii{(\theenumii)}%
+  \defprefix{enumii}##1{%
+    %%\Iflabelchanged{#1}{\uselabel{#1}}%
+    \protect\protect\protect\@@conduselabel
+    {{\protect\csname the#1\endcsname}}%
+    {\@thm@bare@currentlabel}{\@thm@currentlabel}%
+    (\theenumi.##1)}%
+  \def\theenumiii{\@arabic\c@enumiii}%
+  \def\labelenumiii{(\theenumiii)}%
+  \defprefix{enumiii}##1{%
+    %%\Iflabelchanged{#1}{\uselabel{#1}}%
+    \protect\protect\protect\@@conduselabel
+    {{\protect\csname the#1\endcsname}}%
+    {\@thm@bare@currentlabel}{\@thm@currentlabel}%
+    (\theenumi.\theenumii.##1)}%
+  %%\def\theenumiv{\@Alph\c@enumiv}%
+  %%\def\labelenumiv{\theenumiv.}%
+  \defprefix{enumiv}##1{%
+    %%\Iflabelchanged{#1}{\uselabel{#1}}%
+    \protect\protect\protect\@@conduselabel
+    {{\protect\csname the#1\endcsname}}%
+    {\@thm@bare@currentlabel}{\@thm@currentlabel}%
+    (\theenumi.\theenumii.\theenumiii##1)}
+  }
+\else
+\def\EnumerationInTheorems#1{%
+  \def\theenumi{\@roman\c@enumi}%
+  \def\labelenumi{(\theenumi)}%
+  \defprefix{enumi}##1{(##1)}%
+  %%\def\theenumii{\@alph\c@enumii}%
+  %%\def\labelenumii{(\theenumii)}%
+  \defprefix{enumii}##1{(\theenumi.##1)}%
+  \def\theenumiii{\@arabic\c@enumiii}%
+  \def\labelenumiii{(\theenumiii)}%
+  \defprefix{enumiii}##1{(\theenumi.\theenumii.##1)}%
+  %%\def\theenumiv{\@Alph\c@enumiv}%
+  %%\def\labelenumiv{\theenumiv.}%
+  \defprefix{enumiv}##1{(\theenumi.\theenumii.\theenumiii##1)}
+  }
+\fi
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\theorempreamblenn}
+%    In order to execute some commands in every theorem, we use
+%    |\theorembodyfont| as a hook.  In the present version of
+%    \Lpackage{theorem}, we access the theorem counter and the theorem
+%    title by the following construction.
+%    \begin{macrocode}
+\def\theorempreamblenn\@thm#1#2{%
+  \defprefix{#1}##1{#2}%
+  \EnumerationInTheorems{#1}%
+  \pagebreak[3]\relax
+  \the\everytheorem
+  \@thm{#1}{#2}}
+%    \end{macrocode}
+%  \end{macro}
+%  We select the body font and also put our special hook in it.  (We
+%  rely on the present implementation of \Lpackage{theorem}!)  And we
+%  select the theorem style for non numbered theorems in \cc{}.
+%    \begin{macrocode}
+\theorem@bodyfont{\theorempreamblenn}
+\theoremstyle{ccnn}
+%    \end{macrocode}
+%  \begin{environment}{namedth@@r@m*}
+%  \begin{environment}{namedtheorem*}
+%  \begin{environment}{theorem*}
+%  \begin{environment}{lemma*}
+%  \begin{environment}{corollary*}
+%  \begin{environment}{proposition*}
+%  \begin{environment}{fact*}
+%  \begin{environment}{remark*}
+%  \begin{environment}{openquestion*}
+%  \begin{environment}{definition*}
+%  \begin{environment}{problem*}
+%  \begin{environment}{notation*}
+%  \begin{environment}{exercise*}
+%  \begin{environment}{assumption*}
+%  \begin{environment}{open*}
+%  \begin{environment}{claim*}
+%  \begin{environment}{conjecture*}
+%  \begin{environment}{observation*}
+%  \begin{environment}{result*}
+%  \begin{environment}{note*}
+%  \begin{environment}{hypothesis*}
+%  \begin{environment}{example*}
+%  \begin{environment}{answer*}
+%  \begin{environment}{convention*}
+%  \begin{environment}{counterexample*}
+%  \begin{environment}{question*}
+%  \begin{environment}{thesis*}
+%  \begin{environment}{warning*}
+%    We define lots of non numbered theorem-like environments
+%    including \Lenv{namedtheorem*} which allows a user specified
+%    theorem heading.
+%    \begin{macrocode}
+\newtoks\theoremtitle
+\newtheorem{namedth@@r@m*}{\the\theoremtitle}
+\newenvironment{namedtheorem*}[1]{%
+  \theoremtitle{#1}\csname namedth@@r@m*\endcsname}
+{\csname endnamedth@@r@m*\endcsname}
+\babel\def\Answer{Answer}[german=Antwort,french=Reponse]
+\newtheorem{answer*}[namedth@@r@m*]{\Answer}%
+\babel\def\Assumption{Assumption}[german=Annahme,french=Assomption]
+\newtheorem{assumption*}[namedth@@r@m*]{\Assumption}
+\babel\def\Claim{Claim}[german=Behauptung,french=Proposition]
+\newtheorem{claim*}[namedth@@r@m*]{\Claim}
+\babel\def\Conjecture{Conjecture}[german=Vermutung,french=Conjecture]
+\newtheorem{conjecture*}[namedth@@r@m*]{\Conjecture}
+\babel\def\Convention{Convention}[german=Vereinbarung,french=Convention]
+\newtheorem{convention*}[namedth@@r@m*]{\Convention}%
+\babel\def\Corollary{Corollary}[german=Korollar,french=Corollaire]
+\newtheorem{corollary*}[namedth@@r@m*]{\Corollary}
+\babel\def\Counterexample{Counterexample}[%
+  german=Gegenbeispiel,french=Contre-exemple]
+\newtheorem{counterexample*}[namedth@@r@m*]{\Counterexample}%
+\babel\def\Definition{Definition}[german=Definition,french=D\'efinition]
+\newtheorem{definition*}[namedth@@r@m*]{\Definition}
+\babel\def\Exercise{Exercise}[german=Aufgabe,french=Exercice]
+\newtheorem{exercise*}[namedth@@r@m*]{\Exercise}
+\babel\def\Fact{Fact}[german=Fakt,french=Fait]
+\newtheorem{fact*}[namedth@@r@m*]{\Fact}
+\babel\def\Hypothesis{Hypothesis}[german=Hypothese,french=Hypoth\`ese]
+\newtheorem{hypothesis*}[namedth@@r@m*]{\Hypothesis}
+\babel\def\Lemma{Lemma}[german=Lemma,french=Lemme]
+\newtheorem{lemma*}[namedth@@r@m*]{\Lemma}
+\babel\def\Notation{Notation}[german=Notation,french=Notation]
+\newtheorem{notation*}[namedth@@r@m*]{\Notation}
+\babel\def\Note{Note}[german=Notiz,french=Note]
+\newtheorem{note*}[namedth@@r@m*]{\Note}
+\babel\def\Observation{Observation}[%
+  german=Beobachtung,french=Observation]
+\newtheorem{observation*}[namedth@@r@m*]{\Observation}
+\babel\def\OpenQuestion{Open Question}[%
+  german=Offene Frage,french=Question ouverte]
+\newtheorem{open*}[namedth@@r@m*]{\OpenQuestion}
+\newtheorem{openquestion*}[namedth@@r@m*]{\OpenQuestion}
+\babel\def\Problem{Problem}[german=Problem,french=Probl\`eme]
+\newtheorem{problem*}[namedth@@r@m*]{\Problem}
+\babel\def\Proposition{Proposition}[%
+  german=Behauptung,french=Proposition]
+\newtheorem{proposition*}[namedth@@r@m*]{\Proposition}
+\babel\def\Question{Question}[german=Frage,french=Question]
+\newtheorem{question*}[namedth@@r@m*]{\Question}%
+\babel\def\Remark{Remark}[german=Bemerkung,french=Remarque]
+\newtheorem{remark*}[namedth@@r@m*]{\Remark}
+\babel\def\Result{Result}[german=Ergebnis,french=R\'esultat]
+\newtheorem{result*}[namedth@@r@m*]{\Result}
+\babel\def\Theorem{Theorem}[german=Satz,french=Th\'eor\`eme]
+\newtheorem{theorem*}[namedth@@r@m*]{\Theorem}
+\babel\def\Thesis{Thesis}[german=These,french=Th\`ese]
+\newtheorem{thesis*}[namedth@@r@m*]{\Thesis}%
+\babel\def\Warning{Warning}[german=Warnung,french=Alerte]
+\newtheorem{warning*}[namedth@@r@m*]{\Warning}%
+%%\newtheorem{example*}[namedth@@r@m*]{Example}%
+\babel\def\Example{Example}[german=Beispiel,french=Exemple]
+\newenvironment{example*}[1][]{%
+  \cc@ifempty{#1}
+  {\csname namedtheorem*\endcsname{\Example}}%
+  {\csname namedtheorem*\endcsname{\Example}[#1]}%
+  \upshape
+  \let\qedsymbol\eoesymbol
+  }
+{\qed\csname endnamedtheorem*\endcsname}
+%    \end{macrocode}
+%    Note that examples have an end of example mark.
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \begin{macro}{\theorempreamble}
+%    For numbered theorems, we modify the above slighlty.
+%    \begin{macrocode}
+\def\theorempreamble\@thm#1#2{%
+  \defprefix{#1}##1{#2~##1}%
+  \EnumerationInTheorems{#1}%
+  \pagebreak[3]\relax
+  \the\everytheorem
+  \@thm{#1}{#2}}
+\theorem@bodyfont{\theorempreamble}
+\theoremstyle{cc}
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{environment}{namedth@@r@m}
+%  \begin{environment}{namedtheorem}
+%  \begin{environment}{theorem}
+%  \begin{environment}{lemma}
+%  \begin{environment}{corollary}
+%  \begin{environment}{proposition}
+%  \begin{environment}{fact}
+%  \begin{environment}{remark}
+%  \begin{environment}{openquestion}
+%  \begin{environment}{definition}
+%  \begin{environment}{problem}
+%  \begin{environment}{notation}
+%  \begin{environment}{exercise}
+%  \begin{environment}{assumption}
+%  \begin{environment}{open}
+%  \begin{environment}{claim}
+%  \begin{environment}{conjecture}
+%  \begin{environment}{observation}
+%  \begin{environment}{result}
+%  \begin{environment}{note}
+%  \begin{environment}{hypothesis}
+%  \begin{environment}{example}
+%  \begin{environment}{answer}
+%  \begin{environment}{convention}
+%  \begin{environment}{counterexample}
+%  \begin{environment}{question}
+%  \begin{environment}{thesis}
+%  \begin{environment}{warning}
+%    Next we define the numbered (unstarred) versions of the theorem
+%    like environments.
+%  \changes{v2.01}{2000/06/28}{Added handling for cctheorems+separatelycounted.
+%    Michael N{\"{u}}sken, Paderborn.}
+%  \changes{v2.01}{2001/03/12}{Added handling optional arguments for
+%    \lenv{example} and \lenv{example*}.  Michael N{\"{u}}sken, Paderborn.}
+%    \begin{macrocode}
+\newtheorem{namedth@@r@m}{\the\theoremtitle}
+\if@ccnosepeqncnt
+\let\c@namedth@@r@m\c@equation
+\def\thenamedth@@r@m{\theequation}
+\fi
+\newenvironment{namedtheorem}[1]
+  {\theoremtitle{#1}\namedth@@r@m}
+  {\endnamedth@@r@m}
+\if@standardtheorems
+\newtheorem{answer}[namedth@@r@m]{\Answer}
+\newtheorem{assumption}[namedth@@r@m]{\Assumption}
+\newtheorem{claim}[namedth@@r@m]{\Claim}
+\newtheorem{conjecture}[namedth@@r@m]{\Conjecture}
+\newtheorem{convention}[namedth@@r@m]{\Convention}
+\newtheorem{corollary}[namedth@@r@m]{\Corollary}
+\newtheorem{counterexample}[namedth@@r@m]{\Counterexample}
+\newtheorem{definition}[namedth@@r@m]{\Definition}
+\newtheorem{exercise}[namedth@@r@m]{\Exercise}
+\newtheorem{fact}[namedth@@r@m]{\Fact}
+\newtheorem{hypothesis}[namedth@@r@m]{\Hypothesis}
+\newtheorem{lemma}[namedth@@r@m]{\Lemma}
+\newtheorem{notation}[namedth@@r@m]{\Notation}
+\newtheorem{note}[namedth@@r@m]{\Note}
+\newtheorem{observation}[namedth@@r@m]{\Observation}
+\newtheorem{open}[namedth@@r@m]{\OpenQuestion}
+\newtheorem{openquestion}[namedth@@r@m]{\OpenQuestion}
+\newtheorem{problem}[namedth@@r@m]{\Problem}
+\newtheorem{proposition}[namedth@@r@m]{\Proposition}
+\newtheorem{question}[namedth@@r@m]{\Question}
+\newtheorem{remark}[namedth@@r@m]{\Remark}
+\newtheorem{result}[namedth@@r@m]{\Result}
+\newtheorem{theorem}[namedth@@r@m]{\Theorem}
+\newtheorem{thesis}[namedth@@r@m]{\Thesis}
+\newtheorem{warning}[namedth@@r@m]{\Warning}
+\newenvironment{example}[1][]{%
+  \cc@ifempty{#1}
+  {\namedtheorem{\Example}}%
+  {\namedtheorem{\Example}[#1]}%
+  \upshape
+  \let\qedsymbol\eoesymbol
+  }
+{\qed\endnamedtheorem}
+\else
+\newtheorem{answer}{\Answer}
+\newtheorem{assumption}{\Assumption}
+\newtheorem{claim}{\Claim}
+\newtheorem{conjecture}{\Conjecture}
+\newtheorem{convention}{\Convention}
+\newtheorem{corollary}{\Corollary}
+\newtheorem{counterexample}{\Counterexample}
+\newtheorem{definition}{\Definition}
+\newtheorem{exercise}{\Exercise}
+\newtheorem{fact}{\Fact}
+\newtheorem{hypothesis}{\Hypothesis}
+\newtheorem{lemma}{\Lemma}
+\newtheorem{notation}{\Notation}
+\newtheorem{note}{\Note}
+\newtheorem{observation}{\Observation}
+\newtheorem{open}{\OpenQuestion}
+\newtheorem{openquestion}{\OpenQuestion}
+\newtheorem{problem}{\Problem}
+\newtheorem{proposition}{\Proposition}
+\newtheorem{question}{\Question}
+\newtheorem{remark}{\Remark}
+\newtheorem{result}{\Result}
+\newtheorem{theorem}{\Theorem}
+\newtheorem{thesis}{\Thesis}
+\newtheorem{warning}{\Warning}
+\newtheorem{exampleexample}{\Example}
+\newenvironment{example}{%
+  \exampleexample%
+  \upshape
+  \let\qedsymbol\eoesymbol
+  }
+{\qed\endexampleexample}
+\fi
+%    \end{macrocode}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  \end{environment}
+%  
+%  \begin{environment}{continued}
+%  \begin{environment}{contexample}
+%    These two environments are intended to be used for continuation
+%    of previous theorems or examples.  Note that examples need a
+%    different treatment since they have an end of example mark.
+%    \begin{macrocode}
+\babel\def\ccContinued{continued}[%
+  german=fortgesetzt,french=continu\'e(e)]
+\newenvironment{continued}[1]{%
+  \csname namedtheorem*\endcsname{\ref{#1} \ccContinued}%
+  }{\csname endnamedtheorem*\endcsname}
+\newenvironment{contexample}[1]{%
+  \csname namedtheorem*\endcsname{\ref{#1} \ccContinued}%
+  \upshape
+  \let\qedsymbol\eoesymbol
+  }
+{\qed\csname endnamedtheorem*\endcsname}
+%    \end{macrocode}
+%  \end{environment}
+%  \end{environment}
+%  
+%  \begin{macro}{\eoesymbol}
+%    We initialize the end of example mark as a |\lozenge| ($\lozenge$).
+%    \begin{macrocode}
+\newcommand{\eoesymbol}{\lozenge}
+%    \end{macrocode}
+%  \end{macro}
+%    \begin{macrocode}
+%</ccthm>
+%    \end{macrocode}
+%
+%  \GetFileInfo{ccproof.sty}
+%  \CodelinePrefix{P}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%    \begin{macrocode}
+%<*ccproof>
+\ProvidesPackage{ccproof}[2000/02/29 v2.04
+  proof environments for cc.  Michael Nuesken, Bonn.]
+%    \end{macrocode}
+%
+%  We rely on F.~Mittelbach's \Lpackage{theorem} style plus the
+%  corresponding layout for \cc.
+%    \begin{macrocode}
+\RequirePackage{theorem}
+\RequirePackage{thcc}
+%    \end{macrocode}
+%
+% \subsection{End of proof marks and \cs{qed}}
+%
+%  The package \Lpackage{ccqed}, which is based on \Lpackage{QED} by
+%  Paul Taylor, defines a macro |\pushright| which pushes its argument
+%  to the right margin.  (Note that this is problematic since it can
+%  happen, that the argument does not fit on the present line but
+%  still it should be at the right margin and not on the next page.)
+%  If you use |\qed| outside proofs or theorem-like environments,
+%  nothing happens.  |\Qed| works then, too.  (Although, you crash any
+%  structure when using it!)
+%    \begin{macrocode}
+\RequirePackage{ccqed}
+\newcommand{\Qed}{\@qedtrue\qed}%
+%    \end{macrocode}
+%
+% \subsection{Proof environments}
+%
+%  \begin{macro}{\everyproof}
+%    First, we introduce a token list which will be evaluated each
+%    time a proof is typed.
+%    \begin{macrocode}
+\newtoks\everyproof \everyproof{}
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{environment}{namedproof}
+%    Surprisingly, we define the environment \Lenv{namedproof} as a
+%    theorem-like environment.  So we select the appropriate theorem
+%    style and the desired font for its body.
+%    \begin{macrocode}
+\theoremstyle{ccproof}
+\theorembodyfont{}
+%    \end{macrocode}
+%  \begin{environment}{pr@@f}
+%    Then we define an intermediate theorem-like environment
+%    \Lenv{pr@@f} which has a variable title.
+%    \begin{macrocode}
+\newtoks\prooftitle
+\newtheorem{pr@@f}{\the\prooftitle}
+%    \end{macrocode}
+%  \end{environment}
+%    This is now used to define the \Lenv{namedproof} environment, which
+%    sets the title, the end of proof mark, executes |\everyproof|,
+%    and produces the end of proof mark using |\qed|.  (Note that the
+%    macro |\qed| can be used in the proof, then at the end no second
+%    end of proof mark is produced.)
+%    \begin{macrocode}
+\newenvironment{namedproof}[2][\qedsymbol]{%
+  \save@set@qed
+  \prooftitle{#2}%
+  \def\@tempa{#1}%
+  \def\@tempc{\qedsymbol}%
+  \ifx\@tempa\@tempc\relax\else\let\qedsymbol\@tempa\fi%
+  \the\everyproof \pr@@f
+  }{%
+  \qed\restore@qed
+  \endpr@@f}
+%    \end{macrocode}
+%  \end{environment}
+%  \begin{environment}{proof}
+%    The environment \Lenv{proof} is just a specialization of the
+%    \Lenv{namedproof} environment.
+%    \begin{macrocode}
+\babel\def\Proof{Proof}[german=Beweis,french=Preuve]
+\newenvironment{proof}{\namedproof{\Proof}}{\endnamedproof}
+%    \end{macrocode}
+%  \end{environment}
+%    \begin{macrocode}
+%</ccproof>
+%    \end{macrocode}
+%
+%  \GetFileInfo{ccalgo.sty}
+%  \CodelinePrefix{A}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%    \begin{macrocode}
+%<*ccalgo>
+%    \end{macrocode}
+% \changes{v0.90}{1999/11/15}{Beta version. Michael N{\"{u}}sken, Paderborn}
+%
+%  This package can only be used with \LaTeXe, so we make sure that an
+%  appropriate message is displayed when another \TeX{} format is
+%  used.
+%
+%  Announce the package and its version:
+%  \changes{v0.91}{2000/02/29}{Advanced version to official 2.00}
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{ccalgo}[2005/08/27 v2.04
+  algorithm environment for cc.  Michael Nuesken, Bonn.]
+%    \end{macrocode}
+%  Next we undefine some macros in case of overloading.
+%    \begin{macrocode}
+\let\namedalgorithm\@undefined
+\let\endnamedalgorithm\@undefined
+\let\algorithm\@undefined
+\let\endalgorithm\@undefined
+%    \end{macrocode}
+%  
+%  For a dirty trick below we rely on the specific implementation of
+%  |\@item|.  Thus we verify it!
+%    \begin{macrocode}
+{\def\algonumerate@item[#1]{%
+  \if@noparitem
+    \@donoparitem
+  \else
+    \if@inlabel
+      \indent \par
+    \fi
+    \ifhmode
+      \unskip\unskip \par
+    \fi
+    \if@newlist
+      \if@nobreak
+        \@nbitem
+      \else
+        \addpenalty\@beginparpenalty
+        \addvspace\@topsep
+        \addvspace{-\parskip}%
+      \fi
+    \else
+      \addpenalty\@itempenalty
+      \addvspace\itemsep
+    \fi
+    \global\@inlabeltrue
+  \fi
+  \everypar{%
+    \@minipagefalse
+    \global\@newlistfalse
+    \if@inlabel
+      \global\@inlabelfalse
+      {\setbox\z@\lastbox
+       \ifvoid\z@
+         \kern-\itemindent
+       \fi}%
+      \box\@labels
+      \penalty\z@
+    \fi
+    \if@nobreak
+      \@nobreakfalse
+      \clubpenalty \@M
+    \else
+      \clubpenalty \@clubpenalty
+      \everypar{}%
+    \fi}%
+  \if@noitemarg
+    \@noitemargfalse
+    \if@nmbrlist
+      \refstepcounter\@listctr
+    \fi
+  \fi
+  \sbox\@tempboxa{\makelabel{#1}}%
+%    \end{macrocode}
+%  We require that |\global| follows this |\makelabel| to insert a hook.
+%    \begin{macrocode}
+  \global\setbox\@labels\hbox{%
+    \unhbox\@labels
+    \hskip \itemindent
+    \hskip -\labelwidth
+    \hskip -\labelsep
+    \ifdim \wd\@tempboxa >\labelwidth
+      \box\@tempboxa
+    \else
+      \hbox to\labelwidth {\unhbox\@tempboxa}%
+    \fi
+    \hskip \labelsep}%
+  \ignorespaces}
+\ifx\algonumerate@item\@item\else
+\PackageWarningNoLine{ccalgo}{%
+  Command \protect\@item\space  has changed.\MessageBreak
+  Check if current package is valid}
+\fi}
+%    \end{macrocode}
+%  We load Frank Mittelbach's theorem style, \cc's add-on and the
+%  \Lpackage{relabel} package.  (The latter is for adding prefixes to
+%  labels and thelike.)
+%    \begin{macrocode}
+\RequirePackage{theorem}
+\RequirePackage{thcc}
+\RequirePackage{relabel}
+%    \end{macrocode}
+%
+%  This macro restores the parshape of the current list.
+%    \begin{macrocode}
+\def\list@parshape{%
+  %%\typeout{parshape 1 \the\@totalleftmargin+\the\linewidth}%
+  \parshape \@ne \@totalleftmargin \linewidth}
+%    \end{macrocode}
+%  Reinitializing the list means to readjust the left margin while
+%  leaving the position of the list's labels fixed.
+%    \begin{macrocode}
+\newdimen\reinit@list@last
+\def\reinit@list#1{%
+  \advance\itemindent\reinit@list@last
+  \advance\@totalleftmargin-\reinit@list@last
+  \advance\linewidth\reinit@list@last
+  \global\reinit@list@last#1\relax
+  \ifdim\reinit@list@last>\algonumerate@maxindent
+  \global\reinit@list@last\algonumerate@maxindent\fi
+  \advance\itemindent-\reinit@list@last
+  \advance\@totalleftmargin\reinit@list@last
+  \advance\linewidth-\reinit@list@last
+  %%\typeout{\the\@totalleftmargin + \the\linewidth}%
+  \list@parshape}
+%    \end{macrocode}
+%  Often reinitialization is needed with respect to the label's
+%  width.
+%    \begin{macrocode}
+\def\reinit@list@label{%
+  \reinit@list{\wd\@tempboxa}%
+  }
+%    \end{macrocode}
+%  \begin{macro}{\makealgolabel}
+%    The standard format of the labels is the number followed by a dot.
+%    \begin{macrocode}
+\newcommand{\makealgolabel}[1]{#1.}
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \begin{macro}{\makeoptalgolabel}
+%    A special label is surrounded by parentheses.
+%    \begin{macrocode}
+\newcommand{\makeoptalgolabel}[1]{(#1)}
+%    \end{macrocode}
+%  \end{macro}
+%  
+%  \begin{macro}{\makeoptalgocurrentlabel}
+%    This macro is used to produce the |\bare| reference form for a
+%    special label.
+%    \begin{macrocode}
+\let\makeoptalgocurrentlabel\makeoptalgolabel
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \subsection{The \Lenv{algonumerate} environment}
+%
+%  This environment is the basis of the algorithm environment.   It
+%  allows some items with names (as |Input|, |Output|) which have a
+%  special indention.  These named and the following numbered items
+%  are separated by a |\medskip|.
+%
+%  We need a counter.  By default we do not use a prefix.
+%    \begin{macrocode}
+\newcounter{algonumerate}
+\defprefix{algonumerate}{}
+%    \end{macrocode}
+%  This count is the number of named items.
+%    \begin{macrocode}
+\newcount\algonumerate@items
+%    \end{macrocode}
+%  Formatting the counter.
+%    \begin{macrocode}
+\renewcommand{\thealgonumerate}{%
+  \expandafter\ifnum\value{algonumerate}<\@ne
+  \algonumfield%
+  \else
+  \arabic{algonumerate}\fi}%
+%    \end{macrocode}
+%  This macro returns the name corresponding to the counter
+%  |algonumerate|.   The macro |\@algonumfield| should be
+%  defined using |\ifcase-#1| \dots{} |\fi|  and return the
+%  corresponding name.  This is done be |\algonumerateinit|, see
+%  below.
+%    \begin{macrocode}
+\def\algonumfield{\ignorespaces
+  \ifx\@algonumfield\relax\else
+  \expandafter\@algonumfield\csname c@algonumerate\endcsname\fi
+  \unskip}
+%    \end{macrocode}
+%  A toggle to distinguish special labels and numbered labels.
+%    \begin{macrocode}
+\newif\if@speciallabel
+%    \end{macrocode}
+%  This macro produces the labels in all cases. 
+%    \begin{macrocode}
+\newcommand{\labelalgonumerate}{%
+  \count@\value{algonumerate}%
+  \ifnum\count@<\z@
+  \algonumfield:%
+  \else
+  \makealgolabel{\thealgonumerate}\fi
+  }%
+%    \end{macrocode}
+%  These two dimensions define the width of a label and its distance
+%  to the text.
+%    \begin{macrocode}
+\newdimen\algo@labelsep
+\newdimen\steplabelwidth
+%    \end{macrocode}
+%  This token list is executed at the next |\item|.
+%    \begin{macrocode}
+\newtoks\AtNextItem
+%    \end{macrocode}
+%  A toggle noting whether the named items are complete or not.
+%    \begin{macrocode}
+\newif\if@requireditemscomplete
+%    \end{macrocode}
+%  This is |\makelabel| for our list.  It produces the label,
+%  inserts the hook and makes all necessary modifications.
+%    \begin{macrocode}
+\newcommand{\algonumerate@label}[1]{%
+%    \end{macrocode}
+%  Decide whether this is a special item and set the corresponding
+%  toggle.
+%    \begin{macrocode}
+  \def\@tempa{#1}\def\@tempc{\@itemlabel}%
+  %%\show\@tempa\show\@tempc
+  \ifx\@tempa\@tempc\global\@speciallabelfalse
+  \else\global\@speciallabeltrue\fi
+%    \end{macrocode}
+%  Distinguish cases: named items, first non-named items, numbered items,
+%  and special (labelled) items.
+%    \begin{macrocode}
+  \expandafter\ifnum\value{algonumerate}<\z@
+%    \end{macrocode}
+%  A named item's label is simply typeset with some space.
+%    \begin{macrocode}
+  #1\hskip\algo@labelsep%
+  \else
+  \ifx\@tempa\@empty
+%    \end{macrocode}
+%  An empty special item's label remains invisible.
+%    \begin{macrocode}
+  \hskip\steplabelwidth\hskip\algo@labelsep
+  \else
+%    \end{macrocode}
+%  A non-named item's label is typeset in a box using
+%  |\makeoptalgolabel| to format a special label.
+%    \begin{macrocode}
+  \hb@xt@\steplabelwidth{\hss
+    \hb@xt@\steplabelwidth{\hfill
+      \if@speciallabel
+      \makeoptalgolabel{#1}%
+      \else
+      #1%
+      \fi
+      }}\hskip\algo@labelsep%
+  \fi\fi
+%    \end{macrocode}
+%  
+%  The following two lines are a dirty trick!!!  This establishes
+%  the hook.
+%    \begin{macrocode}
+  \global\let\algonumerate@global\global
+  \gdef\global{\algonumerate@global\let\global\algonumerate@global
+%    \end{macrocode}
+%  This code is then executed in the |\item| command outside any
+%  extra groups.
+%
+%  First, we handle the boundary between named and numbered items.
+%    \begin{macrocode}
+    \expandafter\count@\value{algonumerate}%
+    %%{\tracingall\nonstopmode\showbox\@tempboxa}%
+%    \end{macrocode}
+%  The counter jumpes over the value $0$.
+%    \begin{macrocode}
+    \ifnum\count@=\m@ne
+    \stepcounter{algonumerate}%
+    \fi
+%    \end{macrocode}
+%  Test whether we bypassed the boundary and issue |\medskip| once.
+%    \begin{macrocode}
+    \ifnum\count@=\z@
+    \if@requireditemscomplete\else
+    \global\@requireditemscompletetrue
+    \ifnum\algonumerate@items>\z@\medskip\fi
+    \fi
+    \fi
+    \ifnum\count@=\@ne
+    \if@requireditemscomplete\else
+    \global\@requireditemscompletetrue
+    \ifnum\algonumerate@items>\z@\medskip\fi
+    \fi
+    \fi
+%    \end{macrocode}
+%  To enable referencing of special label's we need to define
+%  |\@currentlabel| and (for the |\bare| version)
+%  |\@bare@currentlabel|.
+%    \begin{macrocode}
+    \if@speciallabel
+    \protected@edef\@currentlabel{\csname p@\@listctr\endcsname
+      {\makeoptalgocurrentlabel{#1}}}%
+    \protected@edef\@bare@currentlabel{#1}%
+    \fi
+%    \end{macrocode}
+%  Remember the reference globally.  (This is used in the
+%  \Lenv{block} environment below.)
+%    \begin{macrocode}
+    \global\let\latest@item@currentlabel\@currentlabel
+    \global\let\latest@item@bare@currentlabel\@bare@currentlabel
+%    \end{macrocode}
+%  Reset the special label toggle.
+%    \begin{macrocode}
+    \global\@speciallabeltrue
+%    \end{macrocode}
+%  Execute |\AtNextItem| once.  
+%    \begin{macrocode}
+    \the\AtNextItem \global\AtNextItem{}%
+%    \end{macrocode}
+%  Reinitialize the list indentions.
+%    \begin{macrocode}
+    \reinit@list@label
+%    \end{macrocode}
+%  Execute the |\global| which was used to implement this hook.
+%    \begin{macrocode}
+    \global}%
+  }
+%    \end{macrocode}
+%
+%  Named items will be indented as far as the label, unless this
+%  exceeds the maximal value stored in |\algonumerate@maxindent|.
+%  Its default value is $20\%$ of the |\textwidth|.
+%    \begin{macrocode}
+\newdimen\algonumerate@maxindent
+\AtBeginDocument{\ifdim\algonumerate@maxindent=\z@
+  \algonumerate@maxindent.2\textwidth\fi}
+%    \end{macrocode}
+%  \begin{macro}{\algonumerateinit}
+%    This macro prepares all things for the named items.  Its argument
+%    is just the comma separated list of the names.
+%    \begin{macrocode}
+\def\algonumerateinit#1{%
+  \def\@algonumfield{}%
+  \let\ccorg@or\or\let\or\relax
+  \algonumerate@items\z@
+  \@for\@tempa:=#1\do{%
+    \advance\algonumerate@items\@ne
+    \@temptokena\expandafter{\@tempa}%
+    \toks@\expandafter{\@algonumfield}%
+    \edef\@algonumfield{\the\@temptokena\or\the\toks@}%
+    }%
+  \let\or\ccorg@or
+  \toks@\expandafter{\@algonumfield}%
+  \edef\@algonumfield##1{\noexpand\ifcase-##1\noexpand\or
+    \the\toks@\noexpand\fi}%
+%   \typeout{Starting ...}%
+  }
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \begin{environment}{algonumerate}
+%    Finally, we define the environment \Lenv{algonumerate}.  Apart
+%    from initiation the list, it also activates the environments
+%    \Lenv{block} (aka \Lenv{body}), \Lenv{range}, \Lenv{indention},
+%    and \Lenv{meta}.
+%    \begin{macrocode}
+\newenvironment{algonumerate}{%
+  \if@inlabel~\fi\par
+  \list{\labelalgonumerate}{%
+    \usecounter{algonumerate}%
+    \let\makelabel\algonumerate@label
+    \parsep\z@%
+    \topsep\z@%
+    \itemsep\z@%
+    \parskip\z@%
+    %\leftmargin\z@
+    %\algo@labelsep\labelsep
+    %\labelsep\z@
+    \leftmargin\labelsep
+    \algo@labelsep\z@
+    \settowidth\steplabelwidth{\makealgolabel{99}}%
+    \labelwidth\z@
+    \global\reinit@list@last\z@
+    }%
+  \setcounter{algonumerate}{-\algonumerate@items}%
+  \ifnum\algonumerate@items>\z@
+  \addtocounter{algonumerate}\m@ne
+  \global\@requireditemscompletefalse
+  \else
+  \global\@requireditemscompletetrue
+  \fi
+  \setcounter{block@cnt}\z@
+  \let\step\algo@step
+  \let\block\algo@block
+  \let\endblock\endalgo@block
+  \let\range\algo@range
+  \let\endrange\endalgo@range
+  \let\indention\algo@indention
+  \let\endindention\endalgo@indention
+  \let\body\algo@block
+  \let\endbody\endalgo@block
+  \let\meta\algo@meta
+  \let\endmeta\endalgo@meta
+  }{%
+  \endlist\vskip\topskip}
+%    \end{macrocode}
+%  \end{environment}
+%
+%  The \Lenv{indention} environment indents the steps inside it by an
+%  amount of |\blockindent|.  Its default value is |\parindent|.
+%    \begin{macrocode}
+\newdimen\blockindent \blockindent\parindent
+%    \end{macrocode}
+%  \begin{macro}{\nextblock}
+%    This is just a counter for internal use.  |\nextblock| stores
+%    locally a new value in |\currentblock|.  See the sophisticated
+%    things below on how to use this.
+%    \begin{macrocode}
+\newcounter{block@cnt}
+\newcommand{\nextblock}{%
+  \stepcounter{block@cnt}\edef\currentblock{\arabic{block@cnt}}%
+  }
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\refsetrange}
+%    This sets the current reference to the range of argument 1 to
+%    argument 2, each argument is interpreted as a \meta{subkey}.  The
+%    current reference will be empty if the range is known to be
+%    trivial.
+%    \begin{macrocode}
+\newif\if@trivialrange
+\newcommand{\refsetrange}[2]{%
+  {\shortlabeltrue
+    \let\@tempa\relax
+    \protected@edef\@tempa{%
+      \csname r@\the\algorithmmasterkey-#1\endcsname}%
+    %%\show\@tempa
+    \let\@tempc\relax
+    \protected@edef\@tempc{%
+      \csname r@\the\algorithmmasterkey-#2\endcsname}%
+    %%\show\@tempc
+    \ifx\@tempa\@tempc\global\@trivialrangetrue
+    \else\global\@trivialrangefalse\fi
+    }%
+  \if@trivialrange
+  \protected@edef\@currentlabel{}%
+  \else
+  \protected@edef\@currentlabel{%
+    \csname p@\@listctr\endcsname{%
+    \protect\short\protect\ref{\the\algorithmmasterkey-#1}%
+    --%
+    \protect\short\protect\ref{\the\algorithmmasterkey-#2}%
+    }}%
+  \fi
+  \protected@edef\@bare@currentlabel{%
+    \protect\bare\protect\ref{\the\algorithmmasterkey-#1}%
+    --%
+    \protect\bare\protect\ref{\the\algorithmmasterkey-#2}%
+    }%
+  }
+%    \end{macrocode}
+%  \end{macro}
+%  Note: the following environments are defined with a prefix |algo@|
+%  in their names since they should not be available outside the
+%  \Lenv{algonumerate} environment.
+%  \begin{environment}{range}
+%    A |\label| (or an |\algolabel|) after the |\begin{range}| will
+%    refer to the \emph{range} of items inside the environment.
+%    \begin{macrocode}
+\newenvironment{algo@range}{%
+  \par
+  \stepcounter{block@cnt}\edef\block@{\arabic{block@cnt}}%
+  \refsetrange{bob\block@}{eob\block@}%
+  \AtNextItem{\algolabel{bob\block@}}%
+  }{%
+  \algolabel{eob\block@}%
+  \par
+  \global\let\algo@block@currentlabel\@currentlabel
+  \global\let\algo@block@bare@currentlabel\@bare@currentlabel
+  \aftergroup\algo@endrange@aftergroup
+  }
+%    \end{macrocode}
+%  \end{environment}
+%  This command restores the latest reference to the latest
+%  encountered item.
+%    \begin{macrocode}
+\def\algo@endrange@aftergroup{%
+%   \let\@currentlabel\algo@block@currentlabel
+%   \let\@bare@currentlabel\algo@block@bare@currentlabel
+  \let\@currentlabel\latest@item@currentlabel
+  \let\@bare@currentlabel\latest@item@bare@currentlabel
+%   [Restored \@bare@currentlabel]
+  }
+%    \end{macrocode}
+%  \begin{environment}{indention}
+%    The items inside this environment are indented by an amount of
+%    |\blockindent|.
+%    \begin{macrocode}
+\newenvironment{algo@indention}{%
+  \par
+  \if@requireditemscomplete
+  \advance\leftmargin\blockindent
+  \advance\labelsep\blockindent
+  \advance\@totalleftmargin\blockindent
+  \advance\linewidth-\blockindent
+  \def\algo@indention@undo{%
+    \advance\leftmargin-\blockindent
+    \advance\labelsep-\blockindent
+    \advance\@totalleftmargin-\blockindent
+    \advance\linewidth\blockindent
+    }
+  \list@parshape
+  \else
+  \let\algo@indention@undo\relax
+  \fi
+  }{%
+  \par
+  \algo@indention@undo
+%   \advance\leftmargin-\blockindent
+%   \advance\labelsep-\blockindent
+%   \advance\@totalleftmargin-\blockindent
+%   \advance\linewidth\blockindent
+  \list@parshape
+  \aftergroup\list@parshape
+  \global\let\algo@block@currentlabel\@currentlabel
+  \global\let\algo@block@bare@currentlabel\@bare@currentlabel
+  \aftergroup\algo@endrange@aftergroup
+  }
+%    \end{macrocode}
+%  \end{environment}
+%  \begin{environment}{block}
+%    This combines the environment \Lenv{indention} and \Lenv{range}.
+%    \begin{macrocode}
+\newif\ifindented@block
+\newenvironment{algo@block}{%
+  \indented@blockfalse
+  \if@requireditemscomplete\indented@blocktrue\fi
+  \ifindented@block\algo@indention
+  \else
+  \sbox\@tempboxa{\makelabel{}}%
+  \fi
+  \algo@range}{%
+  \endalgo@range
+  \ifindented@block\endalgo@indention\fi
+  }
+%    \end{macrocode}
+%  \end{environment}
+%  \begin{environment}{meta}
+%    This environment allows to insert comment-like things in
+%    algorithms.  It is indented by an amount of |meta@indent| which
+%    defaults to |0pt|.
+%    \begin{macrocode}
+\newdimen\meta@indent
+\newenvironment{algo@meta}{%
+  \@newlistfalse
+  \vskip\topskip
+  \par
+  %%\meta@indent\leftmargin
+  %%\advance\meta@indent\algo@labelsep
+  %%\advance\meta@indent\steplabelwidth
+  \meta@indent\@totalleftmargin
+  \advance\labelsep-\meta@indent
+  \advance\@totalleftmargin-\meta@indent
+  \advance\linewidth\meta@indent
+  \advance\leftmargin-\meta@indent
+  \list@parshape
+  }{%
+  \vskip\topskip
+  \par
+  \advance\labelsep\meta@indent
+  \advance\@totalleftmargin\meta@indent
+  \advance\linewidth-\meta@indent
+  \advance\leftmargin\meta@indent
+  \aftergroup\list@parshape
+  }
+%    \end{macrocode}
+%  \end{environment}
+%
+%  \begin{macro}{\step}
+%    This macro, only available inside \Lenv{algonumerate}, is
+%    essentially a combination of |\item| and |\algolabel|.
+%    \begin{macrocode}
+\newcommand{\algo@step}[2][]{%
+  \expandafter\ifnum\value{algonumerate}<\m@ne
+  \PackageError{ccalgo}{Missing \protect\item}{}%
+  \fi
+  \cc@ifempty{#1}{\item}{\item[#1]}%
+  \def\@tempa{#2}\ifx\@tempa\@empty\else\algolabel{#2}\fi%
+  }
+%    \end{macrocode}
+%  \end{macro}
+%  
+%  \subsection{Algorithm environments}
+%
+%  Here we define the central environment to typeset algorithms.
+%
+%  First, we need some preperation.  The token list |\algotitle|
+%  allows the use of another name each time \Lenv{namedalgorithm} is used.
+%    \begin{macrocode}
+\newtoks\algotitle
+%    \end{macrocode}
+%  The theorem like environment \Lenv{named@lg@r@thm*} is responsible
+%  for the outer layout of unnumbered algorithms.  The theorem style
+%  used comes from the package \Lpackage{thcc}.
+%    \begin{macrocode}
+\theorembodyfont{}%
+\theoremstyle{ccalgonn}
+\newtheorem{named@lg@r@thm*}{\the\algotitle}
+\defprefix{named@lg@r@thm*}#1{\the\algotitle}
+%    \end{macrocode}
+%  The theorem like environment \Lenv{named@lg@r@thm} is responsible
+%  for the outer layout of numbered algorithms.  The theorem style
+%  used comes from the package \Lpackage{thcc}.  We ensure that the
+%  counter used is the same as the one used for equations.
+% \changes{v2.03}{2002/02/01}{Removed a bug, now
+% \cs{thenamed@lg@r@thm} equals \cs{thenamedth@@r@m}.}
+%    \begin{macrocode}
+\theoremstyle{ccalgo}
+\newtheorem{named@lg@r@thm}{\the\algotitle}
+\defprefix{named@lg@r@thm}#1{\the\algotitle~#1}
+\let\c@named@lg@r@thm\c@namedth@@r@m
+\let\thenamed@lg@r@thm\thenamedth@@r@m
+%    \end{macrocode}
+%
+%  \begin{environment}{namedalgorithm}
+%    This combines all necessary to typeset an algorithm.
+%    The environment takes up to four arguments.  The first argument
+%    is the \meta{heading}, in the standard |Algorithm|.  The second
+%    argument is optional and gives a comma separated list of titles
+%    of required items.  It defaults to |Input,Output|.  The third
+%    argument is the \meta{master-key} which is used to produce a
+%    reference to the algorithm and in |\algolabel| to prefix
+%    references inside the algorithm.  The forth argument is again
+%    optional and specifies a title.
+%    \begin{macrocode}
+\babel\def\babelInput{Input}[german=Eingabe,french=Entr\'ee]
+\babel\def\babelOutput{Output}[german=Ausgabe,french=Sortie]
+\babel\def\babelstep{step}[german=Schritt,french=pas]%% ??? pas?
+\babel\def\babelStep{Step}[german=Schritt,french=Pas]%% ??? pas?
+\newtoks\algorithmmasterkey
+\newenvironment{namedalgorithm}[1]{%
+  \pagebreak[3]%
+  \def\algo@theorem{named@lg@r@thm}%
+  \algotitle{#1}%
+  \n@medalgorithm}
+{\endalgonumerate\csname end\algo@theorem\endcsname}
+\newenvironment{namedalgorithm*}[1]{%
+  \def\algo@theorem{named@lg@r@thm*}%
+  \algotitle{#1}%
+  \n@medalgorithm}
+{\endalgonumerate\csname end\algo@theorem\endcsname}
+\newcommand{\n@medalgorithm}[2][\babelInput,\protect\babelOutput]{%
+  \algonumerateinit{#1}%
+  \algorithmmasterkey{#2}%
+  \edef\@tempa{\the\algorithmmasterkey}\ifx\@tempa\@empty
+  \PackageError{ccalgo}{Empty key for algorithm like environment}{}\fi%
+  \n@m@d@lgorithm}
+\newcommand{\n@m@d@lgorithm}[1][]{%
+  \def\@tempa{#1}%
+  \ifx\@tempa\@empty\csname\algo@theorem\endcsname
+  \else\csname\algo@theorem\endcsname[#1]\fi%
+  \label{\the\algorithmmasterkey}%
+  \algo@keywords
+  \defprefix{algonumerate}{%
+    \Iflabelchanged{\algo@theorem}{\uselabel{\algo@theorem} %
+      \ifnum\c@algonumerate>\z@ \babelstep~\fi}}%
+%     not good, since blocks need shorter labels!
+%   \defprefix{algonumerate}##1{%
+%     Step~##1\Iflabelchanged{\algo@theorem}
+%     { of \uselabel{\algo@theorem}}}%
+  \algonumerate
+  }%
+%    \end{macrocode}
+%  \end{environment}
+%
+%  \begin{macro}{\algolabel}
+%    This macro allows to define references locally, it uses the
+%    \meta{masterkey} which is an argument to the
+%    \Lenv{namedalgorithm} environment.
+%    \begin{macrocode}
+\def\algolabel#1{\label{\the\algorithmmasterkey-#1}}%
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \begin{macro}{\stepref}
+%    This macro allows to reference the labels defined by |\algolabel|
+%    in a nice way.  Its two arguments are the \meta{masterkey} and
+%    the \meta{subkey}.
+%    \begin{macrocode}
+\newcommand{\stepref}[2]{\babelStep~\short\ref{#1-#2} in \whole\ref{#1}}
+%    \end{macrocode}
+%  \end{macro}
+%  
+%  \begin{macro}{\newalgorithm}
+%    As |\newtheorem| allows to define new theorem like environments,
+%    this macro allows to define new algorithm like environments in
+%    fixing the first two arguments of the environment
+%    \Lenv{namedalgorithm}.  At the same time a starred version is
+%    defined.
+% \changes{v2.01}{2000/11/07}{Removed a bug from \cs{n@walgorithm}.}
+%    \begin{macrocode}
+\newcommand{\newalgorithm}[2]{%
+  \def\newalgo@name{#1}%
+  \def\newalgo@title{#2}%
+  \n@walgorithm}
+\newcommand{\n@walgorithm}[1][\babelInput,\protect\babelOutput]{%
+  \protected@edef\@tempa{%
+    \noexpand\newenvironment{\newalgo@name}%
+    {\noexpand\namedalgorithm{\newalgo@title}[\noexpand#1]}%
+    {\noexpand\endnamedalgorithm}%
+    \noexpand\newenvironment{\newalgo@name*}%
+    {\noexpand\csname namedalgorithm*\endcsname
+      {\newalgo@title}[\noexpand#1]}%
+    {\noexpand\csname endnamedalgorithm*\endcsname}%
+    }\@tempa
+  }
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \begin{environment}{algorithm}
+%    This is the standard case algorithm like environment.  Its title
+%    is |\algorithmname| and its required (named) items are |Input|
+%    and |Output|.
+%    \begin{macrocode}
+\babel\def\algorithmname{Algorithm}[%
+  german=Algorithmus,french=Algorithme]
+\newalgorithm{algorithm}{\protect\algorithmname}
+%    \end{macrocode}
+%  \changes{v2.01}{2000/09/23}{Added \cs{CALL}.}
+%  
+%  Keywords in algorithms are typeset by the command
+%  |\keyword{|\meta{keyword}|}|.  Some keywords are predefined.  All
+%  these things are only accessible inside algorithm like
+%  environments.
+%  \changes{v2.01}{2004/01/26}{Babelized algo@keywords.}
+%    \begin{macrocode}
+\def\algo@keywords{%
+  \def\keyword##1{\textsf{##1} \ignorespaces}%
+  \babel\def\FOR{\keyword{For}}[german=\keyword{F{\"{u}}r}]%
+  \babel\def\DO{\keyword{do}}[german=\keyword{erledige}]%
+  \babel\def\endFOR{}[]%
+  \babel\def\WHILE{\keyword{While}}[german=\keyword{Solange}]%
+  \babel\def\endWHILE{}[]%
+  \babel\def\REPEAT{\keyword{Repeat}}[german=\keyword{Wiederhole}]%
+  \babel\def\UNTIL{\keyword{Until}}[german=\keyword{Bis}]%
+  \babel\def\IF{\keyword{If}}[german=\keyword{Falls}]%
+  \babel\def\THEN{\keyword{then}}[german=\keyword{dann}]%
+  \babel\def\ELIF{\keyword{Else if}}[german=\keyword{Sonst wenn}]%
+  \babel\def\ELSE{\keyword{Else}}[german=\keyword{Sonst}]%
+  \babel\def\endIF{}[]%
+  \babel\def\CALL{\keyword{Call}}[german=\keyword{Rufe}]%
+  \babel\def\RETURN{\keyword{Return}}[german=\keyword{Antworte}]%
+  \expandafter\selectlanguage\expandafter{\languagename}
+  \def\COMMENT##1{$\{$ ##1 $\}$}%
+  }
+%    \end{macrocode}
+%  \end{environment}
+%
+%  \subsection{Some sophisticated environments for algorithms}
+%
+%  \begin{macro}{\optitem}
+%    This is a helper for the following sophisticated environments.
+%    It issues an |\item| if necessary, and omits it otherwise.
+%    \begin{macrocode}
+\newcommand{\optitem}[1]{%
+  \cc@ifempty{#1}{\if@inlabel\par\else\item\fi}{\item[#1]}%
+  }
+%    \end{macrocode}
+%  \end{macro}
+%  \begin{macro}{\algoprettify}
+%    This is a helper for the following sophisticated environments.
+%    It formats a 3-term command like \cs{IF} \meta{condition}
+%    \cs{THEN} in a line or a multiline block depending on what is
+%    nicer.
+%    \begin{macrocode}
+%  \changes{v2.01}{2001/01/24}{Added \cs{algoprettify}. Michael
+%    N{\"{u}}sken, Paderborn}
+\newcommand{\algoprettify}[3]{%
+  \setbox2\hbox{#1}%
+  \setbox4\hbox{#2}%
+  \setbox6\hbox{#3}%
+  \setbox0\hbox{\unhcopy2\unhcopy4{ }\unhcopy6}%
+  \ifdim\wd0<\linewidth
+  \unhbox0
+  \else
+  \dimen0=\linewidth \advance\dimen0 by -\wd2
+  \unhbox2\parbox[t]{\dimen0}{\unhbox4\strut}\par\unhbox6
+  \fi
+  }
+%    \end{macrocode}
+%  \end{macro}
+%  
+%  \begin{environment}{ifblock}
+%    This produces |\IF| block.
+%    \begin{macrocode}
+\newenvironment{ifblock}[2][]
+%    \end{macrocode}
+%    What do we do at the |\begin|.
+%    \begin{macrocode}
+{%
+%    \end{macrocode}
+%    First, add |\item| if there is no |\item| immediately before the
+%    \Lenv{ifblock}.
+%    \begin{macrocode}
+  \optitem{#1}%
+%    \end{macrocode}
+%    Then generate a new |\currentlabel| which is valid until the end
+%    of the \Lenv{ifblock}.
+%    \begin{macrocode}
+  \nextblock
+%    \end{macrocode}
+%    Set a reference on the actual item.
+%    \begin{macrocode}
+  \algolabel{if\currentblock}%
+%    \end{macrocode}
+%    Insert the text `|\IF|~\meta{condition}~|\THEN|'.
+%    |\algoprettify| takes care of a long \meta{condition}.
+%  \changes{v2.01}{2001/01/24}{Now \protect\Lenv{ifblock} and so on nicer for
+%    long conditions. Michael N{\"{u}}sken, Paderborn}
+%    \begin{macrocode}
+  \algoprettify{\IF}{#2}{\THEN}
+%    \end{macrocode}
+%    Begin the indention.
+%    \begin{macrocode}
+  \indention
+%    \end{macrocode}
+%    Define the value for the possibly following |\algolabel| or
+%    |\label|.
+%    \begin{macrocode}
+  \refsetrange{if\currentblock}{endif\currentblock}%
+  }
+%    \end{macrocode}
+%    What do we do at the |\end|.
+%    \begin{macrocode}
+{%
+%    \end{macrocode}
+%    Set a reference to the last item in the environment.
+%    \begin{macrocode}
+  \algolabel{endif\currentblock}%
+%    \end{macrocode}
+%    End the indention.
+%    \begin{macrocode}
+  \endindention}
+%    \end{macrocode}
+%  \end{environment}
+%  
+%  \begin{environment}{elifblock}
+%    This produces an |\ELIF| block in the same manner as the |\IF| block.
+%    \begin{macrocode}
+\newenvironment{elifblock}[2][]{%
+  \optitem{#1}%
+  \nextblock
+  \algoprettify{\ELIF}{#2}{\THEN}
+  \algolabel{elif\currentblock}%
+  \indention
+  \refsetrange{elif\currentblock}{endelif\currentblock}%
+  }{%
+  \algolabel{endelif\currentblock}%
+  \endindention}
+%    \end{macrocode}
+%  \end{environment}
+%  
+%  \begin{environment}{elseblock}
+%    The |\ELSE| block differs from the last two only in the fact that
+%    there is no condition.
+%    \begin{macrocode}
+\newenvironment{elseblock}[1][]{%
+  \optitem{#1}%
+  \nextblock
+  \ELSE%
+  \algolabel{else\currentblock}%
+  \indention
+  \refsetrange{else\currentblock}{endelse\currentblock}%
+  }{%
+  \algolabel{endelse\currentblock}%
+  \endindention}
+%    \end{macrocode}
+%  \end{environment}
+%  
+%  \begin{environment}{forblock}
+%    A |\FOR| block typesets a loop `for \meta{control} do \dots'.
+%    Other than the previous environments we use \Lenv{block} rather
+%    than only \Lenv{indention} since the range of steps in the
+%    indented part is printed after the `do' (unless it is only one step).
+%    \begin{macrocode}
+\newenvironment{forblock}[2][]{%
+  \optitem{#1}%
+  \nextblock
+  \algoprettify{\FOR}{#2}{%
+    \DO \short\ref{\the\algorithmmasterkey-body\currentblock}}%
+  \algolabel{for\currentblock}%
+  \block\algolabel{body\currentblock}%
+  \refsetrange{for\currentblock}{endfor\currentblock}%
+  }{%
+  \algolabel{endfor\currentblock}%
+  \endblock}
+%    \end{macrocode}
+%  \end{environment}
+%  
+%  \begin{environment}{whileblock}
+%    The |\WHILE| block is similar to the |\FOR| block: `while
+%    \meta{condition} do \dots'.
+%    \begin{macrocode}
+\newenvironment{whileblock}[2][]{%
+  \optitem{#1}%
+  \nextblock
+  \algoprettify{\WHILE}{#2}{%
+    \DO \short\ref{\the\algorithmmasterkey-body\currentblock}}%
+  \algolabel{while\currentblock}%
+  \block
+  \algolabel{body\currentblock}%
+  \refsetrange{while\currentblock}{endwhile\currentblock}%
+  }{%
+  \algolabel{endwhile\currentblock}%
+  \endblock}
+%    \end{macrocode}
+%  \end{environment}
+%  
+%  \begin{environment}{untilblock}
+%    The |\UNTIL| block is similar to the |\FOR| block: `until
+%    \meta{condition} do \dots'.
+%    \begin{macrocode}
+\newenvironment{untilblock}[2][]{%
+  \optitem{#1}%
+  \nextblock
+  \algoprettify{\UNTIL}{#2}{%
+    \DO \short\ref{\the\algorithmmasterkey-body\currentblock}}%
+  \algolabel{until\currentblock}%
+  \block
+  \algolabel{body\currentblock}%
+  \refsetrange{until\currentblock}{enduntil\currentblock}%
+  }{%
+  \algolabel{enduntil\currentblock}%
+  \endblock}
+%    \end{macrocode}
+%  \end{environment}
+%  
+%  \begin{environment}{blockuntil}
+%    The reverse |\UNTIL| block is similar to the |\UNTIL| block but
+%    the condition is checked at the end rather than at the beginning
+%    of the environment.
+%    \begin{macrocode}
+\newenvironment{blockuntil}[2][]{%
+  \optitem{#1}%
+  \nextblock
+  \def\repeat@cond{#2}%
+  \REPEAT \short\ref{\the\algorithmmasterkey-body\currentblock}%
+  \algolabel{repeat\currentblock}%
+  \block
+    \algolabel{body\currentblock}%
+    \refsetrange{repeat\currentblock}{endrepeat\currentblock}%
+    }{%
+  \endblock
+\item
+  \algolabel{endrepeat\currentblock}%
+  \algoprettify{\UNTIL}{\repeat@cond}{}}
+%    \end{macrocode}
+%  \end{environment}
+%  
+%  \begin{environment}{blockwhile}
+%    The reverse |\WHILE| block is similar to the |\WHILE| block but
+%    the condition is checked at the end rather than at the beginning
+%    of the environment.
+%    \begin{macrocode}
+\newenvironment{blockwhile}[2][]{%
+  \optitem{#1}%
+  \nextblock
+  \def\repeat@cond{#2}%
+  \REPEAT \short\ref{\the\algorithmmasterkey-body\currentblock}%
+  \algolabel{repeat\currentblock}%
+  \block
+    \algolabel{body\currentblock}%
+    \refsetrange{repeat\currentblock}{endrepeat\currentblock}%
+    }{%
+  \endblock
+\item
+  \algolabel{endrepeat\currentblock}%
+  \algoprettify{\WHILE}{\repeat@cond}{}}
+%    \end{macrocode}
+%  \end{environment}
+%
+%  So far for algorithms.
+%    \begin{macrocode}
+%</ccalgo>
+%    \end{macrocode}
+%
+%  \GetFileInfo{ccqed.sty}
+%  \CodelinePrefix{Q}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%    \begin{macrocode}
+%<*ccqed>
+\ProvidesPackage{ccqed}[2000/02/29 v2.04
+  right-justified end-of-proof mark,
+  based on Paul Taylor's QED.sty of 24 June 1995]
+%    \end{macrocode}
+%  We reproduce some of Paul Taylor's comments here.
+%
+%  \medskip\hrule\medskip
+%
+%  \emph{Warning}: If you use this with Frank Mittlebach's
+%  \Lpackage{theorem}\texttt{.sty} you \emph{must} load theorem first,
+%  then QED, then do the |\newtheorem| commands.
+%  \begin{center}
+%    \begin{tabular}{ll}
+%      Authoritative version: &
+%      /pub/tex/contrib/pt/proofs/QED.sty\\
+%      by anonymous FTP from:&
+%      ftp.dcs.qmw.ac.uk\\
+%      also CTAN:            &
+%      macros/generic/proofs/taylor/QED.sty\\
+%      author/maintained by: &
+%      Dr Paul Taylor \email{pt@dcs.qmw.ac.uk}\\
+%    \end{tabular}
+%  \end{center}
+%
+%
+%
+%  \subsection{User Interface and Examples (see also Options below)}
+%
+%  \emph{Warning}: |\qed| which doesn't follow |\Proof| will not print
+%  the square.
+% 
+%  Unfortunately some environments, such as picture, do not allow this
+%  at all.  See the section "centering environments" below for the
+%  mechanism for passing |\qed| to such an environment for special
+%  processing.
+%
+%  In fact |\qed| will only work in those environments which provide
+%  access to the right hand side of the page. In other words, wherever
+%  you think `|\hfill\square|' ought to work then |\qed| will; of course
+%  it is just because that naive method doesn't work that this macro
+%  file is needed at all.  The macro was designed to solve the problem
+%  in the case of `unrestricted horizontal mode' (ie at the end of a
+%  paragraph); it also works in |$$| displays by pretending to be an
+%  equation number. In most other cases it basically does
+%  `|\hfill\square|' or `|\hfill$\square$|' and hopes for the best.
+%
+%  If you have to put |\qed| outside the environment, it may be
+%  appropriate to put |\vskip| |-\baselineskip| before it, unless of
+%  course this would over-print.  There is, however, still a danger
+%  that TeX  will break the page here.  This seems to be unavoidable
+%  if the  environment ends with a |\penalty|.
+%
+%  The eqnarray example above does not in fact work: if you try it
+%  you'll get
+%  \begin{flushleft}
+%  |! Paragraph ended before \llap was complete|
+%  \end{flushleft}
+%  with \LaTeX{} in a mess.  This is a very common place where you
+%  might want to put the end of proof mark, and I also consider that
+%  the fourth column should be available for `reasons' for equational
+%  steps.
+%  The following substitute for |\eqnarray| allows this, whilst being
+%  compatible with automatic numbering. I have proposed it to Rainer
+%  Sch\"{o}pf for inclusion in LaTeX. If you want to use it, please copy
+%  it to another file rather than uncommenting it here.  Don't forget to
+%  use |\makeatletter| or put it in a documentstyle (\texttt{.sty}) file.
+%
+%  \emph{Michael's warning}: This might not work with \LaTeXe{} any more.
+%    \begin{macrocode}
+% \def\eqnarray{%
+%   \stepcounter{equation}%
+%   \let\@currentlabel\theequation
+%   \global\@eqnswtrue\m@th
+%   \global\@eqcnt\z@
+%   \tabskip\@centering
+%   \let\\\@eqncr
+%   $$\halign to\displaywidth\bgroup
+%     \@eqnsel\hskip\@centering$\displaystyle\tabskip\z@{##}$%
+%     &\global\@eqcnt\@ne\hskip2\arraycolsep\hfil${##}$\hfil
+%     &\global\@eqcnt\tw@\hskip2\arraycolsep
+%     $\displaystyle\tabskip\z@{##}$\hfil\tabskip\@centering
+%     &\global\@eqcnt\thr@@\hbox to\z@\bgroup
+%        \hss##%*** instead of "\llap{##}"
+%        \tabskip\z@\cr}%
+% \def\@@eqncr{\let\@tempa\relax
+%   \ifcase\@eqcnt
+%   \def\@tempa{& & &}\or
+%   \def\@tempa{& &}\or
+%   \def\@tempa{&}\else
+%   \@eqnswfalse%*** instead of "\else\def\@tempa{&}"
+%   \fi\@tempa
+%   \if@eqnsw\@eqnnum\stepcounter{equation}\fi
+%   \egroup%*** added, to match \bgroup in fourth cell of preamble
+%   \global\@eqnswtrue\global\@eqcnt\z@\cr}
+%    \end{macrocode}
+%
+%  Why can't we do all of this with |\endProof|? Because by that stage
+%  the damage has been done: the environments, paragraphs or displays
+%  have already been closed and their |\hbox|'es added to the current
+%  vertical list, and cannot be removed for alteration if this is the
+%  current page.
+% 
+%  Even if you don't need to put |\qed| inside an inner environment to
+%  avoid a blank line, it's still a good idea to do so, because
+%  otherwise it's possible that intervening end-of-environment material
+%  may allow TeX to put the mark on the next page.
+%
+%  If you don't use \Lpackage{theorem}\texttt{.sty}, this file instead
+%  provides options to use commands to begin theorems, instead of
+%  enclosing them in environments, and to suppress numbering and
+%  italicisation. A rudimentary version of |\newtheorem| for
+%  plain\TeX{} is also implemented (always using commands rather than
+%  environments).
+%
+%  \subsection{Options}
+%
+%  These are the user commands.
+%
+%  \begin{macro}{\qed}
+%    Suppressible printing of |\qedsymbol|.
+%    \begin{macrocode}
+\def\qed{\protect\@qed{$\qedsymbol$}}
+%    \end{macrocode}
+%  \end{macro}
+%  
+%  |\pushright| takes an argument, which it always prints it is
+%  (re)defined by |\WillHandleQED| and |\UnHandleQED| below (12.4.94)
+%
+%  These are the user-settable parameters.
+%
+%  \begin{macro}{\qedsymbol}
+%    The actual (maths) symbol used by |\qed|.
+%    \begin{macrocode}
+\def\qedsymbol{\square}
+%    \end{macrocode}
+%    \emph{Please note}: this is in the \AMS{} symbols font.
+%    Use one of these instead if you prefer:
+%    |\def\qedsymbol{\blacksquare}| or
+%    |\def\qedsymbol{\hbox{\rm Q.E.D.}}|. %
+%    The Journal of Symbolc Logic likes |\def\qedsymbol{\dashv}|.
+%  \end{macro}
+%  
+%  \begin{macro}{\AutoQEDtrue}
+%    The command |\AutoQEDtrue| causes a |\qed| in |\end{theorem}|, so
+%    you do |\begin{theorem}| \dots{} |\begin{proof}| \dots{}
+%    |\end{proof}| |\end{theorem}| but if you omit the proof, the
+%    statement gets a little square at the end.
+%    \begin{macrocode}
+\newif\ifAutoQED\AutoQEDfalse
+%    \end{macrocode}
+%  \end{macro}
+%  
+%  \subsection{Pushright}
+%
+%  \begin{macro}{\pushright}
+%    If you already have a macro called |\qed|, |\endproof| or
+%    |\pushright| which is laid out in a similar way to the following
+%    two definitions (but with |\hbox@pushright| incorporated) then it
+%    is almost certainly my code, which has been copied anonymously via
+%    numerous people since my Cambridge PhD thesis in August 1986.
+%    Belated acknowledgements to Chris Thompson of the Cambridge
+%    University Computing Service for his help with my early attempts at
+%    TeX, in particular this problem.
+%
+%    The complexity of the macro necessary to get a little box on the
+%    right-hand-side at the end of a proof is amazing.  It really does
+%    have to be this long!  Otherwise you're liable to get it at the
+%    beginning of the next line, or even on the next page.
+%
+%
+%    \begin{macrocode}
+\def\parag@pushright#1{{%
+%    \end{macrocode}
+%    Set up.
+%    So |\par| doesn't push |\square| to left.
+%    \begin{macrocode}
+    \parfillskip\z@
+%    \end{macrocode}
+%    So we don't break the page before |\square|.
+%    \begin{macrocode}
+    \widowpenalty\@M
+    \displaywidowpenalty\@M
+%    \end{macrocode}
+%    See TeXbook exercise 14.32.
+%    \begin{macrocode}
+    \finalhyphendemerits\z@
+%    \end{macrocode}
+%    \paragraph{Horizontal.}
+%    |\leavevmode| is not needed since we now only use it in hmode.
+%    \begin{macrocode}
+%     \leavevmode
+%    \end{macrocode}
+%    This used to be incorporated
+%    \begin{macrocode}
+    \hbox@pushright
+%    \end{macrocode}
+%    The end-of-proof mark (or whatever).
+%    \begin{macrocode}
+    #1%
+%    \end{macrocode}
+%    \paragraph{Vertical.}
+%    Build paragraph with the above parameters.
+%    \begin{macrocode}
+    \par}}%
+%    \end{macrocode}
+%
+%    Horizontal.
+%    \begin{macrocode}
+\def\hbox@pushright{%
+%    \end{macrocode}
+%    Remove previous space or glue.
+%    \begin{macrocode}
+    \unskip
+%    \end{macrocode}
+%    Don't break lines.
+%    \begin{macrocode}
+    \nobreak
+%    \end{macrocode}
+%    Ragged right if we spill over.
+%    \begin{macrocode}
+    \hfil
+%    \end{macrocode}
+%    Discouragement to do so.
+%    \begin{macrocode}
+    \penalty50
+%    \end{macrocode}
+%    Ensure some space.
+%    \begin{macrocode}
+    \hskip.2em
+%    \end{macrocode}
+%    Anchor the following |\hfill|.
+%    \begin{macrocode}
+    \null
+%    \end{macrocode}
+%    Push to right.
+%    \begin{macrocode}
+    \hfill
+}%
+%    \end{macrocode}
+%  
+%    Ideally |\endProof| should do all this. We should be able to add
+%    the symbol to the last line after the paragraph, display or
+%    whatever other structure has been completed and we've returned to
+%    vertical mode. This isn't possible on the current page (outer
+%    vmode) because |\lastbox| doesn't work there.
+%
+%    But |\ifinner| is true inside a |\vbox|, |\vadjust| or |\insert|
+%    (LaTeX |\parbox|, \Lenv{minipage}, \Lenv{figure} or
+%    \Lenv{table}), and in these circumstances we can use |\lastbox|.
+%    We would have to strip \& restore glue \& penalties (|\insert|,
+%    |\mark| and |\write| are obstacles to this) to get access to the
+%    last line (box), which may still not have the correct
+%    baseline. We could check its natural width against the page
+%    width, but if we re-set it, centering and (right) justification
+%    might be disturbed. Is this worth the trouble?
+%
+%    \begin{macrocode}
+\def\vbox@pushright#1{\expandafter\message %  (2 Jan 1994)
+  {QED.sty could be improved in this case
+    (line \the\inputlineno): please ask}%
+  \page@pushright{#1}}%
+%    \end{macrocode}
+%  
+%
+%    Using this method a \Lenv{proof} environment could be implemented
+%    by collecting the entire proof in its own |\vbox|, modifying that
+%    and |\unvbox|'ing it to the current page. This approach may lead to
+%    the following problems:
+%    \begin{enumerate}
+%    \item footnotes, floats, marginpars, labels and index items may be
+%      lost;
+%    \item overflow of TeX's main memory, especially if |\end{proof}| is
+%      missing;
+%    \item I don't know how page-breaking would be handled.
+%    \end{enumerate}
+%
+%    Switch to enable/suppress |\qedsymbol|; since suppression may be
+%    done within a nested scope it must be global, so we do our own
+%    save/restore  in a symbol which is local to a proof environment.
+%    \begin{macrocode}
+\newif\if@qed\@qedfalse
+\def\save@set@qed{\let\saved@ifqed\if@qed\global\@qedtrue}%
+\def\restore@qed{\global\let\if@qed\saved@ifqed}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\def\@qed#1{\check@pt@fm@thm
+%    \end{macrocode}
+%    Have we already done |\qed|?
+%    \begin{macrocode}
+\if@qed
+%    \end{macrocode}
+%    No: do it now, but not again.
+%    \begin{macrocode}
+     \global\@qedfalse\pushright{#1}%
+%    \end{macrocode}
+%    Yes: just end paragraph, if any.
+%    \begin{macrocode}
+\else\ifhmode\ifinner\else\par\fi\fi%
+\fi}
+%    \end{macrocode}
+%
+%    |\pushright{|\meta{text}|}| always prints its argument, on the
+%    far right, in text mode.
+%    \begin{macrocode}
+\def\@pushright#1{%
+  \ifvmode
+%    \end{macrocode}
+%    Vertical mode (see comments above).
+%    \begin{macrocode}
+       \ifinner\vbox@pushright{#1}%
+       \else   \page@pushright{#1}%
+       \fi
+%    \end{macrocode}
+%    Maths (force a text argument).
+%    \begin{macrocode}
+  \else\ifmmode\maths@pushright{\hbox{#1}}%
+%    \end{macrocode}
+%    Inside an |\hbox|.
+%    \begin{macrocode}
+       \else\ifinner\hbox@pushright{#1}%
+%    \end{macrocode}
+%    In a paragraph.
+%    \begin{macrocode}
+            \else\parag@pushright{#1}%
+  \fi  \fi  \fi
+}
+% (22 Feb 1993) removed extra {} which would destroy our \] below
+%    \end{macrocode}
+%
+%    In the |\hbox| and maths cases we are really at the mercy of the
+%    environment.  Assuming that we have |$\qed$| simply embedded in a
+%    paragraph, the horizontal processing by |\hbox@pushright| will at
+%    least make sure that the square isn't at the beginning of the line,
+%    but we can't stop it being on the next page.  However it is more
+%    likely that the reason why we're in maths mode is that we're inside
+%    an eqnarray or similar, in which case |\hfill| will do its best to
+%    put the square on the right of the available space. (See |\vadjust|
+%    below.)
+%    \begin{macrocode}
+\def\maths@pushright#1{%
+  \ifinner
+     \hbox@pushright{#1}%
+  \else
+%    \end{macrocode}
+%    Use \TeX's right equation number feature (|\eqno|) within |$$|.
+%    \begin{macrocode}
+     \eqno#1%
+%    \end{macrocode}
+%    Suppress LaTeX's error checking (HACK!).
+%    \begin{macrocode}
+     \def\]{$$\ignorespaces}%
+  \fi
+}%
+% (22 Feb 1993) removed extra {} which would destroy our \] above
+%    \end{macrocode}
+%  
+%    \paragraph{Outer vertical mode (the current page)}
+%    There's very little we can do in these circumstances!
+%    Penalties still allow the page to be broken.
+%    If the user has put negative glue in, leave it alone. (15 Feb 1994)
+%    \begin{macrocode}
+\def\page@pushright#1{% 18 Jan 1994
+  %\unpenalty % ineffective
+%    \end{macrocode}
+%    Remove |\parskip|, but only (15 Feb 1994) if it's positive.
+%    \begin{macrocode}
+  \skip@\lastskip
+  \ifdim\skip@>\z@
+    \unskip    
+  \else\skip@\z@\relax
+  \fi
+  %\unpenalty % TeX won't let me do this
+  \dimen@\baselineskip
+%    \end{macrocode}
+%    Save |\prevdepth| to make a strut
+%    \begin{macrocode}
+  \advance\dimen@-\prevdepth
+%    \end{macrocode}
+%    Don't break the page here.
+%    \begin{macrocode}
+  \nobreak
+  \nointerlineskip
+  \hbox to\hsize{%
+    \setbox\z@\null
+%    \end{macrocode}
+%    Simulate |\baselineskip|.
+%    \begin{macrocode}
+    \ifdim\dimen@>\z@\ht\z@\dimen@\fi
+    \box\z@
+    \hfill
+    #1}%
+%    \end{macrocode}
+%    Replace old |\parskip|.
+%    \begin{macrocode}
+  \vskip\skip@                 
+}%
+%    \end{macrocode}
+%
+%    An idea that didn't work: see TeXbook p188. (16 Feb 1993) Use
+%    |\predisplaysize| to find out the width of the previous box, in the
+%    case where it has already been completed.  But this can only be
+%    used inside displays (|$$|), and a display in vertical mode begins
+%    a paragraph first, so we end up with
+%    |\predisplaysize=\parindent+2em| whatever happened in the previous
+%    paragraph.
+%   
+%    Another idea: it may be worth trying |\vadjust|, if only to insert
+%    |\nobreak|.  The problem with this is that if we are too deeply
+%    nested in horizontal or maths lists, the adjustment may not be able
+%    to find its way out to the enclosing vertical list. In the case of
+%    array-like environments, it will appear (assuming it manages to get
+%    out) after the current row of the array.
+%  \end{macro}
+%  
+%
+%  \subsection{Adding to theorem environments}
+%
+%    We have to add to the theorem environments the commands to enable
+%    |\qed|.  This is done by re-defining |\@thm#1#2|.  Note that
+%    Mittelbach's \Lpackage{theorem}\texttt{.sty} re-defines |\@thm|
+%    and |\@endtheorem|, so that must be loaded before us, otherwise
+%    our changes will get over-written and |\qed| will never be
+%    enabled.
+%
+%    Save original.
+%    \begin{macrocode}
+\let\nonqed@thm\@thm
+\let\nonqed@endthm\@endtheorem
+\def\@thm{\save@set@qed\nonqed@thm}
+\def\@endtheorem{\ifAutoQED\qed\fi\restore@qed\nonqed@endthm}
+%    \end{macrocode}
+%
+%
+%  \subsection{`Centering' Environments}
+%
+%  Those which don't give their contents access to the right hand side
+%  of the page, such as center, picture, ...  (12 April 1994)
+%
+%  Each individual environment (both the standard ones and those defined
+%  by the user) needs to co-operate in order to make |\qed| and
+%  |\pushright| work.  It is not the business of this package to rewrite
+%  LaTeX in this way, but the following mechanism may be inserted in to
+%  other environments.
+%  \begin{itemize}
+%  \item put |\WillHandleQED| in the |\begin| part of the environment
+%    definition; then if a |\qed| occurs in the body of the environment
+%    it is stored in |\QEDbox| until...
+%  \item |\HandleQED| anywhere in the |\end| part of the environment
+%    definition (even inside dollars, braces or another environment)
+%    prints it.
+%  \end{itemize}
+%  For example:
+% \begin{verbatim}
+% \newenvironment{qedpicture}%
+%    {\begin{picture}\WillHandleQED}%
+%    {\put(0,0){\HandleQED}\end{picture}}
+% \end{verbatim}
+%  To make this compatible with \emph{not} loading
+%  \Lpackage{QED}\texttt{.sty}, add the following to macro files which
+%  use |\WillHandleQED| and |\HandleQED|:
+% \begin{verbatim}
+%   \ifx\WillHandleQED\undefined
+%      \let\WillHandleQED\relax
+%      \let\HandleQED\relax
+%      \let\UnHandleQED\relax % if you use it
+%      \let\QEDbox\voidb@x    % must have \makeatletter here!
+%   \fi
+% \end{verbatim}
+%  |\UnHandleQED| restores normal processing; this may be useful for the
+%  minipage environment, which has its own notion of `right hand side'
+%  of the page.  The width of the saved |\qed| is available for testing
+%  as |\wd\QEDbox|.
+%
+%  The box in which to save |\qed| for special handling.
+%    \begin{macrocode}
+\newbox\qed@box
+%    \end{macrocode}
+%  
+%    \begin{macrocode}
+\def\WillHandleQED{\relax
+  \ifx\HandleQED\nohandle@qed
+%    \end{macrocode}
+%  No enclosing environment has declared |\WillHandleQED|.
+%
+%  |\qed| will be saved.
+%    \begin{macrocode}
+    \def\pushright{\global\setbox\qed@box\hbox}%
+%    \end{macrocode}
+%  Point at the right box.
+%    \begin{macrocode}
+    \let\QEDbox\qed@box
+%    \end{macrocode}
+%  Print it.
+%    \begin{macrocode}
+    \def\HandleQED{\unhbox\QEDbox}%
+%    \end{macrocode}
+%  Check that this really gets done.
+%    \begin{macrocode}
+    \aftergroup\check@handle@qed
+  \else
+%    \end{macrocode}
+%  An enclosing environment already wants to catch |\qed| |\HandleQED|
+%  doesn't print anything - let the saved |\qed| pass through
+%  by pointing at an empty box.
+%    \begin{macrocode}
+    \let\QEDbox\voidb@x
+  \fi
+  }
+%    \end{macrocode}
+%  
+%    \begin{macrocode}
+\def\nohandle@qed{%
+\errhelp{One of them is missing: see QED.sty.}%
+\errmessage{This environment uses \string\WillHandleQED\space and
+\string\HandleQED\space incorrectly}}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\def\check@handle@qed{\relax
+\ifvoid\qed@box\else\expandafter\nohandle@qed\fi}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\def\UnHandleQED{%
+\let\HandleQED\nohandle@qed
+\let\QEDbox\voidb@x
+\def\pushright{\protect\@pushright}}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\UnHandleQED
+%    \end{macrocode}
+%  
+%
+%  If \Lpackage{theorem}\texttt{.sty} hasn't been loaded, arrange to
+%  check it again in |\@qed|. And check (then) whether you've actually
+%  defined |\square|.
+%  Changed 2 June 1993: don't define it now, as that would confuse
+%  \Lpackage{amssymb}\texttt{.sty}.
+%    \begin{macrocode}
+\ifx\theorem@style\undefined
+   \def\check@pt@fm@thm{\relax
+     \ifx\square\undefined
+       \gdef\square{\bigcirc
+          \errhelp={Anonymous ftp e-math.ams.com /ams/amsfonts}%
+          \errmessage{\string\square\space is an AMS symbol}%
+          \global\let\square\bigcirc}%
+     \fi
+      \ifx\theorem@style\undefined
+          \global\let\check@pt@fm@thm\relax
+      \else
+        \errhelp={The macros \@thm and \@endtheorem
+          need to be re-defined.}%
+        \errmessage{QED.sty must be loaded AFTER theorem.sty but
+          before using \string\newtheorem}%
+      \fi
+      \global\let\check@pt@fm@thm\relax
+      }%
+\else
+   \def\check@pt@fm@thm{%
+      \ifx\square\undefined
+         \def\square{\bigcirc
+         \errhelp={Anonymous ftp e-math.ams.com /ams/amsfonts}%
+         \errmessage{\string\square\space is an AMS symbol}%
+         \global\let\square\bigcirc}%
+      \fi
+      \global\let\check@pt@fm@thm\relax
+      }%
+\fi
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\DeclareOption{auto-QED}{\AutoQEDtrue}%
+\DeclareOption{explicit-QED}{\AutoQEDfalse}%
+\DeclareOption{black-square}{\def\qedsymbol{\blacksquare}}%
+\DeclareOption{open-square}{\def\qedsymbol{\square}}%
+\ProcessOptions\relax
+%    \end{macrocode}
+%
+%  \subsection{Bugs}
+%
+%  |\item\qed\end{letterlist}| puts the square above the item label.
+%
+%  |! You can't use `\unskip' in vertical mode.|
+%  from |\qed| in a paragraph on its own.
+%
+%  \medskip\hrule\medskip
+%
+%  \subsection{Michael's fixes \dots}
+%
+%  While \Lpackage{QED}\texttt{.sty} does a very fine job it leaves
+%  some things apart.  Of course, it was not aware of much of the
+%  newer \AMS{} math environments.  In the following I tried to
+%  redefine |\qed| and |\pushright| in order to work in all standard
+%  circumstances reasonably well.
+%
+% \iffalse meta-comment
+%  The following was a trial to fix |\pushright| instead of |\qed|.
+%
+%  Unfortunately, |\pushright| does not always work well, especially
+%  in equation-like environment as provided by the \AMS{} package
+%  \Lpackage{amsmath} there are several new complications.
+%  We make |\pushright| and |\qed| work in all these environments.
+%    \begin{macrocode}
+% \newif\if@resettagsleft@%\fi
+% \let\standardpushright\pushright
+% \def\rescuepushright#1{\qquad\hbox{#1}}
+% \def\eqnopushright#1{\eqno\hbox{#1}}
+% \let\ccorg@eqnnum\@eqnnum
+% \let\ccorg@nonumber\nonumber
+% \def\eqnarraypushright#1{%
+%   \global\@eqnswtrue
+%   \global\let\nonumber\relax
+% % equation counter will be incremented at \end{eqnarray*} by \@@eqncr!
+%   \addtocounter{equation}\m@ne
+%   \gdef\@eqnnum{\llap{#1}%
+%     \global\let\nonumber\ccorg@nonumber
+%     \global\let\@eqnnum\ccorg@eqnnum}}
+% \def\tagpushright#1{%
+%   \typeout{tagpushright #1}
+%   \tag*{\iftagsleft@%\iftrue
+%     \hskip\displaywidth\llap{#1}\hskip-\displaywidth%
+%     \else\hbox{#1}\fi}}
+% \def\simpletagpushright#1{\iftagsleft@%\iftrue
+%   \global\@resettagsleft@true\fi
+%   \global\tagsleft@false
+%   \tag*{\hbox{#1}}}
+% \def\aftersplitpushright#1{%
+%   \def\@endsplit{%
+%     \global\let\endsplit\ccorg@endsplit
+%     \endsplit
+%     \pushright{#1}%
+%     }}
+% \let\ccorg@endsplit\endsplit
+% %
+% \newif\if@pushrightfailed%\fi
+% \def\nopushright#1{\global\@pushrightfailedtrue}
+% \def\@ifcurrenv#1#2{\def\@tempa{#1}\ifx\@tempa\@currenvir\relax
+%   \let\next#2\fi}
+% \renewenvironment{displaymath}{$$}{$$\@ignoretrue}
+% \renewcommand{\[}{\begin{displaymath}}
+% \renewcommand{\]}{\end{displaymath}}
+% \if@ams
+% \def\pushright{%
+%   \global\@pushrightfailedfalse
+%   \if@resettagsleft@\global\tagsleft@true\global\@resettagsleft@false\fi
+%   \let\next\standardpushright
+%   \@ifcurrenv{displaymath}\eqnopushright
+%   \@ifcurrenv{equation}\nopushright
+%   \@ifcurrenv{eqnarray}\nopushright
+%   \@ifcurrenv{eqnarray*}\eqnarraypushright
+%   \@ifcurrenv{equation*}\tagpushright
+%   \@ifcurrenv{split}\aftersplitpushright
+%   \@ifcurrenv{multline}\nopushright
+%   \@ifcurrenv{multline*}\simpletagpushright
+%   \@ifcurrenv{gather}\nopushright
+%   \@ifcurrenv{gather*}\tagpushright
+%   \@ifcurrenv{align}\nopushright
+%   \@ifcurrenv{align*}\tagpushright
+%   \@ifcurrenv{alignat}\nopushright
+%   \@ifcurrenv{alignat*}\tagpushright
+%   \next}
+% \else
+% \def\pushright{%
+%   \global\@pushrightfailedfalse
+%   \let\next\standardpushright
+%   \@ifcurrenv{displaymath}\eqnopushright
+%   \@ifcurrenv{equation}\nopushright
+%   \@ifcurrenv{eqnarray}\nopushright
+%   \@ifcurrenv{eqnarray*}\eqnarraypushright
+%   \next}
+% \fi
+% \def\@@qed#1{%
+%   \pushright{#1}%
+%   \if@pushrightfailed\else\global\@qedfalse\fi
+% }
+% \def\@@qedpar#1{%
+%   \ifhmode\ifinner\else\par\fi\fi
+% }
+% \def\@qed{\check@pt@fm@thm
+% \if@qed\let\next\@@qed\else\let\next\@@qedpar\fi\next}
+% %
+% \endinput%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%    \end{macrocode}
+% \fi
+%
+%  Unfortunately, |\qed| does not always work well, especially
+%  in equation-like environment as provided by the \AMS{} package
+%  \Lpackage{amsmath} there are several new complications.
+%  We make |\qed| work in all these environments.
+%    \begin{macrocode}
+\newif\if@resettagsleft@
+\let\standardqed\qed
+\def\rescueqed{\qquad\qedsymbol\vphantom{\standardqed}}
+\def\eqnoqed{\eqno\hbox{\standardqed}}%\vphantom{\standardqed}}
+\let\ccorg@eqnnum\@eqnnum
+\let\ccorg@nonumber\nonumber
+\def\eqnarrayqed{%
+  \global\@eqnswtrue
+  \global\let\nonumber\relax
+% equation counter will be incremented at \end{eqnarray*} by \@@eqncr!
+  \addtocounter{equation}\m@ne
+  \gdef\@eqnnum{\llap{$\qedsymbol$\vphantom{\standardqed}}%
+    \global\let\nonumber\ccorg@nonumber
+    \global\let\@eqnnum\ccorg@eqnnum}}
+\def\tagqed{\tag*{\iftagsleft@
+    \hskip\displaywidth\llap{$\qedsymbol$}\hskip-\displaywidth%
+    \else$\qedsymbol$\fi}\vphantom{\standardqed}}
+\def\simpletagqed{\iftagsleft@\global\@resettagsleft@true\fi
+  \global\tagsleft@false
+  \tag*{$\qedsymbol$}\vphantom{\standardqed}}
+\def\aftersplitqed{\global\let\endsplit\@endsplit}
+\let\ccorg@endsplit\endsplit
+\def\@endsplit{\ccorg@endsplit\qed\global\let\endsplit\ccorg@endsplit}%
+\def\noqed{}
+\def\@ifcurrenv#1#2{\def\@tempa{#1}\ifx\@tempa\@currenvir\relax
+  \let\next#2\fi}
+\renewenvironment{displaymath}{$$}{$$\@ignoretrue}
+\renewcommand{\[}{\begin{displaymath}}
+\renewcommand{\]}{\end{displaymath}}
+\if@ams
+\def\qed{%
+  \if@resettagsleft@
+    \global\tagsleft@true
+    \global\@resettagsleft@false
+  \fi
+  \let\next\standardqed
+  \@ifcurrenv{displaymath}\eqnoqed
+  \@ifcurrenv{equation}\noqed
+  \@ifcurrenv{eqnarray}\noqed
+  \@ifcurrenv{eqnarray*}\eqnarrayqed
+  \@ifcurrenv{equation*}\tagqed
+  \@ifcurrenv{split}\aftersplitqed
+  \@ifcurrenv{multline}\noqed
+  \@ifcurrenv{multline*}\simpletagqed
+  \@ifcurrenv{gather}\noqed
+  \@ifcurrenv{gather*}\tagqed
+  \@ifcurrenv{align}\noqed
+  \@ifcurrenv{align*}\tagqed
+  \@ifcurrenv{alignat}\noqed
+  \@ifcurrenv{alignat*}\tagqed
+  \next}
+\else
+\def\qed{%
+  \let\next\standardqed
+  \@ifcurrenv{displaymath}\eqnoqed
+  \@ifcurrenv{equation}\noqed
+  \@ifcurrenv{eqnarray}\noqed
+  \@ifcurrenv{eqnarray*}\eqnarrayqed
+  \next}
+\fi
+%</ccqed>
+%    \end{macrocode}
+%
+%  \GetFileInfo{cc2cite.sty}
+%  \CodelinePrefix{C}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%    \begin{macrocode}
+%<*cc2cite>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{cc2cite}[2000/02/29 v2.04 cc2 cite helper package]
+%    \end{macrocode}
+%  We simply load \Lpackage{natbib} and make some small initializations.
+%    \begin{macrocode}
+\RequirePackage{natbib}
+\bibpunct{(}{)}{;}{a}{}{,}
+\newcommand{\bibstyle@cc}{\bibpunct{(}{)}{;}{a}{}{,}}
+\expandafter\def\csname bibstyle@cc2\endcsname{%
+  \bibpunct{(}{)}{;}{a}{}{,}}
+\let\bibfont\small
+\bibhang\z@
+\providecommand{\newwarning}[2]{%
+  \expandafter\gdef\csname cc@warn@#1\endcsname{#2}}
+\providecommand{\ccClassWarning}[1]{%
+  \ClassWarning{cc}{\csname cc@warn@#1\endcsname}}
+\newwarning{old@citemul}{%
+    The command \protect\citemul\space is obsolete.
+    Use \protect\citet\space instead.\MessageBreak
+    Please read the documentation
+    of the package `natbib.sty'}
+\newwarning{old@parencite}{%
+    The command \protect\parencite\space is obsolete.
+    Use \protect\citep\space instead.\MessageBreak
+    Please read the documentation
+    of the package `natbib.sty'}
+\newwarning{old@shortcite}{%
+    The command \protect\shortcite\space is obsolete.
+    Use \protect\citealt\space instead.\MessageBreak
+    Please read the documentation
+    of the package `natbib.sty'}
+% \def\warning@old@cite#1#2{\ClassWarning{cc}{%
+%     The command \protect#1\space is obsolete.
+%     Use \protect#2\space instead.\MessageBreak
+%     Please read the documentation
+%     of the package `natbib.sty'.\MessageBreak}}
+\def\citemul{\ccClassWarning{old@citemul}\citet}
+\def\parencite{\ccClassWarning{old@parencite}\citep}
+\def\shortcite{\ccClassWarning{old@shortcite}\citealt}
+%    \end{macrocode}
+%  This loads the bibliography style \file{cc2.bst} unless there is a
+%  |\bibliographystyle| command before the |\bibliography| command.
+%    \begin{macrocode}
+\RequirePackage{ccdbs}
+\DefaultBibliographyStyle{cc2}
+%</cc2cite>
+%    \end{macrocode}
+%
+%  \GetFileInfo{cccite.sty}
+%  \CodelinePrefix{c}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%
+%  \changes{v0.91}{2000/02/29}{Advanced version to official 2.00}
+%    \begin{macrocode}
+%<*cccite>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{cccite}[2000/02/29 v2.04 cc cite helper package]
+\PackageWarningNoLine{cccite}{%
+  The package cccite is obsolete.\MessageBreak
+  Better use cc2cite.
+  }
+%    \end{macrocode}
+%
+%  This is the named references stuff from
+%  \Lpackage{namedrefs}\texttt{.sty} butchered and adapted by David
+%  McClurkin, and again by Michael N{\"{u}}sken.
+%
+%  It supports the following seven citation forms:
+%  \begin{center}
+%    \begin{tabular}{ll}
+%      |\cite|       & Cook (1990) \\
+%      |\citeauthor| & Cook \\
+%      |\citeyear|   & 1990 \\
+%      |\citemul|    & Cook (1990, 1991a, 1991b) \\
+%      |\shortcite|  & Cook 1990 \\
+%      |\parencite|  & (Cook 1990)\\
+%      |\nocite|     & 
+%    \end{tabular}
+%  \end{center}
+%
+%  The package \Lpackage{ccdbs} simply guarantees that by default
+%  |\bibliographystyle{cc}| is called unless the user issued a
+%  |\bibliographystyle| command \emph{before} the |\bibliography|
+%  command.
+%    \begin{macrocode}
+\RequirePackage{ccdbs}
+\DefaultBibliographyStyle{cc}
+%    \end{macrocode}
+%  Remember the built in |\cite| since it will be redefined.
+%    \begin{macrocode}
+\let\ccorg@cite\cite
+\let\ccorg@@cite\@cite
+%    \end{macrocode}
+%  After a comma we use |\penalty\@citeseppen|.
+%    \begin{macrocode}
+\def\@citeseppen{-5}
+%    \end{macrocode}
+%  
+%    \begin{macrocode}
+\def\@cite#1#2{{#1\if@tempswa , #2\fi}}
+%    \end{macrocode}
+%  The commands we provide only differ in the format of their output.
+%  This format is stored in |\citeauthoryear|, then the universal
+%  mechanism |\@citex| is applied.
+%    \begin{macrocode}
+\def\cite#1{\def\citeauthoryear##1##2{##1\ (##2)}\@citex{#1}}
+\def\citeauthor#1{\def\citeauthoryear##1##2{##1}\@citex{#1}}
+\def\citeyear#1{\def\citeauthoryear##1##2{##2}\@citex{#1}}
+\def\shortcite#1{\def\citeauthoryear##1##2{##1\ ##2}\@citex{#1}}
+\def\parencite#1{\def\citeauthoryear##1##2{(##1\ ##2)}\@citex{#1}}
+%    \end{macrocode}
+%  |\citemul| is composed from the previous commands.
+%    \begin{macrocode}
+\def\citemul#1{\@mcite #1\@\@ }
+\def\@mcite#1,#2\@\@{\citeauthor{#1}\hskip3pt(\citeyear{#1,#2})}
+%    \end{macrocode}
+%  \begin{macro}{\@citex}
+%    The argument is a list of citations.  For each of a macro
+%    containing a |\citeauthoryear| is expanded.  These things are
+%    seperated by commas with following |\penalty|.
+%    \begin{macrocode}
+\def\@citex#1{\@tempswafalse%
+ \if@filesw\immediate\write\@auxout{\string\citation{#1}}\fi
+  \def\@citea{}\@cite{\@for\@citeb:=#1\do
+    {\@citea\def\@citea{,\penalty\@citeseppen\ }\@ifundefined
+       {b@\@citeb}{{\bf ?}\@warning
+       {Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{}}
+%    \end{macrocode}
+%  \end{macro}
+%  The following macros are defined in order to be compatible with the
+%  \Lpackage{natbib} package.  However, they only have the same
+%  syntax, their functionality is not as good as with
+%  \Lpackage{natbib}.
+%    \begin{macrocode}
+\let\ccorg@cite\cite
+\newcommand{\citet}{\let\which@cite\ccorg@cite\cc@citea}
+\let\cite\citet
+\newcommand{\citep}{\let\which@cite\parencite\cc@citea}
+\newcommand{\citealt}{\let\which@cite\shortcite\cc@citea}
+\newcommand{\citealp}{\let\which@cite\shortcite\cc@citea}
+\newcommand{\citetext}[1]{(#1)}
+\newcommand{\@citeyearpar}[1]{\citetext{\citeyear{#1}}}
+\newcommand{\citeyearpar}{\let\which@cite\@citeyearpar\cc@citea}
+\let\ccorg@citeauthor\citeauthor
+\renewcommand{\citeauthor}{\let\which@cite\ccorg@citeauthor\cc@citea}
+\newcommand{\citefullauthor}{\citeauthor*}
+\newcommand{\Citet}{\let\which@cite\cite\cc@citea}
+\newcommand{\Citep}{\let\which@cite\parencite\cc@citea}
+\newcommand{\Citealt}{\let\which@cite\shortcite\cc@citea}
+\newcommand{\Citealp}{\let\which@cite\shortcite\cc@citea}
+%
+\newwarning{poormancitea}{%
+  This is only a poor (wo)man's version of this command.\MessageBreak
+  Please use the package  natbib.sty  for full features.\MessageBreak
+  Drop the document class option  cccite }
+\newcommand{\cc@citea}{%
+  \ccClassWarning{poormancitea}%
+  \@tempswafalse\@ifstar{\cc@cite@st}{\cc@citeb}}
+\def\cc@cite@st{\@tempswatrue\cc@citeb}
+\newcommand{\cc@citeb}[1][]{\def\cc@cite@a{#1}\cc@citec}
+\newcommand{\cc@citec}[1][]{\def\cc@cite@b{#1}\which@cite}
+%    \end{macrocode}
+%  This is used in bibliography labels to produce the text.  We do not
+%  want any text.  (For some reason not known to me this information
+%  is stored in a macro.)
+%    \begin{macrocode}
+\def\@biblabel#1{%
+  \def\citename##1{##1}% for authordate bib styles
+  }
+%    \end{macrocode}
+%  We lend some code from \Lpackage{natbib} to avoid conflicts with
+%  different versions of \file{cc.bst}.
+%    \begin{macrocode}
+\newcounter{NAT@ctr}
+\def\NAT@noname{{}}
+\let\ccorg@lbibitem\@lbibitem
+\def\@lbibitem[#1]#2{%
+  \let\citeauthoryear\bib@citeauthoryear
+  \if@filesw\@tempswatrue\else\@tempswafalse\fi\@fileswfalse
+  \ccorg@lbibitem[#1]{#2}%
+  \if@tempswa\@fileswtrue\fi
+  \NAT@ifcmd#1(@)(@)\@nil{#2}\ignorespaces}
+\newcommand\NAT@ifcmd{\futurelet\NAT@temp\NAT@ifxcmd}
+\newcommand\NAT@ifxcmd{%
+  \ifx\NAT@temp\relax\else\expandafter\NAT@bare\fi}
+\def\NAT@bare#1(#2)#3(@)#4\@nil#5{%
+  \if @#2
+  \expandafter\NAT@apalk#1, , \@nil{#5}\else
+  \stepcounter{NAT@ctr}%
+  \cc@wrout{\arabic {NAT@ctr}}{#2}{#1}{#3}{#5}
+\fi
+}
+\newcommand\NAT@apalk{}
+\def\NAT@apalk#1, #2, #3\@nil#4{\if\relax#2\relax
+  \global\NAT@stdbsttrue
+  \cc@wrout{#1}{}{}{}{#4}\else
+  \stepcounter{NAT@ctr}%
+  \cc@wrout{\arabic {NAT@ctr}}{#2}{#1}{}{#4}\fi}
+\newcommand\citeauthoryear{}
+\def\bib@citeauthoryear#1#2#3(@)(@)\@nil#4{%
+  \stepcounter{NAT@ctr}\if\relax#3\relax
+   \cc@wrout{\arabic {NAT@ctr}}{#2}{#1}{}{#4}\else
+   \cc@wrout{\arabic {NAT@ctr}}{#3}{#2}{#1}{#4}\fi}
+\newcommand\citestarts{\NAT@open}
+\newcommand\citeends{\NAT@close}
+\newcommand\betweenauthors{and}
+\newcommand\astroncite{}
+\def\astroncite#1#2(@)(@)\@nil#3{\stepcounter{NAT@ctr}\cc@wrout{\arabic
+{NAT@ctr}}{#2}{#1}{}{#3}}
+\newcommand\citename{}
+\def\citename#1#2(@)(@)\@nil#3{\expandafter\NAT@apalk#1#2, \@nil{#3}}
+\newcommand\harvarditem[4][]%
+    {\if\relax#1\relax\bibitem[#2(#3)]{#4}\else
+        \bibitem[#1(#3)#2]{#4}\fi }
+\newcommand\harvardleft{\NAT@open}
+\newcommand\harvardright{\NAT@close}
+\newcommand\harvardyearleft{\NAT@open}
+\newcommand\harvardyearright{\NAT@close}
+\AtBeginDocument{\providecommand{\harvardand}{and}}
+\newcommand\harvardurl[1]{\textbf{URL:} \textit{#1}}
+\newcommand\cc@wrout[5]{%
+  \if@filesw
+  {\let\protect\noexpand\let~\relax
+    \immediate
+    \write\@auxout{\string\bibcite{#5}%
+      {\protect\citeauthoryear{#3}{#2}}}}\fi
+  \ignorespaces}
+%</cccite>
+%    \end{macrocode}
+%
+%  \GetFileInfo{ccdbs.sty}
+%  \CodelinePrefix{D}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%
+%  \changes{v1.99}{2000/02/24}{Made this an own file}
+%    \begin{macrocode}
+%<*ccdbs>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{ccdbs}[2000/02/20 v2.04 bibliography helper package]
+%    \end{macrocode}
+%
+%  We manipulate |\bibliographystyle| and |\bibliography|.  By default
+%  |\bibliographystyle|\linebreak[3]|{\bibstyle@default}| is called
+%  unless the user issued a |\bibliographystyle| command before the
+%  |\bibliography| command.
+%    \begin{macrocode}
+\let\ccorg@bibliographystyle\bibliographystyle
+\newif\if@bibstylemissing \@bibstylemissingtrue
+\def\bibliographystyle{\@bibstylemissingfalse
+  \gdef\bibliographystyle##1{%
+    \PackageWarning{ccdbs}{\protect\bibliographystyle\space can be
+      used only before \protect\bibliography!}}%
+  \ccorg@bibliographystyle}
+\let\ccorg@bibliography\bibliography
+\def\bibliography{%
+  \if@bibstylemissing
+  \bibliographystyle{\bibstyle@default}%
+  \fi
+  \ccorg@bibliography}
+%    \end{macrocode}
+%  \begin{macro}{\DefaultBibliographyStyle}
+%    The command |\DefaultBibliographyStyle| allows to choose another
+%    default value.  The default value of |\bibstyle@default| is
+%    |plain|.
+%    \begin{macrocode}
+\newcommand{\DefaultBibliographyStyle}[1]{%
+  \def\bibstyle@default{#1}}
+\DefaultBibliographyStyle{plain}
+%</ccdbs>
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \GetFileInfo{cc.cls}
+%  \def\filename{cctemplate.tex}
+%  \CodelinePrefix{p}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%    \begin{macrocode}
+%<*cctemplate>
+\begin{filecontents*}{myrefs.bib}
+  %% Insert your bibliography file here (if any)
+\end{filecontents*}
+\begin{filecontents}{main.bbl}
+  %% Replace `main.bbl' by your main file's name + ".bbl"
+  %% Insert your bbl file here (if any)
+\end{filecontents}
+\documentclass{cc}
+
+
+%%% personal macros and packages
+%%% end of personal macros and packages
+
+
+%%\ccpublish{}{}{}{}
+\contact{}% Insert contact email address here.
+\received{}% Insert received date here.
+\title{}% Insert title here. (Use \\ to split lines.)
+%%\titlehead{}% If necessary insert running head title here.
+\author{}% Insert author list here. (Each author must be given
+         % including his/her current address, email and possibly
+         % homepage.  Lines are seperated by \\, different authors
+         % are seperated by \and .)
+%%\authorhead{}% If necessary insert running head authors here.
+%%\authorlist{}% If necessary insert title author list here.
+
+\begin{abstract}
+  %% Insert abstract here.
+\end{abstract}
+
+\begin{keywords}
+  %% Insert keywords here.
+\end{keywords}
+
+\begin{subject}
+  %% Insert subject classification here.
+\end{subject}
+
+
+
+\begin{document}
+
+%%% Insert your article text here.
+
+
+
+
+
+
+\begin{acknowledge}
+  %% Insert your acknowledgments here.
+\end{acknowledge}
+
+\bibliography{}% Insert your bibliography file names here.
+
+\end{document}
+
+%</cctemplate>
+%    \end{macrocode}
+%
+%  \GetFileInfo{cc.cls}
+%  \def\filename{cc-portability-frame.tex}
+%  \CodelinePrefix{}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%  \changes{v2.03}{2003/05/26}{Added cc-portability-frame.tex ...}
+%    \begin{macrocode}
+%<*ccportabilityframe>
+\newif\ifcc\IfFileExists{cc.cls}{\cctrue}{\ccfalse}\ifcc
+
+%%% Include your document here
+%%% (formatted as described in this documentation or
+%%%  sketched by the template file cctemplate.tex).
+
+\else
+
+%%% Include cc-cls-inline.tex here.
+
+\typeout{Please call latex again.}
+\makeatletter\expandafter\@@end
+\fi
+%</ccportabilityframe>
+%    \end{macrocode}
+%
+%  \def\filename{ccreltx.sty}
+%  \CodelinePrefix{}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%
+%  It is a helper that deactivates changes made by \Lpackage{amsthm}
+%  or thelike, and reactivates the original \LaTeX{} definitions.  In
+%  fact, the following is just an extract of \file{ltthm.dtx} which is
+%  part of the \LaTeX{} basis.
+%    \begin{macrocode}
+%<*ccreltx>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{ccreltx}[2002/05/22 v2.04
+         computational complexity, reactivate ltthm.
+         Michael Nuesken, Bonn.]
+%%% From File: ltthm.dtx
+\def\newtheorem#1{%
+  \@ifnextchar[{\@othm{#1}}{\@nthm{#1}}}
+\def\@nthm#1#2{%
+  \@ifnextchar[{\@xnthm{#1}{#2}}{\@ynthm{#1}{#2}}}
+\def\@xnthm#1#2[#3]{%
+  \expandafter\@ifdefinable\csname #1\endcsname
+    {\@definecounter{#1}\@newctr{#1}[#3]%
+     \expandafter\xdef\csname the#1\endcsname{%
+       \expandafter\noexpand\csname the#3\endcsname \@thmcountersep
+          \@thmcounter{#1}}%
+     \global\@namedef{#1}{\@thm{#1}{#2}}%
+     \global\@namedef{end#1}{\@endtheorem}}}
+\def\@ynthm#1#2{%
+  \expandafter\@ifdefinable\csname #1\endcsname
+    {\@definecounter{#1}%
+     \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
+     \global\@namedef{#1}{\@thm{#1}{#2}}%
+     \global\@namedef{end#1}{\@endtheorem}}}
+\def\@othm#1[#2]#3{%
+  \@ifundefined{c@#2}{\@nocounterr{#2}}%
+    {\expandafter\@ifdefinable\csname #1\endcsname
+    {\global\@namedef{the#1}{\@nameuse{the#2}}%
+  \global\@namedef{#1}{\@thm{#2}{#3}}%
+  \global\@namedef{end#1}{\@endtheorem}}}}
+\def\@thm#1#2{%
+  \refstepcounter{#1}%
+  \@ifnextchar[{\@ythm{#1}{#2}}{\@xthm{#1}{#2}}}
+\def\@xthm#1#2{%
+  \@begintheorem{#2}{\csname the#1\endcsname}\ignorespaces}
+\def\@ythm#1#2[#3]{%
+  \@opargbegintheorem{#2}{\csname the#1\endcsname}{#3}\ignorespaces}
+\def\@thmcounter#1{\noexpand\arabic{#1}}
+\def\@thmcountersep{.}
+\def\@begintheorem#1#2{\trivlist
+   \item[\hskip \labelsep{\bfseries #1\ #2}]\itshape}
+\def\@opargbegintheorem#1#2#3{\trivlist
+      \item[\hskip \labelsep{\bfseries #1\ #2\ (#3)}]\itshape}
+\def\@endtheorem{\endtrivlist}
+%</ccreltx>
+%    \end{macrocode}
+%
+%  \def\filename{cc4apjrnl.sty}
+%  \CodelinePrefix{}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%
+%  It allows to use the document class \Lclass{apjrnl} for a file that
+%  has been written with the document class \Lclass{cc}.  To do this
+%  add the line
+%  \begin{verbatim}
+% \expandafter\def\csname ver@apthm.sty\endcsname{2001/03/05}
+%  \end{verbatim}
+%  \emph{before} the |\documentclass| and a |\usepackage{cc4apjrnl}|
+%  after it.
+%    \begin{macrocode}
+%<*cc4apjrnl>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{cc4apjrnl}[2002/01/08 v2.04
+         computational complexity, adaptions to apjrnl.
+         Michael Nuesken, Bonn.]
+% Forget this AP definition
+\let\answer\relax
+\let\endanswer\relax
+% Load our definitions
+\RequirePackage{amsmath}[1997/03/20 v1.2d]
+% amsmath contains amstext, amsgen, amsbsy, amsopn
+\RequirePackage{amsfonts}[1997/09/17 v2.2e]
+\RequirePackage{amssymb}[1996/11/03 v2.2b]
+\RequirePackage{ccaux}
+\RequirePackage{ccreltx}% deactivate amsthm.sty and reactive LaTeX's definitions.
+\@longarticletrue
+\@adjustnumbering
+\let\theorem@style\@undefined
+\RequirePackage{ccthm}
+\RequirePackage{ccqed}
+\let\proof\@undefined
+\let\endproof\@undefined
+\RequirePackage{ccproof}
+\RequirePackage{cc2cite}
+\RequirePackage{url}[1999/03/02 ver 1.4]
+\expandafter\def\expandafter\UrlSpecials\expandafter{%
+  \UrlSpecials\do\%{}}
+\providecommand{\email}{\begingroup\urlstyle{tt}\Url}
+\providecommand{\homepage}{\begingroup\scriptsize\urlstyle{tt}\Url}
+% Adapt to AP style
+\gdef\theorem@headerfont{\scshape\null\hskip\parindent}
+\gdef\Proof{\textit{Proof}}
+\renewcommand{\qedsymbol}{\rule{2pt}{4pt}}
+%</cc4apjrnl>
+%    \end{macrocode}
+%
+%  \def\filename{cc4amsart.sty}
+%  \CodelinePrefix{}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%
+%  It allows to use the document class \Lclass{amsart} or derivatives
+%  of it (as \Lclass{mcom-l}, \dots) for a file that has been written
+%  with the document class \Lclass{cc}.  To do this add a
+%  |\usepackage{cc4amsart}| after it.
+%    \begin{macrocode}
+%<*cc4amsart>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{cc4amsart}[2002/01/08 v2.04
+         computational complexity, adaptions to amsart.
+         Michael Nuesken, Bonn.]
+\RequirePackage{ccaux}
+\RequirePackage{ccreltx}% deactivate amsthm.sty and reactive LaTeX's
+                        % definitions.
+\PassOptionsToPackage{bare}{relabel}
+\RequirePackage{thcc}
+\gdef\theorem@headerfont{\bfseries}
+%% \def\th@cc{%
+%%   \normalfont\itshape
+%%   \def\@begintheorem##1##2{\item
+%%     [\hskip\labelsep \theorem@headerfont ##1\ ##2.]}%
+%%   \def\@opargbegintheorem##1##2##3{\item
+%%     [\hskip\labelsep \theorem@headerfont ##1\ ##2\ %
+%%     \normalfont({\activate@shortcite{}##3}).]}%
+%%   }
+\@longarticletrue
+\RequirePackage{ccthm}
+\babel\def\ccacknowledgementsname{Acknowledgements}[%
+  german=Danksagung,french=Remerciements]
+\newenvironment{acknowledge}{\section*{\ccacknowledgementsname}}{}
+\RequirePackage{relabel}
+\RequirePackage{cc2cite}
+\RequirePackage{ccqed}
+%</cc4amsart>
+%    \end{macrocode}
+%
+%  \def\filename{cc4llncs.sty}
+%  \CodelinePrefix{}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%
+%  It allows to use the document class \Lclass{llncs} for a file that
+%  has been written with the document class \Lclass{cc}.  To do this
+%  add the line |\usepackage{cc4llncs}|.
+%    \begin{macrocode}
+%<*cc4llncs>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{cc4llncs}[2002/10/01 v2.04
+         computational complexity, adaptions to llncs.
+         Michael Nuesken, Bonn.]
+% Forget these llncs definitions
+\let\claim\relax \let\endclaim\relax
+\let\conjecture\relax \let\endconjecture\relax
+\let\corollary\relax \let\endcorollary\relax
+\let\counterexample\relax \let\endcounterexample\relax
+\let\definition\relax \let\enddefinition\relax
+\let\exercise\relax \let\endexercise\relax
+\let\fact\relax \let\endfact\relax
+\let\hypothesis\relax \let\endhypothesis\relax
+\let\lemma\relax \let\endlemma\relax
+\let\notation\relax \let\endnotation\relax
+\let\note\relax \let\endnote\relax
+\let\observation\relax \let\endobservation\relax
+\let\open\relax \let\endopen\relax
+\let\openquestion\relax \let\endopenquestion\relax
+\let\problem\relax \let\endproblem\relax
+\let\proposition\relax \let\endproposition\relax
+\let\question\relax \let\endquestion\relax
+\let\remark\relax \let\endremark\relax
+\let\result\relax \let\endresult\relax
+\let\theorem\relax \let\endtheorem\relax
+\let\thesis\relax \let\endthesis\relax
+\let\warning\relax \let\endwarning\relax
+\let\example\relax \let\endexample\relax
+% Load our definitions
+\RequirePackage{amsmath}[1997/03/20 v1.2d]
+% amsmath contains amstext, amsgen, amsbsy, amsopn
+\RequirePackage{amsfonts}[1997/09/17 v2.2e]
+\RequirePackage{amssymb}[1996/11/03 v2.2b]
+\RequirePackage{ccaux}
+\@longarticletrue
+\RequirePackage{ccreltx}% deactivate amsthm.sty and reactive LaTeX's
+                        % definitions.
+\RequirePackage{ccthm}
+\theoremheaderfont{\upshape\bfseries}
+\RequirePackage{ccalgo}
+% Load our citation scheme but keep llncs environment thebibliography.
+\let\origthebibliography\thebibliography
+\let\origendthebibliography\endthebibliography
+\let\citeauthoryear\relax
+\RequirePackage{cc2cite}
+\let\thebibliography\origthebibliography
+\let\endthebibliography\origendthebibliography
+%
+\RequirePackage{url}[1999/03/02 ver 1.4]
+\expandafter\def\expandafter\UrlSpecials\expandafter{%
+  \UrlSpecials\do\%{}}
+\providecommand{\email}{\begingroup\urlstyle{tt}\Url}
+\providecommand{\homepage}{\begingroup\scriptsize\urlstyle{tt}\Url}
+% one of our helpers
+\def\condbreak#1{%
+  \vskip 0pt plus #1%
+  \pagebreak[3]%
+  \vskip 0pt plus -#1%
+  \relax}
+%%%
+%</cc4llncs>
+%    \end{macrocode}
+%
+%  \def\filename{cc4siamltex.sty}
+%  \CodelinePrefix{}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%
+%  It allows to use the document class \Lclass{amsart} or derivatives
+%  of it (as \Lclass{mcom-l}, \dots) for a file that has been written
+%  with the document class \Lclass{cc}.  To do this add a
+%  |\usepackage{cc4siamltex}| after it.
+%    \begin{macrocode}
+%<*cc4siamltex>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{cc4siamltex}[2002/05/22 v2.04
+         computational complexity, adaptions to siamltex.
+         Michael Nuesken, Bonn.]
+
+\let\theorem\relax
+\let\endtheorem\relax
+\let\lemma\relax
+\let\endlemma\relax
+\let\corollary\relax
+\let\endcorollary\relax
+\let\proposition\relax
+\let\endproposition\relax
+\let\definition\relax
+\let\enddefinition\relax
+\let\proof\relax
+\let\endproof\relax
+
+\RequirePackage{amsmath}
+\RequirePackage{amsfonts}
+\RequirePackage{amssymb}
+\RequirePackage{ccaux}
+\RequirePackage{ccreltx}% deactivate amsthm.sty and reactive LaTeX's
+                        % definitions.
+%% \PassOptionsToPackage{bare}{relabel}
+\RequirePackage{ccthm}
+\RequirePackage{relabel}
+\RequirePackage{cc2cite}
+\RequirePackage{ccproof}
+\renewcommand{\Proof}{\textit{Proof}}
+\renewcommand{\qedsymbol}{\vbox{\hrule height0.6pt\hbox{%
+      \vrule height1.3ex width0.6pt\hskip0.8ex
+      \vrule width0.6pt}\hrule height0.6pt
+    }}
+\RequirePackage{ccalgo}
+\babel\def\ccacknowledgementsname{Acknowledgements}[%
+  german=Danksagung,french=Remerciements]
+\newenvironment{acknowledge}{\section*{\ccacknowledgementsname}}{}
+\RequirePackage{url}[1999/03/02 ver 1.4]
+\expandafter\def\expandafter\UrlSpecials\expandafter{%
+  \UrlSpecials\do\%{}}
+\providecommand{\email}{\begingroup\urlstyle{tt}\Url}
+\providecommand{\homepage}{\begingroup\scriptsize\urlstyle{tt}\Url}
+%</cc4siamltex>
+%    \end{macrocode}
+%
+%  \def\filename{cc4jT.sty}
+%  \CodelinePrefix{}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%
+%  It allows to use the document class \Lclass{amsart} or derivatives
+%  of it (as \Lclass{mcom-l}, \dots) for a file that has been written
+%  with the document class \Lclass{cc}.  To do this add a
+%  |\usepackage{cc4amsart}| after it.
+%    \begin{macrocode}
+%<*cc4jT>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{cc4jT}[2002/01/08 v2.04
+         computational complexity, adaptions to jT which uses amsart.
+         Michael Nuesken, Bonn.]
+\RequirePackage{ccaux}
+\RequirePackage{ccreltx}% deactivate amsthm.sty and reactive LaTeX's
+                        % definitions.
+\PassOptionsToPackage{bare}{relabel}
+\RequirePackage{thcc}
+\gdef\theorem@headerfont{\bfseries}
+%% \def\th@cc{%
+%%   \normalfont\itshape
+%%   \def\@begintheorem##1##2{\item
+%%     [\hskip\labelsep \theorem@headerfont ##1\ ##2.]}%
+%%   \def\@opargbegintheorem##1##2##3{\item
+%%     [\hskip\labelsep \theorem@headerfont ##1\ ##2\ %
+%%     \normalfont({\activate@shortcite{}##3}).]}%
+%%   }
+\@longarticletrue
+\let\proof\relax\let\endproof\relax
+\RequirePackage{ccthm}
+\RequirePackage{ccproof}
+\RequirePackage{ccqed}
+\babel\def\ccacknowledgementsname{Acknowledgements}[%
+  german=Danksagung,french=Remerciements]
+\newenvironment{acknowledge}{\section*{\ccacknowledgementsname}}{}
+\RequirePackage{relabel}
+\babel\def\partname{Part}[german=Teil,french=\protect\@Fpt partie]
+\defprefix{part}{\partname~}
+\babel\def\chaptername{Chapter}[german=Kapitel,french=Chapitre]
+\defprefix{chapter}{\chaptername~}
+\babel\def\sectionname{Section}[german=Abschnitt,french=Section]
+\defprefix{section}{\sectionname~}
+\babel\def\subsectionname{Section}[german=Abschnitt,french=Section]
+\defprefix{subsection}{\subsectionname~}
+\babel\def\subsubsectionname{Section}[german=Abschnitt,french=Section]
+\defprefix{subsubsection}{\subsubsectionname~}
+\let\ccorg@appendix\appendix
+\babel\def\appendixname{Appendix}[german=Anhang,french=Annexe]
+\def\appendix{%
+  \defprefix{section}{\appendixname~}%
+  \defprefix{subsection}{\appendixname~}%
+  \defprefix{subsubsection}{\appendixname~}%
+  \ccorg@appendix}
+\defprefix{equation}#1{(#1)}
+\babel\def\figurename{Figure}[german=Figur,french={\scshape Figure}]
+\defprefix{figure}{\figurename~}
+\babel\def\tablename{Table}[german=Tafel,french={\scshape Table}]
+\defprefix{table}{\tablename~}
+\numberallwithin{section}
+\AtBeginDocument{\@adjustnumbering}
+\RequirePackage{cc2cite}
+\RequirePackage{url}
+%</cc4jT>
+%    \end{macrocode}
+%
+%  \def\filename{cc4elsart.sty}
+%  \CodelinePrefix{}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+%
+%  It allows to use the document class \Lclass{amsart} or derivatives
+%  of it (as \Lclass{mcom-l}, \dots) for a file that has been written
+%  with the document class \Lclass{cc}.  To do this add a
+%  |\usepackage{cc4amsart}| after it.
+%    \begin{macrocode}
+%<*cc4elsart>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{cc4elsart}[2003/08/28 v2.04
+         computational complexity, adaptions to elsart.
+         Michael Nuesken, Bonn.]
+\RequirePackage{ccaux}
+\RequirePackage{ccreltx}% deactivate amsthm.sty and reactive LaTeX's
+                        % definitions.
+\PassOptionsToPackage{bare}{relabel}
+\RequirePackage{thcc}
+%%% \gdef\theorem@headerfont{\bfseries}
+%%% %% \def\th@cc{%
+%%% %%   \normalfont\itshape
+%%% %%   \def\@begintheorem##1##2{\item
+%%% %%     [\hskip\labelsep \theorem@headerfont ##1\ ##2.]}%
+%%% %%   \def\@opargbegintheorem##1##2##3{\item
+%%% %%     [\hskip\labelsep \theorem@headerfont ##1\ ##2\ %
+%%% %%     \normalfont({\activate@shortcite{}##3}).]}%
+%%% %%   }
+\@longarticletrue
+\let\claim\relax
+\let\fact\relax
+\let\note\relax
+\let\proof\relax\let\endproof\relax
+\RequirePackage{ccthm}
+\RequirePackage{ccproof}
+\RequirePackage{ccqed}
+\babel\def\ccacknowledgementsname{Acknowledgements}[%
+  german=Danksagung,french=Remerciements]
+\newenvironment{acknowledge}{\section*{\ccacknowledgementsname}}{}
+\RequirePackage{relabel}
+\babel\def\partname{Part}[german=Teil,french=\protect\@Fpt partie]
+\defprefix{part}{\partname~}
+\babel\def\chaptername{Chapter}[german=Kapitel,french=Chapitre]
+\defprefix{chapter}{\chaptername~}
+\babel\def\sectionname{Section}[german=Abschnitt,french=Section]
+\defprefix{section}{\sectionname~}
+\babel\def\subsectionname{Section}[german=Abschnitt,french=Section]
+\defprefix{subsection}{\subsectionname~}
+\babel\def\subsubsectionname{Section}[german=Abschnitt,french=Section]
+\defprefix{subsubsection}{\subsubsectionname~}
+\let\ccorg@appendix\appendix
+\babel\def\appendixname{Appendix}[german=Anhang,french=Annexe]
+\def\appendix{%
+  \defprefix{section}{\appendixname~}%
+  \defprefix{subsection}{\appendixname~}%
+  \defprefix{subsubsection}{\appendixname~}%
+  \ccorg@appendix}
+\defprefix{equation}#1{(#1)}
+\babel\def\figurename{Figure}[german=Figur,french={\scshape Figure}]
+\defprefix{figure}{\figurename~}
+\babel\def\tablename{Table}[german=Tafel,french={\scshape Table}]
+\defprefix{table}{\tablename~}
+\numberallwithin{section}
+\AtBeginDocument{\@adjustnumbering}
+%%% \RequirePackage{cc2cite}
+%%% \RequirePackage{url}
+%</cc4elsart>
+%    \end{macrocode}
+%
+%  \def\filename{cc2.dbj}
+%  \def\fileversion{v2.01}
+%  \def\filedate{2000/02/29}
+%  \CodelinePrefix{B}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.  Run this file with \texttt{tex \filename} to
+%  produce \file{cc2.bst} from scratch (ie. from \file{merlin.mbs}).
+%  See \Lpackage{makebst} for more information.
+%    \begin{macrocode}
+%<*cc2dbj>
+%<<CC2DBJ>
+%% Driver file to produce cc2.bst from merlin.mbs
+%% Generated with makebst, version 3.2 (1999/02/24)
+%% Produced on 2000/02/28 at 10:28
+%% 
+\input docstrip
+
+\preamble
+----------------------------------------
+*** bst for computational complexity with natbib.sty ***
+
+\endpreamble
+
+\postamble
+End of customized bst file
+\endpostamble
+
+\keepsilent
+
+\askforoverwritefalse
+\def\MBopts{\from{merlin.mbs}{%
+%  babel%: Babel
+    %: (def) English
+%--------------------
+%  ,cite%: Cite key
+%  ,alfph,alf-f%: Alpha style, Jones90
+%  ,alph,alf-1%: Alpha style, Jon90
+%  ,alph%: Alpha style, Jon90 or JWB90
+  ,ay%: Author-year
+%  %(def) Numerical
+%--------------------
+%  ,cn%: Author-date
+%  ,nmd%: Named
+%  ,cay%: Chicago
+%  ,ast%: Astronomy
+%  ,har%: Harvard
+%  ,alk%: Apalike
+%  %(def) Older Natbib
+  ,nat%: Natbib
+%--------------------
+  ,lang%: Add language field
+%  %(def) No language field
+%--------------------
+%  ,annote%: Annotations
+    %: (def) No annotations
+%--------------------
+%  ,seq-no%: Citation order
+%  ,seq-yr%: Year ordered
+%  ,seq-key%: By label and cite key
+%  ,seq-lab%: By label
+  %(def) Alphabetical
+%--------------------
+  ,vonx%: Sort without von part
+%  %(def) Sort on von part
+%--------------------
+%  ,nm-revv1%: First name reversed, with full names
+%  ,nm-rev1%: Only first name reversed, initials
+%  ,nm-rvv%: Surname + spaceless initials
+%  ,nm-rvx%: Surname + pure initials
+%  ,nm-rv%: Surname + dotless initials
+%  ,nm-rev%: Surname + initials
+%  ,nm-init,ed-au%: Initials + surname
+%  ,nm-revf%: Full, surname first
+  ,ed-au%: Full, surname last
+%--------------------
+%  ,jnrlab%: `Junior' in citations
+    %: (def) No `junior' part in the citations
+%--------------------
+%  ,aunm-sl%: Names separated by slash
+%  ,aunm-semi%: Names separated by semi-colon
+    %: (def) Author names separated by commas
+%--------------------
+%  ,nmdash%: Repeated author/editor names replaced by dash
+    %: (def) Author/editor names always present
+%--------------------
+%  ,nmlm%: Limited authors
+    %: (def) All authors
+%--------------------
+%  ,nmft,nmft-def%: User defined author font
+%  ,nmft,nmft-bf%: Bold authors
+%  ,nmft,nmft-it%: Italic authors
+  ,nmft,nmft-sc%: Small caps authors
+%  %(def) Normal font for author names
+%--------------------
+%  ,fnm-def%: First names in user defined font
+%  ,fnm-rm%: First names in normal font
+  %(def) First names same font as surnames
+%--------------------
+  ,nmfted%: Editors incollection like authors
+%  %(def) Editors incollection normal font
+%--------------------
+  ,nmand-rm%: `And' in normal font
+%  %(def) `And' in author font
+%--------------------
+%  ,lab,lab-def%: User defined citation font
+%  ,lab,lab-bf%: Cited authors bold
+%  ,lab,lab-sc%: Cited authors small caps
+%  ,lab,lab-it%: Cited authors italic
+    %: (def) Cited authors plain
+%--------------------
+%  ,xlab-it%: Extra label italic
+    %: (def) Extra label plain
+%--------------------
+    %: (def) Year included when KEY replaces missing author
+%  ,keyxyr%: Year blank when KEY replaces missing author
+%--------------------
+%  ,blkyear%: Missing date left blank
+    %: (def) Missing date set to ????
+%--------------------
+%  ,dt-end%: Date at very end
+%  ,dt-jnl%: Date part of journal spec.
+  ,dt-beg%: Date after authors
+%  %(def) Date at end
+%--------------------
+%  ,yr-blk%: Year preceded by space
+%  ,yr-com%: Date preceded by comma
+%  ,yr-per%: Year preceded by period
+%  ,yr-col%: Year preceded by colon
+%  ,yr-brk%: Year in brackets
+  ,yr-par%: Year in parentheses
+%  %(def) Year plain
+%--------------------
+%  ,aymth%: Include month in date
+    %: (def) Date is year only
+%--------------------
+%  ,yrp-x%: No punct. after date
+%  ,yrp-per%: Period after date
+%  ,yrp-semi%: Semi-colon after date
+%  ,yrp-col%: Colon after date
+    %: (def) Date with standard block punctuation
+%--------------------
+%  ,yrpp-xsp%: No space after date
+    %: (def) Space after date
+%--------------------
+%  ,dtbf%: Date in bold face
+    %: (def) Date in normal font
+%--------------------
+%  %(def) Year truncated
+  ,note-yr%: Year text full
+%--------------------
+%  ,tit-qq,qt-g,qx%: Title in guillemets
+%  ,tit-qq,qx%: Title in double quotes
+%  ,tit-qq,qt-s,qx%: Title in single quotes
+%  ,tit-qq,qt-g%: Title and punctuation in guillemets
+%  ,tit-qq%: Title and punctuation in double quotes
+%  ,tit-qq,qt-s%: Title and punctuation in single quotes
+%  ,tit-it%: Title italic
+    %: (def) Title plain
+%--------------------
+  ,atit-u%: Title style
+%  %(def) Sentence style
+%--------------------
+%  ,jtit-x%: No article title
+    %: (def) Article title present
+%--------------------
+%  ,jxper%: Dotless journal names
+    %: (def) Periods in journal names
+%--------------------
+%  ,jttl-rm%: Journal title normal
+    %: (def) Journal title italics
+%--------------------
+%  ,thtit-a%: Thesis title like article
+    %: (def) Thesis titles like books
+%--------------------
+%  ,trtit-b%: Tech. report title like books
+    %: (def) Tech. report title like articles
+%--------------------
+%  ,trnum-it%: Tech. report and number italic
+    %: (def) Tech. report and number plain
+%--------------------
+%  ,vol-2bf%: Volume and number bold
+  ,vol-bf%: Volume bold
+%  ,vol-it%: Volume italic
+%  %(def) Volume plain
+%--------------------
+%  ,vnum-x%: Journal vol, without number
+%  ,vnum-b%: Journal vol number
+%  ,vnum-h%: Journal vol, \# number
+%  ,vnum-nr%: Journal vol, no. num
+%  ,vnum-cm%: Journal vol, num
+%  ,vnum-sp%: Journal vol (num)
+    %: (def) Journal vol(num)
+%--------------------
+%  ,volp-blk%: Volume with blank
+  ,volp-com%: Volume with comma
+%  ,volp-semi%: Volume with semi-colon
+%  ,volp-sp%: Volume with colon and space
+%  %(def) Volume with colon
+%--------------------
+%  ,jdt-pc%: Year, comma, pages
+%  ,jdt-p%: Year with pages
+%  ,jdt-vs%: Journal vol (year)
+%  ,jdt-v%: Journal vol(year)
+    %: (def) Journal year like others
+%--------------------
+%  ,jpg-1%: Only start page number
+    %: (def) Start and stop page numbers
+%--------------------
+%  ,pgsep-p%: Period inserted over 9999
+   ,pgsep-s%: Thin space inserted over 9999
+%  ,pgsep-c%: Comma inserted over 9999
+%   %: (def) No separators for large page numbers
+%--------------------
+%  ,jwdpg%: Include `page' in articles
+    %: (def) Article pages numbers only
+%--------------------
+%  ,pp-last%: Pages at end
+    %: (def) Pages given mid text
+%--------------------
+%  ,jwdvol%: Include `volume' in articles
+    %: (def) Article volume as number only
+%--------------------
+%  ,num-xser%: Allows number without series
+    %: (def) Standard BibTeX
+%--------------------
+%  ,numser%: Just before publisher
+    %: (def) After chapter and pages
+%--------------------
+  ,jnm-x%: Space after journal
+%  %(def) Comma after journal
+%--------------------
+%  ,btit-rm,bt-rm%: Book title plain
+    %: (def) Book title italic
+%--------------------
+%  ,bkpg-x%: Pages in book bare
+%  ,bkpg-par%: Pages in book in parentheses
+    %: (def) Pages in book plain
+%--------------------
+  ,pg-bk%: For book: 345 pages
+    %: (def) Total book pages not printed
+%--------------------
+%  ,add-pub%: Address: Publisher
+    %: (def) Publisher, address
+%--------------------
+%  ,pub-date,pub-xpar,pub-xc%: Publisher and date, no parentheses, no comma
+%  ,pub-date,pub-xpar%: Publisher and date without parentheses
+%  ,pub-date,pub-xc%: Publisher and date in parentheses, no comma
+%  ,pub-date%: Publisher and date in parentheses
+%  ,pub-par%: Publisher in parentheses
+    %: (def) Publisher as normal block
+%--------------------
+%  ,pre-edn%: Publisher after edition
+%  ,pre-pub%: Publisher before chapter, pages
+    %: (def) Publisher after chapter, pages
+%--------------------
+%  %(def) No ISBN
+  ,isbn%: Include ISBN
+%--------------------
+%  %(def) No ISSN
+  ,issn%: Include ISSN
+%--------------------
+%  ,url,url-nl%: URL on new line
+%  ,url,url-nt%: URL as note
+  ,url,url-blk%: Include URL
+%  %(def) No URL
+%--------------------
+%  ,edparc,bkedcap%: `Name, (Editor)'
+%  ,edparc%: `Name, (editor)'
+%  ,edpar,bkedcap%: `Name (Editor),'
+  ,edpar%: `Name (editor),'
+%  %(def) Word `editor' after name
+%--------------------
+%  ,edby-par,edbyy%: Booktitle (.., editor)
+   ,edby,edbyy%: Booktitle, .., editor
+%  ,edby-parc,edbyx%: Booktitle, (editor..)
+%  ,edby-par,edbyx%: Booktitle (editor..)
+%  ,edby,edbyw%: Booktitle, (editor) ..
+%  ,edby,edbyx%: Booktitle, editor ..
+%  ,edby-parc%: Booktitle, (edited by ..)
+%  ,edby-par%: Booktitle (edited by ..)
+%  ,edby%: Booktitle, edited by .. 
+%   %: (def) .., editor, booktitle
+%--------------------
+%  ,blk-tita%: Period after titles of articles
+%  ,blk-tit%: Period after titles of articles, books, etc
+%  ,blk-com,com-blank%: Blanks between blocks
+%  ,blk-com,com-semi%: Semi-colon between blocks
+%  ,blk-com%: Comma between blocks
+    %: (def) \newblock after blocks
+%--------------------
+%  ,au-col%: Author block with colon
+    %: (def) Author block normal
+%--------------------
+%  ,in-x%: No word `in'
+%  ,in-col%: Colon after `in'
+    %: (def) Space after `in'
+%--------------------
+%  ,injnl%: Add `in' before journal name
+    %: (def) No `in' before journal name
+%--------------------
+%  ,fin-bare%: No period at end
+    %: (def) Period at very end
+%--------------------
+   ,ppx%: `Page' omitted
+%  ,pp%: `Page' abbreviated
+%   %: (def) `Page(s)'
+%--------------------
+%  ,ed%: `Editor' abbreviated
+    %: (def) `Editor(s)'
+%--------------------
+%  ,abr%: Abbreviations
+    %: (def) No abbreviations
+%--------------------
+  ,ord%: Numerical editions
+%  %(def) Write out editions
+%  ,xedn%: Editions as in database
+%--------------------
+%  ,jabr%: Abbreviated journal names
+    %: (def) Full journal names
+%--------------------
+%  ,varand%: Use \BIBand
+  ,amper%: Use ampersand
+%  %(def) Use word `and'
+%--------------------
+%  ,and-com%: Comma even with 2 authors
+  ,and-xcom%: No comma before `and'
+%  %(def) Comma before `and'
+%--------------------
+%  ,xand%: No `and'
+    %: (def) With `and'
+%--------------------
+%  ,etal-rm%: Roman et al
+  ,etal-it%: Italic et al
+%  %(def) Plain et al
+%--------------------
+%  ,em-ul%: Underlining
+%  ,em-x%: No italics
+%  ,em-it%: Use true italics
+    %: (def) Use emphasis
+%--------------------
+  ,nfss%: NFSS
+%  %(def) No NFSS
+%--------------------
+  }}
+\generate{\file{cc2.bst}{\MBopts}}
+\endbatchfile
+%CC2DBJ>
+%</cc2dbj>
+%    \end{macrocode}
+%
+%
+%  \def\filename{cc2.bst}
+%  \def\fileversion{v2.01}
+%  \def\filedate{2000/02/29}
+%  \CodelinePrefix{b}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+% \ifbst% the new bibliography style is normally not printed.
+%  \hfuzz=\oddsidemargin
+%  \def\MacroFont{\fontencoding\encodingdefault
+%                    \fontfamily\ttdefault
+%                    \fontseries\mddefault
+%                    \fontshape\updefault
+%                    \tiny}
+% \let\AltMacroFont\MacroFont
+% \renewcommand{\theCodelineNo}{\rmfamily\tiny b\arabic{CodelineNo}}%
+%    \begin{macrocode}
+%<*cc2bst>
+%<<CC2BST>
+%%
+%% This is file `cc2.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs  (with options: `,ay,nat,lang,vonx,ed-au,nmft,nmft-sc,nmfted,nmand-rm,dt-beg,yr-par,note-yr,atit-u,vol-bf,volp-com,pgsep-s,jnm-x,pg-bk,isbn,issn,url,url-blk,edpar,edby,edbyy,ppx,ord,amper,and-xcom,etal-it,nfss')
+%% ----------------------------------------
+%% *** bst for computational complexity with natbib.sty ***
+%% 
+%% Copyright 1994-2004 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % \ProvidesFile{merlin.mbs}[2004/02/09 4.13 (PWD, AO, DPC)]
+ %   For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is an author-year citation style bibliography. As such, it is
+ % non-standard LaTeX, and requires a special package file to function properly.
+ % Such a package is    natbib.sty   by Patrick W. Daly
+ % The form of the \bibitem entries is
+ %   \bibitem[Jones et al.(1990)]{key}...
+ %   \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
+ % The essential feature is that the label (the part in brackets) consists
+ % of the author names, as they should appear in the citation, with the year
+ % in parentheses following. There must be no space before the opening
+ % parenthesis!
+ % With natbib v5.3, a full list of authors may also follow the year.
+ % In natbib.sty, it is possible to define the type of enclosures that is
+ % really wanted (brackets or parentheses), but in either case, there must
+ % be parentheses in the label.
+ % The \cite command functions as follows:
+ %   \citet{key} ==>>                Jones et al. (1990)
+ %   \citet*{key} ==>>               Jones, Baker, and Smith (1990)
+ %   \citep{key} ==>>                (Jones et al., 1990)
+ %   \citep*{key} ==>>               (Jones, Baker, and Smith, 1990)
+ %   \citep[chap. 2]{key} ==>>       (Jones et al., 1990, chap. 2)
+ %   \citep[e.g.][]{key} ==>>        (e.g. Jones et al., 1990)
+ %   \citep[e.g.][p. 32]{key} ==>>   (e.g. Jones et al., p. 32)
+ %   \citeauthor{key} ==>>           Jones et al.
+ %   \citeauthor*{key} ==>>          Jones, Baker, and Smith
+ %   \citeyear{key} ==>>             1990
+ %---------------------------------------------------------------------
+
+ENTRY
+  { address
+    author
+    booktitle
+    chapter
+    edition
+    editor
+    eid
+    howpublished
+    institution
+    isbn
+    issn
+    journal
+    key
+    language
+    month
+    note
+    number
+    organization
+    pages
+    publisher
+    school
+    series
+    title
+    type
+    url
+    volume
+    year
+  }
+  {}
+  { label extra.label sort.label short.list }
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+}
+STRINGS { s t}
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+        { add.period$ write$
+          newline$
+          "\newblock " write$
+        }
+        { output.state before.all =
+            'write$
+            { add.period$ " " * write$ }
+          if$
+        }
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+FUNCTION {output.check}
+{ 't :=
+  duplicate$ empty$
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull
+  if$
+}
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+        'skip$
+        { after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+FUNCTION {add.blank}
+{  " " * before.all 'output.state :=
+}
+
+FUNCTION {date.block}
+{
+  new.block
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "\emph{" swap$ * "}" * }
+  if$
+}
+FUNCTION {bolden}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "\textbf{" swap$ * "}" * }
+  if$
+}
+FUNCTION {scaps}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "\textsc{" swap$ * "}" * }
+  if$
+}
+FUNCTION {bib.name.font}
+{ scaps }
+FUNCTION {bib.fname.font}
+{ bib.name.font }
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+    { "~" }
+    { " " }
+  if$
+  swap$
+}
+
+FUNCTION {capitalize}
+{ "u" change.case$ "t" change.case$ }
+
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+FUNCTION {bbl.and}
+{ "and"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+{ "editors" }
+
+FUNCTION {bbl.editor}
+{ "editor" }
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{ "edition" }
+
+FUNCTION {bbl.volume}
+{ "volume" }
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{ "number" }
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{ "" }
+
+FUNCTION {bbl.page}
+{ "" }
+
+FUNCTION {bbl.chapter}
+{ "chapter" }
+
+FUNCTION {bbl.techrep}
+{ "Technical Report" }
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+FUNCTION {bbl.first}
+{ "1st" }
+
+FUNCTION {bbl.second}
+{ "2nd" }
+
+FUNCTION {bbl.third}
+{ "3rd" }
+
+FUNCTION {bbl.fourth}
+{ "4th" }
+
+FUNCTION {bbl.fifth}
+{ "5th" }
+
+FUNCTION {bbl.st}
+{ "st" }
+
+FUNCTION {bbl.nd}
+{ "nd" }
+
+FUNCTION {bbl.rd}
+{ "rd" }
+
+FUNCTION {bbl.th}
+{ "th" }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+FUNCTION {eng.ord}
+{ duplicate$ "1" swap$ *
+  #-2 #1 substring$ "1" =
+     { bbl.th * }
+     { duplicate$ #-1 #1 substring$
+       duplicate$ "1" =
+         { pop$ bbl.st * }
+         { duplicate$ "2" =
+             { pop$ bbl.nd * }
+             { "3" =
+                 { bbl.rd * }
+                 { bbl.th * }
+               if$
+             }
+           if$
+          }
+       if$
+     }
+   if$
+}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+FUNCTION {bibinfo.check}
+{ swap$
+  duplicate$ missing$
+    {
+      pop$ pop$
+      ""
+    }
+    { duplicate$ empty$
+        {
+          swap$ pop$
+        }
+        { swap$
+          pop$
+        }
+      if$
+    }
+  if$
+}
+FUNCTION {bibinfo.warn}
+{ swap$
+  duplicate$ missing$
+    {
+      swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+      ""
+    }
+    { duplicate$ empty$
+        {
+          swap$ "empty " swap$ * " in " * cite$ * warning$
+        }
+        { swap$
+          pop$
+        }
+      if$
+    }
+  if$
+}
+FUNCTION {format.url}
+{ url empty$
+    { "" }
+    { "\urlprefix\url{" url * "}" * }
+  if$
+}
+
+STRINGS  { bibinfo}
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+  duplicate$ empty$ 'skip$ {
+  's :=
+  "" 't :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr
+      "{ff~}{vv~}{ll}{, jj}"
+      format.name$
+      bib.name.font
+      bibinfo bibinfo.check
+      't :=
+      nameptr #1 >
+        {
+          namesleft #1 >
+            { ", " * t * }
+            {
+              s nameptr "{ll}" format.name$ duplicate$ "others" =
+                { 't := }
+                { pop$ }
+              if$
+              t "others" =
+                {
+                  " " * bbl.etal emphasize *
+                }
+                {
+                  "\&"
+                  space.word * t *
+                }
+              if$
+            }
+          if$
+        }
+        't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+  } if$
+}
+FUNCTION {format.names.ed}
+{
+  format.names
+}
+FUNCTION {format.key}
+{ empty$
+    { key field.or.null }
+    { "" }
+  if$
+}
+
+FUNCTION {format.authors}
+{ author "author" format.names
+}
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+    {
+      " " *
+      get.bbl.editor
+   "(" swap$ * ")" *
+      *
+    }
+  if$
+}
+FUNCTION {format.book.pages}
+{ pages "pages" bibinfo.check
+  duplicate$ empty$ 'skip$
+    { bbl.pages * }
+  if$
+}
+FUNCTION {format.isbn}
+{ isbn "isbn" bibinfo.check
+  duplicate$ empty$ 'skip$
+    {
+      new.block
+      "ISBN " swap$ *
+    }
+  if$
+}
+
+FUNCTION {format.issn}
+{ issn "issn" bibinfo.check
+  duplicate$ empty$ 'skip$
+    {
+      new.block
+      "ISSN " swap$ *
+    }
+  if$
+}
+
+FUNCTION {select.language}
+{ duplicate$ empty$
+    'pop$
+    { language empty$
+        'skip$
+        { "{\selectlanguage{" language * "}" * swap$ * "}" * }
+      if$
+    }
+    if$
+}
+
+FUNCTION {format.note}
+{
+ note empty$
+    { "" }
+    { note #1 #1 substring$
+      duplicate$ "{" =
+        'skip$
+        { output.state mid.sentence =
+          { "l" }
+          { "u" }
+        if$
+        change.case$
+        }
+      if$
+      note #2 global.max$ substring$ * "note" bibinfo.check
+    }
+  if$
+}
+
+FUNCTION {format.title}
+{ title
+  "title" bibinfo.check
+  duplicate$ empty$ 'skip$
+    {
+      select.language
+    }
+  if$
+}
+FUNCTION {format.full.names}
+{'s :=
+ "" 't :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr
+      "{vv~}{ll}" format.name$
+      't :=
+      nameptr #1 >
+        {
+          namesleft #1 >
+            { ", " * t * }
+            {
+              s nameptr "{ll}" format.name$ duplicate$ "others" =
+                { 't := }
+                { pop$ }
+              if$
+              t "others" =
+                {
+                  " " * bbl.etal emphasize *
+                }
+                {
+                  "\&"
+                  space.word * t *
+                }
+              if$
+            }
+          if$
+        }
+        't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {author.editor.key.full}
+{ author empty$
+    { editor empty$
+        { key empty$
+            { cite$ #1 #3 substring$ }
+            'key
+          if$
+        }
+        { editor format.full.names }
+      if$
+    }
+    { author format.full.names }
+  if$
+}
+
+FUNCTION {author.key.full}
+{ author empty$
+    { key empty$
+         { cite$ #1 #3 substring$ }
+          'key
+      if$
+    }
+    { author format.full.names }
+  if$
+}
+
+FUNCTION {editor.key.full}
+{ editor empty$
+    { key empty$
+         { cite$ #1 #3 substring$ }
+          'key
+      if$
+    }
+    { editor format.full.names }
+  if$
+}
+
+FUNCTION {make.full.names}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.key.full
+    { type$ "proceedings" =
+        'editor.key.full
+        'author.key.full
+      if$
+    }
+  if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+  "\bibitem[{" write$
+  label write$
+  ")" make.full.names duplicate$ short.list =
+     { pop$ }
+     { * }
+   if$
+  "}]{" * write$
+  cite$ write$
+  "}" write$
+  newline$
+  ""
+  before.all 'output.state :=
+}
+
+FUNCTION {if.digit}
+{ duplicate$ "0" =
+  swap$ duplicate$ "1" =
+  swap$ duplicate$ "2" =
+  swap$ duplicate$ "3" =
+  swap$ duplicate$ "4" =
+  swap$ duplicate$ "5" =
+  swap$ duplicate$ "6" =
+  swap$ duplicate$ "7" =
+  swap$ duplicate$ "8" =
+  swap$ "9" = or or or or or or or or or
+}
+FUNCTION {n.separate}
+{ 't :=
+  ""
+  #0 'numnames :=
+  { t empty$ not }
+  { t #-1 #1 substring$ if.digit
+      { numnames #1 + 'numnames := }
+      { #0 'numnames := }
+    if$
+    t #-1 #1 substring$ swap$ *
+    t #-2 global.max$ substring$ 't :=
+    numnames #5 =
+      { duplicate$ #1 #2 substring$ swap$
+        #3 global.max$ substring$
+        "\," swap$ * *
+      }
+      'skip$
+    if$
+  }
+  while$
+}
+FUNCTION {n.dashify}
+{
+  n.separate
+  't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+        { t #1 #2 substring$ "--" = not
+            { "--" *
+              t #2 global.max$ substring$ 't :=
+            }
+            {   { t #1 #1 substring$ "-" = }
+                { "-" *
+                  t #2 global.max$ substring$ 't :=
+                }
+              while$
+            }
+          if$
+        }
+        { t #1 #1 substring$ *
+          t #2 global.max$ substring$ 't :=
+        }
+      if$
+    }
+  while$
+}
+
+FUNCTION {word.in}
+{ bbl.in capitalize
+  " " * }
+
+FUNCTION {format.date}
+{ year "year" bibinfo.check duplicate$ empty$
+    {
+      "empty year in " cite$ * "; set to ????" * warning$
+       pop$ "????"
+    }
+    'skip$
+  if$
+  extra.label *
+  before.all 'output.state :=
+  " (" swap$ * ")" *
+}
+FUNCTION {format.btitle}
+{ title "title" bibinfo.check
+  duplicate$ empty$ 'skip$
+    {
+      emphasize
+      select.language
+    }
+  if$
+}
+FUNCTION {either.or.check}
+{ empty$
+    'pop$
+    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+  if$
+}
+FUNCTION {format.bvolume}
+{ volume empty$
+    { "" }
+    { bbl.volume volume tie.or.space.prefix
+      "volume" bibinfo.check * *
+      series "series" bibinfo.check
+      duplicate$ empty$ 'pop$
+        { swap$ bbl.of space.word * swap$
+          emphasize * }
+      if$
+      "volume and number" number either.or.check
+    }
+  if$
+}
+FUNCTION {format.number.series}
+{ volume empty$
+    { number empty$
+        { series field.or.null }
+        { output.state mid.sentence =
+            { bbl.number }
+            { bbl.number capitalize }
+          if$
+          number tie.or.space.prefix "number" bibinfo.check * *
+          series empty$
+            { "there's a number but no series in " cite$ * warning$ }
+            { bbl.in space.word *
+              series "series" bibinfo.check *
+            }
+          if$
+        }
+      if$
+    }
+    { "" }
+  if$
+}
+FUNCTION {is.num}
+{ chr.to.int$
+  duplicate$ "0" chr.to.int$ < not
+  swap$ "9" chr.to.int$ > not and
+}
+
+FUNCTION {extract.num}
+{ duplicate$ 't :=
+  "" 's :=
+  { t empty$ not }
+  { t #1 #1 substring$
+    t #2 global.max$ substring$ 't :=
+    duplicate$ is.num
+      { s swap$ * 's := }
+      { pop$ "" 't := }
+    if$
+  }
+  while$
+  s empty$
+    'skip$
+    { pop$ s }
+  if$
+}
+
+FUNCTION {convert.edition}
+{ extract.num "l" change.case$ 's :=
+  s "first" = s "1" = or
+    { bbl.first 't := }
+    { s "second" = s "2" = or
+        { bbl.second 't := }
+        { s "third" = s "3" = or
+            { bbl.third 't := }
+            { s "fourth" = s "4" = or
+                { bbl.fourth 't := }
+                { s "fifth" = s "5" = or
+                    { bbl.fifth 't := }
+                    { s #1 #1 substring$ is.num
+                        { s eng.ord 't := }
+                        { edition 't := }
+                      if$
+                    }
+                  if$
+                }
+              if$
+            }
+          if$
+        }
+      if$
+    }
+  if$
+  t
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+    {
+      convert.edition
+      output.state mid.sentence =
+        { "l" }
+        { "t" }
+      if$ change.case$
+      "edition" bibinfo.check
+      " " * bbl.edition *
+    }
+  if$
+}
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+  #0 'multiresult :=
+    { multiresult not
+      t empty$ not
+      and
+    }
+    { t #1 #1 substring$
+      duplicate$ "-" =
+      swap$ duplicate$ "," =
+      swap$ "+" =
+      or or
+        { #1 'multiresult := }
+        { t #2 global.max$ substring$ 't := }
+      if$
+    }
+  while$
+  multiresult
+}
+FUNCTION {format.pages}
+{ pages duplicate$ empty$ 'skip$
+    { duplicate$ multi.page.check
+        {
+          n.dashify
+        }
+        {
+        }
+      if$
+      "pages" bibinfo.check
+    }
+  if$
+}
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+    { swap$ duplicate$ empty$
+        { pop$ pop$ format.pages }
+        {
+          ", " *
+          swap$
+          n.dashify
+          "pages" bibinfo.check
+          *
+        }
+      if$
+    }
+  if$
+}
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+  duplicate$ empty$ 'pop$
+    { swap$ duplicate$ empty$ 'skip$
+      {
+          ", " *
+      }
+      if$
+      swap$ *
+    }
+  if$
+}
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+  duplicate$ empty$ 'skip$
+    {
+      "volume" bibinfo.check
+    }
+  if$
+  bolden
+  number "number" bibinfo.check duplicate$ empty$ 'skip$
+    {
+      swap$ duplicate$ empty$
+        { "there's a number but no volume in " cite$ * warning$ }
+        'skip$
+      if$
+      swap$
+      "(" swap$ * ")" *
+    }
+  if$ *
+  eid empty$
+    { format.journal.pages }
+    { format.journal.eid }
+  if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+    'format.pages
+    { type empty$
+        { bbl.chapter }
+        { type "l" change.case$
+          "type" bibinfo.check
+        }
+      if$
+      chapter tie.or.space.prefix
+      "chapter" bibinfo.check
+      * *
+      pages empty$
+        'skip$
+        { ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.booktitle}
+{
+  booktitle "booktitle" bibinfo.check
+  emphasize
+}
+FUNCTION {format.in.ed.booktitle}
+{ format.booktitle duplicate$ empty$ 'skip$
+    {
+      editor "editor" format.names.ed duplicate$ empty$ 'pop$
+        {
+          get.bbl.editor
+          swap$ "," *
+          " " * swap$ *
+          swap$
+          "," *
+          " " * swap$
+          * }
+      if$
+      word.in swap$ *
+    }
+  if$
+}
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+    'pop$
+    { swap$ pop$
+      "t" change.case$ "type" bibinfo.check
+    }
+  if$
+}
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+  type duplicate$ empty$
+    { pop$ bbl.techrep }
+    'skip$
+  if$
+  "type" bibinfo.check
+  swap$ duplicate$ empty$
+    { pop$ "t" change.case$ }
+    { tie.or.space.prefix * * }
+  if$
+}
+FUNCTION {format.article.crossref}
+{
+  word.in
+  " \cite{" * crossref * "}" *
+}
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+      pop$ word.in
+    }
+    { bbl.volume
+      capitalize
+      swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+    }
+  if$
+  " \cite{" * crossref * "}" *
+}
+FUNCTION {format.incoll.inproc.crossref}
+{
+  word.in
+  " \cite{" * crossref * "}" *
+}
+FUNCTION {format.org.or.pub}
+{ 't :=
+  ""
+  address empty$ t empty$ and
+    'skip$
+    {
+      t empty$
+        { address "address" bibinfo.check *
+        }
+        { t *
+          address empty$
+            'skip$
+            { ", " * address "address" bibinfo.check * }
+          if$
+        }
+      if$
+    }
+  if$
+}
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {article}
+{ output.bibitem
+  format.authors "author" output.check
+  author format.key output
+  format.date "year" output.check
+  date.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    {
+      journal
+      "journal" bibinfo.check
+      emphasize
+      "journal" output.check
+      add.blank
+      format.vol.num.pages output
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  format.issn output
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+FUNCTION {book}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check
+      editor format.key output
+    }
+    { format.authors output.nonnull
+      crossref missing$
+        { "author and editor" editor either.or.check }
+        'skip$
+      if$
+    }
+  if$
+  format.date "year" output.check
+  date.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      new.block
+      format.number.series output
+      new.sentence
+      format.publisher.address output
+    }
+    {
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.isbn output
+  format.book.pages output
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+FUNCTION {booklet}
+{ output.bibitem
+  format.authors output
+  author format.key output
+  format.date "year" output.check
+  date.block
+  format.title "title" output.check
+  new.block
+  howpublished "howpublished" bibinfo.check output
+  address "address" bibinfo.check output
+  format.isbn output
+  format.book.pages output
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check
+      editor format.key output
+    }
+    { format.authors output.nonnull
+      crossref missing$
+        { "author and editor" editor either.or.check }
+        'skip$
+      if$
+    }
+  if$
+  format.date "year" output.check
+  date.block
+  format.btitle "title" output.check
+  crossref missing$
+    {
+      format.bvolume output
+      format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.number.series output
+      new.sentence
+      format.publisher.address output
+    }
+    {
+      format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  crossref missing$
+    { format.isbn output }
+    'skip$
+  if$
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+  format.authors "author" output.check
+  author format.key output
+  format.date "year" output.check
+  date.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.chapter.pages output
+      new.sentence
+      format.publisher.address output
+      format.edition output
+      format.isbn output
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+FUNCTION {inproceedings}
+{ output.bibitem
+  format.authors "author" output.check
+  author format.key output
+  format.date "year" output.check
+  date.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.pages output
+      new.sentence
+      publisher empty$
+        { format.organization.address output }
+        { organization "organization" bibinfo.check output
+          format.publisher.address output
+        }
+      if$
+      format.isbn output
+      format.issn output
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+  format.authors output
+  author format.key output
+  format.date "year" output.check
+  date.block
+  format.btitle "title" output.check
+  organization address new.block.checkb
+  organization "organization" bibinfo.check output
+  address "address" bibinfo.check output
+  format.edition output
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  author format.key output
+  format.date "year" output.check
+  date.block
+  format.btitle
+  "title" output.check
+  new.block
+  bbl.mthesis format.thesis.type output.nonnull
+  school "school" bibinfo.warn output
+  address "address" bibinfo.check output
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+  format.authors output
+  author format.key output
+  format.date "year" output.check
+  date.block
+  format.title output
+  new.block
+  howpublished "howpublished" bibinfo.check output
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+FUNCTION {phdthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  author format.key output
+  format.date "year" output.check
+  date.block
+  format.btitle
+  "title" output.check
+  new.block
+  bbl.phdthesis format.thesis.type output.nonnull
+  school "school" bibinfo.warn output
+  address "address" bibinfo.check output
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+  format.editors output
+  editor format.key output
+  format.date "year" output.check
+  date.block
+  format.btitle "title" output.check
+  format.bvolume output
+  format.number.series output
+  new.sentence
+  publisher empty$
+    { format.organization.address output }
+    { organization "organization" bibinfo.check output
+      format.publisher.address output
+    }
+  if$
+  format.isbn output
+  format.issn output
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+  format.authors "author" output.check
+  author format.key output
+  format.date "year" output.check
+  date.block
+  format.title
+  "title" output.check
+  new.block
+  format.tr.number output.nonnull
+  institution "institution" bibinfo.warn output
+  address "address" bibinfo.check output
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+  format.authors "author" output.check
+  author format.key output
+  format.date "year" output.check
+  date.block
+  format.title "title" output.check
+  new.block
+  format.url output
+  new.block
+  format.note "note" output.check
+  fin.entry
+}
+
+FUNCTION {default.type} { misc }
+READ
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+INTEGERS { len }
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+FUNCTION {format.lab.names}
+{ 's :=
+  "" 't :=
+  s #1 "{vv~}{ll}" format.name$
+  s num.names$ duplicate$
+  #2 >
+    { pop$
+      " " * bbl.etal emphasize *
+    }
+    { #2 <
+        'skip$
+        { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+            {
+              " " * bbl.etal emphasize *
+            }
+            { " \& " * s #2 "{vv~}{ll}" format.name$
+              * }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+    { key empty$
+        { cite$ #1 #3 substring$ }
+        'key
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+    { editor empty$
+        { key empty$
+            { cite$ #1 #3 substring$ }
+            'key
+          if$
+        }
+        { editor format.lab.names }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {editor.key.label}
+{ editor empty$
+    { key empty$
+        { cite$ #1 #3 substring$ }
+        'key
+      if$
+    }
+    { editor format.lab.names }
+  if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.key.label
+    { type$ "proceedings" =
+        'editor.key.label
+        'author.key.label
+      if$
+    }
+  if$
+  'short.list :=
+}
+
+FUNCTION {calc.label}
+{ calc.short.authors
+  short.list
+  "("
+  *
+  year duplicate$ empty$
+     { pop$ "????" }
+     'skip$
+  if$
+  *
+  'label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+  #1 'nameptr :=
+  ""
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr
+      "{ll{ }}{  ff{ }}{  jj{ }}"
+      format.name$ 't :=
+      nameptr #1 >
+        {
+          "   "  *
+          namesleft #1 = t "others" = and
+            { "zzzzz" * }
+            { t sortify * }
+          if$
+        }
+        { t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+FUNCTION {author.sort}
+{ author empty$
+    { key empty$
+        { "to sort, need author or key in " cite$ * warning$
+          ""
+        }
+        { key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+FUNCTION {author.editor.sort}
+{ author empty$
+    { editor empty$
+        { key empty$
+            { "to sort, need author, editor, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+FUNCTION {editor.sort}
+{ editor empty$
+    { key empty$
+        { "to sort, need editor or key in " cite$ * warning$
+          ""
+        }
+        { key sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+FUNCTION {presort}
+{ calc.label
+  label sortify
+  "    "
+  *
+  type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.sort
+    { type$ "proceedings" =
+        'editor.sort
+        'author.sort
+      if$
+    }
+  if$
+  #1 entry.max$ substring$
+  'sort.label :=
+  sort.label
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+SORT
+STRINGS { last.label next.extra }
+INTEGERS { last.extra.num number.label }
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+  "" 'next.extra :=
+  #0 'last.extra.num :=
+  #0 'number.label :=
+}
+FUNCTION {forward.pass}
+{ last.label label =
+    { last.extra.num #1 + 'last.extra.num :=
+      last.extra.num int.to.chr$ 'extra.label :=
+    }
+    { "a" chr.to.int$ 'last.extra.num :=
+      "" 'extra.label :=
+      label 'last.label :=
+    }
+  if$
+  number.label #1 + 'number.label :=
+}
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+    { "a" 'extra.label := }
+    'skip$
+  if$
+  extra.label 'next.extra :=
+  extra.label
+  duplicate$ empty$
+    'skip$
+    { "{\natexlab{" swap$ * "}}" * }
+  if$
+  'extra.label :=
+  label extra.label * 'label :=
+}
+EXECUTE {initialize.extra.label.stuff}
+ITERATE {forward.pass}
+REVERSE {reverse.pass}
+FUNCTION {bib.sort.order}
+{ sort.label
+  "    "
+  *
+  year field.or.null sortify
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+ITERATE {bib.sort.order}
+SORT
+FUNCTION {begin.bib}
+{ preamble$ empty$
+    'skip$
+    { preamble$ write$ newline$ }
+  if$
+  "\begin{thebibliography}{" number.label int.to.str$ * "}" *
+  write$ newline$
+  "\providecommand{\natexlab}[1]{#1}"
+  write$ newline$
+  "\providecommand{\url}[1]{\texttt{#1}}"
+  write$ newline$
+  "\providecommand{\urlprefix}{URL }"
+  write$ newline$
+  "\providecommand{\selectlanguage}[1]{\relax}"
+  write$ newline$
+}
+EXECUTE {begin.bib}
+EXECUTE {init.state.consts}
+ITERATE {call.type$}
+FUNCTION {end.bib}
+{ newline$
+  "\end{thebibliography}" write$ newline$
+}
+EXECUTE {end.bib}
+%% End of customized bst file
+%%
+%% End of file `cc2.bst'.
+%CC2BST>
+%</cc2bst>
+%    \end{macrocode}
+%
+% \else% bst
+%   The text of this file is omitted.
+% \fi% bst
+%
+%  \def\filename{cc.bst}
+%  \def\fileversion{None}
+%  \def\filedate{1996/02/06}
+%  \CodelinePrefix{o}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+%  This file (\file{\filename}) has version number \fileversion, last
+%  revised \filedate.
+% \ifoldbst% The old bibliography style is normally not printed.
+%  \hfuzz=\oddsidemargin
+%  \def\MacroFont{\fontencoding\encodingdefault
+%                    \fontfamily\ttdefault
+%                    \fontseries\mddefault
+%                    \fontshape\updefault
+%                    \tiny}
+% \let\AltMacroFont\MacroFont
+% \renewcommand{\theCodelineNo}{\rmfamily\tiny b\arabic{CodelineNo}}%
+%    \begin{macrocode}
+%<*ccbst>
+%<<CCBST>
+% File name: cc.bst 
+%
+% cc.bst style file for BibTeX.
+% February 6, 1996
+% This style file provides the following citation facilities:
+% Usage in Tex    Output:
+% file:
+% \cite           Cook (1990)
+% \citeauthor     Cook
+% \citeyear       1990
+% \citemul        Cook (1990, 1991a, 1991b)
+% \shortcite      Cook 1990
+% \parencite      (Cook 1990)
+% \nocite
+
+% It was prepared by modifying previous style files.
+% Here are acknowledgements:
+%>  BibTeX `named' style file for BibTeX version 0.99c, LaTeX version 2.09
+%>  Place it in a file called named.bst in the BibTeX search path.  (Placing it
+%>  in the same directory as the LaTeX document should also work.)
+%>  Support for named citations is provided by named.sty
+
+%>  This version was made by modifying the master file made by
+%>  Oren Patashnik (PATASHNIK@SCORE.STANFORD.EDU)
+
+%>  Copyright (C) 1985, all rights reserved.
+%>  Modifications Copyright 1988, Peter F. Patel-Schneider
+%>  Copying of this file is authorized only if either
+%>  (1) you make absolutely no changes to your copy, including name, or
+%>  (2) if you do make changes, you name it something other than
+%>  btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+%>  This restriction helps ensure that all standard styles are identical.
+
+%>  There are undoubtably bugs in this style.  If you make bug fixes,
+%>  improvements, etc.  please let me know.  My e-mail address is:
+%>      pfps@research.att.com
+
+ENTRY
+  { address
+    author
+    booktitle
+    chapter
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    month
+    note
+    number
+    organization
+    pages
+    publisher
+    school
+    series
+    title
+    type
+    volume
+    year
+  }
+  {}
+  { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+}
+
+STRINGS { mode s t }
+
+%FUNCTION {message}
+%{
+%  duplicate$ top$
+%}
+
+FUNCTION {output.nonnull}
+{ 's :=
+%%%%  "output.nonnull" top$
+%%%%  output.state top$
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+        { add.period$ write$
+%%%%    { ", " * write$
+          newline$
+          "\newblock " write$
+        }
+        { output.state before.all =
+            'write$
+            { add.period$ " " * write$ }
+          if$
+        }
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+  duplicate$ empty$
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull
+  if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+
+  "\bibitem[" write$
+  label write$
+  "]{" write$
+
+  cite$ write$
+  "}" write$
+  newline$
+  ""
+  before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION {semi.block}
+{  %%%%"semi.block" top$
+   mid.sentence 'output.state :=
+}
+
+%FUNCTION {semi.block}
+%{ output.state mid.sentence =
+%    'skip$
+%    { after.block 'output.state := }
+%  if$
+%}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+        'skip$
+        { after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.semiblock.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'semi.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "{\sl " swap$ * "}" * }
+  if$
+}
+
+FUNCTION {bold}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "{\bf " swap$ * "}" * }
+  if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  "{\sc " *
+  numnames 'namesleft :=
+    { namesleft #0 > }
+
+    { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+
+      nameptr #1 >
+        { namesleft #1 >
+            { ", " * t * }
+            { numnames #2 >
+                { "," * }
+                'skip$
+              if$
+              t "others" =
+                { " et~al." * }
+                { " and " * t * }
+              if$
+            }
+          if$
+        }
+        't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+  "}" *
+}
+
+FUNCTION {format.authors}
+{ author empty$
+    { "" }
+    { author format.names }
+  if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { "ed.\ "
+      editor format.names *
+    }
+  if$
+}
+
+FUNCTION {format.editors.reverse}
+{ editor empty$
+    { "" }
+    { editor format.names
+      ", ed." *
+    }
+  if$
+}
+
+FUNCTION {format.editors.simple}
+{ editor empty$
+    { "" }
+    { editor format.names }
+  if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+    { "" }
+
+    { title "t" change.case$ }
+
+  if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+        { t #1 #2 substring$ "--" = not
+            { "--" *
+              t #2 global.max$ substring$ 't :=
+            }
+            {   { t #1 #1 substring$ "-" = }
+                { "-" *
+                  t #2 global.max$ substring$ 't :=
+                }
+              while$
+            }
+          if$
+        }
+        { t #1 #1 substring$ *
+          t #2 global.max$ substring$ 't :=
+        }
+      if$
+    }
+  while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+    { month empty$
+        { "" }
+%       { "there's a month but no year in " cite$ * warning$
+%         month
+%       }
+        { }
+      if$
+    }
+%    { month empty$
+%        {year extra.label * }
+%       { month " " * year * extra.label *}
+%      if$
+%    }
+    { year extra.label * }
+  if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+    { "~" }
+    { " " }
+  if$
+  swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+    'pop$
+    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+  if$
+}
+
+%FUNCTION {format.bvolume}
+%{ volume empty$
+%    { "" }
+%    { series empty$
+%       'skip$
+%       {series emphasize ",\ vol.\ " * volume *}
+%      if$
+%      "volume and number" number either.or.check
+%    }
+%  if$
+%}
+%FUNCTION {format.bvolume}
+%{ volume empty$
+%    { "" }
+%    { series empty$
+%       'skip$
+%       {series emphasize "\ " * volume bold *}
+%      if$
+%     "volume and number" number either.or.check
+%    }
+%  if$
+%}
+FUNCTION {format.bvolume}
+{ volume empty$
+    { "" }
+    { "vol." volume tie.or.space.connect
+      series empty$
+        'skip$
+        { " of " * series emphasize * }
+      if$
+      "volume and number" number either.or.check
+    }
+ if$
+}
+
+%FUNCTION {format.number.series}
+%{ volume empty$
+%    { number empty$
+%       { series field.or.null }
+%       { output.state mid.sentence =
+%           { "number" }
+%           { "Number" }
+%         if$
+%         number tie.or.space.connect
+%         series empty$
+%           { "there's a number but no series in " cite$ * warning$ }
+%           { " in " * series * }
+%         if$
+%       }
+%      if$
+%    }
+%    { "" }
+%  if$
+%}
+FUNCTION {format.number.series}
+{ volume empty$
+    { number empty$
+        { series field.or.null }
+        { series empty$
+            { "there's a number but no series in " cite$ * warning$ }
+            { series "\ " * number bold * }
+          if$
+        }
+      if$
+    }
+    { "" }
+  if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+    { "" }
+    { output.state mid.sentence =
+        { edition "l" change.case$ " edition" * }
+        { edition "t" change.case$ " edition" * }
+      if$
+    }
+  if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+  #0 'multiresult :=
+    { multiresult not
+      t empty$ not
+      and
+    }
+    { t #1 #1 substring$
+      duplicate$ "-" =
+      swap$ duplicate$ "," =
+      swap$ "+" =
+      or or
+        { #1 'multiresult := }
+        { t #2 global.max$ substring$ 't := }
+      if$
+    }
+  while$
+  multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+    { "" }
+    { pages multi.page.check
+        { pages n.dashify }
+        { "p." pages tie.or.space.connect }
+      if$
+    }
+  if$
+}
+
+
+FUNCTION {format.vol.num.year}
+{ volume field.or.null bold
+  number empty$
+    'skip$
+    { "(" number * ")\," * *
+      volume empty$
+        { "there's a number but no volume in " cite$ * warning$ }
+        'skip$
+      if$
+    }
+  if$
+  year empty$
+    'skip$
+    { "\ (" * format.date * ")" * }
+  if$
+}
+
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null bold
+  number empty$
+    'skip$
+    { "(" number * ")" * *
+      volume empty$
+        { "there's a number but no volume in " cite$ * warning$ }
+        'skip$
+      if$
+    }
+  if$
+  pages empty$
+    'skip$
+    { duplicate$ empty$
+        { pop$ format.pages }
+        { ",\, pp.\, " * pages n.dashify * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+    'format.pages
+    { type empty$
+        { "chapter" }
+        { type "l" change.case$ }
+      if$
+      chapter tie.or.space.connect
+      pages empty$
+        'skip$
+        { ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+    { "" }
+    { editor empty$
+        { "In " booktitle emphasize * }
+        { "In " booktitle emphasize * ", " * format.editors * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+  month empty$ year empty$ note empty$
+  and and and and and
+
+  key empty$ not and
+
+    { "all relevant fields are empty in " cite$ * warning$ }
+    'skip$
+  if$
+}
+
+FUNCTION {format.publisher.address}
+{ address empty$ 
+    'publisher 
+    { publisher ", " * address * }
+  if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+    'skip$
+    { pop$
+      type "t" change.case$
+    }
+  if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+    { "Technical Report" }
+    'type
+  if$
+  number empty$
+    { "t" change.case$ }
+    { number tie.or.space.connect }
+  if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+    { journal empty$
+        { "need key or journal for " cite$ * " to crossref " * crossref *
+          warning$
+          ""
+        }
+        { "In {\em " journal * "\/}" * }
+      if$
+    }
+    { "In " key * }
+  if$
+  " \shortcite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+  editor num.names$ duplicate$
+  #2 >
+    { pop$ " et~al." * }
+    { #2 <
+        'skip$
+        { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+            { " et~al." * }
+            { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+      "In "
+    }
+    { "Volume" volume tie.or.space.connect
+      " of " *
+    }
+  if$
+  editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+        { series empty$
+            { "need editor, key, or series for " cite$ * " to crossref " *
+              crossref * warning$
+              "" *
+            }
+            { "{\em " * series * "\/}" * }
+          if$
+        }
+        { key * }
+      if$
+    }
+    { format.crossref.editor * }
+  if$
+  " \shortcite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+        { booktitle empty$
+            { "need editor, key, or booktitle for " cite$ * " to crossref " *
+              crossref * warning$
+              ""
+            }
+            { "In {\em " booktitle * "\/}" * }
+          if$
+        }
+        { "In " key * }
+      if$
+    }
+    { "In " format.crossref.editor * }
+  if$
+  " \shortcite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+  format.authors "author" output.check
+  semi.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { journal emphasize "\ " * format.vol.num.year * "journal" output.check
+      format.pages output
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+  author empty$
+    { format.editors.simple "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+        { "author and editor" editor either.or.check }
+        'skip$
+      if$
+    }
+  if$
+  semi.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      new.block
+      format.number.series output
+      new.sentence
+      format.publisher.address "publisher" output.check
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+  format.authors output
+  semi.block
+  format.title "title" output.check
+  howpublished address new.block.checkb
+  howpublished output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+        { "author and editor" editor either.or.check }
+        'skip$
+      if$
+    }
+  if$
+  semi.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.number.series output
+      new.sentence
+      format.publisher.address "publisher" output.check
+    }
+    { format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+  format.authors "author" output.check
+  semi.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.chapter.pages output
+      new.sentence
+      format.publisher.address "publisher" output.check
+      format.edition output
+      format.date "year" output.check
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+  format.authors "author" output.check
+  semi.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      address empty$
+        { organization publisher new.sentence.checkb
+          organization output
+          publisher output
+          format.date output
+        }
+        { address output.nonnull
+          format.date output
+%%%%      new.sentence
+          organization output
+          publisher output
+        }
+      if$
+      format.pages output
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+  author empty$
+    { organization empty$
+        'skip$
+        { organization output.nonnull
+          address output
+        }
+      if$
+    }
+    { format.authors output.nonnull }
+  if$
+  semi.block
+  format.btitle "title" output.check
+  author empty$
+    { organization empty$
+        { address new.block.checka
+          address output
+        }
+        'skip$
+      if$
+    }
+    { organization address new.block.checkb
+      organization output
+      address output
+    }
+  if$
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  semi.block
+  format.title "title" output.check
+  new.block
+  "Master's thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem  
+  format.authors "author" output.check
+  title howpublished new.semiblock.checkb
+  format.title output
+  howpublished new.block.checka
+  howpublished output
+  format.date output
+  new.block
+  note output
+  fin.entry
+  empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  semi.block
+  format.btitle "title" output.check
+  new.block
+  "PhD thesis" format.thesis.type output.nonnull
+  school "school" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+  editor empty$
+    { organization output }
+%    { format.editors output.nonnull }
+    { format.editors.reverse output.nonnull }
+  if$
+  semi.block
+  format.btitle "title" output.check
+  format.bvolume output
+  format.number.series output
+  address empty$
+    { editor empty$
+        { publisher new.sentence.checka }
+        { organization publisher new.sentence.checkb
+          organization output
+        }
+      if$
+      publisher output
+      format.date "year" output.check
+    }
+    { address output.nonnull
+      format.date "year" output.check
+      new.sentence
+      editor empty$
+        'skip$
+        { organization output }
+      if$
+      publisher output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+  format.authors "author" output.check
+  semi.block
+  format.title "title" output.check
+  new.block
+  format.tr.number output.nonnull
+  institution "institution" output.check
+  address output
+  format.date "year" output.check
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+  format.authors "author" output.check
+  semi.block
+  format.title "title" output.check
+  new.block
+  note "note" output.check
+  format.date output
+  fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+
+MACRO {jan} {"January"}
+MACRO {feb} {"February"}
+MACRO {mar} {"March"}
+MACRO {apr} {"April"}
+MACRO {may} {"May"}
+MACRO {jun} {"June"}
+MACRO {jul} {"July"}
+MACRO {aug} {"August"}
+MACRO {sep} {"September"}
+MACRO {oct} {"October"}
+MACRO {nov} {"November"}
+MACRO {dec} {"December"}
+
+
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+FUNCTION {format.lab.names}
+{ 
+  's :=
+  s num.names$ 'numnames :=
+
+  mode "cite" =
+    { numnames #1 =
+      { s #1 "{vv }{ll}" format.name$ }
+      { numnames #2 =
+          { s #1 "{vv }{ll }\& " format.name$ s #2 "{vv }{ll}" format.name$ * }
+          { s #1 "{vv }{ll }\bgroup \em et al.\egroup " format.name$ }
+        if$
+      }
+    if$
+    }
+    { numnames #1 =
+      { s #1 "{ll}" format.name$ }
+      { numnames #2 =
+          { s #1 "{ll }\& " format.name$ s #2 "{ll}" format.name$ * } 
+          { s #1 "{ll }\bgroup \em et al.\egroup " format.name$ }
+        if$
+      }
+    if$
+    }
+    if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+    { key empty$
+
+        { cite$ #1 #3 substring$ }
+
+        { key }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+    { editor empty$
+        { key empty$
+
+            { cite$ #1 #3 substring$ }
+
+            { key }
+          if$
+        }
+        { editor format.lab.names }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+    { key empty$
+        { organization empty$
+
+            { cite$ #1 #3 substring$ }
+
+            { "The " #4 organization chop.word #3 text.prefix$ }
+          if$
+        }
+        { key }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+    { key empty$
+        { organization empty$
+
+            { cite$ #1 #3 substring$ }
+
+            { "The " #4 organization chop.word #3 text.prefix$ }
+          if$
+        }
+        { key }
+      if$
+    }
+    { editor format.lab.names }
+  if$
+}
+
+FUNCTION {calc.label}
+{ 
+  "cite" 'mode :=
+  type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.key.label
+    { type$ "proceedings" =
+        'editor.key.organization.label
+        { type$ "manual" =
+            'author.key.organization.label
+            'author.key.label
+          if$
+        }
+      if$
+    }
+  if$
+
+  "\protect\citeauthoryear{" swap$ * "}{" *
+  year field.or.null purify$ *  % CHANGED - pfps - 15 Feb 1989
+  'label :=
+  
+  "sort" 'mode :=
+  type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.key.label
+    { type$ "proceedings" =
+        'editor.key.organization.label
+        { type$ "manual" =
+            'author.key.organization.label
+            'author.key.label
+          if$
+        }
+      if$
+    }
+  if$
+  "      " *
+  year field.or.null purify$ *
+  sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+  #1 'nameptr :=
+  ""
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { nameptr #1 >
+        { "   " * }
+        'skip$
+      if$
+
+      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
+
+      nameptr numnames = t "others" = and
+        { "et al" * }
+        { t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+    { key empty$
+        { "to sort, need author or key in " cite$ * warning$
+          ""
+        }
+        { key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+    { editor empty$
+        { key empty$
+            { "to sort, need author, editor, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+    { organization empty$
+        { key empty$
+            { "to sort, need author, organization, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { "The " #4 organization chop.word sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+    { organization empty$
+        { key empty$
+            { "to sort, need editor, organization, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { "The " #4 organization chop.word sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+
+FUNCTION {presort}
+
+{ calc.label
+  sort.label
+
+  "    "
+  *
+  type$ "book" =
+
+  type$ "inbook" =
+  or
+    'author.editor.sort
+    { type$ "proceedings" =
+        'editor.organization.sort
+        { type$ "manual" =
+            'author.organization.sort
+            'author.sort
+          if$
+        }
+      if$
+    }
+  if$
+
+  *
+
+  "    "
+  *
+  year field.or.null sortify
+  *
+  "    "
+  *
+  cite$
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #0 int.to.chr$ 'last.sort.label :=
+  "" 'next.extra :=
+  #0 'longest.label.width :=
+  #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+    { last.extra.num #1 + 'last.extra.num :=
+      last.extra.num int.to.chr$ 'extra.label :=
+    }
+    { "a" chr.to.int$ 'last.extra.num :=
+      "" 'extra.label :=
+      sort.label 'last.sort.label :=
+    }
+  if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+    { "a" 'extra.label := }
+    'skip$
+  if$
+  label extra.label * "}" * 'label :=   % CHANGED - pfps 15 Feb 1989
+  label width$ longest.label.width >
+    { label 'longest.label :=
+      label width$ 'longest.label.width :=
+    }
+    'skip$
+  if$
+  extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+
+{ et.al.char.used
+    { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
+    'skip$
+  if$
+  preamble$ empty$
+
+    'skip$
+    { preamble$ write$ newline$ }
+  if$
+
+  "\begin{thebibliography}{}\small" write$ newline$
+
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+  "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+%CCBST>
+%</ccbst>
+%    \end{macrocode}
+% \else% oldbst
+%   The text of this file is omitted.
+% \fi% oldbst
+%
+%  \GetFileInfo{relabel.sty}
+%  \CodelinePrefix{R}
+%
+%   \cleardoublepage
+%   \setcounter{IndexColumns}{2}%
+%   \addcontentsline{toc}{section}{Index}\PrintIndex
+%   \addcontentsline{toc}{section}{Change History}\PrintChanges
+%   \ifx\tableofcontents\relax\else
+%   \clearpage
+%   \expandafter\ifodd\csname c@page\endcsname~\clearpage\fi
+%   \csname @ifundefined\endcsname{multicols}
+%   {{\scriptsize\tableofcontents}}
+%   {\begin{multicols}{2}
+%       \scriptsize
+%       \tableofcontents
+%   \end{multicols}
+%   \global\let\tableofcontents\relax
+%   }
+%   \fi
+%
+% \iffalse meta-comment
+%<*driver>
+%%% Local Variables: 
+%%% mode: latex
+%%% TeX-master: "cc"
+%%% End: 
+%</driver>
+% \fi
-- 
cgit v1.2.3

