1 %-----------------------------------------------------------------------------
3 % LaTeX Class/Style File
5 % Name: sigplanconf.cls
7 % Purpose: A LaTeX 2e class file for SIGPLAN conference proceedings.
8 % This class file supercedes acm_proc_article-sp,
9 % sig-alternate, and sigplan-proc.
11 % Author: Paul C. Anagnostopoulos
14 % paul [atsign] windfall.com
16 % Created: 12 September 2004
18 % Revisions: See end of file.
20 % This work is licensed under the Creative Commons Attribution License.
21 % To view a copy of this license, visit
22 % http://creativecommons.org/licenses/by/3.0/
23 % or send a letter to Creative Commons, 171 2nd Street, Suite 300,
24 % San Francisco, California, 94105, U.S.A.
26 %-----------------------------------------------------------------------------
29 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
30 \ProvidesClass{sigplanconf}[2011/11/08 v2.5 ACM SIGPLAN Proceedings]
32 % The following few pages contain LaTeX programming extensions adapted
33 % from the ZzTeX macro package.
39 \def \@expandaftertwice {\expandafter\expandafter\expandafter}
40 \def \@expandafterthrice {\expandafter\expandafter\expandafter\expandafter
41 \expandafter\expandafter\expandafter}
43 % This macro discards the next token.
45 \def \@discardtok #1{}% token
47 % This macro removes the `pt' following a dimension.
49 {\catcode `\p = 12 \catcode `\t = 12
51 \gdef \@remover #1pt{#1}
55 % This macro extracts the contents of a macro and returns it as plain text.
56 % Usage: \expandafter\@defof \meaning\macro\@mark
58 \def \@defof #1:->#2\@mark{#2}
60 % Control Sequence Names
61 % ------- -------- -----
64 \def \@name #1{% {\tokens}
65 \csname \expandafter\@discardtok \string#1\endcsname}
67 \def \@withname #1#2{% {\command}{\tokens}
68 \expandafter#1\csname \expandafter\@discardtok \string#2\endcsname}
73 % The boolean literals \@true and \@false are appropriate for use with
74 % the \if command, which tests the codes of the next two characters.
79 \def \@setflag #1=#2{\edef #1{#2}}% \flag = boolean
84 % A "predicate" is a macro that returns \@true or \@false as its value.
85 % Such values are suitable for use with the \if conditional. For example:
87 % \if \@oddp{\x} <then-clause> \else <else-clause> \fi
89 % A predicate can be used with \@setflag as follows:
91 % \@setflag \flag = {<predicate>}
93 % Here are the predicates for TeX's repertoire of conditional
94 % commands. These might be more appropriately interspersed with
95 % other definitions in this module, but what the heck.
96 % Some additional "obvious" predicates are defined.
98 \def \@eqlp #1#2{\ifnum #1 = #2\@true \else \@false \fi}
99 \def \@neqlp #1#2{\ifnum #1 = #2\@false \else \@true \fi}
100 \def \@lssp #1#2{\ifnum #1 < #2\@true \else \@false \fi}
101 \def \@gtrp #1#2{\ifnum #1 > #2\@true \else \@false \fi}
102 \def \@zerop #1{\ifnum #1 = 0\@true \else \@false \fi}
103 \def \@onep #1{\ifnum #1 = 1\@true \else \@false \fi}
104 \def \@posp #1{\ifnum #1 > 0\@true \else \@false \fi}
105 \def \@negp #1{\ifnum #1 < 0\@true \else \@false \fi}
106 \def \@oddp #1{\ifodd #1\@true \else \@false \fi}
107 \def \@evenp #1{\ifodd #1\@false \else \@true \fi}
108 \def \@rangep #1#2#3{\if \@orp{\@lssp{#1}{#2}}{\@gtrp{#1}{#3}}\@false \else
110 \def \@tensp #1{\@rangep{#1}{10}{19}}
112 \def \@dimeqlp #1#2{\ifdim #1 = #2\@true \else \@false \fi}
113 \def \@dimneqlp #1#2{\ifdim #1 = #2\@false \else \@true \fi}
114 \def \@dimlssp #1#2{\ifdim #1 < #2\@true \else \@false \fi}
115 \def \@dimgtrp #1#2{\ifdim #1 > #2\@true \else \@false \fi}
116 \def \@dimzerop #1{\ifdim #1 = 0pt\@true \else \@false \fi}
117 \def \@dimposp #1{\ifdim #1 > 0pt\@true \else \@false \fi}
118 \def \@dimnegp #1{\ifdim #1 < 0pt\@true \else \@false \fi}
120 \def \@vmodep {\ifvmode \@true \else \@false \fi}
121 \def \@hmodep {\ifhmode \@true \else \@false \fi}
122 \def \@mathmodep {\ifmmode \@true \else \@false \fi}
123 \def \@textmodep {\ifmmode \@false \else \@true \fi}
124 \def \@innermodep {\ifinner \@true \else \@false \fi}
126 \long\def \@codeeqlp #1#2{\if #1#2\@true \else \@false \fi}
128 \long\def \@cateqlp #1#2{\ifcat #1#2\@true \else \@false \fi}
130 \long\def \@tokeqlp #1#2{\ifx #1#2\@true \else \@false \fi}
131 \long\def \@xtokeqlp #1#2{\expandafter\ifx #1#2\@true \else \@false \fi}
133 \long\def \@definedp #1{%
134 \expandafter\ifx \csname \expandafter\@discardtok \string#1\endcsname
135 \relax \@false \else \@true \fi}
137 \long\def \@undefinedp #1{%
138 \expandafter\ifx \csname \expandafter\@discardtok \string#1\endcsname
139 \relax \@true \else \@false \fi}
141 \def \@emptydefp #1{\ifx #1\@empty \@true \else \@false \fi}% {\name}
143 \let \@emptylistp = \@emptydefp
145 \long\def \@emptyargp #1{% {#n}
146 \@empargp #1\@empargq\@mark}
147 \long\def \@empargp #1#2\@mark{%
148 \ifx #1\@empargq \@true \else \@false \fi}
149 \def \@empargq {\@empargq}
151 \def \@emptytoksp #1{% {\tokenreg}
152 \expandafter\@emptoksp \the#1\@mark}
154 \long\def \@emptoksp #1\@mark{\@emptyargp{#1}}
156 \def \@voidboxp #1{\ifvoid #1\@true \else \@false \fi}
157 \def \@hboxp #1{\ifhbox #1\@true \else \@false \fi}
158 \def \@vboxp #1{\ifvbox #1\@true \else \@false \fi}
160 \def \@eofp #1{\ifeof #1\@true \else \@false \fi}
163 % Flags can also be used as predicates, as in:
165 % \if \flaga <then-clause> \else <else-clause> \fi
168 % Now here we have predicates for the common logical operators.
170 \def \@notp #1{\if #1\@false \else \@true \fi}
172 \def \@andp #1#2{\if #1%
173 \if #2\@true \else \@false \fi
178 \def \@orp #1#2{\if #1%
181 \if #2\@true \else \@false \fi
184 \def \@xorp #1#2{\if #1%
185 \if #2\@false \else \@true \fi
187 \if #2\@true \else \@false \fi
193 \def \@increment #1{\advance #1 by 1\relax}% {\count}
195 \def \@decrement #1{\advance #1 by -1\relax}% {\count}
201 \@setflag \@authoryear = \@false
202 \@setflag \@blockstyle = \@false
203 \@setflag \@copyrightwanted = \@true
204 \@setflag \@explicitsize = \@false
205 \@setflag \@mathtime = \@false
206 \@setflag \@natbib = \@true
207 \@setflag \@ninepoint = \@true
208 \newcount{\@numheaddepth} \@numheaddepth = 3
209 \@setflag \@onecolumn = \@false
210 \@setflag \@preprint = \@false
211 \@setflag \@reprint = \@false
212 \@setflag \@tenpoint = \@false
213 \@setflag \@times = \@false
215 % Note that all the dangerous article class options are trapped.
217 \DeclareOption{9pt}{\@setflag \@ninepoint = \@true
218 \@setflag \@explicitsize = \@true}
220 \DeclareOption{10pt}{\PassOptionsToClass{10pt}{article}%
221 \@setflag \@ninepoint = \@false
222 \@setflag \@tenpoint = \@true
223 \@setflag \@explicitsize = \@true}
225 \DeclareOption{11pt}{\PassOptionsToClass{11pt}{article}%
226 \@setflag \@ninepoint = \@false
227 \@setflag \@explicitsize = \@true}
229 \DeclareOption{12pt}{\@unsupportedoption{12pt}}
231 \DeclareOption{a4paper}{\@unsupportedoption{a4paper}}
233 \DeclareOption{a5paper}{\@unsupportedoption{a5paper}}
235 \DeclareOption{authoryear}{\@setflag \@authoryear = \@true}
237 \DeclareOption{b5paper}{\@unsupportedoption{b5paper}}
239 \DeclareOption{blockstyle}{\@setflag \@blockstyle = \@true}
241 \DeclareOption{cm}{\@setflag \@times = \@false}
243 \DeclareOption{computermodern}{\@setflag \@times = \@false}
245 \DeclareOption{executivepaper}{\@unsupportedoption{executivepaper}}
247 \DeclareOption{indentedstyle}{\@setflag \@blockstyle = \@false}
249 \DeclareOption{landscape}{\@unsupportedoption{landscape}}
251 \DeclareOption{legalpaper}{\@unsupportedoption{legalpaper}}
253 \DeclareOption{letterpaper}{\@unsupportedoption{letterpaper}}
255 \DeclareOption{mathtime}{\@setflag \@mathtime = \@true}
257 \DeclareOption{natbib}{\@setflag \@natbib = \@true}
259 \DeclareOption{nonatbib}{\@setflag \@natbib = \@false}
261 \DeclareOption{nocopyrightspace}{\@setflag \@copyrightwanted = \@false}
263 \DeclareOption{notitlepage}{\@unsupportedoption{notitlepage}}
265 \DeclareOption{numberedpars}{\@numheaddepth = 4}
267 \DeclareOption{numbers}{\@setflag \@authoryear = \@false}
269 %%%\DeclareOption{onecolumn}{\@setflag \@onecolumn = \@true}
271 \DeclareOption{preprint}{\@setflag \@preprint = \@true}
273 \DeclareOption{reprint}{\@setflag \@reprint = \@true}
275 \DeclareOption{times}{\@setflag \@times = \@true}
277 \DeclareOption{titlepage}{\@unsupportedoption{titlepage}}
279 \DeclareOption{twocolumn}{\@setflag \@onecolumn = \@false}
281 \DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
283 \ExecuteOptions{9pt,indentedstyle,times}
284 \@setflag \@explicitsize = \@false
288 \if \@notp{\@explicitsize}%
289 \@setflag \@ninepoint = \@false
290 \PassOptionsToClass{11pt}{article}%
292 \PassOptionsToClass{twoside,onecolumn}{article}
294 \PassOptionsToClass{twoside,twocolumn}{article}
298 \def \@unsupportedoption #1{%
299 \ClassError{proc}{The standard '#1' option is not supported.}}
301 % This can be used with the 'reprint' option to get the final folios.
303 \def \setpagenumber #1{%
304 \setcounter{page}{#1}}
306 \AtEndDocument{\label{sigplanconf@finalpage}}
312 \newcommand{\setvspace}[2]{%
314 \advance #1 by -1\parskip}
316 % Document Parameters
317 % -------- ----------
322 \setlength{\hoffset}{-1in}
323 \setlength{\voffset}{-1in}
325 \setlength{\topmargin}{1in}
326 \setlength{\headheight}{0pt}
327 \setlength{\headsep}{0pt}
330 \setlength{\evensidemargin}{.75in}
331 \setlength{\oddsidemargin}{.75in}
333 \setlength{\evensidemargin}{.75in}
334 \setlength{\oddsidemargin}{.75in}
339 \newdimen{\standardtextwidth}
340 \setlength{\standardtextwidth}{42pc}
343 \setlength{\textwidth}{40.5pc}
345 \setlength{\textwidth}{\standardtextwidth}
348 \setlength{\topskip}{8pt}
349 \setlength{\columnsep}{2pc}
350 \setlength{\textheight}{54.5pc}
354 \setlength{\footskip}{30pt}
359 \setlength{\parskip}{5pt plus .1pt minus .5pt}
360 \setlength{\parindent}{0pt}
362 \setlength{\parskip}{0pt}
363 \setlength{\parindent}{12pt}
366 \setlength{\lineskip}{.5pt}
367 \setlength{\lineskiplimit}{\lineskip}
371 \tolerance = \pretolerance
372 \setlength{\emergencystretch}{5pt}
374 \widowpenalty = 10000
375 \setlength{\hfuzz}{.5pt}
377 % Standard vertical spaces:
379 \newskip{\standardvspace}
380 \setvspace{\standardvspace}{5pt plus 1pt minus .5pt}
384 \setlength{\marginparwidth}{36pt}
385 \setlength{\marginparsep}{2pt}
386 \setlength{\marginparpush}{8pt}
389 \setlength{\skip\footins}{8pt plus 3pt minus 1pt}
390 \setlength{\footnotesep}{9pt}
392 \renewcommand{\footnoterule}{%
393 \hrule width .5\columnwidth height .33pt depth 0pt}
395 \renewcommand{\@makefntext}[1]{%
396 \noindent \@makefnmark \hspace{1pt}#1}
400 \setcounter{topnumber}{4}
401 \setcounter{bottomnumber}{1}
402 \setcounter{totalnumber}{4}
404 \renewcommand{\fps@figure}{tp}
405 \renewcommand{\fps@table}{tp}
406 \renewcommand{\topfraction}{0.90}
407 \renewcommand{\bottomfraction}{0.30}
408 \renewcommand{\textfraction}{0.10}
409 \renewcommand{\floatpagefraction}{0.75}
411 \setcounter{dbltopnumber}{4}
413 \renewcommand{\dbltopfraction}{\topfraction}
414 \renewcommand{\dblfloatpagefraction}{\floatpagefraction}
416 \setlength{\floatsep}{18pt plus 4pt minus 2pt}
417 \setlength{\textfloatsep}{18pt plus 4pt minus 3pt}
418 \setlength{\intextsep}{10pt plus 4pt minus 3pt}
420 \setlength{\dblfloatsep}{18pt plus 4pt minus 2pt}
421 \setlength{\dbltextfloatsep}{20pt plus 4pt minus 3pt}
425 \errorcontextlines = 5
432 \renewcommand{\rmdefault}{ptm}%
434 \usepackage[mtbold,noTS1]{mathtime}%
436 %%% \usepackage{mathptm}%
444 \renewcommand{\normalsize}{%
445 \@setfontsize{\normalsize}{9pt}{10pt}%
446 \setlength{\abovedisplayskip}{5pt plus 1pt minus .5pt}%
447 \setlength{\belowdisplayskip}{\abovedisplayskip}%
448 \setlength{\abovedisplayshortskip}{3pt plus 1pt minus 2pt}%
449 \setlength{\belowdisplayshortskip}{\abovedisplayshortskip}}
451 \renewcommand{\tiny}{\@setfontsize{\tiny}{5pt}{6pt}}
453 \renewcommand{\scriptsize}{\@setfontsize{\scriptsize}{7pt}{8pt}}
455 \renewcommand{\small}{%
456 \@setfontsize{\small}{8pt}{9pt}%
457 \setlength{\abovedisplayskip}{4pt plus 1pt minus 1pt}%
458 \setlength{\belowdisplayskip}{\abovedisplayskip}%
459 \setlength{\abovedisplayshortskip}{2pt plus 1pt}%
460 \setlength{\belowdisplayshortskip}{\abovedisplayshortskip}}
462 \renewcommand{\footnotesize}{%
463 \@setfontsize{\footnotesize}{8pt}{9pt}%
464 \setlength{\abovedisplayskip}{4pt plus 1pt minus .5pt}%
465 \setlength{\belowdisplayskip}{\abovedisplayskip}%
466 \setlength{\abovedisplayshortskip}{2pt plus 1pt}%
467 \setlength{\belowdisplayshortskip}{\abovedisplayshortskip}}
469 \renewcommand{\large}{\@setfontsize{\large}{11pt}{13pt}}
471 \renewcommand{\Large}{\@setfontsize{\Large}{14pt}{18pt}}
473 \renewcommand{\LARGE}{\@setfontsize{\LARGE}{18pt}{20pt}}
475 \renewcommand{\huge}{\@setfontsize{\huge}{20pt}{25pt}}
477 \renewcommand{\Huge}{\@setfontsize{\Huge}{25pt}{30pt}}
493 \renewenvironment{abstract}{%
502 \renewenvironment{thebibliography}[1]
504 \@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}}%
505 \list{\@biblabel{\@arabic\c@enumiv}}%
506 {\settowidth\labelwidth{\@biblabel{#1}}%
507 \leftmargin\labelwidth
508 \advance\leftmargin\labelsep
512 \renewcommand\theenumiv{\@arabic\c@enumiv}}%
515 \@clubpenalty \clubpenalty
519 {\@latex@warning{Empty `thebibliography' environment}}%
525 \typeout{Using natbib package with 'authoryear' citation style.}
526 \usepackage[authoryear,square]{natbib}
527 \bibpunct{[}{]}{;}{a}{}{,} % Change citation separator to semicolon,
528 % eliminate comma between author and year.
531 \typeout{Using natbib package with 'numbers' citation style.}
532 \usepackage[numbers,sort&compress,square]{natbib}
534 \setlength{\bibsep}{3pt plus .5pt minus .25pt}
538 \def \bibfont {\small}
544 \@setflag \@firstcategory = \@true
546 \newcommand{\category}[3]{%
548 \paragraph*{Categories and Subject Descriptors}%
549 \@setflag \@firstcategory = \@false
551 \unskip ;\hspace{.75em}%
553 \@ifnextchar [{\@category{#1}{#2}{#3}}{\@category{#1}{#2}{#3}[]}}
555 \def \@category #1#2#3[#4]{%
559 \if \@notp{\@emptyargp{#3}}: #3\fi
562 \if \@notp{\@emptyargp{#3}}#3---\fi
570 \def \ftype@copyrightbox {8}
573 \def \@reprintprice {}
575 \def \@copyrightspace {%
576 \@float{copyrightbox}[b]%
582 [Copyright notice will appear here
583 once 'preprint' option is removed.]\par
588 \noindent Reprinted from \@conferencename,
591 pp.~\number\thepage--\pageref{sigplanconf@finalpage}.\par
595 \long\def \toappear #1{%
596 \def \@toappear {#1}}
599 \noindent \@permission \par
601 \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par
602 \noindent Copyright \copyright\ \@copyrightyear\ ACM \@copyrightdata
603 \dots \@reprintprice\par}
605 \newcommand{\permission}[1]{%
606 \gdef \@permission {#1}}
609 Permission to make digital or hard copies of all or
610 part of this work for personal or classroom use is granted without
611 fee provided that copies are not made or distributed for profit or
612 commercial advantage and that copies bear this notice and the full
613 citation on the first page. To copy otherwise, to republish, to
614 post on servers or to redistribute to lists, requires prior specific
615 permission and/or a fee.}
617 % Here we have some alternate permission statements and copyright lines:
619 \newcommand{\ACMCanadapermission}{%
621 Copyright \@copyrightyear\ Association for Computing Machinery.
622 ACM acknowledges that
623 this contribution was authored or co-authored by an affiliate of the
624 National Research Council of Canada (NRC).
625 As such, the Crown in Right of
626 Canada retains an equal interest in the copyright, however granting
627 nonexclusive, royalty-free right to publish or reproduce this article,
628 or to allow others to do so, provided that clear attribution
629 is also given to the authors and the NRC.}}
631 \newcommand{\ACMUSpermission}{%
633 Copyright \@copyrightyear\ Association for
634 Computing Machinery. ACM acknowledges that
635 this contribution was authored or co-authored
636 by a contractor or affiliate
637 of the U.S. Government. As such, the Government retains a nonexclusive,
638 royalty-free right to publish or reproduce this article,
639 or to allow others to do so, for Government purposes only.}}
641 \newcommand{\authorpermission}{%
643 Copyright is held by the author/owner(s).}
645 \noindent \@permission \par
647 \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par
648 ACM \@copyrightdata.}}
650 \newcommand{\Sunpermission}{%
652 Copyright is held by Sun Microsystems, Inc.}%
654 \noindent \@permission \par
656 \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par
657 ACM \@copyrightdata.}}
659 \newcommand{\USpublicpermission}{%
661 This paper is authored by an employee(s) of the United States
662 Government and is in the public domain.}%
664 \noindent \@permission \par
666 \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par
667 ACM \@copyrightdata.}}
669 \newcommand{\reprintprice}[1]{%
670 \gdef \@reprintprice {#1}}
672 \reprintprice{\$10.00}
674 \newcommand{\authorversion}[4]{%
676 Copyright \copyright\ ACM, #1. This is the author's version of the work.
677 It is posted here by permission of ACM for your personal use.
678 Not for redistribution. The definitive version was published in
679 #2, #3, http://doi.acm.org/10.1145/#4.}}
685 \def \@begintheorem #1#2{% {name}{number}
687 \item[\hskip \labelsep \textsc{#1 #2.}]%
691 \def \@opargbegintheorem #1#2#3{% {name}{number}{title}
694 \hskip\labelsep \textsc{#1\ #2}%
695 \if \@notp{\@emptyargp{#3}}\nut (#3).\fi]%
703 \@setflag \@caprule = \@true
705 \long\def \@makecaption #1#2{%
708 \hrule width \hsize height .33pt
711 \setbox \@tempboxa = \hbox{\@setfigurenumber{#1.}\nut #2}%
712 \if \@dimgtrp{\wd\@tempboxa}{\hsize}%
713 \noindent \@setfigurenumber{#1.}\nut #2\par
715 \centerline{\box\@tempboxa}%
718 \newcommand{\nocaptionrule}{%
719 \@setflag \@caprule = \@false}
721 \def \@setfigurenumber #1{%
722 {\rmfamily \bfseries \selectfont #1}}
728 \setcounter{secnumdepth}{\@numheaddepth}
730 \newskip{\@sectionaboveskip}
731 \setvspace{\@sectionaboveskip}{10pt plus 3pt minus 2pt}
733 \newskip{\@sectionbelowskip}
735 \setlength{\@sectionbelowskip}{0.1pt}%
737 \setlength{\@sectionbelowskip}{4pt}%
740 \renewcommand{\section}{%
745 {-\@sectionaboveskip}%
746 {\@sectionbelowskip}%
747 {\large \bfseries \raggedright}}
749 \newskip{\@subsectionaboveskip}
750 \setvspace{\@subsectionaboveskip}{8pt plus 2pt minus 2pt}
752 \newskip{\@subsectionbelowskip}
754 \setlength{\@subsectionbelowskip}{0.1pt}%
756 \setlength{\@subsectionbelowskip}{4pt}%
759 \renewcommand{\subsection}{%
764 {-\@subsectionaboveskip}%
765 {\@subsectionbelowskip}%
766 {\normalsize \bfseries \raggedright}}
768 \renewcommand{\subsubsection}{%
773 {-\@subsectionaboveskip}
774 {\@subsectionbelowskip}%
775 {\normalsize \bfseries \raggedright}}
777 \newskip{\@paragraphaboveskip}
778 \setvspace{\@paragraphaboveskip}{6pt plus 2pt minus 2pt}
780 \renewcommand{\paragraph}{%
785 {\@paragraphaboveskip}
787 {\normalsize \bfseries \if \@times \itshape \fi}}
789 \renewcommand{\subparagraph}{%
794 {\@paragraphaboveskip}
796 {\normalsize \itshape}}
800 \newcommand{\acks}{\section*{Acknowledgments}}
802 \newcommand{\keywords}{\paragraph*{Keywords}}
804 \newcommand{\terms}{\paragraph*{General Terms}}
810 \def \@conferencename {}
811 \def \@conferenceinfo {}
812 \def \@copyrightyear {}
813 \def \@copyrightdata {[to be supplied]}
814 \def \@proceedings {[Unknown Proceedings]}
817 \newcommand{\conferenceinfo}[2]{%
818 \gdef \@conferencename {#1}%
819 \gdef \@conferenceinfo {#2}}
821 \newcommand{\copyrightyear}[1]{%
822 \gdef \@copyrightyear {#1}}
824 \let \CopyrightYear = \copyrightyear
826 \newcommand{\copyrightdata}[1]{%
827 \gdef \@copyrightdata {#1}}
829 \let \crdata = \copyrightdata
831 \newcommand{\proceedings}[1]{%
832 \gdef \@proceedings {#1}}
838 \setlength{\leftmargini}{13pt}
839 \setlength\leftmarginii{13pt}
840 \setlength\leftmarginiii{13pt}
841 \setlength\leftmarginiv{13pt}
842 \setlength{\labelsep}{3.5pt}
844 \setlength{\topsep}{\standardvspace}
846 \setlength{\itemsep}{1pt}
847 \setlength{\parsep}{3pt}
849 \setlength{\itemsep}{1pt}
850 \setlength{\parsep}{3pt}
853 \renewcommand{\labelitemi}{{\small \centeroncapheight{\textbullet}}}
854 \renewcommand{\labelitemii}{\centeroncapheight{\rule{2.5pt}{2.5pt}}}
855 \renewcommand{\labelitemiii}{$-$}
856 \renewcommand{\labelitemiv}{{\Large \textperiodcentered}}
858 \renewcommand{\@listi}{%
859 \leftmargin = \leftmargini
860 \listparindent = 0pt}
863 %%% \listparindent = \parindent}
865 \let \@listI = \@listi
867 \renewcommand{\@listii}{%
868 \leftmargin = \leftmarginii
870 \labelwidth = \leftmarginii
871 \advance \labelwidth by -\labelsep
872 \listparindent = \parindent}
874 \renewcommand{\@listiii}{%
875 \leftmargin = \leftmarginiii
876 \labelwidth = \leftmarginiii
877 \advance \labelwidth by -\labelsep
878 \listparindent = \parindent}
880 \renewcommand{\@listiv}{%
881 \leftmargin = \leftmarginiv
882 \labelwidth = \leftmarginiv
883 \advance \labelwidth by -\labelsep
884 \listparindent = \parindent}
890 \def \theequation {\arabic{equation}}
896 \newcommand{\balancecolumns}{%
898 \global\@colht = \textheight
899 \global\ht\@cclv = \textheight}
901 \newcommand{\nut}{\hspace{.5em}}
903 \newcommand{\softraggedright}{%
906 \rightskip = 0pt plus 10pt}
912 \newcommand{\mono}[1]{%
913 {\@tempdima = \fontdimen2\font
914 \texttt{\spaceskip = 1.1\@tempdima #1}}}
916 % Running Heads and Feet
917 % ------- ----- --- ----
920 \def \@preprintfooter {}
922 \newcommand{\preprintfooter}[1]{%
923 \gdef \@preprintfooter {#1}}
928 \let \@mkboth = \@gobbletwo
929 \let \@evenhead = \@empty
930 \def \@evenfoot {\scriptsize
931 \rlap{\textit{\@preprintfooter}}\hfil
933 \llap{\textit{\@formatyear}}}%
934 \let \@oddhead = \@empty
935 \let \@oddfoot = \@evenfoot}
940 \let \@mkboth = \@gobbletwo
941 \let \@evenhead = \@empty
942 \def \@evenfoot {\scriptsize \hfil \thepage \hfil}%
943 \let \@oddhead = \@empty
944 \let \@oddfoot = \@evenfoot}
948 \let \ps@plain = \ps@empty
949 \let \ps@headings = \ps@empty
950 \let \ps@myheadings = \ps@empty
955 \number\year/\number\month/\number\day}
961 \DeclareRobustCommand{\euro}{%
962 \protect{\rlap{=}}{\sf \kern .1em C}}
968 \@setflag \@addauthorsdone = \@false
970 \def \@titletext {\@latex@error{No title was provided}{}}
971 \def \@subtitletext {}
973 \newcount{\@authorcount}
975 \newcount{\@titlenotecount}
976 \newtoks{\@titlenotetext}
978 \def \@titlebanner {}
980 \renewcommand{\title}[1]{%
981 \gdef \@titletext {#1}}
983 \newcommand{\subtitle}[1]{%
984 \gdef \@subtitletext {#1}}
986 \newcommand{\authorinfo}[3]{% {names}{affiliation}{email/URL}
987 \global\@increment \@authorcount
988 \@withname\gdef {\@authorname\romannumeral\@authorcount}{#1}%
989 \@withname\gdef {\@authoraffil\romannumeral\@authorcount}{#2}%
990 \@withname\gdef {\@authoremail\romannumeral\@authorcount}{#3}}
992 \renewcommand{\author}[1]{%
993 \@latex@error{The \string\author\space command is obsolete;
994 use \string\authorinfo}{}}
996 \newcommand{\titlebanner}[1]{%
997 \gdef \@titlebanner {#1}}
999 \renewcommand{\maketitle}{%
1002 {\hsize = \standardtextwidth
1005 \twocolumn[\@maketitle]%
1008 \if \@copyrightwanted \@copyrightspace \fi}
1013 \let \thanks = \titlenote
1014 {\leftskip = 0pt plus 0.25\linewidth
1015 \rightskip = 0pt plus 0.25 \linewidth
1018 \noindent \LARGE \bfseries \@titletext \par}
1020 \noindent \Large \@subtitletext \par
1022 \ifcase \@authorcount
1023 \@latex@error{No authors were specified for this paper}{}\or
1024 \@titleauthors{i}{}{}\or
1025 \@titleauthors{i}{ii}{}\or
1026 \@titleauthors{i}{ii}{iii}\or
1027 \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{}{}\or
1028 \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{}\or
1029 \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}\or
1030 \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
1031 \@titleauthors{vii}{}{}\or
1032 \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
1033 \@titleauthors{vii}{viii}{}\or
1034 \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
1035 \@titleauthors{vii}{viii}{ix}\or
1036 \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
1037 \@titleauthors{vii}{viii}{ix}\@titleauthors{x}{}{}\or
1038 \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
1039 \@titleauthors{vii}{viii}{ix}\@titleauthors{x}{xi}{}\or
1040 \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}%
1041 \@titleauthors{vii}{viii}{ix}\@titleauthors{x}{xi}{xii}%
1043 \@latex@error{Cannot handle more than 12 authors}{}%
1048 \def \@settitlebanner {%
1049 \if \@andp{\@preprint}{\@notp{\@emptydefp{\@titlebanner}}}%
1052 \noindent \textbf{\@titlebanner}\par
1057 \def \@titleauthors #1#2#3{%
1058 \if \@andp{\@emptyargp{#2}}{\@emptyargp{#3}}%
1059 \noindent \@setauthor{40pc}{#1}{\@false}\par
1060 \else\if \@emptyargp{#3}%
1061 \noindent \@setauthor{17pc}{#1}{\@false}\hspace{3pc}%
1062 \@setauthor{17pc}{#2}{\@false}\par
1064 \noindent \@setauthor{12.5pc}{#1}{\@false}\hspace{2pc}%
1065 \@setauthor{12.5pc}{#2}{\@false}\hspace{2pc}%
1066 \@setauthor{12.5pc}{#3}{\@true}\par
1071 \def \@setauthor #1#2#3{% {width}{text}{unused}
1078 \large \@name{\@authorname#2}\par
1080 \normalsize \@name{\@authoraffil#2}\par
1082 \textsf{\@name{\@authoremail#2}}\par}}
1084 \def \@maybetitlenote #1{%
1085 \if \@andp{#1}{\@gtrp{\@authorcount}{3}}%
1086 \titlenote{See page~\pageref{@addauthors} for additional authors.}%
1091 \newcommand{\titlenote}[1]{%
1092 \global\@increment \@titlenotecount
1093 \ifcase \@titlenotecount \relax \or
1094 \@fnmark = {\ast}\or
1095 \@fnmark = {\dagger}\or
1096 \@fnmark = {\ddagger}\or
1099 \@fnmark = {\ast\ast}%
1101 \,$^{\the\@fnmark}$%
1102 \edef \reserved@a {\noexpand\@appendtotext{%
1103 \noexpand\@titlefootnote{\the\@fnmark}}}%
1106 \def \@appendtotext #1#2{%
1107 \global\@titlenotetext = \expandafter{\the\@titlenotetext #1{#2}}}
1109 \newcount{\@authori}
1112 \def \additionalauthors {%
1113 \if \@gtrp{\@authorcount}{3}%
1114 \section{Additional Authors}%
1115 \label{@addauthors}%
1120 \textbf{\@name{\@authorname\romannumeral\@authori}},
1121 \@name{\@authoraffil\romannumeral\@authori},
1122 email: \@name{\@authoremail\romannumeral\@authori}.%
1123 \@increment \@authori
1124 \if \@notp{\@gtrp{\@authori}{\@authorcount}} \repeat}%
1127 \global\@setflag \@addauthorsdone = \@true}
1130 \let \addauthorsection = \additionalauthors
1132 \def \@placetitlenotes {
1133 \the\@titlenotetext}
1139 \newcommand{\centeroncapheight}[1]{%
1140 {\setbox\@tempboxa = \hbox{#1}%
1141 \@measurecapheight{\@tempdima}% % Calculate ht(CAP) - ht(text)
1142 \advance \@tempdima by -\ht\@tempboxa % ------------------
1143 \divide \@tempdima by 2 % 2
1144 \raise \@tempdima \box\@tempboxa}}
1148 \def \@measurecapheight #1{% {\dimen}
1149 \setbox\@measbox = \hbox{ABCDEFGHIJKLMNOPQRSTUVWXYZ}%
1152 \long\def \@titlefootnote #1#2{%
1154 \reset@font\footnotesize
1155 \interlinepenalty\interfootnotelinepenalty
1156 \splittopskip\footnotesep
1157 \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
1158 \hsize\columnwidth \@parboxrestore
1159 %%% \protected@edef\@currentlabel{%
1160 %%% \csname p@footnote\endcsname\@thefnmark}%
1162 \def \@makefnmark {$^{#1}$}%
1164 \rule\z@\footnotesep\ignorespaces#2\@finalstrut\strutbox}%
1167 % LaTeX Modifications
1168 % ----- -------------
1170 \def \@seccntformat #1{%
1172 \@expandaftertwice\@seccntformata \csname the#1\endcsname.\@mark
1175 \def \@seccntformata #1.#2\@mark{%
1176 \if \@emptyargp{#2}.\fi}
1182 % Date Person Ver. Change
1183 % ---- ------ ---- ------
1185 % 2004.09.12 PCA 0.1--5 Preliminary development.
1187 % 2004.11.18 PCA 0.5 Start beta testing.
1189 % 2004.11.19 PCA 0.6 Obsolete \author and replace with
1191 % Add 'nocopyrightspace' option.
1192 % Compress article opener spacing.
1193 % Add 'mathtime' option.
1194 % Increase text height by 6 points.
1196 % 2004.11.28 PCA 0.7 Add 'cm/computermodern' options.
1197 % Change default to Times text.
1199 % 2004.12.14 PCA 0.8 Remove use of mathptm.sty; it cannot
1200 % coexist with latexsym or amssymb.
1202 % 2005.01.20 PCA 0.9 Rename class file to sigplanconf.cls.
1204 % 2005.03.05 PCA 0.91 Change default copyright data.
1206 % 2005.03.06 PCA 0.92 Add at-signs to some macro names.
1208 % 2005.03.07 PCA 0.93 The 'onecolumn' option defaults to '11pt',
1209 % and it uses the full type width.
1211 % 2005.03.15 PCA 0.94 Add at-signs to more macro names.
1212 % Allow margin paragraphs during review.
1214 % 2005.03.22 PCA 0.95 Implement \euro.
1215 % Remove proof and newdef environments.
1217 % 2005.05.06 PCA 1.0 Eliminate 'onecolumn' option.
1218 % Change footer to small italic and eliminate
1219 % left portion if no \preprintfooter.
1220 % Eliminate copyright notice if preprint.
1221 % Clean up and shrink copyright box.
1223 % 2005.05.30 PCA 1.1 Add alternate permission statements.
1225 % 2005.06.29 PCA 1.1 Publish final first edition of guide.
1227 % 2005.07.14 PCA 1.2 Add \subparagraph.
1228 % Use block paragraphs in lists, and adjust
1229 % spacing between items and paragraphs.
1231 % 2006.06.22 PCA 1.3 Add 'reprint' option and associated
1234 % 2006.08.24 PCA 1.4 Fix bug in \maketitle case command.
1236 % 2007.03.13 PCA 1.5 The title banner only displays with the
1237 % 'preprint' option.
1239 % 2007.06.06 PCA 1.6 Use \bibfont in \thebibliography.
1240 % Add 'natbib' option to load and configure
1241 % the natbib package.
1243 % 2007.11.20 PCA 1.7 Balance line lengths in centered article
1244 % title (thanks to Norman Ramsey).
1246 % 2009.01.26 PCA 1.8 Change natbib \bibpunct values.
1248 % 2009.03.24 PCA 1.9 Change natbib to use the 'numbers' option.
1249 % Change templates to use 'natbib' option.
1251 % 2009.09.01 PCA 2.0 Add \reprintprice command (suggested by
1254 % 2009.09.08 PCA 2.1 Make 'natbib' the default; add 'nonatbib'.
1255 % SB Add 'authoryear' and 'numbers' (default) to
1256 % control citation style when using natbib.
1257 % Add \bibpunct to change punctuation for
1258 % 'authoryear' style.
1260 % 2009.09.21 PCA 2.2 Add \softraggedright to the thebibliography
1261 % environment. Also add to template so it will
1262 % happen with natbib.
1264 % 2009.09.30 PCA 2.3 Remove \softraggedright from thebibliography.
1265 % Just include in the template.
1267 % 2010.05.24 PCA 2.4 Obfuscate author's email address.
1269 % 2011.11.08 PCA 2.5 Add copyright notice to this file.
1270 % Remove 'sort' option from natbib when using
1271 % 'authoryear' style.
1272 % Add the \authorversion command.