summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/computational-complexity
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-11 23:51:54 +0000
committerKarl Berry <karl@freefriends.org>2006-01-11 23:51:54 +0000
commit9b9579f2f1c4c73e0a1d5c88a38fa35bbd1586d8 (patch)
treed2a031a27a1cb37a79802e3692cfcfc85aa1a277 /Master/texmf-dist/source/latex/computational-complexity
parent23c8244f167efe6b35ad3c0eca20c2791e4a0a63 (diff)
trunk/Master/texmf-dist/source/latex/computational-complexity
git-svn-id: svn://tug.org/texlive/trunk@198 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/computational-complexity')
-rw-r--r--Master/texmf-dist/source/latex/computational-complexity/cc.dtx11493
-rw-r--r--Master/texmf-dist/source/latex/computational-complexity/cc.ins105
2 files changed, 11598 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/computational-complexity/cc.dtx b/Master/texmf-dist/source/latex/computational-complexity/cc.dtx
new file mode 100644
index 00000000000..5a7fa8ffdf3
--- /dev/null
+++ b/Master/texmf-dist/source/latex/computational-complexity/cc.dtx
@@ -0,0 +1,11493 @@
+% \iffalse meta-comment
+%
+% Copyright 2000, 2003, computational complexity, Michael Nüsken
+%
+% This file is part of computational complexity macro package.
+%
+% It may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.2
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.2 or later is part of all distributions of LaTeX
+% version 1999/12/01 or later.
+%
+% -----------------------------------------------------------
+%
+% Look for %*% in this file, when you try to find \documentclass or
+% changeable options.
+%
+%<*chartab>
+%\fi
+% \CheckSum{6340}
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+% \iffalse meta-comment
+%</chartab>
+% \fi
+% \iffalse meta-comment
+%<*driver>
+\begin{filecontents}{texrefs.bib}
+DANTE Books:
+
+@Book{knu94,
+ author = {Knuth, Donald E.},
+ title = {The \TeX{}book},
+ publisher = {Addison Wesley},
+ year = 1994,
+ pages = {IX, 483},
+ edition = {Incorp. the final corr. made in 1994 Reading, Mass.},
+ isbn = {0-201-13447-0/0-201-13448-9},
+}
+
+@Book{knu84,
+ author = {Donald Ervin Knuth},
+ title = {The \TeX{}book},
+ publisher = {Addison-Wesley},
+ year = 1984,
+ address = {Reading, Mass.},
+ pages = {IX, 483},
+ isbn = {0-201-13448-9},
+ xedition = {2nd print},
+}
+ annote = {This is the definitive and complete user manual to
+ the \TeX{} computerized typesetting system. \TeX{} software
+ offers both writers and publishers the opportunity to
+ produce technical text, with the speed and efficiency
+ of a computer system.},
+
+@Book{det97,
+ author = {Detig, Christine},
+ title = {Der \LaTeX{} Wegweiser},
+ publisher = {MITP-Verlag},
+ year = 1997,
+ pages = 236,
+ isbn = {3-8266-0256-0},
+}
+ annote = {29,80 DM
+
+ Eine leichtverst{\"{a}}ndliche, aufgabenorientierte Einf{\"{u}}hrung f{\"{u}}r
+ \LaTeXe{}-Anf{\"{a}}nger, die trotz ihrer K{\"{u}}rze nicht nur die
+ elementaren \LaTeX{}-Befehle, sondern auch die hinter ihnen
+ stehenden Konzepte erl{\"{a}}utert: Wichtige \LaTeX{}-Erweiterungspakete
+ und Hilfswerkzeuge werden mit vielen Beispielen anschaulich
+ erkl{\"{a}}rt. Es fehlen jedoch Hinweise, wie eigene Befehle oder
+ Umgebungen definiert werden. Zum Buch gibt es noch das
+ Wegweiser-Online-Center, in dem Sie weitere Informationen zum
+ Buch abfragen k{\"{o}}nnen. [TK 1/1997]}
+
+@Book{abd95,
+ author = {Abdelhamid, Rames},
+ title = {Das Vieweg \LaTeXe{} Buch},
+ publisher = {Vieweg},
+ address = {Wiesbaden},
+ year = 1995,
+ isbn = {3-528-25145-X},
+}
+ annote = {39,80 DM}
+
+@Book{lam95,
+ author = {Lamport, Leslie},
+ title = {Das \LaTeX{}-Handbuch},
+ publisher = {Addison-Wesley Publ.},
+ year = 1995,
+ edition = {1st},
+ isbn = {3-89319-826-1},
+}
+ annote = {69,90 DM
+
+ Analog zum \TeX{}book das Standardwerk zu \LaTeX{}. Die deutsche
+ Ausgabe wurde sehr gut und verst{\"{a}}ndlich {\"{u}}bersetzt und mit einem
+ Anhang der deutschen Besonderheiten versehen. Die Aufteilung in
+ einzelne Kapitel ist bei Lamport nicht immer sehr gelungen;
+ nahezu alles wird zweimal erkl{\"{a}}rt, einmal ausf{\"{u}}hrlich im
+ Einf{\"{u}}hrungsteil, einmal zusammenfassend im Referenzteil. Man mu{\"{s}}
+ sich die Informationen regelrecht zusammensuchen. Daher ist
+ Abdelhamids Das Vieweg-\LaTeXe{}-Buch vorzuziehen.},
+
+@Book{lam94,
+ author = {Lamport, Leslie},
+ title = {\LaTeX{} - A Document Preparation System},
+ publisher = {Addison-Wesley Publ.},
+ year = 1994,
+ isbn = {0-201-52983-1},
+ edition = {2nd},
+}
+ annote = {74,00 DM
+
+ Die englischsprache Originalausgabe des Buchs von Lamport: Es
+ beschreibt in der 2. Auflage die neue Standard-LaTeX-Version
+ \LaTeXe{}. Da die deutschsprachige Ausgabe sehr gut und
+ verst{\"{a}}ndlich {\"{u}}bersetzt wurde, ist das "Original" nicht mehr so
+ gefragt.}
+
+XBook{lam94,
+ author = {Leslie Lamport},
+ title = {\LaTeX{}: A Document Preparation System User's Guide and Reference Manual},
+ publisher = {Addison Wesley Longman, Inc.},
+ year = 1994,
+ isbn = {0-201-52983-1},
+ month = {July},
+}
+ annote = {This authoritative user's guide and reference manual
+ for the \LaTeX{} computer typesetting system has been
+ revised to document features now available in the new
+ standard software release \LaTeXe{}. Other parts of the
+ book have been revised, as well, reflecting several
+ years of user comments and suggestions.}
+
+@Book{kop97a,
+ author = {Kopka, Helmut},
+ title = {\LaTeX{} - Band 1: Einf{\"{u}}hrung},
+ publisher = {Addison Wesley Longmann},
+ year = 1997,
+ isbn = {3-8273-1025-3},
+ edition = {2. korr. Nachdruck},
+}
+ annote = {69,90 DM
+
+ Eine gut verst{\"{a}}ndliche Einf{\"{u}}hrung, die leider mit jeder Auflage
+ immer dicker und nicht unbedingt "geordneter" und "richtiger"
+ wurde. Der Kenner wird sich {\"{u}}ber die wirklich sehr gute
+ Befehls{\"{u}}bersicht freuen. Im deutschsprachigen Raum das
+ Nachschlagewerk {\"{u}}ber \LaTeX{}, das als dreib{\"{a}}ndiges Werk neu
+ aufgelegt wird.}
+
+@Book{kopdal99,
+ author = {Kopka, Helmut and Daly, Patrick W.},
+ title = {A Guide to \LaTeX{} - Document Preparation for Beginners and Advanced Users},
+ publisher = {Addison-Wesley Publ.},
+ year = 1999,
+ isbn = {0-201-42777-X/0-201-39825-7},
+ pages = {XV, 600},
+ edition = {3rd},
+}
+ annote = {52,00 DM
+
+ Die englische "{\"{U}}bersetzung" von Kopkas "LaTeX - Eine Einf{\"{u}}hrung"
+ ist nicht einfach "nur {\"{u}}bersetzt", sondern wurde auch an den
+ nicht-deutschen Leserkreis angepa{\"{s}}t.}
+
+@Book{kopdal95,
+ author = {Kopka, Helmut and Daly, Patrick W.},
+ title = {A Guide to \LaTeX{} - Document Preparation for Beginners and Advanced Users},
+ publisher = {Addison-Wesley Publ.},
+ year = 1995,
+ isbn = {0-201-42777-X},
+ edition = {2nd},
+}
+ annote = {52,00 DM
+
+ Die englische "{\"{U}}bersetzung" von Kopkas "LaTeX - Eine Einf{\"{u}}hrung"
+ ist nicht einfach "nur {\"{u}}bersetzt", sondern wurde auch an den
+ nicht-deutschen Leserkreis angepa{\"{s}}t.}
+
+@Book{kat97,
+ author = {Katzenbeisser, Stefan},
+ title = {Von der Idee zum Dokument, Einf{\"{u}}hrung in \TeX{} und \LaTeX{}},
+ publisher = {R. Oldenbourg Verlag},
+ address = {M{\"{u}}nchen},
+ year = 1997,
+ isbn = {3-486-24182-6},
+ edition = {2nd},
+}
+ annote = {69,00 DM [TK 1/1998] }
+
+@Book{lie96,
+ author = {Liebing, Arnulf},
+ title = {Erstes Arbeiten mit \TeX{}},
+ publisher = {Prentice Hall},
+ year = 1996,
+ pages = 192,
+ isbn = {3-8272-9521-1},
+}
+ annote = {39,95 DM [TK 4/1997]}
+
+@Book{die94,
+ author = {Dietsche, Luzia and Lammarsch, Joachim},
+ title = {\LaTeX{} zum Loslegen - Ein Soforthelfer f{\"{u}}r den Alltag},
+ publisher = {Springer},
+ year = 1994,
+ isbn = {3-540-56545-0},
+}
+ annote = {39,90 DM; nicht mehr lieferbar!
+
+ Aus \LaTeX{}-Kursen an der Universit{\"{a}}t Heidelberg ist dieses
+ kompakte, f{\"{u}}r den Anf{\"{a}}nger und auch den etwas
+ fortgeschritteneren \LaTeX{}-Benutzer gut geeignete B{\"{u}}chlein
+ entstanden. Wie die \LaTeX{}-Kurzbeschreibung von Hubert Partl oder
+ der Kompaktf{\"{u}}hrer \LaTeX{} von Reinhard Wonneberger empfehlenswert
+ f{\"{u}}r alle mit schmalerem Geldbeutel oder Platzmangel im
+ B{\"{u}}cherregal ;-) Leider beschreibt es nur das alte \LaTeX{}
+ 2.09. [TK 2/1994]}
+
+@Book{kna97,
+ author = {Knappen, J{\"{o}}rg},
+ title = {Schnell ans Ziel mit \LaTeXe{}},
+ publisher = {R. Oldenbourg Verlag},
+ address = {M{\"{u}}nchen},
+ year = 1997,
+ isbn = {3-486-24199-0},
+}
+ annote = {48,00 DM
+
+ Knappe, aber {\"{u}}bersichtliche Darstellung der wichtigsten
+ \LaTeXe{}-Befehle. F{\"{u}}r \LaTeX{}-Anwender ohne Erfahrung. [TK 4/1997]}
+
+Weiterf{\"{u}}hrende Literatur {\"{u}}ber \LaTeX{}
+
+@Book{goomit96d,
+ author = {Goossens, Michel and Mittelbach, Frank and Samarin, Alexander},
+ title = {Der \LaTeX{}-Begleiter},
+ publisher = {Addison Wesley Longmann},
+ year = 1996,
+ isbn = {3-89319-646-3},
+ edition = {2. korr. Nachdruck},
+}
+ annote = {79,90 DM
+
+ {\"{U}}bersetzung des erfolgreichen englischen Buches }
+
+@Book{goomit95,
+ author = {Goossens, Michel and Mittelbach, Frank and Samarin, Alexander},
+ title = {The \LaTeX{} Companion},
+ publisher = {Addison-Wesley Publ.},
+ year = 1995,
+ isbn = {0-201-54199-8},
+ edition = {2nd},
+}
+ annote = {83,70 DM
+
+ Die langerwartete Erg{\"{a}}nzung zu Lamports "Das \LaTeX{}-Handbuch"
+ (bzw. "LaTeX - A Document Preparation System") beschreibt, wie
+ man \LaTeXe{} (und auch das "alte" \LaTeX{} 2.09) an seine
+ Bed{\"{u}}rfnisse anpassen kann, wie man "Classes" und "Packages"
+ schreibt und vieles mehr. Durch die Beschreibung vieler
+ Programme und Makropakete rund um \LaTeX{} ist es die erste Quelle,
+ wenn Fragen rund um \LaTeX{} auftauchen. [TK 4/1993]}
+
+@Book{kop97b,
+ author = {Kopka, Helmut},
+ title = {\LaTeX{} - Band 2: Erg{\"{a}}nzungen - mit einer Einf{\"{u}}hrung in METAFONT},
+ publisher = {Addison Wesley Longmann},
+ year = 1997,
+ isbn = {3-8273-1229-9},
+ edition = {2nd},
+}
+ annote = {69,90 DM
+
+ In Band 2 wird \LaTeXe{}, die neue offizielle \LaTeX{}-Version,
+ beschrieben (ist in der neuesten Auflage von Band 1
+ enthalten). Au{\"{s}}erdem werden noch Erg{\"{a}}nzungen, wie zus{\"{a}}tzliche
+ Zeichens{\"{a}}tze (AMS-Fonts, Altdeutsch, Runen, Schach, ...),
+ Einbindung von Postscript-Schriften, Musiknotensatz, Grafik,
+ PiCTeX und Metafont vorgestellt.}
+
+@Book{kop97c,
+ author = {Kopka, Helmut},
+ title = {\LaTeX{} - Band 3: Erweiterungen},
+ publisher = {Addison Wesley Longmann},
+ year = 1997,
+ isbn = {3-89319-666-8},
+ edition = {1st},
+}
+ annote = {69,90 DM
+
+ Der letzte Band der Kopkaschen Trilogie, behandelt
+ \LaTeX{}-Interna, beschreibt die Erstellung von \LaTeXe{}-Klassen und
+ -Pakete und stellt die Standard-\LaTeXe{}-Klassen und einige
+ Erg{\"{a}}nzungspakete vor. Au{\"{s}}erdem enth{\"{a}}lt es eine kurzgefa{\"{s}}te
+ Vorstellung der Programmiersprache \TeX{}, des WEB-Systems und der
+ \TeX{}-/MF-Quellen.}
+
+@Book{gra97,
+ author = {Gr{\"{a}}tzer, Georg},
+ title = {Math into \LaTeX{}},
+ publisher = {Birkh{\"{a}}user},
+ address = {Boston},
+ year = 1997,
+ isbn = {0-8176-3805-?},
+ edition = {2nd},
+}
+ annote = {58,50 USD
+
+ aktuelle Darstellung des \AMS\LaTeX{}-Pakets [TK 1/1998] }
+
+Kompaktf{\"{u}}hrer/Nachschlagewerke f{\"{u}}r \LaTeX{}
+
+@Book{hei96,
+ author = {Heilmann, Axel},
+ title = {\LaTeX{}-Vademecum, Ein Kompaktf{\"{u}}hrer f{\"{u}}r Einsteiger und Fortgeschrittene},
+ publisher = {Springer},
+ address = {Berlin, Heidelberg},
+ year = 1996,
+ isbn = {3-540-60522-3},
+}
+ annote = {38,00 DM
+
+ Kleines und praktisches Nachschlagewerk, kann und will nicht den
+ \LaTeX{}-Begleiter ersetzen, ist aber eine gute Erg{\"{a}}nzung,
+ eigenwilliges Querformat. Auch wenn dies der Untertitel
+ suggeriert, ist es nicht zum Einstieg f{\"{u}}r Anf{\"{a}}nger geeignet,
+ sondern zum Nachschlagen, nachdem man sich bereits eingearbeitet
+ hat. [TK 1/1996]}
+
+@Book{won93,
+ author = {Wonneberger, Reinhard},
+ title = {Kompaktf{\"{u}}hrer \LaTeX{}},
+ publisher = {Addison-Wesley},
+ year = 1993,
+ isbn = {3-89319-589-0},
+ edition = {3rd},
+}
+ annote = {29,80 DM
+
+ sehr gut geeignet, um einen ersten Eindruck zu bekommen}
+
+@Book{schpot97,
+ author = {Schwarz, Stefan and Potucek, Rudolf},
+ title = {Das \TeX{}ikon - Referenzhandbuch f{\"{u}}r \TeX{}, \LaTeX{} und \LaTeXe{}},
+ publisher = {Addison-Wesley},
+ address = {Bonn},
+ year = 1997,
+ isbn = {3-89319-690-0},
+}
+ annote = {69,90 DM
+
+ alphabetisch sortiertes Lexikon, das alle \TeX{}- und \LaTeX{}-Befehle
+ dokumentiert [TK 1/1997]}
+
+@Preamble{"\providecommand{\AMS}{{{\ensuremath{\mathcal{AMS}}}}}
+ \newcommand{\ams}[1]{\ifx\protect\noexpand\protect\AMS{}\fi}
+ \providecommand{\secondary}[1]{.}"}
+@Manual{ams96,
+ key = "{\protect\AMS}",
+ title = {\AMS{}-\LaTeX{} Version 1.2, User's Guide},
+ organization = "{\ams{AMS}}{\relax{}}{\relax{}}American Mathematical Society",
+ year = 1996,
+ note = {Part of the standard \LaTeXe{} distribution.
+ Usually \url{texmf/doc/latex/amslatex/amsldoc.dvi}.
+ Also available at CTAN:
+ \url{ftp://ftp.dante.de/tex-archive/macros/latex}\relax
+ \url{/required/amslatex/math/amsldoc.tex}.},
+ xurl = {ftp://ftp.dante.de/tex-archive/macros/latex/required/amslatex/math/amsldoc.tex}
+}
+
+@Preamble{"\providecommand{\BibTeX}{\textsc{Bib}\TeX{}}"}
+@Manual{pat88,
+ title = {\BibTeX{}ing},
+ author = {Oren Patashnik},
+ year = 1988,
+ note = {Usually \url{texmf/doc/bibtex/base/btxdoc.dvi}
+ Also available at CTAN:
+ \url{ftp://ftp.dante.de/tex-archive/biblio/bibtex}\relax
+ \url{/distribs/doc/btxdoc.*}.},
+}
+
+@Manual{dal99,
+ title = {Natural Science Citations and References},
+ author = {Patrick W. Daly},
+ month = 5,
+ year = 1999,
+ note = {Version 7.0.
+ Part of the standard \LaTeXe{} distribution.
+ Usually \url{texmf/doc/latex/natbib/natbib.dvi}.
+ Available from CTAN:
+ \url{ftp://ftp.dante.de/tex-archive/macros/latex}\relax
+ \url{/contrib/supported/natbib/natbib.*}.},
+ xurl = {ftp://ftp.dante.de/tex-archive/macros/latex/contrib/supported/natbib/natbib.*}
+}
+
+
+
+
+
+Volume A, The TeXbook (Reading, Massachusetts: Addison-Wesley, 1984), x+483pp.
+ISBN 0-201-13447-0
+Volume B, TeX: The Program (Reading, Massachusetts: Addison-Wesley, 1986), xviii+600pp.
+ISBN 0-201-13437-3
+Volume C, The METAFONTbook (Reading, Massachusetts: Addison-Wesley, 1986), xvi+451pp.
+ISBN 0-201-13445-4
+Volume D, METAFONT: The Program (Reading, Massachusetts: Addison-Wesley, 1986), xviii+566pp.
+ISBN 0-201-13438-1
+Volume E, Computer Modern Typefaces (Reading, Massachusetts: Addison-Wesley, 1986), xvi+588pp.
+ISBN 0-201-13446-2
+
+@preamble{"\providecommand{\metafont}{\textsf{METAFONT}}"}
+
+@Book{knu86a,
+ author = {Donald Ervin Knuth},
+ title = {The \TeX{}book},
+ series = {Computers \& Typesetting},
+ volume = {A},
+ publisher = {Addison Wesley Longman, Inc.},
+ year = 1984,
+ pages = {x+483},
+ isbn = {0-201-13447-0}
+}
+
+@Book{knu86b,
+ author = {Donald Ervin Knuth},
+ title = {\TeX{}: The Program},
+ series = {Computers \& Typesetting},
+ volume = {B},
+ publisher = {Addison Wesley Longman, Inc.},
+ year = 1986,
+ pages = {xviii+600},
+ isbn = {0-201-13437-3}
+}
+
+@Book{knu86c,
+ author = {Donald Ervin Knuth},
+ title = {The \metafont{}book},
+ series = {Computers \& Typesetting},
+ volume = {C},
+ publisher = {Addison Wesley Longman, Inc.},
+ year = 1986,
+ pages = {xvi+451},
+ isbn = {0-201-13445-4}
+}
+
+@Book{knu86d,
+ author = {Donald Ervin Knuth},
+ title = {\metafont{}: The Program},
+ series = {Computers \& Typesetting},
+ volume = {D},
+ publisher = {Addison Wesley Longman, Inc.},
+ year = 1986,
+ pages = {xviii+566},
+ isbn = {0-201-13438-1}
+}
+
+@Book{knu86e,
+ author = {Donald Ervin Knuth},
+ title = {Computer Modern Typefaces},
+ series = {Computers \& Typesetting},
+ volume = {E},
+ publisher = {Addison Wesley Longman, Inc.},
+ year = 1986,
+ pages = {xvi+588},
+ isbn = {0-201-13446-2}
+}
+
+From http://members.tripod.com/~upem/texlatex.html
+
+@Book{spi97,
+ author = {Michael Spivak},
+ title = {Joy of \TeX{}},
+ publisher = {American Mathematical Society},
+ year = 1997,
+ isbn = {0-821-82997-1},
+ month = {July},
+}
+ annote = {The Joy of \TeX{}; is the user-friendly guide to
+ AMSTeX;, a software package based on the computer
+ typesetting language \TeX{}. AMSTeX; was designed to
+ simplify typesetting of mathematical quantities,
+ equations, and displays, and to format the output
+ according to any of various preset style
+ specifications. This second edition of Joy reflects
+ the changes introduced on Version 2.0 of the AMSTeX;
+ macro package. The first two parts of the manual,
+ 'Starters' and 'Main Courses', teach the reader how
+ to typeset the kind of text and mathematics one
+ ordinarily encounters. 'Sauces and Pickles', the
+ third section, treats more exotic problems and
+ includes a 60-page dictionary of special
+ \TeX{}niques. The manual also includes descriptions of
+ conventions of mathematical typography to help the
+ novice technical typist. Appendices list handy
+ summaries of frequently used and more esoteric
+ symbols. This manual is useful for technical typists
+ as well as scientists who prepare their own
+ manuscripts. For the novice, exercises sprinkled
+ generously throughout each chapter encourage the
+ reader to sit down at a terminal and learn through
+ experimentation.}
+
+
+@Book{sawkra94,
+ author = {Stanley A. Sawyer and Steven G. Krantz},
+ title = {Text Primer for Scientists},
+ publisher = {CRC Press, Inc.},
+ year = 1994,
+ key = 0849371597,
+ month = {November}
+}
+
+@Book{hoe97,
+ author = {Alan Hoenig},
+ title = {\TeX{} Unbound: \LaTeX{} and \TeX{} Strategies for Fonts, Graphics, and More},
+ publisher = {Oxford University Press, Incorporated},
+ year = 1997,
+ isbn = {0-195-09686-X},
+ month = {December},
+}
+ annote = {LaTeX is the premiere software of choice for writers
+ who need to prepare technical information in a clear
+ and elegant manner. This unique book tells how to use
+ \LaTeX{} or \TeX{} with files prepared with everyday office
+ software such as Lotus or Wordperfect and how to set
+ up software links with Acrobat and hyper-text using
+ \LaTeX{} for Internet communication. Illustrated. 640
+ pp.}
+
+@Book{sal95,
+ author = {David Salomon},
+ title = {The Advanced \TeX{}book},
+ publisher = {Springer-Verlag New York, Incorporated},
+ year = 1995,
+ isbn = {0-387-94556-3},
+ month = {August},
+}
+ annote = {A complete course in \TeX{} that will be suitable for
+ users of \TeX{} who want to advance beyond the basics.
+ The initial chapters introduce the essential workings
+ of \TeX{} and the later chapters cover a wide range of
+ advanced topics such as macros, conditionals, tokens,
+ leaders, file I/O, the line- and page-break
+ algorithms, and output routines.}
+
+
+@Book{goomit93,
+ author = {Michel Goossens and Frank Mittelbach and Alexander Samarin},
+ title = {The \LaTeX{} Companion},
+ publisher = {Addison Wesley Longman, Inc.},
+ year = 1993,
+ isbn = {0-201-54199-8},
+}
+ annote = {A companion to Leslie Lamport's original user's guide to \LaTeX{}. }
+
+
+
+@Book{goomit96g,
+ author = {Michel Goossens and Frank Mittelbach and Sebastian Rahtz},
+ title = {The \LaTeX{} Graphics Companion},
+ publisher = {Addison Wesley Longman, Inc.},
+ year = 1996,
+ isbn = {0-201-85469-4},
+}
+ annote = {Complementing The \LaTeX{} Companion, this new graphics
+ companion book addresses one of the most common needs
+ among users of the \LaTeX{} typesetting system: the
+ incorporation of graphics into text. In addition to
+ packages for general drawing, the book also describes
+ more specific tools for mathematicians, physicists,
+ chemists, engineers, and people interested in
+ business graphics, games and music typesetting.}
+
+ISBN: 0-201-43311-7
+ Title: The \LaTeX{} Web Companion
+ Author: Michel Goossens,Sebastian Rahtz
+ Publisher: Addison Wesley Longman, Inc.
+ Date Published: February 1999
+ URL: The \LaTeX{} Web Companion
+ Format: Trade Paper
+
+
+
+
+ ISBN: 0-201-42777-X
+ Title: Guide to \LaTeXe{}: Document Preparation for Beginners and Advanced Users
+ Author: Helmut Kopka, Patrick W. Daly
+ Publisher: Addison Wesley Longman, Inc.
+ Date Published: June 1995
+ URL: Guide to \LaTeXe{}: Document Preparation for Beginners & Advanced Users
+ Format: Trade Paper
+
+ Kopka and Daly provide a highly accessible tutorial
+ for users new to \LaTeX{}. Fully revised to cover the
+ latest version of \LaTeX{}, this second edition presents
+ a thorough explanation of the internals of the
+ system. \LaTeX{} commands not available within the
+ earlier version of \LaTeX{} are highlighted, making the
+ book useful for users still working with the earlier
+ release.
+
+
+
+
+ ISBN: 0-817-63805-9
+ Title: Math into \LaTeX{}: An Introduction to \LaTeX{} and \AMS\LaTeX{}
+ Author: George Gratzer
+ Publisher: Birkhauser Boston
+ Date Published: November 1995
+ URL: Math into \LaTeX{}: An Introduction to \LaTeX{} & \AMS\LaTeX{}
+ Format: Trade Paper
+
+
+
+
+ ISBN: 0-131-20973-6
+ Title: \LaTeX{} Notes; Practical Tips for Preparing Technical Documents
+ Author: J. Kenneth Shultis,Designed by Kenneth Shultis
+ Publisher: Prentice Hall
+ Date Published: February 1994
+ URL: \LaTeX{} Notes: Practical Tips for Preparing Technical Documents, Version 1.4
+ Format: Trade Paper
+
+ A guide for engineers and scientists who are
+ currently using \LaTeX{}, this volume provides recipes
+ and tricks--including shortcuts and extensions not
+ found elsewhere--for the most useful operation of
+ \LaTeX{} for preparing technical documents. Covers the
+ full range of \LaTeX{} topics--fonts, text formatting
+ and lists, formatting pages, math and equations,
+ tables, graphics, large documents, useful styles,
+ macros, and miscellaneous tricks.
+
+
+
+
+ ISBN: 0-136-05908-2
+ Title: \LaTeX{} for Everyone: A Reference Guide and Tutorial for Typesetting Documents Using a Computer
+ Author: Jane Hahn
+ Publisher: Prentice Hall
+ Date Published: February 1993
+ URL: \LaTeX{} for Everyone: A Reference Guide & Tutorial for Typesetting Documents Using a Computer
+ Format: Trade Paper
+
+ Full of easy-to-understand examples, this is a
+ complete reference guide and tutorial for typesetting
+ documents using \LaTeX{} software. It covers matters of
+ style; typesetting mathematics; customization;
+ preparing large documents; and more.
+
+
+
+
+ ISBN: 0-471-93471-2
+ Title: \LaTeX{} Line by Line; Tips and Techniques for Document Processing
+ Author: Antoni Diller
+ Publisher: John Wiley & Sons, Incorporated
+ Date Published: January 1993
+ URL: \LaTeX{} Line by Line: Tips & Techniques for Document Processing
+ Format: Trade Paper
+
+
+
+
+ ISBN: 0-898-71383-8
+ Title: Learning \LaTeX{}
+ Author: David F. Griffiths,Desmond J. Higham
+ Publisher: Soc Indus-
+ Date Published: December 1996
+ URL: Learning \LaTeX{}
+ Format: Trade Paper
+
+ A short book that covers the essentials without
+ getting lost in details.
+
+
+\end{filecontents}
+\begin{filecontents}{texexample.sty}
+%% Environment for LaTeX2e examples
+\usepackage{moreverb}
+\newcounter{texexample}
+\newdimen\texexamplerightwidth
+\newdimen\texexampleleftwidth
+\def\texexamplerightportion{.52}
+\global\leftmargin\z@
+\let\texexamplesize\footnotesize
+\newenvironment{texexample}
+{%
+ \texexamplerightwidth=\texexamplerightportion\hsize
+ \texexampleleftwidth=.96\hsize
+ \advance\texexampleleftwidth-\leftmargin
+ \advance\texexampleleftwidth-\texexamplerightwidth
+ \stepcounter{texexample}\edef\tmpfile{\jobname-tmp\thetexexample.tex}%
+ \bgroup\verbatimwrite{\tmpfile}}
+{\endverbatimwrite\egroup
+ \begin{flushleft}
+ \hrule height0pt
+ \begin{minipage}[t]{\texexampleleftwidth}
+ \vskip\z@\texexamplesize
+ \verbatimtabinput{\tmpfile}%
+ \end{minipage}%
+ \hglue.04\hsize
+ \begin{minipage}[t]{\texexamplerightwidth}
+ \vskip\z@\small\sloppy
+ \hfuzz=2cm%
+ %%\raggedright
+ %%\hrule\vskip2pt
+ \input{\tmpfile}%
+ %%\vskip2pt\hrule
+ \vskip\z@
+ \end{minipage}
+ \end{flushleft}
+ \par\ignorespacesafterend\noindent
+}
+\end{filecontents}
+\begin{filecontents}{tab-struct.tex}
+ \begin{center}
+ \texexamplesize
+ \begin{minipage}[t]{.44\hsize}
+ \obeylines
+ \meta{secondary file contents}
+ |\documentclass{cc}|
+ ~
+ \meta{personal macros and packages}
+ ~
+ |%\ccpublish{}{}{}{}|
+ |\contact{|\meta{contact email address}|}|
+ |\received{|\meta{received date}|}|
+ |\title{|\meta{title}|}|
+ %%|%\titlehead{|\meta{running head title}|}|
+ |\author{|\meta{author list}|}|
+ %%|%\authorhead{|\meta{running head authors}|}|
+ %%|%\authorlist{|\meta{title author list}|}|
+ ~
+ |\begin{abstract}|
+ \quad\meta{abstract}
+ |\end{abstract}|
+ ~
+ |\begin{keywords}|
+ \quad\meta{keywords}
+ |\end{keywords}|
+ ~
+ |\begin{subject}|
+ \quad\meta{subject classification}
+ |\end{subject}|
+ ~
+ |\begin{document}|
+ ~
+ \meta{article text}
+ ~
+ |\begin{acknowledge}|
+ \quad\meta{acknowledgments}
+ |\end{acknowledge}|
+ ~
+ |\bibliography{|\meta{bibliography files}|}|
+ ~
+ |\end{document}|
+ \end{minipage}\quad\vrule\quad
+ \begin{minipage}[t]{.5\hsize}
+\begin{verbatim}
+\author{
+ First A. Author\\
+ Department of Mathematics\\
+ University of Somewhere\\
+ Somewhere, USA 99999\\
+ \email{faa@ford.somewhere.edu}\\
+ \homepage
+ {http://www.somewhere.edu/~faa/}
+ \currentaddress
+ Somewhere Sunny\\
+ SAMOA\\
+ \email{faa@sunny.samoa.gov}
+ \and
+ Second B. Author\\
+ Faculty of Computer Science\\
+ Anyplace College\\
+ Anyplace, CANADA Z9Z 1X1\\
+ \email{author@pearson.anyplace.edu}
+ \otheraddress
+ Private address of
+ \textsc{Second B. Author}:\\
+ Green Road\\
+ Notown, MOON\\
+ \and
+ Third C. van~Author\\
+ Electrical Engineering Division \\
+ Institute of Nowhere\\
+ Nowhere, ANTARCTICA\\
+ \email{tcauthor@penguin.nowhere.ant}
+ }
+\end{verbatim}
+ \end{minipage}
+ \end{center}
+\end{filecontents}
+\begin{filecontents}{tab-thmenv.tex}
+ \begin{center}
+ \texexamplesize
+ {\catcode`\|=12\gdef\vvv{|}}
+ \begin{tabular}[t]{ll\vvv}
+ environment & title \\\hline
+ %%|open| & Open Question \\
+ |answer| & Answer \\
+ |assumption| & Assumption \\
+ |claim| & Claim \\
+ |conjecture| & Conjecture \\
+ |convention| & Convention \\
+ |corollary| & Corollary \\
+ %%|counterexample| & Counterexample \\
+ |definition| & Definition \\
+ |example| & Example \\
+ |exercise| & Exercise \\
+ |fact| & Fact \\
+ |hypothesis| & Hypothesis \\
+ |lemma| & Lemma \\
+ |notation| & Notation \\
+ \end{tabular}\begin{tabular}[t]{ll} environment & title \\\hline
+ |note| & Note \\
+ |observation| & Observation \\
+ |openquestion| & Open Question \\
+ |problem| & Problem \\
+ |proposition| & Proposition \\
+ |question| & Question \\
+ |remark| & Remark \\
+ |result| & Result \\
+ |theorem| & Theorem \\
+ |thesis| & Thesis \\
+ |warning| & Warning \\*[2mm]
+ |namedtheorem| & \meta{user specified}
+ \end{tabular}
+ \end{center}
+\end{filecontents}
+\begin{filecontents}{tab-algo.tex}
+ \begin{center}
+ \begin{texexample}
+\begin{algorithm}{rs}[Repeated
+ squaring]
+\item An element
+ $x \in \mathbb{Z}_{m}$ and
+ an exponent $e \in \{ 2,
+ \dots, \varphi(m)\}$.
+\item $x^{e} \in \mathbb{Z}_{m}$.
+ \begin{block}
+ \item
+ Compute the binary
+ representation $(e_{n},
+ \dots, e_{0})$ of $e$.
+ \item
+ \algolabel{B}
+ $z \gets x$.
+ \item
+ \algolabel{D}
+ \begin{forblock}
+ {$i = n-1, \dots, 0$}
+ \algolabel{C}
+ \item $z \gets z^{2}$.
+ \begin{ifblock}
+ {$e_{i}=1$}
+ \item $z \gets z * x$.
+ \end{ifblock}
+ \end{forblock}
+ \item
+ \algolabel{G}
+ \RETURN $z$.
+ \end{block}
+\end{algorithm}
+\hrule\medskip
+B: \stepref{rs}{B}\\
+C: \ref{rs-C}, \whole\ref{rs-C}\\
+D: \short\ref{rs-D},
+ \whole\ref{rs-D}
+\end{texexample}
+ \end{center}
+\end{filecontents}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %*% This is the beginning of the documentation!
+\errorcontextlines9999
+\documentclass[noccpublish%
+,multilingual,english,%
+ %*% Insert options here:
+ %,ccite%
+ %,noams%
+]{cc}
+
+% do not use cccite but get it's file information!
+{\let\ccorgProvidesPackage\ProvidesPackage
+ \def\ProvidesPackage#1[#2]{\ccorgProvidesPackage{#1}[#2]\endinput}%
+ \usepackage{cccite}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Personal definitions and \usepackage commands
+
+\dimen254\marginparwidth
+\let\ccorgmaketitle\maketitle
+\usepackage{doc}
+\normalmarginpar
+\let\maketitle\ccorgmaketitle
+\marginparwidth\dimen254
+\providecommand{\SortIndex}[2]{}
+
+\newcommand{\lclass}[1]{\textsf{#1}}
+\newcommand{\Lclass}[1]{\lclass{#1}%
+ \SortIndex{#1}{\protect\lclass{#1} (class)\encapchar usage}%
+ \index{classes:\levelchar{\protect\ttfamily#1}\encapchar usage}}
+\newcommand{\lpackage}[1]{\textsf{#1}}
+\newcommand{\Lpackage}[1]{\lpackage{#1}%
+ \SortIndex{#1}{\protect\lpackage{#1} (package)\encapchar usage}%
+ \index{packages:\levelchar{\protect\ttfamily#1}\encapchar usage}}
+\newcommand{\lclo}[1]{\textsf{#1}}
+\newcommand{\Lclo}[1]{\lclo{#1}%
+ \SortIndex{#1}{\protect\lclo{#1} (option)\encapchar usage}%
+ \index{options:\levelchar{\protect\ttfamily#1}\encapchar usage}}
+\newcommand{\lenv}[1]{\texttt{#1}}
+\newcommand{\Lenv}[1]{\lenv{#1}%
+ \SortIndex{#1}{\protect\lenv{#1} (environment)\encapchar usage}%
+ \index{environments:\levelchar{\protect\ttfamily#1}\encapchar usage}}
+\newcommand{\lfile}[1]{\texttt{#1}}
+\newcommand{\file}[1]{\lfile{#1}%
+ \SortIndex{#1}{\protect\lfile{#1} (file)\encapchar usage}%
+ \index{files:\levelchar{\protect\ttfamily#1}\encapchar usage}}
+
+\newcommand{\ccLINK}{%
+ \url{http://link.springer.de/link/service/journals/00037/}%
+ \begingroup\urlstyle{tt}\Url}
+\newcommand{\cchomepage}{\url{http://www-math.upb.de/~aggathen/cc/}%
+ \begingroup\urlstyle{tt}\Url}
+\newcommand{\ps}{PostScript\texttrademark}
+\providecommand{\texttrademark}{}
+\newcommand{\AMS}{%
+ \ensuremath{\mathcal{A}}%
+ \kern-.25em
+ \lower.5ex\hbox{\ensuremath{\mathcal{M}}}%
+ \kern-.15em
+ \ensuremath{\mathcal{S}}%
+ }
+
+\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}
+\newcommand{\textcal}[1]{\ensuremath{\mathcal{#1}}\/}
+
+\usepackage{texexample}
+
+\providecommand{\mathbb}[1]{\mathbf{#1}}% should be math blackboard bold ...
+
+\makeatletter
+\let\@listi\@listiv
+\let\@listI\@listi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %*% optional packages
+% \usepackage{multicol}
+% \usepackage{hyperref}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% doc.sty settings
+
+\newcommand{\VRULE}{|}
+\MakeShortVerb{\|}
+
+\settowidth{\MacroIndent}{\rmfamily\scriptsize M000\ }
+\def\MacroFont{\fontencoding\encodingdefault
+ \fontfamily\ttdefault
+ \fontseries\mddefault
+ \fontshape\updefault
+ \footnotesize}
+\let\AltMacroFont\MacroFont
+\expandafter\newif\csname ifbst\endcsname \bsttrue
+\expandafter\newif\csname ifoldbst\endcsname \oldbsttrue
+
+\makeatletter
+\def\CodelinePrefix#1{%
+ \gdef\fileprefix{#1}%
+ \setcounter{CodelineNo}{0}%
+ \renewcommand{\theCodelineNo}{\rmfamily\scriptsize
+ #1\arabic{CodelineNo}}%
+ \def\special@index##1{\if@filesw
+ \immediate\write\@indexfile
+ {\string\indexentry{##1}%
+ {#1\number\c@CodelineNo}}\fi}%
+ }
+% \let\CodelinePrefix\@gobble
+\makeatother
+
+\DoNotIndex{\',\.,\@M,\@@input,\@Alph,\@alph,\@addtoreset,\@arabic}
+\DoNotIndex{\@badmath,\@centercr,\@cite}
+\DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue}
+\DoNotIndex{\@input,\@ixpt,\@m,\@minus,\@mkboth}
+\DoNotIndex{\@ne,\@nil,\@nomath,\@plus,\roman,\@set@topoint}
+\DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb}
+\DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt}
+\DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt}
+\DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace}
+\DoNotIndex{\advance,\ast,\begin,\begingroup,\bfseries,\bgroup,\box}
+\DoNotIndex{\bullet}
+\DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption}
+\DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass}
+\DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist}
+\DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup}
+\DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter}
+\DoNotIndex{\fbox,\Finale}
+\DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef}
+\DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule}
+\DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\fi,\ifcase,\or,\fi}
+\DoNotIndex{\ifhmode,\fi,\ifvmode,\fi,\ifnum,\fi,\iftrue,\fi,\ifx,\fi}
+\DoNotIndex{\input}
+\DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark}
+\DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright}
+\DoNotIndex{\month,\newcommand,\newcounter,\newenvironment}
+\DoNotIndex{\NeedsTeXFormat,\newdimen}
+\DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number}
+\DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@}
+\DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip}
+\DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions}
+\DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright}
+\DoNotIndex{\refstepcounter,\relax,\renewcommand}
+\DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily}
+\DoNotIndex{\secdef,\selectfont,\setbox,\setcounter,\setlength}
+\DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space}
+\DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase}
+\DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt}
+\DoNotIndex{\viipt,\vipt,\vskip,\vspace}
+\DoNotIndex{\wd,\xiipt,\year,\z@}
+
+\DoNotIndex{\ ,\space}
+\DoNotIndex{\",\$,\&,\,,\/,\[,\],\{,\}}
+\DoNotIndex{\@@eqncr,\@auxout,\@bsphack}
+\DoNotIndex{\@centering,\@clsextension,\@clubpenalty}
+\DoNotIndex{\@currentlabel,\@currenvir,\@currext}
+\DoNotIndex{\@donoparitem}
+\DoNotIndex{\@eqcnt,\@eqncr,\@eqnnum,\@eqnsel,\@eqnswfalse,\@eqnswtrue}
+\DoNotIndex{\@esqhack,\@evenfoot,\@evenhead,\@for}
+\DoNotIndex{\@oddhead,\@oddfoot}
+\DoNotIndex{\@firstoftwo,\@fnsymbol,\@height}
+\DoNotIndex{\@ifempty,\@ifnotempty,\@ifstar,\@ifundefined}
+\DoNotIndex{\@ifclassloaded,\@ifpackageloaded}
+\DoNotIndex{\@inlabelfalse,\@inlabeltrue,\@item,\@itemlabel,\@itempenalty}
+\DoNotIndex{\@labels,\@listctr}
+\DoNotIndex{\@makefnmark,\@makefntext,\@maketitle,\@minipagefalse}
+\DoNotIndex{\@nbitem,\@newlistfalse,\@nobreakfalse,\@nocnterr}
+\DoNotIndex{\@nocounterr,\@noitemargfalse,\@noitemarg}
+\DoNotIndex{\@onlypreamble,\@opargbegintheorem}
+\DoNotIndex{\@openbib@code,\@parboxrestore,\@ptsize,\@roman,\@seccntformat}
+\DoNotIndex{\@secondoftwo,\@sect,\@setfontsize,\@ssect,\@startsection}
+\DoNotIndex{\@tempa,\@tempb,\@tempc}
+\DoNotIndex{\@temptokena,\@textsuperscript,\@thanks,\@thefnmark,\@thm}
+\DoNotIndex{\@topnum,\@topsep,\@totalleftmargin,\@undefined}
+\DoNotIndex{\@width,\@xifempty}
+\DoNotIndex{\and,\addtocounter,\appendix,\arabic,\arraycolsep}
+\DoNotIndex{\AtBeginDocument,\AtEndDocument}
+\DoNotIndex{\baselineskip,\bf,\bfseries,\bibcite,\bibitem,\bigskip,\bigstar}
+\DoNotIndex{\bibliography,\bibliographystyle,\bibname,\bigcirc,\blacksquare}
+\DoNotIndex{\c@enumi,\c@enumii,\c@enumiii,\c@enumiv,\c@equation}
+\DoNotIndex{\c@footnote,\c@namedth@@r@m,\c@page,\c@section}
+\DoNotIndex{\centering,\chapter,\CheckCommand,\circ}
+\DoNotIndex{\ClassError,\ClassWarning,\ClassWarningNoLine}
+\DoNotIndex{\clearpage,\clubpenalty,\copyright,\count,\count@,\csname}
+\DoNotIndex{\CurrentOption}
+\DoNotIndex{\DeclareTextFontCommand,\dimen@}
+\DoNotIndex{\displaystyle,\displaywidth,\displaywidowpenalty}
+\DoNotIndex{\do,\documentclass}
+\DoNotIndex{\edef,\endcsname,\endminipage,\endsplit}
+\DoNotIndex{\endnamedth@@r@m,\endnamedtheorem,\endpr@@f,\endproof}
+\DoNotIndex{\enskip,\eqno,\eqnarray,\errhelp,\errmessage}
+\DoNotIndex{\etalchar,\evensidemargin}
+\DoNotIndex{\fboxsep,\finalhyphendemerits}
+\DoNotIndex{\footnote,\footnoterule,\footnotesize}
+\DoNotIndex{\gobble@nil}
+\DoNotIndex{\hb@xt@,\headheight,\ht}
+\DoNotIndex{\if,\fi,\if@eqnsw,\fi,\if@filesw,\fi,\if@inlabel,\fi}
+\DoNotIndex{\if@newlist,\fi,\if@nmbrlist,\fi,\if@nobreak,\fi}
+\DoNotIndex{\if@noitemarg,\fi,\if@noparitem,\fi}
+\DoNotIndex{\iffalse,\fi,\ifinner,\fi,\ifmmode,\fi}
+\DoNotIndex{\csname iftagsleft@\endcsname}
+\DoNotIndex{\ifodd,\fi,\ifvoid,\fi}
+\DoNotIndex{\ignorespaces,\ignorespacesafterend,\immediate,\include}
+\DoNotIndex{\indent,\inputlineno,\item,\itemsep,\itemindent,\itshape}
+\DoNotIndex{\label,\labelenumi,\labelenumii,\labelenumiii,\labelenumiv}
+\DoNotIndex{\labelitemi,\labelsep,\labelwidth,\Large,\large,\lastbox,\lastskip}
+\DoNotIndex{\leftmargin,\linewidth,\LoadClass,\lozenge}
+\DoNotIndex{\makelabel,\MakeUppercase,\marginparsep,\marginparwidth,\mbox}
+\DoNotIndex{\medskip,\medskipamount,\message,\MessageBreak,\minipage}
+\DoNotIndex{\newblock,\newbox,\newcount,\newif,\newskip}
+\DoNotIndex{\newtheorem,\newtoks,\next}
+\DoNotIndex{\noalign,\nocite,\noexpand,\nointerlineskip,\nonumber}
+\DoNotIndex{\normalfont,\normalsize}
+\DoNotIndex{\oddsidemargin,\offinterlineskip}
+\DoNotIndex{\p@enumiv,\PackageError,\PackageWarning,\PackageWarningNoLine}
+\DoNotIndex{\pagebreak,\pageref,\paperwidth,\paperheight,\paragraph}
+\DoNotIndex{\parindent,\parsep,\parshape,\parskip,\partopsep}
+\DoNotIndex{\PassOptionsToClass,\PassOptionsToPackage}
+\DoNotIndex{\prevdepth,\ProvidesPackage,\protected@edef,\qquad}
+\DoNotIndex{\ref,\refname,\removelastskip,\renewenvironment}
+\DoNotIndex{\RequirePackage,\reset@font,\rule}
+\DoNotIndex{\sbox,\sc,\scriptsize,\scshape,\section}
+\DoNotIndex{\show,\showbox,\showoutput}
+\DoNotIndex{\skip@,\sl,\small,\smallskip,\square}
+\DoNotIndex{\stepcounter,\string,\strut}
+\DoNotIndex{\subparagraph,\subsection,\subsubsection}
+\DoNotIndex{\tabskip,\tag,\text,\textbf,\textheight}
+\DoNotIndex{\textit,\textsc,\textsf,\textwidth}
+\DoNotIndex{\thanks,\theenumi,\theenumii,\theenumiii,\theenumiv,\theequation}
+\DoNotIndex{\thefootnote,\thenamedth@@r@m}
+\DoNotIndex{\theorembodyfont,\theorem@bodyfont,\theorem@headerfont}
+\DoNotIndex{\theoremstyle,\theorem@style}
+\DoNotIndex{\thepage,\thispagestyle,\today,\toks@}
+\DoNotIndex{\topmargin,\topsep,\topskip}
+\DoNotIndex{\unhbox,\unpenalty,\unskip,\upshape}
+\DoNotIndex{\Url,\urlstyle,\value,\vbox,\vphantom,\vss}
+\DoNotIndex{\widowpenalty,\write,\xdef,\xpt}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\errorcontextlines999
+ %*% To include the detailed explanation of the coding, comment out
+ %*% the next line
+\OnlyDescription
+ %*% If you also want the bibliography style file cc2.bst in the
+ %*% documentation, comment out the next line
+\bstfalse
+ %*% If you also want the old bibliography style file cc.bst in the
+ %*% documentation, comment out the next line
+\oldbstfalse
+
+ %*% To produce a command index: add the following line for one run,
+ %*% then run makeindex -s gind.ist cc
+ %*% and reprocess, with or without this line (much faster without)
+\EnableCrossrefs
+\CodelineIndex %Must stay if not \OnlyDescription
+
+
+ %*% If not \OnlyDescription:
+ %*% To produce a change history: add the following line for one run,
+ %*% then run makeindex -s gglo.ist -o cc.gls cc.glo
+ %*% and reprocess, with or without this line (faster without)
+\RecordChanges
+
+\DisableCrossrefs %May stay; zapped by \EnableCrossrefs
+\CodelineNumbered %May stay
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% We are going to suppress some warnings:
+\newcommand{\suppressnextwarning}{%
+ \global\let\ccorgClassWarning\ClassWarning
+ \gdef\ClassWarning##1##2{\global\let\ClassWarning\ccorgClassWarning}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% paper data ...
+
+% \received{29 September 1999\\
+% Revised 16 February 2000.\\
+% Revised \today}
+
+\date{6 March 2000/29 August 2005/\today}
+\contact{nuesken@bit.uni-bonn.de}% or cc@upb.de
+
+\title{Preparing articles for\\\cc{}}%% ??? final versions ???
+\subtitle{User's manual}
+
+\author{%
+ Michael N{\"{u}}sken\\
+ b-it (Bonn-Aachen International Center for Information Technology)\\
+ Görresstr. 13\\
+ 53113 Bonn,
+ Germany\\
+ \email{nuesken@bit.uni-bonn.de}\\
+ \homepage{http://www.math.upb.de/~nuesken/}
+ }
+
+\begin{abstract}
+ This text describes the \LaTeXe{} document class \Lclass{cc}, which
+ is recommended for typesetting articles accepted for \cc{}.
+\end{abstract}
+\begin{keywords}
+ \LaTeXe{} document class, computational complexity.
+\end{keywords}
+\suppressnextwarning\nosubject
+
+%%% end of paper data.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\let\ccorgbibpunct\bibpunct% allow usage of \bibpunct everywhere
+\suppressnextwarning
+\begin{document}
+\let\bibpunct\ccorgbibpunct% allow usage of \bibpunct everywhere
+
+\let\ccorgPrintDescribeMacro\PrintDescribeMacro
+\let\ccorgPrintDescribeEnv\PrintDescribeEnv
+\renewcommand{\PrintDescribeMacro}[1]{}
+\renewcommand{\PrintDescribeEnv}[1]{}
+
+
+\long\def\zzz#1{#1\endinput}\ifx\StopEventually\zzz\relax%
+\csname @ifundefined\endcsname{multicols}
+{{\scriptsize\tableofcontents}}
+{\begin{multicols}{2}
+ \scriptsize
+ \tableofcontents
+ \end{multicols}
+ \global\let\tableofcontents\relax
+}
+\else%
+\footnotetext[0]{This version includes the source code. The table of
+ contents is on the last page.}
+\fi%
+
+
+\section{Submission}
+\label{sec:submission}
+
+
+Submission of a manuscript implies
+\begin{itemize}
+\item that the work described has not been published before except
+ possibly in conference proceedings; if the latter is the case, it
+ must be clearly acknowledged in the submission and a clearly marked
+ copy of the proceedings version should be sent as well (possibly by
+ separate mail);
+\item that it is not under consideration for publication elsewhere;
+\item that its eventual publication has been approved by all
+ coauthors;
+\item that, if and when the manuscript is accepted for publication,
+ the authors agree to automatically transfer the copyright to the
+ publisher; and
+\item that the manuscript will not be published elsewhere in any
+ language without the consent of the copyright holder.
+\end{itemize}
+Manuscripts must be in English.
+%%
+Authors should send a \ps{} file plus a short cover email, giving the
+contact author's name and address, either to the Editor-in-Chief or to
+one of the Editors. Submissions can also be sent by ordinary mail to
+the Editor-in-Chief.
+\begin{quotation}\obeylines%
+ Joachim von zur Gathen
+ b-it
+ Görresstr. 13
+ D-53113 Bonn
+ \textsc{Germany}
+ Email: \email{gathen@bit.uni-bonn.de}
+\end{quotation}
+Information about \cc{} can be found at the journal's homepage
+\cchomepage{}. There you also find a pointer to the publisher's page
+for \cc{}: \ccLINK{}, which contains the current editorial board,
+information about subscription and prices, and more.
+
+The following instructions only apply to final versions of
+\emph{accepted} manu\-scripts for \cc{}. For a submission, you may
+follow these instructions or use your own setup and submit your
+article as a \ps{} file or a typeset manuscript.
+
+\cc{} expects authors of articles accepted for publication to submit
+camera-ready copy as a \LaTeXe{} source file. If that cannot be
+provided, \cc{} will typeset the article. The editorial decision to
+accept or reject a manuscript is independent of the technology
+(computer or typewriter) used to prepare it.
+
+
+
+
+\section{Submission of the final version}
+\label{sec:camera}
+
+Camera-ready copy can be produced with \LaTeXe{} using the document
+class \Lclass{cc} which is described below. All necessary files can
+be obtained in the WWW, see \cchomepage{} for the necessary files and
+installation instructions. The older \LaTeX{} style file
+\file{cc.sty} should not be used anymore. There is no corresponding
+plain\TeX{} style file.
+
+\subsection{Combining several files into one}
+
+When your article is typed, it might be distributed over several
+files. But the \LaTeXe{} source file that you submit must consist of
+exactly \emph{one} file. You may, however, use the \LaTeXe{}
+environments \SpecialEnvIndex{filecontents}\Lenv{filecontents} and
+\SpecialEnvIndex{filecontents*}\Lenv{filecontents*} to incorporate the
+contents of other \LaTeX{} or ASCII(!) files, respectively, into the
+main \LaTeXe{} source file. These two environments can only be used
+\emph{before} the |\documentclass| command. For example, \ps{} files
+can be handled this way. (Note: it seems to be a feature that there
+must be a line break just after the environment's argument, in
+particular, a comment can only start on the following line.)
+
+\begin{texexamplesize}
+\begin{verbatim}
+\begin{filecontents}{section1.tex}
+ \section{First section}
+ ... \cite{Eucleides} wrote ...
+\end{filecontents}
+\begin{filecontents*}{picture.ps}
+%!PS-Adobe-2.0 EPSF-2.0
+...
+\end{filecontents*}
+\begin{filecontents*}{myrefs.bib}
+@book{Eucleides,
+author = {Eucleides},
+title = {Elements},
+year = {about 300 BC},
+}
+\end{filecontents*}
+\begin{filecontents}{main.bbl}
+\begin{thebibliography}{1}
+
+\bibitem[{Eucleides(about 300 BC)}]{Eucleides}
+\textsc{Eucleides} (about 300 BC).
+\newblock \emph{Elements}.
+
+\end{thebibliography}
+\end{filecontents}
+
+\documentclass{cc}
+\usepackage{graphics}
+% ...
+\begin{document}
+\includegraphics{picture.ps}
+\input{section1}
+\bibliography{journals,myrefs}
+\end{document}
+\end{verbatim}
+\end{texexamplesize}
+
+
+\subsection{Testing your final file}
+
+Once your source file is prepared like this, send it via email to
+\email{cctest@upb.de}. It will then automatically be processed in a
+defined setup: |latex|, |bibtex|, |latex|, |latex|, |dvips| are
+executed unless an error occurs. (Of course, |latex| calls
+\LaTeXe{}.) The log files and the resulting \ps{} file will be sent
+back to you. (This usually takes only a couple of minutes.) Verify
+whether everything is ok. If so, submit your \LaTeX{} file as the
+final version to \email{cc@upb.de}. Mail sent to
+\email{cctest@upb.de} is not read by anyone; only the software
+described above is automatically executed.
+
+
+
+\section{Using the document class \Lclass{cc}}
+\label{sec:usage}
+
+The freeware document class \Lclass{cc} is intended for writing
+articles for \cc{}. But you may, of course, also use this class for
+your other work. For this purpose, several features of this class can
+be turned on or off. (Using \Lclo{noccpublish} turns off the special
+requirements for \cc. Furthermore, this document class can also be
+used as a package if desired. Try |\usepackage{cc-cls}|. Thus you
+can, for example, combine it with the \LaTeXe{} document class
+\Lclass{book}.)
+
+Before giving any description we would like to stress a major
+difference from standard \LaTeXe{}: References and citations are, by
+default, more informative. We recommend this style. See below for
+details. (The new features can be turned off by options to
+|\documentclass|, see p.~\pageref{macro:documentclass}:
+\Lclo{noprefixes}, and \Lclo{cccite} or \Lclo{nonatbib},
+respectively.)
+
+After the optional \meta{secondary file contents}, the standard
+structure of a \cc{} article starts with
+\SpecialUsageIndex{\documentclass}|\documentclass{cc}| and continues
+with optional personal declarations, information concerning author,
+title and content, and finally the article text including
+acknowledgments and references. The overall structure of a typical
+\LaTeXe{} file is shown in \ref{tab:structure}. On \cc{}'s homepage
+you can also find a template file \file{cctemplate.tex} reflecting
+this.
+\begin{table}[tb!]
+ \input{tab-struct.tex}
+ \caption{Typical structure of the \LaTeXe{} source and an example of
+ an \texttt{\string\author} declaration}
+ \label{tab:structure}
+\end{table}
+
+Most \meta{personal macros and packages} can be freely used. If your
+file is processed successfully when sent to \email{cctest@upb.de},
+then your macros and the packages you used should be ok.
+
+\SpecialUsageIndex{\contact}The \meta{contact email address} is the
+email address of the contact author. It is required for \cc{} to
+facilitate communication between the publisher and the authors.
+\SpecialUsageIndex{\received}The author received a message
+acknowledging receipt of the manuscript, with the \meta{received
+ date}. \SpecialUsageIndex{\title}The \meta{title} should be broken
+into balanced lines by |\\| if necessary.
+\SpecialUsageIndex{\author}The \meta{author list} contains the names
+and addresses of the authors separated by
+\SpecialUsageIndex{\and}|\and|, each address consisting of a line with
+full author name and some address lines separated by |\\|. There
+should be no font or size changing commands. If an address line is
+very long and not nicely broken, |\newline| forces a break. Note the
+use of the tilde (|~|) in the name of the last author. It guarantees
+that |van~Author| is considered as her last name. Email and home page
+can be given as last line(s) of an address using the commands
+\SpecialUsageIndex{\email}|\email{|\meta{email-address}|}| and
+\SpecialUsageIndex{\homepage}|\homepage{|\meta{www-address}|}|. To
+give a different current address, use
+\SpecialUsageIndex{\currentaddress}|\currentaddress| to separate the
+lines of the latter from the standard address. It produces a new
+address block en\-titled
+|Current address of \textsc{|\meta{present author name}|}:\\| . %
+The command \SpecialUsageIndex{\otheraddress}|\otheraddress| can be
+used to specify another address block for the present author without
+such a heading. An \meta{abstract}, \meta{keywords} and a
+\meta{subject classification} are required for articles in \cc{}. The
+\SpecialEnvIndex{abstract}\meta{abstract} should summarize, in less
+than 150 words, the context, content and conclusions of the paper. It
+should not contain any references or citations. (If you insist on
+them, you must use |\Abstract{|\meta{abstract}|}| instead of the
+\Lenv{abstract} environment.) List four to six
+\SpecialEnvIndex{keywords}\meta{keywords} characterizing the article.
+A \SpecialEnvIndex{subject}\meta{subject classification} should be
+given according to the Mathematical Subject Classification 2000
+(MSC~2000), which can be found in the Internet, see \cc{}'s homepage
+\cchomepage{}.
+
+
+The \meta{article text} can be structured by |\section|,
+|\subsection|, and |\subsubsection|. Use |\\| to split long headings.
+A table of contents should normally \emph{not} be used. You can use
+diverse theorem and proof environments described below. Finally your
+text might end with \meta{acknowledgments} including funding
+information, references to previous versions, and thanks for help.
+
+
+
+\subsection{Theorems and proofs}
+\label{sec:thm+proof}
+
+\SpecialEnvIndex{assumption} \SpecialEnvIndex{claim}
+\SpecialEnvIndex{conjecture} \SpecialEnvIndex{corollary}
+\SpecialEnvIndex{definition} \SpecialEnvIndex{example}
+\SpecialEnvIndex{exercise} \SpecialEnvIndex{fact}
+\SpecialEnvIndex{lemma} \SpecialEnvIndex{notation}
+\SpecialEnvIndex{note} \SpecialEnvIndex{observation}
+\SpecialEnvIndex{openquestion} \SpecialEnvIndex{problem}
+\SpecialEnvIndex{proposition} \SpecialEnvIndex{remark}
+\SpecialEnvIndex{result} \SpecialEnvIndex{theorem}
+\SpecialEnvIndex{namedtheorem} \SpecialEnvIndex{assumption*}
+\SpecialEnvIndex{answer} \SpecialEnvIndex{convention}
+\SpecialEnvIndex{question}
+\SpecialEnvIndex{thesis} \SpecialEnvIndex{warning}
+\SpecialEnvIndex{claim*} \SpecialEnvIndex{conjecture*}
+\SpecialEnvIndex{corollary*} \SpecialEnvIndex{definition*}
+\SpecialEnvIndex{example*} \SpecialEnvIndex{exercise*}
+\SpecialEnvIndex{fact*} \SpecialEnvIndex{lemma*}
+\SpecialEnvIndex{notation*} \SpecialEnvIndex{note*}
+\SpecialEnvIndex{observation*} \SpecialEnvIndex{openquestion*}
+\SpecialEnvIndex{problem*} \SpecialEnvIndex{proposition*}
+\SpecialEnvIndex{remark*} \SpecialEnvIndex{result*}
+\SpecialEnvIndex{theorem*} \SpecialEnvIndex{namedtheorem*}
+\SpecialEnvIndex{answer*} \SpecialEnvIndex{convention*}
+\SpecialEnvIndex{question*}
+\SpecialEnvIndex{thesis*} \SpecialEnvIndex{warning*}
+%%
+Typing theorems is much easier than finding or proving them. We give
+some examples.
+\begin{texexample}
+\begin{theorem}\label{thm1}
+ This is a very simple theorem.
+\end{theorem}
+\end{texexample}
+This environment supports an optional argument. Often it is used to
+supply source information:
+\begin{texexample}
+\begin{theorem}[\cite{knu84}]
+ \label{thm2}
+ This is a theorem
+ by somebody else.
+\end{theorem}
+\end{texexample}
+In rare occasions, you might prefer an unnumbered theorem:
+\begin{texexample}
+\begin{theorem*}
+ This theorem is so important
+ that it has no number.
+\end{theorem*}
+\end{texexample}
+Of course, we are not restricted to theorems:
+\begin{texexample}
+\begin{lemma}
+ \label{lemma}
+ We can also have lemmas.
+ \begin{enumerate}
+ \item\label{lemma:1}
+ It has two claims.
+ \item\label{lemma:2}
+ And it shows how lists
+ are used, formatted
+ and referenced.
+ \end{enumerate}
+\end{lemma}
+\end{texexample}
+You can replace |theorem| by |lemma| to obtain lemmas instead of
+theorems in the above examples. Further, you can use the theorem-like
+environments listed in \ref{tab:thmenv}.
+\begin{table}[htb!]
+ \input{tab-thmenv.tex}
+ \caption{Defined theorem-like environments}
+ \label{tab:thmenv}
+\end{table}
+%%
+Each of these environments has a starred form which produces no
+number. Moreover, you can give examples, and continue them.
+\begin{texexample}
+\begin{example}
+ \label{myfirst}
+ Or you give an example.
+\end{example}
+\begin{contexample}{myfirst}
+ Sometimes it is nice
+ to continue an example.
+\end{contexample}
+\end{texexample}
+Note \pagebreak[3] that an example is always terminated by a lozenge
+($\eoesymbol$). You can redefine
+\SpecialUsageIndex{\eoesymbol}|\eoesymbol| if you prefer another (or
+no) symbol. The other theorem-like environments can be continued in
+this way:\nobreak
+\begin{texexample}
+\begin{continued}{lemma}
+ This continues the lemma.
+\end{continued}
+\end{texexample}
+All this is not enough? Ok, we also support a theorem-like environment
+with a name that you can choose yourself.
+\begin{texexample}
+\begin{namedtheorem}{Fundamental
+ theorem}
+ \label{FunThm}
+ This is a simple named
+ theorem with a number.\qed
+\end{namedtheorem}
+\begin{namedtheorem*}{Fundamental
+ lemma}
+ \label{FunLemma}
+ This is a simple named
+ theorem without number.
+\end{namedtheorem*}
+\end{texexample}
+Note that the references to the labels are ``\ref{FunThm}'' and
+``\ref{FunLemma}'', respectively.
+
+
+Typing proofs is even easier:
+\begin{texexample}
+\begin{proof}
+ This is a very simple proof.
+\end{proof}
+\end{texexample}
+The \pagebreak[3] default qed symbol is an open square ($\qedsymbol$).
+Sometimes, not a proof but only an outline of a proof or a sketch is
+given. This can be done as follows:\nobreak
+\begin{texexample}
+\begin{namedproof}
+ {Outline of proof}
+ [following \textsc{Third}]
+ This is a named proof.
+ Its title claims that this
+ is only an outline.
+\end{namedproof}
+\end{texexample}
+Typesetting of proofs should only be done with these proof
+environments. There is one further problem. Sometimes a proof (or an
+example) terminates with a list, an equation, or some other similar
+environment. Then the end of proof mark often seems to be placed
+incorrectly. If so, place \SpecialUsageIndex{\qed}|\qed| at the end
+of this environment. Usually this fixes this problem. (If not, maybe
+you can spend a few extra words at the end of your proof?)
+
+Typing equations can be done as usual. But note that
+\Lpackage{amsmath} provides a lot of additional equation-like
+environments, see \cite{ams96} or Chapter~8 in \cite{goomit95}.
+
+
+
+\subsection{Labels and references}
+\label{sec:label+ref}
+
+Labels and references, as we use them, have been known since the time
+\LaTeX{} was born. But note that references using the document class
+\Lclass{cc} are more informative than usual. For example,
+\SpecialUsageIndex{\ref}|\ref{myfirst}| now produces: \ref{myfirst}.
+In the standard setup, you would have obtained: \bare\ref{myfirst}.
+If you use the document class option \Lclo{noprefixes}, |\ref| behaves
+as usual. We recommend to adopt the new style. You can access the
+bare (unprefixed) form with
+\SpecialUsageIndex{\bare\string\ref}|\bare\ref{myfirst}| unless you
+issue the document class option \Lclo{nobare}. (The latter might be
+necessary to save space.)
+\begin{texexample}
+We have seen two theorems:\\
+\ref{thm1} and \bare\ref{thm2}.
+\end{texexample}
+%%
+Further, list items in theorem-like environments produce either only
+the item number or the theorem reference plus the item number,
+depending on whether the reference occurs near the theorem or not.
+(Near means, after this theorem (or lemma, \dots) and before the next
+theorem or equation.) For example, |\ref{lemma:1}| here produces
+\ref{lemma:1}. You can force the short form:
+\SpecialUsageIndex{\short\string\ref}|\short\ref{lemma:1}| yields
+\short\ref{lemma:1}, or the whole form:
+\SpecialUsageIndex{\whole\string\ref}|\whole\ref{lemma:1}| yields
+\whole\ref{lemma:1}. If you issue the document class option
+\Lclo{notheoremitemprefixes}, subitems are referenced as in standard
+\LaTeXe{}: you always obtain the short form.
+
+
+
+\subsection{Bibliography and citations}
+\label{sec:bib+cite}
+
+The most comfortable citation scheme comes with the \Lpackage{natbib}
+package. By default this is loaded. Let's begin with an example:
+\begin{texexample}
+Don \citeauthor{knu84}'s design
+of \TeX{}, as described in The
+\TeX{}book \citep{knu84},
+enabled the typesetting of texts
+containing complicated formulas.
+In \citet{knu86b,knu86c,%
+knu86d,knu86e} the
+underlying programs and fonts
+are collected. On this basis,
+\LaTeX{} and \LaTeXe{} were
+developed, see \citet{goomit95,%
+lam94,kopdal99}.
+(Graphics can be included in many
+ways, see \citealp*{goomit96g}.)
+\end{texexample}
+The command |\citet| (equivalent to |\cite|) is used for textual
+citations and the command |\citep| for parenthetical citations.
+Multiple citations are simply listed in one command. The alternative
+commands |\citealt| and |\citealp| produce the same output but without
+parentheses. This avoids nested parentheses in text which is already
+inside parentheses. Note that the years are in parentheses in the
+running text, but without parentheses if the reference itself is in
+parentheses. Several papers in the same year are distinguished as
+``\cite{knu86b}, \cite{knu86c}''. Further examples:
+\begin{center}
+ \texexamplesize
+ \begin{tabular}{l@{$\;\Rightarrow\;$}l}
+ |\citet{knu84}| & \citet{knu84} \\
+ \multicolumn2{l}{\texttt{\string\citet
+ \string{knu84,knu86b,knu86c,knu86d,knu86e\string}}}\\
+ & \citet{knu84,knu86b,knu86c,knu86d,knu86e} \\
+ |\citep{knu84}| & \citep{knu84} \\
+ |\citealt{knu84}| & \citealt{knu84} \\
+ |\citealp{knu84}| & \citealp{knu84} \\
+ |\citeauthor{knu84}| & \citeauthor{knu84} \\
+ |\citeyear{knu84}| & \citeyear{knu84} \\
+ |\citet{goomit95}| & \citet{goomit95} \\
+ |\citet*{goomit95}| & \citet*{goomit95} \\
+ |\citeauthor*{goomit95}| & \citeauthor*{goomit95} \\
+ \end{tabular}
+\end{center}
+If the first author's name contains a \textsl{von} part, such as
+``della Robbia'', then |\citet{dRob98}| produces ``della Robbia
+(1998)'', even at the beginning of a sentence. One can force the first
+letter to be in upper case with the command |\Citet| instead. Other
+upper case commands also exist. More features are documented with the
+\Lpackage{natbib} package, see \cite{dal99}.
+
+Bibliography is best produced using \BibTeX{}. See \cite{kopdal99},
+\cite{lam94}, \cite{goomit95} or \cite{pat88} for information about
+using \BibTeX{}. Then
+\SpecialUsageIndex{\bibliography}|\bibliography{|\meta{bibliography
+ files}|}| produces the bibliography. (The
+\SpecialUsageIndex{\bibliographystyle}|\bibliographystyle| is
+automatically issued by the class, so you need not do this.) In this
+case, the \BibTeX{} file(s) and the \texttt{.bbl} file should be
+embedded in the \LaTeXe{} source file using the \Lenv{filecontents}
+environment (see above).
+
+The \BibTeX{} file \file{journals.bib}, available on \cc{}'s homepage
+\cchomepage{}, contains macros for a number of journals and conference
+proceedings. If in your document you have
+|\bibliography{journals,myrefs}|, then an entry |journal = FOCS99,| in
+your file \texttt{myrefs.bib} will produce: `Proceedings of the 40th
+Annual IEEE Symposium on Foundations of Computer Science, {\rm New
+ York City~NY}' when \BibTeX{} is run. (Note that \texttt{journals}
+must precede your own bibliography file!) Since this will be updated
+only sporadically, the latest conference proceedings may be missing
+here.
+
+\subsubsection{\dots{} without \Lpackage{natbib}}
+
+If the package \Lpackage{natbib} is not installed on your system for
+some obscure reason, you can issue the option \Lclo{cccite} to switch
+to the old \cc{} style of referring to the bibliography. This still
+works but is not recommended any more.
+{\let\parencite\citep\let\citemul\citet\let\shortcite\citep
+\begin{texexample}
+Don \citeauthor{knu84}'s design
+of \TeX{}, as described in The
+\TeX{}book \parencite{knu84},
+enabled the typesetting of texts
+containing complicated formulas.
+In \citemul{knu86b,knu86c,%
+knu86d,knu86e} the
+underlying programs and fonts
+are collected. On this basis,
+\LaTeX{} and \LaTeXe{} were
+developed, see \cite{goomit95},
+\cite{lam94}, \cite{kopdal99}.
+(Graphics can be included in many
+ways, see \shortcite{goomit96g}.)
+\end{texexample}
+}%
+Using numbered references are used if the references give no
+additional information. (As most hand-made references do.) This is
+not recommended:
+{%
+ \makeatletter
+ \aftergroup\bibstyle@egs%\bibpunct[, ]{(}{)}{;}{a}{,}{,}
+ \@fileswfalse% Do not write these citations
+ \bibstyle@plain
+ \NAT@set@cites
+ %\def\NAT@sort{1}%
+ \makeatother
+\begin{texexample}
+Don Knuth's design
+of \TeX{}, as described in The
+\TeX{}book \cite{knu84},
+enabled the typesetting of texts
+containing complicated formulas.
+In \cite{knu86b,knu86c,%
+knu86d,knu86e} the
+underlying programs and fonts
+are collected. On this basis,
+\LaTeX{} and \LaTeXe{} were
+developed, see \cite{goomit95,%
+lam94,kopdal99}.
+(Graphics can be included in many
+ways, see \cite{goomit96g}.)
+\end{texexample}
+}%
+Note that only |\cite| makes sense here! Although this is acceptable,
+the first style is preferred since it is more informative.
+
+
+
+
+
+\subsection{Mathematical typesetting {\`{a}} la \Lpackage{amsmath}}
+\label{sec:alaAMS}
+
+We recommend to use the features provided by \Lpackage{amsmath},
+\Lpackage{amsfonts}, and \Lpackage{amssymb}. By default the class
+already loads these packages. For example, the \Lenv{gather}
+environment allows you to combine several equations into one,
+\Lenv{gather*} produces no numbers. The \Lenv{align} or \Lenv{align*}
+environments are similar to \Lenv{eqnarray} but you only need one
+ampersand |&|. Other than \Lenv{eqnarray}, \Lenv{align} and all other
+\Lpackage{amsmath} environments take care of the position of the
+number: there will be no overlap between number and formula! The
+\Lenv{multline} or \Lenv{multline*} environment allows you to type
+very long equations, the first line is flushed left, the last line is
+flushed right and all others are centered. The \Lenv{alignat} or
+\Lenv{alignat*} environment allows you to put two or more equations on
+a line, aligned with those on the other lines.
+
+See \cite{ams96} or Chapter 8 in the \LaTeX{} companion
+\citep{goomit95} for a complete description. But note that
+\Lpackage{amsthm} is not compatible with the \Lclass{cc} class and
+must not be used. (The same holds for its derivative
+\Lpackage{apthm}.)
+
+
+
+\subsection{Reminders}
+\label{sec:reminders}
+
+\begin{itemize}
+ %\let\emph\textbf
+\item The following items tend to be overlooked:
+ \begin{itemize}
+ \item email address of contact author,
+ \item key words,
+ \item subject classification,
+ \item received date.
+ \end{itemize}
+ Please make sure you have filled them appropriately.
+\item Manuscripts are in \emph{(American) English}. Authors are
+ encouraged to have their contribution checked for \emph{grammar},
+ and to use a spelling checker. We emphasize that \emph{American
+ spelling} should be used.
+\item Use |\hyphenation{|\meta{hyphenation exceptions}|}| or |\-| if
+ words are not correctly hyphenated.
+\item \emph{Abbreviations} should be spelled out in full when first
+ used. (With \LaTeX{}, try the package \Lpackage{acronym}.)
+\item Non-negative \emph{integers} up to twelve should
+ usually be spelled out.
+\item \emph{Funding information} and help from friends and referees go
+ into the acknowledgments section.
+\item \emph{Appendices} should not be used.
+ %%
+\item Read your |.log| file carefully. There should be no
+ |Overfull \hbox|%
+ , and certainly no visible one (more than |1pt|). If necessary,
+ reword the text. (Sometimes |\begin{sloppypar}| \dots{}
+ |\end{sloppypar}| or local use of |\sloppy|,
+ |\tolerance=|\meta{number}, |\emergencystretch=|\meta{dimension}
+ help, see \cite{goomit95}.)
+\item \emph{Blank (redundant) spaces} should be minimized by careful
+ arrangement of tables and figures.
+\item \emph{Avoid starting} a sentence with a symbol.
+\item It is best to \emph{avoid footnotes}.
+\item \emph{Figures and tables} are to be inserted in the text nearest
+ their first reference. They should be arranged so as not to cause
+ an excessive amount of blank space on the remainder of the page.
+\item \cite{goomit96g} describe various ways to include
+ \emph{pictures} in \LaTeXe{}. They also mention how to scale
+ pictures up or down, which can be used for fine tuning and to avoid
+ redundant white space. (Try to stick to
+ |\includegraphics{|\meta{PostScript file}|}| and
+ |\input{|\meta{gnuplot \LaTeX{} file}|}|.)
+
+ Alternatively, original India ink drawings are possible. Please
+ send one set of originals which must be clear and clean. Ensure
+ that the figures (including letterings and numbers) are large enough
+ to be clearly seen after reduction to 86\%.
+\item Recall that \LaTeX{} has tools to build \emph{lists}, the
+ environments \Lenv{itemize} and \Lenv{enumerate} are the most
+ frequent. Please, use them!
+
+ Note that a list in a theorem is numbered differently than outside.
+\item \emph{Font selection} in \LaTeXe{}'s new font selection scheme
+ (nfss) should be done using the commands
+ \begin{center}
+ |\emph{...}|, |\texttt{...}|, |\textbf{...}|,
+ \\
+ |\textsf{...}|, |\textsc{...}|, |\textrm{...}|,
+ \end{center}
+ and so on. Usually, you should only use the first one. In any
+ case, try to use them as rarely as possible! In math mode there are
+ similar commands. Note that |\mathbb{|\meta{letter(s)}|}| produces
+ blackboard bold letters and |\mathcal{|\meta{letter(s)}|}| produces
+ calligraphic letters. For mathematical operators you should not use
+ font selection but |\operatorname{|\text{name}|}|.
+\item Normally, you should not at all be concerned about \emph{line or
+ page breaks}. Also, \emph{vertical space} should be correctly
+ adjusted by the document class. Use the corresponding commands only
+ if no other solution is possible. If you need to use |\\| in plain
+ text, you probably did something wrong.
+\end{itemize}
+
+
+
+\subsection{Commands for the journal editor and publishers}
+\label{sec:editor}
+
+The journal editor and publishers will insert the publishing data.
+The declaration
+\begin{center}
+ \SpecialUsageIndex{\ccpublish}%
+ |\ccpublish{|\meta{year}|}{|\meta{volume}|}|%^^A
+ |{|\meta{number}|}{|\meta{first page}|}|
+\end{center}
+will be inserted next to author and title information. Further, the
+commands \SpecialUsageIndex{\electronic}|\electronic| and
+\SpecialUsageIndex{\printed}|\printed| switches the ISSN to the
+electronic or printed version, respectively.
+
+
+
+\subsection{Disclaimer}
+\label{sec:disclaimer}
+
+The macros are not guaranteed to be free of errors, and any bugs,
+inconsistencies, and suggestions for further improvement or other
+comments should be reported to \email{cc@upb.de}.
+
+
+\condbreak{1cm}
+
+\section{Quick upgrade: from bare \LaTeX{} to \Lclass{cc}}
+
+% \changes{v2.03}{2003/05/26}{Added section on quickly upgrading to
+% cc \dots}
+Replace your |\documentclass{...}| command with the line
+\begin{verbatim}
+\documentclass[nonatbib,noprefixes]{cc}
+\end{verbatim}
+\noindent
+and adjust author, title, keywords and subject classification
+according to \ref{tab:structure} (page \pageref{tab:structure}). (In
+particular, all this information must appear before the
+|\begin{document}|.)
+%\end{document}
+The title may be too long for the running head. You need
+to supply |\titlehead{|\meta{short title}|}| then.
+
+If there are any |\newtheorem| commands then turn them off and use the
+\Lclass{cc} theorem environments described in \ref{sec:thm+proof}.
+(Note that there is an environment \Lenv{namedtheorem} for
+theorem-like environments with unforeseen names. You can also use
+this in a |\newenvironment| definition if necessary.) If there are
+definitions for proofs or qed signs then turn them off, too; the
+\Lclass{cc} class provides these things.
+
+Optional: For better readability you are asked to switch to the new
+citation scheme. To do so: add your |.bib|-file, throw away your
+handwritten environment \Lenv{thebibliography} and the command
+|\bibliographystyle| if present, and replace it with
+|\bibliography{|\meta{name of your |.bib|-file}|}|. Then run |latex|
+twice and adjust the text at the citation points.
+
+\section{Make your document portable}
+
+% \changes{v2.03}{2003/05/26}{Added section on making things portable
+% \dots}
+In order to make your \Lclass{cc} source file portable to persons who
+did not yet install the \Lclass{cc} class, include the file
+|cc-cls-inline.tex|. This file can be found on the journal's homepage
+\url{http://www-math.upb.de/~aggathen/cc/}. Please do not forget to
+remove the following changes prior to sending your file to \cc{}, it
+will have no effect there. You have two options:
+\begin{enumerate}
+\item Simply include the entire file |cc-cls-inline.tex| in your file
+ just before the |\documentclass| command. This has the drawback
+ that your personal texts starts only after many lines irrelevant to
+ you.
+\item Insert your file in the following framework:
+ \verbatiminput{cc-portability-frame.tex}
+ This has the advantage that the \Lclass{cc} stuff is at the end. The
+ drawback is that you need to call \LaTeX{} once more.
+\end{enumerate}
+
+\condbreak{1cm}
+
+\section{Commands}
+\label{sec:commands}
+
+\begin{description}
+\item
+ \label{macro:documentclass}
+ \DescribeMacro{\documentclass}|\documentclass[|\meta{options}|]{cc}|
+
+Possible \meta{options} are:
+\begin{itemize}
+\item any option from the \Lclass{article} document class.
+ (\Lclo{a4paper}, \Lclo{a4paper}, \Lclo{b5paper}, \Lclo{letterpaper},
+ \Lclo{legalpaper}, \Lclo{executivepaper}, \Lclo{landscape},
+ \Lclo{10pt}, \Lclo{11pt}, \Lclo{12pt}, \Lclo{oneside},
+ \Lclo{twoside}, \Lclo{draft}, \Lclo{final}, \Lclo{titlepage},
+ \Lclo{notitlepage}, \Lclo{onecolumn}, \Lclo{twocolumn},
+ \Lclo{leqno}, \Lclo{fleqn}, \Lclo{openbib}, though not all of them
+ might produce nice results.) Note that all the \Lclo{*paper}
+ options invoke the option \Lclo{nocctextarea}, you need to add
+ \Lclo{cctextarea} after the \Lclo{*paper} option to get the same
+ text area as in \cc{} then.
+\item any option from the \AMS{} packages (if they are not disabled by
+ \Lclo{noams}). (\Lclo{intlimits}, \Lclo{nointlimits},
+ \Lclo{sumlimits}, \Lclo{nosumlimits}, \Lclo{namelimits},
+ \Lclo{nonamelimits}, \Lclo{leqno}, \Lclo{reqno}, \Lclo{centertags},
+ \Lclo{tbtags}, \Lclo{cmex10}, \Lclo{fleqn}.)
+% \item \Lclo{final} (default): `This is a final version.'
+% \item \Lclo{draft}: `This a draft.'
+\item \Lclo{localnumbering}, \Lclo{longarticle} (default): theorem and
+ equation numbering is local to each section, e.g.\ Theorem~3.4.
+\item \Lclo{globalnumbering}, \Lclo{shortarticle}: theorem and equation
+ numbering is global, e.g.\ Theorem~17.
+\item \Lclo{ccpublish} (default): requirements as for publication in
+ \cc{}.
+\item \Lclo{noccpublish}: |\contact|, \Lenv{abstract}, \Lenv{keywords}
+ and \Lenv{subject} are optional now.
+\end{itemize}
+Further, the following \meta{options} are available. They are mainly
+intended to deactivate certain standard features of the class, in
+cases where these cause trouble.
+\begin{itemize}
+\item \Lclo{ams} (default): use the \AMS{} packages
+ \Lpackage{amsmath}, \Lpackage{amsfonts}, \Lpackage{amssymb}.
+\item \Lclo{noams}: do not use the \AMS{} packages.
+\item \Lclo{cclayout}, \Lclo{nocclayout} turn the \cc{} layout on or
+ off.
+\item \Lclo{cctextarea}, \Lclo{nocctextarea} turn the \cc{} text area
+ on or off. They are only effective with \Lclo{cclayout}.
+\item \Lclo{noothermargins}, \Lclo{classicalmargins},
+ \Lclo{printmargins}, \Lclo{balancedmargins}: Choose margin mode.
+ \Lclo{noothermargins} leaves the margins alone,
+ \Lclo{classicalmargins} leaves the outer margin but fits the inner
+ one to paper and text widths, \Lclo{printmargins} puts 5mm to the
+ outer edge, \Lclo{balancedmargins} makes both margins equal.
+\item \Lclo{autotitle} (default): at |\begin{document}| the title is
+ generated, and at |\end{document}| the receipt information and
+ affiliations are generated.
+\item \Lclo{noautotitle}: \SpecialUsageIndex{\maketitle}|\maketitle| and
+ \SpecialUsageIndex{\makeendtitle}|\makeendtitle| must be explicitly
+ written.
+\item \Lclo{ccsectioning} (default): use centered section headings and
+ in-line subsection and subsubsection headings.
+\item \Lclo{noccsectioning}: use section, subsection, subsubsection,
+ paragraph, subparagraph headings as with the \Lclass{article}
+ document class.
+\item \Lclo{natbib} (default): use the citation scheme provided by the
+ \Lpackage{natbib} package by Patrick W. Daly, the options
+ \Lclo{sort\&compress} (default), \Lclo{sort} and \Lclo{nosort}
+ decide whether multiple citations are sorted or not (compression
+ only affects numerical citations).
+\item \Lclo{cccite}: use the (old) author-year citation scheme of \cc.
+\item \Lclo{nocccite}, \Lclo{nonatbib}: do neither use the
+ \Lpackage{natbib} nor the \cc{} citation scheme.
+\item \Lclo{onecolumnbibliography} (default),
+ \Lclo{twocolumnbibliography}: With these options you can choose one
+ or two columns for the bibliography.
+\item \Lclo{cctheorems} (default): theorem like environments are
+ defined as described.
+\item \Lclo{nocctheorems}: theorem like environments are \emph{not}
+ defined at all.
+\item \Lclo{prefixes} (default): references to theorems, equations,
+ and so on, come with prefixes, e.g.\
+ \SpecialUsageIndex{\ref}|\ref{lemma}| produces `\ref{lemma}' rather
+ than only `\bare\ref{lemma}',
+\item \Lclo{noprefixes}: references behave as in standard \LaTeXe{},
+\item \Lclo{bare} (default): \SpecialUsageIndex{\label}|\label| produces two
+ labels instead of one, a long form for
+ \SpecialUsageIndex{\ref}|\ref| and a short form for
+ \SpecialUsageIndex{\bare\string\ref}|\bare\ref|,
+\item \Lclo{nobare}: \SpecialUsageIndex{\label}|\label|
+ works as usual, \SpecialUsageIndex{\bare\string\ref}|\bare\ref| is
+ equivalent to \SpecialUsageIndex{\ref}|\ref| (but gives a warning),
+\item \Lclo{theoremitemprefixes} (default): references to subtopics of
+ a theorem (or lemma ...) consist of the theorem reference and the
+ item reference, for example, |\ref{lemma:2}| produces
+ `\ref{lemma:2}'. In fact, between \ref{lemma} and the following
+ theorem or equation (\ref{myfirst} in our case) you would have
+ obtained `\short\ref{lemma:2}'. This short form can be forced by
+ \SpecialUsageIndex{\short\string\ref}|\short\ref{lemma:2}|. You can
+ also force the whole form by
+ \SpecialUsageIndex{\whole\string\ref}|\whole\ref{lemma:2}|.
+\item \Lclo{notheoremitemprefixes}: with this option you always get
+ the short form.
+\item \Lclo{separateequationcounting}: Do not count equations together
+ with theorems, lemmas, \dots
+\item \Lclo{noseparateequationcounting} (default): Count equations
+ together with theorems, lemmas, \dots
+\item \Lclo{ccalgorithms} (default): Load the algorithms stuff.
+\item \Lclo{noccalgorithms}: Do not load the algorithms stuff.
+\end{itemize}
+And finally there are some options for font, input and multilingual
+support.
+\begin{itemize}
+\item \Lclo{OT1} (default): use the font encoding scheme OT1 (this is
+ standard with \LaTeX).
+\item \Lclo{T1}: use the new font encoding scheme T1 (256 characters
+ per font instead of 128).
+\item \Lclo{nolatin1} (default): do not use the input encoding scheme
+ latin1 (this is standard with \LaTeX).
+\item \Lclo{latin1}: use the input encoding scheme latin1 (so Umlaute,
+ {\"{a}}{\"{o}}{\"{u}}, and so on can be typed in literally).
+\item \Lclo{nobabel} (default): do not use \Lpackage{babel} for
+ multilingual support.
+\item \Lclo{babel} (default): load \Lpackage{babel} for multilingual
+ support (at an appropriate place, i.e.{} before \Lpackage{inputenc}),
+ required languages must be included as options to the
+ |\documentclass|.
+\item \Lclo{multilingual}: this is an abbreviation for \Lclo{T1},
+ \Lclo{latin1} and \Lclo{babel}.
+\item \Lclo{nomultilingual}: this is an abbreviation for \Lclo{OT1},
+ \Lclo{nolatin1} and \Lclo{nobabel}.
+\end{itemize}
+
+\item \DescribeMacro{\contact}|\contact{|\meta{contact email
+ address}|}|
+
+ Preamble command to specify the email address of the contact author.
+ This is required for publications in \cc{}.
+
+\item \DescribeMacro{\received}|\received{|\meta{received date}|}|
+
+ Preamble command to declare the received date of the manuscript.
+
+\item \DescribeMacro{\author}|\author{|\meta{author list}|}|
+
+ Preamble command to specify the authors and their addresses.
+ Different authors are separated by \SpecialUsageIndex{\and}|\and|.
+ If you are not writing for \cc{} footnotes can be produced by
+ \SpecialUsageIndex{\thanks}|\thanks{|\meta{text}|}|. If an author
+ has a different current address, use
+ \SpecialUsageIndex{\currentaddress}|\currentaddress|. For an other
+ type of other address, use
+ \SpecialUsageIndex{\otheraddress}|\otheraddress| followed by a line
+ like
+ |Guest address of \textsc{|\meta{author name}|}|. %
+ Use the macros
+ \SpecialUsageIndex{\email}|\email{|\meta{email-address}|}| and
+ \SpecialUsageIndex{\homepage}|\homepage{|\meta{www-address}|}| to
+ specify the email address and home page, respectively. The
+ combination of these things can be seen best in the example in
+ \ref{tab:structure}.
+
+ Note that from this declaration also the list of authors in the
+ title and the short list of authors for the running head is derived.
+ Usually, the automatism should work well. If not (maybe the
+ authors' names are very long), you can use
+ \SpecialUsageIndex{\authorhead}|\authorhead{|\meta{last name list}|}| %
+ to specify the author list for the running head. Similarly, you can
+ use
+ \SpecialUsageIndex{\authorlist}|\authorlist{|\meta{name list}|}| %
+ if the the automatic extraction of the author names for the title
+ does not work as expected.
+
+\item \DescribeMacro{\title}|\title{|\meta{title}|}|
+
+ Preamble command to specify the title. If the title is not broken
+ nicely, you can use |\\| to improve line breaking. Long titles do
+ not fit into the running head. In this case please specify a
+ shorter version using
+ \SpecialUsageIndex{\titlehead}|\titlehead{|\meta{short title}|}|.
+
+\item \DescribeMacro{\subtitle}|\subtitle{|\meta{subtitle}|}|
+\item \DescribeMacro{\version}|\version{|\meta{version}|}|
+
+ These preamble command allows to insert, e.g., `Preliminary version'
+ under the title.
+
+\item \DescribeMacro{\date}|\date{|\meta{date}|}|
+
+ Preamble command, default is |\today|. This date is \emph{not} used
+ when the article is published in \cc{}.
+
+\item \DescribeEnv{abstract}|\begin{abstract}| \meta{text}
+ |\end{abstract}|
+
+ Preamble environment to specify the abstract. If the abstract
+ contains any |\ref| or |\cite| this does not work. Try to avoid it.
+ If you cannot avoid it use |\Abstract{|\meta{text}|}|.
+
+\item \DescribeEnv{keywords}|\begin{keywords}| \meta{list of keywords}
+ |\end{keywords}|
+
+ Preamble environment to specify keywords.
+
+\item \DescribeEnv{subject}|\begin{subject}| \meta{subject
+ classification} |\end{subject}|
+
+ Preamble environment to specify the subject classification.
+
+\item \DescribeEnv{acknowledge}|\begin{acknowledge}|
+ \meta{acknowledgments} |\end{acknowledge}|
+
+ Environment for acknowledgments. Funding information can also be
+ included here.
+
+\item \DescribeMacro{\bibliography}|\bibliography{|\meta{list of
+ bibliography files}|}|
+
+ Command to produce the bibliography from the \meta{list of
+ bibliography files} using \BibTeX{}.
+
+\item \DescribeEnv{theorem}|\begin{theorem}[|\meta{citation}|]|
+ \meta{theorem text} |\end{theorem}|
+\item \DescribeEnv{theorem*}|\begin{theorem*}[|\meta{citation}|]|
+ \meta{theorem text} |\end{theorem*}|
+
+ Environment for theorems. There are similar environments, for
+ example, \Lenv{lemma}, \Lenv{definition}, \Lenv{example}. Compare
+ \ref{tab:thmenv} for a complete list. Each of them has a starred
+ version that is not numbered.
+
+\item \DescribeEnv{continued}|\begin{continued}{|\meta{label-key}|}|
+ \meta{theorem text} |\end{continued}|
+\item
+ \DescribeEnv{contexample}|\begin{contexample}{|\meta{label-key}|}|
+ \meta{example text} |\end{contexample}|
+
+ Environment to continue theorems-like environments. Note that
+ examples need a different environment since they use an end of
+ example mark.
+
+\item
+ \DescribeEnv{namedtheorem}|\begin{namedtheorem}{|\meta{heading}|}[|\meta{citation}|]|
+ \\\meta{theorem text}
+ \\\null\hskip-\leftmargin\hskip\labelsep%
+ |\end{namedtheorem}|
+\item
+ \DescribeEnv{namedtheorem*}|\begin{namedtheorem*}{|\meta{heading}|}[|\meta{citation}|]|
+ \\\meta{theorem text}
+ \\\null\hskip-\leftmargin\hskip\labelsep%
+ |\end{namedtheorem*}|
+
+ This also is an environment for theorems. Other than
+ \Lpackage{theorem}, the \meta{heading}, e.g.\ `Theorem', is
+ specified explicitly. Thus a `Fundamental Theorem' can be easily
+ typed.
+
+\item \DescribeEnv{proof}|\begin{proof}[|\meta{citation}|]|
+ \meta{proof text} |\end{proof}|
+
+ This is the standard environment to type proofs. The default qed
+ symbol is an open square ($\qedsymbol$), but you can redefine
+ \SpecialUsageIndex{\qedsymbol}|\qedsymbol|. You can use
+ \SpecialUsageIndex{\qed}|\qed| to force the qed symbol at an earlier
+ place. This is usually necessary whenever a proof terminates with a
+ math environment or a list.
+
+\item \DescribeEnv{namedproof}|\begin{namedproof}[|\meta{end of proof
+ mark}|]{|\meta{heading}|}[|\meta{citation}|]|
+ \\\meta{proof text}
+ \\\null\hskip-\leftmargin\hskip\labelsep%
+ |\end{namedproof}|
+
+ Environment to type proof-like things which differ in \meta{heading}
+ and optionally also in the \meta{end of proof mark}. Note that the
+ latter is typeset in math mode.
+
+\item \DescribeEnv{enumerate}|\begin{enumerate}*| \meta{items}
+ |\end{enumerate}|
+
+ This is simply a variant of the traditional \Lenv{enumerate}
+ environment, it continues a previously terminated list. This allows
+ you to make intermediate remarks and then continue your numbered
+ list.
+
+\item \DescribeMacro{\label}|\label{|\meta{key}|}|,
+ \DescribeMacro{\ref}|\ref{|\meta{key}|}|,
+ \DescribeMacro{\bare\string\ref}|\bare\ref{|\meta{key}|}|,
+ \DescribeMacro{\short\string\ref}|\short\ref{|\meta{key}|}|, \newline
+ \DescribeMacro{\whole\string\ref}|\whole\ref{|\meta{key}|}|
+
+ These macros are used for referencing. |\label| defines a label,
+ |\ref| produces a reference to the label with the corresponding
+ \meta{key}. In the standard setup, a theorem will be referenced as
+ `Theorem 3.4' or the like. Unless the document class option
+ \Lclo{nobare} was given, |\bare\ref| produces a short label, e.g.
+ `3.4'.
+
+ The other two modifications are important for references to list
+ items in theorem-like environments. Usually, the reference would be
+ the whole reference which is forced by |\whole\ref|, for example,
+ |\whole\ref{lemma:1}| is \whole\ref{lemma:1}. But near the theorem,
+ that is until the next theorem or equation, a shortened form is used
+ which is forced by |\short\ref|, for example, |\short\ref{lemma:1}|
+ is \short\ref{lemma:1}. This feature can be turned off by the
+ document class option \Lclo{notheoremitemprefixes}.
+
+\item \DescribeEnv{thebibliography}|\begin{thebibliography}{}|
+ \\\DescribeMacro{\bibitem}|\bibitem[|\meta{label}|]{|\meta{key}|}|
+ \meta{bibliographic information}
+ \\\null\hskip-\leftmargin\hskip\labelsep%
+ |\end{thebibliography}|
+
+ This environment is used to typeset the references. For each
+ reference there is a |\bibitem|. Usually, this is automatically
+ produced by \BibTeX{}.
+
+\item
+ \DescribeMacro{\citet}|\citet*[|\meta{prefix}|][|\meta{postfix}|]{|\meta{key}|}|,
+ \newline
+ \DescribeMacro{\citep}|\citep*[|\meta{prefix}|][|\meta{postfix}|]{|\meta{key}|}|,
+ \newline
+ \DescribeMacro{\citealt}|\citealt*[|\meta{prefix}|][|\meta{postfix}|]{|\meta{key}|}|,
+ \newline
+ \DescribeMacro{\citealp}|\citealp*[|\meta{prefix}|][|\meta{postfix}|]{|\meta{key}|}|,
+ \newline
+ \DescribeMacro{\citeauthor}|\citeauthor*[|\meta{prefix}|][|\meta{postfix}|]{|\meta{key}|}|,
+ \newline
+ \DescribeMacro{\citeyear}|\citeyear[|\meta{prefix}|][|\meta{postfix}|]{|\meta{key}|}|
+
+ These macros are defined by the package \Lpackage{natbib}. With the
+ option \Lclo{cccite} they loose most of their functionality. With
+ the options \Lclo{nocccite} or \Lclo{nonatbib} they are not defined.
+
+ All of these can have a comma separated list of \meta{key}s. The
+ star indicates that the full list of authors should be used if
+ possible. The \meta{prefix} precedes, the \meta{postfix} follows
+ the citation. If only one optional argument is present, it is
+ considered to be the \meta{postfix}. The \meta{postifx} may be
+ empty to allow the specification of a \meta{prefix} only. There are
+ several examples in \ref{sec:bib+cite}.
+ \begin{texexample}
+\citet{goomit95}\\
+\citeauthor{kopdal99}\\
+\citeyear{knu84}\\
+\cite{knu84,knu86b,knu86c}\\
+\citealt{lam94}\\
+\citep{goomit96g}\\
+This\nocite{pat88}
+produces no text but a
+bibliography entry.
+ \end{texexample}
+
+\item \DescribeMacro{\cite}|\cite{|\meta{key}|}|,
+ \DescribeMacro{\citeauthor}|\citeauthor{|\meta{key}|}|,
+ \DescribeMacro{\citeyear}|\citeyear{|\meta{key}|}|,
+ \DescribeMacro{\citemul}|\citemul{|\meta{key}|}|, \newline
+ \DescribeMacro{\shortcite}|\shortcite{|\meta{key}|}|,
+ \DescribeMacro{\parencite}|\parencite{|\meta{key}|}|,
+ \DescribeMacro{\nocite}|\nocite{|\meta{key}|}|
+
+ These obsolete macros are used for citations when the option
+ \Lclo{cccite} is used.
+% The different commands produce various combinations of a reference:
+% \begin{texexample}
+% \cite{goomit95}\\
+% \citeauthor{kopdal99}\\
+% \citeyear{knu84}\\
+% \citemul{knu84,knu86b,knu86c}\\
+% \shortcite{lam94}\\
+% \parencite{goomit96g}\\
+% This\nocite{pat88}
+% produces no text but a
+% bibliography entry.
+% \end{texexample}
+% |\citemul| is used to cite several references of the same author(s).
+% (In fact, with the option \Lclo{cccite}, the fourth line of the
+% above example would have given: Knuth (1984, 1986a, 1986b).)
+
+\item
+ \DescribeMacro{\headrulewidth}|\setlength{\headrulewidth}{|\meta{width}|}|
+
+ If a head rule is desired, use this in the preamble. The default
+ value for \meta{width} is |.4pt|. Note that this has only an effect
+ with the document class option \Lclo{noccpublish}.
+
+\item \DescribeMacro{\maketitle}|\maketitle|
+
+ This command produces the title if not done yet. You never need
+ this command unless you use the document class option
+ \Lclo{noautotitle}.
+
+\item \DescribeMacro{\makeendtitle}|\makeendtitle|
+
+ This command produces receipt information and affiliations if not
+ done yet. You do not need this command unless you use the document
+ class option \Lclo{noautotitle}.
+
+\pagebreak[3]
+
+\item \DescribeMacro{\ccpublish}|\ccpublish{|\meta{year}|}|%
+ |{|\meta{volume}|}{|\meta{number}|}{|\meta{first page}|}|
+
+ Preamble command to define \meta{year}, \meta{volume},
+ \meta{number}, and \meta{first page} of the final publication
+ \emph{by the editor}. Not intended for use by anybody else. Note
+ that this forces the document class options \Lclo{autotitle} and
+ \Lclo{ccpublish}.
+
+\item \DescribeMacro{\electronic}|\electronic|,
+ \DescribeMacro{\printed}|\printed|
+
+ Commands \emph{for the editor}. Switches the ISSN to the electronic
+ or to the printed version.
+
+\end{description}
+
+
+\section{Commands for algorithms}
+
+The commands and environments related to algorithms can also be used
+independently, try |\usepackage{ccalgo}| to activate them. For a
+longer example, see \ref{tab:algo}.
+\begin{table}[t!]
+ \input{tab-algo.tex}
+ \caption{An example algorithm}
+ \label{tab:algo}
+\end{table}
+\condbreak{1cm}
+\begin{description}
+\item
+ \DescribeEnv{algorithm}|\begin{algorithm}|%
+ |{|\meta{masterkey}|}[|\meta{citation}|]|\\
+ |\item |\meta{input}\\
+ |\item |\meta{output}\\
+ |\begin{block}|\\
+ | |\meta{body}\\
+ |\end{block}|
+ \\\null\hskip-\leftmargin\hskip\labelsep%
+ |\end{algorithm}|
+
+ This is a specialization of the following environment
+ \Lenv{namedalgorithm}. You may define such specializations using
+ |\newalgorithm|.
+
+\item
+ |\newalgorithm{|\meta{environment name}|}[|\meta{list of required
+ items}|]{|\meta{heading}|}|.
+
+ You can use this to specialize the following environment
+ \Lenv{namedalgorithm}.
+
+\item
+ \DescribeEnv{namedalgorithm}|\begin{namedalgorithm}|%
+ |{|\meta{heading}|}[|\meta{list of required items}|]|\\%
+ |{|\meta{masterkey}|}[|\meta{citation}|]|\\
+ |\item |\meta{first required item}\\
+ \dots\\
+ |\item |\meta{last required item}\\
+ |\begin{block}|\\
+ | |\meta{body}\\
+ |\end{block}|
+ \\\null\hskip-\leftmargin\hskip\labelsep%
+ |\end{namedalgorithm}|
+
+ Typesetting algorithms is an art by itself. We hope that this
+ environment is flexible enough to reflect also your taste. The
+ environment \Lenv{namedalgorithm} takes four arguments, two of them
+ are optional. The \meta{list of required items} is a comma
+ separated list of titles for required items. It defaults to:
+ |Input,Output|. Thus the first required item is entitled |Input|
+ and the second and last required item is entitled |Output|. An
+ interactive protocol might have many more required items, for
+ example,
+ |Common input,|%
+ |Prover's input,|%
+ |Verifier's input,|%
+ |Output|.
+ The \meta{heading} could be |Algorithm| or
+ |Extended Euclidean Algorithm|%
+ , it will be referenced together with the number (if any). The
+ \meta{masterkey} is used to set a label; this is obligatory since
+ labels to steps or ranges of steps in the algorithm are created
+ using this. Finally \meta{citation} usually is either a phrase
+ describing the algorithm, or a reference.
+
+ The \meta{body} is a sequence of steps and blocks.
+
+ |\item[|\meta{label}|]| starts a new step of the algorithm, either
+ numbered or labelled \meta{label}. As usual, a |\label| command
+ after the item refers to the step, but it is wiser to use
+ \DescribeMacro{\algolabel}|\algolabel{|\meta{subkey}|}| instead
+ which is equivalent to |\label{|\meta{masterkey}|-|\meta{subkey}|}|.
+ (Note that also items with given \meta{label} can have an
+ |\algolabel| or a |\label|!) A reference must then be written
+ \DescribeMacro{\stepref}|\stepref{|\meta{masterkey}|}{|\meta{subkey}|}|
+ or |\ref{|\meta{masterkey}|-|\meta{subkey}|}|. If the standard
+ width of the item labels is not enough, use
+ \begin{center}
+ |\settowidth{\steplabelwidth}{\makeoptalgolabel{|\meta{widest label}|}}| %
+ \end{center}
+ before the first step in the algorithm to adjust this. (If you have
+ a problem because your algorithm is longer than 99 steps then you
+ should better use
+ |\settowidth{\steplabelwidth}{\makealgolabel{999}}|%
+ .)
+
+ |\begin{block}|~\meta{body}~|\end{block}| produces an indented
+ block. An |\algolabel{|\meta{subkey}|}| before the \meta{body}
+ generates a reference
+ %\meta{masterkey}|-|\meta{subkey}
+ to the \emph{range} of steps inside the block. Actually, the
+ environment \Lenv{block} is combined from environments
+ \Lenv{indention} and \Lenv{range}. |\begin{indention}| \meta{body}
+ |\end{indention}| just produces some indented lines, while
+ |\begin{range}| |\algolabel{|\meta{subkey}|}| \meta{body}
+ |\end{range}| allows to reference a range of steps.
+
+
+ More advanced facilities might help you:
+ \begin{itemize}
+ \item |\begin{ifblock}{|\meta{condition}|}| \meta{body}
+ |\end{ifblock}|
+ \item |\begin{elifblock}{|\meta{condition}|}| \meta{body}
+ |\end{elifblock}|
+ \item |\begin{elseblock}| \meta{body} |\end{elseblock}|
+ \item |\begin{forblock}{|\meta{loop control}|}| \meta{body}
+ |\end{forblock}|
+ \item |\begin{whileblock}{|\meta{condition}|}| \meta{body}
+ |\end{whileblock}|
+ \item |\begin{untilblock}{|\meta{condition}|}| \meta{body}
+ |\end{untilblock}|
+ \item |\begin{blockwhile}{|\meta{condition}|}| \meta{body}
+ |\end{blockwhile}|
+ \item |\begin{blockuntil}{|\meta{condition}|}| \meta{body}
+ |\end{blockuntil}|
+ \end{itemize}
+ For example, the first of these is almost equivalent to:
+ \begin{verse}
+ |\item|\\
+ | \IF |\meta{condition}| \THEN|\\
+ |\begin{block}|\\
+ | |\meta{body}\\
+ |\end{block}|
+ \end{verse}
+ The actual implementation also takes care of a label to the entire
+ range of steps. If you put a label in an \Lenv{ifblock}, you
+ reference the range containing the \textsf{If} step and the
+ \textsf{then} block. If you need a reference for the \textsf{If}
+ step itself, or you use \meta{label} for all steps, then put
+ |\item[|\meta{label}|]\algolabel{|\meta{subkey}|}| before the
+ \Lenv{ifblock}.
+
+ Typesetting keywords is done as follows: |\keyword{|\meta{name}|}|
+ produces a keyword. |\FOR|, |\DO|, |\WHILE|, |\REPEAT|,
+ |\UNTIL|, |\IF|, |\THEN|, |\ELSE|, |\RETURN| are predefined
+ keywords. Further, |\COMMENT{|\meta{comment}|}| can be used to type
+ comments.
+\end{description}
+
+
+% \changes{v2.03}{2005/08/29}{Added section on interaction with other
+% packages}
+\section{Interaction with other packages}
+
+\begin{description}
+\item[\Lpackage{hyperref}] This package must be loaded after
+ \Lpackage{cc-cls}. Otherwise, references will not work as expected
+ with \Lpackage{hyperref}.
+\end{description}
+
+
+\DocInput{cc.dtx}
+
+\Finale
+
+\end{document}
+%</driver>
+%<*quickref>
+\documentclass[shortarticle,noccpublish,noautotitle,%
+multilingual,english]{cc}
+
+\IfFileExists{texexample.sty}{}{%
+ \typeout{Some files are missing.}
+ \typeout{Please first do: latex cc.dtx}
+ \endinput
+ }
+
+\dimen254\marginparwidth
+\let\ccorgmaketitle\maketitle
+\usepackage{doc}
+\normalmarginpar
+\let\maketitle\ccorgmaketitle
+\marginparwidth\dimen254
+\MakeShortVerb{\|}
+
+\usepackage{texexample}
+
+
+\pagestyle{empty}
+\advance\textheight\headheight
+\headheight=0pt
+\advance\textheight\footskip
+\footskip=0pt
+
+\begin{document}
+
+\pagestyle{empty}
+\section*{Tables for quick reference}
+
+\bigskip
+
+\input{tab-algo}
+
+\clearpage
+\input{tab-struct}
+\enlargethispage{1cm}
+
+\input{tab-thmenv}
+
+\end{document}
+
+%</quickref>
+% meta-comment \fi
+%
+% \expandafter\newif\csname ifstopped\endcsname
+% \stoppedtrue
+% \StopEventually{
+% \ifstopped
+% \setcounter{IndexColumns}{2}%
+% \PrintIndex
+% \condbreak{2cm}
+% \bibliography{texrefs}
+% \fi
+% }
+% \stoppedfalse
+%
+% \condbreak{2cm}
+% \addcontentsline{toc}{section}{\refname}\bibliography{texrefs}
+% \makeendtitle\let\makeendtitle\relax%% We really want this!
+%
+% \cleardoublepage
+% \let\PrintDescribeEnv\ccorgPrintDescribeEnv
+% \let\PrintDescribeMacro\ccorgPrintDescribeMacro
+% \footnotesize
+% \part*{Source code}
+% \addcontentsline{toc}{part}{Source code}
+%
+% \GetFileInfo{cc.cls}
+%
+% \section{Source of \filename}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+% \begin{macrocode}
+%<*cccls>
+% \end{macrocode}
+%
+% \changes{v0.00}{1999/09/13}{Starting. Michael N{\"{u}}sken, Paderborn}
+% \changes{v0.80}{1999/10/22}{Alpha version, built according to
+% \texttt{cc.sty}. Michael N{\"{u}}sken, Paderborn}
+% \changes{v0.90}{1999/11/09}{Beta version. Michael N{\"{u}}sken, Paderborn}
+%
+% This document class can only be used with \LaTeXe{}, so we make
+% sure that an appropriate message is displayed when another \TeX{}
+% format is used.
+%
+% Announce the Class name and its version:
+% \changes{v0.90}{2000/02/16}{Advanced version to 1.99}
+% \changes{v1.99}{2000/02/29}{Advanced version to official 2.00}
+% \changes{v2.00}{2000/05/29}{Add definition of \ignorespaces for
+% \LaTeXe{} version of 1995/06/01.}
+% \changes{v2.00}{2000/06/21}{Advanced version to 2.01}
+% \changes{v2.01}{2001/08/28}{Advanced version to 2.02}
+% \changes{v2.02}{2002/01/08}{Advanced version to 2.03}
+% \changes{v2.03}{2005/08/29}{Advanced version to 2.04, Michael
+% N{\"{u}}sken, now(!) Bonn}
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\providecommand\ignorespacesafterend{\@ignoretrue}
+\newif\ifclass
+\ifx\@currext\@clsextension\classtrue\else\classfalse\fi
+\ifclass\expandafter\ProvidesClass\else\expandafter\ProvidesPackage\fi
+{\ifclass cc\else cc-cls\fi}[2005/08/27 v2.04
+ computational complexity
+ \ifclass document class\else package\fi]
+% \end{macrocode}
+%
+% \subsection{Load auxiliaries}
+%
+% We load the auxiliaries that are needed at various places. They
+% contain macros for warnings, lots of new |\if|s, and more.
+% \begin{macrocode}
+\RequirePackage{ccaux}
+% \end{macrocode}
+%
+% \subsection{Declaration of Options}
+%
+% The options \Lclo{localnumbering}, \Lclo{globalnumbering} or
+% \Lclo{longarticle}, \Lclo{shortarticle} affect the numbering of
+% theorem and equation like environments. Either they are numbered
+% globally, e.g. Theorem 23, or they are numbered within sections,
+% e.g. Theorem 4.2.
+% \begin{macrocode}
+\DeclareOption{localnumbering}{\@longarticletrue}
+\DeclareOption{globalnumbering}{\@longarticlefalse}
+\DeclareOption{longarticle}{\@longarticletrue}
+\DeclareOption{shortarticle}{\@longarticlefalse}
+% \end{macrocode}
+% The option \Lclo{cclayout} enables \cc's |\maketitle| and |\endmaketitle|,
+% and the page dimensions are set according to \cc's requirements.
+% If the option \Lclo{nocclayout} is used the page layout |cc| is
+% still defined, but |\maketitle| and |\endmaketitle| are not defined
+% and the page dimensions are left unchanged. Also |\author|,
+% |\title|, \dots{} are not required any more.
+% \changes{v2.00}{2000/04/10}{Added option cclayout. Michael N{\"{u}}sken,
+% Paderborn}
+% \begin{macrocode}
+\DeclareOption{cclayout}{\@cclayouttrue}
+\DeclareOption{nocclayout}{\@cclayoutfalse}
+% \end{macrocode}
+% The options \Lclo{prefixes}, \Lclo{noprefixes} decide whether a
+% reference produces `Theorem 4.2' or just `4.2'. The options
+% \Lclo{bare}, \Lclo{nobare} decide whether |\bare\ref| produces `4.2'
+% or not. These options are passed to the package
+% \Lpackage{relabel}, which is responsible for this kind of trick.
+% \begin{macrocode}
+\DeclareOption{prefixes}{%
+ \PassOptionsToPackage{\CurrentOption}{relabel}}
+\DeclareOption{noprefixes}{%
+ \ExecuteOptions{notheoremitemprefixes}%
+ \PassOptionsToPackage{\CurrentOption,nobare}{relabel}}
+\DeclareOption{bare}{\PassOptionsToPackage{\CurrentOption}{relabel}}
+\DeclareOption{nobare}{\PassOptionsToPackage{\CurrentOption}{relabel}}
+% \end{macrocode}
+% In multilingual setups it might be better to use the font
+% encoding scheme T1 which uses 256 characters per font.
+% By default latin1 input encoding is used. If you need something
+% else, this can be disabled.
+% \changes{v2.00}{2000/04/11}{Added options latin1/nolatin1. Michael
+% N{\"{u}}sken, Paderborn}
+% \begin{macrocode}
+\DeclareOption{multilingual}{\ExecuteOptions{T1,latin1,babel}}
+\DeclareOption{nomultilingual}{\ExecuteOptions{OT1,nolatin1,nobabel}}
+\DeclareOption{T1}{\@Tonetrue}
+\DeclareOption{OT1}{\@Tonefalse}
+\DeclareOption{latin1}{\@latintrue}
+\DeclareOption{nolatin1}{\@latinfalse}
+\DeclareOption{babel}{\@babeltrue}
+\DeclareOption{nobabel}{\@babelfalse}
+% \end{macrocode}
+% The \AMS{} packages \Lpackage{amsmath}, \Lpackage{amsfonts} and
+% \Lpackage{amssymb} provide many useful features. Whether they are
+% loaded or not is determined by the following two options.
+% \begin{macrocode}
+\DeclareOption{ams}{\@amstrue}
+\DeclareOption{noams}{\@amsfalse}
+% \end{macrocode}
+% With \Lclo{autotitle} |\maketitle| and |\makeendtitle| are called
+% automatically at the beginning or end of the document, respectively.
+% \begin{macrocode}
+\DeclareOption{autotitle}{\@autotitletrue}
+\DeclareOption{noautotitle}{\@autotitlefalse}
+% \end{macrocode}
+% Sectioning for \cc{} is different from standard settings. The
+% following options turn this on or off.
+% \begin{macrocode}
+\DeclareOption{ccsectioning}{\@ccsectioningtrue}
+\DeclareOption{noccsectioning}{\@ccsectioningfalse}
+% \end{macrocode}
+% Citation and bibliography can be done either with the
+% \Lpackage{natbib} package by Richard W. Daly, or with the old \cc{}
+% macros, or with standard \LaTeX{}.
+% \changes{v2.01}{2001/08/28}{Added undocumented manualbibliography.
+% Michael N{\"{u}}sken, Paderborn.}
+% \changes{v2.02}{2001/12/13}{Added twocolumnbibliography.
+% Michael N{\"{u}}sken, Paderborn.}
+% \begin{macrocode}
+\DeclareOption{natbib}{\@natbibtrue\@cccitefalse}
+\DeclareOption{nonatbib}{\@natbibfalse\@cccitefalse}
+\DeclareOption{cccite}{\@natbibfalse\@cccitetrue}
+\DeclareOption{nocccite}{\@natbibfalse\@cccitefalse}
+\DeclareOption{manualbibliography}{\@manualbibliographytrue}
+\DeclareOption{twocolumnbibliography}{\@twocolumnbibliographytrue}
+\DeclareOption{onecolumnbibliography}{\@twocolumnbibliographyfalse}
+% \end{macrocode}
+% With \Lenv{natbib} you can choose whether you want multiple
+% citations unsorted, sorted or compressed.
+% \begin{macrocode}
+\DeclareOption{nosort}{%
+ \def\@natbibsort{}}
+\DeclareOption{sort}{%
+ \def\@natbibsort{\PassOptionsToPackage{sort}{natbib}}}
+\DeclareOption{sort&compress}{%
+ \def\@natbibsort{\PassOptionsToPackage{sort&compress}{natbib}}}
+% \end{macrocode}
+% Theorem like environments for \cc{} are different from standard
+% settings. The following options turn this on or off.
+% \changes{v2.01}{2000/06/28}{Added cctheorems+separatelycounted.
+% Michael N{\"{u}}sken, Paderborn.}
+% \begin{macrocode}
+\DeclareOption{cctheorems}{\@cctheoremstrue\@standardtheoremstrue}
+\DeclareOption{cctheorems+separatelycounted}{%
+ \@cctheoremstrue\@standardtheoremsfalse}
+\DeclareOption{nocctheorems}{\@cctheoremsfalse}
+% \end{macrocode}
+% By default theorem-like environment are counted with equations.
+% The following options turn this on or off.
+% \changes{v2.02}{2001/12/06}{Added separateequationcounting.
+% Michael N{\"{u}}sken, Paderborn.}
+% \begin{macrocode}
+\DeclareOption{separateequationcounting}{\@ccnosepeqncntfalse}
+\DeclareOption{noseparateequationcounting}{\@ccnosepeqncnttrue}
+% \end{macrocode}
+% Theorem like environments for \cc{} are different from standard
+% settings. The following options turn this on or off.
+% \begin{macrocode}
+\DeclareOption{ccalgorithms}{\@ccalgotrue}
+\DeclareOption{noccalgorithms}{\@ccalgofalse}
+% \end{macrocode}
+% See \Lpackage{ccthm} below for the effect of these options.
+% \begin{macrocode}
+\DeclareOption{theoremitemprefixes}{%
+ \PassOptionsToPackage{\CurrentOption}{ccthm}}
+\DeclareOption{notheoremitemprefixes}{%
+ \PassOptionsToPackage{\CurrentOption}{ccthm}}
+\DeclareOption{enhancedprefixes}{% old
+ \PassOptionsToPackage{theoremitemprefixes}{ccthm}}
+\DeclareOption{standardprefixes}{% old
+ \PassOptionsToPackage{notheoremitemprefixes}{ccthm}}
+% \end{macrocode}
+% \cc{} requires received date, author, title, abstract, keywords,
+% and subject classification. With \Lclo{noccpublish} these things
+% are optional.
+% \begin{macrocode}
+\DeclareOption{ccpublish}{\@ccpublishtrue}
+\DeclareOption{noccpublish}{\@ccpublishfalse}
+% \end{macrocode}
+% \Lclo{cctextarea} means that the text part of the page is exactly as
+% specified for \cc{}, it is the default with the class. It's
+% counterpart \Lclo{nocctextarea} is the default with the package
+% version and with all options \Lclo{*paper}.
+% \changes{v2.01}{2001/02/22}{Added options cctextarea/nocctextarea.
+% Michael N{\"{u}}sken, Paderborn}
+%
+% \Lclo{classicalmargins} are as with the old \file{cc.sty}.
+% \Lclo{printmargins} are as in the printed version, while
+% \Lclo{balancedmargins} uses equal |\oddsidemargin| and
+% |\evensidemargin|.
+% \begin{macrocode}
+\DeclareOption{cctextarea}{\@cctextareatrue}
+\DeclareOption{nocctextarea}{\@cctextareafalse}
+\DeclareOption{noothermargins}{\@marginmode\m@ne}
+\DeclareOption{classicalmargins}{\@marginmode\z@}
+\DeclareOption{printmargins}{\@marginmode\@ne}
+\DeclareOption{balancedmargins}{\@marginmode\tw@}
+% \end{macrocode}
+% The following options are passed to the document class
+% \Lclass{article}. Since we prefer \Lclo{12pt}, the size options
+% are handled slightly different.
+% \begin{macrocode}
+\DeclareOption{10pt}{\def\@ccptsize{10}}
+\DeclareOption{11pt}{\def\@ccptsize{11}}
+\DeclareOption{12pt}{\def\@ccptsize{12}}
+\DeclareOption{a4paper}{\@cctextareafalse%
+ \PassOptionsToClass{\CurrentOption}{article}}
+\DeclareOption{a5paper}{\@cctextareafalse%
+ \PassOptionsToClass{\CurrentOption}{article}}
+\DeclareOption{b5paper}{\@cctextareafalse%
+ \PassOptionsToClass{\CurrentOption}{article}}
+\DeclareOption{letterpaper}{\@cctextareafalse%
+ \PassOptionsToClass{\CurrentOption}{article}}
+\DeclareOption{legalpaper}{\@cctextareafalse%
+ \PassOptionsToClass{\CurrentOption}{article}}
+\DeclareOption{executivepaper}{\@cctextareafalse%
+ \PassOptionsToClass{\CurrentOption}{article}}
+\DeclareOption{landscape}{\@cctextareafalse%
+ \PassOptionsToClass{\CurrentOption}{article}}
+\DeclareOption{oneside}{\@twosidefalse}
+\DeclareOption{twoside}{\@twosidetrue}
+\DeclareOption{leqno}{%
+ \PassOptionsToClass{\CurrentOption}{article}%
+ \PassOptionsToPackage{\CurrentOption}{amsmath}%
+ }
+\DeclareOption{reqno}{%
+ \PassOptionsToClass{\CurrentOption}{article}%
+ \PassOptionsToPackage{\CurrentOption}{amsmath}%
+ }
+\DeclareOption*{\OptionNotUsed
+ \PassOptionsToClass{\CurrentOption}{article}}
+% \end{macrocode}
+% Now, all options are defined. We execute the default options.
+% \begin{macrocode}
+\ifclass
+\ExecuteOptions{a4paper,12pt,cctextarea,balancedmargins,twoside,%
+ OT1,nolatin1,nobabel,%
+ localnumbering,bare,%
+ leqno,ams,ccpublish,cclayout,autotitle,ccsectioning,%
+ onecolumnbibliography,natbib,sort&compress,%
+ cctheorems,theoremitemprefixes,noseparateequationcounting,%
+ ccalgorithms}
+\else
+\ExecuteOptions{a4paper,12pt,nocctextarea,balancedmargins,twoside,%
+ OT1,nolatin1,nobabel,%
+ localnumbering,bare,%
+ leqno,ams,noccpublish,nocclayout,noautotitle,ccsectioning,%
+ onecolumnbibliography,natbib,sort&compress,%
+ cctheorems,theoremitemprefixes,noseparateequationcounting,%
+ ccalgorithms}
+\fi
+% \end{macrocode}
+% Then we process the class options.
+% \begin{macrocode}
+\ProcessOptions\relax
+% \end{macrocode}
+% Finally, the pointsize is passed to the \Lclass{article} class and
+% the sorting mode to the \Lpackage{natbib} package.
+% \changes{v2.00}{2000/04/11}{Changed \cs{@ptsize} to
+% \cs{@ccptsize}. Michael N{\"{u}}sken, Paderborn.}
+% \begin{macrocode}
+\PassOptionsToClass{\@ccptsize pt}{article}
+\if@twoside
+\PassOptionsToClass{twoside}{article}
+\else
+\PassOptionsToClass{oneside}{article}
+\fi
+\let\@ccptsize\@undefined
+\@natbibsort
+\let\@natbibsort\@undefined
+% \end{macrocode}
+% Give a warning when using weird features.
+% \changes{v2.01}{2000/06/28}{Added warning for cctheorems+separatelycounted.
+% Michael N{\"{u}}sken, Paderborn.}
+% \begin{macrocode}
+\if@standardtheorems\else
+ \ClassWarning{cc}{You are using the non documented
+ feature\MessageBreak
+ cctheorems+separatelycounted.\MessageBreak
+ It is recommended not to use this.}
+\fi
+% \end{macrocode}
+%
+% \subsection{Logo}
+%
+% \begin{macro}{\cc}
+% This is the logo of \cc{}.
+% \begin{macrocode}
+\newcommand{\cc}{\textsf{computational complexity}}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Class and packages}
+%
+% We load the document class \Lclass{article}.
+% \begin{macrocode}
+\ifclass
+\LoadClass{article}[1999/01/07 v1.4a]
+\fi
+% \end{macrocode}
+% Optionally, the font encoding is switched to T1. In any case, we
+% use input encoding |latin1|, thus Umlaute and other special
+% characters have a defined value.
+% \changes{v2.00}{2000/04/11}{Made inputenc optional. Michael
+% N{\"{u}}sken, Paderborn}
+% \changes{v2.00}{2000/06/21}{Added \cs{babel}\cs{def} and
+% definitions for english and german words. Michael N{\"{u}}sken,
+% Paderborn}
+% \changes{v2.01}{2000/09/15}{Forbid loading of german by pretending
+% that this has been done already.
+% Michael N{\"{u}}sken, Paderborn}
+% \begin{macrocode}
+\if@Tone
+\RequirePackage[T1]{fontenc}
+\fi
+%%german.sty is not allowed. Use global options:
+%%multilingual,german.
+\@pass@ptions\@pkgextension{}{german}
+\global\expandafter\let\csname ver@german.\@pkgextension\endcsname\@empty
+\if@babel
+\RequirePackage{babel}
+\fi
+\if@latin
+% make this optional? yes.
+\RequirePackage[latin1]{inputenc}[1998/03/05 v0.97]
+\fi
+% \end{macrocode}
+% Next, we load the \AMS{} packages if required. If not we define
+% some commands that we need and that would have been provided by
+% these packages.
+% \begin{macrocode}
+\if@ams
+\RequirePackage{amsmath}[2000/01/15 v2.05]% 1997/03/20 v1.2d
+% amsmath contains amstext, amsgen, amsbsy, amsopn
+\RequirePackage{amsfonts}[1997/09/17 v2.2e]
+\RequirePackage{amssymb}[1996/11/03 v2.2b]
+\else
+\newcommand{\numberwithin}[3][\arabic]{%
+ \@ifundefined{c@#2}{\@nocounterr{#2}}{%
+ \@ifundefined{c@#3}{\@nocnterr{#3}}{%
+ \@addtoreset{#2}{#3}%
+ \expandafter\xdef\csname the#2\endcsname{%
+ \expandafter\noexpand\csname the#3\endcsname%
+ .\noexpand#1{#2}}}}%
+}
+%% \def\numberwithin#1#2{\@ifundefined{c@#1}{\@nocounterr{#1}}{%
+%% \@ifundefined{c@#2}{\@nocnterr{#2}}{%
+%% \@addtoreset{#1}{#2}%
+%% \toks@\expandafter\expandafter\expandafter{\csname the#1\endcsname}%
+%% \expandafter\xdef\csname the#1\endcsname
+%% {\expandafter\noexpand\csname the#2\endcsname
+%% .\the\toks@}}}}
+\let\@ifempty\cc@ifempty
+\let\@ifnotempty\cc@ifnotempty
+\let\bigstar\bullet
+\let\lozenge\circ
+\def\square{{\fboxsep.3em{\vbox{\hbox{\fbox{}}\vskip0pt}}}}
+\let\text\mbox% This is a poor man's version!
+\fi
+% \end{macrocode}
+% \begin{macro}{\email}
+% \begin{macro}{\homepage}
+% The package \Lpackage{url} defines macros to handle URLs and so
+% on. We also use this for email addresses and home page
+% addresses.
+% \changes{v2.00}{2000/04/04}{Modified \cs{UrlSpecials} as proposed by
+% Paul Daly. Michael N{\"{u}}sken, Paderbon}
+% \begin{macrocode}
+\RequirePackage{url}[1999/03/02 ver 1.4]
+\expandafter\def\expandafter\UrlSpecials\expandafter{%
+ \UrlSpecials\do\%{}}
+\providecommand{\email}{\begingroup\urlstyle{tt}\Url}
+\providecommand{\homepage}{\begingroup\scriptsize\urlstyle{tt}\Url}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Fixed fonts}
+%
+% \begin{macro}{\ixpt}
+% \begin{macro}{\xptsfbx}
+% \begin{macro}{\textsfbx}
+% For the (over)headline of the first page of an article and for
+% the logo, some special font commands are needed. |\ixpt|
+% switches to 9pt fonts, |\xptsfbx| switches to 10pt sans serif font,
+% and |\textsfbx| switches to bold sans serif font.
+% \begin{macrocode}
+\providecommand{\ixpt}{\@setfontsize\ixpt\@ixpt{11}}
+\newcommand{\xptsfbx}{%
+ \@setfontsize\xpt\@xpt{12}\usefont{OT1}{cmss}{bx}{n}}
+\DeclareTextFontCommand{\textsfbx}{\usefont{OT1}{cmss}{bx}{n}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Macros to collect data}
+%
+% Most of the code for page layout is in the package
+% \Lpackage{cclayout}.
+% \begin{macrocode}
+\if@cclayout
+\RequirePackage{cclayout}
+\else
+% \end{macrocode}
+% \begin{macro}{\ps@cc}
+% A variant of the page style \texttt{cc} is defined. Use
+% |\newcommand{\cctitlehead}{|\meta{title text}|}| to specify the
+% text for the running heads, and
+% |\newcommand{\ccauthorhead}{|\meta{author(s)}|}| to specify the
+% authors for the running heads.
+% \begin{macrocode}
+\newskip\headerindent \headerindent=10mm
+\newdimen\headrulewidth \headrulewidth.4pt
+\def\cctitlehead{}
+\def\ccauthorhead{}
+\def\ps@cc{\let\@mkboth\markboth
+ \def\@oddhead{\vbox{\hbox to\textwidth{\reset@font\strut
+ \null
+ \hfil
+ {\small\cctitlehead}%
+ \hbox to\headerindent{\hfil\thepage}%
+ }%
+ \if@ccpublish\else
+ \kern2.6\p@
+ \hrule\@height\headrulewidth\kern-\headrulewidth
+ \kern-2.6\p@
+ \fi
+ \vskip\z@
+ }%
+ }%
+ \def\@oddfoot{}
+ \def\@evenhead{\vbox{\hbox to\textwidth{\reset@font\strut
+ \hbox to\headerindent{\thepage\hfil}%
+ {\small\ccauthorhead}%
+ \hfil
+ \null
+ }%
+ \if@ccpublish\else
+ \kern2.6\p@
+ \hrule\@height\headrulewidth\kern-\headrulewidth
+ \kern-2.6\p@
+ \fi
+ \vskip\z@
+ }%
+ }%
+ \let\@evenfoot\@oddfoot
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fi%@cclayout
+% \end{macrocode}
+%
+%
+% \subsection{Sectioning}
+%
+% \begin{macrocode}
+\if@ccsectioning
+% \end{macrocode}
+% For \cc{} we use different layout for |\section|, |\subsection| and
+% |\subsubsection| titles.
+% \begin{macrocode}
+\def\@seccntformat#1{\csname the#1\endcsname.\enskip}
+% \end{macrocode}
+% \begin{macro}{\section}
+% Section titles are |\large|, |\bfseries| and centered.
+% \begin{macrocode}
+\renewcommand{\section}{\@startsection{section}{1}{\z@}%
+ {-2.9ex\@plus-.5ex\@minus-.2ex}%
+ {1.5ex\@plus.5ex\@minus.2ex}%
+ {\normalfont\large\bfseries\centering}}
+% \ifclass\else
+% \renewcommand \thesection {\@arabic\c@section}
+% \fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\subsection}
+% \begin{macro}{\subsubsection}
+% Subsection and subsubsection titles are |\bfseries| and embedded in
+% the text with 1~em distance. And these text embedded titles shall
+% always terminate with a full stop.
+% \begin{macrocode}
+\def\dot@sect#1#2#3#4#5#6[#7]#8{%
+ \let\@sect\ccorg@sect\let\@ssect\ccorg@ssect
+ \@sect{#1}{#2}{#3}{#4}{#5}{#6}[#7]{#8.}}
+\def\dot@ssect#1#2#3#4#5{%
+ \let\@sect\ccorg@sect\let\@ssect\ccorg@ssect
+ \@ssect{#1}{#2}{#3}{#4}{#5.}}
+\def\add@dot{%
+ \let\ccorg@sect\@sect\let\ccorg@ssect\@ssect
+ \let\@sect\dot@sect\let\@ssect\dot@ssect}
+\renewcommand{\subsection}{%
+ \add@dot
+ \@startsection{subsection}{2}{\z@}%
+ {2.33ex\@plus.5ex\@minus.2ex}% was 12pt +-
+ {-1em}%
+ {\normalfont\normalsize\bfseries}}
+\renewcommand{\subsubsection}{%
+ \add@dot
+ \@startsection{subsubsection}{3}{\z@}%
+ {1.55ex\@plus.5ex\@minus.2ex}% was 8pt +-
+ {-1em}%
+ {\normalfont\normalsize\bfseries}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\paragraph}
+% \begin{macro}{\subparagraph}
+% Paragraphs and subparagraphs are inherited from the class.
+% \begin{macrocode}
+\fi%@ccsectioning
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Bibliography and citations}
+%
+% The preferred access to bibliography and citations is via the
+% package \Lpackage{natbib}. It provides much more flexibility for
+% the user and works with almost every bibliography style.
+% \changes{v2.01}{2001/08/28}{Added undocumented manualbibliography.
+% Michael N{\"{u}}sken, Paderborn.}
+% \begin{macrocode}
+\if@natbib
+\RequirePackage{cc2cite}
+\if@manualbibliography
+\bibpunct{[}{]}{;}{n}{}{,}
+\fi
+\else%@natbib
+\if@cccite
+% \end{macrocode}
+%
+% The package \Lpackage{cccite} contains the definitions for the
+% informative citation style like `Cook (1971)'. It also issues
+% |\bibliographystyle{\bibstyle@default}|, if no other style is
+% defined before the |\bibliography| command.
+% \begin{macrocode}
+\RequirePackage{cccite}
+% \end{macrocode}
+%
+% \begin{environment}{thebibliography}
+% We redefine this envrionment in order to reflect the citation
+% scheme given by \Lpackage{cccite} and to allow also the
+% alternative style using numbers.
+% \changes{v0.90}{1999/11/11}{Added \cs{condbreak\{8ex\}}. Michael
+% N{\"{u}}sken, Paderborn}
+% \changes{v0.90}{2000/01/12}{Added toc entry. Michael N{\"{u}}sken,
+% Paderborn}
+% \begin{macrocode}
+\renewcommand{\thebibliography}[1]{%
+ \condbreak{8ex}%
+ \section*{\refname
+ \addcontentsline{toc}{section}{\refname}%
+ \@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}}%
+ \vskip-\lastskip
+ \list{[\@arabic\c@enumiv] }%
+ {%
+ \labelwidth\z@
+ \labelsep\z@
+ \leftmargin\z@
+ \@openbib@code
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty
+ \renewcommand\theenumiv{\@arabic\c@enumiv}%
+ }%
+ \sloppy
+ \clubpenalty4000
+ \@clubpenalty \clubpenalty
+ \widowpenalty4000
+ \sfcode`\.\@m
+ \bibfont}
+\let\bibfont\small
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\@bibitem}
+% Check whether this macro still is what we suppose it to be. It
+% is responsible for typesetting bibliography items that have to
+% be numbered
+% \begin{macrocode}
+\CheckCommand*\@bibitem[1]{\item\if@filesw \immediate\write\@auxout
+ {\string\bibcite{#1}{\the\value{\@listctr}}}\fi\ignorespaces}
+% \end{macrocode}
+% We redefine it, in order to procude brackets for the labels if no
+% one is specified.
+% \begin{macrocode}
+\def\@bibitem#1{\item\if@filesw \immediate\write\@auxout
+ {\string\bibcite{#1}{[\the\value{\@listctr}]}}\fi\ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+% It is also possible to omit both, \Lpackage{natbib} and
+% \Lpackage{cccite}. Then only standard \LaTeXe{} citation and
+% bibliography are available. (However, \Lpackage{natbib} should
+% even then work fine, so: use it.)
+% \begin{macrocode}
+\else
+ \relax
+\fi%@cccite
+\fi%@natbib
+% \end{macrocode}
+% Optionally, we also provide a twocolumn bibliography.
+% \changes{v2.02}{2001/12/13}{Added twocolumnbibliography.
+% Michael N{\"{u}}sken, Paderborn.}
+% \begin{macrocode}
+\if@twocolumnbibliography
+\RequirePackage{multicol}
+\newenvironment{nthebibliography}{%
+ \footnotesize
+ \let\bibfont\footnotesize
+ \let\section\subsubsection
+ \begin{multicols}2
+ \othebibliography}
+ {%
+ \vfill\vfill\vfill\vfill
+ \endothebibliography
+ \end{multicols}}
+\AtBeginDocument{%
+ \let\othebibliography\thebibliography
+ \let\endothebibliography\endthebibliography
+ \let\thebibliography\nthebibliography
+ \let\endthebibliography\endnthebibliography}
+\fi
+% \end{macrocode}
+%
+% \subsection{Referencing}
+%
+% \begin{macro}{\defprefix}
+% \LaTeX{} already defined the features for nice references, although
+% they were not really used. The package \Lpackage{relabel} provides
+% some macros to use these features. Especially, a macro
+% |\defprefix| is defined which allows to define a prefix for the
+% label of a counter:
+% |\defprefix{|\meta{counter}|}|\meta{definition}.
+% \changes{v2.01}{2000/09/15}{Internationalized prefixes.
+% Michael N{\"{u}}sken, Paderborn}
+% \changes{v2.01}{2000/11/28}{Added \cs{chaptername}.
+% Michael N{\"{u}}sken, Paderborn}
+% \begin{macrocode}
+\RequirePackage{relabel}[1998/09/07 v1.01]
+\let\nref\ref
+% \end{macrocode}
+% \end{macro}
+% We define prefixes for the standard counters.
+% \begin{macrocode}
+\babel\def\partname{Part}[german=Teil,french=\protect\@Fpt partie]
+\defprefix{part}{\partname~}
+\babel\def\chaptername{Chapter}[german=Kapitel,french=Chapitre]
+\defprefix{chapter}{\chaptername~}
+\babel\def\sectionname{Section}[german=Abschnitt,french=Section]
+\defprefix{section}{\sectionname~}
+\babel\def\subsectionname{Section}[german=Abschnitt,french=Section]
+\defprefix{subsection}{\subsectionname~}
+\babel\def\subsubsectionname{Section}[german=Abschnitt,french=Section]
+\defprefix{subsubsection}{\subsubsectionname~}
+\let\ccorg@appendix\appendix
+\babel\def\appendixname{Appendix}[german=Anhang,french=Annexe]
+\def\appendix{%
+ \defprefix{section}{\appendixname~}%
+ \defprefix{subsection}{\appendixname~}%
+ \defprefix{subsubsection}{\appendixname~}%
+ \ccorg@appendix}
+\defprefix{equation}#1{(#1)}
+\babel\def\figurename{Figure}[german=Figur,french={\scshape Figure}]
+\defprefix{figure}{\figurename~}
+\babel\def\tablename{Table}[german=Tafel,french={\scshape Table}]
+\defprefix{table}{\tablename~}
+\numberallwithin{section}
+\AtBeginDocument{\@adjustnumbering}
+% \end{macrocode}
+% \subsection{Theorems, Proofs and Algorithms}
+%
+% All these things are imported.
+% \begin{macrocode}
+\if@cctheorems
+\RequirePackage{ccthm}
+\RequirePackage{ccproof}
+\fi
+\if@ccalgo
+\RequirePackage{ccalgo}
+\fi
+% \end{macrocode}
+%
+% \subsection{Other}
+%
+% \begin{environment}{acknowledge}
+% This environment simply constitues of an unnumbered section.
+% \begin{macrocode}
+\babel\def\ccacknowledgementsname{Acknowledgements}[%
+ german=Danksagung,french=Remerciements]
+\newenvironment{acknowledge}{\section*{\ccacknowledgementsname}}{}
+% \end{macrocode}
+% \end{environment}
+%
+% Label items in itemized lists with open circle.
+% \begin{macrocode}
+\def\labelitemi{$\circ$}
+% \end{macrocode}
+%
+% Set length of footnoterule, shorter than the default.
+% \begin{macrocode}
+\def\footnoterule{\kern-3\p@\hrule\@width18mm\kern 2.6\p@}
+% \end{macrocode}
+%
+% \begin{macro}{\include}
+% In \cc{}, we do not want to waste any place, so we redefine
+% |\include| to be |\input| then.
+% \begin{macrocode}
+\let\ccorg@include\include
+\newwarning{warn@include}{Note that \protect\include\space is equivalent
+ to \protect\input\space.}
+\renewcommand{\include}{%
+ \if@ccpublish
+ \ccClassWarning{warn@include}%
+ \let\next\input
+ \else
+ \let\next\ccorg@include
+ \fi
+ \next}
+% \end{macrocode}
+% \end{macro}
+%
+% Forget the class toggle.
+% \begin{macrocode}
+% \let\ifclass\@undefined
+% \let\classtrue\@undefined
+% \let\classfalse\@undefined
+%</cccls>
+% \end{macrocode}
+%
+% \def\filename{ccaux.sty}
+% \CodelinePrefix{H}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+%
+% It contains some definitions that are needed in several other files
+% of our macro package.
+% \changes{v2.03}{2002/01/08}{New Package \lpackage{ccaux}
+% collects some definitions that are needed by several other files.
+% Michael N{\"{u}}sken, Paderborn}
+% \begin{macrocode}
+%<*ccaux>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{ccaux}[2005/08/27 v2.04
+ computational complexity, auxiliaries.
+ Michael Nuesken, Bonn.]
+% \end{macrocode}
+%
+% \subsection{New ifs for document class options}
+%
+% \begin{macrocode}
+\newif\if@longarticle \@longarticletrue
+\newif\if@cclayout \@cclayouttrue
+\newif\if@Tone \@Tonetrue
+\newif\if@latin \@latintrue
+\newif\if@babel \@babelfalse
+\newif\if@ams \@amstrue
+\newif\if@autotitle \@autotitletrue
+\newif\if@ccsectioning \@ccsectioningtrue
+\newif\if@cccite \@cccitefalse
+\newif\if@natbib \@natbibtrue
+\newif\if@manualbibliography \@manualbibliographyfalse
+\newif\if@twocolumnbibliography \@twocolumnbibliographyfalse
+\newif\if@cctheorems \@cctheoremstrue
+\newif\if@standardtheorems \@standardtheoremstrue
+\newif\if@ccnosepeqncnt \@ccnosepeqncnttrue
+\newif\if@ccalgo \@ccalgotrue
+\newif\if@theoremitemprefixes \@theoremitemprefixestrue
+\newif\if@ccpublish \@ccpublishfalse
+\newif\if@cctextarea \@cctextareatrue
+\newcount\@marginmode \@marginmode\tw@
+% \end{macrocode}
+%
+% \subsection{Number equations and theorems within sections or chapter}
+% In long articles, equations and theorems which also use this
+% counter, figures and tables shall be numbered within sections.
+% \changes{v2.01}{2000/06/28}{Added handling for cctheorems+separatelycounted.
+% Michael N{\"{u}}sken, Paderborn.}
+% \changes{v2.03}{2002/01/09}{Introduced macro \cs{ccTOPLEVEL}.
+% Michael N{\"{u}}sken, Paderborn.}
+% \changes{v2.03}{2002/01/24}{Introduced macros \cs{numberallwithin}
+% and \cs{@adjustnumbering}. Renamed \cs{ccTOPLEVEL} to
+% \cs{cc@numberingtoplevel} and moved these things to ccaux.
+% Michael N{\"{u}}sken, Paderborn.}
+% \begin{macrocode}
+\def\numberallwithin#1{\gdef\cc@numberingtoplevel{#1}}
+\def\@adjustnumbering{%
+ \if@longarticle
+ \numberwithin{equation}\cc@numberingtoplevel
+ \numberwithin{figure}\cc@numberingtoplevel
+ \numberwithin{table}\cc@numberingtoplevel
+ \if@cctheorems\if@standardtheorems\else
+ \numberwithin{answer}\cc@numberingtoplevel
+ \numberwithin{assumption}\cc@numberingtoplevel
+ \numberwithin{claim}\cc@numberingtoplevel
+ \numberwithin{conjecture}\cc@numberingtoplevel
+ \numberwithin{convention}\cc@numberingtoplevel
+ \numberwithin{corollary}\cc@numberingtoplevel
+ \numberwithin{counterexample}\cc@numberingtoplevel
+ \numberwithin{definition}\cc@numberingtoplevel
+ \numberwithin{exercise}\cc@numberingtoplevel
+ \numberwithin{fact}\cc@numberingtoplevel
+ \numberwithin{hypothesis}\cc@numberingtoplevel
+ \numberwithin{lemma}\cc@numberingtoplevel
+ \numberwithin{notation}\cc@numberingtoplevel
+ \numberwithin{note}\cc@numberingtoplevel
+ \numberwithin{observation}\cc@numberingtoplevel
+ \numberwithin{open}\cc@numberingtoplevel
+ \numberwithin{openquestion}\cc@numberingtoplevel
+ \numberwithin{problem}\cc@numberingtoplevel
+ \numberwithin{proposition}\cc@numberingtoplevel
+ \numberwithin{question}\cc@numberingtoplevel
+ \numberwithin{remark}\cc@numberingtoplevel
+ \numberwithin{result}\cc@numberingtoplevel
+ \numberwithin{theorem}\cc@numberingtoplevel
+ \numberwithin{thesis}\cc@numberingtoplevel
+ \numberwithin{warning}\cc@numberingtoplevel
+ \numberwithin{exampleexample}\cc@numberingtoplevel
+ \fi\fi
+\fi}
+\numberallwithin{section}% redo this in the preamble, if necessary
+% \end{macrocode}
+%
+% \subsection{Warnings}
+%
+% \changes{v2.01}{2000/09/11}{Now some warnings are collected until
+% the end \dots{} Michael N{\"{u}}sken, Paderborn}
+% \begin{macro}{\newwarning}
+% Define a warning message.
+% \begin{macrocode}
+\newcommand{\newwarning}[2]{%
+ \expandafter\gdef\csname cc@warn@#1\endcsname{#2}%
+ \expandafter\def\csname cc@warncount@#1\endcsname{0}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ccwarning}
+% Issue a warning.
+% \begin{macrocode}
+\newcommand{\ccClassWarning}[1]{%
+ \@ifundefined{cc@warn@#1}{%
+ \ClassWarning{cc}{Undefined warning.\MessageBreak
+ This should never occur.
+ Please inform nuesken@bit.uni-bonn.de .}%
+ }{}%
+ \expandafter\ifcase\csname cc@warncount@#1\endcsname\relax
+ \ClassWarning{cc}{\csname cc@warn@#1\endcsname.\MessageBreak
+ Possible further occurencies of this warning will be\MessageBreak
+ collected until the end of the document.\MessageBreak
+ This one was}%
+ \or
+ \AtEndDocument{%
+ \ClassWarningNoLine{cc}{Repeated warning collected \csname
+ cc@warncount@#1\endcsname\space times:\MessageBreak
+ \csname cc@warn@#1\endcsname}%
+ }%
+ \else
+ \fi
+ \expandafter\count@=0\csname cc@warncount@#1\endcsname\relax
+ \advance\count@\@ne
+ \expandafter\xdef\csname cc@warncount@#1\endcsname{\the\count@}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Diverse}
+%
+% \changes{v2.03}{2002/01/10}{Fixed bug: \cs{if@babel} is not properly
+% set when this is called, removed non-babel case. Michael
+% N{\"{u}}sken, Paderborn}
+% \changes{v2.03}{2002/03/07}{Added languages french, italian and
+% spanish to \cs{babel}\cs{def} and adjusted for it. Michael
+% N{\"{u}}sken, Paderborn}
+% \changes{v2.03}{2003/06/04}{Fixed bug: if babel is not loaded now
+% but will be later, then \cs{addto} must put its definitions in a
+% temporary macro and add it to the appropriate one only after the
+% preamble if the desired macro is defined by then and forget about
+% it otherwise.}
+% \changes{v2.03}{2004/06/21}{\cs{ccaddto} must not call
+% \cs{AtBeginDocument} when called inside the document (as for example
+% happens in algorithms...)}
+% \begin{macrocode}
+% \providecommand{\extdef}[2]{%
+% \ifx#1\@undefined\relax\def#1{}\fi%
+% \toks@=\expandafter{#1}%
+% \toks255={#2}%
+% \edef#1{\the\toks@\the\toks255}}
+\providecommand{\addto}[2]{%
+ \expandafter\ccaddto\expandafter{\csname
+ cc@\string#1\endcsname}{#2}{#1}}
+% \ccaddto is almost a copy of babel's \addto.
+% It's arguments are #1 = \cc@\FOO, #2=material, #3 = \FOO,
+% where \FOO is the macro where the material should be added and
+% \cc@\FOO the temporary macro to hold thing until the beginning of
+% the document. (Hopefully not too late for the first selectlanguage!)
+\newcommand{\ccaddto}[3]{%
+ \ifx#1\@undefined
+ \def#1{#2}%
+ \AtBeginDocument{\expandafter\ccaddtonow\expandafter{#1}#3}%
+ \else
+ \ifx#1\relax
+ \def#1{#2}%
+ \AtBeginDocument{\expandafter\ccaddtonow\expandafter{#1}#3}%
+ \else
+ {\toks@\expandafter{#1#2}%
+ \xdef#1{\the\toks@}}%
+ \fi
+ \fi
+}
+\newcommand{\ccaddtoINDOC}[3]{%
+ \ifx#1\@undefined
+ \def#1{#2}%
+ \else
+ \ifx#1\relax
+ \def#1{#2}%
+ \else
+ {\toks@\expandafter{#1#2}%
+ \xdef#1{\the\toks@}}%
+ \fi
+ \fi
+}
+\AtBeginDocument{\global\let\ccaddto\ccaddtoINDOC}
+\newcommand{\ccaddtonow}[2]{%
+ \ifx#2\@undefined
+ \def#2{#1}%
+ \else
+ \ifx#2\relax
+ \def#2{#1}%
+ \else
+ {\toks@\expandafter{#2#1}%
+ \xdef#2{\the\toks@}}%
+ \fi
+ \fi
+}
+% \@ifempty and \@ifnotempty are def'd in amsmath.sty, but we need it
+% here.
+\def\cc@ifempty#1{\cc@xifempty#1@@..\@nil}
+\long\def\cc@xifempty#1#2@#3#4#5\@nil{%
+ \ifx#3#4\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+\long\def\cc@ifnotempty#1{\cc@ifempty{#1}{}}
+% \end{macrocode}
+% \begin{macro}{\babel}
+% This shall simplify the addition of multilanguage support. A
+% macro |#1| that shall hold a name is assigned a version in
+% english |#2|, german |#3|, french |#4|, italian |#5|, and spanish
+% |#6|. The english version is the default. Each non-empty
+% version is added to the |\captions|\meta{language} of that
+% language.
+% Admittedly, this technique is limited. So we replace it\dots
+% \changes{v2.03}{2005/08/29}{Replaced \cs{babel}\cs{def} with a more
+% flexible construction.}
+% \begin{macrocode}
+%%% \def\oldbabel\def#1#2#3#4#5#6{\def#1{#2}%
+%%% \cc@ifnotempty{#2}{\addto\captionsenglish{\def#1{#2}}}%
+%%% \cc@ifnotempty{#3}{%
+%%% \addto\captionsgerman{\def#1{#3}}%
+%%% \addto\captionsngerman{\def#1{#3}}%
+%%% }%
+%%% \cc@ifnotempty{#4}{\addto\captionsfrench{\def#1{#4}}}%
+%%% \cc@ifnotempty{#5}{\addto\captionsitalian{\def#1{#5}}}%
+%%% \cc@ifnotempty{#6}{\addto\captionsspanish{\def#1{#6}}}%
+%%% }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\newbabel}
+% This shall simplify the addition of multilanguage support. A
+% macro |#1| that shall hold a name is assigned a version in
+% english |#2|. Further, that definition is added to
+% |\captionsenglish|. The optional argument |#3| is a comma
+% seperated list of equations \meta{language}=\meta{translation}.
+% Each non-empty translation is added to the
+% |\captions|\meta{language} of that language.
+% \begin{macrocode}
+\def\babel\def#1#2{%
+ \@ifnextchar[{\n@wbabel{#1}{#2}}{\n@wbabel{#1}{#2}[]}}
+\def\n@wbabel#1#2[#3]{%
+ \def#1{#2}%
+ \cc@ifnotempty{#2}{\addto\captionsenglish{\def#1{#2}}}%
+ \babeladdtranslations#1{#3}%
+}
+\def\b@beladdlang#1=#2=#3\@@@#4{%
+ \cc@ifnotempty{#2}{%
+ %%% \@ifundefined{captions#1}{%
+ %%% \ClassWarning{cc}{Language `#1' undefined, ignoring
+ %%% translation \string#4=#2.}%
+ %%% }{%
+ \expandafter\addto\csname captions#1\endcsname{\def#4{#2}}%
+ %%% }%
+ }%
+}
+% \end{macrocode}
+% You can use the macro |\babeladdtranslations| at any time to add
+% translations. Example:
+% \begin{center}
+% |\babeladdtranslations\treename{german=Baum,french=arbre}|
+% \end{center}
+% will add |\def\treename{Baum}| to |\captionsgerman| and so on.
+% \begin{macrocode}
+\def\babeladdtranslations#1#2{%
+ \@for\@tempa:=#2\do{\expandafter\b@beladdlang\@tempa==\@@@#1}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\condbreak}
+% This is H.~Partls |\condbreak| from \Lpackage{refman}
+% (\file{refman.sty}). Using |\condbreak{|\meta{length}|}| allows
+% a pagebreak if there is at most \meta{length} space left on the
+% current page.
+% \changes{v2.03}{2004/03/22}{Moved \cs{condbreak} to \lpackage{ccaux}}
+% \begin{macrocode}
+\def\condbreak#1{%
+ \vskip 0pt plus #1%
+ \pagebreak[3]%
+ \vskip 0pt plus -#1%
+ \relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{enumerate}
+% We extend the \Lenv{enumerate} by an optional |*|. This simply
+% continues a previously terminated \Lenv{enumerate}. Using
+% |\begin{enumerate}*| means that a previously terminated list is
+% continued.
+% \changes{v2.03}{2004/03/22}{Moved \lenv{enumerate} modification to
+% \lpackage{ccaux}}
+% \begin{macrocode}
+\let\ccorg@enumerate\enumerate
+\def\enumerate{\@ifstar{\count251\c@enumi
+ \count252\c@enumii
+ \count253\c@enumiii
+ \count254\c@enumiv
+ \ccorg@enumerate
+ \c@enumi\count251
+ \c@enumii\count252
+ \c@enumiii\count253
+ \c@enumiv\count254}%
+ {\ccorg@enumerate}}
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+%</ccaux>
+% \end{macrocode}
+%
+% \GetFileInfo{cclayout.sty}
+% \CodelinePrefix{L}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+%
+% \begin{macro}{\contact}
+% The following macros supplement the traditional |\author|,
+% |\title| and |\date| declarations. First, |\contact| declares the
+% email address of the contact author.
+% \begin{macrocode}
+%<*cclayout>
+\let\@contact\relax
+\newcommand{\contact}[1]{\gdef\@contact{#1}}
+\AtBeginDocument{\if@ccpublish
+ \@ifundefined{@contact}{%
+ \ClassWarningNoLine{cc}{Who is the contact author?\MessageBreak
+ Use \protect\contact\space in the preamble!}%
+ }{}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\received}
+% The macro |\received| stores its argument, the received date.
+% \begin{macrocode}
+\let\@received\relax
+\newcommand{\received}[1]{\gdef\@received{#1}}
+\AtBeginDocument{\if@ccpublish
+ \@ifundefined{@received}{%
+ \ClassWarningNoLine{cc}{Missing received date.\MessageBreak
+ Use \protect\received\space in the preamble.}{}%
+ }{}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\titlehead}
+% The following macros supplement the traditional |\author|,
+% |\title| and |\date| declarations. First, |\titlehead| can be
+% used to declare a shortened version of the title to be used in
+% the running head. It simply stores its argument in a macro.
+% \begin{macrocode}
+\let\@titlehead\relax
+\newcommand{\titlehead}[1]{\gdef\@titlehead{#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\authorhead}
+% |\authorhead| can be used to declare a different author list for
+% use in the head line. Usually, this should be automatically correct
+% without using this. It simply stores its argument in a macro.
+% \begin{macrocode}
+\let\@authorhead\@undefined
+\newcommand{\authorhead}[1]{\gdef\@authorhead{#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\authorlist}
+% |\authorlist| can be used to declare a different author list for
+% use in the title. Usually, this should be automatically correct
+% without using this. It simply stores its argument in a macro.
+% \begin{macrocode}
+\let\@authorlist\@undefined
+\newcommand{\authorlist}[1]{\gdef\@authorlist{#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{abstract}
+% \begin{macro}{\Abstract}
+% The abstract is declared by the environment \Lenv{abstract} or the
+% command |\Abstract{|\meta{text}|}|. It is required for \cc{},
+% otherwise optional (although you get a warning if there is no
+% abstract). (Note that the article class defines an abstract
+% environment while the book class does not.) Note that in the
+% environment \Lenv{abstract} |\cite| and |\ref| are not allowed!
+% You must use the command |\Abstract| if you need citation or
+% references. The environment \Lenv{abstract} simply stores its
+% contents in a box.
+% \begin{macrocode}
+\newbox\@abstract
+\let\abstract\@undefined\let\endabstract\@undefined
+\babel\def\ccabstractname{Abstract}[%
+ german=Zusammenfassung,french=R\'esum\'e]
+\newenvironment{abstract}
+ {\global\setbox\@abstract\@abstr{\ccabstractname}}
+ {\end@abstr}
+% \end{macrocode}
+% |\Abstract| stores its argument in a token list.
+% \begin{macrocode}
+\newtoks\@abstract@toks
+\newcommand{\Abstract}{\global\@abstract@toks}
+% \end{macrocode}
+% \end{macro}
+% \end{environment}
+% \begin{environment}{keywords}
+% Keywords are given using the environment \Lenv{keywords} which is
+% similar to \Lenv{abstract}. It simply stores its contents
+% in a box.
+% \begin{macrocode}
+\newbox\@keywords
+\babel\def\cckeywordsname{Keywords}[%
+ german=Stichworte,french=Mot-cl\'e]
+\newenvironment{keywords}
+ {\global\setbox\@keywords\@abstr{\cckeywordsname}}
+ {\end@abstr}
+% \end{macrocode}
+% \end{environment}
+% \begin{environment}{subject}
+% The environment \Lenv{subject} declares the subject
+% classification. It simply stores its contents
+% in a box.
+% \begin{macrocode}
+\newbox\@subject
+\babel\def\ccsubjectclassificationname{Subject classification}[%
+ german=Klassifizierung,french=Classification de suj\`et]
+\newenvironment{subject}
+ {\global\setbox\@subject\@abstr{\ccsubjectclassificationname}}
+ {\end@abstr}
+% \end{macrocode}
+% \end{environment}
+% \begin{environment}{@abstr}
+% The environment \Lenv{@abstr} is for internal use only. It puts
+% the contents in a box, preceded by its argument as a title.
+% \begin{macrocode}
+\newdimen\@abstrwidth
+\newenvironment{@abstr}[1]{%
+ \vbox\bgroup
+ \hsize\@abstrwidth
+ \@parboxrestore
+ \small
+ \textbf{#1. }\ignorespaces}
+{%
+ \strut\par
+ \vskip\z@
+ \egroup
+ \ignorespacesafterend}
+% \end{macrocode}
+% \end{environment}
+% \begin{macro}{\noabstract}
+% \begin{macro}{\nokeywords}
+% \begin{macro}{\nosubject}
+% Usually, abstract, keywords and subject classification are
+% optional. But when published in \cc{} they are required. The
+% following commands allow you to omit one or more of them without
+% getting an error message.
+% \begin{macrocode}
+\newif\if@abstractoptional
+\if@ccpublish\@abstractoptionalfalse\else\@abstractoptionaltrue\fi
+\newcommand{\noabstract}{\ClassWarning{cc}{You are using a non
+ documented feature}\@abstractoptionaltrue}
+\newif\if@keywordsoptional
+\if@ccpublish\@keywordsoptionalfalse\else\@keywordsoptionaltrue\fi
+\newcommand{\nokeywords}{\ClassWarning{cc}{You are using a non
+ documented feature}\@keywordsoptionaltrue}
+\newif\if@subjectoptional
+\if@ccpublish\@subjectoptionalfalse\else\@subjectoptionaltrue\fi
+\newcommand{\nosubject}{\ClassWarning{cc}{You are using a non
+ documented feature}\@subjectoptionaltrue}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\subtitle}
+% \begin{macro}{\version}
+% The macros |\subtitle| and |\version| allow to add a subtitle or
+% version below the title.
+% \begin{macrocode}
+\def\@subtitle{}
+\newcommand{\subtitle}[1]{\def\@subtitle{#1}}
+\def\@version{}
+\newcommand{\version}[1]{\def\@version{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\ccpublish}
+% The macro |\ccpublish| sets all data for an article to be published
+% in \cc{}.
+% \changes{v2.03}{2005/08/27}{Changed label at end of document to
+% |!end!document!| to avoid a problem with \lpackage{hyperref}.
+% (\lpackage{hyperref} does not allow |@| as part of label names.)}
+% \begin{macrocode}
+\def\@cctxt{}
+\newif\if@cchead
+\newcommand{\ccpublish}[4]{%
+ \global\@ccpublishtrue
+ \global\@abstractoptionalfalse% Abstract required
+ \global\@keywordsoptionalfalse% Keywords required
+ \global\@subjectoptionalfalse% Subject class. required
+ \global\@ccheadtrue
+ \gdef\@ccyear{#1}%
+ \gdef\@ccvolume{#2}%
+ \gdef\@ccnumber{#3}%
+ \gdef\@ccfirst{#4}%
+ \gdef\@cctxt{cc \textbf{#2} (#1)}%
+ \global\@autotitletrue
+ \AtBeginDocument{\addtocounter{section}{-1}\refstepcounter{section}}%
+ \AtEndDocument{\label{!end!document!}}%
+ }
+\newcommand{\noccpublish}[1]{%
+ \global\@ccpublishfalse
+ \global\@abstractoptionaltrue% Abstract required
+ \global\@keywordsoptionaltrue% Keywords required
+ \global\@subjectoptionaltrue% Subject class. required
+ \global\@ccheadfalse
+ \gdef\@cctxt{#1}%
+ %%\global\@twosidefalse
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\printed}
+% \begin{macro}{\electronic}
+% The printed and the electronic version of \cc{} have different
+% ISSNs. |\printed| and |\electronic| set the corresponding ISSN.
+% The ISSN for the printed version is preselected.
+% \begin{macrocode}
+\def\printed@issn{1016-3328}%
+\def\electronic@issn{1420-8954}%
+\newcommand{\printed}{\let\issn\printed@issn}
+\newcommand{\electronic}{\let\issn\electronic@issn}
+\printed
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% All environments and macros from this section can only be used in
+% the preamble.
+% \changes{v2.01}{2000/07/12}{Some things shall work until \cs{maketitle}!}
+% \begin{macrocode}
+% \@onlypreamble\author
+% \@onlypreamble\title
+% \@onlypreamble\abstract
+% \@onlypreamble\Abstract
+% \@onlypreamble\keywords
+% \@onlypreamble\subject
+% \@onlypreamble\titlehead
+% \@onlypreamble\authorhead
+% \@onlypreamble\received
+\@onlypreamble\ccpublish
+\@onlypreamble\electronic
+\@onlypreamble\printed
+% \end{macrocode}
+%
+% \subsection{Extract information from \cs{@author}}
+%
+% The title is produces using the information provided by
+% |\@author|. But this contains the entire addresses. The first
+% line of each address is considered to be the name of an author.
+% These names then occur in the title seperated by |\authorsep| and
+% |\authorlastsep|.
+% \begin{macrocode}
+\def\extractnamesfr@m@author{%
+ \@ifundefined{@authorlist}{%
+ \let\and\ignorespaces
+ \let\latest@name\relax
+ \count@\z@
+ \expandafter\extract@names\@author\and\and\@nil}{%
+ \@authorlist
+ }
+ }
+\def\extract@names#1\and#2\@nil{%
+ \cc@ifempty{#1}{%
+ \unskip\if\and\relax\else
+ \ifnum\count@>\tw@\authorlastsepmany\else\authorlastsep\fi
+ \fi\latest@name
+ \let\next\gobble@nil}%
+ {%
+ \unskip\and\latest@name
+ \ifx\latest@name\relax\else\let\and\authorsep\fi
+ \extract@name#1\\\@nil
+ \let\next\extract@names}%
+ \next#2\@nil}
+\def\gobble@nil#1\@nil{}
+\def\extract@name#1\\#2\@nil{\advance\count@\@ne\def\latest@name{#1}}
+% \end{macrocode}
+% \begin{macro}{\authorsep}
+% \begin{macro}{\authorlastsep}
+% \begin{macro}{\authorlastsepmany}
+% These two macros are used between authors in the title that
+% |\maketitle| produces. |\authorlastsep| or |\authorlastsepmany| is
+% used between the last two authors (the latter if there are more
+% than two authors), otherwise |\authorsep| is used. The negative
+% penalty favors a line break after the comma.
+% \changes{v2.01}{2000/07/06}{Added \cs{authorlastsepmany}. Michael
+% N{\"{u}}sken, Paderborn}
+% \changes{v2.02}{2001/05/22}{Introduced \cs{AND}. Michael
+% N{\"{u}}sken, Paderborn}
+% \begin{macrocode}
+\babel\def\ccAND{and}[german=und,french=et]
+\def\authorsep{,\penalty-5\ }
+\def\authorlastsep{\penalty-5\ \ccAND{} }
+\def\authorlastsepmany{,\penalty-5\ \ccAND{} }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% The running head uses either the name of the only author, or the
+% last names of up to three authors, or the last name of the first
+% author supplemented by |\textit{et al.}|. This informations
+% usually is extracted from the author list declared by |\author| in
+% |\@author|. Finally, it is stored in |\@authorhead|.
+% \begin{macrocode}
+\newtoks\latest@lastname
+\newtoks\@firstname
+\let\@firstlastname\@temptokena
+\def\extractauthorheadfr@m@author{%
+ {%
+ \let\and\@empty
+ \latest@lastname{}%
+ \toks@{}%
+ \count@\m@ne
+ \expandafter\extract@lastnames\@author\and\and\@nil
+ \ifnum\count@<2
+ \xdef\@authorhead{\the\@firstname}
+ \else\ifnum\count@<4
+ \xdef\@authorhead{\the\toks@}%
+ \else
+ \xdef\@authorhead{\the\@firstlastname\noexpand\textit{ et al.}}%
+ \fi\fi
+ }%
+ \setbox0\hbox{\small\let\thanks\@gobble\@authorhead}%
+ \ifdim\wd0>.7\textwidth
+ \ClassWarningNoLine{cc}{Authorhead too long. Use
+ \protect\authorhead\space to specify\MessageBreak a shortened
+ author list for the headings!}%
+ \fi
+ }
+\def\extract@lastnames#1\and#2\@nil{%
+ \advance\count@\@ne
+ \cc@ifempty{#1}{%
+ \expandafter\cc@ifempty\expandafter{\the\toks@}{%
+ \edef\@tempa{\the\latest@lastname}%
+ }{%
+ \edef\@tempa{\the\toks@\authorheadlastsep\the\latest@lastname}%
+ }%
+ \toks@\expandafter{\@tempa}%
+ \let\next\gobble@nil
+ }{%
+ \expandafter\cc@ifempty\expandafter{\the\toks@}{%
+ \edef\@tempa{\the\latest@lastname}%
+ }{%
+ \edef\@tempa{\the\toks@\authorheadsep\the\latest@lastname}%
+ }%
+ \toks@\expandafter{\@tempa}%
+ \extract@lastname#1\\\@nil
+ \let\next\extract@lastnames}%
+ \ifnum\count@=\@ne\@firstlastname\expandafter{\the\toks@}\fi
+ \next#2\@nil}
+\def\gobble@nil#1\@nil{}
+\def\extract@lastname#1\\#2\@nil{%
+ \ifnum\count@=\z@\@firstname{#1}\fi
+ \extract@lastname@#1 \@nil}
+\def\extract@lastname@#1 #2\@nil{%
+ \cc@ifempty{#2}{\latest@lastname{#1}}{\extract@lastname@#2\@nil}}
+% \end{macrocode}
+% \begin{macro}{\authorheadsep}
+% \begin{macro}{\authorheadlastsep}
+% These two macros are used to seperate authors in the running head.
+% \begin{macrocode}
+\def\authorheadsep{, }
+\def\authorheadlastsep{ \& }
+\def\authorheadlastsepmany{ \& }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% At the |\begin{document}| the |\@authorhead| is extracted from
+% |\@author|, if no |\authorhead| command was used in the preamble.
+% \begin{macrocode}
+\let\@author\relax
+\AtBeginDocument{%
+ \@ifundefined{@author}{\if@ccpublish
+ \ClassError{cc}{No \protect\author\space given}{Define an author
+ list in the preamble by \protect\author{...}}%
+ \else
+ \ClassWarningNoLine{cc}{No \protect\author\space given}%
+ \fi}{}
+ \@ifundefined{@authorhead}{\extractauthorheadfr@m@author}{}}
+% \end{macrocode}
+% At |\begin{document}| we can also check whether the |\@title|
+% (declared by |\title|) or the |\@titlehead| (declared by
+% |\titlehead|) is not too long.
+% \begin{macrocode}
+\let\@title\relax
+\AtBeginDocument{%
+ \@ifundefined{@title}{\if@ccpublish
+ \ClassError{cc}{No \protect\title\space given}{Define a title in
+ the preamble by \protect\title{...}}%
+ \else
+ \ClassWarningNoLine{cc}{No \protect\title\space given}%
+ \fi}{}
+ \setbox0\hbox{\small\let\thanks\@gobble
+ \@ifundefined{@titlehead}{\let\\\ \@title}{\@titlehead}}%
+ \ifdim\wd0>.7\textwidth
+ \ClassError{cc}{Title too long for running head.\MessageBreak
+ Use \protect\titlehead\space to specify\MessageBreak a shortened
+ title for the headings!}{}%
+ \fi}
+% \end{macrocode}
+% For |\makeendtitle|, the affiliations which were given with the
+% |\author| command to |\@author| must be formatted. The address
+% blocks are combined in a two column \Lenv{tabular}.
+% \begin{macrocode}
+\def\extractaffilsfr@om@author{%
+ \parindent\z@
+ \init@affils
+ \begin{tabular}{@{}ll@{}}%
+ \expandafter\extract@affils\@author\and\and\@nil
+ \end{tabular}
+ \par
+}
+\def\init@affils{%
+ \let\and\relax
+ \@oddaffiltrue
+ }
+\def\extract@affils#1\and#2\@nil{%
+ \cc@ifempty{#1}{\let\next\gobble@nil}{%
+ \extract@affil#1\\\@nil
+ \let\next\extract@affils}%
+ \next#2\@nil}
+% \end{macrocode}
+% Each address is put in a \Lenv{@ffiliation} environment (defined
+% below). The |\currentaddress| macro is defined with the knowledge
+% of the author name (which is the first line of the address). Also
+% the author name is typed in small capitals.
+% \begin{macrocode}
+\def\extract@affil#1\\#2\@nil{%
+ \def\currentaddress{\otheraddress
+ Current address of \textsc{\ignorespaces#1}:\\}%
+ \begin{@ffiliation}
+ \textsc{\ignorespaces#1}\\#2
+ \end{@ffiliation}
+ \affilsep}
+% \end{macrocode}
+% \begin{macro}{\otheraddress}
+% \begin{macro}{\affilsep}
+% The macro |\otheraddress| seperates two address blocks for one
+% author. |\affilsep| simply decides whether to switch to the next
+% column or to a new line in the surrounding \Lenv{tabular}.
+% \changes{v2.01}{2001/01/23}{Changed odd affiliation seperator.
+% Michael N{\"{u}}sken, Paderborn}
+% \begin{macrocode}
+\newcommand{\otheraddress}{\end{@ffiliation}\affilsep
+ \begin{@ffiliation}}
+\def\affilsep{%
+ \if@oddaffil\odd@sep\@oddaffilfalse
+ \else\even@sep\@oddaffiltrue
+ \fi
+ }
+\newif\if@oddaffil
+\def\odd@sep{&}%
+%\def\even@sep{\\*[\medskipamount]}%
+\def\even@sep{\end{tabular}\par\begin{tabular}{@{}ll@{}}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{environment}{@ffiliation}
+% The environment \Lenv{@ffiliation} is used for each address
+% block. It produces a minipage whose lines are set like verse
+% lines: if a line is too long it continues indented.
+% \begin{macrocode}
+\newenvironment{@ffiliation}
+ {%
+ \minipage[t]{.48\hsize}
+ \dimen@\hsize \advance\dimen@ -1.5em
+ \everypar{\parshape 2 \z@ \hsize 1.5em \dimen@}%
+ \def\\{\unskip\par}%
+ }
+ {\strut\par\medskip\endminipage}
+% \end{macrocode}
+% \end{environment}
+%
+% \subsection{Page layout}
+%
+% The document's text width must be exactly 141~mm; its height must be exactly
+% 213~mm from the top of caps in header to the baseline of the bottom line
+% (disregarding descenders like `p' or `g' at the bottom).
+% (Note that this is achieved by setting |\textheight| to 200~mm.)
+% The abstract's width must be 120~mm.
+% \changes{v2.01}{2001/02/22}{The text area is only changed if
+% \lclo{cctextarea} is active. Michael N{\"{u}}sken, Paderborn}
+% \changes{v2.01}{2001/08/20}{Removed bug: \cs{@abswidth} must always
+% be defined. Michael N{\"{u}}sken, Paderborn}
+% \begin{macrocode}
+\if@cctextarea
+\textwidth=141mm
+\@abstrwidth=120mm
+\textheight=200mm
+\topmargin=0mm
+\oddsidemargin=12mm
+\evensidemargin=12mm
+\marginparwidth=25mm
+\headheight=1.25\headheight
+\ifnum\@marginmode<\z@\@marginmode\z@\fi
+\else
+\@abstrwidth0.85\textwidth
+\fi
+% \end{macrocode}
+% We fit the margins so that 1~in + |\oddsidemargin| + |\textwidth| +
+% |\evensidemargin| + 1~in = |\paperwidth|. (Note that the margins
+% are usually measured with an offset of 1~in on each side.)
+% \begin{macrocode}
+\typeout{Now adjusting margins.}
+\ifcase\@marginmode
+% marginmode 0
+\AtEndOfClass{%
+\oddsidemargin\paperwidth
+\advance\oddsidemargin-2in
+\advance\oddsidemargin-\textwidth
+\advance\oddsidemargin-\evensidemargin}
+\or
+% marginmode 1
+\AtEndOfClass{%
+\oddsidemargin\paperwidth
+\advance\oddsidemargin-2in
+\advance\oddsidemargin-\textwidth
+\evensidemargin=5mm
+\advance\oddsidemargin-\evensidemargin}
+\or
+% marginmode 2
+\AtEndOfClass{%
+\oddsidemargin\paperwidth
+\advance\oddsidemargin-2in
+\advance\oddsidemargin-\textwidth
+\oddsidemargin.5\oddsidemargin
+\evensidemargin\oddsidemargin}
+\fi
+% \end{macrocode}
+% Finally, the |\marginparwidth| is recalculated so that it does not
+% fall off the paper.
+% \begin{macrocode}
+\AtEndOfClass{%
+\marginparwidth1in
+\advance\marginparwidth-5mm
+\advance\marginparwidth-2\marginparsep
+\ifdim\evensidemargin<\oddsidemargin
+\advance\marginparwidth\evensidemargin
+\else
+\advance\marginparwidth\oddsidemargin
+\fi
+}
+% \end{macrocode}
+% In this document, we have marginmode
+% \expandafter\the\csname @marginmode\endcsname{}
+% \expandafter\ifcase\csname @marginmode\endcsname
+% (classical margins)
+% \or(print margins)
+% \or(balanced margins)
+% \fi
+% which results in the
+% following values:
+% \begin{center}
+% \makeatletter
+% \def\themm#1{\dimen@5.6233568#1\relax\divide\dimen@ by 16
+% \expandafter\@themmchk\the\dimen@0000\@@@
+% \edef\@tempa{\noexpand\th@mm\the\dimen@}\@tempa}
+% \def\@themmchk#1.#2#3#4#5#6\@@@{\if#5p\else\if#5t\else\ifnum#5>4
+% \advance\dimen@.0005pt\fi\fi\fi}
+% \def\@gobblethree#1#2#3{}
+% \edef\@tempa{\noexpand\def\noexpand\th@mm##1\expandafter
+% \@gobblethree\the\p@}\@tempa{\@gobblerest#1{0}0000mm}
+% \def\@gobblerest#1.#2#3#4#5mm{#1.#2#3#4mm}
+% \begin{tabular}[t]{l@{ = }r\VRULE}
+% |\paperwidth| & \themm\paperwidth\\\hline
+% |1in| & 25.400mm\\
+% |\evensidemargin| & \themm\evensidemargin\\
+% |\textwidth| & \themm\textwidth\\
+% |\oddsidemargin| & \themm\oddsidemargin\\
+% |1in| & 25.400mm\\\hline
+% |\marginparsep| & \themm\marginparsep\\
+% |\marginparwidth| & \themm\marginparwidth\\
+% \end{tabular}\begin{tabular}[t]{l@{ = }r}
+% |\paperheight| & \themm\paperheight\\\hline
+% |1in| & 25.400mm\\
+% |\topmargin| & \themm\topmargin\\
+% |\headheight| & \themm\headheight\\
+% |\headsep| & \themm\headsep\\
+% |\textheight| & \themm\textheight\\
+% |\footskip| & \themm\footskip\\
+% \end{tabular}
+% \end{center}
+%
+% \begin{macro}{\ps@cc}
+% The page style \texttt{cc} is defined. It uses only running
+% heads. On right (odd) pages, the title is written, on left
+% (even) pages, the author(s) appear. Further, the page number on
+% the outer side and the journal identification (if |\ccpublish|
+% was used) are printed. Moreover, a head rule of width
+% |\headrulewidth| is produced. Note that |\ccpublish| disables
+% this.
+% \begin{macrocode}
+\newskip\headerindent \headerindent=10mm
+\newdimen\headrulewidth \headrulewidth.4pt
+\def\ps@cc{\let\@mkboth\markboth
+ \def\@oddhead{\vbox{\hbox to\textwidth{\reset@font\strut
+ {\small\@cctxt}%
+ \hfil
+ {\small
+ \@ifundefined{@titlehead}{%
+ \let\\\ %
+ \@title
+ }{%
+ \@titlehead
+ }}%
+ \hbox to\headerindent{\hfil\thepage}%
+ }%
+ \if@ccpublish\else
+ \kern2.6\p@
+ \hrule\@height\headrulewidth\kern-\headrulewidth
+ \kern-2.6\p@
+ \fi
+ \vskip\z@
+ }%
+ }%
+ \def\@oddfoot{}
+ \def\@evenhead{\vbox{\hbox to\textwidth{\reset@font\strut
+ \hbox to\headerindent{\thepage\hfil}%
+ {\small\@authorhead}%
+ \hfil
+ {\small\@cctxt}%
+ }%
+ \if@ccpublish\else
+ \kern2.6\p@
+ \hrule\@height\headrulewidth\kern-\headrulewidth
+ \kern-2.6\p@
+ \fi
+ \vskip\z@
+ }%
+ }%
+ \let\@evenfoot\@oddfoot
+ }
+% \end{macrocode}
+% \end{macro}
+% Select \cc's page style at the end of the class.
+% \begin{macrocode}
+\AtEndOfClass{\pagestyle{cc}}
+% \end{macrocode}
+%
+% If \Lclo{noautotitle} was not used, first and last page are
+% generated automatically.
+% \changes{v2.00}{2000/03/21}{Repairing \cs{cite} in \cs{Abstract}
+% with option \protect\Lclo{natbib}. \cs{maketitle} must be
+% executed only after \protect\Lpackage{natbib}'s
+% \cs{AtBeginDocument} commands have been done.}
+% \changes{v2.00}{2000/06/21}{Dirty trick. \cs{maketitle} must be
+% called after all other things \cs{AtBeginDocument} (especially
+% after those inserted by \protect\Lpackage{natbib}) in order to
+% handle citations correctly. This is done via \cs{@onlypreamble}
+% that disables the first token of its argument and executes the
+% rest.}
+% \begin{macrocode}
+\AtEndOfClass{%
+ \AtBeginDocument{\@onlypreamble{\author{\if@autotitle\maketitle\fi}}}
+ %\AtBeginDocument{\if@autotitle\maketitle\fi}
+ \AtEndDocument{\if@autotitle\makeendtitle\fi}
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\maketitle}
+% |\maketitle| generates the first page. It also produces errors
+% or warnings if abstract, keywords, or subject are missing.
+% \changes{v2.02}{2001/08/29}{Changed Abstract to quote. MN, Paderborn}
+% \changes{v2.03}{2005/08/27}{Changed Abstract to @abstr. MN, Bonn}
+% \begin{macrocode}
+\def\fourdigits#1{\ifnum#1<10\relax000#1\else
+ \ifnum#1<100\relax00#1\else
+ \ifnum#1<1000\relax0#1\else
+ #1\fi\fi\fi}
+\def\twodigits#1{\ifnum#1<10\relax0#1\else
+ \ifnum#1<100\relax#1\else
+ #1\fi\fi}
+\def\vertrulea{\rule[-7.583pt]{0pt}{7.583pt}}
+\def\vertruleb{\rule{2.25pt}{10.2pt}}
+\newtoks\cite@hook
+\renewcommand{\maketitle}{%
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \cite@hook{}%
+ \if@cchead
+ \vbox to\z@{\vss
+ \@ifundefined{r@!end!document!}{\@tempcnta\z@}{%
+ \@tempcnta\@ne
+ \advance\@tempcnta-\@ccfirst
+ \edef\@tempa{%
+ \expandafter\@secondoftwo\csname r@!end!document!\endcsname}%
+ \advance\@tempcnta\@tempa%
+ }%
+ \setcounter{page}{\@ccfirst}%
+ \hbox to\textwidth{%
+ \vbox to\z@{\vss
+ \baselineskip=12pt%
+ \halign{\ixpt##\hfil\cr
+ comput. complex.~\textbf{\@ccvolume}~(\@ccyear),
+ \thepage\ -- \pageref{!end!document!}\cr
+ \issn/\expandafter\@gobbletwo\@ccyear%
+ %% use + instead --?
+ /\twodigits{\@ccnumber}\fourdigits{\thepage}--\the\@tempcnta\
+ \$ 1.50+0.20/0\cr}}\hss
+ \vbox to\z@{\vss
+ \offinterlineskip%
+ \halign{##&##\hfil\cr
+ \vertrulea&\ixpt
+ \copyright{} Birkh{\"{a}}user Verlag, Basel \@ccyear\cr
+ \noalign{\hrule}
+ \vertruleb\hskip1mm&%
+ \vbox to\z@{\vbox to\z@{\vss
+ \hbox{\xptsfbx computational complexity}}\vss}%
+ \cr}}}\vskip47.333pt}
+ \fi
+ \hrule\@height\z@
+ \vskip2.2ex% 4.0mm
+ \relax
+ \begin{center}
+ \if@ccpublish
+ \renewcommand{\footnote}[1]{\ClassWarningNoLine{cc}{There are no
+ footnotes allowed in title or author.\MessageBreak
+ Think about moving your remark to the acknowledgements}}%
+ \let\thanks\footnote
+ \else
+ \renewcommand{\footnote}[1]{\ClassWarningNoLine{cc}{In title or
+ author \protect\footnote\space does not work.\MessageBreak
+ Avoid footnotes or use \protect\thanks}}%
+ \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
+ \def\@makefnmark{%
+ \rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
+ \long\def\@makefntext##1{\parindent 1em\noindent
+ \hb@xt@1.8em{%
+ \hss\@textsuperscript{\normalfont\@thefnmark}}##1}%
+ \fi
+ {%
+ \Large\bfseries
+ \def\\{\penalty-\@M}%
+ \expandafter\MakeUppercase\expandafter{\@title}%
+ \par
+ }%
+ \@ifundefined{@subtitle}{}{{%
+ \large\itshape
+ \@subtitle
+ \par
+ }}
+ \@ifundefined{@version}{}{{%
+ \large\itshape
+ \@version
+ \par
+ }}
+ \bigskip
+ \vskip1.21ex% 2.2mm
+ \vskip\z@
+ {%
+ \large\scshape
+ \extractnamesfr@m@author
+ \par
+ }%
+ \if@ccpublish
+ \ifx\@date\today\else
+ \ClassWarningNoLine{cc}{Date ignored! (\@date)}%
+ \fi
+ \else{%
+ \vskip1ex
+ \large\@date\par
+ }\fi
+ \def\@tempa{\vskip5.5ex\let\@tempa\relax}%
+ \expandafter\cc@ifempty\expandafter{\the\@abstract@toks}{%
+ \ifvoid\@abstract
+ \if@abstractoptional
+ \ClassWarningNoLine{cc}{Missing abstract}%
+ \else
+ \ClassError{cc}{Missing abstract}
+ {Define an abstract in the preamble using
+ \protect\begin{abstract} ... \protect\end{abstract}.}%
+ \fi
+ \else
+ \@tempa\leavevmode\box\@abstract\par
+ \fi
+ }{%
+ \ifvoid\@abstract\else
+ \ClassWarningNoLine{cc}{Two abstracts,
+ using the one defined by \protect\Abstract}%
+ \fi
+ \@tempa\leavevmode
+ \@abstr{\ccabstractname}
+ \the\@abstract@toks
+ \end@abstr
+ }
+ \ifvoid\@keywords
+ \if@keywordsoptional
+ \ClassWarningNoLine{cc}{Missing keywords}%
+ \else
+ \ClassError{cc}{Missing keywords}
+ {Define keywords in the preamble using
+ \protect\begin{keywords} ... \protect\end{keywords}.}%
+ \fi
+ \else
+ \@tempa\leavevmode\box\@keywords\par
+ \fi
+ \ifvoid\@subject
+ \if@subjectoptional
+ \ClassWarningNoLine{cc}{Missing subject classification}%
+ \else
+ \ClassError{cc}{Missing subject classification}
+ {Define a subject classification in the preamble using
+ \protect\begin{subject} ... \protect\end{subject}.}%
+ \fi
+ \else
+ \@tempa\leavevmode\box\@subject\par
+ \fi
+ \@thanks
+ \end{center}
+ \thispagestyle{empty}
+ \setcounter{footnote}{0}%
+ \global\let\maketitle\relax
+ \global\let\thanks\@gobble
+ \global\let\@thanks\relax
+% \end{macrocode}
+% \changes{v2.01}{2000/07/12}{Some things shall work until
+% \cs{maketitle} and not longer!}
+% \begin{macrocode}
+ \global\let\author\@notprerr
+ \global\let\title\@notprerr
+ \global\let\abstract\@notprerr
+ \global\let\Abstract\@notprerr
+ \global\let\keywords\@notprerr
+ \global\let\subject\@notprerr
+ \global\let\titlehead\@notprerr
+ \global\let\authorhead\@notprerr
+ \global\let\received\@notprerr
+ \vskip\z@
+ \par\@afterindentfalse\@afterheading
+ }
+\let\@maketitle\@undefined
+\let\and\@undefined
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\makeendtitle}
+% |\makeendtitle| is the counterpart of |\maketitle|, it generates
+% the end of the last page with received date and affiliations.
+% \changes{v2.00}{2000/03/10}{Added \cs{par}.}
+% \changes{v2.01}{2000/08/23}{Added \cs{ManuscriptReceived}.}
+% \begin{macrocode}
+\babel\def\ManuscriptReceived{Manuscript received }[%
+ german=Manuskript erhalten: ,%
+ french=Manuscrit re\c{c}u: ]
+\newcommand{\makeendtitle}{%
+ \par
+ \parindent\z@
+ \bigskip
+ \@ifundefined{@received}{}{%
+ \noindent{\small
+ \ManuscriptReceived\@received
+ \par}%
+ \medskip
+ }%
+ {\small
+ \extractaffilsfr@om@author
+ }%
+ %%\clearpage
+ \gdef\makeendtitle{\ClassWarning{cc}{\protect\makeendtitle\space
+ multiply used!}}
+ }
+%</cclayout>
+% \end{macrocode}
+% \end{macro}
+%
+% \def\filename{cc-cls.sty}
+% \CodelinePrefix{S}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+%
+% It allows to use the document class \Lenv{cc} as a package via
+% |\usepackage{cc-cls}|.
+% \begin{macrocode}
+%<*ccsty>
+\input{cc.cls}
+%</ccsty>
+% \end{macrocode}
+%
+% \GetFileInfo{relabel.sty}
+% \CodelinePrefix{R}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+% \begin{macrocode}
+%<*relabel>
+% \end{macrocode}
+% \iffalse meta-comment
+%%% File: relabel.sty
+%% Copyright (C) 1998 Michael N\"{u}sken, all rights reserved.
+%
+% Copyright 1996 Michael N\"{u}sken.
+% All rights reserved. For further copyright information see the file
+% legal.txt, and any other copyright indicated in this file.
+%
+% This system is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+%
+%
+% IMPORTANT NOTICE:
+%
+% Please do not request updates from us directly. Distribution is
+% done through Mail-Servers and TeX organizations.
+%
+% You are not allowed to change this file.
+%
+% You are allowed to distribute this file.
+%
+% You are NOT ALLOWED to take money for the distribution or use of
+% either this file or a changed version, except for a nominal charge
+% for copying etc.
+% \fi
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{relabel}[1998/09/07 v1.01 Relabel. MNuesken]
+% \end{macrocode}
+%
+% We declare some options. \Lclo{prefixes} and \Lclo{noprefixes} turn
+% the effects of this packages on or off. \Lclo{bare} and
+% \Lclo{nobare} turn the additional |\bare\ref|erences on or off.
+% \begin{macrocode}
+\newif\if@prefixes
+\DeclareOption{prefixes}{\@prefixestrue}
+\DeclareOption{noprefixes}{\@prefixesfalse}
+\newif\if@bare
+\DeclareOption{bare}{\@baretrue}
+\DeclareOption{nobare}{\@barefalse}
+\ExecuteOptions{prefixes,nobare}
+\ProcessOptions\relax
+% \end{macrocode}
+%
+% \subsection{Modifyable labelling and counting}
+%
+% This new |\Label| command allows you to style the resulting labels
+% on your own.
+% \begin{macrocode}
+\newcommand*{\Label}[2]{\modify{#2}\label{#1}\revert}
+\newcommand*{\modify}[1]{\@bsphack%
+ \global\let\revert@currentlabel\@currentlabel
+ \global\let\revert@bare@currentlabel\@bare@currentlabel
+ \def\@tempb##1{#1}
+ \protected@edef\@currentlabel{\@tempb{\@currentlabel}}%
+ \@esphack}
+\newcommand*{\revert}{\@bsphack
+ \global\let\@currentlabel\revert@currentlabel
+ \global\let\@bare@currentlabel\revert@bare@currentlabel
+ \@esphack}
+\let\revert@currentlabel\relax
+\let\revert@bare@currentlabel\relax
+\newcommand*{\setcurrentlabel}[1]{%
+ \protected@edef\@currentlabel{#1}%
+ \let\@bare@currentlabel\@currentlabel}
+% \end{macrocode}
+% Provide some macros to handle prefixes and labels.
+% \begin{macro}{\defprefix}
+% This allows the definition of a prefix for a defined counter.
+% This prefix is attached to each reference to an instance of this
+% counter. It can also be used for postfixes as follows:
+% |\defprefix{equation}#1{(#1)}| defines a `prefix' for the
+% equation counter which adds a \emph{pair} of parentheses.
+% \begin{macrocode}
+\newcommand*{\defprefix}[1]{\if@prefixes
+ \def\next{\expandafter\def\csname p\string @#1\endcsname}%
+ \else\def\next{\def\next}\fi\next}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\useprefix}
+% Use the prefix.
+% \begin{macrocode}
+\newcommand*{\useprefix}[1]{\csname p\string @#1\endcsname}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\uselabel}
+% Use the reference to the \meta{counter} given as first argument.
+% This is intended for use in prefixes to subcounters.
+% \begin{macrocode}
+\newcommand*{\uselabel}[1]{\csname p\string @#1\expandafter
+ \endcsname\csname the#1\endcsname}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\defprefixcond}
+% Obsolete.
+% \begin{macrocode}
+\def\defprefixcond#1#2{\defprefix{#1}{\conduselabel{#2}}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Iflabelchanged}
+% Takes two arguments: a \meta{counter} and some \meta{conditional
+% text}. When referenced the \meta{conditional text} is printed if
+% the \meta{counter} has the same value as at the |\label|
+% command.
+%
+% Attention! In the command |\EnumerationInTheorems| in the package
+% \Lclass{ccthm} this had to be replaced by a more sophisticated
+% approach: The basic value had to be the one that produced the
+% heading of the surrounding theorem like environment rather than
+% the actual value of this same counter which can change also if,
+% e.g., an \Lenv{equation} is used.
+% \begin{macrocode}
+\newcommand*{\Iflabelchanged}[2]{%
+ \protect\protect\protect\@@conduselabel
+ {{\protect\csname the#1\endcsname}}%
+ {{\csname the#1\endcsname}}%
+ {#2}%
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\conduselabel}
+% Obsolete.
+% \begin{macrocode}
+\def\conduselabel#1{% obsolete
+ \protect\protect\protect\@@conduselabel
+ {{\protect\csname the#1\endcsname}}%
+ {{\csname the#1\endcsname}}%
+ {\csname p\string @#1\endcsname{\csname the#1\endcsname}}%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@conduselabel}
+% Compare the expanded version of the first two arguments. If
+% these are not equal or |\longlabeltrue| and not |\shortlabeltrue|
+% then print the third argument.
+% \begin{macrocode}
+\def\@@conduselabel#1#2#3{{%
+ \let\protect\relax
+% \let\@tempa\relax\let\@tempc\relax\relax\relax
+ \edef\@tempa{#1}%
+ \edef\@tempc{#2}%
+% \show\@tempa\show\@tempc
+ \ifx\@tempa\@tempc\relax\@condlabelfalse\else\@condlabeltrue\fi
+ \iflonglabel\@condlabeltrue\fi
+ \ifshortlabel\@condlabelfalse\fi
+ \if@condlabel #3\fi
+ }}
+\newif\if@condlabel
+\newif\iflonglabel \longlabelfalse
+\newif\ifshortlabel \shortlabelfalse
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\short\ref}
+% \begin{macro}{\whole\ref}
+% \begin{macro}{\quiet\ref}
+% Variing \texttt{\string\ref}'s. |\short\ref{|\meta{key}|}|
+% always prints a short version, that is omit as much as possible
+% in |\@@conduselabel|. |\whole\ref{|\meta{key}|}| forces the long
+% version. |\quiet\ref{|\meta{key}|}| prints nothing (this was
+% once used to enable to analyse the reference structure of a
+% complicated proof).
+% \begin{macrocode}
+\def\short\ref#1{{\shortlabeltrue\ref{#1}}}
+\def\whole\ref#1{{\longlabeltrue\ref{#1}}}
+\def\quiet\ref#1{\vphantom{\ref{#1}}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\refstepcounter}
+% Modify \texttt{\string\refstepcounter} to allow prefixes to be
+% one-parameter macros. (Just added an
+% \texttt{\string\expandafter}, see LaTeX2e doumentation.)
+%
+% \changes{v2.03}{2005/08/29}{Added explanation interplay with
+% \Lpackage{hyperref}.}
+% The package \Lpackage{hyperref} replaces |\refstepcounter| with
+% its own definition but calls the previous version. Therefore it
+% must be loaded \emph{after} this class. This applies also to any other
+% package that modifies |\refstepcounter| similarly.
+% \begin{macrocode}
+\CheckCommand*\refstepcounter[1]{\stepcounter{#1}%
+ \protected@edef\@currentlabel
+ {\csname p@#1\endcsname\csname the#1\endcsname}%
+}
+\def\refstepcounter#1{\stepcounter{#1}%
+ \protected@edef\@currentlabel
+ {\csname p@#1\expandafter\endcsname\csname the#1\endcsname}%
+% ^^^^^^^^^^^^
+ \protected@edef\@bare@currentlabel
+ {\csname the#1\endcsname}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\label}
+% Modify \texttt{\string\label} to allow to store also the bare
+% value of the label.
+% \begin{macrocode}
+\if@bare
+\let\relabel@label\label
+\def\label#1{\ifx\@currentlabel\@bare@currentlabel\else
+ {\let\@currentlabel\@bare@currentlabel\relabel@label{bare@#1}}%
+ \fi\relabel@label{#1}}
+\def\bare\ref#1{\@ifundefined{r@bare@#1}{\ref{#1}}{\ref{bare@#1}}}
+\else
+\def\bare{\PackageWarning{relabel}{\string\bare\space disabled! (Use
+ option bare to enable it.)}}
+\fi
+\let\@bare@currentlabel\@currentlabel
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+%</relabel>
+% \end{macrocode}
+%
+% \GetFileInfo{thcc.sty}
+% \CodelinePrefix{t}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+% \changes{v0.91}{2000/02/29}{Advanced version to official 2.00}
+% \begin{macrocode}
+%<*thcc>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{thcc}[2000/02/29 v2.04
+ computational complexity, theorem layouts.
+ Michael Nuesken, Bonn.]
+% \end{macrocode}
+% We require Frank Mittelbach's \Lpackage{theorem} package.
+% \begin{macrocode}
+\RequirePackage{theorem}[1995/11/23]
+\expandafter\xdef\csname ver@amsthm.sty\endcsname
+{2000/02/29 Forbidden by cc.cls/thcc.sty. Not loaded!}
+\expandafter\xdef\csname ver@apthm.sty\endcsname
+{2000/02/29 Forbidden by cc.cls/thcc.sty. Not loaded!}
+% \end{macrocode}
+% The macro |\shortcite| might have been provided by the package
+% \Lpackage{cccite} or predecessors of it. If not we let it be equal
+% to the normal |\cite|.
+% \begin{macrocode}
+\def\activate@shortcite{}
+\AtBeginDocument{%
+ \@ifpackageloaded{cccite}{%
+ \def\activate@shortcite{\let\cite\shortcite}
+ }{}
+ \@ifpackageloaded{natbib}{%
+ \def\activate@shortcite{%
+ \let\cite\citealt
+ \let\citet\citealt
+ \let\citep\citealp
+ }
+ }{}
+ }
+% \end{macrocode}
+%
+% This is the standard theorem layout for \cc. The theorem text is
+% typeset slanted, the header terminates with a dot. Inside the
+% optional argument |\cite| is |\shortcite| which avoids double
+% parentheses.
+% \begin{macrocode}
+\def\th@cc{%
+ \normalfont\slshape
+ \def\@begintheorem##1##2{\item
+ [\hskip\labelsep \theorem@headerfont ##1\ ##2.]}%
+ \def\@opargbegintheorem##1##2##3{\item
+ [\hskip\labelsep \theorem@headerfont ##1\ ##2\ %
+ \normalfont({\activate@shortcite{}##3}).]}%
+ }
+% \end{macrocode}
+%
+% This is the unnumbered theorem layout alike \cc, it only differs
+% from the standard theorem layout in that the number is not typed
+% (argument 2).
+% \begin{macrocode}
+\def\th@ccnn{%
+ \normalfont\slshape
+ \def\@begintheorem##1##2{\item
+ [\hskip\labelsep \theorem@headerfont ##1.]}%
+ \def\@opargbegintheorem##1##2##3{\item
+ [\hskip\labelsep \theorem@headerfont ##1\ %
+ \normalfont({\activate@shortcite{}##3}).]}%
+ }
+% \end{macrocode}
+%
+% This is the unnumbered layout for proofs \cc. The proof text is
+% typeset upright, the header terminates with a dot and a double
+% blank.
+% \begin{macrocode}
+\def\th@ccproof{%
+ \normalfont\upshape
+ \def\@begintheorem##1##2{\item
+ [\hskip\labelsep \theorem@headerfont ##1.\ \ ]}%
+ \def\@opargbegintheorem##1##2##3{\item
+ [\hskip\labelsep \theorem@headerfont ##1\ %
+ \normalfont({\activate@shortcite{}##3}).\ \ ]}%
+ }
+% \end{macrocode}
+%
+% This is the standard algorithm layout for \cc. The algorithm text
+% is typeset upright, the header terminate with a dot. The optional
+% argument follows the rest terminated with a dot (instead of being
+% in parentheses).
+% \begin{macrocode}
+\def\th@ccalgo{%
+ \normalfont\upshape
+ \def\@begintheorem##1##2{\item
+ [\hskip\labelsep \theorem@headerfont ##1\ ##2.]}%
+ \def\@opargbegintheorem##1##2##3{\item
+ [\hskip\labelsep \theorem@headerfont ##1\ ##2.]
+ {\normalfont##3.\par}}%
+ }
+% \end{macrocode}
+%
+% This is the unnumbered algorithm layout for \cc. The number is
+% omitted.
+% \begin{macrocode}
+\def\th@ccalgonn{%
+ \normalfont\upshape
+ \def\@begintheorem##1##2{\item
+ [\hskip\labelsep \theorem@headerfont ##1.]}%
+ \def\@opargbegintheorem##1##2##3{\item
+ [\hskip\labelsep \theorem@headerfont ##1.] {\normalfont##3.\par}}%
+ }
+% \end{macrocode}
+% The default header font is the caps and small caps font.
+% \begin{macrocode}
+\gdef\theorem@headerfont{\scshape}
+%</thcc>
+% \end{macrocode}
+%
+% \GetFileInfo{ccthm.sty}
+% \CodelinePrefix{T}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+% \begin{macrocode}
+%<*ccthm>
+\ProvidesPackage{ccthm}[2000/02/29 v2.04
+ theorem environments for cc. Michael Nuesken, Bonn.]
+% \end{macrocode}
+%
+% \subsection{Theorem-like environments}
+%
+% Referring to numerated items in theorem usually means that you
+% also need to mention the theorem number. With
+% \Lclo{theoremitemprefixes} this is automatically done.
+% \begin{macrocode}
+\newif\if@theoremitemprefixes
+\DeclareOption{theoremitemprefixes}{\@theoremitemprefixestrue}
+\DeclareOption{notheoremitemprefixes}{\@theoremitemprefixesfalse}
+\ExecuteOptions{theoremitemprefixes}
+\ProcessOptions\relax
+% \end{macrocode}
+%
+% Then, we load the packages for theorems and proofs.
+% \Lpackage{theorem} by Frank Mittelbach provides more flexible ways
+% to define new theorem-like environments. \Lpackage{thcc} is
+% \cc{}'s add-on to it, five new theorem styles are defined in it:
+% one each for proofs, for unnumbered and for numbered theorems, for
+% unnumbered and for numbered algorithms.
+% \begin{macrocode}
+\RequirePackage{theorem}[1995/11/23 v2.2c]
+\RequirePackage{thcc}
+\RequirePackage{relabel}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\everytheorem}
+% As for proofs, we also introduce a token list |\everytheorem|
+% that will be executed at the beginning of each theorem-like
+% environment.
+% \begin{macrocode}
+\newtoks\everytheorem
+\everytheorem{}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\EnumerationInTheorems}
+% This macro defines a new labeling scheme to be used inside
+% theorems. For example, the outer list is numbered with small
+% roman numerals rather than with arabic numerals. If
+% \Lclo{theoremitemprefixes} is active, the prefixes are manipulated
+% so as to contain the title (and number) of the surrounding
+% theorem-like environment.
+% \begin{macrocode}
+\if@theoremitemprefixes
+\def\EnumerationInTheorems#1{%
+ \let\@thm@currentlabel\@empty
+ \let\@thm@bare@currentlabel\@empty
+ \let\@@refstepcounter\refstepcounter
+ \def\refstepcounter##1{%
+ \let\refstepcounter\@@refstepcounter
+ \let\@@refstepcounter\@undefined
+ \refstepcounter{##1}%
+ \let\@thm@currentlabel\@currentlabel
+ \protected@edef\@thm@bare@currentlabel{{\csname the##1\endcsname}}%
+ }%
+ \def\theenumi{\@roman\c@enumi}%
+ \def\labelenumi{(\theenumi)}%
+ \defprefix{enumi}##1{%
+ %%\Iflabelchanged{#1}{\uselabel{#1}}%
+ \protect\protect\protect\@@conduselabel
+ {{\protect\csname the#1\endcsname}}%
+ {\@thm@bare@currentlabel}{\@thm@currentlabel}%
+ (##1)}%
+ %%\def\theenumii{\@alph\c@enumii}%
+ %%\def\labelenumii{(\theenumii)}%
+ \defprefix{enumii}##1{%
+ %%\Iflabelchanged{#1}{\uselabel{#1}}%
+ \protect\protect\protect\@@conduselabel
+ {{\protect\csname the#1\endcsname}}%
+ {\@thm@bare@currentlabel}{\@thm@currentlabel}%
+ (\theenumi.##1)}%
+ \def\theenumiii{\@arabic\c@enumiii}%
+ \def\labelenumiii{(\theenumiii)}%
+ \defprefix{enumiii}##1{%
+ %%\Iflabelchanged{#1}{\uselabel{#1}}%
+ \protect\protect\protect\@@conduselabel
+ {{\protect\csname the#1\endcsname}}%
+ {\@thm@bare@currentlabel}{\@thm@currentlabel}%
+ (\theenumi.\theenumii.##1)}%
+ %%\def\theenumiv{\@Alph\c@enumiv}%
+ %%\def\labelenumiv{\theenumiv.}%
+ \defprefix{enumiv}##1{%
+ %%\Iflabelchanged{#1}{\uselabel{#1}}%
+ \protect\protect\protect\@@conduselabel
+ {{\protect\csname the#1\endcsname}}%
+ {\@thm@bare@currentlabel}{\@thm@currentlabel}%
+ (\theenumi.\theenumii.\theenumiii##1)}
+ }
+\else
+\def\EnumerationInTheorems#1{%
+ \def\theenumi{\@roman\c@enumi}%
+ \def\labelenumi{(\theenumi)}%
+ \defprefix{enumi}##1{(##1)}%
+ %%\def\theenumii{\@alph\c@enumii}%
+ %%\def\labelenumii{(\theenumii)}%
+ \defprefix{enumii}##1{(\theenumi.##1)}%
+ \def\theenumiii{\@arabic\c@enumiii}%
+ \def\labelenumiii{(\theenumiii)}%
+ \defprefix{enumiii}##1{(\theenumi.\theenumii.##1)}%
+ %%\def\theenumiv{\@Alph\c@enumiv}%
+ %%\def\labelenumiv{\theenumiv.}%
+ \defprefix{enumiv}##1{(\theenumi.\theenumii.\theenumiii##1)}
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\theorempreamblenn}
+% In order to execute some commands in every theorem, we use
+% |\theorembodyfont| as a hook. In the present version of
+% \Lpackage{theorem}, we access the theorem counter and the theorem
+% title by the following construction.
+% \begin{macrocode}
+\def\theorempreamblenn\@thm#1#2{%
+ \defprefix{#1}##1{#2}%
+ \EnumerationInTheorems{#1}%
+ \pagebreak[3]\relax
+ \the\everytheorem
+ \@thm{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% We select the body font and also put our special hook in it. (We
+% rely on the present implementation of \Lpackage{theorem}!) And we
+% select the theorem style for non numbered theorems in \cc{}.
+% \begin{macrocode}
+\theorem@bodyfont{\theorempreamblenn}
+\theoremstyle{ccnn}
+% \end{macrocode}
+% \begin{environment}{namedth@@r@m*}
+% \begin{environment}{namedtheorem*}
+% \begin{environment}{theorem*}
+% \begin{environment}{lemma*}
+% \begin{environment}{corollary*}
+% \begin{environment}{proposition*}
+% \begin{environment}{fact*}
+% \begin{environment}{remark*}
+% \begin{environment}{openquestion*}
+% \begin{environment}{definition*}
+% \begin{environment}{problem*}
+% \begin{environment}{notation*}
+% \begin{environment}{exercise*}
+% \begin{environment}{assumption*}
+% \begin{environment}{open*}
+% \begin{environment}{claim*}
+% \begin{environment}{conjecture*}
+% \begin{environment}{observation*}
+% \begin{environment}{result*}
+% \begin{environment}{note*}
+% \begin{environment}{hypothesis*}
+% \begin{environment}{example*}
+% \begin{environment}{answer*}
+% \begin{environment}{convention*}
+% \begin{environment}{counterexample*}
+% \begin{environment}{question*}
+% \begin{environment}{thesis*}
+% \begin{environment}{warning*}
+% We define lots of non numbered theorem-like environments
+% including \Lenv{namedtheorem*} which allows a user specified
+% theorem heading.
+% \begin{macrocode}
+\newtoks\theoremtitle
+\newtheorem{namedth@@r@m*}{\the\theoremtitle}
+\newenvironment{namedtheorem*}[1]{%
+ \theoremtitle{#1}\csname namedth@@r@m*\endcsname}
+{\csname endnamedth@@r@m*\endcsname}
+\babel\def\Answer{Answer}[german=Antwort,french=Reponse]
+\newtheorem{answer*}[namedth@@r@m*]{\Answer}%
+\babel\def\Assumption{Assumption}[german=Annahme,french=Assomption]
+\newtheorem{assumption*}[namedth@@r@m*]{\Assumption}
+\babel\def\Claim{Claim}[german=Behauptung,french=Proposition]
+\newtheorem{claim*}[namedth@@r@m*]{\Claim}
+\babel\def\Conjecture{Conjecture}[german=Vermutung,french=Conjecture]
+\newtheorem{conjecture*}[namedth@@r@m*]{\Conjecture}
+\babel\def\Convention{Convention}[german=Vereinbarung,french=Convention]
+\newtheorem{convention*}[namedth@@r@m*]{\Convention}%
+\babel\def\Corollary{Corollary}[german=Korollar,french=Corollaire]
+\newtheorem{corollary*}[namedth@@r@m*]{\Corollary}
+\babel\def\Counterexample{Counterexample}[%
+ german=Gegenbeispiel,french=Contre-exemple]
+\newtheorem{counterexample*}[namedth@@r@m*]{\Counterexample}%
+\babel\def\Definition{Definition}[german=Definition,french=D\'efinition]
+\newtheorem{definition*}[namedth@@r@m*]{\Definition}
+\babel\def\Exercise{Exercise}[german=Aufgabe,french=Exercice]
+\newtheorem{exercise*}[namedth@@r@m*]{\Exercise}
+\babel\def\Fact{Fact}[german=Fakt,french=Fait]
+\newtheorem{fact*}[namedth@@r@m*]{\Fact}
+\babel\def\Hypothesis{Hypothesis}[german=Hypothese,french=Hypoth\`ese]
+\newtheorem{hypothesis*}[namedth@@r@m*]{\Hypothesis}
+\babel\def\Lemma{Lemma}[german=Lemma,french=Lemme]
+\newtheorem{lemma*}[namedth@@r@m*]{\Lemma}
+\babel\def\Notation{Notation}[german=Notation,french=Notation]
+\newtheorem{notation*}[namedth@@r@m*]{\Notation}
+\babel\def\Note{Note}[german=Notiz,french=Note]
+\newtheorem{note*}[namedth@@r@m*]{\Note}
+\babel\def\Observation{Observation}[%
+ german=Beobachtung,french=Observation]
+\newtheorem{observation*}[namedth@@r@m*]{\Observation}
+\babel\def\OpenQuestion{Open Question}[%
+ german=Offene Frage,french=Question ouverte]
+\newtheorem{open*}[namedth@@r@m*]{\OpenQuestion}
+\newtheorem{openquestion*}[namedth@@r@m*]{\OpenQuestion}
+\babel\def\Problem{Problem}[german=Problem,french=Probl\`eme]
+\newtheorem{problem*}[namedth@@r@m*]{\Problem}
+\babel\def\Proposition{Proposition}[%
+ german=Behauptung,french=Proposition]
+\newtheorem{proposition*}[namedth@@r@m*]{\Proposition}
+\babel\def\Question{Question}[german=Frage,french=Question]
+\newtheorem{question*}[namedth@@r@m*]{\Question}%
+\babel\def\Remark{Remark}[german=Bemerkung,french=Remarque]
+\newtheorem{remark*}[namedth@@r@m*]{\Remark}
+\babel\def\Result{Result}[german=Ergebnis,french=R\'esultat]
+\newtheorem{result*}[namedth@@r@m*]{\Result}
+\babel\def\Theorem{Theorem}[german=Satz,french=Th\'eor\`eme]
+\newtheorem{theorem*}[namedth@@r@m*]{\Theorem}
+\babel\def\Thesis{Thesis}[german=These,french=Th\`ese]
+\newtheorem{thesis*}[namedth@@r@m*]{\Thesis}%
+\babel\def\Warning{Warning}[german=Warnung,french=Alerte]
+\newtheorem{warning*}[namedth@@r@m*]{\Warning}%
+%%\newtheorem{example*}[namedth@@r@m*]{Example}%
+\babel\def\Example{Example}[german=Beispiel,french=Exemple]
+\newenvironment{example*}[1][]{%
+ \cc@ifempty{#1}
+ {\csname namedtheorem*\endcsname{\Example}}%
+ {\csname namedtheorem*\endcsname{\Example}[#1]}%
+ \upshape
+ \let\qedsymbol\eoesymbol
+ }
+{\qed\csname endnamedtheorem*\endcsname}
+% \end{macrocode}
+% Note that examples have an end of example mark.
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \begin{macro}{\theorempreamble}
+% For numbered theorems, we modify the above slighlty.
+% \begin{macrocode}
+\def\theorempreamble\@thm#1#2{%
+ \defprefix{#1}##1{#2~##1}%
+ \EnumerationInTheorems{#1}%
+ \pagebreak[3]\relax
+ \the\everytheorem
+ \@thm{#1}{#2}}
+\theorem@bodyfont{\theorempreamble}
+\theoremstyle{cc}
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{namedth@@r@m}
+% \begin{environment}{namedtheorem}
+% \begin{environment}{theorem}
+% \begin{environment}{lemma}
+% \begin{environment}{corollary}
+% \begin{environment}{proposition}
+% \begin{environment}{fact}
+% \begin{environment}{remark}
+% \begin{environment}{openquestion}
+% \begin{environment}{definition}
+% \begin{environment}{problem}
+% \begin{environment}{notation}
+% \begin{environment}{exercise}
+% \begin{environment}{assumption}
+% \begin{environment}{open}
+% \begin{environment}{claim}
+% \begin{environment}{conjecture}
+% \begin{environment}{observation}
+% \begin{environment}{result}
+% \begin{environment}{note}
+% \begin{environment}{hypothesis}
+% \begin{environment}{example}
+% \begin{environment}{answer}
+% \begin{environment}{convention}
+% \begin{environment}{counterexample}
+% \begin{environment}{question}
+% \begin{environment}{thesis}
+% \begin{environment}{warning}
+% Next we define the numbered (unstarred) versions of the theorem
+% like environments.
+% \changes{v2.01}{2000/06/28}{Added handling for cctheorems+separatelycounted.
+% Michael N{\"{u}}sken, Paderborn.}
+% \changes{v2.01}{2001/03/12}{Added handling optional arguments for
+% \lenv{example} and \lenv{example*}. Michael N{\"{u}}sken, Paderborn.}
+% \begin{macrocode}
+\newtheorem{namedth@@r@m}{\the\theoremtitle}
+\if@ccnosepeqncnt
+\let\c@namedth@@r@m\c@equation
+\def\thenamedth@@r@m{\theequation}
+\fi
+\newenvironment{namedtheorem}[1]
+ {\theoremtitle{#1}\namedth@@r@m}
+ {\endnamedth@@r@m}
+\if@standardtheorems
+\newtheorem{answer}[namedth@@r@m]{\Answer}
+\newtheorem{assumption}[namedth@@r@m]{\Assumption}
+\newtheorem{claim}[namedth@@r@m]{\Claim}
+\newtheorem{conjecture}[namedth@@r@m]{\Conjecture}
+\newtheorem{convention}[namedth@@r@m]{\Convention}
+\newtheorem{corollary}[namedth@@r@m]{\Corollary}
+\newtheorem{counterexample}[namedth@@r@m]{\Counterexample}
+\newtheorem{definition}[namedth@@r@m]{\Definition}
+\newtheorem{exercise}[namedth@@r@m]{\Exercise}
+\newtheorem{fact}[namedth@@r@m]{\Fact}
+\newtheorem{hypothesis}[namedth@@r@m]{\Hypothesis}
+\newtheorem{lemma}[namedth@@r@m]{\Lemma}
+\newtheorem{notation}[namedth@@r@m]{\Notation}
+\newtheorem{note}[namedth@@r@m]{\Note}
+\newtheorem{observation}[namedth@@r@m]{\Observation}
+\newtheorem{open}[namedth@@r@m]{\OpenQuestion}
+\newtheorem{openquestion}[namedth@@r@m]{\OpenQuestion}
+\newtheorem{problem}[namedth@@r@m]{\Problem}
+\newtheorem{proposition}[namedth@@r@m]{\Proposition}
+\newtheorem{question}[namedth@@r@m]{\Question}
+\newtheorem{remark}[namedth@@r@m]{\Remark}
+\newtheorem{result}[namedth@@r@m]{\Result}
+\newtheorem{theorem}[namedth@@r@m]{\Theorem}
+\newtheorem{thesis}[namedth@@r@m]{\Thesis}
+\newtheorem{warning}[namedth@@r@m]{\Warning}
+\newenvironment{example}[1][]{%
+ \cc@ifempty{#1}
+ {\namedtheorem{\Example}}%
+ {\namedtheorem{\Example}[#1]}%
+ \upshape
+ \let\qedsymbol\eoesymbol
+ }
+{\qed\endnamedtheorem}
+\else
+\newtheorem{answer}{\Answer}
+\newtheorem{assumption}{\Assumption}
+\newtheorem{claim}{\Claim}
+\newtheorem{conjecture}{\Conjecture}
+\newtheorem{convention}{\Convention}
+\newtheorem{corollary}{\Corollary}
+\newtheorem{counterexample}{\Counterexample}
+\newtheorem{definition}{\Definition}
+\newtheorem{exercise}{\Exercise}
+\newtheorem{fact}{\Fact}
+\newtheorem{hypothesis}{\Hypothesis}
+\newtheorem{lemma}{\Lemma}
+\newtheorem{notation}{\Notation}
+\newtheorem{note}{\Note}
+\newtheorem{observation}{\Observation}
+\newtheorem{open}{\OpenQuestion}
+\newtheorem{openquestion}{\OpenQuestion}
+\newtheorem{problem}{\Problem}
+\newtheorem{proposition}{\Proposition}
+\newtheorem{question}{\Question}
+\newtheorem{remark}{\Remark}
+\newtheorem{result}{\Result}
+\newtheorem{theorem}{\Theorem}
+\newtheorem{thesis}{\Thesis}
+\newtheorem{warning}{\Warning}
+\newtheorem{exampleexample}{\Example}
+\newenvironment{example}{%
+ \exampleexample%
+ \upshape
+ \let\qedsymbol\eoesymbol
+ }
+{\qed\endexampleexample}
+\fi
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+%
+% \begin{environment}{continued}
+% \begin{environment}{contexample}
+% These two environments are intended to be used for continuation
+% of previous theorems or examples. Note that examples need a
+% different treatment since they have an end of example mark.
+% \begin{macrocode}
+\babel\def\ccContinued{continued}[%
+ german=fortgesetzt,french=continu\'e(e)]
+\newenvironment{continued}[1]{%
+ \csname namedtheorem*\endcsname{\ref{#1} \ccContinued}%
+ }{\csname endnamedtheorem*\endcsname}
+\newenvironment{contexample}[1]{%
+ \csname namedtheorem*\endcsname{\ref{#1} \ccContinued}%
+ \upshape
+ \let\qedsymbol\eoesymbol
+ }
+{\qed\csname endnamedtheorem*\endcsname}
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+% \begin{macro}{\eoesymbol}
+% We initialize the end of example mark as a |\lozenge| ($\lozenge$).
+% \begin{macrocode}
+\newcommand{\eoesymbol}{\lozenge}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+%</ccthm>
+% \end{macrocode}
+%
+% \GetFileInfo{ccproof.sty}
+% \CodelinePrefix{P}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+% \begin{macrocode}
+%<*ccproof>
+\ProvidesPackage{ccproof}[2000/02/29 v2.04
+ proof environments for cc. Michael Nuesken, Bonn.]
+% \end{macrocode}
+%
+% We rely on F.~Mittelbach's \Lpackage{theorem} style plus the
+% corresponding layout for \cc.
+% \begin{macrocode}
+\RequirePackage{theorem}
+\RequirePackage{thcc}
+% \end{macrocode}
+%
+% \subsection{End of proof marks and \cs{qed}}
+%
+% The package \Lpackage{ccqed}, which is based on \Lpackage{QED} by
+% Paul Taylor, defines a macro |\pushright| which pushes its argument
+% to the right margin. (Note that this is problematic since it can
+% happen, that the argument does not fit on the present line but
+% still it should be at the right margin and not on the next page.)
+% If you use |\qed| outside proofs or theorem-like environments,
+% nothing happens. |\Qed| works then, too. (Although, you crash any
+% structure when using it!)
+% \begin{macrocode}
+\RequirePackage{ccqed}
+\newcommand{\Qed}{\@qedtrue\qed}%
+% \end{macrocode}
+%
+% \subsection{Proof environments}
+%
+% \begin{macro}{\everyproof}
+% First, we introduce a token list which will be evaluated each
+% time a proof is typed.
+% \begin{macrocode}
+\newtoks\everyproof \everyproof{}
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{namedproof}
+% Surprisingly, we define the environment \Lenv{namedproof} as a
+% theorem-like environment. So we select the appropriate theorem
+% style and the desired font for its body.
+% \begin{macrocode}
+\theoremstyle{ccproof}
+\theorembodyfont{}
+% \end{macrocode}
+% \begin{environment}{pr@@f}
+% Then we define an intermediate theorem-like environment
+% \Lenv{pr@@f} which has a variable title.
+% \begin{macrocode}
+\newtoks\prooftitle
+\newtheorem{pr@@f}{\the\prooftitle}
+% \end{macrocode}
+% \end{environment}
+% This is now used to define the \Lenv{namedproof} environment, which
+% sets the title, the end of proof mark, executes |\everyproof|,
+% and produces the end of proof mark using |\qed|. (Note that the
+% macro |\qed| can be used in the proof, then at the end no second
+% end of proof mark is produced.)
+% \begin{macrocode}
+\newenvironment{namedproof}[2][\qedsymbol]{%
+ \save@set@qed
+ \prooftitle{#2}%
+ \def\@tempa{#1}%
+ \def\@tempc{\qedsymbol}%
+ \ifx\@tempa\@tempc\relax\else\let\qedsymbol\@tempa\fi%
+ \the\everyproof \pr@@f
+ }{%
+ \qed\restore@qed
+ \endpr@@f}
+% \end{macrocode}
+% \end{environment}
+% \begin{environment}{proof}
+% The environment \Lenv{proof} is just a specialization of the
+% \Lenv{namedproof} environment.
+% \begin{macrocode}
+\babel\def\Proof{Proof}[german=Beweis,french=Preuve]
+\newenvironment{proof}{\namedproof{\Proof}}{\endnamedproof}
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%</ccproof>
+% \end{macrocode}
+%
+% \GetFileInfo{ccalgo.sty}
+% \CodelinePrefix{A}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+% \begin{macrocode}
+%<*ccalgo>
+% \end{macrocode}
+% \changes{v0.90}{1999/11/15}{Beta version. Michael N{\"{u}}sken, Paderborn}
+%
+% This package can only be used with \LaTeXe, so we make sure that an
+% appropriate message is displayed when another \TeX{} format is
+% used.
+%
+% Announce the package and its version:
+% \changes{v0.91}{2000/02/29}{Advanced version to official 2.00}
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{ccalgo}[2005/08/27 v2.04
+ algorithm environment for cc. Michael Nuesken, Bonn.]
+% \end{macrocode}
+% Next we undefine some macros in case of overloading.
+% \begin{macrocode}
+\let\namedalgorithm\@undefined
+\let\endnamedalgorithm\@undefined
+\let\algorithm\@undefined
+\let\endalgorithm\@undefined
+% \end{macrocode}
+%
+% For a dirty trick below we rely on the specific implementation of
+% |\@item|. Thus we verify it!
+% \begin{macrocode}
+{\def\algonumerate@item[#1]{%
+ \if@noparitem
+ \@donoparitem
+ \else
+ \if@inlabel
+ \indent \par
+ \fi
+ \ifhmode
+ \unskip\unskip \par
+ \fi
+ \if@newlist
+ \if@nobreak
+ \@nbitem
+ \else
+ \addpenalty\@beginparpenalty
+ \addvspace\@topsep
+ \addvspace{-\parskip}%
+ \fi
+ \else
+ \addpenalty\@itempenalty
+ \addvspace\itemsep
+ \fi
+ \global\@inlabeltrue
+ \fi
+ \everypar{%
+ \@minipagefalse
+ \global\@newlistfalse
+ \if@inlabel
+ \global\@inlabelfalse
+ {\setbox\z@\lastbox
+ \ifvoid\z@
+ \kern-\itemindent
+ \fi}%
+ \box\@labels
+ \penalty\z@
+ \fi
+ \if@nobreak
+ \@nobreakfalse
+ \clubpenalty \@M
+ \else
+ \clubpenalty \@clubpenalty
+ \everypar{}%
+ \fi}%
+ \if@noitemarg
+ \@noitemargfalse
+ \if@nmbrlist
+ \refstepcounter\@listctr
+ \fi
+ \fi
+ \sbox\@tempboxa{\makelabel{#1}}%
+% \end{macrocode}
+% We require that |\global| follows this |\makelabel| to insert a hook.
+% \begin{macrocode}
+ \global\setbox\@labels\hbox{%
+ \unhbox\@labels
+ \hskip \itemindent
+ \hskip -\labelwidth
+ \hskip -\labelsep
+ \ifdim \wd\@tempboxa >\labelwidth
+ \box\@tempboxa
+ \else
+ \hbox to\labelwidth {\unhbox\@tempboxa}%
+ \fi
+ \hskip \labelsep}%
+ \ignorespaces}
+\ifx\algonumerate@item\@item\else
+\PackageWarningNoLine{ccalgo}{%
+ Command \protect\@item\space has changed.\MessageBreak
+ Check if current package is valid}
+\fi}
+% \end{macrocode}
+% We load Frank Mittelbach's theorem style, \cc's add-on and the
+% \Lpackage{relabel} package. (The latter is for adding prefixes to
+% labels and thelike.)
+% \begin{macrocode}
+\RequirePackage{theorem}
+\RequirePackage{thcc}
+\RequirePackage{relabel}
+% \end{macrocode}
+%
+% This macro restores the parshape of the current list.
+% \begin{macrocode}
+\def\list@parshape{%
+ %%\typeout{parshape 1 \the\@totalleftmargin+\the\linewidth}%
+ \parshape \@ne \@totalleftmargin \linewidth}
+% \end{macrocode}
+% Reinitializing the list means to readjust the left margin while
+% leaving the position of the list's labels fixed.
+% \begin{macrocode}
+\newdimen\reinit@list@last
+\def\reinit@list#1{%
+ \advance\itemindent\reinit@list@last
+ \advance\@totalleftmargin-\reinit@list@last
+ \advance\linewidth\reinit@list@last
+ \global\reinit@list@last#1\relax
+ \ifdim\reinit@list@last>\algonumerate@maxindent
+ \global\reinit@list@last\algonumerate@maxindent\fi
+ \advance\itemindent-\reinit@list@last
+ \advance\@totalleftmargin\reinit@list@last
+ \advance\linewidth-\reinit@list@last
+ %%\typeout{\the\@totalleftmargin + \the\linewidth}%
+ \list@parshape}
+% \end{macrocode}
+% Often reinitialization is needed with respect to the label's
+% width.
+% \begin{macrocode}
+\def\reinit@list@label{%
+ \reinit@list{\wd\@tempboxa}%
+ }
+% \end{macrocode}
+% \begin{macro}{\makealgolabel}
+% The standard format of the labels is the number followed by a dot.
+% \begin{macrocode}
+\newcommand{\makealgolabel}[1]{#1.}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\makeoptalgolabel}
+% A special label is surrounded by parentheses.
+% \begin{macrocode}
+\newcommand{\makeoptalgolabel}[1]{(#1)}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\makeoptalgocurrentlabel}
+% This macro is used to produce the |\bare| reference form for a
+% special label.
+% \begin{macrocode}
+\let\makeoptalgocurrentlabel\makeoptalgolabel
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{The \Lenv{algonumerate} environment}
+%
+% This environment is the basis of the algorithm environment. It
+% allows some items with names (as |Input|, |Output|) which have a
+% special indention. These named and the following numbered items
+% are separated by a |\medskip|.
+%
+% We need a counter. By default we do not use a prefix.
+% \begin{macrocode}
+\newcounter{algonumerate}
+\defprefix{algonumerate}{}
+% \end{macrocode}
+% This count is the number of named items.
+% \begin{macrocode}
+\newcount\algonumerate@items
+% \end{macrocode}
+% Formatting the counter.
+% \begin{macrocode}
+\renewcommand{\thealgonumerate}{%
+ \expandafter\ifnum\value{algonumerate}<\@ne
+ \algonumfield%
+ \else
+ \arabic{algonumerate}\fi}%
+% \end{macrocode}
+% This macro returns the name corresponding to the counter
+% |algonumerate|. The macro |\@algonumfield| should be
+% defined using |\ifcase-#1| \dots{} |\fi| and return the
+% corresponding name. This is done be |\algonumerateinit|, see
+% below.
+% \begin{macrocode}
+\def\algonumfield{\ignorespaces
+ \ifx\@algonumfield\relax\else
+ \expandafter\@algonumfield\csname c@algonumerate\endcsname\fi
+ \unskip}
+% \end{macrocode}
+% A toggle to distinguish special labels and numbered labels.
+% \begin{macrocode}
+\newif\if@speciallabel
+% \end{macrocode}
+% This macro produces the labels in all cases.
+% \begin{macrocode}
+\newcommand{\labelalgonumerate}{%
+ \count@\value{algonumerate}%
+ \ifnum\count@<\z@
+ \algonumfield:%
+ \else
+ \makealgolabel{\thealgonumerate}\fi
+ }%
+% \end{macrocode}
+% These two dimensions define the width of a label and its distance
+% to the text.
+% \begin{macrocode}
+\newdimen\algo@labelsep
+\newdimen\steplabelwidth
+% \end{macrocode}
+% This token list is executed at the next |\item|.
+% \begin{macrocode}
+\newtoks\AtNextItem
+% \end{macrocode}
+% A toggle noting whether the named items are complete or not.
+% \begin{macrocode}
+\newif\if@requireditemscomplete
+% \end{macrocode}
+% This is |\makelabel| for our list. It produces the label,
+% inserts the hook and makes all necessary modifications.
+% \begin{macrocode}
+\newcommand{\algonumerate@label}[1]{%
+% \end{macrocode}
+% Decide whether this is a special item and set the corresponding
+% toggle.
+% \begin{macrocode}
+ \def\@tempa{#1}\def\@tempc{\@itemlabel}%
+ %%\show\@tempa\show\@tempc
+ \ifx\@tempa\@tempc\global\@speciallabelfalse
+ \else\global\@speciallabeltrue\fi
+% \end{macrocode}
+% Distinguish cases: named items, first non-named items, numbered items,
+% and special (labelled) items.
+% \begin{macrocode}
+ \expandafter\ifnum\value{algonumerate}<\z@
+% \end{macrocode}
+% A named item's label is simply typeset with some space.
+% \begin{macrocode}
+ #1\hskip\algo@labelsep%
+ \else
+ \ifx\@tempa\@empty
+% \end{macrocode}
+% An empty special item's label remains invisible.
+% \begin{macrocode}
+ \hskip\steplabelwidth\hskip\algo@labelsep
+ \else
+% \end{macrocode}
+% A non-named item's label is typeset in a box using
+% |\makeoptalgolabel| to format a special label.
+% \begin{macrocode}
+ \hb@xt@\steplabelwidth{\hss
+ \hb@xt@\steplabelwidth{\hfill
+ \if@speciallabel
+ \makeoptalgolabel{#1}%
+ \else
+ #1%
+ \fi
+ }}\hskip\algo@labelsep%
+ \fi\fi
+% \end{macrocode}
+%
+% The following two lines are a dirty trick!!! This establishes
+% the hook.
+% \begin{macrocode}
+ \global\let\algonumerate@global\global
+ \gdef\global{\algonumerate@global\let\global\algonumerate@global
+% \end{macrocode}
+% This code is then executed in the |\item| command outside any
+% extra groups.
+%
+% First, we handle the boundary between named and numbered items.
+% \begin{macrocode}
+ \expandafter\count@\value{algonumerate}%
+ %%{\tracingall\nonstopmode\showbox\@tempboxa}%
+% \end{macrocode}
+% The counter jumpes over the value $0$.
+% \begin{macrocode}
+ \ifnum\count@=\m@ne
+ \stepcounter{algonumerate}%
+ \fi
+% \end{macrocode}
+% Test whether we bypassed the boundary and issue |\medskip| once.
+% \begin{macrocode}
+ \ifnum\count@=\z@
+ \if@requireditemscomplete\else
+ \global\@requireditemscompletetrue
+ \ifnum\algonumerate@items>\z@\medskip\fi
+ \fi
+ \fi
+ \ifnum\count@=\@ne
+ \if@requireditemscomplete\else
+ \global\@requireditemscompletetrue
+ \ifnum\algonumerate@items>\z@\medskip\fi
+ \fi
+ \fi
+% \end{macrocode}
+% To enable referencing of special label's we need to define
+% |\@currentlabel| and (for the |\bare| version)
+% |\@bare@currentlabel|.
+% \begin{macrocode}
+ \if@speciallabel
+ \protected@edef\@currentlabel{\csname p@\@listctr\endcsname
+ {\makeoptalgocurrentlabel{#1}}}%
+ \protected@edef\@bare@currentlabel{#1}%
+ \fi
+% \end{macrocode}
+% Remember the reference globally. (This is used in the
+% \Lenv{block} environment below.)
+% \begin{macrocode}
+ \global\let\latest@item@currentlabel\@currentlabel
+ \global\let\latest@item@bare@currentlabel\@bare@currentlabel
+% \end{macrocode}
+% Reset the special label toggle.
+% \begin{macrocode}
+ \global\@speciallabeltrue
+% \end{macrocode}
+% Execute |\AtNextItem| once.
+% \begin{macrocode}
+ \the\AtNextItem \global\AtNextItem{}%
+% \end{macrocode}
+% Reinitialize the list indentions.
+% \begin{macrocode}
+ \reinit@list@label
+% \end{macrocode}
+% Execute the |\global| which was used to implement this hook.
+% \begin{macrocode}
+ \global}%
+ }
+% \end{macrocode}
+%
+% Named items will be indented as far as the label, unless this
+% exceeds the maximal value stored in |\algonumerate@maxindent|.
+% Its default value is $20\%$ of the |\textwidth|.
+% \begin{macrocode}
+\newdimen\algonumerate@maxindent
+\AtBeginDocument{\ifdim\algonumerate@maxindent=\z@
+ \algonumerate@maxindent.2\textwidth\fi}
+% \end{macrocode}
+% \begin{macro}{\algonumerateinit}
+% This macro prepares all things for the named items. Its argument
+% is just the comma separated list of the names.
+% \begin{macrocode}
+\def\algonumerateinit#1{%
+ \def\@algonumfield{}%
+ \let\ccorg@or\or\let\or\relax
+ \algonumerate@items\z@
+ \@for\@tempa:=#1\do{%
+ \advance\algonumerate@items\@ne
+ \@temptokena\expandafter{\@tempa}%
+ \toks@\expandafter{\@algonumfield}%
+ \edef\@algonumfield{\the\@temptokena\or\the\toks@}%
+ }%
+ \let\or\ccorg@or
+ \toks@\expandafter{\@algonumfield}%
+ \edef\@algonumfield##1{\noexpand\ifcase-##1\noexpand\or
+ \the\toks@\noexpand\fi}%
+% \typeout{Starting ...}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{algonumerate}
+% Finally, we define the environment \Lenv{algonumerate}. Apart
+% from initiation the list, it also activates the environments
+% \Lenv{block} (aka \Lenv{body}), \Lenv{range}, \Lenv{indention},
+% and \Lenv{meta}.
+% \begin{macrocode}
+\newenvironment{algonumerate}{%
+ \if@inlabel~\fi\par
+ \list{\labelalgonumerate}{%
+ \usecounter{algonumerate}%
+ \let\makelabel\algonumerate@label
+ \parsep\z@%
+ \topsep\z@%
+ \itemsep\z@%
+ \parskip\z@%
+ %\leftmargin\z@
+ %\algo@labelsep\labelsep
+ %\labelsep\z@
+ \leftmargin\labelsep
+ \algo@labelsep\z@
+ \settowidth\steplabelwidth{\makealgolabel{99}}%
+ \labelwidth\z@
+ \global\reinit@list@last\z@
+ }%
+ \setcounter{algonumerate}{-\algonumerate@items}%
+ \ifnum\algonumerate@items>\z@
+ \addtocounter{algonumerate}\m@ne
+ \global\@requireditemscompletefalse
+ \else
+ \global\@requireditemscompletetrue
+ \fi
+ \setcounter{block@cnt}\z@
+ \let\step\algo@step
+ \let\block\algo@block
+ \let\endblock\endalgo@block
+ \let\range\algo@range
+ \let\endrange\endalgo@range
+ \let\indention\algo@indention
+ \let\endindention\endalgo@indention
+ \let\body\algo@block
+ \let\endbody\endalgo@block
+ \let\meta\algo@meta
+ \let\endmeta\endalgo@meta
+ }{%
+ \endlist\vskip\topskip}
+% \end{macrocode}
+% \end{environment}
+%
+% The \Lenv{indention} environment indents the steps inside it by an
+% amount of |\blockindent|. Its default value is |\parindent|.
+% \begin{macrocode}
+\newdimen\blockindent \blockindent\parindent
+% \end{macrocode}
+% \begin{macro}{\nextblock}
+% This is just a counter for internal use. |\nextblock| stores
+% locally a new value in |\currentblock|. See the sophisticated
+% things below on how to use this.
+% \begin{macrocode}
+\newcounter{block@cnt}
+\newcommand{\nextblock}{%
+ \stepcounter{block@cnt}\edef\currentblock{\arabic{block@cnt}}%
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\refsetrange}
+% This sets the current reference to the range of argument 1 to
+% argument 2, each argument is interpreted as a \meta{subkey}. The
+% current reference will be empty if the range is known to be
+% trivial.
+% \begin{macrocode}
+\newif\if@trivialrange
+\newcommand{\refsetrange}[2]{%
+ {\shortlabeltrue
+ \let\@tempa\relax
+ \protected@edef\@tempa{%
+ \csname r@\the\algorithmmasterkey-#1\endcsname}%
+ %%\show\@tempa
+ \let\@tempc\relax
+ \protected@edef\@tempc{%
+ \csname r@\the\algorithmmasterkey-#2\endcsname}%
+ %%\show\@tempc
+ \ifx\@tempa\@tempc\global\@trivialrangetrue
+ \else\global\@trivialrangefalse\fi
+ }%
+ \if@trivialrange
+ \protected@edef\@currentlabel{}%
+ \else
+ \protected@edef\@currentlabel{%
+ \csname p@\@listctr\endcsname{%
+ \protect\short\protect\ref{\the\algorithmmasterkey-#1}%
+ --%
+ \protect\short\protect\ref{\the\algorithmmasterkey-#2}%
+ }}%
+ \fi
+ \protected@edef\@bare@currentlabel{%
+ \protect\bare\protect\ref{\the\algorithmmasterkey-#1}%
+ --%
+ \protect\bare\protect\ref{\the\algorithmmasterkey-#2}%
+ }%
+ }
+% \end{macrocode}
+% \end{macro}
+% Note: the following environments are defined with a prefix |algo@|
+% in their names since they should not be available outside the
+% \Lenv{algonumerate} environment.
+% \begin{environment}{range}
+% A |\label| (or an |\algolabel|) after the |\begin{range}| will
+% refer to the \emph{range} of items inside the environment.
+% \begin{macrocode}
+\newenvironment{algo@range}{%
+ \par
+ \stepcounter{block@cnt}\edef\block@{\arabic{block@cnt}}%
+ \refsetrange{bob\block@}{eob\block@}%
+ \AtNextItem{\algolabel{bob\block@}}%
+ }{%
+ \algolabel{eob\block@}%
+ \par
+ \global\let\algo@block@currentlabel\@currentlabel
+ \global\let\algo@block@bare@currentlabel\@bare@currentlabel
+ \aftergroup\algo@endrange@aftergroup
+ }
+% \end{macrocode}
+% \end{environment}
+% This command restores the latest reference to the latest
+% encountered item.
+% \begin{macrocode}
+\def\algo@endrange@aftergroup{%
+% \let\@currentlabel\algo@block@currentlabel
+% \let\@bare@currentlabel\algo@block@bare@currentlabel
+ \let\@currentlabel\latest@item@currentlabel
+ \let\@bare@currentlabel\latest@item@bare@currentlabel
+% [Restored \@bare@currentlabel]
+ }
+% \end{macrocode}
+% \begin{environment}{indention}
+% The items inside this environment are indented by an amount of
+% |\blockindent|.
+% \begin{macrocode}
+\newenvironment{algo@indention}{%
+ \par
+ \if@requireditemscomplete
+ \advance\leftmargin\blockindent
+ \advance\labelsep\blockindent
+ \advance\@totalleftmargin\blockindent
+ \advance\linewidth-\blockindent
+ \def\algo@indention@undo{%
+ \advance\leftmargin-\blockindent
+ \advance\labelsep-\blockindent
+ \advance\@totalleftmargin-\blockindent
+ \advance\linewidth\blockindent
+ }
+ \list@parshape
+ \else
+ \let\algo@indention@undo\relax
+ \fi
+ }{%
+ \par
+ \algo@indention@undo
+% \advance\leftmargin-\blockindent
+% \advance\labelsep-\blockindent
+% \advance\@totalleftmargin-\blockindent
+% \advance\linewidth\blockindent
+ \list@parshape
+ \aftergroup\list@parshape
+ \global\let\algo@block@currentlabel\@currentlabel
+ \global\let\algo@block@bare@currentlabel\@bare@currentlabel
+ \aftergroup\algo@endrange@aftergroup
+ }
+% \end{macrocode}
+% \end{environment}
+% \begin{environment}{block}
+% This combines the environment \Lenv{indention} and \Lenv{range}.
+% \begin{macrocode}
+\newif\ifindented@block
+\newenvironment{algo@block}{%
+ \indented@blockfalse
+ \if@requireditemscomplete\indented@blocktrue\fi
+ \ifindented@block\algo@indention
+ \else
+ \sbox\@tempboxa{\makelabel{}}%
+ \fi
+ \algo@range}{%
+ \endalgo@range
+ \ifindented@block\endalgo@indention\fi
+ }
+% \end{macrocode}
+% \end{environment}
+% \begin{environment}{meta}
+% This environment allows to insert comment-like things in
+% algorithms. It is indented by an amount of |meta@indent| which
+% defaults to |0pt|.
+% \begin{macrocode}
+\newdimen\meta@indent
+\newenvironment{algo@meta}{%
+ \@newlistfalse
+ \vskip\topskip
+ \par
+ %%\meta@indent\leftmargin
+ %%\advance\meta@indent\algo@labelsep
+ %%\advance\meta@indent\steplabelwidth
+ \meta@indent\@totalleftmargin
+ \advance\labelsep-\meta@indent
+ \advance\@totalleftmargin-\meta@indent
+ \advance\linewidth\meta@indent
+ \advance\leftmargin-\meta@indent
+ \list@parshape
+ }{%
+ \vskip\topskip
+ \par
+ \advance\labelsep\meta@indent
+ \advance\@totalleftmargin\meta@indent
+ \advance\linewidth-\meta@indent
+ \advance\leftmargin\meta@indent
+ \aftergroup\list@parshape
+ }
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\step}
+% This macro, only available inside \Lenv{algonumerate}, is
+% essentially a combination of |\item| and |\algolabel|.
+% \begin{macrocode}
+\newcommand{\algo@step}[2][]{%
+ \expandafter\ifnum\value{algonumerate}<\m@ne
+ \PackageError{ccalgo}{Missing \protect\item}{}%
+ \fi
+ \cc@ifempty{#1}{\item}{\item[#1]}%
+ \def\@tempa{#2}\ifx\@tempa\@empty\else\algolabel{#2}\fi%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Algorithm environments}
+%
+% Here we define the central environment to typeset algorithms.
+%
+% First, we need some preperation. The token list |\algotitle|
+% allows the use of another name each time \Lenv{namedalgorithm} is used.
+% \begin{macrocode}
+\newtoks\algotitle
+% \end{macrocode}
+% The theorem like environment \Lenv{named@lg@r@thm*} is responsible
+% for the outer layout of unnumbered algorithms. The theorem style
+% used comes from the package \Lpackage{thcc}.
+% \begin{macrocode}
+\theorembodyfont{}%
+\theoremstyle{ccalgonn}
+\newtheorem{named@lg@r@thm*}{\the\algotitle}
+\defprefix{named@lg@r@thm*}#1{\the\algotitle}
+% \end{macrocode}
+% The theorem like environment \Lenv{named@lg@r@thm} is responsible
+% for the outer layout of numbered algorithms. The theorem style
+% used comes from the package \Lpackage{thcc}. We ensure that the
+% counter used is the same as the one used for equations.
+% \changes{v2.03}{2002/02/01}{Removed a bug, now
+% \cs{thenamed@lg@r@thm} equals \cs{thenamedth@@r@m}.}
+% \begin{macrocode}
+\theoremstyle{ccalgo}
+\newtheorem{named@lg@r@thm}{\the\algotitle}
+\defprefix{named@lg@r@thm}#1{\the\algotitle~#1}
+\let\c@named@lg@r@thm\c@namedth@@r@m
+\let\thenamed@lg@r@thm\thenamedth@@r@m
+% \end{macrocode}
+%
+% \begin{environment}{namedalgorithm}
+% This combines all necessary to typeset an algorithm.
+% The environment takes up to four arguments. The first argument
+% is the \meta{heading}, in the standard |Algorithm|. The second
+% argument is optional and gives a comma separated list of titles
+% of required items. It defaults to |Input,Output|. The third
+% argument is the \meta{master-key} which is used to produce a
+% reference to the algorithm and in |\algolabel| to prefix
+% references inside the algorithm. The forth argument is again
+% optional and specifies a title.
+% \begin{macrocode}
+\babel\def\babelInput{Input}[german=Eingabe,french=Entr\'ee]
+\babel\def\babelOutput{Output}[german=Ausgabe,french=Sortie]
+\babel\def\babelstep{step}[german=Schritt,french=pas]%% ??? pas?
+\babel\def\babelStep{Step}[german=Schritt,french=Pas]%% ??? pas?
+\newtoks\algorithmmasterkey
+\newenvironment{namedalgorithm}[1]{%
+ \pagebreak[3]%
+ \def\algo@theorem{named@lg@r@thm}%
+ \algotitle{#1}%
+ \n@medalgorithm}
+{\endalgonumerate\csname end\algo@theorem\endcsname}
+\newenvironment{namedalgorithm*}[1]{%
+ \def\algo@theorem{named@lg@r@thm*}%
+ \algotitle{#1}%
+ \n@medalgorithm}
+{\endalgonumerate\csname end\algo@theorem\endcsname}
+\newcommand{\n@medalgorithm}[2][\babelInput,\protect\babelOutput]{%
+ \algonumerateinit{#1}%
+ \algorithmmasterkey{#2}%
+ \edef\@tempa{\the\algorithmmasterkey}\ifx\@tempa\@empty
+ \PackageError{ccalgo}{Empty key for algorithm like environment}{}\fi%
+ \n@m@d@lgorithm}
+\newcommand{\n@m@d@lgorithm}[1][]{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@empty\csname\algo@theorem\endcsname
+ \else\csname\algo@theorem\endcsname[#1]\fi%
+ \label{\the\algorithmmasterkey}%
+ \algo@keywords
+ \defprefix{algonumerate}{%
+ \Iflabelchanged{\algo@theorem}{\uselabel{\algo@theorem} %
+ \ifnum\c@algonumerate>\z@ \babelstep~\fi}}%
+% not good, since blocks need shorter labels!
+% \defprefix{algonumerate}##1{%
+% Step~##1\Iflabelchanged{\algo@theorem}
+% { of \uselabel{\algo@theorem}}}%
+ \algonumerate
+ }%
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\algolabel}
+% This macro allows to define references locally, it uses the
+% \meta{masterkey} which is an argument to the
+% \Lenv{namedalgorithm} environment.
+% \begin{macrocode}
+\def\algolabel#1{\label{\the\algorithmmasterkey-#1}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\stepref}
+% This macro allows to reference the labels defined by |\algolabel|
+% in a nice way. Its two arguments are the \meta{masterkey} and
+% the \meta{subkey}.
+% \begin{macrocode}
+\newcommand{\stepref}[2]{\babelStep~\short\ref{#1-#2} in \whole\ref{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\newalgorithm}
+% As |\newtheorem| allows to define new theorem like environments,
+% this macro allows to define new algorithm like environments in
+% fixing the first two arguments of the environment
+% \Lenv{namedalgorithm}. At the same time a starred version is
+% defined.
+% \changes{v2.01}{2000/11/07}{Removed a bug from \cs{n@walgorithm}.}
+% \begin{macrocode}
+\newcommand{\newalgorithm}[2]{%
+ \def\newalgo@name{#1}%
+ \def\newalgo@title{#2}%
+ \n@walgorithm}
+\newcommand{\n@walgorithm}[1][\babelInput,\protect\babelOutput]{%
+ \protected@edef\@tempa{%
+ \noexpand\newenvironment{\newalgo@name}%
+ {\noexpand\namedalgorithm{\newalgo@title}[\noexpand#1]}%
+ {\noexpand\endnamedalgorithm}%
+ \noexpand\newenvironment{\newalgo@name*}%
+ {\noexpand\csname namedalgorithm*\endcsname
+ {\newalgo@title}[\noexpand#1]}%
+ {\noexpand\csname endnamedalgorithm*\endcsname}%
+ }\@tempa
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{algorithm}
+% This is the standard case algorithm like environment. Its title
+% is |\algorithmname| and its required (named) items are |Input|
+% and |Output|.
+% \begin{macrocode}
+\babel\def\algorithmname{Algorithm}[%
+ german=Algorithmus,french=Algorithme]
+\newalgorithm{algorithm}{\protect\algorithmname}
+% \end{macrocode}
+% \changes{v2.01}{2000/09/23}{Added \cs{CALL}.}
+%
+% Keywords in algorithms are typeset by the command
+% |\keyword{|\meta{keyword}|}|. Some keywords are predefined. All
+% these things are only accessible inside algorithm like
+% environments.
+% \changes{v2.01}{2004/01/26}{Babelized algo@keywords.}
+% \begin{macrocode}
+\def\algo@keywords{%
+ \def\keyword##1{\textsf{##1} \ignorespaces}%
+ \babel\def\FOR{\keyword{For}}[german=\keyword{F{\"{u}}r}]%
+ \babel\def\DO{\keyword{do}}[german=\keyword{erledige}]%
+ \babel\def\endFOR{}[]%
+ \babel\def\WHILE{\keyword{While}}[german=\keyword{Solange}]%
+ \babel\def\endWHILE{}[]%
+ \babel\def\REPEAT{\keyword{Repeat}}[german=\keyword{Wiederhole}]%
+ \babel\def\UNTIL{\keyword{Until}}[german=\keyword{Bis}]%
+ \babel\def\IF{\keyword{If}}[german=\keyword{Falls}]%
+ \babel\def\THEN{\keyword{then}}[german=\keyword{dann}]%
+ \babel\def\ELIF{\keyword{Else if}}[german=\keyword{Sonst wenn}]%
+ \babel\def\ELSE{\keyword{Else}}[german=\keyword{Sonst}]%
+ \babel\def\endIF{}[]%
+ \babel\def\CALL{\keyword{Call}}[german=\keyword{Rufe}]%
+ \babel\def\RETURN{\keyword{Return}}[german=\keyword{Antworte}]%
+ \expandafter\selectlanguage\expandafter{\languagename}
+ \def\COMMENT##1{$\{$ ##1 $\}$}%
+ }
+% \end{macrocode}
+% \end{environment}
+%
+% \subsection{Some sophisticated environments for algorithms}
+%
+% \begin{macro}{\optitem}
+% This is a helper for the following sophisticated environments.
+% It issues an |\item| if necessary, and omits it otherwise.
+% \begin{macrocode}
+\newcommand{\optitem}[1]{%
+ \cc@ifempty{#1}{\if@inlabel\par\else\item\fi}{\item[#1]}%
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\algoprettify}
+% This is a helper for the following sophisticated environments.
+% It formats a 3-term command like \cs{IF} \meta{condition}
+% \cs{THEN} in a line or a multiline block depending on what is
+% nicer.
+% \begin{macrocode}
+% \changes{v2.01}{2001/01/24}{Added \cs{algoprettify}. Michael
+% N{\"{u}}sken, Paderborn}
+\newcommand{\algoprettify}[3]{%
+ \setbox2\hbox{#1}%
+ \setbox4\hbox{#2}%
+ \setbox6\hbox{#3}%
+ \setbox0\hbox{\unhcopy2\unhcopy4{ }\unhcopy6}%
+ \ifdim\wd0<\linewidth
+ \unhbox0
+ \else
+ \dimen0=\linewidth \advance\dimen0 by -\wd2
+ \unhbox2\parbox[t]{\dimen0}{\unhbox4\strut}\par\unhbox6
+ \fi
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{ifblock}
+% This produces |\IF| block.
+% \begin{macrocode}
+\newenvironment{ifblock}[2][]
+% \end{macrocode}
+% What do we do at the |\begin|.
+% \begin{macrocode}
+{%
+% \end{macrocode}
+% First, add |\item| if there is no |\item| immediately before the
+% \Lenv{ifblock}.
+% \begin{macrocode}
+ \optitem{#1}%
+% \end{macrocode}
+% Then generate a new |\currentlabel| which is valid until the end
+% of the \Lenv{ifblock}.
+% \begin{macrocode}
+ \nextblock
+% \end{macrocode}
+% Set a reference on the actual item.
+% \begin{macrocode}
+ \algolabel{if\currentblock}%
+% \end{macrocode}
+% Insert the text `|\IF|~\meta{condition}~|\THEN|'.
+% |\algoprettify| takes care of a long \meta{condition}.
+% \changes{v2.01}{2001/01/24}{Now \protect\Lenv{ifblock} and so on nicer for
+% long conditions. Michael N{\"{u}}sken, Paderborn}
+% \begin{macrocode}
+ \algoprettify{\IF}{#2}{\THEN}
+% \end{macrocode}
+% Begin the indention.
+% \begin{macrocode}
+ \indention
+% \end{macrocode}
+% Define the value for the possibly following |\algolabel| or
+% |\label|.
+% \begin{macrocode}
+ \refsetrange{if\currentblock}{endif\currentblock}%
+ }
+% \end{macrocode}
+% What do we do at the |\end|.
+% \begin{macrocode}
+{%
+% \end{macrocode}
+% Set a reference to the last item in the environment.
+% \begin{macrocode}
+ \algolabel{endif\currentblock}%
+% \end{macrocode}
+% End the indention.
+% \begin{macrocode}
+ \endindention}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{elifblock}
+% This produces an |\ELIF| block in the same manner as the |\IF| block.
+% \begin{macrocode}
+\newenvironment{elifblock}[2][]{%
+ \optitem{#1}%
+ \nextblock
+ \algoprettify{\ELIF}{#2}{\THEN}
+ \algolabel{elif\currentblock}%
+ \indention
+ \refsetrange{elif\currentblock}{endelif\currentblock}%
+ }{%
+ \algolabel{endelif\currentblock}%
+ \endindention}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{elseblock}
+% The |\ELSE| block differs from the last two only in the fact that
+% there is no condition.
+% \begin{macrocode}
+\newenvironment{elseblock}[1][]{%
+ \optitem{#1}%
+ \nextblock
+ \ELSE%
+ \algolabel{else\currentblock}%
+ \indention
+ \refsetrange{else\currentblock}{endelse\currentblock}%
+ }{%
+ \algolabel{endelse\currentblock}%
+ \endindention}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{forblock}
+% A |\FOR| block typesets a loop `for \meta{control} do \dots'.
+% Other than the previous environments we use \Lenv{block} rather
+% than only \Lenv{indention} since the range of steps in the
+% indented part is printed after the `do' (unless it is only one step).
+% \begin{macrocode}
+\newenvironment{forblock}[2][]{%
+ \optitem{#1}%
+ \nextblock
+ \algoprettify{\FOR}{#2}{%
+ \DO \short\ref{\the\algorithmmasterkey-body\currentblock}}%
+ \algolabel{for\currentblock}%
+ \block\algolabel{body\currentblock}%
+ \refsetrange{for\currentblock}{endfor\currentblock}%
+ }{%
+ \algolabel{endfor\currentblock}%
+ \endblock}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{whileblock}
+% The |\WHILE| block is similar to the |\FOR| block: `while
+% \meta{condition} do \dots'.
+% \begin{macrocode}
+\newenvironment{whileblock}[2][]{%
+ \optitem{#1}%
+ \nextblock
+ \algoprettify{\WHILE}{#2}{%
+ \DO \short\ref{\the\algorithmmasterkey-body\currentblock}}%
+ \algolabel{while\currentblock}%
+ \block
+ \algolabel{body\currentblock}%
+ \refsetrange{while\currentblock}{endwhile\currentblock}%
+ }{%
+ \algolabel{endwhile\currentblock}%
+ \endblock}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{untilblock}
+% The |\UNTIL| block is similar to the |\FOR| block: `until
+% \meta{condition} do \dots'.
+% \begin{macrocode}
+\newenvironment{untilblock}[2][]{%
+ \optitem{#1}%
+ \nextblock
+ \algoprettify{\UNTIL}{#2}{%
+ \DO \short\ref{\the\algorithmmasterkey-body\currentblock}}%
+ \algolabel{until\currentblock}%
+ \block
+ \algolabel{body\currentblock}%
+ \refsetrange{until\currentblock}{enduntil\currentblock}%
+ }{%
+ \algolabel{enduntil\currentblock}%
+ \endblock}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{blockuntil}
+% The reverse |\UNTIL| block is similar to the |\UNTIL| block but
+% the condition is checked at the end rather than at the beginning
+% of the environment.
+% \begin{macrocode}
+\newenvironment{blockuntil}[2][]{%
+ \optitem{#1}%
+ \nextblock
+ \def\repeat@cond{#2}%
+ \REPEAT \short\ref{\the\algorithmmasterkey-body\currentblock}%
+ \algolabel{repeat\currentblock}%
+ \block
+ \algolabel{body\currentblock}%
+ \refsetrange{repeat\currentblock}{endrepeat\currentblock}%
+ }{%
+ \endblock
+\item
+ \algolabel{endrepeat\currentblock}%
+ \algoprettify{\UNTIL}{\repeat@cond}{}}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{blockwhile}
+% The reverse |\WHILE| block is similar to the |\WHILE| block but
+% the condition is checked at the end rather than at the beginning
+% of the environment.
+% \begin{macrocode}
+\newenvironment{blockwhile}[2][]{%
+ \optitem{#1}%
+ \nextblock
+ \def\repeat@cond{#2}%
+ \REPEAT \short\ref{\the\algorithmmasterkey-body\currentblock}%
+ \algolabel{repeat\currentblock}%
+ \block
+ \algolabel{body\currentblock}%
+ \refsetrange{repeat\currentblock}{endrepeat\currentblock}%
+ }{%
+ \endblock
+\item
+ \algolabel{endrepeat\currentblock}%
+ \algoprettify{\WHILE}{\repeat@cond}{}}
+% \end{macrocode}
+% \end{environment}
+%
+% So far for algorithms.
+% \begin{macrocode}
+%</ccalgo>
+% \end{macrocode}
+%
+% \GetFileInfo{ccqed.sty}
+% \CodelinePrefix{Q}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+% \begin{macrocode}
+%<*ccqed>
+\ProvidesPackage{ccqed}[2000/02/29 v2.04
+ right-justified end-of-proof mark,
+ based on Paul Taylor's QED.sty of 24 June 1995]
+% \end{macrocode}
+% We reproduce some of Paul Taylor's comments here.
+%
+% \medskip\hrule\medskip
+%
+% \emph{Warning}: If you use this with Frank Mittlebach's
+% \Lpackage{theorem}\texttt{.sty} you \emph{must} load theorem first,
+% then QED, then do the |\newtheorem| commands.
+% \begin{center}
+% \begin{tabular}{ll}
+% Authoritative version: &
+% /pub/tex/contrib/pt/proofs/QED.sty\\
+% by anonymous FTP from:&
+% ftp.dcs.qmw.ac.uk\\
+% also CTAN: &
+% macros/generic/proofs/taylor/QED.sty\\
+% author/maintained by: &
+% Dr Paul Taylor \email{pt@dcs.qmw.ac.uk}\\
+% \end{tabular}
+% \end{center}
+%
+%
+%
+% \subsection{User Interface and Examples (see also Options below)}
+%
+% \emph{Warning}: |\qed| which doesn't follow |\Proof| will not print
+% the square.
+%
+% Unfortunately some environments, such as picture, do not allow this
+% at all. See the section "centering environments" below for the
+% mechanism for passing |\qed| to such an environment for special
+% processing.
+%
+% In fact |\qed| will only work in those environments which provide
+% access to the right hand side of the page. In other words, wherever
+% you think `|\hfill\square|' ought to work then |\qed| will; of course
+% it is just because that naive method doesn't work that this macro
+% file is needed at all. The macro was designed to solve the problem
+% in the case of `unrestricted horizontal mode' (ie at the end of a
+% paragraph); it also works in |$$| displays by pretending to be an
+% equation number. In most other cases it basically does
+% `|\hfill\square|' or `|\hfill$\square$|' and hopes for the best.
+%
+% If you have to put |\qed| outside the environment, it may be
+% appropriate to put |\vskip| |-\baselineskip| before it, unless of
+% course this would over-print. There is, however, still a danger
+% that TeX will break the page here. This seems to be unavoidable
+% if the environment ends with a |\penalty|.
+%
+% The eqnarray example above does not in fact work: if you try it
+% you'll get
+% \begin{flushleft}
+% |! Paragraph ended before \llap was complete|
+% \end{flushleft}
+% with \LaTeX{} in a mess. This is a very common place where you
+% might want to put the end of proof mark, and I also consider that
+% the fourth column should be available for `reasons' for equational
+% steps.
+% The following substitute for |\eqnarray| allows this, whilst being
+% compatible with automatic numbering. I have proposed it to Rainer
+% Sch\"{o}pf for inclusion in LaTeX. If you want to use it, please copy
+% it to another file rather than uncommenting it here. Don't forget to
+% use |\makeatletter| or put it in a documentstyle (\texttt{.sty}) file.
+%
+% \emph{Michael's warning}: This might not work with \LaTeXe{} any more.
+% \begin{macrocode}
+% \def\eqnarray{%
+% \stepcounter{equation}%
+% \let\@currentlabel\theequation
+% \global\@eqnswtrue\m@th
+% \global\@eqcnt\z@
+% \tabskip\@centering
+% \let\\\@eqncr
+% $$\halign to\displaywidth\bgroup
+% \@eqnsel\hskip\@centering$\displaystyle\tabskip\z@{##}$%
+% &\global\@eqcnt\@ne\hskip2\arraycolsep\hfil${##}$\hfil
+% &\global\@eqcnt\tw@\hskip2\arraycolsep
+% $\displaystyle\tabskip\z@{##}$\hfil\tabskip\@centering
+% &\global\@eqcnt\thr@@\hbox to\z@\bgroup
+% \hss##%*** instead of "\llap{##}"
+% \tabskip\z@\cr}%
+% \def\@@eqncr{\let\@tempa\relax
+% \ifcase\@eqcnt
+% \def\@tempa{& & &}\or
+% \def\@tempa{& &}\or
+% \def\@tempa{&}\else
+% \@eqnswfalse%*** instead of "\else\def\@tempa{&}"
+% \fi\@tempa
+% \if@eqnsw\@eqnnum\stepcounter{equation}\fi
+% \egroup%*** added, to match \bgroup in fourth cell of preamble
+% \global\@eqnswtrue\global\@eqcnt\z@\cr}
+% \end{macrocode}
+%
+% Why can't we do all of this with |\endProof|? Because by that stage
+% the damage has been done: the environments, paragraphs or displays
+% have already been closed and their |\hbox|'es added to the current
+% vertical list, and cannot be removed for alteration if this is the
+% current page.
+%
+% Even if you don't need to put |\qed| inside an inner environment to
+% avoid a blank line, it's still a good idea to do so, because
+% otherwise it's possible that intervening end-of-environment material
+% may allow TeX to put the mark on the next page.
+%
+% If you don't use \Lpackage{theorem}\texttt{.sty}, this file instead
+% provides options to use commands to begin theorems, instead of
+% enclosing them in environments, and to suppress numbering and
+% italicisation. A rudimentary version of |\newtheorem| for
+% plain\TeX{} is also implemented (always using commands rather than
+% environments).
+%
+% \subsection{Options}
+%
+% These are the user commands.
+%
+% \begin{macro}{\qed}
+% Suppressible printing of |\qedsymbol|.
+% \begin{macrocode}
+\def\qed{\protect\@qed{$\qedsymbol$}}
+% \end{macrocode}
+% \end{macro}
+%
+% |\pushright| takes an argument, which it always prints it is
+% (re)defined by |\WillHandleQED| and |\UnHandleQED| below (12.4.94)
+%
+% These are the user-settable parameters.
+%
+% \begin{macro}{\qedsymbol}
+% The actual (maths) symbol used by |\qed|.
+% \begin{macrocode}
+\def\qedsymbol{\square}
+% \end{macrocode}
+% \emph{Please note}: this is in the \AMS{} symbols font.
+% Use one of these instead if you prefer:
+% |\def\qedsymbol{\blacksquare}| or
+% |\def\qedsymbol{\hbox{\rm Q.E.D.}}|. %
+% The Journal of Symbolc Logic likes |\def\qedsymbol{\dashv}|.
+% \end{macro}
+%
+% \begin{macro}{\AutoQEDtrue}
+% The command |\AutoQEDtrue| causes a |\qed| in |\end{theorem}|, so
+% you do |\begin{theorem}| \dots{} |\begin{proof}| \dots{}
+% |\end{proof}| |\end{theorem}| but if you omit the proof, the
+% statement gets a little square at the end.
+% \begin{macrocode}
+\newif\ifAutoQED\AutoQEDfalse
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Pushright}
+%
+% \begin{macro}{\pushright}
+% If you already have a macro called |\qed|, |\endproof| or
+% |\pushright| which is laid out in a similar way to the following
+% two definitions (but with |\hbox@pushright| incorporated) then it
+% is almost certainly my code, which has been copied anonymously via
+% numerous people since my Cambridge PhD thesis in August 1986.
+% Belated acknowledgements to Chris Thompson of the Cambridge
+% University Computing Service for his help with my early attempts at
+% TeX, in particular this problem.
+%
+% The complexity of the macro necessary to get a little box on the
+% right-hand-side at the end of a proof is amazing. It really does
+% have to be this long! Otherwise you're liable to get it at the
+% beginning of the next line, or even on the next page.
+%
+%
+% \begin{macrocode}
+\def\parag@pushright#1{{%
+% \end{macrocode}
+% Set up.
+% So |\par| doesn't push |\square| to left.
+% \begin{macrocode}
+ \parfillskip\z@
+% \end{macrocode}
+% So we don't break the page before |\square|.
+% \begin{macrocode}
+ \widowpenalty\@M
+ \displaywidowpenalty\@M
+% \end{macrocode}
+% See TeXbook exercise 14.32.
+% \begin{macrocode}
+ \finalhyphendemerits\z@
+% \end{macrocode}
+% \paragraph{Horizontal.}
+% |\leavevmode| is not needed since we now only use it in hmode.
+% \begin{macrocode}
+% \leavevmode
+% \end{macrocode}
+% This used to be incorporated
+% \begin{macrocode}
+ \hbox@pushright
+% \end{macrocode}
+% The end-of-proof mark (or whatever).
+% \begin{macrocode}
+ #1%
+% \end{macrocode}
+% \paragraph{Vertical.}
+% Build paragraph with the above parameters.
+% \begin{macrocode}
+ \par}}%
+% \end{macrocode}
+%
+% Horizontal.
+% \begin{macrocode}
+\def\hbox@pushright{%
+% \end{macrocode}
+% Remove previous space or glue.
+% \begin{macrocode}
+ \unskip
+% \end{macrocode}
+% Don't break lines.
+% \begin{macrocode}
+ \nobreak
+% \end{macrocode}
+% Ragged right if we spill over.
+% \begin{macrocode}
+ \hfil
+% \end{macrocode}
+% Discouragement to do so.
+% \begin{macrocode}
+ \penalty50
+% \end{macrocode}
+% Ensure some space.
+% \begin{macrocode}
+ \hskip.2em
+% \end{macrocode}
+% Anchor the following |\hfill|.
+% \begin{macrocode}
+ \null
+% \end{macrocode}
+% Push to right.
+% \begin{macrocode}
+ \hfill
+}%
+% \end{macrocode}
+%
+% Ideally |\endProof| should do all this. We should be able to add
+% the symbol to the last line after the paragraph, display or
+% whatever other structure has been completed and we've returned to
+% vertical mode. This isn't possible on the current page (outer
+% vmode) because |\lastbox| doesn't work there.
+%
+% But |\ifinner| is true inside a |\vbox|, |\vadjust| or |\insert|
+% (LaTeX |\parbox|, \Lenv{minipage}, \Lenv{figure} or
+% \Lenv{table}), and in these circumstances we can use |\lastbox|.
+% We would have to strip \& restore glue \& penalties (|\insert|,
+% |\mark| and |\write| are obstacles to this) to get access to the
+% last line (box), which may still not have the correct
+% baseline. We could check its natural width against the page
+% width, but if we re-set it, centering and (right) justification
+% might be disturbed. Is this worth the trouble?
+%
+% \begin{macrocode}
+\def\vbox@pushright#1{\expandafter\message % (2 Jan 1994)
+ {QED.sty could be improved in this case
+ (line \the\inputlineno): please ask}%
+ \page@pushright{#1}}%
+% \end{macrocode}
+%
+%
+% Using this method a \Lenv{proof} environment could be implemented
+% by collecting the entire proof in its own |\vbox|, modifying that
+% and |\unvbox|'ing it to the current page. This approach may lead to
+% the following problems:
+% \begin{enumerate}
+% \item footnotes, floats, marginpars, labels and index items may be
+% lost;
+% \item overflow of TeX's main memory, especially if |\end{proof}| is
+% missing;
+% \item I don't know how page-breaking would be handled.
+% \end{enumerate}
+%
+% Switch to enable/suppress |\qedsymbol|; since suppression may be
+% done within a nested scope it must be global, so we do our own
+% save/restore in a symbol which is local to a proof environment.
+% \begin{macrocode}
+\newif\if@qed\@qedfalse
+\def\save@set@qed{\let\saved@ifqed\if@qed\global\@qedtrue}%
+\def\restore@qed{\global\let\if@qed\saved@ifqed}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@qed#1{\check@pt@fm@thm
+% \end{macrocode}
+% Have we already done |\qed|?
+% \begin{macrocode}
+\if@qed
+% \end{macrocode}
+% No: do it now, but not again.
+% \begin{macrocode}
+ \global\@qedfalse\pushright{#1}%
+% \end{macrocode}
+% Yes: just end paragraph, if any.
+% \begin{macrocode}
+\else\ifhmode\ifinner\else\par\fi\fi%
+\fi}
+% \end{macrocode}
+%
+% |\pushright{|\meta{text}|}| always prints its argument, on the
+% far right, in text mode.
+% \begin{macrocode}
+\def\@pushright#1{%
+ \ifvmode
+% \end{macrocode}
+% Vertical mode (see comments above).
+% \begin{macrocode}
+ \ifinner\vbox@pushright{#1}%
+ \else \page@pushright{#1}%
+ \fi
+% \end{macrocode}
+% Maths (force a text argument).
+% \begin{macrocode}
+ \else\ifmmode\maths@pushright{\hbox{#1}}%
+% \end{macrocode}
+% Inside an |\hbox|.
+% \begin{macrocode}
+ \else\ifinner\hbox@pushright{#1}%
+% \end{macrocode}
+% In a paragraph.
+% \begin{macrocode}
+ \else\parag@pushright{#1}%
+ \fi \fi \fi
+}
+% (22 Feb 1993) removed extra {} which would destroy our \] below
+% \end{macrocode}
+%
+% In the |\hbox| and maths cases we are really at the mercy of the
+% environment. Assuming that we have |$\qed$| simply embedded in a
+% paragraph, the horizontal processing by |\hbox@pushright| will at
+% least make sure that the square isn't at the beginning of the line,
+% but we can't stop it being on the next page. However it is more
+% likely that the reason why we're in maths mode is that we're inside
+% an eqnarray or similar, in which case |\hfill| will do its best to
+% put the square on the right of the available space. (See |\vadjust|
+% below.)
+% \begin{macrocode}
+\def\maths@pushright#1{%
+ \ifinner
+ \hbox@pushright{#1}%
+ \else
+% \end{macrocode}
+% Use \TeX's right equation number feature (|\eqno|) within |$$|.
+% \begin{macrocode}
+ \eqno#1%
+% \end{macrocode}
+% Suppress LaTeX's error checking (HACK!).
+% \begin{macrocode}
+ \def\]{$$\ignorespaces}%
+ \fi
+}%
+% (22 Feb 1993) removed extra {} which would destroy our \] above
+% \end{macrocode}
+%
+% \paragraph{Outer vertical mode (the current page)}
+% There's very little we can do in these circumstances!
+% Penalties still allow the page to be broken.
+% If the user has put negative glue in, leave it alone. (15 Feb 1994)
+% \begin{macrocode}
+\def\page@pushright#1{% 18 Jan 1994
+ %\unpenalty % ineffective
+% \end{macrocode}
+% Remove |\parskip|, but only (15 Feb 1994) if it's positive.
+% \begin{macrocode}
+ \skip@\lastskip
+ \ifdim\skip@>\z@
+ \unskip
+ \else\skip@\z@\relax
+ \fi
+ %\unpenalty % TeX won't let me do this
+ \dimen@\baselineskip
+% \end{macrocode}
+% Save |\prevdepth| to make a strut
+% \begin{macrocode}
+ \advance\dimen@-\prevdepth
+% \end{macrocode}
+% Don't break the page here.
+% \begin{macrocode}
+ \nobreak
+ \nointerlineskip
+ \hbox to\hsize{%
+ \setbox\z@\null
+% \end{macrocode}
+% Simulate |\baselineskip|.
+% \begin{macrocode}
+ \ifdim\dimen@>\z@\ht\z@\dimen@\fi
+ \box\z@
+ \hfill
+ #1}%
+% \end{macrocode}
+% Replace old |\parskip|.
+% \begin{macrocode}
+ \vskip\skip@
+}%
+% \end{macrocode}
+%
+% An idea that didn't work: see TeXbook p188. (16 Feb 1993) Use
+% |\predisplaysize| to find out the width of the previous box, in the
+% case where it has already been completed. But this can only be
+% used inside displays (|$$|), and a display in vertical mode begins
+% a paragraph first, so we end up with
+% |\predisplaysize=\parindent+2em| whatever happened in the previous
+% paragraph.
+%
+% Another idea: it may be worth trying |\vadjust|, if only to insert
+% |\nobreak|. The problem with this is that if we are too deeply
+% nested in horizontal or maths lists, the adjustment may not be able
+% to find its way out to the enclosing vertical list. In the case of
+% array-like environments, it will appear (assuming it manages to get
+% out) after the current row of the array.
+% \end{macro}
+%
+%
+% \subsection{Adding to theorem environments}
+%
+% We have to add to the theorem environments the commands to enable
+% |\qed|. This is done by re-defining |\@thm#1#2|. Note that
+% Mittelbach's \Lpackage{theorem}\texttt{.sty} re-defines |\@thm|
+% and |\@endtheorem|, so that must be loaded before us, otherwise
+% our changes will get over-written and |\qed| will never be
+% enabled.
+%
+% Save original.
+% \begin{macrocode}
+\let\nonqed@thm\@thm
+\let\nonqed@endthm\@endtheorem
+\def\@thm{\save@set@qed\nonqed@thm}
+\def\@endtheorem{\ifAutoQED\qed\fi\restore@qed\nonqed@endthm}
+% \end{macrocode}
+%
+%
+% \subsection{`Centering' Environments}
+%
+% Those which don't give their contents access to the right hand side
+% of the page, such as center, picture, ... (12 April 1994)
+%
+% Each individual environment (both the standard ones and those defined
+% by the user) needs to co-operate in order to make |\qed| and
+% |\pushright| work. It is not the business of this package to rewrite
+% LaTeX in this way, but the following mechanism may be inserted in to
+% other environments.
+% \begin{itemize}
+% \item put |\WillHandleQED| in the |\begin| part of the environment
+% definition; then if a |\qed| occurs in the body of the environment
+% it is stored in |\QEDbox| until...
+% \item |\HandleQED| anywhere in the |\end| part of the environment
+% definition (even inside dollars, braces or another environment)
+% prints it.
+% \end{itemize}
+% For example:
+% \begin{verbatim}
+% \newenvironment{qedpicture}%
+% {\begin{picture}\WillHandleQED}%
+% {\put(0,0){\HandleQED}\end{picture}}
+% \end{verbatim}
+% To make this compatible with \emph{not} loading
+% \Lpackage{QED}\texttt{.sty}, add the following to macro files which
+% use |\WillHandleQED| and |\HandleQED|:
+% \begin{verbatim}
+% \ifx\WillHandleQED\undefined
+% \let\WillHandleQED\relax
+% \let\HandleQED\relax
+% \let\UnHandleQED\relax % if you use it
+% \let\QEDbox\voidb@x % must have \makeatletter here!
+% \fi
+% \end{verbatim}
+% |\UnHandleQED| restores normal processing; this may be useful for the
+% minipage environment, which has its own notion of `right hand side'
+% of the page. The width of the saved |\qed| is available for testing
+% as |\wd\QEDbox|.
+%
+% The box in which to save |\qed| for special handling.
+% \begin{macrocode}
+\newbox\qed@box
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\WillHandleQED{\relax
+ \ifx\HandleQED\nohandle@qed
+% \end{macrocode}
+% No enclosing environment has declared |\WillHandleQED|.
+%
+% |\qed| will be saved.
+% \begin{macrocode}
+ \def\pushright{\global\setbox\qed@box\hbox}%
+% \end{macrocode}
+% Point at the right box.
+% \begin{macrocode}
+ \let\QEDbox\qed@box
+% \end{macrocode}
+% Print it.
+% \begin{macrocode}
+ \def\HandleQED{\unhbox\QEDbox}%
+% \end{macrocode}
+% Check that this really gets done.
+% \begin{macrocode}
+ \aftergroup\check@handle@qed
+ \else
+% \end{macrocode}
+% An enclosing environment already wants to catch |\qed| |\HandleQED|
+% doesn't print anything - let the saved |\qed| pass through
+% by pointing at an empty box.
+% \begin{macrocode}
+ \let\QEDbox\voidb@x
+ \fi
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\nohandle@qed{%
+\errhelp{One of them is missing: see QED.sty.}%
+\errmessage{This environment uses \string\WillHandleQED\space and
+\string\HandleQED\space incorrectly}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\check@handle@qed{\relax
+\ifvoid\qed@box\else\expandafter\nohandle@qed\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\UnHandleQED{%
+\let\HandleQED\nohandle@qed
+\let\QEDbox\voidb@x
+\def\pushright{\protect\@pushright}}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\UnHandleQED
+% \end{macrocode}
+%
+%
+% If \Lpackage{theorem}\texttt{.sty} hasn't been loaded, arrange to
+% check it again in |\@qed|. And check (then) whether you've actually
+% defined |\square|.
+% Changed 2 June 1993: don't define it now, as that would confuse
+% \Lpackage{amssymb}\texttt{.sty}.
+% \begin{macrocode}
+\ifx\theorem@style\undefined
+ \def\check@pt@fm@thm{\relax
+ \ifx\square\undefined
+ \gdef\square{\bigcirc
+ \errhelp={Anonymous ftp e-math.ams.com /ams/amsfonts}%
+ \errmessage{\string\square\space is an AMS symbol}%
+ \global\let\square\bigcirc}%
+ \fi
+ \ifx\theorem@style\undefined
+ \global\let\check@pt@fm@thm\relax
+ \else
+ \errhelp={The macros \@thm and \@endtheorem
+ need to be re-defined.}%
+ \errmessage{QED.sty must be loaded AFTER theorem.sty but
+ before using \string\newtheorem}%
+ \fi
+ \global\let\check@pt@fm@thm\relax
+ }%
+\else
+ \def\check@pt@fm@thm{%
+ \ifx\square\undefined
+ \def\square{\bigcirc
+ \errhelp={Anonymous ftp e-math.ams.com /ams/amsfonts}%
+ \errmessage{\string\square\space is an AMS symbol}%
+ \global\let\square\bigcirc}%
+ \fi
+ \global\let\check@pt@fm@thm\relax
+ }%
+\fi
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareOption{auto-QED}{\AutoQEDtrue}%
+\DeclareOption{explicit-QED}{\AutoQEDfalse}%
+\DeclareOption{black-square}{\def\qedsymbol{\blacksquare}}%
+\DeclareOption{open-square}{\def\qedsymbol{\square}}%
+\ProcessOptions\relax
+% \end{macrocode}
+%
+% \subsection{Bugs}
+%
+% |\item\qed\end{letterlist}| puts the square above the item label.
+%
+% |! You can't use `\unskip' in vertical mode.|
+% from |\qed| in a paragraph on its own.
+%
+% \medskip\hrule\medskip
+%
+% \subsection{Michael's fixes \dots}
+%
+% While \Lpackage{QED}\texttt{.sty} does a very fine job it leaves
+% some things apart. Of course, it was not aware of much of the
+% newer \AMS{} math environments. In the following I tried to
+% redefine |\qed| and |\pushright| in order to work in all standard
+% circumstances reasonably well.
+%
+% \iffalse meta-comment
+% The following was a trial to fix |\pushright| instead of |\qed|.
+%
+% Unfortunately, |\pushright| does not always work well, especially
+% in equation-like environment as provided by the \AMS{} package
+% \Lpackage{amsmath} there are several new complications.
+% We make |\pushright| and |\qed| work in all these environments.
+% \begin{macrocode}
+% \newif\if@resettagsleft@%\fi
+% \let\standardpushright\pushright
+% \def\rescuepushright#1{\qquad\hbox{#1}}
+% \def\eqnopushright#1{\eqno\hbox{#1}}
+% \let\ccorg@eqnnum\@eqnnum
+% \let\ccorg@nonumber\nonumber
+% \def\eqnarraypushright#1{%
+% \global\@eqnswtrue
+% \global\let\nonumber\relax
+% % equation counter will be incremented at \end{eqnarray*} by \@@eqncr!
+% \addtocounter{equation}\m@ne
+% \gdef\@eqnnum{\llap{#1}%
+% \global\let\nonumber\ccorg@nonumber
+% \global\let\@eqnnum\ccorg@eqnnum}}
+% \def\tagpushright#1{%
+% \typeout{tagpushright #1}
+% \tag*{\iftagsleft@%\iftrue
+% \hskip\displaywidth\llap{#1}\hskip-\displaywidth%
+% \else\hbox{#1}\fi}}
+% \def\simpletagpushright#1{\iftagsleft@%\iftrue
+% \global\@resettagsleft@true\fi
+% \global\tagsleft@false
+% \tag*{\hbox{#1}}}
+% \def\aftersplitpushright#1{%
+% \def\@endsplit{%
+% \global\let\endsplit\ccorg@endsplit
+% \endsplit
+% \pushright{#1}%
+% }}
+% \let\ccorg@endsplit\endsplit
+% %
+% \newif\if@pushrightfailed%\fi
+% \def\nopushright#1{\global\@pushrightfailedtrue}
+% \def\@ifcurrenv#1#2{\def\@tempa{#1}\ifx\@tempa\@currenvir\relax
+% \let\next#2\fi}
+% \renewenvironment{displaymath}{$$}{$$\@ignoretrue}
+% \renewcommand{\[}{\begin{displaymath}}
+% \renewcommand{\]}{\end{displaymath}}
+% \if@ams
+% \def\pushright{%
+% \global\@pushrightfailedfalse
+% \if@resettagsleft@\global\tagsleft@true\global\@resettagsleft@false\fi
+% \let\next\standardpushright
+% \@ifcurrenv{displaymath}\eqnopushright
+% \@ifcurrenv{equation}\nopushright
+% \@ifcurrenv{eqnarray}\nopushright
+% \@ifcurrenv{eqnarray*}\eqnarraypushright
+% \@ifcurrenv{equation*}\tagpushright
+% \@ifcurrenv{split}\aftersplitpushright
+% \@ifcurrenv{multline}\nopushright
+% \@ifcurrenv{multline*}\simpletagpushright
+% \@ifcurrenv{gather}\nopushright
+% \@ifcurrenv{gather*}\tagpushright
+% \@ifcurrenv{align}\nopushright
+% \@ifcurrenv{align*}\tagpushright
+% \@ifcurrenv{alignat}\nopushright
+% \@ifcurrenv{alignat*}\tagpushright
+% \next}
+% \else
+% \def\pushright{%
+% \global\@pushrightfailedfalse
+% \let\next\standardpushright
+% \@ifcurrenv{displaymath}\eqnopushright
+% \@ifcurrenv{equation}\nopushright
+% \@ifcurrenv{eqnarray}\nopushright
+% \@ifcurrenv{eqnarray*}\eqnarraypushright
+% \next}
+% \fi
+% \def\@@qed#1{%
+% \pushright{#1}%
+% \if@pushrightfailed\else\global\@qedfalse\fi
+% }
+% \def\@@qedpar#1{%
+% \ifhmode\ifinner\else\par\fi\fi
+% }
+% \def\@qed{\check@pt@fm@thm
+% \if@qed\let\next\@@qed\else\let\next\@@qedpar\fi\next}
+% %
+% \endinput%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \end{macrocode}
+% \fi
+%
+% Unfortunately, |\qed| does not always work well, especially
+% in equation-like environment as provided by the \AMS{} package
+% \Lpackage{amsmath} there are several new complications.
+% We make |\qed| work in all these environments.
+% \begin{macrocode}
+\newif\if@resettagsleft@
+\let\standardqed\qed
+\def\rescueqed{\qquad\qedsymbol\vphantom{\standardqed}}
+\def\eqnoqed{\eqno\hbox{\standardqed}}%\vphantom{\standardqed}}
+\let\ccorg@eqnnum\@eqnnum
+\let\ccorg@nonumber\nonumber
+\def\eqnarrayqed{%
+ \global\@eqnswtrue
+ \global\let\nonumber\relax
+% equation counter will be incremented at \end{eqnarray*} by \@@eqncr!
+ \addtocounter{equation}\m@ne
+ \gdef\@eqnnum{\llap{$\qedsymbol$\vphantom{\standardqed}}%
+ \global\let\nonumber\ccorg@nonumber
+ \global\let\@eqnnum\ccorg@eqnnum}}
+\def\tagqed{\tag*{\iftagsleft@
+ \hskip\displaywidth\llap{$\qedsymbol$}\hskip-\displaywidth%
+ \else$\qedsymbol$\fi}\vphantom{\standardqed}}
+\def\simpletagqed{\iftagsleft@\global\@resettagsleft@true\fi
+ \global\tagsleft@false
+ \tag*{$\qedsymbol$}\vphantom{\standardqed}}
+\def\aftersplitqed{\global\let\endsplit\@endsplit}
+\let\ccorg@endsplit\endsplit
+\def\@endsplit{\ccorg@endsplit\qed\global\let\endsplit\ccorg@endsplit}%
+\def\noqed{}
+\def\@ifcurrenv#1#2{\def\@tempa{#1}\ifx\@tempa\@currenvir\relax
+ \let\next#2\fi}
+\renewenvironment{displaymath}{$$}{$$\@ignoretrue}
+\renewcommand{\[}{\begin{displaymath}}
+\renewcommand{\]}{\end{displaymath}}
+\if@ams
+\def\qed{%
+ \if@resettagsleft@
+ \global\tagsleft@true
+ \global\@resettagsleft@false
+ \fi
+ \let\next\standardqed
+ \@ifcurrenv{displaymath}\eqnoqed
+ \@ifcurrenv{equation}\noqed
+ \@ifcurrenv{eqnarray}\noqed
+ \@ifcurrenv{eqnarray*}\eqnarrayqed
+ \@ifcurrenv{equation*}\tagqed
+ \@ifcurrenv{split}\aftersplitqed
+ \@ifcurrenv{multline}\noqed
+ \@ifcurrenv{multline*}\simpletagqed
+ \@ifcurrenv{gather}\noqed
+ \@ifcurrenv{gather*}\tagqed
+ \@ifcurrenv{align}\noqed
+ \@ifcurrenv{align*}\tagqed
+ \@ifcurrenv{alignat}\noqed
+ \@ifcurrenv{alignat*}\tagqed
+ \next}
+\else
+\def\qed{%
+ \let\next\standardqed
+ \@ifcurrenv{displaymath}\eqnoqed
+ \@ifcurrenv{equation}\noqed
+ \@ifcurrenv{eqnarray}\noqed
+ \@ifcurrenv{eqnarray*}\eqnarrayqed
+ \next}
+\fi
+%</ccqed>
+% \end{macrocode}
+%
+% \GetFileInfo{cc2cite.sty}
+% \CodelinePrefix{C}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+% \begin{macrocode}
+%<*cc2cite>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{cc2cite}[2000/02/29 v2.04 cc2 cite helper package]
+% \end{macrocode}
+% We simply load \Lpackage{natbib} and make some small initializations.
+% \begin{macrocode}
+\RequirePackage{natbib}
+\bibpunct{(}{)}{;}{a}{}{,}
+\newcommand{\bibstyle@cc}{\bibpunct{(}{)}{;}{a}{}{,}}
+\expandafter\def\csname bibstyle@cc2\endcsname{%
+ \bibpunct{(}{)}{;}{a}{}{,}}
+\let\bibfont\small
+\bibhang\z@
+\providecommand{\newwarning}[2]{%
+ \expandafter\gdef\csname cc@warn@#1\endcsname{#2}}
+\providecommand{\ccClassWarning}[1]{%
+ \ClassWarning{cc}{\csname cc@warn@#1\endcsname}}
+\newwarning{old@citemul}{%
+ The command \protect\citemul\space is obsolete.
+ Use \protect\citet\space instead.\MessageBreak
+ Please read the documentation
+ of the package `natbib.sty'}
+\newwarning{old@parencite}{%
+ The command \protect\parencite\space is obsolete.
+ Use \protect\citep\space instead.\MessageBreak
+ Please read the documentation
+ of the package `natbib.sty'}
+\newwarning{old@shortcite}{%
+ The command \protect\shortcite\space is obsolete.
+ Use \protect\citealt\space instead.\MessageBreak
+ Please read the documentation
+ of the package `natbib.sty'}
+% \def\warning@old@cite#1#2{\ClassWarning{cc}{%
+% The command \protect#1\space is obsolete.
+% Use \protect#2\space instead.\MessageBreak
+% Please read the documentation
+% of the package `natbib.sty'.\MessageBreak}}
+\def\citemul{\ccClassWarning{old@citemul}\citet}
+\def\parencite{\ccClassWarning{old@parencite}\citep}
+\def\shortcite{\ccClassWarning{old@shortcite}\citealt}
+% \end{macrocode}
+% This loads the bibliography style \file{cc2.bst} unless there is a
+% |\bibliographystyle| command before the |\bibliography| command.
+% \begin{macrocode}
+\RequirePackage{ccdbs}
+\DefaultBibliographyStyle{cc2}
+%</cc2cite>
+% \end{macrocode}
+%
+% \GetFileInfo{cccite.sty}
+% \CodelinePrefix{c}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+%
+% \changes{v0.91}{2000/02/29}{Advanced version to official 2.00}
+% \begin{macrocode}
+%<*cccite>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{cccite}[2000/02/29 v2.04 cc cite helper package]
+\PackageWarningNoLine{cccite}{%
+ The package cccite is obsolete.\MessageBreak
+ Better use cc2cite.
+ }
+% \end{macrocode}
+%
+% This is the named references stuff from
+% \Lpackage{namedrefs}\texttt{.sty} butchered and adapted by David
+% McClurkin, and again by Michael N{\"{u}}sken.
+%
+% It supports the following seven citation forms:
+% \begin{center}
+% \begin{tabular}{ll}
+% |\cite| & Cook (1990) \\
+% |\citeauthor| & Cook \\
+% |\citeyear| & 1990 \\
+% |\citemul| & Cook (1990, 1991a, 1991b) \\
+% |\shortcite| & Cook 1990 \\
+% |\parencite| & (Cook 1990)\\
+% |\nocite| &
+% \end{tabular}
+% \end{center}
+%
+% The package \Lpackage{ccdbs} simply guarantees that by default
+% |\bibliographystyle{cc}| is called unless the user issued a
+% |\bibliographystyle| command \emph{before} the |\bibliography|
+% command.
+% \begin{macrocode}
+\RequirePackage{ccdbs}
+\DefaultBibliographyStyle{cc}
+% \end{macrocode}
+% Remember the built in |\cite| since it will be redefined.
+% \begin{macrocode}
+\let\ccorg@cite\cite
+\let\ccorg@@cite\@cite
+% \end{macrocode}
+% After a comma we use |\penalty\@citeseppen|.
+% \begin{macrocode}
+\def\@citeseppen{-5}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@cite#1#2{{#1\if@tempswa , #2\fi}}
+% \end{macrocode}
+% The commands we provide only differ in the format of their output.
+% This format is stored in |\citeauthoryear|, then the universal
+% mechanism |\@citex| is applied.
+% \begin{macrocode}
+\def\cite#1{\def\citeauthoryear##1##2{##1\ (##2)}\@citex{#1}}
+\def\citeauthor#1{\def\citeauthoryear##1##2{##1}\@citex{#1}}
+\def\citeyear#1{\def\citeauthoryear##1##2{##2}\@citex{#1}}
+\def\shortcite#1{\def\citeauthoryear##1##2{##1\ ##2}\@citex{#1}}
+\def\parencite#1{\def\citeauthoryear##1##2{(##1\ ##2)}\@citex{#1}}
+% \end{macrocode}
+% |\citemul| is composed from the previous commands.
+% \begin{macrocode}
+\def\citemul#1{\@mcite #1\@\@ }
+\def\@mcite#1,#2\@\@{\citeauthor{#1}\hskip3pt(\citeyear{#1,#2})}
+% \end{macrocode}
+% \begin{macro}{\@citex}
+% The argument is a list of citations. For each of a macro
+% containing a |\citeauthoryear| is expanded. These things are
+% seperated by commas with following |\penalty|.
+% \begin{macrocode}
+\def\@citex#1{\@tempswafalse%
+ \if@filesw\immediate\write\@auxout{\string\citation{#1}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#1\do
+ {\@citea\def\@citea{,\penalty\@citeseppen\ }\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{}}
+% \end{macrocode}
+% \end{macro}
+% The following macros are defined in order to be compatible with the
+% \Lpackage{natbib} package. However, they only have the same
+% syntax, their functionality is not as good as with
+% \Lpackage{natbib}.
+% \begin{macrocode}
+\let\ccorg@cite\cite
+\newcommand{\citet}{\let\which@cite\ccorg@cite\cc@citea}
+\let\cite\citet
+\newcommand{\citep}{\let\which@cite\parencite\cc@citea}
+\newcommand{\citealt}{\let\which@cite\shortcite\cc@citea}
+\newcommand{\citealp}{\let\which@cite\shortcite\cc@citea}
+\newcommand{\citetext}[1]{(#1)}
+\newcommand{\@citeyearpar}[1]{\citetext{\citeyear{#1}}}
+\newcommand{\citeyearpar}{\let\which@cite\@citeyearpar\cc@citea}
+\let\ccorg@citeauthor\citeauthor
+\renewcommand{\citeauthor}{\let\which@cite\ccorg@citeauthor\cc@citea}
+\newcommand{\citefullauthor}{\citeauthor*}
+\newcommand{\Citet}{\let\which@cite\cite\cc@citea}
+\newcommand{\Citep}{\let\which@cite\parencite\cc@citea}
+\newcommand{\Citealt}{\let\which@cite\shortcite\cc@citea}
+\newcommand{\Citealp}{\let\which@cite\shortcite\cc@citea}
+%
+\newwarning{poormancitea}{%
+ This is only a poor (wo)man's version of this command.\MessageBreak
+ Please use the package natbib.sty for full features.\MessageBreak
+ Drop the document class option cccite }
+\newcommand{\cc@citea}{%
+ \ccClassWarning{poormancitea}%
+ \@tempswafalse\@ifstar{\cc@cite@st}{\cc@citeb}}
+\def\cc@cite@st{\@tempswatrue\cc@citeb}
+\newcommand{\cc@citeb}[1][]{\def\cc@cite@a{#1}\cc@citec}
+\newcommand{\cc@citec}[1][]{\def\cc@cite@b{#1}\which@cite}
+% \end{macrocode}
+% This is used in bibliography labels to produce the text. We do not
+% want any text. (For some reason not known to me this information
+% is stored in a macro.)
+% \begin{macrocode}
+\def\@biblabel#1{%
+ \def\citename##1{##1}% for authordate bib styles
+ }
+% \end{macrocode}
+% We lend some code from \Lpackage{natbib} to avoid conflicts with
+% different versions of \file{cc.bst}.
+% \begin{macrocode}
+\newcounter{NAT@ctr}
+\def\NAT@noname{{}}
+\let\ccorg@lbibitem\@lbibitem
+\def\@lbibitem[#1]#2{%
+ \let\citeauthoryear\bib@citeauthoryear
+ \if@filesw\@tempswatrue\else\@tempswafalse\fi\@fileswfalse
+ \ccorg@lbibitem[#1]{#2}%
+ \if@tempswa\@fileswtrue\fi
+ \NAT@ifcmd#1(@)(@)\@nil{#2}\ignorespaces}
+\newcommand\NAT@ifcmd{\futurelet\NAT@temp\NAT@ifxcmd}
+\newcommand\NAT@ifxcmd{%
+ \ifx\NAT@temp\relax\else\expandafter\NAT@bare\fi}
+\def\NAT@bare#1(#2)#3(@)#4\@nil#5{%
+ \if @#2
+ \expandafter\NAT@apalk#1, , \@nil{#5}\else
+ \stepcounter{NAT@ctr}%
+ \cc@wrout{\arabic {NAT@ctr}}{#2}{#1}{#3}{#5}
+\fi
+}
+\newcommand\NAT@apalk{}
+\def\NAT@apalk#1, #2, #3\@nil#4{\if\relax#2\relax
+ \global\NAT@stdbsttrue
+ \cc@wrout{#1}{}{}{}{#4}\else
+ \stepcounter{NAT@ctr}%
+ \cc@wrout{\arabic {NAT@ctr}}{#2}{#1}{}{#4}\fi}
+\newcommand\citeauthoryear{}
+\def\bib@citeauthoryear#1#2#3(@)(@)\@nil#4{%
+ \stepcounter{NAT@ctr}\if\relax#3\relax
+ \cc@wrout{\arabic {NAT@ctr}}{#2}{#1}{}{#4}\else
+ \cc@wrout{\arabic {NAT@ctr}}{#3}{#2}{#1}{#4}\fi}
+\newcommand\citestarts{\NAT@open}
+\newcommand\citeends{\NAT@close}
+\newcommand\betweenauthors{and}
+\newcommand\astroncite{}
+\def\astroncite#1#2(@)(@)\@nil#3{\stepcounter{NAT@ctr}\cc@wrout{\arabic
+{NAT@ctr}}{#2}{#1}{}{#3}}
+\newcommand\citename{}
+\def\citename#1#2(@)(@)\@nil#3{\expandafter\NAT@apalk#1#2, \@nil{#3}}
+\newcommand\harvarditem[4][]%
+ {\if\relax#1\relax\bibitem[#2(#3)]{#4}\else
+ \bibitem[#1(#3)#2]{#4}\fi }
+\newcommand\harvardleft{\NAT@open}
+\newcommand\harvardright{\NAT@close}
+\newcommand\harvardyearleft{\NAT@open}
+\newcommand\harvardyearright{\NAT@close}
+\AtBeginDocument{\providecommand{\harvardand}{and}}
+\newcommand\harvardurl[1]{\textbf{URL:} \textit{#1}}
+\newcommand\cc@wrout[5]{%
+ \if@filesw
+ {\let\protect\noexpand\let~\relax
+ \immediate
+ \write\@auxout{\string\bibcite{#5}%
+ {\protect\citeauthoryear{#3}{#2}}}}\fi
+ \ignorespaces}
+%</cccite>
+% \end{macrocode}
+%
+% \GetFileInfo{ccdbs.sty}
+% \CodelinePrefix{D}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+%
+% \changes{v1.99}{2000/02/24}{Made this an own file}
+% \begin{macrocode}
+%<*ccdbs>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{ccdbs}[2000/02/20 v2.04 bibliography helper package]
+% \end{macrocode}
+%
+% We manipulate |\bibliographystyle| and |\bibliography|. By default
+% |\bibliographystyle|\linebreak[3]|{\bibstyle@default}| is called
+% unless the user issued a |\bibliographystyle| command before the
+% |\bibliography| command.
+% \begin{macrocode}
+\let\ccorg@bibliographystyle\bibliographystyle
+\newif\if@bibstylemissing \@bibstylemissingtrue
+\def\bibliographystyle{\@bibstylemissingfalse
+ \gdef\bibliographystyle##1{%
+ \PackageWarning{ccdbs}{\protect\bibliographystyle\space can be
+ used only before \protect\bibliography!}}%
+ \ccorg@bibliographystyle}
+\let\ccorg@bibliography\bibliography
+\def\bibliography{%
+ \if@bibstylemissing
+ \bibliographystyle{\bibstyle@default}%
+ \fi
+ \ccorg@bibliography}
+% \end{macrocode}
+% \begin{macro}{\DefaultBibliographyStyle}
+% The command |\DefaultBibliographyStyle| allows to choose another
+% default value. The default value of |\bibstyle@default| is
+% |plain|.
+% \begin{macrocode}
+\newcommand{\DefaultBibliographyStyle}[1]{%
+ \def\bibstyle@default{#1}}
+\DefaultBibliographyStyle{plain}
+%</ccdbs>
+% \end{macrocode}
+% \end{macro}
+%
+% \GetFileInfo{cc.cls}
+% \def\filename{cctemplate.tex}
+% \CodelinePrefix{p}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+% \begin{macrocode}
+%<*cctemplate>
+\begin{filecontents*}{myrefs.bib}
+ %% Insert your bibliography file here (if any)
+\end{filecontents*}
+\begin{filecontents}{main.bbl}
+ %% Replace `main.bbl' by your main file's name + ".bbl"
+ %% Insert your bbl file here (if any)
+\end{filecontents}
+\documentclass{cc}
+
+
+%%% personal macros and packages
+%%% end of personal macros and packages
+
+
+%%\ccpublish{}{}{}{}
+\contact{}% Insert contact email address here.
+\received{}% Insert received date here.
+\title{}% Insert title here. (Use \\ to split lines.)
+%%\titlehead{}% If necessary insert running head title here.
+\author{}% Insert author list here. (Each author must be given
+ % including his/her current address, email and possibly
+ % homepage. Lines are seperated by \\, different authors
+ % are seperated by \and .)
+%%\authorhead{}% If necessary insert running head authors here.
+%%\authorlist{}% If necessary insert title author list here.
+
+\begin{abstract}
+ %% Insert abstract here.
+\end{abstract}
+
+\begin{keywords}
+ %% Insert keywords here.
+\end{keywords}
+
+\begin{subject}
+ %% Insert subject classification here.
+\end{subject}
+
+
+
+\begin{document}
+
+%%% Insert your article text here.
+
+
+
+
+
+
+\begin{acknowledge}
+ %% Insert your acknowledgments here.
+\end{acknowledge}
+
+\bibliography{}% Insert your bibliography file names here.
+
+\end{document}
+
+%</cctemplate>
+% \end{macrocode}
+%
+% \GetFileInfo{cc.cls}
+% \def\filename{cc-portability-frame.tex}
+% \CodelinePrefix{}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+% \changes{v2.03}{2003/05/26}{Added cc-portability-frame.tex ...}
+% \begin{macrocode}
+%<*ccportabilityframe>
+\newif\ifcc\IfFileExists{cc.cls}{\cctrue}{\ccfalse}\ifcc
+
+%%% Include your document here
+%%% (formatted as described in this documentation or
+%%% sketched by the template file cctemplate.tex).
+
+\else
+
+%%% Include cc-cls-inline.tex here.
+
+\typeout{Please call latex again.}
+\makeatletter\expandafter\@@end
+\fi
+%</ccportabilityframe>
+% \end{macrocode}
+%
+% \def\filename{ccreltx.sty}
+% \CodelinePrefix{}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+%
+% It is a helper that deactivates changes made by \Lpackage{amsthm}
+% or thelike, and reactivates the original \LaTeX{} definitions. In
+% fact, the following is just an extract of \file{ltthm.dtx} which is
+% part of the \LaTeX{} basis.
+% \begin{macrocode}
+%<*ccreltx>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{ccreltx}[2002/05/22 v2.04
+ computational complexity, reactivate ltthm.
+ Michael Nuesken, Bonn.]
+%%% From File: ltthm.dtx
+\def\newtheorem#1{%
+ \@ifnextchar[{\@othm{#1}}{\@nthm{#1}}}
+\def\@nthm#1#2{%
+ \@ifnextchar[{\@xnthm{#1}{#2}}{\@ynthm{#1}{#2}}}
+\def\@xnthm#1#2[#3]{%
+ \expandafter\@ifdefinable\csname #1\endcsname
+ {\@definecounter{#1}\@newctr{#1}[#3]%
+ \expandafter\xdef\csname the#1\endcsname{%
+ \expandafter\noexpand\csname the#3\endcsname \@thmcountersep
+ \@thmcounter{#1}}%
+ \global\@namedef{#1}{\@thm{#1}{#2}}%
+ \global\@namedef{end#1}{\@endtheorem}}}
+\def\@ynthm#1#2{%
+ \expandafter\@ifdefinable\csname #1\endcsname
+ {\@definecounter{#1}%
+ \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
+ \global\@namedef{#1}{\@thm{#1}{#2}}%
+ \global\@namedef{end#1}{\@endtheorem}}}
+\def\@othm#1[#2]#3{%
+ \@ifundefined{c@#2}{\@nocounterr{#2}}%
+ {\expandafter\@ifdefinable\csname #1\endcsname
+ {\global\@namedef{the#1}{\@nameuse{the#2}}%
+ \global\@namedef{#1}{\@thm{#2}{#3}}%
+ \global\@namedef{end#1}{\@endtheorem}}}}
+\def\@thm#1#2{%
+ \refstepcounter{#1}%
+ \@ifnextchar[{\@ythm{#1}{#2}}{\@xthm{#1}{#2}}}
+\def\@xthm#1#2{%
+ \@begintheorem{#2}{\csname the#1\endcsname}\ignorespaces}
+\def\@ythm#1#2[#3]{%
+ \@opargbegintheorem{#2}{\csname the#1\endcsname}{#3}\ignorespaces}
+\def\@thmcounter#1{\noexpand\arabic{#1}}
+\def\@thmcountersep{.}
+\def\@begintheorem#1#2{\trivlist
+ \item[\hskip \labelsep{\bfseries #1\ #2}]\itshape}
+\def\@opargbegintheorem#1#2#3{\trivlist
+ \item[\hskip \labelsep{\bfseries #1\ #2\ (#3)}]\itshape}
+\def\@endtheorem{\endtrivlist}
+%</ccreltx>
+% \end{macrocode}
+%
+% \def\filename{cc4apjrnl.sty}
+% \CodelinePrefix{}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+%
+% It allows to use the document class \Lclass{apjrnl} for a file that
+% has been written with the document class \Lclass{cc}. To do this
+% add the line
+% \begin{verbatim}
+% \expandafter\def\csname ver@apthm.sty\endcsname{2001/03/05}
+% \end{verbatim}
+% \emph{before} the |\documentclass| and a |\usepackage{cc4apjrnl}|
+% after it.
+% \begin{macrocode}
+%<*cc4apjrnl>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{cc4apjrnl}[2002/01/08 v2.04
+ computational complexity, adaptions to apjrnl.
+ Michael Nuesken, Bonn.]
+% Forget this AP definition
+\let\answer\relax
+\let\endanswer\relax
+% Load our definitions
+\RequirePackage{amsmath}[1997/03/20 v1.2d]
+% amsmath contains amstext, amsgen, amsbsy, amsopn
+\RequirePackage{amsfonts}[1997/09/17 v2.2e]
+\RequirePackage{amssymb}[1996/11/03 v2.2b]
+\RequirePackage{ccaux}
+\RequirePackage{ccreltx}% deactivate amsthm.sty and reactive LaTeX's definitions.
+\@longarticletrue
+\@adjustnumbering
+\let\theorem@style\@undefined
+\RequirePackage{ccthm}
+\RequirePackage{ccqed}
+\let\proof\@undefined
+\let\endproof\@undefined
+\RequirePackage{ccproof}
+\RequirePackage{cc2cite}
+\RequirePackage{url}[1999/03/02 ver 1.4]
+\expandafter\def\expandafter\UrlSpecials\expandafter{%
+ \UrlSpecials\do\%{}}
+\providecommand{\email}{\begingroup\urlstyle{tt}\Url}
+\providecommand{\homepage}{\begingroup\scriptsize\urlstyle{tt}\Url}
+% Adapt to AP style
+\gdef\theorem@headerfont{\scshape\null\hskip\parindent}
+\gdef\Proof{\textit{Proof}}
+\renewcommand{\qedsymbol}{\rule{2pt}{4pt}}
+%</cc4apjrnl>
+% \end{macrocode}
+%
+% \def\filename{cc4amsart.sty}
+% \CodelinePrefix{}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+%
+% It allows to use the document class \Lclass{amsart} or derivatives
+% of it (as \Lclass{mcom-l}, \dots) for a file that has been written
+% with the document class \Lclass{cc}. To do this add a
+% |\usepackage{cc4amsart}| after it.
+% \begin{macrocode}
+%<*cc4amsart>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{cc4amsart}[2002/01/08 v2.04
+ computational complexity, adaptions to amsart.
+ Michael Nuesken, Bonn.]
+\RequirePackage{ccaux}
+\RequirePackage{ccreltx}% deactivate amsthm.sty and reactive LaTeX's
+ % definitions.
+\PassOptionsToPackage{bare}{relabel}
+\RequirePackage{thcc}
+\gdef\theorem@headerfont{\bfseries}
+%% \def\th@cc{%
+%% \normalfont\itshape
+%% \def\@begintheorem##1##2{\item
+%% [\hskip\labelsep \theorem@headerfont ##1\ ##2.]}%
+%% \def\@opargbegintheorem##1##2##3{\item
+%% [\hskip\labelsep \theorem@headerfont ##1\ ##2\ %
+%% \normalfont({\activate@shortcite{}##3}).]}%
+%% }
+\@longarticletrue
+\RequirePackage{ccthm}
+\babel\def\ccacknowledgementsname{Acknowledgements}[%
+ german=Danksagung,french=Remerciements]
+\newenvironment{acknowledge}{\section*{\ccacknowledgementsname}}{}
+\RequirePackage{relabel}
+\RequirePackage{cc2cite}
+\RequirePackage{ccqed}
+%</cc4amsart>
+% \end{macrocode}
+%
+% \def\filename{cc4llncs.sty}
+% \CodelinePrefix{}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+%
+% It allows to use the document class \Lclass{llncs} for a file that
+% has been written with the document class \Lclass{cc}. To do this
+% add the line |\usepackage{cc4llncs}|.
+% \begin{macrocode}
+%<*cc4llncs>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{cc4llncs}[2002/10/01 v2.04
+ computational complexity, adaptions to llncs.
+ Michael Nuesken, Bonn.]
+% Forget these llncs definitions
+\let\claim\relax \let\endclaim\relax
+\let\conjecture\relax \let\endconjecture\relax
+\let\corollary\relax \let\endcorollary\relax
+\let\counterexample\relax \let\endcounterexample\relax
+\let\definition\relax \let\enddefinition\relax
+\let\exercise\relax \let\endexercise\relax
+\let\fact\relax \let\endfact\relax
+\let\hypothesis\relax \let\endhypothesis\relax
+\let\lemma\relax \let\endlemma\relax
+\let\notation\relax \let\endnotation\relax
+\let\note\relax \let\endnote\relax
+\let\observation\relax \let\endobservation\relax
+\let\open\relax \let\endopen\relax
+\let\openquestion\relax \let\endopenquestion\relax
+\let\problem\relax \let\endproblem\relax
+\let\proposition\relax \let\endproposition\relax
+\let\question\relax \let\endquestion\relax
+\let\remark\relax \let\endremark\relax
+\let\result\relax \let\endresult\relax
+\let\theorem\relax \let\endtheorem\relax
+\let\thesis\relax \let\endthesis\relax
+\let\warning\relax \let\endwarning\relax
+\let\example\relax \let\endexample\relax
+% Load our definitions
+\RequirePackage{amsmath}[1997/03/20 v1.2d]
+% amsmath contains amstext, amsgen, amsbsy, amsopn
+\RequirePackage{amsfonts}[1997/09/17 v2.2e]
+\RequirePackage{amssymb}[1996/11/03 v2.2b]
+\RequirePackage{ccaux}
+\@longarticletrue
+\RequirePackage{ccreltx}% deactivate amsthm.sty and reactive LaTeX's
+ % definitions.
+\RequirePackage{ccthm}
+\theoremheaderfont{\upshape\bfseries}
+\RequirePackage{ccalgo}
+% Load our citation scheme but keep llncs environment thebibliography.
+\let\origthebibliography\thebibliography
+\let\origendthebibliography\endthebibliography
+\let\citeauthoryear\relax
+\RequirePackage{cc2cite}
+\let\thebibliography\origthebibliography
+\let\endthebibliography\origendthebibliography
+%
+\RequirePackage{url}[1999/03/02 ver 1.4]
+\expandafter\def\expandafter\UrlSpecials\expandafter{%
+ \UrlSpecials\do\%{}}
+\providecommand{\email}{\begingroup\urlstyle{tt}\Url}
+\providecommand{\homepage}{\begingroup\scriptsize\urlstyle{tt}\Url}
+% one of our helpers
+\def\condbreak#1{%
+ \vskip 0pt plus #1%
+ \pagebreak[3]%
+ \vskip 0pt plus -#1%
+ \relax}
+%%%
+%</cc4llncs>
+% \end{macrocode}
+%
+% \def\filename{cc4siamltex.sty}
+% \CodelinePrefix{}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+%
+% It allows to use the document class \Lclass{amsart} or derivatives
+% of it (as \Lclass{mcom-l}, \dots) for a file that has been written
+% with the document class \Lclass{cc}. To do this add a
+% |\usepackage{cc4siamltex}| after it.
+% \begin{macrocode}
+%<*cc4siamltex>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{cc4siamltex}[2002/05/22 v2.04
+ computational complexity, adaptions to siamltex.
+ Michael Nuesken, Bonn.]
+
+\let\theorem\relax
+\let\endtheorem\relax
+\let\lemma\relax
+\let\endlemma\relax
+\let\corollary\relax
+\let\endcorollary\relax
+\let\proposition\relax
+\let\endproposition\relax
+\let\definition\relax
+\let\enddefinition\relax
+\let\proof\relax
+\let\endproof\relax
+
+\RequirePackage{amsmath}
+\RequirePackage{amsfonts}
+\RequirePackage{amssymb}
+\RequirePackage{ccaux}
+\RequirePackage{ccreltx}% deactivate amsthm.sty and reactive LaTeX's
+ % definitions.
+%% \PassOptionsToPackage{bare}{relabel}
+\RequirePackage{ccthm}
+\RequirePackage{relabel}
+\RequirePackage{cc2cite}
+\RequirePackage{ccproof}
+\renewcommand{\Proof}{\textit{Proof}}
+\renewcommand{\qedsymbol}{\vbox{\hrule height0.6pt\hbox{%
+ \vrule height1.3ex width0.6pt\hskip0.8ex
+ \vrule width0.6pt}\hrule height0.6pt
+ }}
+\RequirePackage{ccalgo}
+\babel\def\ccacknowledgementsname{Acknowledgements}[%
+ german=Danksagung,french=Remerciements]
+\newenvironment{acknowledge}{\section*{\ccacknowledgementsname}}{}
+\RequirePackage{url}[1999/03/02 ver 1.4]
+\expandafter\def\expandafter\UrlSpecials\expandafter{%
+ \UrlSpecials\do\%{}}
+\providecommand{\email}{\begingroup\urlstyle{tt}\Url}
+\providecommand{\homepage}{\begingroup\scriptsize\urlstyle{tt}\Url}
+%</cc4siamltex>
+% \end{macrocode}
+%
+% \def\filename{cc4jT.sty}
+% \CodelinePrefix{}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+%
+% It allows to use the document class \Lclass{amsart} or derivatives
+% of it (as \Lclass{mcom-l}, \dots) for a file that has been written
+% with the document class \Lclass{cc}. To do this add a
+% |\usepackage{cc4amsart}| after it.
+% \begin{macrocode}
+%<*cc4jT>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{cc4jT}[2002/01/08 v2.04
+ computational complexity, adaptions to jT which uses amsart.
+ Michael Nuesken, Bonn.]
+\RequirePackage{ccaux}
+\RequirePackage{ccreltx}% deactivate amsthm.sty and reactive LaTeX's
+ % definitions.
+\PassOptionsToPackage{bare}{relabel}
+\RequirePackage{thcc}
+\gdef\theorem@headerfont{\bfseries}
+%% \def\th@cc{%
+%% \normalfont\itshape
+%% \def\@begintheorem##1##2{\item
+%% [\hskip\labelsep \theorem@headerfont ##1\ ##2.]}%
+%% \def\@opargbegintheorem##1##2##3{\item
+%% [\hskip\labelsep \theorem@headerfont ##1\ ##2\ %
+%% \normalfont({\activate@shortcite{}##3}).]}%
+%% }
+\@longarticletrue
+\let\proof\relax\let\endproof\relax
+\RequirePackage{ccthm}
+\RequirePackage{ccproof}
+\RequirePackage{ccqed}
+\babel\def\ccacknowledgementsname{Acknowledgements}[%
+ german=Danksagung,french=Remerciements]
+\newenvironment{acknowledge}{\section*{\ccacknowledgementsname}}{}
+\RequirePackage{relabel}
+\babel\def\partname{Part}[german=Teil,french=\protect\@Fpt partie]
+\defprefix{part}{\partname~}
+\babel\def\chaptername{Chapter}[german=Kapitel,french=Chapitre]
+\defprefix{chapter}{\chaptername~}
+\babel\def\sectionname{Section}[german=Abschnitt,french=Section]
+\defprefix{section}{\sectionname~}
+\babel\def\subsectionname{Section}[german=Abschnitt,french=Section]
+\defprefix{subsection}{\subsectionname~}
+\babel\def\subsubsectionname{Section}[german=Abschnitt,french=Section]
+\defprefix{subsubsection}{\subsubsectionname~}
+\let\ccorg@appendix\appendix
+\babel\def\appendixname{Appendix}[german=Anhang,french=Annexe]
+\def\appendix{%
+ \defprefix{section}{\appendixname~}%
+ \defprefix{subsection}{\appendixname~}%
+ \defprefix{subsubsection}{\appendixname~}%
+ \ccorg@appendix}
+\defprefix{equation}#1{(#1)}
+\babel\def\figurename{Figure}[german=Figur,french={\scshape Figure}]
+\defprefix{figure}{\figurename~}
+\babel\def\tablename{Table}[german=Tafel,french={\scshape Table}]
+\defprefix{table}{\tablename~}
+\numberallwithin{section}
+\AtBeginDocument{\@adjustnumbering}
+\RequirePackage{cc2cite}
+\RequirePackage{url}
+%</cc4jT>
+% \end{macrocode}
+%
+% \def\filename{cc4elsart.sty}
+% \CodelinePrefix{}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+%
+% It allows to use the document class \Lclass{amsart} or derivatives
+% of it (as \Lclass{mcom-l}, \dots) for a file that has been written
+% with the document class \Lclass{cc}. To do this add a
+% |\usepackage{cc4amsart}| after it.
+% \begin{macrocode}
+%<*cc4elsart>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{cc4elsart}[2003/08/28 v2.04
+ computational complexity, adaptions to elsart.
+ Michael Nuesken, Bonn.]
+\RequirePackage{ccaux}
+\RequirePackage{ccreltx}% deactivate amsthm.sty and reactive LaTeX's
+ % definitions.
+\PassOptionsToPackage{bare}{relabel}
+\RequirePackage{thcc}
+%%% \gdef\theorem@headerfont{\bfseries}
+%%% %% \def\th@cc{%
+%%% %% \normalfont\itshape
+%%% %% \def\@begintheorem##1##2{\item
+%%% %% [\hskip\labelsep \theorem@headerfont ##1\ ##2.]}%
+%%% %% \def\@opargbegintheorem##1##2##3{\item
+%%% %% [\hskip\labelsep \theorem@headerfont ##1\ ##2\ %
+%%% %% \normalfont({\activate@shortcite{}##3}).]}%
+%%% %% }
+\@longarticletrue
+\let\claim\relax
+\let\fact\relax
+\let\note\relax
+\let\proof\relax\let\endproof\relax
+\RequirePackage{ccthm}
+\RequirePackage{ccproof}
+\RequirePackage{ccqed}
+\babel\def\ccacknowledgementsname{Acknowledgements}[%
+ german=Danksagung,french=Remerciements]
+\newenvironment{acknowledge}{\section*{\ccacknowledgementsname}}{}
+\RequirePackage{relabel}
+\babel\def\partname{Part}[german=Teil,french=\protect\@Fpt partie]
+\defprefix{part}{\partname~}
+\babel\def\chaptername{Chapter}[german=Kapitel,french=Chapitre]
+\defprefix{chapter}{\chaptername~}
+\babel\def\sectionname{Section}[german=Abschnitt,french=Section]
+\defprefix{section}{\sectionname~}
+\babel\def\subsectionname{Section}[german=Abschnitt,french=Section]
+\defprefix{subsection}{\subsectionname~}
+\babel\def\subsubsectionname{Section}[german=Abschnitt,french=Section]
+\defprefix{subsubsection}{\subsubsectionname~}
+\let\ccorg@appendix\appendix
+\babel\def\appendixname{Appendix}[german=Anhang,french=Annexe]
+\def\appendix{%
+ \defprefix{section}{\appendixname~}%
+ \defprefix{subsection}{\appendixname~}%
+ \defprefix{subsubsection}{\appendixname~}%
+ \ccorg@appendix}
+\defprefix{equation}#1{(#1)}
+\babel\def\figurename{Figure}[german=Figur,french={\scshape Figure}]
+\defprefix{figure}{\figurename~}
+\babel\def\tablename{Table}[german=Tafel,french={\scshape Table}]
+\defprefix{table}{\tablename~}
+\numberallwithin{section}
+\AtBeginDocument{\@adjustnumbering}
+%%% \RequirePackage{cc2cite}
+%%% \RequirePackage{url}
+%</cc4elsart>
+% \end{macrocode}
+%
+% \def\filename{cc2.dbj}
+% \def\fileversion{v2.01}
+% \def\filedate{2000/02/29}
+% \CodelinePrefix{B}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate. Run this file with \texttt{tex \filename} to
+% produce \file{cc2.bst} from scratch (ie. from \file{merlin.mbs}).
+% See \Lpackage{makebst} for more information.
+% \begin{macrocode}
+%<*cc2dbj>
+%<<CC2DBJ>
+%% Driver file to produce cc2.bst from merlin.mbs
+%% Generated with makebst, version 3.2 (1999/02/24)
+%% Produced on 2000/02/28 at 10:28
+%%
+\input docstrip
+
+\preamble
+----------------------------------------
+*** bst for computational complexity with natbib.sty ***
+
+\endpreamble
+
+\postamble
+End of customized bst file
+\endpostamble
+
+\keepsilent
+
+\askforoverwritefalse
+\def\MBopts{\from{merlin.mbs}{%
+% babel%: Babel
+ %: (def) English
+%--------------------
+% ,cite%: Cite key
+% ,alfph,alf-f%: Alpha style, Jones90
+% ,alph,alf-1%: Alpha style, Jon90
+% ,alph%: Alpha style, Jon90 or JWB90
+ ,ay%: Author-year
+% %(def) Numerical
+%--------------------
+% ,cn%: Author-date
+% ,nmd%: Named
+% ,cay%: Chicago
+% ,ast%: Astronomy
+% ,har%: Harvard
+% ,alk%: Apalike
+% %(def) Older Natbib
+ ,nat%: Natbib
+%--------------------
+ ,lang%: Add language field
+% %(def) No language field
+%--------------------
+% ,annote%: Annotations
+ %: (def) No annotations
+%--------------------
+% ,seq-no%: Citation order
+% ,seq-yr%: Year ordered
+% ,seq-key%: By label and cite key
+% ,seq-lab%: By label
+ %(def) Alphabetical
+%--------------------
+ ,vonx%: Sort without von part
+% %(def) Sort on von part
+%--------------------
+% ,nm-revv1%: First name reversed, with full names
+% ,nm-rev1%: Only first name reversed, initials
+% ,nm-rvv%: Surname + spaceless initials
+% ,nm-rvx%: Surname + pure initials
+% ,nm-rv%: Surname + dotless initials
+% ,nm-rev%: Surname + initials
+% ,nm-init,ed-au%: Initials + surname
+% ,nm-revf%: Full, surname first
+ ,ed-au%: Full, surname last
+%--------------------
+% ,jnrlab%: `Junior' in citations
+ %: (def) No `junior' part in the citations
+%--------------------
+% ,aunm-sl%: Names separated by slash
+% ,aunm-semi%: Names separated by semi-colon
+ %: (def) Author names separated by commas
+%--------------------
+% ,nmdash%: Repeated author/editor names replaced by dash
+ %: (def) Author/editor names always present
+%--------------------
+% ,nmlm%: Limited authors
+ %: (def) All authors
+%--------------------
+% ,nmft,nmft-def%: User defined author font
+% ,nmft,nmft-bf%: Bold authors
+% ,nmft,nmft-it%: Italic authors
+ ,nmft,nmft-sc%: Small caps authors
+% %(def) Normal font for author names
+%--------------------
+% ,fnm-def%: First names in user defined font
+% ,fnm-rm%: First names in normal font
+ %(def) First names same font as surnames
+%--------------------
+ ,nmfted%: Editors incollection like authors
+% %(def) Editors incollection normal font
+%--------------------
+ ,nmand-rm%: `And' in normal font
+% %(def) `And' in author font
+%--------------------
+% ,lab,lab-def%: User defined citation font
+% ,lab,lab-bf%: Cited authors bold
+% ,lab,lab-sc%: Cited authors small caps
+% ,lab,lab-it%: Cited authors italic
+ %: (def) Cited authors plain
+%--------------------
+% ,xlab-it%: Extra label italic
+ %: (def) Extra label plain
+%--------------------
+ %: (def) Year included when KEY replaces missing author
+% ,keyxyr%: Year blank when KEY replaces missing author
+%--------------------
+% ,blkyear%: Missing date left blank
+ %: (def) Missing date set to ????
+%--------------------
+% ,dt-end%: Date at very end
+% ,dt-jnl%: Date part of journal spec.
+ ,dt-beg%: Date after authors
+% %(def) Date at end
+%--------------------
+% ,yr-blk%: Year preceded by space
+% ,yr-com%: Date preceded by comma
+% ,yr-per%: Year preceded by period
+% ,yr-col%: Year preceded by colon
+% ,yr-brk%: Year in brackets
+ ,yr-par%: Year in parentheses
+% %(def) Year plain
+%--------------------
+% ,aymth%: Include month in date
+ %: (def) Date is year only
+%--------------------
+% ,yrp-x%: No punct. after date
+% ,yrp-per%: Period after date
+% ,yrp-semi%: Semi-colon after date
+% ,yrp-col%: Colon after date
+ %: (def) Date with standard block punctuation
+%--------------------
+% ,yrpp-xsp%: No space after date
+ %: (def) Space after date
+%--------------------
+% ,dtbf%: Date in bold face
+ %: (def) Date in normal font
+%--------------------
+% %(def) Year truncated
+ ,note-yr%: Year text full
+%--------------------
+% ,tit-qq,qt-g,qx%: Title in guillemets
+% ,tit-qq,qx%: Title in double quotes
+% ,tit-qq,qt-s,qx%: Title in single quotes
+% ,tit-qq,qt-g%: Title and punctuation in guillemets
+% ,tit-qq%: Title and punctuation in double quotes
+% ,tit-qq,qt-s%: Title and punctuation in single quotes
+% ,tit-it%: Title italic
+ %: (def) Title plain
+%--------------------
+ ,atit-u%: Title style
+% %(def) Sentence style
+%--------------------
+% ,jtit-x%: No article title
+ %: (def) Article title present
+%--------------------
+% ,jxper%: Dotless journal names
+ %: (def) Periods in journal names
+%--------------------
+% ,jttl-rm%: Journal title normal
+ %: (def) Journal title italics
+%--------------------
+% ,thtit-a%: Thesis title like article
+ %: (def) Thesis titles like books
+%--------------------
+% ,trtit-b%: Tech. report title like books
+ %: (def) Tech. report title like articles
+%--------------------
+% ,trnum-it%: Tech. report and number italic
+ %: (def) Tech. report and number plain
+%--------------------
+% ,vol-2bf%: Volume and number bold
+ ,vol-bf%: Volume bold
+% ,vol-it%: Volume italic
+% %(def) Volume plain
+%--------------------
+% ,vnum-x%: Journal vol, without number
+% ,vnum-b%: Journal vol number
+% ,vnum-h%: Journal vol, \# number
+% ,vnum-nr%: Journal vol, no. num
+% ,vnum-cm%: Journal vol, num
+% ,vnum-sp%: Journal vol (num)
+ %: (def) Journal vol(num)
+%--------------------
+% ,volp-blk%: Volume with blank
+ ,volp-com%: Volume with comma
+% ,volp-semi%: Volume with semi-colon
+% ,volp-sp%: Volume with colon and space
+% %(def) Volume with colon
+%--------------------
+% ,jdt-pc%: Year, comma, pages
+% ,jdt-p%: Year with pages
+% ,jdt-vs%: Journal vol (year)
+% ,jdt-v%: Journal vol(year)
+ %: (def) Journal year like others
+%--------------------
+% ,jpg-1%: Only start page number
+ %: (def) Start and stop page numbers
+%--------------------
+% ,pgsep-p%: Period inserted over 9999
+ ,pgsep-s%: Thin space inserted over 9999
+% ,pgsep-c%: Comma inserted over 9999
+% %: (def) No separators for large page numbers
+%--------------------
+% ,jwdpg%: Include `page' in articles
+ %: (def) Article pages numbers only
+%--------------------
+% ,pp-last%: Pages at end
+ %: (def) Pages given mid text
+%--------------------
+% ,jwdvol%: Include `volume' in articles
+ %: (def) Article volume as number only
+%--------------------
+% ,num-xser%: Allows number without series
+ %: (def) Standard BibTeX
+%--------------------
+% ,numser%: Just before publisher
+ %: (def) After chapter and pages
+%--------------------
+ ,jnm-x%: Space after journal
+% %(def) Comma after journal
+%--------------------
+% ,btit-rm,bt-rm%: Book title plain
+ %: (def) Book title italic
+%--------------------
+% ,bkpg-x%: Pages in book bare
+% ,bkpg-par%: Pages in book in parentheses
+ %: (def) Pages in book plain
+%--------------------
+ ,pg-bk%: For book: 345 pages
+ %: (def) Total book pages not printed
+%--------------------
+% ,add-pub%: Address: Publisher
+ %: (def) Publisher, address
+%--------------------
+% ,pub-date,pub-xpar,pub-xc%: Publisher and date, no parentheses, no comma
+% ,pub-date,pub-xpar%: Publisher and date without parentheses
+% ,pub-date,pub-xc%: Publisher and date in parentheses, no comma
+% ,pub-date%: Publisher and date in parentheses
+% ,pub-par%: Publisher in parentheses
+ %: (def) Publisher as normal block
+%--------------------
+% ,pre-edn%: Publisher after edition
+% ,pre-pub%: Publisher before chapter, pages
+ %: (def) Publisher after chapter, pages
+%--------------------
+% %(def) No ISBN
+ ,isbn%: Include ISBN
+%--------------------
+% %(def) No ISSN
+ ,issn%: Include ISSN
+%--------------------
+% ,url,url-nl%: URL on new line
+% ,url,url-nt%: URL as note
+ ,url,url-blk%: Include URL
+% %(def) No URL
+%--------------------
+% ,edparc,bkedcap%: `Name, (Editor)'
+% ,edparc%: `Name, (editor)'
+% ,edpar,bkedcap%: `Name (Editor),'
+ ,edpar%: `Name (editor),'
+% %(def) Word `editor' after name
+%--------------------
+% ,edby-par,edbyy%: Booktitle (.., editor)
+ ,edby,edbyy%: Booktitle, .., editor
+% ,edby-parc,edbyx%: Booktitle, (editor..)
+% ,edby-par,edbyx%: Booktitle (editor..)
+% ,edby,edbyw%: Booktitle, (editor) ..
+% ,edby,edbyx%: Booktitle, editor ..
+% ,edby-parc%: Booktitle, (edited by ..)
+% ,edby-par%: Booktitle (edited by ..)
+% ,edby%: Booktitle, edited by ..
+% %: (def) .., editor, booktitle
+%--------------------
+% ,blk-tita%: Period after titles of articles
+% ,blk-tit%: Period after titles of articles, books, etc
+% ,blk-com,com-blank%: Blanks between blocks
+% ,blk-com,com-semi%: Semi-colon between blocks
+% ,blk-com%: Comma between blocks
+ %: (def) \newblock after blocks
+%--------------------
+% ,au-col%: Author block with colon
+ %: (def) Author block normal
+%--------------------
+% ,in-x%: No word `in'
+% ,in-col%: Colon after `in'
+ %: (def) Space after `in'
+%--------------------
+% ,injnl%: Add `in' before journal name
+ %: (def) No `in' before journal name
+%--------------------
+% ,fin-bare%: No period at end
+ %: (def) Period at very end
+%--------------------
+ ,ppx%: `Page' omitted
+% ,pp%: `Page' abbreviated
+% %: (def) `Page(s)'
+%--------------------
+% ,ed%: `Editor' abbreviated
+ %: (def) `Editor(s)'
+%--------------------
+% ,abr%: Abbreviations
+ %: (def) No abbreviations
+%--------------------
+ ,ord%: Numerical editions
+% %(def) Write out editions
+% ,xedn%: Editions as in database
+%--------------------
+% ,jabr%: Abbreviated journal names
+ %: (def) Full journal names
+%--------------------
+% ,varand%: Use \BIBand
+ ,amper%: Use ampersand
+% %(def) Use word `and'
+%--------------------
+% ,and-com%: Comma even with 2 authors
+ ,and-xcom%: No comma before `and'
+% %(def) Comma before `and'
+%--------------------
+% ,xand%: No `and'
+ %: (def) With `and'
+%--------------------
+% ,etal-rm%: Roman et al
+ ,etal-it%: Italic et al
+% %(def) Plain et al
+%--------------------
+% ,em-ul%: Underlining
+% ,em-x%: No italics
+% ,em-it%: Use true italics
+ %: (def) Use emphasis
+%--------------------
+ ,nfss%: NFSS
+% %(def) No NFSS
+%--------------------
+ }}
+\generate{\file{cc2.bst}{\MBopts}}
+\endbatchfile
+%CC2DBJ>
+%</cc2dbj>
+% \end{macrocode}
+%
+%
+% \def\filename{cc2.bst}
+% \def\fileversion{v2.01}
+% \def\filedate{2000/02/29}
+% \CodelinePrefix{b}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+% \ifbst% the new bibliography style is normally not printed.
+% \hfuzz=\oddsidemargin
+% \def\MacroFont{\fontencoding\encodingdefault
+% \fontfamily\ttdefault
+% \fontseries\mddefault
+% \fontshape\updefault
+% \tiny}
+% \let\AltMacroFont\MacroFont
+% \renewcommand{\theCodelineNo}{\rmfamily\tiny b\arabic{CodelineNo}}%
+% \begin{macrocode}
+%<*cc2bst>
+%<<CC2BST>
+%%
+%% This is file `cc2.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs (with options: `,ay,nat,lang,vonx,ed-au,nmft,nmft-sc,nmfted,nmand-rm,dt-beg,yr-par,note-yr,atit-u,vol-bf,volp-com,pgsep-s,jnm-x,pg-bk,isbn,issn,url,url-blk,edpar,edby,edbyy,ppx,ord,amper,and-xcom,etal-it,nfss')
+%% ----------------------------------------
+%% *** bst for computational complexity with natbib.sty ***
+%%
+%% Copyright 1994-2004 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % \ProvidesFile{merlin.mbs}[2004/02/09 4.13 (PWD, AO, DPC)]
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is an author-year citation style bibliography. As such, it is
+ % non-standard LaTeX, and requires a special package file to function properly.
+ % Such a package is natbib.sty by Patrick W. Daly
+ % The form of the \bibitem entries is
+ % \bibitem[Jones et al.(1990)]{key}...
+ % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
+ % The essential feature is that the label (the part in brackets) consists
+ % of the author names, as they should appear in the citation, with the year
+ % in parentheses following. There must be no space before the opening
+ % parenthesis!
+ % With natbib v5.3, a full list of authors may also follow the year.
+ % In natbib.sty, it is possible to define the type of enclosures that is
+ % really wanted (brackets or parentheses), but in either case, there must
+ % be parentheses in the label.
+ % The \cite command functions as follows:
+ % \citet{key} ==>> Jones et al. (1990)
+ % \citet*{key} ==>> Jones, Baker, and Smith (1990)
+ % \citep{key} ==>> (Jones et al., 1990)
+ % \citep*{key} ==>> (Jones, Baker, and Smith, 1990)
+ % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
+ % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990)
+ % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32)
+ % \citeauthor{key} ==>> Jones et al.
+ % \citeauthor*{key} ==>> Jones, Baker, and Smith
+ % \citeyear{key} ==>> 1990
+ %---------------------------------------------------------------------
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ eid
+ howpublished
+ institution
+ isbn
+ issn
+ journal
+ key
+ language
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ url
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label short.list }
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+STRINGS { s t}
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+FUNCTION {add.blank}
+{ " " * before.all 'output.state :=
+}
+
+FUNCTION {date.block}
+{
+ new.block
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\emph{" swap$ * "}" * }
+ if$
+}
+FUNCTION {bolden}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\textbf{" swap$ * "}" * }
+ if$
+}
+FUNCTION {scaps}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\textsc{" swap$ * "}" * }
+ if$
+}
+FUNCTION {bib.name.font}
+{ scaps }
+FUNCTION {bib.fname.font}
+{ bib.name.font }
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$
+}
+
+FUNCTION {capitalize}
+{ "u" change.case$ "t" change.case$ }
+
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+FUNCTION {bbl.and}
+{ "and"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+{ "editors" }
+
+FUNCTION {bbl.editor}
+{ "editor" }
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{ "edition" }
+
+FUNCTION {bbl.volume}
+{ "volume" }
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{ "number" }
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{ "" }
+
+FUNCTION {bbl.page}
+{ "" }
+
+FUNCTION {bbl.chapter}
+{ "chapter" }
+
+FUNCTION {bbl.techrep}
+{ "Technical Report" }
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+FUNCTION {bbl.first}
+{ "1st" }
+
+FUNCTION {bbl.second}
+{ "2nd" }
+
+FUNCTION {bbl.third}
+{ "3rd" }
+
+FUNCTION {bbl.fourth}
+{ "4th" }
+
+FUNCTION {bbl.fifth}
+{ "5th" }
+
+FUNCTION {bbl.st}
+{ "st" }
+
+FUNCTION {bbl.nd}
+{ "nd" }
+
+FUNCTION {bbl.rd}
+{ "rd" }
+
+FUNCTION {bbl.th}
+{ "th" }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+FUNCTION {eng.ord}
+{ duplicate$ "1" swap$ *
+ #-2 #1 substring$ "1" =
+ { bbl.th * }
+ { duplicate$ #-1 #1 substring$
+ duplicate$ "1" =
+ { pop$ bbl.st * }
+ { duplicate$ "2" =
+ { pop$ bbl.nd * }
+ { "3" =
+ { bbl.rd * }
+ { bbl.th * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+FUNCTION {bibinfo.check}
+{ swap$
+ duplicate$ missing$
+ {
+ pop$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ pop$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {bibinfo.warn}
+{ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.url}
+{ url empty$
+ { "" }
+ { "\urlprefix\url{" url * "}" * }
+ if$
+}
+
+STRINGS { bibinfo}
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{ff~}{vv~}{ll}{, jj}"
+ format.name$
+ bib.name.font
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ " " * bbl.etal emphasize *
+ }
+ {
+ "\&"
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.names.ed}
+{
+ format.names
+}
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+FUNCTION {format.authors}
+{ author "author" format.names
+}
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+ {
+ " " *
+ get.bbl.editor
+ "(" swap$ * ")" *
+ *
+ }
+ if$
+}
+FUNCTION {format.book.pages}
+{ pages "pages" bibinfo.check
+ duplicate$ empty$ 'skip$
+ { bbl.pages * }
+ if$
+}
+FUNCTION {format.isbn}
+{ isbn "isbn" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ new.block
+ "ISBN " swap$ *
+ }
+ if$
+}
+
+FUNCTION {format.issn}
+{ issn "issn" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ new.block
+ "ISSN " swap$ *
+ }
+ if$
+}
+
+FUNCTION {select.language}
+{ duplicate$ empty$
+ 'pop$
+ { language empty$
+ 'skip$
+ { "{\selectlanguage{" language * "}" * swap$ * "}" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.note}
+{
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ { output.state mid.sentence =
+ { "l" }
+ { "u" }
+ if$
+ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title
+ "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ select.language
+ }
+ if$
+}
+FUNCTION {format.full.names}
+{'s :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}" format.name$
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ " " * bbl.etal emphasize *
+ }
+ {
+ "\&"
+ space.word * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {author.editor.key.full}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.full.names }
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {author.key.full}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {editor.key.full}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.full.names }
+ if$
+}
+
+FUNCTION {make.full.names}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.full
+ { type$ "proceedings" =
+ 'editor.key.full
+ 'author.key.full
+ if$
+ }
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem[{" write$
+ label write$
+ ")" make.full.names duplicate$ short.list =
+ { pop$ }
+ { * }
+ if$
+ "}]{" * write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {if.digit}
+{ duplicate$ "0" =
+ swap$ duplicate$ "1" =
+ swap$ duplicate$ "2" =
+ swap$ duplicate$ "3" =
+ swap$ duplicate$ "4" =
+ swap$ duplicate$ "5" =
+ swap$ duplicate$ "6" =
+ swap$ duplicate$ "7" =
+ swap$ duplicate$ "8" =
+ swap$ "9" = or or or or or or or or or
+}
+FUNCTION {n.separate}
+{ 't :=
+ ""
+ #0 'numnames :=
+ { t empty$ not }
+ { t #-1 #1 substring$ if.digit
+ { numnames #1 + 'numnames := }
+ { #0 'numnames := }
+ if$
+ t #-1 #1 substring$ swap$ *
+ t #-2 global.max$ substring$ 't :=
+ numnames #5 =
+ { duplicate$ #1 #2 substring$ swap$
+ #3 global.max$ substring$
+ "\," swap$ * *
+ }
+ 'skip$
+ if$
+ }
+ while$
+}
+FUNCTION {n.dashify}
+{
+ n.separate
+ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{ bbl.in capitalize
+ " " * }
+
+FUNCTION {format.date}
+{ year "year" bibinfo.check duplicate$ empty$
+ {
+ "empty year in " cite$ * "; set to ????" * warning$
+ pop$ "????"
+ }
+ 'skip$
+ if$
+ extra.label *
+ before.all 'output.state :=
+ " (" swap$ * ")" *
+}
+FUNCTION {format.btitle}
+{ title "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ emphasize
+ select.language
+ }
+ if$
+}
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { bbl.volume volume tie.or.space.prefix
+ "volume" bibinfo.check * *
+ series "series" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ bbl.of space.word * swap$
+ emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { bbl.number }
+ { bbl.number capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { bbl.in space.word *
+ series "series" bibinfo.check *
+ }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+FUNCTION {is.num}
+{ chr.to.int$
+ duplicate$ "0" chr.to.int$ < not
+ swap$ "9" chr.to.int$ > not and
+}
+
+FUNCTION {extract.num}
+{ duplicate$ 't :=
+ "" 's :=
+ { t empty$ not }
+ { t #1 #1 substring$
+ t #2 global.max$ substring$ 't :=
+ duplicate$ is.num
+ { s swap$ * 's := }
+ { pop$ "" 't := }
+ if$
+ }
+ while$
+ s empty$
+ 'skip$
+ { pop$ s }
+ if$
+}
+
+FUNCTION {convert.edition}
+{ extract.num "l" change.case$ 's :=
+ s "first" = s "1" = or
+ { bbl.first 't := }
+ { s "second" = s "2" = or
+ { bbl.second 't := }
+ { s "third" = s "3" = or
+ { bbl.third 't := }
+ { s "fourth" = s "4" = or
+ { bbl.fourth 't := }
+ { s "fifth" = s "5" = or
+ { bbl.fifth 't := }
+ { s #1 #1 substring$ is.num
+ { s eng.ord 't := }
+ { edition 't := }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ t
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+ {
+ convert.edition
+ output.state mid.sentence =
+ { "l" }
+ { "t" }
+ if$ change.case$
+ "edition" bibinfo.check
+ " " * bbl.edition *
+ }
+ if$
+}
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+FUNCTION {format.pages}
+{ pages duplicate$ empty$ 'skip$
+ { duplicate$ multi.page.check
+ {
+ n.dashify
+ }
+ {
+ }
+ if$
+ "pages" bibinfo.check
+ }
+ if$
+}
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ pop$ format.pages }
+ {
+ ", " *
+ swap$
+ n.dashify
+ "pages" bibinfo.check
+ *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$ 'skip$
+ {
+ ", " *
+ }
+ if$
+ swap$ *
+ }
+ if$
+}
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+ "volume" bibinfo.check
+ }
+ if$
+ bolden
+ number "number" bibinfo.check duplicate$ empty$ 'skip$
+ {
+ swap$ duplicate$ empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ swap$
+ "(" swap$ * ")" *
+ }
+ if$ *
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { bbl.chapter }
+ { type "l" change.case$
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.booktitle}
+{
+ booktitle "booktitle" bibinfo.check
+ emphasize
+}
+FUNCTION {format.in.ed.booktitle}
+{ format.booktitle duplicate$ empty$ 'skip$
+ {
+ editor "editor" format.names.ed duplicate$ empty$ 'pop$
+ {
+ get.bbl.editor
+ swap$ "," *
+ " " * swap$ *
+ swap$
+ "," *
+ " " * swap$
+ * }
+ if$
+ word.in swap$ *
+ }
+ if$
+}
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+ 'pop$
+ { swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+FUNCTION {format.article.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ { bbl.volume
+ capitalize
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+ }
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.incoll.inproc.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+ address empty$ t empty$ and
+ 'skip$
+ {
+ t empty$
+ { address "address" bibinfo.check *
+ }
+ { t *
+ address empty$
+ 'skip$
+ { ", " * address "address" bibinfo.check * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ {
+ journal
+ "journal" bibinfo.check
+ emphasize
+ "journal" output.check
+ add.blank
+ format.vol.num.pages output
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ format.issn output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ format.publisher.address output
+ }
+ {
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.isbn output
+ format.book.pages output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+ format.isbn output
+ format.book.pages output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ crossref missing$
+ {
+ format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ format.publisher.address output
+ }
+ {
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ crossref missing$
+ { format.isbn output }
+ 'skip$
+ if$
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ format.publisher.address output
+ format.edition output
+ format.isbn output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ new.sentence
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ format.isbn output
+ format.issn output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ organization address new.block.checkb
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ format.edition output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.mthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title output
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.phdthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ format.editors output
+ editor format.key output
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ new.sentence
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ format.isbn output
+ format.issn output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title
+ "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" bibinfo.warn output
+ address "address" bibinfo.check output
+ new.block
+ format.url output
+ new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ format.url output
+ new.block
+ format.note "note" output.check
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+READ
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+INTEGERS { len }
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+FUNCTION {format.lab.names}
+{ 's :=
+ "" 't :=
+ s #1 "{vv~}{ll}" format.name$
+ s num.names$ duplicate$
+ #2 >
+ { pop$
+ " " * bbl.etal emphasize *
+ }
+ { #2 <
+ 'skip$
+ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+ " " * bbl.etal emphasize *
+ }
+ { " \& " * s #2 "{vv~}{ll}" format.name$
+ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.label}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.label
+ 'author.key.label
+ if$
+ }
+ if$
+ 'short.list :=
+}
+
+FUNCTION {calc.label}
+{ calc.short.authors
+ short.list
+ "("
+ *
+ year duplicate$ empty$
+ { pop$ "????" }
+ 'skip$
+ if$
+ *
+ 'label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{ll{ }}{ ff{ }}{ jj{ }}"
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ { t sortify * }
+ if$
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {editor.sort}
+{ editor empty$
+ { key empty$
+ { "to sort, need editor or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+FUNCTION {presort}
+{ calc.label
+ label sortify
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.sort
+ 'author.sort
+ if$
+ }
+ if$
+ #1 entry.max$ substring$
+ 'sort.label :=
+ sort.label
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+SORT
+STRINGS { last.label next.extra }
+INTEGERS { last.extra.num number.label }
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+ #0 'number.label :=
+}
+FUNCTION {forward.pass}
+{ last.label label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ label 'last.label :=
+ }
+ if$
+ number.label #1 + 'number.label :=
+}
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+ extra.label
+ duplicate$ empty$
+ 'skip$
+ { "{\natexlab{" swap$ * "}}" * }
+ if$
+ 'extra.label :=
+ label extra.label * 'label :=
+}
+EXECUTE {initialize.extra.label.stuff}
+ITERATE {forward.pass}
+REVERSE {reverse.pass}
+FUNCTION {bib.sort.order}
+{ sort.label
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+ITERATE {bib.sort.order}
+SORT
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" number.label int.to.str$ * "}" *
+ write$ newline$
+ "\providecommand{\natexlab}[1]{#1}"
+ write$ newline$
+ "\providecommand{\url}[1]{\texttt{#1}}"
+ write$ newline$
+ "\providecommand{\urlprefix}{URL }"
+ write$ newline$
+ "\providecommand{\selectlanguage}[1]{\relax}"
+ write$ newline$
+}
+EXECUTE {begin.bib}
+EXECUTE {init.state.consts}
+ITERATE {call.type$}
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+EXECUTE {end.bib}
+%% End of customized bst file
+%%
+%% End of file `cc2.bst'.
+%CC2BST>
+%</cc2bst>
+% \end{macrocode}
+%
+% \else% bst
+% The text of this file is omitted.
+% \fi% bst
+%
+% \def\filename{cc.bst}
+% \def\fileversion{None}
+% \def\filedate{1996/02/06}
+% \CodelinePrefix{o}
+%
+% \section{Source of \filename (\fileprefix)}
+%
+% This file (\file{\filename}) has version number \fileversion, last
+% revised \filedate.
+% \ifoldbst% The old bibliography style is normally not printed.
+% \hfuzz=\oddsidemargin
+% \def\MacroFont{\fontencoding\encodingdefault
+% \fontfamily\ttdefault
+% \fontseries\mddefault
+% \fontshape\updefault
+% \tiny}
+% \let\AltMacroFont\MacroFont
+% \renewcommand{\theCodelineNo}{\rmfamily\tiny b\arabic{CodelineNo}}%
+% \begin{macrocode}
+%<*ccbst>
+%<<CCBST>
+% File name: cc.bst
+%
+% cc.bst style file for BibTeX.
+% February 6, 1996
+% This style file provides the following citation facilities:
+% Usage in Tex Output:
+% file:
+% \cite Cook (1990)
+% \citeauthor Cook
+% \citeyear 1990
+% \citemul Cook (1990, 1991a, 1991b)
+% \shortcite Cook 1990
+% \parencite (Cook 1990)
+% \nocite
+
+% It was prepared by modifying previous style files.
+% Here are acknowledgements:
+%> BibTeX `named' style file for BibTeX version 0.99c, LaTeX version 2.09
+%> Place it in a file called named.bst in the BibTeX search path. (Placing it
+%> in the same directory as the LaTeX document should also work.)
+%> Support for named citations is provided by named.sty
+
+%> This version was made by modifying the master file made by
+%> Oren Patashnik (PATASHNIK@SCORE.STANFORD.EDU)
+
+%> Copyright (C) 1985, all rights reserved.
+%> Modifications Copyright 1988, Peter F. Patel-Schneider
+%> Copying of this file is authorized only if either
+%> (1) you make absolutely no changes to your copy, including name, or
+%> (2) if you do make changes, you name it something other than
+%> btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+%> This restriction helps ensure that all standard styles are identical.
+
+%> There are undoubtably bugs in this style. If you make bug fixes,
+%> improvements, etc. please let me know. My e-mail address is:
+%> pfps@research.att.com
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { mode s t }
+
+%FUNCTION {message}
+%{
+% duplicate$ top$
+%}
+
+FUNCTION {output.nonnull}
+{ 's :=
+%%%% "output.nonnull" top$
+%%%% output.state top$
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+%%%% { ", " * write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+
+ "\bibitem[" write$
+ label write$
+ "]{" write$
+
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {semi.block}
+{ %%%%"semi.block" top$
+ mid.sentence 'output.state :=
+}
+
+%FUNCTION {semi.block}
+%{ output.state mid.sentence =
+% 'skip$
+% { after.block 'output.state := }
+% if$
+%}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.semiblock.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'semi.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\sl " swap$ * "}" * }
+ if$
+}
+
+FUNCTION {bold}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\bf " swap$ * "}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ "{\sc " *
+ numnames 'namesleft :=
+ { namesleft #0 > }
+
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ "}" *
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { "ed.\ "
+ editor format.names *
+ }
+ if$
+}
+
+FUNCTION {format.editors.reverse}
+{ editor empty$
+ { "" }
+ { editor format.names
+ ", ed." *
+ }
+ if$
+}
+
+FUNCTION {format.editors.simple}
+{ editor empty$
+ { "" }
+ { editor format.names }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+
+ { title "t" change.case$ }
+
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+% { "there's a month but no year in " cite$ * warning$
+% month
+% }
+ { }
+ if$
+ }
+% { month empty$
+% {year extra.label * }
+% { month " " * year * extra.label *}
+% if$
+% }
+ { year extra.label * }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+%FUNCTION {format.bvolume}
+%{ volume empty$
+% { "" }
+% { series empty$
+% 'skip$
+% {series emphasize ",\ vol.\ " * volume *}
+% if$
+% "volume and number" number either.or.check
+% }
+% if$
+%}
+%FUNCTION {format.bvolume}
+%{ volume empty$
+% { "" }
+% { series empty$
+% 'skip$
+% {series emphasize "\ " * volume bold *}
+% if$
+% "volume and number" number either.or.check
+% }
+% if$
+%}
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "vol." volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+%FUNCTION {format.number.series}
+%{ volume empty$
+% { number empty$
+% { series field.or.null }
+% { output.state mid.sentence =
+% { "number" }
+% { "Number" }
+% if$
+% number tie.or.space.connect
+% series empty$
+% { "there's a number but no series in " cite$ * warning$ }
+% { " in " * series * }
+% if$
+% }
+% if$
+% }
+% { "" }
+% if$
+%}
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { series "\ " * number bold * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { pages n.dashify }
+ { "p." pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+
+FUNCTION {format.vol.num.year}
+{ volume field.or.null bold
+ number empty$
+ 'skip$
+ { "(" number * ")\," * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ year empty$
+ 'skip$
+ { "\ (" * format.date * ")" * }
+ if$
+}
+
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null bold
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ",\, pp.\, " * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " booktitle emphasize * ", " * format.editors * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+
+ key empty$ not and
+
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.publisher.address}
+{ address empty$
+ 'publisher
+ { publisher ", " * address * }
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "In {\em " journal * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ " \shortcite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \shortcite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "In {\em " booktitle * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ }
+ { "In " format.crossref.editor * }
+ if$
+ " \shortcite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ semi.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "\ " * format.vol.num.year * "journal" output.check
+ format.pages output
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors.simple "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ semi.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ format.publisher.address "publisher" output.check
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ semi.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ semi.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ format.publisher.address "publisher" output.check
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ semi.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ format.publisher.address "publisher" output.check
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ semi.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date output
+ }
+ { address output.nonnull
+ format.date output
+%%%% new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ format.pages output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ semi.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ semi.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors "author" output.check
+ title howpublished new.semiblock.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ semi.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+% { format.editors output.nonnull }
+ { format.editors.reverse output.nonnull }
+ if$
+ semi.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ semi.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ semi.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+
+MACRO {jan} {"January"}
+MACRO {feb} {"February"}
+MACRO {mar} {"March"}
+MACRO {apr} {"April"}
+MACRO {may} {"May"}
+MACRO {jun} {"June"}
+MACRO {jul} {"July"}
+MACRO {aug} {"August"}
+MACRO {sep} {"September"}
+MACRO {oct} {"October"}
+MACRO {nov} {"November"}
+MACRO {dec} {"December"}
+
+
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+FUNCTION {format.lab.names}
+{
+ 's :=
+ s num.names$ 'numnames :=
+
+ mode "cite" =
+ { numnames #1 =
+ { s #1 "{vv }{ll}" format.name$ }
+ { numnames #2 =
+ { s #1 "{vv }{ll }\& " format.name$ s #2 "{vv }{ll}" format.name$ * }
+ { s #1 "{vv }{ll }\bgroup \em et al.\egroup " format.name$ }
+ if$
+ }
+ if$
+ }
+ { numnames #1 =
+ { s #1 "{ll}" format.name$ }
+ { numnames #2 =
+ { s #1 "{ll }\& " format.name$ s #2 "{ll}" format.name$ * }
+ { s #1 "{ll }\bgroup \em et al.\egroup " format.name$ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+
+ { cite$ #1 #3 substring$ }
+
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+
+ { cite$ #1 #3 substring$ }
+
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+
+ { cite$ #1 #3 substring$ }
+
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+
+ { cite$ #1 #3 substring$ }
+
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.label}
+{
+ "cite" 'mode :=
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+
+ "\protect\citeauthoryear{" swap$ * "}{" *
+ year field.or.null purify$ * % CHANGED - pfps - 15 Feb 1989
+ 'label :=
+
+ "sort" 'mode :=
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ " " *
+ year field.or.null purify$ *
+ sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+
+ nameptr numnames = t "others" = and
+ { "et al" * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+
+{ calc.label
+ sort.label
+
+ " "
+ *
+ type$ "book" =
+
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+
+ *
+
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ cite$
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * "}" * 'label := % CHANGED - pfps 15 Feb 1989
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+
+{ et.al.char.used
+ { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
+ 'skip$
+ if$
+ preamble$ empty$
+
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+
+ "\begin{thebibliography}{}\small" write$ newline$
+
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+%CCBST>
+%</ccbst>
+% \end{macrocode}
+% \else% oldbst
+% The text of this file is omitted.
+% \fi% oldbst
+%
+% \GetFileInfo{relabel.sty}
+% \CodelinePrefix{R}
+%
+% \cleardoublepage
+% \setcounter{IndexColumns}{2}%
+% \addcontentsline{toc}{section}{Index}\PrintIndex
+% \addcontentsline{toc}{section}{Change History}\PrintChanges
+% \ifx\tableofcontents\relax\else
+% \clearpage
+% \expandafter\ifodd\csname c@page\endcsname~\clearpage\fi
+% \csname @ifundefined\endcsname{multicols}
+% {{\scriptsize\tableofcontents}}
+% {\begin{multicols}{2}
+% \scriptsize
+% \tableofcontents
+% \end{multicols}
+% \global\let\tableofcontents\relax
+% }
+% \fi
+%
+% \iffalse meta-comment
+%<*driver>
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "cc"
+%%% End:
+%</driver>
+% \fi
diff --git a/Master/texmf-dist/source/latex/computational-complexity/cc.ins b/Master/texmf-dist/source/latex/computational-complexity/cc.ins
new file mode 100644
index 00000000000..6440bcd9b7f
--- /dev/null
+++ b/Master/texmf-dist/source/latex/computational-complexity/cc.ins
@@ -0,0 +1,105 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% Copyright 2000
+%% Michael Nüsken, Joachim von zur Gathen, computational complexity
+%%
+%% This file is part of the computational complexity (cc) package
+%% --------------------------------------------------------------
+%%
+%% It may be distributed 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.
+%%
+%% In particular, NO PERMISSION is granted to modify the contents of this
+%% file since it contains the legal notices that are placed in the files
+%% it generates.
+%%
+%% The list of all files belonging to the LaTeX base distribution is
+%% given in the file `manifest.txt'. See also `legal.txt' for additional
+%% information.
+%%
+%%
+%%
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+
+\input docstrip
+
+\preamble
+
+This is a generated file.
+
+Copyright 2000-2003
+Michael N"usken, Joachim von zur Gathen, computational complexity
+
+IMPORTANT NOTICE:
+
+You are *not* allowed to modify this file.
+
+You are *not* allowed to distribute this file.
+For distribution of the original source see the terms
+for copying and modification in the file cc.dtx.
+
+\endpreamble
+
+\keepsilent
+%%\usedir{tex/latex/cc}
+
+\askforoverwritefalse
+\generate{% Normal tex or style files
+ \file{cc.cls}{\from{cc.dtx}{cccls,chartab}}
+ \file{ccaux.sty}{\from{cc.dtx}{ccaux,chartab}}
+ \file{cc-cls.sty}{\from{cc.dtx}{ccsty,chartab}}
+ \file{cclayout.sty}{\from{cc.dtx}{cclayout,chartab}}
+ \file{ccreltx.sty}{\from{cc.dtx}{ccreltx,chartab}}
+ \file{ccthm.sty}{\from{cc.dtx}{ccthm,chartab}}
+ \file{ccproof.sty}{\from{cc.dtx}{ccproof,chartab}}
+ \file{ccalgo.sty}{\from{cc.dtx}{ccalgo,chartab}}
+ \file{cc2cite.sty}{\from{cc.dtx}{cc2cite,chartab}}
+ \file{cccite.sty}{\from{cc.dtx}{cccite,chartab}}
+ \file{ccdbs.sty}{\from{cc.dtx}{ccdbs,chartab}}
+ \file{thcc.sty}{\from{cc.dtx}{thcc,chartab}}
+ \file{relabel.sty}{\from{cc.dtx}{relabel,chartab}}
+ \file{ccqed.sty}{\from{cc.dtx}{ccqed,chartab}}
+ \file{ccquickref.tex}{\from{cc.dtx}{quickref,chartab}}
+ \file{cc2.dbj}{\from{cc.dtx}{cc2dbj,chartab}}
+}
+
+\generate{% Special files without preamble or postamble
+ \nopostamble
+ \nopreamble
+ \file{cctemplate.tex}{\from{cc.dtx}{cctemplate}}
+ \file{cc-portability-frame.tex}{\from{cc.dtx}{ccportabilityframe}}
+ \file{cc2.bst}{\from{cc.dtx}{cc2bst}}
+ \file{cc.bst}{\from{cc.dtx}{ccbst}}% old version
+ }
+
+\generate{% Style files for adopting cc to other classes
+ \file{cc4apjrnl.sty}{\from{cc.dtx}{cc4apjrnl,chartab}}
+ \file{cc4amsart.sty}{\from{cc.dtx}{cc4amsart,chartab}}
+ \file{cc4llncs.sty}{\from{cc.dtx}{cc4llncs,chartab}}
+ \file{cc4siamltex.sty}{\from{cc.dtx}{cc4siamltex,chartab}}
+ \file{cc4jT.sty}{\from{cc.dtx}{cc4jT,chartab}}
+ \file{cc4elsart.sty}{\from{cc.dtx}{cc4elsart,chartab}}
+ }
+
+\ifToplevel{
+\Msg{You may call: tex cc2.dbj to produce cc2.bst from scratch}
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To produce the documentation run the files ending with}
+\Msg{* `.dtx' through LaTeX2e.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+
+\endbatchfile
+