summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/acmart/acmart.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/acmart/acmart.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/acmart/acmart.dtx')
-rw-r--r--macros/latex/contrib/acmart/acmart.dtx7044
1 files changed, 7044 insertions, 0 deletions
diff --git a/macros/latex/contrib/acmart/acmart.dtx b/macros/latex/contrib/acmart/acmart.dtx
new file mode 100644
index 0000000000..918947f21d
--- /dev/null
+++ b/macros/latex/contrib/acmart/acmart.dtx
@@ -0,0 +1,7044 @@
+% \iffalse
+%
+% Copyright 2016-2019, Association for Computing Machinery
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3 of this license or (at your option) any
+% later version.
+% The latest version of the license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of
+% LaTeX version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Boris Veytsman,
+% <borisv@lk.net>
+%
+% This work consists of the file acmart.dtx, the derived file
+% acmart.cls, the files ACM-Reference-Format.bst, and templates
+% sample-acmlarge.tex, sample-acmsmall.tex, sample-acmtog.tex,
+% samplebody-conf.tex, samplebody-journals.tex, sample-manuscript.tex,
+% sample-sigchi-a.tex, sample-sigchi.tex,
+% sample-sigconf-authordraft.tex, sample-sigconf.tex,
+% sample-sigplan.tex
+%
+% \fi
+%
+%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%
+%
+% \MakeShortVerb{|}
+% \def\guide{acmguide}
+% \iffalse
+% From
+% http://tex.stackexchange.com/questions/117892/can-i-convert-a-string-to-catcode-11 by egreg
+% \fi
+% \begingroup
+% \everyeof{\noexpand}
+% \endlinechar=-1
+% \xdef\currentjob{\scantokens\expandafter{\jobname}}
+% \endgroup
+%
+% \ifx\currentjob\guide\OnlyDescription\fi
+% \GetFileInfo{acmart.dtx}
+% \title{\LaTeX{} Class for the \emph{Association for Computing
+% Machinery}\thanks{\copyright 2016--2019, Association for Computing Machinery}}
+% \author{Boris Veytsman\thanks{%
+% \href{mailto:borisv@lk.net}{\texttt{borisv@lk.net}},
+% \href{mailto:boris@varphi.com}{\texttt{boris@varphi.com}}}}
+% \date{\filedate, \fileversion}
+% \maketitle
+% \begin{abstract}
+% This package provides a class for typesetting publications of
+% the Association for Computing Machinery.
+% \end{abstract}
+% \tableofcontents
+%
+% \clearpage
+%
+%\section{Introduction}
+%\label{sec:intro}
+%
+% The Association for Computing
+% Machinery\footnote{\url{http://www.acm.org/}} is the world's largest
+% educational and scientific computing society, which delivers
+% resources that advance computing as a science and a
+% profession. It was one of the
+% early adopters of \TeX\ for its typesetting.
+%
+% It provided several different classes for a number of journals and
+% conference proceedings. Unfortunately during the years since these
+% classes were written, the code was patched many times, and
+% supporting different versions of the classes became difficult.
+%
+% This package provides the uniform interface for all ACM
+% publications. It is intended to replace all the different classes and
+% packages and provide an up-to-date \LaTeX\ package.
+%
+% This package uses only free \TeX\ packages and fonts included in \TeX
+% Live, Mik\TeX\ and other popular \TeX\ distributions. It is
+% intended to be published in these distributions itself, which
+% minimizes users' efforts in the installation and support of this
+% package.
+%
+% I am grateful to
+% Michael D.~Adams,
+% Leif Andersen,
+% Lawrence Christopher Angrave,
+% Dirk Beyer,
+% Joachim Breitner,
+% Benjamin Byholm,
+% Nils Anders Danielsson,
+% Michael Ekstrand,
+% Matthew Fluet,
+% Paolo G.~Giarrusso,
+% Ben Greenman,
+% Enrico Gregorio,
+% Jamie Davis,
+% Peter Kemp,
+% Luis Leiva,
+% Ben Liblit,
+% Rholais Lii,
+% LianTze Lim,
+% Kai Mindermann,
+% Frank Mittelbach,
+% Serguei Mokhov,
+% Ross Moore,
+% John Owens,
+% Joel Nider,
+% Tobias Pape,
+% Philip Quinn,
+% Mathias Rav,
+% Andreas Reichinger,
+% Matteo Riondato,
+% Craig Rodkin,
+% Bernard Rous,
+% David Shamma,
+% Gabriel Scherer,
+% Stephen Spencer,
+% Shin Hwei Tan,
+% Daniel Thomas,
+% Zack Weinberg,
+% John Wickerson
+% and many others for their invaluable help.
+%
+% The development version of the package is available at
+% \url{https://github.com/borisveytsman/acmart}.
+%
+%\section{User's guide}
+%\label{sec:ug}
+%
+%
+% This class uses many commands and customizaton options, so it might
+% appear intimidating for a casual user. Do not panic! Many of these
+% commands and options can be safely left with their default values
+% or the values recommended by your conference or journal editors. If
+% you have problems or questions, do not hesitate to ask me directly
+% or the community at \url{https://github.com/borisveytsman/acmart},
+% \url{https://tex.stackexchange.com} or the closest \TeX\ Users
+% Group. The world-wide \TeX\ Users Group is at
+% \url{https://tug.org/}; please consider joining us if you use \TeX\
+% regularly.
+%
+%\subsection{Installation}
+%\label{sec:ug_install}
+%
+% Most probably, you already have this package installed in your
+% favorite \TeX\ distribution; if not, you may want to upgrade. You
+% may need to upgrade it anyway since this package uses a number of
+% relatively recent packages, especially the ones related to fonts.
+%
+% The latest released version of this package can be found on CTAN:
+% \url{https://www.ctan.org/pkg/acmart}. The development version can
+% be found on GitHub: \url{https://github.com/borisveytsman/acmart}.
+% At this address you can file a bug report---or even contribute your
+% own enhancement by making a pull request.
+%
+% Please note that the version on Github is a development (or
+% experimental) version: please download it for testing new features.
+% The production version is the one on CTAN and ACM sites.
+%
+% Most users should not attempt to install this package themselves
+% but should rather rely on their \TeX\ distributions to provide it. If you
+% decide to install the package yourself, follow the standard rules:
+% \begin{enumerate}
+% \item Run |latex acmart.ins|. This will produce the file
+% |acmart.cls|
+% \item Put the files |acmart.cls| and |ACM-Reference-Format.bst|
+% in places where \LaTeX{} can find them (see \cite{TeXFAQ} or
+% the documentation for your \TeX{} system).\label{item:install}
+% \item Update the database of file names. Again, see \cite{TeXFAQ}
+% or the documentation for your \TeX{} system for the system-specific
+% details.\label{item:update}
+% \item The file |acmart.pdf| provides the documentation for the
+% package. (This is probably the file you are reading now.)
+% \end{enumerate}
+% As an alternative to items~\ref{item:install} and~\ref{item:update}
+% you can just put the files in the working directory where your
+% |.tex| file is.
+%
+%
+% This class uses a number of other packages. They are included in all
+% major \TeX\ distributions (\TeX Live, Mac\TeX, Mik\TeX) of 2015 and
+% later, so you probably have them installed. Just in case here is
+% the list of these packages:
+% \begin{itemize}
+% \item \textsl{amscls}, \url{http://www.ctan.org/pkg/amscls}
+% \item \textsl{amsfonts}, \url{http://www.ctan.org/pkg/amsfonts}
+% \item \textsl{amsmath}, \url{http://www.ctan.org/pkg/amsmath}
+% \item \textsl{binhex}, \url{http://www.ctan.org/pkg/binhex}
+% \item \textsl{balance}, \url{http://www.ctan.org/pkg/balance}
+% \item \textsl{booktabs}, \url{http://www.ctan.org/pkg/booktabs}
+% \item \textsl{caption}, \url{http://www.ctan.org/pkg/caption}
+% \item \textsl{comment}, \url{http://www.ctan.org/pkg/comment}
+% \item \textsl{cm-super}, \url{http://www.ctan.org/pkg/cm-super}
+% \item \textsl{cmap}, \url{http://www.ctan.org/pkg/cmap}
+% \item \textsl{draftwatermark}, \url{http://www.ctan.org/pkg/draftwatermark}
+% \item \textsl{environ}, \url{http://www.ctan.org/pkg/environ}
+% \item \textsl{etoolbox}, \url{http://www.ctan.org/pkg/etoolbox}
+% \item \textsl{fancyhdr}, \url{http://www.ctan.org/pkg/fancyhdr}
+% \item \textsl{float}, \url{http://www.ctan.org/pkg/float}
+% \item \textsl{fontaxes}, \url{http://www.ctan.org/pkg/fontaxes}
+% \item \textsl{geometry}, \url{http://www.ctan.org/pkg/geometry}
+% \item \textsl{graphics}, \url{http://www.ctan.org/pkg/graphics}
+% \item \textsl{hyperref}, \url{http://www.ctan.org/pkg/hyperref}
+% \item \textsl{ifluatex}, \url{http://www.ctan.org/pkg/ifluatex}
+% \item \textsl{ifxetex}, \url{http://www.ctan.org/pkg/ifxetex}
+% \item \textsl{inconsolata}, \url{http://www.ctan.org/pkg/inconsolata}
+% \item \textsl{libertine}, \url{http://www.ctan.org/pkg/libertine}
+% \item \textsl{manyfoot}, \url{http://www.ctan.org/pkg/manyfoot}
+% \item \textsl{microtype}, \url{http://www.ctan.org/pkg/microtype}
+% \item \textsl{mmap}, \url{http://www.ctan.org/pkg/mmap}
+% \item \textsl{ms}, \url{http://www.ctan.org/pkg/ms}
+% \item \textsl{mweights}, \url{http://www.ctan.org/pkg/mweights}
+% \item \textsl{natbib}, \url{http://www.ctan.org/pkg/natbib}
+% \item \textsl{nccfoots}, \url{http://www.ctan.org/pkg/nccfoots}
+% \item \textsl{newtx}, \url{http://www.ctan.org/pkg/newtx}
+% \item \textsl{oberdiek}, \url{http://www.ctan.org/pkg/oberdiek}
+% \item \textsl{pdftex-def}, \url{http://www.ctan.org/pkg/pdftex-def}
+% \item \textsl{refcount}, \url{http://www.ctan.org/pkg/refcount}
+% \item \textsl{setspace}, \url{http://www.ctan.org/pkg/setspace}
+% \item \textsl{textcase}, \url{http://www.ctan.org/pkg/textcase}
+% \item \textsl{totpages}, \url{http://www.ctan.org/pkg/totpages}
+% \item \textsl{trimspaces}, \url{http://www.ctan.org/pkg/trimspaces}
+% \item \textsl{upquote}, \url{http://www.ctan.org/pkg/upquote}
+% \item \textsl{url}, \url{http://www.ctan.org/pkg/url}
+% \item \textsl{xcolor}, \url{http://www.ctan.org/pkg/xcolor}
+% \item \textsl{xkeyval}, \url{http://www.ctan.org/pkg/xkeyval}
+% \item \textsl{xstring}, \url{http://www.ctan.org/pkg/xstring}
+% \end{itemize}
+%
+%
+%\subsection{Invocation and options}
+%\label{sec:invocation}
+%
+% To use this class, put in the preamble of your document
+% \begin{quote}
+% \cs{documentclass}\oarg{options}|{acmart}|
+% \end{quote}
+% There are several options corresponding to the type of the document and
+% its general appearance. They are described below. Generally
+% speaking, the options have |key=value| forms, for example,
+% \begin{verbatim}
+% \documentclass[format=acmsmall, screen=true, review=false]{acmart}
+% \end{verbatim}
+%
+%
+% The option |format| describes the format of the output. There are
+% several possible values for this option, for example,
+% \begin{verbatim}
+% \documentclass[format=acmtog]{acmart}
+% \end{verbatim}
+% Actually the words |format=| can be omitted, e.g.,
+% \begin{verbatim}
+% \documentclass[acmtog, review=false]{acmart}
+% \end{verbatim}
+% The possible formats are listed in
+% Table~\ref{tab:opts_format}. Note that formats starting with |acm|
+% are intended for journals and transactions, while formats starting
+% with |sig| are intended for proceedings published as books.
+%
+% Note that sometimes conference proceedings are published as a
+% special issue (or issues) of an ACM journal. In this case, you
+% should use the journal format for a conference paper. Please
+% contact your conference committee if in doubt.
+%
+% \begin{table}
+% \centering
+% \caption{The possible values for the \texttt{format} option}
+% \label{tab:opts_format}
+% \begin{tabularx}{\textwidth}{>{\ttfamily}lX}
+% \toprule
+% \normalfont Value & Meaning\\
+% \midrule
+% manuscript & A manuscript. This is the default. \\
+% acmsmall & Small single-column format. Used for CIE, CSUR, DTRAP,
+% HEALTH, JACM, JDIQ, JEA, JERIC,
+% JETC, PACMCGIT, PACMHCI, PACMPL, TAAS, TACCESS, TACO,
+% TALG, TALLIP (formerly TALIP), TCPS, TDS,
+% TEAC, TECS, TELO, THRI, TIIS, TIOT, TISSEC, TIST, TKDD, TMIS,
+% TOCE, TOCHI, TOCL,
+% TOCS, TOCT, TODAES, TODS, TOIS, TOIT, TOMACS, TOMM (formerly
+% TOMCCAP), TOMPECS, TOMS, TOPC, TOPLAS, TOPS,
+% TOS, TOSEM, TOSN, TQC, TRETS,
+% TSAS, TSC, TSLP and TWEB, including special issues. \\
+% acmlarge & Large single-column format. Used for
+% IMWUT, JOCCH, POMACS and TAP, including special issues. \\
+% acmtog & Large double-column format. Used for
+% TOG, including annual conference Technical Papers.\\
+% sigconf & Proceedings format for most ACM
+% conferences (with the exceptions listed below) and all ICPS
+% volumes.\\
+% sigplan & Proceedings format for SIGPLAN conferences.\\
+% sigchi & Proceedings format for SIGCHI conferences.\\
+% sigchi-a & Format for SIGCHI extended abstracts.\\
+% \bottomrule
+% \end{tabularx}
+% \end{table}
+%
+% There are several Boolean options that can take |true| or |false|
+% values. They are listed in Table~\ref{tab:opts_bool}. The words
+% |=true| can be omitted when setting a Boolean option, so instead of
+% |screen=true| one can write just |screen|, for example,
+% \begin{verbatim}
+% \documentclass[acmsmall, screen, review]{acmart}
+% \end{verbatim}
+% The option |review| is useful when combined with the |manuscript| format
+% option. It provides a version suitable for reviewers and
+% copy editors.
+%
+% The default for the option |screen| depends on the publication. At
+% present it is |false| for all publications \emph{but} PACM, since
+% PACM is now electronic-only. Thus PACM titles~(see
+% Table~\ref{tab:pubs}) set this option to |true|. In the future this
+% option may involve additional features suitable for on-screen
+% versions of articles.
+%
+% The option |natbib| is used when the corresponding
+% \BibTeX\ style is based on |natbib|. In most cases you do not need
+% to set it. See
+% Section~\ref{sec:ug_bibliography}.
+%
+% The option |anonymous| is used
+% for anonymous review processes and causes all author information to be
+% obscured.
+%
+% The option |timestamp| is used to include a time stamp in the
+% footer of each page. When preparing a document, this can help avoid
+% confusing different revisions. The footer also includes the page range of
+% the document. This helps detect missing pages in hard copies.
+%
+% The option |authordraft| is intended for author's drafts that are not
+% intended for distribution. It typesets a copyright block to give the
+% author an idea of its size and the overall size of the paper but
+% overprints it with the phrase ``Unpublished working draft. Not for
+% distribution.'', which is also used as a watermark. This option sets
+% |timestamp| and |review| to |true|, but these can be
+% overriden by setting these options to |false| \emph{after}
+% setting |authordraft| to |true|.
+%
+% The option |balance| determines whether the last page in the two
+% column mode has balanced columns. By default it is |true|; however,
+% it may lead to problems for some documents. Set it to |false| if
+% you encounter compilation errors. Note that for one page documents
+% \cs{balance} command might cause problems.
+%
+% The option |urlbreakonhyphens| determines whether URLs can be split
+% between lines after hyphens. By default it is true. Set it to
+% |false| to disallow these breaks.
+%
+% \begin{table}
+% \centering
+% \caption{Boolean options}
+% \label{tab:opts_bool}
+% \begin{tabularx}{\textwidth}{>{\ttfamily}l>{\ttfamily}lX}
+% \toprule
+% \normalfont Option & \normalfont Default & Meaning\\
+% \midrule
+% review & false & A review version: lines are numbered and
+% hyperlinks are colored\\
+% screen & {\rmfamily see text} & A screen version:
+% hyperlinks are colored\\
+% natbib & true & Whether to use the |natbib| package (see
+% Section~\ref{sec:ug_bibliography})\\
+% anonymous & false & Whether to make author(s) anonymous\\
+% authorversion & false & Whether to generate a special
+% version for the authors' personal use or posting (see
+% Section~\ref{sec:ug_topmatter})\\
+% nonacm & false & Use the class typesetting options for
+% a non-ACM document, which will not include the conference/journal
+% header and footers or permission statements\\
+% timestamp & false & Whether to put a time stamp in the
+% footer of each page\\
+% authordraft & false & Whether author's-draft mode is enabled\\
+% acmthm & true & Whether to define theorem-like environments, see
+% Section~\ref{sec:ug_theorems}\\
+% balance & true & Whether to balance the last page in two column
+% mode\\
+% urlbreakonhyphens & true & Whether to break urls on hyphens\\
+% \bottomrule
+% \end{tabularx}
+% \end{table}
+%
+%
+%
+%\subsection{Top matter}
+%\label{sec:ug_topmatter}
+%
+% A number of commands set up \emph{top matter} or (in
+% computer science jargon) \emph{metadata} for an article. They
+% establish the publication name, article title, authors, DOI and
+% other data. Some of these commands, like \cs{title} and \cs{author},
+% should be put by the authors. Others, like \cs{acmVolume} and
+% \cs{acmDOI}---by the editors. Below we describe these commands and
+% mention who should issue them. These macros should be used
+% \emph{before} the \cs{maketitle} command. Note that in previous
+% versions of ACM classes some of these commands should be used before
+% \cs{maketitle}, and some after it. Now they all must be used before
+% \cs{maketitle}.
+%
+%
+% This class internally loads the |amsart| class, so many top-matter
+% commands are inherited from |amsart|~\cite{Downes04:amsart}.
+%
+% \DescribeMacro{\acmJournal}%
+% The macro \cs{acmJournal}\marg{shortName} sets the name of the
+% journal or transaction for journals and transactions. The argument
+% is the short name of the publication \emph{in uppercase}, for
+% example,
+% \begin{verbatim}
+% \acmJournal{TOMS}
+% \end{verbatim}
+% The currently recognized journals are listed in
+% Table~\ref{tab:pubs}. Note that conference proceedings published in
+% \emph{book} form do not set this macro.
+%
+%
+%
+% \DescribeMacro{\acmConference}%
+% The macro
+% \cs{acmConference}\oarg{short name}\marg{name}\marg{date}\marg{venue} is
+% used for conference proceedings published in the book form. The
+% arguments are the following:
+% \begin{description}
+% \item[short name:] the abbreviated name of the conference (optional).
+% \item[name:] the name of the conference.
+% \item[date:] the date(s) of the conference.
+% \item[venue:] the place of the conference.
+% \end{description}
+% Examples:
+% \begin{verbatim}
+% \acmConference[TD'15]{Technical Data Conference}{November
+% 12--16}{Dallas, TX, USA}
+% \acmConference{SA'15 Art Papers}{November 02--06, 2015}{Kobe, Japan}
+% \end{verbatim}
+%
+% \DescribeMacro{\acmBooktitle}%
+% By default we assume that conference proceedings are published
+% in the book named \emph{Proceedings of \textsc{CONFERENCE}}, where
+% \textsc{CONFERENCE} is the name of the conference inferred from the
+% command \cs{acmConference} above. However, sometimes the book title
+% is different. The command \cs{acmBooktitle} can be used to set this
+% title, for example,
+% \begin{verbatim}
+% \acmBooktitle{Companion to the first International Conference on the
+% Art, Science and Engineering of Programming (Programming '17)}
+% \end{verbatim}
+%
+% An ACM paper should have either \cs{acmJournal} or
+% \cs{acmConference} command. If it has both (or more) commands, the
+% last one takes precedence. Note that if you have the command
+% \cs{acmConference} in a journal format like |acmsmall|, the class
+% will use conference format for bibstrip and reference citation
+% formatting. In the samples directory there is a file
+% |sample-acmsmall-conf.tex| with the example of this usage.
+%
+%
+%
+% \DescribeMacro{\editor}%
+% In most cases, conference proceedings are edited. You can use the
+% command \cs{editor}\marg{editor} to set the editor of the volume.
+% This command can be repeated, for example,
+% \begin{verbatim}
+% \editor{Jennifer B. Sartor}
+% \editor{Theo D'Hondt}
+% \editor{Wolfgang De Meuter}
+% \end{verbatim}
+%
+%
+% \DescribeMacro{\title}%
+% The command |\title|, as in the |amsart| class, has two arguments: one
+% optional, and one mandatory:
+% \begin{flushleft}
+% |\title[|\meta{ShortTitle}|]{|\meta{FullTitle}|}|
+% \end{flushleft}
+% The mandatory argument is the full title of the article. The
+% optional argument, if present, defines the shorter version of the
+% title for running heads. If the optional argument is absent, the
+% full title is used instead.
+%
+% It is expected that this command is inserted by the author of the
+% manuscript.
+%
+% \DescribeMacro{\subtitle}%
+% Besides title, ACM classes allow a subtitle, set with the
+% \cs{subtitle}\marg{subtitle} macro.
+%
+% The commands for specifying authors are highly structured.
+% The reason is they serve double duty: the authors' information is
+% typeset in the manuscript \emph{and} is used by the metadata
+% extraction tools for indexing and cataloguing. Therefore it is very
+% important to follow the guidelines exactly.
+%
+% \DescribeMacro{\author}%
+% \DescribeMacro{\orcid}
+% \DescribeMacro{\affiliation}%
+% \DescribeMacro{\email}%
+% The basic commands are \cs{author}, \cs{orcid} (for the researchers
+% registered with ORCID, \url{http://www.orcid.org/}), \cs{affiliation} and
+% \cs{email}. In the simplest case, you enter them in this order:
+% \begin{verbatim}
+% \author{...}
+% \orcid{...}
+% \affiliation{...}
+% \email{...}
+% \end{verbatim}
+% Do \emph{not} use the \LaTeX\ \cs{and} macro or commas, or \verb|\\|
+% between the authors! Each author deserves his or
+% her own \cs{author} command. An attempt to list several authors or
+% their e-mails in one command leads to a warning or an error. This
+% is not a bug, but the expected behavior.
+%
+% Note that some formats do not typset e-mails or ORCID identifiers.
+% Do not worry: the metadata tools will get them.
+%
+% Sometimes an author has several affiliations. In this case, the
+% \cs{affiliation} command should be repeated:
+% \begin{verbatim}
+% \author{...}
+% \orcid{...}
+% \affiliation{...}
+% \affiliation{...}
+% \email{...}
+% \end{verbatim}
+% Similarly you can repeat the \cs{email} command.
+%
+% You may have several authors with the same affiliation, different
+% affiliations, or overlapping affiliations (author~$A_1$ is affiliated
+% with institutions $I_1$ and $I_2$, while author $A_2$ is affiliated
+% with $I_2$ only, author $A_3$ is affiliated with
+% $I_1$ and $I_3$, etc.). The recommended solution is to put the
+% \cs{affiliation} commands after each author, possibly repeating them:
+% \begin{verbatim}
+% \author{...}
+% \orcid{...}
+% \affiliation{...}
+% \affiliation{...}
+% \email{...}
+% \author{...}
+% \orcid{...}
+% \affiliation{...}
+% \email{...}
+% \author{...}
+% \orcid{...}
+% \affiliation{...}
+% \affiliation{...}
+% \email{...}
+% \end{verbatim}
+% In some cases, when several authors share the same affiliation, you can
+% try to save space using the format
+% \begin{verbatim}
+% \author{...}
+% \email{...}
+% \author{...}
+% \email{...}
+% \affiliation{...}
+% \end{verbatim}
+% However, this format is not generally recommended.
+%
+% \DescribeMacro{\additionalaffiliation}%
+% In some cases, too many affiliations can take too much space. The
+% command \cs{additionalaffiliation}\marg{affiliation} creates a
+% footnote after an author's name with the words ``Also with
+% \marg{affiliation}''. You should use this command only as a last
+% resort. An example of usage is:
+% \begin{verbatim}
+% \author{G. Tobin}
+% \author{Ben Trovato}
+% \additionalaffiliation{%
+% \institution{The Th{\o}rv{\"a}ld Group}
+% \streetaddress{1 Th{\o}rv{\"a}ld Circle}
+% \city{Hekla}
+% \country{Iceland}}
+% \affiliation{%
+% \institution{Institute for Clarity in Documentation}
+% \streetaddress{P.O. Box 1212}
+% \city{Dublin}
+% \state{Ohio}
+% \postcode{43017-6221}}
+% \end{verbatim}
+% Here Trovato and Tobin share their affiliation with the Institute
+% for Clarity in Documentation, but only Ben Trovato is affiliated
+% with The Th{\o}rv{\"a}ld Group.
+%
+%
+% \DescribeMacro{\position}%
+% \DescribeMacro{\institution}%
+% \DescribeMacro{\department}%
+% \DescribeMacro{\streetaddress}%
+% \DescribeMacro{\city}%
+% \DescribeMacro{\state}%
+% \DescribeMacro{\postcode}%
+% \DescribeMacro{\country}%
+% The \cs{affiliation} and \cs{additionalaffiliation} commands are
+% further structured to interact with the metadata extraction tools.
+% Inside these commands you should use the \cs{position},
+% \cs{institution}, \cs{department}, \cs{city}, \cs{streetaddress},
+% \cs{state}, \cs{postcode} and \cs{country} macros to indicate the
+% corresponding parts of the affiliation. Note that in some cases
+% (for example, journals) these parts are not printed in the resulting
+% copy, but they \emph{are} necessary since they are used by the XML
+% metadata extraction programs. Do \emph{not} put commas or |\\|
+% between the elements of \cs{affiliation}. They will be provided
+% automatically.
+%
+%
+% An example of the author block:
+% \begin{verbatim}
+% \author{A. U. Thor}
+% \orcid{1234-4564-1234-4565}
+% \affiliation{%
+% \institution{University of New South Wales}
+% \department{School of Biomedical Engineering}
+% \streetaddress{Samuels Building (F25), Kensington Campus}
+% \city{Sidney}
+% \state{NSW}
+% \postcode{2052}
+% \country{Australia}}
+% \email{author@nsw.au.edu}
+% \author{A. N. Other}
+% \affiliation{%
+% \institution{University of New South Wales}
+% \city{Sidney}
+% \state{NSW}
+% \country{Australia}}
+% \author{C. O. Respondent}
+% \orcid{1234-4565-4564-1234}
+% \affiliation{%
+% \institution{University of Pennsylvania}
+% \city{Philadelphia}
+% \state{PA}
+% \country{USA}}
+% \affiliation{%
+% \institution{University of New South Wales}
+% \city{Sidney}
+% \state{NSW}
+% \country{Australia}}
+% \end{verbatim}
+%
+% Note that the old ACM conference formats did not allow more than six
+% authors and required some effort from authors to achieve
+% alignment. The new format is much better in this.
+%
+% Sometimes an author works in several departments within the same
+% insitution. There could be two situations: the departments are
+% independent, or one department is within another. In the first
+% case, just repeat the command \cs{department} several times. To
+% handle the second case the command has an optional numerical
+% parameter. The departments with higher numbers are higher in the
+% organizational chart. Compare
+% \begin{verbatim}
+% \affiliation{%
+% \department[0]{Department of Lunar Studies} % 0 is the default
+% \department[1]{John Doe Institute} % higher than 0
+% \institution{University of San Serriffe}
+% \country{San Serriffe}}
+% \end{verbatim}
+% and
+% \begin{verbatim}
+% \affiliation{%
+% \department{Department of Lunar Studies} % Not in the John Doe Institute!
+% \department{John Doe Institute}
+% \institution{University of San Serriffe}
+% \country{San Serriffe}}
+% \end{verbatim}
+%
+%
+% The command \cs{affiliation} formats its output according to
+% American conventions. This might be wrong for some cases.
+% Consider, for example, a German address. In Germany, the postcode is
+% put before the city and is not separated by a comma. We can handle this
+% order using
+% \begin{verbatim}
+% \affiliation{%
+% \institution{Fluginstitut}
+% \streetaddress{Sonnenallee 17}
+% \postcode{123456}
+% \city{Helm}
+% \country{Germany}}
+% \end{verbatim}
+% However, the comma after the postcode is unfortunate: the address will
+% be typeset (in some formats) as
+% \begin{verbatim}
+% Fluginstitut
+% Sonenallee 17
+% 123456, Helm, Germany
+% \end{verbatim}
+%
+%
+% To overcome this problem, the command \cs{affiliation} has an
+% optional parameter |obeypunctuation|, which can be |false| (the
+% default) or |true|. If this parameter is |true|, \cs{afffiliation}
+% obeys the author's command. Thus
+% \begin{verbatim}
+% \affiliation[obeypunctuation=true]{%
+% \institution{Fluginstitut}\\
+% \streetaddress{Sonnenallee 17}\\
+% \postcode{123456}
+% \city{Helm},
+% \country{Germany}}
+% \end{verbatim}
+% will be typeset as
+% \begin{verbatim}
+% Fluginstitut
+% Sonenallee 17
+% 123456 Helm, Germany
+% \end{verbatim}
+%
+% Note that you should \emph{not} use this option for journals.
+%
+% It is expected that these commands are inserted by the author of the
+% manuscript.
+%
+% \DescribeMacro{\thanks}%
+% Like |amsart| (and unlike standard \LaTeX{}), we allow
+% |\thanks| only \emph{outside} of the commands |\title| and |\author|.
+% This command is obsolete and should \emph{not} be used in most
+% cases. Do not list your acknowledgments or grant sponsors here.
+% Put this information in the |acks| environment (see
+% Section~\ref{sec:ug_acks}).
+%
+% \DescribeMacro{\authorsaddresses}%
+% In some formats, addresses are printed as a footnote on the first
+% page. By default \LaTeX\ typesets them itself using the information
+% you give it. However, you can override its choice using the
+% commmand \cs{authorsaddresses}\marg{contact addresses}, for example,
+% \begin{verbatim}
+% \authorsaddresses{%
+% Authors' addresses: G.~Zhou, Computer Science Department, College of
+% William and Mary, 104 Jameson Rd, Williamsburg, PA 23185, US;
+% V.~B\'eranger, Inria Paris-Rocquencourt, Rocquencourt, France;
+% A.~Patel, Rajiv Gandhi University, Rono-Hills, Doimukh, Arunachal
+% Pradesh, India; H.~Chan, Tsinghua University, 30 Shuangqing Rd,
+% Haidian Qu, Beijing Shi, China; T.~Yan, Eaton Innovation Center,
+% Prague, Czech Republic; T.~He, C.~Huang, J.~A.~Stankovic University
+% of Virginia, School of Engineering Charlottesville, VA 22903, USA;
+% T. F. Abdelzaher, (Current address) NASA Ames Research Center,
+% Moffett Field, California 94035.}
+% \end{verbatim}
+% You can \emph{suppress} printing authors' addresses by setting them
+% to an empty string: |\authorsaddresses{}|.
+%
+% \DescribeMacro{\titlenote}%
+% \DescribeMacro{\subtitlenote}%
+% \DescribeMacro{\authornote}%
+% While the command \cs{thanks} generates a note without a footnote
+% mark, sometimes the authors might need notes more tightly connected
+% to the title, subtitle or author. The commands \cs{titlenote},
+% \cs{subtitlenote} and \cs{authornote} that follow the corresponding
+% commands (\cs{title}, \cs{subtitle} and \cs{author}) generate such
+% notes. For example,
+% \begin{verbatim}
+% \title{This is a title}
+% \titlenote{This is a titlenote}
+% \author{A. U. Thor}
+% \authornote{This is an authornote}
+% \end{verbatim}
+%
+% Please never use a \cs{footnote} inside an \cs{author} or \cs{title}
+% command since this confuses the metadata extraction software. (Actually
+% these commands now produce errors.)
+%
+% \DescribeMacro{\authornotemark}%
+% Sometimes one may need to have the same footnote connected to
+% several authors. The command \cs{authornotemark}\oarg{number} adds
+% just the footnote mark, for example,
+% \begin{verbatim}
+% \author{A. U. Thor}
+% \authornote{Both authors contributed equally to the paper}
+% ...
+% \author{A. N. Other}
+% \authornotemark[1]
+% \end{verbatim}
+% The correct numbering of these marks is the responsibility of the
+% user.
+%
+% \DescribeMacro{\acmVolume}%
+% \DescribeMacro{\acmNumber}%
+% \DescribeMacro{\acmArticle}%
+% \DescribeMacro{\acmYear}%
+% \DescribeMacro{\acmMonth}%
+% The macros \cs{acmVolume}, \cs{acmNumber}, \cs{acmArticle},
+% \cs{acmYear} and \cs{acmMonth} are inserted by the editor and set
+% the journal volume, issue, article number, year and month
+% corrspondingly. The arguments of all these commands, including
+% \cs{acmMonth}, is numerical. For example,
+% \begin{verbatim}
+% \acmVolume{9}
+% \acmNumber{4}
+% \acmArticle{39}
+% \acmYear{2010}
+% \acmMonth{3}
+% \end{verbatim}
+% Note that \cs{acmArticle} is used not only for journals but also
+% for some conference proceedings.
+%
+% \DescribeMacro{\acmArticleSeq}%
+% The articles in the same issue of a journal have a \emph{sequence
+% number}. It is used to vertically position the black blob on the first
+% page of some formats. By default it is the same as the article number,
+% but the command \cs{acmArticleSeq}\marg{n} can be used to change it:
+% \begin{verbatim}
+% \acmArticle{39} % The sequence number will be 39 by default
+% \acmArticleSeq{5} % We redefine it to 5
+% \end{verbatim}
+% Setting this number to zero suppresses the blob.
+%
+% \DescribeMacro{\acmSubmissionID}%
+% If your paper got a Submission~ID from the Conference Management
+% System, put it here:
+% \begin{verbatim}
+% \acmSubmissionID{123-A56-BU3}
+% \end{verbatim}
+%
+%
+% \DescribeMacro{\acmPrice}%
+% The macro \cs{acmPrice}\marg{price} sets the price for the article,
+% for example,
+% \begin{verbatim}
+% \acmPrice{25.00}
+% \end{verbatim}
+% Note that you do not need to put the dollar sign here, just the
+% amount. By default the price is \$15.00, unless the copyright is
+% set to |usgov|, |rightsretained|, |iw3c2w3|, or |iw3c2w3g|, when it
+% is suppressed. Note that to override the defaults you need to set
+% the price \emph{after} the \cs{setcopyright} command. Also, the
+% command |\acmPrice{}| suppresses the printing of the price.
+%
+% \DescribeMacro{\acmISBN}%
+% Book-like volumes have ISBN numbers attached to them. The macro
+% \cs{acmISBN}\marg{ISBN} sets it. Normally it is set by the
+% typesetter, for example,
+% \begin{verbatim}
+% \acmISBN{978-1-4503-3916-2}
+% \end{verbatim}
+% Setting it to the empty string, as |\acmISBN{}|, suppresses printing the
+% ISBN.
+%
+% \DescribeMacro{\acmDOI}%
+% The macro \cs{acmDOI}\marg{DOI} sets the DOI of the article, for
+% example,
+% \begin{verbatim}
+% \acmDOI{10.1145/9999997.9999999}
+% \end{verbatim}
+% It is normally set by the typesetter. Setting it to the empty
+% string, as |\acmDOI{}|, suppresses the DOI.
+%
+%
+% \DescribeMacro{\acmBadgeR}%
+% \DescribeMacro{\acmBadgeL}%
+% Some conference articles get special distinctions, for example, the
+% artifact evaluation for PPoPP~2016
+% (see~\url{http://ctuning.org/ae/ppopp2016.html}). These articles
+% display special badges supplied by the conference organizers. This
+% class provides commands to add these badges:
+% \cs{acmBadgeR}\oarg{url}\marg{graphics} and
+% \cs{acmBadgeL}\oarg{url}\marg{graphics}. The first command puts the
+% badge to the right of the title, and the second one---to the left.
+% The exception is the |sigchi-a| mode for SIGCHI extended abstracts,
+% which puts the badges on the left margin. The arguments have the
+% following meaning: \oarg{url}, if provided, sets the link to the
+% badge authority in the screen version, while \marg{graphics} sets
+% the graphics file with the badge image. The file must be a cropped
+% square, which is scaled to a standard size in the output. For
+% example, if the badge image is |ae-logo.pdf|, the command is
+% \begin{verbatim}
+% \acmBadgeR[http://ctuning.org/ae/ppopp2016.html]{ae-logo}
+% \end{verbatim}
+%
+%
+%
+% \DescribeMacro{\startPage}%
+% The macro \cs{startPage}\marg{page} sets the first page of the
+% article in a journal or book. It is used by the typesetter.
+%
+%
+% \DescribeMacro{\terms}%
+% \DescribeMacro{\keywords}%
+% The command
+% \cs{keywords}\marg{keyword, keyword,\ldots} sets keywords for the
+% article. They must be
+% separated by commas, for example,
+% \begin{verbatim}
+% \keywords{wireless sensor networks, media access control,
+% multi-channel, radio interference, time synchronization}
+% \end{verbatim}
+%
+% \DescribeEnv{CCSXML}%
+% \DescribeMacro{\ccsdesc}%
+% ACM publications are classified according to the ACM Computing
+% Classification Scheme (CCS). CCS codes are used both in the typeset
+% version of the publications \emph{and} in the metadata in various
+% databases. Therefore you need to provide both \TeX\ commands and XML
+% metadata with the paper.
+%
+% The tool at \url{http://dl.acm.org/ccs.cfm} can be used to generate
+% CCS codes. After you select the topics, click on ``Generate CCS
+% codes'' to get results like the following:
+% \begin{verbatim}
+% \begin{CCSXML}
+% <ccs2012>
+% <concept>
+% <concept_id>10010520.10010553.10010562</concept_id>
+% <concept_desc>Computer systems organization~Embedded systems</concept_desc>
+% <concept_significance>500</concept_significance>
+% </concept>
+% <concept>
+% <concept_id>10010520.10010575.10010755</concept_id>
+% <concept_desc>Computer systems organization~Redundancy</concept_desc>
+% <concept_significance>300</concept_significance>
+% </concept>
+% <concept>
+% <concept_id>10010520.10010553.10010554</concept_id>
+% <concept_desc>Computer systems organization~Robotics</concept_desc>
+% <concept_significance>100</concept_significance>
+% </concept>
+% <concept>
+% <concept_id>10003033.10003083.10003095</concept_id>
+% <concept_desc>Networks~Network reliability</concept_desc>
+% <concept_significance>100</concept_significance>
+% </concept>
+% </ccs2012>
+% \end{CCSXML}
+%
+% \ccsdesc[500]{Computer systems organization~Embedded systems}
+% \ccsdesc[300]{Computer systems organization~Redundancy}
+% \ccsdesc{Computer systems organization~Robotics}
+% \ccsdesc[100]{Networks~Network reliability}
+% \end{verbatim}
+%
+% You just need to copy this code and paste it in your paper anywhere
+% before \verb|\maketitle|.
+%
+% \DescribeMacro{\setcopyright}
+% There are several possibilities for the copyright of the papers
+% published by the ACM: the authors may transfer the rights to the ACM,
+% license them to the ACM, some or all authors might be employees of the
+% US or Canadian governments, etc. Accordingly the command
+% \verb|\setcopyright{...}| is introduced. Its argument is the
+% copyright status of the paper, for example,
+% \verb|\setcopyright{acmcopyright}|. The possible values for this
+% command are listed in Table~\ref{tab:setcopyright}. This command
+% must be placed in the preamble, before |\begin{document}|.
+%
+% \begin{table}
+% \centering
+% \caption{Parameters for the \texttt{\textbackslash setcopyright} command}
+% \label{tab:setcopyright}
+% \begin{tabularx}{\textwidth}{lX}
+% \toprule
+% Parameter & Meaning\\
+% \midrule
+% \texttt{none} & The copyright and permission information is not
+% typeset. (This is the option for some ACM conferences.) \\
+% \texttt{acmcopyright} & The authors transfer the copyright to the
+% ACM (the ``traditional'' choice).\\
+% \texttt{acmlicensed} & The authors retain the copyright but
+% license the publication rights to ACM\@. \\
+% \texttt{rightsretained} & The authors retain the copyright and
+% publication rights to themselves or somebody else. \\
+% \texttt{usgov} & All the authors are employees of the US
+% government. \\
+% \texttt{usgovmixed} & Some authors are employees of the US
+% government. \\
+% \texttt{cagov} & All the authors are employees of the Canadian
+% government. \\
+% \texttt{cagovmixed} & Some authors are employees of the Canadian
+% government. \\
+% \texttt{licensedusgovmixed} & Some authors are employees of the US
+% government, and the publication rights are licensed to ACM\@. \\
+% \texttt{licensedcagov} & All the authors are employees of the Canadian
+% government, and the publication rights are licensed to ACM\@. \\
+% \texttt{licensedcagovmixed} & Some authors are employees of the
+% Canadian
+% government, and the publication rights are licensed to ACM\@. \\
+% \texttt{othergov} & Authors are employees of a
+% government other than the US or Canada. \\
+% \texttt{licensedothergov} & Authors are employees of a
+% government other than the US or Canada, and the publication rights
+% are licensed to ACM\@. \\
+% \texttt{iw3c2w3} & Special statement for conferences organized
+% by IW3C2.\\
+% \texttt{iw3c2w3g} & Special statement for conferences organized
+% by IW3C2, when some authors are approved Google employees.\\
+% \bottomrule
+% \end{tabularx}
+% \end{table}
+% The ACM submission software should generate the right command for you
+% to paste into your file.
+%
+%
+% \DescribeMacro{\copyrightyear}%
+% Each copyright statement must have the year of copyright. By
+% default it is the same as \cs{acmYear}, but you can override this
+% using the macro \cs{copyrightyear}, e.g.,
+% \begin{verbatim}
+% \acmYear{2016}
+% \copyrightyear{2015}
+% \end{verbatim}
+%
+% There is a special case for a personal copy that the authors may be
+% allowed to generate for their use or a posting on a personal site
+% (check the instructions for the specific journal or conference for
+% the details). The document option |authorversion=true| produces a
+% special form of the copyright statement for this case. Note that
+% you still need the \cs{setcopyright} command and (optionally)
+% \cs{copyrightyear} command to tell \TeX\ about the copyright owner and
+% year. Also, you should be aware that due to the different sizes of
+% the permssion blocks for the printed version and authors' version,
+% the page breaks might be different between them.
+%
+% \DescribeEnv{abstract}%
+% The environment |abstract| must \emph{precede} the \cs{maketitle}
+% command. Again, this is different from the standard \LaTeX.
+% Putting |abstract| after \cs{maketitle} will trigger an error.
+%
+%
+% \DescribeEnv{teaserfigure}%
+% A special kind of figure is used for many two-column conference
+% proceedings. This figure is placed just after the authors but
+% before the main text. The environment |teaserfigure| is used for these
+% figures. This environment must be used \emph{before}
+% \cs{maketitle}, for example,
+% \begin{verbatim}
+% \begin{teaserfigure}
+% \includegraphics[width=\textwidth]{sampleteaser}
+% \caption{This is a teaser}
+% \label{fig:teaser}
+% \end{teaserfigure}
+% \end{verbatim}
+%
+%
+% \DescribeMacro{\settopmatter}%
+% Some information in the top matter is printed for certain journals
+% or proceedings and suppressed for others. You can override these
+% defaults using the command \cs{settopmatter}\marg{settings}. The
+% settings and their meanings are listed in
+% Table~\ref{tab:settopmatter}. For example,
+% \begin{verbatim}
+% \settopmatter{printacmref=false, printccs=true, printfolios=true}
+% \end{verbatim}
+% The parameter |authorsperrow| requires some explanation. In
+% conference proceedings authors' information is typeset in boxes,
+% several boxes per row (see |sample-sigconf.pdf|,
+% |sample-sigplan.pdf|, etc.). The number of boxes per row is
+% determined automatically. If you want to override this,
+% you can do it using this parameter, for example,
+% \begin{verbatim}
+% \settopmatter{authorsperrow=4}
+% \end{verbatim}
+% However, in most cases you should \emph{not} do this and should use the
+% default settings. Setting |authorsperrow| to $0$ will revert it to the
+% default settings.
+%
+% \begin{table}
+% \centering
+% \caption{Settings for the \cs{settopmatter} command}
+% \label{tab:settopmatter}
+% \begin{tabularx}{\textwidth}{llX}
+% \toprule
+% Parameter & Values & Meaning\\
+% \midrule
+% |printccs| & true/false & Whether to print CCS categories\\
+% |printacmref| & true/false & Whether to print the ACM bibliographic
+% entry\\
+% |printfolios| & true/false & Whether to print page numbers
+% (folios)\\
+% |authorsperrow| & numeric & Number of authors per row for the title
+% page in
+% conference proceedings formats\\
+% \bottomrule
+% \end{tabularx}
+% \end{table}
+%
+%
+% \DescribeMacro{\received}%
+% The command \cs{received}\oarg{stage}\marg{date} sets the history of
+% the publication. The~\oarg{stage} argument is optional; the default
+% is |Received| for the first date and |revised| for the subsequent
+% ones. For example,
+% \begin{verbatim}
+% \received{February 2007}
+% \received[revised]{March 2009}
+% \received[accepted]{June 2009}
+% \end{verbatim}
+%
+%
+% \DescribeMacro{\maketitle}%
+% The macro \cs{maketitle} must be the last command in the top-matter
+% group. That is it must follow the commands defined in this section.
+%
+%
+% \DescribeMacro{\shortauthors}%
+% \emph{After} the command \cs{maketitle}, the macro \cs{shortauthors}
+% stores the names of the authors for the running head. You can
+% redefine it if the list of author's name is too long, e.g.,
+% \begin{verbatim}
+% \maketitle
+% \renewcommand{\shortauthors}{Zhou et al.}
+% \end{verbatim}
+%
+%
+%\subsection{Algorithms}
+%\label{sec:ug_algorithms}
+%
+% There are now several good packages for typesetting
+% algorithms~\cite{Fiorio15, Brito09, Heinz15}, and the authors are
+% free to choose their favorite one.
+%
+%
+%
+%\subsection{Figures and tables}
+%\label{sec:ug_floats}
+%
+% The new ACM styles use the standard \LaTeX\ interface for figures and
+% tables. There are some important items to be aware of, however.
+%
+% \begin{enumerate}
+% \item The captions for figures must be entered \emph{after} the
+% figure bodies and for tables \emph{before} the table bodies.
+% \item The ACM uses the standard types for figures and tables and adds
+% several new ones. In total there are the following types:
+% \begin{description}
+% \item[figure, table:] a standard figure or table taking a full text
+% width in one-column formats and one column width in two-column formats.
+% \item[figure*, table*] in two-column formats, a special figure or
+% table taking a full text width.
+% \item[teaserfigure:] a special figure before \cs{maketitle}.
+% \item[sidebar, marginfigure, margintable:] in the |sigchi-a| format,
+% special sidebars, tables and figures in the margin.
+% \end{description}
+%
+% \item Accordingly, when scaling images, one should use the
+% following sizes:
+% \begin{enumerate}
+% \item For |teaserfigure|, |figure| in one-column mode or |figure*| in
+% two-column mode, use \cs{textwidth}. In one-column mode, you can also
+% use \cs{columnwidth}, which coincides with \cs{textwidth} in this
+% case.
+% \item For |figure| in two-column mode, use \cs{columnwidth}.
+% \item For |marginfigure|, use \cs{marginparwidth}.
+% \item For |figure*| in SIGCHI extended
+% abstracts, use \cs{fulltextwidth}.
+% \end{enumerate}
+%
+% \end{enumerate}
+%
+% It is strongly recommended to use the package |booktabs|~\cite{Fear05}
+% and follow its main principles of typography with respect to tables:
+% \begin{enumerate}
+% \item Never, ever use vertical rules.
+% \item Never use double rules.
+% \end{enumerate}
+% It is also a good idea not to overuse horizontal rules.
+%
+% For table \emph{footnotes} you have several options described in the TeX
+% FAQ~\cite{TeXFAQ}. The simplest one is to use a \cs{minipage}
+% environment:
+% \begin{verbatim}
+% \begin{table}
+% \caption{Simulation Configuration}
+% \label{tab:conf}
+% \begin{minipage}{\columnwidth}
+% \begin{center}
+% \begin{tabular}{ll}
+% \toprule
+% TERRAIN\footnote{This is a table footnote. This is a
+% table footnote. This is a table footnote.} &
+% (200\,m$\times$200\,m) Square\\
+% Node Number & 289\\
+% Node Placement & Uniform\\
+% Application & Many-to-Many/Gossip CBR Streams\\
+% Payload Size & 32 bytes\\
+% Routing Layer & GF\\
+% MAC Layer & CSMA/MMSN\\
+% Radio Layer & RADIO-ACCNOISE\\
+% Radio Bandwidth & 250Kbps\\
+% Radio Range & 20m--45m\\
+% \bottomrule
+% \end{tabular}
+% \end{center}
+% \bigskip
+% \footnotesize\emph{Source:} This is a table
+% sourcenote. This is a table sourcenote. This is a table
+% sourcenote.
+%
+% \emph{Note:} This is a table footnote.
+% \end{minipage}
+% \end{table}
+% \end{verbatim}
+%
+% \DescribeEnv{sidebar}%
+% \DescribeEnv{marginfigure}%
+% \DescribeEnv{margintable}%
+% SIGCHI extended abstracts use margin space extensively. This package
+% provides three environments for this with optional captions:
+% \begin{description}
+% \item[sidebar:] textual information in the margin
+% \item[marginfigure:] a figure in the margin
+% \item[margintable:] a table in the margin
+% \end{description}
+%
+%
+% Tables and figures (including margin tables and margin figures) are
+% by default centered. However, in some cases (for example, when you
+% use several subimages per figure) you may need to override this.
+% A good way to do so is to put the contents into a
+% \cs{minipage} of the width \cs{columnwidth}.
+%
+%
+%\subsection{Descriptions of images}
+%\label{sec:descriptions}
+%
+% \DescribeMacro{\Description}%
+% Some readers of ACM publications might be visually challenged.
+% These readers might use a voice-over software to read aloud the
+% papers. It is important to provide them a description of each
+% image used in the paper.
+%
+% The command \cs{Description}\oarg{short description}\marg{long
+% description} should be placed inside every \texttt{figure},
+% \texttt{teaserfigure} or \texttt{marginfigure} environment to
+% provide a description of the image(s) used in the figure. Unlike
+% \cs{caption}, which is used alongside the image, \cs{Description} is
+% intended to be used instead of the image, for example,
+% \begin{verbatim}
+% \begin{figure}
+% \centering
+% \includegraphics{voltage}
+% \Description{A bell-like histogram centered at $0.5$~V with most
+% measurements between $0.2$~V and $0.8$~V}
+% \caption{Histogram of the measurements of voltage}
+% \label{fig:voltage}
+% \end{figure}
+% \end{verbatim}
+% At present the lack of descriptions generates a warning at
+% compilation.
+%
+%\subsection{Theorems}
+%\label{sec:ug_theorems}
+%
+% The ACM classes define two theorem styles and several pre-defined
+% theorem environments:
+% \begin{description}
+% \item[acmplain:] this is the style used for
+% |theorem|,
+% |conjecture|,
+% |proposition|,
+% |lemma| and
+% |corollary|, and
+% \item[acmdefinition:] this is the style used for
+% |example| and
+% |definition|.
+% \end{description}
+%
+%
+% These environments are defined by default. In the unusual
+% circumstance that a user does not wish to have these environments
+% defined, the option |acmthm=false| in the preamble will suppress
+% them.
+%
+%\subsection{Online-only and offline-only material}
+%\label{sec:ug_screen}
+%
+% \DescribeEnv{printonly}%
+% \DescribeEnv{screenonly}%
+% Some supplementary material in ACM publications is put online but
+% not in the printed version. The text inside the environment
+% |screenonly| will be typeset only when the option |screen| (see
+% Section~\ref{sec:invocation}) is set to |true|. Conversely, the
+% text inside the environment |printonly| is typset only when this
+% option is set to |false|. For example,
+% \begin{verbatim}
+% \section{Supplementary materials}
+%
+% \begin{printonly}
+% Supplementary materials are available in the online version of this paper.
+% \end{printonly}
+%
+% \begin{screenonly}
+% (The actual supplementary materials.)
+% \end{screenonly}
+% \end{verbatim}
+%
+% We use the |comment| package for typesetting this code, so
+% |\begin| and |\end| should start on a line of their own with
+% no leading or trailing spaces.
+%
+%\subsection{Note about anonymous mode}
+%\label{sec:ug_anonymous}
+%
+% \DescribeEnv{anonsuppress}%
+% When the option |anonymous| is selected, \TeX\ suppresses author
+% information (including the number of authors) for a blind review.
+% However, sometimes the information identifying the authors may be
+% present in the body of the paper. For example,
+% \begin{verbatim}
+% \begin{anonsuppress}
+% This is the continuation of the previous work by the author
+% \cite{prev1, prev2}.
+% \end{anonsuppress}
+% \end{verbatim}
+%
+% As for the |printonly| and |screenonly| environments,
+% |\begin{anonsuppress}| and |\end{anonsuppress}| should start on a
+% line of their own with no leading or trailing spaces.
+%
+%\subsection{Acknowledgments}
+%\label{sec:ug_acks}
+%
+% The traditional ``Acknowledgments'' section is conventionally used
+% to thank persons and granting agencies for their help and support.
+% However, there are several important considerations about this
+% section.
+%
+% First, in anonymous mode this section must be omitted: it gives
+% too much information to reviewers. Second, data about
+% grants is extracted and stored separately by the postprocessing
+% software. ACM classes provide facilities for both these tasks.
+%
+% \DescribeEnv{acks}%
+% The environment |acks| starts an unnumbered section
+% ``Acknowledgments'' unless the anonymous mode is chosen. Put all
+% thanks inside this environment.
+%
+% As for the |printonly| and |screenonly| environments,
+% |\begin{acks}| and |\end{acks}| should start on a
+% line of their own with no leading or trailing spaces.
+%
+% \DescribeMacro{\grantsponsor}%
+% \DescribeMacro{\grantnum}%
+% All financial support \emph{must} be listed using the commands
+% \cs{grantsponsor} and \cs{grantnum}. These commands tell the
+% postprocessing software about the granting organization and
+% grant. The format of these commands is the following:
+% \begin{quote}
+% \cs{grantsponsor}\marg{sponsorID}\marg{name}\marg{url}\\
+% \cs{grantnum}\oarg{url}\marg{sponsorID}\marg{number}.
+% \end{quote}
+% Here \marg{sponsorID} is the unique ID used to match grants to
+% sponsors, \marg{name} is the name of the sponsor, \marg{url} is its
+% URL, and \marg{number} is the grant number. The \marg{sponsorID} of
+% the \cs{grantnum} command must correspond to the \marg{sponsorID} of a
+% \cs{grantsponsor} command. Some awards have their own web pages,
+% which you can include using the optional argument of the \cs{grantnum}
+% command.
+%
+% At present \marg{sponsorID} is chosen by the authors and can be an
+% arbitrary key in the same way the label of a \cs{cite} is arbitrarily
+% chosen. There might be a change to this policy if the ACM decides to
+% create a global database of sponsoring organizations.
+%
+% Example:
+% \begin{verbatim}
+% \begin{acks}
+% The authors would like to thank Dr. Yuhua Li for providing the
+% matlab code of the \textit{BEPS} method.
+%
+% The authors would also like to thank the anonymous referees for
+% their valuable comments and helpful suggestions. This work is
+% supported by the \grantsponsor{GS501100001809}{National Natural
+% Science Foundation of
+% China}{https://doi.org/10.13039/501100001809} under Grant
+% No.:~\grantnum{GS501100001809}{61273304}
+% and~\grantnum[http://www.nnsf.cn/youngscientists]{GS501100001809}{Young
+% Scientists' Support Program}.
+% \end{acks}
+% \end{verbatim}
+%
+%
+%\subsection{Bibliography}
+%\label{sec:ug_bibliography}
+%
+% The ACM uses the |natbib| package for formatting references and
+% the Bib\TeX\ style file \path{ACM-Reference-Format.bst} for Bib\TeX\
+% processing. You can disable loading of |natbib| using the
+% option |natbib=false| in \cs{documentclass}. However, it is not
+% recommended, as well as the use of Bib\TeX\ styles other than
+% \path{ACM-Reference-Format.bst}, and may delay the processing of the
+% manuscript.
+%
+%
+% \DescribeMacro{\citestyle}%
+% If you use |natbib|, you can select one of two predefined citation
+% styles using the command \cs{citestyle}: the author-year format
+% |acmauthoryear| or the numeric format |acmnumeric|. For example,
+% \begin{verbatim}
+% \citestyle{acmauthoryear}
+% \end{verbatim}
+% Note that numeric citations are the default mode for most formats.
+%
+% \DescribeMacro{\setcitestyle}%
+% You can further customize |natbib| using
+% the \cs{setcitestyle} command, for example,
+% \begin{verbatim}
+% \setcitestyle{numbers,sort&compress}
+% \end{verbatim}
+%
+% One of the more common versions is
+% \begin{verbatim}
+% \setcitestyle{nosort}
+% \end{verbatim}
+% It is useful if you do not like the way |natbib| sorts citation
+% lists.
+%
+% If you use |natbib|, then commands like \cs{citep} and
+% \cs{citeauthor} are automatically supported. The command
+% \cs{shortcite} is the same as \cs{cite} in numerical mode and cites
+% the year in author-date mode.
+%
+% Note that before version~1.48 the command \cs{citeyear} put the year
+% in parentheses. In version~1.48 and later it produces just the
+% year; the command \cs{citeyearpar} can be used to emulate its old
+% behavior.
+%
+% There are several customized \BibTeX\ entry types and fields in the ACM
+% style file \path{ACM-Reference-Format.bst} that you may want to be
+% aware of.
+%
+% The style supports the fields \path{doi} and \path{url}, for example,
+% \begin{verbatim}
+% doi = "10.1145/1188913.1188915",
+% url = "http://ccrma.stanford.edu/~jos/bayes/bayes.pdf",
+% \end{verbatim}
+%
+% The style supports the arXiv-recommended fields \path{eprint} and
+% (optionally) \path{primaryclass}, for example,
+% \begin{verbatim}
+% eprint = "960935712",
+% primaryclass = "cs",
+% \end{verbatim}
+% See the examples at \url{http://arxiv.org/hypertex/bibstyles/}.
+%
+% There are several special entry types. Types \path{online} and
+% \path{game} are used for Web pages and games, for example,
+% \begin{verbatim}
+% @online{Thornburg01,
+% author = "Harry Thornburg",
+% year = "2001",
+% title = "Introduction to Bayesian Statistics",
+% url = "http://ccrma.stanford.edu/~jos/bayes/bayes.html",
+% month = mar,
+% lastaccessed = "March 2, 2005",
+% }
+% \end{verbatim}
+% Entry types \path{artifactsoftware}, \path{artifactdataset}
+% (with synonyms \path{software} and \path{dataset}) can be used to
+% cite software artifacts and datasets, for example,
+% \begin{verbatim}
+% @ArtifactSoftware{R,
+% title = {R: A Language and Environment for Statistical Computing},
+% author = {{R Core Team}},
+% organization = {R Foundation for Statistical Computing},
+% address = {Vienna, Austria},
+% year = {2019},
+% url = {https://www.R-project.org/},
+%}
+% @ArtifactDataset{UMassCitations,
+% author = {Sam Anzaroot and Andrew McCallum},
+% title = {{UMass} Citation Field Extraction Dataset},
+% year = 2013,
+% url =
+% {http://www.iesl.cs.umass.edu/data/data-umasscitationfield},
+% lastaccessed = {May 27, 2019}
+% }
+% \end{verbatim}
+%
+%
+% For these entry types you can use the \path{lastaccessed} field to add
+% the access date for the URL.
+%
+%
+%
+% There are two ways to enter video or audio sources in the
+% bibliograpy corresponding to two different possibilies. For
+% standalone sources available online, you can use an \path{online}
+% entry and set its \path{howpublished} field. For example,
+% \begin{verbatim}
+% @online{Obama08,
+% author = "Barack Obama",
+% year = "2008",
+% title = "A more perfect union",
+% howpublished = "Video",
+% day = "5",
+% url = "http://video.google.com/videoplay?docid=6528042696351994555",
+% month = mar,
+% lastaccessed = "March 21, 2008",
+% }
+% \end{verbatim}
+%
+% For sources available as attachments to conference proceedings
+% and similar documents, you can use the usual \path{inproceedings}
+% entry type and set its \path{howpublished} field:
+% \begin{verbatim}
+% @Inproceedings{Novak03,
+% author = "Dave Novak",
+% title = "Solder man",
+% booktitle = "ACM SIGGRAPH 2003 Video Review on Animation theater Program",
+% year = "2003",
+% publisher = "ACM Press",
+% address = "New York, NY",
+% pages = "4",
+% month = "March 21, 2008",
+% doi = "10.9999/woot07-S422",
+% howpublished = "Video",
+% }
+% \end{verbatim}
+%
+% Sometimes you need to cite a complete issue of a journal. The
+% \path{periodical} entry type is intended for this:
+% \begin{verbatim}
+% @periodical{JCohen96,
+% key = "Cohen",
+% editor = "Jacques Cohen",
+% title = "Special issue: Digital Libraries",
+% journal = "Communications of the {ACM}",
+% volume = "39",
+% number = "11",
+% month = nov,
+% year = "1996",
+% }
+% \end{verbatim}
+%
+% If you do not know the year of publication, the style will add
+% ``[n.\,d.]'' (for ``no date'') to the entry.
+%
+% If you do not know the author (this is often the case for online
+% entries), use the |key| field to add a key for sorting and citations,
+% for example,
+% \begin{verbatim}
+% @online{TUGInstmem,
+% key = {TUG},
+% year = 2017,
+% title = "Institutional members of the {\TeX} Users Group",
+% url = "http://wwtug.org/instmem.html",
+% lastaccessed = "May 27, 2017",
+% }
+% \end{verbatim}
+%
+% A note about sorting. The current ACM bibliography styles always
+% sort the entries according to authors names and publication year.
+% There is a controversy about sorting names with ``von'' or ``van''
+% part: should Ludwig van Beethoven be sorted under ``V'' or under
+% ``B''? The American practice is to use ``van'' in sorting, i.e. to
+% file van Beethoven under ``V''. However, some authorities recommend
+% to sort Dutch persons according to their last names (see
+% e.g. \url{https://www.ifla.org/files/assets/cataloguing/pubs/names-of-persons_1996.pdf}).
+% While I do not want to take a part in this dispute, I would like to
+% point to the old ``noopsort'' trick by Oren Patashnik. Add to the
+% \texttt{.bib} file the line
+% \begin{verbatim}
+% @PREAMBLE{"\providecommand{\noopsort}[1]{}"}
+% \end{verbatim}
+% and then encode the author as
+% \begin{verbatim}
+% author = {Ludwig {\noopsort{Beethoven}}van Beethoven},
+% \end{verbatim}
+% This will make the author to be sorted as ``Beethoven'' rather than
+% ``van Beethoven''.
+%
+%\subsection{Colors}
+%\label{sec:ug_colors}
+%
+% While printed ACM publications are usually black and white, |screen|
+% mode allows the use of colors. The ACM classes pre-define several
+% colors according to~\cite{ACMIdentityStandards}: |ACMBlue|,
+% |ACMYellow|, |ACMOrange|, |ACMRed|, |ACMLightBlue|, |ACMGreen|,
+% |ACMPurple| and |ACMDarkBlue|. You can use them in color
+% assignments.
+%
+% The ACM provides the following recommendation on color use.
+%
+% The most accessible approach would be to ensure that your article is
+% still readable when printed in greyscale. The most notable reasons
+% for this are:
+% \begin{enumerate}
+% \item The most common type of inherited Color Vision Deficiency
+% (CVD) is red-green (in which similar-brightness colors that differ
+% only in their amounts of red or green are often confused), and it
+% affects up to 8\% of males and 0.5\% of females of Northern European
+% descent.
+% \item The most common type of acquired Color Vision Deficiency (CVD)
+% is blue-yellow (including mild cases for many older adults).
+% \item Most printing is in black and white.
+% \item Situational impairments (e.g., bright sunlight shining on a
+% mobile screen) tend to reduce the entire color gamut, reducing color
+% discriminability.
+% \end{enumerate}
+%
+% \textbf{Note:} It is \emph{not} safe to encode information using
+% only variations in color (i.e., only differences in hue and/or
+% saturation) as there is bound to be someone affected!
+%
+% To ensure that you are using the most accessible colors, the ACM
+% recommends that you choose sets of colors to help ensure suitable
+% variations in when printed in greyscale by using either of the following tools:
+% \begin{enumerate}
+% \item ColourBrewer: \url{http://colorbrewer2.org/}
+% \item ACE: The Accessible Colour Evaluator:
+% \url{http://daprlab.com/ace/} for designing WCAG 2.0 compliant
+% palettes.
+% \end{enumerate}
+%
+%
+%\subsection{Other notable packages and typographic remarks}
+%\label{sec:ug_other}
+%
+% Several other packages are recommended for specialized tasks.
+%
+% The package |subcaption|~\cite{Sommerfeldt13:Subcaption} is
+% recommended for complex figures with several subplots or subfigures
+% that require separate subcaptioning. The packages
+% |nomencl|~\cite{Nomencl} and
+% |glossaries|~\cite{Talbot16:Glossaries} can be used for the
+% automatic creation of the lists of symbols and concepts used.
+%
+%
+% By default |acmart| prevents all widows and orphans (i.e., lonely
+% lines at the beginning or end of the page) and hyphenation at
+% the end of the page. This is done by the rather strict settings
+% \begin{verbatim}
+% \widowpenalty=10000
+% \clubpenalty=10000
+% \brokenpenalty=10000
+% \end{verbatim}
+% However, this may lead to frustrating results when the authors must
+% obey a page limit. Setting these penalties to smaller values may
+% help if you absolutely need to.
+%
+% Another problem might be the too strict line breaking rules. Again,
+% a strategically placed \cs{sloppy} command or putting the
+% problematic paragraph inside \texttt{sloppypar} environment might
+% help---but beware, the results might be, well, sloppy.
+%
+% Note that the uppercasing in section titles is done using
+% the |textcase| package~\cite{Carlisle04:Textcase}, so the command
+% \cs{NoCaseChange} inside the title may help to prevent extraneous
+% uppercasing.
+%
+%
+%
+%\subsection{Disabled or forbidden commands}
+%\label{sec:ug_disabled}
+%
+% The goal of |acmart| package is to provide a uniform look and feel
+% for ACM publications. Accordingly, a number of commands is
+% forbidden or disabled in |acmart|.
+%
+% You may \emph{not} put several authors or several e-mails into a
+% \cs{author} or \cs{email} command. This may lead to errors or
+% warning.
+%
+% You cannot change \cs{baselinestretch} in your document: this
+% produces an error.
+%
+% You should not abuse the command \cs{vspace}: this command may
+% disturb the typesetting of ACM papers.
+%
+%\subsection{A note for wizards: \texttt{acmart-preload-hook.tex}}
+%\label{sec:ug_preload}
+%
+% Sometimes you need to change the behavior of |acmart|. The
+% usual way to do this is to redefine commands in the preamble.
+% However, these definitions are executed \emph{after} |acmart| is
+% loaded and certain decisions are made. This presents a number of
+% problems.
+%
+% For example, one may want to use the |titletoc| package with |acmart|.
+% This package should be loaded before |hyperref|. However, since
+% |acmart| loads |hyperref| itself, the line |\usepackage{titletoc}|
+% in the preamble will lead to grief (see
+% \url{http://tex.stackexchange.com/questions/357265/using-titletoc-with-acm-acmart-style}).
+%
+% Another example is passing options to a package. Suppose you want to
+% use the |dvipsnames| option of the |xcolor| package. Normally you cannot do
+% this because |acmart| loads this package itself without options.
+%
+% The file |acmart-preload-hook.tex| can be used to solve these
+% problems. If this file exists, it will be processed before any other
+% package. You can use this file to load packages or pass options to
+% them. For example, if you put in this file
+% \begin{verbatim}
+% \let\LoadClassOrig\LoadClass
+% \renewcommand\LoadClass[2][]{\LoadClassOrig[#1]{#2}%
+% \usepackage{titletoc}}
+% \end{verbatim}
+% then |titletoc| will be loaded before |hyperref|. If you put in
+% this file
+% \begin{verbatim}
+% \PassOptionsToPackage{dvipsnames}{xcolor}
+% \end{verbatim}
+% you will pass |dvipsnames| to |xcolor|.
+%
+% \textbf{Important note.} This hook makes it too easy to create a
+% manuscript that is not acceptable by the ACM. It is even easier to
+% create a file that cannot be compiled. So please do not use it
+% \emph{unless you know what you are doing.} And if you use it,
+% \emph{do not ask for support.} If you decide to use this hook, you
+% are on your own.
+%
+%
+%\subsection{Currently supported publications}
+%\label{sec:pubs}
+%
+%\bgroup\centering
+% \begin{longtable}{>{\ttfamily}p{0.2\textwidth}@{}p{0.8\textwidth}}
+% \caption{ACM publications and arguments of the \cs{acmJournal}
+% command}
+% \label{tab:pubs}\\
+% \toprule
+% \normalfont Abbreviation & Publication \\
+% \midrule
+% \endfirsthead
+% \caption[]{ACM publications and arguments of the \cs{acmJournal}
+% command (continued)}\\
+% \toprule
+% \normalfont Abbreviation & Publication \\
+% \midrule
+% \endhead
+% \bottomrule
+% \endfoot
+% CIE & ACM Computers in Entertainment \\
+% CSUR & ACM Computing Surveys\\
+% DTRAP & Digital Threats: Research and Practice\\
+% HEALTH & ACM Transactions on Computing for Healthcare\\
+% IMWUT & PACM on Interactive, Mobile, Wearable and Ubiquitous
+% Technologies\\
+% JACM & Journal of the ACM \\
+% JDIQ & ACM Journal of Data and Information Quality \\
+% JEA & ACM Journal of Experimental Algorithmics \\
+% JERIC & ACM Journal of Educational Resources in Computing\\
+% JETC & ACM Journal on Emerging Technologies in Computing Systems \\
+% JOCCH & ACM Journal on Computing and Cultural Heritage \\
+% PACMCGIT & Proceedings of the ACM on Computer Graphics and
+% Interactive Techniques\\
+% PACMHCI & PACM on Human-Computer Interaction\\
+% PACMPL & PACM on Programming Languages \\
+% POMACS & PACM on Measurement and Analysis of Computing Systems \\
+% TAAS & ACM Transactions on Autonomous and Adaptive Systems\\
+% TACCESS & ACM Transactions on Accessible Computing\\
+% TACO & ACM Transactions on Architecture and Code Optimization \\
+% TALG & ACM Transactions on Algorithms \\
+% TALLIP & ACM Transactions on Asian and Low-Resource Language
+% Information Processing\\
+% TAP & ACM Transactions on Applied Perception \\
+% TCPS & ACM Transactions on Cyber-Physical Systems\\
+% TDS & ACM Transactions on Data Science\\
+% TEAC & ACM Transactions on Economics and Computation\\
+% TECS & ACM Transactions on Embedded Computing Systems \\
+% TELO & ACM Transactions on Evolutionary Learning \\
+% THRI & ACM Transactions on Human-Robot Interaction\\
+% TIIS & ACM Transactions on Interactive Intelligent Systems\\
+% TIOT & ACM Transactions on Internet of Things \\
+% TISSEC & ACM Transactions on Information and System Security\\
+% TIST & ACM Transactions on Intelligent Systems and Technology \\
+% TKDD & ACM Transactions on Knowledge Discovery from Data\\
+% TMIS & ACM Transactions on Management Information Systems\\
+% TOCE & ACM Transactions on Computing Education\\
+% TOCHI & ACM Transactions on Computer-Human Interaction\\
+% TOCL & ACM Transactions on Computational Logic\\
+% TOCS & ACM Transactions on Computer Systems \\
+% TOCT & ACM Transactions on Computation Theory \\
+% TODAES & ACM Transactions on Design Automation of Electronic Systems\\
+% TODS & ACM Transactions on Database Systems\\
+% TOG & ACM Transactions on Graphics\\
+% TOIS & ACM Transactions on Information Systems\\
+% TOIT & ACM Transactions on Internet Technology\\
+% TOMACS & ACM Transactions on Modeling and Computer Simulation \\
+% TOMM & ACM Transactions on Multimedia Computing, Communications
+% and Applications \\
+% TOMPECS & ACM Transactions on Modeling and Performance Evaluation
+% of Computing Systems\\
+% TOMS & ACM Transactions on Mathematical Software\\
+% TOPC & ACM Transactions on Parallel Computing\\
+% TOPLAS & ACM Transactions on Programming Languages and Systems\\
+% TOPS & ACM Transactions on Privacy and Security\\
+% TOS & ACM Transactions on Storage\\
+% TOSEM & ACM Transactions on Software Engineering and Methodology\\
+% TOSN & ACM Transactions on Sensor Networks\\
+% TQC & ACM Transactions on Quantum Computing\\
+% TRETS & ACM Transactions on Reconfigurable Technology and Systems\\
+% TSAS & ACM Transactions on Spatial Algorithms and Systems\\
+% TSC & ACM Transactions on Social Computing\\
+% TSLP & ACM Transactions on Speech and Language Processing \\
+% TWEB & ACM Transactions on the Web\\
+% \end{longtable}
+%\egroup
+%
+% Besides the publications listed in Table~\ref{tab:pubs}, there is a
+% special ``publication'' type FACMP, a forthcoming ACM publication,
+% reserved for new journals which are not assigned an ISSN yet.
+%
+% \StopEventually{
+% \clearpage
+% \bibliography{acmart}
+% \bibliographystyle{unsrt}}
+%
+% \clearpage
+%
+%
+%\section{Implementation}
+%\label{sec:impl}
+%
+%\subsection{Identification}
+%\label{sec:ident}
+%
+% We start with a declaration of who we are. Most |.dtx| files put
+% driver code in a separate~|.drv| driver file. We roll this code into the
+% main file and use the pseudo-guard |<gobble>| for it.
+% \begin{macrocode}
+%<class>\NeedsTeXFormat{LaTeX2e}
+%<*gobble>
+\ProvidesFile{acmart.dtx}
+%</gobble>
+%<class>\ProvidesClass{acmart}
+[2019/08/24 v1.64 Typesetting articles for the Association for Computing Machinery]
+% \end{macrocode}
+%
+% \changes{v1.00}{2016/04/14}{First released version}
+% \changes{v1.01}{2016/04/18}{Defined ACM colors}
+% \changes{v1.01}{2016/04/18}{Changed hyperref colors in screen mode
+% (closes \url{https://github.com/borisveytsman/acmart/issues/1})}
+% \changes{v1.01}{2016/04/18}{Set headheight to 1pc for all formats
+% (closes \url{https://github.com/borisveytsman/acmart/issues/5})}
+% \changes{v1.02}{2016/04/21}{Documentation changes
+% (closes \url{https://github.com/borisveytsman/acmart/issues/13})}
+% \changes{v1.02}{2016/04/21}{Added TOPS and TSC
+% (closes \url{https://github.com/borisveytsman/acmart/issues/12})}
+% \changes{v1.03}{2016/04/22}{Added authorversion option
+% (closes \url{https://github.com/borisveytsman/acmart/issues/9})}
+% \changes{v1.03}{2016/04/22}{Added anonsuppress environment}
+% \changes{v1.04}{2016/04/26}{Updated bibliography for siggraph}
+% \changes{v1.05}{2016/04/27}{Patched \cs{setcitestyle} command;
+% closes \url{https://github.com/borisveytsman/acmart/issues/19}}
+% \changes{v1.05}{2016/04/27}{Added processing doi numbers for
+% acmsiggraph and doi numbers for sigproc.bib}
+% \changes{v1.08}{2016/05/13}{SIGPLAN reformatting by Matthew Fluet}
+% \changes{v1.08}{2016/05/13}{Typos corrected (Tobias Pape)}
+% \changes{v1.09}{2016/05/18}{Revert SIGPLAN caption rules}
+% \changes{v1.11}{2016/05/27}{Customization of ACM theorem styles and
+% proof environment by Matthew Fluet}
+% \changes{v1.12}{2016/05/30}{Documentation updates}
+% \changes{v1.14}{2016/06/09}{\cs{citestyle} updates (Matthew Fluet)}
+% \changes{v1.16}{2016/07/07}{Formatting header/footer (Matthew
+% Fluet)}
+% \changes{v1.18}{2016/07/10}{Natbib is now the default for all
+% formats}
+% \changes{v1.19}{2016/07/28}{Include 'Abstract', 'Acknowledgements',
+% and 'References' in PDF bookmarks (Matthew Fluet)}
+% \changes{v1.20}{2016/08/06}{Bug fixes for bst}
+% \changes{v1.22}{2016/09/25}{More bibliography changes for Aptara}
+% \changes{v1.23}{2016/11/04}{Add PACMPL journal option}
+% \changes{v1.26}{2016/12/24}{Corrected \cs{shortcite} bug}
+% \changes{v1.26}{2016/12/24}{Documentation typos fixed (thanks to
+% Stephen Spencer)}
+% \changes{v1.30}{2017/02/04}{Bibtex style now recognizes https:// in
+% doi}
+% \changes{v1.31}{2017/03/04}{Documentation changes}
+% \changes{v1.32}{2017/03/07}{Format siggraph is now obsolete}
+% \changes{v1.32}{2017/03/07}{Added POMACS journal option}
+% \changes{v1.33}{2017/03/12}{BibTeX crossref bug corrected}
+% \changes{v1.33}{2017/03/18}{BibTeX comma before articleno bug
+% corrected}
+% \changes{v1.33}{2017/03/18}{BibTeX numpages bug corrected}
+% \changes{v1.33}{2017/03/28}{Added acmart-preload-hook}
+% \changes{v1.33}{2017/03/33}{Documentation updates}
+% \changes{v1.35}{2017/04/23}{BibTeX bug fixed: et al.}
+% \changes{v1.36}{2017/05/12}{Added the possibility to adjust number of
+% author boxes per row in conference formats}
+% \changes{v1.37}{2017/05/13}{Set \cs{normalparindent}; Reduce list
+% indentation (Matthew Fluet)}%
+% \changes{v1.38}{2017/05/13}{Increase default font size for SIGPLAN}
+% \changes{v1.40}{2017/05/27}{Bibliography changes}
+% \changes{v1.40}{2017/06/15}{Added package cleveref}
+% \changes{v1.40}{2017/06/16}{Added new copyright version:
+% licensedcagov}
+% \changes{v1.41}{2017/06/25}{Added new badges}
+% \changes{v1.42}{2017/07/02}{Deleted ACM badges}
+% \changes{v1.44}{2017/07/30}{Added package refcount}
+% \changes{v1.44}{2017/07/30}{Deleted package cleveref}
+% \changes{v1.44}{2017/07/30}{Put theorem defs in a separate style}
+% \changes{v1.46}{2017/08/17}{Bst file bug fixes: label width is
+% calculated correctly}
+% \changes{v1.46}{2017/08/25}{Added etoolbox}
+% \changes{v1.46}{2017/08/29}{Restore theorem defs to class file}
+% \changes{v1.47}{2017/08/31}{New journal: THRI}
+% \changes{v1.48}{2017/09/09}{Typos fixed (Jamie Davis)}
+% \changes{v1.48}{2017/09/16}{Code prettying (Michael D.~Adams)}
+% \changes{v1.48}{2017/09/23}{Misc entries in the bibliography no
+% longer produce a separate date}
+% \changes{v1.48}{2017/10/01}{Initial support for Biblatex (Daniel Thomas)}
+% \changes{1.48}{2017/10/14}{Bib code cleanup (Zack Weinberg)}
+% \changes{1.48}{2017/12/03}{Documentation update (siggraph)}
+% \changes{1.49}{2018/01/24}{New journal: DTRAP}
+% \changes{1.53}{2018/04/14}{New journals: PACMCGIT, TIOT, TDSCI}
+% \changes{1.53}{2018/04/14}{Rearranged docs}
+% \changes{1.54}{2018/06/17}{Moved footnote stuff before hyperref call
+% (Ross Moore)}
+% \changes{1.56}{2018/11/11}{Documented \cs{Description}}
+% \changes{1.57}{2018/12/16}{Booktabs package is now the default}
+% \changes{1.58}{2019/02/09}{Changes in samples (Enrico Gregorio)}
+% \changes{1.58}{2019/03/29}{New journal: HEALTH. TDS is renamed to
+% TDSCI}
+% \changes{1.60}{2019/04/22}{New option: urlbreakonhyphens}
+% \changes{1.62}{2019/07/31}{New journal: TELO}
+% \changes{1.63}{2019/08/04}{New journal: TQUANT}
+% \changes{1.63}{2019/08/04}{New journal: FACMP}
+% \changes{1.63a}{2019/08/05}{Move: TQUANT to TQC}
+% \changes{1.64}{2019/08/17}{Putting abstract after \cs{maketitle} now
+% causes an error}
+%
+% And the driver code:
+% \begin{macrocode}
+%<*gobble>
+\documentclass{ltxdoc}
+\usepackage{array,booktabs,amsmath,graphicx,fancyvrb,tabularx, longtable}
+\usepackage[tt=false, type1=true]{libertine}
+\usepackage[varqu]{zi4}
+\usepackage[libertine]{newtxmath}
+\usepackage[tableposition=top]{caption}
+\usepackage{hypdoc}
+\PageIndex
+\CodelineIndex
+\RecordChanges
+\EnableCrossrefs
+\begin{document}
+ \DocInput{acmart.dtx}
+\end{document}
+%</gobble>
+%<*class>
+\def\@classname{acmart}
+% \end{macrocode}
+%
+%
+%
+%\subsection{Preload hook}
+%\label{sec:preload}
+%
+% We preload |acmart-preload-hook|:
+% \begin{macrocode}
+\InputIfFileExists{acmart-preload-hook.tex}{%
+ \ClassWarning{\@classname}{%
+ I am loading acmart-preload-hook.tex. You are fully responsible
+ for any problems from now on.}}{}
+% \end{macrocode}
+%
+% \subsection{Options}
+% \label{sec:options}
+%
+% We need |xkeyval| since some of our options may have values:
+% \begin{macrocode}
+\RequirePackage{xkeyval}
+% \end{macrocode}
+%
+% We use |xstring| to check whether user input is valid
+% \begin{macrocode}
+\RequirePackage{xstring}
+% \end{macrocode}
+%
+%
+%
+% \begin{macro}{format}
+% The possible formats
+% \begin{macrocode}
+\define@choicekey*+{acmart.cls}{format}[\ACM@format\ACM@format@nr]{%
+ manuscript, acmsmall, acmlarge, acmtog, sigconf, siggraph,
+ sigplan, sigchi, sigchi-a}[manuscript]{}{%
+ \ClassError{\@classname}{The option format must be manuscript,
+ acmsmall, acmlarge, acmtog, sigconf, siggraph,
+ sigplan, sigchi or sigchi-a}}
+\def\@DeclareACMFormat#1{\DeclareOptionX{#1}{\setkeys{acmart.cls}{format=#1}}}
+\@DeclareACMFormat{manuscript}
+\@DeclareACMFormat{acmsmall}
+\@DeclareACMFormat{acmlarge}
+\@DeclareACMFormat{acmtog}
+\@DeclareACMFormat{sigconf}
+\@DeclareACMFormat{siggraph}
+\@DeclareACMFormat{sigplan}
+\@DeclareACMFormat{sigchi}
+\@DeclareACMFormat{sigchi-a}
+\ExecuteOptionsX{format}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\if@ACM@screen}
+% Whether we use screen mode
+% \begin{macrocode}
+\define@boolkey+{acmart.cls}[@ACM@]{screen}[true]{%
+ \if@ACM@screen
+ \PackageInfo{\@classname}{Using screen mode}%
+ \else
+ \PackageInfo{\@classname}{Not using screen mode}%
+ \fi}{\PackageError{\@classname}{The option screen can be either true or
+ false}}
+\ExecuteOptionsX{screen=false}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\if@ACM@urlbreakonhyphens}
+% \changes{1.60}{2019/04/22}{introduced macro}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@ACM@acmthm}
+% \changes{v1.44}{2017/07/30}{Added macro}
+% \changes{v1.46}{2017/08/29}{Modified description}
+% Whether we define theorem-like environments.
+% \begin{macrocode}
+\define@boolkey+{acmart.cls}[@ACM@]{acmthm}[true]{%
+ \if@ACM@acmthm
+ \PackageInfo{\@classname}{Requiring acmthm}%
+ \else
+ \PackageInfo{\@classname}{Suppressing acmthm}%
+ \fi}{\PackageError{\@classname}{The option acmthm can be either true or
+ false}}
+\ExecuteOptionsX{acmthm=true}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\if@ACM@review}
+% \changes{v1.48}{2017/09/09}{Review mode now switches on folios}
+% Whether we use review mode
+% \begin{macrocode}
+\define@boolkey+{acmart.cls}[@ACM@]{review}[true]{%
+ \if@ACM@review
+ \PackageInfo{\@classname}{Using review mode}%
+ \AtBeginDocument{\@ACM@printfoliostrue}%
+ \else
+ \PackageInfo{\@classname}{Not using review mode}%
+ \fi}{\PackageError{\@classname}{The option review can be either true or
+ false}}
+\ExecuteOptionsX{review=false}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\if@ACM@authorversion}
+% \changes{v1.03}{2016/04/22}{Added macro}
+% Whether we use author's-version mode
+% \begin{macrocode}
+\define@boolkey+{acmart.cls}[@ACM@]{authorversion}[true]{%
+ \if@ACM@authorversion
+ \PackageInfo{\@classname}{Using authorversion mode}%
+ \else
+ \PackageInfo{\@classname}{Not using authorversion mode}%
+ \fi}{\PackageError{\@classname}{The option authorversion can be either true or
+ false}}
+\ExecuteOptionsX{authorversion=false}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\if@ACM@nonacm}
+% \changes{v1.54}{2018/05/08}{Added macro}
+% Special option for non-ACM publications
+% using the ACM typesetting options.
+% \begin{macrocode}
+\define@boolkey+{acmart.cls}[@ACM@]{nonacm}[true]{%
+ \if@ACM@nonacm
+ \PackageInfo{\@classname}{Using nonacm mode}%
+ \AtBeginDocument{\@ACM@printacmreffalse}%
+ % in 'nonacm' mode we disable the "ACM Reference Format"
+ % printing by default, but this can be re-enabled by the
+ % user using \settopmatter{printacmref=true}
+ \else
+ \PackageInfo{\@classname}{Not using nonacm mode}%
+ \fi}{\PackageError{\@classname}{The option nonacm can be either true or
+ false}}
+\ExecuteOptionsX{nonacm=false}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\if@ACM@balance}
+% \changes{v1.57}{2018/12/16}{Added macro}
+% Whether to balance the last page
+% \begin{macrocode}
+\define@boolkey+{acmart.cls}[@ACM@]{balance}[true]{}{%
+ \PackageError{\@classname}{The option balance can be either true or
+ false}}
+\ExecuteOptionsX{balance}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\if@ACM@natbib@override}
+% \changes{v1.12}{2016/05/30}{Added macro}
+% \changes{v1.33}{2017/03/28}{Deleted macro}
+% This macro is no longer used.
+% \end{macro}
+%
+% \begin{macro}{\if@ACM@natbib}
+% Whether we use |natbib| mode
+% \begin{macrocode}
+\define@boolkey+{acmart.cls}[@ACM@]{natbib}[true]{%
+ \if@ACM@natbib
+ \PackageInfo{\@classname}{Explicitly selecting natbib mode}%
+ \else
+ \PackageInfo{\@classname}{Explicitly deselecting natbib mode}%
+ \fi}{\PackageError{\@classname}{The option natbib can be either true or
+ false}}
+\ExecuteOptionsX{natbib=true}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\if@ACM@anonymous}
+% Whether we use anonymous mode
+% \begin{macrocode}
+\define@boolkey+{acmart.cls}[@ACM@]{anonymous}[true]{%
+ \if@ACM@anonymous
+ \PackageInfo{\@classname}{Using anonymous mode}%
+ \else
+ \PackageInfo{\@classname}{Not using anonymous mode}%
+ \fi}{\PackageError{\@classname}{The option anonymous can be either true or
+ false}}
+\ExecuteOptionsX{anonymous=false}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\if@ACM@timestamp}
+% \changes{v1.33}{2017/03/10}{Added macro (Michael D.~Adams)}
+% Whether we use timestamp mode
+% \begin{macrocode}
+\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}{The option timestamp can be either true or
+ false}}
+\ExecuteOptionsX{timestamp=false}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\if@ACM@authordraft}
+% \changes{v1.33}{2017/03/28}{Added macro}
+% \changes{v1.36}{2017/05/13}{Corrected typo, thanks to bargteil}
+% Whether we use author-draft mode
+% \begin{macrocode}
+\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}{The option authordraft can be either true or
+ false}}
+\ExecuteOptionsX{authordraft=false}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\ACM@fontsize}
+% The font size to pass to the base class
+% \begin{macrocode}
+\def\ACM@fontsize{}
+\DeclareOptionX{9pt}{\edef\ACM@fontsize{\CurrentOption}}
+\DeclareOptionX{10pt}{\edef\ACM@fontsize{\CurrentOption}}
+\DeclareOptionX{11pt}{\edef\ACM@fontsize{\CurrentOption}}
+\DeclareOptionX{12pt}{\edef\ACM@fontsize{\CurrentOption}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \changes{v1.01}{2016/04/18}{Explicitly put draft option
+% (closes \url{https://github.com/borisveytsman/acmart/issues/4})}
+%
+% \begin{macrocode}
+\DeclareOptionX{draft}{\PassOptionsToClass{\CurrentOption}{amsart}}
+\DeclareOptionX{*}{\PassOptionsToClass{\CurrentOption}{amsart}}
+\ProcessOptionsX
+\ClassInfo{\@classname}{Using format \ACM@format, number \ACM@format@nr}
+% \end{macrocode}
+%
+%
+%
+%\subsection{Setting switches}
+%\label{sec:switches}
+%
+% \begin{macro}{\if@ACM@manuscript}
+% Whether we use manuscript mode
+% \begin{macrocode}
+\newif\if@ACM@manuscript
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\if@ACM@journal}
+% There are two kinds of publications: journals and books
+% \begin{macrocode}
+\newif\if@ACM@journal
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\if@ACM@journal@bibstrip}
+% \changes{v1.59}{2019/04/20}{Introduced macro}
+% Sometimes ACM wants a journal-like publication to have conference
+% information in the bibstrip and vice versa, so we have an additional
+% switch.
+% \begin{macrocode}
+\newif\if@ACM@journal@bibstrip
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\if@ACM@sigchiamode}
+% The formatting of SIGCHI extended abstracts is quite unusual. We have a
+% special switch for them.
+% \begin{macrocode}
+\newif\if@ACM@sigchiamode
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% Setting up switches
+% \begin{macrocode}
+\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
+ \@ACM@manuscripttrue
+\else
+ \@ACM@manuscriptfalse
+\fi
+\@ACM@sigchiamodefalse
+\ifcase\ACM@format@nr
+\relax % manuscript
+ \@ACM@journaltrue
+\or % acmsmall
+ \@ACM@journaltrue
+\or % acmlarge
+ \@ACM@journaltrue
+\or % acmtog
+ \@ACM@journaltrue
+\or % sigconf
+ \@ACM@journalfalse
+\or % siggraph
+ \@ACM@journalfalse
+ \or % sigplan
+ \@ACM@journalfalse
+ \or % sigchi
+ \@ACM@journalfalse
+\or % sigchi-a
+ \@ACM@journalfalse
+ \@ACM@sigchiamodetrue
+\fi
+\if@ACM@journal
+ \@ACM@journal@bibstriptrue
+\else
+ \@ACM@journal@bibstripfalse
+\fi
+% \end{macrocode}
+%
+%
+%
+%\subsection{Loading the base class and package}
+%\label{sec:loading}
+%
+% \changes{v1.13}{2016/06/06}{Increased font size for ACM Large}
+% \changes{v1.38}{2017/05/13}{Increase default font size for SIGPLAN}
+%
+%
+% At this point we either have \cs{ACM@fontsize} or use defaults
+% \begin{macrocode}
+\ifx\ACM@fontsize\@empty
+ \ifcase\ACM@format@nr
+ \relax % manuscript
+ \def\ACM@fontsize{9pt}%
+ \or % acmsmall
+ \def\ACM@fontsize{10pt}%
+ \or % acmlarge
+ \def\ACM@fontsize{10pt}%
+ \or % acmtog
+ \def\ACM@fontsize{9pt}%
+ \or % sigconf
+ \def\ACM@fontsize{9pt}%
+ \or % siggraph
+ \def\ACM@fontsize{9pt}%
+ \or % sigplan
+ \def\ACM@fontsize{10pt}%
+ \or % sigchi
+ \def\ACM@fontsize{10pt}%
+ \or % sigchi-a
+ \def\ACM@fontsize{10pt}%
+ \fi
+\fi
+\ClassInfo{\@classname}{Using fontsize \ACM@fontsize}
+\LoadClass[\ACM@fontsize, reqno]{amsart}
+\RequirePackage{microtype}
+% \end{macrocode}
+%
+%
+% We need |etoolbox| for delayed code
+% \begin{macrocode}
+\RequirePackage{etoolbox}
+% \end{macrocode}
+%
+% Booktabs is now the default
+% \begin{macrocode}
+\RequirePackage{booktabs}
+% \end{macrocode}
+%
+%
+% We need |totpages| to calculate the number of pages and
+% |refcount| to use that number
+% \begin{macrocode}
+\RequirePackage{refcount}
+\RequirePackage{totpages}
+% \end{macrocode}
+%
+% The \cs{collect@body} macro in |amsmath| is defined using \cs{def}. We load
+% |environ| to access the \cs{long} version of this command
+% \begin{macrocode}
+\RequirePackage{environ}
+% \end{macrocode}
+%
+% We use |setspace| for double spacing
+% \begin{macrocode}
+\if@ACM@manuscript
+\RequirePackage{setspace}
+\onehalfspacing
+\fi
+% \end{macrocode}
+%
+% \changes{v1.40}{2017/06/05}{Added `textcase' package}
+% We need |textcase| for better upcasing
+% \begin{macrocode}
+\RequirePackage{textcase}
+% \end{macrocode}
+%
+%
+%\subsection{Citations}
+% \changes{v1.19}{2016/07/28}{Include 'References' in PDF bookmarks
+% (Matthew Fluet)}
+% \changes{v1.14}{2016/06/09}{Patched \cs{citestyle}}
+% \changes{v1.55}{2016/08/012}{Typo corrected (Zack Weinberg)}
+% We patch \cs{setcitestyle} to allow, for example,
+% \cs{setcitestyle}|{sort}| and \cs{setcitestyle}|{nosort}|. We patch
+% \cs{citestyle} to warn about undefined citation styles.
+% \begin{macrocode}
+\if@ACM@natbib
+ \RequirePackage{natbib}
+ \renewcommand{\bibsection}{%
+ \section*{\refname}%
+ \phantomsection\addcontentsline{toc}{section}{\refname}%
+ }
+ \renewcommand{\bibfont}{\bibliofont}
+ \renewcommand\setcitestyle[1]{
+ \@for\@tempa:=#1\do
+ {\def\@tempb{round}\ifx\@tempa\@tempb
+ \renewcommand\NAT@open{(}\renewcommand\NAT@close{)}\fi
+ \def\@tempb{square}\ifx\@tempa\@tempb
+ \renewcommand\NAT@open{[}\renewcommand\NAT@close{]}\fi
+ \def\@tempb{angle}\ifx\@tempa\@tempb
+ \renewcommand\NAT@open{$<$}\renewcommand\NAT@close{$>$}\fi
+ \def\@tempb{curly}\ifx\@tempa\@tempb
+ \renewcommand\NAT@open{\{}\renewcommand\NAT@close{\}}\fi
+ \def\@tempb{semicolon}\ifx\@tempa\@tempb
+ \renewcommand\NAT@sep{;}\fi
+ \def\@tempb{colon}\ifx\@tempa\@tempb
+ \renewcommand\NAT@sep{;}\fi
+ \def\@tempb{comma}\ifx\@tempa\@tempb
+ \renewcommand\NAT@sep{,}\fi
+ \def\@tempb{authoryear}\ifx\@tempa\@tempb
+ \NAT@numbersfalse\fi
+ \def\@tempb{numbers}\ifx\@tempa\@tempb
+ \NAT@numberstrue\NAT@superfalse\fi
+ \def\@tempb{super}\ifx\@tempa\@tempb
+ \NAT@numberstrue\NAT@supertrue\fi
+ \def\@tempb{nobibstyle}\ifx\@tempa\@tempb
+ \let\bibstyle=\@gobble\fi
+ \def\@tempb{bibstyle}\ifx\@tempa\@tempb
+ \let\bibstyle=\@citestyle\fi
+ \def\@tempb{sort}\ifx\@tempa\@tempb
+ \def\NAT@sort{\@ne}\fi
+ \def\@tempb{nosort}\ifx\@tempa\@tempb
+ \def\NAT@sort{\z@}\fi
+ \def\@tempb{compress}\ifx\@tempa\@tempb
+ \def\NAT@cmprs{\@ne}\fi
+ \def\@tempb{nocompress}\ifx\@tempa\@tempb
+ \def\NAT@cmprs{\z@}\fi
+ \def\@tempb{sort&compress}\ifx\@tempa\@tempb
+ \def\NAT@sort{\@ne}\def\NAT@cmprs{\@ne}\fi
+ \def\@tempb{mcite}\ifx\@tempa\@tempb
+ \let\NAT@merge\@ne\fi
+ \def\@tempb{merge}\ifx\@tempa\@tempb
+ \@ifnum{\NAT@merge<\tw@}{\let\NAT@merge\tw@}{}\fi
+ \def\@tempb{elide}\ifx\@tempa\@tempb
+ \@ifnum{\NAT@merge<\thr@@}{\let\NAT@merge\thr@@}{}\fi
+ \def\@tempb{longnamesfirst}\ifx\@tempa\@tempb
+ \NAT@longnamestrue\fi
+ \def\@tempb{nonamebreak}\ifx\@tempa\@tempb
+ \def\NAT@nmfmt#1{\mbox{\NAT@up#1}}\fi
+ \expandafter\NAT@find@eq\@tempa=\relax\@nil
+ \if\@tempc\relax\else
+ \expandafter\NAT@rem@eq\@tempc
+ \def\@tempb{open}\ifx\@tempa\@tempb
+ \xdef\NAT@open{\@tempc}\fi
+ \def\@tempb{close}\ifx\@tempa\@tempb
+ \xdef\NAT@close{\@tempc}\fi
+ \def\@tempb{aysep}\ifx\@tempa\@tempb
+ \xdef\NAT@aysep{\@tempc}\fi
+ \def\@tempb{yysep}\ifx\@tempa\@tempb
+ \xdef\NAT@yrsep{\@tempc}\fi
+ \def\@tempb{notesep}\ifx\@tempa\@tempb
+ \xdef\NAT@cmt{\@tempc}\fi
+ \def\@tempb{citesep}\ifx\@tempa\@tempb
+ \xdef\NAT@sep{\@tempc}\fi
+ \fi
+ }%
+ \NAT@@setcites
+ }
+ \renewcommand\citestyle[1]{%
+ \ifcsname bibstyle@#1\endcsname%
+ \csname bibstyle@#1\endcsname\let\bibstyle\@gobble%
+ \else%
+ \@latex@error{Undefined `#1' citestyle}%
+ \fi
+ }%
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\bibstyle@acmauthoryear}
+% \changes{v1.13}{2016/06/06}{Added macro}
+% \changes{v1.14}{2016/06/09}{Moved def of \cs{bibstyle@acmauthoryear}
+% before use}
+% \changes{v1.35}{2017/04/13}{Square brackets for author-year style}
+% The default author-year format:
+% \begin{macrocode}
+\newcommand{\bibstyle@acmauthoryear}{%
+ \setcitestyle{%
+ authoryear,%
+ open={[},close={]},citesep={;},%
+ aysep={},yysep={,},%
+ notesep={, }}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\bibstyle@acmnumeric}
+% \changes{v1.13}{2016/06/06}{Added macro}
+% \changes{v1.14}{2016/06/09}{Moved def of \cs{bibstyle@numeric}
+% before use}
+% The default numeric format:
+% \begin{macrocode}
+\newcommand{\bibstyle@acmnumeric}{%
+ \setcitestyle{%
+ numbers,sort&compress,%
+ open={[},close={]},citesep={,},%
+ notesep={, }}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \changes{v1.28}{2017/01/07}{Corrected option natbib behavior}
+% The default is numeric:
+% \begin{macrocode}
+\if@ACM@natbib
+\citestyle{acmnumeric}
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\@startsection}
+% \changes{v1.31}{2017/03/04}{Added \cs{tochangmeasure}}
+% Before we call |hyperref|, we redefine \cs{startsection} commands to
+% their \LaTeX\ defaults since the |amsart| ones are too AMS-specific.
+% We need to do this early since we want |hyperref| to have a chance
+% to redefine them again:
+% \begin{macrocode}
+\def\@startsection#1#2#3#4#5#6{%
+ \if@noskipsec \leavevmode \fi
+ \par
+ \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@
+ \@tempskipa -\@tempskipa \@afterindentfalse
+ \fi
+ \if@nobreak
+ \everypar{}%
+ \else
+ \addpenalty\@secpenalty\addvspace\@tempskipa
+ \fi
+ \@ifstar
+ {\@ssect{#3}{#4}{#5}{#6}}%
+ {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \edef\@toclevel{\ifnum#2=\@m 0\else\number#2\fi}%
+ \ifnum #2>\c@secnumdepth
+ \let\@svsec\@empty
+ \else
+ \refstepcounter{#1}%
+ \protected@edef\@svsec{\@seccntformat{#1}\relax}%
+ \fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup
+ #6{%
+ \@hangfrom{\hskip #3\relax\@svsec}%
+ \interlinepenalty \@M #8\@@par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}%
+ \ifnum #2>\c@secnumdepth \else
+ \@tochangmeasure{\csname the#1\endcsname}%
+ \fi
+ \addcontentsline{toc}{#1}{%
+ \ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}%
+ \fi
+ #7}%
+ \else
+ \def\@svsechd{%
+ #6{\hskip #3\relax
+ \@svsec #8}%
+ \csname #1mark\endcsname{#7}%
+ \ifnum #2>\c@secnumdepth \else
+ \@tochangmeasure{\csname the#1\endcsname\space}%
+ \fi
+ \addcontentsline{toc}{#1}{%
+ \ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}%
+ \fi
+ #7}}%
+ \fi
+ \@xsect{#5}}
+\def\@xsect#1{%
+ \@tempskipa #1\relax
+ \ifdim \@tempskipa>\z@
+ \par \nobreak
+ \vskip \@tempskipa
+ \@afterheading
+ \else
+ \@nobreakfalse
+ \global\@noskipsectrue
+ \everypar{%
+ \if@noskipsec
+ \global\@noskipsecfalse
+ {\setbox\z@\lastbox}%
+ \clubpenalty\@M
+ \begingroup \@svsechd \endgroup
+ \unskip
+ \@tempskipa #1\relax
+ \hskip -\@tempskipa
+ \else
+ \clubpenalty \@clubpenalty
+ \everypar{}%
+ \fi}%
+ \fi
+ \ignorespaces}
+\def\@seccntformat#1{\csname the#1\endcsname\quad}
+\def\@ssect#1#2#3#4#5{%
+ \@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup
+ #4{%
+ \@hangfrom{\hskip #1}%
+ \interlinepenalty \@M #5\@@par}%
+ \endgroup
+ \else
+ \def\@svsechd{#4{\hskip #1\relax #5}}%
+ \fi
+ \@xsect{#3}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@startsection}
+% \changes{v1.31}{2017/03/04}{Rededined macro}
+% \changes{v1.43}{2017/07/09}{Added \cs{makeatletter}}
+% The |amsart| package redefines \cs{startsection}. Here we redefine
+% it again to make the table of contents work.
+% \begin{macrocode}
+\def\@starttoc#1#2{\begingroup\makeatletter
+ \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@}%
+}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\l@subsection}
+% \changes{v1.40}{2017/05/27}{Redefined macro}
+% Section spacing is more generous than for |amsart|
+% \begin{macrocode}
+\def\l@section{\@tocline{1}{0pt}{1pc}{2pc}{}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@subsection}
+% \changes{v1.31}{2017/03/04}{Redefined macro}
+% The spacing in |amsart| is too large
+% \begin{macrocode}
+\def\l@subsection{\@tocline{2}{0pt}{1pc}{3pc}{}}
+% \end{macrocode}
+%
+% \end{macro}
+% \begin{macro}{\l@subsubsection}
+% \changes{v1.31}{2017/03/04}{Redefined macro}
+% The spacing in |amsart| is too large
+% \begin{macrocode}
+\def\l@subsubsection{\@tocline{2}{0pt}{1pc}{5pc}{}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% We need to define foonote-related stuff before the call to hyperref
+% (Ross Moore)
+% \begin{macro}{\@makefntext}
+% We do not use indentation for footnotes
+% \begin{macrocode}
+\def\@makefntext{\noindent\@makefnmark}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@footnotetext}
+% In |sigchi-a| mode our footnotes are in the margin!
+% \begin{macrocode}
+\if@ACM@sigchiamode
+\long\def\@footnotetext#1{\marginpar{%
+ \reset@font\small
+ \interlinepenalty\interfootnotelinepenalty
+ \protected@edef\@currentlabel{%
+ \csname p@footnote\endcsname\@thefnmark
+ }%
+ \color@begingroup
+ \@makefntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
+ \color@endgroup}}%
+\fi
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@mpfootnotetext}
+% \changes{v1.13}{2016/06/06}{Made minipage footnotes centered}
+% We want the footnotes in minipages centered:
+% \begin{macrocode}
+\long\def\@mpfootnotetext#1{%
+ \global\setbox\@mpfootins\vbox{%
+ \unvbox\@mpfootins
+ \reset@font\footnotesize
+ \hsize\columnwidth
+ \@parboxrestore
+ \protected@edef\@currentlabel
+ {\csname p@mpfootnote\endcsname\@thefnmark}%
+ \color@begingroup\centering
+ \@makefntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
+ \color@endgroup}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@makefnmark}
+% \changes{v1.17}{2016/067/09}{Redefined}
+% AMS classes use a buggy definition of \cs{makefnmark}. We revert
+% to the standard one.
+% \begin{macrocode}
+\def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% And now, |hyperref|
+% \changes{v1.28}{2017/01/07}{Got rid of warnings in pdf keywords}
+% \changes{v1.46}{2017/08/25}{Delayed hypersetup since journal options
+% may change screen mode}
+% \changes{v1.55}{2018/10/20}{Now we use purple color for links}
+% \changes{v1.58}{2019/26/01}{Suppressed \cs{addtocounter} in pdf subject}
+% \begin{macrocode}
+\let\@footnotemark@nolink\@footnotemark
+\let\@footnotetext@nolink\@footnotetext
+\RequirePackage[bookmarksnumbered,unicode]{hyperref}
+\pdfstringdefDisableCommands{%
+ \def\addtocounter#1#2{}%
+ \def\unskip{}%
+ \def\textbullet{- }%
+ \def\textrightarrow{ -> }%
+ \def\footnotemark{}%
+}
+\urlstyle{rm}
+\ifcase\ACM@format@nr
+\relax % manuscript
+\or % acmsmall
+\or % acmlarge
+\or % acmtog
+\or % sigconf
+\or % siggraph
+\or % sigplan
+ \urlstyle{sf}
+\or % sigchi
+\or % sigchi-a
+ \urlstyle{sf}
+\fi
+\AtEndPreamble{%
+ \if@ACM@urlbreakonhyphens
+ \def\do@url@hyp{\do\-}%
+ \fi
+ \if@ACM@screen
+ \hypersetup{colorlinks,
+ linkcolor=ACMPurple,
+ citecolor=ACMPurple,
+ urlcolor=ACMDarkBlue,
+ filecolor=ACMDarkBlue}
+ \else
+ \hypersetup{hidelinks}
+ \fi
+ \hypersetup{pdflang={en},
+ pdfdisplaydoctitle}}
+% \end{macrocode}
+%
+% Bibliography mangling.
+% \changes{v1.33}{2017/03/23}{Moved \cs{citename} definition for
+% non-natbib bibliography, so a package may redefine it}
+% \changes{v1.48}{2017/09/23}{\cs{citeyear} no longer behaves like
+% \cs{citeyearpar}}
+% \begin{macrocode}
+\if@ACM@natbib
+ \let\citeN\cite
+ \let\cite\citep
+ \let\citeANP\citeauthor
+ \let\citeNN\citeyearpar
+ \let\citeyearNP\citeyear
+ \let\citeNP\citealt
+ \DeclareRobustCommand\citeA
+ {\begingroup\NAT@swafalse
+ \let\NAT@ctype\@ne\NAT@partrue\NAT@fullfalse\NAT@open\NAT@citetp}%
+ \providecommand\newblock{}%
+\else
+ \AtBeginDocument{%
+ \let\shortcite\cite%
+ \providecommand\citename[1]{#1}}
+\fi
+\newcommand\shortcite[2][]{%
+ \ifNAT@numbers\cite[#1]{#2}\else\citeyearpar[#1]{#2}\fi}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\bibliographystyle}
+% \changes{v1.13}{2016/06/06}{Redefined macro}
+% The |amsart| package redefines \cs{bibliographystyle} since it
+% prefers the AMS bibliography style. We turn it back to the
+% \LaTeX\ definition:
+% \begin{macrocode}
+\def\bibliographystyle#1{%
+ \ifx\@begindocumenthook\@undefined\else
+ \expandafter\AtBeginDocument
+ \fi
+ {\if@filesw
+ \immediate\write\@auxout{\string\bibstyle{#1}}%
+ \fi}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% Graphics and color.
+% \changes{1.48}{2017/10/22}{Added prologue option to xcolor}
+% \begin{macrocode}
+\RequirePackage{graphicx}
+\RequirePackage[prologue]{xcolor}
+% \end{macrocode}
+%
+% We define ACM colors according to~\cite{ACMIdentityStandards}:
+% \begin{macrocode}
+\definecolor[named]{ACMBlue}{cmyk}{1,0.1,0,0.1}
+\definecolor[named]{ACMYellow}{cmyk}{0,0.16,1,0}
+\definecolor[named]{ACMOrange}{cmyk}{0,0.42,1,0.01}
+\definecolor[named]{ACMRed}{cmyk}{0,0.90,0.86,0}
+\definecolor[named]{ACMLightBlue}{cmyk}{0.49,0.01,0,0}
+\definecolor[named]{ACMGreen}{cmyk}{0.20,0,1,0.19}
+\definecolor[named]{ACMPurple}{cmyk}{0.55,1,0,0.15}
+\definecolor[named]{ACMDarkBlue}{cmyk}{1,0.58,0,0.21}
+% \end{macrocode}
+%
+%
+% Author-draft mode
+% \begin{macrocode}
+\if@ACM@authordraft
+ \RequirePackage{draftwatermark}
+ \SetWatermarkFontSize{0.5in}
+ \SetWatermarkColor[gray]{.9}
+ \SetWatermarkText{\parbox{12em}{\centering
+ Unpublished working draft.\\
+ Not for distribution.}}
+\fi
+% \end{macrocode}
+%
+%
+%\subsection{Paper size and paragraphing}
+%\label{sec:paper}
+%
+% \changes{v1.17}{2016/07/07}{Slightly decreased margins for sigs}
+% \changes{v1.29}{2017/01/22}{Increased head to 13pt}
+% \changes{v1.40}{2017/07/15}{Added heightrounded to geometry}
+% \changes{v1.56}{2018/10/16}{Make two-column layouts flush (Philip Quinn)}
+% We use |geometry| for dimensions. Note that the present margins do not
+% depend on the font size option---we might need to change this.
+% See \url{https://github.com/borisveytsman/acmart/issues/5#issuecomment-272881329}.
+% \begin{macrocode}
+\RequirePackage{geometry}
+\ifcase\ACM@format@nr
+\relax % manuscript
+ \geometry{letterpaper,head=13pt,
+ marginparwidth=6pc,heightrounded}%
+\or % acmsmall
+ \geometry{twoside=true,
+ includeheadfoot, head=13pt, foot=2pc,
+ paperwidth=6.75in, paperheight=10in,
+ top=58pt, bottom=44pt, inner=46pt, outer=46pt,
+ marginparwidth=2pc,heightrounded
+ }%
+\or % acmlarge
+ \geometry{twoside=true, head=13pt, foot=2pc,
+ paperwidth=8.5in, paperheight=11in,
+ includeheadfoot,
+ top=78pt, bottom=114pt, inner=81pt, outer=81pt,
+ marginparwidth=4pc,heightrounded
+ }%
+\or % acmtog
+ \geometry{twoside=true, head=13pt, foot=2pc,
+ paperwidth=8.5in, paperheight=11in,
+ includeheadfoot, columnsep=24pt,
+ top=52pt, bottom=75pt, inner=52pt, outer=52pt,
+ marginparwidth=2pc,heightrounded
+ }%
+\or % sigconf
+ \geometry{twoside=true, head=13pt,
+ paperwidth=8.5in, paperheight=11in,
+ includeheadfoot, columnsep=2pc,
+ top=57pt, bottom=73pt, inner=54pt, outer=54pt,
+ marginparwidth=2pc,heightrounded
+ }%
+\or % siggraph
+ \geometry{twoside=true, head=13pt,
+ paperwidth=8.5in, paperheight=11in,
+ includeheadfoot, columnsep=2pc,
+ top=57pt, bottom=73pt, inner=54pt, outer=54pt,
+ marginparwidth=2pc,heightrounded
+ }%
+\or % sigplan
+ \geometry{twoside=true, head=13pt,
+ paperwidth=8.5in, paperheight=11in,
+ includeheadfoot=false, columnsep=2pc,
+ top=1in, bottom=1in, inner=0.75in, outer=0.75in,
+ marginparwidth=2pc,heightrounded
+ }%
+\or % sigchi
+ \geometry{twoside=true, head=13pt,
+ paperwidth=8.5in, paperheight=11in,
+ includeheadfoot, columnsep=2pc,
+ top=66pt, bottom=73pt, inner=54pt, outer=54pt,
+ marginparwidth=2pc,heightrounded
+ }%
+\or % sigchi-a
+ \geometry{twoside=false, head=13pt,
+ paperwidth=11in, paperheight=8.5in,
+ includeheadfoot, marginparsep=72pt,
+ marginparwidth=170pt, columnsep=20pt,
+ top=72pt, bottom=72pt, left=314pt, right=72pt
+ }%
+ \@mparswitchfalse
+ \reversemarginpar
+\fi
+% \end{macrocode}
+%
+%
+% \begin{macro}{\parindent}
+% \begin{macro}{\parskip}
+% Paragraphing
+% \begin{macrocode}
+\setlength\parindent{10\p@}
+\setlength\parskip{\z@}
+\ifcase\ACM@format@nr
+\relax % manuscript
+\or % acmsmall
+\or % acmlarge
+\or % acmtog
+ \setlength\parindent{9\p@}%
+\or % sigconf
+\or % siggraph
+\or % sigplan
+\or % sigchi
+\or % sigchi-a
+\fi
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\normalparindent}
+% \changes{v1.37}{2017/05/13}{Set \cs{normalparindent} (Matthew Fluet)}%
+% The |amsart| package defines the \cs{normalparindent} length and
+% initializes it to 12pt (the value of \cs{parindent} in |amsart|). It
+% is later used to set the \cs{listparindent} length in the |quotation|
+% environment and the \cs{parindent} length in the \cs{@footnotetext}
+% command. We set \cs{normalparindent} to the value of \cs{parindent}
+% as selected by |acmart| for consistent paragraph indents.
+% \begin{macrocode}
+\setlength\normalparindent{\parindent}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% Footnotes require some consideration. We have several layers of
+% footnotes: frontmatter footnotes, ``regular'' footnotes and the
+% special insert for the bibstrip. In the old ACM classes, the bibstrip
+% was a \cs{@float}. The problem with floats is that they tend to, well,
+% float---and we want the guarantee they stay.
+%
+% We use |manyfoot| for layered footnotes instead.
+%
+% \begin{macro}{\copyrightpermissionfootnoterule}
+% \changes{v1.12}{2016/05/30}{Added macro}
+% This is the footnote rule that separates the bibstrip from the rest of
+% the paper. It is a full width rule.
+% \begin{macrocode}
+\def\copyrightpermissionfootnoterule{\kern-3\p@
+ \hrule \@width \columnwidth \kern 2.6\p@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\RequirePackage{manyfoot}
+\SelectFootnoteRule[2]{copyrightpermission}
+\DeclareNewFootnote{authorsaddresses}
+\SelectFootnoteRule[2]{copyrightpermission}
+\DeclareNewFootnote{copyrightpermission}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\footnoterule}
+% \changes{v1.12}{2016/05/30}{Made shorter}
+% Tschichold's rules:
+% \begin{macrocode}
+\def\footnoterule{\kern-3\p@
+ \hrule \@width 4pc \kern 2.6\p@}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\endminipage}
+% We do not use footnote rules in minipages
+% \begin{macrocode}
+\def\endminipage{%
+ \par
+ \unskip
+ \ifvoid\@mpfootins\else
+ \vskip\skip\@mpfootins
+ \normalcolor
+ \unvbox\@mpfootins
+ \fi
+ \@minipagefalse
+ \color@endgroup
+ \egroup
+ \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\@textbottom}
+% \changes{v1.31}{2017/03/04}{Redefined}
+% Add some stretch according to David Carlisle's advice at
+% \url{http://tex.stackexchange.com/a/62318/5522}
+% \begin{macrocode}
+\def\@textbottom{\vskip \z@ \@plus 1pt}
+\let\@texttop\relax
+% \end{macrocode}
+%
+% \end{macro}
+%
+% In two-column layouts, force both columns to be the same height by inserting
+% extra internal vertical space to fill out the page.
+% \begin{macrocode}
+\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
+% \end{macrocode}
+%
+%\subsection{Fonts}
+%\label{sec:fonts}
+%
+% \changes{v1.12}{2016/05/30}{Added graceful behavior when libertine
+% fonts are absent}
+% \changes{v1.33}{2017/03/29}{Added cmap and glyphtounicode}
+% \changes{v1.40}{2017/05/27}{Added Ross Moore code for glyphtounicode}
+%
+% Somehow PDFTeX and XeTeX require different incantations to make a PDF
+% compliant with the current Acrobat bugs. Xpdf is much better.
+%
+% The code below is by Ross Moore.
+% \begin{macrocode}
+\RequirePackage{iftex}
+\ifPDFTeX
+\input{glyphtounicode}
+\pdfglyphtounicode{f_f}{FB00}
+\pdfglyphtounicode{f_f_i}{FB03}
+\pdfglyphtounicode{f_f_l}{FB04}
+\pdfglyphtounicode{f_i}{FB01}
+\pdfglyphtounicode{t_t}{0074 0074}
+\pdfglyphtounicode{f_t}{0066 0074}
+\pdfglyphtounicode{T_h}{0054 0068}
+\pdfgentounicode=1
+\fi
+\RequirePackage{cmap}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\if@ACM@newfonts}
+% \changes{v1.12}{2016/05/30}{Added macro}%
+% Whether we load the new fonts
+% \begin{macrocode}
+\newif\if@ACM@newfonts
+\@ACM@newfontstrue
+\IfFileExists{libertine.sty}{}{\ClassWarning{\@classname}{You do not
+ have the libertine package installed. Please upgrade your
+ TeX}\@ACM@newfontsfalse}
+\IfFileExists{zi4.sty}{}{\ClassWarning{\@classname}{You do not
+ have the zi4 package installed. Please upgrade your
+ TeX}\@ACM@newfontsfalse}
+\IfFileExists{newtxmath.sty}{}{\ClassWarning{\@classname}{You do not
+ have the newtxmath package installed. Please upgrade your
+ TeX}\@ACM@newfontsfalse}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \changes{v1.30}{2017/02/15}{Switched to T1: looks like libertine has
+% problems with \cs{l} in OT1}%
+% \changes{v1.33}{2017/03/12}{Switched to Type~1 fonts for libertine
+% even if OTF-capable engine is used (Kai Mindermann)}
+% \changes{v1.51}{2018/04/05}{XeTeX now uses OTF fonts (Joachim
+% Breitner)}
+% \changes{v1.54}{2018/07/16}{XeTeX now uses T1 encoding}
+% \changes{v1.56}{2018/11/11}{Looks like XeTeX requires explicit
+% monotype font delcaration}
+% We use Libertine throughout.
+% \begin{macrocode}
+\if@ACM@newfonts
+ \RequirePackage[T1]{fontenc}
+\ifxetex
+ \RequirePackage[tt=false]{libertine}
+ \setmonofont{inconsolata}
+\else
+ \RequirePackage[tt=false, type1=true]{libertine}
+\fi
+\RequirePackage[varqu]{zi4}
+\RequirePackage[libertine]{newtxmath}
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\liningnums}
+% \changes{v1.46}{2017/08/28}{Workaround for compatibility with fontspec}
+% Libertine defines \cs{liningnums}, which makes |fontspec| unhappy.
+% While we do not use |fontspec|, some users do.
+% \begin{macrocode}
+\let\liningnums\@undefined
+\AtEndPreamble{%
+ \DeclareTextFontCommand{\liningnums}{\libertineLF}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% The SIGCHI extended abstracts are sans serif:
+% \begin{macrocode}
+\if@ACM@sigchiamode
+ \renewcommand{\familydefault}{\sfdefault}
+\fi
+% \end{macrocode}
+%
+%
+%
+%\subsection{Image descriptions}
+%\label{sec:description}
+%
+% \begin{macro}{\if@Description@present}
+% \changes{v1.56}{2018/11/11}{Added macro}
+% A local switch: whether there is a description in the given figure
+% \begin{macrocode}
+\newif\if@Description@present
+\@Description@presenttrue
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@undescribed@images}
+% \changes{v1.56}{2018/11/11}{Added macro}
+% A global switch whether some images were \emph{not} described
+% \begin{macrocode}
+\newif\if@undescribed@images
+\@undescribed@imagesfalse
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Description}
+% \changes{v1.56}{2018/11/11}{Added macro}
+% The Description macro right now just sets switches
+% \begin{macrocode}
+\newcommand\Description[2][]{\global\@Description@presenttrue\ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+% The global warning
+% \begin{macrocode}
+\AtEndDocument{\if@undescribed@images
+ \ClassWarningNoLine{\@classname}{Some images may lack descriptions}\fi}
+% \end{macrocode}
+%
+% Hooks for figures and tables
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+%
+%\subsection{Floats}
+%\label{sec:floats}
+%
+% \changes{v1.55}{2018/10/20}{Table captions for SIGCHI now use the
+% same font size as figure captions (Luis Leiva)}
+% We use the |caption| package
+% \begin{macrocode}
+\RequirePackage{caption, float}
+\captionsetup[table]{position=top}
+\if@ACM@journal
+ \captionsetup{labelfont={sf, small},
+ textfont={sf, small}, margin=\z@}
+ \captionsetup[figure]{name={Fig.}}
+\else
+ \captionsetup{labelfont={bf},
+ textfont={bf}, labelsep=colon, margin=\z@}
+ \ifcase\ACM@format@nr
+ \relax % manuscript
+ \or % acmsmall
+ \or % acmlarge
+ \or % acmtog
+ \or % sigconf
+ \or % siggraph
+ \captionsetup{textfont={it}}
+ \or % sigplan
+ \captionsetup{labelfont={bf},
+ textfont={normalfont}, labelsep=period, margin=\z@}
+ \or % sigchi
+ \captionsetup[figure]{labelfont={bf, small},
+ textfont={bf, small}}
+ \captionsetup[table]{labelfont={bf, small},
+ textfont={bf, small}}
+ \or % sigchi-a
+ \captionsetup[figure]{labelfont={bf, small},
+ textfont={bf, small}}
+ \captionsetup[table]{labelfont={bf, small},
+ textfont={bf, small}}
+ \fi
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{sidebar}
+% The |sidebar| environment:
+% \begin{macrocode}
+\newfloat{sidebar}{}{sbar}
+\floatname{sidebar}{Sidebar}
+\renewenvironment{sidebar}{\Collect@Body\@sidebar}{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@sidebar}
+% \changes{v1.58}{2019/01/23}{Deleted spurious \cs{vspace} warning}
+% The processing of the saved text
+% \begin{macrocode}
+\long\def\@sidebar#1{\bgroup\let\@vspace\@vspace@orig
+ \let\@vspacer\@vspacer@orig\captionsetup{type=sidebar}%
+ \marginpar{\small#1}\egroup}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{marginfigure}
+% The |marginfigure| environment:
+% \begin{macrocode}
+\newenvironment{marginfigure}{\Collect@Body\@marginfigure}{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@marginfigure}
+% \changes{v1.12}{2016/05/30}{Now centering by default}
+% \changes{v1.56}{2018/11/11}{Added checking for description}
+% \changes{v1.58}{2019/01/23}{Deleted spurious \cs{vspace} warning}
+% The processing of the saved text
+% \begin{macrocode}
+\long\def\@marginfigure#1{\bgroup
+ \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}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{margintable}
+% The |margintable| environment:
+% \begin{macrocode}
+\newenvironment{margintable}{\Collect@Body\@margintable}{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@margintable}
+% \changes{v1.12}{2016/05/30}{Now centering by default}
+% \changes{v1.58}{2019/01/23}{Deleted spurious \cs{vspace} warning}
+% The processing of the saved text
+% \begin{macrocode}
+\long\def\@margintable#1{\bgroup\let\@vspace\@vspace@orig
+ \let\@vspacer\@vspacer@orig\captionsetup{type=table}%
+ \marginpar{\centering\small#1}\egroup}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% SIGCHI extended abstracts provide an interesting possibility to push
+% into the margin. Here we use |figure*| and |table*| for this.
+% \begin{macro}{\fulltextwidth}
+% We define the width of the boxes as
+% \begin{macrocode}
+\newdimen\fulltextwidth
+\fulltextwidth=\dimexpr(\textwidth+\marginparwidth+\marginparsep)
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@dblfloat}
+% \changes{v1.58}{2019/01/23}{Deleted spurious \cs{vspace} warning}
+% We redefine the double-float command. First, we make the size
+% bigger. Second, our default position is going to be |tp| (to give
+% marginalia a chance)
+% \begin{macrocode}
+\if@ACM@sigchiamode
+\def\@dblfloat{\bgroup\let\@vspace\@vspace@orig
+ \let\@vspacer\@vspacer@orig\columnwidth=\fulltextwidth
+ \let\@endfloatbox\@endwidefloatbox
+ \def\@fpsadddefault{\def\@fps{tp}}%
+ \@float}
+\fi
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\end@dblfloat}
+% And the end. Just adding a \cs{bgroup}.
+% \begin{macrocode}
+\if@ACM@sigchiamode
+\def\end@dblfloat{%
+ \end@float\egroup}
+\fi
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@endwidefloatbox}
+% This is the end of a wide box---we basically move everything
+% to the left
+% \begin{macrocode}
+\def\@endwidefloatbox{%
+ \par\vskip\z@skip
+ \@minipagefalse
+ \outer@nobreak
+ \egroup
+ \color@endbox
+ \global\setbox\@currbox=\vbox{\moveleft
+ \dimexpr(\fulltextwidth-\textwidth)\box\@currbox}%
+ \wd\@currbox=\textwidth
+}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+%\subsection{Lists}
+%\label{sec:lists}
+%
+% \begin{macrocode}
+\ifcase\ACM@format@nr
+\relax % manuscript
+\or % acmsmall
+\or % acmlarge
+\or % acmtog
+\or % sigconf
+\or % siggraph
+\or % sigplan
+\def\labelenumi{\theenumi.}
+\def\labelenumii{\theenumii.}
+\def\labelenumiii{\theenumiii.}
+\def\labelenumiv{\theenumiv.}
+\or % sigchi
+\or % sigchi-a
+\fi
+% \end{macrocode}
+%
+%
+% \changes{v1.37}{2017/05/13}{Reduce list indentation (Matthew Fluet)}%
+% The AMS uses generous margins for lists. Note that |amsart| defines
+% \cs{leftmargin} values for list levels at the beginning of the
+% document, so we must redefine them in the same manner. Also, note that
+% |amsart| redefines the |enumerate| and |itemize| environments with a
+% \cs{makelabel} command that uses \cs{llap}, so the \cs{labelwidth}
+% value is~(effectively) irrelevant; nonetheless, we follow |amsart|
+% and set \cs{labelwidth} to \cs{leftmargin} minus \cs{labelsep}.
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\descriptionlabel}
+% \changes{v1.37}{2017/05/13}{Reduce list indentation (Matthew Fluet)}%
+% \changes{v1.12}{2016/05/30}{Redefined}
+% We do not use a colon by default like |amsart| does:
+% \begin{macrocode}
+\renewcommand{\descriptionlabel}[1]{\upshape\bfseries #1}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\description}
+% \changes{v1.37}{2017/05/13}{Reduce list indentation (Matthew Fluet)}%
+% \changes{v1.17}{2016/07/07}{Decreased indent}
+% Make the |description| environment indentation consistent with that of
+% the |itemize| and |enumerate| environments.
+% \begin{macrocode}
+\renewenvironment{description}{\list{}{%
+ \labelwidth\@ACM@labelwidth
+ \let\makelabel\descriptionlabel}%
+}{
+ \endlist
+}
+\let\enddescription=\endlist % for efficiency
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+%\subsection{Top-matter data}
+%\label{sec:top_matter_data}
+%
+% \begin{macro}{\if@ACM@maketitle@typeset}
+% \changes{v1.64}{2019/08/17}{Introduced macro}
+% The switch to check whether \cs{maketitle} is already typeset. It
+% is initally false, and setting top matter when it is true is wrong.
+% \begin{macrocode}
+\newif\if@ACM@maketitle@typeset
+\@ACM@maketitle@typesetfalse
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \changes{v1.24}{2016/11/16}{Add IMWUT journal option}
+% \changes{v1.25}{2016/12/03}{Updated PACMPL}
+% \changes{v1.30}{2017/02/15}{Updated IMWUT and PACMPL}
+% \changes{v1.36}{2017/05/13}{Added PACMHCI journal options}
+% \changes{v1.46}{2017/08/25}{PACM now set screen to true}
+% \changes{v1.53}{2018/04/14}{Added PACMCGIT, TIOT, TDSCI}
+% \changes{v1.58}{2019/03/29}{Added HEALTH. TDSCI is renamed to TDS}
+%
+% We use the |xkeyval| interface to define journal titles and the relevant
+% information
+% \begin{macrocode}
+\define@choicekey*+{ACM}{acmJournal}[\@journalCode\@journalCode@nr]{%
+ CIE,%
+ CSUR,%
+ DTRAP,%
+ HEALTH,%
+ IMWUT,%
+ JACM,%
+ JDIQ,%
+ JEA,%
+ JERIC,%
+ JETC,%
+ JOCCH,%
+ PACMCGIT,%
+ PACMHCI,%
+ PACMPL,%
+ POMACS,%
+ TAAS,%
+ TACCESS,%
+ TACO,%
+ TALG,%
+ TALLIP,%
+ TAP,%
+ TCPS,%
+ TDS,%
+ TEAC,%
+ TECS,%
+ TELO,%
+ THRI,%
+ TIIS,%
+ TIOT,%
+ TISSEC,%
+ TIST,%
+ TKDD,%
+ TMIS,%
+ TOCE,%
+ TOCHI,%
+ TOCL,%
+ TOCS,%
+ TOCT,%
+ TODAES,%
+ TODS,%
+ TOG,%
+ TOIS,%
+ TOIT,%
+ TOMACS,%
+ TOMM,%
+ TOMPECS,%
+ TOMS,%
+ TOPC,%
+ TOPS,%
+ TOPLAS,%
+ TOS,%
+ TOSEM,%
+ TOSN,%
+ TQC,%
+ TRETS,%
+ TSAS,%
+ TSC,%
+ TSLP,%
+ TWEB,%
+ FACMP%
+}{%
+\ifcase\@journalCode@nr
+\relax % CIE
+ \def\@journalName{ACM Computers in Entertainment}%
+ \def\@journalNameShort{ACM Comput. Entertain.}%
+ \def\@permissionCodeOne{1544-3574}%
+\or % CSUR
+ \def\@journalName{ACM Computing Surveys}%
+ \def\@journalNameShort{ACM Comput. Surv.}%
+ \def\@permissionCodeOne{0360-0300}%
+\or % DTRAP
+ \def\@journalName{Digital Threats: Research and Practice}%
+ \def\@journalNameShort{Digit. Threat. Res. Pract.}%
+ \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
+ \def\@journalName{Proceedings of the ACM on Interactive, Mobile,
+ Wearable and Ubiquitous Technologies}%
+ \def\@journalNameShort{Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.}%
+ \def\@permissionCodeOne{2474-9567}%
+ \@ACM@screentrue
+ \PackageInfo{\@classname}{Using screen mode due to \@journalCode}%
+\or % JACM
+ \def\@journalName{Journal of the ACM}%
+ \def\@journalNameShort{J. ACM}%
+ \def\@permissionCodeOne{0004-5411}%
+\or % JDIQ
+ \def\@journalName{ACM Journal of Data and Information Quality}%
+ \def\@journalNameShort{ACM J. Data Inform. Quality}%
+ \def\@permissionCodeOne{1936-1955}%
+\or % JEA
+ \def\@journalName{ACM Journal of Experimental Algorithmics}%
+ \def\@journalNameShort{ACM J. Exp. Algor.}%
+ \def\@permissionCodeOne{1084-6654}%
+\or % JERIC
+ \def\@journalName{ACM Journal of Educational Resources in Computing}%
+ \def\@journalNameShort{ACM J. Edu. Resources in Comput.}%
+ \def\@permissionCodeOne{1073-0516}%
+\or % JETC
+ \def\@journalName{ACM Journal on Emerging Technologies in Computing Systems}%
+ \def\@journalNameShort{ACM J. Emerg. Technol. Comput. Syst.}%
+ \def\@permissionCodeOne{1550-4832}%
+\or % JOCCH
+ \def\@journalName{ACM Journal on Computing and Cultural Heritage}%
+ \def\@journalNameShort{ACM J. Comput. Cult. Herit.}%
+\or % PACMCGIT
+ \def\@journalName{Proceedings of the ACM on Computer Graphics and Interactive Techniques}%
+ \def\@journalNameShort{Proc. ACM Comput. Graph. Interact. Tech.}%
+ \def\@permissionCodeOne{2577-6193}%
+ \@ACM@screentrue
+ \PackageInfo{\@classname}{Using screen mode due to \@journalCode}%
+\or % PACMHCI
+ \def\@journalName{Proceedings of the ACM on Human-Computer Interaction}%
+ \def\@journalNameShort{Proc. ACM Hum.-Comput. Interact.}%
+ \def\@permissionCodeOne{2573-0142}%
+ \@ACM@screentrue
+ \PackageInfo{\@classname}{Using screen mode due to \@journalCode}%
+\or % PACMPL
+ \def\@journalName{Proceedings of the ACM on Programming Languages}%
+ \def\@journalNameShort{Proc. ACM Program. Lang.}%
+ \def\@permissionCodeOne{2475-1421}%
+ \@ACM@screentrue
+ \PackageInfo{\@classname}{Using screen mode due to \@journalCode}%
+\or % POMACS
+ \def\@journalName{Proceedings of the ACM on Measurement and Analysis of Computing Systems}%
+ \def\@journalNameShort{Proc. ACM Meas. Anal. Comput. Syst.}%
+ \def\@permissionCodeOne{2476-1249}%
+ \@ACM@screentrue
+ \PackageInfo{\@classname}{Using screen mode due to \@journalCode}%
+\or % TAAS
+ \def\@journalName{ACM Transactions on Autonomous and Adaptive Systems}%
+ \def\@journalNameShort{ACM Trans. Autonom. Adapt. Syst.}%
+ \def\@permissionCodeOne{1556-4665}%
+\or % TACCESS
+ \def\@journalName{ACM Transactions on Accessible Computing}%
+ \def\@journalNameShort{ACM Trans. Access. Comput.}%
+ \def\@permissionCodeOne{1936-7228}%
+\or % TACO
+ \def\@journalName{ACM Transactions on Architecture and Code Optimization}%
+ \def\@journalNameShort{ACM Trans. Arch. Code Optim.}%
+\or % TALG
+ \def\@journalName{ACM Transactions on Algorithms}%
+ \def\@journalNameShort{ACM Trans. Algor.}%
+ \def\@permissionCodeOne{1549-6325}%
+\or % TALLIP
+ \def\@journalName{ACM Transactions on Asian and Low-Resource Language Information Processing}%
+ \def\@journalNameShort{ACM Trans. Asian Low-Resour. Lang. Inf. Process.}%
+ \def\@permissionCodeOne{2375-4699}%
+\or % TAP
+ \def\@journalName{ACM Transactions on Applied Perception}%
+\or % TCPS
+ \def\@journalName{ACM Transactions on Cyber-Physical Systems}%
+\or % TDS
+ \def\@journalName{ACM Transactions on Data Science}%
+ \def\@journalNameShort{ACM Trans. Data Sci.}%
+ \def\@permissionCodeOne{2577-3224}%
+\or % TEAC
+ \def\@journalName{ACM Transactions on Economics and Computation}%
+\or % TECS
+ \def\@journalName{ACM Transactions on Embedded Computing Systems}%
+ \def\@journalNameShort{ACM Trans. Embedd. Comput. Syst.}%
+ \def\@permissionCodeOne{1539-9087}%
+\or % TELO
+ \def\@journalName{ACM Transactions on Evolutionary Learning}%
+ \def\@journalNameShort{ACM Trans. Evol. Learn.}%
+ \def\@permissionCodeOne{2688-3007}%
+\or % THRI
+ \def\@journalName{ACM Transactions on Human-Robot Interaction}%
+ \def\@journalNameShort{ACM Trans. Hum.-Robot Interact.}%
+ \def\@permissionCodeOne{2573-9522}%
+\or % TIIS
+ \def\@journalName{ACM Transactions on Interactive Intelligent Systems}%
+ \def\@journalNameShort{ACM Trans. Interact. Intell. Syst.}%
+ \def\@permissionCodeOne{2160-6455}%
+\or % TIOT
+ \def\@journalName{ACM Transactions on Internet of Things}%
+ \def\@journalNameShort{ACM Trans. Internet Things}%
+ \def\@permissionCodeOne{2577-6207}%
+\or % TISSEC
+ \def\@journalName{ACM Transactions on Information and System Security}%
+ \def\@journalNameShort{ACM Trans. Info. Syst. Sec.}%
+ \def\@permissionCodeOne{1094-9224}%
+\or % TIST
+ \def\@journalName{ACM Transactions on Intelligent Systems and Technology}%
+ \def\@journalNameShort{ACM Trans. Intell. Syst. Technol.}%
+ \def\@permissionCodeOne{2157-6904}%
+\or % TKDD
+ \def\@journalName{ACM Transactions on Knowledge Discovery from Data}%
+ \def\@journalNameShort{ACM Trans. Knowl. Discov. Data.}%
+ \def\@permissionCodeOne{1556-4681}%
+\or % TMIS
+ \def\@journalName{ACM Transactions on Management Information Systems}%
+ \def\@journalNameShort{ACM Trans. Manag. Inform. Syst.}%
+ \def\@permissionCodeOne{2158-656X}%
+\or % TOCE
+ \def\@journalName{ACM Transactions on Computing Education}%
+ \def\@journalNameShort{ACM Trans. Comput. Educ.}%
+ \def\@permissionCodeOne{1946-6226}%
+\or % TOCHI
+ \def\@journalName{ACM Transactions on Computer-Human Interaction}%
+ \def\@journalNameShort{ACM Trans. Comput.-Hum. Interact.}%
+ \def\@permissionCodeOne{1073-0516}%
+\or % TOCL
+ \def\@journalName{ACM Transactions on Computational Logic}%
+ \def\@journalNameShort{ACM Trans. Comput. Logic}%
+ \def\@permissionCodeOne{1529-3785}%
+\or % TOCS
+ \def\@journalName{ACM Transactions on Computer Systems}%
+ \def\@journalNameShort{ACM Trans. Comput. Syst.}%
+ \def\@permissionCodeOne{0734-2071}%
+\or % TOCT
+ \def\@journalName{ACM Transactions on Computation Theory}%
+ \def\@journalNameShort{ACM Trans. Comput. Theory}%
+ \def\@permissionCodeOne{1942-3454}%
+\or % TODAES
+ \def\@journalName{ACM Transactions on Design Automation of Electronic Systems}%
+ \def\@journalNameShort{ACM Trans. Des. Autom. Electron. Syst.}%
+ \def\@permissionCodeOne{1084-4309}%
+\or % TODS
+ \def\@journalName{ACM Transactions on Database Systems}%
+ \def\@journalNameShort{ACM Trans. Datab. Syst.}%
+ \def\@permissionCodeOne{0362-5915}%
+\or % TOG
+ \def\@journalName{ACM Transactions on Graphics}%
+ \def\@journalNameShort{ACM Trans. Graph.}%
+ \def\@permissionCodeOne{0730-0301}
+\or % TOIS
+ \def\@journalName{ACM Transactions on Information Systems}%
+ \def\@permissionCodeOne{1046-8188}%
+\or % TOIT
+ \def\@journalName{ACM Transactions on Internet Technology}%
+ \def\@journalNameShort{ACM Trans. Internet Technol.}%
+ \def\@permissionCodeOne{1533-5399}%
+\or % TOMACS
+ \def\@journalName{ACM Transactions on Modeling and Computer Simulation}%
+ \def\@journalNameShort{ACM Trans. Model. Comput. Simul.}%
+\or % TOMM
+ \def\@journalName{ACM Transactions on Multimedia Computing, Communications and Applications}%
+ \def\@journalNameShort{ACM Trans. Multimedia Comput. Commun. Appl.}%
+ \def\@permissionCodeOne{1551-6857}%
+ \def\@permissionCodeTwo{0100}%
+\or % TOMPECS
+ \def\@journalName{ACM Transactions on Modeling and Performance Evaluation of Computing Systems}%
+ \def\@journalNameShort{ACM Trans. Model. Perform. Eval. Comput. Syst.}%
+ \def\@permissionCodeOne{2376-3639}%
+\or % TOMS
+ \def\@journalName{ACM Transactions on Mathematical Software}%
+ \def\@journalNameShort{ACM Trans. Math. Softw.}%
+ \def\@permissionCodeOne{0098-3500}%
+\or % TOPC
+ \def\@journalName{ACM Transactions on Parallel Computing}%
+ \def\@journalNameShort{ACM Trans. Parallel Comput.}%
+ \def\@permissionCodeOne{1539-9087}%
+\or % TOPS
+ \def\@journalName{ACM Transactions on Privacy and Security}%
+ \def\@journalNameShort{ACM Trans. Priv. Sec.}%
+ \def\@permissionCodeOne{2471-2566}%
+\or % TOPLAS
+ \def\@journalName{ACM Transactions on Programming Languages and Systems}%
+ \def\@journalNameShort{ACM Trans. Program. Lang. Syst.}%
+ \def\@permissionCodeOne{0164-0925}%
+\or % TOS
+ \def\@journalName{ACM Transactions on Storage}%
+ \def\@journalNameShort{ACM Trans. Storage}%
+ \def\@permissionCodeOne{1553-3077}%
+\or % TOSEM
+ \def\@journalName{ACM Transactions on Software Engineering and Methodology}%
+ \def\@journalNameShort{ACM Trans. Softw. Eng. Methodol.}%
+ \def\@permissionCodeOne{1049-331X}%
+\or % TOSN
+ \def\@journalName{ACM Transactions on Sensor Networks}%
+ \def\@journalNameShort{ACM Trans. Sensor Netw.}%
+ \def\@permissionCodeOne{1550-4859}%
+\or % TQC
+ \def\@journalName{ACM Transactions on Quantum Computing}%
+ \def\@journalNameShort{ACM Trans. Quantum Comput.}%
+ \def\@permissionCodeOne{2643-6817}%
+\or % TRETS
+ \def\@journalName{ACM Transactions on Reconfigurable Technology and Systems}%
+ \def\@journalNameShort{ACM Trans. Reconfig. Technol. Syst.}%
+ \def\@permissionCodeOne{1936-7406}%
+\or % TSAS
+ \def\@journalName{ACM Transactions on Spatial Algorithms and Systems}%
+ \def\@journalNameShort{ACM Trans. Spatial Algorithms Syst.}%
+ \def\@permissionCodeOne{2374-0353}%
+\or % TSC
+ \def\@journalName{ACM Transactions on Social Computing}%
+ \def\@journalNameShort{ACM Trans. Soc. Comput.}%
+ \def\@permissionCodeOne{2469-7818}%
+\or % TSLP
+ \def\@journalName{ACM Transactions on Speech and Language Processing}%
+ \def\@journalNameShort{ACM Trans. Speech Lang. Process.}%
+ \def\@permissionCodeOne{1550-4875}%
+\or % TWEB
+ \def\@journalName{ACM Transactions on the Web}%
+ \def\@journalNameShort{ACM Trans. Web}%
+ \def\@permissionCodeOne{1559-1131}%
+\else % FACMP, a dummy journal
+ \def\@journalName{Forthcoming ACM Publication}%
+ \def\@journalNameShort{ACM Forthcoming}%
+ \def\@permissionCodeOne{XXXX-XXXX}%
+\fi
+\ClassInfo{\@classname}{Using journal code \@journalCode}%
+}{%
+ \ClassError{\@classname}{Incorrect journal #1}%
+}%
+% \end{macrocode}
+% \begin{macro}{\acmJournal}
+% \changes{v1.59}{2019/04/20}{Setting \cs{@ACM@journal@bibstrip}}
+% And the syntactic sugar around it
+% \begin{macrocode}
+\def\acmJournal#1{\setkeys{ACM}{acmJournal=#1}%
+ \global\@ACM@journal@bibstriptrue}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% The defaults:
+% \begin{macrocode}
+\def\@journalCode@nr{0}
+\def\@journalName{}%
+\def\@journalNameShort{\@journalName}%
+\def\@permissionCodeOne{XXXX-XXXX}%
+\def\@permissionCodeTwo{}%
+% \end{macrocode}
+%
+%
+% \begin{macro}{\acmConference}
+% \changes{v1.59}{2019/04/20}{Setting \cs{@ACM@journal@bibstrip}}
+% This is the conference command
+% \begin{macrocode}
+\newcommand\acmConference[4][]{%
+ \gdef\acmConference@shortname{#1}%
+ \gdef\acmConference@name{#2}%
+ \gdef\acmConference@date{#3}%
+ \gdef\acmConference@venue{#4}%
+ \ifx\acmConference@shortname\@empty
+ \gdef\acmConference@shortname{#2}%
+ \fi
+ \global\@ACM@journal@bibstripfalse
+}
+\if@ACM@journal\else
+\acmConference[Conference'17]{ACM Conference}{July 2017}{Washington,
+ DC, USA}%
+\fi
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\acmBooktitle}
+% \changes{v1.44}{2017/08/11}{Added macro}
+% \begin{macro}{\@acmBooktitle}
+% \changes{v1.44}{2017/08/11}{Added macro}
+% The book title of the conference:
+% \begin{macrocode}
+\def\acmBooktitle#1{\gdef\@acmBooktitle{#1}}
+\acmBooktitle{Proceedings of \acmConference@name
+ \ifx\acmConference@name\acmConference@shortname\else
+ \ (\acmConference@shortname)\fi}
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@editorsAbbrev}
+% \changes{v1.44}{2017/08/11}{Added macro}
+% How to abbreviate editors
+% \begin{macrocode}
+\def\@editorsAbbrev{(Ed.)}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@acmEditors}
+% \changes{v1.44}{2017/08/11}{Added macro}
+% The list of editors
+% \begin{macrocode}
+\def\@acmEditors{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\editor}
+% \changes{v1.44}{2017/08/11}{Added macro}
+% Add a new editor to the list
+% \begin{macrocode}
+\def\editor#1{\ifx\@acmEditors\@empty
+ \gdef\@acmEditors{#1}%
+ \else
+ \gdef\@editorsAbbrev{(Eds.)}%
+ \g@addto@macro\@acmEditors{\and#1}%
+\fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\subtitle}
+% The subtitle macro
+% \begin{macrocode}
+\def\subtitle#1{\def\@subtitle{#1}}
+\subtitle{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\num@authorgroups}
+% \changes{v1.15}{2016/06/25}{Renamed}
+% The total number of ``groups''. Each group is several authors with
+% the same affiliations(s)
+% \begin{macrocode}
+\newcount\num@authorgroups
+\num@authorgroups=0\relax
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\num@authors}
+% \changes{v1.46}{2017/08/27}{Introduced macro}
+% The total number of authors
+% \begin{macrocode}
+\newcount\num@authors
+\num@authors=0\relax
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{\if@insideauthorgroup}
+% \changes{v1.15}{2016/06/25}{Introduced macro}
+% Whether we are continuing an author group
+% \begin{macrocode}
+\newif\if@insideauthorgroup
+\@insideauthorgroupfalse
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\author}
+% \changes{v1.15}{2016/06/25}{Added code for author groups}
+% \changes{v1.46}{2017/08/27}{Started counting authors}
+% \changes{v1.54}{2018/06/23}{Added submission id in anonymous mode}
+% \changes{v1.57}{2018/12/09}{Added warning if \cs{author} has comma}
+% Adding an author to the list of authors and addresses
+% \begin{macrocode}
+\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
+ \if@insideauthorgroup\else
+ \global\advance\num@authorgroups by 1\relax
+ \global\@insideauthorgrouptrue
+ \fi
+ \ifx\addresses\@empty
+ \if@ACM@anonymous
+ \gdef\addresses{\@author{Anonymous Author(s)%
+ \ifx\@acmSubmissionID\@empty\else\\Submission Id:
+ \@acmSubmissionID\fi}}%
+ \gdef\authors{Anonymous Author(s)}%
+ \else
+ \gdef\addresses{\@author{#2}}%
+ \gdef\authors{#2}%
+ \fi
+ \else
+ \if@ACM@anonymous\else
+ \g@addto@macro\addresses{\and\@author{#2}}%
+ \g@addto@macro\authors{\and#2}%
+ \fi
+ \fi
+ \if@ACM@anonymous
+ \ifx\shortauthors\@empty
+ \gdef\shortauthors{Anon.
+ \ifx\@acmSubmissionID\@empty\else Submission Id:
+ \@acmSubmissionID\fi}%
+ \fi
+ \else
+ \def\@tempa{#1}%
+ \ifx\@tempa\@empty
+ \ifx\shortauthors\@empty
+ \gdef\shortauthors{#2}%
+ \else
+ \g@addto@macro\shortauthors{\and#2}%
+ \fi
+ \else
+ \ifx\shortauthors\@empty
+ \gdef\shortauthors{#1}%
+ \else
+ \g@addto@macro\shortauthors{\and#1}%
+ \fi
+ \fi
+ \fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\affiliation}
+% \changes{v1.15}{2016/06/25}{Added code for author groups}
+% The macro \cs{affiliation} mimics \cs{address} from |amsart|.
+% Note that it has an optional argument, which we use differently
+% from |amsart|.
+% \begin{macrocode}
+\newcommand{\affiliation}[2][]{%
+ \global\@insideauthorgroupfalse
+ \if@ACM@anonymous\else
+ \g@addto@macro\addresses{\affiliation{#1}{#2}}%
+ \fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\if@ACM@affiliation@obeypunctuation}
+% \changes{v1.33}{2017/03/28}{Added macro}
+% Whether to use the author's punctuation (false by default, which adds
+% American-style address punctuation)
+% \begin{macrocode}
+\define@boolkey+{@ACM@affiliation@}[@ACM@affiliation@]{obeypunctuation}%
+[true]{}{\ClassError{\@classname}{The option obeypunctuation can be either true or false}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\additionalaffiliation}
+% \changes{v1.31}{2017/03/04}{Added macro}
+% Additional affiliations go to footnotes
+% \begin{macrocode}
+\def\additionalaffiliation#1{\authornote{\@additionalaffiliation{#1}}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@additionalaffiliation}
+% \changes{v1.31}{2017/03/04}{Added macro}
+% Process \cs{additionalaffiliation} inside \cs{authornote}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\email}
+% \changes{v1.57}{2018/12/09}{Added warning if \cs{author} has comma}
+% The macro \cs{email} mimics \cs{email} from |amsart|.
+% Again, it has an optional argument that we do not currently need
+% but keep for possible future use.
+% \begin{macrocode}
+\renewcommand{\email}[2][]{%
+ \IfSubStr{#2}{,}{\ClassWarning{\@classname}{Do not put several
+ addresses in the same \string\email\space macro!}}{}%
+ \if@ACM@anonymous\else
+ \g@addto@macro\addresses{\email{#1}{#2}}%
+ \fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\orcid}
+% \changes{v1.15}{2016/06/25}{Introduced macro}
+% Right now we do not typeset ORCIDs
+% \begin{macrocode}
+\def\orcid#1{\unskip\ignorespaces}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\authorsaddresses}
+% \changes{v1.46}{2017/08/27}{Introduced macro}
+% Setting up authors' addresses
+% \begin{macrocode}
+\def\authorsaddresses#1{\def\@authorsaddresses{#1}}
+\authorsaddresses{\@mkauthorsaddresses}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\@titlenotes}
+% The title notes
+% \begin{macrocode}
+\def\@titlenotes{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\titlenote}
+% Adding a note to the title
+% \begin{macrocode}
+\def\titlenote#1{%
+ \g@addto@macro\@title{\footnotemark}%
+ \if@ACM@anonymous
+ \g@addto@macro\@titlenotes{%
+ \stepcounter{footnote}\footnotetext{Title note}}%
+ \else
+ \g@addto@macro\@titlenotes{\stepcounter{footnote}\footnotetext{#1}}%
+ \fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@subtitlenotes}
+% The subtitle notes
+% \begin{macrocode}
+\def\@subtitlenotes{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\subtitlenote}
+% Adding a note to the subtitle
+% \begin{macrocode}
+\def\subtitlenote#1{%
+ \g@addto@macro\@subtitle{\footnotemark}%
+ \if@ACM@anonymous
+ \g@addto@macro\@subtitlenotes{%
+ \stepcounter{footnote}\footnotetext{Subtitle note}}%
+ \else
+ \g@addto@macro\@subtitlenotes{%
+ \stepcounter{footnote}\footnotetext{#1}}%
+ \fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@authornotes}
+% The author notes
+% \begin{macrocode}
+\def\@authornotes{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\authornote}
+% Adding a note to the author
+% \begin{macrocode}
+\def\authornote#1{%
+ \if@ACM@anonymous\else
+ \g@addto@macro\addresses{\@authornotemark}%
+ \g@addto@macro\@authornotes{%
+ \stepcounter{footnote}\footnotetext{#1}}%
+ \fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\authornotemark}
+% \changes{v1.39}{2017/05/14}{Added macro}
+% Adding a footnote mark to the authors
+% \begin{macrocode}
+\newcommand\authornotemark[1][\relax]{%
+ \ifx#1\relax\relax\relax
+ \g@addto@macro\addresses{\@authornotemark}%
+ \else
+ \g@addto@macro\addresses{\@@authornotemark{#1}}%
+ \fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\acmVolume}
+% \changes{v1.17}{2016/07/10}{The default is now numerical}
+% The current volume
+% \begin{macrocode}
+\def\acmVolume#1{\def\@acmVolume{#1}}
+\acmVolume{1}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\acmNumber}
+% \changes{v1.17}{2016/07/10}{The default is now numerical}
+% The current number
+% \begin{macrocode}
+\def\acmNumber#1{\def\@acmNumber{#1}}
+\acmNumber{1}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\acmArticle}
+% \changes{v1.17}{2016/07/10}{The default is now numerical}
+% \changes{v1.44}{2017/08/111}{The default is now empty}
+% The current article
+% \begin{macrocode}
+\def\acmArticle#1{\def\@acmArticle{#1}}
+\acmArticle{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\acmArticleSeq}
+% \changes{v1.04}{2016/04/26}{Name change by Matthew Fluet}
+% \changes{v1.44}{2017/08/11}{Now acmArticle might be empty}
+% The sequence number
+% \begin{macrocode}
+\def\acmArticleSeq#1{\def\@acmArticleSeq{#1}}
+\acmArticleSeq{\@acmArticle}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\acmYear}
+% \changes{v1.17}{2016/07/10}{The default is now numerical}
+% \changes{v1.31}{2017/03/04}{The default now is the current year
+% (Matteo Riondato)}
+% The current year
+% \begin{macrocode}
+\def\acmYear#1{\def\@acmYear{#1}}
+\acmYear{\the\year}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\acmMonth}
+% \changes{v1.17}{2016/07/09}{The default must be numerical. Closes \#50.}
+% \changes{v1.31}{2017/03/04}{The default now is the current month
+% (Matteo Riondato)}
+% The current month
+% \begin{macrocode}
+\def\acmMonth#1{\def\@acmMonth{#1}}
+\acmMonth{\the\month}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\@acmPubDate}
+% The publication date
+% \begin{macrocode}
+\def\@acmPubDate{\ifcase\@acmMonth\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or
+ December\fi~\@acmYear}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\acmPrice}
+% The price
+% \begin{macrocode}
+\def\acmPrice#1{\def\@acmPrice{#1}}
+\acmPrice{15.00}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\acmSubmissionID}
+% \changes{v1.33}{2017/03/29}{Added macro}
+% The submission ID
+% \begin{macrocode}
+\def\acmSubmissionID#1{\def\@acmSubmissionID{#1}}
+\acmSubmissionID{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\acmISBN}
+% \changes{v1.04}{2016/04/26}{Name change by Matthew Fluet}
+% The book ISBN
+% \begin{macrocode}
+\def\acmISBN#1{\def\@acmISBN{#1}}
+\acmISBN{978-x-xxxx-xxxx-x/YY/MM}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\acmDOI}
+% \changes{v1.04}{2016/04/26}{Name change by Matthew Fluet}
+% The paper DOI
+% \begin{macrocode}
+\def\acmDOI#1{\def\@acmDOI{#1}}
+\acmDOI{10.1145/nnnnnnn.nnnnnnn}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\if@ACM@badge}
+% \changes{v1.06}{2016/05/01}{Added macro}
+% Whether to print a badge. Note that either a left or right badge
+% triggers it:
+% \begin{macrocode}
+\newif\if@ACM@badge
+\@ACM@badgefalse
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@ACM@badge@width}
+% \changes{v1.06}{2016/05/01}{Added macro}
+% The width of the badge
+% \begin{macrocode}
+\newlength\@ACM@badge@width
+\setlength\@ACM@badge@width{5pc}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\@ACM@title@width}
+% \changes{v1.06}{2016/05/01}{Added macro}
+% The width of the badge
+% \begin{macrocode}
+\newlength\@ACM@title@width
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\@ACM@badge@skip}
+% \changes{v1.06}{2016/05/01}{Added macro}
+% The space between the badge and the title
+% \begin{macrocode}
+\newlength\@ACM@badge@skip
+\setlength\@ACM@badge@skip{1pc}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\acmBadgeR}
+% \changes{v1.06}{2016/05/01}{Added macro}
+% Setting the right badge
+% \begin{macrocode}
+\newcommand\acmBadgeR[2][]{\@ACM@badgetrue
+ \def\@acmBadgeR@url{#1}%
+ \def\@acmBadgeR@image{#2}}
+\def\@acmBadgeR@url{}
+\def\@acmBadgeR@image{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\acmBadgeL}
+% \changes{v1.06}{2016/05/01}{Added macro}
+% Setting the left badge
+% \begin{macrocode}
+\newcommand\acmBadgeL[2][]{\@ACM@badgetrue
+ \def\@acmBadgeL@url{#1}%
+ \def\@acmBadgeL@image{#2}}
+\def\@acmBadgeL@url{}
+\def\@acmBadgeL@image{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\startPage}
+% The start page of the paper
+% \begin{macrocode}
+\def\startPage#1{\def\@startPage{#1}}
+\startPage{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\terms}
+% \changes{v1.34}{2017/04/09}{The \cs{terms} command now just produces
+% a warning}
+% Terms are obsolete. We use CCS now.
+% \begin{macrocode}
+\def\terms#1{\ClassWarning{\@classname}{The command \string\terms{} is
+ obsolete. I am going to ignore it}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\keywords}
+% Keywords are mostly obsolete. We use CCS now. Still it makes
+% sense to keep them for compatibility.
+% \begin{macrocode}
+\def\keywords#1{\def\@keywords{#1}}
+\keywords{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{abstract}
+% The |amsart| package puts |abstract| in a box. Since we do not
+% know whether we will use two-column mode, we prefer to save the text
+% \begin{macrocode}
+\renewenvironment{abstract}{\Collect@Body\@saveabstract}{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@saveabstract}
+% And saving the abstract
+% \begin{macrocode}
+\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{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@lempty}
+% The long version of \cs{@empty} (to compare with \cs{@abstract})
+% \begin{macrocode}
+\long\def\@lempty{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\if@ACM@printccs}
+% \changes{v1.27}{2016/12/29}{Typo corrected}
+% Whether to print CCS
+% \begin{macrocode}
+\define@boolkey+{@ACM@topmatter@}[@ACM@]{printccs}[true]{%
+ \if@ACM@printccs
+ \ClassInfo{\@classname}{Printing CCS}%
+ \else
+ \ClassInfo{\@classname}{Suppressing CCS}%
+ \fi}{\ClassError{\@classname}{The option printccs can be either true or false}}
+% \end{macrocode}
+%
+% \end{macro}
+% \begin{macro}{\if@ACM@printacmref}
+% \changes{v1.17}{2016/07/10}{Renamed from \cs{if@ACM@printbib}}
+% Whether to print the ACM bibstrip
+% \begin{macrocode}
+\define@boolkey+{@ACM@topmatter@}[@ACM@]{printacmref}[true]{%
+ \if@ACM@printacmref
+ \ClassInfo{\@classname}{Printing bibformat}%
+ \else
+ \ClassInfo{\@classname}{Suppressing bibformat}%
+ \fi}{\ClassError{\@classname}{The option printacmref can be either true or false}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\if@ACM@printfolios}
+% \changes{v1.13}{2016/06/06}{Added macro}
+% Whether to print folios
+% \begin{macrocode}
+\define@boolkey+{@ACM@topmatter@}[@ACM@]{printfolios}[true]{%
+ \if@ACM@printfolios
+ \ClassInfo{\@classname}{Printing folios}%
+ \else
+ \ClassInfo{\@classname}{Suppressing folios}%
+ \fi}{\ClassError{\@classname}{The option printfolios can be either true or false}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@ACM@authorsperrow}
+% \changes{v1.36}{2017/05/13}{Added macro}
+% The number of authors per row. 0 means use the default algorithm.
+% \begin{macrocode}
+\define@cmdkey{@ACM@topmatter@}[@ACM@]{authorsperrow}[0]{%
+ \IfInteger{#1}{\ClassInfo{\@classname}{Setting authorsperrow to
+ #1}}{\ClassWarning{\@classname}{The parameter authorsperrow must be
+ numerical. Ignoring the input #1}\gdef\@ACM@authorsperrow{0}}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\settopmatter}
+% The usual syntactic sugar
+% \begin{macrocode}
+\def\settopmatter#1{\setkeys{@ACM@topmatter@}{#1}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \changes{v1.13}{2016/06/06}{Print bibliographic information by
+% default for the proceedings}
+% Now the settings
+% \begin{macrocode}
+\settopmatter{printccs=true, printacmref=true}
+\if@ACM@manuscript
+ \settopmatter{printfolios=true}
+\else
+ \if@ACM@journal
+ \settopmatter{printfolios=true}
+ \else
+ \settopmatter{printfolios=false}
+ \fi
+\fi
+\settopmatter{authorsperrow=0}
+% \end{macrocode}
+%
+% \begin{macro}{\@received}
+% The container for the paper history
+% \begin{macrocode}
+\def\@received{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\received}
+% The \cs{received} command
+% \begin{macrocode}
+\newcommand\received[2][]{\def\@tempa{#1}%
+ \ifx\@tempa\@empty
+ \ifx\@received\@empty
+ \gdef\@received{Received #2}%
+ \else
+ \g@addto@macro{\@received}{; revised #2}%
+ \fi
+ \else
+ \ifx\@received\@empty
+ \gdef\@received{#1 #2}%
+ \else
+ \g@addto@macro{\@received}{; #1 #2}%
+ \fi
+ \fi}
+\AtEndDocument{%
+ \ifx\@received\@empty\else
+ \par\bigskip\noindent\small\normalfont\@received\par
+ \fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%\subsection{Concepts system}
+%\label{sec:concepts}
+%
+% We exclude |CCSXML| stuff generated by the ACM system:
+% \begin{macrocode}
+\RequirePackage{comment}
+\excludecomment{CCSXML}
+% \end{macrocode}
+%
+% \begin{macro}{\@concepts}
+% This is the storage macro and counter for concepts
+% \begin{macrocode}
+\let\@concepts\@empty
+\newcounter{@concepts}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\ccsdesc}
+% \changes{v1.40}{2017/05/27}{Now we can parse |Significance~General| nodes}
+% The first argument is the significance, the second is the
+% concept(s)
+% \begin{macrocode}
+\newcommand\ccsdesc[2][100]{%
+ \ccsdesc@parse#1~#2~~\ccsdesc@parse@end}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\ccsdesc@parse}
+% \changes{v1.28}{2017/01/04}{Change from \cs{to} to
+% \cs{textrightarrow} (Matteo Riondato)}
+% \changes{v1.29}{2017/01/22}{Add spacing after bullet and around
+% rightarrow; semicolon separators no longer in bold/italic (John Wickerson)}
+% \changes{v1.40}{2017/05/27}{Now we can parse |Significance~General| nodes}
+% \changes{v1.56}{2018/10/23}{End the concepts list with a period
+% (Philip Quinn)}
+% The parser of the expression |Significance~General~Specific| (we need
+% |textcomp| for |\textrightarrow|). Note that |Specific| can be empty!
+% \begin{macrocode}
+\RequirePackage{textcomp}
+\def\ccsdesc@parse#1~#2~#3~{%
+ \stepcounter{@concepts}%
+ \expandafter\ifx\csname CCS@General@#2\endcsname\relax
+ \expandafter\gdef\csname CCS@General@#2\endcsname{\textbullet\
+ \textbf{#2}}%
+ \expandafter\gdef\csname CCS@Punctuation@#2\endcsname{; }%
+ \expandafter\gdef\csname CCS@Specific@#2\endcsname{}%
+ \g@addto@macro{\@concepts}{\csname CCS@General@#2\endcsname
+ \csname CCS@Punctuation@#2\endcsname
+ \csname CCS@Specific@#2\endcsname}%
+ \fi
+ \ifx#3\relax\relax\else
+ \expandafter\gdef\csname CCS@Punctuation@#2\endcsname{
+ \textrightarrow\ }%
+ \expandafter\g@addto@macro\expandafter{\csname CCS@Specific@#2\endcsname}{%
+ \addtocounter{@concepts}{-1}%
+ \ifnum#1>499\textbf{#3}\else
+ \ifnum#1>299\textit{#3}\else
+ #3\fi\fi\ifnum\value{@concepts}=0.\else; \fi}%
+ \fi
+\ccsdesc@parse@finish}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\ccdesc@parse@finish}
+% \changes{v1.40}{2017/05/27}{Added macro}
+% Gobble everything to |\ccsdesc@parse@end|
+% \begin{macrocode}
+\def\ccsdesc@parse@finish#1\ccsdesc@parse@end{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%\subsection{Copyright system}
+%\label{sec:copyright}
+%
+% This is from |acmcopyright.sty|
+%
+% \begin{macro}{\if@printcopyright}
+% Whether to print a copyright symbol
+% \begin{macrocode}
+\newif\if@printcopyright
+\@printcopyrighttrue
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\if@printpermission}
+% Whether to print the permission block
+% \begin{macrocode}
+\newif\if@printpermission
+\@printpermissiontrue
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\if@acmowned}
+% Whether the ACM owns the rights to the paper
+% \begin{macrocode}
+\newif\if@acmowned
+\@acmownedtrue
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \changes{v1.10}{2016/05/22}{Changes of `licensedothergov' wording}
+% \changes{v1.35}{2017/04/22}{If the copyright is set to usgov or
+% rigtsretained, the price is suppressed}
+% \changes{v1.51}{2018/04/05}{Suppress price if the copyright is set
+% to iw3c2w3 or iw3c2w3g}
+% \changes{v1.51}{2018/04/05}{Corrected the bug with price suppression}
+% Keys:
+% \begin{macrocode}
+\define@choicekey*{ACM@}{acmcopyrightmode}[%
+ \acm@copyrightinput\acm@copyrightmode]{none,%
+ acmcopyright,acmlicensed,rightsretained,%
+ usgov,usgovmixed,cagov,cagovmixed,licensedusgovmixed,%
+ licensedcagov,licensedcagovmixed,othergov,licensedothergov,%
+ iw3c2w3,iw3c2w3g}{%
+ \@printpermissiontrue
+ \@printcopyrighttrue
+ \@acmownedtrue
+ \ifnum\acm@copyrightmode=0\relax % none
+ \@printpermissionfalse
+ \@printcopyrightfalse
+ \@acmownedfalse
+ \fi
+ \ifnum\acm@copyrightmode=2\relax % acmlicensed
+ \@acmownedfalse
+ \fi
+ \ifnum\acm@copyrightmode=3\relax % rightsretained
+ \@acmownedfalse
+ \AtBeginDocument{\acmPrice{}}%
+ \fi
+ \ifnum\acm@copyrightmode=4\relax % usgov
+ \@printpermissiontrue
+ \@printcopyrightfalse
+ \@acmownedfalse
+ \AtBeginDocument{\acmPrice{}}%
+ \fi
+ \ifnum\acm@copyrightmode=6\relax % cagov
+ \@acmownedfalse
+ \fi
+ \ifnum\acm@copyrightmode=8\relax % licensedusgovmixed
+ \@acmownedfalse
+ \fi
+ \ifnum\acm@copyrightmode=9\relax % licensedcagov
+ \@acmownedfalse
+ \fi
+ \ifnum\acm@copyrightmode=10\relax % licensedcagovmixed
+ \@acmownedfalse
+ \fi
+ \ifnum\acm@copyrightmode=11\relax % othergov
+ \@acmownedtrue
+ \fi
+ \ifnum\acm@copyrightmode=12\relax % licensedothergov
+ \@acmownedfalse
+ \fi
+ \ifnum\acm@copyrightmode=13\relax % iw3c2w3
+ \@acmownedfalse
+ \AtBeginDocument{\acmPrice{}}%
+ \fi
+ \ifnum\acm@copyrightmode=14\relax % iw3c2w3g
+ \@acmownedfalse
+ \AtBeginDocument{\acmPrice{}}%
+ \fi}
+% \end{macrocode}
+%
+% \begin{macro}{\setcopyright}
+% This is the syntactic sugar around setting keys.
+% \begin{macrocode}
+\def\setcopyright#1{\setkeys{ACM@}{acmcopyrightmode=#1}}
+\setcopyright{acmcopyright}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\@copyrightowner}
+% \changes{v1.40}{2017/06/16}{Added new copyright version:
+% licensedcagov}
+% \changes{v1.52}{2018/04/09}{Rewording of licenses}
+% Here is the owner of the copyright
+% \begin{macrocode}
+\def\@copyrightowner{%
+ \ifcase\acm@copyrightmode\relax % none
+ \or % acmcopyright
+ Association for Computing Machinery.
+ \or % acmlicensed
+ Copyright held by the owner/author(s). Publication rights licensed to
+ ACM\@.
+ \or % rightsretained
+ Copyright held by the owner/author(s).
+ \or % usgov
+ \or % usgovmixed
+ Association for Computing Machinery.
+ \or % cagov
+ Crown in Right of Canada.
+ \or %cagovmixed
+ Association for Computing Machinery.
+ \or %licensedusgovmixed
+ Copyright held by the owner/author(s). Publication rights licensed to
+ ACM\@.
+ \or % licensedcagov
+ Crown in Right of Canada. Publication rights licensed to
+ ACM\@.
+ \or %licensedcagovmixed
+ Copyright held by the owner/author(s). Publication rights licensed to
+ ACM\@.
+ \or % othergov
+ Association for Computing Machinery.
+ \or % licensedothergov
+ Copyright held by the owner/author(s). Publication rights licensed to
+ ACM\@.
+ \or % ic2w3www
+ IW3C2 (International World Wide Web Conference Committee), published
+ under Creative Commons CC-BY~4.0 License.
+ \or % ic2w3wwwgoogle
+ IW3C2 (International World Wide Web Conference Committee), published
+ under Creative Commons CC-BY-NC-ND~4.0 License.
+ \fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@formatdoi}
+% \changes{v1.03}{2016/04/22}{Added macro}
+% \changes{v1.32}{2017/04/07}{New doi format}
+% Print a clickable DOI
+% \begin{macrocode}
+\def\@formatdoi#1{\url{https://doi.org/#1}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@copyrightpermission}
+% \changes{v1.40}{2017/06/16}{Added new copyright version: licensedcagov}
+% \changes{v1.50}{2018/02/07}{New copyright statements for iw3c2w3[g]}
+% \changes{v1.52}{2018/04/09}{Another rewording of copyright
+% statements for iw3c2w3[g]}
+% The canned permission block.
+% \begin{macrocode}
+\def\@copyrightpermission{%
+ \ifcase\acm@copyrightmode\relax % none
+ \or % acmcopyright
+ Permission to make digital or hard copies of all or part of this
+ work for personal or classroom use is granted without fee provided
+ that copies are not made or distributed for profit or commercial
+ advantage and that copies bear this notice and the full citation on
+ the first page. Copyrights for components of this work owned by
+ others than ACM must be honored. Abstracting with credit is
+ permitted. To copy otherwise, or republish, to post on servers or to
+ redistribute to lists, requires prior specific permission
+ and\hspace*{.5pt}/or a fee. Request permissions from
+ permissions@acm.org.
+ \or % acmlicensed
+ Permission to make digital or hard copies of all or part of this
+ work for personal or classroom use is granted without fee provided
+ that copies are not made or distributed for profit or commercial
+ advantage and that copies bear this notice and the full citation on
+ the first page. Copyrights for components of this work owned by
+ others than the author(s) must be honored. Abstracting with credit
+ is permitted. To copy otherwise, or republish, to post on servers
+ or to redistribute to lists, requires prior specific permission
+ and\hspace*{.5pt}/or a fee. Request permissions from
+ permissions@acm.org.
+ \or % rightsretained
+ Permission to make digital or hard copies of part or all of this work
+ for personal or classroom use is granted without fee provided that
+ copies are not made or distributed for profit or commercial advantage
+ and that copies bear this notice and the full citation on the first
+ page. Copyrights for third-party components of this work must be
+ honored. For all other uses, contact the
+ owner\hspace*{.5pt}/author(s).
+ \or % usgov
+ This paper is authored by an employee(s) of the United States
+ Government and is in the public domain. Non-exclusive copying or
+ redistribution is allowed, provided that the article citation is
+ given and the authors and agency are clearly identified as its
+ source.
+ \or % usgovmixed
+ ACM acknowledges that this contribution was authored or co-authored
+ by an employee, contractor, or affiliate of the United States government. As such,
+ the United States government retains a nonexclusive, royalty-free right to
+ publish or reproduce this article, or to allow others to do so, for
+ government purposes only.
+ \or % cagov
+ This article was authored by employees of the Government of Canada.
+ As such, the Canadian government retains all interest in the
+ copyright to this work and grants to ACM a nonexclusive,
+ royalty-free right to publish or reproduce this article, or to allow
+ others to do so, provided that clear attribution is given both to
+ the authors and the Canadian government agency employing them.
+ Permission to make digital or hard copies for personal or classroom
+ use is granted. Copies must bear this notice and the full citation
+ on the first page. Copyrights for components of this work owned by
+ others than the Canadian Government must be honored. To copy
+ otherwise, distribute, republish, or post, requires prior specific
+ permission and\hspace*{.5pt}/or a fee. Request permissions from
+ permissions@acm.org.
+ \or % cagovmixed
+ ACM acknowledges that this contribution was co-authored by an
+ affiliate of the national government of Canada. As such, the Crown
+ in Right of Canada retains an equal interest in the copyright.
+ Reprints must include clear attribution to ACM and the author's
+ government agency affiliation. Permission to make digital or hard
+ copies for personal or classroom use is granted. Copies must bear
+ this notice and the full citation on the first page. Copyrights for
+ components of this work owned by others than ACM must be honored.
+ To copy otherwise, distribute, republish, or post, requires prior
+ specific permission and\hspace*{.5pt}/or a fee. Request permissions
+ from permissions@acm.org.
+ \or % licensedusgovmixed
+ Publication rights licensed to ACM\@. ACM acknowledges that this
+ contribution was authored or co-authored by an employee, contractor
+ or affiliate of the United States government. As such, the
+ Government retains a nonexclusive, royalty-free right to publish or
+ reproduce this article, or to allow others to do so, for Government
+ purposes only.
+ \or % licensedcagov
+ This article was authored by employees of the Government of Canada.
+ As such, the Canadian government retains all interest in the
+ copyright to this work and grants to ACM a nonexclusive,
+ royalty-free right to publish or reproduce this article, or to allow
+ others to do so, provided that clear attribution is given both to
+ the authors and the Canadian government agency employing them.
+ Permission to make digital or hard copies for personal or classroom
+ use is granted. Copies must bear this notice and the full citation
+ on the first page. Copyrights for components of this work owned by
+ others than the Canadian Government must be honored. To copy
+ otherwise, distribute, republish, or post, requires prior specific
+ permission and\hspace*{.5pt}/or a fee. Request permissions from
+ permissions@acm.org.
+ \or % licensedcagovmixed
+ Publication rights licensed to ACM\@. ACM acknowledges that this
+ contribution was authored or co-authored by an employee, contractor
+ or affiliate of the national government of Canada. As such, the
+ Government retains a nonexclusive, royalty-free right to publish or
+ reproduce this article, or to allow others to do so, for Government
+ purposes only.
+ \or % othergov
+ ACM acknowledges that this contribution was authored or co-authored
+ by an employee, contractor or affiliate of a national government. As
+ such, the Government retains a nonexclusive, royalty-free right to
+ publish or reproduce this article, or to allow others to do so, for
+ Government purposes only.
+ \or % licensedothergov
+ Publication rights licensed to ACM\@. ACM acknowledges that this
+ contribution was authored or co-authored by an employee, contractor
+ or affiliate of a national government. As such, the Government
+ retains a nonexclusive, royalty-free right to publish or reproduce
+ this article, or to allow others to do so, for Government purposes
+ only.
+ \or % iw3c2w3
+ This paper is published under the Creative Commons Attribution~4.0
+ International (CC-BY~4.0) license. Authors reserve their rights to
+ disseminate the work on their personal and corporate Web sites with
+ the appropriate attribution.
+ \or % iw3c2w3g
+ This paper is published under the Creative Commons
+ Attribution-NonCommercial-NoDerivs~4.0 International
+ (CC-BY-NC-ND~4.0) license. Authors reserve their rights to
+ disseminate the work on their personal and corporate Web sites with
+ the appropriate attribution.
+ \fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{\copyrightyear}
+% By default, the copyright year is the same as \cs{acmYear}, but
+% one can override this:
+% \begin{macrocode}
+\def\copyrightyear#1{\def\@copyrightyear{#1}}
+\copyrightyear{\@acmYear}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@teaserfigures}
+% The teaser figures container
+% \begin{macrocode}
+\def\@teaserfigures{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{teaserfigure}
+% The teaser figure
+% \begin{macrocode}
+\newenvironment{teaserfigure}{\Collect@Body\@saveteaser}{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@saveteaser}
+% Saving the teaser
+% \begin{macrocode}
+\long\def\@saveteaser#1{\g@addto@macro\@teaserfigures{\@teaser{#1}}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\thanks}
+% We redefine |amsart| \cs{thanks} so the |anonymous| key works
+% \begin{macrocode}
+\renewcommand{\thanks}[1]{%
+ \@ifnotempty{#1}{%
+ \if@ACM@anonymous
+ \g@addto@macro\thankses{\thanks{A note}}%
+ \else
+ \g@addto@macro\thankses{\thanks{#1}}%
+ \fi}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \subsection{Typesetting top matter}
+% \label{sec:makefile}
+%
+% \begin{macro}{\mktitle@bx}
+% Some of our formats use a two-column design. Some use a one-column
+% design. In all cases we use a wide title. Thus we typeset the top
+% matter in a special box to be used in the construction
+% \cs{@twocolumn}\oarg{box}.
+% \begin{macrocode}
+\newbox\mktitle@bx
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\maketitle}
+% \changes{v1.03}{2016/04/22}{Added special case of authorversion}
+% \changes{v1.07}{2016/05/03}{Corrected a bug with abstract footnotes}
+% \changes{v1.07}{2016/05/03}{Corrected a bug with permssion and
+% footnotes order}
+% \changes{v1.10}{2016/05/23}{Corrected a bug with doi in manuscript
+% and author vertsion,
+% \url{https://github.com/borisveytsman/acmart/issues/36}}
+% \changes{v1.12}{2016/05/30}{Moved thankses to copyrightpermission box}
+% \changes{v1.33}{2017/03/27}{Fixed the bug with figures on top and
+% bottom of the title page, thanks to David Epstein}
+% \changes{v1.34}{2017/04/09}{Deleted `DOI' from doi numbers}
+% \changes{v1.34}{2017/04/09}{Added date to the bibstrip in conf proceedings}
+% \changes{v1.34}{2017/04/09}{The \cs{terms} command is now obsolete}
+% \changes{v1.34}{2017/04/11}{Rearranged bibstrip}
+% \changes{v1.44}{2017/07/30}{Empty DOI or ISBN are not printed (by
+% Michael Ekstrand)}
+% \changes{v1.46}{2017/08/27}{Added authors' addresses}
+% \changes{v1.46}{2017/08/28}{Thankses go before authors' addresses}
+% \changes{v1.48}{2017/09/23}{Added acmart and version info to
+% pdfcreator tag}
+% \changes{v1.48}{2017/10/14}{Suppressed empty DOI (Serguei Mokhov)}
+% \changes{v1.48}{2017/11/18}{Added language and doctitle attributes
+% to PDF (Andreas Reichinger)}
+% \changes{v1.55}{2018/10/14}{Fixes topnum}
+% \changes{v1.58}{2019/01/23}{Original \cs{vspace} inside
+% \cs{maketitle}}
+% \changes{v1.64}{2019/08/17}{Added a switch setting to show that
+% \cs{maketitle} is typeset}
+% The (in)famous \cs{maketitle}. Note that in |sigchi-a| mode, authors
+% are \emph{not} in the title box.
+%
+% Another note: there is a subtle difference between author notes,
+% title notes and thanks. The latter two refer to the paper itself
+% and therefore belong to the copyright/permission block. By the
+% way, this was the default behavior of the old ACM classes.
+% \begin{macrocode}
+\def\maketitle{%
+ \@ACM@maketitle@typesettrue
+ \if@ACM@anonymous
+ % Anonymize omission of \author-s
+ \ifnum\num@authorgroups=0\author{}\fi
+ \fi
+ \begingroup
+ \let\@vspace\@vspace@orig
+ \let\@vspacer\@vspacer@orig
+ \let\@footnotemark\@footnotemark@nolink
+ \let\@footnotetext\@footnotetext@nolink
+ \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
+ \hsize=\textwidth
+ \def\@makefnmark{\hbox{\@textsuperscript{\@thefnmark}}}%
+ \@mktitle\if@ACM@sigchiamode\else\@mkauthors\fi\@mkteasers
+ \@printtopmatter
+ \if@ACM@sigchiamode\@mkauthors\fi
+ \setcounter{footnote}{0}%
+ \def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}%
+ \@titlenotes
+ \@subtitlenotes
+ \@authornotes
+ \let\@makefnmark\relax
+ \let\@thefnmark\relax
+ \let\@makefntext\noindent
+ \ifx\@empty\thankses\else
+ \footnotetextauthorsaddresses{%
+ \def\par{\let\par\@par}\parindent\z@\@setthanks}%
+ \fi
+ \ifx\@empty\@authorsaddresses\else
+ \if@ACM@anonymous\else
+ \if@ACM@journal@bibstrip
+ \footnotetextauthorsaddresses{%
+ \def\par{\let\par\@par}\parindent\z@\@setauthorsaddresses}%
+ \fi
+ \fi
+ \fi
+ \if@ACM@nonacm\else\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@printpermission\@copyrightpermission\par\fi
+ \fi
+ \if@ACM@manuscript\else
+ \if@ACM@journal@bibstrip\else % Print the conference information
+ {\itshape \acmConference@shortname, \acmConference@date, \acmConference@venue}\par
+ \fi
+ \fi
+ \if@printcopyright
+ \copyright\ \@copyrightyear\ \@copyrightowner\\
+ \else
+ \@copyrightyear.\
+ \fi
+ \if@ACM@manuscript
+ Manuscript submitted to ACM\\
+ \else
+ \if@ACM@authorversion
+ This is the author's version of the work. It is posted here for
+ your personal use. Not for redistribution. The definitive Version
+ of Record was published in
+ \if@ACM@journal@bibstrip
+ \emph{\@journalName}%
+ \else
+ \emph{\@acmBooktitle}%
+ \fi
+ \ifx\@acmDOI\@empty
+ .
+ \else
+ , \@formatdoi{\@acmDOI}.
+ \fi\\
+ \else
+ \if@ACM@nonacm\else
+ \if@ACM@journal@bibstrip
+ \@permissionCodeOne/\@acmYear/\@acmMonth-ART\@acmArticle
+ \ifx\@acmPrice\@empty\else\ \$\@acmPrice\fi\\
+ \@formatdoi{\@acmDOI}%
+ \else % Conference
+ \ifx\@acmISBN\@empty\else ACM~ISBN~\@acmISBN
+ \ifx\@acmPrice\@empty.\else\dots\$\@acmPrice\fi\\\fi
+ \ifx\@acmDOI\@empty\else\@formatdoi{\@acmDOI}\fi%
+ \fi
+ \fi
+ \fi
+ \fi}
+ \fi
+ \endgroup
+ \setcounter{footnote}{0}%
+ \@mkabstract
+ \if@ACM@printccs
+ \ifx\@concepts\@empty\else\bgroup
+ {\@specialsection{CCS Concepts}%
+ \@concepts\par}\egroup
+ \fi
+ \fi
+ \ifx\@keywords\@empty\else\bgroup
+ {\if@ACM@journal
+ \@specialsection{Additional Key Words and Phrases}%
+ \else
+ \@specialsection{Keywords}%
+ \fi
+ \@keywords}\par\egroup
+ \fi
+ \andify\authors
+ \andify\shortauthors
+ \global\let\authors=\authors
+ \global\let\shortauthors=\shortauthors
+ \if@ACM@printacmref
+ \@mkbibcitation
+ \fi
+ \hypersetup{%
+ pdfauthor={\authors},
+ pdftitle={\@title},
+ pdfsubject={\@concepts},
+ pdfkeywords={\@keywords},
+ pdfcreator={LaTeX with acmart
+ \csname ver@acmart.cls\endcsname\space
+ and hyperref
+ \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
+ \@afterindentfalse
+ \@afterheading
+}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@specialsection}
+% This macro starts sections for proceedings and uses \cs{small} for journals
+% \begin{macrocode}
+\def\@specialsection#1{%
+ \ifcase\ACM@format@nr
+ \relax % manuscript
+ \par\medskip\small\noindent#1: %
+ \or % acmsmall
+ \par\medskip\small\noindent#1: %
+ \or % acmlarge
+ \par\medskip\small\noindent#1: %
+ \or % acmtog
+ \par\medskip\small\noindent#1: %
+ \or % sigconf
+ \section*{#1}%
+ \or % siggraph
+ \section*{#1}%
+ \or % sigplan
+ \paragraph*{#1}%
+ \or % sigchi
+ \section*{#1}%
+ \or % sigchi-a
+ \section*{#1}%
+ \fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\@printtopmatter}
+% \changes{v1.06}{2016/05/01}{Added processing badges}
+% \changes{v1.46}{2017/08/29}{Deleted rule}
+% The printing of top matter starts a new page and uses the given
+% title box. Note that for |sigchi-a| we print badges here rather
+% than in \cs{mktitle} since we want them in the margins.
+% \begin{macrocode}
+\def\@printtopmatter{%
+ \ifx\@startPage\@empty
+ \gdef\@startPage{1}%
+ \else
+ \setcounter{page}{\@startPage}%
+ \fi
+ \thispagestyle{firstpagestyle}%
+ \noindent
+ \ifcase\ACM@format@nr
+ \relax % manuscript
+ \box\mktitle@bx\par
+ \or % acmsmall
+ \box\mktitle@bx\par
+ \or % acmlarge
+ \box\mktitle@bx\par
+ \or % acmtog
+ \twocolumn[\box\mktitle@bx]%
+ \or % sigconf
+ \twocolumn[\box\mktitle@bx]%
+ \or % siggraph
+ \twocolumn[\box\mktitle@bx]%
+ \or % sigplan
+ \twocolumn[\box\mktitle@bx]%
+ \or % sigchi
+ \twocolumn[\box\mktitle@bx]%
+ \or % sigchi-a
+ \par\box\mktitle@bx\par\bigskip
+ \if@ACM@badge
+ \marginpar{\noindent
+ \ifx\@acmBadgeL@image\@empty\else
+ \href{\@acmBadgeL@url}{%
+ \includegraphics[width=\@ACM@badge@width]{\@acmBadgeL@image}}%
+ \hskip\@ACM@badge@skip
+ \fi
+ \ifx\@acmBadgeR@image\@empty\else
+ \href{\@acmBadgeR@url}{%
+ \includegraphics[width=\@ACM@badge@width]{\@acmBadgeR@image}}%
+ \fi}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@mktitle}
+% The title of the article
+% \begin{macrocode}
+\def\@mktitle{%
+ \ifcase\ACM@format@nr
+ \relax % manuscript
+ \@mktitle@i
+ \or % acmsmall
+ \@mktitle@i
+ \or % acmlarge
+ \@mktitle@i
+ \or % acmtog
+ \@mktitle@i
+ \or % sigconf
+ \@mktitle@iii
+ \or % siggraph
+ \@mktitle@iii
+ \or % sigplan
+ \@mktitle@iii
+ \or % sigchi
+ \@mktitle@iii
+ \or % sigchi-a
+ \@mktitle@iv
+ \fi
+}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@titlefont}
+% \changes{v1.06}{2016/05/01}{Added macro}
+% \changes{v1.45}{2017/08/15}{Switched \cs{bfeseries}\cs{sffamily} to
+% \cs{sffamily}\cs{bfseries}}
+% The font to typeset the title
+% \begin{macrocode}
+\def\@titlefont{%
+ \ifcase\ACM@format@nr
+ \relax % manuscript
+ \LARGE\sffamily\bfseries
+ \or % acmsmall
+ \LARGE\sffamily\bfseries
+ \or % acmlarge
+ \LARGE\sffamily\bfseries
+ \or % acmtog
+ \Huge\sffamily
+ \or % sigconf
+ \Huge\sffamily\bfseries
+ \or % siggraph
+ \Huge\sffamily\bfseries
+ \or % sigplan
+ \Huge\bfseries
+ \or % sigchi
+ \Huge\sffamily\bfseries
+ \or % sigchi-a
+ \Huge\bfseries
+ \fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@subtitlefont}
+% \changes{v1.06}{2016/05/01}{Added macro}
+% \changes{v1.33}{2017/03/12}{Added \cs{normalsize}}
+% The font to typeset the subtitle
+% \begin{macrocode}
+\def\@subtitlefont{\normalsize
+ \ifcase\ACM@format@nr
+ \relax % manuscript
+ \mdseries
+ \or % acmsmall
+ \mdseries
+ \or % acmlarge
+ \mdseries
+ \or % acmtog
+ \LARGE
+ \or % sigconf
+ \LARGE\mdseries
+ \or % siggraph
+ \LARGE\mdseries
+ \or % sigplan
+ \LARGE\mdseries
+ \or % sigchi
+ \LARGE\mdseries
+ \or % sigchi-a
+ \mdseries
+ \fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@mktitle@i}
+% \changes{v1.06}{2016/05/01}{Made generic}
+% \changes{v1.06}{2016/05/01}{Added processing badges}
+% The version of \cs{mktitle} for most journals
+% \begin{macrocode}
+\def\@mktitle@i{\hsize=\textwidth
+ \@ACM@title@width=\hsize
+ \ifx\@acmBadgeL@image\@empty\else
+ \advance\@ACM@title@width by -\@ACM@badge@width
+ \advance\@ACM@title@width by -\@ACM@badge@skip
+ \fi
+ \ifx\@acmBadgeR@image\@empty\else
+ \advance\@ACM@title@width by -\@ACM@badge@width
+ \advance\@ACM@title@width by -\@ACM@badge@skip
+ \fi
+ \setbox\mktitle@bx=\vbox{\noindent\@titlefont
+ \ifx\@acmBadgeL@image\@empty\else
+ \raisebox{-.5\baselineskip}[\z@][\z@]{\href{\@acmBadgeL@url}{%
+ \includegraphics[width=\@ACM@badge@width]{\@acmBadgeL@image}}}%
+ \hskip\@ACM@badge@skip
+ \fi
+ \parbox[t]{\@ACM@title@width}{\raggedright
+ \@titlefont\noindent
+ \@title
+ \ifx\@subtitle\@empty\else
+ \par\noindent{\@subtitlefont\@subtitle}
+ \fi}%
+ \ifx\@acmBadgeR@image\@empty\else
+ \hskip\@ACM@badge@skip
+ \raisebox{-.5\baselineskip}[\z@][\z@]{\href{\@acmBadgeR@url}{%
+ \includegraphics[width=\@ACM@badge@width]{\@acmBadgeR@image}}}%
+ \fi
+ \par\bigskip}}%
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@mktitle@ii}
+% \changes{v1.06}{2016/05/01}{Now this macro is obsolete}
+% The version of \cs{mktitle} for TOG. Since v1.06, this is subsumed by
+% the \cs{mktitle@i} macro
+% \end{macro}
+%
+%
+% \begin{macro}{\@mktitle@iii}
+% \changes{v1.06}{2016/05/01}{Made more generic}
+% \changes{v1.06}{2016/05/01}{Added processing badges}
+% The version of \cs{@mktitle} for SIG proceedings. Note that since
+% the title is centered, we leave space for the left badge even if
+% only the right badge is defined.
+% \begin{macrocode}
+\def\@mktitle@iii{\hsize=\textwidth
+ \setbox\mktitle@bx=\vbox{\@titlefont\centering
+ \@ACM@title@width=\hsize
+ \if@ACM@badge
+ \advance\@ACM@title@width by -2\@ACM@badge@width
+ \advance\@ACM@title@width by -2\@ACM@badge@skip
+ \parbox[b]{\@ACM@badge@width}{\strut
+ \ifx\@acmBadgeL@image\@empty\else
+ \raisebox{-.5\baselineskip}[\z@][\z@]{\href{\@acmBadgeL@url}{%
+ \includegraphics[width=\@ACM@badge@width]{\@acmBadgeL@image}}}%
+ \fi}%
+ \hskip\@ACM@badge@skip
+ \fi
+ \parbox[t]{\@ACM@title@width}{\centering\@titlefont
+ \@title
+ \ifx\@subtitle\@empty\else
+ \par\noindent{\@subtitlefont\@subtitle}
+ \fi
+ }%
+ \if@ACM@badge
+ \hskip\@ACM@badge@skip
+ \parbox[b]{\@ACM@badge@width}{\strut
+ \ifx\@acmBadgeR@image\@empty\else
+ \raisebox{-.5\baselineskip}[\z@][\z@]{\href{\@acmBadgeR@url}{%
+ \includegraphics[width=\@ACM@badge@width]{\@acmBadgeR@image}}}%
+ \fi}%
+ \fi
+ \par\bigskip}}%
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\@mktitle@iv}
+% \changes{v1.06}{2016/05/01}{Made more generic}
+% The version of \cs{@mktitle} for |sigchi-a|
+% \begin{macrocode}
+\def\@mktitle@iv{\hsize=\textwidth
+ \setbox\mktitle@bx=\vbox{\raggedright\leftskip5pc\@titlefont
+ \noindent\leavevmode\leaders\hrule height 2pt\hfill\kern0pt\par
+ \noindent\@title
+ \ifx\@subtitle\@empty\else
+ \par\noindent\@subtitlefont\@subtitle
+ \fi
+ \par\bigskip}}%
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@ACM@addtoaddress}
+% \changes{v1.15}{2016/07/03}{Added macro}
+% \changes{v1.33}{2017/03/28}{Added obeypunctuation code}
+% This macro adds an item to the address using the following rules:
+% \begin{enumerate}
+% \item If we start a paragraph, add the item
+% \item Otherwise, add a comma and the item
+% \item However, the comma is deleted if it is at the end of a
+% line. We use the magic \cs{cleaders} trick for this.
+% \end{enumerate}
+% \begin{macrocode}
+\newbox\@ACM@commabox
+\def\@ACM@addtoaddress#1{%
+ \ifvmode\else
+ \if@ACM@affiliation@obeypunctuation\else
+ \setbox\@ACM@commabox=\hbox{, }%
+ \unskip\cleaders\copy\@ACM@commabox\hskip\wd\@ACM@commabox
+ \fi\fi
+ #1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\institution}
+% \changes{v1.15}{2016/07/03}{Added macro}
+% \changes{v1.33}{2017/03/28}{Added obeypunctuation code}
+% \begin{macro}{\position}
+% \changes{v1.15}{2016/07/03}{Added macro}
+% \changes{v1.33}{2017/03/28}{Added obeypunctuation code}
+% \begin{macro}{\department}
+% \changes{v1.15}{2016/07/03}{Added macro}
+% \changes{v1.30}{2017/02/10}{Added optional parameter}
+% \changes{v1.33}{2017/03/28}{Added obeypunctuation code}
+% \begin{macro}{\streetaddress}
+% \changes{v1.15}{2016/07/03}{Added macro}
+% \changes{v1.33}{2017/03/28}{Added obeypunctuation code}
+% \changes{v1.40}{2017/06/15}{We now do not print this even in SIG}
+% \begin{macro}{\city}
+% \changes{v1.15}{2016/07/03}{Added macro}
+% \changes{v1.33}{2017/03/28}{Added obeypunctuation code}
+% \changes{v1.40}{2017/06/15}{We now do not print this even in SIG}
+% \begin{macro}{\state}
+% \changes{v1.15}{2016/07/03}{Added macro}
+% \changes{v1.33}{2017/03/28}{Added obeypunctuation code}
+% \changes{v1.40}{2017/06/15}{We now do not print this even in SIG}
+% \begin{macro}{\postcode}
+% \changes{v1.15}{2016/07/03}{Added macro}
+% \changes{v1.33}{2017/03/28}{Added obeypunctuation code}
+% \changes{v1.40}{2017/06/15}{We now do not print this even in SIG}
+% \begin{macro}{\country}
+% \changes{v1.15}{2016/07/03}{Added macro}
+% \changes{v1.33}{2017/03/28}{Added obeypunctuation code}
+% \changes{v1.40}{2017/05/27}{Fixed bugs with extra spaces}
+% \changes{v1.43}{2017/07/11}{Added comma before country for journals}
+% \changes{v1.46}{2017/08/30}{Corrected spacing for institution}
+% Theoretically we can define the macros for \cs{affiliation} inside
+% the \cs{@mkauthors}-style commands. However, this would lead to a
+% strange error if an author uses them outside \cs{affiliation}. Of
+% course we can make them produce an error message, but\ldots
+% \begin{macrocode}
+\def\streetaddress#1{\unskip\ignorespaces}
+\def\postcode#1{\unskip\ignorespaces}
+\if@ACM@journal
+ \def\position#1{\unskip\ignorespaces}
+ \def\institution#1{\unskip~#1\ignorespaces}
+ \def\city#1{\unskip\ignorespaces}
+ \def\state#1{\unskip\ignorespaces}
+ \newcommand\department[2][0]{\unskip\ignorespaces}
+ \def\country#1{\if@ACM@affiliation@obeypunctuation\else, \fi#1\ignorespaces}
+\else
+ \def\position#1{\if@ACM@affiliation@obeypunctuation#1\else#1\par\fi}%
+ \def\institution#1{\if@ACM@affiliation@obeypunctuation#1\else#1\par\fi}%
+ \newcommand\department[2][0]{\if@ACM@affiliation@obeypunctuation
+ #2\else#2\par\fi}%
+% \def\streetaddress#1{\if@ACM@affiliation@obeypunctuation#1\else#1\par\fi}%
+ \let\city\@ACM@addtoaddress
+ \let\state\@ACM@addtoaddress
+% \def\postcode#1{\if@ACM@affiliation@obeypunctuation#1\else\unskip\space#1\fi}%
+ \let\country\@ACM@addtoaddress
+\fi
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@mkauthors}
+% \changes{v1.17}{2016/07/09}{TOG now uses the same authors block as
+% other journals}
+% Typesetting the authors
+% \begin{macrocode}
+\def\@mkauthors{\begingroup
+ \hsize=\textwidth
+ \ifcase\ACM@format@nr
+ \relax % manuscript
+ \@mkauthors@i
+ \or % acmsmall
+ \@mkauthors@i
+ \or % acmlarge
+ \@mkauthors@i
+ \or % acmtog
+ \@mkauthors@i
+ \or % sigconf
+ \@mkauthors@iii
+ \or % siggraph
+ \@mkauthors@iii
+ \or % sigplan
+ \@mkauthors@iii
+ \or % sigchi
+ \@mkauthors@iii
+ \or % sigchi-a
+ \@mkauthors@iv
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@authorfont}
+% Somehow different conferences use different fonts for author
+% names. Why?
+% \begin{macrocode}
+\def\@authorfont{\Large\sffamily}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@affiliationfont}
+% Font for affiliations
+% \begin{macrocode}
+\def\@affiliationfont{\normalsize\normalfont}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v1.13}{2016/06/06}{Font adjustments for acmsmall}
+% Adjusting fonts for different formats
+% \begin{macrocode}
+\ifcase\ACM@format@nr
+\relax % manuscript
+\or % acmsmall
+ \def\@authorfont{\large\sffamily}
+ \def\@affiliationfont{\small\normalfont}
+\or % acmlarge
+\or % acmtog
+ \def\@authorfont{\LARGE\sffamily}
+ \def\@affiliationfont{\large}
+\or % sigconf
+ \def\@authorfont{\LARGE}
+ \def\@affiliationfont{\large}
+\or % siggraph
+ \def\@authorfont{\normalsize\normalfont}
+ \def\@affiliationfont{\normalsize\normalfont}
+\or % sigplan
+ \def\@authorfont{\Large\normalfont}
+ \def\@affiliationfont{\normalsize\normalfont}
+\or % sigchi
+ \def\@authorfont{\bfseries}
+ \def\@affiliationfont{\mdseries}
+\or % sigchi-a
+ \def\@authorfont{\bfseries}
+ \def\@affiliationfont{\mdseries}
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\@typeset@author@line}
+% \changes{v1.18}{2016/07/12}{Added macro}
+% At this point we have \cs{@currentauthors} and
+% \cs{@currentaffiliations}. We typeset them in the journal style
+% \begin{macrocode}
+\def\@typeset@author@line{%
+ \andify\@currentauthors\par\noindent
+ \@currentauthors\def\@currentauthors{}%
+ \ifx\@currentaffiliations\@empty\else
+ \andify\@currentaffiliations
+ \unskip, {\@currentaffiliations}\par
+ \fi
+ \def\@currentaffiliations{}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\@mkauthors@i}
+% \changes{v1.18}{2016/07/12}{Now we andify affiliations}
+% \changes{v1.33}{2017/03/28}{Added obeypunctuation code}
+% \changes{v1.40}{2017/06/04}{Switched to MakeTextUppercase}
+% This version is used in most journal formats. Note that \cs{and} between
+% authors with the same affiliation becomes \verb*| and |:
+% \begin{macrocode}
+\def\@mkauthors@i{%
+ \def\@currentauthors{}%
+ \def\@currentaffiliations{}%
+ \global\let\and\@typeset@author@line
+ \def\@author##1{%
+ \ifx\@currentauthors\@empty
+ \gdef\@currentauthors{\@authorfont\MakeTextUppercase{##1}}%
+ \else
+ \g@addto@macro{\@currentauthors}{\and\MakeTextUppercase{##1}}%
+ \fi
+ \gdef\and{}}%
+ \def\email##1##2{}%
+ \def\affiliation##1##2{%
+ \def\@tempa{##2}\ifx\@tempa\@empty\else
+ \ifx\@currentaffiliations\@empty
+ \gdef\@currentaffiliations{%
+ \setkeys{@ACM@affiliation@}{obeypunctuation=false}%
+ \setkeys{@ACM@affiliation@}{##1}%
+ \@affiliationfont##2}%
+ \else
+ \g@addto@macro{\@currentaffiliations}{\and
+ \setkeys{@ACM@affiliation@}{obeypunctuation=false}%
+ \setkeys{@ACM@affiliation@}{##1}##2}%
+ \fi
+ \fi
+ \global\let\and\@typeset@author@line}%
+ \global\setbox\mktitle@bx=\vbox{\noindent\box\mktitle@bx\par\medskip
+ \noindent\addresses\@typeset@author@line
+ \par\medskip}%
+}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@mkauthors@ii}
+% \changes{v1.17}{2016/07/09}{Deleted}
+% The \cs{@mkauthors@ii} command was the version used in |acmtog|.
+% It is no longer necessary.
+%
+% \end{macro}
+%
+% \begin{macro}{\author@bx}
+% The box to put an individual author in
+% \begin{macrocode}
+\newbox\author@bx
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\author@bx@wd}
+% The width of the author box
+% \begin{macrocode}
+\newdimen\author@bx@wd
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\author@bx@sep}
+% The separation between author boxes
+% \begin{macrocode}
+\newskip\author@bx@sep
+\author@bx@sep=1pc\relax
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@typeset@author@bx}
+% \changes{v1.15}{2016/07/04}{Moved to separate macro}
+% \changes{v1.61}{2019/05/26}{Added \cs{normalbaselines}}
+% Typesetting the box with authors. Note that in |sigchi-a| the box
+% is not centered.
+% \begin{macrocode}
+\def\@typeset@author@bx{\bgroup\hsize=\author@bx@wd
+ \def\and{\par}\normalbaselines
+ \global\setbox\author@bx=\vtop{\if@ACM@sigchiamode\else\centering\fi
+ \@authorfont\@currentauthors\par\@affiliationfont
+ \@currentaffiliation}\egroup
+ \box\author@bx\hspace{\author@bx@sep}%
+ \gdef\@currentauthors{}%
+ \gdef\@currentaffiliation{}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\@mkauthors@iii}
+% \changes{v1.15}{2016/07/04}{New authors system}
+% \changes{v1.33}{2017/03/28}{Added obeypunctuation code}
+% \changes{v1.36}{2017/05/12}{Added authorsperrow overrride}
+% The |sigconf| version. Here we use a centered design with each
+% author in a separate box.
+% \begin{macrocode}
+\def\@mkauthors@iii{%
+% \end{macrocode}
+% First, we need to determine the design of the author strip. The
+% boxes are separated by \cs{author@bx@sep} plus two
+% \cs{author@bx@sep} margins. This means that each box must be of
+% width $(\cs{textwidth}-\cs{author@bx@sep})/N-\cs{author@bx@sep}$,
+% where $N$ is the number of boxes per row.
+% \begin{macrocode}
+ \author@bx@wd=\textwidth\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
+ \relax % 0?
+ \or % 1=one author per row
+ \or % 2=two authors per row
+ \divide\author@bx@wd by \num@authorgroups\relax
+ \or % 3=three authors per row
+ \divide\author@bx@wd by \num@authorgroups\relax
+ \or % 4=two authors per row (!)
+ \divide\author@bx@wd by 2\relax
+ \else % three authors per row
+ \divide\author@bx@wd by 3\relax
+ \fi
+ \fi
+ \advance\author@bx@wd by -\author@bx@sep\relax
+% \end{macrocode}
+% Now, parsing of \cs{addresses}:
+% \begin{macrocode}
+ \gdef\@currentauthors{}%
+ \gdef\@currentaffiliation{}%
+ \def\@author##1{\ifx\@currentauthors\@empty
+ \gdef\@currentauthors{\par##1}%
+ \else
+ \g@addto@macro\@currentauthors{\par##1}%
+ \fi
+ \gdef\and{}}%
+ \def\email##1##2{\ifx\@currentaffiliation\@empty
+ \gdef\@currentaffiliation{\bgroup
+ \mathchardef\UrlBreakPenalty=10000\nolinkurl{##2}\egroup}%
+ \else
+ \g@addto@macro\@currentaffiliation{\par\bgroup
+ \mathchardef\UrlBreakPenalty=10000\nolinkurl{##2}\egroup}%
+ \fi}%
+ \def\affiliation##1##2{\ifx\@currentaffiliation\@empty
+ \gdef\@currentaffiliation{%
+ \setkeys{@ACM@affiliation@}{obeypunctuation=false}%
+ \setkeys{@ACM@affiliation@}{##1}##2}%
+ \else
+ \g@addto@macro\@currentaffiliation{\par
+ \setkeys{@ACM@affiliation@}{obeypunctuation=false}%
+ \setkeys{@ACM@affiliation@}{##1}##2}%
+ \fi
+ \global\let\and\@typeset@author@bx
+}%
+% \end{macrocode}
+% Actual typesetting is done by the \cs{and} macro:
+% \begin{macrocode}
+ \hsize=\textwidth
+ \global\setbox\mktitle@bx=\vbox{\noindent
+ \box\mktitle@bx\par\medskip\leavevmode
+ \lineskip=1pc\relax\centering\hspace*{-1em}%
+ \addresses\let\and\@typeset@author@bx\and\par\bigskip}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\@mkauthors@iv}
+% \changes{v1.33}{2017/03/28}{Added obeypunctuation code}
+% \changes{v1.36}{2017/05/12}{Added authorsperrow overrride}
+% The |sigchi-a| version. We put authors in the main text with
+% no more than 2 authors per line, unless overriden.
+% \begin{macrocode}
+\def\@mkauthors@iv{%
+% \end{macrocode}
+% First, we need to determine the design of the author strip. The
+% boxes are separated by \cs{author@bx@sep} plus two
+% \cs{author@bx@sep} margins. This means that each box must be of
+% width $(\cs{textwidth}-\cs{author@bx@sep})/N-\cs{author@bx@sep}$,
+% where $N$ is the number of boxes per row.
+% \begin{macrocode}
+ \author@bx@wd=\columnwidth\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
+ \relax % 0?
+ \or % 1=one author per row
+ \else % 2=two authors per row
+ \divide\author@bx@wd by 2\relax
+ \fi
+ \fi
+ \advance\author@bx@wd by -\author@bx@sep\relax
+% \end{macrocode}
+% Now, parsing of \cs{addresses}:
+% \begin{macrocode}
+ \gdef\@currentauthors{}%
+ \gdef\@currentaffiliation{}%
+ \def\@author##1{\ifx\@currentauthors\@empty
+ \gdef\@currentauthors{\par##1}%
+ \else
+ \g@addto@macro\@currentauthors{\par##1}%
+ \fi
+ \gdef\and{}}%
+ \def\email##1##2{\ifx\@currentaffiliation\@empty
+ \gdef\@currentaffiliation{\nolinkurl{##2}}%
+ \else
+ \g@addto@macro\@currentaffiliation{\par\nolinkurl{##2}}%
+ \fi}%
+ \def\affiliation##1##2{\ifx\@currentaffiliation\@empty
+ \gdef\@currentaffiliation{%
+ \setkeys{@ACM@affiliation@}{obeypunctuation=false}%
+ \setkeys{@ACM@affiliation@}{##1}##2}%
+ \else
+ \g@addto@macro\@currentaffiliation{\par
+ \setkeys{@ACM@affiliation@}{obeypunctuation=false}%
+ \setkeys{@ACM@affiliation@}{##1}##2}%
+ \fi
+ \global\let\and\@typeset@author@bx}%
+%
+% \end{macrocode}
+% Actual typesetting is done by the \cs{and} macro
+% \begin{macrocode}
+ \bgroup\hsize=\columnwidth
+ \par\raggedright\leftskip=\z@
+ \lineskip=1pc\noindent
+ \addresses\let\and\@typeset@author@bx\and\par\bigskip\egroup}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@mkauthorsaddresses}
+% \changes{v1.46}{2017/08/27}{Introduced macro}
+% Typesetting authors' addresses in the footnote style
+% \begin{macrocode}
+\def\@mkauthorsaddresses{%
+ \ifnum\num@authors>1\relax
+ Authors' \else Author's \fi
+ \ifnum\num@authorgroups>1\relax
+ addresses: \else address: \fi
+ \bgroup
+ \def\streetaddress##1{\unskip\@addpunct, ##1}%
+ \def\postcode##1{\unskip\@addpunct, ##1}%
+ \def\position##1{\unskip\ignorespaces}%
+ \def\institution##1{\unskip\@addpunct, ##1}%
+ \def\city##1{\unskip\@addpunct, ##1}%
+ \def\state##1{\unskip\@addpunct, ##1}%
+ \renewcommand\department[2][0]{\unskip\@addpunct, ##2}%
+ \def\country##1{\unskip\@addpunct, ##1}%
+ \def\and{\unskip\@addpunct; }%
+ \def\@author##1{##1}%
+ \def\email##1##2{\unskip\@addpunct, \nolinkurl{##2}}%
+ \addresses
+ \egroup}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@setaddresses}
+% This is an |amsart| macro that we do not need.
+% \begin{macrocode}
+\def\@setaddresses{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\@authornotemark}
+% Adding a footnote mark to authors. This version adds a ``normal''
+% footnote mark.
+% \begin{macrocode}
+\def\@authornotemark{\g@addto@macro\@currentauthors{\footnotemark\relax}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@@authornotemark}
+% \changes{v1.39}{2017/05/14}{Added macro}
+% Adding a footnote mark to authors with a given number
+% \begin{macrocode}
+\def\@@authornotemark#1{\g@addto@macro\@currentauthors{\footnotemark[#1]}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@mkteasers}
+% Typesetting the teasers
+% \changes{v1.56}{2018/11/1}{Added check for description}
+% \begin{macrocode}
+\def\@mkteasers{%
+ \ifx\@teaserfigures\@empty\else
+ \def\@teaser##1{\par\bigskip\bgroup
+ \captionsetup{type=figure}##1\egroup\par}
+ \global\setbox\mktitle@bx=\vbox{\noindent\box\mktitle@bx\par
+ \noindent\@Description@presentfalse
+ \@teaserfigures\par\if@Description@present\else
+ \global\@undescribed@imagestrue
+ \ClassWarning{\@classname}{A possible image without
+ description}\fi
+ \medskip}%
+ \fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@mkabstract}
+% \changes{v1.19}{2016/07/28}{Include 'Abstract' in PDF bookmarks
+% (Matthew Fluet)}
+% \changes{v1.20}{2016/08/03}{Deleted spurious space}
+% \changes{v1.29}{2017/01/22}{Removed spurious indentation (John
+% Wickerson)}
+% \changes{v1.48}{2017/09/16}{Removed spurious indentation if abstract
+% is followed by an empty line}
+% Typesetting the abstract
+% \begin{macrocode}
+\def\@mkabstract{\bgroup
+ \ifx\@abstract\@lempty\else
+ {\phantomsection\addcontentsline{toc}{section}{Abstract}%
+ \if@ACM@journal
+ \everypar{\setbox\z@\lastbox\everypar{}}\small
+ \else
+ \section*{\abstractname}%
+ \fi
+ \ignorespaces\@abstract\par}%
+ \fi\egroup}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@mkbibcitation}
+% \changes{v1.17}{2016/07/10}{Changed format for sigs}
+% \changes{v1.17}{2016/07/10}{Added \cs{nobreak}}
+% \changes{v1.31}{2017/03/04}{Disabled linebreak}
+% \changes{v1.34}{2017/04/09}{Deleted DOI from doi numbers}
+% \changes{v1.44}{2017/07/30}{If the paper has just one page, use
+% `page' instead of `pages'}
+% \changes{v1.46}{2017/08/25}{Added subtitle}
+% \changes{v1.54}{2018/06/10}{Bug corrected (Ross Moore)}
+% \changes{v1.55}{2018/07/25}{Bug corrected}
+% \changes{v1.58}{2019/01/23}{Deleted spurious \cs{vspace} warning}
+% Print the |bibcitation| format
+% \begin{macrocode}
+\def\@mkbibcitation{\bgroup
+ \let\@vspace\@vspace@orig
+ \let\@vspacer\@vspacer@orig
+ \def\@pages@word{\ifnum\getrefnumber{TotPages}=1\relax page\else pages\fi}%
+ \def\footnotemark{}%
+ \def\\{\unskip{} \ignorespaces}%
+ \def\footnote{\ClassError{\@classname}{Please do not use footnotes
+ inside a \string\title{} or \string\author{} command! Use
+ \string\titlenote{} or \string\authornote{} instead!}}%
+ \def\@article@string{\ifx\@acmArticle\@empty{\ }\else,
+ Article~\@acmArticle\ \fi}%
+ \par\medskip\small\noindent{\bfseries ACM Reference Format:}\par\nobreak
+ \noindent\bgroup
+ \def\\{\unskip{}, \ignorespaces}\authors\egroup. \@acmYear. \@title
+ \ifx\@subtitle\@empty. \else: \@subtitle. \fi
+ \if@ACM@nonacm\else
+ % The 'nonacm' option disables 'printacmref' by default,
+ % and the present \@mkbibcitation definition is never used
+ % in this case. The conditional remains useful if the user
+ % explicitly sets \settopmatter{printacmref=true}.
+ \if@ACM@journal@bibstrip
+ \textit{\@journalNameShort}
+ \@acmVolume, \@acmNumber \@article@string (\@acmPubDate),
+ \ref{TotPages}~\@pages@word.
+ \else
+ In \textit{\@acmBooktitle}%
+ \ifx\@acmEditors\@empty\textit{.}\else
+ \andify\@acmEditors\textit{, }\@acmEditors~\@editorsAbbrev.%
+ \fi\
+ ACM, New York, NY, USA%
+ \@article@string\unskip, \ref{TotPages}~\@pages@word.
+ \fi
+ \fi
+ \ifx\@acmDOI\@empty\else\@formatdoi{\@acmDOI}\fi
+\par\egroup}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@printendtopmatter}
+% \changes{v1.46}{2017/08/28}{Made it \cs{par}\cs{bigskip} uniformly}
+% \changes{v1.58}{2019/01/23}{Deleted spurious \cs{vspace} warning}
+% End the top matter
+% \begin{macrocode}
+\def\@printendtopmatter{\bgroup
+ \let\@vspace\@vspace@orig
+ \let\@vspacer\@vspacer@orig
+ \par\bigskip
+ \egroup}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@setthanks}
+% We redefine \cs{\@setthanks} using \cs{long}
+% \begin{macrocode}
+\def\@setthanks{\long\def\thanks##1{\par##1\@addpunct.}\thankses}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@setauthorsaddresses}
+% \changes{v1.46}{2018/08/25}{Introduced macro}
+% \begin{macrocode}
+\def\@setauthorsaddresses{\@authorsaddresses\unskip\@addpunct.}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+%
+%\subsection{Headers and Footers}
+%\label{sec:head_foot}
+%
+% We use |fancyhdr| for our headers and footers:
+% \begin{macrocode}
+\RequirePackage{fancyhdr}
+% \end{macrocode}
+%
+% \begin{macro}{\ACM@restore@pagestyle}
+% \changes{v1.44}{2017/07/30}{Added macro}
+% The following code by Ross Moore protects against changes by
+% the |totpages| package:
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+%
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\ACM@linecount@bx}
+% \changes{v1.34}{2017/04/10}{Rulers now are continuous}
+% \changes{v1.40}{2017/05/27}{Work around a bug in xcolor: looks like
+% cmyk colors in boxes do not work}
+% \changes{v1.46}{2017/08/28}{Rearranged the code to get rid of
+% spurious underfull messages (Benjamin Byholm)}
+% \changes{v1.64}{2019/08/24}{Bug fix: made the spacing on the left
+% and the right size equal}
+% This is the box displayed in review mode
+% \begin{macrocode}
+\if@ACM@review
+ \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}{\normalfont
+ \normalsize
+ \setlength{\ACM@linecount@bxht}{0pt}%
+ \loop{\color{red}\scriptsize\the\ACM@linecount}\\
+ \global\advance\ACM@linecount by \@ne
+ \addtolength{\ACM@linecount@bxht}{\baselineskip}%
+ \ifdim\ACM@linecount@bxht<\textheight\repeat
+ {\color{red}\scriptsize\the\ACM@linecount}\hfill
+ \global\advance\ACM@linecount by \@ne}}}
+\fi
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\ACM@linecountL}
+% \changes{v1.33}{2017/03/29}{Renamed macro}
+% \changes{v1.34}{2017/04/10}{Rulers now are continuous}
+% How to display the box on the left
+% \begin{macrocode}
+\def\ACM@linecountL{%
+ \if@ACM@review
+ \ACM@mk@linecount
+ \begin{picture}(0,0)%
+ \put(-26,-22){\usebox{\ACM@linecount@bx}}%
+ \end{picture}%
+ \fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\ACM@linecountR}
+% \changes{v1.33}{2017/03/29}{Added macro}
+% \changes{v1.34}{2017/04/10}{Rulers now are continuous}
+% How to display the box on the right
+% \begin{macrocode}
+\def\ACM@linecountR{%
+ \if@ACM@review
+ \ACM@mk@linecount
+ \begin{picture}(0,0)%
+ \put(20,-22){\usebox{\ACM@linecount@bx}}%
+ \end{picture}%
+ \fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\ACM@timestamp}
+% \changes{v1.33}{2017/03/10}{Added macro (Michael D.~Adams)}
+% \changes{v1.33}{2017/03/28}{Added current page number}
+% \changes{v1.33}{2017/03/29}{Added submission id}
+% \changes{v1.48}{2017/09/16}{Fromatting change (Michael D.~Adams)}
+% The timestamp system
+% \begin{macrocode}
+\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%
+ \ifx\@acmSubmissionID\@empty\relax\else
+ Submission ID: \@acmSubmissionID.{ }%
+ \fi
+ \the\year-\two@digits{\the\month}-\two@digits{\the\day}{ }%
+ \two@digits{\theACM@time@hours}:\two@digits{\theACM@time@minutes}{. }%
+ Page \thepage\ of \@startPage--\pageref*{TotPages}.%
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@shortauthors}
+% \changes{v1.15}{2016/07/04}{Introduced macro}
+% \changes{v1.54}{2016/06/23}{Added submission id in anonymous mode}
+% Even if the author redefined \cs{shortauthors}, we do not print
+% it in the headers when in anonymous mode:
+% \begin{macrocode}
+\def\@shortauthors{%
+ \if@ACM@anonymous
+ Anon.
+ \ifx\@acmSubmissionID\@empty\else Submission Id: \@acmSubmissionID\fi
+ \else\shortauthors\fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@headfootfont}
+% \changes{v1.16}{2016/07/07}{Added macro}
+% \changes{v1.48}{2017/09/16}{Deleted unnecessary switch (Michael D.~Adams)}
+% \changes{v1.60}{2019/04/22}{Moved to footnotesize}
+% The font to typeset header and footer text.
+% \begin{macrocode}
+\def\@headfootfont{\sffamily\footnotesize}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{standardpagestyle}
+% \changes{v1.10}{2016/05/22}{Reversed folios location}
+% \changes{v1.13}{2016/06/06}{Suppressed folios if sig}
+% \changes{v1.13}{2016/06/06}{Added headers for sigs}
+% \changes{v1.13}{2016/06/06}{Expanded headers for sigchi-a}
+% \changes{v1.15}{2016/07/04}{Better handling of anonymous mode}
+% \changes{v1.16}{2016/07/07}{Customize header/footer text font}
+% \changes{v1.17}{2016/07/10}{Added paper title to sigs}
+% \changes{v1.29}{2017/01/22}{Corrected printfolios (Matthew Fluet)}
+% \changes{v1.33}{2017/03/10}{Added timestamp (Michael D.~Adams)}
+% \changes{v1.33}{2017/03/29}{Added right linecount for two-column formats}
+% The page style for all pages but the first one
+% \changes{v1.51}{2018/04/05}{We now use journal abbreviation for
+% footers}
+% \changes{v1.59}{2019/04/20}{Added logic for conference papers using
+% journal format}
+% \changes{v1.59}{2019/04/20}{Moved page styles to \cs{AtBeginDocument}}
+% The page style for all pages but the first one
+% \begin{macrocode}
+\AtBeginDocument{%
+\fancypagestyle{standardpagestyle}{%
+ \fancyhf{}%
+ \renewcommand{\headrulewidth}{\z@}%
+ \renewcommand{\footrulewidth}{\z@}%
+ \def\@acmArticlePage{%
+ \ifx\@acmArticle\empty%
+ \if@ACM@printfolios\thepage\fi%
+ \else%
+ \@acmArticle\if@ACM@printfolios:\thepage\fi%
+ \fi%
+ }%
+ \if@ACM@journal@bibstrip
+ \ifcase\ACM@format@nr
+ \relax % manuscript
+ \fancyhead[LE]{\ACM@linecountL\if@ACM@printfolios\thepage\fi}%
+ \fancyhead[RO]{\if@ACM@printfolios\thepage\fi}%
+ \fancyhead[RE]{\@shortauthors}%
+ \fancyhead[LO]{\ACM@linecountL\shorttitle}%
+ \if@ACM@nonacm\else%
+ \fancyfoot[RO,LE]{\footnotesize Manuscript submitted to ACM}
+ \fi%
+ \or % acmsmall
+ \fancyhead[LE]{\ACM@linecountL\@headfootfont\@acmArticlePage}%
+ \fancyhead[RO]{\@headfootfont\@acmArticlePage}%
+ \fancyhead[RE]{\@headfootfont\@shortauthors}%
+ \fancyhead[LO]{\ACM@linecountL\@headfootfont\shorttitle}%
+ \if@ACM@nonacm\else%
+ \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
+ \@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}%
+ \fi
+ \or % acmlarge
+ \fancyhead[LE]{\ACM@linecountL\@headfootfont
+ \@acmArticlePage\quad\textbullet\quad\@shortauthors}%
+ \fancyhead[LO]{\ACM@linecountL}%
+ \fancyhead[RO]{\@headfootfont
+ \shorttitle\quad\textbullet\quad\@acmArticlePage}%
+ \if@ACM@nonacm\else%
+ \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
+ \@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}%
+ \fi
+ \or % acmtog
+ \fancyhead[LE]{\ACM@linecountL\@headfootfont
+ \@acmArticlePage\quad\textbullet\quad\@shortauthors}%
+ \fancyhead[LO]{\ACM@linecountL}%
+ \fancyhead[RE]{\ACM@linecountR}%
+ \fancyhead[RO]{\@headfootfont
+ \shorttitle\quad\textbullet\quad\@acmArticlePage\ACM@linecountR}%
+ \if@ACM@nonacm\else%
+ \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
+ \@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}%
+ \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\footnotesize
+ \acmConference@shortname,
+ \acmConference@date, \acmConference@venue}%
+ \fancyhead[RO]{\@headfootfont
+ \acmConference@shortname,
+ \acmConference@date, \acmConference@venue\ACM@linecountR}%
+ \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
+ \if@ACM@sigchiamode
+ \fancyheadoffset[L]{\dimexpr(\marginparsep+\marginparwidth)}%
+ \fi
+ \if@ACM@timestamp
+ \fancyfoot[LO,RE]{\ACM@timestamp}
+ \fi
+}%
+\pagestyle{standardpagestyle}
+}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@folio@wd}
+% \begin{macro}{\@folio@ht}
+% \begin{macro}{\@folio@voffset}
+% \begin{macro}{\@folio@max}
+% Folio blob width, height, offsets and max number
+% \begin{macrocode}
+\newdimen\@folio@wd
+\@folio@wd=\z@
+\newdimen\@folio@ht
+\@folio@ht=\z@
+\newdimen\@folio@voffset
+\@folio@voffset=\z@
+\def\@folio@max{1}
+\ifcase\ACM@format@nr
+\relax % manuscript
+\or % acmsmall
+ \@folio@wd=45.75pt\relax
+ \@folio@ht=1.25in\relax
+ \@folio@voffset=.2in\relax
+ \def\@folio@max{8}
+\or % acmlarge
+ \@folio@wd=43.25pt\relax
+ \@folio@ht=79pt\relax
+ \@folio@voffset=.55in\relax
+ \def\@folio@max{10}
+\fi
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@folioblob}
+% \changes{v1.44}{2017/08/11}{Suppress the blob if acmArticleSeq is empty}
+% \changes{v1.45}{2017/08/15}{Switched \cs{bfeseries}\cs{sffamily} to
+% \cs{sffamily}\cs{bfseries}}
+% The macro to typeset the folio blob.
+% \begin{macrocode}
+\def\@folioblob{\@tempcnta=0\@acmArticleSeq\relax
+ \ifnum\@tempcnta=0\relax\else
+% \end{macrocode}
+% First, we calculate \cs{@acmArticleSeq} modulo \cs{@folio@max}
+% \begin{macrocode}
+ \loop
+ \ifnum\@tempcnta>\@folio@max\relax
+ \advance\@tempcnta by - \@folio@max
+ \repeat
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \advance\@tempcnta by -1\relax
+ \@tempdima=\@folio@ht\relax
+ \multiply\@tempdima by \the\@tempcnta\relax
+ \advance\@tempdima by -\@folio@voffset\relax
+ \begin{picture}(0,0)
+ \makebox[\z@]{\raisebox{-\@tempdima}{%
+ \rlap{%
+ \raisebox{-0.45\@folio@ht}[\z@][\z@]{%
+ \rule{\@folio@wd}{\@folio@ht}}}%
+ \parbox{\@folio@wd}{%
+ \centering
+ \textcolor{white}{\LARGE\sffamily\bfseries\@acmArticle}}}}
+ \end{picture}\fi}
+
+% \end{macrocode}
+%
+%
+% \end{macro}
+%
+% \begin{macro}{firstpagestyle}
+% \changes{v1.33}{2017/03/10}{Added timestamp (Michael D.~Adams)}
+% \changes{v1.33}{2017/03/29}{Added right linecount for two-column
+% formats}
+% \changes{v1.51}{2018/04/05}{We now use journal abbreviation for
+% footers}
+% \changes{v1.59}{2019/04/20}{Added logic for conference papers using
+% journal format}
+% \changes{v1.59}{2019/04/20}{Moved page styles to \cs{AtBeginDocument}}
+% The page style for the first page only.
+% \begin{macrocode}
+\AtBeginDocument{%
+\fancypagestyle{firstpagestyle}{%
+ \fancyhf{}%
+ \renewcommand{\headrulewidth}{\z@}%
+ \renewcommand{\footrulewidth}{\z@}%
+ \if@ACM@journal@bibstrip
+ \ifcase\ACM@format@nr
+ \relax % manuscript
+ \fancyhead[L]{\ACM@linecountL}%
+ \fancyfoot[RO,LE]{\if@ACM@printfolios\small\thepage\fi}%
+ \if@ACM@nonacm\else%
+ \fancyfoot[RE,LO]{\footnotesize Manuscript submitted to ACM}%
+ \fi%
+ \or % acmsmall
+ \if@ACM@nonacm\else%
+ \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
+ \@acmNumber, Article \@acmArticle. Publication date:
+ \@acmPubDate.}%
+ \fi%
+ \fancyhead[LE]{\ACM@linecountL\@folioblob}%
+ \fancyhead[LO]{\ACM@linecountL}%
+ \fancyhead[RO]{\@folioblob}%
+ \fancyheadoffset[RO,LE]{0.6\@folio@wd}%
+ \or % acmlarge
+ \if@ACM@nonacm\else%
+ \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
+ \@acmNumber, Article \@acmArticle. Publication date:
+ \@acmPubDate.}%
+ \fi%
+ \fancyhead[RO]{\@folioblob}%
+ \fancyhead[LE]{\ACM@linecountL\@folioblob}%
+ \fancyhead[LO]{\ACM@linecountL}%
+ \fancyheadoffset[RO,LE]{1.4\@folio@wd}%
+ \or % acmtog
+ \if@ACM@nonacm\else%
+ \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
+ \@acmNumber, Article \@acmArticle. Publication date:
+ \@acmPubDate.}%
+ \fi%
+ \fancyhead[L]{\ACM@linecountL}%
+ \fancyhead[R]{\ACM@linecountR}%
+ \else % Conference proceedings
+ \fancyhead[L]{\ACM@linecountL}%
+ \fancyhead[R]{\ACM@linecountR}%
+ \fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}%
+ \fi
+ \else
+ \fancyhead[L]{\ACM@linecountL}%
+ \fancyhead[R]{\ACM@linecountR}%
+ \fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}%
+ \fi
+ \if@ACM@timestamp
+ \ifnum\ACM@format@nr=0\relax % Manuscript
+ \fancyfoot[LO,RE]{\ACM@timestamp\quad
+ \if@ACM@nonacm\else
+ \footnotesize Manuscript submitted to ACM
+ \fi}
+ \else
+ \fancyfoot[LO,RE]{\ACM@timestamp}
+ \fi
+ \fi
+}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+%\subsection{Sectioning}
+%\label{sec:sectioninng}
+%
+% \begin{macro}{\ACM@NRadjust}
+% \changes{v1.54}{2018/06/17}{Added macro}
+% Ross Moore's macro.
+% \begin{quotation}
+% Initially |\ACM@sect@format@| just passes through its |#1|
+% argument unchanged.
+% When a sectioning macro such as |\section| occurs, the
+% |\ACM@NRadjust| redefines |\ACM@sect@format@| to expand into the
+% styling commands; e.g., |\@secfont|.
+% Then |\Sectionformat| is temporarily redefined to produce
+% |\realSectionformat{\ACM@sect@format{#1}}{#2}|, which ultimately
+% becomes |\Sectionformat{\@secfont{#1}}{#2}|.
+% This is done to allow |\Sectionformat| to be variable, as may be
+% needed in particular circumstances. Its current expansion is saved
+% as |\realSectionformat| which is used with the modified 1st argument,
+% then |\Sectionformat| is reverted to its former expansion.
+%
+% To style the section-number, the line |#1{}| is used at the end of
+% |\ACM@NRadjust|. This imposes style-changing commands for fonts and
+% sizes, but any |\MakeUppercase| acts on just the |{}|. It's a bit hacky,
+% by essentially assuming that only numbers occur here, not letters to
+% be case-changed. (This should be acceptable in a class-file, as it
+% ought to be possible to change the case elsewhere, if that was ever
+% desired.) Also, it can result in |\@adddotafter| being called too
+% soon, so a slight adjustment is made, via |\ACM@adddotafter|, which
+% now tests whether its argument is empty. But the coding has to allow
+% for other packages to have also patched |\@adddotafter|.
+% \end{quotation}
+% \begin{macrocode}
+\def\ACM@NRadjust#1{%
+ \begingroup
+ \expandafter\ifx\csname Sectionformat\endcsname\relax
+ % do nothing when \Sectionformat is unknown
+ \def\next{\endgroup #1}%
+ \else
+ \def\next{\endgroup
+ \let\realSectionformat\Sectionformat
+ \def\ACM@sect@format@{#1}%
+ \let\Sectionformat\ACM@NR@adjustedSectionformat
+ %% next lines added 2018-06-17 to ensure section number is styled
+ \let\real@adddotafter\@adddotafter
+ \let\@adddotafter\ACM@adddotafter
+ #1{}% imposes the styles, but nullifies \MakeUppercase
+ \let\@adddotafter\real@adddotafter
+ }%
+ \fi \next
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ACM@NR@adjustedSectionformat}
+% \changes{v1.54}{2018/06/17}{Added macro}
+% \begin{macrocode}
+\def\ACM@NR@adjustedSectionformat#1#2{%
+ \realSectionformat{\ACM@sect@format{#1}}{#2}%
+ \let\Sectionformat\realSectionformat}
+\DeclareRobustCommand{\ACM@sect@format}{\ACM@sect@format@}
+\def\ACM@sect@format@null#1{#1}
+\let\ACM@sect@format@\ACM@sect@format@null
+\AtBeginDocument{%
+ \expandafter\ifx\csname LTX@adddotafter\endcsname\relax
+ \let\LTX@adddotafter\@adddotafter
+ \fi
+}
+% \end{macrocode}
+%
+% \end{macro}
+% \begin{macro}{\ACM@adddotafter}
+% \changes{v1.54}{2018/06/17}{Added macro}
+% \begin{macrocode}
+\def\ACM@adddotafter#1{\ifx\relax#1\relax\else\LTX@adddotafter{#1}\fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \changes{v1.54}{2018/05/27}{Deleted indent for subsubsection}
+% \changes{v1.54}{2018/06/17}{Added Ross's patch for sectioning}
+% Sectioning is different for different levels
+% \begin{macrocode}
+\renewcommand\section{\@startsection{section}{1}{\z@}%
+ {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}%
+ {.25\baselineskip}%
+ {\ACM@NRadjust\@secfont}}
+\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
+ {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}%
+ {.25\baselineskip}%
+ {\ACM@NRadjust\@subsecfont}}
+\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
+ {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
+ {-3.5\p@}%
+ {\ACM@NRadjust{\@subsubsecfont\@adddotafter}}}
+\renewcommand\paragraph{\@startsection{paragraph}{4}{\parindent}%
+ {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
+ {-3.5\p@}%
+ {\ACM@NRadjust{\@parfont\@adddotafter}}}
+\renewcommand\part{\@startsection{part}{9}{\z@}%
+ {-10\p@ \@plus -4\p@ \@minus -2\p@}%
+ {4\p@}%
+ {\ACM@NRadjust\@parfont}}
+% \end{macrocode}
+%
+% \begin{macro}{\section@raggedright}
+% \changes{v1.12}{2016/05/30}{Introduced macro}%
+% Special version of \cs{raggedright} compatible with
+% \cs{MakeUppercase}
+% \begin{macrocode}
+\def\section@raggedright{\@rightskip\@flushglue
+ \rightskip\@rightskip
+ \leftskip\z@skip
+ \parindent\z@}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\@secfont}
+% \begin{macro}{\@subsecfont}
+% \begin{macro}{\@subsubsecfont}
+% \begin{macro}{\@parfont}
+% \changes{v1.12}{2016/05/30}{Moved to \cs{section@raggedright}}%
+% \changes{v1.40}{2017/06/04}{Switched to MakeTextUppercase}
+% \changes{v1.45}{2017/08/15}{Switched \cs{bfeseries}\cs{sffamily} to
+% \cs{sffamily}\cs{bfseries}}
+% Fonts for sections etc. are different for different formats.
+% \begin{macrocode}
+\def\@secfont{\sffamily\bfseries\section@raggedright\MakeTextUppercase}
+\def\@subsecfont{\sffamily\bfseries\section@raggedright}
+\def\@subsubsecfont{\sffamily\itshape}
+\def\@parfont{\itshape}
+\setcounter{secnumdepth}{3}
+\ifcase\ACM@format@nr
+\relax % manuscript
+\or % acmsmall
+\or % acmlarge
+ \def\@secfont{\sffamily\large\section@raggedright\MakeTextUppercase}
+ \def\@subsecfont{\sffamily\large\section@raggedright}
+\or % acmtog
+ \def\@secfont{\sffamily\large\section@raggedright\MakeTextUppercase}
+ \def\@subsecfont{\sffamily\large\section@raggedright}
+\or % sigconf
+ \def\@secfont{\bfseries\Large\section@raggedright\MakeTextUppercase}
+ \def\@subsecfont{\bfseries\Large\section@raggedright}
+\or % siggraph
+ \def\@secfont{\sffamily\bfseries\Large\section@raggedright\MakeTextUppercase}
+ \def\@subsecfont{\sffamily\bfseries\Large\section@raggedright}
+\or % sigplan
+ \def\@secfont{\bfseries\Large\section@raggedright}
+ \def\@subsecfont{\bfseries\section@raggedright}
+ \renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
+ {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}%
+ {.25\baselineskip}%
+ {\@subsubsecfont}}
+ \def\@subsubsecfont{\bfseries\section@raggedright}
+ \renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
+ {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
+ {-3.5\p@}%
+ {\@parfont\@addspaceafter}}
+ \def\@parfont{\bfseries\itshape}
+ \renewcommand\subparagraph{\@startsection{subparagraph}{5}{\z@}%
+ {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
+ {-3.5\p@}%
+ {\@subparfont\@addspaceafter}}
+ \def\@subparfont{\itshape}
+\or % sigchi
+ \setcounter{secnumdepth}{1}
+ \def\@secfont{\sffamily\bfseries\section@raggedright\MakeTextUppercase}
+ \def\@subsecfont{\sffamily\bfseries\section@raggedright}
+\or % sigchi-a
+ \setcounter{secnumdepth}{0}
+ \def\@secfont{\sffamily\bfseries\section@raggedright\MakeTextUppercase}
+ \def\@subsecfont{\sffamily\bfseries\section@raggedright}
+\fi
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@adddotafter}
+% Add punctuation after a sectioning command
+% \begin{macrocode}
+\def\@adddotafter#1{#1\@addpunct{.}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@addspaceafter}
+% Add space after a sectioning command
+% \begin{macrocode}
+\def\@addspaceafter#1{#1\@addpunct{\enspace}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%\subsection{TOC lists}
+%\label{sec:tocs}
+%
+% \begin{macro}{\@dotsep}
+% Related to the \cs{tableofcontents} are all the horizontal fillers. Base
+% \LaTeX\ defines \cs{@dottedtocline}, which we should not disable. Yet, this
+% command expects \cs{@dotsep} to be defined but leaves this to the class
+% implementation. Since |amsart| does not provide this, we copy the standard
+% variant from |article| here.
+% \begin{macrocode}
+\providecommand*\@dotsep{4.5}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%\subsection{Theorems}
+%\label{sec:theorems}
+%
+% \begin{macro}{\@acmplainbodyfont}
+% The font to typeset the body of the |acmplain| theorem style.
+% \begin{macrocode}
+\def\@acmplainbodyfont{\itshape}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@acmplainindent}
+% The amount to indent the |acmplain| theorem style.
+% \begin{macrocode}
+\def\@acmplainindent{\parindent}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@acmplainheadfont}
+% The font to typeset the head of the |acmplain| theorem style.
+% \begin{macrocode}
+\def\@acmplainheadfont{\scshape}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@acmplainnotefont}
+% The font to typeset the note of the |acmplain| theorem style.
+% \begin{macrocode}
+\def\@acmplainnotefont{\@empty}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% Customization of the |acmplain| theorem style:
+% \begin{macrocode}
+\ifcase\ACM@format@nr
+\relax % manuscript
+\or % acmsmall
+\or % acmlarge
+\or % acmtog
+\or % sigconf
+\or % siggraph
+\or % sigplan
+ \def\@acmplainbodyfont{\itshape}
+ \def\@acmplainindent{\z@}
+ \def\@acmplainheadfont{\bfseries}
+ \def\@acmplainnotefont{\normalfont}
+\or % sigchi
+\or % sigchi-a
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{acmplain}
+% The |acmplain| theorem style
+% \begin{macrocode}
+\newtheoremstyle{acmplain}%
+ {.5\baselineskip\@plus.2\baselineskip
+ \@minus.2\baselineskip}% space above
+ {.5\baselineskip\@plus.2\baselineskip
+ \@minus.2\baselineskip}% space below
+ {\@acmplainbodyfont}% body font
+ {\@acmplainindent}% indent amount
+ {\@acmplainheadfont}% head font
+ {.}% punctuation after head
+ {.5em}% spacing after head
+ {\thmname{#1}\thmnumber{ #2}\thmnote{ {\@acmplainnotefont(#3)}}}% head spec
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\@acmdefinitionbodyfont}
+% The font to typeset the body of the |acmdefinition| theorem style.
+% \begin{macrocode}
+\def\@acmdefinitionbodyfont{\normalfont}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@acmdefinitionindent}
+% The amount to indent the |acmdefinition| theorem style.
+% \begin{macrocode}
+\def\@acmdefinitionindent{\parindent}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@acmdefinitionheadfont}
+% The font to typeset the head of the |acmdefinition| theorem style.
+% \begin{macrocode}
+\def\@acmdefinitionheadfont{\itshape}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@acmdefinitionnotefont}
+% The font to typeset the note of the |acmdefinition| theorem style.
+% \begin{macrocode}
+\def\@acmdefinitionnotefont{\@empty}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% Customization of the |acmdefinition| theorem style:
+% \begin{macrocode}
+\ifcase\ACM@format@nr
+\relax % manuscript
+\or % acmsmall
+\or % acmlarge
+\or % acmtog
+\or % sigconf
+\or % siggraph
+\or % sigplan
+ \def\@acmdefinitionbodyfont{\normalfont}
+ \def\@acmdefinitionindent{\z@}
+ \def\@acmdefinitionheadfont{\bfseries}
+ \def\@acmdefinitionnotefont{\normalfont}
+\or % sigchi
+\or % sigchi-a
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{acmdefinition}
+% The |acmdefinition| theorem style
+% \begin{macrocode}
+\newtheoremstyle{acmdefinition}%
+ {.5\baselineskip\@plus.2\baselineskip
+ \@minus.2\baselineskip}% space above
+ {.5\baselineskip\@plus.2\baselineskip
+ \@minus.2\baselineskip}% space below
+ {\@acmdefinitionbodyfont}% body font
+ {\@acmdefinitionindent}% indent amount
+ {\@acmdefinitionheadfont}% head font
+ {.}% punctuation after head
+ {.5em}% spacing after head
+ {\thmname{#1}\thmnumber{ #2}\thmnote{ {\@acmdefinitionnotefont(#3)}}}% head spec
+% \end{macrocode}
+%
+% \end{macro}
+%
+% Make |acmplain| the default theorem style.
+% \begin{macrocode}
+\theoremstyle{acmplain}
+% \end{macrocode}
+%
+% Delay defining the theorem environments until after other packages
+% have been loaded. In particular, the |cleveref| package must be
+% loaded before the theorem environments are defined in order to show
+% the correct environment name (see
+% \url{https://github.com/borisveytsman/acmart/issues/138}). The |acmthm|
+% option is used to suppress the definition of any theorem
+% environments. Also, to avoid obscure errors arising from these
+% environment definitions conflicting with environments defined by the
+% user or by user-loaded packages, we only define environments that
+% have not yet been defined.
+% \begin{macrocode}
+\AtEndPreamble{%
+ \if@ACM@acmthm
+ \theoremstyle{acmplain}
+ \@ifundefined{theorem}{%
+ \newtheorem{theorem}{Theorem}[section]
+ }{}
+ \@ifundefined{conjecture}{%
+ \newtheorem{conjecture}[theorem]{Conjecture}
+ }{}
+ \@ifundefined{proposition}{%
+ \newtheorem{proposition}[theorem]{Proposition}
+ }{}
+ \@ifundefined{lemma}{%
+ \newtheorem{lemma}[theorem]{Lemma}
+ }{}
+ \@ifundefined{corollary}{%
+ \newtheorem{corollary}[theorem]{Corollary}
+ }{}
+ \theoremstyle{acmdefinition}
+ \@ifundefined{example}{%
+ \newtheorem{example}[theorem]{Example}
+ }{}
+ \@ifundefined{definition}{%
+ \newtheorem{definition}[theorem]{Definition}
+ }{}
+ \fi
+ \theoremstyle{acmplain}
+}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\@proofnamefont}
+% The font to typeset the proof name.
+% \begin{macrocode}
+\def\@proofnamefont{\scshape}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@proofindent}
+% Whether or not to indent proofs.
+% \begin{macrocode}
+\def\@proofindent{\indent}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% Customization of the proof environment.
+% \begin{macrocode}
+\ifcase\ACM@format@nr
+\relax % manuscript
+\or % acmsmall
+\or % acmlarge
+\or % acmtog
+\or % sigconf
+\or % siggraph
+\or % sigplan
+ \def\@proofnamefont{\itshape}
+ \def\@proofindent{\noindent}
+\or % sigchi
+\or % sigchi-a
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{proof}
+% We want some customization of the proof environment.
+% \begin{macrocode}
+\renewenvironment{proof}[1][\proofname]{\par
+ \pushQED{\qed}%
+ \normalfont \topsep6\p@\@plus6\p@\relax
+ \trivlist
+ \item[\@proofindent\hskip\labelsep
+ {\@proofnamefont #1\@addpunct{.}}]\ignorespaces
+}{%
+ \popQED\endtrivlist\@endpefalse
+}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+%
+%\subsection{Balancing columns}
+%\label{sec:balancing}
+%
+% We need balancing only if the user did not disable it, and we use a
+% two column format
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+%
+%\subsection{Acknowledgments}
+%\label{sec:acks}
+%
+% \begin{macro}{\acksname}
+% \changes{v1.56}{2018/10/16}{Added macro (Philip Quinn)}
+% \begin{macrocode}
+\newcommand\acksname{Acknowledgments}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\acks}
+% \changes{v1.19}{2016/07/28}{Include 'Acknowledgements' in PDF bookmarks
+% (Matthew Fluet)}
+% \changes{v1.15}{2016/07/05}{Added macro}
+% This is a |comment|-like structure
+% \begin{macrocode}
+\specialcomment{acks}{%
+ \begingroup
+ \section*{\acksname}
+ \phantomsection\addcontentsline{toc}{section}{\acksname}
+}{%
+ \endgroup
+}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\grantsponsor}
+% \changes{v1.15}{2016/07/05}{Added macro}
+% \changes{v1.17}{2016/07/10}{Renamed}
+% We just typeset the name of the sponsor
+% \begin{macrocode}
+\def\grantsponsor#1#2#3{#2}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\grantnum}
+% \changes{v1.15}{2016/07/05}{Added macro}
+% \changes{v1.17}{2016/07/10}{Added url}
+% \begin{macrocode}
+\newcommand\grantnum[3][]{#3%
+ \def\@tempa{#1}\ifx\@tempa\@empty\else\space(\url{#1})\fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \subsection{Conditional typesetting}
+% \label{sec:conditional}
+%
+% We use the |comment| package for conditional typesetting:
+% \begin{macrocode}
+\AtEndPreamble{%
+\if@ACM@screen
+ \includecomment{screenonly}
+ \excludecomment{printonly}
+\else
+ \excludecomment{screenonly}
+ \includecomment{printonly}
+\fi
+\if@ACM@anonymous
+ \excludecomment{anonsuppress}
+ \excludecomment{acks}
+\else
+ \includecomment{anonsuppress}
+\fi}
+% \end{macrocode}
+%
+%
+%
+%\subsection{Additional bibliography commands}
+%\label{sec:bibliography}
+%
+% \begin{macro}{\showeprint}
+% \changes{v1.21}{2016/09/04}{Added macro}
+% The command \cs{showeprint} has two arguments: the (optional) prefix
+% and the eprint number. Right now the only prefix we understand is
+% the (lowercase) word `arxiv' (see
+% \url{http://arxiv.org/hypertex/bibstyles/}).
+% \begin{macrocode}
+\newcommand\showeprint[2][arxiv]{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@empty\def\@tempa{arxiv}\fi
+ \def\@tempb{arxiv}%
+ \ifx\@tempa\@tempb
+ arXiv:\href{http://arxiv.org/abs/#2}{#2}\else arXiv:#2%
+ \fi}
+% \end{macrocode}
+%
+%
+% \end{macro}
+%
+%\subsection{End of Class}
+%\label{end}
+%
+% \begin{macro}{\vspace}
+% \changes{v1.57}{2018/12/16}{Added warning}
+% \changes{v1.58}{2019/01/23}{Preserved old versions as
+% \cs{@vspace@orig} and \cs{@vspace@orig}}
+% We do not disable \cs{vspace}, but add warning to it
+% \begin{macrocode}
+\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}}{}{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\ACM@origbaselinestretch}
+% \changes{v1.57}{2018/12/16}{Added check whether the user changed
+% \cs{baselinestretch}}
+% We produce an error if the user tries to change \cs{baselinestretch}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \changes{v1.30}{2017/02/10}{Added \cs{frenchspacing}}
+% \begin{macrocode}
+\normalsize\normalfont\frenchspacing
+%</class>
+% \end{macrocode}
+%
+%\Finale
+%\clearpage
+%
+%\PrintChanges
+%\clearpage
+%\PrintIndex
+%
+\endinput