Merge tag 'v7.5' into my-changes-rebased
This commit is contained in:
commit
dd6cbe8650
|
@ -830,7 +830,7 @@ The @racket[_get] procedure passed to @racket[traverse] takes a symbol
|
||||||
and any value to act as a default; it returns information registered
|
and any value to act as a default; it returns information registered
|
||||||
for the symbol or the given default if no value has been
|
for the symbol or the given default if no value has been
|
||||||
registered. The @racket[_set] procedure passed to @racket[traverse]
|
registered. The @racket[_set] procedure passed to @racket[traverse]
|
||||||
takes a symbol and a value to registered for the symbol.
|
takes a symbol and a value to be registered for the symbol.
|
||||||
|
|
||||||
@margin-note*{See also @racket[cond-block] in @racketmodname[scriblib/render-cond].}
|
@margin-note*{See also @racket[cond-block] in @racketmodname[scriblib/render-cond].}
|
||||||
@;
|
@;
|
||||||
|
|
|
@ -180,6 +180,27 @@ See @racket[defform] for information on @racket[options],
|
||||||
@history[#:added "1.6"]}
|
@history[#:added "1.6"]}
|
||||||
|
|
||||||
|
|
||||||
|
@defform[(class*-doc id super (intf-id ...) pre-flow)]{
|
||||||
|
|
||||||
|
Like @racket[proc-doc], but for class declarations that use @racket[class*].
|
||||||
|
|
||||||
|
The @racket[id], @racket[super], and @racket[intf-id] expressions have the same
|
||||||
|
meaning as in @racket[defclass].
|
||||||
|
|
||||||
|
@history[#:added "1.30"]}
|
||||||
|
|
||||||
|
|
||||||
|
@defform[(class-doc id super pre-flow)]{
|
||||||
|
|
||||||
|
Like @racket[class*-doc], but for class declarations that use @racket[class]
|
||||||
|
omitting @racket[interface-expr]s.
|
||||||
|
|
||||||
|
The @racket[id], and @racket[super] expressions have the same meaning as in
|
||||||
|
@racket[defclass].
|
||||||
|
|
||||||
|
@history[#:added "1.30"]}
|
||||||
|
|
||||||
|
|
||||||
@defform[(begin-for-doc form ...)]{
|
@defform[(begin-for-doc form ...)]{
|
||||||
|
|
||||||
Like to @racket[begin-for-syntax], but for documentation time instead
|
Like to @racket[begin-for-syntax], but for documentation time instead
|
||||||
|
|
|
@ -23,4 +23,4 @@
|
||||||
|
|
||||||
(define pkg-authors '(mflatt eli))
|
(define pkg-authors '(mflatt eli))
|
||||||
|
|
||||||
(define version "1.29")
|
(define version "1.30")
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
%% Right brace \} Tilde \~}
|
%% Right brace \} Tilde \~}
|
||||||
\NeedsTeXFormat{LaTeX2e}
|
\NeedsTeXFormat{LaTeX2e}
|
||||||
\ProvidesClass{acmart}
|
\ProvidesClass{acmart}
|
||||||
[2018/08/12 v1.55 Typesetting articles for the Association for
|
[2019/04/22 v1.60 Typesetting articles for the Association for
|
||||||
Computing Machinery]
|
Computing Machinery]
|
||||||
\def\@classname{acmart}
|
\def\@classname{acmart}
|
||||||
\InputIfFileExists{acmart-preload-hook.tex}{%
|
\InputIfFileExists{acmart-preload-hook.tex}{%
|
||||||
|
@ -71,6 +71,14 @@ Computing Machinery]
|
||||||
\fi}{\PackageError{\@classname}{The option screen can be either true or
|
\fi}{\PackageError{\@classname}{The option screen can be either true or
|
||||||
false}}
|
false}}
|
||||||
\ExecuteOptionsX{screen=false}
|
\ExecuteOptionsX{screen=false}
|
||||||
|
\define@boolkey+{acmart.cls}[@ACM@]{urlbreakonhyphens}[true]{%
|
||||||
|
\if@ACM@urlbreakonhyphens
|
||||||
|
\PackageInfo{\@classname}{Using breaking urls on hyphens}%
|
||||||
|
\else
|
||||||
|
\PackageInfo{\@classname}{Not breaking urls on hyphens}%
|
||||||
|
\fi}{\PackageError{\@classname}{The option urlbreakonhyphens can be either true or
|
||||||
|
false}}
|
||||||
|
\ExecuteOptionsX{urlbreakonhyphens=true}
|
||||||
\define@boolkey+{acmart.cls}[@ACM@]{acmthm}[true]{%
|
\define@boolkey+{acmart.cls}[@ACM@]{acmthm}[true]{%
|
||||||
\if@ACM@acmthm
|
\if@ACM@acmthm
|
||||||
\PackageInfo{\@classname}{Requiring acmthm}%
|
\PackageInfo{\@classname}{Requiring acmthm}%
|
||||||
|
@ -108,6 +116,10 @@ Computing Machinery]
|
||||||
\fi}{\PackageError{\@classname}{The option nonacm can be either true or
|
\fi}{\PackageError{\@classname}{The option nonacm can be either true or
|
||||||
false}}
|
false}}
|
||||||
\ExecuteOptionsX{nonacm=false}
|
\ExecuteOptionsX{nonacm=false}
|
||||||
|
\define@boolkey+{acmart.cls}[@ACM@]{balance}[true]{}{%
|
||||||
|
\PackageError{\@classname}{The option balance can be either true or
|
||||||
|
false}}
|
||||||
|
\ExecuteOptionsX{balance}
|
||||||
\define@boolkey+{acmart.cls}[@ACM@]{natbib}[true]{%
|
\define@boolkey+{acmart.cls}[@ACM@]{natbib}[true]{%
|
||||||
\if@ACM@natbib
|
\if@ACM@natbib
|
||||||
\PackageInfo{\@classname}{Explicitly selecting natbib mode}%
|
\PackageInfo{\@classname}{Explicitly selecting natbib mode}%
|
||||||
|
@ -153,6 +165,7 @@ Computing Machinery]
|
||||||
\ClassInfo{\@classname}{Using format \ACM@format, number \ACM@format@nr}
|
\ClassInfo{\@classname}{Using format \ACM@format, number \ACM@format@nr}
|
||||||
\newif\if@ACM@manuscript
|
\newif\if@ACM@manuscript
|
||||||
\newif\if@ACM@journal
|
\newif\if@ACM@journal
|
||||||
|
\newif\if@ACM@journal@bibstrip
|
||||||
\newif\if@ACM@sigchiamode
|
\newif\if@ACM@sigchiamode
|
||||||
\ifnum\ACM@format@nr=5\relax % siggraph
|
\ifnum\ACM@format@nr=5\relax % siggraph
|
||||||
\ClassWarning{\@classname}{The format siggraph is now obsolete.
|
\ClassWarning{\@classname}{The format siggraph is now obsolete.
|
||||||
|
@ -186,6 +199,11 @@ Computing Machinery]
|
||||||
\@ACM@journalfalse
|
\@ACM@journalfalse
|
||||||
\@ACM@sigchiamodetrue
|
\@ACM@sigchiamodetrue
|
||||||
\fi
|
\fi
|
||||||
|
\if@ACM@journal
|
||||||
|
\@ACM@journal@bibstriptrue
|
||||||
|
\else
|
||||||
|
\@ACM@journal@bibstripfalse
|
||||||
|
\fi
|
||||||
\ifx\ACM@fontsize\@empty
|
\ifx\ACM@fontsize\@empty
|
||||||
\ifcase\ACM@format@nr
|
\ifcase\ACM@format@nr
|
||||||
\relax % manuscript
|
\relax % manuscript
|
||||||
|
@ -212,6 +230,7 @@ Computing Machinery]
|
||||||
\LoadClass[\ACM@fontsize, reqno]{amsart}
|
\LoadClass[\ACM@fontsize, reqno]{amsart}
|
||||||
\RequirePackage{microtype}
|
\RequirePackage{microtype}
|
||||||
\RequirePackage{etoolbox}
|
\RequirePackage{etoolbox}
|
||||||
|
\RequirePackage{booktabs}
|
||||||
\RequirePackage{refcount}
|
\RequirePackage{refcount}
|
||||||
\RequirePackage{totpages}
|
\RequirePackage{totpages}
|
||||||
\RequirePackage{environ}
|
\RequirePackage{environ}
|
||||||
|
@ -452,6 +471,7 @@ Computing Machinery]
|
||||||
\let\@footnotetext@nolink\@footnotetext
|
\let\@footnotetext@nolink\@footnotetext
|
||||||
\RequirePackage[bookmarksnumbered,unicode]{hyperref}
|
\RequirePackage[bookmarksnumbered,unicode]{hyperref}
|
||||||
\pdfstringdefDisableCommands{%
|
\pdfstringdefDisableCommands{%
|
||||||
|
\def\addtocounter#1#2{}%
|
||||||
\def\unskip{}%
|
\def\unskip{}%
|
||||||
\def\textbullet{- }%
|
\def\textbullet{- }%
|
||||||
\def\textrightarrow{ -> }%
|
\def\textrightarrow{ -> }%
|
||||||
|
@ -472,16 +492,19 @@ Computing Machinery]
|
||||||
\urlstyle{sf}
|
\urlstyle{sf}
|
||||||
\fi
|
\fi
|
||||||
\AtEndPreamble{%
|
\AtEndPreamble{%
|
||||||
|
\if@ACM@urlbreakonhyphens
|
||||||
|
\def\do@url@hyp{\do\-}%
|
||||||
|
\fi
|
||||||
\if@ACM@screen
|
\if@ACM@screen
|
||||||
\hypersetup{colorlinks,
|
\hypersetup{colorlinks,
|
||||||
linkcolor=ACMRed,
|
linkcolor=ACMPurple,
|
||||||
citecolor=ACMPurple,
|
citecolor=ACMPurple,
|
||||||
urlcolor=ACMDarkBlue,
|
urlcolor=ACMDarkBlue,
|
||||||
filecolor=ACMDarkBlue}
|
filecolor=ACMDarkBlue}
|
||||||
\else
|
\else
|
||||||
\hypersetup{hidelinks}
|
\hypersetup{hidelinks}
|
||||||
\fi
|
\fi
|
||||||
\hypersetup{pdflang={English},
|
\hypersetup{pdflang={en},
|
||||||
pdfdisplaydoctitle}}
|
pdfdisplaydoctitle}}
|
||||||
\if@ACM@natbib
|
\if@ACM@natbib
|
||||||
\let\citeN\cite
|
\let\citeN\cite
|
||||||
|
@ -628,6 +651,22 @@ Computing Machinery]
|
||||||
\expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}}
|
\expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}}
|
||||||
\def\@textbottom{\vskip \z@ \@plus 1pt}
|
\def\@textbottom{\vskip \z@ \@plus 1pt}
|
||||||
\let\@texttop\relax
|
\let\@texttop\relax
|
||||||
|
\ifcase\ACM@format@nr
|
||||||
|
\relax % manuscript
|
||||||
|
\or % acmsmall
|
||||||
|
\or % acmlarge
|
||||||
|
\or % acmtog
|
||||||
|
\flushbottom
|
||||||
|
\or % sigconf
|
||||||
|
\flushbottom
|
||||||
|
\or % siggraph
|
||||||
|
\flushbottom
|
||||||
|
\or % sigplan
|
||||||
|
\flushbottom
|
||||||
|
\or % sigchi
|
||||||
|
\flushbottom
|
||||||
|
\or % sigchi-a
|
||||||
|
\fi
|
||||||
\RequirePackage{iftex}
|
\RequirePackage{iftex}
|
||||||
\ifPDFTeX
|
\ifPDFTeX
|
||||||
\input{glyphtounicode}
|
\input{glyphtounicode}
|
||||||
|
@ -656,6 +695,7 @@ Computing Machinery]
|
||||||
\RequirePackage[T1]{fontenc}
|
\RequirePackage[T1]{fontenc}
|
||||||
\ifxetex
|
\ifxetex
|
||||||
\RequirePackage[tt=false]{libertine}
|
\RequirePackage[tt=false]{libertine}
|
||||||
|
\setmonofont{inconsolata}
|
||||||
\else
|
\else
|
||||||
\RequirePackage[tt=false, type1=true]{libertine}
|
\RequirePackage[tt=false, type1=true]{libertine}
|
||||||
\fi
|
\fi
|
||||||
|
@ -668,6 +708,29 @@ Computing Machinery]
|
||||||
\if@ACM@sigchiamode
|
\if@ACM@sigchiamode
|
||||||
\renewcommand{\familydefault}{\sfdefault}
|
\renewcommand{\familydefault}{\sfdefault}
|
||||||
\fi
|
\fi
|
||||||
|
\newif\if@Description@present
|
||||||
|
\@Description@presenttrue
|
||||||
|
\newif\if@undescribed@images
|
||||||
|
\@undescribed@imagesfalse
|
||||||
|
\newcommand\Description[2][]{\global\@Description@presenttrue\ignorespaces}
|
||||||
|
\AtEndDocument{\if@undescribed@images
|
||||||
|
\ClassWarningNoLine{\@classname}{Some images may lack descriptions}\fi}
|
||||||
|
\AtBeginEnvironment{figure}{\@Description@presentfalse
|
||||||
|
\let\@vspace\@vspace@orig
|
||||||
|
\let\@vspacer\@vspacer@orig}
|
||||||
|
\AtBeginEnvironment{figure*}{\@Description@presentfalse
|
||||||
|
\let\@vspace\@vspace@orig
|
||||||
|
\let\@vspacer\@vspacer@orig}
|
||||||
|
\AtEndEnvironment{figure}{\if@Description@present\else
|
||||||
|
\global\@undescribed@imagestrue
|
||||||
|
\ClassWarning{\@classname}{A possible image without description}\fi}
|
||||||
|
\AtEndEnvironment{figure*}{\if@Description@present\else
|
||||||
|
\global\@undescribed@imagestrue
|
||||||
|
\ClassWarning{\@classname}{A possible image without description}\fi}
|
||||||
|
\AtBeginEnvironment{table}{\let\@vspace\@vspace@orig
|
||||||
|
\let\@vspacer\@vspacer@orig}
|
||||||
|
\AtBeginEnvironment{table*}{\let\@vspace\@vspace@orig
|
||||||
|
\let\@vspacer\@vspacer@orig}
|
||||||
\RequirePackage{caption, float}
|
\RequirePackage{caption, float}
|
||||||
\captionsetup[table]{position=top}
|
\captionsetup[table]{position=top}
|
||||||
\if@ACM@journal
|
\if@ACM@journal
|
||||||
|
@ -691,26 +754,41 @@ Computing Machinery]
|
||||||
\or % sigchi
|
\or % sigchi
|
||||||
\captionsetup[figure]{labelfont={bf, small},
|
\captionsetup[figure]{labelfont={bf, small},
|
||||||
textfont={bf, small}}
|
textfont={bf, small}}
|
||||||
|
\captionsetup[table]{labelfont={bf, small},
|
||||||
|
textfont={bf, small}}
|
||||||
\or % sigchi-a
|
\or % sigchi-a
|
||||||
\captionsetup[figure]{labelfont={bf, small},
|
\captionsetup[figure]{labelfont={bf, small},
|
||||||
textfont={bf, small}}
|
textfont={bf, small}}
|
||||||
|
\captionsetup[table]{labelfont={bf, small},
|
||||||
|
textfont={bf, small}}
|
||||||
\fi
|
\fi
|
||||||
\fi
|
\fi
|
||||||
\newfloat{sidebar}{}{sbar}
|
\newfloat{sidebar}{}{sbar}
|
||||||
\floatname{sidebar}{Sidebar}
|
\floatname{sidebar}{Sidebar}
|
||||||
\renewenvironment{sidebar}{\Collect@Body\@sidebar}{}
|
\renewenvironment{sidebar}{\Collect@Body\@sidebar}{}
|
||||||
\long\def\@sidebar#1{\bgroup\captionsetup{type=sidebar}%
|
\long\def\@sidebar#1{\bgroup\let\@vspace\@vspace@orig
|
||||||
|
\let\@vspacer\@vspacer@orig\captionsetup{type=sidebar}%
|
||||||
\marginpar{\small#1}\egroup}
|
\marginpar{\small#1}\egroup}
|
||||||
\newenvironment{marginfigure}{\Collect@Body\@marginfigure}{}
|
\newenvironment{marginfigure}{\Collect@Body\@marginfigure}{}
|
||||||
\long\def\@marginfigure#1{\bgroup\captionsetup{type=figure}%
|
\long\def\@marginfigure#1{\bgroup
|
||||||
\marginpar{\centering\small#1}\egroup}
|
\let\@vspace\@vspace@orig
|
||||||
|
\let\@vspacer\@vspacer@orig
|
||||||
|
\captionsetup{type=figure}%
|
||||||
|
\marginpar{\@Description@presentfalse\centering
|
||||||
|
\small#1\if@Description@present\else
|
||||||
|
\global\@undescribed@imagestrue
|
||||||
|
\ClassWarning{\@classname}{A possible image without description}
|
||||||
|
\fi}%
|
||||||
|
\egroup}
|
||||||
\newenvironment{margintable}{\Collect@Body\@margintable}{}
|
\newenvironment{margintable}{\Collect@Body\@margintable}{}
|
||||||
\long\def\@margintable#1{\bgroup\captionsetup{type=table}%
|
\long\def\@margintable#1{\bgroup\let\@vspace\@vspace@orig
|
||||||
|
\let\@vspacer\@vspacer@orig\captionsetup{type=table}%
|
||||||
\marginpar{\centering\small#1}\egroup}
|
\marginpar{\centering\small#1}\egroup}
|
||||||
\newdimen\fulltextwidth
|
\newdimen\fulltextwidth
|
||||||
\fulltextwidth=\dimexpr(\textwidth+\marginparwidth+\marginparsep)
|
\fulltextwidth=\dimexpr(\textwidth+\marginparwidth+\marginparsep)
|
||||||
\if@ACM@sigchiamode
|
\if@ACM@sigchiamode
|
||||||
\def\@dblfloat{\bgroup\columnwidth=\fulltextwidth
|
\def\@dblfloat{\bgroup\let\@vspace\@vspace@orig
|
||||||
|
\let\@vspacer\@vspacer@orig\columnwidth=\fulltextwidth
|
||||||
\let\@endfloatbox\@endwidefloatbox
|
\let\@endfloatbox\@endwidefloatbox
|
||||||
\def\@fpsadddefault{\def\@fps{tp}}%
|
\def\@fpsadddefault{\def\@fps{tp}}%
|
||||||
\@float}
|
\@float}
|
||||||
|
@ -796,6 +874,7 @@ Computing Machinery]
|
||||||
CIE,%
|
CIE,%
|
||||||
CSUR,%
|
CSUR,%
|
||||||
DTRAP,%
|
DTRAP,%
|
||||||
|
HEALTH,%
|
||||||
IMWUT,%
|
IMWUT,%
|
||||||
JACM,%
|
JACM,%
|
||||||
JDIQ,%
|
JDIQ,%
|
||||||
|
@ -814,7 +893,7 @@ Computing Machinery]
|
||||||
TALLIP,%
|
TALLIP,%
|
||||||
TAP,%
|
TAP,%
|
||||||
TCPS,%
|
TCPS,%
|
||||||
TDSCI,%
|
TDS,%
|
||||||
TEAC,%
|
TEAC,%
|
||||||
TECS,%
|
TECS,%
|
||||||
THRI,%
|
THRI,%
|
||||||
|
@ -863,6 +942,10 @@ Computing Machinery]
|
||||||
\def\@journalName{Digital Threats: Research and Practice}%
|
\def\@journalName{Digital Threats: Research and Practice}%
|
||||||
\def\@journalNameShort{Digit. Threat. Res. Pract.}%
|
\def\@journalNameShort{Digit. Threat. Res. Pract.}%
|
||||||
\def\@permissionCodeOne{2576-5337}%
|
\def\@permissionCodeOne{2576-5337}%
|
||||||
|
\or % HEALTH
|
||||||
|
\def\@journalName{ACM Transactions on Computing for Healthcare}%
|
||||||
|
\def\@journalNameShort{ACM Trans. Comput. Healthcare}%
|
||||||
|
\def\@permissionCodeOne{2637-8051}%
|
||||||
\or % IMWUT
|
\or % IMWUT
|
||||||
\def\@journalName{Proceedings of the ACM on Interactive, Mobile,
|
\def\@journalName{Proceedings of the ACM on Interactive, Mobile,
|
||||||
Wearable and Ubiquitous Technologies}%
|
Wearable and Ubiquitous Technologies}%
|
||||||
|
@ -940,7 +1023,7 @@ Computing Machinery]
|
||||||
\def\@journalName{ACM Transactions on Applied Perception}%
|
\def\@journalName{ACM Transactions on Applied Perception}%
|
||||||
\or % TCPS
|
\or % TCPS
|
||||||
\def\@journalName{ACM Transactions on Cyber-Physical Systems}%
|
\def\@journalName{ACM Transactions on Cyber-Physical Systems}%
|
||||||
\or % TDSCI
|
\or % TDS
|
||||||
\def\@journalName{ACM Transactions on Data Science}%
|
\def\@journalName{ACM Transactions on Data Science}%
|
||||||
\def\@journalNameShort{ACM Trans. Data Sci.}%
|
\def\@journalNameShort{ACM Trans. Data Sci.}%
|
||||||
\def\@permissionCodeOne{2577-3224}%
|
\def\@permissionCodeOne{2577-3224}%
|
||||||
|
@ -1082,7 +1165,8 @@ Computing Machinery]
|
||||||
}{%
|
}{%
|
||||||
\ClassError{\@classname}{Incorrect journal #1}%
|
\ClassError{\@classname}{Incorrect journal #1}%
|
||||||
}%
|
}%
|
||||||
\def\acmJournal#1{\setkeys{ACM}{acmJournal=#1}}
|
\def\acmJournal#1{\setkeys{ACM}{acmJournal=#1}%
|
||||||
|
\global\@ACM@journal@bibstriptrue}
|
||||||
\def\@journalCode@nr{0}
|
\def\@journalCode@nr{0}
|
||||||
\def\@journalName{}%
|
\def\@journalName{}%
|
||||||
\def\@journalNameShort{\@journalName}%
|
\def\@journalNameShort{\@journalName}%
|
||||||
|
@ -1095,9 +1179,13 @@ Computing Machinery]
|
||||||
\gdef\acmConference@venue{#4}%
|
\gdef\acmConference@venue{#4}%
|
||||||
\ifx\acmConference@shortname\@empty
|
\ifx\acmConference@shortname\@empty
|
||||||
\gdef\acmConference@shortname{#2}%
|
\gdef\acmConference@shortname{#2}%
|
||||||
\fi}
|
\fi
|
||||||
|
\global\@ACM@journal@bibstripfalse
|
||||||
|
}
|
||||||
|
\if@ACM@journal\else
|
||||||
\acmConference[Conference'17]{ACM Conference}{July 2017}{Washington,
|
\acmConference[Conference'17]{ACM Conference}{July 2017}{Washington,
|
||||||
DC, USA}
|
DC, USA}%
|
||||||
|
\fi
|
||||||
\def\acmBooktitle#1{\gdef\@acmBooktitle{#1}}
|
\def\acmBooktitle#1{\gdef\@acmBooktitle{#1}}
|
||||||
\acmBooktitle{Proceedings of \acmConference@name
|
\acmBooktitle{Proceedings of \acmConference@name
|
||||||
\ifx\acmConference@name\acmConference@shortname\else
|
\ifx\acmConference@name\acmConference@shortname\else
|
||||||
|
@ -1119,6 +1207,8 @@ Computing Machinery]
|
||||||
\newif\if@insideauthorgroup
|
\newif\if@insideauthorgroup
|
||||||
\@insideauthorgroupfalse
|
\@insideauthorgroupfalse
|
||||||
\renewcommand\author[2][]{%
|
\renewcommand\author[2][]{%
|
||||||
|
\IfSubStr{#2}{,}{\ClassWarning{\@classname}{Do not put several
|
||||||
|
authors in the same \string\author\space macro!}}{}%
|
||||||
\global\advance\num@authors by 1\relax
|
\global\advance\num@authors by 1\relax
|
||||||
\if@insideauthorgroup\else
|
\if@insideauthorgroup\else
|
||||||
\global\advance\num@authorgroups by 1\relax
|
\global\advance\num@authorgroups by 1\relax
|
||||||
|
@ -1182,6 +1272,8 @@ Computing Machinery]
|
||||||
\let\country\position
|
\let\country\position
|
||||||
Also with #1\unskip.\egroup}
|
Also with #1\unskip.\egroup}
|
||||||
\renewcommand{\email}[2][]{%
|
\renewcommand{\email}[2][]{%
|
||||||
|
\IfSubStr{#2}{,}{\ClassWarning{\@classname}{Do not put several
|
||||||
|
addresses in the same \string\email\space macro!}}{}%
|
||||||
\if@ACM@anonymous\else
|
\if@ACM@anonymous\else
|
||||||
\g@addto@macro\addresses{\email{#1}{#2}}%
|
\g@addto@macro\addresses{\email{#1}{#2}}%
|
||||||
\fi}
|
\fi}
|
||||||
|
@ -1327,10 +1419,12 @@ Computing Machinery]
|
||||||
\RequirePackage{comment}
|
\RequirePackage{comment}
|
||||||
\excludecomment{CCSXML}
|
\excludecomment{CCSXML}
|
||||||
\let\@concepts\@empty
|
\let\@concepts\@empty
|
||||||
|
\newcounter{@concepts}
|
||||||
\newcommand\ccsdesc[2][100]{%
|
\newcommand\ccsdesc[2][100]{%
|
||||||
\ccsdesc@parse#1~#2~~\ccsdesc@parse@end}
|
\ccsdesc@parse#1~#2~~\ccsdesc@parse@end}
|
||||||
\RequirePackage{textcomp}
|
\RequirePackage{textcomp}
|
||||||
\def\ccsdesc@parse#1~#2~#3~{%
|
\def\ccsdesc@parse#1~#2~#3~{%
|
||||||
|
\stepcounter{@concepts}%
|
||||||
\expandafter\ifx\csname CCS@General@#2\endcsname\relax
|
\expandafter\ifx\csname CCS@General@#2\endcsname\relax
|
||||||
\expandafter\gdef\csname CCS@General@#2\endcsname{\textbullet\
|
\expandafter\gdef\csname CCS@General@#2\endcsname{\textbullet\
|
||||||
\textbf{#2}}%
|
\textbf{#2}}%
|
||||||
|
@ -1344,9 +1438,10 @@ Computing Machinery]
|
||||||
\expandafter\gdef\csname CCS@Punctuation@#2\endcsname{
|
\expandafter\gdef\csname CCS@Punctuation@#2\endcsname{
|
||||||
\textrightarrow\ }%
|
\textrightarrow\ }%
|
||||||
\expandafter\g@addto@macro\expandafter{\csname CCS@Specific@#2\endcsname}{%
|
\expandafter\g@addto@macro\expandafter{\csname CCS@Specific@#2\endcsname}{%
|
||||||
\ifnum#1>499\textbf{#3}; \else
|
\addtocounter{@concepts}{-1}%
|
||||||
\ifnum#1>299\textit{#3}; \else
|
\ifnum#1>499\textbf{#3}\else
|
||||||
#3; \fi\fi}%
|
\ifnum#1>299\textit{#3}\else
|
||||||
|
#3\fi\fi\ifnum\value{@concepts}=0.\else; \fi}%
|
||||||
\fi
|
\fi
|
||||||
\ccsdesc@parse@finish}
|
\ccsdesc@parse@finish}
|
||||||
\def\ccsdesc@parse@finish#1\ccsdesc@parse@end{}
|
\def\ccsdesc@parse@finish#1\ccsdesc@parse@end{}
|
||||||
|
@ -1591,12 +1686,11 @@ Computing Machinery]
|
||||||
\ifnum\num@authorgroups=0\author{}\fi
|
\ifnum\num@authorgroups=0\author{}\fi
|
||||||
\fi
|
\fi
|
||||||
\begingroup
|
\begingroup
|
||||||
|
\let\@vspace\@vspace@orig
|
||||||
|
\let\@vspacer\@vspacer@orig
|
||||||
\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}%
|
||||||
\global\@topnum\z@ % this prevents floats from falling
|
|
||||||
% at the top of page 1
|
|
||||||
\global\@botnum\z@ % we do not want them to be on the 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
|
||||||
|
@ -1616,7 +1710,7 @@ Computing Machinery]
|
||||||
\fi
|
\fi
|
||||||
\ifx\@empty\@authorsaddresses\else
|
\ifx\@empty\@authorsaddresses\else
|
||||||
\if@ACM@anonymous\else
|
\if@ACM@anonymous\else
|
||||||
\if@ACM@journal
|
\if@ACM@journal@bibstrip
|
||||||
\footnotetextauthorsaddresses{%
|
\footnotetextauthorsaddresses{%
|
||||||
\def\par{\let\par\@par}\parindent\z@\@setauthorsaddresses}%
|
\def\par{\let\par\@par}\parindent\z@\@setauthorsaddresses}%
|
||||||
\fi
|
\fi
|
||||||
|
@ -1633,7 +1727,7 @@ Computing Machinery]
|
||||||
\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 information
|
\if@ACM@journal@bibstrip\else % Print the conference information
|
||||||
{\itshape \acmConference@shortname, \acmConference@date, \acmConference@venue}\par
|
{\itshape \acmConference@shortname, \acmConference@date, \acmConference@venue}\par
|
||||||
\fi
|
\fi
|
||||||
\fi
|
\fi
|
||||||
|
@ -1649,7 +1743,7 @@ Computing Machinery]
|
||||||
This is the author's version of the work. It is posted here for
|
This is the author's version of the work. It is posted here for
|
||||||
your personal use. Not for redistribution. The definitive Version
|
your personal use. Not for redistribution. The definitive Version
|
||||||
of Record was published in
|
of Record was published in
|
||||||
\if@ACM@journal
|
\if@ACM@journal@bibstrip
|
||||||
\emph{\@journalName}%
|
\emph{\@journalName}%
|
||||||
\else
|
\else
|
||||||
\emph{\@acmBooktitle}%
|
\emph{\@acmBooktitle}%
|
||||||
|
@ -1661,7 +1755,7 @@ Computing Machinery]
|
||||||
\fi\\
|
\fi\\
|
||||||
\else
|
\else
|
||||||
\if@ACM@nonacm\else
|
\if@ACM@nonacm\else
|
||||||
\if@ACM@journal
|
\if@ACM@journal@bibstrip
|
||||||
\@permissionCodeOne/\@acmYear/\@acmMonth-ART\@acmArticle
|
\@permissionCodeOne/\@acmYear/\@acmMonth-ART\@acmArticle
|
||||||
\ifx\@acmPrice\@empty\else\ \$\@acmPrice\fi\\
|
\ifx\@acmPrice\@empty\else\ \$\@acmPrice\fi\\
|
||||||
\@formatdoi{\@acmDOI}%
|
\@formatdoi{\@acmDOI}%
|
||||||
|
@ -1707,6 +1801,9 @@ Computing Machinery]
|
||||||
\csname ver@acmart.cls\endcsname\space
|
\csname ver@acmart.cls\endcsname\space
|
||||||
and hyperref
|
and hyperref
|
||||||
\csname ver@hyperref.sty\endcsname}}%
|
\csname ver@hyperref.sty\endcsname}}%
|
||||||
|
\global\@topnum\z@ % this prevents floats from falling
|
||||||
|
% at the top of page 1
|
||||||
|
\global\@botnum\z@ % we do not want them to be on the bottom either
|
||||||
\@printendtopmatter
|
\@printendtopmatter
|
||||||
\@afterindentfalse
|
\@afterindentfalse
|
||||||
\@afterheading
|
\@afterheading
|
||||||
|
@ -2056,9 +2153,11 @@ Computing Machinery]
|
||||||
\fi
|
\fi
|
||||||
\gdef\and{}}%
|
\gdef\and{}}%
|
||||||
\def\email##1##2{\ifx\@currentaffiliation\@empty
|
\def\email##1##2{\ifx\@currentaffiliation\@empty
|
||||||
\gdef\@currentaffiliation{\nolinkurl{##2}}%
|
\gdef\@currentaffiliation{\bgroup
|
||||||
|
\mathchardef\UrlBreakPenalty=10000\nolinkurl{##2}\egroup}%
|
||||||
\else
|
\else
|
||||||
\g@addto@macro\@currentaffiliation{\par\nolinkurl{##2}}%
|
\g@addto@macro\@currentaffiliation{\par\bgroup
|
||||||
|
\mathchardef\UrlBreakPenalty=10000\nolinkurl{##2}\egroup}%
|
||||||
\fi}%
|
\fi}%
|
||||||
\def\affiliation##1##2{\ifx\@currentaffiliation\@empty
|
\def\affiliation##1##2{\ifx\@currentaffiliation\@empty
|
||||||
\gdef\@currentaffiliation{%
|
\gdef\@currentaffiliation{%
|
||||||
|
@ -2144,7 +2243,12 @@ Computing Machinery]
|
||||||
\def\@teaser##1{\par\bigskip\bgroup
|
\def\@teaser##1{\par\bigskip\bgroup
|
||||||
\captionsetup{type=figure}##1\egroup\par}
|
\captionsetup{type=figure}##1\egroup\par}
|
||||||
\global\setbox\mktitle@bx=\vbox{\noindent\box\mktitle@bx\par
|
\global\setbox\mktitle@bx=\vbox{\noindent\box\mktitle@bx\par
|
||||||
\noindent\@teaserfigures\par\medskip}%
|
\noindent\@Description@presentfalse
|
||||||
|
\@teaserfigures\par\if@Description@present\else
|
||||||
|
\global\@undescribed@imagestrue
|
||||||
|
\ClassWarning{\@classname}{A possible image without
|
||||||
|
description}\fi
|
||||||
|
\medskip}%
|
||||||
\fi}
|
\fi}
|
||||||
\def\@mkabstract{\bgroup
|
\def\@mkabstract{\bgroup
|
||||||
\ifx\@abstract\@lempty\else
|
\ifx\@abstract\@lempty\else
|
||||||
|
@ -2152,11 +2256,13 @@ Computing Machinery]
|
||||||
\if@ACM@journal
|
\if@ACM@journal
|
||||||
\everypar{\setbox\z@\lastbox\everypar{}}\small
|
\everypar{\setbox\z@\lastbox\everypar{}}\small
|
||||||
\else
|
\else
|
||||||
\section*{Abstract}%
|
\section*{\abstractname}%
|
||||||
\fi
|
\fi
|
||||||
\ignorespaces\@abstract\par}%
|
\ignorespaces\@abstract\par}%
|
||||||
\fi\egroup}
|
\fi\egroup}
|
||||||
\def\@mkbibcitation{\bgroup
|
\def\@mkbibcitation{\bgroup
|
||||||
|
\let\@vspace\@vspace@orig
|
||||||
|
\let\@vspacer\@vspacer@orig
|
||||||
\def\@pages@word{\ifnum\getrefnumber{TotPages}=1\relax page\else pages\fi}%
|
\def\@pages@word{\ifnum\getrefnumber{TotPages}=1\relax page\else pages\fi}%
|
||||||
\def\footnotemark{}%
|
\def\footnotemark{}%
|
||||||
\def\\{\unskip{} \ignorespaces}%
|
\def\\{\unskip{} \ignorespaces}%
|
||||||
|
@ -2174,7 +2280,7 @@ Computing Machinery]
|
||||||
% and the present \@mkbibcitation definition is never used
|
% and the present \@mkbibcitation definition is never used
|
||||||
% in this case. The conditional remains useful if the user
|
% in this case. The conditional remains useful if the user
|
||||||
% explicitly sets \settopmatter{printacmref=true}.
|
% explicitly sets \settopmatter{printacmref=true}.
|
||||||
\if@ACM@journal
|
\if@ACM@journal@bibstrip
|
||||||
\textit{\@journalNameShort}
|
\textit{\@journalNameShort}
|
||||||
\@acmVolume, \@acmNumber \@article@string (\@acmPubDate),
|
\@acmVolume, \@acmNumber \@article@string (\@acmPubDate),
|
||||||
\ref{TotPages}~\@pages@word.
|
\ref{TotPages}~\@pages@word.
|
||||||
|
@ -2189,10 +2295,22 @@ Computing Machinery]
|
||||||
\fi
|
\fi
|
||||||
\ifx\@acmDOI\@empty\else\@formatdoi{\@acmDOI}\fi
|
\ifx\@acmDOI\@empty\else\@formatdoi{\@acmDOI}\fi
|
||||||
\par\egroup}
|
\par\egroup}
|
||||||
\def\@printendtopmatter{\par\bigskip}
|
\def\@printendtopmatter{\bgroup
|
||||||
|
\let\@vspace\@vspace@orig
|
||||||
|
\let\@vspacer\@vspacer@orig
|
||||||
|
\par\bigskip
|
||||||
|
\egroup}
|
||||||
\def\@setthanks{\long\def\thanks##1{\par##1\@addpunct.}\thankses}
|
\def\@setthanks{\long\def\thanks##1{\par##1\@addpunct.}\thankses}
|
||||||
\def\@setauthorsaddresses{\@authorsaddresses\unskip\@addpunct.}
|
\def\@setauthorsaddresses{\@authorsaddresses\unskip\@addpunct.}
|
||||||
\RequirePackage{fancyhdr}
|
\RequirePackage{fancyhdr}
|
||||||
|
\let\ACM@ps@plain\ps@plain
|
||||||
|
\let\ACM@ps@myheadings\ps@myheadings
|
||||||
|
\let\ACM@ps@headings\ps@headings
|
||||||
|
\def\ACM@restore@pagestyle{%
|
||||||
|
\let\ps@plain\ACM@ps@plain
|
||||||
|
\let\ps@myheadings\ACM@ps@myheadings
|
||||||
|
\let\ps@headings\ACM@ps@headings}
|
||||||
|
\AtBeginDocument{\ACM@restore@pagestyle}
|
||||||
\if@ACM@review
|
\if@ACM@review
|
||||||
\newsavebox{\ACM@linecount@bx}
|
\newsavebox{\ACM@linecount@bx}
|
||||||
\newlength\ACM@linecount@bxht
|
\newlength\ACM@linecount@bxht
|
||||||
|
@ -2244,7 +2362,8 @@ Computing Machinery]
|
||||||
Anon.
|
Anon.
|
||||||
\ifx\@acmSubmissionID\@empty\else Submission Id: \@acmSubmissionID\fi
|
\ifx\@acmSubmissionID\@empty\else Submission Id: \@acmSubmissionID\fi
|
||||||
\else\shortauthors\fi}
|
\else\shortauthors\fi}
|
||||||
\def\@headfootfont{\sffamily}
|
\def\@headfootfont{\sffamily\footnotesize}
|
||||||
|
\AtBeginDocument{%
|
||||||
\fancypagestyle{standardpagestyle}{%
|
\fancypagestyle{standardpagestyle}{%
|
||||||
\fancyhf{}%
|
\fancyhf{}%
|
||||||
\renewcommand{\headrulewidth}{\z@}%
|
\renewcommand{\headrulewidth}{\z@}%
|
||||||
|
@ -2255,7 +2374,8 @@ Computing Machinery]
|
||||||
\else%
|
\else%
|
||||||
\@acmArticle\if@ACM@printfolios:\thepage\fi%
|
\@acmArticle\if@ACM@printfolios:\thepage\fi%
|
||||||
\fi%
|
\fi%
|
||||||
}
|
}%
|
||||||
|
\if@ACM@journal@bibstrip
|
||||||
\ifcase\ACM@format@nr
|
\ifcase\ACM@format@nr
|
||||||
\relax % manuscript
|
\relax % manuscript
|
||||||
\fancyhead[LE]{\ACM@linecountL\if@ACM@printfolios\thepage\fi}%
|
\fancyhead[LE]{\ACM@linecountL\if@ACM@printfolios\thepage\fi}%
|
||||||
|
@ -2273,7 +2393,7 @@ Computing Machinery]
|
||||||
\if@ACM@nonacm\else%
|
\if@ACM@nonacm\else%
|
||||||
\fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
|
\fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
|
||||||
\@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}%
|
\@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}%
|
||||||
\fi%
|
\fi
|
||||||
\or % acmlarge
|
\or % acmlarge
|
||||||
\fancyhead[LE]{\ACM@linecountL\@headfootfont
|
\fancyhead[LE]{\ACM@linecountL\@headfootfont
|
||||||
\@acmArticlePage\quad\textbullet\quad\@shortauthors}%
|
\@acmArticlePage\quad\textbullet\quad\@shortauthors}%
|
||||||
|
@ -2283,7 +2403,7 @@ Computing Machinery]
|
||||||
\if@ACM@nonacm\else%
|
\if@ACM@nonacm\else%
|
||||||
\fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
|
\fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
|
||||||
\@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}%
|
\@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}%
|
||||||
\fi%
|
\fi
|
||||||
\or % acmtog
|
\or % acmtog
|
||||||
\fancyhead[LE]{\ACM@linecountL\@headfootfont
|
\fancyhead[LE]{\ACM@linecountL\@headfootfont
|
||||||
\@acmArticlePage\quad\textbullet\quad\@shortauthors}%
|
\@acmArticlePage\quad\textbullet\quad\@shortauthors}%
|
||||||
|
@ -2294,17 +2414,32 @@ Computing Machinery]
|
||||||
\if@ACM@nonacm\else%
|
\if@ACM@nonacm\else%
|
||||||
\fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
|
\fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
|
||||||
\@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}%
|
\@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}%
|
||||||
\fi%
|
\fi
|
||||||
\else % Proceedings
|
\else % Proceedings
|
||||||
\fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}%
|
\fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}%
|
||||||
\fancyhead[LO]{\ACM@linecountL\@headfootfont\shorttitle}%
|
\fancyhead[LO]{\ACM@linecountL\@headfootfont\shorttitle}%
|
||||||
\fancyhead[RE]{\@headfootfont\@shortauthors\ACM@linecountR}%
|
\fancyhead[RE]{\@headfootfont\@shortauthors\ACM@linecountR}%
|
||||||
\if@ACM@nonacm\else%
|
\if@ACM@nonacm\else%
|
||||||
\fancyhead[LE]{\ACM@linecountL\@headfootfont\acmConference@shortname,
|
\fancyhead[LE]{\ACM@linecountL\@headfootfont\footnotesize
|
||||||
|
\acmConference@shortname,
|
||||||
\acmConference@date, \acmConference@venue}%
|
\acmConference@date, \acmConference@venue}%
|
||||||
\fancyhead[RO]{\@headfootfont\acmConference@shortname,
|
\fancyhead[RO]{\@headfootfont
|
||||||
|
\acmConference@shortname,
|
||||||
\acmConference@date, \acmConference@venue\ACM@linecountR}%
|
\acmConference@date, \acmConference@venue\ACM@linecountR}%
|
||||||
\fi%
|
\fi
|
||||||
|
\fi
|
||||||
|
\else % Proceedings
|
||||||
|
\fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}%
|
||||||
|
\fancyhead[LO]{\ACM@linecountL\@headfootfont\shorttitle}%
|
||||||
|
\fancyhead[RE]{\@headfootfont\@shortauthors\ACM@linecountR}%
|
||||||
|
\if@ACM@nonacm\else%
|
||||||
|
\fancyhead[LE]{\ACM@linecountL\@headfootfont
|
||||||
|
\acmConference@shortname,
|
||||||
|
\acmConference@date, \acmConference@venue}%
|
||||||
|
\fancyhead[RO]{\@headfootfont
|
||||||
|
\acmConference@shortname,
|
||||||
|
\acmConference@date, \acmConference@venue\ACM@linecountR}%
|
||||||
|
\fi
|
||||||
\fi
|
\fi
|
||||||
\if@ACM@sigchiamode
|
\if@ACM@sigchiamode
|
||||||
\fancyheadoffset[L]{\dimexpr(\marginparsep+\marginparwidth)}%
|
\fancyheadoffset[L]{\dimexpr(\marginparsep+\marginparwidth)}%
|
||||||
|
@ -2312,8 +2447,9 @@ Computing Machinery]
|
||||||
\if@ACM@timestamp
|
\if@ACM@timestamp
|
||||||
\fancyfoot[LO,RE]{\ACM@timestamp}
|
\fancyfoot[LO,RE]{\ACM@timestamp}
|
||||||
\fi
|
\fi
|
||||||
}
|
}%
|
||||||
\pagestyle{standardpagestyle}
|
\pagestyle{standardpagestyle}
|
||||||
|
}
|
||||||
\newdimen\@folio@wd
|
\newdimen\@folio@wd
|
||||||
\@folio@wd=\z@
|
\@folio@wd=\z@
|
||||||
\newdimen\@folio@ht
|
\newdimen\@folio@ht
|
||||||
|
@ -2354,10 +2490,12 @@ Computing Machinery]
|
||||||
\textcolor{white}{\LARGE\sffamily\bfseries\@acmArticle}}}}
|
\textcolor{white}{\LARGE\sffamily\bfseries\@acmArticle}}}}
|
||||||
\end{picture}\fi}
|
\end{picture}\fi}
|
||||||
|
|
||||||
|
\AtBeginDocument{%
|
||||||
\fancypagestyle{firstpagestyle}{%
|
\fancypagestyle{firstpagestyle}{%
|
||||||
\fancyhf{}%
|
\fancyhf{}%
|
||||||
\renewcommand{\headrulewidth}{\z@}%
|
\renewcommand{\headrulewidth}{\z@}%
|
||||||
\renewcommand{\footrulewidth}{\z@}%
|
\renewcommand{\footrulewidth}{\z@}%
|
||||||
|
\if@ACM@journal@bibstrip
|
||||||
\ifcase\ACM@format@nr
|
\ifcase\ACM@format@nr
|
||||||
\relax % manuscript
|
\relax % manuscript
|
||||||
\fancyhead[L]{\ACM@linecountL}%
|
\fancyhead[L]{\ACM@linecountL}%
|
||||||
|
@ -2398,6 +2536,11 @@ Computing Machinery]
|
||||||
\fancyhead[R]{\ACM@linecountR}%
|
\fancyhead[R]{\ACM@linecountR}%
|
||||||
\fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}%
|
\fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}%
|
||||||
\fi
|
\fi
|
||||||
|
\else
|
||||||
|
\fancyhead[L]{\ACM@linecountL}%
|
||||||
|
\fancyhead[R]{\ACM@linecountR}%
|
||||||
|
\fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}%
|
||||||
|
\fi
|
||||||
\if@ACM@timestamp
|
\if@ACM@timestamp
|
||||||
\ifnum\ACM@format@nr=0\relax % Manuscript
|
\ifnum\ACM@format@nr=0\relax % Manuscript
|
||||||
\fancyfoot[LO,RE]{\ACM@timestamp\quad
|
\fancyfoot[LO,RE]{\ACM@timestamp\quad
|
||||||
|
@ -2408,15 +2551,7 @@ Computing Machinery]
|
||||||
\fancyfoot[LO,RE]{\ACM@timestamp}
|
\fancyfoot[LO,RE]{\ACM@timestamp}
|
||||||
\fi
|
\fi
|
||||||
\fi
|
\fi
|
||||||
}
|
}}
|
||||||
\let\ACM@ps@plain\ps@plain
|
|
||||||
\let\ACM@ps@myheadings\ps@myheadings
|
|
||||||
\let\ACM@ps@headings\ps@headings
|
|
||||||
\def\ACM@restore@pagestyle{%
|
|
||||||
\let\ps@plain\ACM@ps@plain
|
|
||||||
\let\ps@myheadings\ACM@ps@myheadings
|
|
||||||
\let\ps@headings\ACM@ps@headings}
|
|
||||||
\AtBeginDocument{\ACM@restore@pagestyle}
|
|
||||||
\def\ACM@NRadjust#1{%
|
\def\ACM@NRadjust#1{%
|
||||||
\begingroup
|
\begingroup
|
||||||
\expandafter\ifx\csname Sectionformat\endcsname\relax
|
\expandafter\ifx\csname Sectionformat\endcsname\relax
|
||||||
|
@ -2634,10 +2769,40 @@ Computing Machinery]
|
||||||
}{%
|
}{%
|
||||||
\popQED\endtrivlist\@endpefalse
|
\popQED\endtrivlist\@endpefalse
|
||||||
}
|
}
|
||||||
|
\AtEndPreamble{%
|
||||||
|
\if@ACM@balance
|
||||||
|
\ifcase\ACM@format@nr
|
||||||
|
\relax % manuscript
|
||||||
|
\global\@ACM@balancefalse
|
||||||
|
\or % acmsmall
|
||||||
|
\global\@ACM@balancefalse
|
||||||
|
\or % acmlarge
|
||||||
|
\global\@ACM@balancefalse
|
||||||
|
\or % acmtog
|
||||||
|
\RequirePackage{balance}%
|
||||||
|
\or % sigconf
|
||||||
|
\RequirePackage{balance}%
|
||||||
|
\or % siggraph
|
||||||
|
\RequirePackage{balance}%
|
||||||
|
\or % sigplan
|
||||||
|
\RequirePackage{balance}%
|
||||||
|
\or % sigchi
|
||||||
|
\RequirePackage{balance}%
|
||||||
|
\or % sigchi-a
|
||||||
|
\global\@ACM@balancefalse
|
||||||
|
\fi
|
||||||
|
\fi
|
||||||
|
}
|
||||||
|
\AtEndDocument{%
|
||||||
|
\if@ACM@balance
|
||||||
|
\if@twocolumn
|
||||||
|
\balance
|
||||||
|
\fi\fi}
|
||||||
|
\newcommand\acksname{Acknowledgments}
|
||||||
\specialcomment{acks}{%
|
\specialcomment{acks}{%
|
||||||
\begingroup
|
\begingroup
|
||||||
\section*{Acknowledgments}
|
\section*{\acksname}
|
||||||
\phantomsection\addcontentsline{toc}{section}{Acknowledgments}
|
\phantomsection\addcontentsline{toc}{section}{\acksname}
|
||||||
}{%
|
}{%
|
||||||
\endgroup
|
\endgroup
|
||||||
}
|
}
|
||||||
|
@ -2665,6 +2830,19 @@ 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}
|
||||||
|
\let\@vspace@orig=\@vspace
|
||||||
|
\let\@vspacer@orig=\@vspacer
|
||||||
|
\apptocmd{\@vspace}{\ClassWarning{\@classname}{\string\vspace\space should
|
||||||
|
only be used to provide space above/below surrounding
|
||||||
|
objects}}{}{}
|
||||||
|
\apptocmd{\@vspacer}{\ClassWarning{\@classname}{\string\vspace\space should
|
||||||
|
only be used to provide space above/below surrounding
|
||||||
|
objects}}{}{}
|
||||||
|
\let\ACM@origbaselinestretch\baselinestretch
|
||||||
|
\AtEndDocument{\ifx\baselinestretch\ACM@origbaselinestretch\else
|
||||||
|
\ClassError{\@classname}{An attempt to redefine
|
||||||
|
\string\baselinestretch\space detected. Please do not do this for
|
||||||
|
ACM submissions!}\fi}
|
||||||
\normalsize\normalfont\frenchspacing
|
\normalsize\normalfont\frenchspacing
|
||||||
\endinput
|
\endinput
|
||||||
%%
|
%%
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
(case n [(1) "("] [(0) ""] [(2) "(("] [else (make-string n #\()])))
|
(case n [(1) "("] [(0) ""] [(2) "(("] [else (make-string n #\()])))
|
||||||
(define (make-closers n)
|
(define (make-closers n)
|
||||||
(racketparenfont
|
(racketparenfont
|
||||||
(case n [(1) ")"] [(0) ""] [(2) "))"] [else (make-string n #\()])))
|
(case n [(1) ")"] [(0) ""] [(2) "))"] [else (make-string n #\))])))
|
||||||
|
|
||||||
(define-syntax (arg-contract stx)
|
(define-syntax (arg-contract stx)
|
||||||
(syntax-case stx (... ...+ _...superclass-args...)
|
(syntax-case stx (... ...+ _...superclass-args...)
|
||||||
|
@ -207,13 +207,13 @@
|
||||||
(list (result-value value.value) ...)))))]))
|
(list (result-value value.value) ...)))))]))
|
||||||
|
|
||||||
(define-struct arg
|
(define-struct arg
|
||||||
(special? kw id optional? starts-optional? ends-optional? num-closers))
|
(special? kw id optional? starts-optional? ends-optional? depth))
|
||||||
|
|
||||||
(define (*defproc kind link? mode within-id
|
(define (*defproc kind link? mode within-id
|
||||||
stx-ids sym prototypes arg-contractss arg-valss result-contracts content-thunk
|
stx-ids sym prototypes arg-contractss arg-valss result-contracts content-thunk
|
||||||
[result-values (map (lambda (x) #f) result-contracts)])
|
[result-values (map (lambda (x) #f) result-contracts)])
|
||||||
(define max-proto-width (current-display-width))
|
(define max-proto-width (current-display-width))
|
||||||
(define ((arg->elem show-opt-start?) arg)
|
(define ((arg->elem show-opt-start?) arg next-depth)
|
||||||
(let* ([e (cond [(not (arg-special? arg))
|
(let* ([e (cond [(not (arg-special? arg))
|
||||||
(if (arg-kw arg)
|
(if (arg-kw arg)
|
||||||
(if (eq? mode 'new)
|
(if (eq? mode 'new)
|
||||||
|
@ -235,10 +235,11 @@
|
||||||
[e (if (arg-ends-optional? arg)
|
[e (if (arg-ends-optional? arg)
|
||||||
(make-element #f (list e "]"))
|
(make-element #f (list e "]"))
|
||||||
e)]
|
e)]
|
||||||
[e (if (zero? (arg-num-closers arg))
|
[num-closers (- (arg-depth arg) next-depth)]
|
||||||
|
[e (if (zero? num-closers)
|
||||||
e
|
e
|
||||||
(make-element
|
(make-element
|
||||||
#f (list e (make-closers (arg-num-closers arg)))))])
|
#f (list e (make-closers num-closers))))])
|
||||||
(if (and show-opt-start? (arg-starts-optional? arg))
|
(if (and show-opt-start? (arg-starts-optional? arg))
|
||||||
(make-element #f (list "[" e))
|
(make-element #f (list "[" e))
|
||||||
e)))
|
e)))
|
||||||
|
@ -258,21 +259,23 @@
|
||||||
(not next-optional?)
|
(not next-optional?)
|
||||||
(not next-special-dots?)))
|
(not next-special-dots?)))
|
||||||
depth)))
|
depth)))
|
||||||
(let loop ([p p] [last-depth 0])
|
(let loop ([p p] [depth 0])
|
||||||
(append
|
(define head
|
||||||
(if (symbol? (car p))
|
(if (symbol? (car p))
|
||||||
null
|
null
|
||||||
(loop (car p) (add1 last-depth)))
|
(loop (car p) (add1 depth))))
|
||||||
(let loop ([p (cdr p)][in-optional? #f])
|
(append
|
||||||
|
head
|
||||||
|
(let loop ([p (cdr p)] [in-optional? #f])
|
||||||
(cond
|
(cond
|
||||||
[(null? p) null]
|
[(null? p) null]
|
||||||
[(null? (cdr p))
|
[(null? (cdr p))
|
||||||
(list (parse-arg (car p) in-optional? last-depth #f #f))]
|
(list (parse-arg (car p) in-optional? depth #f #f))]
|
||||||
[else
|
[else
|
||||||
(let ([a (parse-arg
|
(let ([a (parse-arg
|
||||||
(car p)
|
(car p)
|
||||||
in-optional?
|
in-optional?
|
||||||
0
|
depth
|
||||||
(let ([v (cadr p)])
|
(let ([v (cadr p)])
|
||||||
(and (pair? v)
|
(and (pair? v)
|
||||||
(not
|
(not
|
||||||
|
@ -282,6 +285,10 @@
|
||||||
(cons a (loop (cdr p)
|
(cons a (loop (cdr p)
|
||||||
(and (arg-optional? a)
|
(and (arg-optional? a)
|
||||||
(not (arg-ends-optional? a))))))])))))
|
(not (arg-ends-optional? a))))))])))))
|
||||||
|
(define (next-args-depth args)
|
||||||
|
(if (null? args)
|
||||||
|
0
|
||||||
|
(arg-depth (car args))))
|
||||||
(define (prototype-size args first-combine next-combine special-combine?)
|
(define (prototype-size args first-combine next-combine special-combine?)
|
||||||
(let loop ([s args] [combine first-combine])
|
(let loop ([s args] [combine first-combine])
|
||||||
(if (null? s)
|
(if (null? s)
|
||||||
|
@ -289,7 +296,7 @@
|
||||||
(combine
|
(combine
|
||||||
(loop (cdr s) next-combine)
|
(loop (cdr s) next-combine)
|
||||||
(let ([a (car s)])
|
(let ([a (car s)])
|
||||||
(+ (arg-num-closers a)
|
(+ (- (arg-depth a) (next-args-depth (cdr s)))
|
||||||
(if (arg-special? a)
|
(if (arg-special? a)
|
||||||
(string-length (symbol->string (arg-id a)))
|
(string-length (symbol->string (arg-id a)))
|
||||||
(+ (if (arg-kw a)
|
(+ (if (arg-kw a)
|
||||||
|
@ -468,11 +475,19 @@
|
||||||
#f
|
#f
|
||||||
`(,(make-openers (add1 p-depth))
|
`(,(make-openers (add1 p-depth))
|
||||||
,tagged
|
,tagged
|
||||||
|
,(let ([num-closers (- p-depth (next-args-depth args))])
|
||||||
|
(if (zero? num-closers)
|
||||||
|
'()
|
||||||
|
(make-closers num-closers)))
|
||||||
,@(if (null? args)
|
,@(if (null? args)
|
||||||
(list (make-closers p-depth))
|
(list (make-closers p-depth))
|
||||||
(append-map (lambda (arg)
|
(let loop ([args args])
|
||||||
(list spacer ((arg->elem #t) arg)))
|
(cond
|
||||||
args))
|
[(null? args) null]
|
||||||
|
[else
|
||||||
|
(append
|
||||||
|
(list spacer ((arg->elem #t) (car args) (next-args-depth (cdr args))))
|
||||||
|
(loop (cdr args)))])))
|
||||||
,(racketparenfont ")"))))
|
,(racketparenfont ")"))))
|
||||||
(if result-next-line? null end))))
|
(if result-next-line? null end))))
|
||||||
;; The multi-line case:
|
;; The multi-line case:
|
||||||
|
@ -498,7 +513,7 @@
|
||||||
(if (arg-starts-optional? (car args))
|
(if (arg-starts-optional? (car args))
|
||||||
(to-flow (make-element #f (list spacer "[")))
|
(to-flow (make-element #f (list spacer "[")))
|
||||||
flow-spacer)
|
flow-spacer)
|
||||||
(to-flow ((arg->elem #f) (car args)))
|
(to-flow ((arg->elem #f) (car args) (next-args-depth (cdr args))))
|
||||||
not-end)
|
not-end)
|
||||||
(list* 'cont 'cont not-end)))
|
(list* 'cont 'cont not-end)))
|
||||||
(let loop ([args (if one-ok? (cdr args) args)])
|
(let loop ([args (if one-ok? (cdr args) args)])
|
||||||
|
@ -517,12 +532,13 @@
|
||||||
(if (arg-starts-optional? (car args))
|
(if (arg-starts-optional? (car args))
|
||||||
(to-flow (make-element #f (list spacer "[")))
|
(to-flow (make-element #f (list spacer "[")))
|
||||||
flow-spacer)
|
flow-spacer)
|
||||||
(let ([a ((arg->elem #f) (car args))]
|
(let ([a ((arg->elem #f) (car args) (next-args-depth (cdr args)))]
|
||||||
[next (if dots-next?
|
[next (if dots-next?
|
||||||
(make-element
|
(make-element
|
||||||
#f (list spacer
|
#f (list spacer
|
||||||
((arg->elem #f)
|
((arg->elem #f)
|
||||||
(cadr args))))
|
(cadr args)
|
||||||
|
(next-args-depth (cddr args)))))
|
||||||
"")])
|
"")])
|
||||||
(to-flow
|
(to-flow
|
||||||
(cond
|
(cond
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#lang racket/base
|
#lang racket/base
|
||||||
(require racket/contract/base
|
(require racket/contract/base
|
||||||
|
racket/class
|
||||||
(for-syntax racket/base
|
(for-syntax racket/base
|
||||||
racket/require-transform
|
racket/require-transform
|
||||||
racket/provide-transform
|
racket/provide-transform
|
||||||
|
@ -16,6 +17,8 @@
|
||||||
struct-doc
|
struct-doc
|
||||||
struct*-doc
|
struct*-doc
|
||||||
form-doc
|
form-doc
|
||||||
|
class*-doc
|
||||||
|
class-doc
|
||||||
generate-delayed-documents
|
generate-delayed-documents
|
||||||
begin-for-doc)
|
begin-for-doc)
|
||||||
|
|
||||||
|
@ -577,7 +580,7 @@
|
||||||
[(_ id contract desc)
|
[(_ id contract desc)
|
||||||
(begin
|
(begin
|
||||||
(unless (identifier? #'id)
|
(unless (identifier? #'id)
|
||||||
(raise-syntax-error 'parameter/doc
|
(raise-syntax-error 'thing-doc
|
||||||
"expected an identifier"
|
"expected an identifier"
|
||||||
stx
|
stx
|
||||||
#'id))
|
#'id))
|
||||||
|
@ -662,6 +665,48 @@
|
||||||
#'((only-in scribble/manual defform))
|
#'((only-in scribble/manual defform))
|
||||||
#'id))])))
|
#'id))])))
|
||||||
|
|
||||||
|
(define-provide/doc-transformer class*-doc
|
||||||
|
(lambda (stx)
|
||||||
|
(syntax-case stx ()
|
||||||
|
[(_ id super (intf-id ...) pre-flow)
|
||||||
|
(begin
|
||||||
|
(unless (identifier? #'id)
|
||||||
|
(raise-syntax-error 'class*-doc
|
||||||
|
"expected an identifier"
|
||||||
|
stx
|
||||||
|
#'id))
|
||||||
|
(unless (identifier? #'super)
|
||||||
|
(raise-syntax-error 'class*-doc
|
||||||
|
"expected super class identifier"
|
||||||
|
stx
|
||||||
|
#'id))
|
||||||
|
(values
|
||||||
|
#'[id class?]
|
||||||
|
#'(defclass id super (intf-id ...) . pre-flow)
|
||||||
|
#'((only-in scribble/manual defclass defconstructor defmethod this-obj))
|
||||||
|
#'id))])))
|
||||||
|
|
||||||
|
(define-provide/doc-transformer class-doc
|
||||||
|
(lambda (stx)
|
||||||
|
(syntax-case stx ()
|
||||||
|
[(_ id super pre-flow)
|
||||||
|
(begin
|
||||||
|
(unless (identifier? #'id)
|
||||||
|
(raise-syntax-error 'class-doc
|
||||||
|
"expected an identifier"
|
||||||
|
stx
|
||||||
|
#'id))
|
||||||
|
(unless (identifier? #'super)
|
||||||
|
(raise-syntax-error 'class-doc
|
||||||
|
"expected super class identifier"
|
||||||
|
stx
|
||||||
|
#'id))
|
||||||
|
(values
|
||||||
|
#'[id class?]
|
||||||
|
#'(defclass id super () . pre-flow)
|
||||||
|
#'((only-in scribble/manual defclass defconstructor defmethod this-obj))
|
||||||
|
#'id))])))
|
||||||
|
|
||||||
(define-syntax (generate-delayed-documents stx)
|
(define-syntax (generate-delayed-documents stx)
|
||||||
(syntax-case stx ()
|
(syntax-case stx ()
|
||||||
[(_)
|
[(_)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user