From 9b9579f2f1c4c73e0a1d5c88a38fa35bbd1586d8 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 11 Jan 2006 23:51:54 +0000 Subject: trunk/Master/texmf-dist/source/latex/computational-complexity git-svn-id: svn://tug.org/texlive/trunk@198 c570f23f-e606-0410-a88d-b1316a301751 --- .../source/latex/computational-complexity/cc.dtx | 11493 +++++++++++++++++++ 1 file changed, 11493 insertions(+) create mode 100644 Master/texmf-dist/source/latex/computational-complexity/cc.dtx (limited to 'Master/texmf-dist/source/latex/computational-complexity/cc.dtx') diff --git a/Master/texmf-dist/source/latex/computational-complexity/cc.dtx b/Master/texmf-dist/source/latex/computational-complexity/cc.dtx new file mode 100644 index 00000000000..5a7fa8ffdf3 --- /dev/null +++ b/Master/texmf-dist/source/latex/computational-complexity/cc.dtx @@ -0,0 +1,11493 @@ +% \iffalse meta-comment +% +% Copyright 2000, 2003, computational complexity, Michael Nüsken +% +% This file is part of computational complexity macro package. +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.2 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.2 or later is part of all distributions of LaTeX +% version 1999/12/01 or later. +% +% ----------------------------------------------------------- +% +% Look for %*% in this file, when you try to find \documentclass or +% changeable options. +% +%<*chartab> +%\fi +% \CheckSum{6340} +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% \iffalse meta-comment +% +% \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} +% +%<*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} + +% +% 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 +% +% \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} +% +% +% \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!}} + } +% +% \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} +% +% \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} +% +% \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} +% +% \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} +% +% \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} +% +% \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} +% +% \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 +% +% \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} +% +% \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} +% +% \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} +% +% \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} + +% +% \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 +% +% \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} +% +% \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}} +% +% \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} +% +% \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} +%%% +% +% \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} +% +% \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} +% +% \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} +% +% \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> +%< +%% 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> +% +% \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> +%< +%% +%% 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> +% +% \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> +%< +% 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> +% +% \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: +% +% \fi -- cgit v1.2.3