Fun-Paper/document/sigplanconf.cls
branchNominal2-Isabelle2011-1
changeset 3070 4b4742aa43f2
parent 3069 78d828f43cdf
child 3071 11f6a561eb4b
equal deleted inserted replaced
3069:78d828f43cdf 3070:4b4742aa43f2
     1 %-----------------------------------------------------------------------------
       
     2 %
       
     3 %               LaTeX Class/Style File
       
     4 %
       
     5 % Name:         sigplanconf.cls
       
     6 % Purpose:      A LaTeX 2e class file for SIGPLAN conference proceedings.
       
     7 %               This class file supercedes acm_proc_article-sp,
       
     8 %               sig-alternate, and sigplan-proc.
       
     9 %
       
    10 % Author:       Paul C. Anagnostopoulos
       
    11 %               Windfall Software
       
    12 %               978 371-2316
       
    13 %               sigplan-style [atsign] acm.org
       
    14 %
       
    15 % Created:      12 September 2004
       
    16 %
       
    17 % Revisions:    See end of file.
       
    18 %
       
    19 %-----------------------------------------------------------------------------
       
    20 
       
    21 
       
    22 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
       
    23 \ProvidesClass{sigplanconf}[2010/05/24 v2.4 ACM SIGPLAN Proceedings]
       
    24 
       
    25 % The following few pages contain LaTeX programming extensions adapted
       
    26 % from the ZzTeX macro package.
       
    27 
       
    28 %                       Token Hackery
       
    29 %                       ----- -------
       
    30 
       
    31 
       
    32 \def \@expandaftertwice {\expandafter\expandafter\expandafter}
       
    33 \def \@expandafterthrice {\expandafter\expandafter\expandafter\expandafter
       
    34                           \expandafter\expandafter\expandafter}
       
    35 
       
    36 % This macro discards the next token.
       
    37 
       
    38 \def \@discardtok #1{}%                                  token
       
    39 
       
    40 % This macro removes the `pt' following a dimension.
       
    41 
       
    42 {\catcode `\p = 12 \catcode `\t = 12
       
    43 
       
    44 \gdef \@remover #1pt{#1}
       
    45 
       
    46 } % \catcode
       
    47 
       
    48 % This macro extracts the contents of a macro and returns it as plain text.
       
    49 % Usage: \expandafter\@defof \meaning\macro\@mark
       
    50 
       
    51 \def \@defof #1:->#2\@mark{#2}
       
    52 
       
    53 %                       Control Sequence Names
       
    54 %                       ------- -------- -----
       
    55 
       
    56 
       
    57 \def \@name #1{%                                        {\tokens}
       
    58   \csname \expandafter\@discardtok \string#1\endcsname}
       
    59 
       
    60 \def \@withname #1#2{%                                  {\command}{\tokens}
       
    61   \expandafter#1\csname \expandafter\@discardtok \string#2\endcsname}
       
    62 
       
    63 %                       Flags (Booleans)
       
    64 %                       ----- ----------
       
    65 
       
    66 % The boolean literals \@true and \@false are appropriate for use with
       
    67 % the \if command, which tests the codes of the next two characters.
       
    68 
       
    69 \def \@true {TT}
       
    70 \def \@false {FL}
       
    71 
       
    72 \def \@setflag #1=#2{\edef #1{#2}}%              \flag = boolean
       
    73 
       
    74 %                       IF and Predicates
       
    75 %                       -- --- ----------
       
    76 
       
    77 % A "predicate" is a macro that returns \@true or \@false as its value.
       
    78 % Such values are suitable for use with the \if conditional.  For example:
       
    79 %
       
    80 %   \if \@oddp{\x} <then-clause> \else <else-clause> \fi
       
    81 
       
    82 % A predicate can be used with \@setflag as follows:
       
    83 %
       
    84 %   \@setflag \flag = {<predicate>}
       
    85 
       
    86 % Here are the predicates for TeX's repertoire of conditional
       
    87 % commands.  These might be more appropriately interspersed with
       
    88 % other definitions in this module, but what the heck.
       
    89 % Some additional "obvious" predicates are defined.
       
    90 
       
    91 \def \@eqlp   #1#2{\ifnum #1 = #2\@true \else \@false \fi}
       
    92 \def \@neqlp  #1#2{\ifnum #1 = #2\@false \else \@true \fi}
       
    93 \def \@lssp   #1#2{\ifnum #1 < #2\@true \else \@false \fi}
       
    94 \def \@gtrp   #1#2{\ifnum #1 > #2\@true \else \@false \fi}
       
    95 \def \@zerop  #1{\ifnum #1 = 0\@true \else \@false \fi}
       
    96 \def \@onep   #1{\ifnum #1 = 1\@true \else \@false \fi}
       
    97 \def \@posp   #1{\ifnum #1 > 0\@true \else \@false \fi}
       
    98 \def \@negp   #1{\ifnum #1 < 0\@true \else \@false \fi}
       
    99 \def \@oddp   #1{\ifodd #1\@true \else \@false \fi}
       
   100 \def \@evenp  #1{\ifodd #1\@false \else \@true \fi}
       
   101 \def \@rangep #1#2#3{\if \@orp{\@lssp{#1}{#2}}{\@gtrp{#1}{#3}}\@false \else
       
   102                                                           \@true \fi}
       
   103 \def \@tensp  #1{\@rangep{#1}{10}{19}}
       
   104 
       
   105 \def \@dimeqlp   #1#2{\ifdim #1 = #2\@true \else \@false \fi}
       
   106 \def \@dimneqlp  #1#2{\ifdim #1 = #2\@false \else \@true \fi}
       
   107 \def \@dimlssp   #1#2{\ifdim #1 < #2\@true \else \@false \fi}
       
   108 \def \@dimgtrp   #1#2{\ifdim #1 > #2\@true \else \@false \fi}
       
   109 \def \@dimzerop  #1{\ifdim #1 = 0pt\@true \else \@false \fi}
       
   110 \def \@dimposp   #1{\ifdim #1 > 0pt\@true \else \@false \fi}
       
   111 \def \@dimnegp   #1{\ifdim #1 < 0pt\@true \else \@false \fi}
       
   112 
       
   113 \def \@vmodep     {\ifvmode \@true \else \@false \fi}
       
   114 \def \@hmodep     {\ifhmode \@true \else \@false \fi}
       
   115 \def \@mathmodep  {\ifmmode \@true \else \@false \fi}
       
   116 \def \@textmodep  {\ifmmode \@false \else \@true \fi}
       
   117 \def \@innermodep {\ifinner \@true \else \@false \fi}
       
   118 
       
   119 \long\def \@codeeqlp #1#2{\if #1#2\@true \else \@false \fi}
       
   120 
       
   121 \long\def \@cateqlp #1#2{\ifcat #1#2\@true \else \@false \fi}
       
   122 
       
   123 \long\def \@tokeqlp  #1#2{\ifx #1#2\@true \else \@false \fi}
       
   124 \long\def \@xtokeqlp #1#2{\expandafter\ifx #1#2\@true \else \@false \fi}
       
   125 
       
   126 \long\def \@definedp #1{%
       
   127   \expandafter\ifx \csname \expandafter\@discardtok \string#1\endcsname
       
   128                    \relax \@false \else \@true \fi}
       
   129 
       
   130 \long\def \@undefinedp #1{%
       
   131   \expandafter\ifx \csname \expandafter\@discardtok \string#1\endcsname
       
   132                    \relax \@true \else \@false \fi}
       
   133 
       
   134 \def \@emptydefp #1{\ifx #1\@empty \@true \else \@false \fi}%       {\name}
       
   135 
       
   136 \let \@emptylistp = \@emptydefp
       
   137 
       
   138 \long\def \@emptyargp #1{%                               {#n}
       
   139   \@empargp #1\@empargq\@mark}
       
   140 \long\def \@empargp #1#2\@mark{%
       
   141   \ifx #1\@empargq \@true \else \@false \fi}
       
   142 \def \@empargq {\@empargq}
       
   143 
       
   144 \def \@emptytoksp #1{%                                   {\tokenreg}
       
   145   \expandafter\@emptoksp \the#1\@mark}
       
   146 
       
   147 \long\def \@emptoksp #1\@mark{\@emptyargp{#1}}
       
   148 
       
   149 \def \@voidboxp #1{\ifvoid #1\@true \else \@false \fi}
       
   150 \def \@hboxp #1{\ifhbox #1\@true \else \@false \fi}
       
   151 \def \@vboxp #1{\ifvbox #1\@true \else \@false \fi}
       
   152 
       
   153 \def \@eofp #1{\ifeof #1\@true \else \@false \fi}
       
   154 
       
   155 
       
   156 % Flags can also be used as predicates, as in:
       
   157 %
       
   158 %   \if \flaga <then-clause> \else <else-clause> \fi
       
   159 
       
   160 
       
   161 % Now here we have predicates for the common logical operators.
       
   162 
       
   163 \def \@notp #1{\if #1\@false \else \@true \fi}
       
   164 
       
   165 \def \@andp #1#2{\if #1%
       
   166                   \if #2\@true \else \@false \fi
       
   167                 \else
       
   168                   \@false
       
   169                 \fi}
       
   170 
       
   171 \def \@orp #1#2{\if #1%
       
   172                  \@true
       
   173                \else
       
   174                  \if #2\@true \else \@false \fi
       
   175                \fi}
       
   176 
       
   177 \def \@xorp #1#2{\if #1%
       
   178                   \if #2\@false \else \@true \fi
       
   179                 \else
       
   180                   \if #2\@true \else \@false \fi
       
   181                 \fi}
       
   182 
       
   183 %                       Arithmetic
       
   184 %                       ----------
       
   185 
       
   186 \def \@increment #1{\advance #1 by 1\relax}%             {\count}
       
   187 
       
   188 \def \@decrement #1{\advance #1 by -1\relax}%            {\count}
       
   189 
       
   190 %                       Options
       
   191 %                       -------
       
   192 
       
   193 
       
   194 \@setflag \@authoryear = \@false
       
   195 \@setflag \@blockstyle = \@false
       
   196 \@setflag \@copyrightwanted = \@true
       
   197 \@setflag \@explicitsize = \@false
       
   198 \@setflag \@mathtime = \@false
       
   199 \@setflag \@natbib = \@true
       
   200 \@setflag \@ninepoint = \@true
       
   201 \newcount{\@numheaddepth} \@numheaddepth = 3
       
   202 \@setflag \@onecolumn = \@false
       
   203 \@setflag \@preprint = \@false
       
   204 \@setflag \@reprint = \@false
       
   205 \@setflag \@tenpoint = \@false
       
   206 \@setflag \@times = \@false
       
   207 
       
   208 % Note that all the dangerous article class options are trapped.
       
   209 
       
   210 \DeclareOption{9pt}{\@setflag \@ninepoint = \@true
       
   211                     \@setflag \@explicitsize = \@true}
       
   212 
       
   213 \DeclareOption{10pt}{\PassOptionsToClass{10pt}{article}%
       
   214                      \@setflag \@ninepoint = \@false
       
   215                      \@setflag \@tenpoint = \@true
       
   216                      \@setflag \@explicitsize = \@true}
       
   217 
       
   218 \DeclareOption{11pt}{\PassOptionsToClass{11pt}{article}%
       
   219                      \@setflag \@ninepoint = \@false
       
   220                      \@setflag \@explicitsize = \@true}
       
   221 
       
   222 \DeclareOption{12pt}{\@unsupportedoption{12pt}}
       
   223 
       
   224 \DeclareOption{a4paper}{\@unsupportedoption{a4paper}}
       
   225 
       
   226 \DeclareOption{a5paper}{\@unsupportedoption{a5paper}}
       
   227 
       
   228 \DeclareOption{authoryear}{\@setflag \@authoryear = \@true}
       
   229 
       
   230 \DeclareOption{b5paper}{\@unsupportedoption{b5paper}}
       
   231 
       
   232 \DeclareOption{blockstyle}{\@setflag \@blockstyle = \@true}
       
   233 
       
   234 \DeclareOption{cm}{\@setflag \@times = \@false}
       
   235 
       
   236 \DeclareOption{computermodern}{\@setflag \@times = \@false}
       
   237 
       
   238 \DeclareOption{executivepaper}{\@unsupportedoption{executivepaper}}
       
   239 
       
   240 \DeclareOption{indentedstyle}{\@setflag \@blockstyle = \@false}
       
   241 
       
   242 \DeclareOption{landscape}{\@unsupportedoption{landscape}}
       
   243 
       
   244 \DeclareOption{legalpaper}{\@unsupportedoption{legalpaper}}
       
   245 
       
   246 \DeclareOption{letterpaper}{\@unsupportedoption{letterpaper}}
       
   247 
       
   248 \DeclareOption{mathtime}{\@setflag \@mathtime = \@true}
       
   249 
       
   250 \DeclareOption{natbib}{\@setflag \@natbib = \@true}
       
   251 
       
   252 \DeclareOption{nonatbib}{\@setflag \@natbib = \@false}
       
   253 
       
   254 \DeclareOption{nocopyrightspace}{\@setflag \@copyrightwanted = \@false}
       
   255 
       
   256 \DeclareOption{notitlepage}{\@unsupportedoption{notitlepage}}
       
   257 
       
   258 \DeclareOption{numberedpars}{\@numheaddepth = 4}
       
   259 
       
   260 \DeclareOption{numbers}{\@setflag \@authoryear = \@false}
       
   261 
       
   262 %%%\DeclareOption{onecolumn}{\@setflag \@onecolumn = \@true}
       
   263 
       
   264 \DeclareOption{preprint}{\@setflag \@preprint = \@true}
       
   265 
       
   266 \DeclareOption{reprint}{\@setflag \@reprint = \@true}
       
   267 
       
   268 \DeclareOption{times}{\@setflag \@times = \@true}
       
   269 
       
   270 \DeclareOption{titlepage}{\@unsupportedoption{titlepage}}
       
   271 
       
   272 \DeclareOption{twocolumn}{\@setflag \@onecolumn = \@false}
       
   273 
       
   274 \DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
       
   275 
       
   276 \ExecuteOptions{9pt,indentedstyle,times}
       
   277 \@setflag \@explicitsize = \@false
       
   278 \ProcessOptions
       
   279 
       
   280 \if \@onecolumn
       
   281   \if \@notp{\@explicitsize}%
       
   282     \@setflag \@ninepoint = \@false
       
   283     \PassOptionsToClass{11pt}{article}%
       
   284   \fi
       
   285   \PassOptionsToClass{twoside,onecolumn}{article}
       
   286 \else
       
   287   \PassOptionsToClass{twoside,twocolumn}{article}
       
   288 \fi
       
   289 \LoadClass{article}
       
   290 
       
   291 \def \@unsupportedoption #1{%
       
   292   \ClassError{proc}{The standard '#1' option is not supported.}}
       
   293 
       
   294 % This can be used with the 'reprint' option to get the final folios.
       
   295 
       
   296 \def \setpagenumber #1{%
       
   297   \setcounter{page}{#1}}
       
   298 
       
   299 \AtEndDocument{\label{sigplanconf@finalpage}}
       
   300 
       
   301 %                       Utilities
       
   302 %                       ---------
       
   303 
       
   304 
       
   305 \newcommand{\setvspace}[2]{%
       
   306   #1 = #2
       
   307   \advance #1 by -1\parskip}
       
   308 
       
   309 %                       Document Parameters
       
   310 %                       -------- ----------
       
   311 
       
   312 
       
   313 % Page:
       
   314 
       
   315 \setlength{\hoffset}{-1in}
       
   316 \setlength{\voffset}{-1in}
       
   317 
       
   318 \setlength{\topmargin}{1in}
       
   319 \setlength{\headheight}{0pt}
       
   320 \setlength{\headsep}{0pt}
       
   321 
       
   322 \if \@onecolumn
       
   323   \setlength{\evensidemargin}{.75in}
       
   324   \setlength{\oddsidemargin}{.75in}
       
   325 \else
       
   326   \setlength{\evensidemargin}{.75in}
       
   327   \setlength{\oddsidemargin}{.75in}
       
   328 \fi
       
   329 
       
   330 % Text area:
       
   331 
       
   332 \newdimen{\standardtextwidth}
       
   333 \setlength{\standardtextwidth}{42pc}
       
   334 
       
   335 \if \@onecolumn
       
   336   \setlength{\textwidth}{40.5pc}
       
   337 \else
       
   338   \setlength{\textwidth}{\standardtextwidth}
       
   339 \fi
       
   340 
       
   341 \setlength{\topskip}{8pt}
       
   342 \setlength{\columnsep}{2pc}
       
   343 \setlength{\textheight}{54.5pc}
       
   344 
       
   345 % Running foot:
       
   346 
       
   347 \setlength{\footskip}{30pt}
       
   348 
       
   349 % Paragraphs:
       
   350 
       
   351 \if \@blockstyle
       
   352   \setlength{\parskip}{5pt plus .1pt minus .5pt}
       
   353   \setlength{\parindent}{0pt}
       
   354 \else
       
   355   \setlength{\parskip}{0pt}
       
   356   \setlength{\parindent}{12pt}
       
   357 \fi
       
   358 
       
   359 \setlength{\lineskip}{.5pt}
       
   360 \setlength{\lineskiplimit}{\lineskip}
       
   361 
       
   362 \frenchspacing
       
   363 \pretolerance = 400
       
   364 \tolerance = \pretolerance
       
   365 \setlength{\emergencystretch}{5pt}
       
   366 \clubpenalty = 10000
       
   367 \widowpenalty = 10000
       
   368 \setlength{\hfuzz}{.5pt}
       
   369 
       
   370 % Standard vertical spaces:
       
   371 
       
   372 \newskip{\standardvspace}
       
   373 \setvspace{\standardvspace}{5pt plus 1pt minus .5pt}
       
   374 
       
   375 % Margin paragraphs:
       
   376 
       
   377 \setlength{\marginparwidth}{36pt}
       
   378 \setlength{\marginparsep}{2pt}
       
   379 \setlength{\marginparpush}{8pt}
       
   380 
       
   381 
       
   382 \setlength{\skip\footins}{8pt plus 3pt minus 1pt}
       
   383 \setlength{\footnotesep}{9pt}
       
   384 
       
   385 \renewcommand{\footnoterule}{%
       
   386   \hrule width .5\columnwidth height .33pt depth 0pt}
       
   387 
       
   388 \renewcommand{\@makefntext}[1]{%
       
   389   \noindent \@makefnmark \hspace{1pt}#1}
       
   390 
       
   391 % Floats:
       
   392 
       
   393 \setcounter{topnumber}{4}
       
   394 \setcounter{bottomnumber}{1}
       
   395 \setcounter{totalnumber}{4}
       
   396 
       
   397 \renewcommand{\fps@figure}{tp}
       
   398 \renewcommand{\fps@table}{tp}
       
   399 \renewcommand{\topfraction}{0.90}
       
   400 \renewcommand{\bottomfraction}{0.30}
       
   401 \renewcommand{\textfraction}{0.10}
       
   402 \renewcommand{\floatpagefraction}{0.75}
       
   403 
       
   404 \setcounter{dbltopnumber}{4}
       
   405 
       
   406 \renewcommand{\dbltopfraction}{\topfraction}
       
   407 \renewcommand{\dblfloatpagefraction}{\floatpagefraction}
       
   408 
       
   409 \setlength{\floatsep}{18pt plus 4pt minus 2pt}
       
   410 \setlength{\textfloatsep}{18pt plus 4pt minus 3pt}
       
   411 \setlength{\intextsep}{10pt plus 4pt minus 3pt}
       
   412 
       
   413 \setlength{\dblfloatsep}{18pt plus 4pt minus 2pt}
       
   414 \setlength{\dbltextfloatsep}{20pt plus 4pt minus 3pt}
       
   415 
       
   416 % Miscellaneous:
       
   417 
       
   418 \errorcontextlines = 5
       
   419 
       
   420 %                       Fonts
       
   421 %                       -----
       
   422 
       
   423 
       
   424 \if \@times
       
   425   \renewcommand{\rmdefault}{ptm}%
       
   426   \if \@mathtime
       
   427     \usepackage[mtbold,noTS1]{mathtime}%
       
   428   \else
       
   429 %%%    \usepackage{mathptm}%
       
   430   \fi
       
   431 \else
       
   432   \relax
       
   433 \fi
       
   434 
       
   435 \if \@ninepoint
       
   436 
       
   437 \renewcommand{\normalsize}{%
       
   438   \@setfontsize{\normalsize}{9pt}{10pt}%
       
   439   \setlength{\abovedisplayskip}{5pt plus 1pt minus .5pt}%
       
   440   \setlength{\belowdisplayskip}{\abovedisplayskip}%
       
   441   \setlength{\abovedisplayshortskip}{3pt plus 1pt minus 2pt}%
       
   442   \setlength{\belowdisplayshortskip}{\abovedisplayshortskip}}
       
   443 
       
   444 \renewcommand{\tiny}{\@setfontsize{\tiny}{5pt}{6pt}}
       
   445 
       
   446 \renewcommand{\scriptsize}{\@setfontsize{\scriptsize}{7pt}{8pt}}
       
   447 
       
   448 \renewcommand{\small}{%
       
   449   \@setfontsize{\small}{8pt}{9pt}%
       
   450   \setlength{\abovedisplayskip}{4pt plus 1pt minus 1pt}%
       
   451   \setlength{\belowdisplayskip}{\abovedisplayskip}%
       
   452   \setlength{\abovedisplayshortskip}{2pt plus 1pt}%
       
   453   \setlength{\belowdisplayshortskip}{\abovedisplayshortskip}}
       
   454 
       
   455 \renewcommand{\footnotesize}{%
       
   456   \@setfontsize{\footnotesize}{8pt}{9pt}%
       
   457   \setlength{\abovedisplayskip}{4pt plus 1pt minus .5pt}%
       
   458   \setlength{\belowdisplayskip}{\abovedisplayskip}%
       
   459   \setlength{\abovedisplayshortskip}{2pt plus 1pt}%
       
   460   \setlength{\belowdisplayshortskip}{\abovedisplayshortskip}}
       
   461 
       
   462 \renewcommand{\large}{\@setfontsize{\large}{11pt}{13pt}}
       
   463 
       
   464 \renewcommand{\Large}{\@setfontsize{\Large}{14pt}{18pt}}
       
   465 
       
   466 \renewcommand{\LARGE}{\@setfontsize{\LARGE}{18pt}{20pt}}
       
   467 
       
   468 \renewcommand{\huge}{\@setfontsize{\huge}{20pt}{25pt}}
       
   469 
       
   470 \renewcommand{\Huge}{\@setfontsize{\Huge}{25pt}{30pt}}
       
   471 
       
   472 \else\if \@tenpoint
       
   473 
       
   474 \relax
       
   475 
       
   476 \else
       
   477 
       
   478 \relax
       
   479 
       
   480 \fi\fi
       
   481 
       
   482 %                       Abstract
       
   483 %                       --------
       
   484 
       
   485 
       
   486 \renewenvironment{abstract}{%
       
   487   \section*{Abstract}%
       
   488   \normalsize}{%
       
   489   }
       
   490 
       
   491 %                       Bibliography
       
   492 %                       ------------
       
   493 
       
   494 
       
   495 \renewenvironment{thebibliography}[1]
       
   496      {\section*{\refname
       
   497         \@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}}%
       
   498       \list{\@biblabel{\@arabic\c@enumiv}}%
       
   499            {\settowidth\labelwidth{\@biblabel{#1}}%
       
   500             \leftmargin\labelwidth
       
   501             \advance\leftmargin\labelsep
       
   502             \@openbib@code
       
   503             \usecounter{enumiv}%
       
   504             \let\p@enumiv\@empty
       
   505             \renewcommand\theenumiv{\@arabic\c@enumiv}}%
       
   506       \bibfont
       
   507       \clubpenalty4000
       
   508       \@clubpenalty \clubpenalty
       
   509       \widowpenalty4000%
       
   510       \sfcode`\.\@m}
       
   511      {\def\@noitemerr
       
   512        {\@latex@warning{Empty `thebibliography' environment}}%
       
   513       \endlist}
       
   514 
       
   515 \if \@natbib
       
   516 
       
   517 \if \@authoryear
       
   518   \typeout{Using natbib package with 'authoryear' citation style.}
       
   519   \usepackage[authoryear,sort,square]{natbib}
       
   520   \bibpunct{[}{]}{;}{a}{}{,}    % Change citation separator to semicolon,
       
   521                                 % eliminate comma between author and year.
       
   522   \let \cite = \citep
       
   523 \else
       
   524   \typeout{Using natbib package with 'numbers' citation style.}
       
   525   \usepackage[numbers,sort&compress,square]{natbib}
       
   526 \fi
       
   527 \setlength{\bibsep}{3pt plus .5pt minus .25pt}
       
   528 
       
   529 \fi
       
   530 
       
   531 \def \bibfont {\small}
       
   532 
       
   533 %                       Categories
       
   534 %                       ----------
       
   535 
       
   536 
       
   537 \@setflag \@firstcategory = \@true
       
   538 
       
   539 \newcommand{\category}[3]{%
       
   540   \if \@firstcategory
       
   541     \paragraph*{Categories and Subject Descriptors}%
       
   542     \@setflag \@firstcategory = \@false
       
   543   \else
       
   544     \unskip ;\hspace{.75em}%
       
   545   \fi
       
   546   \@ifnextchar [{\@category{#1}{#2}{#3}}{\@category{#1}{#2}{#3}[]}}
       
   547 
       
   548 \def \@category #1#2#3[#4]{%
       
   549   {\let \and = \relax
       
   550    #1 [\textit{#2}]%
       
   551    \if \@emptyargp{#4}%
       
   552      \if \@notp{\@emptyargp{#3}}: #3\fi
       
   553    \else
       
   554      :\space
       
   555      \if \@notp{\@emptyargp{#3}}#3---\fi
       
   556      \textrm{#4}%
       
   557    \fi}}
       
   558 
       
   559 %                       Copyright Notice
       
   560 %                       --------- ------
       
   561 
       
   562 
       
   563 \def \ftype@copyrightbox {8}
       
   564 \def \@toappear {}
       
   565 \def \@permission {}
       
   566 \def \@reprintprice {}
       
   567 
       
   568 \def \@copyrightspace {%
       
   569   \@float{copyrightbox}[b]%
       
   570   \vbox to 1in{%
       
   571     \vfill
       
   572     \parbox[b]{20pc}{%
       
   573       \scriptsize
       
   574       \if \@preprint
       
   575         [Copyright notice will appear here
       
   576          once 'preprint' option is removed.]\par
       
   577       \else
       
   578         \@toappear
       
   579       \fi
       
   580       \if \@reprint
       
   581         \noindent Reprinted from \@conferencename,
       
   582         \@proceedings,
       
   583         \@conferenceinfo,
       
   584         pp.~\number\thepage--\pageref{sigplanconf@finalpage}.\par
       
   585       \fi}}%
       
   586   \end@float}
       
   587 
       
   588 \long\def \toappear #1{%
       
   589   \def \@toappear {#1}}
       
   590 
       
   591 \toappear{%
       
   592   \noindent \@permission \par
       
   593   \vspace{2pt}
       
   594   \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par
       
   595   \noindent Copyright \copyright\ \@copyrightyear\ ACM \@copyrightdata
       
   596     \dots \@reprintprice\par}
       
   597 
       
   598 \newcommand{\permission}[1]{%
       
   599   \gdef \@permission {#1}}
       
   600 
       
   601 \permission{%
       
   602   Permission to make digital or hard copies of all or
       
   603   part of this work for personal or classroom use is granted without
       
   604   fee provided that copies are not made or distributed for profit or
       
   605   commercial advantage and that copies bear this notice and the full
       
   606   citation on the first page.  To copy otherwise, to republish, to
       
   607   post on servers or to redistribute to lists, requires prior specific
       
   608   permission and/or a fee.}
       
   609 
       
   610 % Here we have some alternate permission statements and copyright lines:
       
   611 
       
   612 \newcommand{\ACMCanadapermission}{%
       
   613   \permission{%
       
   614     Copyright \@copyrightyear\ Association for Computing Machinery.
       
   615     ACM acknowledges that
       
   616     this contribution was authored or co-authored by an affiliate of the
       
   617     National Research Council of Canada (NRC).
       
   618     As such, the Crown in Right of
       
   619     Canada retains an equal interest in the copyright, however granting
       
   620     nonexclusive, royalty-free right to publish or reproduce this article,
       
   621     or to allow others to do so, provided that clear attribution
       
   622     is also given to the authors and the NRC.}}
       
   623 
       
   624 \newcommand{\ACMUSpermission}{%
       
   625   \permission{%
       
   626     Copyright \@copyrightyear\ Association for
       
   627     Computing Machinery. ACM acknowledges that
       
   628     this contribution was authored or co-authored
       
   629     by a contractor or affiliate
       
   630     of the U.S. Government. As such, the Government retains a nonexclusive,
       
   631     royalty-free right to publish or reproduce this article,
       
   632     or to allow others to do so, for Government purposes only.}}
       
   633 
       
   634 \newcommand{\authorpermission}{%
       
   635   \permission{%
       
   636     Copyright is held by the author/owner(s).}
       
   637   \toappear{%
       
   638     \noindent \@permission \par
       
   639     \vspace{2pt}
       
   640     \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par
       
   641     ACM \@copyrightdata.}}
       
   642 
       
   643 \newcommand{\Sunpermission}{%
       
   644   \permission{%
       
   645     Copyright is held by Sun Microsystems, Inc.}%
       
   646   \toappear{%
       
   647     \noindent \@permission \par
       
   648     \vspace{2pt}
       
   649     \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par
       
   650     ACM \@copyrightdata.}}
       
   651 
       
   652 \newcommand{\USpublicpermission}{%
       
   653   \permission{%
       
   654     This paper is authored by an employee(s) of the United States
       
   655     Government and is in the public domain.}%
       
   656   \toappear{%
       
   657     \noindent \@permission \par
       
   658     \vspace{2pt}
       
   659     \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par
       
   660     ACM \@copyrightdata.}}
       
   661 
       
   662 \newcommand{\reprintprice}[1]{%
       
   663   \gdef \@reprintprice {#1}}
       
   664 
       
   665 \reprintprice{\$10.00}
       
   666 
       
   667 %                       Enunciations
       
   668 %                       ------------
       
   669 
       
   670 
       
   671 \def \@begintheorem #1#2{%                      {name}{number}
       
   672   \trivlist
       
   673   \item[\hskip \labelsep \textsc{#1 #2.}]%
       
   674   \itshape\selectfont
       
   675   \ignorespaces}
       
   676 
       
   677 \def \@opargbegintheorem #1#2#3{%               {name}{number}{title}
       
   678   \trivlist
       
   679   \item[%
       
   680     \hskip\labelsep \textsc{#1\ #2}%
       
   681     \if \@notp{\@emptyargp{#3}}\nut (#3).\fi]%
       
   682   \itshape\selectfont
       
   683   \ignorespaces}
       
   684 
       
   685 %                       Figures
       
   686 %                       -------
       
   687 
       
   688 
       
   689 \@setflag \@caprule = \@true
       
   690 
       
   691 \long\def \@makecaption #1#2{%
       
   692   \addvspace{4pt}
       
   693   \if \@caprule
       
   694     \hrule width \hsize height .33pt
       
   695     \vspace{4pt}
       
   696   \fi
       
   697   \setbox \@tempboxa = \hbox{\@setfigurenumber{#1.}\nut #2}%
       
   698   \if \@dimgtrp{\wd\@tempboxa}{\hsize}%
       
   699     \noindent \@setfigurenumber{#1.}\nut #2\par
       
   700   \else
       
   701     \centerline{\box\@tempboxa}%
       
   702   \fi}
       
   703 
       
   704 \newcommand{\nocaptionrule}{%
       
   705   \@setflag \@caprule = \@false}
       
   706 
       
   707 \def \@setfigurenumber #1{%
       
   708   {\rmfamily \bfseries \selectfont #1}}
       
   709 
       
   710 %                       Hierarchy
       
   711 %                       ---------
       
   712 
       
   713 
       
   714 \setcounter{secnumdepth}{\@numheaddepth}
       
   715 
       
   716 \newskip{\@sectionaboveskip}
       
   717 \setvspace{\@sectionaboveskip}{10pt plus 3pt minus 2pt}
       
   718 
       
   719 \newskip{\@sectionbelowskip}
       
   720 \if \@blockstyle
       
   721   \setlength{\@sectionbelowskip}{0.1pt}%
       
   722 \else
       
   723   \setlength{\@sectionbelowskip}{4pt}%
       
   724 \fi
       
   725 
       
   726 \renewcommand{\section}{%
       
   727   \@startsection
       
   728     {section}%
       
   729     {1}%
       
   730     {0pt}%
       
   731     {-\@sectionaboveskip}%
       
   732     {\@sectionbelowskip}%
       
   733     {\large \bfseries \raggedright}}
       
   734 
       
   735 \newskip{\@subsectionaboveskip}
       
   736 \setvspace{\@subsectionaboveskip}{8pt plus 2pt minus 2pt}
       
   737 
       
   738 \newskip{\@subsectionbelowskip}
       
   739 \if \@blockstyle
       
   740   \setlength{\@subsectionbelowskip}{0.1pt}%
       
   741 \else
       
   742   \setlength{\@subsectionbelowskip}{4pt}%
       
   743 \fi
       
   744 
       
   745 \renewcommand{\subsection}{%
       
   746   \@startsection%
       
   747     {subsection}%
       
   748     {2}%
       
   749     {0pt}%
       
   750     {-\@subsectionaboveskip}%
       
   751     {\@subsectionbelowskip}%
       
   752     {\normalsize \bfseries \raggedright}}
       
   753 
       
   754 \renewcommand{\subsubsection}{%
       
   755   \@startsection%
       
   756     {subsubsection}%
       
   757     {3}%
       
   758     {0pt}%
       
   759     {-\@subsectionaboveskip}
       
   760     {\@subsectionbelowskip}%
       
   761     {\normalsize \bfseries \raggedright}}
       
   762 
       
   763 \newskip{\@paragraphaboveskip}
       
   764 \setvspace{\@paragraphaboveskip}{6pt plus 2pt minus 2pt}
       
   765 
       
   766 \renewcommand{\paragraph}{%
       
   767   \@startsection%
       
   768     {paragraph}%
       
   769     {4}%
       
   770     {0pt}%
       
   771     {\@paragraphaboveskip}
       
   772     {-1em}%
       
   773     {\normalsize \bfseries \if \@times \itshape \fi}}
       
   774 
       
   775 \renewcommand{\subparagraph}{%
       
   776   \@startsection%
       
   777     {subparagraph}%
       
   778     {4}%
       
   779     {0pt}%
       
   780     {\@paragraphaboveskip}
       
   781     {-1em}%
       
   782     {\normalsize \itshape}}
       
   783 
       
   784 % Standard headings:
       
   785 
       
   786 \newcommand{\acks}{\section*{Acknowledgments}}
       
   787 
       
   788 \newcommand{\keywords}{\paragraph*{Keywords}}
       
   789 
       
   790 \newcommand{\terms}{\paragraph*{General Terms}}
       
   791 
       
   792 %                       Identification
       
   793 %                       --------------
       
   794 
       
   795 
       
   796 \def \@conferencename {}
       
   797 \def \@conferenceinfo {}
       
   798 \def \@copyrightyear {}
       
   799 \def \@copyrightdata {[to be supplied]}
       
   800 \def \@proceedings {[Unknown Proceedings]}
       
   801 
       
   802 
       
   803 \newcommand{\conferenceinfo}[2]{%
       
   804   \gdef \@conferencename {#1}%
       
   805   \gdef \@conferenceinfo {#2}}
       
   806 
       
   807 \newcommand{\copyrightyear}[1]{%
       
   808   \gdef \@copyrightyear {#1}}
       
   809 
       
   810 \let \CopyrightYear = \copyrightyear
       
   811 
       
   812 \newcommand{\copyrightdata}[1]{%
       
   813   \gdef \@copyrightdata {#1}}
       
   814 
       
   815 \let \crdata = \copyrightdata
       
   816 
       
   817 \newcommand{\proceedings}[1]{%
       
   818   \gdef \@proceedings {#1}}
       
   819 
       
   820 %                       Lists
       
   821 %                       -----
       
   822 
       
   823 
       
   824 \setlength{\leftmargini}{13pt}
       
   825 \setlength\leftmarginii{13pt}
       
   826 \setlength\leftmarginiii{13pt}
       
   827 \setlength\leftmarginiv{13pt}
       
   828 \setlength{\labelsep}{3.5pt}
       
   829 
       
   830 \setlength{\topsep}{\standardvspace}
       
   831 \if \@blockstyle
       
   832   \setlength{\itemsep}{1pt}
       
   833   \setlength{\parsep}{3pt}
       
   834 \else
       
   835   \setlength{\itemsep}{1pt}
       
   836   \setlength{\parsep}{3pt}
       
   837 \fi
       
   838 
       
   839 \renewcommand{\labelitemi}{{\small \centeroncapheight{\textbullet}}}
       
   840 \renewcommand{\labelitemii}{\centeroncapheight{\rule{2.5pt}{2.5pt}}}
       
   841 \renewcommand{\labelitemiii}{$-$}
       
   842 \renewcommand{\labelitemiv}{{\Large \textperiodcentered}}
       
   843 
       
   844 \renewcommand{\@listi}{%
       
   845   \leftmargin = \leftmargini
       
   846   \listparindent = 0pt}
       
   847 %%%  \itemsep = 1pt
       
   848 %%%  \parsep = 3pt}
       
   849 %%%  \listparindent = \parindent}
       
   850 
       
   851 \let \@listI = \@listi
       
   852 
       
   853 \renewcommand{\@listii}{%
       
   854   \leftmargin = \leftmarginii
       
   855   \topsep = 1pt
       
   856   \labelwidth = \leftmarginii
       
   857   \advance \labelwidth by -\labelsep
       
   858   \listparindent = \parindent}
       
   859 
       
   860 \renewcommand{\@listiii}{%
       
   861   \leftmargin = \leftmarginiii
       
   862   \labelwidth = \leftmarginiii
       
   863   \advance \labelwidth by -\labelsep
       
   864   \listparindent = \parindent}
       
   865 
       
   866 \renewcommand{\@listiv}{%
       
   867   \leftmargin = \leftmarginiv
       
   868   \labelwidth = \leftmarginiv
       
   869   \advance \labelwidth by -\labelsep
       
   870   \listparindent = \parindent}
       
   871 
       
   872 %                       Mathematics
       
   873 %                       -----------
       
   874 
       
   875 
       
   876 \def \theequation {\arabic{equation}}
       
   877 
       
   878 %                       Miscellaneous
       
   879 %                       -------------
       
   880 
       
   881 
       
   882 \newcommand{\balancecolumns}{%
       
   883   \vfill\eject
       
   884   \global\@colht = \textheight
       
   885   \global\ht\@cclv = \textheight}
       
   886 
       
   887 \newcommand{\nut}{\hspace{.5em}}
       
   888 
       
   889 \newcommand{\softraggedright}{%
       
   890   \let \\ = \@centercr
       
   891   \leftskip = 0pt
       
   892   \rightskip = 0pt plus 10pt}
       
   893 
       
   894 %                       Program Code
       
   895 %                       ------- ----
       
   896 
       
   897 
       
   898 \newcommand{\mono}[1]{%
       
   899   {\@tempdima = \fontdimen2\font
       
   900    \texttt{\spaceskip = 1.1\@tempdima #1}}}
       
   901 
       
   902 %                       Running Heads and Feet
       
   903 %                       ------- ----- --- ----
       
   904 
       
   905 
       
   906 \def \@preprintfooter {}
       
   907 
       
   908 \newcommand{\preprintfooter}[1]{%
       
   909   \gdef \@preprintfooter {#1}}
       
   910 
       
   911 \if \@preprint
       
   912 
       
   913 \def \ps@plain {%
       
   914   \let \@mkboth = \@gobbletwo
       
   915   \let \@evenhead = \@empty
       
   916   \def \@evenfoot {\scriptsize \textit{\@preprintfooter}\hfil \thepage \hfil
       
   917                    \textit{\@formatyear}}%
       
   918   \let \@oddhead = \@empty
       
   919   \let \@oddfoot = \@evenfoot}
       
   920 
       
   921 \else\if \@reprint
       
   922 
       
   923 \def \ps@plain {%
       
   924   \let \@mkboth = \@gobbletwo
       
   925   \let \@evenhead = \@empty
       
   926   \def \@evenfoot {\scriptsize \hfil \thepage \hfil}%
       
   927   \let \@oddhead = \@empty
       
   928   \let \@oddfoot = \@evenfoot}
       
   929 
       
   930 \else
       
   931 
       
   932 \let \ps@plain = \ps@empty
       
   933 \let \ps@headings = \ps@empty
       
   934 \let \ps@myheadings = \ps@empty
       
   935 
       
   936 \fi\fi
       
   937 
       
   938 \def \@formatyear {%
       
   939   \number\year/\number\month/\number\day}
       
   940 
       
   941 %                       Special Characters
       
   942 %                       ------- ----------
       
   943 
       
   944 
       
   945 \DeclareRobustCommand{\euro}{%
       
   946   \protect{\rlap{=}}{\sf \kern .1em C}}
       
   947 
       
   948 %                       Title Page
       
   949 %                       ----- ----
       
   950 
       
   951 
       
   952 \@setflag \@addauthorsdone = \@false
       
   953 
       
   954 \def \@titletext {\@latex@error{No title was provided}{}}
       
   955 \def \@subtitletext {}
       
   956 
       
   957 \newcount{\@authorcount}
       
   958 
       
   959 \newcount{\@titlenotecount}
       
   960 \newtoks{\@titlenotetext}
       
   961 
       
   962 \def \@titlebanner {}
       
   963 
       
   964 \renewcommand{\title}[1]{%
       
   965   \gdef \@titletext {#1}}
       
   966 
       
   967 \newcommand{\subtitle}[1]{%
       
   968   \gdef \@subtitletext {#1}}
       
   969 
       
   970 \newcommand{\authorinfo}[3]{%           {names}{affiliation}{email/URL}
       
   971   \global\@increment \@authorcount
       
   972   \@withname\gdef {\@authorname\romannumeral\@authorcount}{#1}%
       
   973   \@withname\gdef {\@authoraffil\romannumeral\@authorcount}{#2}%
       
   974   \@withname\gdef {\@authoremail\romannumeral\@authorcount}{#3}}
       
   975 
       
   976 \renewcommand{\author}[1]{%
       
   977   \@latex@error{The \string\author\space command is obsolete;
       
   978                 use \string\authorinfo}{}}
       
   979 
       
   980 \newcommand{\titlebanner}[1]{%
       
   981   \gdef \@titlebanner {#1}}
       
   982 
       
   983 \renewcommand{\maketitle}{%
       
   984   \pagestyle{plain}%
       
   985   \if \@onecolumn
       
   986     {\hsize = \standardtextwidth
       
   987      \@maketitle}%
       
   988   \else
       
   989     \twocolumn[\@maketitle]%
       
   990   \fi
       
   991   \@placetitlenotes
       
   992   \if \@copyrightwanted \@copyrightspace \fi}
       
   993 
       
   994 \def \@maketitle {%
       
   995   \begin{center}
       
   996   \@settitlebanner
       
   997   \let \thanks = \titlenote
       
   998   {\leftskip = 0pt plus 0.25\linewidth
       
   999    \rightskip = 0pt plus 0.25 \linewidth
       
  1000    \parfillskip = 0pt
       
  1001    \spaceskip = .7em
       
  1002    \noindent \LARGE \bfseries \@titletext \par}
       
  1003   \vskip 6pt
       
  1004   \noindent \Large \@subtitletext \par
       
  1005   \vskip 12pt
       
  1006   \ifcase \@authorcount
       
  1007     \@latex@error{No authors were specified for this paper}{}\or
       
  1008     \@titleauthors{i}{}{}\or
       
  1009     \@titleauthors{i}{ii}{}\or
       
  1010     \@titleauthors{i}{ii}{iii}\or
       
  1011     \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{}{}\or
       
  1012     \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{}\or
       
  1013     \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}\or
       
  1014     \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
       
  1015                   \@titleauthors{vii}{}{}\or
       
  1016     \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
       
  1017                   \@titleauthors{vii}{viii}{}\or
       
  1018     \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
       
  1019                   \@titleauthors{vii}{viii}{ix}\or
       
  1020     \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
       
  1021                   \@titleauthors{vii}{viii}{ix}\@titleauthors{x}{}{}\or
       
  1022     \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
       
  1023                   \@titleauthors{vii}{viii}{ix}\@titleauthors{x}{xi}{}\or
       
  1024     \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
       
  1025                   \@titleauthors{vii}{viii}{ix}\@titleauthors{x}{xi}{xii}%
       
  1026   \else
       
  1027     \@latex@error{Cannot handle more than 12 authors}{}%
       
  1028   \fi
       
  1029   \vspace{1.75pc}
       
  1030   \end{center}}
       
  1031 
       
  1032 \def \@settitlebanner {%
       
  1033   \if \@andp{\@preprint}{\@notp{\@emptydefp{\@titlebanner}}}%
       
  1034     \vbox to 0pt{%
       
  1035       \vskip -32pt
       
  1036       \noindent \textbf{\@titlebanner}\par
       
  1037       \vss}%
       
  1038     \nointerlineskip
       
  1039   \fi}
       
  1040 
       
  1041 \def \@titleauthors #1#2#3{%
       
  1042   \if \@andp{\@emptyargp{#2}}{\@emptyargp{#3}}%
       
  1043     \noindent \@setauthor{40pc}{#1}{\@false}\par
       
  1044   \else\if \@emptyargp{#3}%
       
  1045     \noindent \@setauthor{17pc}{#1}{\@false}\hspace{3pc}%
       
  1046               \@setauthor{17pc}{#2}{\@false}\par
       
  1047   \else
       
  1048     \noindent \@setauthor{12.5pc}{#1}{\@false}\hspace{2pc}%
       
  1049               \@setauthor{12.5pc}{#2}{\@false}\hspace{2pc}%
       
  1050               \@setauthor{12.5pc}{#3}{\@true}\par
       
  1051     \relax
       
  1052   \fi\fi
       
  1053   \vspace{20pt}}
       
  1054 
       
  1055 \def \@setauthor #1#2#3{%                       {width}{text}{unused}
       
  1056   \vtop{%
       
  1057     \def \and {%
       
  1058       \hspace{16pt}}
       
  1059     \hsize = #1
       
  1060     \normalfont
       
  1061     \centering
       
  1062     \large \@name{\@authorname#2}\par
       
  1063     \vspace{5pt}
       
  1064     \normalsize \@name{\@authoraffil#2}\par
       
  1065     \vspace{2pt}
       
  1066     \textsf{\@name{\@authoremail#2}}\par}}
       
  1067 
       
  1068 \def \@maybetitlenote #1{%
       
  1069   \if \@andp{#1}{\@gtrp{\@authorcount}{3}}%
       
  1070     \titlenote{See page~\pageref{@addauthors} for additional authors.}%
       
  1071   \fi}
       
  1072 
       
  1073 \newtoks{\@fnmark}
       
  1074 
       
  1075 \newcommand{\titlenote}[1]{%
       
  1076   \global\@increment \@titlenotecount
       
  1077   \ifcase \@titlenotecount \relax \or
       
  1078     \@fnmark = {\ast}\or
       
  1079     \@fnmark = {\dagger}\or
       
  1080     \@fnmark = {\ddagger}\or
       
  1081     \@fnmark = {\S}\or
       
  1082     \@fnmark = {\P}\or
       
  1083     \@fnmark = {\ast\ast}%
       
  1084   \fi
       
  1085   \,$^{\the\@fnmark}$%
       
  1086   \edef \reserved@a {\noexpand\@appendtotext{%
       
  1087                        \noexpand\@titlefootnote{\the\@fnmark}}}%
       
  1088   \reserved@a{#1}}
       
  1089 
       
  1090 \def \@appendtotext #1#2{%
       
  1091   \global\@titlenotetext = \expandafter{\the\@titlenotetext #1{#2}}}
       
  1092 
       
  1093 \newcount{\@authori}
       
  1094 
       
  1095 \iffalse
       
  1096 \def \additionalauthors {%
       
  1097   \if \@gtrp{\@authorcount}{3}%
       
  1098     \section{Additional Authors}%
       
  1099     \label{@addauthors}%
       
  1100     \noindent
       
  1101     \@authori = 4
       
  1102     {\let \\ = ,%
       
  1103      \loop 
       
  1104        \textbf{\@name{\@authorname\romannumeral\@authori}},
       
  1105        \@name{\@authoraffil\romannumeral\@authori},
       
  1106        email: \@name{\@authoremail\romannumeral\@authori}.%
       
  1107        \@increment \@authori
       
  1108      \if \@notp{\@gtrp{\@authori}{\@authorcount}} \repeat}%
       
  1109     \par
       
  1110   \fi
       
  1111   \global\@setflag \@addauthorsdone = \@true}
       
  1112 \fi
       
  1113 
       
  1114 \let \addauthorsection = \additionalauthors
       
  1115 
       
  1116 \def \@placetitlenotes {
       
  1117   \the\@titlenotetext}
       
  1118 
       
  1119 %                       Utilities
       
  1120 %                       ---------
       
  1121 
       
  1122 
       
  1123 \newcommand{\centeroncapheight}[1]{%
       
  1124   {\setbox\@tempboxa = \hbox{#1}%
       
  1125    \@measurecapheight{\@tempdima}%         % Calculate ht(CAP) - ht(text)
       
  1126    \advance \@tempdima by -\ht\@tempboxa   %           ------------------
       
  1127    \divide \@tempdima by 2                 %                   2
       
  1128    \raise \@tempdima \box\@tempboxa}}
       
  1129 
       
  1130 \newbox{\@measbox}
       
  1131 
       
  1132 \def \@measurecapheight #1{%                            {\dimen}
       
  1133   \setbox\@measbox = \hbox{ABCDEFGHIJKLMNOPQRSTUVWXYZ}%
       
  1134   #1 = \ht\@measbox}
       
  1135 
       
  1136 \long\def \@titlefootnote #1#2{%
       
  1137   \insert\footins{%
       
  1138     \reset@font\footnotesize
       
  1139     \interlinepenalty\interfootnotelinepenalty
       
  1140     \splittopskip\footnotesep
       
  1141     \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
       
  1142     \hsize\columnwidth \@parboxrestore
       
  1143 %%%    \protected@edef\@currentlabel{%
       
  1144 %%%       \csname p@footnote\endcsname\@thefnmark}%
       
  1145     \color@begingroup
       
  1146       \def \@makefnmark {$^{#1}$}%
       
  1147       \@makefntext{%
       
  1148         \rule\z@\footnotesep\ignorespaces#2\@finalstrut\strutbox}%
       
  1149     \color@endgroup}}
       
  1150 
       
  1151 %                       LaTeX Modifications
       
  1152 %                       ----- -------------
       
  1153 
       
  1154 \def \@seccntformat #1{%
       
  1155   \@name{\the#1}%
       
  1156   \@expandaftertwice\@seccntformata \csname the#1\endcsname.\@mark
       
  1157   \quad}
       
  1158 
       
  1159 \def \@seccntformata #1.#2\@mark{%
       
  1160   \if \@emptyargp{#2}.\fi}
       
  1161 
       
  1162 %                       Revision History
       
  1163 %                       -------- -------
       
  1164 
       
  1165 
       
  1166 %  Date         Person  Ver.    Change
       
  1167 %  ----         ------  ----    ------
       
  1168 
       
  1169 %  2004.09.12   PCA     0.1--5  Preliminary development.
       
  1170 
       
  1171 %  2004.11.18   PCA     0.5     Start beta testing.
       
  1172 
       
  1173 %  2004.11.19   PCA     0.6     Obsolete \author and replace with
       
  1174 %                               \authorinfo.
       
  1175 %                               Add 'nocopyrightspace' option.
       
  1176 %                               Compress article opener spacing.
       
  1177 %                               Add 'mathtime' option.
       
  1178 %                               Increase text height by 6 points.
       
  1179 
       
  1180 %  2004.11.28   PCA     0.7     Add 'cm/computermodern' options.
       
  1181 %                               Change default to Times text.
       
  1182 
       
  1183 %  2004.12.14   PCA     0.8     Remove use of mathptm.sty; it cannot
       
  1184 %                               coexist with latexsym or amssymb.
       
  1185 
       
  1186 %  2005.01.20   PCA     0.9     Rename class file to sigplanconf.cls.
       
  1187 
       
  1188 %  2005.03.05   PCA     0.91    Change default copyright data.
       
  1189 
       
  1190 %  2005.03.06   PCA     0.92    Add at-signs to some macro names.
       
  1191 
       
  1192 %  2005.03.07   PCA     0.93    The 'onecolumn' option defaults to '11pt',
       
  1193 %                               and it uses the full type width.
       
  1194 
       
  1195 %  2005.03.15   PCA     0.94    Add at-signs to more macro names.
       
  1196 %                               Allow margin paragraphs during review.
       
  1197 
       
  1198 %  2005.03.22   PCA     0.95    Implement \euro.
       
  1199 %                               Remove proof and newdef environments.
       
  1200 
       
  1201 %  2005.05.06   PCA     1.0     Eliminate 'onecolumn' option.
       
  1202 %                               Change footer to small italic and eliminate
       
  1203 %                               left portion if no \preprintfooter.
       
  1204 %                               Eliminate copyright notice if preprint.
       
  1205 %                               Clean up and shrink copyright box.
       
  1206 
       
  1207 %  2005.05.30   PCA     1.1     Add alternate permission statements.
       
  1208 
       
  1209 %  2005.06.29   PCA     1.1     Publish final first edition of guide.
       
  1210 
       
  1211 %  2005.07.14   PCA     1.2     Add \subparagraph.
       
  1212 %                               Use block paragraphs in lists, and adjust
       
  1213 %                               spacing between items and paragraphs.
       
  1214 
       
  1215 %  2006.06.22   PCA     1.3     Add 'reprint' option and associated
       
  1216 %                               commands.
       
  1217 
       
  1218 %  2006.08.24   PCA     1.4     Fix bug in \maketitle case command.
       
  1219 
       
  1220 %  2007.03.13   PCA     1.5     The title banner only displays with the
       
  1221 %                               'preprint' option.
       
  1222 
       
  1223 %  2007.06.06   PCA     1.6     Use \bibfont in \thebibliography.
       
  1224 %                               Add 'natbib' option to load and configure
       
  1225 %                                 the natbib package.
       
  1226 
       
  1227 %  2007.11.20   PCA     1.7     Balance line lengths in centered article
       
  1228 %                                 title (thanks to Norman Ramsey).
       
  1229 
       
  1230 %  2009.01.26   PCA     1.8     Change natbib \bibpunct values.
       
  1231 
       
  1232 %  2009.03.24   PCA     1.9     Change natbib to use the 'numbers' option.
       
  1233 %                               Change templates to use 'natbib' option.
       
  1234 
       
  1235 %  2009.09.01   PCA     2.0     Add \reprintprice command (suggested by
       
  1236 %                                 Stephen Chong).
       
  1237 
       
  1238 %  2009.09.08   PCA     2.1     Make 'natbib' the default; add 'nonatbib'.
       
  1239 %               SB              Add 'authoryear' and 'numbers' (default) to
       
  1240 %                               control citation style when using natbib.
       
  1241 %                               Add \bibpunct to change punctuation for
       
  1242 %                               'authoryear' style.
       
  1243 
       
  1244 %  2009.09.21   PCA     2.2     Add \softraggedright to the thebibliography
       
  1245 %                               environment. Also add to template so it will
       
  1246 %                               happen with natbib.
       
  1247 
       
  1248 %  2009.09.30   PCA     2.3     Remove \softraggedright from thebibliography.  
       
  1249 %                               Just include in the template.
       
  1250 
       
  1251 %  2010.05.24   PCA     2.4     Obfuscate author's email address.