From 049bf4b07a6289b339dc358b8411f886e3d2f884 Mon Sep 17 00:00:00 2001 From: David Van Horn Date: Fri, 10 Mar 2017 18:24:27 -0500 Subject: [PATCH] Scribble support for new acmart.cls. (#85) Scribble support for new acmart.cls. --- .../scribblings/scribble/acmart.scrbl | 251 ++ scribble-doc/scribblings/scribble/base.scrbl | 2 +- .../scribblings/scribble/generic.scrbl | 1 + .../scribblings/scribble/sigplan.scrbl | 2 +- scribble-lib/scribble/acmart.rkt | 211 ++ scribble-lib/scribble/acmart/acmart-load.tex | 2 + scribble-lib/scribble/acmart/acmart.cls | 2187 +++++++++++++++++ scribble-lib/scribble/acmart/acmart.css | 13 + scribble-lib/scribble/acmart/acmart.tex | 24 + scribble-lib/scribble/acmart/lang.rkt | 136 + scribble-lib/scribble/acmart/lang/reader.rkt | 3 + scribble-lib/scribble/acmart/style.tex | 42 + 12 files changed, 2872 insertions(+), 2 deletions(-) create mode 100644 scribble-doc/scribblings/scribble/acmart.scrbl create mode 100644 scribble-lib/scribble/acmart.rkt create mode 100644 scribble-lib/scribble/acmart/acmart-load.tex create mode 100644 scribble-lib/scribble/acmart/acmart.cls create mode 100644 scribble-lib/scribble/acmart/acmart.css create mode 100644 scribble-lib/scribble/acmart/acmart.tex create mode 100644 scribble-lib/scribble/acmart/lang.rkt create mode 100644 scribble-lib/scribble/acmart/lang/reader.rkt create mode 100644 scribble-lib/scribble/acmart/style.tex diff --git a/scribble-doc/scribblings/scribble/acmart.scrbl b/scribble-doc/scribblings/scribble/acmart.scrbl new file mode 100644 index 00000000..4684c13c --- /dev/null +++ b/scribble-doc/scribblings/scribble/acmart.scrbl @@ -0,0 +1,251 @@ +#lang scribble/manual +@(require (except-in "utils.rkt" title author) + (for-label scribble/acmart)) + +@(define acmart-url + "http://mirrors.concertpass.com/tex-archive/macros/latex/contrib/acmart/acmart.pdf") + +@title{ACM Paper Format} + +@defmodulelang[scribble/acmart]{The @racketmodname[scribble/acmart] +language is like @racketmodname[scribble/base], but configured with +LaTeX style defaults to use the @hyperlink[acmart-url]{@tt{acmart}} +class for typesetting publications for the Association of Computing +Machinery.} + +@deftogether[( +@defidform[manuscript] +@defidform[acmsmall] +@defidform[acmlarge] +@defidform[acmtog] +@defidform[sigconf] +@defidform[siggraph] +@defidform[sigplan] +@defidform[sigchi] +@defidform[sigchi-a] +)]{ + +Enables the given document format. Use the format only on the same +line as @hash-lang[], with only whitespace (or other options) between +@racketmodname[scribble/acmart] and the format name: + +@verbatim[#:indent 2]|{ + #lang scribble/acmart @acmsmall +}| + +The @racket[manuscript], @racket[acmsmall], @racket[acmlarge], +@racket[acmtog], @racket[sigconf], @racket[siggraph], +@racket[sigplan], @racket[sigchi], and @racket[sigchi-a] formats are +all mutually exclusive.} + +@deftogether[( +@defidform[review] +@defidform[screen] +@defidform[natbib] +@defidform[anonymous] +@defidform[authorversion] +)]{ + +Enables the given document format option. Use the option only on the +same line as @hash-lang[], with only whitespace (or other options) +between @racketmodname[scribble/acmart] and the format option. Any +number of options may be used: + +@verbatim[#:indent 2]|{ + #lang scribble/acmart @acmsmall @review @anonymous @natbib +}| + +} + +@defproc[(maketitle) block?]{ + +Issues the @tt{maketitle} command. This @emph{must} be included in +the document and should occur after the title, authors, and several +other top-matter commands. (See the +@hyperlink[acmart-url]{@tt{acmart}} documentation.) + +@codeblock|{ + #lang scribble/acmart + @title{Example} + @maketitle{} +}|} + +@defproc[(abstract [pre-content pre-content?] ...) block?]{ + +Generates a @tech{nested flow} for a paper abstract.} + +@defform[(include-abstract module-path)]{ + +Similar to @racket[include-section], but incorporates the document in the +specified module as an abstract. The document must have no title or +sub-parts.} + +@defproc[(title [#:short short-title pre-content? #f] [title pre-content?]) content?]{ + +Specifies the title of the document, optionally with a short version of the title for running heads.} + +@defproc[(subtitle [pre-content pre-content?] ...) content?]{ + +Specifies a subtitle.} + +@defproc[(author [pre-content pre-conent?] ...) content?]{ + +Specifies an author.} + +@defproc[(email [pre-content pre-conent?] ...) content?]{ + +Specifies an author's email address.} + +@deftogether[( +@defproc[(acmJournal [journal pre-content?] ...) content?] +@defproc[(acmConference [name pre-content?] [date pre-content?] [venue pre-content?]) content?] +@defproc[(acmVolume [content pre-content?] ...) content?] +@defproc[(acmNumber [content pre-content?] ...) content?] +@defproc[(acmArticle [content pre-content?] ...) content?] +@defproc[(acmYear [content pre-content?] ...) content?] +@defproc[(acmMonth [content pre-content?] ...) content?] +@defproc[(acmArticleSeq [content pre-content?] ...) content?] +@defproc[(acmPrice [content pre-content?] ...) content?] +@defproc[(acmISBN [content pre-content?] ...) content?] +@defproc[(acmDOI [content pre-content?] ...) content?] +)]{ + +Declares information that is collected into the front-matter region of the paper.} + +@deftogether[( +@defproc[(acmBadgeL [#:url url string? #f] [graphics string?]) content?] +@defproc[(acmBadgeR [#:url url string? #f] [graphics string?]) content?] +)]{ + +Display a special badge, such as an artifact evaluation badge, on the +left or right of the first page. If @racket[url] is provided, the +screen version of the image links to the badge authority. + +} + +@defproc[(affiliation [content pre-content?] ...) content?]{ + +Declares information about the affiliation of an author.} + +@deftogether[( +@defproc[(position [content pre-content?] ...) content?] +@defproc[(institution [content pre-content?] ...) content?] +@defproc[(department [content pre-content?] ...) content?] +@defproc[(streetaddress [content pre-content?] ...) content?] +@defproc[(city [content pre-content?] ...) content?] +@defproc[(state [content pre-content?] ...) content?] +@defproc[(postcode [content pre-content?] ...) content?] +@defproc[(country [content pre-content?] ...) content?] +)]{ + +Declares information that is collected for each author. These commands should + only be used within an @racket[affiliation] command.} + +@codeblock|{ + #lang scribble/acmart + @title{Some Title} + @author{David Van Horn} + @email|{dvanhorn@cs.umd.edu}| + @affiliation{ + @department{Department of Computer Science and UMIACS} + @institution{University of Maryland} + @city{College Park} + @state{Maryland}} + + @abstract{This is an abstract.} + @maketitle{} +}| + + +@deftogether[( +@defproc[(terms [content pre-content?] ...) content?] +@defproc[(keywords [content pre-content?] ...) content?] +)]{ + +Typesets term and keyword information for the paper, which +is normally placed immediately after an @racket[abstract] form. +See also @url["http://www.acm.org/about/class/how-to-use"]. + +For @racket[terms], each general term should be in titlecase. Terms +are usually drawn from a fixed list, and they are usually optional. + +For @racket[keywords], capitalize only the first letter of the first +word, separate phrases by commas, and do not include ``and'' before +the last one. Keywords should be noun phrases, not adjectives.} + +@defproc[(startPage [content pre-content?] ...) content?]{ +Sets the start page for the paper.} + +@defproc[(ccsdesc [#:number number? #f] [content pre-content?] ...) content?]{ + +Declares CCS description with optional numeric code.} + +@defproc[(received [#:stage stage string? #f] [date string?]) content?]{ + +Sets the history of the publication. If @racket[stage] is omitted, it +defaults to @racket{Received} for the first occurrence and +@racket{revised} in subsequent uses. + +@codeblock[#:keep-lang-line? #f]|{ + #lang scribble/acmart + @received{February 2007} + @received[#:stage "revised"]{March 2009} + @received[#:stage "accepted"]{June 2009} +}|} + +@defproc[(citestyle [content pre-content?]) content?]{ + +Sets the citation style for the paper.} + +@defproc[(setcitestyle [content pre-content?] ...) content?]{ + +Sets customization options for the citation style for the paper.} + +@defproc[(teaserfigure [content pre-content?] ...) block?]{ + +Creates a teaser figure to appear before main text.} + +@deftogether[( +@defproc[(sidebar [content pre-content?] ...) block?] +@defproc[(marginfigure [content pre-content?] ...) block?] +@defproc[(margintable [content pre-content?] ...) block?] +)]{ + +In the @racket[sigchi-a] format, special sidebars, + tables and figures on the margin.} + +@deftogether[( +@defproc[(printonly [content pre-content?] ...) block?] +@defproc[(screenonly [content pre-content?] ...) block?] +@defproc[(anonsuppress [content pre-content?] ...) block?] +)]{ +Marks content to be included only for print or screen +editions, or excluded from anonymous editions.} + +@defproc[(acks [content pre-content?] ...) block?]{ + +Creates an unnumbered section ``Acknowledgments'' section, unless the +@racket[anonymous] mode is selected.} + +@deftogether[( +@defproc[(grantsponsor [sponsorID string?] [name string?] [url string?]) content?] +@defproc[(grantnum [#:url url string? #f] [sponsorID string?] [num string?]) content?] +)]{ + +All financial support @emph{must} be listed using the +@racket[grantsponsor] and @racket[grantnum] commands inside of +@racket[acks]. + +Here @racket[sponsorID] is the unique ID used to match grants to +sponsors, @racket[name] is the name of the sponsor. The +@racket[sponsorID] of a @racket[grantnum] must match some +@racket[sponsorID] of a @racket[grantsponsor] command. + +@codeblock[#:keep-lang-line? #f]|{ + #lang scribble/acmart + @acks{ + The author thanks Benjamin Greenman for helpful comments on this + code. Financial support provided by the @grantsponsor["NSF7000" + "National Scribble Foundation"]{http://racket-lang.org} under + grant No.: @grantnum["NSF7000"]{867-5309}.} +}|} diff --git a/scribble-doc/scribblings/scribble/base.scrbl b/scribble-doc/scribblings/scribble/base.scrbl index 72422f5b..276927ee 100644 --- a/scribble-doc/scribblings/scribble/base.scrbl +++ b/scribble-doc/scribblings/scribble/base.scrbl @@ -105,7 +105,7 @@ removed.} @def-section-like[section part-start?]{ Like @racket[title], but - generates a @racket[part-start] of depth @racket[0] to be by + generates a @racket[part-start] of depth @racket[0] to be picked up by @racket[decode] or @racket[decode-part].} @def-section-like[subsection part-start?]{ Like @racket[section], but diff --git a/scribble-doc/scribblings/scribble/generic.scrbl b/scribble-doc/scribblings/scribble/generic.scrbl index 33f6c243..0a987410 100644 --- a/scribble-doc/scribblings/scribble/generic.scrbl +++ b/scribble-doc/scribblings/scribble/generic.scrbl @@ -10,5 +10,6 @@ @include-section["book.scrbl"] @include-section["report.scrbl"] @include-section["sigplan.scrbl"] +@include-section["acmart.scrbl"] @include-section["jfp.scrbl"] @include-section["lncs.scrbl"] diff --git a/scribble-doc/scribblings/scribble/sigplan.scrbl b/scribble-doc/scribblings/scribble/sigplan.scrbl index 9ee87183..6497bbbc 100644 --- a/scribble-doc/scribblings/scribble/sigplan.scrbl +++ b/scribble-doc/scribblings/scribble/sigplan.scrbl @@ -5,7 +5,7 @@ @defmodulelang[scribble/sigplan]{The @racketmodname[scribble/sigplan] language is like @racketmodname[scribble/base], but configured with -Latex style defaults to use the @filepath{sigplanconf.cls} class +LaTeX style defaults to use the @filepath{sigplanconf.cls} class file that is included with Scribble.} @defidform[preprint]{ diff --git a/scribble-lib/scribble/acmart.rkt b/scribble-lib/scribble/acmart.rkt new file mode 100644 index 00000000..cb72e174 --- /dev/null +++ b/scribble-lib/scribble/acmart.rkt @@ -0,0 +1,211 @@ +#lang racket/base +(require setup/collects + racket/contract/base + scribble/core + scribble/base + scribble/decode + scribble/html-properties + scribble/latex-properties + (for-syntax racket/base)) + +(provide/contract + [title (->* (pre-content?) (#:short pre-content?) content?)] + [abstract + (->* () () #:rest (listof pre-content?) + block?)] + [acmJournal + (->* () () #:rest (listof pre-content?) + content?)] + [acmConference + (-> string? string? string? content?)] + [grantsponsor + (-> string? string? string? content?)] + [grantnum + (->* (string? string?) (#:url string?) content?)] + [acmBadgeR (->* (string?) (#:url string?) content?)] + [acmBadgeL (->* (string?) (#:url string?) content?)] + [received (->* (string?) (#:stage string?) content?)] + [citestyle (-> content? content?)] + [CCSXML + (->* () () #:rest (listof pre-content?) + any/c)]) + +(provide maketitle) + +(define-syntax-rule (defopts name ...) + (begin (define-syntax (name stx) + (raise-syntax-error #f + "option must appear on the same line as `#lang scribble/acmart'" + stx)) + ... + (provide name ...))) + +(define-syntax-rule (define-commands name ...) + (begin + (begin + (provide/contract [name (->* () () #:rest (listof pre-content?) + content?)]) + (define (name . str) + (make-element (make-style (symbol->string 'name) command-props) + (decode-content str)))) + ...)) + +(define-syntax-rule (define-environments name ...) + (begin + (begin + (provide/contract [name (->* () () #:rest (listof pre-content?) + block?)]) + (define (name . str) + (make-nested-flow (make-style (symbol->string 'name) acmart-extras) + (decode-flow str)))) + ...)) + +; comment environments ensure the \begin and \end are on their own lines +(define-syntax-rule (define-comment-environments name ...) + (begin + (begin + (provide/contract [name (->* () () #:rest (listof pre-content?) + block?)]) + (define (name . str) + (make-nested-flow (make-style (symbol->string 'name) acmart-extras) + (append (list (make-paragraph (style #f '()) '(""))) + (decode-flow str) + (list (make-paragraph (style #f '()) '(""))))))) + ...)) + +; format options +(defopts manuscript acmsmall acmlarge acmtog sigconf siggraph sigplan sigchi sigchi-a) +; boolean options +(defopts review screen natbib anonymous authorversion) + +(define acmart-extras + (let ([abs (lambda (s) + (path->collects-relative + (collection-file-path s "scribble" "acmart")))]) + (list + (make-css-addition (abs "acmart.css")) + (make-tex-addition (abs "acmart.tex"))))) + +;; ---------------------------------------- +;; Abstracts: + +(define abstract-style (make-style "abstract" acmart-extras)) + +(define command-props (cons 'command acmart-extras)) +(define multicommand-props (cons 'multicommand acmart-extras)) + +(define (abstract . strs) + (make-nested-flow + abstract-style + (decode-flow strs))) + +(define (maketitle) + (make-nested-flow (make-style "maketitle" command-props) '())) + +(define (extract-abstract p) + (unless (part? p) + (error 'include-abstract "doc binding is not a part: ~e" p)) + (unless (null? (part-parts p)) + (error 'include-abstract "abstract part has sub-parts: ~e" (part-parts p))) + (when (part-title-content p) + (error 'include-abstract "abstract part has title content: ~e" (part-title-content p))) + (part-blocks p)) + +(define-syntax-rule (include-abstract mp) + (begin + (require (only-in mp [doc abstract-doc])) + (make-nested-flow abstract-style (extract-abstract abstract-doc)))) + + +(define (acmJournal . str) + (make-element (make-style "acmJournal" command-props) + (decode-content str))) + +(define (acmConference name date venue) + (make-multiarg-element (make-style "acmConference" multicommand-props) + (list (decode-string name) + (decode-string date) + (decode-string venue)))) + +(define (grantsponsor id name url) + (make-multiarg-element (make-style "grantsponsor" multicommand-props) + (list (decode-string id) + (decode-string name) + (decode-string url)))) + +(define (grantnum #:url [url #f] id num) + (if url + (make-multiarg-element (make-style "SgrantnumURL" multicommand-props) + (list (decode-string url) + (decode-string id) + (decode-string num))) + (make-multiarg-element (make-style "grantnum" multicommand-props) + (list (decode-string id) + (decode-string num))))) + +(define (acmBadgeR #:url [url #f] str) + (if url + (make-multiarg-element (make-style "SacmBadgeRURL" multicommand-props) + (list (decode-string url) + (decode-string str))) + (make-element (make-style "acmBadgeR" command-props) + (decode-string str)))) + +(define (acmBadgeL #:url [url #f] str) + (if url + (make-multiarg-element (make-style "SacmBadgeLURL" multicommand-props) + (list (decode-string url) + (decode-string str))) + (make-element (make-style "acmBadgeL" command-props) + (decode-string str)))) + +(define (received #:stage [s #f] str) + (if s + (make-multiarg-element (make-style "SreceivedStage" multicommand-props) + (list (decode-string s) + (decode-string str))) + (make-element (make-style "received" command-props) + (decode-string str)))) + +(define (citestyle str) + (make-element (make-style "citestyle" command-props) + (decode-string str))) + +(define (ccsdesc #:number [n #f] str) + (if n + (make-multiarg-element (make-style "SccsdescNumber" multicommand-props) + (list (number->string n) + (decode-string str))) + (make-element (make-style "ccsdesc" command-props) + (decode-string str)))) + +(define (title #:short [st #f] str) + (if st + (make-multiarg-element (make-style "StitleShort" multicommand-props) + (list (decode-string st) + (decode-string str))) + (make-element (make-style "title" command-props) + (decode-string str)))) + + +(define-commands subtitle orcid author affiliation email + position institution department streetaddress city state postcode country + thanks titlenote subtitlenote authornote acmVolume acmNumber acmArticle acmYear acmMonth + acmArticleSeq acmPrice acmISBN acmDOI + startPage terms keywords + setcopyright copyrightyear + settopmatter ; could be "Rackety" + shortauthors + setcitstyle) + +(define (CCSXML . strs) + (make-nested-flow (make-style "CCSXML" '()) + (list (make-paragraph (make-style #f '()) + (make-element (make-style #f '(exact-chars)) + (apply string-append strs)))))) + +(define-environments teaserfigure sidebar marginfigure margintable) +(define-comment-environments printonly screenonly anonsuppress acks) + +; FIXME: theorem styles + diff --git a/scribble-lib/scribble/acmart/acmart-load.tex b/scribble-lib/scribble/acmart/acmart-load.tex new file mode 100644 index 00000000..5a6dc715 --- /dev/null +++ b/scribble-lib/scribble/acmart/acmart-load.tex @@ -0,0 +1,2 @@ +% Avoid package option conflict +\renewcommand\packageColor\relax diff --git a/scribble-lib/scribble/acmart/acmart.cls b/scribble-lib/scribble/acmart/acmart.cls new file mode 100644 index 00000000..b97409fa --- /dev/null +++ b/scribble-lib/scribble/acmart/acmart.cls @@ -0,0 +1,2187 @@ +%% +%% This is file `acmart.cls', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% acmart.dtx (with options: `class') +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from acmart.cls. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file acmart.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} + +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{acmart} +[2016/12/03 v1.25 Typesetting articles for Association of +Computing Machinery] +\def\@classname{acmart} +\RequirePackage{xkeyval} +\define@choicekey*+{acmart.cls}{format}[\ACM@format\ACM@format@nr]{% + manuscript, acmsmall, acmlarge, acmtog, sigconf, siggraph, + sigplan, sigchi, sigchi-a}[manuscript]{}{% + \ClassError{\@classname}{The option format must be manuscript, + acmsmall, acmlarge, acmtog, sigconf, siggraph, + sigplan, sigchi or sigchi-a}} +\def\@DeclareACMFormat#1{\DeclareOptionX{#1}{\setkeys{acmart.cls}{format=#1}}} +\@DeclareACMFormat{manuscript} +\@DeclareACMFormat{acmsmall} +\@DeclareACMFormat{acmlarge} +\@DeclareACMFormat{acmtog} +\@DeclareACMFormat{sigconf} +\@DeclareACMFormat{siggraph} +\@DeclareACMFormat{sigplan} +\@DeclareACMFormat{sigchi} +\@DeclareACMFormat{sigchi-a} +\ExecuteOptionsX{format} +\define@boolkey+{acmart.cls}[@ACM@]{screen}[true]{% + \if@ACM@screen + \PackageInfo{\@classname}{Using screen mode}% + \else + \PackageInfo{\@classname}{Not using screen mode}% + \fi}{\PackageError{\@classname}{Option screen can be either true or + false}} +\ExecuteOptionsX{screen=false} +\define@boolkey+{acmart.cls}[@ACM@]{review}[true]{% + \if@ACM@review + \PackageInfo{\@classname}{Using review mode}% + \else + \PackageInfo{\@classname}{Not using review mode}% + \fi}{\PackageError{\@classname}{Option review can be either true or + false}} +\ExecuteOptionsX{review=false} +\define@boolkey+{acmart.cls}[@ACM@]{authorversion}[true]{% + \if@ACM@authorversion + \PackageInfo{\@classname}{Using authorversion mode}% + \else + \PackageInfo{\@classname}{Not using authorversion mode}% + \fi}{\PackageError{\@classname}{Option authorversion can be either true or + false}} +\ExecuteOptionsX{authorversion=false} +\newif\if@ACM@natbib@override +\@ACM@natbib@overridefalse +\define@boolkey+{acmart.cls}[@ACM@]{natbib}[true]{% + \@ACM@natbib@overridetrue + \if@ACM@natbib + \PackageInfo{\@classname}{Explicitly selecting natbib mode}% + \else + \PackageInfo{\@classname}{Explicitly deselecting natbib mode}% + \fi}{\PackageError{\@classname}{Option natbib can be either true or + false}} +\define@boolkey+{acmart.cls}[@ACM@]{anonymous}[true]{% + \if@ACM@anonymous + \PackageInfo{\@classname}{Using anonymous mode}% + \else + \PackageInfo{\@classname}{Not using anonymous mode}% + \fi}{\PackageError{\@classname}{Option anonymous can be either true or + false}} +\ExecuteOptionsX{anonymous=false} +\def\ACM@fontsize{} +\DeclareOptionX{9pt}{\edef\ACM@fontsize{\CurrentOption}} +\DeclareOptionX{10pt}{\edef\ACM@fontsize{\CurrentOption}} +\DeclareOptionX{11pt}{\edef\ACM@fontsize{\CurrentOption}} +\DeclareOptionX{12pt}{\edef\ACM@fontsize{\CurrentOption}} +\DeclareOptionX{draft}{\PassOptionsToClass{\CurrentOption}{amsart}} +\DeclareOptionX{*}{\PassOptionsToClass{\CurrentOption}{amsart}} +\ProcessOptionsX +\ClassInfo{\@classname}{Using format \ACM@format, number \ACM@format@nr} +\newif\if@ACM@manuscript +\newif\if@ACM@journal +\newif\if@ACM@sigchiamode +\ifnum\ACM@format@nr=0\relax + \@ACM@manuscripttrue +\else + \@ACM@manuscriptfalse +\fi +\@ACM@sigchiamodefalse +\ifcase\ACM@format@nr +\relax % manuscript + \@ACM@journaltrue +\or % acmsmall + \@ACM@journaltrue +\or % acmlarge + \@ACM@journaltrue +\or % acmtog + \@ACM@journaltrue +\or % sigconf + \@ACM@journalfalse +\or % siggraph + \@ACM@journalfalse + \or % sigplan + \@ACM@journalfalse + \or % sigchi + \@ACM@journalfalse +\or % sigchi-a + \@ACM@journalfalse + \@ACM@sigchiamodetrue +\fi +\if@ACM@natbib@override\else + \@ACM@natbibtrue +\fi +\ifx\ACM@fontsize\@empty + \ifcase\ACM@format@nr + \relax % manuscript + \def\ACM@fontsize{9pt}% + \or % acmsmall + \def\ACM@fontsize{10pt}% + \or % acmlarge + \def\ACM@fontsize{10pt}% + \or % acmtog + \def\ACM@fontsize{9pt}% + \or % sigconf + \def\ACM@fontsize{9pt}% + \or % siggraph + \def\ACM@fontsize{9pt}% + \or % sigplan + \def\ACM@fontsize{9pt}% + \or % sigchi + \def\ACM@fontsize{10pt}% + \or % sigchi-a + \def\ACM@fontsize{10pt}% + \fi +\fi +\ClassInfo{\@classname}{Using fontsize \ACM@fontsize} +\LoadClass[\ACM@fontsize, reqno]{amsart} +\RequirePackage{microtype} +\RequirePackage{totpages} +\RequirePackage{environ} +\if@ACM@manuscript +\RequirePackage{setspace} +\onehalfspacing +\fi +\if@ACM@natbib + \RequirePackage{natbib} + \renewcommand{\bibsection}{% + \section*{\refname}% + \phantomsection\addcontentsline{toc}{section}{\refname}% + } + \renewcommand{\bibfont}{\bibliofont} + \renewcommand\setcitestyle[1]{ + \@for\@tempa:=#1\do + {\def\@tempb{round}\ifx\@tempa\@tempb + \renewcommand\NAT@open{(}\renewcommand\NAT@close{)}\fi + \def\@tempb{square}\ifx\@tempa\@tempb + \renewcommand\NAT@open{[}\renewcommand\NAT@close{]}\fi + \def\@tempb{angle}\ifx\@tempa\@tempb + \renewcommand\NAT@open{$<$}\renewcommand\NAT@close{$>$}\fi + \def\@tempb{curly}\ifx\@tempa\@tempb + \renewcommand\NAT@open{\{}\renewcommand\NAT@close{\}}\fi + \def\@tempb{semicolon}\ifx\@tempa\@tempb + \renewcommand\NAT@sep{;}\fi + \def\@tempb{colon}\ifx\@tempa\@tempb + \renewcommand\NAT@sep{;}\fi + \def\@tempb{comma}\ifx\@tempa\@tempb + \renewcommand\NAT@sep{,}\fi + \def\@tempb{authoryear}\ifx\@tempa\@tempb + \NAT@numbersfalse\fi + \def\@tempb{numbers}\ifx\@tempa\@tempb + \NAT@numberstrue\NAT@superfalse\fi + \def\@tempb{super}\ifx\@tempa\@tempb + \NAT@numberstrue\NAT@supertrue\fi + \def\@tempb{nobibstyle}\ifx\@tempa\@tempb + \let\bibstyle=\@gobble\fi + \def\@tempb{bibstyle}\ifx\@tempa\@tempb + \let\bibstyle=\@citestyle\fi + \def\@tempb{sort}\ifx\@tempa\@tempb + \def\NAT@sort{\@ne}\fi + \def\@tempb{nosort}\ifx\@tempa\@tempb + \def\NAT@sort{\z@}\fi + \def\@tempb{compress}\ifx\@tempa\@tempb + \def\NAT@cmprs{\@ne}\fi + \def\@tempb{nocompress}\ifx\@tempa\@tempb + \def\NAT@cmprs{\@z}\fi + \def\@tempb{sort&compress}\ifx\@tempa\@tempb + \def\NAT@sort{\@ne}\def\NAT@cmprs{\@ne}\fi + \def\@tempb{mcite}\ifx\@tempa\@tempb + \let\NAT@merge\@ne\fi + \def\@tempb{merge}\ifx\@tempa\@tempb + \@ifnum{\NAT@merge<\tw@}{\let\NAT@merge\tw@}{}\fi + \def\@tempb{elide}\ifx\@tempa\@tempb + \@ifnum{\NAT@merge<\thr@@}{\let\NAT@merge\thr@@}{}\fi + \def\@tempb{longnamesfirst}\ifx\@tempa\@tempb + \NAT@longnamestrue\fi + \def\@tempb{nonamebreak}\ifx\@tempa\@tempb + \def\NAT@nmfmt#1{\mbox{\NAT@up#1}}\fi + \expandafter\NAT@find@eq\@tempa=\relax\@nil + \if\@tempc\relax\else + \expandafter\NAT@rem@eq\@tempc + \def\@tempb{open}\ifx\@tempa\@tempb + \xdef\NAT@open{\@tempc}\fi + \def\@tempb{close}\ifx\@tempa\@tempb + \xdef\NAT@close{\@tempc}\fi + \def\@tempb{aysep}\ifx\@tempa\@tempb + \xdef\NAT@aysep{\@tempc}\fi + \def\@tempb{yysep}\ifx\@tempa\@tempb + \xdef\NAT@yrsep{\@tempc}\fi + \def\@tempb{notesep}\ifx\@tempa\@tempb + \xdef\NAT@cmt{\@tempc}\fi + \def\@tempb{citesep}\ifx\@tempa\@tempb + \xdef\NAT@sep{\@tempc}\fi + \fi + }% + \NAT@@setcites + } + \renewcommand\citestyle[1]{% + \ifcsname bibstyle@#1\endcsname% + \csname bibstyle@#1\endcsname\let\bibstyle\@gobble% + \else% + \@latex@error{Undefined `#1' citestyle}% + \fi + }% +\fi +\newcommand{\bibstyle@acmauthoryear}{% + \setcitestyle{% + authoryear,% + open={(},close={)},citesep={;},% + aysep={},yysep={,},% + notesep={, }}} +\newcommand{\bibstyle@acmnumeric}{% + \setcitestyle{% + numbers,sort&compress,% + open={[},close={]},citesep={,},% + notesep={, }}} +\citestyle{acmnumeric} +\def\@startsection#1#2#3#4#5#6{% + \if@noskipsec \leavevmode \fi + \par + \@tempskipa #4\relax + \@afterindenttrue + \ifdim \@tempskipa <\z@ + \@tempskipa -\@tempskipa \@afterindentfalse + \fi + \if@nobreak + \everypar{}% + \else + \addpenalty\@secpenalty\addvspace\@tempskipa + \fi + \@ifstar + {\@ssect{#3}{#4}{#5}{#6}}% + {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}} +\def\@sect#1#2#3#4#5#6[#7]#8{% + \ifnum #2>\c@secnumdepth + \let\@svsec\@empty + \else + \refstepcounter{#1}% + \protected@edef\@svsec{\@seccntformat{#1}\relax}% + \fi + \@tempskipa #5\relax + \ifdim \@tempskipa>\z@ + \begingroup + #6{% + \@hangfrom{\hskip #3\relax\@svsec}% + \interlinepenalty \@M #8\@@par}% + \endgroup + \csname #1mark\endcsname{#7}% + \addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth \else + \protect\numberline{\csname the#1\endcsname}% + \fi + #7}% + \else + \def\@svsechd{% + #6{\hskip #3\relax + \@svsec #8}% + \csname #1mark\endcsname{#7}% + \addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth \else + \protect\numberline{\csname the#1\endcsname}% + \fi + #7}}% + \fi + \@xsect{#5}} +\def\@xsect#1{% + \@tempskipa #1\relax + \ifdim \@tempskipa>\z@ + \par \nobreak + \vskip \@tempskipa + \@afterheading + \else + \@nobreakfalse + \global\@noskipsectrue + \everypar{% + \if@noskipsec + \global\@noskipsecfalse + {\setbox\z@\lastbox}% + \clubpenalty\@M + \begingroup \@svsechd \endgroup + \unskip + \@tempskipa #1\relax + \hskip -\@tempskipa + \else + \clubpenalty \@clubpenalty + \everypar{}% + \fi}% + \fi + \ignorespaces} +\def\@seccntformat#1{\csname the#1\endcsname\quad} +\def\@ssect#1#2#3#4#5{% + \@tempskipa #3\relax + \ifdim \@tempskipa>\z@ + \begingroup + #4{% + \@hangfrom{\hskip #1}% + \interlinepenalty \@M #5\@@par}% + \endgroup + \else + \def\@svsechd{#4{\hskip #1\relax #5}}% + \fi + \@xsect{#3}} +\let\@footnotemark@nolink\@footnotemark +\let\@footnotetext@nolink\@footnotetext +\RequirePackage[bookmarksnumbered]{hyperref} +\urlstyle{rm} +\ifcase\ACM@format@nr +\relax % manuscript +\or % acmsmall +\or % acmlarge +\or % acmtog +\or % sigconf +\or % siggraph +\or % sigplan + \urlstyle{sf} +\or % sigchi +\or % sigchi-a + \urlstyle{sf} +\fi +\if@ACM@screen + \hypersetup{colorlinks, + linkcolor=ACMRed, + citecolor=ACMPurple, + urlcolor=ACMDarkBlue, + filecolor=ACMDarkBlue} +\else + \hypersetup{hidelinks} +\fi +\if@ACM@natbib + \let\citeN\cite + \let\cite\citep + \let\citeANP\citeauthor + \let\citeNN\citeyearpar + \let\citeyearNP\citeyear + \let\citeyear\citeyearpar + \let\citeNP\citealt + \def\shortcite#1{\citeyear{#1}} + \DeclareRobustCommand\citeA + {\begingroup\NAT@swafalse + \let\NAT@ctype\@ne\NAT@partrue\NAT@fullfalse\NAT@open\NAT@citetp}% + \providecommand\newblock{}% +\else + \providecommand\citename[1]{#1} +\fi +\def\bibliographystyle#1{% + \ifx\@begindocumenthook\@undefined\else + \expandafter\AtBeginDocument + \fi + {\if@filesw + \immediate\write\@auxout{\string\bibstyle{#1}}% + \fi}} +\RequirePackage{graphicx, xcolor} +\definecolor[named]{ACMBlue}{cmyk}{1,0.1,0,0.1} +\definecolor[named]{ACMYellow}{cmyk}{0,0.16,1,0} +\definecolor[named]{ACMOrange}{cmyk}{0,0.42,1,0.01} +\definecolor[named]{ACMRed}{cmyk}{0,0.90,0.86,0} +\definecolor[named]{ACMLightBlue}{cmyk}{0.49,0.01,0,0} +\definecolor[named]{ACMGreen}{cmyk}{0.20,0,1,0.19} +\definecolor[named]{ACMPurple}{cmyk}{0.55,1,0,0.15} +\definecolor[named]{ACMDarkBlue}{cmyk}{1,0.58,0,0.21} +\RequirePackage{geometry} +\ifcase\ACM@format@nr +\relax % manuscript + \geometry{letterpaper,head=1pc}% +\or % acmsmall + \geometry{twoside=true, + includeheadfoot, head=1pc, foot=2pc, + paperwidth=6.75in, paperheight=10in, + top=58pt, bottom=44pt, inner=46pt, outer=46pt + }% +\or % acmlarge + \geometry{twoside=true, head=1pc, foot=2pc, + paperwidth=8.5in, paperheight=11in, + includeheadfoot, + top=78pt, bottom=114pt, inner=81pt, outer=81pt + }% +\or % acmtog + \geometry{twoside=true, head=1pc, foot=2pc, + paperwidth=8.5in, paperheight=11in, + includeheadfoot, columnsep=24pt, + top=52pt, bottom=75pt, inner=52pt, outer=52pt + }% +\or % sigconf + \geometry{twoside=true, head=1pc, + paperwidth=8.5in, paperheight=11in, + includeheadfoot, columnsep=2pc, + top=57pt, bottom=73pt, inner=54pt, outer=54pt + }% +\or % siggraph + \geometry{twoside=true, head=1pc, + paperwidth=8.5in, paperheight=11in, + includeheadfoot, columnsep=2pc, + top=57pt, bottom=73pt, inner=54pt, outer=54pt + }% +\or % sigplan + \geometry{twoside=true, head=1pc, + paperwidth=8.5in, paperheight=11in, + includeheadfoot=false, columnsep=2pc, + top=1in, bottom=1in, inner=0.75in, outer=0.75in + }% +\or % sigchi + \geometry{twoside=true, head=1pc, + paperwidth=8.5in, paperheight=11in, + includeheadfoot, columnsep=2pc, + top=66pt, bottom=73pt, inner=54pt, outer=54pt + }% +\or % sigchi-a + \geometry{twoside=false, head=1pc, + paperwidth=11in, paperheight=8.5in, + includeheadfoot, marginparsep=72pt, + marginparwidth=170pt, columnsep=20pt, + top=72pt, bottom=72pt, left=314pt, right=72pt + }% + \@mparswitchfalse + \reversemarginpar +\fi +\setlength\parindent{10\p@} +\setlength\parskip{\z@} +\ifcase\ACM@format@nr +\relax % manuscript +\or % acmsmall +\or % acmlarge +\or % acmtog + \setlength\parindent{9\p@}% +\or % sigconf +\or % siggraph +\or % sigplan +\or % sigchi +\or % sigchi-a +\fi +\def\copyrightpermissionfootnoterule{\kern-3\p@ + \hrule \@width \columnwidth \kern 2.6\p@} +\RequirePackage{manyfoot} +\SelectFootnoteRule[2]{copyrightpermission} +\DeclareNewFootnote{copyrightpermission} +\def\footnoterule{\kern-3\p@ + \hrule \@width 4pc \kern 2.6\p@} +\def\endminipage{% + \par + \unskip + \ifvoid\@mpfootins\else + \vskip\skip\@mpfootins + \normalcolor + \unvbox\@mpfootins + \fi + \@minipagefalse %% added 24 May 89 + \color@endgroup + \egroup + \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}} +\def\@makefntext{\noindent\@makefnmark} +\if@ACM@sigchiamode +\long\def\@footnotetext#1{\marginpar{% + \reset@font\small + \interlinepenalty\interfootnotelinepenalty + \protected@edef\@currentlabel{% + \csname p@footnote\endcsname\@thefnmark + }% + \color@begingroup + \@makefntext{% + \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}% + \color@endgroup}}% +\fi +\long\def\@mpfootnotetext#1{% + \global\setbox\@mpfootins\vbox{% + \unvbox\@mpfootins + \reset@font\footnotesize + \hsize\columnwidth + \@parboxrestore + \protected@edef\@currentlabel + {\csname p@mpfootnote\endcsname\@thefnmark}% + \color@begingroup\centering + \@makefntext{% + \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}% + \color@endgroup}} +\def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}} +\newif\if@ACM@newfonts +\@ACM@newfontstrue +\IfFileExists{libertine.sty}{}{\ClassWarning{\@classname}{You do not + have libertine package installed. Please upgrade your + TeX}\@ACM@newfontsfalse} +\IfFileExists{zi4.sty}{}{\ClassWarning{\@classname}{You do not + have zi4 package installed. Please upgrade your TeX}\@ACM@newfontsfalse} +\IfFileExists{newtxmath.sty}{}{\ClassWarning{\@classname}{You do not + have newtxmath package installed. Please upgrade your + TeX}\@ACM@newfontsfalse} +\if@ACM@newfonts +\RequirePackage[tt=false]{libertine} +\RequirePackage[varqu]{zi4} +\RequirePackage[libertine]{newtxmath} +\else +\RequirePackage{textcomp} +\fi +\if@ACM@sigchiamode + \renewcommand{\familydefault}{\sfdefault} +\fi +\RequirePackage{caption, float} +\captionsetup[table]{position=top} +\if@ACM@journal + \captionsetup{labelfont={sf, small}, + textfont={sf, small}, margin=\z@} + \captionsetup[figure]{name={Fig.}} +\else + \captionsetup{labelfont={bf}, + textfont={bf}, labelsep=colon, margin=\z@} + \ifcase\ACM@format@nr + \relax % manuscript + \or % acmsmall + \or % acmlarge + \or % acmtog + \or % sigconf + \or % siggraph + \captionsetup{textfont={it}} + \or % sigplan + \captionsetup{labelfont={bf}, + textfont={normalfont}, labelsep=period, margin=\z@} + \or % sigchi + \captionsetup[figure]{labelfont={bf, small}, + textfont={bf, small}} + \or % sigchi-a + \captionsetup[figure]{labelfont={bf, small}, + textfont={bf, small}} + \fi +\fi +\newfloat{sidebar}{}{sbar} +\floatname{sidebar}{Sidebar} +\renewenvironment{sidebar}{\Collect@Body\@sidebar}{} +\long\def\@sidebar#1{\bgroup\captionsetup{type=sidebar}% + \marginpar{\small#1}\egroup} +\newenvironment{marginfigure}{\Collect@Body\@marginfigure}{} +\long\def\@marginfigure#1{\bgroup\captionsetup{type=figure}% + \marginpar{\centering\small#1}\egroup} +\newenvironment{margintable}{\Collect@Body\@margintable}{} +\long\def\@margintable#1{\bgroup\captionsetup{type=table}% + \marginpar{\centering\small#1}\egroup} +\newdimen\fulltextwidth +\fulltextwidth=\dimexpr(\textwidth+\marginparwidth+\marginparsep) +\if@ACM@sigchiamode +\def\@dblfloat{\bgroup\columnwidth=\fulltextwidth + \let\@endfloatbox\@endwidefloatbox + \def\@fpsadddefault{\def\@fps{tp}}% + \@float} +\fi +\if@ACM@sigchiamode +\def\end@dblfloat{% + \end@float\egroup} +\fi +\def\@endwidefloatbox{% + \par\vskip\z@skip + \@minipagefalse + \outer@nobreak + \egroup + \color@endbox + \global\setbox\@currbox=\vbox{\moveleft + \dimexpr(\fulltextwidth-\textwidth)\box\@currbox}% + \wd\@currbox=\textwidth +} +\ifcase\ACM@format@nr +\relax % manuscript +\or % acmsmall +\or % acmlarge +\or % acmtog +\or % sigconf +\or % siggraph +\or % sigplan +\def\labelenumi{\theenumi.} +\def\labelenumii{\theenumii.} +\def\labelenumiii{\theenumiii.} +\def\labelenumiv{\theenumiv.} +\or % sigchi +\or % sigchi-a +\fi +\renewcommand{\descriptionlabel}[1]{\hspace\labelsep \upshape\bfseries #1} +\renewenvironment{description}{\list{}{% + \itemindent-12\p@ + \labelwidth\z@ \let\makelabel\descriptionlabel}% +}{ + \endlist +} +\let\enddescription=\endlist % for efficiency +\define@choicekey*+{ACM}{acmJournal}[\@journalCode\@journalCode@nr]{% + CIE,% + CSUR,% + IMWUT,% + JACM,% + JDIQ,% + JEA,% + JERIC,% + JETC,% + JOCCH,% + PACMPL,% + TAAS,% + TACCESS,% + TACO,% + TALG,% + TALLIP,% + TAP,% + TCPS,% + TEAC,% + TECS,% + TIIS,% + TISSEC,% + TIST,% + TKDD,% + TMIS,% + TOCE,% + TOCHI,% + TOCL,% + TOCS,% + TOCT,% + TODAES,% + TODS,% + TOG,% + TOIS,% + TOIT,% + TOMACS,% + TOMM,% + TOMPECS,% + TOMS,% + TOPC,% + TOPS,% + TOPLAS,% + TOS,% + TOSEM,% + TOSN,% + TRETS,% + TSAS,% + TSC,% + TSLP,% + TWEB% +}{% +\ifcase\@journalCode@nr +\relax % CIE + \def\@journalName{ACM Computers in Entertainment}% + \def\@journalNameShort{ACM Comput. Entertain.}% + \def\@permissionCodeOne{1544-3574}% +\or % CSUR + \def\@journalName{ACM Computing Surveys}% + \def\@journalNameShort{ACM Comput. Surv.}% + \def\@permissionCodeOne{0360-0300}% +\or % IMWUT + \def\@journalName{PACM on Interactive, Mobile, Wearable and + Ubiquitous Technologies}% + \def\@journalNameShort{PACM Interact. Mob. Wearable Ubiquitous Technol.}% + \def\@permissionCodeOne{2474-9567}% +\or % JACM + \def\@journalName{Journal of the ACM}% + \def\@journalNameShort{J. ACM}% + \def\@permissionCodeOne{0004-5411}% +\or % JDIQ + \def\@journalName{ACM Journal of Data and Information Quality}% + \def\@journalNameShort{ACM J. Data Inform. Quality}% + \def\@permissionCodeOne{1936-1955}% +\or % JEA + \def\@journalName{ACM Journal of Experimental Algorithmics}% + \def\@journalNameShort{ACM J. Exp. Algor.}% + \def\@permissionCodeOne{1084-6654}% +\or % JERIC + \def\@journalName{ACM Journal of Educational Resources in Computing}% + \def\@journalNameShort{ACM J. Edu. Resources in Comput.}% + \def\@permissionCodeOne{1073-0516}% +\or % JETC + \def\@journalName{ACM Journal on Emerging Technologies in Computing Systems}% + \def\@journalNameShort{ACM J. Emerg. Technol. Comput. Syst.}% + \def\@permissionCodeOne{1550-4832}% +\or % JOCCH + \def\@journalName{ACM Journal on Computing and Cultural Heritage}% + \def\@journalName{ACM J. Comput. Cult. Herit.}% +\or % PACMPL + \def\@journalName{PACM on Programming Languages}% + \def\@journalName{PACM Progr. Lang.}% + \def\@permissionCodeOne{2475-1421}% +\or % TAAS + \def\@journalName{ACM Transactions on Autonomous and Adaptive Systems}% + \def\@journalNameShort{ACM Trans. Autonom. Adapt. Syst.}% + \def\@permissionCodeOne{1556-4665}% +\or % TACCESS + \def\@journalName{ACM Transactions on Accessible Computing}% + \def\@journalNameShort{ACM Trans. Access. Comput.}% + \def\@permissionCodeOne{1936-7228}% +\or % TACO + \def\@journalName{ACM Transactions on Architecture and Code Optimization}% +\or % TALG + \def\@journalName{ACM Transactions on Algorithms}% + \def\@journalNameShort{ACM Trans. Algor.}% + \def\@permissionCodeOne{1549-6325}% +\or % TALLIP + \def\@journalName{ACM Transactions on Asian and Low-Resource Language Information Processing}% + \def\@journalNameShort{ACM Trans. Asian Low-Resour. Lang. Inf. Process.}% + \def\@permissionCodeOne{2375-4699}% +\or % TAP + \def\@journalName{ACM Transactions on Applied Perception}% +\or % TCPS + \def\@journalName{ACM Transactions on Cyber-Physical Systems}% +\or % TEAC + \def\@journalName{ACM Transactions on Economics and Computation}% +\or % TECS + \def\@journalName{ACM Transactions on Embedded Computing Systems}% + \def\@journalNameShort{ACM Trans. Embedd. Comput. Syst.}% + \def\@permissionCodeOne{1539-9087}% +\or % TIIS + \def\@journalName{ACM Transactions on Interactive Intelligent Systems}% + \def\@journalNameShort{ACM Trans. Interact. Intell. Syst.}% + \def\@permissionCodeOne{2160-6455}% +\or % TISSEC + \def\@journalName{ACM Transactions on Information and System Security}% + \def\@journalNameShort{ACM Trans. Info. Syst. Sec.}% + \def\@permissionCodeOne{1094-9224}% +\or % TIST + \def\@journalName{ACM Transactions on Intelligent Systems and Technology}% + \def\@journalNameShort{ACM Trans. Intell. Syst. Technol.}% + \def\@permissionCodeOne{2157-6904}% +\or % TKDD + \def\@journalName{ACM Transactions on Knowledge Discovery from Data}% + \def\@journalNameShort{ACM Trans. Knowl. Discov. Data.}% + \def\@permissionCodeOne{1556-4681}% +\or % TMIS + \def\@journalName{ACM Transactions on Management Information Systems}% + \def\@journalNameShort{ACM Trans. Manag. Inform. Syst.}% + \def\@permissionCodeOne{2158-656X}% +\or % TOCE + \def\@journalName{ACM Transactions on Computing Education}% + \def\@journalNameShort{ACM Trans. Comput. Educ.}% + \def\@permissionCodeOne{1946-6226}% +\or % TOCHI + \def\@journalName{ACM Transactions on Computer-Human Interaction}% + \def\@journalNameShort{ACM Trans. Comput.-Hum. Interact.}% + \def\@permissionCodeOne{1073-0516}% +\or % TOCL + \def\@journalName{ACM Transactions on Computational Logic}% + \def\@journalNameShort{ACM Trans. Comput. Logic}% + \def\@permissionCodeOne{1529-3785}% +\or % TOCS + \def\@journalName{ACM Transactions on Computer Systems}% + \def\@journalNameShort{ACM Trans. Comput. Syst.}% + \def\@permissionCodeOne{0734-2071}% +\or % TOCT + \def\@journalName{ACM Transactions on Computation Theory}% + \def\@journalNameShort{ACM Trans. Comput. Theory}% + \def\@permissionCodeOne{1942-3454}% +\or % TODAES + \def\@journalName{ACM Transactions on Design Automation of Electronic Systems}% + \def\@journalNameShort{ACM Trans. Des. Autom. Electron. Syst.}% + \def\@permissionCodeOne{1084-4309}% +\or % TODS + \def\@journalName{ACM Transactions on Database Systems}% + \def\@journalNameShort{ACM Trans. Datab. Syst.}% + \def\@permissionCodeOne{0362-5915}% +\or % TOG + \def\@journalName{ACM Transactions on Graphics}% + \def\@journalNameShort{ACM Trans. Graph.}% + \def\@permissionCodeOne{0730-0301} +\or % TOIS + \def\@journalName{ACM Transactions on Information Systems}% + \def\@journalName{ACM Transactions on Information Systems}% + \def\@permissionCodeOne{1046-8188}% +\or % TOIT + \def\@journalName{ACM Transactions on Internet Technology}% + \def\@journalNameShort{ACM Trans. Internet Technol.}% + \def\@permissionCodeOne{1533-5399}% +\or % TOMACS + \def\@journalName{ACM Transactions on Modeling and Computer Simulation}% + \def\@journalName{ACM Transactions on Modeling and Computer Simulation}% + \def\@journalNameShort{ACM Trans. Model. Comput. Simul.}% +\or % TOMM + \def\@journalName{ACM Transactions on Multimedia Computing, Communications and Applications}% + \def\@journalNameShort{ACM Trans. Multimedia Comput. Commun. Appl.}% + \def\@permissionCodeOne{1551-6857}% + \def\@permissionCodeTwo{0100}% +\or % TOMPECS + \def\@journalName{ACM Transactions on Modeling and Performance Evaluation of Computing Systems}% + \def\@journalNameShort{ACM Trans. Model. Perform. Eval. Comput. Syst.}% + \def\@permissionCodeOne{2376-3639}% +\or % TOMS + \def\@journalName{ACM Transactions on Mathematical Software}% + \def\@journalNameShort{ACM Trans. Math. Softw.}% + \def\@permissionCodeOne{0098-3500}% +\or % TOPC + \def\@journalName{ACM Transactions on Parallel Computing}% + \def\@journalNameShort{ACM Trans. Parallel Comput.}% + \def\@permissionCodeOne{1539-9087}% +\or % TOPS + \def\@journalName{ACM Transactions on Privacy and Security}% + \def\@journalNameShort{ACM Trans. Priv. Sec.}% + \def\@permissionCodeOne{2471-2566}% +\or % TOPLAS + \def\@journalName{ACM Transactions on Programming Languages and Systems}% + \def\@journalNameShort{ACM Trans. Program. Lang. Syst.}% + \def\@permissionCodeOne{0164-0925}% +\or % TOS + \def\@journalName{ACM Transactions on Storage}% + \def\@journalNameShort{ACM Trans. Storage}% + \def\@permissionCodeOne{1553-3077}% +\or % TOSEM + \def\@journalName{ACM Transactions on Software Engineering and Methodology}% + \def\@journalNameShort{ACM Trans. Softw. Eng. Methodol.}% + \def\@permissionCodeOne{1049-331X}% +\or % TOSN + \def\@journalName{ACM Transactions on Sensor Networks}% + \def\@journalNameShort{ACM Trans. Sensor Netw.}% + \def\@permissionCodeOne{1550-4859}% +\or % TRETS + \def\@journalName{ACM Transactions on Reconfigurable Technology and Systems}% + \def\@journalNameShort{ACM Trans. Reconfig. Technol. Syst.}% + \def\@permissionCodeOne{1936-7406}% +\or % TSAS + \def\@journalName{ACM Transactions on Spatial Algorithms and Systems}% + \def\@journalNameShort{ACM Trans. Spatial Algorithms Syst.}% + \def\@permissionCodeOne{2374-0353}% +\or % TSC + \def\@journalName{ACM Transactions on Social Computing}% + \def\@journalNameShort{ACM Trans. Soc. Comput.}% + \def\@permissionCodeOne{2469-7818}% +\or % TSLP + \def\@journalName{ACM Transactions on Speech and Language Processing}% + \def\@journalNameShort{ACM Trans. Speech Lang. Process.}% + \def\@permissionCodeOne{1550-4875}% +\or % TWEB + \def\@journalName{ACM Transactions on the Web}% + \def\@journalNameShort{ACM Trans. Web}% + \def\@permissionCodeOne{1559-1131}% +\fi +\ClassInfo{\@classname}{Using journal code \@journalCode}% +}{% + \ClassError{\@classname}{Incorrect journal #1}% +}% +\def\acmJournal#1{\setkeys{ACM}{acmJournal=#1}} +\def\@journalCode@nr{0} +\def\@journalName{}% +\def\@journalNameShort{\@journalName}% +\def\@permissionCodeOne{XXXX-XXXX}% +\def\@permissionCodeTwo{}% +\newcommand\acmConference[4][]{% + \gdef\acmConference@shortname{#1}% + \gdef\acmConference@name{#2}% + \gdef\acmConference@date{#3}% + \gdef\acmConference@venue{#4}% + \ifx\acmConference@shortname\@empty + \gdef\acmConference@shortname{#2}% + \fi} +\acmConference[Conference'17]{ACM Conference}{July 2017}{Washington, + DC, USA} +\def\subtitle#1{\def\@subtitle{#1}} +\subtitle{} +\newcount\num@authorgroups +\num@authorgroups=0\relax +\newif\if@insideauthorgroup +\@insideauthorgroupfalse +\renewcommand\author[2][]{% + \if@insideauthorgroup\else + \global\advance\num@authorgroups by 1\relax + \global\@insideauthorgrouptrue + \fi + \ifx\addresses\@empty + \if@ACM@anonymous + \gdef\addresses{\@author{Anonymous Author(s)}}% + \gdef\authors{Anonymous Author(s)}% + \else + \gdef\addresses{\@author{#2}}% + \gdef\authors{#2}% + \fi + \else + \if@ACM@anonymous\else + \g@addto@macro\addresses{\and\@author{#2}}% + \g@addto@macro\authors{\and#2}% + \fi + \fi + \if@ACM@anonymous + \ifx\shortauthors\@empty + \gdef\shortauthors{Anon.}% + \fi + \else + \def\@tempa{#1}% + \ifx\@tempa\@empty + \ifx\shortauthors\@empty + \gdef\shortauthors{#2}% + \else + \g@addto@macro\shortauthors{\and#2}% + \fi + \else + \ifx\shortauthors\@empty + \gdef\shortauthors{#1}% + \else + \g@addto@macro\shortauthors{\and#1}% + \fi + \fi + \fi} +\newcommand{\affiliation}[2][]{% + \global\@insideauthorgroupfalse + \if@ACM@anonymous\else + \g@addto@macro\addresses{\affiliation{#1}{#2}}% + \fi} +\renewcommand{\email}[2][]{% + \if@ACM@anonymous\else + \g@addto@macro\addresses{\email{#1}{#2}}% + \fi} +\let\orcid\@gobble +\def\@titlenotes{} +\def\titlenote#1{% + \g@addto@macro\@title{\footnotemark}% + \if@ACM@anonymous + \g@addto@macro\@titlenotes{% + \stepcounter{footnote}\footnotetext{Title note}}% + \else + \g@addto@macro\@titlenotes{\stepcounter{footnote}\footnotetext{#1}}% + \fi} +\def\@subtitlenotes{} +\def\subtitlenote#1{% + \g@addto@macro\@subtitle{\footnotemark}% + \if@ACM@anonymous + \g@addto@macro\@subtitlenotes{% + \stepcounter{footnote}\footnotetext{Subtitle note}}% + \else + \g@addto@macro\@subtitlenotes{% + \stepcounter{footnote}\footnotetext{#1}}% + \fi} +\def\@authornotes{} +\def\authornote#1{% + \if@ACM@anonymous\else + \g@addto@macro\addresses{\@authornotemark} + \g@addto@macro\@authornotes{% + \stepcounter{footnote}\footnotetext{#1}}% + \fi} +\def\acmVolume#1{\def\@acmVolume{#1}} +\acmVolume{1} +\def\acmNumber#1{\def\@acmNumber{#1}} +\acmNumber{1} +\def\acmArticle#1{\def\@acmArticle{#1}} +\acmArticle{1} +\def\acmArticleSeq#1{\def\@acmArticleSeq{#1}} +\acmArticleSeq{\@acmArticle} +\def\acmYear#1{\def\@acmYear{#1}} +\acmYear{2016} +\def\acmMonth#1{\def\@acmMonth{#1}} +\acmMonth{1} +\def\@acmPubDate{\ifcase\@acmMonth\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or + December\fi~\@acmYear} +\def\acmPrice#1{\def\@acmPrice{#1}} +\acmPrice{15.00} +\def\acmISBN#1{\def\@acmISBN{#1}} +\acmISBN{978-x-xxxx-xxxx-x/YY/MM} +\def\acmDOI#1{\def\@acmDOI{#1}} +\acmDOI{10.1145/nnnnnnn.nnnnnnn} +\newif\if@ACM@badge +\@ACM@badgefalse +\newlength\@ACM@badge@width +\setlength\@ACM@badge@width{5pc} +\newlength\@ACM@title@width +\newlength\@ACM@badge@skip +\setlength\@ACM@badge@skip{1pc} +\newcommand\acmBadgeR[2][]{\@ACM@badgetrue + \def\@acmBadgeR@url{#1}% + \def\@acmBadgeR@image{#2}} +\def\@acmBadgeR@url{} +\def\@acmBadgeR@image{} +\newcommand\acmBadgeL[2][]{\@ACM@badgetrue + \def\@acmBadgeL@url{#1}% + \def\@acmBadgeL@image{#2}} +\def\@acmBadgeL@url{} +\def\@acmBadgeL@image{} +\def\startPage#1{\def\@startPage{#1}} +\startPage{} +\def\terms#1{\def\@terms{#1}} +\terms{} +\def\keywords#1{\def\@keywords{#1}} +\keywords{} +\renewenvironment{abstract}{\Collect@Body\@saveabstract}{} +\long\def\@saveabstract#1{\long\gdef\@abstract{#1}} +\@saveabstract{} +\long\def\@lempty{} +\define@boolkey+{@ACM@topmatter@}[@ACM@]{printcss}[true]{% + \if@ACM@printcss + \ClassInfo{\@classname}{Printing CSS}% + \else + \ClassInfo{\@classname}{Suppressing CSS}% + \fi}{\ClassError{\@classname}{printcss must be true or false}} +\define@boolkey+{@ACM@topmatter@}[@ACM@]{printacmref}[true]{% + \if@ACM@printacmref + \ClassInfo{\@classname}{Printing bibformat}% + \else + \ClassInfo{\@classname}{Suppressing bibformat}% + \fi}{\ClassError{\@classname}{printacmref must be true or false}} +\define@boolkey+{@ACM@topmatter@}[@ACM@]{printfolios}[true]{% + \if@ACM@printfolios + \ClassInfo{\@classname}{Printing folios}% + \else + \ClassInfo{\@classname}{Suppressing folios}% + \fi}{\ClassError{\@classname}{printfolios must be true or false}} +\def\settopmatter#1{\setkeys{@ACM@topmatter@}{#1}} +\settopmatter{printcss=true, printacmref=true} +\if@ACM@manuscript + \settopmatter{printfolios=true} +\else + \if@ACM@journal + \settopmatter{printfolios=true} + \else + \settopmatter{printfolios=false} + \fi +\fi +\def\@received{} +\newcommand\received[2][]{\def\@tempa{#1}% + \ifx\@tempa\@empty + \ifx\@received\@empty + \gdef\@received{Received #2}% + \else + \g@addto@macro{\@received}{; revised #2}% + \fi + \else + \ifx\@received\@empty + \gdef\@received{#1 #2}% + \else + \g@addto@macro{\@received}{; #1 #2}% + \fi + \fi} +\AtEndDocument{% + \ifx\@received\@empty\else + \par\bigskip\noindent\small\normalfont\@received\par + \fi} +\RequirePackage{comment} +\excludecomment{CCSXML} +\let\@concepts\@empty +\newcommand\ccsdesc[2][100]{% + \ccsdesc@parse#1~#2~} +\def\ccsdesc@parse#1~#2~#3~{% + \expandafter\ifx\csname CCS@#2\endcsname\relax + \expandafter\gdef\csname CCS@#2\endcsname{\textbullet\textbf{#2} $\to$ }% + \g@addto@macro{\@concepts}{\csname CCS@#2\endcsname}\fi + \expandafter\g@addto@macro\expandafter{\csname CCS@#2\endcsname}{% + \ifnum#1>499\textbf{#3; }\else + \ifnum#1>299\textit{#3; }\else + #3; \fi\fi}} +\newif\if@printcopyright +\@printcopyrighttrue +\newif\if@printpermission +\@printpermissiontrue +\newif\if@acmowned +\@acmownedtrue +\define@choicekey*{ACM@}{acmcopyrightmode}[% + \acm@copyrightinput\acm@copyrightmode]{none,acmcopyright,acmlicensed,% + rightsretained,usgov,usgovmixed,cagov,cagovmixed,% + licensedusgovmixed,licensedcagovmixed,othergov,licensedothergov}{% + \@printpermissiontrue + \@printcopyrighttrue + \@acmownedtrue + \ifnum\acm@copyrightmode=0\relax % none + \@printpermissionfalse + \@printcopyrightfalse + \@acmownedfalse + \fi + \ifnum\acm@copyrightmode=2\relax % acmlicensed + \@acmownedfalse + \fi + \ifnum\acm@copyrightmode=3\relax % rightsretained + \@acmownedfalse + \fi + \ifnum\acm@copyrightmode=4\relax % usgov + \@printpermissiontrue + \@printcopyrightfalse + \@acmownedfalse + \fi + \ifnum\acm@copyrightmode=6\relax % cagov + \@acmownedfalse + \fi + \ifnum\acm@copyrightmode=8\relax % licensedusgovmixed + \@acmownedfalse + \fi + \ifnum\acm@copyrightmode=9\relax % licensedcagovmixed + \@acmownedfalse + \fi + \ifnum\acm@copyrightmode=10\relax % othergov + \@acmownedtrue + \fi + \ifnum\acm@copyrightmode=11\relax % licensedothergov + \@acmownedfalse + \fi} +\def\setcopyright#1{\setkeys{ACM@}{acmcopyrightmode=#1}} +\setcopyright{acmcopyright} +\def\@copyrightowner{% + \ifcase\acm@copyrightmode\relax % none + \or % acmcopyright + ACM\@. + \or % acmlicensed + Copyright held by the owner/author(s). Publication rights licensed to + ACM\@. + \or % rightsretained + Copyright held by the owner/author(s). + \or % usgov + \or % usgovmixed + ACM\@. + \or % cagov + Crown in Right of Canada. + \or %cagovmixed + ACM\@. + \or %licensedusgovmixed + Copyright held by the owner/author(s). Publication rights licensed to + ACM\@. + \or %licensedcagovmixed + Copyright held by the owner/author(s). Publication rights licensed to + ACM\@. + \or % othergov + ACM\@. + \or % licensedothergov + Copyright held by the owner/author(s). Publication rights licensed to + ACM\@. + \fi} +\def\@formatdoi#1{\url{http://dx.doi.org/#1}} +\def\@copyrightpermission{% + \ifcase\acm@copyrightmode\relax % none + \or % acmcopyright + 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. Copyrights for components of this work owned by + others than ACM must be honored. Abstracting with credit is + permitted. To copy otherwise, or republish, to post on servers or to + redistribute to lists, requires prior specific permission + and\hspace*{.5pt}/or a fee. Request permissions from + permissions@acm.org. + \or % acmlicensed + 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. Copyrights for components of this work owned by + others than the author(s) must be honored. Abstracting with credit + is permitted. To copy otherwise, or republish, to post on servers + or to redistribute to lists, requires prior specific permission + and\hspace*{.5pt}/or a fee. Request permissions from + permissions@acm.org. + \or % rightsretained + Permission to make digital or hard copies of part or all 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. Copyrights for third-party components of this work must be + honored. For all other uses, contact the + owner\hspace*{.5pt}/author(s). + \or % usgov + This paper is authored by an employee(s) of the United States + Government and is in the public domain. Non-exclusive copying or + redistribution is allowed, provided that the article citation is + given and the authors and agency are clearly identified as its + source. + \or % usgovmixed + ACM acknowledges that this contribution was authored or co-authored + by an employee, or contractor of the national 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. Permission to make digital or hard copies + for personal or classroom use is granted. Copies must bear this + notice and the full citation on the first page. Copyrights for + components of this work owned by others than ACM must be + honored. To copy otherwise, distribute, republish, or post, + requires prior specific permission and\hspace*{.5pt}/or a + fee. Request permissions from permissions@acm.org. + \or % cagov + This article was authored by employees of the Government of Canada. + As such, the Canadian government retains all interest in the + copyright to this work and grants to ACM a nonexclusive, + royalty-free right to publish or reproduce this article, or to allow + others to do so, provided that clear attribution is given both to + the authors and the Canadian government agency employing them. + Permission to make digital or hard copies for personal or classroom + use is granted. Copies must bear this notice and the full citation + on the first page. Copyrights for components of this work owned by + others than the Canadain Government must be honored. To copy + otherwise, distribute, republish, or post, requires prior specific + permission and\hspace*{.5pt}/or a fee. Request permissions from + permissions@acm.org. + \or % cagovmixed + ACM acknowledges that this contribution was co-authored by an + affiliate of the national government of Canada. As such, the Crown + in Right of Canada retains an equal interest in the copyright. + Reprints must include clear attribution to ACM and the author's + government agency affiliation. Permission to make digital or hard + copies for personal or classroom use is granted. Copies must bear + this notice and the full citation on the first page. Copyrights for + components of this work owned by others than ACM must be honored. + To copy otherwise, distribute, republish, or post, requires prior + specific permission and\hspace*{.5pt}/or a fee. Request permissions + from permissions@acm.org. + \or % licensedusgovmixed + Publication rights licensed to ACM\@. ACM acknowledges that this + contribution was authored or co-authored by an employee, contractor + or affiliate of the United States 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. + \or % licensedcagovmixed + Publication rights licensed to ACM\@. ACM acknowledges that this + contribution was authored or co-authored by an employee, contractor + or affiliate of the national government of Canada. 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. + \or % othergov + ACM acknowledges that this contribution was authored or co-authored + by an employee, contractor or affiliate of a national 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. + \or % licensedothergov + Publication rights licensed to ACM\@. ACM acknowledges that this + contribution was authored or co-authored by an employee, contractor + or affiliate of a national 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. + \fi} +\def\copyrightyear#1{\def\@copyrightyear{#1}} +\copyrightyear{\@acmYear} +\def\@teaserfigures{} +\newenvironment{teaserfigure}{\Collect@Body\@saveteaser}{} +\long\def\@saveteaser#1{\g@addto@macro\@teaserfigures{\@teaser{#1}}} +\renewcommand{\thanks}[1]{% + \@ifnotempty{#1}{% + \if@ACM@anonymous + \g@addto@macro\thankses{\thanks{A note}}% + \else + \g@addto@macro\thankses{\thanks{#1}}% + \fi}} +\newbox\mktitle@bx +\def\maketitle{% + \if@ACM@anonymous + % Anonymize omission of \author-s + \ifnum\num@authorgroups=0\author{}\fi + \fi + \begingroup + \let\@footnotemark\@footnotemark@nolink + \let\@footnotetext\@footnotetext@nolink + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \@topnum\z@ % this prevents figures from falling at the top of page + % 1 + \hsize=\textwidth + \def\@makefnmark{\hbox{\@textsuperscript{\@thefnmark}}}% + \@mktitle\if@ACM@sigchiamode\else\@mkauthors\fi\@mkteasers + \@printtopmatter + \if@ACM@sigchiamode\@mkauthors\fi + \setcounter{footnote}{0}% + \def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}% + \@titlenotes + \@subtitlenotes + \@authornotes + \let\@makefnmark\relax \let\@thefnmark\relax + \let\@makefntext\noindent + \ifx\@empty\thankses\else + \footnotetextcopyrightpermission{% + \def\par{\let\par\@par}\parindent\z@\@setthanks}% + \fi + \footnotetextcopyrightpermission{\parindent\z@\parskip0.1\baselineskip + \if@ACM@authorversion\else + \if@printpermission\@copyrightpermission\par\fi + \fi + \if@ACM@manuscript\else + \if@ACM@journal\else % Print the conference short name + {\itshape \acmConference@shortname, \acmConference@venue}\par + \fi + \fi + \if@printcopyright + \copyright\ \@copyrightyear\ \@copyrightowner\ + \else + \@copyrightyear.\ + \fi + \if@ACM@manuscript + Manuscript submitted to ACM\\ + \else + \if@ACM@authorversion + This is the author's version of the work. It is posted here for + your personal use. Not for redistribution. The definitive Version + of Record was published in + \if@ACM@journal + \emph{\@journalName}% + \else + \emph{Proceedings of \acmConference@name, \acmConference@date}% + \fi + \ifx\@acmDOI\@empty + . + \else + , \@formatdoi{\@acmDOI}. + \fi\\ + \else + \if@ACM@journal + \@permissionCodeOne/\@acmYear/\@acmMonth-ART\@acmArticle\ + \$\@acmPrice\\ + DOI: \nolinkurl{\@acmDOI}% + \else % Conference + \@acmISBN + \ifx\@acmPrice\@empty.\else\dots\$\@acmPrice\fi\\ + DOI: \nolinkurl{\@acmDOI}% + \fi + \fi + \fi}% + \endgroup + \setcounter{footnote}{0}% + \@mkabstract + \if@ACM@printcss + \ifx\@concepts\@empty\else\bgroup + {\@specialsection{CCS Concepts}% + \@concepts\par}\egroup + \fi + \fi + \if\@terms\@empty\else\bgroup + {\@specialsection{General Terms}% + \@terms\par}\egroup + \fi + \ifx\@keywords\@empty\else\bgroup + {\if@ACM@journal + \@specialsection{Additional Key Words and Phrases}% + \else + \@specialsection{Keywords}% + \fi + \@keywords}\par\egroup + \fi + \andify\authors + \andify\shortauthors + \global\let\authors=\authors + \global\let\shortauthors=\shortauthors + \if@ACM@printacmref + \@mkbibcitation + \fi + \hypersetup{pdfauthor={\authors}, + pdftitle={\@title}, pdfkeywords={\@concepts}}% + \@printendtopmatter + \@afterindentfalse + \@afterheading +} +\def\@specialsection#1{% + \ifcase\ACM@format@nr + \relax % manuscript + \par\medskip\small\noindent#1: % + \or % acmsmall + \par\medskip\small\noindent#1: % + \or % acmlarge + \par\medskip\small\noindent#1: % + \or % acmtog + \par\medskip\small\noindent#1: % + \or % sigconf + \section*{#1}% + \or % siggraph + \section*{#1}% + \or % sigplan + \paragraph*{#1}% + \or % sigchi + \section*{#1}% + \or % sigchi-a + \section*{#1}% + \fi} +\def\@printtopmatter{% + \ifx\@startPage\@empty + \gdef\@startPage{1}% + \else + \setcounter{page}{\@startPage}% + \fi + \thispagestyle{firstpagestyle}% + \noindent + \ifcase\ACM@format@nr + \relax % manuscript + \box\mktitle@bx\par + \noindent\hrulefill\par + \or % acmsmall + \box\mktitle@bx\par + \noindent\hrulefill\par + \or % acmlarge + \box\mktitle@bx\par + \noindent\hrulefill\par + \or % acmtog + \twocolumn[\box\mktitle@bx]% + \or % sigconf + \twocolumn[\box\mktitle@bx]% + \or % siggraph + \twocolumn[\box\mktitle@bx]% + \or % sigplan + \twocolumn[\box\mktitle@bx]% + \or % sigchi + \twocolumn[\box\mktitle@bx]% + \or % sigchi-a + \par\box\mktitle@bx\par\bigskip + \if@ACM@badge + \marginpar{\noindent + \ifx\@acmBadgeL@image\@empty\else + \href{\@acmBadgeL@url}{% + \includegraphics[width=\@ACM@badge@width]{\@acmBadgeL@image}}% + \hskip\@ACM@badge@skip + \fi + \ifx\@acmBadgeR@image\@empty\else + \href{\@acmBadgeR@url}{% + \includegraphics[width=\@ACM@badge@width]{\@acmBadgeR@image}}% + \fi}% + \fi + \fi +} +\def\@mktitle{% + \ifcase\ACM@format@nr + \relax % manuscript + \@mktitle@i + \or % acmsmall + \@mktitle@i + \or % acmlarge + \@mktitle@i + \or % acmtog + \@mktitle@i + \or % sigconf + \@mktitle@iii + \or % siggraph + \@mktitle@iii + \or % sigplan + \@mktitle@iii + \or % sigchi + \@mktitle@iii + \or % sigchi-a + \@mktitle@iv + \fi +} +\def\@titlefont{% + \ifcase\ACM@format@nr + \relax % manuscript + \LARGE\bfseries\sffamily + \or % acmsmall + \LARGE\bfseries\sffamily + \or % acmlarge + \LARGE\bfseries\sffamily + \or % acmtog + \Huge\sffamily + \or % sigconf + \Huge\sffamily\bfseries + \or % siggraph + \Huge\sffamily\bfseries + \or % sigplan + \Huge\bfseries + \or % sigchi + \Huge\sffamily\bfseries + \or % sigchi-a + \Huge\bfseries + \fi} +\def\@subtitlefont{% + \ifcase\ACM@format@nr + \relax % manuscript + \mdseries + \or % acmsmall + \mdseries + \or % acmlarge + \mdseries + \or % acmtog + \LARGE + \or % sigconf + \LARGE\mdseries + \or % siggraph + \LARGE\mdseries + \or % sigplan + \LARGE\mdseries + \or % sigchi + \LARGE\mdseries + \or % sigchi-a + \mdseries + \fi} +\def\@mktitle@i{\hsize=\textwidth + \@ACM@title@width=\hsize + \ifx\@acmBadgeL@image\@empty\else + \advance\@ACM@title@width by -\@ACM@badge@width + \advance\@ACM@title@width by -\@ACM@badge@skip + \fi + \ifx\@acmBadgeR@image\@empty\else + \advance\@ACM@title@width by -\@ACM@badge@width + \advance\@ACM@title@width by -\@ACM@badge@skip + \fi + \setbox\mktitle@bx=\vbox{\noindent\@titlefont + \ifx\@acmBadgeL@image\@empty\else + \raisebox{-.5\baselineskip}[\z@][\z@]{\href{\@acmBadgeL@url}{% + \includegraphics[width=\@ACM@badge@width]{\@acmBadgeL@image}}}% + \hskip\@ACM@badge@skip + \fi + \parbox[t]{\@ACM@title@width}{\raggedright + \@titlefont\noindent + \@title + \ifx\@subtitle\@empty\else + \par\noindent{\@subtitlefont\@subtitle} + \fi}% + \ifx\@acmBadgeR@image\@empty\else + \hskip\@ACM@badge@skip + \raisebox{-.5\baselineskip}[\z@][\z@]{\href{\@acmBadgeR@url}{% + \includegraphics[width=\@ACM@badge@width]{\@acmBadgeR@image}}}% + \fi + \par\bigskip}}% +\def\@mktitle@iii{\hsize=\textwidth + \setbox\mktitle@bx=\vbox{\@titlefont\centering + \@ACM@title@width=\hsize + \if@ACM@badge + \advance\@ACM@title@width by -2\@ACM@badge@width + \advance\@ACM@title@width by -2\@ACM@badge@skip + \parbox[b]{\@ACM@badge@width}{\strut + \ifx\@acmBadgeL@image\@empty\else + \raisebox{-.5\baselineskip}[\z@][\z@]{\href{\@acmBadgeL@url}{% + \includegraphics[width=\@ACM@badge@width]{\@acmBadgeL@image}}}% + \fi}% + \hskip\@ACM@badge@skip + \fi + \parbox[t]{\@ACM@title@width}{\centering\@titlefont + \@title + \ifx\@subtitle\@empty\else + \par\noindent{\@subtitlefont\@subtitle} + \fi + }% + \if@ACM@badge + \hskip\@ACM@badge@skip + \parbox[b]{\@ACM@badge@width}{\strut + \ifx\@acmBadgeR@image\@empty\else + \raisebox{-.5\baselineskip}[\z@][\z@]{\href{\@acmBadgeR@url}{% + \includegraphics[width=\@ACM@badge@width]{\@acmBadgeR@image}}}% + \fi}% + \fi + \par\bigskip}}% +\def\@mktitle@iv{\hsize=\textwidth + \setbox\mktitle@bx=\vbox{\raggedright\leftskip5pc\@titlefont + \noindent\leavevmode\leaders\hrule height 2pt\hfill\kern0pt\par + \noindent\@title + \ifx\@subtitle\@empty\else + \par\noindent\@subtitlefont\@subtitle + \fi + \par\bigskip}}% +\newbox\@ACM@commabox +\def\@ACM@addtoaddress#1{% + \ifvmode\else + \setbox\@ACM@commabox=\hbox{, }% + \unskip\cleaders\copy\@ACM@commabox\hskip\wd\@ACM@commabox + \fi + #1} +\if@ACM@journal + \let\position\@gobble + \def\institution#1{#1\ignorespaces}% + \let\department\@gobble + \let\streetaddress\@gobble + \let\city\@gobble + \let\state\@gobble + \let\postcode\@gobble + \let\country\@gobble +\else + \def\position#1{#1\par}% + \def\institution#1{#1\par}% + \def\department#1{#1\par}% + \def\streetaddress#1{#1\par}% + \let\city\@ACM@addtoaddress + \let\state\@ACM@addtoaddress + \def\postcode#1{\unskip\space#1}% + \let\country\@ACM@addtoaddress +\fi +\def\@mkauthors{\begingroup + \hsize=\textwidth + \ifcase\ACM@format@nr + \relax % manuscript + \@mkauthors@i + \or % acmsmall + \@mkauthors@i + \or % acmlarge + \@mkauthors@i + \or % acmtog + \@mkauthors@i + \or % sigconf + \@mkauthors@iii + \or % siggraph + \@mkauthors@iii + \or % sigplan + \@mkauthors@iii + \or % sigchi + \@mkauthors@iii + \or % sigchi-a + \@mkauthors@iv + \fi + \endgroup +} +\def\@authorfont{\Large\sffamily} +\def\@affiliationfont{\normalsize\normalfont} +\ifcase\ACM@format@nr +\relax % manuscript +\or % acmsmall + \def\@authorfont{\large\sffamily} + \def\@affiliationfont{\small\normalfont} +\or % acmlarge +\or % acmtog + \def\@authorfont{\LARGE\sffamily} + \def\@affiliationfont{\large} +\or % sigconf + \def\@authorfont{\LARGE} + \def\@affiliationfont{\large} +\or % siggraph + \def\@authorfont{\normalsize\normalfont} + \def\@affiliationfont{\normalsize\normalfont} +\or % sigplan + \def\@authorfont{\Large\normalfont} + \def\@affiliationfont{\normalsize\normalfont} +\or % sigchi + \def\@authorfont{\bfseries} + \def\@affiliationfont{\mdseries} +\or % sigchi-a + \def\@authorfont{\bfseries} + \def\@affiliationfont{\mdseries} +\fi +\def\@typeset@author@line{% + \andify\@currentauthors\par\noindent + \@currentauthors\def\@currentauthors{}% + \ifx\@currentaffiliations\@empty\else + \andify\@currentaffiliations + \unskip, {\@currentaffiliations}\par + \fi + \def\@currentaffiliations{}} +\def\@mkauthors@i{% + \def\@currentauthors{}% + \def\@currentaffiliations{}% + \global\let\and\@typeset@author@line + \def\@author##1{% + \ifx\@currentauthors\@empty + \gdef\@currentauthors{\@authorfont\MakeUppercase{##1}}% + \else + \g@addto@macro{\@currentauthors}{\and\MakeUppercase{##1}}% + \fi + \gdef\and{}}% + \def\email##1##2{}% + \def\affiliation##1##2{% + \def\@tempa{##2}\ifx\@tempa\@empty\else + \ifx\@currentaffiliations\@empty + \gdef\@currentaffiliations{\@affiliationfont##2}% + \else + \g@addto@macro{\@currentaffiliations}{\and##2}% + \fi + \fi + \global\let\and\@typeset@author@line} + \global\setbox\mktitle@bx=\vbox{\noindent\box\mktitle@bx\par\medskip + \noindent\addresses\@typeset@author@line + \par\medskip}% +} +\newbox\author@bx +\newdimen\author@bx@wd +\newskip\author@bx@sep +\author@bx@sep=1pc\relax +\def\@typeset@author@bx{\bgroup\hsize=\author@bx@wd\def\and{\par}% + \global\setbox\author@bx=\vtop{\if@ACM@sigchiamode\else\centering\fi + \@authorfont\@currentauthors\par\@affiliationfont + \@currentaffiliation}\egroup + \box\author@bx\hspace{\author@bx@sep}% + \gdef\@currentauthors{}% + \gdef\@currentaffiliation{}} +\def\@mkauthors@iii{% + \author@bx@wd=\textwidth\relax + \advance\author@bx@wd by -\author@bx@sep\relax + \ifcase\num@authorgroups + \relax % 0? + \or % 1=one author per row + \or % 2=two authors per row + \divide\author@bx@wd by \num@authorgroups\relax + \or % 3=three authors per row + \divide\author@bx@wd by \num@authorgroups\relax + \or % 4=two authors per row (!) + \divide\author@bx@wd by 2\relax + \else % three authors per row + \divide\author@bx@wd by 3\relax + \fi + \advance\author@bx@wd by -\author@bx@sep\relax + \gdef\@currentauthors{}% + \gdef\@currentaffiliation{}% + \def\@author##1{\ifx\@currentauthors\@empty + \gdef\@currentauthors{\par##1}% + \else + \g@addto@macro\@currentauthors{\par##1}% + \fi + \gdef\and{}}% + \def\email##1##2{\ifx\@currentaffiliation\@empty + \gdef\@currentaffiliation{\nolinkurl{##2}}% + \else + \g@addto@macro\@currentaffiliation{\par\nolinkurl{##2}}% + \fi}% + \def\affiliation##1##2{\ifx\@currentaffiliation\@empty + \gdef\@currentaffiliation{##2}% + \else + \g@addto@macro\@currentaffiliation{\par##2}% + \fi + \global\let\and\@typeset@author@bx +}% + \hsize=\textwidth + \global\setbox\mktitle@bx=\vbox{\noindent + \box\mktitle@bx\par\medskip\leavevmode + \lineskip=1pc\relax\centering\hspace*{-1em}% + \addresses\let\and\@typeset@author@bx\and\par\bigskip}} +\def\@mkauthors@iv{% + \author@bx@wd=\columnwidth\relax + \advance\author@bx@wd by -\author@bx@sep\relax + \ifcase\num@authorgroups + \relax % 0? + \or % 1=one author per row + \else % 2=two authors per row + \divide\author@bx@wd by 2\relax + \fi + \advance\author@bx@wd by -\author@bx@sep\relax + \gdef\@currentauthors{}% + \gdef\@currentaffiliation{}% + \def\@author##1{\ifx\@currentauthors\@empty + \gdef\@currentauthors{\par##1}% + \else + \g@addto@macro\@currentauthors{\par##1}% + \fi + \gdef\and{}}% + \def\email##1##2{\ifx\@currentaffiliation\@empty + \gdef\@currentaffiliation{\nolinkurl{##2}}% + \else + \g@addto@macro\@currentaffiliation{\par\nolinkurl{##2}}% + \fi}% + \def\affiliation##1##2{\ifx\@currentaffiliation\@empty + \gdef\@currentaffiliation{##2}% + \else + \g@addto@macro\@currentaffiliation{\par##2}% + \fi + \global\let\and\@typeset@author@bx}% + \bgroup\hsize=\columnwidth + \par\raggedright\leftskip=\z@ + \lineskip=1pc\noindent + \addresses\let\and\@typeset@author@bx\and\par\bigskip\egroup} +\def\@authornotemark{\g@addto@macro\@currentauthors{\footnotemark}} +\def\@mkteasers{% + \ifx\@teaserfigures\@empty\else + \def\@teaser##1{\par\bigskip\bgroup + \captionsetup{type=figure}##1\egroup\par} + \global\setbox\mktitle@bx=\vbox{\noindent\box\mktitle@bx\par + \noindent\@teaserfigures\par\medskip}% + \fi} +\def\@setaddresses{} +\def\@mkabstract{\bgroup + \ifx\@abstract\@lempty\else + {\if@ACM@journal + \small\noindent + \else + \section*{Abstract}% + \fi + \phantomsection\addcontentsline{toc}{section}{Abstract}% + \ignorespaces\@abstract\par}% + \fi\egroup} +\def\@mkbibcitation{\bgroup + \def\footnotemark{}% + \par\medskip\small\noindent{\bfseries ACM Reference format:}\par\nobreak + \noindent\authors. \@acmYear. \@title. + \if@ACM@journal + \textit{\@journalNameShort} + \@acmVolume, \@acmNumber, Article~\@acmArticle\ (\@acmPubDate), + \ref{TotPages}~pages. + \else + In \textit{Proceedings of \acmConference@name, \acmConference@venue, + \acmConference@date + \ifx\acmConference@name\acmConference@shortname\else + \ (\acmConference@shortname)\fi + ,} \ref{TotPages}~pages. + \fi\par + \noindent DOI: \nolinkurl{\@acmDOI} +\par\egroup} +\def\@printendtopmatter{\par\medskip + \ifcase\ACM@format@nr + \relax % manuscript + \noindent\hrulefill\par\medskip + \or % acmsmall + \noindent\hrulefill\par\medskip + \or % acmlarge + \noindent\hrulefill\par\medskip + \or % acmtog + \par\bigskip + \or % sigconf + \par\bigskip + \or % siggraph + \par\bigskip + \or % sigplan + \par\bigskip + \or % sigchi + \par\bigskip + \or % sigchi-a + \fi +} +\def\@setthanks{\long\def\thanks##1{\par##1\@addpunct.}\thankses} +\RequirePackage{fancyhdr} +\if@ACM@review + \newsavebox{\ACM@linecount@bx} + \savebox{\ACM@linecount@bx}[4em][t]{\parbox[t]{4em}{% + \newlength\ACM@linecount@bxht\setlength{\ACM@linecount@bxht}{-\baselineskip} + \@tempcnta\@ne\relax + \loop{\color{ACMRed}\scriptsize\the\@tempcnta}\\ + \advance\@tempcnta by \@ne + \addtolength{\ACM@linecount@bxht}{\baselineskip} + \ifdim\ACM@linecount@bxht<\textheight\repeat}} +\fi +\def\ACM@linecount{% + \if@ACM@review + \begin{picture}(0,0)% + \put(-26,-22){\usebox{\ACM@linecount@bx}}% + \end{picture}% + \fi} +\def\@shortauthors{\if@ACM@anonymous Anon.\else\shortauthors\fi} +\def\@headfootfont{% + \ifcase\ACM@format@nr + \relax % manuscript + \sffamily + \or % acmsmall + \sffamily + \or % acmlarge + \sffamily + \or % acmtog + \sffamily + \or % sigconf + \sffamily + \or % siggraph + \sffamily + \or % sigplan + \sffamily + \or % sigchi + \sffamily + \or % sigchi-a + \sffamily + \fi} +\fancypagestyle{standardpagestyle}{% + \fancyhf{}% + \renewcommand{\headrulewidth}{\z@}% + \renewcommand{\footrulewidth}{\z@}% + \ifcase\ACM@format@nr + \relax % manuscript + \fancyhead[LE]{\ACM@linecount\if@ACM@printfolios\thepage\fi}% + \fancyhead[RO]{\if@ACM@printfolios\thepage\fi}% + \fancyhead[RE]{\@shortauthors}% + \fancyhead[LO]{\ACM@linecount\shorttitle}% + \fancyfoot[RO,LE]{\footnotesize Manuscript submitted to ACM}% + \or % acmsmall + \fancyhead[LE]{\ACM@linecount\@headfootfont\@acmArticle\if@ACM@printfolios:\thepage\fi}% + \fancyhead[RO]{\@headfootfont\@acmArticle\if@ACM@printfolios:\thepage\fi}% + \fancyhead[RE]{\@headfootfont\@shortauthors}% + \fancyhead[LO]{\ACM@linecount\@headfootfont\shorttitle}% + \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No. + \@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}% + \or % acmlarge + \fancyhead[LE]{\ACM@linecount\@headfootfont + \@acmArticle:\if@ACM@printfolios\thepage\quad\textbullet\quad\fi\@shortauthors}% + \fancyhead[LO]{\ACM@linecount}% + \fancyhead[RO]{\@headfootfont + \shorttitle\quad\textbullet\quad\@acmArticle\if@ACM@printfolios:\thepage\fi}% + \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No. + \@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}% + \or % acmtog + \fancyhead[LE]{\ACM@linecount\@headfootfont + \@acmArticle:\if@ACM@printfolios\thepage\quad\textbullet\quad\fi\@shortauthors}% + \fancyhead[LO]{\ACM@linecount}% + \fancyhead[RO]{\@headfootfont + \shorttitle\quad\textbullet\quad\@acmArticle\if@ACM@printfolios:\thepage\fi}% + \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No. + \@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}% + \else % Proceedings + \fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}% + \fancyhead[LO]{\ACM@linecount\@headfootfont\shorttitle}% + \fancyhead[RE]{\@headfootfont\@shortauthors}% + \fancyhead[LE]{\ACM@linecount\@headfootfont\acmConference@shortname, + \acmConference@date, \acmConference@venue}% + \fancyhead[RO]{\@headfootfont\acmConference@shortname, + \acmConference@date, \acmConference@venue}% + \fi + \if@ACM@sigchiamode + \fancyheadoffset[L]{\dimexpr(\marginparsep+\marginparwidth)}% + \fi +} +\pagestyle{standardpagestyle} +\newdimen\@folio@wd +\@folio@wd=\z@ +\newdimen\@folio@ht +\@folio@ht=\z@ +\newdimen\@folio@voffset +\@folio@voffset=\z@ +\def\@folio@max{1} +\ifcase\ACM@format@nr +\relax % manuscript +\or % acmsmall + \@folio@wd=45.75pt\relax + \@folio@ht=1.25in\relax + \@folio@voffset=.2in\relax + \def\@folio@max{8} +\or % acmlarge + \@folio@wd=43.25pt\relax + \@folio@ht=79pt\relax + \@folio@voffset=.55in\relax + \def\@folio@max{10} +\fi +\def\@folioblob{\@tempcnta=\@acmArticleSeq\relax + \loop + \ifnum\@tempcnta>\@folio@max\relax + \advance\@tempcnta by - \@folio@max + \repeat + \advance\@tempcnta by -1\relax + \@tempdima=\@folio@ht\relax + \multiply\@tempdima by \the\@tempcnta\relax + \advance\@tempdima by -\@folio@voffset\relax + \begin{picture}(0,0) + \makebox[\z@]{\raisebox{-\@tempdima}{% + \rlap{% + \raisebox{-0.45\@folio@ht}[\z@][\z@]{% + \rule{\@folio@wd}{\@folio@ht}}}% + \parbox{\@folio@wd}{% + \centering + \textcolor{white}{\LARGE\bfseries\sffamily\@acmArticle}}}} + \end{picture}} + +\fancypagestyle{firstpagestyle}{% + \fancyhf{}% + \renewcommand{\headrulewidth}{\z@}% + \renewcommand{\footrulewidth}{\z@}% + \ifcase\ACM@format@nr + \relax % manuscript + \fancyhead[L]{\ACM@linecount}% + \fancyfoot[RO,LE]{\if@ACM@printfolios\small\thepage\fi}% + \fancyfoot[RE,LO]{\footnotesize Manuscript submitted to ACM}% + \or % acmsmall + \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No. + \@acmNumber, Article \@acmArticle. Publication date: + \@acmPubDate.}% + \fancyhead[LE]{\ACM@linecount\@folioblob}% + \fancyhead[LO]{\ACM@linecount}% + \fancyhead[RO]{\@folioblob}% + \fancyheadoffset[RO,LE]{0.6\@folio@wd}% + \or % acmlarge + \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No. + \@acmNumber, Article \@acmArticle. Publication date: + \@acmPubDate.}% + \fancyhead[RO]{\@folioblob}% + \fancyhead[LE]{\ACM@linecount\@folioblob}% + \fancyhead[LO]{\ACM@linecount}% + \fancyheadoffset[RO,LE]{1.4\@folio@wd}% + \or % acmtog + \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No. + \@acmNumber, Article \@acmArticle. Publication date: + \@acmPubDate.}% + \fancyhead[L]{\ACM@linecount}% + \else % Conference proceedings + \fancyhead[L]{\ACM@linecount}% + \fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}% + \fi +} +\renewcommand\section{\@startsection{section}{1}{\z@}% + {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}% + {.25\baselineskip}% + {\@secfont}} +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}% + {.25\baselineskip}% + {\@subsecfont}} +\renewcommand\subsubsection{\@startsection{subsubsection}{3}{10pt}% + {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}% + {-3.5\p@}% + {\@subsubsecfont\@adddotafter}} +\renewcommand\paragraph{\@startsection{paragraph}{4}{\parindent}% + {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}% + {-3.5\p@}% + {\@parfont\@adddotafter}} +\renewcommand\part{\@startsection{part}{9}{\z@}% + {-10\p@ \@plus -4\p@ \@minus -2\p@}% + {4\p@}% + {\@parfont}} +\def\section@raggedright{\@rightskip\@flushglue + \rightskip\@rightskip + \leftskip\z@skip + \parindent\z@} +\def\@secfont{\sffamily\bfseries\section@raggedright\MakeUppercase} +\def\@subsecfont{\sffamily\bfseries\section@raggedright} +\def\@subsubsecfont{\sffamily\itshape} +\def\@parfont{\itshape} +\setcounter{secnumdepth}{3} +\ifcase\ACM@format@nr +\relax % manuscript +\or % acmsmall +\or % acmlarge + \def\@secfont{\sffamily\large\section@raggedright\MakeUppercase} + \def\@subsecfont{\sffamily\large\section@raggedright} +\or % acmtog + \def\@secfont{\sffamily\large\section@raggedright\MakeUppercase} + \def\@subsecfont{\sffamily\large\section@raggedright} +\or % sigconf + \def\@secfont{\bfseries\Large\section@raggedright\MakeUppercase} + \def\@subsecfont{\bfseries\Large\section@raggedright} +\or % siggraph + \def\@secfont{\bfseries\sffamily\Large\section@raggedright\MakeUppercase} + \def\@subsecfont{\bfseries\sffamily\Large\section@raggedright} +\or % sigplan + \def\@secfont{\bfseries\Large\section@raggedright} + \def\@subsecfont{\bfseries\section@raggedright} + \renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}% + {.25\baselineskip}% + {\@subsubsecfont}} + \def\@subsubsecfont{\bfseries\section@raggedright} + \renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}% + {-3.5\p@}% + {\@parfont\@addspaceafter}} + \def\@parfont{\bfseries\itshape} + \renewcommand\subparagraph{\@startsection{subparagraph}{5}{\z@}% + {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}% + {-3.5\p@}% + {\@subparfont\@addspaceafter}} + \def\@subparfont{\itshape} +\or % sigchi + \setcounter{secnumdepth}{1} + \def\@secfont{\bfseries\sffamily\section@raggedright\MakeUppercase} + \def\@subsecfont{\bfseries\sffamily\section@raggedright} +\or % sigchi-a + \setcounter{secnumdepth}{0} + \def\@secfont{\bfseries\sffamily\section@raggedright\MakeUppercase} + \def\@subsecfont{\bfseries\sffamily\section@raggedright} +\fi +\def\@adddotafter#1{#1\@addpunct{.}} +\def\@addspaceafter#1{#1\@addpunct{\enspace}} +\def\@acmplainbodyfont{\itshape} +\def\@acmplainindent{\parindent} +\def\@acmplainheadfont{\scshape} +\def\@acmplainnotefont{\@empty} +\ifcase\ACM@format@nr +\relax % manuscript +\or % acmsmall +\or % acmlarge +\or % acmtog +\or % sigconf +\or % siggraph +\or % sigplan + \def\@acmplainbodyfont{\itshape} + \def\@acmplainindent{\z@} + \def\@acmplainheadfont{\bfseries} + \def\@acmplainnotefont{\normalfont} +\or % sigchi +\or % sigchi-a +\fi +\newtheoremstyle{acmplain}% + {.5\baselineskip\@plus.2\baselineskip + \@minus.2\baselineskip}% space above + {.5\baselineskip\@plus.2\baselineskip + \@minus.2\baselineskip}% space below + {\@acmplainbodyfont}% body font + {\@acmplainindent}% indent amount + {\@acmplainheadfont}% head font + {.}% punctuation after head + {.5em}% spacing after head + {\thmname{#1}\thmnumber{ #2}\thmnote{ {\@acmplainnotefont(#3)}}}% head spec +\def\@acmdefinitionbodyfont{\normalfont} +\def\@acmdefinitionindent{\parindent} +\def\@acmdefinitionheadfont{\itshape} +\def\@acmdefinitionnotefont{\@empty} +\ifcase\ACM@format@nr +\relax % manuscript +\or % acmsmall +\or % acmlarge +\or % acmtog +\or % sigconf +\or % siggraph +\or % sigplan + \def\@acmdefinitionbodyfont{\normalfont} + \def\@acmdefinitionindent{\z@} + \def\@acmdefinitionheadfont{\bfseries} + \def\@acmdefinitionnotefont{\normalfont} +\or % sigchi +\or % sigchi-a +\fi +\newtheoremstyle{acmdefinition}% + {.5\baselineskip\@plus.2\baselineskip + \@minus.2\baselineskip}% space above + {.5\baselineskip\@plus.2\baselineskip + \@minus.2\baselineskip}% space below + {\@acmdefinitionbodyfont}% body font + {\@acmdefinitionindent}% indent amount + {\@acmdefinitionheadfont}% head font + {.}% punctuation after head + {.5em}% spacing after head + {\thmname{#1}\thmnumber{ #2}\thmnote{ {\@acmdefinitionnotefont(#3)}}}% head spec +\theoremstyle{acmplain} +\newtheorem{theorem}{Theorem}[section] +\newtheorem{conjecture}[theorem]{Conjecture} +\newtheorem{proposition}[theorem]{Proposition} +\newtheorem{lemma}[theorem]{Lemma} +\newtheorem{corollary}[theorem]{Corollary} +\theoremstyle{acmdefinition} +\newtheorem{example}[theorem]{Example} +\newtheorem{definition}[theorem]{Definition} +\theoremstyle{acmplain} +\def\@proofnamefont{\scshape} +\def\@proofindent{\indent} +\ifcase\ACM@format@nr +\relax % manuscript +\or % acmsmall +\or % acmlarge +\or % acmtog +\or % sigconf +\or % siggraph +\or % sigplan + \def\@proofnamefont{\itshape} + \def\@proofindent{\noindent} +\or % sigchi +\or % sigchi-a +\fi +\renewenvironment{proof}[1][\proofname]{\par + \pushQED{\qed}% + \normalfont \topsep6\p@\@plus6\p@\relax + \trivlist + \item[\@proofindent\hskip\labelsep + {\@proofnamefont #1\@addpunct{.}}]\ignorespaces +}{% + \popQED\endtrivlist\@endpefalse +} +\specialcomment{acks}{% + \begingroup + \section*{Acknowledgments} + \phantomsection\addcontentsline{toc}{section}{Acknowledgments} +}{% + \endgroup +} +\def\grantsponsor#1#2#3{#2} +\newcommand\grantnum[3][]{#3% + \def\@tempa{#1}\ifx\@tempa\@empty\else\space(\url{#1})\fi} +\if@ACM@screen + \includecomment{screenonly} + \excludecomment{printonly} +\else + \excludecomment{screenonly} + \includecomment{printonly} +\fi +\if@ACM@anonymous + \excludecomment{anonsuppress} + \excludecomment{acks} +\else + \includecomment{anonsuppress} +\fi +\newcommand\showeprint[2][arxiv]{% + \def\@tempa{#1}% + \ifx\@tempa\@empty\def\@tempa{arxiv}\fi + \def\@tempb{arxiv}% + \ifx\@tempa\@tempb + arXiv:\href{http://arxiv.org/abs/#2}{#2}\else arXiv:#2% + \fi} +\normalsize\normalfont +\endinput +%% +%% End of file `acmart.cls'. diff --git a/scribble-lib/scribble/acmart/acmart.css b/scribble-lib/scribble/acmart/acmart.css new file mode 100644 index 00000000..e46ab8cc --- /dev/null +++ b/scribble-lib/scribble/acmart/acmart.css @@ -0,0 +1,13 @@ +/* Support for styles in scribble/sigplan */ + +.SAuthorPlace, .SAuthorEmail, +.SConferenceInfo, .SCopyrightYear, .SCopyrightData, +.Sdoi, .SPexclusivelicense, +.SCategory, .SCategoryPlus, .STerms, .SKeywords { + display: none; +} + +.SSubtitle { + display: block; + font-size: smaller; +} diff --git a/scribble-lib/scribble/acmart/acmart.tex b/scribble-lib/scribble/acmart/acmart.tex new file mode 100644 index 00000000..b2da85c4 --- /dev/null +++ b/scribble-lib/scribble/acmart/acmart.tex @@ -0,0 +1,24 @@ + +% Support for styles in scribble/acmart + +% These are replaced by scribble/acmart/style.tex, +% which is used in combination with acmart.cls + +\newcommand{\SAuthorPlace}[1]{#1} +\newcommand{\SAuthorEmail}[1]{#1} + +\newcommand{\SConferenceInfo}[2]{} +\newcommand{\SCopyrightYear}[1]{} +\newcommand{\SCopyrightData}[1]{} +\newcommand{\Sdoi}[1]{} +\newcommand{\SPexclusivelicense}[0]{} + +\newcommand{\SCategory}[3]{} +\newcommand{\SCategoryPlus}[4]{} +\newcommand{\STerms}[1]{} +\newcommand{\SKeywords}[1]{} + +% Normally gets re-written by the title macro: +\newcommand{\SSubtitle}[1]{{\bf #1}} + + diff --git a/scribble-lib/scribble/acmart/lang.rkt b/scribble-lib/scribble/acmart/lang.rkt new file mode 100644 index 00000000..93aeaa28 --- /dev/null +++ b/scribble-lib/scribble/acmart/lang.rkt @@ -0,0 +1,136 @@ +#lang racket/base +(require scribble/doclang + scribble/core + (except-in scribble/base author title) + scribble/acmart + scribble/latex-prefix + racket/list + "../private/defaults.rkt" + (for-syntax racket/base)) +(provide (except-out (all-from-out scribble/doclang) #%module-begin) + (all-from-out scribble/acmart) + (all-from-out scribble/base) + (rename-out [module-begin #%module-begin])) + +(define-syntax (module-begin stx) + (syntax-case stx () + [(_ id . body) + (let ([format? #f] + [review? #f] + [screen? #f] + [natbib? #f] + [anonymous? #f] + [authorversion? #f]) + (let loop ([stuff #'body]) + (syntax-case* stuff (manuscript acmsmall acmlarge acmtog sigconf siggraph sigplan sigchi sigchi-a + review screen natbib anonymous authorversion) + (lambda (a b) (eq? (syntax-e a) (syntax-e b))) + [(ws . body) + ;; Skip intraline whitespace to find options: + (and (string? (syntax-e #'ws)) + (regexp-match? #rx"^ *$" (syntax-e #'ws))) + (loop #'body)] + + ; boolean options + [((review #t) . body) + (set! review? "review=true") + (loop #'body)] + [((review #f) . body) + (set! review? "review=false") + (loop #'body)] + [(review . body) + (set! review? "review=true") + (loop #'body)] + [((screen #t) . body) + (set! screen? "screen=true") + (loop #'body)] + [((screen #f) . body) + (set! screen? "screen=false") + (loop #'body)] + [(screen . body) + (set! screen? "screen=true") + (loop #'body)] + [((natbib #t) . body) + (set! natbib? "natbib=true") + (loop #'body)] + [((natbib #f) . body) + (set! natbib? "natbib=false") + (loop #'body)] + [(natbib . body) + (set! natbib? "natbib=true") + (loop #'body)] + + [((anonymous #t) . body) + (set! anonymous? "anonymous=true") + (loop #'body)] + [((anonymous #f) . body) + (set! anonymous? "anonymous=false") + (loop #'body)] + [(anonymous . body) + (set! anonymous? "anonymous=true") + (loop #'body)] + [((authorversion #t) . body) + (set! authorversion? "authorversion=true") + (loop #'body)] + [((authorversion #f) . body) + (set! authorversion? "authorversion=false") + (loop #'body)] + [(authorversion . body) + (set! authorversion? "authorversion=true") + (loop #'body)] + + + ; format options + [(manuscript . body) + (set! format? "manuscript") + (loop #'body)] + [(acmsmall . body) + (set! format? "acmsmall") + (loop #'body)] + [(acmlarge . body) + (set! format? "acmlarge") + (loop #'body)] + [(acmtog . body) + (set! format? "acmtog") + (loop #'body)] + [(sigconf . body) + (set! format? "sigconf") + (loop #'body)] + [(sigconf . body) + (set! format? "siggraph") + (loop #'body)] + [(sigplan . body) + (set! format? "sigplan") + (loop #'body)] + [(sigchi . body) + (set! format? "sigchi") + (loop #'body)] + [(sigchi-a . body) + (set! format? "sigchi-a") + (loop #'body)] + + [body + #`(#%module-begin id (post-process #,review? #,screen? #,natbib? #,anonymous? #,authorversion? #,format?) () . body)])))])) + +(define ((post-process . opts) doc) + (let ([options + (if (ormap values opts) + (format "[~a]" (apply string-append (add-between (filter values opts) ", "))) + "")]) + (add-acmart-styles + (add-defaults doc + (string->bytes/utf-8 + (format "\\documentclass~a{acmart}\n~a" + options + unicode-encoding-packages)) + (scribble-file "acmart/style.tex") + (list (scribble-file "acmart/acmart.cls")) + #f + #:replacements (hash "scribble-load-replace.tex" (scribble-file "acmart/acmart-load.tex")))))) + +(define (add-acmart-styles doc) + ;; Ensure that "acmart.tex" is used, since "style.tex" + ;; re-defines commands. + (struct-copy part doc [to-collect + (cons '(terms) ; FIXME + (part-to-collect doc))])) diff --git a/scribble-lib/scribble/acmart/lang/reader.rkt b/scribble-lib/scribble/acmart/lang/reader.rkt new file mode 100644 index 00000000..68c2a481 --- /dev/null +++ b/scribble-lib/scribble/acmart/lang/reader.rkt @@ -0,0 +1,3 @@ +#lang s-exp scribble/base/reader +scribble/acmart/lang +#:wrapper1 (lambda (t) (cons 'doc (t))) diff --git a/scribble-lib/scribble/acmart/style.tex b/scribble-lib/scribble/acmart/style.tex new file mode 100644 index 00000000..8290dc27 --- /dev/null +++ b/scribble-lib/scribble/acmart/style.tex @@ -0,0 +1,42 @@ + +% Define \SXtitle to lift \SSubtitle out: +\def\SXtitle#1{\title{\let\SSubtitle\SSubtitleDrop#1}\SExtractSubtitle#1\SExtractSubtitleDone} +\def\SSubtitleDrop#1{} +\def\SExtractSubtitleDone {} +\def\SExtractSubtitle{\futurelet\next\SExtractSubtitleX} +\def\SExtractSubtitleX#1{\ifx#1\SSubtitle \let\Snext\SWithSubtitle \else \let\Snext\SExtractSubtitleY \fi \Snext} +\def\SExtractSubtitleY{\ifx\next\SExtractSubtitleDone \let\Snext\relax \else \let\Snext\SExtractSubtitle \fi \Snext} +\def\SWithSubtitle#1{\subtitle{#1}\SExtractSubtitle} + +\renewcommand{\titleAndVersionAndAuthors}[3]{\SXtitle{#1}#3} +\renewcommand{\titleAndEmptyVersionAndAuthors}[3]{\titleAndVersionAndAuthors{#1}{#2}{#3}} +\renewcommand{\titleAndVersionAndEmptyAuthors}[3]{\SXtitle{#1}\author{Anonymous Author(s)}} +\renewcommand{\titleAndEmptyVersionAndEmptyAuthors}[3]{\titleAndVersionAndEmptyAuthors{#1}{#2}{#3}} + +% Support plain `author' while enabling `authorinfo': for each +% use of \SAuthor, check whether it contains an \SAuthorinfo form: +\def\SAuthor#1{\author{#1}} + +\renewcommand{\SAuthorSep}[1]{} + +\renewcommand{\SConferenceInfo}[2]{\conferenceinfo{#1}{#2}} +\renewcommand{\SCopyrightYear}[1]{\copyrightyear{#1}} +\renewcommand{\SCopyrightData}[1]{\copyrightdata{#1}} +%\renewcommand{\Sdoi}[1]{\doi{#1}} +\renewcommand{\SPexclusivelicense}[0]{\exclusivelicense} + +\renewcommand{\SCategory}[3]{\category{#1}{#2}{#3}} +\renewcommand{\SCategoryPlus}[4]{\category{#1}{#2}{#3}[#4]} +\renewcommand{\STerms}[1]{\terms{#1}} +\renewcommand{\SKeywords}[1]{\keywords{#1}} + +\newcommand{\StitleShort}[2]{\title[#1]{#2}} + +\newcommand{\SacmBadgeRURL}[2]{\acmBadgeR[#1]{#2}} +\newcommand{\SacmBadgeLURL}[2]{\acmBadgeL[#1]{#2}} + +\newcommand{\SgrantnumURL}[3]{\grantnum[#1]{#2}{#3}} + +\newcommand{\SreceivedStage}[2]{\received[#1]{#2}} + +\newcommand{\SccsdescNumber}[2]{\ccsdesc[#1]{#2}}