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