% \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}
% \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/01/25 v2.10
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
\end{tabular}
\par
}
\def\init@affils{%
\let\and\relax
\@oddaffiltrue
}
\def\extract@affils#1\and#2\@nil{%
\cc@ifempty{#1}{\let\next\gobble@nil}{%
\extract@affil#1\\\@nil
\let\next\extract@affils}%
\next#2\@nil}
% \end{macrocode}
% Each address is put in a \Lenv{@ffiliation} environment (defined
% below). The |\currentaddress| macro is defined with the knowledge
% of the author name (which is the first line of the address). Also
% the author name is typed in small capitals.
% \begin{macrocode}
\def\extract@affil#1\\#2\@nil{%
\def\currentaddress{\otheraddress
Current address of \textsc{\ignorespaces#1}:\\}%
\begin{@ffiliation}
\textsc{\ignorespaces#1}\\#2
\end{@ffiliation}
\affilsep}
% \end{macrocode}
% \begin{macro}{\otheraddress}
% \begin{macro}{\affilsep}
% The macro |\otheraddress| seperates two address blocks for one
% author. |\affilsep| simply decides whether to switch to the next
% column or to a new line in the surrounding \Lenv{tabular}.
% \changes{v2.01}{2001/01/23}{Changed odd affiliation seperator.
% Michael N{\"{u}}sken, Paderborn}
% \begin{macrocode}
\newcommand{\otheraddress}{\end{@ffiliation}\affilsep
\begin{@ffiliation}}
\def\affilsep{%
\if@oddaffil\odd@sep\@oddaffilfalse
\else\even@sep\@oddaffiltrue
\fi
}
\newif\if@oddaffil
\def\odd@sep{&}%
%\def\even@sep{\\*[\medskipamount]}%
\def\even@sep{\end{tabular}\par\begin{tabular}{@{}ll@{}}}%
% \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{environment}{@ffiliation}
% The environment \Lenv{@ffiliation} is used for each address
% block. It produces a minipage whose lines are set like verse
% lines: if a line is too long it continues indented.
% \begin{macrocode}
\newenvironment{@ffiliation}
{%
\minipage[t]{.48\hsize}
\dimen@\hsize \advance\dimen@ -1.5em
\everypar{\parshape 2 \z@ \hsize 1.5em \dimen@}%
\def\\{\unskip\par}%
}
{\strut\par\medskip\endminipage}
% \end{macrocode}
% \end{environment}
%
% \subsection{Page layout}
%
% The document's text width must be exactly 141~mm; its height must be exactly
% 213~mm from the top of caps in header to the baseline of the bottom line
% (disregarding descenders like `p' or `g' at the bottom).
% (Note that this is achieved by setting |\textheight| to 200~mm.)
% The abstract's width must be 120~mm.
% \changes{v2.01}{2001/02/22}{The text area is only changed if
% \lclo{cctextarea} is active. Michael N{\"{u}}sken, Paderborn}
% \changes{v2.01}{2001/08/20}{Removed bug: \cs{@abswidth} must always
% be defined. Michael N{\"{u}}sken, Paderborn}
% \begin{macrocode}
\if@cctextarea
\textwidth=141mm
\@abstrwidth=120mm
\textheight=200mm
\topmargin=0mm
\oddsidemargin=12mm
\evensidemargin=12mm
\marginparwidth=25mm
\headheight=1.25\headheight
\ifnum\@marginmode<\z@\@marginmode\z@\fi
\else
\@abstrwidth0.85\textwidth
\fi
% \end{macrocode}
% We fit the margins so that 1~in + |\oddsidemargin| + |\textwidth| +
% |\evensidemargin| + 1~in = |\paperwidth|. (Note that the margins
% are usually measured with an offset of 1~in on each side.)
% \begin{macrocode}
\typeout{Now adjusting margins.}
\ifcase\@marginmode
% marginmode 0
\AtEndOfClass{%
\oddsidemargin\paperwidth
\advance\oddsidemargin-2in
\advance\oddsidemargin-\textwidth
\advance\oddsidemargin-\evensidemargin}
\or
% marginmode 1
\AtEndOfClass{%
\oddsidemargin\paperwidth
\advance\oddsidemargin-2in
\advance\oddsidemargin-\textwidth
\evensidemargin=5mm
\advance\oddsidemargin-\evensidemargin}
\or
% marginmode 2
\AtEndOfClass{%
\oddsidemargin\paperwidth
\advance\oddsidemargin-2in
\advance\oddsidemargin-\textwidth
\oddsidemargin.5\oddsidemargin
\evensidemargin\oddsidemargin}
\fi
% \end{macrocode}
% Finally, the |\marginparwidth| is recalculated so that it does not
% fall off the paper.
% \begin{macrocode}
\AtEndOfClass{%
\marginparwidth1in
\advance\marginparwidth-5mm
\advance\marginparwidth-2\marginparsep
\ifdim\evensidemargin<\oddsidemargin
\advance\marginparwidth\evensidemargin
\else
\advance\marginparwidth\oddsidemargin
\fi
}
% \end{macrocode}
% In this document, we have marginmode
% \expandafter\the\csname @marginmode\endcsname{}
% \expandafter\ifcase\csname @marginmode\endcsname
% (classical margins)
% \or(print margins)
% \or(balanced margins)
% \fi
% which results in the
% following values:
% \begin{center}
% \makeatletter
% \def\themm#1{\dimen@5.6233568#1\relax\divide\dimen@ by 16
% \expandafter\@themmchk\the\dimen@0000\@@@
% \edef\@tempa{\noexpand\th@mm\the\dimen@}\@tempa}
% \def\@themmchk#1.#2#3#4#5#6\@@@{\if#5p\else\if#5t\else\ifnum#5>4
% \advance\dimen@.0005pt\fi\fi\fi}
% \def\@gobblethree#1#2#3{}
% \edef\@tempa{\noexpand\def\noexpand\th@mm##1\expandafter
% \@gobblethree\the\p@}\@tempa{\@gobblerest#1{0}0000mm}
% \def\@gobblerest#1.#2#3#4#5mm{#1.#2#3#4mm}
% \begin{tabular}[t]{l@{ = }r\VRULE}
% |\paperwidth| & \themm\paperwidth\\\hline
% |1in| & 25.400mm\\
% |\evensidemargin| & \themm\evensidemargin\\
% |\textwidth| & \themm\textwidth\\
% |\oddsidemargin| & \themm\oddsidemargin\\
% |1in| & 25.400mm\\\hline
% |\marginparsep| & \themm\marginparsep\\
% |\marginparwidth| & \themm\marginparwidth\\
% \end{tabular}\begin{tabular}[t]{l@{ = }r}
% |\paperheight| & \themm\paperheight\\\hline
% |1in| & 25.400mm\\
% |\topmargin| & \themm\topmargin\\
% |\headheight| & \themm\headheight\\
% |\headsep| & \themm\headsep\\
% |\textheight| & \themm\textheight\\
% |\footskip| & \themm\footskip\\
% \end{tabular}
% \end{center}
%
% \begin{macro}{\ps@cc}
% The page style \texttt{cc} is defined. It uses only running
% heads. On right (odd) pages, the title is written, on left
% (even) pages, the author(s) appear. Further, the page number on
% the outer side and the journal identification (if |\ccpublish|
% was used) are printed. Moreover, a head rule of width
% |\headrulewidth| is produced. Note that |\ccpublish| disables
% this.
% \begin{macrocode}
\newskip\headerindent \headerindent=10mm
\newdimen\headrulewidth \headrulewidth.4pt
\def\ps@cc{\let\@mkboth\markboth
\def\@oddhead{\vbox{\hbox to\textwidth{\reset@font\strut
{\small\@cctxt}%
\hfil
{\small
\@ifundefined{@titlehead}{%
\let\\\ %
\@title
}{%
\@titlehead
}}%
\hbox to\headerindent{\hfil\thepage}%
}%
\if@ccpublish\else
\kern2.6\p@
\hrule\@height\headrulewidth\kern-\headrulewidth
\kern-2.6\p@
\fi
\vskip\z@
}%
}%
\def\@oddfoot{}
\def\@evenhead{\vbox{\hbox to\textwidth{\reset@font\strut
\hbox to\headerindent{\thepage\hfil}%
{\small\@authorhead}%
\hfil
{\small\@cctxt}%
}%
\if@ccpublish\else
\kern2.6\p@
\hrule\@height\headrulewidth\kern-\headrulewidth
\kern-2.6\p@
\fi
\vskip\z@
}%
}%
\let\@evenfoot\@oddfoot
}
% \end{macrocode}
% \end{macro}
% Select \cc's page style at the end of the class.
% \begin{macrocode}
\AtEndOfClass{\pagestyle{cc}}
% \end{macrocode}
%
% If \Lclo{noautotitle} was not used, first and last page are
% generated automatically.
% \changes{v2.00}{2000/03/21}{Repairing \cs{cite} in \cs{Abstract}
% with option \protect\Lclo{natbib}. \cs{maketitle} must be
% executed only after \protect\Lpackage{natbib}'s
% \cs{AtBeginDocument} commands have been done.}
% \changes{v2.00}{2000/06/21}{Dirty trick. \cs{maketitle} must be
% called after all other things \cs{AtBeginDocument} (especially
% after those inserted by \protect\Lpackage{natbib}) in order to
% handle citations correctly. This is done via \cs{@onlypreamble}
% that disables the first token of its argument and executes the
% rest.}
% \begin{macrocode}
\AtEndOfClass{%
\AtBeginDocument{\@onlypreamble{\author{\if@autotitle\maketitle\fi}}}
%\AtBeginDocument{\if@autotitle\maketitle\fi}
\AtEndDocument{\if@autotitle\makeendtitle\fi}
}
% \end{macrocode}
%
% \begin{macro}{\maketitle}
% |\maketitle| generates the first page. It also produces errors
% or warnings if abstract, keywords, or subject are missing.
% \changes{v2.02}{2001/08/29}{Changed Abstract to quote. MN, Paderborn}
% \changes{v2.03}{2005/08/27}{Changed Abstract to @abstr. MN, Bonn}
% \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.05}{2010/01/25}{Requiring ccaux now.}
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{ccalgo}[2005/08/27 v2.05
algorithm environment for cc. Michael Nuesken, Bonn.]
\RequirePackage{ccaux}
% \end{macrocode}
% Next we undefine some macros in case of overloading.
% \begin{macrocode}
\let\namedalgorithm\@undefined
\let\endnamedalgorithm\@undefined
\let\algorithm\@undefined
\let\endalgorithm\@undefined
% \end{macrocode}
%
% For a dirty trick below we rely on the specific implementation of
% |\@item|. Thus we verify it!
% \begin{macrocode}
{\def\algonumerate@item[#1]{%
\if@noparitem
\@donoparitem
\else
\if@inlabel
\indent \par
\fi
\ifhmode
\unskip\unskip \par
\fi
\if@newlist
\if@nobreak
\@nbitem
\else
\addpenalty\@beginparpenalty
\addvspace\@topsep
\addvspace{-\parskip}%
\fi
\else
\addpenalty\@itempenalty
\addvspace\itemsep
\fi
\global\@inlabeltrue
\fi
\everypar{%
\@minipagefalse
\global\@newlistfalse
\if@inlabel
\global\@inlabelfalse
{\setbox\z@\lastbox
\ifvoid\z@
\kern-\itemindent
\fi}%
\box\@labels
\penalty\z@
\fi
\if@nobreak
\@nobreakfalse
\clubpenalty \@M
\else
\clubpenalty \@clubpenalty
\everypar{}%
\fi}%
\if@noitemarg
\@noitemargfalse
\if@nmbrlist
\refstepcounter\@listctr
\fi
\fi
\sbox\@tempboxa{\makelabel{#1}}%
% \end{macrocode}
% We require that |\global| follows this |\makelabel| to insert a hook.
% \begin{macrocode}
\global\setbox\@labels\hbox{%
\unhbox\@labels
\hskip \itemindent
\hskip -\labelwidth
\hskip -\labelsep
\ifdim \wd\@tempboxa >\labelwidth
\box\@tempboxa
\else
\hbox to\labelwidth {\unhbox\@tempboxa}%
\fi
\hskip \labelsep}%
\ignorespaces}
\ifx\algonumerate@item\@item\else
\PackageWarningNoLine{ccalgo}{%
Command \protect\@item\space has changed.\MessageBreak
Check if current package is valid}
\fi}
% \end{macrocode}
% We load Frank Mittelbach's theorem style, \cc's add-on and the
% \Lpackage{relabel} package. (The latter is for adding prefixes to
% labels and thelike.)
% \begin{macrocode}
\RequirePackage{theorem}
\RequirePackage{thcc}
\RequirePackage{relabel}
% \end{macrocode}
%
% This macro restores the parshape of the current list.
% \begin{macrocode}
\def\list@parshape{%
%%\typeout{parshape 1 \the\@totalleftmargin+\the\linewidth}%
\parshape \@ne \@totalleftmargin \linewidth}
% \end{macrocode}
% Reinitializing the list means to readjust the left margin while
% leaving the position of the list's labels fixed.
% \begin{macrocode}
\newdimen\reinit@list@last
\def\reinit@list#1{%
\advance\itemindent\reinit@list@last
\advance\@totalleftmargin-\reinit@list@last
\advance\linewidth\reinit@list@last
\global\reinit@list@last#1\relax
\ifdim\reinit@list@last>\algonumerate@maxindent
\global\reinit@list@last\algonumerate@maxindent\fi
\advance\itemindent-\reinit@list@last
\advance\@totalleftmargin\reinit@list@last
\advance\linewidth-\reinit@list@last
%%\typeout{\the\@totalleftmargin + \the\linewidth}%
\list@parshape}
% \end{macrocode}
% Often reinitialization is needed with respect to the label's
% width.
% \begin{macrocode}
\def\reinit@list@label{%
\reinit@list{\wd\@tempboxa}%
}
% \end{macrocode}
% \begin{macro}{\makealgolabel}
% The standard format of the labels is the number followed by a dot.
% \begin{macrocode}
\newcommand{\makealgolabel}[1]{#1.}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\makeoptalgolabel}
% A special label is surrounded by parentheses.
% \begin{macrocode}
\newcommand{\makeoptalgolabel}[1]{(#1)}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\makeoptalgocurrentlabel}
% This macro is used to produce the |\bare| reference form for a
% special label.
% \begin{macrocode}
\let\makeoptalgocurrentlabel\makeoptalgolabel
% \end{macrocode}
% \end{macro}
%
% \subsection{The \Lenv{algonumerate} environment}
%
% This environment is the basis of the algorithm environment. It
% allows some items with names (as |Input|, |Output|) which have a
% special indention. These named and the following numbered items
% are separated by a |\medskip|.
%
% We need a counter. By default we do not use a prefix.
% \begin{macrocode}
\newcounter{algonumerate}
\defprefix{algonumerate}{}
% \end{macrocode}
% This count is the number of named items.
% \begin{macrocode}
\newcount\algonumerate@items
% \end{macrocode}
% Formatting the counter.
% \begin{macrocode}
\renewcommand{\thealgonumerate}{%
\expandafter\ifnum\value{algonumerate}<\@ne
\algonumfield%
\else
\arabic{algonumerate}\fi}%
% \end{macrocode}
% This macro returns the name corresponding to the counter
% |algonumerate|. The macro |\@algonumfield| should be
% defined using |\ifcase-#1| \dots{} |\fi| and return the
% corresponding name. This is done be |\algonumerateinit|, see
% below.
% \begin{macrocode}
\def\algonumfield{\ignorespaces
\ifx\@algonumfield\relax\else
\expandafter\@algonumfield\csname c@algonumerate\endcsname\fi
\unskip}
% \end{macrocode}
% A toggle to distinguish special labels and numbered labels.
% \begin{macrocode}
\newif\if@speciallabel
% \end{macrocode}
% This macro produces the labels in all cases.
% \begin{macrocode}
\newcommand{\labelalgonumerate}{%
\count@\value{algonumerate}%
\ifnum\count@<\z@
\algonumfield:%
\else
\makealgolabel{\thealgonumerate}\fi
}%
% \end{macrocode}
% These two dimensions define the width of a label and its distance
% to the text.
% \begin{macrocode}
\newdimen\algo@labelsep
\newdimen\steplabelwidth
% \end{macrocode}
% This token list is executed at the next |\item|.
% \begin{macrocode}
\newtoks\AtNextItem
% \end{macrocode}
% A toggle noting whether the named items are complete or not.
% \begin{macrocode}
\newif\if@requireditemscomplete
% \end{macrocode}
% This is |\makelabel| for our list. It produces the label,
% inserts the hook and makes all necessary modifications.
% \begin{macrocode}
\newcommand{\algonumerate@label}[1]{%
% \end{macrocode}
% Decide whether this is a special item and set the corresponding
% toggle.
% \begin{macrocode}
\def\@tempa{#1}\def\@tempc{\@itemlabel}%
%%\show\@tempa\show\@tempc
\ifx\@tempa\@tempc\global\@speciallabelfalse
\else\global\@speciallabeltrue\fi
% \end{macrocode}
% Distinguish cases: named items, first non-named items, numbered items,
% and special (labelled) items.
% \begin{macrocode}
\expandafter\ifnum\value{algonumerate}<\z@
% \end{macrocode}
% A named item's label is simply typeset with some space.
% \begin{macrocode}
#1\hskip\algo@labelsep%
\else
\ifx\@tempa\@empty
% \end{macrocode}
% An empty special item's label remains invisible.
% \begin{macrocode}
\hskip\steplabelwidth\hskip\algo@labelsep
\else
% \end{macrocode}
% A non-named item's label is typeset in a box using
% |\makeoptalgolabel| to format a special label.
% \begin{macrocode}
\hb@xt@\steplabelwidth{\hss
\hb@xt@\steplabelwidth{\hfill
\if@speciallabel
\makeoptalgolabel{#1}%
\else
#1%
\fi
}}\hskip\algo@labelsep%
\fi\fi
% \end{macrocode}
%
% The following two lines are a dirty trick!!! This establishes
% the hook.
% \begin{macrocode}
\global\let\algonumerate@global\global
\gdef\global{\algonumerate@global\let\global\algonumerate@global
% \end{macrocode}
% This code is then executed in the |\item| command outside any
% extra groups.
%
% First, we handle the boundary between named and numbered items.
% \begin{macrocode}
\expandafter\count@\value{algonumerate}%
%%{\tracingall\nonstopmode\showbox\@tempboxa}%
% \end{macrocode}
% The counter jumpes over the value $0$.
% \begin{macrocode}
\ifnum\count@=\m@ne
\stepcounter{algonumerate}%
\fi
% \end{macrocode}
% Test whether we bypassed the boundary and issue |\medskip| once.
% \begin{macrocode}
\ifnum\count@=\z@
\if@requireditemscomplete\else
\global\@requireditemscompletetrue
\ifnum\algonumerate@items>\z@\medskip\fi
\fi
\fi
\ifnum\count@=\@ne
\if@requireditemscomplete\else
\global\@requireditemscompletetrue
\ifnum\algonumerate@items>\z@\medskip\fi
\fi
\fi
% \end{macrocode}
% To enable referencing of special label's we need to define
% |\@currentlabel| and (for the |\bare| version)
% |\@bare@currentlabel|.
% \begin{macrocode}
\if@speciallabel
\protected@edef\@currentlabel{\csname p@\@listctr\endcsname
{\makeoptalgocurrentlabel{#1}}}%
\protected@edef\@bare@currentlabel{#1}%
\fi
% \end{macrocode}
% Remember the reference globally. (This is used in the
% \Lenv{block} environment below.)
% \begin{macrocode}
\global\let\latest@item@currentlabel\@currentlabel
\global\let\latest@item@bare@currentlabel\@bare@currentlabel
% \end{macrocode}
% Reset the special label toggle.
% \begin{macrocode}
\global\@speciallabeltrue
% \end{macrocode}
% Execute |\AtNextItem| once.
% \begin{macrocode}
\the\AtNextItem \global\AtNextItem{}%
% \end{macrocode}
% Reinitialize the list indentions.
% \begin{macrocode}
\reinit@list@label
% \end{macrocode}
% Execute the |\global| which was used to implement this hook.
% \begin{macrocode}
\global}%
}
% \end{macrocode}
%
% Named items will be indented as far as the label, unless this
% exceeds the maximal value stored in |\algonumerate@maxindent|.
% Its default value is $20\%$ of the |\textwidth|.
% \begin{macrocode}
\newdimen\algonumerate@maxindent
\AtBeginDocument{\ifdim\algonumerate@maxindent=\z@
\algonumerate@maxindent.2\textwidth\fi}
% \end{macrocode}
% \begin{macro}{\algonumerateinit}
% This macro prepares all things for the named items. Its argument
% is just the comma separated list of the names.
% \begin{macrocode}
\def\algonumerateinit#1{%
\def\@algonumfield{}%
\let\ccorg@or\or\let\or\relax
\algonumerate@items\z@
\@for\@tempa:=#1\do{%
\advance\algonumerate@items\@ne
\@temptokena\expandafter{\@tempa}%
\toks@\expandafter{\@algonumfield}%
\edef\@algonumfield{\the\@temptokena\or\the\toks@}%
}%
\let\or\ccorg@or
\toks@\expandafter{\@algonumfield}%
\edef\@algonumfield##1{\noexpand\ifcase-##1\noexpand\or
\the\toks@\noexpand\fi}%
% \typeout{Starting ...}%
}
% \end{macrocode}
% \end{macro}
%
% \begin{environment}{algonumerate}
% Finally, we define the environment \Lenv{algonumerate}. Apart
% from initiation the list, it also activates the environments
% \Lenv{block} (aka \Lenv{body}), \Lenv{range}, \Lenv{indention},
% and \Lenv{meta}.
% \begin{macrocode}
\newenvironment{algonumerate}{%
\if@inlabel~\fi\par
\list{\labelalgonumerate}{%
\usecounter{algonumerate}%
\let\makelabel\algonumerate@label
\parsep\z@%
\topsep\z@%
\itemsep\z@%
\parskip\z@%
%\leftmargin\z@
%\algo@labelsep\labelsep
%\labelsep\z@
\leftmargin\labelsep
\algo@labelsep\z@
\settowidth\steplabelwidth{\makealgolabel{99}}%
\labelwidth\z@
\global\reinit@list@last\z@
}%
\setcounter{algonumerate}{-\algonumerate@items}%
\ifnum\algonumerate@items>\z@
\addtocounter{algonumerate}\m@ne
\global\@requireditemscompletefalse
\else
\global\@requireditemscompletetrue
\fi
\setcounter{block@cnt}\z@
\let\step\algo@step
\let\block\algo@block
\let\endblock\endalgo@block
\let\range\algo@range
\let\endrange\endalgo@range
\let\indention\algo@indention
\let\endindention\endalgo@indention
\let\body\algo@block
\let\endbody\endalgo@block
\let\meta\algo@meta
\let\endmeta\endalgo@meta
}{%
\endlist\vskip\topskip}
% \end{macrocode}
% \end{environment}
%
% The \Lenv{indention} environment indents the steps inside it by an
% amount of |\blockindent|. Its default value is |\parindent|.
% \begin{macrocode}
\newdimen\blockindent \blockindent\parindent
% \end{macrocode}
% \begin{macro}{\nextblock}
% This is just a counter for internal use. |\nextblock| stores
% locally a new value in |\currentblock|. See the sophisticated
% things below on how to use this.
% \begin{macrocode}
\newcounter{block@cnt}
\newcommand{\nextblock}{%
\stepcounter{block@cnt}\edef\currentblock{\arabic{block@cnt}}%
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\refsetrange}
% This sets the current reference to the range of argument 1 to
% argument 2, each argument is interpreted as a \meta{subkey}. The
% current reference will be empty if the range is known to be
% trivial.
% \begin{macrocode}
\newif\if@trivialrange
\newcommand{\refsetrange}[2]{%
{\shortlabeltrue
\let\@tempa\relax
\protected@edef\@tempa{%
\csname r@\the\algorithmmasterkey-#1\endcsname}%
%%\show\@tempa
\let\@tempc\relax
\protected@edef\@tempc{%
\csname r@\the\algorithmmasterkey-#2\endcsname}%
%%\show\@tempc
\ifx\@tempa\@tempc\global\@trivialrangetrue
\else\global\@trivialrangefalse\fi
}%
\if@trivialrange
\protected@edef\@currentlabel{}%
\else
\protected@edef\@currentlabel{%
\csname p@\@listctr\endcsname{%
\protect\short\protect\ref{\the\algorithmmasterkey-#1}%
--%
\protect\short\protect\ref{\the\algorithmmasterkey-#2}%
}}%
\fi
\protected@edef\@bare@currentlabel{%
\protect\bare\protect\ref{\the\algorithmmasterkey-#1}%
--%
\protect\bare\protect\ref{\the\algorithmmasterkey-#2}%
}%
}
% \end{macrocode}
% \end{macro}
% Note: the following environments are defined with a prefix |algo@|
% in their names since they should not be available outside the
% \Lenv{algonumerate} environment.
% \begin{environment}{range}
% A |\label| (or an |\algolabel|) after the |\begin{range}| will
% refer to the \emph{range} of items inside the environment.
% \begin{macrocode}
\newenvironment{algo@range}{%
\par
\stepcounter{block@cnt}\edef\block@{\arabic{block@cnt}}%
\refsetrange{bob\block@}{eob\block@}%
\AtNextItem{\algolabel{bob\block@}}%
}{%
\algolabel{eob\block@}%
\par
\global\let\algo@block@currentlabel\@currentlabel
\global\let\algo@block@bare@currentlabel\@bare@currentlabel
\aftergroup\algo@endrange@aftergroup
}
% \end{macrocode}
% \end{environment}
% This command restores the latest reference to the latest
% encountered item.
% \begin{macrocode}
\def\algo@endrange@aftergroup{%
% \let\@currentlabel\algo@block@currentlabel
% \let\@bare@currentlabel\algo@block@bare@currentlabel
\let\@currentlabel\latest@item@currentlabel
\let\@bare@currentlabel\latest@item@bare@currentlabel
% [Restored \@bare@currentlabel]
}
% \end{macrocode}
% \begin{environment}{indention}
% The items inside this environment are indented by an amount of
% |\blockindent|.
% \begin{macrocode}
\newenvironment{algo@indention}{%
\par
\if@requireditemscomplete
\advance\leftmargin\blockindent
\advance\labelsep\blockindent
\advance\@totalleftmargin\blockindent
\advance\linewidth-\blockindent
\def\algo@indention@undo{%
\advance\leftmargin-\blockindent
\advance\labelsep-\blockindent
\advance\@totalleftmargin-\blockindent
\advance\linewidth\blockindent
}
\list@parshape
\else
\let\algo@indention@undo\relax
\fi
}{%
\par
\algo@indention@undo
% \advance\leftmargin-\blockindent
% \advance\labelsep-\blockindent
% \advance\@totalleftmargin-\blockindent
% \advance\linewidth\blockindent
\list@parshape
\aftergroup\list@parshape
\global\let\algo@block@currentlabel\@currentlabel
\global\let\algo@block@bare@currentlabel\@bare@currentlabel
\aftergroup\algo@endrange@aftergroup
}
% \end{macrocode}
% \end{environment}
% \begin{environment}{block}
% This combines the environment \Lenv{indention} and \Lenv{range}.
% \begin{macrocode}
\newif\ifindented@block
\newenvironment{algo@block}{%
\indented@blockfalse
\if@requireditemscomplete\indented@blocktrue\fi
\ifindented@block\algo@indention
\else
\sbox\@tempboxa{\makelabel{}}%
\fi
\algo@range}{%
\endalgo@range
\ifindented@block\endalgo@indention\fi
}
% \end{macrocode}
% \end{environment}
% \begin{environment}{meta}
% This environment allows to insert comment-like things in
% algorithms. It is indented by an amount of |meta@indent| which
% defaults to |0pt|.
% \begin{macrocode}
\newdimen\meta@indent
\newenvironment{algo@meta}{%
\@newlistfalse
\vskip\topskip
\par
%%\meta@indent\leftmargin
%%\advance\meta@indent\algo@labelsep
%%\advance\meta@indent\steplabelwidth
\meta@indent\@totalleftmargin
\advance\labelsep-\meta@indent
\advance\@totalleftmargin-\meta@indent
\advance\linewidth\meta@indent
\advance\leftmargin-\meta@indent
\list@parshape
}{%
\vskip\topskip
\par
\advance\labelsep\meta@indent
\advance\@totalleftmargin\meta@indent
\advance\linewidth-\meta@indent
\advance\leftmargin\meta@indent
\aftergroup\list@parshape
}
% \end{macrocode}
% \end{environment}
%
% \begin{macro}{\step}
% This macro, only available inside \Lenv{algonumerate}, is
% essentially a combination of |\item| and |\algolabel|.
% \begin{macrocode}
\newcommand{\algo@step}[2][]{%
\expandafter\ifnum\value{algonumerate}<\m@ne
\PackageError{ccalgo}{Missing \protect\item}{}%
\fi
\cc@ifempty{#1}{\item}{\item[#1]}%
\def\@tempa{#2}\ifx\@tempa\@empty\else\algolabel{#2}\fi%
}
% \end{macrocode}
% \end{macro}
%
% \subsection{Algorithm environments}
%
% Here we define the central environment to typeset algorithms.
%
% First, we need some preperation. The token list |\algotitle|
% allows the use of another name each time \Lenv{namedalgorithm} is used.
% \begin{macrocode}
\newtoks\algotitle
% \end{macrocode}
% The theorem like environment \Lenv{named@lg@r@thm*} is responsible
% for the outer layout of unnumbered algorithms. The theorem style
% used comes from the package \Lpackage{thcc}.
% \begin{macrocode}
\theorembodyfont{}%
\theoremstyle{ccalgonn}
\newtheorem{named@lg@r@thm*}{\the\algotitle}
\defprefix{named@lg@r@thm*}#1{\the\algotitle}
% \end{macrocode}
% The theorem like environment \Lenv{named@lg@r@thm} is responsible
% for the outer layout of numbered algorithms. The theorem style
% used comes from the package \Lpackage{thcc}. We ensure that the
% counter used is the same as the one used for equations.
% \changes{v2.03}{2002/02/01}{Removed a bug, now
% \cs{thenamed@lg@r@thm} equals \cs{thenamedth@@r@m}.}
% \begin{macrocode}
\theoremstyle{ccalgo}
\newtheorem{named@lg@r@thm}{\the\algotitle}
\defprefix{named@lg@r@thm}#1{\the\algotitle~#1}
\let\c@named@lg@r@thm\c@namedth@@r@m
\let\thenamed@lg@r@thm\thenamedth@@r@m
% \end{macrocode}
%
% \begin{environment}{namedalgorithm}
% This combines all necessary to typeset an algorithm.
% The environment takes up to four arguments. The first argument
% is the \meta{heading}, in the standard |Algorithm|. The second
% argument is optional and gives a comma separated list of titles
% of required items. It defaults to |Input,Output|. The third
% argument is the \meta{master-key} which is used to produce a
% reference to the algorithm and in |\algolabel| to prefix
% references inside the algorithm. The forth argument is again
% optional and specifies a title.
% \begin{macrocode}
\babel\def\babelInput{Input}[german=Eingabe,french=Entr\'ee]
\babel\def\babelOutput{Output}[german=Ausgabe,french=Sortie]
\babel\def\babelstep{step}[german=Schritt,french=pas]%% ??? pas?
\babel\def\babelStep{Step}[german=Schritt,french=Pas]%% ??? pas?
\newtoks\algorithmmasterkey
\newenvironment{namedalgorithm}[1]{%
\pagebreak[3]%
\def\algo@theorem{named@lg@r@thm}%
\algotitle{#1}%
\n@medalgorithm}
{\endalgonumerate\csname end\algo@theorem\endcsname}
\newenvironment{namedalgorithm*}[1]{%
\def\algo@theorem{named@lg@r@thm*}%
\algotitle{#1}%
\n@medalgorithm}
{\endalgonumerate\csname end\algo@theorem\endcsname}
\newcommand{\n@medalgorithm}[2][\babelInput,\protect\babelOutput]{%
\algonumerateinit{#1}%
\algorithmmasterkey{#2}%
\edef\@tempa{\the\algorithmmasterkey}\ifx\@tempa\@empty
\PackageError{ccalgo}{Empty key for algorithm like environment}{}\fi%
\n@m@d@lgorithm}
\newcommand{\n@m@d@lgorithm}[1][]{%
\def\@tempa{#1}%
\ifx\@tempa\@empty\csname\algo@theorem\endcsname
\else\csname\algo@theorem\endcsname[#1]\fi%
\label{\the\algorithmmasterkey}%
\algo@keywords
\defprefix{algonumerate}{%
\Iflabelchanged{\algo@theorem}{\uselabel{\algo@theorem} %
\ifnum\c@algonumerate>\z@ \babelstep~\fi}}%
% not good, since blocks need shorter labels!
% \defprefix{algonumerate}##1{%
% Step~##1\Iflabelchanged{\algo@theorem}
% { of \uselabel{\algo@theorem}}}%
\algonumerate
}%
% \end{macrocode}
% \end{environment}
%
% \begin{macro}{\algolabel}
% This macro allows to define references locally, it uses the
% \meta{masterkey} which is an argument to the
% \Lenv{namedalgorithm} environment.
% \begin{macrocode}
\def\algolabel#1{\label{\the\algorithmmasterkey-#1}}%
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\stepref}
% This macro allows to reference the labels defined by |\algolabel|
% in a nice way. Its two arguments are the \meta{masterkey} and
% the \meta{subkey}.
% \begin{macrocode}
\newcommand{\stepref}[2]{\babelStep~\short\ref{#1-#2} in \whole\ref{#1}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\newalgorithm}
% As |\newtheorem| allows to define new theorem like environments,
% this macro allows to define new algorithm like environments in
% fixing the first two arguments of the environment
% \Lenv{namedalgorithm}. At the same time a starred version is
% defined.
% \changes{v2.01}{2000/11/07}{Removed a bug from \cs{n@walgorithm}.}
% \begin{macrocode}
\newcommand{\newalgorithm}[2]{%
\def\newalgo@name{#1}%
\def\newalgo@title{#2}%
\n@walgorithm}
\newcommand{\n@walgorithm}[1][\babelInput,\protect\babelOutput]{%
\protected@edef\@tempa{%
\noexpand\newenvironment{\newalgo@name}%
{\noexpand\namedalgorithm{\newalgo@title}[\noexpand#1]}%
{\noexpand\endnamedalgorithm}%
\noexpand\newenvironment{\newalgo@name*}%
{\noexpand\csname namedalgorithm*\endcsname
{\newalgo@title}[\noexpand#1]}%
{\noexpand\csname endnamedalgorithm*\endcsname}%
}\@tempa
}
% \end{macrocode}
% \end{macro}
%
% \begin{environment}{algorithm}
% This is the standard case algorithm like environment. Its title
% is |\algorithmname| and its required (named) items are |Input|
% and |Output|.
% \begin{macrocode}
\babel\def\algorithmname{Algorithm}[%
german=Algorithmus,french=Algorithme]
\newalgorithm{algorithm}{\protect\algorithmname}
% \end{macrocode}
% \changes{v2.01}{2000/09/23}{Added \cs{CALL}.}
%
% Keywords in algorithms are typeset by the command
% |\keyword{|\meta{keyword}|}|. Some keywords are predefined. All
% these things are only accessible inside algorithm like
% environments.
% \changes{v2.01}{2004/01/26}{Babelized algo@keywords.}
% \begin{macrocode}
\def\algo@keywords{%
\def\keyword##1{\textsf{##1} \ignorespaces}%
\babel\def\FOR{\keyword{For}}[german=\keyword{F{\"{u}}r}]%
\babel\def\DO{\keyword{do}}[german=\keyword{erledige}]%
\babel\def\endFOR{}[]%
\babel\def\WHILE{\keyword{While}}[german=\keyword{Solange}]%
\babel\def\endWHILE{}[]%
\babel\def\REPEAT{\keyword{Repeat}}[german=\keyword{Wiederhole}]%
\babel\def\UNTIL{\keyword{Until}}[german=\keyword{Bis}]%
\babel\def\IF{\keyword{If}}[german=\keyword{Falls}]%
\babel\def\THEN{\keyword{then}}[german=\keyword{dann}]%
\babel\def\ELIF{\keyword{Else if}}[german=\keyword{Sonst wenn}]%
\babel\def\ELSE{\keyword{Else}}[german=\keyword{Sonst}]%
\babel\def\endIF{}[]%
\babel\def\CALL{\keyword{Call}}[german=\keyword{Rufe}]%
\babel\def\RETURN{\keyword{Return}}[german=\keyword{Antworte}]%
\expandafter\selectlanguage\expandafter{\languagename}
\def\COMMENT##1{$\{$ ##1 $\}$}%
}
% \end{macrocode}
% \end{environment}
%
% \subsection{Some sophisticated environments for algorithms}
%
% \begin{macro}{\optitem}
% This is a helper for the following sophisticated environments.
% It issues an |\item| if necessary, and omits it otherwise.
% \begin{macrocode}
\newcommand{\optitem}[1]{%
\cc@ifempty{#1}{\if@inlabel\par\else\item\fi}{\item[#1]}%
}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\algoprettify}
% This is a helper for the following sophisticated environments.
% It formats a 3-term command like \cs{IF} \meta{condition}
% \cs{THEN} in a line or a multiline block depending on what is
% nicer.
% \begin{macrocode}
% \changes{v2.01}{2001/01/24}{Added \cs{algoprettify}. Michael
% N{\"{u}}sken, Paderborn}
\newcommand{\algoprettify}[3]{%
\setbox2\hbox{#1}%
\setbox4\hbox{#2}%
\setbox6\hbox{#3}%
\setbox0\hbox{\unhcopy2\unhcopy4{ }\unhcopy6}%
\ifdim\wd0<\linewidth
\unhbox0
\else
\dimen0=\linewidth \advance\dimen0 by -\wd2
\unhbox2\parbox[t]{\dimen0}{\unhbox4\strut}\par\unhbox6
\fi
}
% \end{macrocode}
% \end{macro}
%
% \begin{environment}{ifblock}
% This produces |\IF| block.
% \begin{macrocode}
\newenvironment{ifblock}[2][]
% \end{macrocode}
% What do we do at the |\begin|.
% \begin{macrocode}
{%
% \end{macrocode}
% First, add |\item| if there is no |\item| immediately before the
% \Lenv{ifblock}.
% \begin{macrocode}
\optitem{#1}%
% \end{macrocode}
% Then generate a new |\currentlabel| which is valid until the end
% of the \Lenv{ifblock}.
% \begin{macrocode}
\nextblock
% \end{macrocode}
% Set a reference on the actual item.
% \begin{macrocode}
\algolabel{if\currentblock}%
% \end{macrocode}
% Insert the text `|\IF|~\meta{condition}~|\THEN|'.
% |\algoprettify| takes care of a long \meta{condition}.
% \changes{v2.01}{2001/01/24}{Now \protect\Lenv{ifblock} and so on nicer for
% long conditions. Michael N{\"{u}}sken, Paderborn}
% \begin{macrocode}
\algoprettify{\IF}{#2}{\THEN}
% \end{macrocode}
% Begin the indention.
% \begin{macrocode}
\indention
% \end{macrocode}
% Define the value for the possibly following |\algolabel| or
% |\label|.
% \begin{macrocode}
\refsetrange{if\currentblock}{endif\currentblock}%
}
% \end{macrocode}
% What do we do at the |\end|.
% \begin{macrocode}
{%
% \end{macrocode}
% Set a reference to the last item in the environment.
% \begin{macrocode}
\algolabel{endif\currentblock}%
% \end{macrocode}
% End the indention.
% \begin{macrocode}
\endindention}
% \end{macrocode}
% \end{environment}
%
% \begin{environment}{elifblock}
% This produces an |\ELIF| block in the same manner as the |\IF| block.
% \begin{macrocode}
\newenvironment{elifblock}[2][]{%
\optitem{#1}%
\nextblock
\algoprettify{\ELIF}{#2}{\THEN}
\algolabel{elif\currentblock}%
\indention
\refsetrange{elif\currentblock}{endelif\currentblock}%
}{%
\algolabel{endelif\currentblock}%
\endindention}
% \end{macrocode}
% \end{environment}
%
% \begin{environment}{elseblock}
% The |\ELSE| block differs from the last two only in the fact that
% there is no condition.
% \begin{macrocode}
\newenvironment{elseblock}[1][]{%
\optitem{#1}%
\nextblock
\ELSE%
\algolabel{else\currentblock}%
\indention
\refsetrange{else\currentblock}{endelse\currentblock}%
}{%
\algolabel{endelse\currentblock}%
\endindention}
% \end{macrocode}
% \end{environment}
%
% \begin{environment}{forblock}
% A |\FOR| block typesets a loop `for \meta{control} do \dots'.
% Other than the previous environments we use \Lenv{block} rather
% than only \Lenv{indention} since the range of steps in the
% indented part is printed after the `do' (unless it is only one step).
% \begin{macrocode}
\newenvironment{forblock}[2][]{%
\optitem{#1}%
\nextblock
\algoprettify{\FOR}{#2}{%
\DO \short\ref{\the\algorithmmasterkey-body\currentblock}}%
\algolabel{for\currentblock}%
\block\algolabel{body\currentblock}%
\refsetrange{for\currentblock}{endfor\currentblock}%
}{%
\algolabel{endfor\currentblock}%
\endblock}
% \end{macrocode}
% \end{environment}
%
% \begin{environment}{whileblock}
% The |\WHILE| block is similar to the |\FOR| block: `while
% \meta{condition} do \dots'.
% \begin{macrocode}
\newenvironment{whileblock}[2][]{%
\optitem{#1}%
\nextblock
\algoprettify{\WHILE}{#2}{%
\DO \short\ref{\the\algorithmmasterkey-body\currentblock}}%
\algolabel{while\currentblock}%
\block
\algolabel{body\currentblock}%
\refsetrange{while\currentblock}{endwhile\currentblock}%
}{%
\algolabel{endwhile\currentblock}%
\endblock}
% \end{macrocode}
% \end{environment}
%
% \begin{environment}{untilblock}
% The |\UNTIL| block is similar to the |\FOR| block: `until
% \meta{condition} do \dots'.
% \begin{macrocode}
\newenvironment{untilblock}[2][]{%
\optitem{#1}%
\nextblock
\algoprettify{\UNTIL}{#2}{%
\DO \short\ref{\the\algorithmmasterkey-body\currentblock}}%
\algolabel{until\currentblock}%
\block
\algolabel{body\currentblock}%
\refsetrange{until\currentblock}{enduntil\currentblock}%
}{%
\algolabel{enduntil\currentblock}%
\endblock}
% \end{macrocode}
% \end{environment}
%
% \begin{environment}{blockuntil}
% The reverse |\UNTIL| block is similar to the |\UNTIL| block but
% the condition is checked at the end rather than at the beginning
% of the environment.
% \begin{macrocode}
\newenvironment{blockuntil}[2][]{%
\optitem{#1}%
\nextblock
\def\repeat@cond{#2}%
\REPEAT \short\ref{\the\algorithmmasterkey-body\currentblock}%
\algolabel{repeat\currentblock}%
\block
\algolabel{body\currentblock}%
\refsetrange{repeat\currentblock}{endrepeat\currentblock}%
}{%
\endblock
\item
\algolabel{endrepeat\currentblock}%
\algoprettify{\UNTIL}{\repeat@cond}{}}
% \end{macrocode}
% \end{environment}
%
% \begin{environment}{blockwhile}
% The reverse |\WHILE| block is similar to the |\WHILE| block but
% the condition is checked at the end rather than at the beginning
% of the environment.
% \begin{macrocode}
\newenvironment{blockwhile}[2][]{%
\optitem{#1}%
\nextblock
\def\repeat@cond{#2}%
\REPEAT \short\ref{\the\algorithmmasterkey-body\currentblock}%
\algolabel{repeat\currentblock}%
\block
\algolabel{body\currentblock}%
\refsetrange{repeat\currentblock}{endrepeat\currentblock}%
}{%
\endblock
\item
\algolabel{endrepeat\currentblock}%
\algoprettify{\WHILE}{\repeat@cond}{}}
% \end{macrocode}
% \end{environment}
%
% So far for algorithms.
% \begin{macrocode}
%
% \end{macrocode}
%
% \GetFileInfo{ccqed.sty}
% \CodelinePrefix{Q}
%
% \section{Source of \filename (\fileprefix)}
%
% This file (\file{\filename}) has version number \fileversion, last
% revised \filedate.
% \begin{macrocode}
%<*ccqed>
\ProvidesPackage{ccqed}[2000/02/29 v2.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{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