| %----------------------------------------------------------------------------- | |
| % | |
| % LaTeX Class/Style File | |
| % | |
| % Name: sigplanconf.cls | |
| % Purpose: A LaTeX 2e class file for SIGPLAN conference proceedings. | |
| % This class file supercedes acm_proc_article-sp, | |
| % sig-alternate, and sigplan-proc. | |
| % | |
| % Author: Paul C. Anagnostopoulos | |
| % Windfall Software | |
| % 978 371-2316 | |
| % paul@windfall.com | |
| % | |
| % Created: 12 September 2004 | |
| % | |
| % Revisions: See end of file. | |
| % | |
| %----------------------------------------------------------------------------- | |
| \NeedsTeXFormat{LaTeX2e}[1995/12/01] | |
| \ProvidesClass{sigplanconf}[2007/03/13 v1.5 ACM SIGPLAN Proceedings] | |
| % The following few pages contain LaTeX programming extensions adapted | |
| % from the ZzTeX macro package. | |
| % Token Hackery | |
| % ----- ------- | |
| \def \@expandaftertwice {\expandafter\expandafter\expandafter} | |
| \def \@expandafterthrice {\expandafter\expandafter\expandafter\expandafter | |
| \expandafter\expandafter\expandafter} | |
| % This macro discards the next token. | |
| \def \@discardtok #1{}% token | |
| % This macro removes the `pt' following a dimension. | |
| {\catcode `\p = 12 \catcode `\t = 12 | |
| \gdef \@remover #1pt{#1} | |
| } % \catcode | |
| % This macro extracts the contents of a macro and returns it as plain text. | |
| % Usage: \expandafter\@defof \meaning\macro\@mark | |
| \def \@defof #1:->#2\@mark{#2} | |
| % Control Sequence Names | |
| % ------- -------- ----- | |
| \def \@name #1{% {\tokens} | |
| \csname \expandafter\@discardtok \string#1\endcsname} | |
| \def \@withname #1#2{% {\command}{\tokens} | |
| \expandafter#1\csname \expandafter\@discardtok \string#2\endcsname} | |
| % Flags (Booleans) | |
| % ----- ---------- | |
| % The boolean literals \@true and \@false are appropriate for use with | |
| % the \if command, which tests the codes of the next two characters. | |
| \def \@true {TT} | |
| \def \@false {FL} | |
| \def \@setflag #1=#2{\edef #1{#2}}% \flag = boolean | |
| % IF and Predicates | |
| % -- --- ---------- | |
| % A "predicate" is a macro that returns \@true or \@false as its value. | |
| % Such values are suitable for use with the \if conditional. For example: | |
| % | |
| % \if \@oddp{\x} <then-clause> \else <else-clause> \fi | |
| % A predicate can be used with \@setflag as follows: | |
| % | |
| % \@setflag \flag = {<predicate>} | |
| % Here are the predicates for TeX's repertoire of conditional | |
| % commands. These might be more appropriately interspersed with | |
| % other definitions in this module, but what the heck. | |
| % Some additional "obvious" predicates are defined. | |
| \def \@eqlp #1#2{\ifnum #1 = #2\@true \else \@false \fi} | |
| \def \@neqlp #1#2{\ifnum #1 = #2\@false \else \@true \fi} | |
| \def \@lssp #1#2{\ifnum #1 < #2\@true \else \@false \fi} | |
| \def \@gtrp #1#2{\ifnum #1 > #2\@true \else \@false \fi} | |
| \def \@zerop #1{\ifnum #1 = 0\@true \else \@false \fi} | |
| \def \@onep #1{\ifnum #1 = 1\@true \else \@false \fi} | |
| \def \@posp #1{\ifnum #1 > 0\@true \else \@false \fi} | |
| \def \@negp #1{\ifnum #1 < 0\@true \else \@false \fi} | |
| \def \@oddp #1{\ifodd #1\@true \else \@false \fi} | |
| \def \@evenp #1{\ifodd #1\@false \else \@true \fi} | |
| \def \@rangep #1#2#3{\if \@orp{\@lssp{#1}{#2}}{\@gtrp{#1}{#3}}\@false \else | |
| \@true \fi} | |
| \def \@tensp #1{\@rangep{#1}{10}{19}} | |
| \def \@dimeqlp #1#2{\ifdim #1 = #2\@true \else \@false \fi} | |
| \def \@dimneqlp #1#2{\ifdim #1 = #2\@false \else \@true \fi} | |
| \def \@dimlssp #1#2{\ifdim #1 < #2\@true \else \@false \fi} | |
| \def \@dimgtrp #1#2{\ifdim #1 > #2\@true \else \@false \fi} | |
| \def \@dimzerop #1{\ifdim #1 = 0pt\@true \else \@false \fi} | |
| \def \@dimposp #1{\ifdim #1 > 0pt\@true \else \@false \fi} | |
| \def \@dimnegp #1{\ifdim #1 < 0pt\@true \else \@false \fi} | |
| \def \@vmodep {\ifvmode \@true \else \@false \fi} | |
| \def \@hmodep {\ifhmode \@true \else \@false \fi} | |
| \def \@mathmodep {\ifmmode \@true \else \@false \fi} | |
| \def \@textmodep {\ifmmode \@false \else \@true \fi} | |
| \def \@innermodep {\ifinner \@true \else \@false \fi} | |
| \long\def \@codeeqlp #1#2{\if #1#2\@true \else \@false \fi} | |
| \long\def \@cateqlp #1#2{\ifcat #1#2\@true \else \@false \fi} | |
| \long\def \@tokeqlp #1#2{\ifx #1#2\@true \else \@false \fi} | |
| \long\def \@xtokeqlp #1#2{\expandafter\ifx #1#2\@true \else \@false \fi} | |
| \long\def \@definedp #1{% | |
| \expandafter\ifx \csname \expandafter\@discardtok \string#1\endcsname | |
| \relax \@false \else \@true \fi} | |
| \long\def \@undefinedp #1{% | |
| \expandafter\ifx \csname \expandafter\@discardtok \string#1\endcsname | |
| \relax \@true \else \@false \fi} | |
| \def \@emptydefp #1{\ifx #1\@empty \@true \else \@false \fi}% {\name} | |
| \let \@emptylistp = \@emptydefp | |
| \long\def \@emptyargp #1{% {#n} | |
| \@empargp #1\@empargq\@mark} | |
| \long\def \@empargp #1#2\@mark{% | |
| \ifx #1\@empargq \@true \else \@false \fi} | |
| \def \@empargq {\@empargq} | |
| \def \@emptytoksp #1{% {\tokenreg} | |
| \expandafter\@emptoksp \the#1\@mark} | |
| \long\def \@emptoksp #1\@mark{\@emptyargp{#1}} | |
| \def \@voidboxp #1{\ifvoid #1\@true \else \@false \fi} | |
| \def \@hboxp #1{\ifhbox #1\@true \else \@false \fi} | |
| \def \@vboxp #1{\ifvbox #1\@true \else \@false \fi} | |
| \def \@eofp #1{\ifeof #1\@true \else \@false \fi} | |
| % Flags can also be used as predicates, as in: | |
| % | |
| % \if \flaga <then-clause> \else <else-clause> \fi | |
| % Now here we have predicates for the common logical operators. | |
| \def \@notp #1{\if #1\@false \else \@true \fi} | |
| \def \@andp #1#2{\if #1% | |
| \if #2\@true \else \@false \fi | |
| \else | |
| \@false | |
| \fi} | |
| \def \@orp #1#2{\if #1% | |
| \@true | |
| \else | |
| \if #2\@true \else \@false \fi | |
| \fi} | |
| \def \@xorp #1#2{\if #1% | |
| \if #2\@false \else \@true \fi | |
| \else | |
| \if #2\@true \else \@false \fi | |
| \fi} | |
| % Arithmetic | |
| % ---------- | |
| \def \@increment #1{\advance #1 by 1\relax}% {\count} | |
| \def \@decrement #1{\advance #1 by -1\relax}% {\count} | |
| % Options | |
| % ------- | |
| \@setflag \@blockstyle = \@false | |
| \@setflag \@copyrightwanted = \@true | |
| \@setflag \@explicitsize = \@false | |
| \@setflag \@mathtime = \@false | |
| \@setflag \@ninepoint = \@true | |
| \newcount{\@numheaddepth} \@numheaddepth = 3 | |
| \@setflag \@onecolumn = \@false | |
| \@setflag \@preprint = \@false | |
| \@setflag \@reprint = \@false | |
| \@setflag \@times = \@false | |
| % Note that all the dangerous article class options are trapped. | |
| \DeclareOption{9pt}{\@setflag \@ninepoint = \@true | |
| \@setflag \@explicitsize = \@true} | |
| \DeclareOption{10pt}{\PassOptionsToClass{10pt}{article}% | |
| \@setflag \@ninepoint = \@false | |
| \@setflag \@explicitsize = \@true} | |
| \DeclareOption{11pt}{\PassOptionsToClass{11pt}{article}% | |
| \@setflag \@ninepoint = \@false | |
| \@setflag \@explicitsize = \@true} | |
| \DeclareOption{12pt}{\@unsupportedoption{12pt}} | |
| \DeclareOption{a4paper}{\@unsupportedoption{a4paper}} | |
| \DeclareOption{a5paper}{\@unsupportedoption{a5paper}} | |
| \DeclareOption{b5paper}{\@unsupportedoption{b5paper}} | |
| \DeclareOption{blockstyle}{\@setflag \@blockstyle = \@true} | |
| \DeclareOption{cm}{\@setflag \@times = \@false} | |
| \DeclareOption{computermodern}{\@setflag \@times = \@false} | |
| \DeclareOption{executivepaper}{\@unsupportedoption{executivepaper}} | |
| \DeclareOption{indentedstyle}{\@setflag \@blockstyle = \@false} | |
| \DeclareOption{landscape}{\@unsupportedoption{landscape}} | |
| \DeclareOption{legalpaper}{\@unsupportedoption{legalpaper}} | |
| \DeclareOption{letterpaper}{\@unsupportedoption{letterpaper}} | |
| \DeclareOption{mathtime}{\@setflag \@mathtime = \@true} | |
| \DeclareOption{nocopyrightspace}{\@setflag \@copyrightwanted = \@false} | |
| \DeclareOption{notitlepage}{\@unsupportedoption{notitlepage}} | |
| \DeclareOption{numberedpars}{\@numheaddepth = 4} | |
| %%%\DeclareOption{onecolumn}{\@setflag \@onecolumn = \@true} | |
| \DeclareOption{preprint}{\@setflag \@preprint = \@true} | |
| \DeclareOption{reprint}{\@setflag \@reprint = \@true} | |
| \DeclareOption{times}{\@setflag \@times = \@true} | |
| \DeclareOption{titlepage}{\@unsupportedoption{titlepage}} | |
| \DeclareOption{twocolumn}{\@setflag \@onecolumn = \@false} | |
| \DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} | |
| \ExecuteOptions{9pt,indentedstyle,times} | |
| \@setflag \@explicitsize = \@false | |
| \ProcessOptions | |
| \if \@onecolumn | |
| \if \@notp{\@explicitsize}% | |
| \@setflag \@ninepoint = \@false | |
| \PassOptionsToClass{11pt}{article}% | |
| \fi | |
| \PassOptionsToClass{twoside,onecolumn}{article} | |
| \else | |
| \PassOptionsToClass{twoside,twocolumn}{article} | |
| \fi | |
| \LoadClass{article} | |
| \def \@unsupportedoption #1{% | |
| \ClassError{proc}{The standard '#1' option is not supported.}} | |
| % This can be used with the 'reprint' option to get the final folios. | |
| \def \setpagenumber #1{% | |
| \setcounter{page}{#1}} | |
| \AtEndDocument{\label{sigplanconf@finalpage}} | |
| % Utilities | |
| % --------- | |
| \newcommand{\setvspace}[2]{% | |
| #1 = #2 | |
| \advance #1 by -1\parskip} | |
| % Document Parameters | |
| % -------- ---------- | |
| % Page: | |
| \setlength{\hoffset}{-1in} | |
| \setlength{\voffset}{-1in} | |
| \setlength{\topmargin}{1in} | |
| \setlength{\headheight}{0pt} | |
| \setlength{\headsep}{0pt} | |
| \if \@onecolumn | |
| \setlength{\evensidemargin}{.75in} | |
| \setlength{\oddsidemargin}{.75in} | |
| \else | |
| \setlength{\evensidemargin}{.75in} | |
| \setlength{\oddsidemargin}{.75in} | |
| \fi | |
| % Text area: | |
| \newdimen{\standardtextwidth} | |
| \setlength{\standardtextwidth}{42pc} | |
| \if \@onecolumn | |
| \setlength{\textwidth}{40.5pc} | |
| \else | |
| \setlength{\textwidth}{\standardtextwidth} | |
| \fi | |
| \setlength{\topskip}{8pt} | |
| \setlength{\columnsep}{2pc} | |
| \setlength{\textheight}{54.5pc} | |
| % Running foot: | |
| \setlength{\footskip}{30pt} | |
| % Paragraphs: | |
| \if \@blockstyle | |
| \setlength{\parskip}{5pt plus .1pt minus .5pt} | |
| \setlength{\parindent}{0pt} | |
| \else | |
| \setlength{\parskip}{0pt} | |
| \setlength{\parindent}{12pt} | |
| \fi | |
| \setlength{\lineskip}{.5pt} | |
| \setlength{\lineskiplimit}{\lineskip} | |
| \frenchspacing | |
| \pretolerance = 400 | |
| \tolerance = \pretolerance | |
| \setlength{\emergencystretch}{5pt} | |
| \clubpenalty = 10000 | |
| \widowpenalty = 10000 | |
| \setlength{\hfuzz}{.5pt} | |
| % Standard vertical spaces: | |
| \newskip{\standardvspace} | |
| \setvspace{\standardvspace}{5pt plus 1pt minus .5pt} | |
| % Margin paragraphs: | |
| \setlength{\marginparwidth}{36pt} | |
| \setlength{\marginparsep}{2pt} | |
| \setlength{\marginparpush}{8pt} | |
| \setlength{\skip\footins}{8pt plus 3pt minus 1pt} | |
| \setlength{\footnotesep}{9pt} | |
| \renewcommand{\footnoterule}{% | |
| \hrule width .5\columnwidth height .33pt depth 0pt} | |
| \renewcommand{\@makefntext}[1]{% | |
| \noindent \@makefnmark \hspace{1pt}#1} | |
| % Floats: | |
| \setcounter{topnumber}{4} | |
| \setcounter{bottomnumber}{1} | |
| \setcounter{totalnumber}{4} | |
| \renewcommand{\fps@figure}{tp} | |
| \renewcommand{\fps@table}{tp} | |
| \renewcommand{\topfraction}{0.90} | |
| \renewcommand{\bottomfraction}{0.30} | |
| \renewcommand{\textfraction}{0.10} | |
| \renewcommand{\floatpagefraction}{0.75} | |
| \setcounter{dbltopnumber}{4} | |
| \renewcommand{\dbltopfraction}{\topfraction} | |
| \renewcommand{\dblfloatpagefraction}{\floatpagefraction} | |
| \setlength{\floatsep}{18pt plus 4pt minus 2pt} | |
| \setlength{\textfloatsep}{18pt plus 4pt minus 3pt} | |
| \setlength{\intextsep}{10pt plus 4pt minus 3pt} | |
| \setlength{\dblfloatsep}{18pt plus 4pt minus 2pt} | |
| \setlength{\dbltextfloatsep}{20pt plus 4pt minus 3pt} | |
| % Miscellaneous: | |
| \errorcontextlines = 5 | |
| % Fonts | |
| % ----- | |
| \if \@times | |
| \renewcommand{\rmdefault}{ptm}% | |
| \if \@mathtime | |
| \usepackage[mtbold,noTS1]{mathtime}% | |
| \else | |
| %%% \usepackage{mathptm}% | |
| \fi | |
| \else | |
| \relax | |
| \fi | |
| \if \@ninepoint | |
| \renewcommand{\normalsize}{% | |
| \@setfontsize{\normalsize}{9pt}{10pt}% | |
| \setlength{\abovedisplayskip}{5pt plus 1pt minus .5pt}% | |
| \setlength{\belowdisplayskip}{\abovedisplayskip}% | |
| \setlength{\abovedisplayshortskip}{3pt plus 1pt minus 2pt}% | |
| \setlength{\belowdisplayshortskip}{\abovedisplayshortskip}} | |
| \renewcommand{\tiny}{\@setfontsize{\tiny}{5pt}{6pt}} | |
| \renewcommand{\scriptsize}{\@setfontsize{\scriptsize}{7pt}{8pt}} | |
| \renewcommand{\small}{% | |
| \@setfontsize{\small}{8pt}{9pt}% | |
| \setlength{\abovedisplayskip}{4pt plus 1pt minus 1pt}% | |
| \setlength{\belowdisplayskip}{\abovedisplayskip}% | |
| \setlength{\abovedisplayshortskip}{2pt plus 1pt}% | |
| \setlength{\belowdisplayshortskip}{\abovedisplayshortskip}} | |
| \renewcommand{\footnotesize}{% | |
| \@setfontsize{\footnotesize}{8pt}{9pt}% | |
| \setlength{\abovedisplayskip}{4pt plus 1pt minus .5pt}% | |
| \setlength{\belowdisplayskip}{\abovedisplayskip}% | |
| \setlength{\abovedisplayshortskip}{2pt plus 1pt}% | |
| \setlength{\belowdisplayshortskip}{\abovedisplayshortskip}} | |
| \renewcommand{\large}{\@setfontsize{\large}{11pt}{13pt}} | |
| \renewcommand{\Large}{\@setfontsize{\Large}{14pt}{18pt}} | |
| \renewcommand{\LARGE}{\@setfontsize{\LARGE}{18pt}{20pt}} | |
| \renewcommand{\huge}{\@setfontsize{\huge}{20pt}{25pt}} | |
| \renewcommand{\Huge}{\@setfontsize{\Huge}{25pt}{30pt}} | |
| \fi | |
| % Abstract | |
| % -------- | |
| \renewenvironment{abstract}{% | |
| \section*{Abstract}% | |
| \normalsize}{% | |
| } | |
| % Bibliography | |
| % ------------ | |
| \renewenvironment{thebibliography}[1] | |
| {\section*{\refname | |
| \@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}}% | |
| \list{\@biblabel{\@arabic\c@enumiv}}% | |
| {\settowidth\labelwidth{\@biblabel{#1}}% | |
| \leftmargin\labelwidth | |
| \advance\leftmargin\labelsep | |
| \@openbib@code | |
| \usecounter{enumiv}% | |
| \let\p@enumiv\@empty | |
| \renewcommand\theenumiv{\@arabic\c@enumiv}}% | |
| \small | |
| \softraggedright%%%\sloppy | |
| \clubpenalty4000 | |
| \@clubpenalty \clubpenalty | |
| \widowpenalty4000% | |
| \sfcode`\.\@m} | |
| {\def\@noitemerr | |
| {\@latex@warning{Empty `thebibliography' environment}}% | |
| \endlist} | |
| % Categories | |
| % ---------- | |
| \@setflag \@firstcategory = \@true | |
| \newcommand{\category}[3]{% | |
| \if \@firstcategory | |
| \paragraph*{Categories and Subject Descriptors}% | |
| \@setflag \@firstcategory = \@false | |
| \else | |
| \unskip ;\hspace{.75em}% | |
| \fi | |
| \@ifnextchar [{\@category{#1}{#2}{#3}}{\@category{#1}{#2}{#3}[]}} | |
| \def \@category #1#2#3[#4]{% | |
| {\let \and = \relax | |
| #1 [\textit{#2}]% | |
| \if \@emptyargp{#4}% | |
| \if \@notp{\@emptyargp{#3}}: #3\fi | |
| \else | |
| :\space | |
| \if \@notp{\@emptyargp{#3}}#3---\fi | |
| \textrm{#4}% | |
| \fi}} | |
| % Copyright Notice | |
| % --------- ------ | |
| \def \ftype@copyrightbox {8} | |
| \def \@toappear {} | |
| \def \@permission {} | |
| \def \@copyrightspace {% | |
| \@float{copyrightbox}[b]% | |
| \vbox to 1in{% | |
| \vfill | |
| \parbox[b]{20pc}{% | |
| \scriptsize | |
| \if \@preprint | |
| [Copyright notice will appear here | |
| once 'preprint' option is removed.]\par | |
| \else | |
| \@toappear | |
| \fi | |
| \if \@reprint | |
| \noindent Reprinted from \@conferencename, | |
| \@proceedings, | |
| \@conferenceinfo, | |
| pp.~\number\thepage--\pageref{sigplanconf@finalpage}.\par | |
| \fi}}% | |
| \end@float} | |
| \long\def \toappear #1{% | |
| \def \@toappear {#1}} | |
| \toappear{% | |
| \noindent \@permission \par | |
| \vspace{2pt} | |
| \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par | |
| \noindent Copyright \copyright\ \@copyrightyear\ ACM \@copyrightdata | |
| \dots \$5.00\par} | |
| \newcommand{\permission}[1]{% | |
| \gdef \@permission {#1}} | |
| \permission{% | |
| Permission to make digital or hard copies of all or | |
| part of this work for personal or classroom use is granted without | |
| fee provided that copies are not made or distributed for profit or | |
| commercial advantage and that copies bear this notice and the full | |
| citation on the first page. To copy otherwise, to republish, to | |
| post on servers or to redistribute to lists, requires prior specific | |
| permission and/or a fee.} | |
| % Here we have some alternate permission statements and copyright lines: | |
| \newcommand{\ACMCanadapermission}{% | |
| \permission{% | |
| Copyright \@copyrightyear\ Association for Computing Machinery. | |
| ACM acknowledges that | |
| this contribution was authored or co-authored by an affiliate of the | |
| National Research Council of Canada (NRC). | |
| As such, the Crown in Right of | |
| Canada retains an equal interest in the copyright, however granting | |
| nonexclusive, royalty-free right to publish or reproduce this article, | |
| or to allow others to do so, provided that clear attribution | |
| is also given to the authors and the NRC.}} | |
| \newcommand{\ACMUSpermission}{% | |
| \permission{% | |
| Copyright \@copyrightyear\ Association for | |
| Computing Machinery. ACM acknowledges that | |
| this contribution was authored or co-authored | |
| by a contractor or affiliate | |
| of the U.S. Government. As such, the Government retains a nonexclusive, | |
| royalty-free right to publish or reproduce this article, | |
| or to allow others to do so, for Government purposes only.}} | |
| \newcommand{\authorpermission}{% | |
| \permission{% | |
| Copyright is held by the author/owner(s).} | |
| \toappear{% | |
| \noindent \@permission \par | |
| \vspace{2pt} | |
| \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par | |
| ACM \@copyrightdata.}} | |
| \newcommand{\Sunpermission}{% | |
| \permission{% | |
| Copyright is held by Sun Microsystems, Inc.}% | |
| \toappear{% | |
| \noindent \@permission \par | |
| \vspace{2pt} | |
| \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par | |
| ACM \@copyrightdata.}} | |
| \newcommand{\USpublicpermission}{% | |
| \permission{% | |
| This paper is authored by an employee(s) of the United States | |
| Government and is in the public domain.}% | |
| \toappear{% | |
| \noindent \@permission \par | |
| \vspace{2pt} | |
| \noindent \textsl{\@conferencename}\quad \@conferenceinfo \par | |
| ACM \@copyrightdata.}} | |
| % Enunciations | |
| % ------------ | |
| \def \@begintheorem #1#2{% {name}{number} | |
| \trivlist | |
| \item[\hskip \labelsep \textsc{#1 #2.}]% | |
| \itshape\selectfont | |
| \ignorespaces} | |
| \def \@opargbegintheorem #1#2#3{% {name}{number}{title} | |
| \trivlist | |
| \item[% | |
| \hskip\labelsep \textsc{#1\ #2}% | |
| \if \@notp{\@emptyargp{#3}}\nut (#3).\fi]% | |
| \itshape\selectfont | |
| \ignorespaces} | |
| % Figures | |
| % ------- | |
| \@setflag \@caprule = \@true | |
| \long\def \@makecaption #1#2{% | |
| \addvspace{4pt} | |
| \if \@caprule | |
| \hrule width \hsize height .33pt | |
| \vspace{4pt} | |
| \fi | |
| \setbox \@tempboxa = \hbox{\@setfigurenumber{#1.}\nut #2}% | |
| \if \@dimgtrp{\wd\@tempboxa}{\hsize}% | |
| \noindent \@setfigurenumber{#1.}\nut #2\par | |
| \else | |
| \centerline{\box\@tempboxa}% | |
| \fi} | |
| \newcommand{\nocaptionrule}{% | |
| \@setflag \@caprule = \@false} | |
| \def \@setfigurenumber #1{% | |
| {\rmfamily \bfseries \selectfont #1}} | |
| % Hierarchy | |
| % --------- | |
| \setcounter{secnumdepth}{\@numheaddepth} | |
| \newskip{\@sectionaboveskip} | |
| \setvspace{\@sectionaboveskip}{10pt plus 3pt minus 2pt} | |
| \newskip{\@sectionbelowskip} | |
| \if \@blockstyle | |
| \setlength{\@sectionbelowskip}{0.1pt}% | |
| \else | |
| \setlength{\@sectionbelowskip}{4pt}% | |
| \fi | |
| \renewcommand{\section}{% | |
| \@startsection | |
| {section}% | |
| {1}% | |
| {0pt}% | |
| {-\@sectionaboveskip}% | |
| {\@sectionbelowskip}% | |
| {\large \bfseries \raggedright}} | |
| \newskip{\@subsectionaboveskip} | |
| \setvspace{\@subsectionaboveskip}{8pt plus 2pt minus 2pt} | |
| \newskip{\@subsectionbelowskip} | |
| \if \@blockstyle | |
| \setlength{\@subsectionbelowskip}{0.1pt}% | |
| \else | |
| \setlength{\@subsectionbelowskip}{4pt}% | |
| \fi | |
| \renewcommand{\subsection}{% | |
| \@startsection% | |
| {subsection}% | |
| {2}% | |
| {0pt}% | |
| {-\@subsectionaboveskip}% | |
| {\@subsectionbelowskip}% | |
| {\normalsize \bfseries \raggedright}} | |
| \renewcommand{\subsubsection}{% | |
| \@startsection% | |
| {subsubsection}% | |
| {3}% | |
| {0pt}% | |
| {-\@subsectionaboveskip} | |
| {\@subsectionbelowskip}% | |
| {\normalsize \bfseries \raggedright}} | |
| \newskip{\@paragraphaboveskip} | |
| \setvspace{\@paragraphaboveskip}{6pt plus 2pt minus 2pt} | |
| \renewcommand{\paragraph}{% | |
| \@startsection% | |
| {paragraph}% | |
| {4}% | |
| {0pt}% | |
| {\@paragraphaboveskip} | |
| {-1em}% | |
| {\normalsize \bfseries \if \@times \itshape \fi}} | |
| \renewcommand{\subparagraph}{% | |
| \@startsection% | |
| {subparagraph}% | |
| {4}% | |
| {0pt}% | |
| {\@paragraphaboveskip} | |
| {-1em}% | |
| {\normalsize \itshape}} | |
| % Standard headings: | |
| \newcommand{\acks}{\section*{Acknowledgments}} | |
| \newcommand{\keywords}{\paragraph*{Keywords}} | |
| \newcommand{\terms}{\paragraph*{General Terms}} | |
| % Identification | |
| % -------------- | |
| \def \@conferencename {} | |
| \def \@conferenceinfo {} | |
| \def \@copyrightyear {} | |
| \def \@copyrightdata {[to be supplied]} | |
| \def \@proceedings {[Unknown Proceedings]} | |
| \newcommand{\conferenceinfo}[2]{% | |
| \gdef \@conferencename {#1}% | |
| \gdef \@conferenceinfo {#2}} | |
| \newcommand{\copyrightyear}[1]{% | |
| \gdef \@copyrightyear {#1}} | |
| \let \CopyrightYear = \copyrightyear | |
| \newcommand{\copyrightdata}[1]{% | |
| \gdef \@copyrightdata {#1}} | |
| \let \crdata = \copyrightdata | |
| \newcommand{\proceedings}[1]{% | |
| \gdef \@proceedings {#1}} | |
| % Lists | |
| % ----- | |
| \setlength{\leftmargini}{13pt} | |
| \setlength\leftmarginii{13pt} | |
| \setlength\leftmarginiii{13pt} | |
| \setlength\leftmarginiv{13pt} | |
| \setlength{\labelsep}{3.5pt} | |
| \setlength{\topsep}{\standardvspace} | |
| \if \@blockstyle | |
| \setlength{\itemsep}{1pt} | |
| \setlength{\parsep}{3pt} | |
| \else | |
| \setlength{\itemsep}{1pt} | |
| \setlength{\parsep}{3pt} | |
| \fi | |
| \renewcommand{\labelitemi}{{\small \centeroncapheight{\textbullet}}} | |
| \renewcommand{\labelitemii}{\centeroncapheight{\rule{2.5pt}{2.5pt}}} | |
| \renewcommand{\labelitemiii}{$-$} | |
| \renewcommand{\labelitemiv}{{\Large \textperiodcentered}} | |
| \renewcommand{\@listi}{% | |
| \leftmargin = \leftmargini | |
| \listparindent = 0pt} | |
| %%% \itemsep = 1pt | |
| %%% \parsep = 3pt} | |
| %%% \listparindent = \parindent} | |
| \let \@listI = \@listi | |
| \renewcommand{\@listii}{% | |
| \leftmargin = \leftmarginii | |
| \topsep = 1pt | |
| \labelwidth = \leftmarginii | |
| \advance \labelwidth by -\labelsep | |
| \listparindent = \parindent} | |
| \renewcommand{\@listiii}{% | |
| \leftmargin = \leftmarginiii | |
| \labelwidth = \leftmarginiii | |
| \advance \labelwidth by -\labelsep | |
| \listparindent = \parindent} | |
| \renewcommand{\@listiv}{% | |
| \leftmargin = \leftmarginiv | |
| \labelwidth = \leftmarginiv | |
| \advance \labelwidth by -\labelsep | |
| \listparindent = \parindent} | |
| % Mathematics | |
| % ----------- | |
| \def \theequation {\arabic{equation}} | |
| % Miscellaneous | |
| % ------------- | |
| \newcommand{\balancecolumns}{% | |
| \vfill\eject | |
| \global\@colht = \textheight | |
| \global\ht\@cclv = \textheight} | |
| \newcommand{\nut}{\hspace{.5em}} | |
| \newcommand{\softraggedright}{% | |
| \let \\ = \@centercr | |
| \leftskip = 0pt | |
| \rightskip = 0pt plus 10pt} | |
| % Program Code | |
| % ------- ---- | |
| \newcommand{\mono}[1]{% | |
| {\@tempdima = \fontdimen2\font | |
| \texttt{\spaceskip = 1.1\@tempdima #1}}} | |
| % Running Heads and Feet | |
| % ------- ----- --- ---- | |
| \def \@preprintfooter {} | |
| \newcommand{\preprintfooter}[1]{% | |
| \gdef \@preprintfooter {#1}} | |
| \if \@preprint | |
| \def \ps@plain {% | |
| \let \@mkboth = \@gobbletwo | |
| \let \@evenhead = \@empty | |
| \def \@evenfoot {\scriptsize \textit{\@preprintfooter}\hfil \thepage \hfil | |
| \textit{\@formatyear}}% | |
| \let \@oddhead = \@empty | |
| \let \@oddfoot = \@evenfoot} | |
| \else\if \@reprint | |
| \def \ps@plain {% | |
| \let \@mkboth = \@gobbletwo | |
| \let \@evenhead = \@empty | |
| \def \@evenfoot {\scriptsize \hfil \thepage \hfil}% | |
| \let \@oddhead = \@empty | |
| \let \@oddfoot = \@evenfoot} | |
| \else | |
| \let \ps@plain = \ps@empty | |
| \let \ps@headings = \ps@empty | |
| \let \ps@myheadings = \ps@empty | |
| \fi\fi | |
| \def \@formatyear {% | |
| \number\year/\number\month/\number\day} | |
| % Special Characters | |
| % ------- ---------- | |
| \DeclareRobustCommand{\euro}{% | |
| \protect{\rlap{=}}{\sf \kern .1em C}} | |
| % Title Page | |
| % ----- ---- | |
| \@setflag \@addauthorsdone = \@false | |
| \def \@titletext {\@latex@error{No title was provided}{}} | |
| \def \@subtitletext {} | |
| \newcount{\@authorcount} | |
| \newcount{\@titlenotecount} | |
| \newtoks{\@titlenotetext} | |
| \def \@titlebanner {} | |
| \renewcommand{\title}[1]{% | |
| \gdef \@titletext {#1}} | |
| \newcommand{\subtitle}[1]{% | |
| \gdef \@subtitletext {#1}} | |
| \newcommand{\authorinfo}[3]{% {names}{affiliation}{email/URL} | |
| \global\@increment \@authorcount | |
| \@withname\gdef {\@authorname\romannumeral\@authorcount}{#1}% | |
| \@withname\gdef {\@authoraffil\romannumeral\@authorcount}{#2}% | |
| \@withname\gdef {\@authoremail\romannumeral\@authorcount}{#3}} | |
| \renewcommand{\author}[1]{% | |
| \@latex@error{The \string\author\space command is obsolete; | |
| use \string\authorinfo}{}} | |
| \newcommand{\titlebanner}[1]{% | |
| \gdef \@titlebanner {#1}} | |
| \renewcommand{\maketitle}{% | |
| \pagestyle{plain}% | |
| \if \@onecolumn | |
| {\hsize = \standardtextwidth | |
| \@maketitle}% | |
| \else | |
| \twocolumn[\@maketitle]% | |
| \fi | |
| \@placetitlenotes | |
| \if \@copyrightwanted \@copyrightspace \fi} | |
| \def \@maketitle {% | |
| \begin{center} | |
| \@settitlebanner | |
| \let \thanks = \titlenote | |
| \noindent \LARGE \bfseries \@titletext \par | |
| \vskip 6pt | |
| \noindent \Large \@subtitletext \par | |
| \vskip 12pt | |
| \ifcase \@authorcount | |
| \@latex@error{No authors were specified for this paper}{}\or | |
| \@titleauthors{i}{}{}\or | |
| \@titleauthors{i}{ii}{}\or | |
| \@titleauthors{i}{ii}{iii}\or | |
| \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{}{}\or | |
| \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{}\or | |
| \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}\or | |
| \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}% | |
| \@titleauthors{vii}{}{}\or | |
| \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}% | |
| \@titleauthors{vii}{viii}{}\or | |
| \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}% | |
| \@titleauthors{vii}{viii}{ix}\or | |
| \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}% | |
| \@titleauthors{vii}{viii}{ix}\@titleauthors{x}{}{}\or | |
| \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}% | |
| \@titleauthors{vii}{viii}{ix}\@titleauthors{x}{xi}{}\or | |
| \@titleauthors{i}{ii}{iii}\@titleauthors{iv}{v}{vi}% | |
| \@titleauthors{vii}{viii}{ix}\@titleauthors{x}{xi}{xii}% | |
| \else | |
| \@latex@error{Cannot handle more than 12 authors}{}% | |
| \fi | |
| \vspace{1.75pc} | |
| \end{center}} | |
| \def \@settitlebanner {% | |
| \if \@andp{\@preprint}{\@notp{\@emptydefp{\@titlebanner}}}% | |
| \vbox to 0pt{% | |
| \vskip -32pt | |
| \noindent \textbf{\@titlebanner}\par | |
| \vss}% | |
| \nointerlineskip | |
| \fi} | |
| \def \@titleauthors #1#2#3{% | |
| \if \@andp{\@emptyargp{#2}}{\@emptyargp{#3}}% | |
| \noindent \@setauthor{40pc}{#1}{\@false}\par | |
| \else\if \@emptyargp{#3}% | |
| \noindent \@setauthor{17pc}{#1}{\@false}\hspace{3pc}% | |
| \@setauthor{17pc}{#2}{\@false}\par | |
| \else | |
| \noindent \@setauthor{12.5pc}{#1}{\@false}\hspace{2pc}% | |
| \@setauthor{12.5pc}{#2}{\@false}\hspace{2pc}% | |
| \@setauthor{12.5pc}{#3}{\@true}\par | |
| \relax | |
| \fi\fi | |
| \vspace{20pt}} | |
| \def \@setauthor #1#2#3{% {width}{text}{unused} | |
| \vtop{% | |
| \def \and {% | |
| \hspace{16pt}} | |
| \hsize = #1 | |
| \normalfont | |
| \centering | |
| \large \@name{\@authorname#2}\par | |
| \vspace{5pt} | |
| \normalsize \@name{\@authoraffil#2}\par | |
| \vspace{4pt} | |
| \normalsize{\@name{\@authoremail#2}}\par}} | |
| \def \@maybetitlenote #1{% | |
| \if \@andp{#1}{\@gtrp{\@authorcount}{3}}% | |
| \titlenote{See page~\pageref{@addauthors} for additional authors.}% | |
| \fi} | |
| \newtoks{\@fnmark} | |
| \newcommand{\titlenote}[1]{% | |
| \global\@increment \@titlenotecount | |
| \ifcase \@titlenotecount \relax \or | |
| \@fnmark = {\ast}\or | |
| \@fnmark = {\dagger}\or | |
| \@fnmark = {\ddagger}\or | |
| \@fnmark = {\S}\or | |
| \@fnmark = {\P}\or | |
| \@fnmark = {\ast\ast}% | |
| \fi | |
| \,$^{\the\@fnmark}$% | |
| \edef \reserved@a {\noexpand\@appendtotext{% | |
| \noexpand\@titlefootnote{\the\@fnmark}}}% | |
| \reserved@a{#1}} | |
| \def \@appendtotext #1#2{% | |
| \global\@titlenotetext = \expandafter{\the\@titlenotetext #1{#2}}} | |
| \newcount{\@authori} | |
| \iffalse | |
| \def \additionalauthors {% | |
| \if \@gtrp{\@authorcount}{3}% | |
| \section{Additional Authors}% | |
| \label{@addauthors}% | |
| \noindent | |
| \@authori = 4 | |
| {\let \\ = ,% | |
| \loop | |
| \textbf{\@name{\@authorname\romannumeral\@authori}}, | |
| \@name{\@authoraffil\romannumeral\@authori}, | |
| email: \@name{\@authoremail\romannumeral\@authori}.% | |
| \@increment \@authori | |
| \if \@notp{\@gtrp{\@authori}{\@authorcount}} \repeat}% | |
| \par | |
| \fi | |
| \global\@setflag \@addauthorsdone = \@true} | |
| \fi | |
| \let \addauthorsection = \additionalauthors | |
| \def \@placetitlenotes { | |
| \the\@titlenotetext} | |
| % Utilities | |
| % --------- | |
| \newcommand{\centeroncapheight}[1]{% | |
| {\setbox\@tempboxa = \hbox{#1}% | |
| \@measurecapheight{\@tempdima}% % Calculate ht(CAP) - ht(text) | |
| \advance \@tempdima by -\ht\@tempboxa % ------------------ | |
| \divide \@tempdima by 2 % 2 | |
| \raise \@tempdima \box\@tempboxa}} | |
| \newbox{\@measbox} | |
| \def \@measurecapheight #1{% {\dimen} | |
| \setbox\@measbox = \hbox{ABCDEFGHIJKLMNOPQRSTUVWXYZ}% | |
| #1 = \ht\@measbox} | |
| \long\def \@titlefootnote #1#2{% | |
| \insert\footins{% | |
| \reset@font\footnotesize | |
| \interlinepenalty\interfootnotelinepenalty | |
| \splittopskip\footnotesep | |
| \splitmaxdepth \dp\strutbox \floatingpenalty \@MM | |
| \hsize\columnwidth \@parboxrestore | |
| %%% \protected@edef\@currentlabel{% | |
| %%% \csname p@footnote\endcsname\@thefnmark}% | |
| \color@begingroup | |
| \def \@makefnmark {$^{#1}$}% | |
| \@makefntext{% | |
| \rule\z@\footnotesep\ignorespaces#2\@finalstrut\strutbox}% | |
| \color@endgroup}} | |
| % LaTeX Modifications | |
| % ----- ------------- | |
| \def \@seccntformat #1{% | |
| \@name{\the#1}% | |
| \@expandaftertwice\@seccntformata \csname the#1\endcsname.\@mark | |
| \quad} | |
| \def \@seccntformata #1.#2\@mark{% | |
| \if \@emptyargp{#2}.\fi} | |
| % Revision History | |
| % -------- ------- | |
| % Date Person Ver. Change | |
| % ---- ------ ---- ------ | |
| % 2004.09.12 PCA 0.1--5 Preliminary development. | |
| % 2004.11.18 PCA 0.5 Start beta testing. | |
| % 2004.11.19 PCA 0.6 Obsolete \author and replace with | |
| % \authorinfo. | |
| % Add 'nocopyrightspace' option. | |
| % Compress article opener spacing. | |
| % Add 'mathtime' option. | |
| % Increase text height by 6 points. | |
| % 2004.11.28 PCA 0.7 Add 'cm/computermodern' options. | |
| % Change default to Times text. | |
| % 2004.12.14 PCA 0.8 Remove use of mathptm.sty; it cannot | |
| % coexist with latexsym or amssymb. | |
| % 2005.01.20 PCA 0.9 Rename class file to sigplanconf.cls. | |
| % 2005.03.05 PCA 0.91 Change default copyright data. | |
| % 2005.03.06 PCA 0.92 Add at-signs to some macro names. | |
| % 2005.03.07 PCA 0.93 The 'onecolumn' option defaults to '11pt', | |
| % and it uses the full type width. | |
| % 2005.03.15 PCA 0.94 Add at-signs to more macro names. | |
| % Allow margin paragraphs during review. | |
| % 2005.03.22 PCA 0.95 Implement \euro. | |
| % Remove proof and newdef environments. | |
| % 2005.05.06 PCA 1.0 Eliminate 'onecolumn' option. | |
| % Change footer to small italic and eliminate | |
| % left portion if no \preprintfooter. | |
| % Eliminate copyright notice if preprint. | |
| % Clean up and shrink copyright box. | |
| % 2005.05.30 PCA 1.1 Add alternate permission statements. | |
| % 2005.06.29 PCA 1.1 Publish final first edition of guide. | |
| % 2005.07.14 PCA 1.2 Add \subparagraph. | |
| % Use block paragraphs in lists, and adjust | |
| % spacing between items and paragraphs. | |
| % 2006.06.22 PCA 1.3 Add 'reprint' option and associated | |
| % commands. | |
| % 2006.08.24 PCA 1.4 Fix bug in \maketitle case command. | |
| % 2007.03.13 PCA 1.5 The title banner only display with the | |
| % 'preprint' option. |