latest acmart.cls

This commit is contained in:
Matthew Flatt 2020-02-27 13:50:43 -07:00
parent 66c4c50f47
commit 9c985ca486

View File

@ -37,8 +37,7 @@
%% Right brace \} Tilde \~} %% Right brace \} Tilde \~}
\NeedsTeXFormat{LaTeX2e} \NeedsTeXFormat{LaTeX2e}
\ProvidesClass{acmart} \ProvidesClass{acmart}
[2019/04/22 v1.60 Typesetting articles for the Association for [2020/02/22 v1.70 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}{%
\ClassWarning{\@classname}{% \ClassWarning{\@classname}{%
@ -731,6 +730,15 @@ Computing Machinery]
\let\@vspacer\@vspacer@orig} \let\@vspacer\@vspacer@orig}
\AtBeginEnvironment{table*}{\let\@vspace\@vspace@orig \AtBeginEnvironment{table*}{\let\@vspace\@vspace@orig
\let\@vspacer\@vspacer@orig} \let\@vspacer\@vspacer@orig}
\AtBeginEnvironment{algorithm}{\let\@vspace\@vspace@orig
\let\@vspacer\@vspacer@orig}
\AtBeginEnvironment{algorithm*}{\let\@vspace\@vspace@orig
\let\@vspacer\@vspacer@orig}
\AtBeginEnvironment{lstlisting}{\let\@vspace\@vspace@orig
\let\@vspacer\@vspacer@orig}
\AtBeginEnvironment{lstlisting*}{\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
@ -870,9 +878,12 @@ Computing Machinery]
\endlist \endlist
} }
\let\enddescription=\endlist % for efficiency \let\enddescription=\endlist % for efficiency
\newif\if@ACM@maketitle@typeset
\@ACM@maketitle@typesetfalse
\define@choicekey*+{ACM}{acmJournal}[\@journalCode\@journalCode@nr]{% \define@choicekey*+{ACM}{acmJournal}[\@journalCode\@journalCode@nr]{%
CIE,% CIE,%
CSUR,% CSUR,%
DGOV,%
DTRAP,% DTRAP,%
HEALTH,% HEALTH,%
IMWUT,% IMWUT,%
@ -896,6 +907,7 @@ Computing Machinery]
TDS,% TDS,%
TEAC,% TEAC,%
TECS,% TECS,%
TELO,%
THRI,% THRI,%
TIIS,% TIIS,%
TIOT,% TIOT,%
@ -923,11 +935,13 @@ Computing Machinery]
TOS,% TOS,%
TOSEM,% TOSEM,%
TOSN,% TOSN,%
TQC,%
TRETS,% TRETS,%
TSAS,% TSAS,%
TSC,% TSC,%
TSLP,% TSLP,%
TWEB% TWEB,%
FACMP%
}{% }{%
\ifcase\@journalCode@nr \ifcase\@journalCode@nr
\relax % CIE \relax % CIE
@ -938,6 +952,10 @@ Computing Machinery]
\def\@journalName{ACM Computing Surveys}% \def\@journalName{ACM Computing Surveys}%
\def\@journalNameShort{ACM Comput. Surv.}% \def\@journalNameShort{ACM Comput. Surv.}%
\def\@permissionCodeOne{0360-0300}% \def\@permissionCodeOne{0360-0300}%
\or % DGOV
\def\@journalName{Digital Government: Research and Practice}%
\def\@journalNameShort{Digit. Gov. Res. Pract.}%
\def\@permissionCodeOne{2639-0175}%
\or % DTRAP \or % DTRAP
\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.}%
@ -1024,8 +1042,8 @@ Computing Machinery]
\or % TCPS \or % TCPS
\def\@journalName{ACM Transactions on Cyber-Physical Systems}% \def\@journalName{ACM Transactions on Cyber-Physical Systems}%
\or % TDS \or % TDS
\def\@journalName{ACM Transactions on Data Science}% \def\@journalName{ACM/IMS Transactions on Data Science}%
\def\@journalNameShort{ACM Trans. Data Sci.}% \def\@journalNameShort{ACM/IMS Trans. Data Sci.}%
\def\@permissionCodeOne{2577-3224}% \def\@permissionCodeOne{2577-3224}%
\or % TEAC \or % TEAC
\def\@journalName{ACM Transactions on Economics and Computation}% \def\@journalName{ACM Transactions on Economics and Computation}%
@ -1033,6 +1051,10 @@ Computing Machinery]
\def\@journalName{ACM Transactions on Embedded Computing Systems}% \def\@journalName{ACM Transactions on Embedded Computing Systems}%
\def\@journalNameShort{ACM Trans. Embedd. Comput. Syst.}% \def\@journalNameShort{ACM Trans. Embedd. Comput. Syst.}%
\def\@permissionCodeOne{1539-9087}% \def\@permissionCodeOne{1539-9087}%
\or % TELO
\def\@journalName{ACM Transactions on Evolutionary Learning}%
\def\@journalNameShort{ACM Trans. Evol. Learn.}%
\def\@permissionCodeOne{2688-3007}%
\or % THRI \or % THRI
\def\@journalName{ACM Transactions on Human-Robot Interaction}% \def\@journalName{ACM Transactions on Human-Robot Interaction}%
\def\@journalNameShort{ACM Trans. Hum.-Robot Interact.}% \def\@journalNameShort{ACM Trans. Hum.-Robot Interact.}%
@ -1140,6 +1162,10 @@ Computing Machinery]
\def\@journalName{ACM Transactions on Sensor Networks}% \def\@journalName{ACM Transactions on Sensor Networks}%
\def\@journalNameShort{ACM Trans. Sensor Netw.}% \def\@journalNameShort{ACM Trans. Sensor Netw.}%
\def\@permissionCodeOne{1550-4859}% \def\@permissionCodeOne{1550-4859}%
\or % TQC
\def\@journalName{ACM Transactions on Quantum Computing}%
\def\@journalNameShort{ACM Trans. Quantum Comput.}%
\def\@permissionCodeOne{2643-6817}%
\or % TRETS \or % TRETS
\def\@journalName{ACM Transactions on Reconfigurable Technology and Systems}% \def\@journalName{ACM Transactions on Reconfigurable Technology and Systems}%
\def\@journalNameShort{ACM Trans. Reconfig. Technol. Syst.}% \def\@journalNameShort{ACM Trans. Reconfig. Technol. Syst.}%
@ -1160,6 +1186,10 @@ Computing Machinery]
\def\@journalName{ACM Transactions on the Web}% \def\@journalName{ACM Transactions on the Web}%
\def\@journalNameShort{ACM Trans. Web}% \def\@journalNameShort{ACM Trans. Web}%
\def\@permissionCodeOne{1559-1131}% \def\@permissionCodeOne{1559-1131}%
\else % FACMP, a dummy journal
\def\@journalName{Forthcoming ACM Publication}%
\def\@journalNameShort{ACM Forthcoming}%
\def\@permissionCodeOne{XXXX-XXXX}%
\fi \fi
\ClassInfo{\@classname}{Using journal code \@journalCode}% \ClassInfo{\@classname}{Using journal code \@journalCode}%
}{% }{%
@ -1358,9 +1388,17 @@ Computing Machinery]
\def\terms#1{\ClassWarning{\@classname}{The command \string\terms{} is \def\terms#1{\ClassWarning{\@classname}{The command \string\terms{} is
obsolete. I am going to ignore it}} obsolete. I am going to ignore it}}
\def\keywords#1{\def\@keywords{#1}} \def\keywords#1{\def\@keywords{#1}}
\keywords{} \let\@keywords\@empty
\AtEndDocument{\if@ACM@nonacm\else\ifx\@keywords\@empty
\ifnum\getrefnumber{TotPages}>2\relax
\ClassWarningNoLine{\@classname}{ACM keywords are mandatory
for papers over two pages}%
\fi\fi\fi}
\renewenvironment{abstract}{\Collect@Body\@saveabstract}{} \renewenvironment{abstract}{\Collect@Body\@saveabstract}{}
\long\def\@saveabstract#1{\long\gdef\@abstract{#1}} \long\def\@saveabstract#1{\if@ACM@maketitle@typeset
\ClassError{\@classname}{Abstract must be defined before maketitle
command. Please move it!}\fi
\long\gdef\@abstract{#1}}
\@saveabstract{} \@saveabstract{}
\long\def\@lempty{} \long\def\@lempty{}
\define@boolkey+{@ACM@topmatter@}[@ACM@]{printccs}[true]{% \define@boolkey+{@ACM@topmatter@}[@ACM@]{printccs}[true]{%
@ -1375,6 +1413,11 @@ Computing Machinery]
\else \else
\ClassInfo{\@classname}{Suppressing bibformat}% \ClassInfo{\@classname}{Suppressing bibformat}%
\fi}{\ClassError{\@classname}{The option printacmref can be either true or false}} \fi}{\ClassError{\@classname}{The option printacmref can be either true or false}}
\AtEndDocument{\if@ACM@nonacm\else\if@ACM@printacmref\else
\ifnum\getrefnumber{TotPages}>1\relax
\ClassWarningNoLine{\@classname}{ACM reference format is mandatory
for papers over one page}%
\fi\fi\fi}
\define@boolkey+{@ACM@topmatter@}[@ACM@]{printfolios}[true]{% \define@boolkey+{@ACM@topmatter@}[@ACM@]{printfolios}[true]{%
\if@ACM@printfolios \if@ACM@printfolios
\ClassInfo{\@classname}{Printing folios}% \ClassInfo{\@classname}{Printing folios}%
@ -1422,7 +1465,7 @@ Computing Machinery]
\newcounter{@concepts} \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} \def\textrightarrow{$\rightarrow$}
\def\ccsdesc@parse#1~#2~#3~{% \def\ccsdesc@parse#1~#2~#3~{%
\stepcounter{@concepts}% \stepcounter{@concepts}%
\expandafter\ifx\csname CCS@General@#2\endcsname\relax \expandafter\ifx\csname CCS@General@#2\endcsname\relax
@ -1444,6 +1487,11 @@ Computing Machinery]
#3\fi\fi\ifnum\value{@concepts}=0.\else; \fi}% #3\fi\fi\ifnum\value{@concepts}=0.\else; \fi}%
\fi \fi
\ccsdesc@parse@finish} \ccsdesc@parse@finish}
\AtEndDocument{\if@ACM@nonacm\else\ifx\@concepts\@empty\relax
\ifnum\getrefnumber{TotPages}>2\relax
\ClassWarningNoLine{\@classname}{CCS concepts are mandatory
for papers over two pages}%
\fi\fi\fi}
\def\ccsdesc@parse@finish#1\ccsdesc@parse@end{} \def\ccsdesc@parse@finish#1\ccsdesc@parse@end{}
\newif\if@printcopyright \newif\if@printcopyright
\@printcopyrighttrue \@printcopyrighttrue
@ -1584,10 +1632,10 @@ Computing Machinery]
source. source.
\or % usgovmixed \or % usgovmixed
ACM acknowledges that this contribution was authored or co-authored ACM acknowledges that this contribution was authored or co-authored
by an employee, contractor, or affiliate of the United States government. As such, by an employee, contractor, or affiliate of the United States
the United States government retains a nonexclusive, royalty-free right to government. As such, the United States government retains a
publish or reproduce this article, or to allow others to do so, for nonexclusive, royalty-free right to publish or reproduce this
government purposes only. article, or to allow others to do so, for government purposes only.
\or % cagov \or % cagov
This article was authored by employees of the Government of Canada. This article was authored by employees of the Government of Canada.
As such, the Canadian government retains all interest in the As such, the Canadian government retains all interest in the
@ -1681,6 +1729,7 @@ Computing Machinery]
\fi}} \fi}}
\newbox\mktitle@bx \newbox\mktitle@bx
\def\maketitle{% \def\maketitle{%
\@ACM@maketitle@typesettrue
\if@ACM@anonymous \if@ACM@anonymous
% Anonymize omission of \author-s % Anonymize omission of \author-s
\ifnum\num@authorgroups=0\author{}\fi \ifnum\num@authorgroups=0\author{}\fi
@ -1774,7 +1823,7 @@ Computing Machinery]
\if@ACM@printccs \if@ACM@printccs
\ifx\@concepts\@empty\else\bgroup \ifx\@concepts\@empty\else\bgroup
{\@specialsection{CCS Concepts}% {\@specialsection{CCS Concepts}%
\@concepts\par}\egroup \noindent\@concepts\par}\egroup
\fi \fi
\fi \fi
\ifx\@keywords\@empty\else\bgroup \ifx\@keywords\@empty\else\bgroup
@ -1783,7 +1832,7 @@ Computing Machinery]
\else \else
\@specialsection{Keywords}% \@specialsection{Keywords}%
\fi \fi
\@keywords}\par\egroup \noindent\@keywords}\par\egroup
\fi \fi
\andify\authors \andify\authors
\andify\shortauthors \andify\shortauthors
@ -1823,12 +1872,13 @@ Computing Machinery]
\or % siggraph \or % siggraph
\section*{#1}% \section*{#1}%
\or % sigplan \or % sigplan
\paragraph*{#1}% \noindentparagraph*{#1:~}%
\or % sigchi \or % sigchi
\section*{#1}% \section*{#1}%
\or % sigchi-a \or % sigchi-a
\section*{#1}% \section*{#1}%
\fi} \fi
}
\def\@printtopmatter{% \def\@printtopmatter{%
\ifx\@startPage\@empty \ifx\@startPage\@empty
\gdef\@startPage{1}% \gdef\@startPage{1}%
@ -2117,7 +2167,8 @@ Computing Machinery]
\newdimen\author@bx@wd \newdimen\author@bx@wd
\newskip\author@bx@sep \newskip\author@bx@sep
\author@bx@sep=1pc\relax \author@bx@sep=1pc\relax
\def\@typeset@author@bx{\bgroup\hsize=\author@bx@wd\def\and{\par}% \def\@typeset@author@bx{\bgroup\hsize=\author@bx@wd
\def\and{\par}\normalbaselines
\global\setbox\author@bx=\vtop{\if@ACM@sigchiamode\else\centering\fi \global\setbox\author@bx=\vtop{\if@ACM@sigchiamode\else\centering\fi
\@authorfont\@currentauthors\par\@affiliationfont \@authorfont\@currentauthors\par\@affiliationfont
\@currentaffiliation}\egroup \@currentaffiliation}\egroup
@ -2222,19 +2273,24 @@ Computing Machinery]
\ifnum\num@authorgroups>1\relax \ifnum\num@authorgroups>1\relax
addresses: \else address: \fi addresses: \else address: \fi
\bgroup \bgroup
\def\streetaddress##1{\unskip\@addpunct, ##1}% \def\streetaddress##1{\unskip, ##1}%
\def\postcode##1{\unskip\@addpunct, ##1}% \def\postcode##1{\unskip, ##1}%
\def\position##1{\unskip\ignorespaces}% \def\position##1{\unskip\ignorespaces}%
\def\institution##1{\unskip\@addpunct, ##1}% \def\institution##1{\unskip, ##1}%
\def\city##1{\unskip\@addpunct, ##1}% \def\city##1{\unskip, ##1}%
\def\state##1{\unskip\@addpunct, ##1}% \def\state##1{\unskip, ##1}%
\renewcommand\department[2][0]{\unskip\@addpunct, ##2}% \renewcommand\department[2][0]{\unskip\@addpunct, ##2}%
\def\country##1{\unskip\@addpunct, ##1}% \def\country##1{\unskip, ##1}%
\def\and{\unskip\@addpunct; }% \def\and{\unskip; }%
\def\@author##1{##1}% \def\@author##1{##1}%
\def\email##1##2{\unskip\@addpunct, \nolinkurl{##2}}% \def\email##1##2{\unskip, \nolinkurl{##2}}%
\addresses \addresses
\egroup} \egroup}
\AtEndDocument{\if@ACM@nonacm\else\if@ACM@journal
\ifx\@authorsaddresses\@empty
\ClassWarningNoLine{\@classname}{Authors'
addresses are mandatory for ACM journals}%
\fi\fi\fi}
\def\@setaddresses{} \def\@setaddresses{}
\def\@authornotemark{\g@addto@macro\@currentauthors{\footnotemark\relax}} \def\@authornotemark{\g@addto@macro\@currentauthors{\footnotemark\relax}}
\def\@@authornotemark#1{\g@addto@macro\@currentauthors{\footnotemark[#1]}} \def\@@authornotemark#1{\g@addto@macro\@currentauthors{\footnotemark[#1]}}
@ -2295,11 +2351,13 @@ Computing Machinery]
\fi \fi
\ifx\@acmDOI\@empty\else\@formatdoi{\@acmDOI}\fi \ifx\@acmDOI\@empty\else\@formatdoi{\@acmDOI}\fi
\par\egroup} \par\egroup}
\def\@printendtopmatter{\bgroup \def\@printendtopmatter{%
\let\@vspace\@vspace@orig \let\@vspace\@vspace@orig
\let\@vspacer\@vspacer@orig \let\@vspacer\@vspacer@orig
\par\bigskip \par\bigskip
\egroup} \let\@vspace\@vspace@acm
\let\@vspacer\@vspacer@acm
}
\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}
@ -2317,7 +2375,8 @@ Computing Machinery]
\newcount\ACM@linecount \newcount\ACM@linecount
\ACM@linecount\@ne\relax \ACM@linecount\@ne\relax
\def\ACM@mk@linecount{% \def\ACM@mk@linecount{%
\savebox{\ACM@linecount@bx}[4em][t]{\parbox[t]{4em}{% \savebox{\ACM@linecount@bx}[4em][t]{\parbox[t]{4em}{\normalfont
\normalsize
\setlength{\ACM@linecount@bxht}{0pt}% \setlength{\ACM@linecount@bxht}{0pt}%
\loop{\color{red}\scriptsize\the\ACM@linecount}\\ \loop{\color{red}\scriptsize\the\ACM@linecount}\\
\global\advance\ACM@linecount by \@ne \global\advance\ACM@linecount by \@ne
@ -2335,10 +2394,29 @@ Computing Machinery]
\fi} \fi}
\def\ACM@linecountR{% \def\ACM@linecountR{%
\if@ACM@review \if@ACM@review
\ACM@mk@linecount \ifcase\ACM@format@nr
\begin{picture}(0,0)% \relax % manuscript
\put(20,-22){\usebox{\ACM@linecount@bx}}% \relax
\end{picture}% \or % acmsmall
\relax
\or % acmlarge
\relax
\or % acmtog
\ACM@mk@linecount
\or % sigconf
\ACM@mk@linecount
\or % siggraph
\ACM@mk@linecount
\or % sigplan
\ACM@mk@linecount
\or % sigchi
\ACM@mk@linecount
\or % sigchi-a
\ACM@mk@linecount
\fi
\begin{picture}(0,0)%
\put(20,-22){\usebox{\ACM@linecount@bx}}%
\end{picture}%
\fi} \fi}
\if@ACM@timestamp \if@ACM@timestamp
% Subtracting 30 from \time gives us the effect of rounding down despite % Subtracting 30 from \time gives us the effect of rounding down despite
@ -2598,6 +2676,11 @@ Computing Machinery]
{-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}% {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
{-3.5\p@}% {-3.5\p@}%
{\ACM@NRadjust{\@parfont\@adddotafter}}} {\ACM@NRadjust{\@parfont\@adddotafter}}}
\newcommand\noindentparagraph{\@startsection{paragraph}{4}{\z@}%
{-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
{-3.5\p@}%
{\ACM@NRadjust{\@parfont}}}
\renewcommand\part{\@startsection{part}{9}{\z@}% \renewcommand\part{\@startsection{part}{9}{\z@}%
{-10\p@ \@plus -4\p@ \@minus -2\p@}% {-10\p@ \@plus -4\p@ \@minus -2\p@}%
{4\p@}% {4\p@}%
@ -2629,20 +2712,8 @@ Computing Machinery]
\or % sigplan \or % sigplan
\def\@secfont{\bfseries\Large\section@raggedright} \def\@secfont{\bfseries\Large\section@raggedright}
\def\@subsecfont{\bfseries\section@raggedright} \def\@subsecfont{\bfseries\section@raggedright}
\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
{-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}%
{.25\baselineskip}%
{\@subsubsecfont}}
\def\@subsubsecfont{\bfseries\section@raggedright} \def\@subsubsecfont{\bfseries\section@raggedright}
\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
{-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
{-3.5\p@}%
{\@parfont\@addspaceafter}}
\def\@parfont{\bfseries\itshape} \def\@parfont{\bfseries\itshape}
\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\z@}%
{-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
{-3.5\p@}%
{\@subparfont\@addspaceafter}}
\def\@subparfont{\itshape} \def\@subparfont{\itshape}
\or % sigchi \or % sigchi
\setcounter{secnumdepth}{1} \setcounter{secnumdepth}{1}
@ -2828,7 +2899,7 @@ Computing Machinery]
\ifx\@tempa\@empty\def\@tempa{arxiv}\fi \ifx\@tempa\@empty\def\@tempa{arxiv}\fi
\def\@tempb{arxiv}% \def\@tempb{arxiv}%
\ifx\@tempa\@tempb \ifx\@tempa\@tempb
arXiv:\href{http://arxiv.org/abs/#2}{#2}\else arXiv:#2% arXiv:\href{https://arxiv.org/abs/#2}{#2}\else arXiv:#2%
\fi} \fi}
\let\@vspace@orig=\@vspace \let\@vspace@orig=\@vspace
\let\@vspacer@orig=\@vspacer \let\@vspacer@orig=\@vspacer
@ -2838,6 +2909,8 @@ Computing Machinery]
\apptocmd{\@vspacer}{\ClassWarning{\@classname}{\string\vspace\space should \apptocmd{\@vspacer}{\ClassWarning{\@classname}{\string\vspace\space should
only be used to provide space above/below surrounding only be used to provide space above/below surrounding
objects}}{}{} objects}}{}{}
\let\@vspace@acm=\@vspace
\let\@vspacer@acm=\@vspacer
\let\ACM@origbaselinestretch\baselinestretch \let\ACM@origbaselinestretch\baselinestretch
\AtEndDocument{\ifx\baselinestretch\ACM@origbaselinestretch\else \AtEndDocument{\ifx\baselinestretch\ACM@origbaselinestretch\else
\ClassError{\@classname}{An attempt to redefine \ClassError{\@classname}{An attempt to redefine