% \iffalse meta-comment
%
% file: siggraph.dtx
% version: 1.1.1
% date: January 17, 1996
%
% Provides `siggraph' document class for use with LaTeX2e.
% Formats a document according to ACM Siggraph conference proceedings
%  specifications.
%
%%
%% Copyright (C) 1996 Daniel Kartch
%%                    Program of Computer Graphics
%%                    Cornell University
%%                    dan@graphics.cornell.edu
%%
%% This file 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.
%%
%
% This file may be freely copied in whole or in part under the following 
%  conditions:
% 1) Unmodified copies may be freely distributed separately or as part
%    of larger packages.
% 2) You may make modified copies of this file for you own personal use,
%    but you may not distribute modified copies.  You may place modifications
%    in a siggraph.cfg file (see the documentation), and distribute that
%    file individually or along with this source.  However, if you do
%    so, the .cfg file must contain code to issue a warning when it is
%    invoked by LaTeX that states:
%       a) The fact that it is being loaded and it is not part of the
%           standard distribution
%       b) What it does (briefly)
%       c) That it can be disabled by removing or renaming the .cfg file
% 3) Excerpts from this file may be freely used and distributed as part
%    of other macro packages.
%
% Portions of this file (namely the \@maketitle macro and the commands to
%  set up 9pt type) are modified versions of those provided with the standard
%  LaTeX files article.cls file and size10.clo, and their distribution may
%  be further restricted by the LaTeX copyright. (Probably not, but better
%  safe than sorry.)
%
%%
%% NOTE:
%%  This is a beta release and hasn't been thoroughly tested yet. Please
%%  send me any bug reports, suggestions for improvement, or other comments.
%%  I will do my best to fix any problems before the Siggraph submission
%%  deadline, but I make no promises.  The likelihood of my responding to
%%  any given comment is directly proportional to the amount of time before
%%  the deadline that the comment is received.
%%
% \fi
%
% \CheckSum{814}
%% \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
%    \begin{macrocode}
%<+class>\NeedsTeXFormat{LaTeX2e}[1994/06/01]
%<+class>\ProvidesClass{siggraph}
%<*driver>
	\ProvidesFile{siggraph.drv}
%</driver>
		[1996/01/17 v1.1.1
%<+class>		Siggraph proceedings document class]
%<*driver>
]
%</driver>
%    \end{macrocode}
%
% \section{Driver for this document}
%
% The following contains the driver for generating this document.
% It can be extracted from the |.dtx| file with the \dst{} program.
%
%    \begin{macrocode}
%<*driver>
\documentclass{ltxdoc}
\GetFileInfo{siggraph.drv}
%\DisableCrossrefs
\RecordChanges
\OnlyDescription % comment out for full source description
\begin{document}
    \DocInput{siggraph.dtx}
\end{document}
%</driver>
%    \end{macrocode}
%\fi
%
% \newenvironment{mylist}{%
%	\begin{list}{\labelitemi}{%
%		\addtolength{\leftmargin}{2em}%
%		\setlength{\itemindent}{-1em}%
%		\setlength{\parsep}{0in}%
%		\setlength{\itemsep}{0.5ex}}}{\end{list}}
%
% \changes{v0.6.1}{1994/12/26}{Minor modifications to user's guide}
%
% \title{The |siggraph| Document Class Users' Guide\thanks{
%    This file has version number \fileversion{} dated \filedate{}.
%    The most recent version can be found at
%    {\ttfamily http://www.graphics.cornell.edu/\~{}dan/texstuff/siggraph/}}}
%
% \author{Daniel Kartch\thanks{dan@graphics.cornell.edu}}
%
% \date{\filedate}
%
% \maketitle
%
% \begin{abstract}
%   This document class modifies the standard |article| class to conform to
%   the specifications for papers published in the proceedings of the annual
%   ACM Siggraph conference.
%   It sets all the necessary layout parameters and handles the differences
%   in format between a paper being submitted for blind review and a camera
%   ready copy of an accepted paper.
%   Several additional features are also provided.
%
%   \vspace{\baselineskip}
%   \begin{quote}
%     DISCLAIMER:  This class is distributed in the hope that it will be useful,
%     and to promote compatibility of documents created at different sites.
%     However it is provided WITHOUT ANY WARRANTY; without even the implied
%     warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
%     Please see the |siggraph.dtx| source file for copyright and distribution
%     information.
%   \end{quote}
% \end{abstract}
%
% \section{Introduction}
%
% This document describes the |siggraph| document class, for use with \LaTeXe{}.
% It is intended as a replacement for the various versions of the old
% |siggraph.sty| file that have been floating around for years.
% It loads in the |article| class and modifies several parameters
% to comply with the layout specifications for a paper submitted to
% the ACM Siggraph conference.
% Currently, these specifications are:
% \begin{mylist}
%   \label{layoutlist}
%   \item $\frac{3}{4}$ inch margins on top and sides, 1 inch margin on bottom
%   \item two column mode with 2 pica column separation
%   \item space for copyright is 1.5 inch
% \changes{v0.8.1}{1995/03/22}{Made copyright space 1 inch}
% \changes{v1.1.1}{1996/01/17}{Made copyright space 1.5 inch}
%   \item 9 point type on 10 point baselines
%   \item no page numbers
% \changes{v0.6.3}{1995/01/06}{Put page numbers back in for review option}
% \end{mylist}
% Also set by the class but not part of the siggraph specifications are:
% \begin{mylist}
% \changes{v0.6.1}{1994/12/26}{Made titles bold}
%   \item titles and section headings are bold sans serif
%   \item 1 em paragraph indentation
%   \item |flushbottom| mode
% \end{mylist}
%
% The class also allows the user to specify whether the paper is being
% submitted for blind review or as a final, camera-ready document.
% When review mode is specified, it will automatically generate a
% cover sheet for the paper, modify the title block on the first page
% to protect anonymity, and (optionally) switch to a more widely spaced
% layout.
% Mechanisms are also provided to allow the user to introduce text conditional
% on the chosen submission mode.
%
% \section{Usage}
%
% To use this class, specify
% \begin{verbatim} \documentclass{siggraph} \end{verbatim}
% at the beginning of your document.
% The following options may be included in the |\documentclass| command:
%
% \begin{mylist}
%  \item \DescribeMacro{cameraready}|cameraready|,
%	 \DescribeMacro{preprint}|preprint|,
%	 \DescribeMacro{review}|review|, or
%	 \DescribeMacro{widereview}|widereview|
% \changes{v0.7.0}{1995/01/23}{Added widereview option}
% \changes{v1.0.0}{1995/12/18}{Added preprint option}
%	\newline These specify the submission mode for the paper.
%	|cameraready|, the default, sets the layout parameters as
%	described in section~\ref{layoutlist}.
%	The |preprint| option adds page numbers and prints the message
%	``To appear in the SIGGRAPH conference proceedings'' in the top
%	margin.  This message can be changed with the
%	\DescribeMacro{\preprinttext}|\preprinttext{|\meta{message}|}|
%	command.
%	The |review| option uses the same layout as |cameraready| but
%	adds page numbers and modifies the title block as described
%	in the next section.
%	The |widereview| option is for people who prefer review papers
%	that have a more widely spaced layout.
%	It uses one-column mode with 12 point, double-spaced type.
%	Other effects of these options will be described later.
%
%  \item \DescribeMacro{onecolumn}|onecolumn| or
%	 \DescribeMacro{twocolumn}|twocolumn|
% \changes{v0.6.3}{1995/01/09}{Fixed onecolumn option}
%  \item \DescribeMacro{singlespace}|singlespace| or
%	 \DescribeMacro{doublespace}|doublespace|
% \changes{v0.8.3}{1995/03/27}{Added singlespace and doublespace options}
%  \item \DescribeMacro{9pt}|9pt|,
%	 \DescribeMacro{10pt}|10pt|,
%	 \DescribeMacro{11pt}|11pt|, or
%	 \DescribeMacro{12pt}|12pt|
%	\newline These three sets of options will override the default
%	settings for the number of columns, line spacing, and point size
%	determined by the submission mode.
%	Overriding the settings when in camera-ready mode, while allowed,
%	is a violation of the submission specifications and will produce
%	a warning message.
%
%  \item \DescribeMacro{version1996}|version1996| or
%        \DescribeMacro{version1994}|version1994|
%	\newline The submission specifications can change from year to
%         year, and I will try to keep this class updated to match them.
%         However, since many papers are painstakingly typeset to fit
%         the allotted pages exactly, small changes in the format can
%         radically change their appearance.  This class therefore includes
%         a specification date to allow old documents to maintain their
%         appearance even if the specs change.  Although the most recent
%         version is always the default, I recommend including it in the
%         options list anyways, so that you won't have to think about
%         it several years down the road.
%         (The only difference between the 94 and 96 versions is that
%         the space for the copyright is now a half inch larger.)
%
%  \item Additionally, any other options supported by the |article| class
%	may be used, except for |landscape| and |titlepage|, which are
%	disabled.
% \end{mylist}
%	
%
% \section{Title Block, Abstract, and Cover Page}
%
% \subsection{Data fields}
%
% In addition to the |\title| and |\author| commands provided by the |article|
% class, several other pieces of information can be set.
% Each of these commands takes a single argument, the value to which the
% corresponding field should be set.
% \begin{mylist}
%   \item \DescribeMacro{\affiliation}|\affiliation|
%
%       If all the authors share an affiliation, it can be set with this
%       command rather than individually within the author command.
%       The affiliation will appear centered below the author list.
%
%   \item \DescribeMacro{\category}|\category| and
%	  \DescribeMacro{\format}|\format|
% \changes{v1.1.0}{1996/01/08}{Replaced acmcategory/acmformat with
%				category/format. Old versions still enabled.}
%
%	The paper category (research, systems, ...) and format (print, video).
%
%   \item \DescribeMacro{\contactname}|\contactname|,
%	  \DescribeMacro{\contactaddress}|\contactaddress|,
%	  \DescribeMacro{\contactphone}|\contactphone|,
%	  \DescribeMacro{\contactfax}|\contactfax|,
%	  \DescribeMacro{\contactemail}|\contactemail|
%
%	These should be used to set the information about the person to
%	be contacted about the paper.
%
%   \item \DescribeMacro{\passport}|\passport|
% \changes{v1.0.0}{1995/12/18}{Replaced acmpassport with passport.
%				Old version still enabled.}
% \changes{v1.1.0}{1996/01/08}{Disabled passport command; no longer required.}
%
%	The author who will receive compensation if the paper is accepted.
%	\emph{As of 1996, this is no longer requested when submitting papers
%	for review and the command has been disabled.}
%
%   \item \DescribeMacro{\keywords}|\keywords|
% \changes{v1.1.0}{1996/01/08}{Added keywords command}
%
%	A list of keywords to be printed on the cover page
%
%   \item \DescribeMacro{\estpages}|\estpages|
% \changes{v1.1.0}{1996/01/08}{Added estpages command}
%
%	The estimated number of pages that the paper would require in the
%	conference proceedings.
%
% \end{mylist}
%
% \subsection{Title block}
%
% The title block is generated with the normal \LaTeX{}
% \DescribeMacro{\maketitle}|\maketitle| command.
% For a camera ready document it will contain:
% \begin{mylist}
%   \item Title
%   \item Authors
%   \item Affiliation (if any)
% \changes{v0.6.2}{1995/01/05}{Fixed missing affiliation in title block}
% \end{mylist}
%
% For a review paper it will instead contain:
% \begin{mylist}
%   \item Title
%   \item Paper category
% \end{mylist}
% \changes{v1.1.0}{1996/01/08}{Removed paper format from first page of paper.}
% The review options will also suppress printing of any information
% specified with the |\thanks| command.
%
% \changes{v0.9.0}{1994/04/20}{Added teaser}
% Some authors like to include a pretty picture of their results between
% the title block and the start of the text to act as a teaser.
% Because of the way \LaTeX's float placement scheme works, this seemingly
% simple task is apparently impossible to do in a two column document
% without making the picture part of the |\maketitle| command.
% Therefore, that's exactly what I've done.
% The class provides a \DescribeMacro{\teaser}|\teaser{|\meta{figure}|}|
% command, whose contents will appear as a figure centered below the
% title block.
% Theoretically, anything that can appear in a |figure| environment can
% appear here.
% However, the current implementation is a bit of a kludge, so some things
% might not work.
% I've already been told that it isn't compatible with the |float| package.
% I'll see what I can do to improve it when I get the chance.
%
% \changes{v0.9.0}{1994/04/20}{Added \cmd{\titlespace} and \cmd{\teaserspace}}
% The space between the title block text and the rest of the document, and
% between the teaser (if any) and the start of the main text are controlled
% by the length parameters \DescribeMacro{\titlespace}|\titlespace| and
% \DescribeMacro{\teaserspace}|\teaserspace|.
% They both default to $\frac{1}{4}$ inch, but can be changed with the
% normal \LaTeX{} length setting commands.
%
% \subsection{Abstract}
%
% The abstract should be specified with the |abstract| environment.
% In addition to appearing in the paper itself, its contents will stored
% and will appear on the cover page (in review mode).
%
% \subsection{Cover page}
%
% When the |review| or |widereview| option is specified,
% a cover sheet will automatically be generated at the end of the document.
% Placing the \DescribeMacro{\suppresscover}|\suppresscover| command
% in the preamble will prevent this.
% The cover sheet will contain:
% \begin{mylist}
%   \item Title
%   \item Authors
%   \item Affiliation (if any)
%   \item Paper category
%   \item Contact information
%   \item A copy of the abstract
%   \item List of keywords
%   \item Estimated number of pages
% \end{mylist}
%
% \subsection{Obsolete command}
%
% In previous versions of this class, it was necessary to use a command
% called \DescribeMacro{\acmopening}|\acmopening| in place of the
% |\maketitle| command and
% \changes{v0.8.0}{1995/03/07}{Eliminated \cmd{\acmopening} command}
% |abstract| environment in order to get the abstract to appear on the
% cover page as well as in the text.
% This is no longer necessary, and users should switch back to
% the normal commands.
%
%
% \section{Other Features}
%
% \subsection{Copyright notice}
%
% As with the old |siggraph.sty|, this class provides a 
% \DescribeMacro{\copyrightspace}|\copyrightspace|
% command to leave space at the bottom of the first column for the copyright
% notice.
% This command should be placed after the last footnote that will appear in
% the first column.
% As of yet, there is no way to have this done automatically, but I am looking
% into it.
%
% \subsection{Title and section heading font}
%
% By default, this class uses bold sans-serif for the title and
% section heading font.
% This behavior can be altered with the
% \DescribeMacro{\sectionfont}|\sectionfont{|\meta{fontcommands}|}| command.
% \changes{v0.8.3}{1995/03/27}{Added \cmd{\sectionfont} command}
% \meta{fontcommands} should be one or more font changing commands,
% for instance ``|\rmfamily\scshape|'' or ``|\fontfamily{pcr}\selectfont|''.
%
% \subsection{Conditional text}
%
% \DescribeMacro{\ifcamera}\DescribeMacro{\ifreview}
% \DescribeMacro{\ifcameraelse}\DescribeMacro{\ifreviewelse}
% The class also provides the following four commands for writing text
% conditional on whether camera-ready or review mode has been
% chosen:
% \begin{quote}
%	|\ifcamera{|\meta{thenclause}|}|
%
%	|\ifreview{|\meta{thenclause}|}|
%
%	|\ifcameraelse{|\meta{thenclause}|}{|\meta{elseclause}|}|
%
%	|\ifreviewelse{|\meta{thenclause}|}{|\meta{elseclause}|}|
% \end{quote}
% The first two will generate the \meta{thenclause} if camera-ready
% (resp. review) mode is chosen, otherwise they resolve to a null string.
% The second two are the same as the first two but generate the
% \meta{elseclause} instead of a null string if the condition is not met.
%
% These can be used for writing the paper so as to protect anonymity for
% a submission for review, without having to worry about going back over it
% months later to put the identifying information back in if the paper
% is accepted.  For example:
% \begin{quote}^^A
%   |In \cite{FooBar1994}, \ifcameraelse{we}{Foo and Bar} showed that ...|
% \end{quote}
% or
% \begin{quote}^^A
%   |as illustrated in the following \ifcameraelse{three}{two} images:|
%
%   [include generic image]
%
%   |\ifcamera{| [include our logo] |}|
%
%   [include another generic image]
% \end{quote}
%
% \subsection{Configuration file}
%
% Individual users or sites may wish to modify the behavior of this
% class (for instance, to use a particular set of fonts.)
% Rather than having people hack the |.cls| file, which can lead to
% various incompatible versions at different sites, the class provides
% for a configuration file.
% After the class has finished loading, it will check to see if a
% |siggraph.cfg| file exists in the \TeX{} search path.
% If so, it will be input.
% Any user-- or site--specific modifications should be placed in this file.
% \textit{(See the copyright notice in the |siggraph.dtx| source file for
% information on distribution of configuration files.)}
%
% \StopEventually{\PrintChanges}
%
% \iffalse
%<*class>
% \fi
%
% \section{Implementation}
%
% \begin{quote}
% Warning: The implementation is a work in progress and may undergo radical
% alterations before the first non-beta release.  Do not count on any of
% the internal representations remaining the same.  Any suggestions for
% improving any aspects of the implementation are welcome.
% \end{quote}
%
% \subsection{Initial stuff}
%
%  \begin{macro}{\ifacm@camera}
%  \begin{macro}{\acm@columnmode}
%  \begin{macro}{\acm@pointsize}
%  \begin{macro}{\ifacm@doublespaced}
%   First off, we need to initialize a few variables.
%   |acm@camera| is a boolean which determines whether or not we're in
%   camera ready mode.
%   |\acm@preprint|, |\acm@columnmode|, |\acm@pointsize|
%   and |acm@doublespaced| are pretty obvious.
%    \begin{macrocode}
\newif\ifacm@camera
\newif\ifacm@preprint
\newcommand{\acm@columnmode}{}
\newcommand{\acm@pointsize}{}
\newif\ifacm@doublespaced
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
% \subsection{Option processing}
%
% \subsubsection{Submission mode}
%
%  \begin{macro}{cameraready}
%  \begin{macro}{preprint}
%  \begin{macro}{review}
%  \begin{macro}{widereview}
%   The |cameraready|, |preprint|, |review|, and |widereview| options set the 
%   variables defined above appropriately.
%    \begin{macrocode}
\DeclareOption{cameraready}{%
    \acm@cameratrue%
    \acm@preprintfalse%
    \renewcommand{\acm@columnmode}{twocolumn}%
    \acm@doublespacedfalse%
    \renewcommand{\acm@pointsize}{9pt}}
\DeclareOption{review}{%
    \acm@camerafalse%
    \renewcommand{\acm@columnmode}{twocolumn}%
    \acm@doublespacedfalse%
    \renewcommand{\acm@pointsize}{9pt}}
\DeclareOption{widereview}{%
    \acm@camerafalse%
    \renewcommand{\acm@columnmode}{onecolumn}%
    \acm@doublespacedtrue%
    \renewcommand{\acm@pointsize}{12pt}}
\DeclareOption{preprint}{%
    \acm@preprinttrue}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  By default, |cameraready| mode should be used.
%    \begin{macrocode}
\ExecuteOptions{cameraready}
%    \end{macrocode}
%
% \subsubsection{Layout parameters}
%
%  \begin{macro}{\acm@optwarning}
%   The |\acm@optwarning| command produces a warning message when one
%   tries to override the default layout parameters while in camera-ready
%   mode.
%    \begin{macrocode}
\newcommand{\acm@optwarning}[1]{%
    \ifacm@camera
        \ClassWarningNoLine{siggraph}%
            {#1 option used in camera-ready mode.\MessageBreak
             This violates submission specifications}
    \fi
}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{onecolumn}
%  \begin{macro}{twocolumn}
%  \begin{macro}{9pt}
%  \begin{macro}{10pt}
%  \begin{macro}{11pt}
%  \begin{macro}{12pt}
%  \begin{macro}{doublespace}
%  \begin{macro}{singlespace}
%   The various layout parameters can be set individually, overriding the
%   values set by the specified submission mode.
%    \begin{macrocode}
\DeclareOption{onecolumn}{%
    \acm@optwarning{onecolumn}
    \renewcommand{\acm@columnmode}{onecolumn}}
\DeclareOption{twocolumn}{%
    \renewcommand{\acm@columnmode}{twocolumn}}
\DeclareOption{9pt}{%
    \renewcommand{\acm@pointsize}{9pt}}
\DeclareOption{10pt}{%
    \acm@optwarning{10pt}
    \renewcommand{\acm@pointsize}{10pt}}
\DeclareOption{11pt}{%
    \acm@optwarning{11pt}
    \renewcommand{\acm@pointsize}{11pt}}
\DeclareOption{12pt}{%
    \acm@optwarning{12pt}
    \renewcommand{\acm@pointsize}{12pt}}
\DeclareOption{singlespace}{%
    \acm@doublespacedfalse}
\DeclareOption{doublespace}{%
    \acm@optwarning{doublespace}
    \acm@doublespacedtrue}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
% \subsubsection{Version}
%
%  \begin{macro}{\acm@specversion}
%  \begin{macro}{version1994}
%  \begin{macro}{version1996}
%   Set the version number.
%    \begin{macrocode}
\newcount\acm@specversion
\DeclareOption{version1996}{\acm@specversion=1996}
\DeclareOption{version1994}{\acm@specversion=1994}
\ExecuteOptions{version1996}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
% \subsubsection{Remaining options}
%
%  Disable the |titlepage| and |landscape| options, and pass any remaining
%  options on to the |article| class.
%
%    \begin{macrocode}
\DeclareOption{titlepage}{%
    \OptionNotUsed%
    \ClassWarningNoLine{siggraph}{titlepage option not allowed}}
\DeclareOption{landscape}{%
    \OptionNotUsed%
    \ClassWarningNoLine{siggraph}{landscape option not allowed}}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
%    \end{macrocode}
%
% \subsubsection{Option processing}
%
%  Process the options, cause the appropriate column and point size options
%  to be passed to the |article| class, and load the |article| class.
%
%    \begin{macrocode}
\ProcessOptions
\PassOptionsToClass{\acm@columnmode}{article}
\ifdim\acm@pointsize>9pt
    \PassOptionsToClass{\acm@pointsize}{article}
\fi
\LoadClass{article}
%    \end{macrocode}
%
% \subsection{Conditional text}
%  \begin{macro}{\preprinttext}
%   Set up default message for preprints and command to change it.
%    \begin{macrocode}
\newcommand{\acm@preprinttext}{To appear in the SIGGRAPH conference proceedings}
\newcommand{\preprinttext}[1]{\renewcommand{\acm@preprinttext}{#1}}
%    \end{macrocode}
%  \end{macro}
%
%
% \subsection{Conditional text}
%
%  \begin{macro}{\ifcamera}
%  \begin{macro}{\ifreview}
%  \begin{macro}{\ifcameraelse}
%  \begin{macro}{\ifreviewelse}
%   Here we define the commands to include text conditionally, based on
%   the submission mode.
%    \begin{macrocode}
\newcommand{\ifcamera}[1]{\ifacm@camera #1 \fi}
\newcommand{\ifreview}[1]{\ifacm@camera \else #1 \fi}
\newcommand{\ifcameraelse}[2]{\ifacm@camera #1 \else #2 \fi}
\newcommand{\ifreviewelse}[2]{\ifacm@camera #2 \else #1 \fi}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
% \subsection{Page layout}
%
% Set the margins, header and footer sizes, column separation, and indentation.
%
%    \begin{macrocode}
\setlength{\textheight}{9.25in}
\setlength{\topmargin}{-0.700in}
\setlength{\headheight}{0.2in}
\setlength{\headsep}{0.250in}
\setlength{\footskip}{0.5in}
\flushbottom
\setlength{\textwidth}{7in}
\setlength{\oddsidemargin}{-0.25in}
\setlength{\evensidemargin}{-0.25in}
\setlength{\columnsep}{2pc}
\setlength{\parindent}{1em}
%    \end{macrocode}
%
% Modify plain and empty page styles to turn off page numbering or turn on
%  preprint message.
%
%    \begin{macrocode}
\renewcommand{\ps@plain}%
    {%
    \ifacm@preprint%
	\renewcommand{\@oddhead}{\hfil\textit{\large\acm@preprinttext}\hfil}%
    \else%
	\renewcommand{\@oddhead}{}%
    \fi%
    \ifacm@camera%
	\ifacm@preprint%
	    \renewcommand{\@oddfoot}{\hfil\textrm{\thepage}\hfil}%
	\else%
	    \renewcommand{\@oddfoot}{}%
	\fi%
    \else%
	\renewcommand{\@oddfoot}{\hfil\textrm{\thepage}\hfil}%
    \fi%
    \renewcommand{\@evenhead}{\@oddhead}%
    \renewcommand{\@evenfoot}{\@oddfoot}%
    }
\renewcommand{\ps@empty}%
    {%
    \ifacm@preprint%
	\renewcommand{\@oddhead}{\hfil\textit{\large\acm@preprinttext}\hfil}%
    \else%
	\renewcommand{\@oddhead}{}%
    \fi%
    \renewcommand{\@oddfoot}{}%
    \renewcommand{\@evenhead}{\@oddhead}%
    \renewcommand{\@evenfoot}{\@oddfoot}%
    }
\pagestyle{plain}
%    \end{macrocode}
%
% \subsection{Setting up 9pt point type}
%
% The code in this section is a modified version of that found in the
% |size10.clo| file from the June 1994 \LaTeX{} distribution, with values
% taken from the old |siggraph.sty| file.
%
%  \begin{macro}{\acm@setninepoint}
%   The |\acm@setninepoint| command sets the type size to 9pt.
%    \begin{macrocode}
\newcommand{\acm@setninepoint}{
%    \end{macrocode}
%
%   Redefine |\normalsize| to 9 points.
%
%    \begin{macrocode}
    \renewcommand\normalsize{%
        \@setfontsize\normalsize\@ixpt\@xpt
        \abovedisplayskip 9\p@ \@plus2\p@ \@minus4\p@
        \abovedisplayshortskip \z@ \@plus3\p@
        \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
        \belowdisplayskip \abovedisplayskip
        \let\@listi\@listI}
%    \end{macrocode}
%
%   Redefine |\small| to 8 points.
%
%    \begin{macrocode}
    \renewcommand\small{%
        \@setfontsize\small\@viipt\@ixpt
        \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@
        \abovedisplayshortskip \z@ \@plus2\p@
        \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
        \def\@listi{\leftmargin\leftmargini
                    \topsep 4\p@ \@plus2\p@ \@minus2\p@
                    \parsep 2\p@ \@plus\p@ \@minus\p@
                    \itemsep \parsep}%
        \belowdisplayskip \abovedisplayskip}
%    \end{macrocode}
%
%   |\footnotesize|, |\scriptsize|, and |\tiny| remain the same as for
%   10 point documents.
%
%    \begin{macrocode}
    \renewcommand\footnotesize{%
        \@setfontsize\footnotesize\@viiipt{9.5}%
        \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@
        \abovedisplayshortskip \z@ \@plus\p@
        \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@
        \def\@listi{\leftmargin\leftmargini
                    \topsep 3\p@ \@plus\p@ \@minus\p@
                    \parsep 2\p@ \@plus\p@ \@minus\p@
                    \itemsep \parsep}%
        \belowdisplayskip \abovedisplayskip}
    \renewcommand\scriptsize{\@setfontsize\scriptsize\@viipt\@viiipt}
    \renewcommand\tiny{\@setfontsize\tiny\@vpt\@vipt}
%    \end{macrocode}
%
%   All the larger than normal sizes get decremented one step from their
%   values in 10 point documents.
%
%    \begin{macrocode}
    \renewcommand\large{\@setfontsize\large\@xpt\@xiipt}
    \renewcommand\Large{\@setfontsize\Large\@xiipt{14}}
    \renewcommand\LARGE{\@setfontsize\LARGE\@xivpt{18}}
    \renewcommand\huge{\@setfontsize\huge\@xviipt{22}}
    \renewcommand\Huge{\@setfontsize\Huge\@xxpt{25}}
%    \end{macrocode}
%
%   To make sure the size changes are loaded immediately, we call |\selectfont|.
%    \begin{macrocode}
    \selectfont
}
%    \end{macrocode}
%  \end{macro}
%
%  If not overridden, set type size to 9 points.
%
%    \begin{macrocode}
\ifdim\acm@pointsize=9pt
    \acm@setninepoint
\fi
%    \end{macrocode}
%
% \subsection{Section headings}
%
%  \begin{macro}{\sectionfont}
%   The |\sectionfont| command lets the user modify the font used for
%   section headings and the title.
%    \begin{macrocode}
\newcommand{\acm@sectionfont}{}
\newcommand{\sectionfont}[1]{\renewcommand{\acm@sectionfont}{#1}}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\section}
%  \begin{macro}{\subsection}
%  \begin{macro}{\subsubsection}
%  \begin{macro}{\paragraph}
%  \begin{macro}{\subparagraph}
%   We redefine the section headings to use bold sans serif type plus
%   any modifications set with |\sectionfont|.  (Otherwise
%   these are the same definitions given in the |classes.dtx| file.)
%    \begin{macrocode}
\renewcommand\section{\@startsection {section}{1}{\z@}%
                {-3.5ex \@plus -1ex \@minus -.2ex}%
                {2.3ex \@plus.2ex}%
                {\reset@font\Large\sffamily\bfseries\acm@sectionfont}}
\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
                {-3.25ex\@plus -1ex \@minus -.2ex}%
                {1.5ex \@plus .2ex}%
                {\reset@font\large\sffamily\bfseries\acm@sectionfont}}
\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
                {-3.25ex\@plus -1ex \@minus -.2ex}%
                {1.5ex \@plus .2ex}%
                {\reset@font\normalsize\sffamily\bfseries\acm@sectionfont}}
\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
                {3.25ex \@plus1ex \@minus.2ex}%
                {-1em}%
                {\reset@font\normalsize\sffamily\bfseries\acm@sectionfont}}
\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}%
                {3.25ex \@plus1ex \@minus .2ex}%
                {-1em}%
                {\reset@font\normalsize\sffamily\bfseries\acm@sectionfont}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%
%
% \subsection{Title block}
%
%  \begin{macro}{\acm@empty}
%   This is used to check whether the affiliation and teaser have been set.
%    \begin{macrocode}
\newcommand{\acm@empty}{}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\affiliation}
%  \begin{macro}{\acm@affiliation}
%   We define the |\affiliation| macro to set the authors' affiliation,
%   and the |\acm@affiliation| macro to hold it.
%    \begin{macrocode}
\newcommand{\acm@affiliation}{}
\newcommand{\affiliation}[1]{\renewcommand{\acm@affiliation}{#1}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\category}
%  \begin{macro}{\acm@category}
%  \begin{macro}{\format}
%  \begin{macro}{\acm@format}
%   These macros set and hold the paper's category and format.
%    \begin{macrocode}
\newcommand{\acm@category}{}
\newcommand{\category}[1]{\renewcommand{\acm@category}{#1}}
\newcommand{\acmcategory}[1]{\category{#1}}
\newcommand{\acm@format}{}
\newcommand{\format}[1]{\renewcommand{\acm@format}{#1}}
\newcommand{\acmformat}[1]{\format{#1}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\teaser}
%  \begin{macro}{\acm@teaser}
%   These macros hold the teaser (if any).
%    \begin{macrocode}
\newcommand{\acm@teaser}{}
\newcommand{\teaser}[1]{\renewcommand{\acm@teaser}{#1}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\titlespace}
%  \begin{macro}{\teaserspace}
%   We also need to set up lengths for the distance between the title block
%   and teaser from the rest of the text.  We initialize them to
%   $\frac{1}{4}$ inches.
%    \begin{macrocode}
\newlength{\titlespace}
\setlength{\titlespace}{0.25in}
\newlength{\teaserspace}
\setlength{\teaserspace}{0.25in}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\@maketitle}
%   Now we redefine the \@maketitle command to properly format the title block.
%   For camera-ready papers, it should have the title, authors, and affiliation.
%   For review papers, it should have the title, paper category and format,
%   plus all information specified with the |\thanks| command should be
%   suppressed.
%    \begin{macrocode}
\ifacm@camera
    \renewcommand{\@maketitle}{%
        \begin{center}%
            {\LARGE\sffamily\bfseries\acm@sectionfont \@title \par}%
            \vspace{1\baselineskip}%
            \large
            \begin{tabular}[t]{c}%
                \@author
            \end{tabular}\par%
            \ifx\acm@affiliaton\acm@empty \else%
                \vspace{1\baselineskip}%
                \acm@affiliation\par%
            \fi%
            \vspace{\titlespace}%
            \ifx\acm@teaser\acm@empty \else%
                \begingroup%
                    \def\@captype{figure}%
                    \acm@teaser%
                \endgroup\par%
                \vspace{\teaserspace}%
            \fi%
        \end{center} \par%
    }
\else
    \renewcommand{\@maketitle}{%
        \begin{center}%
            \renewcommand{\thanks}[1]{}
            {\LARGE\sffamily\bfseries\acm@sectionfont \@title \par}%
            \vspace{1\baselineskip}%
            {Category: \acm@category \par}%
%            \vspace{0.25\baselineskip}%	% no longer needed (1996)
%            {Format: \acm@format \par}%	% no longer needed (1996)
            \vspace{\titlespace}%
            \ifx\acm@teaser\acm@empty \else%
                \begingroup%
                    \def\@captype{figure}%
                    \acm@teaser%
                \endgroup\par%
                \vspace{\teaserspace}%
            \fi%
        \end{center} \par%
    }
\fi
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\maketitle}
%   We also need to make several modifications to the |\maketitle| command.
%   Since |\maketitle| wipes out the values of the title, author, etc\ldots,
%   we have to make sure a copy gets saved.
%   After the title block is output,
%   the page numbering for the first page should be turned off, and
%   double spacing, if selected, should be turned on.
%    \begin{macrocode}
\let\acm@origmaketitle\maketitle
\renewcommand{\maketitle}{%
    \let\acm@title\@title%
    \let\acm@author\@author%
    \acm@origmaketitle%
    \thispagestyle{empty}%
    \ifacm@doublespaced%
        \renewcommand{\baselinestretch}{1.66}\selectfont%
    \fi
}
%    \end{macrocode}
%  \end{macro}
%
%
%
% \subsection{Capturing the abstract}
%
%  \begin{environment}{abstract}
%   In order to have the abstract appear on the cover sheet, we need to
%   redefine the |abstract| environment to store its contents so that
%   the can be used later.
%   This seemingly trivial problem is actually quite difficult.
%   The code to do it is a modified version of the |\@collectbody| stuff
%   from the AMS-\LaTeX{} source code.
%   See that code for a more detailed explanation of how it works.
%
%  \begin{macro}{\acm@abs}
%   The |\acm@abs| token list is used to store the text of the abstract.
%    \begin{macrocode}
\newtoks\acm@abs
%    \end{macrocode}
%  \end{macro}
%
%   We only make these modifications if we are in review mode.
%    \begin{macrocode}
\ifacm@camera\else
%    \end{macrocode}
%
%  \begin{macro}{\acm@add}
%   The |\acm@add| command appends its argument to |\acm@abs|.
%    \begin{macrocode}
    \long\def\acm@add#1{\global\acm@abs\expandafter{\the\acm@abs#1}}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\acm@collect}
%  \begin{macro}{\acm@@collect}
%   The |\acm@collect| and |\acm@@collect| commands scan the input for the
%   |\end{abstract}| command and place all input tokens leading up to it
%   into |\acm@abs|.
%    \begin{macrocode}
    \long\def\acm@collect{%
        \global\acm@abs{}%
        \let\abstract\acm@@collect
        \abstract
    }
    \long\def\acm@@collect#1\end#2{%
        \def\@tempa{#2}%
        \ifx\@tempa\@currenvir
            \acm@add{#1}%
            \edef\abstract{\noexpand\end{\@tempa}}%
        \else
            \acm@add{#1\end{#2}}%
        \fi
        \abstract
    }
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\acm@modify}
%   The |\acm@modify| command makes the actual modifications to the |abstract|
%   environment.
%   The new |abstract| stores its contents with the above macros, then
%   outputs the abstract using its original definition.
%    \begin{macrocode}
    \newcommand{\acm@modify}{%
        \let\acm@origabs\abstract%
        \let\acm@origendabs\endabstract%
        \renewenvironment{abstract}%
            {\acm@collect}%
            {\begingroup
                \let\abstract\acm@origabs
                \let\endabstract\acm@origendabs
                \begin{abstract} \the\acm@abs \end{abstract}
            \endgroup}%
    }
%    \end{macrocode}
%  \end{macro}
%
%  We want to allow the user to redefine the appearance of the |abstract|
%  environment however he/she likes, so we hold off actually making the 
%  modifications to |abstract| until after the preamble.
%    \begin{macrocode}
    \AtBeginDocument{\acm@modify}
%    \end{macrocode}
%
%  End of review mode conditional:
%    \begin{macrocode}
\fi
%    \end{macrocode}
%  \end{environment}
%
%
%
% \subsection{Copyright notice and footnote rule}
%
%  \begin{macro}{\copyrightspace}
%   The |\copyrightspace| macro creates an empty footnote tall enough
%   for the copyright notice.
%    \begin{macrocode}
\newlength{\acm@copyrightlength}
\ifnum\acm@specversion=1994
    \setlength{\acm@copyrightlength}{1in}
\else
    \setlength{\acm@copyrightlength}{1.5in}
\fi
\newcommand{\copyrightspace}{%
    \renewcommand{\thefootnote}{}%
    \footnotetext[0]{\rule[\acm@copyrightlength]{2.71828in}{0in}}%
    \renewcommand{\thefootnote}{\arabic{footnote}}
}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\footnoterule}
%   I wanted a way to tell how many of the papers published in Siggraph
%   are using my class, so I changed the size of the footnote rule from 40\%
%   of the column width to 45\%.
%   This doesn't make a noticable change in the paper's appearance, but
%   can be quickly checked with a ruler.
%   Thanks go to the devious little mind of Pete Shirley for suggesting
%   this sneaky hack.
%    \begin{macrocode}
\renewcommand{\footnoterule}{%
    \kern-3pt
    \hrule width 0.45\columnwidth
    \kern 2.6pt}
%    \end{macrocode}
%  \end{macro}
%
%
%
% \subsection{Cover page}
% 
%  \begin{macro}{\contactname}
%  \begin{macro}{\acm@contactname}
%  \begin{macro}{\contactaddress}
%  \begin{macro}{\acm@contactaddress}
%  \begin{macro}{\contactphone}
%  \begin{macro}{\acm@contactphone}
%  \begin{macro}{\contactfax}
%  \begin{macro}{\acm@contactfax}
%  \begin{macro}{\contactemail}
%  \begin{macro}{\acm@contactemail}
%  \begin{macro}{\passport}
%  \begin{macro}{\acm@passport}
%  \begin{macro}{\acmpassport}
%  \begin{macro}{\keywords}
%  \begin{macro}{\acm@keywords}
%  \begin{macro}{\estpages}
%  \begin{macro}{\acm@estpages}
%   We define macros to set and hold all the information about the person
%   to be contacted about the paper and the author to receive compensation.
%    \begin{macrocode}
\newcommand{\acm@contactname}{}
\newcommand{\contactname}[1]{\renewcommand{\acm@contactname}{#1}}
\newcommand{\acm@contactaddress}{}
\newcommand{\contactaddress}[1]{\renewcommand{\acm@contactaddress}{#1}}
\newcommand{\acm@contactphone}{}
\newcommand{\contactphone}[1]{\renewcommand{\acm@contactphone}{#1}}
\newcommand{\acm@contactfax}{}
\newcommand{\contactfax}[1]{\renewcommand{\acm@contactfax}{#1}}
\newcommand{\acm@contactemail}{}
\newcommand{\contactemail}[1]{\renewcommand{\acm@contactemail}{#1}}
%\newcommand{\acm@passport}{}
%\newcommand{\passport}[1]{\renewcommand{\acm@passport}{#1}}
\newcommand{\passport}[1]{%
  \ClassWarningNoLine{siggraph}{%
    You no longer need to specify which author should \MessageBreak%
    receive a free conference passport when submitting \MessageBreak%
    papers for review.\MessageBreak%
    The passport command has therefore been disabled}}
\newcommand{\acmpassport}[1]{\passport{#1}}
\newcommand{\acm@keywords}{}
\newcommand{\keywords}[1]{\renewcommand{\acm@keywords}{#1}}
\newcommand{\acm@estpages}{}
\newcommand{\estpages}[1]{\renewcommand{\acm@estpages}{#1}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{acm@cover}
%   Set up a control to determine whether or not to print the cover page.
%    \begin{macrocode}
\newif\ifacm@cover
\ifacm@camera
    \acm@coverfalse
\else
    \acm@covertrue
\fi
\newcommand{\suppresscover}{\acm@coverfalse}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\acm@coverpage}
%   The |\acm@coverpage| macro handles the formatting of the cover page.
%    \begin{macrocode}
\newcommand{\acm@coverpage}{%
    \begin{titlepage}%
        \def\thanks##1{}
        \acm@setninepoint\normalsize
        \renewcommand{\baselinestretch}{1}\selectfont
        \begin{center}%
            \vspace*{\fill}
            {\LARGE\sffamily\bfseries\acm@sectionfont \acm@title \par}%
            \vspace{2\baselineskip}%
            {\large
                \begin{tabular}[t]{c}%
                \acm@author
             \end{tabular}\par%
            }%
            \vspace{1\baselineskip}%
            {\large \acm@affiliation \par}%
            \addvspace{3\baselineskip}%
            {Category: \acm@category \par}%
            \vspace{0.5\baselineskip}%
            {Format: \acm@format \par}%
            \vspace{3\baselineskip}%
            \begin{tabular}{ll}
                Contact: & \acm@contactname \\[1\baselineskip]
                         & \begin{tabular}[b]{@{}l@{}}
                               \acm@contactaddress
                               \end{tabular} \\[1\baselineskip]
                phone: & \acm@contactphone \\
                fax: & \acm@contactfax \\
                email: & \acm@contactemail
            \end{tabular}\par%
%            \vspace{3\baselineskip}%
%            Author to receive compensation: \acm@passport \par%
            \vspace*{3\baselineskip}%
            {Estimated \# of pages: \acm@estpages \par}%
            \vspace*{\baselineskip}%
            {Keywords: \acm@keywords \par}%
            \vspace*{\fill}%
            \begin{minipage}{5in}%
                \the\acm@abs
            \end{minipage}\par%
            \vspace*{\fill}
        \end{center}%
    \end{titlepage}%
}
%    \end{macrocode}
%  \end{macro}
%
% We cause the cover page to be generated at the end of the paper.
%    \begin{macrocode}
\AtEndDocument{\ifacm@cover \acm@coverpage \fi}
%    \end{macrocode}
%
%
%
% \subsection{Obsolete commands}
%
% The |\acmopening| command was needed before I figured out how to
% get the abstract environment to save its contents.   It is no longer
% used, and now produces an error message.
% 
%    \begin{macrocode}
\newcommand{\acmopening}[1]{%
  \ClassError{siggraph}{%
    The acmopening command is no longer needed.\MessageBreak%
    Switch to the maketitle command and abstract environment}{}}
%    \end{macrocode}
%
% \subsection{Configurations file}
%
% Finally, we load the configuration file if it exists.
%
%    \begin{macrocode}
\InputIfFileExists{siggraph.cfg}
        {\typeout{***************************************^^J%
                  * Local config file siggraph.cfg used *^^J%
                  ***************************************}}
        {}
%    \end{macrocode}
%
% \iffalse
%</class>
% \fi
%
% \Finale