Merge tag 'v6.10' into my-changes-rebased

This commit is contained in:
Suzanne Soy 2021-07-06 02:28:59 +01:00
commit 8f15b78615
16 changed files with 641 additions and 235 deletions

View File

@ -13,6 +13,17 @@ LaTeX style defaults to use the @hyperlink[acmart-url]{@tt{acmart}}
class for typesetting publications for the Association of Computing class for typesetting publications for the Association of Computing
Machinery.} Machinery.}
@bold{Note:} a @racketmodname[scribble/acmart] document must include a
@racket[title] and @racket[author].
Example:
@verbatim[#:indent 2]|{
#lang scribble/acmart
@title{Surreal Numbers}
@author{Ursula N. Owens}
}|
@deftogether[( @deftogether[(
@defidform[manuscript] @defidform[manuscript]
@defidform[acmsmall] @defidform[acmsmall]
@ -146,7 +157,7 @@ screen version of the image links to the badge authority.
@defproc[(affiliation @defproc[(affiliation
[#:position position (or/c pre-content? #f) #f] [#:position position (or/c pre-content? #f) #f]
[#:institution institution (or/c pre-content? institution? #f) #f] [#:institution institution (listof (or/c pre-content? institution?)) '()]
[#:street-address street-address (or/c pre-content? #f) #f] [#:street-address street-address (or/c pre-content? #f) #f]
[#:city city (or/c pre-content? #f) #f] [#:city city (or/c pre-content? #f) #f]
[#:state state (or/c pre-content? #f) #f] [#:state state (or/c pre-content? #f) #f]

View File

@ -260,6 +260,7 @@ used for a new cell. A @racket['cont] must not appear as the first
cell in a row. cell in a row.
The @racket[style] argument is handled the same as @racket[para]. The @racket[style] argument is handled the same as @racket[para].
See @racket[table] for a list of recognized @tech{style names} and @tech{style properties}.
If @racket[sep] is not @racket[#f], it is inserted as a new column If @racket[sep] is not @racket[#f], it is inserted as a new column
between every column in the table; note that any between every column in the table; note that any

View File

@ -282,13 +282,13 @@ an evaluator (e.g., because it is defined in a module body).}
@defparam[scribble-eval-handler handler @defparam[scribble-eval-handler handler
((any/c . -> . any) any/c boolean? . -> . any)]{ ((any/c . -> . any) boolean? any/c . -> . any)]{
A parameter that serves as a hook for evaluation. The evaluator to use A parameter that serves as a hook for evaluation. The evaluator to use
is supplied as the first argument to the parameter's value, and the is supplied as the first argument to the parameter's value.
second argument is the form to evaluate. The last argument is The second argument is @racket[#t] if exceptions are being captured (to display
@racket[#t] if exceptions are being captured (to display exception exception results), @racket[#f] otherwise.
results), @racket[#f] otherwise.} The third argument is the form to evaluate.}
@defparam[scribble-exn->string handler (-> (or/c exn? any/c) string?)]{ @defparam[scribble-exn->string handler (-> (or/c exn? any/c) string?)]{
A parameter that controls how exceptions are rendered by A parameter that controls how exceptions are rendered by

View File

@ -55,16 +55,19 @@ includes a citation to section 8 of the Racket reference.
(code:line #:render-date-in-bib render-date-expr) (code:line #:render-date-in-bib render-date-expr)
(code:line #:render-date-in-cite render-date-expr) (code:line #:render-date-in-cite render-date-expr)
(code:line #:date<? date-compare-expr) (code:line #:date<? date-compare-expr)
(code:line #:date=? date-compare-expr)]) (code:line #:date=? date-compare-expr)
(code:line #:cite-author cite-author-id)
(code:line #:cite-year cite-year-id)])
#:contracts ([style-expr (or/c author+date-style number-style)] #:contracts ([style-expr (or/c author+date-style number-style)]
[spaces-expr number] [spaces-expr number?]
[disambiguator-expr (or/c #f (-> exact-nonnegative-integer? element?))] [disambiguator-expr (or/c #f (-> exact-nonnegative-integer? element?))]
[render-date-expr (or/c #f (-> date? element?))] [render-date-expr (or/c #f (-> date? element?))]
[date-compare-expr (or/c #f (-> date? date? boolean?))])]{ [date-compare-expr (or/c #f (-> date? date? boolean?))])]{
Binds @racket[~cite-id], @racket[citet-id], and Binds @racket[~cite-id], @racket[citet-id],
@racket[generate-bibliography-id], which share state to accumulate and @racket[generate-bibliography-id], (optionally)
render citations. @racket[cite-author-id], and (optionally) @racket[cite-year-id] which
share state to accumulate and render citations.
The function bound to @racket[~cite-id] produces a citation referring The function bound to @racket[~cite-id] produces a citation referring
to one or more bibliography entries with a preceding non-breaking to one or more bibliography entries with a preceding non-breaking
@ -90,6 +93,30 @@ section for the bibliography. It has the contract
(->* () (#:tag string? #:sec-title string?) part?) (->* () (#:tag string? #:sec-title string?) part?)
] ]
If provided, the function bound to @racket[cite-author-id]
generates an element containing the authors of a paper.
@racketblock[
(->* (bib?) element?)
]
If provided, the function bound to @racket[cite-year-id]
generates an element containing the year the paper was
published in, or possibly multiple years if multiple papers
are provided.
@racketblock[
(->* (bib?) #:rest (listof? bib?) element?)
]
The functions bound to @racket[cite-author-id] and
@racket[cite-year-id] make it possible to create possessive textual citations.
@codeblock[#:keep-lang-line? #f]|{
#lang scribble/base
@citeauthor[scribble-cite]'s (@citeyear[scribble-cite]) autobib library is pretty nifty.
}|
The default value for the @racket[#:tag] argument is @racket["doc-bibliography"] The default value for the @racket[#:tag] argument is @racket["doc-bibliography"]
and for @racket[#:sec-title] is @racket["Bibliography"]. and for @racket[#:sec-title] is @racket["Bibliography"].
@ -110,7 +137,10 @@ to add an extra element after the date; the default disambiguator adds
ambiguous raises an exception. Date comparison is controlled by ambiguous raises an exception. Date comparison is controlled by
@racket[date-compare-expr]s. Dates in citations and dates in the @racket[date-compare-expr]s. Dates in citations and dates in the
bibliography may be rendered differently, as specified by the bibliography may be rendered differently, as specified by the
optionally given @racket[render-date-expr] functions.} optionally given @racket[render-date-expr] functions.
@history[#:changed "1.22" "Add optional ids for author-name and author-year"]
}
@deftogether[( @deftogether[(
@defthing[author+date-style any/c] @defthing[author+date-style any/c]
@ -182,9 +212,10 @@ describing a paper's location within a journal.}
element?]{ element?]{
Combines elements to generate an element that is suitable for Combines elements to generate an element that is suitable for
describing a book's location.} describing a book's location.
Both arguments are optional, but at least one must be supplied.}
@defproc[(techrpt-location [#:institution institution edition any/c] @defproc[(techrpt-location [#:institution institution any/c]
[#:number number any/c]) [#:number number any/c])
element?]{ element?]{

View File

@ -23,4 +23,4 @@
(define pkg-authors '(mflatt eli)) (define pkg-authors '(mflatt eli))
(define version "1.21") (define version "1.22")

View File

@ -80,6 +80,8 @@
[CCSXML [CCSXML
(->* () () #:rest (listof pre-content?) (->* () () #:rest (listof pre-content?)
any/c)]) any/c)])
(provide
invisible-element-to-collect-for-acmart-extras)
(define-syntax-rule (defopts name ...) (define-syntax-rule (defopts name ...)
(begin (define-syntax (name stx) (begin (define-syntax (name stx)
@ -136,6 +138,9 @@
(make-css-addition (abs "acmart.css")) (make-css-addition (abs "acmart.css"))
(make-tex-addition (abs "acmart.tex"))))) (make-tex-addition (abs "acmart.tex")))))
(define invisible-element-to-collect-for-acmart-extras
(make-element (make-style "invisible-element-to-collect-for-acmart-extras" acmart-extras) '()))
;; ---------------------------------------- ;; ----------------------------------------
;; Abstracts: ;; Abstracts:
@ -289,7 +294,6 @@
(define (mk-inst name (define (mk-inst name
#:department? [department? department?] #:department? [department? department?]
#:level [level level]) #:level [level level])
(displayln department?)
(case department? (case department?
[(#f) (make-element (make-style "institution" command-props) [(#f) (make-element (make-style "institution" command-props)
(decode-content name))] (decode-content name))]

View File

@ -35,13 +35,17 @@
%% Right bracket \] Circumflex \^ Underscore \_ %% Right bracket \] Circumflex \^ Underscore \_
%% Grave accent \` Left brace \{ Vertical bar \| %% Grave accent \` Left brace \{ Vertical bar \|
%% Right brace \} Tilde \~} %% Right brace \} Tilde \~}
\NeedsTeXFormat{LaTeX2e} \NeedsTeXFormat{LaTeX2e}
\ProvidesClass{acmart} \ProvidesClass{acmart}
[2016/12/03 v1.25 Typesetting articles for Association of [2017/05/14 v1.39 Typesetting articles for Association of
Computing Machinery] Computing Machinery]
\def\@classname{acmart} \def\@classname{acmart}
\InputIfFileExists{acmart-preload-hook.tex}{%
\ClassWarning{\@classname}{%
I am loading acmart-preload-hook.tex. You are fully responsible
for any problems from now on.}}{}
\RequirePackage{xkeyval} \RequirePackage{xkeyval}
\RequirePackage{xstring}
\define@choicekey*+{acmart.cls}{format}[\ACM@format\ACM@format@nr]{% \define@choicekey*+{acmart.cls}{format}[\ACM@format\ACM@format@nr]{%
manuscript, acmsmall, acmlarge, acmtog, sigconf, siggraph, manuscript, acmsmall, acmlarge, acmtog, sigconf, siggraph,
sigplan, sigchi, sigchi-a}[manuscript]{}{% sigplan, sigchi, sigchi-a}[manuscript]{}{%
@ -83,16 +87,14 @@ Computing Machinery]
\fi}{\PackageError{\@classname}{Option authorversion can be either true or \fi}{\PackageError{\@classname}{Option authorversion can be either true or
false}} false}}
\ExecuteOptionsX{authorversion=false} \ExecuteOptionsX{authorversion=false}
\newif\if@ACM@natbib@override
\@ACM@natbib@overridefalse
\define@boolkey+{acmart.cls}[@ACM@]{natbib}[true]{% \define@boolkey+{acmart.cls}[@ACM@]{natbib}[true]{%
\@ACM@natbib@overridetrue
\if@ACM@natbib \if@ACM@natbib
\PackageInfo{\@classname}{Explicitly selecting natbib mode}% \PackageInfo{\@classname}{Explicitly selecting natbib mode}%
\else \else
\PackageInfo{\@classname}{Explicitly deselecting natbib mode}% \PackageInfo{\@classname}{Explicitly deselecting natbib mode}%
\fi}{\PackageError{\@classname}{Option natbib can be either true or \fi}{\PackageError{\@classname}{Option natbib can be either true or
false}} false}}
\ExecuteOptionsX{natbib=true}
\define@boolkey+{acmart.cls}[@ACM@]{anonymous}[true]{% \define@boolkey+{acmart.cls}[@ACM@]{anonymous}[true]{%
\if@ACM@anonymous \if@ACM@anonymous
\PackageInfo{\@classname}{Using anonymous mode}% \PackageInfo{\@classname}{Using anonymous mode}%
@ -101,6 +103,24 @@ Computing Machinery]
\fi}{\PackageError{\@classname}{Option anonymous can be either true or \fi}{\PackageError{\@classname}{Option anonymous can be either true or
false}} false}}
\ExecuteOptionsX{anonymous=false} \ExecuteOptionsX{anonymous=false}
\define@boolkey+{acmart.cls}[@ACM@]{timestamp}[true]{%
\if@ACM@timestamp
\PackageInfo{\@classname}{Using timestamp mode}%
\else
\PackageInfo{\@classname}{Not using timestamp mode}%
\fi}{\PackageError{\@classname}{Option timestamp can be either true or
false}}
\ExecuteOptionsX{timestamp=false}
\define@boolkey+{acmart.cls}[@ACM@]{authordraft}[true]{%
\if@ACM@authordraft
\PackageInfo{\@classname}{Using authordraft mode}%
\@ACM@timestamptrue
\@ACM@reviewtrue
\else
\PackageInfo{\@classname}{Not using authordraft mode}%
\fi}{\PackageError{\@classname}{Option authordraft can be either true or
false}}
\ExecuteOptionsX{authordraft=false}
\def\ACM@fontsize{} \def\ACM@fontsize{}
\DeclareOptionX{9pt}{\edef\ACM@fontsize{\CurrentOption}} \DeclareOptionX{9pt}{\edef\ACM@fontsize{\CurrentOption}}
\DeclareOptionX{10pt}{\edef\ACM@fontsize{\CurrentOption}} \DeclareOptionX{10pt}{\edef\ACM@fontsize{\CurrentOption}}
@ -113,6 +133,11 @@ Computing Machinery]
\newif\if@ACM@manuscript \newif\if@ACM@manuscript
\newif\if@ACM@journal \newif\if@ACM@journal
\newif\if@ACM@sigchiamode \newif\if@ACM@sigchiamode
\ifnum\ACM@format@nr=5\relax % siggraph
\ClassWarning{\@classname}{The format `siggraph' is now obsolete.
I am switching to sigconf.}
\setkeys{acmart.cls}{format=sigconf}
\fi
\ifnum\ACM@format@nr=0\relax \ifnum\ACM@format@nr=0\relax
\@ACM@manuscripttrue \@ACM@manuscripttrue
\else \else
@ -140,9 +165,6 @@ Computing Machinery]
\@ACM@journalfalse \@ACM@journalfalse
\@ACM@sigchiamodetrue \@ACM@sigchiamodetrue
\fi \fi
\if@ACM@natbib@override\else
\@ACM@natbibtrue
\fi
\ifx\ACM@fontsize\@empty \ifx\ACM@fontsize\@empty
\ifcase\ACM@format@nr \ifcase\ACM@format@nr
\relax % manuscript \relax % manuscript
@ -158,7 +180,7 @@ Computing Machinery]
\or % siggraph \or % siggraph
\def\ACM@fontsize{9pt}% \def\ACM@fontsize{9pt}%
\or % sigplan \or % sigplan
\def\ACM@fontsize{9pt}% \def\ACM@fontsize{10pt}%
\or % sigchi \or % sigchi
\def\ACM@fontsize{10pt}% \def\ACM@fontsize{10pt}%
\or % sigchi-a \or % sigchi-a
@ -257,7 +279,7 @@ Computing Machinery]
\newcommand{\bibstyle@acmauthoryear}{% \newcommand{\bibstyle@acmauthoryear}{%
\setcitestyle{% \setcitestyle{%
authoryear,% authoryear,%
open={(},close={)},citesep={;},% open={[},close={]},citesep={;},%
aysep={},yysep={,},% aysep={},yysep={,},%
notesep={, }}} notesep={, }}}
\newcommand{\bibstyle@acmnumeric}{% \newcommand{\bibstyle@acmnumeric}{%
@ -265,7 +287,9 @@ Computing Machinery]
numbers,sort&compress,% numbers,sort&compress,%
open={[},close={]},citesep={,},% open={[},close={]},citesep={,},%
notesep={, }}} notesep={, }}}
\if@ACM@natbib
\citestyle{acmnumeric} \citestyle{acmnumeric}
\fi
\def\@startsection#1#2#3#4#5#6{% \def\@startsection#1#2#3#4#5#6{%
\if@noskipsec \leavevmode \fi \if@noskipsec \leavevmode \fi
\par \par
@ -283,6 +307,7 @@ Computing Machinery]
{\@ssect{#3}{#4}{#5}{#6}}% {\@ssect{#3}{#4}{#5}{#6}}%
{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}} {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
\def\@sect#1#2#3#4#5#6[#7]#8{% \def\@sect#1#2#3#4#5#6[#7]#8{%
\edef\@toclevel{\ifnum#2=\@m 0\else\number#2\fi}%
\ifnum #2>\c@secnumdepth \ifnum #2>\c@secnumdepth
\let\@svsec\@empty \let\@svsec\@empty
\else \else
@ -297,6 +322,9 @@ Computing Machinery]
\interlinepenalty \@M #8\@@par}% \interlinepenalty \@M #8\@@par}%
\endgroup \endgroup
\csname #1mark\endcsname{#7}% \csname #1mark\endcsname{#7}%
\ifnum #2>\c@secnumdepth \else
\@tochangmeasure{\csname the#1\endcsname}%
\fi
\addcontentsline{toc}{#1}{% \addcontentsline{toc}{#1}{%
\ifnum #2>\c@secnumdepth \else \ifnum #2>\c@secnumdepth \else
\protect\numberline{\csname the#1\endcsname}% \protect\numberline{\csname the#1\endcsname}%
@ -307,6 +335,9 @@ Computing Machinery]
#6{\hskip #3\relax #6{\hskip #3\relax
\@svsec #8}% \@svsec #8}%
\csname #1mark\endcsname{#7}% \csname #1mark\endcsname{#7}%
\ifnum #2>\c@secnumdepth \else
\@tochangmeasure{\csname the#1\endcsname\space}%
\fi
\addcontentsline{toc}{#1}{% \addcontentsline{toc}{#1}{%
\ifnum #2>\c@secnumdepth \else \ifnum #2>\c@secnumdepth \else
\protect\numberline{\csname the#1\endcsname}% \protect\numberline{\csname the#1\endcsname}%
@ -351,9 +382,30 @@ Computing Machinery]
\def\@svsechd{#4{\hskip #1\relax #5}}% \def\@svsechd{#4{\hskip #1\relax #5}}%
\fi \fi
\@xsect{#3}} \@xsect{#3}}
\def\@starttoc#1#2{\begingroup
\setTrue{#1}%
\par\removelastskip\vskip\z@skip
\@startsection{section}\@M\z@{\linespacing\@plus\linespacing}%
{.5\linespacing}{\centering\contentsnamefont}{#2}%
\@input{\jobname.#1}%
\if@filesw
\@xp\newwrite\csname tf@#1\endcsname
\immediate\@xp\openout\csname tf@#1\endcsname \jobname.#1\relax
\fi
\global\@nobreakfalse \endgroup
\addvspace{32\p@\@plus14\p@}%
}
\def\l@subsection{\@tocline{2}{0pt}{1pc}{3pc}{}}
\def\l@subsubsection{\@tocline{2}{0pt}{1pc}{5pc}{}}
\let\@footnotemark@nolink\@footnotemark \let\@footnotemark@nolink\@footnotemark
\let\@footnotetext@nolink\@footnotetext \let\@footnotetext@nolink\@footnotetext
\RequirePackage[bookmarksnumbered]{hyperref} \RequirePackage[bookmarksnumbered,unicode]{hyperref}
\pdfstringdefDisableCommands{%
\def\unskip{}%
\def\textbullet{- }%
\def\textrightarrow{ -> }%
\def\footnotemark{}%
}
\urlstyle{rm} \urlstyle{rm}
\ifcase\ACM@format@nr \ifcase\ACM@format@nr
\relax % manuscript \relax % manuscript
@ -385,14 +437,17 @@ Computing Machinery]
\let\citeyearNP\citeyear \let\citeyearNP\citeyear
\let\citeyear\citeyearpar \let\citeyear\citeyearpar
\let\citeNP\citealt \let\citeNP\citealt
\def\shortcite#1{\citeyear{#1}}
\DeclareRobustCommand\citeA \DeclareRobustCommand\citeA
{\begingroup\NAT@swafalse {\begingroup\NAT@swafalse
\let\NAT@ctype\@ne\NAT@partrue\NAT@fullfalse\NAT@open\NAT@citetp}% \let\NAT@ctype\@ne\NAT@partrue\NAT@fullfalse\NAT@open\NAT@citetp}%
\providecommand\newblock{}% \providecommand\newblock{}%
\else \else
\providecommand\citename[1]{#1} \AtBeginDocument{%
\let\shortcite\cite%
\providecommand\citename[1]{#1}}
\fi \fi
\newcommand\shortcite[2][]{%
\ifNAT@numbers\cite[#1]{#2}\else\citeyear[#1]{#2}\fi}
\def\bibliographystyle#1{% \def\bibliographystyle#1{%
\ifx\@begindocumenthook\@undefined\else \ifx\@begindocumenthook\@undefined\else
\expandafter\AtBeginDocument \expandafter\AtBeginDocument
@ -409,54 +464,70 @@ Computing Machinery]
\definecolor[named]{ACMGreen}{cmyk}{0.20,0,1,0.19} \definecolor[named]{ACMGreen}{cmyk}{0.20,0,1,0.19}
\definecolor[named]{ACMPurple}{cmyk}{0.55,1,0,0.15} \definecolor[named]{ACMPurple}{cmyk}{0.55,1,0,0.15}
\definecolor[named]{ACMDarkBlue}{cmyk}{1,0.58,0,0.21} \definecolor[named]{ACMDarkBlue}{cmyk}{1,0.58,0,0.21}
\if@ACM@authordraft
\RequirePackage{draftwatermark}
\SetWatermarkFontSize{0.5in}
\SetWatermarkColor[gray]{.9}
\SetWatermarkText{\parbox{12em}{\centering
Unpublished working draft\\
Not for distribution}}
\fi
\RequirePackage{geometry} \RequirePackage{geometry}
\ifcase\ACM@format@nr \ifcase\ACM@format@nr
\relax % manuscript \relax % manuscript
\geometry{letterpaper,head=1pc}% \geometry{letterpaper,head=13pt,
marginparwidth=6pc}%
\or % acmsmall \or % acmsmall
\geometry{twoside=true, \geometry{twoside=true,
includeheadfoot, head=1pc, foot=2pc, includeheadfoot, head=13pt, foot=2pc,
paperwidth=6.75in, paperheight=10in, paperwidth=6.75in, paperheight=10in,
top=58pt, bottom=44pt, inner=46pt, outer=46pt top=58pt, bottom=44pt, inner=46pt, outer=46pt,
marginparwidth=2pc
}% }%
\or % acmlarge \or % acmlarge
\geometry{twoside=true, head=1pc, foot=2pc, \geometry{twoside=true, head=13pt, foot=2pc,
paperwidth=8.5in, paperheight=11in, paperwidth=8.5in, paperheight=11in,
includeheadfoot, includeheadfoot,
top=78pt, bottom=114pt, inner=81pt, outer=81pt top=78pt, bottom=114pt, inner=81pt, outer=81pt,
marginparwidth=4pc
}% }%
\or % acmtog \or % acmtog
\geometry{twoside=true, head=1pc, foot=2pc, \geometry{twoside=true, head=13pt, foot=2pc,
paperwidth=8.5in, paperheight=11in, paperwidth=8.5in, paperheight=11in,
includeheadfoot, columnsep=24pt, includeheadfoot, columnsep=24pt,
top=52pt, bottom=75pt, inner=52pt, outer=52pt top=52pt, bottom=75pt, inner=52pt, outer=52pt,
marginparwidth=2pc
}% }%
\or % sigconf \or % sigconf
\geometry{twoside=true, head=1pc, \geometry{twoside=true, head=13pt,
paperwidth=8.5in, paperheight=11in, paperwidth=8.5in, paperheight=11in,
includeheadfoot, columnsep=2pc, includeheadfoot, columnsep=2pc,
top=57pt, bottom=73pt, inner=54pt, outer=54pt top=57pt, bottom=73pt, inner=54pt, outer=54pt,
marginparwidth=2pc
}% }%
\or % siggraph \or % siggraph
\geometry{twoside=true, head=1pc, \geometry{twoside=true, head=13pt,
paperwidth=8.5in, paperheight=11in, paperwidth=8.5in, paperheight=11in,
includeheadfoot, columnsep=2pc, includeheadfoot, columnsep=2pc,
top=57pt, bottom=73pt, inner=54pt, outer=54pt top=57pt, bottom=73pt, inner=54pt, outer=54pt,
marginparwidth=2pc
}% }%
\or % sigplan \or % sigplan
\geometry{twoside=true, head=1pc, \geometry{twoside=true, head=13pt,
paperwidth=8.5in, paperheight=11in, paperwidth=8.5in, paperheight=11in,
includeheadfoot=false, columnsep=2pc, includeheadfoot=false, columnsep=2pc,
top=1in, bottom=1in, inner=0.75in, outer=0.75in top=1in, bottom=1in, inner=0.75in, outer=0.75in,
marginparwidth=2pc
}% }%
\or % sigchi \or % sigchi
\geometry{twoside=true, head=1pc, \geometry{twoside=true, head=13pt,
paperwidth=8.5in, paperheight=11in, paperwidth=8.5in, paperheight=11in,
includeheadfoot, columnsep=2pc, includeheadfoot, columnsep=2pc,
top=66pt, bottom=73pt, inner=54pt, outer=54pt top=66pt, bottom=73pt, inner=54pt, outer=54pt,
marginparwidth=2pc
}% }%
\or % sigchi-a \or % sigchi-a
\geometry{twoside=false, head=1pc, \geometry{twoside=false, head=13pt,
paperwidth=11in, paperheight=8.5in, paperwidth=11in, paperheight=8.5in,
includeheadfoot, marginparsep=72pt, includeheadfoot, marginparsep=72pt,
marginparwidth=170pt, columnsep=20pt, marginparwidth=170pt, columnsep=20pt,
@ -479,6 +550,7 @@ Computing Machinery]
\or % sigchi \or % sigchi
\or % sigchi-a \or % sigchi-a
\fi \fi
\setlength\normalparindent{\parindent}
\def\copyrightpermissionfootnoterule{\kern-3\p@ \def\copyrightpermissionfootnoterule{\kern-3\p@
\hrule \@width \columnwidth \kern 2.6\p@} \hrule \@width \columnwidth \kern 2.6\p@}
\RequirePackage{manyfoot} \RequirePackage{manyfoot}
@ -524,6 +596,14 @@ Computing Machinery]
\rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}% \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
\color@endgroup}} \color@endgroup}}
\def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}} \def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}
\def\@textbottom{\vskip \z@ \@plus 1pt}
\let\@texttop\relax
\RequirePackage{iftex}
\ifPDFTeX
\input{glyphtounicode}
\pdfgentounicode=1
\fi
\RequirePackage{cmap}
\newif\if@ACM@newfonts \newif\if@ACM@newfonts
\@ACM@newfontstrue \@ACM@newfontstrue
\IfFileExists{libertine.sty}{}{\ClassWarning{\@classname}{You do not \IfFileExists{libertine.sty}{}{\ClassWarning{\@classname}{You do not
@ -535,11 +615,10 @@ Computing Machinery]
have newtxmath package installed. Please upgrade your have newtxmath package installed. Please upgrade your
TeX}\@ACM@newfontsfalse} TeX}\@ACM@newfontsfalse}
\if@ACM@newfonts \if@ACM@newfonts
\RequirePackage[tt=false]{libertine} \RequirePackage[tt=false, type1=true]{libertine}
\RequirePackage[varqu]{zi4} \RequirePackage[varqu]{zi4}
\RequirePackage[libertine]{newtxmath} \RequirePackage[libertine]{newtxmath}
\else \RequirePackage[T1]{fontenc}
\RequirePackage{textcomp}
\fi \fi
\if@ACM@sigchiamode \if@ACM@sigchiamode
\renewcommand{\familydefault}{\sfdefault} \renewcommand{\familydefault}{\sfdefault}
@ -620,10 +699,50 @@ Computing Machinery]
\or % sigchi \or % sigchi
\or % sigchi-a \or % sigchi-a
\fi \fi
\renewcommand{\descriptionlabel}[1]{\hspace\labelsep \upshape\bfseries #1} \newdimen\@ACM@labelwidth
\AtBeginDocument{%
\setlength\labelsep{4pt}
\setlength{\@ACM@labelwidth}{6.5pt}
%% First-level list: when beginning after the first line of an
%% indented paragraph or ending before an indented paragraph, labels
%% should not hang to the left of the preceding/following text.
\setlength\leftmargini{\z@}
\addtolength\leftmargini{\parindent}
\addtolength\leftmargini{2\labelsep}
\addtolength\leftmargini{\@ACM@labelwidth}
%% Second-level and higher lists.
\setlength\leftmarginii{\z@}
\addtolength\leftmarginii{0.5\labelsep}
\addtolength\leftmarginii{\@ACM@labelwidth}
\setlength\leftmarginiii{\leftmarginii}
\setlength\leftmarginiv{\leftmarginiii}
\setlength\leftmarginv{\leftmarginiv}
\setlength\leftmarginvi{\leftmarginv}
\@listi}
\newskip\listisep
\listisep\smallskipamount
\def\@listI{\leftmargin\leftmargini
\labelwidth\leftmargini \advance\labelwidth-\labelsep
\listparindent\z@
\topsep\listisep}
\let\@listi\@listI
\def\@listii{\leftmargin\leftmarginii
\labelwidth\leftmarginii \advance\labelwidth-\labelsep
\topsep\z@skip}
\def\@listiii{\leftmargin\leftmarginiii
\labelwidth\leftmarginiii \advance\labelwidth-\labelsep}
\def\@listiv{\leftmargin\leftmarginiv
\labelwidth\leftmarginiv \advance\labelwidth-\labelsep}
\def\@listv{\leftmargin\leftmarginv
\labelwidth\leftmarginv \advance\labelwidth-\labelsep}
\def\@listvi{\leftmargin\leftmarginvi
\labelwidth\leftmarginvi \advance\labelwidth-\labelsep}
\renewcommand{\descriptionlabel}[1]{\upshape\bfseries #1}
\renewenvironment{description}{\list{}{% \renewenvironment{description}{\list{}{%
\itemindent-12\p@ \labelwidth\@ACM@labelwidth
\labelwidth\z@ \let\makelabel\descriptionlabel}% \let\makelabel\descriptionlabel}%
}{ }{
\endlist \endlist
} }
@ -638,7 +757,9 @@ Computing Machinery]
JERIC,% JERIC,%
JETC,% JETC,%
JOCCH,% JOCCH,%
PACMHCI,%
PACMPL,% PACMPL,%
POMACS,%
TAAS,% TAAS,%
TACCESS,% TACCESS,%
TACO,% TACO,%
@ -689,9 +810,9 @@ Computing Machinery]
\def\@journalNameShort{ACM Comput. Surv.}% \def\@journalNameShort{ACM Comput. Surv.}%
\def\@permissionCodeOne{0360-0300}% \def\@permissionCodeOne{0360-0300}%
\or % IMWUT \or % IMWUT
\def\@journalName{PACM on Interactive, Mobile, Wearable and \def\@journalName{Proceedings of the ACM on Interactive, Mobile,
Ubiquitous Technologies}% Wearable and Ubiquitous Technologies}%
\def\@journalNameShort{PACM Interact. Mob. Wearable Ubiquitous Technol.}% \def\@journalNameShort{Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.}%
\def\@permissionCodeOne{2474-9567}% \def\@permissionCodeOne{2474-9567}%
\or % JACM \or % JACM
\def\@journalName{Journal of the ACM}% \def\@journalName{Journal of the ACM}%
@ -716,10 +837,18 @@ Computing Machinery]
\or % JOCCH \or % JOCCH
\def\@journalName{ACM Journal on Computing and Cultural Heritage}% \def\@journalName{ACM Journal on Computing and Cultural Heritage}%
\def\@journalName{ACM J. Comput. Cult. Herit.}% \def\@journalName{ACM J. Comput. Cult. Herit.}%
\or % PACMHCI
\def\@journalName{Proceedings of the ACM on Human-Computer Interaction}%
\def\@journalName{Proc. ACM Hum.-Comput. Interact.}%
\def\@permissionCodeOne{2573-0142}%
\or % PACMPL \or % PACMPL
\def\@journalName{PACM on Programming Languages}% \def\@journalName{Proceedings of the ACM on Programming Languages}%
\def\@journalName{PACM Progr. Lang.}% \def\@journalName{Proc. ACM Program. Lang.}%
\def\@permissionCodeOne{2475-1421}% \def\@permissionCodeOne{2475-1421}%
\or % POMACS
\def\@journalName{Proceedings of the ACM on Measurement and Analysis of Computing Systems}%
\def\@journalName{Proc. ACM Meas. Anal. Comput. Syst.}%
\def\@permissionCodeOne{2476-1249}%
\or % TAAS \or % TAAS
\def\@journalName{ACM Transactions on Autonomous and Adaptive Systems}% \def\@journalName{ACM Transactions on Autonomous and Adaptive Systems}%
\def\@journalNameShort{ACM Trans. Autonom. Adapt. Syst.}% \def\@journalNameShort{ACM Trans. Autonom. Adapt. Syst.}%
@ -940,6 +1069,20 @@ Computing Machinery]
\if@ACM@anonymous\else \if@ACM@anonymous\else
\g@addto@macro\addresses{\affiliation{#1}{#2}}% \g@addto@macro\addresses{\affiliation{#1}{#2}}%
\fi} \fi}
\define@boolkey+{@ACM@affiliation@}[@ACM@affiliation@]{obeypunctuation}%
[true]{}{\ClassError{\@classname}{obeypunctuation must be true or false}}
\def\additionalaffiliation#1{\authornote{\@additionalaffiliation{#1}}}
\def\@additionalaffiliation#1{\bgroup
\def\position##1{\ignorespaces}%
\def\institution##1{##1\ignorespaces}%
\def\department{\@ifnextchar[{\@department}{\@department[]}}%
\def\@department[##1]##2{\unskip, ##2\ignorespaces}%
\let\streetaddress\position
\let\city\position
\let\state\position
\let\postcode\position
\let\country\position
Also with #1\unskip.\egroup}
\renewcommand{\email}[2][]{% \renewcommand{\email}[2][]{%
\if@ACM@anonymous\else \if@ACM@anonymous\else
\g@addto@macro\addresses{\email{#1}{#2}}% \g@addto@macro\addresses{\email{#1}{#2}}%
@ -967,10 +1110,16 @@ Computing Machinery]
\def\@authornotes{} \def\@authornotes{}
\def\authornote#1{% \def\authornote#1{%
\if@ACM@anonymous\else \if@ACM@anonymous\else
\g@addto@macro\addresses{\@authornotemark} \g@addto@macro\addresses{\@authornotemark}%
\g@addto@macro\@authornotes{% \g@addto@macro\@authornotes{%
\stepcounter{footnote}\footnotetext{#1}}% \stepcounter{footnote}\footnotetext{#1}}%
\fi} \fi}
\newcommand\authornotemark[1][\relax]{%
\ifx#1\relax\relax\relax
\g@addto@macro\addresses{\@authornotemark}%
\else
\g@addto@macro\addresses{\@@authornotemark{#1}}%
\fi}
\def\acmVolume#1{\def\@acmVolume{#1}} \def\acmVolume#1{\def\@acmVolume{#1}}
\acmVolume{1} \acmVolume{1}
\def\acmNumber#1{\def\@acmNumber{#1}} \def\acmNumber#1{\def\@acmNumber{#1}}
@ -980,15 +1129,17 @@ Computing Machinery]
\def\acmArticleSeq#1{\def\@acmArticleSeq{#1}} \def\acmArticleSeq#1{\def\@acmArticleSeq{#1}}
\acmArticleSeq{\@acmArticle} \acmArticleSeq{\@acmArticle}
\def\acmYear#1{\def\@acmYear{#1}} \def\acmYear#1{\def\@acmYear{#1}}
\acmYear{2016} \acmYear{\the\year}
\def\acmMonth#1{\def\@acmMonth{#1}} \def\acmMonth#1{\def\@acmMonth{#1}}
\acmMonth{1} \acmMonth{\the\month}
\def\@acmPubDate{\ifcase\@acmMonth\or \def\@acmPubDate{\ifcase\@acmMonth\or
January\or February\or March\or April\or May\or June\or January\or February\or March\or April\or May\or June\or
July\or August\or September\or October\or November\or July\or August\or September\or October\or November\or
December\fi~\@acmYear} December\fi~\@acmYear}
\def\acmPrice#1{\def\@acmPrice{#1}} \def\acmPrice#1{\def\@acmPrice{#1}}
\acmPrice{15.00} \acmPrice{15.00}
\def\acmSubmissionID#1{\def\@acmSubmissionID{#1}}
\acmSubmissionID{}
\def\acmISBN#1{\def\@acmISBN{#1}} \def\acmISBN#1{\def\@acmISBN{#1}}
\acmISBN{978-x-xxxx-xxxx-x/YY/MM} \acmISBN{978-x-xxxx-xxxx-x/YY/MM}
\def\acmDOI#1{\def\@acmDOI{#1}} \def\acmDOI#1{\def\@acmDOI{#1}}
@ -1012,20 +1163,20 @@ Computing Machinery]
\def\@acmBadgeL@image{} \def\@acmBadgeL@image{}
\def\startPage#1{\def\@startPage{#1}} \def\startPage#1{\def\@startPage{#1}}
\startPage{} \startPage{}
\def\terms#1{\def\@terms{#1}} \def\terms#1{\ClassWarning{\@classname}{The command \string\terms{} is
\terms{} obsolete. I am going to ignore it}}
\def\keywords#1{\def\@keywords{#1}} \def\keywords#1{\def\@keywords{#1}}
\keywords{} \keywords{}
\renewenvironment{abstract}{\Collect@Body\@saveabstract}{} \renewenvironment{abstract}{\Collect@Body\@saveabstract}{}
\long\def\@saveabstract#1{\long\gdef\@abstract{#1}} \long\def\@saveabstract#1{\long\gdef\@abstract{#1}}
\@saveabstract{} \@saveabstract{}
\long\def\@lempty{} \long\def\@lempty{}
\define@boolkey+{@ACM@topmatter@}[@ACM@]{printcss}[true]{% \define@boolkey+{@ACM@topmatter@}[@ACM@]{printccs}[true]{%
\if@ACM@printcss \if@ACM@printccs
\ClassInfo{\@classname}{Printing CSS}% \ClassInfo{\@classname}{Printing CCS}%
\else \else
\ClassInfo{\@classname}{Suppressing CSS}% \ClassInfo{\@classname}{Suppressing CCS}%
\fi}{\ClassError{\@classname}{printcss must be true or false}} \fi}{\ClassError{\@classname}{printccs must be true or false}}
\define@boolkey+{@ACM@topmatter@}[@ACM@]{printacmref}[true]{% \define@boolkey+{@ACM@topmatter@}[@ACM@]{printacmref}[true]{%
\if@ACM@printacmref \if@ACM@printacmref
\ClassInfo{\@classname}{Printing bibformat}% \ClassInfo{\@classname}{Printing bibformat}%
@ -1038,8 +1189,12 @@ Computing Machinery]
\else \else
\ClassInfo{\@classname}{Suppressing folios}% \ClassInfo{\@classname}{Suppressing folios}%
\fi}{\ClassError{\@classname}{printfolios must be true or false}} \fi}{\ClassError{\@classname}{printfolios must be true or false}}
\define@cmdkey{@ACM@topmatter@}[@ACM@]{authorsperrow}[0]{%
\IfInteger{#1}{\ClassInfo{\@classname}{Setting authorsperrow to
#1}}{\ClassWarning{\@classname}{Parameter authorsperrow must be
numerical. Ignoring the input #1}\gdef\@ACM@authorsperrow{0}}}
\def\settopmatter#1{\setkeys{@ACM@topmatter@}{#1}} \def\settopmatter#1{\setkeys{@ACM@topmatter@}{#1}}
\settopmatter{printcss=true, printacmref=true} \settopmatter{printccs=true, printacmref=true}
\if@ACM@manuscript \if@ACM@manuscript
\settopmatter{printfolios=true} \settopmatter{printfolios=true}
\else \else
@ -1049,6 +1204,7 @@ Computing Machinery]
\settopmatter{printfolios=false} \settopmatter{printfolios=false}
\fi \fi
\fi \fi
\settopmatter{authorsperrow=0}
\def\@received{} \def\@received{}
\newcommand\received[2][]{\def\@tempa{#1}% \newcommand\received[2][]{\def\@tempa{#1}%
\ifx\@tempa\@empty \ifx\@tempa\@empty
@ -1073,13 +1229,14 @@ Computing Machinery]
\let\@concepts\@empty \let\@concepts\@empty
\newcommand\ccsdesc[2][100]{% \newcommand\ccsdesc[2][100]{%
\ccsdesc@parse#1~#2~} \ccsdesc@parse#1~#2~}
\RequirePackage{textcomp}
\def\ccsdesc@parse#1~#2~#3~{% \def\ccsdesc@parse#1~#2~#3~{%
\expandafter\ifx\csname CCS@#2\endcsname\relax \expandafter\ifx\csname CCS@#2\endcsname\relax
\expandafter\gdef\csname CCS@#2\endcsname{\textbullet\textbf{#2} $\to$ }% \expandafter\gdef\csname CCS@#2\endcsname{\textbullet\ \textbf{#2} \textrightarrow\ }%
\g@addto@macro{\@concepts}{\csname CCS@#2\endcsname}\fi \g@addto@macro{\@concepts}{\csname CCS@#2\endcsname}\fi
\expandafter\g@addto@macro\expandafter{\csname CCS@#2\endcsname}{% \expandafter\g@addto@macro\expandafter{\csname CCS@#2\endcsname}{%
\ifnum#1>499\textbf{#3; }\else \ifnum#1>499\textbf{#3}; \else
\ifnum#1>299\textit{#3; }\else \ifnum#1>299\textit{#3}; \else
#3; \fi\fi}} #3; \fi\fi}}
\newif\if@printcopyright \newif\if@printcopyright
\@printcopyrighttrue \@printcopyrighttrue
@ -1104,11 +1261,13 @@ Computing Machinery]
\fi \fi
\ifnum\acm@copyrightmode=3\relax % rightsretained \ifnum\acm@copyrightmode=3\relax % rightsretained
\@acmownedfalse \@acmownedfalse
\acmPrice{}%
\fi \fi
\ifnum\acm@copyrightmode=4\relax % usgov \ifnum\acm@copyrightmode=4\relax % usgov
\@printpermissiontrue \@printpermissiontrue
\@printcopyrightfalse \@printcopyrightfalse
\@acmownedfalse \@acmownedfalse
\acmPrice{}%
\fi \fi
\ifnum\acm@copyrightmode=6\relax % cagov \ifnum\acm@copyrightmode=6\relax % cagov
\@acmownedfalse \@acmownedfalse
@ -1130,32 +1289,32 @@ Computing Machinery]
\def\@copyrightowner{% \def\@copyrightowner{%
\ifcase\acm@copyrightmode\relax % none \ifcase\acm@copyrightmode\relax % none
\or % acmcopyright \or % acmcopyright
ACM\@. Association for Computing Machinery.
\or % acmlicensed \or % acmlicensed
Copyright held by the owner/author(s). Publication rights licensed to Copyright held by the owner/author(s). Publication rights licensed to
ACM\@. Association for Computing Machinery.
\or % rightsretained \or % rightsretained
Copyright held by the owner/author(s). Copyright held by the owner/author(s).
\or % usgov \or % usgov
\or % usgovmixed \or % usgovmixed
ACM\@. Association for Computing Machinery.
\or % cagov \or % cagov
Crown in Right of Canada. Crown in Right of Canada.
\or %cagovmixed \or %cagovmixed
ACM\@. Association for Computing Machinery.
\or %licensedusgovmixed \or %licensedusgovmixed
Copyright held by the owner/author(s). Publication rights licensed to Copyright held by the owner/author(s). Publication rights licensed to
ACM\@. Association for Computing Machinery.
\or %licensedcagovmixed \or %licensedcagovmixed
Copyright held by the owner/author(s). Publication rights licensed to Copyright held by the owner/author(s). Publication rights licensed to
ACM\@. Association for Computing Machinery.
\or % othergov \or % othergov
ACM\@. Association for Computing Machinery.
\or % licensedothergov \or % licensedothergov
Copyright held by the owner/author(s). Publication rights licensed to Copyright held by the owner/author(s). Publication rights licensed to
ACM\@. Association for Computing Machinery.
\fi} \fi}
\def\@formatdoi#1{\url{http://dx.doi.org/#1}} \def\@formatdoi#1{\url{https://doi.org/#1}}
\def\@copyrightpermission{% \def\@copyrightpermission{%
\ifcase\acm@copyrightmode\relax % none \ifcase\acm@copyrightmode\relax % none
\or % acmcopyright \or % acmcopyright
@ -1282,8 +1441,9 @@ Computing Machinery]
\let\@footnotemark\@footnotemark@nolink \let\@footnotemark\@footnotemark@nolink
\let\@footnotetext\@footnotetext@nolink \let\@footnotetext\@footnotetext@nolink
\renewcommand\thefootnote{\@fnsymbol\c@footnote}% \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
\@topnum\z@ % this prevents figures from falling at the top of page \global\@topnum\z@ % this prevents floats from falling
% 1 % at the top of page 1
\global\@botnum\z@ % we do not want them to be on bottom either
\hsize=\textwidth \hsize=\textwidth
\def\@makefnmark{\hbox{\@textsuperscript{\@thefnmark}}}% \def\@makefnmark{\hbox{\@textsuperscript{\@thefnmark}}}%
\@mktitle\if@ACM@sigchiamode\else\@mkauthors\fi\@mkteasers \@mktitle\if@ACM@sigchiamode\else\@mkauthors\fi\@mkteasers
@ -1300,17 +1460,24 @@ Computing Machinery]
\footnotetextcopyrightpermission{% \footnotetextcopyrightpermission{%
\def\par{\let\par\@par}\parindent\z@\@setthanks}% \def\par{\let\par\@par}\parindent\z@\@setthanks}%
\fi \fi
\footnotetextcopyrightpermission{\parindent\z@\parskip0.1\baselineskip \footnotetextcopyrightpermission{%
\if@ACM@authordraft
\raisebox{-2ex}[\z@][\z@]{\makebox[0pt][l]{\large\bfseries
Unpublished
working draft. Not for distribution}}%
\color[gray]{0.9}%
\fi
\parindent\z@\parskip0.1\baselineskip
\if@ACM@authorversion\else \if@ACM@authorversion\else
\if@printpermission\@copyrightpermission\par\fi \if@printpermission\@copyrightpermission\par\fi
\fi \fi
\if@ACM@manuscript\else \if@ACM@manuscript\else
\if@ACM@journal\else % Print the conference short name \if@ACM@journal\else % Print the conference information
{\itshape \acmConference@shortname, \acmConference@venue}\par {\itshape \acmConference@shortname, \acmConference@date, \acmConference@venue}\par
\fi \fi
\fi \fi
\if@printcopyright \if@printcopyright
\copyright\ \@copyrightyear\ \@copyrightowner\ \copyright\ \@copyrightyear\ \@copyrightowner\\
\else \else
\@copyrightyear.\ \@copyrightyear.\
\fi \fi
@ -1333,29 +1500,25 @@ Computing Machinery]
\fi\\ \fi\\
\else \else
\if@ACM@journal \if@ACM@journal
\@permissionCodeOne/\@acmYear/\@acmMonth-ART\@acmArticle\ \@permissionCodeOne/\@acmYear/\@acmMonth-ART\@acmArticle
\$\@acmPrice\\ \ifx\@acmPrice\@empty\else\ \$\@acmPrice\fi\\
DOI: \nolinkurl{\@acmDOI}% \@formatdoi{\@acmDOI}%
\else % Conference \else % Conference
\@acmISBN ACM~ISBN~\@acmISBN
\ifx\@acmPrice\@empty.\else\dots\$\@acmPrice\fi\\ \ifx\@acmPrice\@empty.\else\dots\$\@acmPrice\fi\\
DOI: \nolinkurl{\@acmDOI}% \@formatdoi{\@acmDOI}%
\fi \fi
\fi \fi
\fi}% \fi}
\endgroup \endgroup
\setcounter{footnote}{0}% \setcounter{footnote}{0}%
\@mkabstract \@mkabstract
\if@ACM@printcss \if@ACM@printccs
\ifx\@concepts\@empty\else\bgroup \ifx\@concepts\@empty\else\bgroup
{\@specialsection{CCS Concepts}% {\@specialsection{CCS Concepts}%
\@concepts\par}\egroup \@concepts\par}\egroup
\fi \fi
\fi \fi
\if\@terms\@empty\else\bgroup
{\@specialsection{General Terms}%
\@terms\par}\egroup
\fi
\ifx\@keywords\@empty\else\bgroup \ifx\@keywords\@empty\else\bgroup
{\if@ACM@journal {\if@ACM@journal
\@specialsection{Additional Key Words and Phrases}% \@specialsection{Additional Key Words and Phrases}%
@ -1485,7 +1648,7 @@ Computing Machinery]
\or % sigchi-a \or % sigchi-a
\Huge\bfseries \Huge\bfseries
\fi} \fi}
\def\@subtitlefont{% \def\@subtitlefont{\normalsize
\ifcase\ACM@format@nr \ifcase\ACM@format@nr
\relax % manuscript \relax % manuscript
\mdseries \mdseries
@ -1573,27 +1736,29 @@ Computing Machinery]
\newbox\@ACM@commabox \newbox\@ACM@commabox
\def\@ACM@addtoaddress#1{% \def\@ACM@addtoaddress#1{%
\ifvmode\else \ifvmode\else
\if@ACM@affiliation@obeypunctuation\else
\setbox\@ACM@commabox=\hbox{, }% \setbox\@ACM@commabox=\hbox{, }%
\unskip\cleaders\copy\@ACM@commabox\hskip\wd\@ACM@commabox \unskip\cleaders\copy\@ACM@commabox\hskip\wd\@ACM@commabox
\fi \fi\fi
#1} #1}
\if@ACM@journal \if@ACM@journal
\let\position\@gobble \let\position\@gobble
\def\institution#1{#1\ignorespaces}% \def\institution#1{#1\ignorespaces}%
\let\department\@gobble \newcommand\department[2][0]{}%
\let\streetaddress\@gobble \let\streetaddress\@gobble
\let\city\@gobble \let\city\@gobble
\let\state\@gobble \let\state\@gobble
\let\postcode\@gobble \let\postcode\@gobble
\let\country\@gobble \let\country\@gobble
\else \else
\def\position#1{#1\par}% \def\position#1{\if@ACM@affiliation@obeypunctuation#1\else#1\par\fi}%
\def\institution#1{#1\par}% \def\institution#1{\if@ACM@affiliation@obeypunctuation#1\else#1\par\fi}%
\def\department#1{#1\par}% \newcommand\department[2][0]{\if@ACM@affiliation@obeypunctuation
\def\streetaddress#1{#1\par}% #2\else#2\par\fi}%
\def\streetaddress#1{\if@ACM@affiliation@obeypunctuation#1\else#1\par\fi}%
\let\city\@ACM@addtoaddress \let\city\@ACM@addtoaddress
\let\state\@ACM@addtoaddress \let\state\@ACM@addtoaddress
\def\postcode#1{\unskip\space#1}% \def\postcode#1{\if@ACM@affiliation@obeypunctuation#1\else\unskip\space#1\fi}%
\let\country\@ACM@addtoaddress \let\country\@ACM@addtoaddress
\fi \fi
\def\@mkauthors{\begingroup \def\@mkauthors{\begingroup
@ -1670,12 +1835,17 @@ Computing Machinery]
\def\affiliation##1##2{% \def\affiliation##1##2{%
\def\@tempa{##2}\ifx\@tempa\@empty\else \def\@tempa{##2}\ifx\@tempa\@empty\else
\ifx\@currentaffiliations\@empty \ifx\@currentaffiliations\@empty
\gdef\@currentaffiliations{\@affiliationfont##2}% \gdef\@currentaffiliations{%
\setkeys{@ACM@affiliation@}{obeypunctuation=false}%
\setkeys{@ACM@affiliation@}{##1}%
\@affiliationfont##2}%
\else \else
\g@addto@macro{\@currentaffiliations}{\and##2}% \g@addto@macro{\@currentaffiliations}{\and
\setkeys{@ACM@affiliation@}{obeypunctuation=false}%
\setkeys{@ACM@affiliation@}{##1}##2}%
\fi \fi
\fi \fi
\global\let\and\@typeset@author@line} \global\let\and\@typeset@author@line}%
\global\setbox\mktitle@bx=\vbox{\noindent\box\mktitle@bx\par\medskip \global\setbox\mktitle@bx=\vbox{\noindent\box\mktitle@bx\par\medskip
\noindent\addresses\@typeset@author@line \noindent\addresses\@typeset@author@line
\par\medskip}% \par\medskip}%
@ -1694,6 +1864,9 @@ Computing Machinery]
\def\@mkauthors@iii{% \def\@mkauthors@iii{%
\author@bx@wd=\textwidth\relax \author@bx@wd=\textwidth\relax
\advance\author@bx@wd by -\author@bx@sep\relax \advance\author@bx@wd by -\author@bx@sep\relax
\ifnum\@ACM@authorsperrow>0\relax
\divide\author@bx@wd by \@ACM@authorsperrow\relax
\else
\ifcase\num@authorgroups \ifcase\num@authorgroups
\relax % 0? \relax % 0?
\or % 1=one author per row \or % 1=one author per row
@ -1706,6 +1879,7 @@ Computing Machinery]
\else % three authors per row \else % three authors per row
\divide\author@bx@wd by 3\relax \divide\author@bx@wd by 3\relax
\fi \fi
\fi
\advance\author@bx@wd by -\author@bx@sep\relax \advance\author@bx@wd by -\author@bx@sep\relax
\gdef\@currentauthors{}% \gdef\@currentauthors{}%
\gdef\@currentaffiliation{}% \gdef\@currentaffiliation{}%
@ -1721,9 +1895,13 @@ Computing Machinery]
\g@addto@macro\@currentaffiliation{\par\nolinkurl{##2}}% \g@addto@macro\@currentaffiliation{\par\nolinkurl{##2}}%
\fi}% \fi}%
\def\affiliation##1##2{\ifx\@currentaffiliation\@empty \def\affiliation##1##2{\ifx\@currentaffiliation\@empty
\gdef\@currentaffiliation{##2}% \gdef\@currentaffiliation{%
\setkeys{@ACM@affiliation@}{obeypunctuation=false}%
\setkeys{@ACM@affiliation@}{##1}##2}%
\else \else
\g@addto@macro\@currentaffiliation{\par##2}% \g@addto@macro\@currentaffiliation{\par
\setkeys{@ACM@affiliation@}{obeypunctuation=false}%
\setkeys{@ACM@affiliation@}{##1}##2}%
\fi \fi
\global\let\and\@typeset@author@bx \global\let\and\@typeset@author@bx
}% }%
@ -1735,12 +1913,16 @@ Computing Machinery]
\def\@mkauthors@iv{% \def\@mkauthors@iv{%
\author@bx@wd=\columnwidth\relax \author@bx@wd=\columnwidth\relax
\advance\author@bx@wd by -\author@bx@sep\relax \advance\author@bx@wd by -\author@bx@sep\relax
\ifnum\@ACM@authorsperrow>0\relax
\divide\author@bx@wd by \@ACM@authorsperrow\relax
\else
\ifcase\num@authorgroups \ifcase\num@authorgroups
\relax % 0? \relax % 0?
\or % 1=one author per row \or % 1=one author per row
\else % 2=two authors per row \else % 2=two authors per row
\divide\author@bx@wd by 2\relax \divide\author@bx@wd by 2\relax
\fi \fi
\fi
\advance\author@bx@wd by -\author@bx@sep\relax \advance\author@bx@wd by -\author@bx@sep\relax
\gdef\@currentauthors{}% \gdef\@currentauthors{}%
\gdef\@currentaffiliation{}% \gdef\@currentaffiliation{}%
@ -1756,16 +1938,21 @@ Computing Machinery]
\g@addto@macro\@currentaffiliation{\par\nolinkurl{##2}}% \g@addto@macro\@currentaffiliation{\par\nolinkurl{##2}}%
\fi}% \fi}%
\def\affiliation##1##2{\ifx\@currentaffiliation\@empty \def\affiliation##1##2{\ifx\@currentaffiliation\@empty
\gdef\@currentaffiliation{##2}% \gdef\@currentaffiliation{%
\setkeys{@ACM@affiliation@}{obeypunctuation=false}%
\setkeys{@ACM@affiliation@}{##1}##2}%
\else \else
\g@addto@macro\@currentaffiliation{\par##2}% \g@addto@macro\@currentaffiliation{\par
\setkeys{@ACM@affiliation@}{obeypunctuation=false}%
\setkeys{@ACM@affiliation@}{##1}##2}%
\fi \fi
\global\let\and\@typeset@author@bx}% \global\let\and\@typeset@author@bx}%
\bgroup\hsize=\columnwidth \bgroup\hsize=\columnwidth
\par\raggedright\leftskip=\z@ \par\raggedright\leftskip=\z@
\lineskip=1pc\noindent \lineskip=1pc\noindent
\addresses\let\and\@typeset@author@bx\and\par\bigskip\egroup} \addresses\let\and\@typeset@author@bx\and\par\bigskip\egroup}
\def\@authornotemark{\g@addto@macro\@currentauthors{\footnotemark}} \def\@authornotemark{\g@addto@macro\@currentauthors{\footnotemark\relax}}
\def\@@authornotemark#1{\g@addto@macro\@currentauthors{\footnotemark[#1]}}
\def\@mkteasers{% \def\@mkteasers{%
\ifx\@teaserfigures\@empty\else \ifx\@teaserfigures\@empty\else
\def\@teaser##1{\par\bigskip\bgroup \def\@teaser##1{\par\bigskip\bgroup
@ -1776,16 +1963,20 @@ Computing Machinery]
\def\@setaddresses{} \def\@setaddresses{}
\def\@mkabstract{\bgroup \def\@mkabstract{\bgroup
\ifx\@abstract\@lempty\else \ifx\@abstract\@lempty\else
{\if@ACM@journal {\phantomsection\addcontentsline{toc}{section}{Abstract}%
\if@ACM@journal
\small\noindent \small\noindent
\else \else
\section*{Abstract}% \section*{Abstract}%
\fi \fi
\phantomsection\addcontentsline{toc}{section}{Abstract}%
\ignorespaces\@abstract\par}% \ignorespaces\@abstract\par}%
\fi\egroup} \fi\egroup}
\def\@mkbibcitation{\bgroup \def\@mkbibcitation{\bgroup
\def\footnotemark{}% \def\footnotemark{}%
\def\\{\unskip{} \ignorespaces}%
\def\footnote{\ClassError{\@classname}{Please do note use footnotes
inside \string\title{} or \string\author{} command! Use
\string\titlenote{} or \string\authornote{} instead!}}%
\par\medskip\small\noindent{\bfseries ACM Reference format:}\par\nobreak \par\medskip\small\noindent{\bfseries ACM Reference format:}\par\nobreak
\noindent\authors. \@acmYear. \@title. \noindent\authors. \@acmYear. \@title.
\if@ACM@journal \if@ACM@journal
@ -1799,7 +1990,7 @@ Computing Machinery]
\ (\acmConference@shortname)\fi \ (\acmConference@shortname)\fi
,} \ref{TotPages}~pages. ,} \ref{TotPages}~pages.
\fi\par \fi\par
\noindent DOI: \nolinkurl{\@acmDOI} \noindent\@formatdoi{\@acmDOI}
\par\egroup} \par\egroup}
\def\@printendtopmatter{\par\medskip \def\@printendtopmatter{\par\medskip
\ifcase\ACM@format@nr \ifcase\ACM@format@nr
@ -1826,20 +2017,48 @@ Computing Machinery]
\RequirePackage{fancyhdr} \RequirePackage{fancyhdr}
\if@ACM@review \if@ACM@review
\newsavebox{\ACM@linecount@bx} \newsavebox{\ACM@linecount@bx}
\newlength\ACM@linecount@bxht
\newcount\ACM@linecount
\ACM@linecount\@ne\relax
\def\ACM@mk@linecount{%
\savebox{\ACM@linecount@bx}[4em][t]{\parbox[t]{4em}{% \savebox{\ACM@linecount@bx}[4em][t]{\parbox[t]{4em}{%
\newlength\ACM@linecount@bxht\setlength{\ACM@linecount@bxht}{-\baselineskip} \setlength{\ACM@linecount@bxht}{-\baselineskip}%
\@tempcnta\@ne\relax \loop{\color{ACMRed}\scriptsize\the\ACM@linecount}\\
\loop{\color{ACMRed}\scriptsize\the\@tempcnta}\\ \global\advance\ACM@linecount by \@ne
\advance\@tempcnta by \@ne \addtolength{\ACM@linecount@bxht}{\baselineskip}%
\addtolength{\ACM@linecount@bxht}{\baselineskip} \ifdim\ACM@linecount@bxht<\textheight\repeat}}}
\ifdim\ACM@linecount@bxht<\textheight\repeat}}
\fi \fi
\def\ACM@linecount{% \def\ACM@linecountL{%
\if@ACM@review \if@ACM@review
\ACM@mk@linecount
\begin{picture}(0,0)% \begin{picture}(0,0)%
\put(-26,-22){\usebox{\ACM@linecount@bx}}% \put(-26,-22){\usebox{\ACM@linecount@bx}}%
\end{picture}% \end{picture}%
\fi} \fi}
\def\ACM@linecountR{%
\if@ACM@review
\ACM@mk@linecount
\begin{picture}(0,0)%
\put(20,-22){\usebox{\ACM@linecount@bx}}%
\end{picture}%
\fi}
\if@ACM@timestamp
% Subtracting 30 from \time gives us the effect of rounding-down despite
% \numexpr rounding to nearest
\newcounter{ACM@time@hours}
\setcounter{ACM@time@hours}{\numexpr (\time - 30) / 60 \relax}
\newcounter{ACM@time@minutes}
\setcounter{ACM@time@minutes}{\numexpr \time - \theACM@time@hours * 60 \relax}
\newcommand\ACM@timestamp{%
\footnotesize%
\the\year-\two@digits{\the\month}-\two@digits{\the\day}{ }%
\two@digits{\theACM@time@hours}:\two@digits{\theACM@time@minutes}{ }%
page~\thepage\ (pp. \@startPage-\pageref*{TotPages})%
\ifx\@acmSubmissionID\@empty\relax\else
~Submission~ID: \@acmSubmissionID
\fi
}
\fi
\def\@shortauthors{\if@ACM@anonymous Anon.\else\shortauthors\fi} \def\@shortauthors{\if@ACM@anonymous Anon.\else\shortauthors\fi}
\def\@headfootfont{% \def\@headfootfont{%
\ifcase\ACM@format@nr \ifcase\ACM@format@nr
@ -1868,46 +2087,50 @@ Computing Machinery]
\renewcommand{\footrulewidth}{\z@}% \renewcommand{\footrulewidth}{\z@}%
\ifcase\ACM@format@nr \ifcase\ACM@format@nr
\relax % manuscript \relax % manuscript
\fancyhead[LE]{\ACM@linecount\if@ACM@printfolios\thepage\fi}% \fancyhead[LE]{\ACM@linecountL\if@ACM@printfolios\thepage\fi}%
\fancyhead[RO]{\if@ACM@printfolios\thepage\fi}% \fancyhead[RO]{\if@ACM@printfolios\thepage\fi}%
\fancyhead[RE]{\@shortauthors}% \fancyhead[RE]{\@shortauthors}%
\fancyhead[LO]{\ACM@linecount\shorttitle}% \fancyhead[LO]{\ACM@linecountL\shorttitle}%
\fancyfoot[RO,LE]{\footnotesize Manuscript submitted to ACM}% \fancyfoot[RO,LE]{\footnotesize Manuscript submitted to ACM}%
\or % acmsmall \or % acmsmall
\fancyhead[LE]{\ACM@linecount\@headfootfont\@acmArticle\if@ACM@printfolios:\thepage\fi}% \fancyhead[LE]{\ACM@linecountL\@headfootfont\@acmArticle\if@ACM@printfolios:\thepage\fi}%
\fancyhead[RO]{\@headfootfont\@acmArticle\if@ACM@printfolios:\thepage\fi}% \fancyhead[RO]{\@headfootfont\@acmArticle\if@ACM@printfolios:\thepage\fi}%
\fancyhead[RE]{\@headfootfont\@shortauthors}% \fancyhead[RE]{\@headfootfont\@shortauthors}%
\fancyhead[LO]{\ACM@linecount\@headfootfont\shorttitle}% \fancyhead[LO]{\ACM@linecountL\@headfootfont\shorttitle}%
\fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No. \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No.
\@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}% \@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}%
\or % acmlarge \or % acmlarge
\fancyhead[LE]{\ACM@linecount\@headfootfont \fancyhead[LE]{\ACM@linecountL\@headfootfont
\@acmArticle:\if@ACM@printfolios\thepage\quad\textbullet\quad\fi\@shortauthors}% \@acmArticle\if@ACM@printfolios:\thepage\fi\quad\textbullet\quad\@shortauthors}%
\fancyhead[LO]{\ACM@linecount}% \fancyhead[LO]{\ACM@linecountL}%
\fancyhead[RO]{\@headfootfont \fancyhead[RO]{\@headfootfont
\shorttitle\quad\textbullet\quad\@acmArticle\if@ACM@printfolios:\thepage\fi}% \shorttitle\quad\textbullet\quad\@acmArticle\if@ACM@printfolios:\thepage\fi}%
\fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No. \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No.
\@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}% \@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}%
\or % acmtog \or % acmtog
\fancyhead[LE]{\ACM@linecount\@headfootfont \fancyhead[LE]{\ACM@linecountL\@headfootfont
\@acmArticle:\if@ACM@printfolios\thepage\quad\textbullet\quad\fi\@shortauthors}% \@acmArticle\if@ACM@printfolios:\thepage\fi\quad\textbullet\quad\@shortauthors}%
\fancyhead[LO]{\ACM@linecount}% \fancyhead[LO]{\ACM@linecountL}%
\fancyhead[RE]{\ACM@linecountR}%
\fancyhead[RO]{\@headfootfont \fancyhead[RO]{\@headfootfont
\shorttitle\quad\textbullet\quad\@acmArticle\if@ACM@printfolios:\thepage\fi}% \shorttitle\quad\textbullet\quad\@acmArticle\if@ACM@printfolios:\thepage\fi\ACM@linecountR}%
\fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No. \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No.
\@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}% \@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}%
\else % Proceedings \else % Proceedings
\fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}% \fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}%
\fancyhead[LO]{\ACM@linecount\@headfootfont\shorttitle}% \fancyhead[LO]{\ACM@linecountL\@headfootfont\shorttitle}%
\fancyhead[RE]{\@headfootfont\@shortauthors}% \fancyhead[RE]{\@headfootfont\@shortauthors\ACM@linecountR}%
\fancyhead[LE]{\ACM@linecount\@headfootfont\acmConference@shortname, \fancyhead[LE]{\ACM@linecountL\@headfootfont\acmConference@shortname,
\acmConference@date, \acmConference@venue}% \acmConference@date, \acmConference@venue}%
\fancyhead[RO]{\@headfootfont\acmConference@shortname, \fancyhead[RO]{\@headfootfont\acmConference@shortname,
\acmConference@date, \acmConference@venue}% \acmConference@date, \acmConference@venue\ACM@linecountR}%
\fi \fi
\if@ACM@sigchiamode \if@ACM@sigchiamode
\fancyheadoffset[L]{\dimexpr(\marginparsep+\marginparwidth)}% \fancyheadoffset[L]{\dimexpr(\marginparsep+\marginparwidth)}%
\fi \fi
\if@ACM@timestamp
\fancyfoot[LO,RE]{\ACM@timestamp}
\fi
} }
\pagestyle{standardpagestyle} \pagestyle{standardpagestyle}
\newdimen\@folio@wd \newdimen\@folio@wd
@ -1955,15 +2178,15 @@ Computing Machinery]
\renewcommand{\footrulewidth}{\z@}% \renewcommand{\footrulewidth}{\z@}%
\ifcase\ACM@format@nr \ifcase\ACM@format@nr
\relax % manuscript \relax % manuscript
\fancyhead[L]{\ACM@linecount}% \fancyhead[L]{\ACM@linecountL}%
\fancyfoot[RO,LE]{\if@ACM@printfolios\small\thepage\fi}% \fancyfoot[RO,LE]{\if@ACM@printfolios\small\thepage\fi}%
\fancyfoot[RE,LO]{\footnotesize Manuscript submitted to ACM}% \fancyfoot[RE,LO]{\footnotesize Manuscript submitted to ACM}%
\or % acmsmall \or % acmsmall
\fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No. \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No.
\@acmNumber, Article \@acmArticle. Publication date: \@acmNumber, Article \@acmArticle. Publication date:
\@acmPubDate.}% \@acmPubDate.}%
\fancyhead[LE]{\ACM@linecount\@folioblob}% \fancyhead[LE]{\ACM@linecountL\@folioblob}%
\fancyhead[LO]{\ACM@linecount}% \fancyhead[LO]{\ACM@linecountL}%
\fancyhead[RO]{\@folioblob}% \fancyhead[RO]{\@folioblob}%
\fancyheadoffset[RO,LE]{0.6\@folio@wd}% \fancyheadoffset[RO,LE]{0.6\@folio@wd}%
\or % acmlarge \or % acmlarge
@ -1971,18 +2194,28 @@ Computing Machinery]
\@acmNumber, Article \@acmArticle. Publication date: \@acmNumber, Article \@acmArticle. Publication date:
\@acmPubDate.}% \@acmPubDate.}%
\fancyhead[RO]{\@folioblob}% \fancyhead[RO]{\@folioblob}%
\fancyhead[LE]{\ACM@linecount\@folioblob}% \fancyhead[LE]{\ACM@linecountL\@folioblob}%
\fancyhead[LO]{\ACM@linecount}% \fancyhead[LO]{\ACM@linecountL}%
\fancyheadoffset[RO,LE]{1.4\@folio@wd}% \fancyheadoffset[RO,LE]{1.4\@folio@wd}%
\or % acmtog \or % acmtog
\fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No. \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No.
\@acmNumber, Article \@acmArticle. Publication date: \@acmNumber, Article \@acmArticle. Publication date:
\@acmPubDate.}% \@acmPubDate.}%
\fancyhead[L]{\ACM@linecount}% \fancyhead[L]{\ACM@linecountL}%
\fancyhead[R]{\ACM@linecountR}%
\else % Conference proceedings \else % Conference proceedings
\fancyhead[L]{\ACM@linecount}% \fancyhead[L]{\ACM@linecountL}%
\fancyhead[R]{\ACM@linecountR}%
\fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}% \fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}%
\fi \fi
\if@ACM@timestamp
\ifnum\ACM@format@nr=0\relax % Manuscript
\fancyfoot[LO,RE]{\ACM@timestamp\quad
\footnotesize Manuscript submitted to ACM}
\else
\fancyfoot[LO,RE]{\ACM@timestamp}
\fi
\fi
} }
\renewcommand\section{\@startsection{section}{1}{\z@}% \renewcommand\section{\@startsection{section}{1}{\z@}%
{-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}% {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}%
@ -2057,6 +2290,7 @@ Computing Machinery]
\fi \fi
\def\@adddotafter#1{#1\@addpunct{.}} \def\@adddotafter#1{#1\@addpunct{.}}
\def\@addspaceafter#1{#1\@addpunct{\enspace}} \def\@addspaceafter#1{#1\@addpunct{\enspace}}
\providecommand*\@dotsep{4.5}
\def\@acmplainbodyfont{\itshape} \def\@acmplainbodyfont{\itshape}
\def\@acmplainindent{\parindent} \def\@acmplainindent{\parindent}
\def\@acmplainheadfont{\scshape} \def\@acmplainheadfont{\scshape}
@ -2181,7 +2415,7 @@ Computing Machinery]
\ifx\@tempa\@tempb \ifx\@tempa\@tempb
arXiv:\href{http://arxiv.org/abs/#2}{#2}\else arXiv:#2% arXiv:\href{http://arxiv.org/abs/#2}{#2}\else arXiv:#2%
\fi} \fi}
\normalsize\normalfont \normalsize\normalfont\frenchspacing
\endinput \endinput
%% %%
%% End of file `acmart.cls'. %% End of file `acmart.cls'.

View File

@ -145,5 +145,5 @@
;; Ensure that "acmart.tex" is used, since "style.tex" ;; Ensure that "acmart.tex" is used, since "style.tex"
;; re-defines commands. ;; re-defines commands.
(struct-copy part doc [to-collect (struct-copy part doc [to-collect
(cons (terms) ; FIXME (cons invisible-element-to-collect-for-acmart-extras
(part-to-collect doc))])) (part-to-collect doc))]))

View File

@ -1,20 +1,11 @@
% Define \SXtitle to lift \SSubtitle out: \renewcommand{\titleAndVersionAndAuthors}[3]{\title{#1}#3\maketitle}
\newcommand{\SXtitle}[2][]{\title#1{\let\SSubtitle\SSubtitleDrop#2}\SExtractSubtitle#2\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\maketitle}
\renewcommand{\titleAndEmptyVersionAndAuthors}[3]{\titleAndVersionAndAuthors{#1}{#2}{#3}} \renewcommand{\titleAndEmptyVersionAndAuthors}[3]{\titleAndVersionAndAuthors{#1}{#2}{#3}}
\renewcommand{\titleAndVersionAndEmptyAuthors}[3]{\SXtitle{#1}\author{Anonymous Author(s)}\maketitle} \renewcommand{\titleAndVersionAndEmptyAuthors}[3]{\title{#1}\author{Anonymous Author(s)}\maketitle}
\renewcommand{\titleAndEmptyVersionAndEmptyAuthors}[3]{\titleAndVersionAndEmptyAuthors{#1}{#2}{#3}} \renewcommand{\titleAndEmptyVersionAndEmptyAuthors}[3]{\titleAndVersionAndEmptyAuthors{#1}{#2}{#3}}
\renewcommand{\titleAndVersionAndAuthorsAndShort}[4]{\SXtitle[[#4]]{#1}#3\maketitle} \renewcommand{\titleAndVersionAndAuthorsAndShort}[4]{\title[#4]{#1}#3\maketitle}
\renewcommand{\titleAndEmptyVersionAndAuthorsAndShort}[4]{\titleAndVersionAndAuthorsAndShort{#1}{#2}{#3}{#4}} \renewcommand{\titleAndEmptyVersionAndAuthorsAndShort}[4]{\titleAndVersionAndAuthorsAndShort{#1}{#2}{#3}{#4}}
\renewcommand{\titleAndVersionAndEmptyAuthorsAndShort}[4]{\SXtitle[[#4]]{#1}\author{Anonymous Author(s)}\maketitle} \renewcommand{\titleAndVersionAndEmptyAuthorsAndShort}[4]{\title[#4]{#1}\author{Anonymous Author(s)}\maketitle}
\renewcommand{\titleAndEmptyVersionAndEmptyAuthorsAndShort}[4]{\titleAndVersionAndEmptyAuthorsAndShort{#1}{#2}{#3}{#4}} \renewcommand{\titleAndEmptyVersionAndEmptyAuthorsAndShort}[4]{\titleAndVersionAndEmptyAuthorsAndShort{#1}{#2}{#3}{#4}}
% Support plain `author' while enabling `authorinfo': for each % Support plain `author' while enabling `authorinfo': for each

View File

@ -33,18 +33,30 @@
defexamples* defexamples*
as-examples as-examples
make-base-eval (contract-out
make-base-eval-factory [make-base-eval
make-eval-factory (->* [] [#:pretty-print? any/c #:lang lang-option/c] #:rest any/c any)]
close-eval [make-base-eval-factory
eval-factory/c]
[make-eval-factory
eval-factory/c]
[close-eval
(-> any/c any)]
[scribble-exn->string
(-> any/c string?)]
[scribble-eval-handler
(parameter/c (-> (-> any/c any) boolean? any/c any))]
[make-log-based-eval
(-> path-string? (or/c 'record 'replay) any)])
scribble-exn->string
scribble-eval-handler
with-eval-preserve-source-locations) with-eval-preserve-source-locations)
(provide/contract (define lang-option/c
[make-log-based-eval (or/c module-path? (list/c 'special symbol?) (cons/c 'begin list?)))
(-> path-string? (or/c 'record 'replay) (-> any/c any))])
(define eval-factory/c
(->* [(listof module-path?)] [#:pretty-print? any/c #:lang lang-option/c] any))
(define scribble-eval-handler (define scribble-eval-handler
(make-parameter (lambda (ev c? x) (ev x)))) (make-parameter (lambda (ev c? x) (ev x))))

View File

@ -8,12 +8,12 @@
(provide examples (provide examples
;; Re-exports: ;; Re-exports:
make-base-eval make-base-eval
make-base-eval-factory make-base-eval-factory
make-eval-factory make-eval-factory
close-eval close-eval
make-log-based-eval
scribble-exn->string scribble-exn->string
scribble-eval-handler scribble-eval-handler
make-log-based-eval) make-log-based-eval)

View File

@ -1085,6 +1085,9 @@
[(#\↕) "$\\updownarrow$"] [(#\↕) "$\\updownarrow$"]
[(#\↔) "$\\leftrightarrow$"] [(#\↔) "$\\leftrightarrow$"]
[(#\↗) "$\\nearrow$"] [(#\↗) "$\\nearrow$"]
[(#\↝) "$\\leadsto$"]
[(#\↱) "$\\Lsh$"]
[(#\↰) "$\\Rsh$"]
[(#\⇕) "$\\Updownarrow$"] [(#\⇕) "$\\Updownarrow$"]
[(#\א) "$\\aleph$"] [(#\א) "$\\aleph$"]
[(#\) "$\\prime$"] [(#\) "$\\prime$"]
@ -1159,6 +1162,7 @@
[(#\) "$\\vee$"] [(#\) "$\\vee$"]
[(#\∧) "$\\wedge$"] [(#\∧) "$\\wedge$"]
[(#\◃) "$\\triangleright$"] [(#\◃) "$\\triangleright$"]
[(#\◊) "$\\Diamond$"]
[(#\⊙) "$\\odot$"] [(#\⊙) "$\\odot$"]
[(#\★) "$\\star$"] [(#\★) "$\\star$"]
[(#\†) "$\\dagger$"] [(#\†) "$\\dagger$"]

View File

@ -49,8 +49,7 @@
(define vers (history-entry-vers e)) (define vers (history-entry-vers e))
(list (if (zero? i) (list (if (zero? i)
null null
(list null ; needed to avoid " " dropped as whitespace (list (linebreak)))
" "))
(history-entry-what e) (history-entry-what e)
" in version " " in version "
vers vers

View File

@ -16,11 +16,19 @@
(provide define-cite (provide define-cite
author+date-style number-style author+date-style number-style
make-bib in-bib (rename-out [auto-bib? bib?]) make-bib in-bib (rename-out [auto-bib? bib?])
proceedings-location journal-location book-location
techrpt-location dissertation-location
author-name org-author-name author-name org-author-name
(contract-out (contract-out
[authors (->* (content?) #:rest (listof content?) element?)]) [authors (->* (content?) #:rest (listof content?) element?)]
[proceedings-location
(->* [any/c] [#:pages (or/c (list/c any/c any/c) #f) #:series any/c #:volume any/c] element?)]
[journal-location
(->* [any/c] [#:pages (or/c (list/c any/c any/c) #f) #:number any/c #:volume any/c] element?)]
[book-location
(->* [] [#:edition any/c #:publisher any/c] element?)]
[techrpt-location
(-> #:institution any/c #:number any/c element?)]
[dissertation-location
(->* [#:institution any/c] [#:degree any/c] element?)])
other-authors other-authors
editor editor
abbreviate-given-names) abbreviate-given-names)
@ -365,15 +373,17 @@
(define-syntax (define-cite stx) (define-syntax (define-cite stx)
(syntax-parse stx (syntax-parse stx
[(_ (~var ~cite) citet generate-bibliography [(_ (~var ~cite id) citet:id generate-bibliography:id
(~or (~optional (~seq #:style style) #:defaults ([style #'author+date-style])) (~or (~optional (~seq #:style style) #:defaults ([style #'author+date-style]))
(~optional (~seq #:disambiguate fn) #:defaults ([fn #'#f])) (~optional (~seq #:disambiguate fn) #:defaults ([fn #'#f]))
(~optional (~seq #:render-date-in-bib render-date-bib) #:defaults ([render-date-bib #'#f])) (~optional (~seq #:render-date-in-bib render-date-bib) #:defaults ([render-date-bib #'#f]))
(~optional (~seq #:spaces spaces) #:defaults ([spaces #'1])) (~optional (~seq #:spaces spaces) #:defaults ([spaces #'1]))
(~optional (~seq #:render-date-in-cite render-date-cite) #:defaults ([render-date-cite #'#f])) (~optional (~seq #:render-date-in-cite render-date-cite) #:defaults ([render-date-cite #'#f]))
(~optional (~seq #:date<? date<?) #:defaults ([date<? #'#f])) (~optional (~seq #:date<? date<?) #:defaults ([date<? #'#f]))
(~optional (~seq #:date=? date=?) #:defaults ([date=? #'#f]))) ...) (~optional (~seq #:date=? date=?) #:defaults ([date=? #'#f]))
(syntax/loc stx (~optional (~seq #:cite-author cite-author:id) #:defaults ([cite-author #'#f]))
(~optional (~seq #:cite-year cite-year:id) #:defaults ([cite-year #'#f]))) ...)
(quasisyntax/loc stx
(begin (begin
(define group (make-bib-group (make-hasheq))) (define group (make-bib-group (make-hasheq)))
(define the-style style) (define the-style style)
@ -382,7 +392,15 @@
(define (citet bib-entry . bib-entries) (define (citet bib-entry . bib-entries)
(add-inline-cite group (cons bib-entry bib-entries) the-style date<? date=?)) (add-inline-cite group (cons bib-entry bib-entries) the-style date<? date=?))
(define (generate-bibliography #:tag [tag "doc-bibliography"] #:sec-title [sec-title "Bibliography"]) (define (generate-bibliography #:tag [tag "doc-bibliography"] #:sec-title [sec-title "Bibliography"])
(gen-bib tag group sec-title the-style fn render-date-bib render-date-cite date<? date=? spaces))))])) (gen-bib tag group sec-title the-style fn render-date-bib render-date-cite date<? date=? spaces))
#,(when (identifier? #'cite-author)
#'(define (cite-author bib-entry)
(add-cite group bib-entry 'autobib-author #f #f the-style)))
#,(when (identifier? #'cite-year)
#'(define (cite-year bib-entry . bib-entries)
(add-date-cites group (cons bib-entry bib-entries)
(send the-style get-group-sep)
the-style #t date<? date=?)))))]))
(define (ends-in-punc? e) (define (ends-in-punc? e)
(regexp-match? #rx"[.!?,]$" (content->string e))) (regexp-match? #rx"[.!?,]$" (content->string e)))
@ -475,12 +493,12 @@
#:pages [pages #f] #:pages [pages #f]
#:series [series #f] #:series [series #f]
#:volume [volume #f]) #:volume [volume #f])
(let* ([s @elem{In @italic{@elem{Proc. @|location|}}}] (let* ([s @elem{In @italic{@elem{Proc. @to-string[location]}}}]
[s (if series [s (if series
@elem{@|s|, @(format "~a" series)} @elem{@|s|, @to-string[series]}
s)] s)]
[s (if volume [s (if volume
@elem{@|s| volume @(format "~a" volume)} @elem{@|s| volume @to-string[volume]}
s)] s)]
[s (if pages [s (if pages
@elem{@|s|, pp. @(to-string (car pages))--@(to-string (cadr pages))} @elem{@|s|, pp. @(to-string (car pages))--@(to-string (cadr pages))}
@ -492,7 +510,7 @@
#:pages [pages #f] #:pages [pages #f]
#:number [number #f] #:number [number #f]
#:volume [volume #f]) #:volume [volume #f])
(let* ([s @italic{@|location|}] (let* ([s @italic{@to-string[location]}]
[s (if volume [s (if volume
@elem{@|s| @(to-string volume)} @elem{@|s| @(to-string volume)}
s)] s)]
@ -508,12 +526,12 @@
#:edition [edition #f] #:edition [edition #f]
#:publisher [publisher #f]) #:publisher [publisher #f])
(let* ([s (if edition (let* ([s (if edition
@elem{@(string-titlecase edition) edition} @elem{@(string-titlecase (to-string edition)) edition}
#f)] #f)]
[s (if publisher [s (if publisher
(if s (if s
@elem{@|s|. @|publisher|} @elem{@|s|. @to-string[publisher]}
publisher) @elem{@to-string[publisher]})
s)]) s)])
(unless s (unless s
(error 'book-location "no arguments")) (error 'book-location "no arguments"))
@ -522,12 +540,12 @@
(define (techrpt-location (define (techrpt-location
#:institution org #:institution org
#:number num) #:number num)
@elem{@|org|, @|num|}) @elem{@to-string[org], @to-string[num]})
(define (dissertation-location (define (dissertation-location
#:institution org #:institution org
#:degree [degree "PhD"]) #:degree [degree "PhD"])
@elem{@|degree| dissertation, @|org|}) @elem{@to-string[degree] dissertation, @to-string[org]})
;; ---------------------------------------- ;; ----------------------------------------

View File

@ -0,0 +1,45 @@
#lang racket/base
(require rackunit scribble/example setup/path-to-relative
(only-in racket/contract exn:fail:contract:blame?))
(test-case "scribble/example contracts"
(define blames-this-module?
(let* ([this-module
(path->relative-string/library
(variable-reference->module-source (#%variable-reference)))]
[blame-rx (regexp (string-append "blaming: " this-module))])
(λ (x)
(and (exn:fail:contract:blame? x)
(regexp-match? blame-rx (exn-message x))))))
(check-exn blames-this-module?
(λ () (make-base-eval #:lang #f '(+ 2 2))))
(check-exn blames-this-module?
(λ () (make-base-eval #:lang '(+ 2 2))))
(check-exn blames-this-module?
(λ () (make-base-eval-factory 'racket/dict)))
(check-exn blames-this-module?
(λ () (make-base-eval-factory '() #:lang #f '(+ 2 2))))
(check-exn blames-this-module?
(λ () (make-base-eval-factory '() #:lang '(+ 2 2))))
(check-exn blames-this-module?
;; https://github.com/racket/scribble/issues/117
(λ () (make-eval-factory 'racket/dict)))
(check-exn blames-this-module?
(λ () (make-eval-factory '() #:lang #f '(+ 2 2))))
(check-exn blames-this-module?
(λ () (make-eval-factory '() #:lang '(+ 2 2))))
(check-exn blames-this-module?
(λ () (scribble-eval-handler #f)))
(check-exn blames-this-module?
(λ () (scribble-eval-handler (λ (ev t) t))))
(check-exn blames-this-module?
(λ () (make-log-based-eval #f 'record)))
(check-exn blames-this-module?
(λ () (make-log-based-eval "foo.rkt" 'bad-mode)))
)

View File

@ -0,0 +1,56 @@
#lang racket/base
(require rackunit scriblib/autobib)
(test-case "define-cite"
;; Check that `define-cite` binds the expected identifiers
(let ()
(define-cite cite citet gen-bib)
(check-pred values (void cite citet gen-bib)))
(let ()
(define-cite cite citet gen-bib
#:cite-author cite-author
#:cite-year cite-year)
(check-pred values (void cite citet gen-bib cite-author cite-year))))
(test-case "proceedings-location"
(check-not-exn
(λ () (proceedings-location "RacketCon" #:pages '(1 2) #:series 3 #:volume 4)))
(check-not-exn
(λ () (proceedings-location 'PLDI)))
(check-exn exn:fail:contract?
(λ () (proceedings-location "USENIX" #:pages "4--5"))))
(test-case "journal-location"
(check-not-exn
(λ () (journal-location "CACM" #:pages '(1 2) #:number 3 #:volume 4)))
(check-not-exn
(λ () (journal-location 'JFP)))
(check-exn exn:fail:contract?
(λ () (journal-location "Journal of Chromatography" #:pages 30))))
(test-case "book-location"
(check-not-exn
(λ () (book-location #:edition 1 #:publisher "A.C. Clayton")))
(check-not-exn
(λ () (book-location #:edition 'B #:publisher 'Elsiver)))
(check-exn exn:fail?
(λ () (book-location))))
(test-case "techrpt-location"
(check-not-exn
(λ () (techrpt-location #:institution "MIT" #:number 'AIM-353)))
(check-exn exn:fail:contract?
(λ () (techrpt-location #:institution 'UCB))))
(test-case "dissertation-location"
(check-not-exn
(λ () (dissertation-location #:institution "New College")))
(check-not-exn
(λ () (dissertation-location #:institution 'Oberlin)))
(check-not-exn
(λ () (dissertation-location #:institution "Georgetown University" #:degree "BS")))
(check-exn exn:fail:contract?
(λ () (dissertation-location #:degree "PhD"))))