% \iffalse meta-comment
%
% Copyright 2000-2011 computational complexity,
%                     Michael N�sken, <nuesken@bit.uni-bonn.de>.
%
% Current maintainer: Michael N�sken, <nuesken@bit.uni-bonn.de>.
%
% In case of problems, please contact the current maintainer.
% If you derive a variant or a bugfix, please also contact the author.
% 
% This file is part of computational complexity macro package.
%
% The package consists of this file, the file cc.ins and all files
% generated by them.
%
% The package 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.  Look for CC MAIN DATE AND VERSION for main date
% and version.
%
%<*chartab>
%\fi
% \CheckSum{7723}
%% \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}
      ~
      |%\ccsps{year=2011,volume=20,...}|
      |\contact{|\meta{contact email address}|}|
      |\submitted{|\meta{submission 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}|
        |%\noacknowledge% must if none!|
        ~
        |\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%
,textarea=cc1
,multilingual,australian%
 %*% Insert options here:
 %,ccite%
 %,noams%
]{cc}

\newcommand{\emailmaintenance}{\email{ccmaintainer@computational-complexity.org}}
\renewcommand{\emailmaintenance}{\email{nuesken@bit.uni-bonn.de}}
\newcommand{\emailsubmit}{\email{submit@computational-complexity.org}}
\newcommand{\emailtest}{\email{cctest@computational-complexity.org}}

\newcommand\equal{\protect\equalb}%
\newcommand\equalb{=}%

% 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://www.linkspringer.com/?genre=article&issn=1016-3328}%
  \begingroup\urlstyle{tt}\Url}
\newcommand{\cchomepage}{\url{http://www.computational-complexity.org/}%
  \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 ...

% \submitted{29 September 1999\\
%   Revised 16 February 2000.\\
%   Revised \today}

\date{6 March 2000/% 29 August 2005/
  27 July 2011/\today}
\contact{nuesken@bit.uni-bonn.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)\\
  Dahlmannstr. 2\\
  53113 Bonn,
  Germany\\
  \email{nuesken@bit.uni-bonn.de}\\
  \homepage{http://cosec.bit.uni-bonn.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(s).}
\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
  Dahlmannstr. 2
  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{}:
\begin{center}
  \small
  \ccLINK{},
\end{center}
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}


%  \changes{v2.20}{2012/03/27}{Removed cctest from doc}
\iffalse
\subsection{Testing your final file}

Once your source file is prepared like this, send it via email to
\emailtest{}.  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 \emailsubmit{}.  Mail sent to \emailtest{} is not read by
anyone; only the software described above is automatically executed.
\fi


\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 \emailtest{}, 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}\SpecialUsageIndex{\submitted}The author
received a message acknowledging receipt of the manuscript, with the
\meta{received date} or \meta{submission 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.
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{res: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}{res: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 submission or 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
(right after the \cs{documentclass}).

For Springer Pubishing Services there is a special macro \cs{ccsps} to
handle the entire production flow.  Its argument is a comma separated
list of |key=value| pairs and |key| singletons.  This list is
interpreted by the package \Lpackage{xkeyval}.  A singleton |key| in
the list is interpreted as |key=|\meta{default}, and causes the key
|key| to be set to its default value (provided it has one).  In
particular, for boolean keys this |key| always means |key=true|.
\begin{verse}
  \SpecialUsageIndex{\ccsps}%
  |\ccsps{|\\
  |  issuestage,|\\
  |  year=|\meta{year}|,|\\
  |  volume=|\meta{volume}|,|\\
  |  issue=|\meta{issue}|,|\\
  |  firstpage=|\meta{firstpage}|,|\\
  |  |\dots\\
  |}|
\end{verse}
There are a lot more options to be chosen:
\begin{itemize}
\item The key |submitted| sets the received date.  Note, that this
  setting overrides the \cs{received} date.
\item The boolean key |revisionstage| turns on (or off) the revision
  features. Initially set to |false|.
  \begin{itemize}
  \item The key |DOImsnr| sets the manuscript number.  It can be set
    to any value.  This is the \emph{Article No.} occuring in the
    helper strip.  Default |??|.
  \item The boolean keys |TYPESET|, |DISK|, |LE| and |CP| set certain
    hooks in the help strip. Initially set to |false|.
  \item The key |draftcopy| can be set to any value to be used as a
    watermark.  Default |Uncorrected proof|.
  \item The boolean key |grid| turns on (or off) the alignment
    grid. Initially set to |false|.
  \end{itemize}
\item The boolean key |issuestage| turns on (or off) the display of
  publication details like volume, issue, pages, doi and
  more. Initially set to |false|.
  \begin{itemize}
  \item The key |year| sets the publishing year. Default |\the\year|.
  \item The key |volume| sets the volume. Default |??|.
  \item The key |issue| sets the issue. Default |??|.
  \item The key |firstpage| sets the number of the first page. Default
    |1|.
  \item The key |copyholder| sets the copyright holder.  The default
    is |Springer Basel AG| or |The Author(s)| for normal or open
    access, respectively.
  \item The key |doisuffix| sets the doi to
    |10.1007/s00037-|\meta{year}|-|\meta{doisuffix}.  Alternatively,
    the key |doi| sets the entire doi.  Initially set to
    |10.1007/s00037-|\meta{year}|-????-?|.
  \item The key |onlinedate| sets the online date.  Default |??|.
  \item Deprecated: The key |onlinefirstyear| is the same as the
    publishing year, see |year|.
  \item Deprecated: The key |coveryear| sets the (two digit) cover
    year for use in the article identifier (above the DOI).  Default
    last two digits of |\the\year|.
  \end{itemize}
\item The boolean key |pdfpage| turns on (or off) all settings for
  producing the online pdf.  In particular, if it is off then the
  helper strip, linenumbers and a draft watermark are displayed.
  Initial settings is |false|.
\item The boolean key |xlink| turns on (or off) settings for
  hyperlinks.  Initial settings is |false|.
\end{itemize}

For publication in \cc{} abstract, keywords and subjection
classification are usually required.  The commands \cs{noabstract},
\cs{nokeywords} and \cs{nosubject} may be used to turn off errors
raised by missing abstract, keywords and subject classification,
respectively.


\begin{sloppypar}
  \scriptsize OUT-OF-DATE: Prior to mid 2011 the declaration
  \begin{center}
    \SpecialUsageIndex{\ccpublish}%
    |\ccpublish{|\meta{year}|}{|\meta{volume}|}|%^^A
    |{|\meta{number}|}{|\meta{first page}|}|
  \end{center}
  was 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.
\end{sloppypar}


\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 \emailmaintenance{}.


\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 definition like
\begin{verse}
  |\newenvironment{bla}{\theorem}{\endtheorem}|\\
  |\newenvironment{foo}{\namedtheorem{Foo}}{\endnamedtheorem}|
\end{verse}
if necessary.)  If there are definitions for proofs or qed signs then
turn them off, too; the \Lclass{cc} class provides these things.

For publication in \cc{} you should next switch to author-year
citations.  To do so:
\begin{itemize}
\item remove the option |nonatbib|,
\item add your |.bib|-file in
  \begin{verse}
    |\begin{filecontents*}{\jobname.bib}| \\
    |  |\dots\\
    |\end{filecontents*}|
  \end{verse}
  before |\documentclass|,
\item throw away your handwritten environment \Lenv{thebibliography}
  if any and the command |\bibliographystyle| if present, and replace
  it or your |\bibliography| command with |\bibliography{|\meta{name
      of your |.bib|-file}|}|.
\item Then run |latex|, |bibtex| and |latex| twice and
\item adjust the text at the citation points: In particular, replace
  all |\cite| commands with either |\citet| for textual, |\citep| for
  parenthetical or |\citealt| for use inside parentheses.  (Well,
  |\cite| is usually equivalent to |\citet|.  However, changing all
  shows that it's done.)
\end{itemize}

Finally, you may want to switch to more intelligent |\ref|, see
\ref{sec:label+ref}.  To do so just remove the option |noprefixes| and
adapt text at your |\ref| commands, usually by removing words like
Theorem, Section before them and parentheses around equation
references.

\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.computational-complexity.org/}.  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{textarea\protect\equal none}, you need to add
  \Lclo{textarea\equal cc} (or similar, see below) 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}
  (which includes \Lpackage{amstext}, \Lpackage{amsgen},
  \Lpackage{amsbsy}, \Lpackage{amsopn}), \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{textarea\equal cc} (default with \Lclo{ccpublish}) always
  takes the newest cc text area from the following:
  \begin{itemize}
  \item \Lclo{textarea\equal cc2} (119mm $\times$ 45.5pc) picks the cc
    text area (after July 2011),
  \item \Lclo{textarea\equal cc1} (141mm $\times$ 200mm) picks the cc
    text area (before July 2011),
  \end{itemize}
  For downward compatibility the option \Lclo{cctextarea} equaling
  \Lclo{textarea\equal cc} and \Lclo{nocctextarea} equaling
  \Lclo{textarea\equal none} still work.  All these options have no
  effect with \Lclo{nocclayout}.
\item \Lclo{textarea\equal full} makes the text area as large as
  possible (with $\frac12$in margin to all sides).
\item \Lclo{textarea\equal none} takes whatever is there.  This is
  same as \Lclo{nocctextarea}.
\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{twocolumnendtitle} (default), \Lclo{onecolumnendtitle}:
  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{res:lemma}| produces `\ref{res:lemma}'
  rather than only `\bare\ref{res: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{res: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{submission date}|}|
 \DescribeMacro{\submitted}|\submitted{|\meta{submission date}|}|
  
 Preamble command to declare the submission or received date of the
 manuscript.  (Both variants do exactly the same!)  Use the format
 \texttt{27 July 2011}.

\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{}, but it is put in the header
  when using the option \Lclo{noccpublish}.
  
\item \DescribeEnv{abstract}|\begin{abstract}| \meta{text}
    |\end{abstract}|
  
  Preamble environment to specify the abstract.
  
\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.  If there are no acknowledgements you \emph{must} put
  \cs{noacknowledge} instead.
  
\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{\ccsps}|\ccsps{|\meta{keyvaluelist}|}|

  Preamble command to define publishing service information.  See
  \ref{sec:editor} for details.

%%% \item \DescribeMacro{\ccpublish}|\ccpublish{|\meta{year}|}|%
%%%   |{|\meta{volume}|}{|\meta{number}|}{|\meta{first page}|}|
%%%
%%%   Deprecated 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}.
\item[\Lpackage{beamer}] If you want to use \Lpackage{cc-cls},
  \Lpackage{ccthm} and/or \Lpackage{ccalgo} you must use the option
  \Lclo{noamsthm} to \Lclass{beamer} and make sure that
  \Lpackage{babel} is loaded with at least the language \Lclo{english}
  before calling \Lpackage{ccthm} or \Lpackage{ccalgo}.
\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}
%  \changes{v2.04}{2006/03/08}{Advanced version to 2.05, Michael
%    N{\"{u}}sken, Bonn}
%  \changes{v2.06}{2007/01/10}{Advanced version to 2.07, Michael
%    N{\"{u}}sken, Bonn}
%  \changes{v2.07}{2008/03/18}{Advanced version to 2.08, Michael
%    N{\"{u}}sken, Bonn}
%  \changes{v2.08}{2008/04/25}{Advanced version to 2.09, adapted
%    license information in cc.dtx and cc.ins, Michael N{\"{u}}sken,
%    Bonn}
%  \changes{v2.09}{2010/01/26}{Advanced version to 2.10, just a few
%    minor changes, Michael N{\"{u}}sken, Bonn}
%  \changes{v2.10}{2010/05/11}{Advanced version to 2.11, redesign of
%    algorithms, Michael N{\"{u}}sken, Bonn}
%  \changes{v2.11}{2010/05/16}{Advanced version to 2.12, deactivate
%    fullpage.sty when ccpublish is active, remove debug output in
%    ccalgo, Michael N{\"{u}}sken, Bonn}
%  \changes{v2.12}{2010/05/21}{Advanced version to 2.13, debugged
%    indention processing in ccalgo, Michael N{\"{u}}sken, Bonn}
%  \changes{v2.13}{2010/06/29}{Advanced version to 2.14, debugged
%    setrefrange in ccalgo, Michael N{\"{u}}sken, Bonn}
%  \changes{v2.14}{2010/10/14}{Advanced version to 2.15, added
%    cc4svjour, Michael N{\"{u}}sken, Bonn}
%  \changes{v2.15}{2010/10/21}{Advanced version to 2.15b, added ccref
%    built from moved code, Michael N{\"{u}}sken, Bonn}
%  \changes{v2.16}{2011/07/05}{Advanced version to 2.16, added more
%    new cctextarea options, changed default.  Michael N{\"{u}}sken, Bonn}
%  \changes{v2.17b}{2011/07/06}{Advanced version to 2.17b, removed a
%    bug.  Michael N{\"{u}}sken, Bonn}
%  \changes{v2.17c}{2011/07/13}{Advanced version to 2.17c, removed a
%    bug.  Michael N{\"{u}}sken, Bonn}
%  \changes{v2.18}{2011/07/15}{Advanced version to 2.17c, removed a
%    bug.  Michael N{\"{u}}sken, Bonn}
%  \changes{v2.19}{2011/07/28}{Advanced version to 2.19, many
%    modifications for publication service (search sps), removed some
%    comments.  Michael
%    N{\"{u}}sken, Bonn}
%  \changes{v2.20}{2011/07/29}{Advanced version to 2.20, bug fixes,
%    removed some. It is planned to advance to 3.0 soon.  Michael
%    N{\"{u}}sken, Bonn}
%  \changes{v2.21}{2012/04/17}{Advanced version to 2.21, bug fixes in
%    relation to \cs{bare}\cs{ref}. It is planned to advance to 3.0
%    soon.  Michael N{\"{u}}sken, Bonn}
%  \changes{v2.22}{2012/05/07}{Added version in draft output. It is
%    planned to advance to 3.0 soon.  Michael N{\"{u}}sken, Bonn}
%  \changes{v2.23}{2012/05/22}{Increased compatibility with hyperref.
%    Michael N{\"{u}}sken, Bonn}
%  \changes{v2.24}{2012/06/18}{Another bugfix to equation counting.
%    Michael N{\"{u}}sken, Bonn}
%  \changes{v2.25}{2012/06/21}{Allowing longer theorem comments.
%    Michael N{\"{u}}sken, Bonn}
%  \changes{v2.25b}{2013/06/26}{Changed in-proof item indention.
%    Michael N{\"{u}}sken, 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}
[% CC MAIN DATE AND VERSION ON NEXT LINE
2013/06/26 v2.25c
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}
\DeclareOption{twocolumnendtitle}{\@twocolumnendtitletrue}
\DeclareOption{onecolumnendtitle}{\@twocolumnendtitlefalse}
%    \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{compress}{%
  \def\@natbibsort{\PassOptionsToPackage{compress}{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,
%  subject classification and acknowledgements.  With
%  \Lclo{noccpublish} these things are optional.
%    \begin{macrocode}
\DeclareOption{ccpublish}{\@ccpublishtrue}
\DeclareOption{noccpublish}{\@ccpublishfalse\ExecuteOptions{textarea=none}}
%    \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}
% \changes{v2.16}{2011/07/05}{Added options cctextarea=2/cctextarea=1.
%   Michael N{\"{u}}sken, Bonn}
%
%  \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{textarea=full}{\@textareaversion\m@ne}
\DeclareOption{textarea=none}{\@textareaversion\z@}
\DeclareOption{textarea=cc1}{\@textareaversion\@ne}
\DeclareOption{textarea=cc2}{\@textareaversion\tw@}
\DeclareOption{textarea=cc}{\@cctextareatrue}
\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.
%  \changes{v2.20}{2011/09/12}{Removed default option balancedmargin.
%    Michael N{\"{u}}sken, Bonn.}
%    \begin{macrocode}
\ifclass
\ExecuteOptions{a4paper,12pt,cctextarea,twoside,%
  OT1,nolatin1,nobabel,%
  localnumbering,bare,%
  leqno,ams,ccpublish,cclayout,autotitle,ccsectioning,%
  onecolumnbibliography,twocolumnendtitle,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,twocolumnendtitle,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}[2008/07/06 v3.8l]
\fi
\if@latin
% make this optional? yes.
\RequirePackage[latin1]{inputenc}[2008/03/30 v1.1d]
\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}}}}%
}
\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
\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}[2006/04/12  ver 3.3]
\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
%    |\renewcommand{\cctitlehead}{|\meta{title text}|}| to specify the
%    text for the running heads, and
%    |\renewcommand{\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{}
\let\ps@ccfirst\ps@empty
\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, unless they terminate with a
%  full stop, question mark, or exlamantion mark. 
%  \changes{v2.06}{2006/10/13}{Made full stop in section and
%    subsection headings optional.}
%    \begin{macrocode}
\def\opt@fullstop#1{#1{\has@fullstop#1.\@@@
\if@tempswa\else
\has@exlamationmark#1!\@@@
\if@tempswa\else
\has@questionmark#1?\@@@
\if@tempswa\else
.\fi
\fi
\fi}}
\def\has@fullstop#1.#2\@@@{\@ifempty{#2}{\@tempswafalse}{\@tempswatrue}}
\def\has@exlamationmark#1!#2\@@@{\@ifempty{#2}{\@tempswafalse}{\@tempswatrue}}
\def\has@questionmark#1?#2\@@@{\@ifempty{#2}{\@tempswafalse}{\@tempswatrue}}
\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]{\opt@fullstop{#8}}}
\def\dot@ssect#1#2#3#4#5{%
  \let\@sect\ccorg@sect\let\@ssect\ccorg@ssect
  \@ssect{#1}{#2}{#3}{#4}{\opt@fullstop{#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
\bibstyle@plain%\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 environment 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}
%
% All this stuff has been moved to a seperate file: \Lpackage{ccref}.
%  \changes{v2.15}{2010/10/21}{Moved this from the main part into a
%    seperate file.}
%  
%    \begin{macrocode}
\RequirePackage{ccref}
%    \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
\let\orig@newtheorem\newtheorem
\def\newtheorem{%
  \ClassWarning{cc}{You should not use newtheorem.\MessageBreak
    See Section 3.1 of the documentation.}%
  \orig@newtheorem}
%    \end{macrocode}
%
% \subsection{Other}
%
%  \begin{environment}{acknowledge}
%    This environment simply constitues of an unnumbered section.
%    To complicate things Springer adds a paragraph when the article
%    is made available for free.  If an article has no
%    acknowledgements put the command \cs{noacknowledge} at the very
%    position.
%  \changes{v2.18}{2011/07/26}{Added \cs{noacknowledge} with support
%    for an extra open access message. Added acknowledgements to
%    toc. MNuesken, Bonn}
%    \begin{macrocode}
\babel\def\ccacknowledgementsname{Acknowledgements}[%
  german=Danksagung,french=Remerciements]
\newif\if@ccack \@ccacktrue% usually acknowledgements are not required
\AtEndDocument{%
  \if@ccack\else
  \ClassError{cc}{Missing acknowledgements}
        {You must use either\MessageBreak
          \protect\begin{acknowledge} ... \protect\end{acknowledge}\MessageBreak
          or \protect\noacknowledge.}%
  \fi
}
\newenvironment{acknowledge}{%
  \section*{\ccacknowledgementsname}%
  \addcontentsline{toc}{section}{\ccacknowledgementsname}%
}{%
  \noacknowledge
}
\newcommand{\noacknowledge}{%
  \ifKV@ccsps@openaccess\if@ccack\else%
  \noindent{\small\@octxt\par}%
  \fi\fi%
  \global\@ccacktrue
}%
\def\@octxt{}%
\def\openchoicetext#1{\gdef\@octxt{\paragraph{Open Access.} #1}}%
\openchoicetext{This article is distributed under the terms of the
  Creative Commons Attribution Noncommercial License which permits any
  noncommercial use, distribution, and reproduction in any medium,
  provided the original author(s) and source are credited.}%
%    \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}[2008/03/18 v2.08
         computational complexity, auxiliaries.
         Michael Nuesken, Bonn.]
%    \end{macrocode}
%  
% \subsection{New ifs for document class options}
%
%  \changes{v2.20}{2011/09/12}{Default marginmode now is -1 (noothermargins).
%    Michael N{\"{u}}sken, Bonn.}
%    \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@twocolumnendtitle \@twocolumnendtitletrue
\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\@textareaversion
\expandafter\def\csname if@cctextarea\endcsname{\ifnum\@textareaversion>0}
\def\@cctextareafalse{\@textareaversion\z@}
\def\@cctextareatrue{\@textareaversion\tw@}
\@cctextareatrue
\newcount\@marginmode \@marginmode\m@ne
%    \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...)}
% \changes{v2.04}{2005/11/03}{\cs{ccaddto}, \cs{ccaddtoINDOC},
%   \cs{ccaddtonow} now use only global defs.)}
%  \changes{v2.07}{2008/03/18}{Changed \cs{cc@ifempty} to long, MN, Bonn}
%    \begin{macrocode}
%  \changes{v2.20}{2012/03/19}{Detangled \cs{addto} by using the new
%    name \cs{cc@addto}.}
% \providecommand{\extdef}[2]{%
%     \ifx#1\@undefined\relax\def#1{}\fi%
%     \toks@=\expandafter{#1}%
%     \toks255={#2}%
%     \edef#1{\the\toks@\the\toks255}}
\newcommand{\cc@addto}[2]{%
  \expandafter\ccaddto\expandafter{\csname
  cc@\string#1\endcsname}{#2}{#1}}
\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
    \gdef#1{#2}%
    \AtBeginDocument{\expandafter\ccaddtonow\expandafter{#1}#3}%
  \else
    \ifx#1\relax
      \gdef#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
    \gdef#1{#2}%
  \else
    \ifx#1\relax
      \gdef#1{#2}%
    \else
      {\toks@\expandafter{#1#2}%
        \xdef#1{\the\toks@}}%
    \fi
  \fi
}
\AtBeginDocument{\global\let\ccaddto\ccaddtoINDOC}
\newcommand{\ccaddtonow}[2]{%
  \ifx#2\@undefined
    \gdef#2{#1}%
  \else
    \ifx#2\relax
      \gdef#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.
\long\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}
%  \changes{v2.03}{2005/08/29}{Replaced \cs{babel}\cs{def} with a more
%    flexible construction.}
%    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}{\cc@addto\captionsenglish{\def#1{#2}}}%
  \babeladdtranslations#1{#3}%
}
\def\b@beladdlang#1=#2=#3\@@@#4{%
  \cc@ifnotempty{#2}{%
    \expandafter\cc@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>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{cclayout}[2012/06/22 v2.25 cclayout. MNuesken]
\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}{\submitted}
%  \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 submission/received date.\MessageBreak
      Use \protect\received\space in the preamble.}{}%
    }{}%
  \fi}
\def\submitted{\received}
%    \end{macrocode}
%  \end{macro}
%  \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}.  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.)  The command
%  |\Abstract{|\meta{text}|}| is deprecated and only exists for
%  downward compatibility.
%  \changes{v2.19}{2011/07/28}{Rewritten environments for abstract,
%    subject and keywords based on \lpackage{environ.sty}.  Michael
%    N{\"{u}}sken, Bonn}
%    \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}
\RequirePackage{environ}[2008/06/18]
\def\@abstract@macro{}
\long\def\for@cc@abstract#1{%
  \gdef\@abstract@macro{\begin{@abstr}{\ccabstractname}#1\end{@abstr}}}
\newenvironment{abstract}{\Collect@Body\for@cc@abstract}{}
%    \end{macrocode}
%  Deprecated now: |\Abstract|.
%    \begin{macrocode}
\newcommand{\Abstract}{\for@cc@abstract}
%    \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}
\def\@keywords@macro{}
\long\def\for@cc@keywords#1{%
  \gdef\@keywords@macro{\begin{@abstr}{\cckeywordsname}#1\end{@abstr}}}
\newenvironment{keywords}{\Collect@Body\for@cc@keywords}{}
%    \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}
\def\@subject@macro{}
\long\def\for@cc@subject#1{%
  \gdef\@subject@macro{\begin{@abstr}{\ccsubjectclassificationname}
      #1
    \end{@abstr}}}
\newenvironment{subject}{\Collect@Body\for@cc@subject}{}
%    \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.
%  \changes{v2.04}{2006/03/06}{Changed @abstr to allow for very
%    long abstracts, MN, Bonn}
%  \changes{v2.07}{2008/03/18}{Changed @abstr to decrease spacing in
%    embedded lists and forbid nested lists, MN, Bonn}
%  \changes{v2.19}{2011/07/28}{Allowed one nested lists, MN, Bonn}
%    \begin{macrocode}
\newdimen\@abstrwidth
\newbox\@abstr@box
\newenvironment{@abstr}[1]{%
%  \leavevmode
  \setbox\@abstr@box\vbox\bgroup%
  \@parboxrestore
  \ifdim\@abstrwidth>\hsize\@abstrwidth\hsize\fi
  \leftmargin.5\hsize \advance\leftmargin-.5\@abstrwidth
  \rightmargin\leftmargin
  \@trivlist\@newlistfalse\global\@inlabeltrue
  \advance\linewidth -\rightmargin
  \advance\linewidth -\leftmargin
  \advance\@totalleftmargin \leftmargin
  \parshape \@ne \@totalleftmargin \linewidth
  \small
  \def\@listi{\leftmargin\leftmargini
              \topsep 2\p@ \@plus2\p@ \@minus1\p@
              \parsep 1\p@
              \itemsep \parsep}%
  \def\@listii{\leftmargin\leftmarginii
              \labelwidth\leftmarginii
              \advance\labelwidth-\labelsep
              \topsep 0\p@ \@plus1\p@
              \parsep 1\p@
              \itemsep \parsep}%
  \let\@listiii\@toodeep
  \let\@listiv\@toodeep
  \let\@listv\@toodeep
  \let\@listvi\@toodeep
  \textbf{#1. }\ignorespaces}
{%
%  \strut
  \par
  \egroup
  \leavevmode\unvbox\@abstr@box
  \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}
%
%  
%  \changes{v2.18}{2011/07/26}{Simplify maketitle handling. Michael
%    N�sken, Bonn}
%  Make sure that macros with first, last and number of pages are
%  available right after |\begin{document}|.  This will be used for
%  \cs{maketitle} and possibly more.
%  \changes{v2.19}{2011/07/29}{Always use own secondoffive when
%    computing the page of ccenddocument (hyperref has five groups,
%    otherwise it's just two). Michael N�sken, Bonn}
%    \begin{macrocode}
\AtBeginDocument{\addtocounter{section}{-1}\refstepcounter{section}}%
\AtEndDocument{\hrule height0pt\label{ccenddocument}}%
\def\@ccunknown{??}
\def\@ccfirst{1}%
\let\@cclast\@ccunknown%
\let\@ccnumberofpages\@ccunknown%
\long\def\cc@secondoffive#1#2#3#4#5{#2}
\AtBeginDocument{%
  \@ifundefined{r@ccenddocument}{}{%
    \@tempcnta\@ne
    \advance\@tempcnta-\@ccfirst
    \protected@xdef\@cclast{\csname r@ccenddocument\endcsname}%
    \xdef\@cclast{\expandafter\cc@secondoffive\@cclast{}{}{}{}{}}%
    \advance\@tempcnta\@cclast%
    \xdef\@ccnumberofpages{\the\@tempcnta}%
  }%
}
%    \end{macrocode}
%
%  \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.)}
%  \changes{v2.03}{2005/08/27}{Changed label at end of document to
%    |ccenddocument | to avoid a problem with \lpackage{hyperref}.
%    (\lpackage{hyperref} has also problems with |!| as part of label
%     names.)}
%  \changes{v2.18}{2011/07/26}{Moved label generation, see
%    above. Michael N�sken, Bonn}
%    \begin{macrocode}
\def\@cctxt{}
\newif\if@cchead
\newcommand{\noccpublish}[1]{%
  \global\@ccpublishfalse
  \global\@abstractoptionaltrue% Abstract optional
  \global\@keywordsoptionaltrue% Keywords optional
  \global\@subjectoptionaltrue% Subject class. optional
  \global\@ccheadfalse
  \gdef\@cctxt{#1}%
%  \global\@twosidefalse
  }
\newcommand{\ccpublish}[4]{% Deprecated since 2011/07/25
  \global\@ccpublishtrue
  \global\@abstractoptionalfalse% Abstract required
  \global\@keywordsoptionalfalse% Keywords required
  \global\@subjectoptionalfalse% Subject class. required
  \global\@ccheadtrue
  \gdef\@ccyear{#1}%
  \gdef\@ccvolume{#2}%
  \gdef\@ccissue{#3}%
  \gdef\@ccfirst{#4}%
  \gdef\@cctxt{cc \textbf{#2} (#1)}%
  \global\@autotitletrue
  \AtBeginDocument{\addtocounter{section}{-1}\refstepcounter{section}}%
  }
%    \end{macrocode}
%  \end{macro}
%  
%  \subsection{Springer publishing services adjustments}
%  \begin{macro}{\ccsps}
%  \changes{v2.18}{2011/07/27}{New macro \cs{ccsps} for Springer
%    publishing services. Michael N�sken, Bonn}
%    The macro \cs{ccsps} collects all the settings needed in the
%    publishing process.  See \ref{sec:editor} for details on its
%    use.
%
%    We use the package \Lpackage{xkeyval} to parse the input.
%    \begin{macrocode}
\RequirePackage{xkeyval}[2008/08/13]
%    \end{macrocode}
%  
%  These tiny helpers will allow to produce any fixed length output.
%  \begin{macro}{\cc@fixelendef}
%    The macro \cs{cc@fixelendef} defines \#3 as a fixed
%    expanded-length version of \#4 to \#1 places, cut on the left if
%    necessary or filled up with copies of \#2 on the left.
%  \begin{macro}{\cc@fixelen}
%    The macro \cs{cc@fixelen} outputs a fixed expanded-length version
%    of \#3 to \#1 places, cut on the left if necessary or filled up
%    with copies of \#2 on the left.
%    \begin{macrocode}
\def\cc@fixlencountdown#1{%
  \@tfor\@x:=#1\do{\advance\@tempcnta\m@ne}}
\def\cc@fixelendef#1#2#3#4{%
 \@tempcnta#1%
 \edef\@tempa{#4}\expandafter\cc@fixlencountdown\expandafter{\@tempa}%
 \gdef#3{}\relax
 \@whilenum\@tempcnta>\z@\do{%
    \expandafter\gdef\expandafter#3\expandafter{#3#2}%
    \advance\@tempcnta\m@ne}%
 \expandafter\gdef\expandafter#3\expandafter{#3#4}%
}
\def\cc@fixelen#1#2#3{%
  \@tempcnta#1
  \edef\@tempa{#3}\expandafter\cc@fixlencountdown\expandafter{\@tempa}%
  \@whilenum\@tempcnta>\z@\do{%
    #2%
    \advance\@tempcnta\m@ne}%
  \edef\@tempa{\noexpand\cc@fixelena#3\noexpand\@@@}\@tempa%
}
\def\cc@fixelena#1\@@@{%
  \@tfor\@x:=#1\do{%
    \advance\@tempcnta\@ne
    \ifnum\@tempcnta>\z@\@x\fi
  }%
}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  
%  Now we start defining all the options.
%
%  |journal=|\meta{journalname} will set the journalname for use in
%  the running title, default |cc|.
%  |journalnumber=|\meta{journalnumber} sets the journalnumber for use
%  in the doi, default |37|.  The key |sps| is here for internal
%  detection only.
%    \begin{macrocode}
\define@boolkey{ccsps}{sps}[true]{}%
\define@key{ccsps}{journal}[cc]{\gdef\@journalname{#1}}%
\define@key{ccsps}{journalnumber}[37]{\gdef\@journalnumber{#1}}%
%    \end{macrocode}
%  
%  Set the submission date.  This overrides
%  |\received{|\meta{date}|}|.
%    \begin{macrocode}
\define@key{ccsps}{submitted}[??dd Month yyyy??]{%
  \gdef\@received{#1}%
  \gdef\received##1{\ClassWarning{cc}
    {Received/submitted date (##1) override!\MessageBreak
      Using \@received.}}}
%    \end{macrocode}
%  
%  \subsubsection{Revision stage}
%
%    \begin{macrocode}
\define@boolkey{ccsps}{revisionstage}[true]{%
%  \ifKV@ccsps@revisionstage\let\revisionstage=Y\else\let\revisionstage=N\fi
}
%    \end{macrocode}
%
%  The manuscript number occurs in the helper strip.
%    \begin{macrocode}
% Four things to hook or not
\define@key{ccsps}{DOImsnr}[??]{% manuscript number
  \gdef\@DOImsnr{#1}}
%    \end{macrocode}
%  The options |TYPESET|, |DISK|, |LE|, |CP| just add checkmarks in
%  the helper strip.
%    \begin{macrocode}
\define@boolkey{ccsps}{TYPESET}[true]{%
  \ifKV@ccsps@TYPESET\let\TYPESET=Y\else\let\TYPESET=N\fi}
\define@boolkey{ccsps}{DISK}[true]{%
  \ifKV@ccsps@DISK\let\DISK=Y\else\let\DISK=N\fi}
\define@boolkey{ccsps}{LE}[true]{%
  \ifKV@ccsps@LE\let\LE=Y\else\let\LE=N\fi}
\define@boolkey{ccsps}{CP}[true]{%
  \ifKV@ccsps@CP\let\CP=Y\else\let\CP=N\fi}
%    \end{macrocode}
%  This option sets the text for the watermark.
%    \begin{macrocode}
\define@key{ccsps}{draftcopy}[Uncorrected proof]{% watermark text
  \gdef\cc@watermarktext{#1}}
%    \end{macrocode}
%  This option turns the helper strip on or off, but it is triggered by
%  pdfpage.
%    \begin{macrocode}
\define@boolkey{ccsps}{helperstrip}[true]{}%
%    \end{macrocode}
%  For typesetting alignment checks a grid may be added.
%    \begin{macrocode}
\define@boolkey{ccsps}{grid}[true]{}
%    \end{macrocode}
%  
%  \subsubsection{Issue stage}
%  
%    \begin{macrocode}
\define@boolkey{ccsps}{issuestage}[true]{%
%   \ifKV@ccsps@issuestage\let\issuestage=Y\else\let\issuestage=N\fi
}
%    \end{macrocode}
%
%  Some article are delivered via Open Access.
%    \begin{macrocode}
% Shall the article be open access?
\define@boolkey{ccsps}{openaccess}[true]{%
%   \ifKV@ccsps@openaccess\let\stageaccess=Y\else\let\stageaccess=N\fi
}
\define@boolkey{ccsps}{stageaccess}[true]{% Deprecated.
    \setkeys{ccsps}{openaccess=#1}}
%    \end{macrocode}
%  
% Publishing information is collected by the following options.
%    \begin{macrocode}
\define@key{ccsps}{year}[????]{\gdef\@ccyear{#1}}
\define@key{ccsps}{volume}[??]{\gdef\@ccvolume{#1}}
\define@key{ccsps}{issue}[??]{\gdef\@ccissue{#1}}%
\define@key{ccsps}{firstpage}[1]{%
  \gdef\@ccfirst{#1}%
%  \cc@fixelendef40\@ccfirstiv{#1}%
  \@tempcnta4\@tfor\@x:=#1\do{\advance\@tempcnta\m@ne}%
  \ifcase\@tempcnta\gdef\@ccfirstiv{#1}%
  \or\gdef\@ccfirstiv{0#1}%
  \or\gdef\@ccfirstiv{00#1}%
  \or\gdef\@ccfirstiv{000#1}%
  \else\ClassError{cc}{First page number too big.}{%
    The number of the first page cannot be larger than 9999.
  }\fi
}
\define@key{ccsps}{copyholder}[\default@copyholder]{\gdef\@copyholdername{#1}}
\def\default@copyholder{%
  \ifKV@ccsps@openaccess The Author(s)
  \else Springer Basel AG\fi}
\define@key{ccsps}{doisuffix}[????-?]{%
%   Is the doi always 10.1007/s00037-threedigityear-suffix?
%   Yes! (Answer from Springer...)
  \cc@fixelendef50\@doiinfo{\@journalnumber}%
  \xdef\@doiinfo{%
    10.1007/s\@doiinfo-%
    \noexpand\cc@fixelen30{\noexpand\@ccyear}-%
    #1}}
\define@key{ccsps}{doi}{\gdef\@doiinfo{#1}}
\define@key{ccsps}{onlinedate}[??dd Month yyyy??]{\gdef\@onlinedate{#1}}
% Are the following really necessary or are they derived?
\define@key{ccsps}{onlinefirstyear}[\the\year]{\gdef\@ccyear{#1}}
\define@key{ccsps}{coveryear}[\@ccyear]{\gdef\@coveryear{#1}}
% Is the coveryear always the last two digits of the year?
%    \end{macrocode}
%  
%  For online publication use the option |pdfpage| and |xlink|.  The
%  latter makes hyperlinks blue and so forth.
%    \begin{macrocode}
\define@boolkey{ccsps}{pdfpage}[true]{%
%   \ifKV@ccsps@pdfpage\@pdfpagetrue\else\@pdfpagefalse\fi%
}
\define@boolkey{ccsps}{xlink}[true]{}
%    \end{macrocode}
%  
% Finally put each key to its default value.
%    \begin{macrocode}
\setkeys{ccsps}{
  sps=false,
  journal={cc}, journalnumber=37,
  grid=false,
  TYPESET=false,
  DISK=false,
  LE=false,
  CP=false,
  DOImsnr,
  openaccess=false,
  revisionstage=false,
  helperstrip=false,
  issuestage=false,
  copyholder,
  year,volume,issue,firstpage,
  onlinefirstyear,coveryear,doisuffix,onlinedate,
  draftcopy
}
%    \end{macrocode}
%  
% \subsubsection{Choose publisher features}
% This is the macro for springer publishing services.  Note that it
% should be called only once, best right after |\documentclass|.
%    \begin{macrocode}
\newcommand{\ccsps}[1]{%
  \if@cctextarea\else\ClassError{cc}{Wrong textarea chosen}
  {Remove any textarea or noccpublish option from documentclass.}\fi
  \global\@ccpublishtrue
  \global\@abstractoptionalfalse% Abstract required
  \global\@keywordsoptionalfalse% Keywords required
  \global\@subjectoptionalfalse% Subject class. required
  \global\@ccackfalse% Acknowledgements required
  \global\@ccheadtrue
  \global\@autotitletrue
%   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%   Now scan the key, key=value list:
  \setkeys{ccsps}{sps,#1}
%   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%   \gdef\@cctxt{cc \textbf{\@ccvolume}(\@ccissue)}% MN2011/07/27: Shouldn't it be this?
  \gdef\@cctxt{cc \textbf{\@ccvolume} (\@ccyear)}%
%   \global\@twosidefalse
%   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%   During revisionstage line numbers, a helper strip and a
%   watermark shall be added.
%   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  \RequirePackage[mathlines]{lineno}[2005/11/02]
  \ifKV@ccsps@pdfpage
  \setkeys{ccsps}{helperstrip=false}%
%   This case should turn off draftcopy but cannot do this 
%   since draftcopy is badly written.
%   Consequently, this makes a double use of ccsps impossible.
  \nolinenumbers
  \else
  \setkeys{ccsps}{helperstrip=true}%
  \RequirePackage[conditional,draft]{draftcopy}
  \draftcopyPageTransform{155 75 translate 65 rotate}
  \draftcopyName{\cc@watermarktext}{75}
%   Scaling by a factor 75 is fine for a text like "Uncorrected proof".
  \linenumbers
  \fi
%   With the option xlink the final pdf shall have bookmarks and
%   blue links. Otherwise there are no bookmarks and black links.
  \RequirePackage[dvips,
    bookmarks=\ifKV@ccsps@xlink true\else false\fi,
    breaklinks=true,
    colorlinks=\ifKV@ccsps@xlink true\else false\fi,
    linkcolor=\ifKV@ccsps@xlink blue\else black\fi,
    unicode]{hyperref}[2011/04/17 v6.82g]%
%   Make sure \cs{init@bare} is executed/repeated after hyperref's commands.
  \AtBeginDocument{\init@bare}
  \RequirePackage{breakcites}%
  \RequirePackage{breakurl}[2009/01/24 v1.30]%
  \def\l@title##1{\@dottedtocline{-1}{0pt}{0pt}{{\large\textbf{##1}}}}%
  \let\l@title\l@part
%   
%  \ExecuteOptions{nonatbib}
%  \usepackage[comma,square]{modnatbib}%
%   The package natbib was modified only marginally.  On the one
%   hand, spacing after superscripted references was modified, which
%   is irrelevant to \cc{}.  On the other hand the references were
%   also added to the table of contents.  This is superfluous since
%   \Lclass{cc} redefines \Lenv{thebibliography} and adds that entry
%   there.  Further punctuation was modified but that is set by
%   \Lclass{cc} anyways.
%  
%  \usepackage{hypernat}%
%   The package \Lpackage{hypernat} would at most be needed if cc
%   articles would combine natbib options number and
%   sort&compress. However, number is deprecated and sort&compress
%   is not used in the journal versions.
%  
  \ifKV@ccsps@xlink%
  \def\@urlcolor{blue}
  \def\@citecolor{blue}
  \def\externalref##1##2{\hyperimage{##1}{##2}}%
  \def\DOIexternalref##1##2{\hyperimage{##1}{##2}}%
  \InputIfFileExists{bookmarkgreeks.tex}{}{}%
  \else
  \def\@urlcolor{black}%
  \def\@citecolor{black}
  \def\externalref##1##2{##2}%
  \def\DOIexternalref##1##2{##2}%
  \fi%
%   The option grid produces a grid to check or align the page and
%   column boundarys.
  \ifKV@ccsps@grid
  \overfullrule=6pt
  \let\twidth\textwidth
  \let\theight\textheight
  \else\overfullrule=0pt\fi
%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%  %%% JS_info (MN2011/07/27: What's this?)
  \InputIfFileExists{JS_info.tex}{}{}%
}
%    \end{macrocode}
%  \end{macro}
%
% The following code is based on \Lpackage{ccspsmacros} and
% \Lpackage{modlineno} as used by Springer.  Actually, the only
% significant modification to \Lpackage{modlineno} seems to be that
% its option \Lclo{pagewise} is disabled; but it's easy not to use it.
%  \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\ccsps
\@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
    \expandafter\extract@affils\@author\and\and\@nil
    \if@oddaffil\else\even@sep\even@post\fi
}
\def\init@affils{%
  \let\and\relax
  \global\@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{%
  \affilpre
  \def\currentaddress{\otheraddress
    Current address of \textsc{\ignorespaces#1}:\\}%
  \begin{@ffiliation}
    \textsc{\ignorespaces#1}\\#2
  \end{@ffiliation}
  \affilpost}
%    \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}
% \changes{v2.14}{2010/08/03}{Debugged affiliation seperation.
%   Michael N{\"{u}}sken, Paderborn}
%    \begin{macrocode}
\newcommand{\otheraddress}{\end{@ffiliation}\affilsep
  \begin{@ffiliation}}
\def\odd@pre{\par\begin{tabular}{@{}ll@{}}}%
\def\odd@sep{&}%
\def\odd@post{&}%
\def\even@pre{}%
\def\even@sep{\end{tabular}\par\begin{tabular}{@{}ll@{}}}%
\def\even@post{\end{tabular}}%
%
\newif\if@oddaffil
\def\affilpre{\if@oddaffil\odd@pre\else\even@pre\fi}
\def\affilsep{%
  \if@oddaffil\odd@sep\@oddaffilfalse
  \else\even@sep\@oddaffiltrue
  \fi
  }
\def\affilpost{\if@oddaffil\odd@post\global\@oddaffilfalse
  \else\even@post\global\@oddaffiltrue\fi}
%    \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.
% \changes{v2.18}{2011/07/27}{Added onecolumn layout for
%   affiliations. Michael N{\"{u}}sken, Bonn}
%    \begin{macrocode}
\if@twocolumnendtitle
\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}
\else
\def\affilpre{\par}
\def\affilpost{\par}
\def\affilsep{\par}
\newenvironment{@ffiliation}
               {%
                 \minipage[t]{\hsize}\footnotesize
                 \dimen@\hsize \advance\dimen@ -1.5em
                 \everypar{\parshape 2 \z@ \hsize 1.5em \dimen@}%
                 \def\\{\unskip\par}%
                 }
               {\endminipage\bigskip}
\fi
%    \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}
%  \changes{v2.11}{2010/06/17}{Deactivate fullpage.sty with
%    ccpublish. Michael N{\"{u}}sken, Bonn}
%  \changes{v2.13}{2010/06/22}{Disabled the file control, instead with
%    ccpublish the compilation will abort with a FATAL ERROR. Michael
%    N{\"{u}}sken, Bonn}
%  \changes{v2.17b}{2011/07/13}{Repaired case handling. Michael
%    N{\"{u}}sken, Bonn}
%  \changes{v2.18}{2011/07/26}{Adapted to Springer's ccspsmacros,
%    added modified papersize. Michael N{\"{u}}sken, Bonn}
%    \begin{macrocode}
\ifcase\@textareaversion
% version 0: nocctextarea
\@abstrwidth0.85\textwidth
%
\or% version 1, used until June 2011
\textwidth=141mm
\@abstrwidth=120mm
\textheight=200mm
\topmargin=0mm
\oddsidemargin=12mm
\evensidemargin=12mm
\marginparwidth=25mm
\headheight=1.25\headheight
\ifnum\@marginmode<\z@\@marginmode\z@\fi
%
\or% version 2, used since July 2011
% \special{papersize=155mm,235mm}% Springer's papersize
\paperwidth=155mm
\paperheight=235mm
\topmargin=-9.6mm
% MN2011/07/25 this is from ccspsmacros but should be rethought!!!
% Use \voffset, \hoffset instead..
\textheight=45.5pc
\textwidth=119mm
\@abstrwidth=\textwidth
\oddsidemargin=-7.6mm% should be 18mm, will be calculated acc.to \@marginmode
\evensidemargin=-7.6mm% should be 18mm, will be calculated acc.to \@marginmode
\marginparwidth=10mm% will be adapted below
\headheight=1.25\headheight
\ifnum\@marginmode<\z@\@marginmode\tw@\fi% use balanced margins
%
\else% version negative or larger than max: emptypage
\newdimen\allsidemargin \allsidemargin=.5in
% LARGE width
\textwidth=\paperwidth
\advance\textwidth-2\allsidemargin% margin left/right
\marginparsep=1pt
% LARGE height
\topmargin-1in
\advance\topmargin\allsidemargin
\textheight=\paperheight
\advance\textheight-\allsidemargin
\advance\textheight-\headheight
\advance\textheight-\headsep
\advance\textheight-\footskip
% \advance\textheight-\headheight% assuming as much space for foot as head.
\advance\textheight-\allsidemargin
\@marginmode\tw@
\sloppy
\@abstrwidth0.85\textwidth
\fi
\newdimen\cc@topmargin \cc@topmargin\topmargin
\newdimen\cc@textwidth \cc@textwidth\textwidth 
\newdimen\cc@textheight \cc@textheight\textheight
\AtBeginDocument{%
  {\if@ccpublish
    \@tempswafalse
    \ifnum\@textareaversion>0
       \ifdim\topmargin=\cc@topmargin\relax\else\@tempswatrue\fi
       \ifdim\textwidth=\cc@textwidth\relax\else\@tempswatrue\fi
       \ifdim\textheight=\cc@textheight\relax\else\@tempswatrue\fi
    \fi
    \if@tempswa
      \ClassError{cc}{FATAL ERROR! For publishing in cc the page and text
        dimension must not be manipulated. Remove any packages that
        modify the text or page dimensions. In particular: remove the
        packages^^J
        fullpage.sty,^^J
        a4wide.sty,^^J
        geometry.sty,^^J
        vmargin.sty,^^J
        typearea.sty}{}%
      \aftergroup\endinput
    \fi
  \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.)
%  \changes{v2.25c}{2013/10/14}{Removed parenthesis from typeout.}
%    \begin{macrocode}
\typeout{Now adjusting margins: \the\@marginmode.}
\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
%     \ifnum\dimen@<0-\dimen@-\dimen@\fi
%     \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\\
%   remainder & 
%   \dimen@\paperheight
%   \advance\dimen@-1in
%   \advance\dimen@-\topmargin
%   \advance\dimen@-\headheight
%   \advance\dimen@-\headsep
%   \advance\dimen@-\textheight
%   \advance\dimen@-\footskip
%   \themm\dimen@
% \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.
%  \changes{v2.21}{2012/05/07}{Added version below helperstrip.
%    Michael N{\"{u}}sken, Bonn}
%    \begin{macrocode}
\newskip\headerindent \headerindent=10mm
\newdimen\headrulewidth \headrulewidth.4pt
\def\ps@cc{\let\@mkboth\markboth
     \let\@oddfoot\@empty
     \let\@evenfoot\@empty
     \let\@oddhead\@empty
     \let\@evenhead\@empty
     \if@ccpublish
       \ps@ccfirst
       \def\@oddfoot{%
         \ifKV@ccsps@helperstrip%
           \begin{picture}(0,0)%
             \put(340,3){{\stripbox}}%
             \put(10,-5){{\tiny Produced with: \texttt{\csname ver@cc.cls\endcsname}}}%
           \end{picture}%
         \fi
       }%
       \let\@evenfoot\@oddfoot
     \fi
     \expandafter\def\expandafter\@oddhead\expandafter{\@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@
       }%
     }%
     \expandafter\def\expandafter\@evenhead\expandafter{\@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@
       }%
     }%
     }
%    \end{macrocode}
%  \end{macro}
%
%  For some publishing features graphics and colors are used.
%    \begin{macrocode}
\RequirePackage{graphics}[2009/02/05 v1.0o]
\RequirePackage{xcolor}[2007/01/21 v2.11]%
\IfFileExists{Birkh_logo_2010_sps.eps}{%
  \def\birklogo{\bgroup\includegraphics{Birkh_logo_2010_sps.eps}\egroup}
}{%
  \def\birklogo{{\ixpt Birkh{\"{a}}user}}
}
\IfFileExists{dummy_sps.eps}{%
  \def\spslogo{\bgroup\includegraphics{dummy_sps.eps}\egroup}
}{%
  \def\spslogo{{\ixpt Springer Publishing}}
}
%\definecolor{tint}{gray}{0.7}
%    \end{macrocode}
%  
%  \begin{macro}{\ps@ccfirst}
%    The page style \texttt{ccfirst} is provided for typesetting the
%    first page during the publishing process.
%  \changes{v2.21}{2012/05/07}{Added version below helperstrip.
%    Michael N{\"{u}}sken, Bonn}
%    \begin{macrocode}
\def\ps@ccfirst{%
  \def\@oddfoot{%
    \if@ccpublish
      \ifKV@ccsps@revisionstage%
        \begin{picture}(0,0)%
          \put(0,15){{\smash{\raisebox{-2.25pt}{\spslogo}}}}%
        \end{picture}%
      \fi%
      \ifKV@ccsps@sps
      \begin{picture}(0,0)%
        \put(289.5,15){{\birklogo}}%
      \end{picture}%
      \fi
      \ifKV@ccsps@helperstrip%
      \begin{picture}(0,0)%
        \put(340,3){{\stripbox}}%
        \put(10,-5){{\tiny Produced with: \texttt{\csname ver@cc.cls\endcsname}}}%
      \end{picture}%
      \fi
    \fi}%
  \let\@evenfoot\@oddfoot
  \def\@oddhead{%
    \ifKV@ccsps@grid
      \hbox to\z@{%
        \vbox to\z@{%
          \hsize\twidth
          \vskip\headsep
          \fboxrule=.25pt
          \fboxsep=-.25pt
          \textcolor{lightgray}{%
             \fbox{\vbox to\theight{\hbox to\twidth{\hss}\vss}}%
          }%
          \vss
      }%
      \hss
    }%
    \fi
    \hss
  }%
  \let\@evenhead\@oddhead
}
%    \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;  this disabling and execution happen after executing all
%    \cs{AtBeginDocument} commands in \cs{begin}\texttt{\{document\}}.}
%    \begin{macrocode}
\AtEndOfClass{%
  \AtBeginDocument{\@onlypreamble{\author{\if@autotitle\maketitle\fi}}}
%  \AtBeginDocument{\if@autotitle\maketitle\fi}
  \AtEndDocument{\if@autotitle\makeendtitle\fi}
}
%    \end{macrocode}
%
% \begin{macro}{\stripbox}
%   The macro \cs{stripbox} produces a box with information for the
%   publishing service.  This is put in the foot of every page during
%   the revisionstage, see \cs{ccsps}.
%   \begin{macrocode}
\def\stripbox{\kern -11.7cm%
  {}{%
    \raisebox{.8mm}{%
      \tiny
      \fboxsep1mm\framebox{%
        Journal: {\bf \@journalname}\enspace
        Article No.: {\bf \@DOImsnr}\enspace
        \fboxsep.2mm\fbox{%
          \ifx Y\TYPESET{$\checkmark$}\else{\phantom{$\checkmark$}}\fi
        }~TYPESET\enspace
        \fbox{%
          \ifx Y\DISK{$\checkmark$}\else{\phantom{$\checkmark$}}\fi
        }~DISK\enspace
        \fbox{%
          \ifx Y\LE{$\checkmark$}\else{\phantom{$\checkmark$}}\fi
        }~LE\enspace
        \fbox{%
          \ifx Y\CP{$\checkmark$}\else{\phantom{$\checkmark$}}\fi
        }~CP\enspace
        Disp.: \textbf{\the\year/\the\month/\the\day}\enspace
        Pages: \textbf{\@ccnumberofpages}
      }%
    }%
  }%
} %%
%   \end{macrocode}
% \end{macro}
%
%  \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}
%  \changes{v2.04}{2006/03/06}{Changed maketitle to allow for very
%    long abstracts, MN, Bonn}
%  \changes{v2.04}{2006/03/08}{Adapted maketitle due to hyperref, MN, Bonn}
%  \changes{v2.08}{2008/04/25}{Bug repair: Added \cs{protect} to
%    \cs{ClassWarningNoLine} calls in \cs{maketitle}, Michael
%    N{\"{u}}sken, Bonn}
%  \changes{v2.17}{2011/07/07}{Adapted \maketitle to new textarea and
%    modified firstpage headline \cs{maketitle}, Michael N{\"{u}}sken,
%    Bonn}
%  \changes{v2.17c}{2011/07/15}{Moved \cs{thispagestyle} to an earlier
%    point so it always applies to the first page (even when the
%    abstract is very long), Michael N{\"{u}}sken, Bonn}
%  \changes{v2.18}{2011/07/25}{Adapted \maketitle to Springer's
%    version, Michael N{\"{u}}sken, Bonn}
%    \begin{macrocode}
\def\vertrulea{\rule[-7.583pt]{0pt}{7.583pt}}
\def\vertruleb{\rule{2.25pt}{10.2pt}}
\newtoks\cite@hook
\newcommand{\maketitleheadA}{% version before 2011 (Birkh�user)
    \hbox to\textwidth{%
      \vbox to\z@{\vss
        \baselineskip=12pt%
        \halign{\ixpt##\hfil\cr
          comput. complex.~\textbf{\@ccvolume}~(\@ccyear),
          \thepage\ -- \@cclast\cr
          \issn/\expandafter\@gobbletwo\@ccyear%
%          % use + instead --?
          /\cc@fixelen20\@ccissue\relax
          \cc@fixelen40\@ccfirst\relax
          --\@ccnumberofpages\ 
          \$ 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
}
\newcommand{\maketitleheadSPS}{% version since 2011 (Springer)
  \hbox to\textwidth{%
    \vbox to\z@{\vss
      \baselineskip=12pt%
      \halign{%
        \ixpt##\hfil\cr
        comput. complex.%
        \ifKV@ccsps@issuestage%
        ~\textbf{\@ccvolume}~(\@ccyear),~\@ccfirst\ -- \@cclast
        \fi\cr
        \ifKV@ccsps@openaccess
        \copyright{} \@copyholdername\ \@ccyear. 
        This article is published\cr with open access
        at Springerlink.com\cr
        \else\copyright{} \@copyholdername\ \@ccyear\cr\fi
        \ifKV@ccsps@issuestage
        {\printed@issn/\cc@fixelen20\@coveryear/%
          \cc@fixelen20\@ccissue%
          \cc@fixelen40\@ccfirst%
          -% MN2011/07/27: use + instead?
          \@ccnumberofpages}\cr
        {{\it published online}\ \@onlinedate}\cr
        \else\relax\fi
        DOI \@doiinfo\cr}
    }\hss
    \vbox to\z@{\vss
      \offinterlineskip%
      \halign{##&##\hfil\cr
        \vertrulea&\ixpt\cr
        \noalign{\hrule}
        \vertruleb\hskip1mm&%
        \vbox to\z@{\vbox to\z@{\vss
            \hbox{\xptsfbx computational complexity}}\vss}%
        \cr}}}\vskip47.333pt
}
\def\l@title#1#2{}% Usually ignore title entries.
\def\@@today{\today}% for comparison
\renewcommand{\maketitle}{%
  \global\@topnum\z@   % Prevents figures from going at top of page.
  \cite@hook{}%
  \thispagestyle{ccfirst}
  \if@cchead
  \ifnum\@textareaversion=\tw@\vspace*{15pt}\fi
  \vbox to\z@{\vss
    \setcounter{page}{\@ccfirst}%
    \ifcase\@textareaversion\maketitleheadSPS
    \or\maketitleheadA
    \or\maketitleheadSPS
    \else\maketitleheadSPS
    \fi
    }%
  \fi
  \hrule\@height\z@
  \vskip2.2ex% 4.0mm
  \relax
  \begin{center}
    \if@ccpublish
      \renewcommand{\footnote}[1]{\protect\ClassWarningNoLine{cc}{%
          There are no footnotes allowed in title or author.\MessageBreak
          Your command is ignored.\MessageBreak
          Think about moving your remark to the acknowledgements}}%
      \let\thanks\footnote
    \else
      \renewcommand{\footnote}[1]{\protect\ClassWarningNoLine{cc}{%
          In title or author \string\footnote\space does not work.\MessageBreak
          Avoid footnotes or use \string\thanks}}%
      \def\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}%
      \addcontentsline{toc}{title}{\@title}%
      \par
      }%
    \@ifundefined{@subtitle}{}{{%
        \large\itshape
        \@subtitle
%        %\if!\@subtitle!\relax\else\addcontentsline{toc}{subtitle}{\@subtitle}\fi%
        \par
        }}
    \@ifundefined{@version}{}{{%
        \large\itshape
        \@version
        \par
        }}
    \bigskip
    \vskip1.21ex% 2.2mm
    \vskip\z@
    {%
      \large\scshape
      \extractnamesfr@m@author
      \par
      }%
    \ifKV@ccsps@sps%\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}%
    \ifx\@abstract@macro\@empty
      \if@abstractoptional
      \ClassWarningNoLine{cc}{Missing abstract}%
      \else
      \ClassError{cc}{Missing abstract}
      {Define abstract in the preamble using
        \protect\begin{abstract} ... \protect\end{abstract}.}%
      \fi
    \else
      \@tempa\@abstract@macro\par
    \fi
    \ifx\@keywords@macro\@empty
      \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\@keywords@macro\par
    \fi
    \ifx\@subject@macro\@empty
      \if@subjectoptional
      \ClassWarningNoLine{cc}{Missing subject classification}%
      \else
      \ClassError{cc}{Missing subject}
      {Define subject in the preamble using
        \protect\begin{subject} ... \protect\end{subject}.}%
      \fi
    \else
      \@tempa\@subject@macro\par
    \fi
    \@thanks
    \ifx\@tempa\relax\vskip3ex\fi
  \end{center}
  \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
    }%
  \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
%% 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.
%  \changes{v2.20}{2012/03/01}{Modified bare part to allow
%    \Lpackage{hyperref} to change \cs{label} before we use change it
%    for \cs{bare}.}
%    \begin{macrocode}
\if@bare
\def\relabel@label#1{\ifx\@currentlabel\@bare@currentlabel\else
  {\let\@currentlabel\@bare@currentlabel\relabel@olabel{bare@#1}}%
  \fi\relabel@olabel{#1}}
\def\init@bare{\if@bare\let\relabel@olabel\label\let\label\relabel@label\fi}
\AtBeginDocument{\init@bare}%
\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.)}}
\def\init@bare{}
\fi
\let\@bare@currentlabel\@currentlabel
%    \end{macrocode}
%  \end{macro}
%    \begin{macrocode}
%</relabel>
%    \end{macrocode}
%
%  \GetFileInfo{ccref.sty}
%  \CodelinePrefix{r}
%
% \section{Source of \filename (\fileprefix)}
%
%  This file (\file{\filename}) has version number \fileversion, last
%  revised \filedate.
%  \changes{v2.15}{2010/10/21}{Moved this from the main part into a
%    seperate file.}
%    \begin{macrocode}
%<*ccref>
%    \end{macrocode}
%  \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}
%</ccref>
%    \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}
%  \changes{v2.15b}{2010/10/21}{Pretending that amsthm is loaded makes
%    hyperref do strange things.  Logic adapted.}
%  \changes{v2.15b}{2010/10/26}{Pretending that amsthm is loaded makes
%    hyperref do strange things.  Loading amsthm causes strange
%    errors.  Logic adapted so that either way no harm is done.}
%    \begin{macrocode}
%<*thcc>
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{thcc}[2012/06/22 v2.25
         computational complexity, theorem layouts.
         Michael Nuesken, Bonn.]
%    \end{macrocode}
%  We require Frank Mittelbach's \Lpackage{theorem} package.
%    \begin{macrocode}
\RequirePackage{theorem}[1995/11/23 v2.2c]
%   \end{macrocode}
%  The following is actually a really dirty trick.  On the one hand
%  side we pretend that \Lpackage{amsthm} is loaded by defining
%  \cs{ver@amsthm.sty}, which is checked when reading a new package by
%  the LaTeX internal command \cs{@ifl@aded}.  On the other hand side,
%  we tell \Lpackage{hyperref} that it is not loaded by manipulating
%  the LaTeX internal command \cs{@ifpackageloaded} used there.  (If
%  further problems occur we may really run into trouble with this
%  technique.)
%    \begin{macrocode}
\def\cc@forbiddenpackage{2010/10/26 Forbidden by cc.cls/thcc.sty. Not loaded!}
\expandafter\global\expandafter\let\csname ver@amsthm.sty\endcsname\cc@forbiddenpackage
\expandafter\global\expandafter\let\csname ver@apthm.sty\endcsname\cc@forbiddenpackage
\let\orig@ifpackageloaded\@ifpackageloaded
\def\@ifpackageloaded#1{%
  \expandafter\ifx\csname ver@#1.\@pkgextension\endcsname\cc@forbiddenpackage
    \expandafter\@secondoftwo% consider it as not loaded
  \else
    \gdef\cc@reserved{\orig@ifpackageloaded{#1}}\expandafter\cc@reserved%
  \fi}
%    \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|.
%  \changes{v2.07}{2007/01/11}{Added support for manualbibliography.
%    Michael N{\"{u}}sken, Bonn}
%    \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
    }%
  }{}%
  \if@manualbibliography\def\activate@shortcite{}\fi
}
%    \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.
%  \changes{v2.25}{2012/06/21}{Changed \cs{th@cc} and \cs{th@ccnn} so
%    that more than single line comments are possible. Michael
%    N{\"{u}}sken, Bonn}
%  \changes{v2.25}{2012/06/27}{Modified spacing. Michael N{\"{u}}sken,
%    Bonn}
%    \begin{macrocode}
\newskip\postthmcmtskip
\postthmcmtskip .5em plus .5em
\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}).}\hskip\postthmcmtskip}%
  }
%    \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}).}\hskip\postthmcmtskip}%
  }
%    \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.
%  \changes{v2.25b}{2013/06/26}{Set \cs{itemindent} in proofs to
%    \cs{labelsep}, so that no negative indention is produced.  You may
%    use \cs{everyproof}{\cs{itemsep}1ex} or similar to have vertical
%    space before in-proof items.}
%    \begin{macrocode}
\newskip\postprfcmtskip
\postprfcmtskip .5em plus 1em
\def\th@ccproof{%
  \normalfont\upshape
  \def\@begintheorem##1##2{\item
    [\hskip\labelsep \theorem@headerfont ##1.\ \ ]%
    \itemindent\labelsep}%
  \def\@opargbegintheorem##1##2##3{\item
    [\hskip\labelsep \theorem@headerfont ##1]%
    {\normalfont({\activate@shortcite{}##3}).}\hskip\postprfcmtskip
    \itemindent\labelsep}%
  }
%    \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}[2012/06/22 v2.25
  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.
%  \changes{v2.24}{2012/06/18}{Bugfix: Dirty hacks to ensure correct
%    theorem, algorithm and equation counting and
%    referencing. MNuesken, Bonn}
%    \begin{macrocode}
\def\reset@prefixrefstepcounter#1{%
  \let\refstepcounter\cc@normal@refstepcounter% Put refstepcounter back to normal
  \refstepcounter{#1}% do normal operation
  \defprefix{equation}##1{(##1)}% reset equation prefix
}
\def\theorempreamblenn\@thm#1#2{%
  \defprefix{#1}##1{#2}%
  \let\cc@normal@refstepcounter\refstepcounter
  \let\refstepcounter\reset@prefixrefstepcounter
  \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}%
  \let\cc@normal@refstepcounter\refstepcounter
  \let\refstepcounter\reset@prefixrefstepcounter
  \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.}
%  \changes{v2.23}{2012/05/22}{For compatibility with
%    \lpackage{hyperref.sty}: Changed handling of using equation counter
%    for theorems (\lclo{separateequationcounting},
%    \lclo{noseparateequationcounting}).
%    Michael N{\"{u}}sken, Bonn.}
%    \begin{macrocode}
\if@ccnosepeqncnt
%%% \let\c@namedth@@r@m\c@equation
%%% \def\thenamedth@@r@m{\theequation}
\def\cc@thmcnter{equation}
\newtheorem{namedth@@r@m}[\cc@thmcnter]{\the\theoremtitle}
\else
\newtheorem{namedth@@r@m}{\the\theoremtitle}
\def\cc@thmcnter{namedth@@r@m}
\fi
\newenvironment{namedtheorem}[1]
  {\theoremtitle{#1}\namedth@@r@m}
  {\endnamedth@@r@m}
\if@standardtheorems
\newtheorem{answer}[\cc@thmcnter]{\Answer}
\newtheorem{assumption}[\cc@thmcnter]{\Assumption}
\newtheorem{claim}[\cc@thmcnter]{\Claim}
\newtheorem{conjecture}[\cc@thmcnter]{\Conjecture}
\newtheorem{convention}[\cc@thmcnter]{\Convention}
\newtheorem{corollary}[\cc@thmcnter]{\Corollary}
\newtheorem{counterexample}[\cc@thmcnter]{\Counterexample}
\newtheorem{definition}[\cc@thmcnter]{\Definition}
\newtheorem{exercise}[\cc@thmcnter]{\Exercise}
\newtheorem{fact}[\cc@thmcnter]{\Fact}
\newtheorem{hypothesis}[\cc@thmcnter]{\Hypothesis}
\newtheorem{lemma}[\cc@thmcnter]{\Lemma}
\newtheorem{notation}[\cc@thmcnter]{\Notation}
\newtheorem{note}[\cc@thmcnter]{\Note}
\newtheorem{observation}[\cc@thmcnter]{\Observation}
\newtheorem{open}[\cc@thmcnter]{\OpenQuestion}
\newtheorem{openquestion}[\cc@thmcnter]{\OpenQuestion}
\newtheorem{problem}[\cc@thmcnter]{\Problem}
\newtheorem{proposition}[\cc@thmcnter]{\Proposition}
\newtheorem{question}[\cc@thmcnter]{\Question}
\newtheorem{remark}[\cc@thmcnter]{\Remark}
\newtheorem{result}[\cc@thmcnter]{\Result}
\newtheorem{theorem}[\cc@thmcnter]{\Theorem}
\newtheorem{thesis}[\cc@thmcnter]{\Thesis}
\newtheorem{warning}[\cc@thmcnter]{\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.05
  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}[1995/11/23 v2.2c]
\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}
%  \changes{v2.10}{2010/05/11}{Redesign. Now at any time item with
%  text label and hanging indentation are possible as used for input
%  and output: \cs{item}[itemtitle] does it.}
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{ccalgo}[2012/06/22 v2.25
  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.  Moreover we use that the produced label is put in
%  \cs{@tempboxa} to reinitialize the paragraph indention in
%  \cs{reinit@list@label}.
%    \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.)
%  \changes{v2.05}{2010/01/25}{Requiring ccaux now.}
%    \begin{macrocode}
\RequirePackage{ccaux}
\RequirePackage{theorem}[1995/11/23 v2.2c]
\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{%
%   \dimen@i#1\relax
%   \typeout{Reinit: old \the\reinit@list@last, new \the\dimen@i}%%% DEBUG
  \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 holds 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.
%  \changes{v2.10}{2010/05/11}{Redesign.}
%    \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|.
%  \changes{v2.13}{2010/05/29}{Introduced \cs{AtNextNumberedItem}, Michael
%    N{\"{u}}sken, Bonn}
%    \begin{macrocode}
\newtoks\AtNextItem
\newtoks\AtNextNumberedItem
%    \end{macrocode}
%  A toggle noting whether the named items are complete or not.
%  \changes{v2.10}{2010/05/11}{Redesign: implement another mechanism
%    to get information about the type of \cs{item} that was called.}
%    \begin{macrocode}
\newif\if@noitemargcopy
\let\orig@item\item
\def\item{\@ifnextchar[{\@noitemargcopyfalse\orig@item}{\@noitemargcopytrue\orig@item}}
\newcount\last@algolabeltype
\newcount\this@algolabeltype
%    \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]{%
  \expandafter\count@\value{algonumerate}%
% \typeout{algonumerate@label #1}%
% \typeout{...counter=\the\count@}%
% \if@noitemargcopy\typeout{...noitemarg}\else\typeout{...explicititemarg}\fi
%    \end{macrocode}
%  Now, fork with respect to the item type.  There are four variants:
%  a numbered item with negative counter procudes an item with hanging
%  indention and a text label from the list supplied at the list
%  initialisation.  A numbered item with positive counter produces a
%  numbered item.  The counter is stepped in these two cases and zero
%  is skipped.  An item with empty optional argument produces an
%  item like a numbered one just without a number.  An item with a
%  non-empty optional argument produces an item with hanging indention
%  and the optional argument as label.
%    \begin{macrocode}
  \if@noitemargcopy
    \ifnum\count@<\z@
      \let\next\algonumerate@labelautomatic
      \global\last@algolabeltype\this@algolabeltype
      \global\this@algolabeltype\m@ne
    \else
      \let\next\algonumerate@labelnumber
      \global\last@algolabeltype\this@algolabeltype
      \global\this@algolabeltype\@ne
    \fi
  \else
    \def\@tempa{#1}%
    \ifx\@tempa\@empty
      \let\next\algonumerate@labelempty
      \global\last@algolabeltype\this@algolabeltype
      \global\this@algolabeltype\tw@
    \else
      \let\next\algonumerate@labelexplicit
      \global\last@algolabeltype\this@algolabeltype
      \global\this@algolabeltype\z@
    \fi
  \fi\next{#1}}
%    \end{macrocode}
%  For each of the four variants we now specify how to typeset them.
%    \begin{macrocode}
\newcommand{\algonumerate@makelabelexplicit}[1]{%
  #1:\hskip\algo@labelsep%
}
\newcommand{\algonumerate@makelabelempty}[1]{%
  \hskip\steplabelwidth\hskip\algo@labelsep%
}
\newcommand{\algonumerate@makelabelautomatic}[1]{%
  #1:\hskip\algo@labelsep%
}
\newcommand{\algonumerate@makelabelnumber}[1]{%
  \hb@xt@\steplabelwidth{\hss
      #1%
  }\hskip\algo@labelsep%
}
%    \end{macrocode}
%  The macro \cs{algonumerate@postprocess} contains all the stuff to
%  be done after producing the label and putting it into
%  \cs{@tempboxa}.
%    \begin{macrocode}
\newcommand{\algonumerate@postprocess}[1]{%
    \expandafter\count@\value{algonumerate}%
%    \end{macrocode}
%  We insert a \cs{medskip} if a (positively) numbered item follows an
%  automatic or explicit text item.
%    \begin{macrocode}
    \ifnum\last@algolabeltype<\@ne
    \ifnum\this@algolabeltype=\@ne
    \medskip
    \fi
    \fi
%    \end{macrocode}
%  Next, we execute case specific commands. (For text items we need to
%  set \cs{@currentlabel} here.)
%    \begin{macrocode}
    #1%
    \global\let\latest@item@currentlabel\@currentlabel
    \global\let\latest@item@bare@currentlabel\@bare@currentlabel
    \ifnum\count@=\m@ne
    \stepcounter{algonumerate}%
    \fi
    \global\@speciallabeltrue
%    \end{macrocode}
%  Execute |\AtNextItem| once and clear it. If in a numbered item
%  execute |\AtNextNumberedItem| once and clear it.
%  \changes{v2.13}{2010/05/29}{Introduced \cs{AtNextNumberedItem}, Michael
%    N{\"{u}}sken, Bonn}
%    \begin{macrocode}
    \the\AtNextItem \global\AtNextItem{}%
    \ifnum\this@algolabeltype=\@ne
    \the\AtNextNumberedItem \global\AtNextNumberedItem{}%
    \fi
%    \end{macrocode}
%  Reinitialize the list indentions.
%    \begin{macrocode}
    \reinit@list@label
}
%    \end{macrocode}
%  The next four macros are similar to each other.  For each item type
%  they produces the label and use the dirty trick to get counting and
%  paragraph formatting as desired.
%    \begin{macrocode}
\newcommand{\algonumerate@labelexplicit}[1]{% For algorithm i/o
%   \typeout{item explicit [#1]}%
  \algonumerate@makelabelexplicit{#1}%
%    \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
    \algonumerate@postprocess{%
      \protected@edef\@currentlabel{\csname p@\@listctr\endcsname
        {\makeoptalgocurrentlabel{#1}}}%
      \protected@edef\@bare@currentlabel{#1}%
    }%
%    \end{macrocode}
%  Execute the |\global| which was used to implement this hook.
%    \begin{macrocode}
    \global}%
}
\newcommand{\algonumerate@labelempty}[1]{% For algorithm i/o
%   \typeout{item empty [#1]}%
  \algonumerate@makelabelempty{}%
  \global\let\algonumerate@global\global
  \gdef\global{\algonumerate@global\let\global\algonumerate@global
    \algonumerate@postprocess{}%
    \global}%
}
\newcommand{\algonumerate@labelautomatic}[1]{% For algorithm steps
%   \typeout{item automatic [#1]}%
  \algonumerate@makelabelautomatic{#1}%
  \global\let\algonumerate@global\global
  \gdef\global{\algonumerate@global\let\global\algonumerate@global
    \algonumerate@postprocess{%
      \protected@edef\@currentlabel{\csname p@\@listctr\endcsname
        {\makeoptalgocurrentlabel{#1}}}%
      \protected@edef\@bare@currentlabel{#1}%
    }%
    \global}%
}
\newcommand{\algonumerate@labelnumber}[1]{% For algorithm steps
%   \typeout{item numbered [#1]}%
  \algonumerate@makelabelnumber{#1}%
  \global\let\algonumerate@global\global
  \gdef\global{\algonumerate@global\let\global\algonumerate@global
    \algonumerate@postprocess{}%
    \global}%
}
%
\newdimen\algonumerate@maxindent
%    \end{macrocode}
%  We add a mechanism to find and store the length of the longest
%  macro.  However, at present it is not used.
%    \begin{macrocode}
\newdimen\@algolongestlabel
\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{%
  \setcounter{algonumerate}{-1}%
  \this@algolabeltype=\@M
  \@algolongestlabel\z@
  \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@}%
    \setbox\@tempboxa\hbox{\algonumerate@makelabelautomatic{\the\toks@}}%
    \ifdim\wd\@tempboxa>\@algolongestlabel\relax
    \@algolongestlabel\wd\@tempboxa\fi
    }%
  \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}.
%  \changes{v2.10}{2010/05/11}{Added the macro
%    \cs{skipremainingspecialitems} to allow the user to override the
%    standard label item list.}
%    \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\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
  \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
  \def\skipremainingspecialitems{\setcounter{algonumerate}{0}}%
  }{%
  \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.
%  \changes{v2.20}{2011/10/06}{Removed bug when namedalgorithm has
%    \cs{index} in its title, Michael N{\"{u}}sken, Bonn}
%    \begin{macrocode}
\newif\if@trivialrange
\newcommand{\refsetrange}[2]{%
  {\shortlabeltrue
    \let\index\relax
    \let\@tempa\relax
    \protected@edef\@tempa{%
      \csname r@\the\algorithmmasterkey-#1\endcsname}%
    \let\@tempc\relax
    \protected@edef\@tempc{%
      \csname r@\the\algorithmmasterkey-#2\endcsname}%
    \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@}%
  \AtNextNumberedItem{\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|.
%  \changes{v2.12}{2010/05/21}{Debugged indention processing, Michael
%    N{\"{u}}sken, Bonn}
%    \begin{macrocode}
\newdimen\indention@reinit@list@last
\newenvironment{algo@indention}{%
  \par
  \indention@reinit@list@last\reinit@list@last
  \advance\leftmargin\blockindent
  \advance\labelsep\blockindent
  \advance\@totalleftmargin\blockindent
  \advance\linewidth-\blockindent
  \def\algo@indention@undo{%
    \reinit@list{\indention@reinit@list@last}%
    \advance\leftmargin-\blockindent
    \advance\labelsep-\blockindent
    \advance\@totalleftmargin-\blockindent
    \advance\linewidth\blockindent
    }
  \list@parshape
  }{%
  \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}{%
  \algo@indention
  \algo@range}{%
  \endalgo@range
  \endalgo@indention
  }
%    \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\@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}.}
% \changes{v2.23+}{2012/06/08}{Removed a bug, now named@al@r@thm is
%   defined like all other theorems with the v2.23 update in
%   mind. Michael N{\"{u}}sken, Bonn.}
%    \begin{macrocode}
\theoremstyle{ccalgo}
\providecommand{\cc@thmcnter}{equation}
\newtheorem{named@lg@r@thm}[\cc@thmcnter]{\the\algotitle}
\defprefix{named@lg@r@thm}#1{\the\algotitle~#1}
%%% \ifx\c@namedth@@r@m\@undefined\else
%%% \let\c@named@lg@r@thm\c@namedth@@r@m
%%% \let\thenamed@lg@r@thm\thenamedth@@r@m
%%% \fi
%    \end{macrocode}
%
%  \begin{environment}{namedalgorithm}
%    This combines all necessary stuff 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.
%  \changes{v2.10}{2010/05/11}{Added extra optional argument to allow
%    specification of a longest label. But that is of no use at
%    present since this information is never used.}
%  \changes{v2.24}{2012/06/18}{Bugfix: Dirty hacks to ensure correct
%    theorem, algorithm and equation counting and
%    referencing. MNuesken, Bonn}
%    \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]%
  \defprefix{\cc@thmcnter}##1{\the\algotitle~##1}%
  \def\algo@theorem{named@lg@r@thm}%
  \algotitle{#1}%
  \n@medalgorithm}
{\endalgonumerate\csname end\algo@theorem\endcsname}
\newenvironment{namedalgorithm*}[1]{%
  \defprefix{\cc@thmcnter}##1{\the\algotitle}%
  \def\algo@theorem{named@lg@r@thm*}%
  \algotitle{#1}%
  \n@medalgorithm}
{\endalgonumerate\csname end\algo@theorem\endcsname}
\newcommand{\n@medalgorithm}[1][\babelInput,\protect\babelOutput]{%
  \algonumerateinit{#1}%
  \n@m@d@lgorithmgetlongestlabel}
\newcommand{\n@m@d@lgorithmgetlongestlabel}[1][]{%
  \def\@tempa{#1}%
  \ifx\@tempa\@empty\else
    \setbox\@tempboxa\hbox{\algonumerate@makelabel{#1}}%
    \ifdim\wd\@tempboxa>\@algolongestlabel\relax
    \@algolongestlabel\wd\@tempboxa\fi
  \fi
  \n@m@d@lgorithmgetmasterkey
}
\newcommand{\n@m@d@lgorithmgetmasterkey}[1]{%
  \algorithmmasterkey{#1}%
  \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}%
  \defprefix{equation}##1{(##1)}% reset equation prefix
  \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.}
%  \changes{v2.10}{2010/05/11}{Use \cs{selectlanguage} only if
%    \cs{language} is not \texttt{nohyphenation}. This avoids strange
%    errors.}
%    \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}]%
  \def\@tempa{nohyphenation}\ifx\languagename\@tempa\else%
  \expandafter\selectlanguage\expandafter{\languagename}\fi%
  \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.05
  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.05 cc2 cite helper package]
%    \end{macrocode}
%  We simply load \Lpackage{natbib} and make some small initializations.
%    \begin{macrocode}
\RequirePackage{natbib}[2010/09/13 8.31b]
\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.05 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.05 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.
%  \changes{v2.07}{2007/01/11}{Changed bibliography basename to
%    \cs{jobname}. Michael N{\"{u}}sken, Bonn}
%  \changes{v2.25a}{2012/06/25}{Corrected type. Michael N{\"{u}}sken,
%    Bonn}
%    \begin{macrocode}
%<*cctemplate>
%%% Template (2011/07/27) for an article using cc
\begin{filecontents*}{\jobname.bib}
  %% Insert your bibliography file here
\end{filecontents*}
\begin{filecontents}{\jobname.bbl}
  %% Insert your bbl file here if you do not have a bibliography file
\end{filecontents}

\documentclass{cc}

%%\ccsps{}

%%% personal macros and packages
%%% end of personal macros and packages

\contact{}% Insert contact email address here.
\submitted{}% Insert the date on which you made the original
           % submission of your paper to computational complexity,
           % in the format \submitted{8 August 2008}.
\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 separated 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}
%% \noacknowledge% This command must be here if there are no
                 % acknowledgements.

\bibliography{journals,\jobname}% Put your bibliography into the above
                                % filecontents environment!

\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.05
         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.05
         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.
%  \changes{v2.05}{2209/12/22}{Added \cs{@adjustnumbering}.}
%    \begin{macrocode}
%<*cc4amsart>
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{cc4amsart}[2009/12/22 v2.05b
         computational complexity, adaptions to amsart.
         Michael Nuesken, Bonn.]
\RequirePackage{ccaux}
% ccreltex deactivates amsthm.sty and reactive LaTeX's definitions.
\RequirePackage{ccreltx}
\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}
\AtBeginDocument{\@adjustnumbering}
%</cc4amsart>
%    \end{macrocode}
%
%  \def\filename{cc4svjour.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{svjour3} or derivatives
%  of it for a file that has been written with the document class
%  \Lclass{cc}.  To do this add a |\usepackage{cc4svjour}| after it.
%  \changes{v2.14}{2010/10/14}{Derived from \lpackage{cc4amsart}\texttt{.sty}.}
%    \begin{macrocode}
%<*cc4svjour>
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{cc4svjour}[2010/10/14 v2.15
         computational complexity, adaptions to svjour3.
         Michael Nuesken, Bonn.]
\RequirePackage{ccaux}
\RequirePackage{cc2cite}
% ccreltex deactivates amsthm.sty and reactive LaTeX's definitions.
\RequirePackage{ccreltx}
\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}).]}%
%   }
%
%% Deactivate svjour3's theorem 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
\@longarticletrue
\RequirePackage{ccthm}
\babel\def\ccacknowledgementsname{Acknowledgements}[%
  german=Danksagung,french=Remerciements]
\newenvironment{acknowledge}{\section*{\ccacknowledgementsname}}{}
\RequirePackage{relabel}
\RequirePackage{cc2cite}
\RequirePackage{ccqed}
\RequirePackage{amsmath} 
\RequirePackage{amsfonts}
\RequirePackage{amssymb}
\RequirePackage{url}
\providecommand{\homepage}{\begingroup\scriptsize\urlstyle{tt}\Url}
\AtBeginDocument{\@adjustnumbering}
%</cc4svjour>
%    \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.05
         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
\let\proof\relax \let\endproof\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
% ccreltex deactivates amsthm.sty and reactive LaTeX's definitions.
\RequirePackage{ccreltx}
\RequirePackage{ccref}
\RequirePackage{ccthm,ccproof}
\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.05
         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}
% ccreltex deactivates amsthm.sty and reactive LaTeX's definitions.
\RequirePackage{ccreltx}
% \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.05
         computational complexity, adaptions to jT which uses amsart.
         Michael Nuesken, Bonn.]
\RequirePackage{ccaux}
% ccreltex deactivates amsthm.sty and reactive LaTeX's definitions.
\RequirePackage{ccreltx}
\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. 
%  \changes{v2.05}{2209/12/22}{Added ams packages.}
%    \begin{macrocode}
%<*cc4elsart>
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{cc4elsart}[2009/12/22 v2.05b
         computational complexity, adaptions to elsart.
         Michael Nuesken, Bonn.]
\RequirePackage{ccaux}
% ccreltex deactivates amsthm.sty and reactive LaTeX's definitions.
\RequirePackage{ccreltx}
\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~}
\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]
\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.09}
%  \def\filedate{2008/04/25}
%  \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-2007 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}[2007/04/24 4.20 (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$
}

INTEGERS { nameptr namesleft numnames }


STRINGS  { bibinfo}

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.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 {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
          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