source: docs/Working/re/sigplanconf.cls @ 3485

Last change on this file since 3485 was 3460, checked in by cameron, 6 years ago

Conference class file.

File size: 37.8 KB
Line 
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
Note: See TracBrowser for help on using the repository browser.