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