sigplanconf.cls 43 KB

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