% \iffalse meta-comment % % Copyright 2000-2008 computational complexity, Michael Nüsken % % This file is part of computational complexity macro package. % % The package consists of this file, the file cc.ins and all files % generated by them. % % The package may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.2 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.2 or later is part of all distributions of LaTeX % version 1999/12/01 or later. % % ----------------------------------------------------------- % % Look for %*% in this file, when you try to find \documentclass or % changeable options. Look for CC MAIN DATE AND VERSION for main date % and version. % %<*chartab> %\fi % \CheckSum{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://www.linkspringer.com/?genre=article&issn=1016-3328}% \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)\\ Dahlmannstr. 2\\ 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 Dahlmannstr. 2 D-53113 Bonn \textsc{Germany} Email: \email{gathen@bit.uni-bonn.de} \end{quotation} Information about \cc{} can be found at the journal's homepage \cchomepage{}. There you also find a pointer to the publisher's page for \cc{}: \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. Use the format \texttt{8 August 2008}. \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} % \changes{v2.04}{2006/03/08}{Advanced version to 2.05, Michael % N{\"{u}}sken, Bonn} % \changes{v2.06}{2007/01/10}{Advanced version to 2.07, Michael % N{\"{u}}sken, Bonn} % \changes{v2.07}{2008/03/18}{Advanced version to 2.08, Michael % N{\"{u}}sken, Bonn} % \changes{v2.08}{2008/04/25}{Advanced version to 2.09, adapted % license information in cc.dtx and cc.ins, Michael N{\"{u}}sken, % Bonn} % \changes{v2.09}{2010/01/26}{Advanced version to 2.10, just a few % minor changes, Michael N{\"{u}}sken, Bonn} % \changes{v2.10}{2010/05/11}{Advanced version to 2.11, redesign of % algorithms, Michael N{\"{u}}sken, Bonn} % \changes{v2.11}{2010/05/16}{Advanced version to 2.12, deactivate % fullpage.sty when ccpublish is active, remove debug output in % ccalgo, Michael N{\"{u}}sken, Bonn} % \changes{v2.12}{2010/05/21}{Advanced version to 2.13, debugged % indention processing in ccalgo, Michael N{\"{u}}sken, Bonn} % \changes{v2.13}{2010/06/29}{Advanced version to 2.14, debugged % setrefrange in ccalgo, Michael N{\"{u}}sken, Bonn} % \changes{v2.14}{2010/10/14}{Advanced version to 2.15, added % cc4svjour, Michael N{\"{u}}sken, Bonn} % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}[1995/12/01] \providecommand\ignorespacesafterend{\@ignoretrue} \newif\ifclass \ifx\@currext\@clsextension\classtrue\else\classfalse\fi \ifclass\expandafter\ProvidesClass\else\expandafter\ProvidesPackage\fi {\ifclass cc\else cc-cls\fi} [% CC MAIN DATE AND VERSION ON NEXT LINE 2010/10/14 v2.15 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, unless they terminate with a % full stop, question mark, or exlamantion mark. % \changes{v2.06}{2006/10/13}{Made full stop in section and % subsection headings optional.} % \begin{macrocode} \def\opt@fullstop#1{#1{\has@fullstop#1.\@@@ \if@tempswa\else \has@exlamationmark#1!\@@@ \if@tempswa\else \has@questionmark#1?\@@@ \if@tempswa\else .\fi \fi \fi}} \def\has@fullstop#1.#2\@@@{\@ifempty{#2}{\@tempswafalse}{\@tempswatrue}} \def\has@exlamationmark#1!#2\@@@{\@ifempty{#2}{\@tempswafalse}{\@tempswatrue}} \def\has@questionmark#1?#2\@@@{\@ifempty{#2}{\@tempswafalse}{\@tempswatrue}} \def\dot@sect#1#2#3#4#5#6[#7]#8{% \let\@sect\ccorg@sect\let\@ssect\ccorg@ssect \@sect{#1}{#2}{#3}{#4}{#5}{#6}[#7]{\opt@fullstop{#8}}} \def\dot@ssect#1#2#3#4#5{% \let\@sect\ccorg@sect\let\@ssect\ccorg@ssect \@ssect{#1}{#2}{#3}{#4}{\opt@fullstop{#5}}} \def\add@dot{% \let\ccorg@sect\@sect\let\ccorg@ssect\@ssect \let\@sect\dot@sect\let\@ssect\dot@ssect} \renewcommand{\subsection}{% \add@dot \@startsection{subsection}{2}{\z@}% {2.33ex\@plus.5ex\@minus.2ex}% was 12pt +- {-1em}% {\normalfont\normalsize\bfseries}} \renewcommand{\subsubsection}{% \add@dot \@startsection{subsubsection}{3}{\z@}% {1.55ex\@plus.5ex\@minus.2ex}% was 8pt +- {-1em}% {\normalfont\normalsize\bfseries}} % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\paragraph} % \begin{macro}{\subparagraph} % Paragraphs and subparagraphs are inherited from the class. % \begin{macrocode} \fi%@ccsectioning % \end{macrocode} % \end{macro} % \end{macro} % % \subsection{Bibliography and citations} % % The preferred access to bibliography and citations is via the % package \Lpackage{natbib}. It provides much more flexibility for % the user and works with almost every bibliography style. % \changes{v2.01}{2001/08/28}{Added undocumented manualbibliography. % Michael N{\"{u}}sken, Paderborn.} % \begin{macrocode} \if@natbib \RequirePackage{cc2cite} \if@manualbibliography \bibstyle@plain%\bibpunct{[}{]}{;}{n}{}{,} \fi \else%@natbib \if@cccite % \end{macrocode} % % The package \Lpackage{cccite} contains the definitions for the % informative citation style like `Cook (1971)'. It also issues % |\bibliographystyle{\bibstyle@default}|, if no other style is % defined before the |\bibliography| command. % \begin{macrocode} \RequirePackage{cccite} % \end{macrocode} % % \begin{environment}{thebibliography} % We redefine this 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}[2008/03/18 v2.08 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...)} % \changes{v2.04}{2005/11/03}{\cs{ccaddto}, \cs{ccaddtoINDOC}, % \cs{ccaddtonow} now use only global defs.)} % \changes{v2.07}{2008/03/18}{Changed \cs{cc@ifempty} to long, MN, Bonn} % \begin{macrocode} % \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 \gdef#1{#2}% \AtBeginDocument{\expandafter\ccaddtonow\expandafter{#1}#3}% \else \ifx#1\relax \gdef#1{#2}% \AtBeginDocument{\expandafter\ccaddtonow\expandafter{#1}#3}% \else {\toks@\expandafter{#1#2}% \xdef#1{\the\toks@}}% \fi \fi } \newcommand{\ccaddtoINDOC}[3]{% \ifx#1\@undefined \gdef#1{#2}% \else \ifx#1\relax \gdef#1{#2}% \else {\toks@\expandafter{#1#2}% \xdef#1{\the\toks@}}% \fi \fi } \AtBeginDocument{\global\let\ccaddto\ccaddtoINDOC} \newcommand{\ccaddtonow}[2]{% \ifx#2\@undefined \gdef#2{#1}% \else \ifx#2\relax \gdef#2{#1}% \else {\toks@\expandafter{#2#1}% \xdef#2{\the\toks@}}% \fi \fi } % \@ifempty and \@ifnotempty are def'd in amsmath.sty, but we need it % here. \long\def\cc@ifempty#1{\cc@xifempty#1@@..\@nil} \long\def\cc@xifempty#1#2@#3#4#5\@nil{% \ifx#3#4\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} \long\def\cc@ifnotempty#1{\cc@ifempty{#1}{}} % \end{macrocode} % \begin{macro}{\babel} % 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. % \changes{v2.04}{2006/03/06}{Changed @abstr to allow for very % long abstracts, MN, Bonn} % \changes{v2.07}{2008/03/18}{Changed @abstr to decrease spacing in % embedded lists and forbid nested lists, MN, Bonn} % \begin{macrocode} \newdimen\@abstrwidth \newenvironment{@abstr}[1]{% \vbox\bgroup \hsize\textwidth \@parboxrestore \leftmargin.5\textwidth \advance\leftmargin-.5\@abstrwidth \rightmargin\leftmargin \@trivlist\@newlistfalse\global\@inlabeltrue \advance\linewidth -\rightmargin \advance\linewidth -\leftmargin \advance\@totalleftmargin \leftmargin \parshape \@ne \@totalleftmargin \linewidth \small \def\@listi{\leftmargin\leftmargini \topsep 2\p@ \@plus2\p@ \@minus1\p@ \parsep 1\p@ \itemsep \parsep}% %%% \let\origcclist\list %%% \def\list{\ifnum\@listdepth>0\relax\@toodeep\fi\origcclist}% \let\@listii\@toodeep \let\@listiii\@toodeep \let\@listiv\@toodeep \let\@listv\@toodeep \let\@listvi\@toodeep \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.)} % \changes{v2.03}{2005/08/27}{Changed label at end of document to % |ccenddocument | to avoid a problem with \lpackage{hyperref}. % (\lpackage{hyperref} has also problems with |!| as part of label % names.)} % \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{ccenddocument}}% } \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 \if@oddaffil\else\even@sep\even@post\fi %%% \end{tabular} %%% \par } \def\init@affils{% \let\and\relax \global\@oddaffiltrue } \def\extract@affils#1\and#2\@nil{% \cc@ifempty{#1}{\let\next\gobble@nil}{% \extract@affil#1\\\@nil \let\next\extract@affils}% \next#2\@nil} % \end{macrocode} % Each address is put in a \Lenv{@ffiliation} environment (defined % below). The |\currentaddress| macro is defined with the knowledge % of the author name (which is the first line of the address). Also % the author name is typed in small capitals. % \begin{macrocode} \def\extract@affil#1\\#2\@nil{% \affilpre \def\currentaddress{\otheraddress Current address of \textsc{\ignorespaces#1}:\\}% \begin{@ffiliation} \textsc{\ignorespaces#1}\\#2 \end{@ffiliation} \affilpost} % \end{macrocode} % \begin{macro}{\otheraddress} % \begin{macro}{\affilsep} % The macro |\otheraddress| seperates two address blocks for one % author. |\affilsep| simply decides whether to switch to the next % column or to a new line in the surrounding \Lenv{tabular}. % \changes{v2.01}{2001/01/23}{Changed odd affiliation seperator. % Michael N{\"{u}}sken, Paderborn} % \changes{v2.14}{2010/08/03}{Debugged affiliation seperation. % Michael N{\"{u}}sken, Paderborn} % \begin{macrocode} \newcommand{\otheraddress}{\end{@ffiliation}\affilsep \begin{@ffiliation}} \def\affilpre{\if@oddaffil\odd@pre\else\even@pre\fi} \def\affilpost{\if@oddaffil\odd@post\global\@oddaffilfalse \else\even@post\global\@oddaffiltrue\fi} \def\odd@pre{\par\begin{tabular}{@{}ll@{}}}% \def\odd@post{&}% \def\even@pre{}% \def\even@post{\end{tabular}}% %%% \def\affilsep{% \if@oddaffil\odd@sep\@oddaffilfalse \else\even@sep\@oddaffiltrue \fi } \newif\if@oddaffil \def\odd@sep{&}% \def\even@sep{\end{tabular}\par\begin{tabular}{@{}ll@{}}}% %\def\even@sep{\\*[\medskipamount]}% % \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} % \changes{v2.11}{2010/06/17}{Deactivate fullpage.sty with % ccpublish. Michael N{\"{u}}sken, Bonn} % \changes{v2.13}{2010/06/22}{Disabled the file control, instead with % ccpublish the compilation will abort with a FATAL ERROR. Michael % N{\"{u}}sken, Bonn} % \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 %%% \if@ccpublish %%% \expandafter\xdef\csname ver@fullpage.sty\endcsname{9999}% %%% \expandafter\xdef\csname ver@a4wide.sty\endcsname{9999}% %%% \ClassWarning{cc}{The packages fullpage, a4wide are ignored %%% when publishing in the journal \cc.}{}% %%% \fi \AtBeginDocument{% \if@ccpublish\@tempswafalse \ifdim\topmargin=0mm\relax\else\@tempswatrue\fi \ifdim\textwidth=141mm\relax\else\@tempswatrue\fi \ifdim\textheight=200mm\relax\else\@tempswatrue\fi \if@tempswa \ClassError{cc}{FATAL ERROR! For publishing in cc the page and text dimension must not be manipulated. Remove any packages that modify the text or page dimensions. In particular: remove the packages^^J fullpage.sty,^^J a4wide.sty,^^J geometry.sty,^^J vmargin.sty,^^J typearea.sty}{}% \endinput \fi \fi } % \end{macrocode} % We fit the margins so that 1~in + |\oddsidemargin| + |\textwidth| + % |\evensidemargin| + 1~in = |\paperwidth|. (Note that the margins % are usually measured with an offset of 1~in on each side.) % \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} % \changes{v2.04}{2006/03/06}{Changed maketitle to allow for very % long abstracts, MN, Bonn} % \changes{v2.04}{2006/03/08}{Adapted maketitle due to hyperref, MN, Bonn} % \changes{v2.08}{2008/04/25}{Bug repair: Added \cs{protect} to % \cs{ClassWarningNoLine} calls in \cs{maketitle}, Michael % N{\"{u}}sken, Bonn} % \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@ccenddocument}{\@tempcnta\z@}{% \@tempcnta\@ne \advance\@tempcnta-\@ccfirst \edef\@tempa{\csname r@ccenddocument\endcsname}% \ifx\@secondoffive\@@@@undefined% hyperref launches this! \edef\@tempa{\expandafter\@secondoftwo\@tempa{}{}{}{}{}}% \else \edef\@tempa{\expandafter\@secondoffive\@tempa{}{}{}{}{}}% \fi% \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{ccenddocument}\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]{\protect\ClassWarningNoLine{cc}{% There are no footnotes allowed in title or author.\MessageBreak Your command is ignored.\MessageBreak Think about moving your remark to the acknowledgements}}% \let\thanks\footnote \else \renewcommand{\footnote}[1]{\protect\ClassWarningNoLine{cc}{% In title or author \string\footnote\space does not work.\MessageBreak Avoid footnotes or use \string\thanks}}% \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\unvbox\@abstract\par \fi }{% \ifvoid\@abstract\else \ClassWarningNoLine{cc}{Two abstracts, using the one defined by \protect\Abstract}% \fi \global\setbox\@abstract \@abstr{\ccabstractname} \the\@abstract@toks \end@abstr \@tempa\leavevmode\unvbox\@abstract\par } \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\unvbox\@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\unvbox\@subject\par \fi \@thanks \ifx\@tempa\relax\vskip3ex\fi \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}[2008/03/18 v2.08 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|. % \changes{v2.07}{2007/01/11}{Added support for manualbibliography. % Michael N{\"{u}}sken, Bonn} % \begin{macrocode} \def\activate@shortcite{} \AtBeginDocument{% \@ifpackageloaded{cccite}{% \def\activate@shortcite{\let\cite\shortcite} }{}% \@ifpackageloaded{natbib}{% \def\activate@shortcite{% \let\cite\citealt \let\citet\citealt \let\citep\citealp }% }{}% \if@manualbibliography\def\activate@shortcite{}\fi } % \end{macrocode} % % This is the standard theorem layout for \cc. The theorem text is % typeset slanted, the header terminates with a dot. Inside the % optional argument |\cite| is |\shortcite| which avoids double % parentheses. % \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.05 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.05 proof environments for cc. Michael Nuesken, Bonn.] % \end{macrocode} % % We rely on F.~Mittelbach's \Lpackage{theorem} style plus the % corresponding layout for \cc. % \begin{macrocode} \RequirePackage{theorem} \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} % \changes{v2.10}{2010/05/11}{Redesign. Now at any time item with % text label and hanging indentation are possible as used for input % and output: \cs{item}[itemtitle] does it.} % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesPackage{ccalgo}[2005/08/27 v2.05 algorithm environment for cc. Michael Nuesken, Bonn.] % \end{macrocode} % Next we undefine some macros in case of overloading. % \begin{macrocode} \let\namedalgorithm\@undefined \let\endnamedalgorithm\@undefined \let\algorithm\@undefined \let\endalgorithm\@undefined % \end{macrocode} % % For a dirty trick below we rely on the specific implementation of % |\@item|. Thus we verify it! % \begin{macrocode} {\def\algonumerate@item[#1]{% \if@noparitem \@donoparitem \else \if@inlabel \indent \par \fi \ifhmode \unskip\unskip \par \fi \if@newlist \if@nobreak \@nbitem \else \addpenalty\@beginparpenalty \addvspace\@topsep \addvspace{-\parskip}% \fi \else \addpenalty\@itempenalty \addvspace\itemsep \fi \global\@inlabeltrue \fi \everypar{% \@minipagefalse \global\@newlistfalse \if@inlabel \global\@inlabelfalse {\setbox\z@\lastbox \ifvoid\z@ \kern-\itemindent \fi}% \box\@labels \penalty\z@ \fi \if@nobreak \@nobreakfalse \clubpenalty \@M \else \clubpenalty \@clubpenalty \everypar{}% \fi}% \if@noitemarg \@noitemargfalse \if@nmbrlist \refstepcounter\@listctr \fi \fi \sbox\@tempboxa{\makelabel{#1}}% % \end{macrocode} % We require that |\global| follows this |\makelabel| to insert a % hook. Moreover we use that the produced label is put in % \cs{@tempboxa} to reinitialize the paragraph indention in % \cs{reinit@list@label}. % \begin{macrocode} \global\setbox\@labels\hbox{% \unhbox\@labels \hskip \itemindent \hskip -\labelwidth \hskip -\labelsep \ifdim \wd\@tempboxa >\labelwidth \box\@tempboxa \else \hbox to\labelwidth {\unhbox\@tempboxa}% \fi \hskip \labelsep}% \ignorespaces} \ifx\algonumerate@item\@item\else \PackageWarningNoLine{ccalgo}{% Command \protect\@item\space has changed.\MessageBreak Check if current package is valid} \fi} % \end{macrocode} % We load Frank Mittelbach's theorem style, \cc's add-on and the % \Lpackage{relabel} package. (The latter is for adding prefixes to % labels and thelike.) % \changes{v2.05}{2010/01/25}{Requiring ccaux now.} % \begin{macrocode} \RequirePackage{ccaux} \RequirePackage{theorem} \RequirePackage{thcc} \RequirePackage{relabel} % \end{macrocode} % % This macro restores the parshape of the current list. % \begin{macrocode} \def\list@parshape{% %%\typeout{parshape 1 \the\@totalleftmargin+\the\linewidth}% \parshape \@ne \@totalleftmargin \linewidth} % \end{macrocode} % Reinitializing the list means to readjust the left margin while % leaving the position of the list's labels fixed. % \begin{macrocode} \newdimen\reinit@list@last \def\reinit@list#1{% %%% \dimen@i#1\relax %%% \typeout{Reinit: old \the\reinit@list@last, new \the\dimen@i}%%% DEBUG \advance\itemindent\reinit@list@last \advance\@totalleftmargin-\reinit@list@last \advance\linewidth\reinit@list@last \global\reinit@list@last#1\relax \ifdim\reinit@list@last>\algonumerate@maxindent \global\reinit@list@last\algonumerate@maxindent\fi \advance\itemindent-\reinit@list@last \advance\@totalleftmargin\reinit@list@last \advance\linewidth-\reinit@list@last %%\typeout{\the\@totalleftmargin + \the\linewidth}% \list@parshape} % \end{macrocode} % Often reinitialization is needed with respect to the label's % width. % \begin{macrocode} \def\reinit@list@label{% \reinit@list{\wd\@tempboxa}% } % \end{macrocode} % \begin{macro}{\makealgolabel} % The standard format of the labels is the number followed by a dot. % \begin{macrocode} \newcommand{\makealgolabel}[1]{#1.} % \end{macrocode} % \end{macro} % % \begin{macro}{\makeoptalgolabel} % A special label is surrounded by parentheses. % \begin{macrocode} \newcommand{\makeoptalgolabel}[1]{(#1)} % \end{macrocode} % \end{macro} % % \begin{macro}{\makeoptalgocurrentlabel} % This macro is used to produce the |\bare| reference form for a % special label. % \begin{macrocode} \let\makeoptalgocurrentlabel\makeoptalgolabel % \end{macrocode} % \end{macro} % % \subsection{The \Lenv{algonumerate} environment} % % This environment is the basis of the algorithm environment. It % allows some items with names (as |Input|, |Output|) which have a % special indention. These named and the following numbered items % are separated by a |\medskip|. % % We need a counter. By default we do not use a prefix. % \begin{macrocode} \newcounter{algonumerate} \defprefix{algonumerate}{} % \end{macrocode} % This count holds the number of named items. % \begin{macrocode} \newcount\algonumerate@items % \end{macrocode} % Formatting the counter. % \begin{macrocode} \renewcommand{\thealgonumerate}{% \expandafter\ifnum\value{algonumerate}<\@ne \algonumfield% \else \arabic{algonumerate}\fi}% % \end{macrocode} % This macro returns the name corresponding to the counter % |algonumerate|. The macro |\@algonumfield| should be % defined using |\ifcase-#1| \dots{} |\fi| and return the % corresponding name. This is done be |\algonumerateinit|, see % below. % \begin{macrocode} \def\algonumfield{\ignorespaces \ifx\@algonumfield\relax\else \expandafter\@algonumfield\csname c@algonumerate\endcsname\fi \unskip} % \end{macrocode} % A toggle to distinguish special labels and numbered labels. % \begin{macrocode} \newif\if@speciallabel % \end{macrocode} % This macro produces the labels in all cases. % \changes{v2.10}{2010/05/11}{Redesign.} % \begin{macrocode} \newcommand{\labelalgonumerate}{% \count@\value{algonumerate}% \ifnum\count@<\z@ \algonumfield% \else \makealgolabel{\thealgonumerate}% \fi }% % \end{macrocode} % These two dimensions define the width of a label and its distance % to the text. % \begin{macrocode} \newdimen\algo@labelsep \newdimen\steplabelwidth % \end{macrocode} % This token list is executed at the next |\item|. % \changes{v2.13}{2010/05/29}{Introduced \cs{AtNextNumberedItem}, Michael % N{\"{u}}sken, Bonn} % \begin{macrocode} \newtoks\AtNextItem \newtoks\AtNextNumberedItem % \end{macrocode} % A toggle noting whether the named items are complete or not. % \changes{v2.10}{2010/05/11}{Redesign: implement another mechanism % to get information about the type of \cs{item} that was called.} % \begin{macrocode} \newif\if@noitemargcopy \let\orig@item\item \def\item{\@ifnextchar[{\@noitemargcopyfalse\orig@item}{\@noitemargcopytrue\orig@item}} \newcount\last@algolabeltype \newcount\this@algolabeltype % \end{macrocode} % This is |\makelabel| for our list. It produces the label, % inserts the hook and makes all necessary modifications. % \begin{macrocode} \newcommand{\algonumerate@label}[1]{% \expandafter\count@\value{algonumerate}% % \typeout{algonumerate@label #1}% % \typeout{...counter=\the\count@}% % \if@noitemargcopy\typeout{...noitemarg}\else\typeout{...explicititemarg}\fi % \end{macrocode} % Now, fork with respect to the item type. There are four variants: % a numbered item with negative counter procudes an item with hanging % indention and a text label from the list supplied at the list % initialisation. A numbered item with positive counter produces a % numbered item. The counter is stepped in these two cases and zero % is skipped. An item with empty optional argument produces an % item like a numbered one just without a number. An item with a % non-empty optional argument produces an item with hanging indention % and the optional argument as label. % \begin{macrocode} \if@noitemargcopy \ifnum\count@<\z@ \let\next\algonumerate@labelautomatic \global\last@algolabeltype\this@algolabeltype \global\this@algolabeltype\m@ne \else \let\next\algonumerate@labelnumber \global\last@algolabeltype\this@algolabeltype \global\this@algolabeltype\@ne \fi \else \def\@tempa{#1}% \ifx\@tempa\@empty \let\next\algonumerate@labelempty \global\last@algolabeltype\this@algolabeltype \global\this@algolabeltype\tw@ \else \let\next\algonumerate@labelexplicit \global\last@algolabeltype\this@algolabeltype \global\this@algolabeltype\z@ \fi \fi\next{#1}} % \end{macrocode} % For each of the four variants we now specify how to typeset them. % \begin{macrocode} \newcommand{\algonumerate@makelabelexplicit}[1]{% #1:\hskip\algo@labelsep% } \newcommand{\algonumerate@makelabelempty}[1]{% \hskip\steplabelwidth\hskip\algo@labelsep% } \newcommand{\algonumerate@makelabelautomatic}[1]{% #1:\hskip\algo@labelsep% } \newcommand{\algonumerate@makelabelnumber}[1]{% \hb@xt@\steplabelwidth{\hss %\hb@xt@\steplabelwidth{\hfill #1% %} }\hskip\algo@labelsep% } % \end{macrocode} % The macro \cs{algonumerate@postprocess} contains all the stuff to % be done after producing the label and putting it into % \cs{@tempboxa}. % \begin{macrocode} \newcommand{\algonumerate@postprocess}[1]{% \expandafter\count@\value{algonumerate}% %%{\tracingall\nonstopmode\showbox\@tempboxa}% % \end{macrocode} % We insert a \cs{medskip} if a (positively) numbered item follows an % automatic or explicit text item. % \begin{macrocode} \ifnum\last@algolabeltype<\@ne \ifnum\this@algolabeltype=\@ne \medskip \fi \fi % \end{macrocode} % Next, we execute case specific commands. (For text items we need to % set \cs{@currentlabel} here.) % \begin{macrocode} #1% \global\let\latest@item@currentlabel\@currentlabel \global\let\latest@item@bare@currentlabel\@bare@currentlabel \ifnum\count@=\m@ne \stepcounter{algonumerate}% \fi \global\@speciallabeltrue % \end{macrocode} % Execute |\AtNextItem| once and clear it. If in a numbered item % execute |\AtNextNumberedItem| once and clear it. % \changes{v2.13}{2010/05/29}{Introduced \cs{AtNextNumberedItem}, Michael % N{\"{u}}sken, Bonn} % \begin{macrocode} \the\AtNextItem \global\AtNextItem{}% \ifnum\this@algolabeltype=\@ne \the\AtNextNumberedItem \global\AtNextNumberedItem{}% \fi % \end{macrocode} % Reinitialize the list indentions. % \begin{macrocode} \reinit@list@label } % \end{macrocode} % The next four macros are similar to each other. For each item type % they produces the label and use the dirty trick to get counting and % paragraph formatting as desired. % \begin{macrocode} \newcommand{\algonumerate@labelexplicit}[1]{% For algorithm i/o %%% \typeout{item explicit [#1]}% \algonumerate@makelabelexplicit{#1}% % \end{macrocode} % % The following two lines are a dirty trick!!! This establishes % the hook. % \begin{macrocode} \global\let\algonumerate@global\global \gdef\global{\algonumerate@global\let\global\algonumerate@global \algonumerate@postprocess{% \protected@edef\@currentlabel{\csname p@\@listctr\endcsname {\makeoptalgocurrentlabel{#1}}}% \protected@edef\@bare@currentlabel{#1}% }% % \end{macrocode} % Execute the |\global| which was used to implement this hook. % \begin{macrocode} \global}% } \newcommand{\algonumerate@labelempty}[1]{% For algorithm i/o %%% \typeout{item empty [#1]}% \algonumerate@makelabelempty{}% \global\let\algonumerate@global\global \gdef\global{\algonumerate@global\let\global\algonumerate@global \algonumerate@postprocess{}% \global}% } \newcommand{\algonumerate@labelautomatic}[1]{% For algorithm steps %%% \typeout{item automatic [#1]}% \algonumerate@makelabelautomatic{#1}% \global\let\algonumerate@global\global \gdef\global{\algonumerate@global\let\global\algonumerate@global \algonumerate@postprocess{% \protected@edef\@currentlabel{\csname p@\@listctr\endcsname {\makeoptalgocurrentlabel{#1}}}% \protected@edef\@bare@currentlabel{#1}% }% \global}% } \newcommand{\algonumerate@labelnumber}[1]{% For algorithm steps %%% \typeout{item numbered [#1]}% \algonumerate@makelabelnumber{#1}% \global\let\algonumerate@global\global \gdef\global{\algonumerate@global\let\global\algonumerate@global \algonumerate@postprocess{}% \global}% } %%% \newdimen\algonumerate@maxindent % \end{macrocode} % We add a mechanism to find and store the length of the longest % macro. However, at present it is not used. % \begin{macrocode} \newdimen\@algolongestlabel \AtBeginDocument{\ifdim\algonumerate@maxindent=\z@ \algonumerate@maxindent.2\textwidth\fi} % \end{macrocode} % \begin{macro}{\algonumerateinit} % This macro prepares all things for the named items. Its argument % is just the comma separated list of the names. % \begin{macrocode} \def\algonumerateinit#1{% \setcounter{algonumerate}{-1}% \this@algolabeltype=\@M \@algolongestlabel\z@ \def\@algonumfield{}% \let\ccorg@or\or\let\or\relax \algonumerate@items\z@ \@for\@tempa:=#1\do{% \advance\algonumerate@items\@ne \@temptokena\expandafter{\@tempa}% \toks@\expandafter{\@algonumfield}% \edef\@algonumfield{\the\@temptokena\or\the\toks@}% \setbox\@tempboxa\hbox{\algonumerate@makelabelautomatic{\the\toks@}}% \ifdim\wd\@tempboxa>\@algolongestlabel\relax \@algolongestlabel\wd\@tempboxa\fi }% \let\or\ccorg@or \toks@\expandafter{\@algonumfield}% \edef\@algonumfield##1{\noexpand\ifcase-##1\noexpand\or \the\toks@\noexpand\fi}% % \typeout{Starting ...}% } % \end{macrocode} % \end{macro} % % \begin{environment}{algonumerate} % Finally, we define the environment \Lenv{algonumerate}. Apart % from initiation the list, it also activates the environments % \Lenv{block} (aka \Lenv{body}), \Lenv{range}, \Lenv{indention}, % and \Lenv{meta}. % \changes{v2.10}{2010/05/11}{Added the macro % \cs{skipremainingspecialitems} to allow the user to override the % standard label item list.} % \begin{macrocode} \newenvironment{algonumerate}{% \if@inlabel~\fi\par \list{\labelalgonumerate}{% \usecounter{algonumerate}% \let\makelabel\algonumerate@label \parsep\z@% \topsep\z@% \itemsep\z@% \parskip\z@% %\leftmargin\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 \fi \setcounter{block@cnt}\z@ \let\step\algo@step \let\block\algo@block \let\endblock\endalgo@block \let\range\algo@range \let\endrange\endalgo@range \let\indention\algo@indention \let\endindention\endalgo@indention \let\body\algo@block \let\endbody\endalgo@block \let\meta\algo@meta \let\endmeta\endalgo@meta \def\skipremainingspecialitems{\setcounter{algonumerate}{0}}% }{% \endlist\vskip\topskip} % \end{macrocode} % \end{environment} % % The \Lenv{indention} environment indents the steps inside it by an % amount of |\blockindent|. Its default value is |\parindent|. % \begin{macrocode} \newdimen\blockindent \blockindent\parindent % \end{macrocode} % \begin{macro}{\nextblock} % This is just a counter for internal use. |\nextblock| stores % locally a new value in |\currentblock|. See the sophisticated % things below on how to use this. % \begin{macrocode} \newcounter{block@cnt} \newcommand{\nextblock}{% \stepcounter{block@cnt}\edef\currentblock{\arabic{block@cnt}}% } % \end{macrocode} % \end{macro} % \begin{macro}{\refsetrange} % This sets the current reference to the range of argument 1 to % argument 2, each argument is interpreted as a \meta{subkey}. The % current reference will be empty if the range is known to be % trivial. % \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@}% \AtNextNumberedItem{\algolabel{bob\block@}}% }{% \algolabel{eob\block@}% \par \global\let\algo@block@currentlabel\@currentlabel \global\let\algo@block@bare@currentlabel\@bare@currentlabel \aftergroup\algo@endrange@aftergroup } % \end{macrocode} % \end{environment} % This command restores the latest reference to the latest % encountered item. % \begin{macrocode} \def\algo@endrange@aftergroup{% % \let\@currentlabel\algo@block@currentlabel % \let\@bare@currentlabel\algo@block@bare@currentlabel \let\@currentlabel\latest@item@currentlabel \let\@bare@currentlabel\latest@item@bare@currentlabel % [Restored \@bare@currentlabel] } % \end{macrocode} % \begin{environment}{indention} % The items inside this environment are indented by an amount of % |\blockindent|. % \changes{v2.12}{2010/05/21}{Debugged indention processing, Michael % N{\"{u}}sken, Bonn} % \begin{macrocode} \newdimen\indention@reinit@list@last \newenvironment{algo@indention}{% \par \indention@reinit@list@last\reinit@list@last \advance\leftmargin\blockindent \advance\labelsep\blockindent \advance\@totalleftmargin\blockindent \advance\linewidth-\blockindent \def\algo@indention@undo{% \reinit@list{\indention@reinit@list@last}% \advance\leftmargin-\blockindent \advance\labelsep-\blockindent \advance\@totalleftmargin-\blockindent \advance\linewidth\blockindent } \list@parshape }{% \par \algo@indention@undo % \advance\leftmargin-\blockindent % \advance\labelsep-\blockindent % \advance\@totalleftmargin-\blockindent % \advance\linewidth\blockindent \list@parshape \aftergroup\list@parshape \global\let\algo@block@currentlabel\@currentlabel \global\let\algo@block@bare@currentlabel\@bare@currentlabel \aftergroup\algo@endrange@aftergroup } % \end{macrocode} % \end{environment} % \begin{environment}{block} % This combines the environment \Lenv{indention} and \Lenv{range}. % \begin{macrocode} \newif\ifindented@block \newenvironment{algo@block}{% \algo@indention \algo@range}{% \endalgo@range \endalgo@indention } % \end{macrocode} % \end{environment} % \begin{environment}{meta} % This environment allows to insert comment-like things in % algorithms. It is indented by an amount of |meta@indent| which % defaults to |0pt|. % \begin{macrocode} \newdimen\meta@indent \newenvironment{algo@meta}{% \@newlistfalse \vskip\topskip \par %%\meta@indent\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} \ifx\c@namedth@@r@m\@undefined\else \let\c@named@lg@r@thm\c@namedth@@r@m \let\thenamed@lg@r@thm\thenamedth@@r@m \fi % \end{macrocode} % % \begin{environment}{namedalgorithm} % This combines all necessary to typeset an algorithm. % The environment takes up to four arguments. The first argument % is the \meta{heading}, in the standard |Algorithm|. The second % argument is optional and gives a comma separated list of titles % of required items. It defaults to |Input,Output|. The third % argument is the \meta{master-key} which is used to produce a % reference to the algorithm and in |\algolabel| to prefix % references inside the algorithm. The forth argument is again % optional and specifies a title. % \changes{v2.10}{2010/05/11}{Added extra optional argument to allow % specification of a longest label. But that is of no use at % present since this information is never used.} % \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}[1][\babelInput,\protect\babelOutput]{% \algonumerateinit{#1}% \n@m@d@lgorithmgetlongestlabel} \newcommand{\n@m@d@lgorithmgetlongestlabel}[1][]{% \def\@tempa{#1}% \ifx\@tempa\@empty\else \setbox\@tempboxa\hbox{\algonumerate@makelabel{#1}}% \ifdim\wd\@tempboxa>\@algolongestlabel\relax \@algolongestlabel\wd\@tempboxa\fi \fi \n@m@d@lgorithmgetmasterkey } \newcommand{\n@m@d@lgorithmgetmasterkey}[1]{% \algorithmmasterkey{#1}% \edef\@tempa{\the\algorithmmasterkey}\ifx\@tempa\@empty \PackageError{ccalgo}{Empty key for algorithm like environment}{}\fi% \n@m@d@lgorithm } \newcommand{\n@m@d@lgorithm}[1][]{% \def\@tempa{#1}% \ifx\@tempa\@empty\csname\algo@theorem\endcsname \else\csname\algo@theorem\endcsname[#1]\fi% \label{\the\algorithmmasterkey}% \algo@keywords \defprefix{algonumerate}{% \Iflabelchanged{\algo@theorem}{\uselabel{\algo@theorem} % \ifnum\c@algonumerate>\z@ \babelstep~\fi}}% % not good, since blocks need shorter labels! % \defprefix{algonumerate}##1{% % Step~##1\Iflabelchanged{\algo@theorem} % { of \uselabel{\algo@theorem}}}% \algonumerate }% % \end{macrocode} % \end{environment} % % \begin{macro}{\algolabel} % This macro allows to define references locally, it uses the % \meta{masterkey} which is an argument to the % \Lenv{namedalgorithm} environment. % \begin{macrocode} \def\algolabel#1{\label{\the\algorithmmasterkey-#1}}% % \end{macrocode} % \end{macro} % % \begin{macro}{\stepref} % This macro allows to reference the labels defined by |\algolabel| % in a nice way. Its two arguments are the \meta{masterkey} and % the \meta{subkey}. % \begin{macrocode} \newcommand{\stepref}[2]{\babelStep~\short\ref{#1-#2} in \whole\ref{#1}} % \end{macrocode} % \end{macro} % % \begin{macro}{\newalgorithm} % As |\newtheorem| allows to define new theorem like environments, % this macro allows to define new algorithm like environments in % fixing the first two arguments of the environment % \Lenv{namedalgorithm}. At the same time a starred version is % defined. % \changes{v2.01}{2000/11/07}{Removed a bug from \cs{n@walgorithm}.} % \begin{macrocode} \newcommand{\newalgorithm}[2]{% \def\newalgo@name{#1}% \def\newalgo@title{#2}% \n@walgorithm} \newcommand{\n@walgorithm}[1][\babelInput,\protect\babelOutput]{% \protected@edef\@tempa{% \noexpand\newenvironment{\newalgo@name}% {\noexpand\namedalgorithm{\newalgo@title}[\noexpand#1]}% {\noexpand\endnamedalgorithm}% \noexpand\newenvironment{\newalgo@name*}% {\noexpand\csname namedalgorithm*\endcsname {\newalgo@title}[\noexpand#1]}% {\noexpand\csname endnamedalgorithm*\endcsname}% }\@tempa } % \end{macrocode} % \end{macro} % % \begin{environment}{algorithm} % This is the standard case algorithm like environment. Its title % is |\algorithmname| and its required (named) items are |Input| % and |Output|. % \begin{macrocode} \babel\def\algorithmname{Algorithm}[% german=Algorithmus,french=Algorithme] \newalgorithm{algorithm}{\protect\algorithmname} % \end{macrocode} % \changes{v2.01}{2000/09/23}{Added \cs{CALL}.} % % Keywords in algorithms are typeset by the command % |\keyword{|\meta{keyword}|}|. Some keywords are predefined. All % these things are only accessible inside algorithm like % environments. % \changes{v2.01}{2004/01/26}{Babelized algo@keywords.} % \changes{v2.10}{2010/05/11}{Use \cs{selectlanguage} only if % \cs{language} is not \texttt{nohyphenation}. This avoids strange % errors.} % \begin{macrocode} \def\algo@keywords{% \def\keyword##1{\textsf{##1} \ignorespaces}% \babel\def\FOR{\keyword{For}}[german=\keyword{F{\"{u}}r}]% \babel\def\DO{\keyword{do}}[german=\keyword{erledige}]% \babel\def\endFOR{}[]% \babel\def\WHILE{\keyword{While}}[german=\keyword{Solange}]% \babel\def\endWHILE{}[]% \babel\def\REPEAT{\keyword{Repeat}}[german=\keyword{Wiederhole}]% \babel\def\UNTIL{\keyword{Until}}[german=\keyword{Bis}]% \babel\def\IF{\keyword{If}}[german=\keyword{Falls}]% \babel\def\THEN{\keyword{then}}[german=\keyword{dann}]% \babel\def\ELIF{\keyword{Else if}}[german=\keyword{Sonst wenn}]% \babel\def\ELSE{\keyword{Else}}[german=\keyword{Sonst}]% \babel\def\endIF{}[]% \babel\def\CALL{\keyword{Call}}[german=\keyword{Rufe}]% \babel\def\RETURN{\keyword{Return}}[german=\keyword{Antworte}]% \def\@tempa{nohyphenation}\ifx\languagename\@tempa\else% \expandafter\selectlanguage\expandafter{\languagename}\fi% \def\COMMENT##1{$\{$ ##1 $\}$}% } % \end{macrocode} % \end{environment} % % \subsection{Some sophisticated environments for algorithms} % % \begin{macro}{\optitem} % This is a helper for the following sophisticated environments. % It issues an |\item| if necessary, and omits it otherwise. % \begin{macrocode} \newcommand{\optitem}[1]{% \cc@ifempty{#1}{\if@inlabel\par\else\item\fi}{\item[#1]}% } % \end{macrocode} % \end{macro} % \begin{macro}{\algoprettify} % This is a helper for the following sophisticated environments. % It formats a 3-term command like \cs{IF} \meta{condition} % \cs{THEN} in a line or a multiline block depending on what is % nicer. % \begin{macrocode} % \changes{v2.01}{2001/01/24}{Added \cs{algoprettify}. Michael % N{\"{u}}sken, Paderborn} \newcommand{\algoprettify}[3]{% \setbox2\hbox{#1}% \setbox4\hbox{#2}% \setbox6\hbox{#3}% \setbox0\hbox{\unhcopy2\unhcopy4{ }\unhcopy6}% \ifdim\wd0<\linewidth \unhbox0 \else \dimen0=\linewidth \advance\dimen0 by -\wd2 \unhbox2\parbox[t]{\dimen0}{\unhbox4\strut}\par\unhbox6 \fi } % \end{macrocode} % \end{macro} % % \begin{environment}{ifblock} % This produces |\IF| block. % \begin{macrocode} \newenvironment{ifblock}[2][] % \end{macrocode} % What do we do at the |\begin|. % \begin{macrocode} {% % \end{macrocode} % First, add |\item| if there is no |\item| immediately before the % \Lenv{ifblock}. % \begin{macrocode} \optitem{#1}% % \end{macrocode} % Then generate a new |\currentlabel| which is valid until the end % of the \Lenv{ifblock}. % \begin{macrocode} \nextblock % \end{macrocode} % Set a reference on the actual item. % \begin{macrocode} \algolabel{if\currentblock}% % \end{macrocode} % Insert the text `|\IF|~\meta{condition}~|\THEN|'. % |\algoprettify| takes care of a long \meta{condition}. % \changes{v2.01}{2001/01/24}{Now \protect\Lenv{ifblock} and so on nicer for % long conditions. Michael N{\"{u}}sken, Paderborn} % \begin{macrocode} \algoprettify{\IF}{#2}{\THEN} % \end{macrocode} % Begin the indention. % \begin{macrocode} \indention % \end{macrocode} % Define the value for the possibly following |\algolabel| or % |\label|. % \begin{macrocode} \refsetrange{if\currentblock}{endif\currentblock}% } % \end{macrocode} % What do we do at the |\end|. % \begin{macrocode} {% % \end{macrocode} % Set a reference to the last item in the environment. % \begin{macrocode} \algolabel{endif\currentblock}% % \end{macrocode} % End the indention. % \begin{macrocode} \endindention} % \end{macrocode} % \end{environment} % % \begin{environment}{elifblock} % This produces an |\ELIF| block in the same manner as the |\IF| block. % \begin{macrocode} \newenvironment{elifblock}[2][]{% \optitem{#1}% \nextblock \algoprettify{\ELIF}{#2}{\THEN} \algolabel{elif\currentblock}% \indention \refsetrange{elif\currentblock}{endelif\currentblock}% }{% \algolabel{endelif\currentblock}% \endindention} % \end{macrocode} % \end{environment} % % \begin{environment}{elseblock} % The |\ELSE| block differs from the last two only in the fact that % there is no condition. % \begin{macrocode} \newenvironment{elseblock}[1][]{% \optitem{#1}% \nextblock \ELSE% \algolabel{else\currentblock}% \indention \refsetrange{else\currentblock}{endelse\currentblock}% }{% \algolabel{endelse\currentblock}% \endindention} % \end{macrocode} % \end{environment} % % \begin{environment}{forblock} % A |\FOR| block typesets a loop `for \meta{control} do \dots'. % Other than the previous environments we use \Lenv{block} rather % than only \Lenv{indention} since the range of steps in the % indented part is printed after the `do' (unless it is only one step). % \begin{macrocode} \newenvironment{forblock}[2][]{% \optitem{#1}% \nextblock \algoprettify{\FOR}{#2}{% \DO \short\ref{\the\algorithmmasterkey-body\currentblock}}% \algolabel{for\currentblock}% \block\algolabel{body\currentblock}% \refsetrange{for\currentblock}{endfor\currentblock}% }{% \algolabel{endfor\currentblock}% \endblock} % \end{macrocode} % \end{environment} % % \begin{environment}{whileblock} % The |\WHILE| block is similar to the |\FOR| block: `while % \meta{condition} do \dots'. % \begin{macrocode} \newenvironment{whileblock}[2][]{% \optitem{#1}% \nextblock \algoprettify{\WHILE}{#2}{% \DO \short\ref{\the\algorithmmasterkey-body\currentblock}}% \algolabel{while\currentblock}% \block \algolabel{body\currentblock}% \refsetrange{while\currentblock}{endwhile\currentblock}% }{% \algolabel{endwhile\currentblock}% \endblock} % \end{macrocode} % \end{environment} % % \begin{environment}{untilblock} % The |\UNTIL| block is similar to the |\FOR| block: `until % \meta{condition} do \dots'. % \begin{macrocode} \newenvironment{untilblock}[2][]{% \optitem{#1}% \nextblock \algoprettify{\UNTIL}{#2}{% \DO \short\ref{\the\algorithmmasterkey-body\currentblock}}% \algolabel{until\currentblock}% \block \algolabel{body\currentblock}% \refsetrange{until\currentblock}{enduntil\currentblock}% }{% \algolabel{enduntil\currentblock}% \endblock} % \end{macrocode} % \end{environment} % % \begin{environment}{blockuntil} % The reverse |\UNTIL| block is similar to the |\UNTIL| block but % the condition is checked at the end rather than at the beginning % of the environment. % \begin{macrocode} \newenvironment{blockuntil}[2][]{% \optitem{#1}% \nextblock \def\repeat@cond{#2}% \REPEAT \short\ref{\the\algorithmmasterkey-body\currentblock}% \algolabel{repeat\currentblock}% \block \algolabel{body\currentblock}% \refsetrange{repeat\currentblock}{endrepeat\currentblock}% }{% \endblock \item \algolabel{endrepeat\currentblock}% \algoprettify{\UNTIL}{\repeat@cond}{}} % \end{macrocode} % \end{environment} % % \begin{environment}{blockwhile} % The reverse |\WHILE| block is similar to the |\WHILE| block but % the condition is checked at the end rather than at the beginning % of the environment. % \begin{macrocode} \newenvironment{blockwhile}[2][]{% \optitem{#1}% \nextblock \def\repeat@cond{#2}% \REPEAT \short\ref{\the\algorithmmasterkey-body\currentblock}% \algolabel{repeat\currentblock}% \block \algolabel{body\currentblock}% \refsetrange{repeat\currentblock}{endrepeat\currentblock}% }{% \endblock \item \algolabel{endrepeat\currentblock}% \algoprettify{\WHILE}{\repeat@cond}{}} % \end{macrocode} % \end{environment} % % So far for algorithms. % \begin{macrocode} % % \end{macrocode} % % \GetFileInfo{ccqed.sty} % \CodelinePrefix{Q} % % \section{Source of \filename (\fileprefix)} % % This file (\file{\filename}) has version number \fileversion, last % revised \filedate. % \begin{macrocode} %<*ccqed> \ProvidesPackage{ccqed}[2000/02/29 v2.05 right-justified end-of-proof mark, based on Paul Taylor's QED.sty of 24 June 1995] % \end{macrocode} % We reproduce some of Paul Taylor's comments here. % % \medskip\hrule\medskip % % \emph{Warning}: If you use this with Frank Mittlebach's % \Lpackage{theorem}\texttt{.sty} you \emph{must} load theorem first, % then QED, then do the |\newtheorem| commands. % \begin{center} % \begin{tabular}{ll} % Authoritative version: & % /pub/tex/contrib/pt/proofs/QED.sty\\ % by anonymous FTP from:& % ftp.dcs.qmw.ac.uk\\ % also CTAN: & % macros/generic/proofs/taylor/QED.sty\\ % author/maintained by: & % Dr Paul Taylor \email{pt@dcs.qmw.ac.uk}\\ % \end{tabular} % \end{center} % % % % \subsection{User Interface and Examples (see also Options below)} % % \emph{Warning}: |\qed| which doesn't follow |\Proof| will not print % the square. % % Unfortunately some environments, such as picture, do not allow this % at all. See the section "centering environments" below for the % mechanism for passing |\qed| to such an environment for special % processing. % % In fact |\qed| will only work in those environments which provide % access to the right hand side of the page. In other words, wherever % you think `|\hfill\square|' ought to work then |\qed| will; of course % it is just because that naive method doesn't work that this macro % file is needed at all. The macro was designed to solve the problem % in the case of `unrestricted horizontal mode' (ie at the end of a % paragraph); it also works in |$$| displays by pretending to be an % equation number. In most other cases it basically does % `|\hfill\square|' or `|\hfill$\square$|' and hopes for the best. % % If you have to put |\qed| outside the environment, it may be % appropriate to put |\vskip| |-\baselineskip| before it, unless of % course this would over-print. There is, however, still a danger % that TeX will break the page here. This seems to be unavoidable % if the environment ends with a |\penalty|. % % The eqnarray example above does not in fact work: if you try it % you'll get % \begin{flushleft} % |! Paragraph ended before \llap was complete| % \end{flushleft} % with \LaTeX{} in a mess. This is a very common place where you % might want to put the end of proof mark, and I also consider that % the fourth column should be available for `reasons' for equational % steps. % The following substitute for |\eqnarray| allows this, whilst being % compatible with automatic numbering. I have proposed it to Rainer % Sch\"{o}pf for inclusion in LaTeX. If you want to use it, please copy % it to another file rather than uncommenting it here. Don't forget to % use |\makeatletter| or put it in a documentstyle (\texttt{.sty}) file. % % \emph{Michael's warning}: This might not work with \LaTeXe{} any more. % \begin{macrocode} % \def\eqnarray{% % \stepcounter{equation}% % \let\@currentlabel\theequation % \global\@eqnswtrue\m@th % \global\@eqcnt\z@ % \tabskip\@centering % \let\\\@eqncr % $$\halign to\displaywidth\bgroup % \@eqnsel\hskip\@centering$\displaystyle\tabskip\z@{##}$% % &\global\@eqcnt\@ne\hskip2\arraycolsep\hfil${##}$\hfil % &\global\@eqcnt\tw@\hskip2\arraycolsep % $\displaystyle\tabskip\z@{##}$\hfil\tabskip\@centering % &\global\@eqcnt\thr@@\hbox to\z@\bgroup % \hss##%*** instead of "\llap{##}" % \tabskip\z@\cr}% % \def\@@eqncr{\let\@tempa\relax % \ifcase\@eqcnt % \def\@tempa{& & &}\or % \def\@tempa{& &}\or % \def\@tempa{&}\else % \@eqnswfalse%*** instead of "\else\def\@tempa{&}" % \fi\@tempa % \if@eqnsw\@eqnnum\stepcounter{equation}\fi % \egroup%*** added, to match \bgroup in fourth cell of preamble % \global\@eqnswtrue\global\@eqcnt\z@\cr} % \end{macrocode} % % Why can't we do all of this with |\endProof|? Because by that stage % the damage has been done: the environments, paragraphs or displays % have already been closed and their |\hbox|'es added to the current % vertical list, and cannot be removed for alteration if this is the % current page. % % Even if you don't need to put |\qed| inside an inner environment to % avoid a blank line, it's still a good idea to do so, because % otherwise it's possible that intervening end-of-environment material % may allow TeX to put the mark on the next page. % % If you don't use \Lpackage{theorem}\texttt{.sty}, this file instead % provides options to use commands to begin theorems, instead of % enclosing them in environments, and to suppress numbering and % italicisation. A rudimentary version of |\newtheorem| for % plain\TeX{} is also implemented (always using commands rather than % environments). % % \subsection{Options} % % These are the user commands. % % \begin{macro}{\qed} % Suppressible printing of |\qedsymbol|. % \begin{macrocode} \def\qed{\protect\@qed{$\qedsymbol$}} % \end{macrocode} % \end{macro} % % |\pushright| takes an argument, which it always prints it is % (re)defined by |\WillHandleQED| and |\UnHandleQED| below (12.4.94) % % These are the user-settable parameters. % % \begin{macro}{\qedsymbol} % The actual (maths) symbol used by |\qed|. % \begin{macrocode} \def\qedsymbol{\square} % \end{macrocode} % \emph{Please note}: this is in the \AMS{} symbols font. % Use one of these instead if you prefer: % |\def\qedsymbol{\blacksquare}| or % |\def\qedsymbol{\hbox{\rm Q.E.D.}}|. % % The Journal of Symbolc Logic likes |\def\qedsymbol{\dashv}|. % \end{macro} % % \begin{macro}{\AutoQEDtrue} % The command |\AutoQEDtrue| causes a |\qed| in |\end{theorem}|, so % you do |\begin{theorem}| \dots{} |\begin{proof}| \dots{} % |\end{proof}| |\end{theorem}| but if you omit the proof, the % statement gets a little square at the end. % \begin{macrocode} \newif\ifAutoQED\AutoQEDfalse % \end{macrocode} % \end{macro} % % \subsection{Pushright} % % \begin{macro}{\pushright} % If you already have a macro called |\qed|, |\endproof| or % |\pushright| which is laid out in a similar way to the following % two definitions (but with |\hbox@pushright| incorporated) then it % is almost certainly my code, which has been copied anonymously via % numerous people since my Cambridge PhD thesis in August 1986. % Belated acknowledgements to Chris Thompson of the Cambridge % University Computing Service for his help with my early attempts at % TeX, in particular this problem. % % The complexity of the macro necessary to get a little box on the % right-hand-side at the end of a proof is amazing. It really does % have to be this long! Otherwise you're liable to get it at the % beginning of the next line, or even on the next page. % % % \begin{macrocode} \def\parag@pushright#1{{% % \end{macrocode} % Set up. % So |\par| doesn't push |\square| to left. % \begin{macrocode} \parfillskip\z@ % \end{macrocode} % So we don't break the page before |\square|. % \begin{macrocode} \widowpenalty\@M \displaywidowpenalty\@M % \end{macrocode} % See TeXbook exercise 14.32. % \begin{macrocode} \finalhyphendemerits\z@ % \end{macrocode} % \paragraph{Horizontal.} % |\leavevmode| is not needed since we now only use it in hmode. % \begin{macrocode} % \leavevmode % \end{macrocode} % This used to be incorporated % \begin{macrocode} \hbox@pushright % \end{macrocode} % The end-of-proof mark (or whatever). % \begin{macrocode} #1% % \end{macrocode} % \paragraph{Vertical.} % Build paragraph with the above parameters. % \begin{macrocode} \par}}% % \end{macrocode} % % Horizontal. % \begin{macrocode} \def\hbox@pushright{% % \end{macrocode} % Remove previous space or glue. % \begin{macrocode} \unskip % \end{macrocode} % Don't break lines. % \begin{macrocode} \nobreak % \end{macrocode} % Ragged right if we spill over. % \begin{macrocode} \hfil % \end{macrocode} % Discouragement to do so. % \begin{macrocode} \penalty50 % \end{macrocode} % Ensure some space. % \begin{macrocode} \hskip.2em % \end{macrocode} % Anchor the following |\hfill|. % \begin{macrocode} \null % \end{macrocode} % Push to right. % \begin{macrocode} \hfill }% % \end{macrocode} % % Ideally |\endProof| should do all this. We should be able to add % the symbol to the last line after the paragraph, display or % whatever other structure has been completed and we've returned to % vertical mode. This isn't possible on the current page (outer % vmode) because |\lastbox| doesn't work there. % % But |\ifinner| is true inside a |\vbox|, |\vadjust| or |\insert| % (LaTeX |\parbox|, \Lenv{minipage}, \Lenv{figure} or % \Lenv{table}), and in these circumstances we can use |\lastbox|. % We would have to strip \& restore glue \& penalties (|\insert|, % |\mark| and |\write| are obstacles to this) to get access to the % last line (box), which may still not have the correct % baseline. We could check its natural width against the page % width, but if we re-set it, centering and (right) justification % might be disturbed. Is this worth the trouble? % % \begin{macrocode} \def\vbox@pushright#1{\expandafter\message % (2 Jan 1994) {QED.sty could be improved in this case (line \the\inputlineno): please ask}% \page@pushright{#1}}% % \end{macrocode} % % % Using this method a \Lenv{proof} environment could be implemented % by collecting the entire proof in its own |\vbox|, modifying that % and |\unvbox|'ing it to the current page. This approach may lead to % the following problems: % \begin{enumerate} % \item footnotes, floats, marginpars, labels and index items may be % lost; % \item overflow of TeX's main memory, especially if |\end{proof}| is % missing; % \item I don't know how page-breaking would be handled. % \end{enumerate} % % Switch to enable/suppress |\qedsymbol|; since suppression may be % done within a nested scope it must be global, so we do our own % save/restore in a symbol which is local to a proof environment. % \begin{macrocode} \newif\if@qed\@qedfalse \def\save@set@qed{\let\saved@ifqed\if@qed\global\@qedtrue}% \def\restore@qed{\global\let\if@qed\saved@ifqed} % \end{macrocode} % % \begin{macrocode} \def\@qed#1{\check@pt@fm@thm % \end{macrocode} % Have we already done |\qed|? % \begin{macrocode} \if@qed % \end{macrocode} % No: do it now, but not again. % \begin{macrocode} \global\@qedfalse\pushright{#1}% % \end{macrocode} % Yes: just end paragraph, if any. % \begin{macrocode} \else\ifhmode\ifinner\else\par\fi\fi% \fi} % \end{macrocode} % % |\pushright{|\meta{text}|}| always prints its argument, on the % far right, in text mode. % \begin{macrocode} \def\@pushright#1{% \ifvmode % \end{macrocode} % Vertical mode (see comments above). % \begin{macrocode} \ifinner\vbox@pushright{#1}% \else \page@pushright{#1}% \fi % \end{macrocode} % Maths (force a text argument). % \begin{macrocode} \else\ifmmode\maths@pushright{\hbox{#1}}% % \end{macrocode} % Inside an |\hbox|. % \begin{macrocode} \else\ifinner\hbox@pushright{#1}% % \end{macrocode} % In a paragraph. % \begin{macrocode} \else\parag@pushright{#1}% \fi \fi \fi } % (22 Feb 1993) removed extra {} which would destroy our \] below % \end{macrocode} % % In the |\hbox| and maths cases we are really at the mercy of the % environment. Assuming that we have |$\qed$| simply embedded in a % paragraph, the horizontal processing by |\hbox@pushright| will at % least make sure that the square isn't at the beginning of the line, % but we can't stop it being on the next page. However it is more % likely that the reason why we're in maths mode is that we're inside % an eqnarray or similar, in which case |\hfill| will do its best to % put the square on the right of the available space. (See |\vadjust| % below.) % \begin{macrocode} \def\maths@pushright#1{% \ifinner \hbox@pushright{#1}% \else % \end{macrocode} % Use \TeX's right equation number feature (|\eqno|) within |$$|. % \begin{macrocode} \eqno#1% % \end{macrocode} % Suppress LaTeX's error checking (HACK!). % \begin{macrocode} \def\]{$$\ignorespaces}% \fi }% % (22 Feb 1993) removed extra {} which would destroy our \] above % \end{macrocode} % % \paragraph{Outer vertical mode (the current page)} % There's very little we can do in these circumstances! % Penalties still allow the page to be broken. % If the user has put negative glue in, leave it alone. (15 Feb 1994) % \begin{macrocode} \def\page@pushright#1{% 18 Jan 1994 %\unpenalty % ineffective % \end{macrocode} % Remove |\parskip|, but only (15 Feb 1994) if it's positive. % \begin{macrocode} \skip@\lastskip \ifdim\skip@>\z@ \unskip \else\skip@\z@\relax \fi %\unpenalty % TeX won't let me do this \dimen@\baselineskip % \end{macrocode} % Save |\prevdepth| to make a strut % \begin{macrocode} \advance\dimen@-\prevdepth % \end{macrocode} % Don't break the page here. % \begin{macrocode} \nobreak \nointerlineskip \hbox to\hsize{% \setbox\z@\null % \end{macrocode} % Simulate |\baselineskip|. % \begin{macrocode} \ifdim\dimen@>\z@\ht\z@\dimen@\fi \box\z@ \hfill #1}% % \end{macrocode} % Replace old |\parskip|. % \begin{macrocode} \vskip\skip@ }% % \end{macrocode} % % An idea that didn't work: see TeXbook p188. (16 Feb 1993) Use % |\predisplaysize| to find out the width of the previous box, in the % case where it has already been completed. But this can only be % used inside displays (|$$|), and a display in vertical mode begins % a paragraph first, so we end up with % |\predisplaysize=\parindent+2em| whatever happened in the previous % paragraph. % % Another idea: it may be worth trying |\vadjust|, if only to insert % |\nobreak|. The problem with this is that if we are too deeply % nested in horizontal or maths lists, the adjustment may not be able % to find its way out to the enclosing vertical list. In the case of % array-like environments, it will appear (assuming it manages to get % out) after the current row of the array. % \end{macro} % % % \subsection{Adding to theorem environments} % % We have to add to the theorem environments the commands to enable % |\qed|. This is done by re-defining |\@thm#1#2|. Note that % Mittelbach's \Lpackage{theorem}\texttt{.sty} re-defines |\@thm| % and |\@endtheorem|, so that must be loaded before us, otherwise % our changes will get over-written and |\qed| will never be % enabled. % % Save original. % \begin{macrocode} \let\nonqed@thm\@thm \let\nonqed@endthm\@endtheorem \def\@thm{\save@set@qed\nonqed@thm} \def\@endtheorem{\ifAutoQED\qed\fi\restore@qed\nonqed@endthm} % \end{macrocode} % % % \subsection{`Centering' Environments} % % Those which don't give their contents access to the right hand side % of the page, such as center, picture, ... (12 April 1994) % % Each individual environment (both the standard ones and those defined % by the user) needs to co-operate in order to make |\qed| and % |\pushright| work. It is not the business of this package to rewrite % LaTeX in this way, but the following mechanism may be inserted in to % other environments. % \begin{itemize} % \item put |\WillHandleQED| in the |\begin| part of the environment % definition; then if a |\qed| occurs in the body of the environment % it is stored in |\QEDbox| until... % \item |\HandleQED| anywhere in the |\end| part of the environment % definition (even inside dollars, braces or another environment) % prints it. % \end{itemize} % For example: % \begin{verbatim} % \newenvironment{qedpicture}% % {\begin{picture}\WillHandleQED}% % {\put(0,0){\HandleQED}\end{picture}} % \end{verbatim} % To make this compatible with \emph{not} loading % \Lpackage{QED}\texttt{.sty}, add the following to macro files which % use |\WillHandleQED| and |\HandleQED|: % \begin{verbatim} % \ifx\WillHandleQED\undefined % \let\WillHandleQED\relax % \let\HandleQED\relax % \let\UnHandleQED\relax % if you use it % \let\QEDbox\voidb@x % must have \makeatletter here! % \fi % \end{verbatim} % |\UnHandleQED| restores normal processing; this may be useful for the % minipage environment, which has its own notion of `right hand side' % of the page. The width of the saved |\qed| is available for testing % as |\wd\QEDbox|. % % The box in which to save |\qed| for special handling. % \begin{macrocode} \newbox\qed@box % \end{macrocode} % % \begin{macrocode} \def\WillHandleQED{\relax \ifx\HandleQED\nohandle@qed % \end{macrocode} % No enclosing environment has declared |\WillHandleQED|. % % |\qed| will be saved. % \begin{macrocode} \def\pushright{\global\setbox\qed@box\hbox}% % \end{macrocode} % Point at the right box. % \begin{macrocode} \let\QEDbox\qed@box % \end{macrocode} % Print it. % \begin{macrocode} \def\HandleQED{\unhbox\QEDbox}% % \end{macrocode} % Check that this really gets done. % \begin{macrocode} \aftergroup\check@handle@qed \else % \end{macrocode} % An enclosing environment already wants to catch |\qed| |\HandleQED| % doesn't print anything - let the saved |\qed| pass through % by pointing at an empty box. % \begin{macrocode} \let\QEDbox\voidb@x \fi } % \end{macrocode} % % \begin{macrocode} \def\nohandle@qed{% \errhelp{One of them is missing: see QED.sty.}% \errmessage{This environment uses \string\WillHandleQED\space and \string\HandleQED\space incorrectly}} % \end{macrocode} % % \begin{macrocode} \def\check@handle@qed{\relax \ifvoid\qed@box\else\expandafter\nohandle@qed\fi} % \end{macrocode} % % \begin{macrocode} \def\UnHandleQED{% \let\HandleQED\nohandle@qed \let\QEDbox\voidb@x \def\pushright{\protect\@pushright}}% % \end{macrocode} % % \begin{macrocode} \UnHandleQED % \end{macrocode} % % % If \Lpackage{theorem}\texttt{.sty} hasn't been loaded, arrange to % check it again in |\@qed|. And check (then) whether you've actually % defined |\square|. % Changed 2 June 1993: don't define it now, as that would confuse % \Lpackage{amssymb}\texttt{.sty}. % \begin{macrocode} \ifx\theorem@style\undefined \def\check@pt@fm@thm{\relax \ifx\square\undefined \gdef\square{\bigcirc \errhelp={Anonymous ftp e-math.ams.com /ams/amsfonts}% \errmessage{\string\square\space is an AMS symbol}% \global\let\square\bigcirc}% \fi \ifx\theorem@style\undefined \global\let\check@pt@fm@thm\relax \else \errhelp={The macros \@thm and \@endtheorem need to be re-defined.}% \errmessage{QED.sty must be loaded AFTER theorem.sty but before using \string\newtheorem}% \fi \global\let\check@pt@fm@thm\relax }% \else \def\check@pt@fm@thm{% \ifx\square\undefined \def\square{\bigcirc \errhelp={Anonymous ftp e-math.ams.com /ams/amsfonts}% \errmessage{\string\square\space is an AMS symbol}% \global\let\square\bigcirc}% \fi \global\let\check@pt@fm@thm\relax }% \fi % \end{macrocode} % % \begin{macrocode} \DeclareOption{auto-QED}{\AutoQEDtrue}% \DeclareOption{explicit-QED}{\AutoQEDfalse}% \DeclareOption{black-square}{\def\qedsymbol{\blacksquare}}% \DeclareOption{open-square}{\def\qedsymbol{\square}}% \ProcessOptions\relax % \end{macrocode} % % \subsection{Bugs} % % |\item\qed\end{letterlist}| puts the square above the item label. % % |! You can't use `\unskip' in vertical mode.| % from |\qed| in a paragraph on its own. % % \medskip\hrule\medskip % % \subsection{Michael's fixes \dots} % % While \Lpackage{QED}\texttt{.sty} does a very fine job it leaves % some things apart. Of course, it was not aware of much of the % newer \AMS{} math environments. In the following I tried to % redefine |\qed| and |\pushright| in order to work in all standard % circumstances reasonably well. % % \iffalse meta-comment % The following was a trial to fix |\pushright| instead of |\qed|. % % Unfortunately, |\pushright| does not always work well, especially % in equation-like environment as provided by the \AMS{} package % \Lpackage{amsmath} there are several new complications. % We make |\pushright| and |\qed| work in all these environments. % \begin{macrocode} % \newif\if@resettagsleft@%\fi % \let\standardpushright\pushright % \def\rescuepushright#1{\qquad\hbox{#1}} % \def\eqnopushright#1{\eqno\hbox{#1}} % \let\ccorg@eqnnum\@eqnnum % \let\ccorg@nonumber\nonumber % \def\eqnarraypushright#1{% % \global\@eqnswtrue % \global\let\nonumber\relax % % equation counter will be incremented at \end{eqnarray*} by \@@eqncr! % \addtocounter{equation}\m@ne % \gdef\@eqnnum{\llap{#1}% % \global\let\nonumber\ccorg@nonumber % \global\let\@eqnnum\ccorg@eqnnum}} % \def\tagpushright#1{% % \typeout{tagpushright #1} % \tag*{\iftagsleft@%\iftrue % \hskip\displaywidth\llap{#1}\hskip-\displaywidth% % \else\hbox{#1}\fi}} % \def\simpletagpushright#1{\iftagsleft@%\iftrue % \global\@resettagsleft@true\fi % \global\tagsleft@false % \tag*{\hbox{#1}}} % \def\aftersplitpushright#1{% % \def\@endsplit{% % \global\let\endsplit\ccorg@endsplit % \endsplit % \pushright{#1}% % }} % \let\ccorg@endsplit\endsplit % % % \newif\if@pushrightfailed%\fi % \def\nopushright#1{\global\@pushrightfailedtrue} % \def\@ifcurrenv#1#2{\def\@tempa{#1}\ifx\@tempa\@currenvir\relax % \let\next#2\fi} % \renewenvironment{displaymath}{$$}{$$\@ignoretrue} % \renewcommand{\[}{\begin{displaymath}} % \renewcommand{\]}{\end{displaymath}} % \if@ams % \def\pushright{% % \global\@pushrightfailedfalse % \if@resettagsleft@\global\tagsleft@true\global\@resettagsleft@false\fi % \let\next\standardpushright % \@ifcurrenv{displaymath}\eqnopushright % \@ifcurrenv{equation}\nopushright % \@ifcurrenv{eqnarray}\nopushright % \@ifcurrenv{eqnarray*}\eqnarraypushright % \@ifcurrenv{equation*}\tagpushright % \@ifcurrenv{split}\aftersplitpushright % \@ifcurrenv{multline}\nopushright % \@ifcurrenv{multline*}\simpletagpushright % \@ifcurrenv{gather}\nopushright % \@ifcurrenv{gather*}\tagpushright % \@ifcurrenv{align}\nopushright % \@ifcurrenv{align*}\tagpushright % \@ifcurrenv{alignat}\nopushright % \@ifcurrenv{alignat*}\tagpushright % \next} % \else % \def\pushright{% % \global\@pushrightfailedfalse % \let\next\standardpushright % \@ifcurrenv{displaymath}\eqnopushright % \@ifcurrenv{equation}\nopushright % \@ifcurrenv{eqnarray}\nopushright % \@ifcurrenv{eqnarray*}\eqnarraypushright % \next} % \fi % \def\@@qed#1{% % \pushright{#1}% % \if@pushrightfailed\else\global\@qedfalse\fi % } % \def\@@qedpar#1{% % \ifhmode\ifinner\else\par\fi\fi % } % \def\@qed{\check@pt@fm@thm % \if@qed\let\next\@@qed\else\let\next\@@qedpar\fi\next} % % % \endinput%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \end{macrocode} % \fi % % Unfortunately, |\qed| does not always work well, especially % in equation-like environment as provided by the \AMS{} package % \Lpackage{amsmath} there are several new complications. % We make |\qed| work in all these environments. % \begin{macrocode} \newif\if@resettagsleft@ \let\standardqed\qed \def\rescueqed{\qquad\qedsymbol\vphantom{\standardqed}} \def\eqnoqed{\eqno\hbox{\standardqed}}%\vphantom{\standardqed}} \let\ccorg@eqnnum\@eqnnum \let\ccorg@nonumber\nonumber \def\eqnarrayqed{% \global\@eqnswtrue \global\let\nonumber\relax % equation counter will be incremented at \end{eqnarray*} by \@@eqncr! \addtocounter{equation}\m@ne \gdef\@eqnnum{\llap{$\qedsymbol$\vphantom{\standardqed}}% \global\let\nonumber\ccorg@nonumber \global\let\@eqnnum\ccorg@eqnnum}} \def\tagqed{\tag*{\iftagsleft@ \hskip\displaywidth\llap{$\qedsymbol$}\hskip-\displaywidth% \else$\qedsymbol$\fi}\vphantom{\standardqed}} \def\simpletagqed{\iftagsleft@\global\@resettagsleft@true\fi \global\tagsleft@false \tag*{$\qedsymbol$}\vphantom{\standardqed}} \def\aftersplitqed{\global\let\endsplit\@endsplit} \let\ccorg@endsplit\endsplit \def\@endsplit{\ccorg@endsplit\qed\global\let\endsplit\ccorg@endsplit}% \def\noqed{} \def\@ifcurrenv#1#2{\def\@tempa{#1}\ifx\@tempa\@currenvir\relax \let\next#2\fi} \renewenvironment{displaymath}{$$}{$$\@ignoretrue} \renewcommand{\[}{\begin{displaymath}} \renewcommand{\]}{\end{displaymath}} \if@ams \def\qed{% \if@resettagsleft@ \global\tagsleft@true \global\@resettagsleft@false \fi \let\next\standardqed \@ifcurrenv{displaymath}\eqnoqed \@ifcurrenv{equation}\noqed \@ifcurrenv{eqnarray}\noqed \@ifcurrenv{eqnarray*}\eqnarrayqed \@ifcurrenv{equation*}\tagqed \@ifcurrenv{split}\aftersplitqed \@ifcurrenv{multline}\noqed \@ifcurrenv{multline*}\simpletagqed \@ifcurrenv{gather}\noqed \@ifcurrenv{gather*}\tagqed \@ifcurrenv{align}\noqed \@ifcurrenv{align*}\tagqed \@ifcurrenv{alignat}\noqed \@ifcurrenv{alignat*}\tagqed \next} \else \def\qed{% \let\next\standardqed \@ifcurrenv{displaymath}\eqnoqed \@ifcurrenv{equation}\noqed \@ifcurrenv{eqnarray}\noqed \@ifcurrenv{eqnarray*}\eqnarrayqed \next} \fi % % \end{macrocode} % % \GetFileInfo{cc2cite.sty} % \CodelinePrefix{C} % % \section{Source of \filename (\fileprefix)} % % This file (\file{\filename}) has version number \fileversion, last % revised \filedate. % \begin{macrocode} %<*cc2cite> \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesPackage{cc2cite}[2000/02/29 v2.05 cc2 cite helper package] % \end{macrocode} % We simply load \Lpackage{natbib} and make some small initializations. % \begin{macrocode} \RequirePackage{natbib} \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.05 cc cite helper package] \PackageWarningNoLine{cccite}{% The package cccite is obsolete.\MessageBreak Better use cc2cite. } % \end{macrocode} % % This is the named references stuff from % \Lpackage{namedrefs}\texttt{.sty} butchered and adapted by David % McClurkin, and again by Michael N{\"{u}}sken. % % It supports the following seven citation forms: % \begin{center} % \begin{tabular}{ll} % |\cite| & Cook (1990) \\ % |\citeauthor| & Cook \\ % |\citeyear| & 1990 \\ % |\citemul| & Cook (1990, 1991a, 1991b) \\ % |\shortcite| & Cook 1990 \\ % |\parencite| & (Cook 1990)\\ % |\nocite| & % \end{tabular} % \end{center} % % The package \Lpackage{ccdbs} simply guarantees that by default % |\bibliographystyle{cc}| is called unless the user issued a % |\bibliographystyle| command \emph{before} the |\bibliography| % command. % \begin{macrocode} \RequirePackage{ccdbs} \DefaultBibliographyStyle{cc} % \end{macrocode} % Remember the built in |\cite| since it will be redefined. % \begin{macrocode} \let\ccorg@cite\cite \let\ccorg@@cite\@cite % \end{macrocode} % After a comma we use |\penalty\@citeseppen|. % \begin{macrocode} \def\@citeseppen{-5} % \end{macrocode} % % \begin{macrocode} \def\@cite#1#2{{#1\if@tempswa , #2\fi}} % \end{macrocode} % The commands we provide only differ in the format of their output. % This format is stored in |\citeauthoryear|, then the universal % mechanism |\@citex| is applied. % \begin{macrocode} \def\cite#1{\def\citeauthoryear##1##2{##1\ (##2)}\@citex{#1}} \def\citeauthor#1{\def\citeauthoryear##1##2{##1}\@citex{#1}} \def\citeyear#1{\def\citeauthoryear##1##2{##2}\@citex{#1}} \def\shortcite#1{\def\citeauthoryear##1##2{##1\ ##2}\@citex{#1}} \def\parencite#1{\def\citeauthoryear##1##2{(##1\ ##2)}\@citex{#1}} % \end{macrocode} % |\citemul| is composed from the previous commands. % \begin{macrocode} \def\citemul#1{\@mcite #1\@\@} \def\@mcite#1,#2\@\@{\citeauthor{#1}\hskip3pt(\citeyear{#1,#2})} % \end{macrocode} % \begin{macro}{\@citex} % The argument is a list of citations. For each of a macro % containing a |\citeauthoryear| is expanded. These things are % seperated by commas with following |\penalty|. % \begin{macrocode} \def\@citex#1{\@tempswafalse% \if@filesw\immediate\write\@auxout{\string\citation{#1}}\fi \def\@citea{}\@cite{\@for\@citeb:=#1\do {\@citea\def\@citea{,\penalty\@citeseppen\ }\@ifundefined {b@\@citeb}{{\bf ?}\@warning {Citation `\@citeb' on page \thepage \space undefined}}% {\csname b@\@citeb\endcsname}}}{}} % \end{macrocode} % \end{macro} % The following macros are defined in order to be compatible with the % \Lpackage{natbib} package. However, they only have the same % syntax, their functionality is not as good as with % \Lpackage{natbib}. % \begin{macrocode} \let\ccorg@cite\cite \newcommand{\citet}{\let\which@cite\ccorg@cite\cc@citea} \let\cite\citet \newcommand{\citep}{\let\which@cite\parencite\cc@citea} \newcommand{\citealt}{\let\which@cite\shortcite\cc@citea} \newcommand{\citealp}{\let\which@cite\shortcite\cc@citea} \newcommand{\citetext}[1]{(#1)} \newcommand{\@citeyearpar}[1]{\citetext{\citeyear{#1}}} \newcommand{\citeyearpar}{\let\which@cite\@citeyearpar\cc@citea} \let\ccorg@citeauthor\citeauthor \renewcommand{\citeauthor}{\let\which@cite\ccorg@citeauthor\cc@citea} \newcommand{\citefullauthor}{\citeauthor*} \newcommand{\Citet}{\let\which@cite\cite\cc@citea} \newcommand{\Citep}{\let\which@cite\parencite\cc@citea} \newcommand{\Citealt}{\let\which@cite\shortcite\cc@citea} \newcommand{\Citealp}{\let\which@cite\shortcite\cc@citea} % \newwarning{poormancitea}{% This is only a poor (wo)man's version of this command.\MessageBreak Please use the package natbib.sty for full features.\MessageBreak Drop the document class option cccite } \newcommand{\cc@citea}{% \ccClassWarning{poormancitea}% \@tempswafalse\@ifstar{\cc@cite@st}{\cc@citeb}} \def\cc@cite@st{\@tempswatrue\cc@citeb} \newcommand{\cc@citeb}[1][]{\def\cc@cite@a{#1}\cc@citec} \newcommand{\cc@citec}[1][]{\def\cc@cite@b{#1}\which@cite} % \end{macrocode} % This is used in bibliography labels to produce the text. We do not % want any text. (For some reason not known to me this information % is stored in a macro.) % \begin{macrocode} \def\@biblabel#1{% \def\citename##1{##1}% for authordate bib styles } % \end{macrocode} % We lend some code from \Lpackage{natbib} to avoid conflicts with % different versions of \file{cc.bst}. % \begin{macrocode} \newcounter{NAT@ctr} \def\NAT@noname{{}} \let\ccorg@lbibitem\@lbibitem \def\@lbibitem[#1]#2{% \let\citeauthoryear\bib@citeauthoryear \if@filesw\@tempswatrue\else\@tempswafalse\fi\@fileswfalse \ccorg@lbibitem[#1]{#2}% \if@tempswa\@fileswtrue\fi \NAT@ifcmd#1(@)(@)\@nil{#2}\ignorespaces} \newcommand\NAT@ifcmd{\futurelet\NAT@temp\NAT@ifxcmd} \newcommand\NAT@ifxcmd{% \ifx\NAT@temp\relax\else\expandafter\NAT@bare\fi} \def\NAT@bare#1(#2)#3(@)#4\@nil#5{% \if @#2 \expandafter\NAT@apalk#1, , \@nil{#5}\else \stepcounter{NAT@ctr}% \cc@wrout{\arabic {NAT@ctr}}{#2}{#1}{#3}{#5} \fi } \newcommand\NAT@apalk{} \def\NAT@apalk#1, #2, #3\@nil#4{\if\relax#2\relax \global\NAT@stdbsttrue \cc@wrout{#1}{}{}{}{#4}\else \stepcounter{NAT@ctr}% \cc@wrout{\arabic {NAT@ctr}}{#2}{#1}{}{#4}\fi} \newcommand\citeauthoryear{} \def\bib@citeauthoryear#1#2#3(@)(@)\@nil#4{% \stepcounter{NAT@ctr}\if\relax#3\relax \cc@wrout{\arabic {NAT@ctr}}{#2}{#1}{}{#4}\else \cc@wrout{\arabic {NAT@ctr}}{#3}{#2}{#1}{#4}\fi} \newcommand\citestarts{\NAT@open} \newcommand\citeends{\NAT@close} \newcommand\betweenauthors{and} \newcommand\astroncite{} \def\astroncite#1#2(@)(@)\@nil#3{\stepcounter{NAT@ctr}\cc@wrout{\arabic {NAT@ctr}}{#2}{#1}{}{#3}} \newcommand\citename{} \def\citename#1#2(@)(@)\@nil#3{\expandafter\NAT@apalk#1#2, \@nil{#3}} \newcommand\harvarditem[4][]% {\if\relax#1\relax\bibitem[#2(#3)]{#4}\else \bibitem[#1(#3)#2]{#4}\fi } \newcommand\harvardleft{\NAT@open} \newcommand\harvardright{\NAT@close} \newcommand\harvardyearleft{\NAT@open} \newcommand\harvardyearright{\NAT@close} \AtBeginDocument{\providecommand{\harvardand}{and}} \newcommand\harvardurl[1]{\textbf{URL:} \textit{#1}} \newcommand\cc@wrout[5]{% \if@filesw {\let\protect\noexpand\let~\relax \immediate \write\@auxout{\string\bibcite{#5}% {\protect\citeauthoryear{#3}{#2}}}}\fi \ignorespaces} % % \end{macrocode} % % \GetFileInfo{ccdbs.sty} % \CodelinePrefix{D} % % \section{Source of \filename (\fileprefix)} % % This file (\file{\filename}) has version number \fileversion, last % revised \filedate. % % \changes{v1.99}{2000/02/24}{Made this an own file} % \begin{macrocode} %<*ccdbs> \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesPackage{ccdbs}[2000/02/20 v2.05 bibliography helper package] % \end{macrocode} % % We manipulate |\bibliographystyle| and |\bibliography|. By default % |\bibliographystyle|\linebreak[3]|{\bibstyle@default}| is called % unless the user issued a |\bibliographystyle| command before the % |\bibliography| command. % \begin{macrocode} \let\ccorg@bibliographystyle\bibliographystyle \newif\if@bibstylemissing \@bibstylemissingtrue \def\bibliographystyle{\@bibstylemissingfalse \gdef\bibliographystyle##1{% \PackageWarning{ccdbs}{\protect\bibliographystyle\space can be used only before \protect\bibliography!}}% \ccorg@bibliographystyle} \let\ccorg@bibliography\bibliography \def\bibliography{% \if@bibstylemissing \bibliographystyle{\bibstyle@default}% \fi \ccorg@bibliography} % \end{macrocode} % \begin{macro}{\DefaultBibliographyStyle} % The command |\DefaultBibliographyStyle| allows to choose another % default value. The default value of |\bibstyle@default| is % |plain|. % \begin{macrocode} \newcommand{\DefaultBibliographyStyle}[1]{% \def\bibstyle@default{#1}} \DefaultBibliographyStyle{plain} % % \end{macrocode} % \end{macro} % % \GetFileInfo{cc.cls} % \def\filename{cctemplate.tex} % \CodelinePrefix{p} % % \section{Source of \filename (\fileprefix)} % % This file (\file{\filename}) has version number \fileversion, last % revised \filedate. % \changes{v2.07}{2007/01/11}{Changed bibliography basename to % \cs{jobname}. Michael N{\"{u}}sken, Bonn} % \begin{macrocode} %<*cctemplate> \begin{filecontents*}{\jobname.bib} %% Insert your bibliography file here \end{filecontents*} \begin{filecontents}{\jobname.bbl} %% Insert your bbl file here (please also add your bib file above!) \end{filecontents} \documentclass{cc} %%% personal macros and packages %%% end of personal macros and packages %%\ccpublish{}{}{}{} \contact{}% Insert contact email address here. \received{}% Insert the date on which you made the original % submission of your paper to computational complexity, % in the format \received{8 August 2008}. \title{}% Insert title here. (Use \\ to split lines.) %%\titlehead{}% If necessary insert running head title here. \author{}% Insert author list here. (Each author must be given % including his/her current address, email and possibly % homepage. Lines are seperated by \\, different authors % are 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{journals,\jobname}% Put your bibliography into the above % filecontents environment! \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.05 computational complexity, reactivate ltthm. Michael Nuesken, Bonn.] %%% From File: ltthm.dtx \def\newtheorem#1{% \@ifnextchar[{\@othm{#1}}{\@nthm{#1}}} \def\@nthm#1#2{% \@ifnextchar[{\@xnthm{#1}{#2}}{\@ynthm{#1}{#2}}} \def\@xnthm#1#2[#3]{% \expandafter\@ifdefinable\csname #1\endcsname {\@definecounter{#1}\@newctr{#1}[#3]% \expandafter\xdef\csname the#1\endcsname{% \expandafter\noexpand\csname the#3\endcsname \@thmcountersep \@thmcounter{#1}}% \global\@namedef{#1}{\@thm{#1}{#2}}% \global\@namedef{end#1}{\@endtheorem}}} \def\@ynthm#1#2{% \expandafter\@ifdefinable\csname #1\endcsname {\@definecounter{#1}% \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}% \global\@namedef{#1}{\@thm{#1}{#2}}% \global\@namedef{end#1}{\@endtheorem}}} \def\@othm#1[#2]#3{% \@ifundefined{c@#2}{\@nocounterr{#2}}% {\expandafter\@ifdefinable\csname #1\endcsname {\global\@namedef{the#1}{\@nameuse{the#2}}% \global\@namedef{#1}{\@thm{#2}{#3}}% \global\@namedef{end#1}{\@endtheorem}}}} \def\@thm#1#2{% \refstepcounter{#1}% \@ifnextchar[{\@ythm{#1}{#2}}{\@xthm{#1}{#2}}} \def\@xthm#1#2{% \@begintheorem{#2}{\csname the#1\endcsname}\ignorespaces} \def\@ythm#1#2[#3]{% \@opargbegintheorem{#2}{\csname the#1\endcsname}{#3}\ignorespaces} \def\@thmcounter#1{\noexpand\arabic{#1}} \def\@thmcountersep{.} \def\@begintheorem#1#2{\trivlist \item[\hskip \labelsep{\bfseries #1\ #2}]\itshape} \def\@opargbegintheorem#1#2#3{\trivlist \item[\hskip \labelsep{\bfseries #1\ #2\ (#3)}]\itshape} \def\@endtheorem{\endtrivlist} % % \end{macrocode} % % \def\filename{cc4apjrnl.sty} % \CodelinePrefix{} % % \section{Source of \filename (\fileprefix)} % % This file (\file{\filename}) has version number \fileversion, last % revised \filedate. % % It allows to use the document class \Lclass{apjrnl} for a file that % has been written with the document class \Lclass{cc}. To do this % add the line % \begin{verbatim} % \expandafter\def\csname ver@apthm.sty\endcsname{2001/03/05} % \end{verbatim} % \emph{before} the |\documentclass| and a |\usepackage{cc4apjrnl}| % after it. % \begin{macrocode} %<*cc4apjrnl> \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesPackage{cc4apjrnl}[2002/01/08 v2.05 computational complexity, adaptions to apjrnl. Michael Nuesken, Bonn.] % Forget this AP definition \let\answer\relax \let\endanswer\relax % Load our definitions \RequirePackage{amsmath}[1997/03/20 v1.2d] % amsmath contains amstext, amsgen, amsbsy, amsopn \RequirePackage{amsfonts}[1997/09/17 v2.2e] \RequirePackage{amssymb}[1996/11/03 v2.2b] \RequirePackage{ccaux} \RequirePackage{ccreltx}% deactivate amsthm.sty and reactive LaTeX's definitions. \@longarticletrue \@adjustnumbering \let\theorem@style\@undefined \RequirePackage{ccthm} \RequirePackage{ccqed} \let\proof\@undefined \let\endproof\@undefined \RequirePackage{ccproof} \RequirePackage{cc2cite} \RequirePackage{url}[1999/03/02 ver 1.4] \expandafter\def\expandafter\UrlSpecials\expandafter{% \UrlSpecials\do\%{}} \providecommand{\email}{\begingroup\urlstyle{tt}\Url} \providecommand{\homepage}{\begingroup\scriptsize\urlstyle{tt}\Url} % Adapt to AP style \gdef\theorem@headerfont{\scshape\null\hskip\parindent} \gdef\Proof{\textit{Proof}} \renewcommand{\qedsymbol}{\rule{2pt}{4pt}} % % \end{macrocode} % % \def\filename{cc4amsart.sty} % \CodelinePrefix{} % % \section{Source of \filename (\fileprefix)} % % This file (\file{\filename}) has version number \fileversion, last % revised \filedate. % % It allows to use the document class \Lclass{amsart} or derivatives % of it (as \Lclass{mcom-l}, \dots) for a file that has been written % with the document class \Lclass{cc}. To do this add a % |\usepackage{cc4amsart}| after it. % \changes{v2.05}{2209/12/22}{Added \cs{@adjustnumbering}.} % \begin{macrocode} %<*cc4amsart> \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesPackage{cc4amsart}[2009/12/22 v2.05b computational complexity, adaptions to amsart. Michael Nuesken, Bonn.] \RequirePackage{ccaux} \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} \AtBeginDocument{\@adjustnumbering} % % \end{macrocode} % % \def\filename{cc4svjour.sty} % \CodelinePrefix{} % % \section{Source of \filename (\fileprefix)} % % This file (\file{\filename}) has version number \fileversion, last % revised \filedate. % % It allows to use the document class \Lclass{svjour3} or derivatives % of it for a file that has been written with the document class % \Lclass{cc}. To do this add a |\usepackage{cc4svjour}| after it. % \changes{v2.14}{2010/10/14}{Derived from \Lpackage{cc4amsart.sty}.} % \begin{macrocode} %<*cc4svjour> \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesPackage{cc4svjour}[2010/10/14 v2.15 computational complexity, adaptions to svjour3. Michael Nuesken, Bonn.] \RequirePackage{ccaux} \RequirePackage{cc2cite} \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}).]}% %% } %% %%% Deactivate svjour3's theorem definitions: \let\claim\relax \let\endclaim\relax \let\conjecture\relax \let\endconjecture\relax \let\corollary\relax \let\endcorollary\relax \let\counterexample\relax \let\endcounterexample\relax \let\definition\relax \let\enddefinition\relax \let\exercise\relax \let\endexercise\relax \let\fact\relax \let\endfact\relax \let\hypothesis\relax \let\endhypothesis\relax \let\lemma\relax \let\endlemma\relax \let\notation\relax \let\endnotation\relax \let\note\relax \let\endnote\relax \let\observation\relax \let\endobservation\relax \let\open\relax \let\endopen\relax \let\openquestion\relax \let\endopenquestion\relax \let\problem\relax \let\endproblem\relax \let\proposition\relax \let\endproposition\relax \let\question\relax \let\endquestion\relax \let\remark\relax \let\endremark\relax \let\result\relax \let\endresult\relax \let\theorem\relax \let\endtheorem\relax \let\thesis\relax \let\endthesis\relax \let\warning\relax \let\endwarning\relax \let\example\relax \let\endexample\relax %%% \makeatletter %%% \def\gund@f#1{% %%% \expandafter\global\expandafter\let\csname #1\endcsname\@undefined %%% \expandafter\global\expandafter\let\csname end#1\endcsname\@undefined %%% } %%% \makeatother %%% \gund@f{claim} %%% \gund@f{conjecture} %%% \gund@f{corollary} %%% \gund@f{definition} %%% \gund@f{example} %%% \gund@f{exercise} %%% \gund@f{fact} %%% \gund@f{lemma} %%% \gund@f{note} %%% \gund@f{problem} %%% \gund@f{proposition} %%% \gund@f{question} %%% \gund@f{remark} %%% \gund@f{theorem} \@longarticletrue \RequirePackage{ccthm} \babel\def\ccacknowledgementsname{Acknowledgements}[% german=Danksagung,french=Remerciements] \newenvironment{acknowledge}{\section*{\ccacknowledgementsname}}{} \RequirePackage{relabel} \RequirePackage{cc2cite} \RequirePackage{ccqed} \RequirePackage{amsmath} \RequirePackage{amsfonts} \RequirePackage{amssymb} \RequirePackage{url} \providecommand{\homepage}{\begingroup\scriptsize\urlstyle{tt}\Url} \AtBeginDocument{\@adjustnumbering} % % \end{macrocode} % % \def\filename{cc4llncs.sty} % \CodelinePrefix{} % % \section{Source of \filename (\fileprefix)} % % This file (\file{\filename}) has version number \fileversion, last % revised \filedate. % % It allows to use the document class \Lclass{llncs} for a file that % has been written with the document class \Lclass{cc}. To do this % add the line |\usepackage{cc4llncs}|. % \begin{macrocode} %<*cc4llncs> \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesPackage{cc4llncs}[2002/10/01 v2.05 computational complexity, adaptions to llncs. Michael Nuesken, Bonn.] % Forget these llncs definitions \let\claim\relax \let\endclaim\relax \let\conjecture\relax \let\endconjecture\relax \let\corollary\relax \let\endcorollary\relax \let\counterexample\relax \let\endcounterexample\relax \let\definition\relax \let\enddefinition\relax \let\exercise\relax \let\endexercise\relax \let\fact\relax \let\endfact\relax \let\hypothesis\relax \let\endhypothesis\relax \let\lemma\relax \let\endlemma\relax \let\notation\relax \let\endnotation\relax \let\note\relax \let\endnote\relax \let\observation\relax \let\endobservation\relax \let\open\relax \let\endopen\relax \let\openquestion\relax \let\endopenquestion\relax \let\problem\relax \let\endproblem\relax \let\proposition\relax \let\endproposition\relax \let\question\relax \let\endquestion\relax \let\remark\relax \let\endremark\relax \let\result\relax \let\endresult\relax \let\theorem\relax \let\endtheorem\relax \let\thesis\relax \let\endthesis\relax \let\warning\relax \let\endwarning\relax \let\example\relax \let\endexample\relax % 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.05 computational complexity, adaptions to siamltex. Michael Nuesken, Bonn.] \let\theorem\relax \let\endtheorem\relax \let\lemma\relax \let\endlemma\relax \let\corollary\relax \let\endcorollary\relax \let\proposition\relax \let\endproposition\relax \let\definition\relax \let\enddefinition\relax \let\proof\relax \let\endproof\relax \RequirePackage{amsmath} \RequirePackage{amsfonts} \RequirePackage{amssymb} \RequirePackage{ccaux} \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.05 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. % \changes{v2.05}{2209/12/22}{Added ams packages.} % \begin{macrocode} %<*cc4elsart> \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesPackage{cc4elsart}[2009/12/22 v2.05b computational complexity, adaptions to elsart. Michael Nuesken, Bonn.] \RequirePackage{ccaux} \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~} \RequirePackage{amsmath}[2000/01/15 v2.05]% 1997/03/20 v1.2d % amsmath contains amstext, amsgen, amsbsy, amsopn \RequirePackage{amsfonts}[1997/09/17 v2.2e] \RequirePackage{amssymb}[1996/11/03 v2.2b] \numberallwithin{section} \AtBeginDocument{\@adjustnumbering} %%% \RequirePackage{cc2cite} %%% \RequirePackage{url} % % \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.09} % \def\filedate{2008/04/25} % \CodelinePrefix{b} % % \section{Source of \filename (\fileprefix)} % % This file (\file{\filename}) has version number \fileversion, last % revised \filedate. % \ifbst% the new bibliography style is normally not printed. % \hfuzz=\oddsidemargin % \def\MacroFont{\fontencoding\encodingdefault % \fontfamily\ttdefault % \fontseries\mddefault % \fontshape\updefault % \tiny} % \let\AltMacroFont\MacroFont % \renewcommand{\theCodelineNo}{\rmfamily\tiny b\arabic{CodelineNo}}% % \begin{macrocode} %<*cc2bst> %< %% %% This is file `cc2.bst', %% generated with the docstrip utility. %% %% The original source files were: %% %% merlin.mbs (with options: `,ay,nat,lang,vonx,ed-au,nmft,nmft-sc,nmfted,nmand-rm,dt-beg,yr-par,note-yr,atit-u,vol-bf,volp-com,pgsep-s,jnm-x,pg-bk,isbn,issn,url,url-blk,edpar,edby,edbyy,ppx,ord,amper,and-xcom,etal-it,nfss') %% ---------------------------------------- %% *** bst for computational complexity with natbib.sty *** %% %% Copyright 1994-2007 Patrick W Daly % =============================================================== % IMPORTANT NOTICE: % This bibliographic style (bst) file has been generated from one or % more master bibliographic style (mbs) files, listed above. % % This generated file can be redistributed and/or modified under the terms % of the LaTeX Project Public License Distributed from CTAN % archives in directory macros/latex/base/lppl.txt; either % version 1 of the License, or any later version. % =============================================================== % Name and version information of the main mbs file: % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)] % For use with BibTeX version 0.99a or later %------------------------------------------------------------------- % This bibliography style file is intended for texts in ENGLISH % This is an author-year citation style bibliography. As such, it is % non-standard LaTeX, and requires a special package file to function properly. % Such a package is natbib.sty by Patrick W. Daly % The form of the \bibitem entries is % \bibitem[Jones et al.(1990)]{key}... % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... % The essential feature is that the label (the part in brackets) consists % of the author names, as they should appear in the citation, with the year % in parentheses following. There must be no space before the opening % parenthesis! % With natbib v5.3, a full list of authors may also follow the year. % In natbib.sty, it is possible to define the type of enclosures that is % really wanted (brackets or parentheses), but in either case, there must % be parentheses in the label. % The \cite command functions as follows: % \citet{key} ==>> Jones et al. (1990) % \citet*{key} ==>> Jones, Baker, and Smith (1990) % \citep{key} ==>> (Jones et al., 1990) % \citep*{key} ==>> (Jones, Baker, and Smith, 1990) % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2) % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990) % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32) % \citeauthor{key} ==>> Jones et al. % \citeauthor*{key} ==>> Jones, Baker, and Smith % \citeyear{key} ==>> 1990 %--------------------------------------------------------------------- ENTRY { address author booktitle chapter edition editor eid howpublished institution isbn issn journal key language month note number organization pages publisher school series title type url volume year } {} { label extra.label sort.label short.list } INTEGERS { output.state before.all mid.sentence after.sentence after.block } FUNCTION {init.state.consts} { #0 'before.all := #1 'mid.sentence := #2 'after.sentence := #3 'after.block := } STRINGS { s t} FUNCTION {output.nonnull} { 's := output.state mid.sentence = { ", " * write$ } { output.state after.block = { add.period$ write$ newline$ "\newblock " write$ } { output.state before.all = 'write$ { add.period$ " " * write$ } if$ } if$ mid.sentence 'output.state := } if$ s } FUNCTION {output} { duplicate$ empty$ 'pop$ 'output.nonnull if$ } FUNCTION {output.check} { 't := duplicate$ empty$ { pop$ "empty " t * " in " * cite$ * warning$ } 'output.nonnull if$ } FUNCTION {fin.entry} { add.period$ write$ newline$ } FUNCTION {new.block} { output.state before.all = 'skip$ { after.block 'output.state := } if$ } FUNCTION {new.sentence} { output.state after.block = 'skip$ { output.state before.all = 'skip$ { after.sentence 'output.state := } if$ } if$ } FUNCTION {add.blank} { " " * before.all 'output.state := } FUNCTION {date.block} { new.block } FUNCTION {not} { { #0 } { #1 } if$ } FUNCTION {and} { 'skip$ { pop$ #0 } if$ } FUNCTION {or} { { pop$ #1 } 'skip$ if$ } FUNCTION {new.block.checkb} { empty$ swap$ empty$ and 'skip$ 'new.block if$ } FUNCTION {field.or.null} { duplicate$ empty$ { pop$ "" } 'skip$ if$ } FUNCTION {emphasize} { duplicate$ empty$ { pop$ "" } { "\emph{" swap$ * "}" * } if$ } FUNCTION {bolden} { duplicate$ empty$ { pop$ "" } { "\textbf{" swap$ * "}" * } if$ } FUNCTION {scaps} { duplicate$ empty$ { pop$ "" } { "\textsc{" swap$ * "}" * } if$ } FUNCTION {bib.name.font} { scaps } FUNCTION {bib.fname.font} { bib.name.font } FUNCTION {tie.or.space.prefix} { duplicate$ text.length$ #3 < { "~" } { " " } if$ swap$ } FUNCTION {capitalize} { "u" change.case$ "t" change.case$ } FUNCTION {space.word} { " " swap$ * " " * } % Here are the language-specific definitions for explicit words. % Each function has a name bbl.xxx where xxx is the English word. % The language selected here is ENGLISH FUNCTION {bbl.and} { "and"} FUNCTION {bbl.etal} { "et~al." } FUNCTION {bbl.editors} { "editors" } FUNCTION {bbl.editor} { "editor" } FUNCTION {bbl.edby} { "edited by" } FUNCTION {bbl.edition} { "edition" } FUNCTION {bbl.volume} { "volume" } FUNCTION {bbl.of} { "of" } FUNCTION {bbl.number} { "number" } FUNCTION {bbl.nr} { "no." } FUNCTION {bbl.in} { "in" } FUNCTION {bbl.pages} { "" } FUNCTION {bbl.page} { "" } FUNCTION {bbl.chapter} { "chapter" } FUNCTION {bbl.techrep} { "Technical Report" } FUNCTION {bbl.mthesis} { "Master's thesis" } FUNCTION {bbl.phdthesis} { "Ph.D. thesis" } FUNCTION {bbl.first} { "1st" } FUNCTION {bbl.second} { "2nd" } FUNCTION {bbl.third} { "3rd" } FUNCTION {bbl.fourth} { "4th" } FUNCTION {bbl.fifth} { "5th" } FUNCTION {bbl.st} { "st" } FUNCTION {bbl.nd} { "nd" } FUNCTION {bbl.rd} { "rd" } FUNCTION {bbl.th} { "th" } MACRO {jan} {"January"} MACRO {feb} {"February"} MACRO {mar} {"March"} MACRO {apr} {"April"} MACRO {may} {"May"} MACRO {jun} {"June"} MACRO {jul} {"July"} MACRO {aug} {"August"} MACRO {sep} {"September"} MACRO {oct} {"October"} MACRO {nov} {"November"} MACRO {dec} {"December"} FUNCTION {eng.ord} { duplicate$ "1" swap$ * #-2 #1 substring$ "1" = { bbl.th * } { duplicate$ #-1 #1 substring$ duplicate$ "1" = { pop$ bbl.st * } { duplicate$ "2" = { pop$ bbl.nd * } { "3" = { bbl.rd * } { bbl.th * } if$ } if$ } if$ } if$ } MACRO {acmcs} {"ACM Computing Surveys"} MACRO {acta} {"Acta Informatica"} MACRO {cacm} {"Communications of the ACM"} MACRO {ibmjrd} {"IBM Journal of Research and Development"} MACRO {ibmsj} {"IBM Systems Journal"} MACRO {ieeese} {"IEEE Transactions on Software Engineering"} MACRO {ieeetc} {"IEEE Transactions on Computers"} MACRO {ieeetcad} {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} MACRO {ipl} {"Information Processing Letters"} MACRO {jacm} {"Journal of the ACM"} MACRO {jcss} {"Journal of Computer and System Sciences"} MACRO {scp} {"Science of Computer Programming"} MACRO {sicomp} {"SIAM Journal on Computing"} MACRO {tocs} {"ACM Transactions on Computer Systems"} MACRO {tods} {"ACM Transactions on Database Systems"} MACRO {tog} {"ACM Transactions on Graphics"} MACRO {toms} {"ACM Transactions on Mathematical Software"} MACRO {toois} {"ACM Transactions on Office Information Systems"} MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} MACRO {tcs} {"Theoretical Computer Science"} FUNCTION {bibinfo.check} { swap$ duplicate$ missing$ { pop$ pop$ "" } { duplicate$ empty$ { swap$ pop$ } { swap$ pop$ } if$ } if$ } FUNCTION {bibinfo.warn} { swap$ duplicate$ missing$ { swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ "" } { duplicate$ empty$ { swap$ "empty " swap$ * " in " * cite$ * warning$ } { swap$ pop$ } if$ } if$ } FUNCTION {format.url} { url empty$ { "" } { "\urlprefix\url{" url * "}" * } if$ } INTEGERS { nameptr namesleft numnames } STRINGS { bibinfo} FUNCTION {format.names} { 'bibinfo := duplicate$ empty$ 'skip$ { 's := "" 't := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ bib.name.font bibinfo bibinfo.check 't := nameptr #1 > { namesleft #1 > { ", " * t * } { s nameptr "{ll}" format.name$ duplicate$ "others" = { 't := } { pop$ } if$ t "others" = { " " * bbl.etal emphasize * } { "\&" space.word * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } if$ } FUNCTION {format.names.ed} { format.names } FUNCTION {format.key} { empty$ { key field.or.null } { "" } if$ } FUNCTION {format.authors} { author "author" format.names } FUNCTION {get.bbl.editor} { editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } FUNCTION {format.editors} { editor "editor" format.names duplicate$ empty$ 'skip$ { " " * get.bbl.editor "(" swap$ * ")" * * } if$ } FUNCTION {format.book.pages} { pages "pages" bibinfo.check duplicate$ empty$ 'skip$ { " " * bbl.pages * } if$ } FUNCTION {format.isbn} { isbn "isbn" bibinfo.check duplicate$ empty$ 'skip$ { new.block "ISBN " swap$ * } if$ } FUNCTION {format.issn} { issn "issn" bibinfo.check duplicate$ empty$ 'skip$ { new.block "ISSN " swap$ * } if$ } FUNCTION {select.language} { duplicate$ empty$ 'pop$ { language empty$ 'skip$ { "{\selectlanguage{" language * "}" * swap$ * "}" * } if$ } if$ } FUNCTION {format.note} { note empty$ { "" } { note #1 #1 substring$ duplicate$ "{" = 'skip$ { output.state mid.sentence = { "l" } { "u" } if$ change.case$ } if$ note #2 global.max$ substring$ * "note" bibinfo.check } if$ } FUNCTION {format.title} { title "title" bibinfo.check duplicate$ empty$ 'skip$ { select.language } if$ } FUNCTION {format.full.names} {'s := "" 't := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr "{vv~}{ll}" format.name$ 't := nameptr #1 > { namesleft #1 > { ", " * t * } { s nameptr "{ll}" format.name$ duplicate$ "others" = { 't := } { pop$ } if$ t "others" = { " " * bbl.etal emphasize * } { "\&" space.word * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } FUNCTION {author.editor.key.full} { author empty$ { editor empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { editor format.full.names } if$ } { author format.full.names } if$ } FUNCTION {author.key.full} { author empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { author format.full.names } if$ } FUNCTION {editor.key.full} { editor empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { editor format.full.names } if$ } FUNCTION {make.full.names} { type$ "book" = type$ "inbook" = or 'author.editor.key.full { type$ "proceedings" = 'editor.key.full 'author.key.full if$ } if$ } FUNCTION {output.bibitem} { newline$ "\bibitem[{" write$ label write$ ")" make.full.names duplicate$ short.list = { pop$ } { * } if$ "}]{" * write$ cite$ write$ "}" write$ newline$ "" before.all 'output.state := } FUNCTION {if.digit} { duplicate$ "0" = swap$ duplicate$ "1" = swap$ duplicate$ "2" = swap$ duplicate$ "3" = swap$ duplicate$ "4" = swap$ duplicate$ "5" = swap$ duplicate$ "6" = swap$ duplicate$ "7" = swap$ duplicate$ "8" = swap$ "9" = or or or or or or or or or } FUNCTION {n.separate} { 't := "" #0 'numnames := { t empty$ not } { t #-1 #1 substring$ if.digit { numnames #1 + 'numnames := } { #0 'numnames := } if$ t #-1 #1 substring$ swap$ * t #-2 global.max$ substring$ 't := numnames #5 = { duplicate$ #1 #2 substring$ swap$ #3 global.max$ substring$ "\," swap$ * * } 'skip$ if$ } while$ } FUNCTION {n.dashify} { n.separate 't := "" { t empty$ not } { t #1 #1 substring$ "-" = { t #1 #2 substring$ "--" = not { "--" * t #2 global.max$ substring$ 't := } { { t #1 #1 substring$ "-" = } { "-" * t #2 global.max$ substring$ 't := } while$ } if$ } { t #1 #1 substring$ * t #2 global.max$ substring$ 't := } if$ } while$ } FUNCTION {word.in} { bbl.in capitalize " " * } FUNCTION {format.date} { year "year" bibinfo.check duplicate$ empty$ { "empty year in " cite$ * "; set to ????" * warning$ pop$ "????" } 'skip$ if$ extra.label * before.all 'output.state := " (" swap$ * ")" * } FUNCTION {format.btitle} { title "title" bibinfo.check duplicate$ empty$ 'skip$ { emphasize select.language } if$ } FUNCTION {either.or.check} { empty$ 'pop$ { "can't use both " swap$ * " fields in " * cite$ * warning$ } if$ } FUNCTION {format.bvolume} { volume empty$ { "" } { bbl.volume volume tie.or.space.prefix "volume" bibinfo.check * * series "series" bibinfo.check duplicate$ empty$ 'pop$ { swap$ bbl.of space.word * swap$ emphasize * } if$ "volume and number" number either.or.check } if$ } FUNCTION {format.number.series} { volume empty$ { number empty$ { series field.or.null } { output.state mid.sentence = { bbl.number } { bbl.number capitalize } if$ number tie.or.space.prefix "number" bibinfo.check * * series empty$ { "there's a number but no series in " cite$ * warning$ } { bbl.in space.word * series "series" bibinfo.check * } if$ } if$ } { "" } if$ } FUNCTION {is.num} { chr.to.int$ duplicate$ "0" chr.to.int$ < not swap$ "9" chr.to.int$ > not and } FUNCTION {extract.num} { duplicate$ 't := "" 's := { t empty$ not } { t #1 #1 substring$ t #2 global.max$ substring$ 't := duplicate$ is.num { s swap$ * 's := } { pop$ "" 't := } if$ } while$ s empty$ 'skip$ { pop$ s } if$ } FUNCTION {convert.edition} { extract.num "l" change.case$ 's := s "first" = s "1" = or { bbl.first 't := } { s "second" = s "2" = or { bbl.second 't := } { s "third" = s "3" = or { bbl.third 't := } { s "fourth" = s "4" = or { bbl.fourth 't := } { s "fifth" = s "5" = or { bbl.fifth 't := } { s #1 #1 substring$ is.num { s eng.ord 't := } { edition 't := } if$ } if$ } if$ } if$ } if$ } if$ t } FUNCTION {format.edition} { edition duplicate$ empty$ 'skip$ { convert.edition output.state mid.sentence = { "l" } { "t" } if$ change.case$ "edition" bibinfo.check " " * bbl.edition * } if$ } INTEGERS { multiresult } FUNCTION {multi.page.check} { 't := #0 'multiresult := { multiresult not t empty$ not and } { t #1 #1 substring$ duplicate$ "-" = swap$ duplicate$ "," = swap$ "+" = or or { #1 'multiresult := } { t #2 global.max$ substring$ 't := } if$ } while$ multiresult } FUNCTION {format.pages} { pages duplicate$ empty$ 'skip$ { duplicate$ multi.page.check { n.dashify } { } if$ "pages" bibinfo.check } if$ } FUNCTION {format.journal.pages} { pages duplicate$ empty$ 'pop$ { swap$ duplicate$ empty$ { pop$ pop$ format.pages } { ", " * swap$ n.dashify "pages" bibinfo.check * } if$ } if$ } FUNCTION {format.journal.eid} { eid "eid" bibinfo.check duplicate$ empty$ 'pop$ { swap$ duplicate$ empty$ 'skip$ { ", " * } if$ swap$ * } if$ } FUNCTION {format.vol.num.pages} { volume field.or.null duplicate$ empty$ 'skip$ { "volume" bibinfo.check } if$ bolden number "number" bibinfo.check duplicate$ empty$ 'skip$ { swap$ duplicate$ empty$ { "there's a number but no volume in " cite$ * warning$ } 'skip$ if$ swap$ "(" swap$ * ")" * } if$ * eid empty$ { format.journal.pages } { format.journal.eid } if$ } FUNCTION {format.chapter.pages} { chapter empty$ 'format.pages { type empty$ { bbl.chapter } { type "l" change.case$ "type" bibinfo.check } if$ chapter tie.or.space.prefix "chapter" bibinfo.check * * pages empty$ 'skip$ { ", " * format.pages * } if$ } if$ } FUNCTION {format.booktitle} { booktitle "booktitle" bibinfo.check emphasize } FUNCTION {format.in.ed.booktitle} { format.booktitle duplicate$ empty$ 'skip$ { editor "editor" format.names.ed duplicate$ empty$ 'pop$ { get.bbl.editor swap$ "," * " " * swap$ * swap$ "," * " " * swap$ * } if$ word.in swap$ * } if$ } FUNCTION {format.thesis.type} { type duplicate$ empty$ 'pop$ { swap$ pop$ "t" change.case$ "type" bibinfo.check } if$ } FUNCTION {format.tr.number} { number "number" bibinfo.check type duplicate$ empty$ { pop$ bbl.techrep } 'skip$ if$ "type" bibinfo.check swap$ duplicate$ empty$ { pop$ "t" change.case$ } { tie.or.space.prefix * * } if$ } FUNCTION {format.article.crossref} { word.in " \cite{" * crossref * "}" * } FUNCTION {format.book.crossref} { volume duplicate$ empty$ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ pop$ word.in } { bbl.volume capitalize swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word * } if$ " \cite{" * crossref * "}" * } FUNCTION {format.incoll.inproc.crossref} { word.in " \cite{" * crossref * "}" * } FUNCTION {format.org.or.pub} { 't := "" address empty$ t empty$ and 'skip$ { t empty$ { address "address" bibinfo.check * } { t * address empty$ 'skip$ { ", " * address "address" bibinfo.check * } if$ } if$ } if$ } FUNCTION {format.publisher.address} { publisher "publisher" bibinfo.warn format.org.or.pub } FUNCTION {format.organization.address} { organization "organization" bibinfo.check format.org.or.pub } FUNCTION {article} { output.bibitem format.authors "author" output.check author format.key output format.date "year" output.check date.block format.title "title" output.check new.block crossref missing$ { journal "journal" bibinfo.check emphasize "journal" output.check add.blank format.vol.num.pages output } { format.article.crossref output.nonnull format.pages output } if$ format.issn output new.block format.url output new.block format.note output fin.entry } FUNCTION {book} { output.bibitem author empty$ { format.editors "author and editor" output.check editor format.key output } { format.authors output.nonnull crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ format.date "year" output.check date.block format.btitle "title" output.check crossref missing$ { format.bvolume output new.block format.number.series output new.sentence format.publisher.address output } { new.block format.book.crossref output.nonnull } if$ format.edition output format.isbn output format.book.pages output new.block format.url output new.block format.note output fin.entry } FUNCTION {booklet} { output.bibitem format.authors output author format.key output format.date "year" output.check date.block format.title "title" output.check new.block howpublished "howpublished" bibinfo.check output address "address" bibinfo.check output format.isbn output format.book.pages output new.block format.url output new.block format.note output fin.entry } FUNCTION {inbook} { output.bibitem author empty$ { format.editors "author and editor" output.check editor format.key output } { format.authors output.nonnull crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ format.date "year" output.check date.block format.btitle "title" output.check crossref missing$ { format.bvolume output format.chapter.pages "chapter and pages" output.check new.block format.number.series output new.sentence format.publisher.address output } { format.chapter.pages "chapter and pages" output.check new.block format.book.crossref output.nonnull } if$ format.edition output crossref missing$ { format.isbn output } 'skip$ if$ new.block format.url output new.block format.note output fin.entry } FUNCTION {incollection} { output.bibitem format.authors "author" output.check author format.key output format.date "year" output.check date.block format.title "title" output.check new.block crossref missing$ { format.in.ed.booktitle "booktitle" output.check format.bvolume output format.number.series output format.chapter.pages output new.sentence format.publisher.address output format.edition output format.isbn output } { format.incoll.inproc.crossref output.nonnull format.chapter.pages output } if$ new.block format.url output new.block format.note output fin.entry } FUNCTION {inproceedings} { output.bibitem format.authors "author" output.check author format.key output format.date "year" output.check date.block format.title "title" output.check new.block crossref missing$ { format.in.ed.booktitle "booktitle" output.check format.bvolume output format.number.series output format.pages output new.sentence publisher empty$ { format.organization.address output } { organization "organization" bibinfo.check output format.publisher.address output } if$ format.isbn output format.issn output } { format.incoll.inproc.crossref output.nonnull format.pages output } if$ new.block format.url output new.block format.note output fin.entry } FUNCTION {conference} { inproceedings } FUNCTION {manual} { output.bibitem format.authors output author format.key output format.date "year" output.check date.block format.btitle "title" output.check organization address new.block.checkb organization "organization" bibinfo.check output address "address" bibinfo.check output format.edition output new.block format.url output new.block format.note output fin.entry } FUNCTION {mastersthesis} { output.bibitem format.authors "author" output.check author format.key output format.date "year" output.check date.block format.btitle "title" output.check new.block bbl.mthesis format.thesis.type output.nonnull school "school" bibinfo.warn output address "address" bibinfo.check output new.block format.url output new.block format.note output fin.entry } FUNCTION {misc} { output.bibitem format.authors output author format.key output format.date "year" output.check date.block format.title output new.block howpublished "howpublished" bibinfo.check output new.block format.url output new.block format.note output fin.entry } FUNCTION {phdthesis} { output.bibitem format.authors "author" output.check author format.key output format.date "year" output.check date.block format.btitle "title" output.check new.block bbl.phdthesis format.thesis.type output.nonnull school "school" bibinfo.warn output address "address" bibinfo.check output new.block format.url output new.block format.note output fin.entry } FUNCTION {proceedings} { output.bibitem format.editors output editor format.key output format.date "year" output.check date.block format.btitle "title" output.check format.bvolume output format.number.series output new.sentence publisher empty$ { format.organization.address output } { organization "organization" bibinfo.check output format.publisher.address output } if$ format.isbn output format.issn output new.block format.url output new.block format.note output fin.entry } FUNCTION {techreport} { output.bibitem format.authors "author" output.check author format.key output format.date "year" output.check date.block format.title "title" output.check new.block format.tr.number output.nonnull institution "institution" bibinfo.warn output address "address" bibinfo.check output new.block format.url output new.block format.note output fin.entry } FUNCTION {unpublished} { output.bibitem format.authors "author" output.check author format.key output format.date "year" output.check date.block format.title "title" output.check new.block format.url output new.block format.note "note" output.check fin.entry } FUNCTION {default.type} { misc } READ FUNCTION {sortify} { purify$ "l" change.case$ } INTEGERS { len } FUNCTION {chop.word} { 's := 'len := s #1 len substring$ = { s len #1 + global.max$ substring$ } 's if$ } FUNCTION {format.lab.names} { 's := "" 't := s #1 "{vv~}{ll}" format.name$ s num.names$ duplicate$ #2 > { pop$ " " * bbl.etal emphasize * } { #2 < 'skip$ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = { " " * bbl.etal emphasize * } { " \& " * s #2 "{vv~}{ll}" format.name$ * } if$ } if$ } if$ } FUNCTION {author.key.label} { author empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { author format.lab.names } if$ } FUNCTION {author.editor.key.label} { author empty$ { editor empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { editor format.lab.names } if$ } { author format.lab.names } if$ } FUNCTION {editor.key.label} { editor empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { editor format.lab.names } if$ } FUNCTION {calc.short.authors} { type$ "book" = type$ "inbook" = or 'author.editor.key.label { type$ "proceedings" = 'editor.key.label 'author.key.label if$ } if$ 'short.list := } FUNCTION {calc.label} { calc.short.authors short.list "(" * year duplicate$ empty$ { pop$ "????" } 'skip$ if$ * 'label := } FUNCTION {sort.format.names} { 's := #1 'nameptr := "" s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr "{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := nameptr #1 > { " " * namesleft #1 = t "others" = and { "zzzzz" * } { t sortify * } if$ } { t sortify * } if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } FUNCTION {sort.format.title} { 't := "A " #2 "An " #3 "The " #4 t chop.word chop.word chop.word sortify #1 global.max$ substring$ } FUNCTION {author.sort} { author empty$ { key empty$ { "to sort, need author or key in " cite$ * warning$ "" } { key sortify } if$ } { author sort.format.names } if$ } FUNCTION {author.editor.sort} { author empty$ { editor empty$ { key empty$ { "to sort, need author, editor, or key in " cite$ * warning$ "" } { key sortify } if$ } { editor sort.format.names } if$ } { author sort.format.names } if$ } FUNCTION {editor.sort} { editor empty$ { key empty$ { "to sort, need editor or key in " cite$ * warning$ "" } { key sortify } if$ } { editor sort.format.names } if$ } FUNCTION {presort} { calc.label label sortify " " * type$ "book" = type$ "inbook" = or 'author.editor.sort { type$ "proceedings" = 'editor.sort 'author.sort if$ } if$ #1 entry.max$ substring$ 'sort.label := sort.label * " " * title field.or.null sort.format.title * #1 entry.max$ substring$ 'sort.key$ := } ITERATE {presort} SORT STRINGS { last.label next.extra } INTEGERS { last.extra.num number.label } FUNCTION {initialize.extra.label.stuff} { #0 int.to.chr$ 'last.label := "" 'next.extra := #0 'last.extra.num := #0 'number.label := } FUNCTION {forward.pass} { last.label label = { last.extra.num #1 + 'last.extra.num := last.extra.num int.to.chr$ 'extra.label := } { "a" chr.to.int$ 'last.extra.num := "" 'extra.label := label 'last.label := } if$ number.label #1 + 'number.label := } FUNCTION {reverse.pass} { next.extra "b" = { "a" 'extra.label := } 'skip$ if$ extra.label 'next.extra := extra.label duplicate$ empty$ 'skip$ { "{\natexlab{" swap$ * "}}" * } if$ 'extra.label := label extra.label * 'label := } EXECUTE {initialize.extra.label.stuff} ITERATE {forward.pass} REVERSE {reverse.pass} FUNCTION {bib.sort.order} { sort.label " " * year field.or.null sortify * " " * title field.or.null sort.format.title * #1 entry.max$ substring$ 'sort.key$ := } ITERATE {bib.sort.order} SORT FUNCTION {begin.bib} { preamble$ empty$ 'skip$ { preamble$ write$ newline$ } if$ "\begin{thebibliography}{" number.label int.to.str$ * "}" * write$ newline$ "\providecommand{\natexlab}[1]{#1}" write$ newline$ "\providecommand{\url}[1]{\texttt{#1}}" write$ newline$ "\providecommand{\urlprefix}{URL }" write$ newline$ "\providecommand{\selectlanguage}[1]{\relax}" write$ newline$ } EXECUTE {begin.bib} EXECUTE {init.state.consts} ITERATE {call.type$} FUNCTION {end.bib} { newline$ "\end{thebibliography}" write$ newline$ } EXECUTE {end.bib} %% End of customized bst file %% %% End of file `cc2.bst'. %CC2BST> % % \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