final project for the course ways of thinking in informatics, technical university of vienna.

acmart.cls 88KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710
  1. %%
  2. %% This is file `acmart.cls',
  3. %% generated with the docstrip utility.
  4. %%
  5. %% The original source files were:
  6. %%
  7. %% acmart.dtx (with options: `class')
  8. %%
  9. %% IMPORTANT NOTICE:
  10. %%
  11. %% For the copyright see the source file.
  12. %%
  13. %% Any modified versions of this file must be renamed
  14. %% with new filenames distinct from acmart.cls.
  15. %%
  16. %% For distribution of the original source see the terms
  17. %% for copying and modification in the file acmart.dtx.
  18. %%
  19. %% This generated file may be distributed as long as the
  20. %% original source files, as listed above, are part of the
  21. %% same distribution. (The sources need not necessarily be
  22. %% in the same archive or directory.)
  23. %% \CharacterTable
  24. %% {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
  25. %% 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
  26. %% Digits \0\1\2\3\4\5\6\7\8\9
  27. %% Exclamation \! Double quote \" Hash (number) \#
  28. %% Dollar \$ Percent \% Ampersand \&
  29. %% Acute accent \' Left paren \( Right paren \)
  30. %% Asterisk \* Plus \+ Comma \,
  31. %% Minus \- Point \. Solidus \/
  32. %% Colon \: Semicolon \; Less than \<
  33. %% Equals \= Greater than \> Question mark \?
  34. %% Commercial at \@ Left bracket \[ Backslash \\
  35. %% Right bracket \] Circumflex \^ Underscore \_
  36. %% Grave accent \` Left brace \{ Vertical bar \|
  37. %% Right brace \} Tilde \~}
  38. \NeedsTeXFormat{LaTeX2e}
  39. \ProvidesClass{acmart}
  40. [2018/11/11 v1.56 Typesetting articles for the Association for
  41. Computing Machinery]
  42. \def\@classname{acmart}
  43. \InputIfFileExists{acmart-preload-hook.tex}{%
  44. \ClassWarning{\@classname}{%
  45. I am loading acmart-preload-hook.tex. You are fully responsible
  46. for any problems from now on.}}{}
  47. \RequirePackage{xkeyval}
  48. \RequirePackage{xstring}
  49. \define@choicekey*+{acmart.cls}{format}[\ACM@format\ACM@format@nr]{%
  50. manuscript, acmsmall, acmlarge, acmtog, sigconf, siggraph,
  51. sigplan, sigchi, sigchi-a}[manuscript]{}{%
  52. \ClassError{\@classname}{The option format must be manuscript,
  53. acmsmall, acmlarge, acmtog, sigconf, siggraph,
  54. sigplan, sigchi or sigchi-a}}
  55. \def\@DeclareACMFormat#1{\DeclareOptionX{#1}{\setkeys{acmart.cls}{format=#1}}}
  56. \@DeclareACMFormat{manuscript}
  57. \@DeclareACMFormat{acmsmall}
  58. \@DeclareACMFormat{acmlarge}
  59. \@DeclareACMFormat{acmtog}
  60. \@DeclareACMFormat{sigconf}
  61. \@DeclareACMFormat{siggraph}
  62. \@DeclareACMFormat{sigplan}
  63. \@DeclareACMFormat{sigchi}
  64. \@DeclareACMFormat{sigchi-a}
  65. \ExecuteOptionsX{format}
  66. \define@boolkey+{acmart.cls}[@ACM@]{screen}[true]{%
  67. \if@ACM@screen
  68. \PackageInfo{\@classname}{Using screen mode}%
  69. \else
  70. \PackageInfo{\@classname}{Not using screen mode}%
  71. \fi}{\PackageError{\@classname}{The option screen can be either true or
  72. false}}
  73. \ExecuteOptionsX{screen=false}
  74. \define@boolkey+{acmart.cls}[@ACM@]{acmthm}[true]{%
  75. \if@ACM@acmthm
  76. \PackageInfo{\@classname}{Requiring acmthm}%
  77. \else
  78. \PackageInfo{\@classname}{Suppressing acmthm}%
  79. \fi}{\PackageError{\@classname}{The option acmthm can be either true or
  80. false}}
  81. \ExecuteOptionsX{acmthm=true}
  82. \define@boolkey+{acmart.cls}[@ACM@]{review}[true]{%
  83. \if@ACM@review
  84. \PackageInfo{\@classname}{Using review mode}%
  85. \AtBeginDocument{\@ACM@printfoliostrue}%
  86. \else
  87. \PackageInfo{\@classname}{Not using review mode}%
  88. \fi}{\PackageError{\@classname}{The option review can be either true or
  89. false}}
  90. \ExecuteOptionsX{review=false}
  91. \define@boolkey+{acmart.cls}[@ACM@]{authorversion}[true]{%
  92. \if@ACM@authorversion
  93. \PackageInfo{\@classname}{Using authorversion mode}%
  94. \else
  95. \PackageInfo{\@classname}{Not using authorversion mode}%
  96. \fi}{\PackageError{\@classname}{The option authorversion can be either true or
  97. false}}
  98. \ExecuteOptionsX{authorversion=false}
  99. \define@boolkey+{acmart.cls}[@ACM@]{nonacm}[true]{%
  100. \if@ACM@nonacm
  101. \PackageInfo{\@classname}{Using nonacm mode}%
  102. \AtBeginDocument{\@ACM@printacmreffalse}%
  103. % in 'nonacm' mode we disable the "ACM Reference Format"
  104. % printing by default, but this can be re-enabled by the
  105. % user using \settopmatter{printacmref=true}
  106. \else
  107. \PackageInfo{\@classname}{Not using nonacm mode}%
  108. \fi}{\PackageError{\@classname}{The option nonacm can be either true or
  109. false}}
  110. \ExecuteOptionsX{nonacm=false}
  111. \define@boolkey+{acmart.cls}[@ACM@]{natbib}[true]{%
  112. \if@ACM@natbib
  113. \PackageInfo{\@classname}{Explicitly selecting natbib mode}%
  114. \else
  115. \PackageInfo{\@classname}{Explicitly deselecting natbib mode}%
  116. \fi}{\PackageError{\@classname}{The option natbib can be either true or
  117. false}}
  118. \ExecuteOptionsX{natbib=true}
  119. \define@boolkey+{acmart.cls}[@ACM@]{anonymous}[true]{%
  120. \if@ACM@anonymous
  121. \PackageInfo{\@classname}{Using anonymous mode}%
  122. \else
  123. \PackageInfo{\@classname}{Not using anonymous mode}%
  124. \fi}{\PackageError{\@classname}{The option anonymous can be either true or
  125. false}}
  126. \ExecuteOptionsX{anonymous=false}
  127. \define@boolkey+{acmart.cls}[@ACM@]{timestamp}[true]{%
  128. \if@ACM@timestamp
  129. \PackageInfo{\@classname}{Using timestamp mode}%
  130. \else
  131. \PackageInfo{\@classname}{Not using timestamp mode}%
  132. \fi}{\PackageError{\@classname}{The option timestamp can be either true or
  133. false}}
  134. \ExecuteOptionsX{timestamp=false}
  135. \define@boolkey+{acmart.cls}[@ACM@]{authordraft}[true]{%
  136. \if@ACM@authordraft
  137. \PackageInfo{\@classname}{Using authordraft mode}%
  138. \@ACM@timestamptrue
  139. \@ACM@reviewtrue
  140. \else
  141. \PackageInfo{\@classname}{Not using authordraft mode}%
  142. \fi}{\PackageError{\@classname}{The option authordraft can be either true or
  143. false}}
  144. \ExecuteOptionsX{authordraft=false}
  145. \def\ACM@fontsize{}
  146. \DeclareOptionX{9pt}{\edef\ACM@fontsize{\CurrentOption}}
  147. \DeclareOptionX{10pt}{\edef\ACM@fontsize{\CurrentOption}}
  148. \DeclareOptionX{11pt}{\edef\ACM@fontsize{\CurrentOption}}
  149. \DeclareOptionX{12pt}{\edef\ACM@fontsize{\CurrentOption}}
  150. \DeclareOptionX{draft}{\PassOptionsToClass{\CurrentOption}{amsart}}
  151. \DeclareOptionX{*}{\PassOptionsToClass{\CurrentOption}{amsart}}
  152. \ProcessOptionsX
  153. \ClassInfo{\@classname}{Using format \ACM@format, number \ACM@format@nr}
  154. \newif\if@ACM@manuscript
  155. \newif\if@ACM@journal
  156. \newif\if@ACM@sigchiamode
  157. \ifnum\ACM@format@nr=5\relax % siggraph
  158. \ClassWarning{\@classname}{The format siggraph is now obsolete.
  159. I am switching to sigconf.}
  160. \setkeys{acmart.cls}{format=sigconf}
  161. \fi
  162. \ifnum\ACM@format@nr=0\relax
  163. \@ACM@manuscripttrue
  164. \else
  165. \@ACM@manuscriptfalse
  166. \fi
  167. \@ACM@sigchiamodefalse
  168. \ifcase\ACM@format@nr
  169. \relax % manuscript
  170. \@ACM@journaltrue
  171. \or % acmsmall
  172. \@ACM@journaltrue
  173. \or % acmlarge
  174. \@ACM@journaltrue
  175. \or % acmtog
  176. \@ACM@journaltrue
  177. \or % sigconf
  178. \@ACM@journalfalse
  179. \or % siggraph
  180. \@ACM@journalfalse
  181. \or % sigplan
  182. \@ACM@journalfalse
  183. \or % sigchi
  184. \@ACM@journalfalse
  185. \or % sigchi-a
  186. \@ACM@journalfalse
  187. \@ACM@sigchiamodetrue
  188. \fi
  189. \ifx\ACM@fontsize\@empty
  190. \ifcase\ACM@format@nr
  191. \relax % manuscript
  192. \def\ACM@fontsize{9pt}%
  193. \or % acmsmall
  194. \def\ACM@fontsize{10pt}%
  195. \or % acmlarge
  196. \def\ACM@fontsize{10pt}%
  197. \or % acmtog
  198. \def\ACM@fontsize{9pt}%
  199. \or % sigconf
  200. \def\ACM@fontsize{9pt}%
  201. \or % siggraph
  202. \def\ACM@fontsize{9pt}%
  203. \or % sigplan
  204. \def\ACM@fontsize{10pt}%
  205. \or % sigchi
  206. \def\ACM@fontsize{10pt}%
  207. \or % sigchi-a
  208. \def\ACM@fontsize{10pt}%
  209. \fi
  210. \fi
  211. \ClassInfo{\@classname}{Using fontsize \ACM@fontsize}
  212. \LoadClass[\ACM@fontsize, reqno]{amsart}
  213. \RequirePackage{microtype}
  214. \RequirePackage{etoolbox}
  215. \RequirePackage{refcount}
  216. \RequirePackage{totpages}
  217. \RequirePackage{environ}
  218. \if@ACM@manuscript
  219. \RequirePackage{setspace}
  220. \onehalfspacing
  221. \fi
  222. \RequirePackage{textcase}
  223. \if@ACM@natbib
  224. \RequirePackage{natbib}
  225. \renewcommand{\bibsection}{%
  226. \section*{\refname}%
  227. \phantomsection\addcontentsline{toc}{section}{\refname}%
  228. }
  229. \renewcommand{\bibfont}{\bibliofont}
  230. \renewcommand\setcitestyle[1]{
  231. \@for\@tempa:=#1\do
  232. {\def\@tempb{round}\ifx\@tempa\@tempb
  233. \renewcommand\NAT@open{(}\renewcommand\NAT@close{)}\fi
  234. \def\@tempb{square}\ifx\@tempa\@tempb
  235. \renewcommand\NAT@open{[}\renewcommand\NAT@close{]}\fi
  236. \def\@tempb{angle}\ifx\@tempa\@tempb
  237. \renewcommand\NAT@open{$<$}\renewcommand\NAT@close{$>$}\fi
  238. \def\@tempb{curly}\ifx\@tempa\@tempb
  239. \renewcommand\NAT@open{\{}\renewcommand\NAT@close{\}}\fi
  240. \def\@tempb{semicolon}\ifx\@tempa\@tempb
  241. \renewcommand\NAT@sep{;}\fi
  242. \def\@tempb{colon}\ifx\@tempa\@tempb
  243. \renewcommand\NAT@sep{;}\fi
  244. \def\@tempb{comma}\ifx\@tempa\@tempb
  245. \renewcommand\NAT@sep{,}\fi
  246. \def\@tempb{authoryear}\ifx\@tempa\@tempb
  247. \NAT@numbersfalse\fi
  248. \def\@tempb{numbers}\ifx\@tempa\@tempb
  249. \NAT@numberstrue\NAT@superfalse\fi
  250. \def\@tempb{super}\ifx\@tempa\@tempb
  251. \NAT@numberstrue\NAT@supertrue\fi
  252. \def\@tempb{nobibstyle}\ifx\@tempa\@tempb
  253. \let\bibstyle=\@gobble\fi
  254. \def\@tempb{bibstyle}\ifx\@tempa\@tempb
  255. \let\bibstyle=\@citestyle\fi
  256. \def\@tempb{sort}\ifx\@tempa\@tempb
  257. \def\NAT@sort{\@ne}\fi
  258. \def\@tempb{nosort}\ifx\@tempa\@tempb
  259. \def\NAT@sort{\z@}\fi
  260. \def\@tempb{compress}\ifx\@tempa\@tempb
  261. \def\NAT@cmprs{\@ne}\fi
  262. \def\@tempb{nocompress}\ifx\@tempa\@tempb
  263. \def\NAT@cmprs{\z@}\fi
  264. \def\@tempb{sort&compress}\ifx\@tempa\@tempb
  265. \def\NAT@sort{\@ne}\def\NAT@cmprs{\@ne}\fi
  266. \def\@tempb{mcite}\ifx\@tempa\@tempb
  267. \let\NAT@merge\@ne\fi
  268. \def\@tempb{merge}\ifx\@tempa\@tempb
  269. \@ifnum{\NAT@merge<\tw@}{\let\NAT@merge\tw@}{}\fi
  270. \def\@tempb{elide}\ifx\@tempa\@tempb
  271. \@ifnum{\NAT@merge<\thr@@}{\let\NAT@merge\thr@@}{}\fi
  272. \def\@tempb{longnamesfirst}\ifx\@tempa\@tempb
  273. \NAT@longnamestrue\fi
  274. \def\@tempb{nonamebreak}\ifx\@tempa\@tempb
  275. \def\NAT@nmfmt#1{\mbox{\NAT@up#1}}\fi
  276. \expandafter\NAT@find@eq\@tempa=\relax\@nil
  277. \if\@tempc\relax\else
  278. \expandafter\NAT@rem@eq\@tempc
  279. \def\@tempb{open}\ifx\@tempa\@tempb
  280. \xdef\NAT@open{\@tempc}\fi
  281. \def\@tempb{close}\ifx\@tempa\@tempb
  282. \xdef\NAT@close{\@tempc}\fi
  283. \def\@tempb{aysep}\ifx\@tempa\@tempb
  284. \xdef\NAT@aysep{\@tempc}\fi
  285. \def\@tempb{yysep}\ifx\@tempa\@tempb
  286. \xdef\NAT@yrsep{\@tempc}\fi
  287. \def\@tempb{notesep}\ifx\@tempa\@tempb
  288. \xdef\NAT@cmt{\@tempc}\fi
  289. \def\@tempb{citesep}\ifx\@tempa\@tempb
  290. \xdef\NAT@sep{\@tempc}\fi
  291. \fi
  292. }%
  293. \NAT@@setcites
  294. }
  295. \renewcommand\citestyle[1]{%
  296. \ifcsname bibstyle@#1\endcsname%
  297. \csname bibstyle@#1\endcsname\let\bibstyle\@gobble%
  298. \else%
  299. \@latex@error{Undefined `#1' citestyle}%
  300. \fi
  301. }%
  302. \fi
  303. \newcommand{\bibstyle@acmauthoryear}{%
  304. \setcitestyle{%
  305. authoryear,%
  306. open={[},close={]},citesep={;},%
  307. aysep={},yysep={,},%
  308. notesep={, }}}
  309. \newcommand{\bibstyle@acmnumeric}{%
  310. \setcitestyle{%
  311. numbers,sort&compress,%
  312. open={[},close={]},citesep={,},%
  313. notesep={, }}}
  314. \if@ACM@natbib
  315. \citestyle{acmnumeric}
  316. \fi
  317. \def\@startsection#1#2#3#4#5#6{%
  318. \if@noskipsec \leavevmode \fi
  319. \par
  320. \@tempskipa #4\relax
  321. \@afterindenttrue
  322. \ifdim \@tempskipa <\z@
  323. \@tempskipa -\@tempskipa \@afterindentfalse
  324. \fi
  325. \if@nobreak
  326. \everypar{}%
  327. \else
  328. \addpenalty\@secpenalty\addvspace\@tempskipa
  329. \fi
  330. \@ifstar
  331. {\@ssect{#3}{#4}{#5}{#6}}%
  332. {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
  333. \def\@sect#1#2#3#4#5#6[#7]#8{%
  334. \edef\@toclevel{\ifnum#2=\@m 0\else\number#2\fi}%
  335. \ifnum #2>\c@secnumdepth
  336. \let\@svsec\@empty
  337. \else
  338. \refstepcounter{#1}%
  339. \protected@edef\@svsec{\@seccntformat{#1}\relax}%
  340. \fi
  341. \@tempskipa #5\relax
  342. \ifdim \@tempskipa>\z@
  343. \begingroup
  344. #6{%
  345. \@hangfrom{\hskip #3\relax\@svsec}%
  346. \interlinepenalty \@M #8\@@par}%
  347. \endgroup
  348. \csname #1mark\endcsname{#7}%
  349. \ifnum #2>\c@secnumdepth \else
  350. \@tochangmeasure{\csname the#1\endcsname}%
  351. \fi
  352. \addcontentsline{toc}{#1}{%
  353. \ifnum #2>\c@secnumdepth \else
  354. \protect\numberline{\csname the#1\endcsname}%
  355. \fi
  356. #7}%
  357. \else
  358. \def\@svsechd{%
  359. #6{\hskip #3\relax
  360. \@svsec #8}%
  361. \csname #1mark\endcsname{#7}%
  362. \ifnum #2>\c@secnumdepth \else
  363. \@tochangmeasure{\csname the#1\endcsname\space}%
  364. \fi
  365. \addcontentsline{toc}{#1}{%
  366. \ifnum #2>\c@secnumdepth \else
  367. \protect\numberline{\csname the#1\endcsname}%
  368. \fi
  369. #7}}%
  370. \fi
  371. \@xsect{#5}}
  372. \def\@xsect#1{%
  373. \@tempskipa #1\relax
  374. \ifdim \@tempskipa>\z@
  375. \par \nobreak
  376. \vskip \@tempskipa
  377. \@afterheading
  378. \else
  379. \@nobreakfalse
  380. \global\@noskipsectrue
  381. \everypar{%
  382. \if@noskipsec
  383. \global\@noskipsecfalse
  384. {\setbox\z@\lastbox}%
  385. \clubpenalty\@M
  386. \begingroup \@svsechd \endgroup
  387. \unskip
  388. \@tempskipa #1\relax
  389. \hskip -\@tempskipa
  390. \else
  391. \clubpenalty \@clubpenalty
  392. \everypar{}%
  393. \fi}%
  394. \fi
  395. \ignorespaces}
  396. \def\@seccntformat#1{\csname the#1\endcsname\quad}
  397. \def\@ssect#1#2#3#4#5{%
  398. \@tempskipa #3\relax
  399. \ifdim \@tempskipa>\z@
  400. \begingroup
  401. #4{%
  402. \@hangfrom{\hskip #1}%
  403. \interlinepenalty \@M #5\@@par}%
  404. \endgroup
  405. \else
  406. \def\@svsechd{#4{\hskip #1\relax #5}}%
  407. \fi
  408. \@xsect{#3}}
  409. \def\@starttoc#1#2{\begingroup\makeatletter
  410. \setTrue{#1}%
  411. \par\removelastskip\vskip\z@skip
  412. \@startsection{section}\@M\z@{\linespacing\@plus\linespacing}%
  413. {.5\linespacing}{\centering\contentsnamefont}{#2}%
  414. \@input{\jobname.#1}%
  415. \if@filesw
  416. \@xp\newwrite\csname tf@#1\endcsname
  417. \immediate\@xp\openout\csname tf@#1\endcsname \jobname.#1\relax
  418. \fi
  419. \global\@nobreakfalse \endgroup
  420. \addvspace{32\p@\@plus14\p@}%
  421. }
  422. \def\l@section{\@tocline{1}{0pt}{1pc}{2pc}{}}
  423. \def\l@subsection{\@tocline{2}{0pt}{1pc}{3pc}{}}
  424. \def\l@subsubsection{\@tocline{2}{0pt}{1pc}{5pc}{}}
  425. \def\@makefntext{\noindent\@makefnmark}
  426. \if@ACM@sigchiamode
  427. \long\def\@footnotetext#1{\marginpar{%
  428. \reset@font\small
  429. \interlinepenalty\interfootnotelinepenalty
  430. \protected@edef\@currentlabel{%
  431. \csname p@footnote\endcsname\@thefnmark
  432. }%
  433. \color@begingroup
  434. \@makefntext{%
  435. \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
  436. \color@endgroup}}%
  437. \fi
  438. \long\def\@mpfootnotetext#1{%
  439. \global\setbox\@mpfootins\vbox{%
  440. \unvbox\@mpfootins
  441. \reset@font\footnotesize
  442. \hsize\columnwidth
  443. \@parboxrestore
  444. \protected@edef\@currentlabel
  445. {\csname p@mpfootnote\endcsname\@thefnmark}%
  446. \color@begingroup\centering
  447. \@makefntext{%
  448. \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
  449. \color@endgroup}}
  450. \def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}
  451. \let\@footnotemark@nolink\@footnotemark
  452. \let\@footnotetext@nolink\@footnotetext
  453. \RequirePackage[bookmarksnumbered,unicode]{hyperref}
  454. \pdfstringdefDisableCommands{%
  455. \def\unskip{}%
  456. \def\textbullet{- }%
  457. \def\textrightarrow{ -> }%
  458. \def\footnotemark{}%
  459. }
  460. \urlstyle{rm}
  461. \ifcase\ACM@format@nr
  462. \relax % manuscript
  463. \or % acmsmall
  464. \or % acmlarge
  465. \or % acmtog
  466. \or % sigconf
  467. \or % siggraph
  468. \or % sigplan
  469. \urlstyle{sf}
  470. \or % sigchi
  471. \or % sigchi-a
  472. \urlstyle{sf}
  473. \fi
  474. \AtEndPreamble{%
  475. \if@ACM@screen
  476. \hypersetup{colorlinks,
  477. linkcolor=ACMPurple,
  478. citecolor=ACMPurple,
  479. urlcolor=ACMDarkBlue,
  480. filecolor=ACMDarkBlue}
  481. \else
  482. \hypersetup{hidelinks}
  483. \fi
  484. \hypersetup{pdflang={en},
  485. pdfdisplaydoctitle}}
  486. \if@ACM@natbib
  487. \let\citeN\cite
  488. \let\cite\citep
  489. \let\citeANP\citeauthor
  490. \let\citeNN\citeyearpar
  491. \let\citeyearNP\citeyear
  492. \let\citeNP\citealt
  493. \DeclareRobustCommand\citeA
  494. {\begingroup\NAT@swafalse
  495. \let\NAT@ctype\@ne\NAT@partrue\NAT@fullfalse\NAT@open\NAT@citetp}%
  496. \providecommand\newblock{}%
  497. \else
  498. \AtBeginDocument{%
  499. \let\shortcite\cite%
  500. \providecommand\citename[1]{#1}}
  501. \fi
  502. \newcommand\shortcite[2][]{%
  503. \ifNAT@numbers\cite[#1]{#2}\else\citeyearpar[#1]{#2}\fi}
  504. \def\bibliographystyle#1{%
  505. \ifx\@begindocumenthook\@undefined\else
  506. \expandafter\AtBeginDocument
  507. \fi
  508. {\if@filesw
  509. \immediate\write\@auxout{\string\bibstyle{#1}}%
  510. \fi}}
  511. \RequirePackage{graphicx}
  512. \RequirePackage[prologue]{xcolor}
  513. \definecolor[named]{ACMBlue}{cmyk}{1,0.1,0,0.1}
  514. \definecolor[named]{ACMYellow}{cmyk}{0,0.16,1,0}
  515. \definecolor[named]{ACMOrange}{cmyk}{0,0.42,1,0.01}
  516. \definecolor[named]{ACMRed}{cmyk}{0,0.90,0.86,0}
  517. \definecolor[named]{ACMLightBlue}{cmyk}{0.49,0.01,0,0}
  518. \definecolor[named]{ACMGreen}{cmyk}{0.20,0,1,0.19}
  519. \definecolor[named]{ACMPurple}{cmyk}{0.55,1,0,0.15}
  520. \definecolor[named]{ACMDarkBlue}{cmyk}{1,0.58,0,0.21}
  521. \if@ACM@authordraft
  522. \RequirePackage{draftwatermark}
  523. \SetWatermarkFontSize{0.5in}
  524. \SetWatermarkColor[gray]{.9}
  525. \SetWatermarkText{\parbox{12em}{\centering
  526. Unpublished working draft.\\
  527. Not for distribution.}}
  528. \fi
  529. \RequirePackage{geometry}
  530. \ifcase\ACM@format@nr
  531. \relax % manuscript
  532. \geometry{letterpaper,head=13pt,
  533. marginparwidth=6pc,heightrounded}%
  534. \or % acmsmall
  535. \geometry{twoside=true,
  536. includeheadfoot, head=13pt, foot=2pc,
  537. paperwidth=6.75in, paperheight=10in,
  538. top=58pt, bottom=44pt, inner=46pt, outer=46pt,
  539. marginparwidth=2pc,heightrounded
  540. }%
  541. \or % acmlarge
  542. \geometry{twoside=true, head=13pt, foot=2pc,
  543. paperwidth=8.5in, paperheight=11in,
  544. includeheadfoot,
  545. top=78pt, bottom=114pt, inner=81pt, outer=81pt,
  546. marginparwidth=4pc,heightrounded
  547. }%
  548. \or % acmtog
  549. \geometry{twoside=true, head=13pt, foot=2pc,
  550. paperwidth=8.5in, paperheight=11in,
  551. includeheadfoot, columnsep=24pt,
  552. top=52pt, bottom=75pt, inner=52pt, outer=52pt,
  553. marginparwidth=2pc,heightrounded
  554. }%
  555. \or % sigconf
  556. \geometry{twoside=true, head=13pt,
  557. paperwidth=8.5in, paperheight=11in,
  558. includeheadfoot, columnsep=2pc,
  559. top=57pt, bottom=73pt, inner=54pt, outer=54pt,
  560. marginparwidth=2pc,heightrounded
  561. }%
  562. \or % siggraph
  563. \geometry{twoside=true, head=13pt,
  564. paperwidth=8.5in, paperheight=11in,
  565. includeheadfoot, columnsep=2pc,
  566. top=57pt, bottom=73pt, inner=54pt, outer=54pt,
  567. marginparwidth=2pc,heightrounded
  568. }%
  569. \or % sigplan
  570. \geometry{twoside=true, head=13pt,
  571. paperwidth=8.5in, paperheight=11in,
  572. includeheadfoot=false, columnsep=2pc,
  573. top=1in, bottom=1in, inner=0.75in, outer=0.75in,
  574. marginparwidth=2pc,heightrounded
  575. }%
  576. \or % sigchi
  577. \geometry{twoside=true, head=13pt,
  578. paperwidth=8.5in, paperheight=11in,
  579. includeheadfoot, columnsep=2pc,
  580. top=66pt, bottom=73pt, inner=54pt, outer=54pt,
  581. marginparwidth=2pc,heightrounded
  582. }%
  583. \or % sigchi-a
  584. \geometry{twoside=false, head=13pt,
  585. paperwidth=297mm, paperheight=210mm,
  586. includeheadfoot, marginparsep=72pt,
  587. marginparwidth=170pt, columnsep=20pt,
  588. top=72pt, bottom=72pt, left=314pt, right=72pt
  589. }%
  590. \@mparswitchfalse
  591. \reversemarginpar
  592. \fi
  593. \setlength\parindent{10\p@}
  594. \setlength\parskip{\z@}
  595. \ifcase\ACM@format@nr
  596. \relax % manuscript
  597. \or % acmsmall
  598. \or % acmlarge
  599. \or % acmtog
  600. \setlength\parindent{9\p@}%
  601. \or % sigconf
  602. \or % siggraph
  603. \or % sigplan
  604. \or % sigchi
  605. \or % sigchi-a
  606. \fi
  607. \setlength\normalparindent{\parindent}
  608. \def\copyrightpermissionfootnoterule{\kern-3\p@
  609. \hrule \@width \columnwidth \kern 2.6\p@}
  610. \RequirePackage{manyfoot}
  611. \SelectFootnoteRule[2]{copyrightpermission}
  612. \DeclareNewFootnote{authorsaddresses}
  613. \SelectFootnoteRule[2]{copyrightpermission}
  614. \DeclareNewFootnote{copyrightpermission}
  615. \def\footnoterule{\kern-3\p@
  616. \hrule \@width 4pc \kern 2.6\p@}
  617. \def\endminipage{%
  618. \par
  619. \unskip
  620. \ifvoid\@mpfootins\else
  621. \vskip\skip\@mpfootins
  622. \normalcolor
  623. \unvbox\@mpfootins
  624. \fi
  625. \@minipagefalse
  626. \color@endgroup
  627. \egroup
  628. \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}}
  629. \def\@textbottom{\vskip \z@ \@plus 1pt}
  630. \let\@texttop\relax
  631. \ifcase\ACM@format@nr
  632. \relax % manuscript
  633. \or % acmsmall
  634. \or % acmlarge
  635. \or % acmtog
  636. \flushbottom
  637. \or % sigconf
  638. \flushbottom
  639. \or % siggraph
  640. \flushbottom
  641. \or % sigplan
  642. \flushbottom
  643. \or % sigchi
  644. \flushbottom
  645. \or % sigchi-a
  646. \fi
  647. \RequirePackage{iftex}
  648. \ifPDFTeX
  649. \input{glyphtounicode}
  650. \pdfglyphtounicode{f_f}{FB00}
  651. \pdfglyphtounicode{f_f_i}{FB03}
  652. \pdfglyphtounicode{f_f_l}{FB04}
  653. \pdfglyphtounicode{f_i}{FB01}
  654. \pdfglyphtounicode{t_t}{0074 0074}
  655. \pdfglyphtounicode{f_t}{0066 0074}
  656. \pdfglyphtounicode{T_h}{0054 0068}
  657. \pdfgentounicode=1
  658. \fi
  659. \RequirePackage{cmap}
  660. \newif\if@ACM@newfonts
  661. \@ACM@newfontstrue
  662. \IfFileExists{libertine.sty}{}{\ClassWarning{\@classname}{You do not
  663. have the libertine package installed. Please upgrade your
  664. TeX}\@ACM@newfontsfalse}
  665. \IfFileExists{zi4.sty}{}{\ClassWarning{\@classname}{You do not
  666. have the zi4 package installed. Please upgrade your
  667. TeX}\@ACM@newfontsfalse}
  668. \IfFileExists{newtxmath.sty}{}{\ClassWarning{\@classname}{You do not
  669. have the newtxmath package installed. Please upgrade your
  670. TeX}\@ACM@newfontsfalse}
  671. \if@ACM@newfonts
  672. \RequirePackage[T1]{fontenc}
  673. \ifxetex
  674. \RequirePackage[tt=false]{libertine}
  675. \setmonofont{inconsolata}
  676. \else
  677. \RequirePackage[tt=false, type1=true]{libertine}
  678. \fi
  679. \RequirePackage[varqu]{zi4}
  680. \RequirePackage[libertine]{newtxmath}
  681. \fi
  682. \let\liningnums\@undefined
  683. \AtEndPreamble{%
  684. \DeclareTextFontCommand{\liningnums}{\libertineLF}}
  685. \if@ACM@sigchiamode
  686. \renewcommand{\familydefault}{\sfdefault}
  687. \fi
  688. \newif\if@Description@present
  689. \@Description@presenttrue
  690. \newif\if@undescribed@images
  691. \@undescribed@imagesfalse
  692. \newcommand\Description[2][]{\global\@Description@presenttrue}
  693. \AtEndDocument{\if@undescribed@images
  694. \ClassWarningNoLine{\@classname}{Some images may lack descriptions}\fi}
  695. \AtBeginEnvironment{figure}{\@Description@presentfalse}
  696. \AtBeginEnvironment{figure*}{\@Description@presentfalse}
  697. \AtEndEnvironment{figure}{\if@Description@present\else
  698. \global\@undescribed@imagestrue
  699. \ClassWarning{\@classname}{A possible image without description}\fi}
  700. \AtEndEnvironment{figure*}{\if@Description@present\else
  701. \global\@undescribed@imagestrue
  702. \ClassWarning{\@classname}{A possible image without description}\fi}
  703. \RequirePackage{caption, float}
  704. \captionsetup[table]{position=top}
  705. \if@ACM@journal
  706. \captionsetup{labelfont={sf, small},
  707. textfont={sf, small}, margin=\z@}
  708. \captionsetup[figure]{name={Fig.}}
  709. \else
  710. \captionsetup{labelfont={bf},
  711. textfont={bf}, labelsep=colon, margin=\z@}
  712. \ifcase\ACM@format@nr
  713. \relax % manuscript
  714. \or % acmsmall
  715. \or % acmlarge
  716. \or % acmtog
  717. \or % sigconf
  718. \or % siggraph
  719. \captionsetup{textfont={it}}
  720. \or % sigplan
  721. \captionsetup{labelfont={bf},
  722. textfont={normalfont}, labelsep=period, margin=\z@}
  723. \or % sigchi
  724. \captionsetup[figure]{labelfont={bf, small},
  725. textfont={bf, small}}
  726. \captionsetup[table]{labelfont={bf, small},
  727. textfont={bf, small}}
  728. \or % sigchi-a
  729. \captionsetup[figure]{labelfont={bf, small},
  730. textfont={bf, small}}
  731. \captionsetup[table]{labelfont={bf, small},
  732. textfont={bf, small}}
  733. \fi
  734. \fi
  735. \newfloat{sidebar}{}{sbar}
  736. \floatname{sidebar}{Sidebar}
  737. \renewenvironment{sidebar}{\Collect@Body\@sidebar}{}
  738. \long\def\@sidebar#1{\bgroup\captionsetup{type=sidebar}%
  739. \marginpar{\small#1}\egroup}
  740. \newenvironment{marginfigure}{\Collect@Body\@marginfigure}{}
  741. \long\def\@marginfigure#1{\bgroup
  742. \captionsetup{type=figure}%
  743. \marginpar{\@Description@presentfalse\centering
  744. \small#1\if@Description@present\else
  745. \global\@undescribed@imagestrue
  746. \ClassWarning{\@classname}{A possible image without description}
  747. \fi}%
  748. \egroup}
  749. \newenvironment{margintable}{\Collect@Body\@margintable}{}
  750. \long\def\@margintable#1{\bgroup\captionsetup{type=table}%
  751. \marginpar{\centering\small#1}\egroup}
  752. \newdimen\fulltextwidth
  753. \fulltextwidth=\dimexpr(\textwidth+\marginparwidth+\marginparsep)
  754. \if@ACM@sigchiamode
  755. \def\@dblfloat{\bgroup\columnwidth=\fulltextwidth
  756. \let\@endfloatbox\@endwidefloatbox
  757. \def\@fpsadddefault{\def\@fps{tp}}%
  758. \@float}
  759. \fi
  760. \if@ACM@sigchiamode
  761. \def\end@dblfloat{%
  762. \end@float\egroup}
  763. \fi
  764. \def\@endwidefloatbox{%
  765. \par\vskip\z@skip
  766. \@minipagefalse
  767. \outer@nobreak
  768. \egroup
  769. \color@endbox
  770. \global\setbox\@currbox=\vbox{\moveleft
  771. \dimexpr(\fulltextwidth-\textwidth)\box\@currbox}%
  772. \wd\@currbox=\textwidth
  773. }
  774. \ifcase\ACM@format@nr
  775. \relax % manuscript
  776. \or % acmsmall
  777. \or % acmlarge
  778. \or % acmtog
  779. \or % sigconf
  780. \or % siggraph
  781. \or % sigplan
  782. \def\labelenumi{\theenumi.}
  783. \def\labelenumii{\theenumii.}
  784. \def\labelenumiii{\theenumiii.}
  785. \def\labelenumiv{\theenumiv.}
  786. \or % sigchi
  787. \or % sigchi-a
  788. \fi
  789. \newdimen\@ACM@labelwidth
  790. \AtBeginDocument{%
  791. \setlength\labelsep{4pt}
  792. \setlength{\@ACM@labelwidth}{6.5pt}
  793. %% First-level list: when beginning after the first line of an
  794. %% indented paragraph or ending before an indented paragraph, labels
  795. %% should not hang to the left of the preceding/following text.
  796. \setlength\leftmargini{\z@}
  797. \addtolength\leftmargini{\parindent}
  798. \addtolength\leftmargini{2\labelsep}
  799. \addtolength\leftmargini{\@ACM@labelwidth}
  800. %% Second-level and higher lists.
  801. \setlength\leftmarginii{\z@}
  802. \addtolength\leftmarginii{0.5\labelsep}
  803. \addtolength\leftmarginii{\@ACM@labelwidth}
  804. \setlength\leftmarginiii{\leftmarginii}
  805. \setlength\leftmarginiv{\leftmarginiii}
  806. \setlength\leftmarginv{\leftmarginiv}
  807. \setlength\leftmarginvi{\leftmarginv}
  808. \@listi}
  809. \newskip\listisep
  810. \listisep\smallskipamount
  811. \def\@listI{\leftmargin\leftmargini
  812. \labelwidth\leftmargini \advance\labelwidth-\labelsep
  813. \listparindent\z@
  814. \topsep\listisep}
  815. \let\@listi\@listI
  816. \def\@listii{\leftmargin\leftmarginii
  817. \labelwidth\leftmarginii \advance\labelwidth-\labelsep
  818. \topsep\z@skip}
  819. \def\@listiii{\leftmargin\leftmarginiii
  820. \labelwidth\leftmarginiii \advance\labelwidth-\labelsep}
  821. \def\@listiv{\leftmargin\leftmarginiv
  822. \labelwidth\leftmarginiv \advance\labelwidth-\labelsep}
  823. \def\@listv{\leftmargin\leftmarginv
  824. \labelwidth\leftmarginv \advance\labelwidth-\labelsep}
  825. \def\@listvi{\leftmargin\leftmarginvi
  826. \labelwidth\leftmarginvi \advance\labelwidth-\labelsep}
  827. \renewcommand{\descriptionlabel}[1]{\upshape\bfseries #1}
  828. \renewenvironment{description}{\list{}{%
  829. \labelwidth\@ACM@labelwidth
  830. \let\makelabel\descriptionlabel}%
  831. }{
  832. \endlist
  833. }
  834. \let\enddescription=\endlist % for efficiency
  835. \define@choicekey*+{ACM}{acmJournal}[\@journalCode\@journalCode@nr]{%
  836. CIE,%
  837. CSUR,%
  838. DTRAP,%
  839. IMWUT,%
  840. JACM,%
  841. JDIQ,%
  842. JEA,%
  843. JERIC,%
  844. JETC,%
  845. JOCCH,%
  846. PACMCGIT,%
  847. PACMHCI,%
  848. PACMPL,%
  849. POMACS,%
  850. TAAS,%
  851. TACCESS,%
  852. TACO,%
  853. TALG,%
  854. TALLIP,%
  855. TAP,%
  856. TCPS,%
  857. TDSCI,%
  858. TEAC,%
  859. TECS,%
  860. THRI,%
  861. TIIS,%
  862. TIOT,%
  863. TISSEC,%
  864. TIST,%
  865. TKDD,%
  866. TMIS,%
  867. TOCE,%
  868. TOCHI,%
  869. TOCL,%
  870. TOCS,%
  871. TOCT,%
  872. TODAES,%
  873. TODS,%
  874. TOG,%
  875. TOIS,%
  876. TOIT,%
  877. TOMACS,%
  878. TOMM,%
  879. TOMPECS,%
  880. TOMS,%
  881. TOPC,%
  882. TOPS,%
  883. TOPLAS,%
  884. TOS,%
  885. TOSEM,%
  886. TOSN,%
  887. TRETS,%
  888. TSAS,%
  889. TSC,%
  890. TSLP,%
  891. TWEB%
  892. }{%
  893. \ifcase\@journalCode@nr
  894. \relax % CIE
  895. \def\@journalName{ACM Computers in Entertainment}%
  896. \def\@journalNameShort{ACM Comput. Entertain.}%
  897. \def\@permissionCodeOne{1544-3574}%
  898. \or % CSUR
  899. \def\@journalName{ACM Computing Surveys}%
  900. \def\@journalNameShort{ACM Comput. Surv.}%
  901. \def\@permissionCodeOne{0360-0300}%
  902. \or % DTRAP
  903. \def\@journalName{Digital Threats: Research and Practice}%
  904. \def\@journalNameShort{Digit. Threat. Res. Pract.}%
  905. \def\@permissionCodeOne{2576-5337}%
  906. \or % IMWUT
  907. \def\@journalName{Proceedings of the ACM on Interactive, Mobile,
  908. Wearable and Ubiquitous Technologies}%
  909. \def\@journalNameShort{Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.}%
  910. \def\@permissionCodeOne{2474-9567}%
  911. \@ACM@screentrue
  912. \PackageInfo{\@classname}{Using screen mode due to \@journalCode}%
  913. \or % JACM
  914. \def\@journalName{Journal of the ACM}%
  915. \def\@journalNameShort{J. ACM}%
  916. \def\@permissionCodeOne{0004-5411}%
  917. \or % JDIQ
  918. \def\@journalName{ACM Journal of Data and Information Quality}%
  919. \def\@journalNameShort{ACM J. Data Inform. Quality}%
  920. \def\@permissionCodeOne{1936-1955}%
  921. \or % JEA
  922. \def\@journalName{ACM Journal of Experimental Algorithmics}%
  923. \def\@journalNameShort{ACM J. Exp. Algor.}%
  924. \def\@permissionCodeOne{1084-6654}%
  925. \or % JERIC
  926. \def\@journalName{ACM Journal of Educational Resources in Computing}%
  927. \def\@journalNameShort{ACM J. Edu. Resources in Comput.}%
  928. \def\@permissionCodeOne{1073-0516}%
  929. \or % JETC
  930. \def\@journalName{ACM Journal on Emerging Technologies in Computing Systems}%
  931. \def\@journalNameShort{ACM J. Emerg. Technol. Comput. Syst.}%
  932. \def\@permissionCodeOne{1550-4832}%
  933. \or % JOCCH
  934. \def\@journalName{ACM Journal on Computing and Cultural Heritage}%
  935. \def\@journalNameShort{ACM J. Comput. Cult. Herit.}%
  936. \or % PACMCGIT
  937. \def\@journalName{Proceedings of the ACM on Computer Graphics and Interactive Techniques}%
  938. \def\@journalNameShort{Proc. ACM Comput. Graph. Interact. Tech.}%
  939. \def\@permissionCodeOne{2577-6193}%
  940. \@ACM@screentrue
  941. \PackageInfo{\@classname}{Using screen mode due to \@journalCode}%
  942. \or % PACMHCI
  943. \def\@journalName{Proceedings of the ACM on Human-Computer Interaction}%
  944. \def\@journalNameShort{Proc. ACM Hum.-Comput. Interact.}%
  945. \def\@permissionCodeOne{2573-0142}%
  946. \@ACM@screentrue
  947. \PackageInfo{\@classname}{Using screen mode due to \@journalCode}%
  948. \or % PACMPL
  949. \def\@journalName{Proceedings of the ACM on Programming Languages}%
  950. \def\@journalNameShort{Proc. ACM Program. Lang.}%
  951. \def\@permissionCodeOne{2475-1421}%
  952. \@ACM@screentrue
  953. \PackageInfo{\@classname}{Using screen mode due to \@journalCode}%
  954. \or % POMACS
  955. \def\@journalName{Proceedings of the ACM on Measurement and Analysis of Computing Systems}%
  956. \def\@journalNameShort{Proc. ACM Meas. Anal. Comput. Syst.}%
  957. \def\@permissionCodeOne{2476-1249}%
  958. \@ACM@screentrue
  959. \PackageInfo{\@classname}{Using screen mode due to \@journalCode}%
  960. \or % TAAS
  961. \def\@journalName{ACM Transactions on Autonomous and Adaptive Systems}%
  962. \def\@journalNameShort{ACM Trans. Autonom. Adapt. Syst.}%
  963. \def\@permissionCodeOne{1556-4665}%
  964. \or % TACCESS
  965. \def\@journalName{ACM Transactions on Accessible Computing}%
  966. \def\@journalNameShort{ACM Trans. Access. Comput.}%
  967. \def\@permissionCodeOne{1936-7228}%
  968. \or % TACO
  969. \def\@journalName{ACM Transactions on Architecture and Code Optimization}%
  970. \def\@journalNameShort{ACM Trans. Arch. Code Optim.}%
  971. \or % TALG
  972. \def\@journalName{ACM Transactions on Algorithms}%
  973. \def\@journalNameShort{ACM Trans. Algor.}%
  974. \def\@permissionCodeOne{1549-6325}%
  975. \or % TALLIP
  976. \def\@journalName{ACM Transactions on Asian and Low-Resource Language Information Processing}%
  977. \def\@journalNameShort{ACM Trans. Asian Low-Resour. Lang. Inf. Process.}%
  978. \def\@permissionCodeOne{2375-4699}%
  979. \or % TAP
  980. \def\@journalName{ACM Transactions on Applied Perception}%
  981. \or % TCPS
  982. \def\@journalName{ACM Transactions on Cyber-Physical Systems}%
  983. \or % TDSCI
  984. \def\@journalName{ACM Transactions on Data Science}%
  985. \def\@journalNameShort{ACM Trans. Data Sci.}%
  986. \def\@permissionCodeOne{2577-3224}%
  987. \or % TEAC
  988. \def\@journalName{ACM Transactions on Economics and Computation}%
  989. \or % TECS
  990. \def\@journalName{ACM Transactions on Embedded Computing Systems}%
  991. \def\@journalNameShort{ACM Trans. Embedd. Comput. Syst.}%
  992. \def\@permissionCodeOne{1539-9087}%
  993. \or % THRI
  994. \def\@journalName{ACM Transactions on Human-Robot Interaction}%
  995. \def\@journalNameShort{ACM Trans. Hum.-Robot Interact.}%
  996. \def\@permissionCodeOne{2573-9522}%
  997. \or % TIIS
  998. \def\@journalName{ACM Transactions on Interactive Intelligent Systems}%
  999. \def\@journalNameShort{ACM Trans. Interact. Intell. Syst.}%
  1000. \def\@permissionCodeOne{2160-6455}%
  1001. \or % TIOT
  1002. \def\@journalName{ACM Transactions on Internet of Things}%
  1003. \def\@journalNameShort{ACM Trans. Internet Things}%
  1004. \def\@permissionCodeOne{2577-6207}%
  1005. \or % TISSEC
  1006. \def\@journalName{ACM Transactions on Information and System Security}%
  1007. \def\@journalNameShort{ACM Trans. Info. Syst. Sec.}%
  1008. \def\@permissionCodeOne{1094-9224}%
  1009. \or % TIST
  1010. \def\@journalName{ACM Transactions on Intelligent Systems and Technology}%
  1011. \def\@journalNameShort{ACM Trans. Intell. Syst. Technol.}%
  1012. \def\@permissionCodeOne{2157-6904}%
  1013. \or % TKDD
  1014. \def\@journalName{ACM Transactions on Knowledge Discovery from Data}%
  1015. \def\@journalNameShort{ACM Trans. Knowl. Discov. Data.}%
  1016. \def\@permissionCodeOne{1556-4681}%
  1017. \or % TMIS
  1018. \def\@journalName{ACM Transactions on Management Information Systems}%
  1019. \def\@journalNameShort{ACM Trans. Manag. Inform. Syst.}%
  1020. \def\@permissionCodeOne{2158-656X}%
  1021. \or % TOCE
  1022. \def\@journalName{ACM Transactions on Computing Education}%
  1023. \def\@journalNameShort{ACM Trans. Comput. Educ.}%
  1024. \def\@permissionCodeOne{1946-6226}%
  1025. \or % TOCHI
  1026. \def\@journalName{ACM Transactions on Computer-Human Interaction}%
  1027. \def\@journalNameShort{ACM Trans. Comput.-Hum. Interact.}%
  1028. \def\@permissionCodeOne{1073-0516}%
  1029. \or % TOCL
  1030. \def\@journalName{ACM Transactions on Computational Logic}%
  1031. \def\@journalNameShort{ACM Trans. Comput. Logic}%
  1032. \def\@permissionCodeOne{1529-3785}%
  1033. \or % TOCS
  1034. \def\@journalName{ACM Transactions on Computer Systems}%
  1035. \def\@journalNameShort{ACM Trans. Comput. Syst.}%
  1036. \def\@permissionCodeOne{0734-2071}%
  1037. \or % TOCT
  1038. \def\@journalName{ACM Transactions on Computation Theory}%
  1039. \def\@journalNameShort{ACM Trans. Comput. Theory}%
  1040. \def\@permissionCodeOne{1942-3454}%
  1041. \or % TODAES
  1042. \def\@journalName{ACM Transactions on Design Automation of Electronic Systems}%
  1043. \def\@journalNameShort{ACM Trans. Des. Autom. Electron. Syst.}%
  1044. \def\@permissionCodeOne{1084-4309}%
  1045. \or % TODS
  1046. \def\@journalName{ACM Transactions on Database Systems}%
  1047. \def\@journalNameShort{ACM Trans. Datab. Syst.}%
  1048. \def\@permissionCodeOne{0362-5915}%
  1049. \or % TOG
  1050. \def\@journalName{ACM Transactions on Graphics}%
  1051. \def\@journalNameShort{ACM Trans. Graph.}%
  1052. \def\@permissionCodeOne{0730-0301}
  1053. \or % TOIS
  1054. \def\@journalName{ACM Transactions on Information Systems}%
  1055. \def\@permissionCodeOne{1046-8188}%
  1056. \or % TOIT
  1057. \def\@journalName{ACM Transactions on Internet Technology}%
  1058. \def\@journalNameShort{ACM Trans. Internet Technol.}%
  1059. \def\@permissionCodeOne{1533-5399}%
  1060. \or % TOMACS
  1061. \def\@journalName{ACM Transactions on Modeling and Computer Simulation}%
  1062. \def\@journalNameShort{ACM Trans. Model. Comput. Simul.}%
  1063. \or % TOMM
  1064. \def\@journalName{ACM Transactions on Multimedia Computing, Communications and Applications}%
  1065. \def\@journalNameShort{ACM Trans. Multimedia Comput. Commun. Appl.}%
  1066. \def\@permissionCodeOne{1551-6857}%
  1067. \def\@permissionCodeTwo{0100}%
  1068. \or % TOMPECS
  1069. \def\@journalName{ACM Transactions on Modeling and Performance Evaluation of Computing Systems}%
  1070. \def\@journalNameShort{ACM Trans. Model. Perform. Eval. Comput. Syst.}%
  1071. \def\@permissionCodeOne{2376-3639}%
  1072. \or % TOMS
  1073. \def\@journalName{ACM Transactions on Mathematical Software}%
  1074. \def\@journalNameShort{ACM Trans. Math. Softw.}%
  1075. \def\@permissionCodeOne{0098-3500}%
  1076. \or % TOPC
  1077. \def\@journalName{ACM Transactions on Parallel Computing}%
  1078. \def\@journalNameShort{ACM Trans. Parallel Comput.}%
  1079. \def\@permissionCodeOne{1539-9087}%
  1080. \or % TOPS
  1081. \def\@journalName{ACM Transactions on Privacy and Security}%
  1082. \def\@journalNameShort{ACM Trans. Priv. Sec.}%
  1083. \def\@permissionCodeOne{2471-2566}%
  1084. \or % TOPLAS
  1085. \def\@journalName{ACM Transactions on Programming Languages and Systems}%
  1086. \def\@journalNameShort{ACM Trans. Program. Lang. Syst.}%
  1087. \def\@permissionCodeOne{0164-0925}%
  1088. \or % TOS
  1089. \def\@journalName{ACM Transactions on Storage}%
  1090. \def\@journalNameShort{ACM Trans. Storage}%
  1091. \def\@permissionCodeOne{1553-3077}%
  1092. \or % TOSEM
  1093. \def\@journalName{ACM Transactions on Software Engineering and Methodology}%
  1094. \def\@journalNameShort{ACM Trans. Softw. Eng. Methodol.}%
  1095. \def\@permissionCodeOne{1049-331X}%
  1096. \or % TOSN
  1097. \def\@journalName{ACM Transactions on Sensor Networks}%
  1098. \def\@journalNameShort{ACM Trans. Sensor Netw.}%
  1099. \def\@permissionCodeOne{1550-4859}%
  1100. \or % TRETS
  1101. \def\@journalName{ACM Transactions on Reconfigurable Technology and Systems}%
  1102. \def\@journalNameShort{ACM Trans. Reconfig. Technol. Syst.}%
  1103. \def\@permissionCodeOne{1936-7406}%
  1104. \or % TSAS
  1105. \def\@journalName{ACM Transactions on Spatial Algorithms and Systems}%
  1106. \def\@journalNameShort{ACM Trans. Spatial Algorithms Syst.}%
  1107. \def\@permissionCodeOne{2374-0353}%
  1108. \or % TSC
  1109. \def\@journalName{ACM Transactions on Social Computing}%
  1110. \def\@journalNameShort{ACM Trans. Soc. Comput.}%
  1111. \def\@permissionCodeOne{2469-7818}%
  1112. \or % TSLP
  1113. \def\@journalName{ACM Transactions on Speech and Language Processing}%
  1114. \def\@journalNameShort{ACM Trans. Speech Lang. Process.}%
  1115. \def\@permissionCodeOne{1550-4875}%
  1116. \or % TWEB
  1117. \def\@journalName{ACM Transactions on the Web}%
  1118. \def\@journalNameShort{ACM Trans. Web}%
  1119. \def\@permissionCodeOne{1559-1131}%
  1120. \fi
  1121. \ClassInfo{\@classname}{Using journal code \@journalCode}%
  1122. }{%
  1123. \ClassError{\@classname}{Incorrect journal #1}%
  1124. }%
  1125. \def\acmJournal#1{\setkeys{ACM}{acmJournal=#1}}
  1126. \def\@journalCode@nr{0}
  1127. \def\@journalName{}%
  1128. \def\@journalNameShort{\@journalName}%
  1129. \def\@permissionCodeOne{XXXX-XXXX}%
  1130. \def\@permissionCodeTwo{}%
  1131. \newcommand\acmConference[4][]{%
  1132. \gdef\acmConference@shortname{#1}%
  1133. \gdef\acmConference@name{#2}%
  1134. \gdef\acmConference@date{#3}%
  1135. \gdef\acmConference@venue{#4}%
  1136. \ifx\acmConference@shortname\@empty
  1137. \gdef\acmConference@shortname{#2}%
  1138. \fi}
  1139. \acmConference[Conference'17]{ACM Conference}{July 2017}{Washington,
  1140. DC, USA}
  1141. \def\acmBooktitle#1{\gdef\@acmBooktitle{#1}}
  1142. \acmBooktitle{Proceedings of \acmConference@name
  1143. \ifx\acmConference@name\acmConference@shortname\else
  1144. \ (\acmConference@shortname)\fi}
  1145. \def\@editorsAbbrev{(Ed.)}
  1146. \def\@acmEditors{}
  1147. \def\editor#1{\ifx\@acmEditors\@empty
  1148. \gdef\@acmEditors{#1}%
  1149. \else
  1150. \gdef\@editorsAbbrev{(Eds.)}%
  1151. \g@addto@macro\@acmEditors{\and#1}%
  1152. \fi}
  1153. \def\subtitle#1{\def\@subtitle{#1}}
  1154. \subtitle{}
  1155. \newcount\num@authorgroups
  1156. \num@authorgroups=0\relax
  1157. \newcount\num@authors
  1158. \num@authors=0\relax
  1159. \newif\if@insideauthorgroup
  1160. \@insideauthorgroupfalse
  1161. \renewcommand\author[2][]{%
  1162. \global\advance\num@authors by 1\relax
  1163. \if@insideauthorgroup\else
  1164. \global\advance\num@authorgroups by 1\relax
  1165. \global\@insideauthorgrouptrue
  1166. \fi
  1167. \ifx\addresses\@empty
  1168. \if@ACM@anonymous
  1169. \gdef\addresses{\@author{Anonymous Author(s)%
  1170. \ifx\@acmSubmissionID\@empty\else\\Submission Id:
  1171. \@acmSubmissionID\fi}}%
  1172. \gdef\authors{Anonymous Author(s)}%
  1173. \else
  1174. \gdef\addresses{\@author{#2}}%
  1175. \gdef\authors{#2}%
  1176. \fi
  1177. \else
  1178. \if@ACM@anonymous\else
  1179. \g@addto@macro\addresses{\and\@author{#2}}%
  1180. \g@addto@macro\authors{\and#2}%
  1181. \fi
  1182. \fi
  1183. \if@ACM@anonymous
  1184. \ifx\shortauthors\@empty
  1185. \gdef\shortauthors{Anon.
  1186. \ifx\@acmSubmissionID\@empty\else Submission Id:
  1187. \@acmSubmissionID\fi}%
  1188. \fi
  1189. \else
  1190. \def\@tempa{#1}%
  1191. \ifx\@tempa\@empty
  1192. \ifx\shortauthors\@empty
  1193. \gdef\shortauthors{#2}%
  1194. \else
  1195. \g@addto@macro\shortauthors{\and#2}%
  1196. \fi
  1197. \else
  1198. \ifx\shortauthors\@empty
  1199. \gdef\shortauthors{#1}%
  1200. \else
  1201. \g@addto@macro\shortauthors{\and#1}%
  1202. \fi
  1203. \fi
  1204. \fi}
  1205. \newcommand{\affiliation}[2][]{%
  1206. \global\@insideauthorgroupfalse
  1207. \if@ACM@anonymous\else
  1208. \g@addto@macro\addresses{\affiliation{#1}{#2}}%
  1209. \fi}
  1210. \define@boolkey+{@ACM@affiliation@}[@ACM@affiliation@]{obeypunctuation}%
  1211. [true]{}{\ClassError{\@classname}{The option obeypunctuation can be either true or false}}
  1212. \def\additionalaffiliation#1{\authornote{\@additionalaffiliation{#1}}}
  1213. \def\@additionalaffiliation#1{\bgroup
  1214. \def\position##1{\ignorespaces}%
  1215. \def\institution##1{##1\ignorespaces}%
  1216. \def\department{\@ifnextchar[{\@department}{\@department[]}}%
  1217. \def\@department[##1]##2{\unskip, ##2\ignorespaces}%
  1218. \let\streetaddress\position
  1219. \let\city\position
  1220. \let\state\position
  1221. \let\postcode\position
  1222. \let\country\position
  1223. Also with #1\unskip.\egroup}
  1224. \renewcommand{\email}[2][]{%
  1225. \if@ACM@anonymous\else
  1226. \g@addto@macro\addresses{\email{#1}{#2}}%
  1227. \fi}
  1228. \def\orcid#1{\unskip\ignorespaces}
  1229. \def\authorsaddresses#1{\def\@authorsaddresses{#1}}
  1230. \authorsaddresses{\@mkauthorsaddresses}
  1231. \def\@titlenotes{}
  1232. \def\titlenote#1{%
  1233. \g@addto@macro\@title{\footnotemark}%
  1234. \if@ACM@anonymous
  1235. \g@addto@macro\@titlenotes{%
  1236. \stepcounter{footnote}\footnotetext{Title note}}%
  1237. \else
  1238. \g@addto@macro\@titlenotes{\stepcounter{footnote}\footnotetext{#1}}%
  1239. \fi}
  1240. \def\@subtitlenotes{}
  1241. \def\subtitlenote#1{%
  1242. \g@addto@macro\@subtitle{\footnotemark}%
  1243. \if@ACM@anonymous
  1244. \g@addto@macro\@subtitlenotes{%
  1245. \stepcounter{footnote}\footnotetext{Subtitle note}}%
  1246. \else
  1247. \g@addto@macro\@subtitlenotes{%
  1248. \stepcounter{footnote}\footnotetext{#1}}%
  1249. \fi}
  1250. \def\@authornotes{}
  1251. \def\authornote#1{%
  1252. \if@ACM@anonymous\else
  1253. \g@addto@macro\addresses{\@authornotemark}%
  1254. \g@addto@macro\@authornotes{%
  1255. \stepcounter{footnote}\footnotetext{#1}}%
  1256. \fi}
  1257. \newcommand\authornotemark[1][\relax]{%
  1258. \ifx#1\relax\relax\relax
  1259. \g@addto@macro\addresses{\@authornotemark}%
  1260. \else
  1261. \g@addto@macro\addresses{\@@authornotemark{#1}}%
  1262. \fi}
  1263. \def\acmVolume#1{\def\@acmVolume{#1}}
  1264. \acmVolume{1}
  1265. \def\acmNumber#1{\def\@acmNumber{#1}}
  1266. \acmNumber{1}
  1267. \def\acmArticle#1{\def\@acmArticle{#1}}
  1268. \acmArticle{}
  1269. \def\acmArticleSeq#1{\def\@acmArticleSeq{#1}}
  1270. \acmArticleSeq{\@acmArticle}
  1271. \def\acmYear#1{\def\@acmYear{#1}}
  1272. \acmYear{\the\year}
  1273. \def\acmMonth#1{\def\@acmMonth{#1}}
  1274. \acmMonth{\the\month}
  1275. \def\@acmPubDate{\ifcase\@acmMonth\or
  1276. January\or February\or March\or April\or May\or June\or
  1277. July\or August\or September\or October\or November\or
  1278. December\fi~\@acmYear}
  1279. \def\acmPrice#1{\def\@acmPrice{#1}}
  1280. \acmPrice{15.00}
  1281. \def\acmSubmissionID#1{\def\@acmSubmissionID{#1}}
  1282. \acmSubmissionID{}
  1283. \def\acmISBN#1{\def\@acmISBN{#1}}
  1284. \acmISBN{978-x-xxxx-xxxx-x/YY/MM}
  1285. \def\acmDOI#1{\def\@acmDOI{#1}}
  1286. \acmDOI{10.1145/nnnnnnn.nnnnnnn}
  1287. \newif\if@ACM@badge
  1288. \@ACM@badgefalse
  1289. \newlength\@ACM@badge@width
  1290. \setlength\@ACM@badge@width{5pc}
  1291. \newlength\@ACM@title@width
  1292. \newlength\@ACM@badge@skip
  1293. \setlength\@ACM@badge@skip{1pc}
  1294. \newcommand\acmBadgeR[2][]{\@ACM@badgetrue
  1295. \def\@acmBadgeR@url{#1}%
  1296. \def\@acmBadgeR@image{#2}}
  1297. \def\@acmBadgeR@url{}
  1298. \def\@acmBadgeR@image{}
  1299. \newcommand\acmBadgeL[2][]{\@ACM@badgetrue
  1300. \def\@acmBadgeL@url{#1}%
  1301. \def\@acmBadgeL@image{#2}}
  1302. \def\@acmBadgeL@url{}
  1303. \def\@acmBadgeL@image{}
  1304. \def\startPage#1{\def\@startPage{#1}}
  1305. \startPage{}
  1306. \def\terms#1{\ClassWarning{\@classname}{The command \string\terms{} is
  1307. obsolete. I am going to ignore it}}
  1308. \def\keywords#1{\def\@keywords{#1}}
  1309. \keywords{}
  1310. \renewenvironment{abstract}{\Collect@Body\@saveabstract}{}
  1311. \long\def\@saveabstract#1{\long\gdef\@abstract{#1}}
  1312. \@saveabstract{}
  1313. \long\def\@lempty{}
  1314. \define@boolkey+{@ACM@topmatter@}[@ACM@]{printccs}[true]{%
  1315. \if@ACM@printccs
  1316. \ClassInfo{\@classname}{Printing CCS}%
  1317. \else
  1318. \ClassInfo{\@classname}{Suppressing CCS}%
  1319. \fi}{\ClassError{\@classname}{The option printccs can be either true or false}}
  1320. \define@boolkey+{@ACM@topmatter@}[@ACM@]{printacmref}[true]{%
  1321. \if@ACM@printacmref
  1322. \ClassInfo{\@classname}{Printing bibformat}%
  1323. \else
  1324. \ClassInfo{\@classname}{Suppressing bibformat}%
  1325. \fi}{\ClassError{\@classname}{The option printacmref can be either true or false}}
  1326. \define@boolkey+{@ACM@topmatter@}[@ACM@]{printfolios}[true]{%
  1327. \if@ACM@printfolios
  1328. \ClassInfo{\@classname}{Printing folios}%
  1329. \else
  1330. \ClassInfo{\@classname}{Suppressing folios}%
  1331. \fi}{\ClassError{\@classname}{The option printfolios can be either true or false}}
  1332. \define@cmdkey{@ACM@topmatter@}[@ACM@]{authorsperrow}[0]{%
  1333. \IfInteger{#1}{\ClassInfo{\@classname}{Setting authorsperrow to
  1334. #1}}{\ClassWarning{\@classname}{The parameter authorsperrow must be
  1335. numerical. Ignoring the input #1}\gdef\@ACM@authorsperrow{0}}}
  1336. \def\settopmatter#1{\setkeys{@ACM@topmatter@}{#1}}
  1337. \settopmatter{printccs=true, printacmref=true}
  1338. \if@ACM@manuscript
  1339. \settopmatter{printfolios=true}
  1340. \else
  1341. \if@ACM@journal
  1342. \settopmatter{printfolios=true}
  1343. \else
  1344. \settopmatter{printfolios=false}
  1345. \fi
  1346. \fi
  1347. \settopmatter{authorsperrow=0}
  1348. \def\@received{}
  1349. \newcommand\received[2][]{\def\@tempa{#1}%
  1350. \ifx\@tempa\@empty
  1351. \ifx\@received\@empty
  1352. \gdef\@received{Received #2}%
  1353. \else
  1354. \g@addto@macro{\@received}{; revised #2}%
  1355. \fi
  1356. \else
  1357. \ifx\@received\@empty
  1358. \gdef\@received{#1 #2}%
  1359. \else
  1360. \g@addto@macro{\@received}{; #1 #2}%
  1361. \fi
  1362. \fi}
  1363. \AtEndDocument{%
  1364. \ifx\@received\@empty\else
  1365. \par\bigskip\noindent\small\normalfont\@received\par
  1366. \fi}
  1367. \RequirePackage{comment}
  1368. \excludecomment{CCSXML}
  1369. \let\@concepts\@empty
  1370. \newcounter{@concepts}
  1371. \newcommand\ccsdesc[2][100]{%
  1372. \ccsdesc@parse#1~#2~~\ccsdesc@parse@end}
  1373. \RequirePackage{textcomp}
  1374. \def\ccsdesc@parse#1~#2~#3~{%
  1375. \stepcounter{@concepts}%
  1376. \expandafter\ifx\csname CCS@General@#2\endcsname\relax
  1377. \expandafter\gdef\csname CCS@General@#2\endcsname{\textbullet\
  1378. \textbf{#2}}%
  1379. \expandafter\gdef\csname CCS@Punctuation@#2\endcsname{; }%
  1380. \expandafter\gdef\csname CCS@Specific@#2\endcsname{}%
  1381. \g@addto@macro{\@concepts}{\csname CCS@General@#2\endcsname
  1382. \csname CCS@Punctuation@#2\endcsname
  1383. \csname CCS@Specific@#2\endcsname}%
  1384. \fi
  1385. \ifx#3\relax\relax\else
  1386. \expandafter\gdef\csname CCS@Punctuation@#2\endcsname{
  1387. \textrightarrow\ }%
  1388. \expandafter\g@addto@macro\expandafter{\csname CCS@Specific@#2\endcsname}{%
  1389. \addtocounter{@concepts}{-1}%
  1390. \ifnum#1>499\textbf{#3}\else
  1391. \ifnum#1>299\textit{#3}\else
  1392. #3\fi\fi\ifnum\value{@concepts}=0.\else; \fi}%
  1393. \fi
  1394. \ccsdesc@parse@finish}
  1395. \def\ccsdesc@parse@finish#1\ccsdesc@parse@end{}
  1396. \newif\if@printcopyright
  1397. \@printcopyrighttrue
  1398. \newif\if@printpermission
  1399. \@printpermissiontrue
  1400. \newif\if@acmowned
  1401. \@acmownedtrue
  1402. \define@choicekey*{ACM@}{acmcopyrightmode}[%
  1403. \acm@copyrightinput\acm@copyrightmode]{none,%
  1404. acmcopyright,acmlicensed,rightsretained,%
  1405. usgov,usgovmixed,cagov,cagovmixed,licensedusgovmixed,%
  1406. licensedcagov,licensedcagovmixed,othergov,licensedothergov,%
  1407. iw3c2w3,iw3c2w3g}{%
  1408. \@printpermissiontrue
  1409. \@printcopyrighttrue
  1410. \@acmownedtrue
  1411. \ifnum\acm@copyrightmode=0\relax % none
  1412. \@printpermissionfalse
  1413. \@printcopyrightfalse
  1414. \@acmownedfalse
  1415. \fi
  1416. \ifnum\acm@copyrightmode=2\relax % acmlicensed
  1417. \@acmownedfalse
  1418. \fi
  1419. \ifnum\acm@copyrightmode=3\relax % rightsretained
  1420. \@acmownedfalse
  1421. \AtBeginDocument{\acmPrice{}}%
  1422. \fi
  1423. \ifnum\acm@copyrightmode=4\relax % usgov
  1424. \@printpermissiontrue
  1425. \@printcopyrightfalse
  1426. \@acmownedfalse
  1427. \AtBeginDocument{\acmPrice{}}%
  1428. \fi
  1429. \ifnum\acm@copyrightmode=6\relax % cagov
  1430. \@acmownedfalse
  1431. \fi
  1432. \ifnum\acm@copyrightmode=8\relax % licensedusgovmixed
  1433. \@acmownedfalse
  1434. \fi
  1435. \ifnum\acm@copyrightmode=9\relax % licensedcagov
  1436. \@acmownedfalse
  1437. \fi
  1438. \ifnum\acm@copyrightmode=10\relax % licensedcagovmixed
  1439. \@acmownedfalse
  1440. \fi
  1441. \ifnum\acm@copyrightmode=11\relax % othergov
  1442. \@acmownedtrue
  1443. \fi
  1444. \ifnum\acm@copyrightmode=12\relax % licensedothergov
  1445. \@acmownedfalse
  1446. \fi
  1447. \ifnum\acm@copyrightmode=13\relax % iw3c2w3
  1448. \@acmownedfalse
  1449. \AtBeginDocument{\acmPrice{}}%
  1450. \fi
  1451. \ifnum\acm@copyrightmode=14\relax % iw3c2w3g
  1452. \@acmownedfalse
  1453. \AtBeginDocument{\acmPrice{}}%
  1454. \fi}
  1455. \def\setcopyright#1{\setkeys{ACM@}{acmcopyrightmode=#1}}
  1456. \setcopyright{acmcopyright}
  1457. \def\@copyrightowner{%
  1458. \ifcase\acm@copyrightmode\relax % none
  1459. \or % acmcopyright
  1460. Association for Computing Machinery.
  1461. \or % acmlicensed
  1462. Copyright held by the owner/author(s). Publication rights licensed to
  1463. ACM\@.
  1464. \or % rightsretained
  1465. Copyright held by the owner/author(s).
  1466. \or % usgov
  1467. \or % usgovmixed
  1468. Association for Computing Machinery.
  1469. \or % cagov
  1470. Crown in Right of Canada.
  1471. \or %cagovmixed
  1472. Association for Computing Machinery.
  1473. \or %licensedusgovmixed
  1474. Copyright held by the owner/author(s). Publication rights licensed to
  1475. ACM\@.
  1476. \or % licensedcagov
  1477. Crown in Right of Canada. Publication rights licensed to
  1478. ACM\@.
  1479. \or %licensedcagovmixed
  1480. Copyright held by the owner/author(s). Publication rights licensed to
  1481. ACM\@.
  1482. \or % othergov
  1483. Association for Computing Machinery.
  1484. \or % licensedothergov
  1485. Copyright held by the owner/author(s). Publication rights licensed to
  1486. ACM\@.
  1487. \or % ic2w3www
  1488. IW3C2 (International World Wide Web Conference Committee), published
  1489. under Creative Commons CC-BY~4.0 License.
  1490. \or % ic2w3wwwgoogle
  1491. IW3C2 (International World Wide Web Conference Committee), published
  1492. under Creative Commons CC-BY-NC-ND~4.0 License.
  1493. \fi}
  1494. \def\@formatdoi#1{\url{https://doi.org/#1}}
  1495. \def\@copyrightpermission{%
  1496. \ifcase\acm@copyrightmode\relax % none
  1497. \or % acmcopyright
  1498. Permission to make digital or hard copies of all or part of this
  1499. work for personal or classroom use is granted without fee provided
  1500. that copies are not made or distributed for profit or commercial
  1501. advantage and that copies bear this notice and the full citation on
  1502. the first page. Copyrights for components of this work owned by
  1503. others than ACM must be honored. Abstracting with credit is
  1504. permitted. To copy otherwise, or republish, to post on servers or to
  1505. redistribute to lists, requires prior specific permission
  1506. and\hspace*{.5pt}/or a fee. Request permissions from
  1507. permissions@acm.org.
  1508. \or % acmlicensed
  1509. Permission to make digital or hard copies of all or part of this
  1510. work for personal or classroom use is granted without fee provided
  1511. that copies are not made or distributed for profit or commercial
  1512. advantage and that copies bear this notice and the full citation on
  1513. the first page. Copyrights for components of this work owned by
  1514. others than the author(s) must be honored. Abstracting with credit
  1515. is permitted. To copy otherwise, or republish, to post on servers
  1516. or to redistribute to lists, requires prior specific permission
  1517. and\hspace*{.5pt}/or a fee. Request permissions from
  1518. permissions@acm.org.
  1519. \or % rightsretained
  1520. Permission to make digital or hard copies of part or all of this work
  1521. for personal or classroom use is granted without fee provided that
  1522. copies are not made or distributed for profit or commercial advantage
  1523. and that copies bear this notice and the full citation on the first
  1524. page. Copyrights for third-party components of this work must be
  1525. honored. For all other uses, contact the
  1526. owner\hspace*{.5pt}/author(s).
  1527. \or % usgov
  1528. This paper is authored by an employee(s) of the United States
  1529. Government and is in the public domain. Non-exclusive copying or
  1530. redistribution is allowed, provided that the article citation is
  1531. given and the authors and agency are clearly identified as its
  1532. source.
  1533. \or % usgovmixed
  1534. ACM acknowledges that this contribution was authored or co-authored
  1535. by an employee, contractor, or affiliate of the United States government. As such,
  1536. the United States government retains a nonexclusive, royalty-free right to
  1537. publish or reproduce this article, or to allow others to do so, for
  1538. government purposes only.
  1539. \or % cagov
  1540. This article was authored by employees of the Government of Canada.
  1541. As such, the Canadian government retains all interest in the
  1542. copyright to this work and grants to ACM a nonexclusive,
  1543. royalty-free right to publish or reproduce this article, or to allow
  1544. others to do so, provided that clear attribution is given both to
  1545. the authors and the Canadian government agency employing them.
  1546. Permission to make digital or hard copies for personal or classroom
  1547. use is granted. Copies must bear this notice and the full citation
  1548. on the first page. Copyrights for components of this work owned by
  1549. others than the Canadian Government must be honored. To copy
  1550. otherwise, distribute, republish, or post, requires prior specific
  1551. permission and\hspace*{.5pt}/or a fee. Request permissions from
  1552. permissions@acm.org.
  1553. \or % cagovmixed
  1554. ACM acknowledges that this contribution was co-authored by an
  1555. affiliate of the national government of Canada. As such, the Crown
  1556. in Right of Canada retains an equal interest in the copyright.
  1557. Reprints must include clear attribution to ACM and the author's
  1558. government agency affiliation. Permission to make digital or hard
  1559. copies for personal or classroom use is granted. Copies must bear
  1560. this notice and the full citation on the first page. Copyrights for
  1561. components of this work owned by others than ACM must be honored.
  1562. To copy otherwise, distribute, republish, or post, requires prior
  1563. specific permission and\hspace*{.5pt}/or a fee. Request permissions
  1564. from permissions@acm.org.
  1565. \or % licensedusgovmixed
  1566. Publication rights licensed to ACM\@. ACM acknowledges that this
  1567. contribution was authored or co-authored by an employee, contractor
  1568. or affiliate of the United States government. As such, the
  1569. Government retains a nonexclusive, royalty-free right to publish or
  1570. reproduce this article, or to allow others to do so, for Government
  1571. purposes only.
  1572. \or % licensedcagov
  1573. This article was authored by employees of the Government of Canada.
  1574. As such, the Canadian government retains all interest in the
  1575. copyright to this work and grants to ACM a nonexclusive,
  1576. royalty-free right to publish or reproduce this article, or to allow
  1577. others to do so, provided that clear attribution is given both to
  1578. the authors and the Canadian government agency employing them.
  1579. Permission to make digital or hard copies for personal or classroom
  1580. use is granted. Copies must bear this notice and the full citation
  1581. on the first page. Copyrights for components of this work owned by
  1582. others than the Canadian Government must be honored. To copy
  1583. otherwise, distribute, republish, or post, requires prior specific
  1584. permission and\hspace*{.5pt}/or a fee. Request permissions from
  1585. permissions@acm.org.
  1586. \or % licensedcagovmixed
  1587. Publication rights licensed to ACM\@. ACM acknowledges that this
  1588. contribution was authored or co-authored by an employee, contractor
  1589. or affiliate of the national government of Canada. As such, the
  1590. Government retains a nonexclusive, royalty-free right to publish or
  1591. reproduce this article, or to allow others to do so, for Government
  1592. purposes only.
  1593. \or % othergov
  1594. ACM acknowledges that this contribution was authored or co-authored
  1595. by an employee, contractor or affiliate of a national government. As
  1596. such, the Government retains a nonexclusive, royalty-free right to
  1597. publish or reproduce this article, or to allow others to do so, for
  1598. Government purposes only.
  1599. \or % licensedothergov
  1600. Publication rights licensed to ACM\@. ACM acknowledges that this
  1601. contribution was authored or co-authored by an employee, contractor
  1602. or affiliate of a national government. As such, the Government
  1603. retains a nonexclusive, royalty-free right to publish or reproduce
  1604. this article, or to allow others to do so, for Government purposes
  1605. only.
  1606. \or % iw3c2w3
  1607. This paper is published under the Creative Commons Attribution~4.0
  1608. International (CC-BY~4.0) license. Authors reserve their rights to
  1609. disseminate the work on their personal and corporate Web sites with
  1610. the appropriate attribution.
  1611. \or % iw3c2w3g
  1612. This paper is published under the Creative Commons
  1613. Attribution-NonCommercial-NoDerivs~4.0 International
  1614. (CC-BY-NC-ND~4.0) license. Authors reserve their rights to
  1615. disseminate the work on their personal and corporate Web sites with
  1616. the appropriate attribution.
  1617. \fi}
  1618. \def\copyrightyear#1{\def\@copyrightyear{#1}}
  1619. \copyrightyear{\@acmYear}
  1620. \def\@teaserfigures{}
  1621. \newenvironment{teaserfigure}{\Collect@Body\@saveteaser}{}
  1622. \long\def\@saveteaser#1{\g@addto@macro\@teaserfigures{\@teaser{#1}}}
  1623. \renewcommand{\thanks}[1]{%
  1624. \@ifnotempty{#1}{%
  1625. \if@ACM@anonymous
  1626. \g@addto@macro\thankses{\thanks{A note}}%
  1627. \else
  1628. \g@addto@macro\thankses{\thanks{#1}}%
  1629. \fi}}
  1630. \newbox\mktitle@bx
  1631. \def\maketitle{%
  1632. \if@ACM@anonymous
  1633. % Anonymize omission of \author-s
  1634. \ifnum\num@authorgroups=0\author{}\fi
  1635. \fi
  1636. \begingroup
  1637. \let\@footnotemark\@footnotemark@nolink
  1638. \let\@footnotetext\@footnotetext@nolink
  1639. \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
  1640. \hsize=\textwidth
  1641. \def\@makefnmark{\hbox{\@textsuperscript{\@thefnmark}}}%
  1642. \@mktitle\if@ACM@sigchiamode\else\@mkauthors\fi\@mkteasers
  1643. \@printtopmatter
  1644. \if@ACM@sigchiamode\@mkauthors\fi
  1645. \setcounter{footnote}{0}%
  1646. \def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}%
  1647. \@titlenotes
  1648. \@subtitlenotes
  1649. \@authornotes
  1650. \let\@makefnmark\relax
  1651. \let\@thefnmark\relax
  1652. \let\@makefntext\noindent
  1653. \ifx\@empty\thankses\else
  1654. \footnotetextauthorsaddresses{%
  1655. \def\par{\let\par\@par}\parindent\z@\@setthanks}%
  1656. \fi
  1657. \ifx\@empty\@authorsaddresses\else
  1658. \if@ACM@anonymous\else
  1659. \if@ACM@journal
  1660. \footnotetextauthorsaddresses{%
  1661. \def\par{\let\par\@par}\parindent\z@\@setauthorsaddresses}%
  1662. \fi
  1663. \fi
  1664. \fi
  1665. \if@ACM@nonacm\else\footnotetextcopyrightpermission{%
  1666. \if@ACM@authordraft
  1667. \raisebox{-2ex}[\z@][\z@]{\makebox[0pt][l]{\large\bfseries
  1668. Unpublished working draft. Not for distribution.}}%
  1669. \color[gray]{0.9}%
  1670. \fi
  1671. \parindent\z@\parskip0.1\baselineskip
  1672. \if@ACM@authorversion\else
  1673. \if@printpermission\@copyrightpermission\par\fi
  1674. \fi
  1675. \if@ACM@manuscript\else
  1676. \if@ACM@journal\else % Print the conference information
  1677. {\itshape \acmConference@shortname, \acmConference@date, \acmConference@venue}\par
  1678. \fi
  1679. \fi
  1680. \if@printcopyright
  1681. \copyright\ \@copyrightyear\ \@copyrightowner\\
  1682. \else
  1683. \@copyrightyear.\
  1684. \fi
  1685. \if@ACM@manuscript
  1686. Manuscript submitted to ACM\\
  1687. \else
  1688. \if@ACM@authorversion
  1689. All rights remain with the authors.
  1690. \else
  1691. \if@ACM@nonacm\else
  1692. \if@ACM@journal
  1693. \@permissionCodeOne/\@acmYear/\@acmMonth-ART\@acmArticle
  1694. \ifx\@acmPrice\@empty\else\ \$\@acmPrice\fi\\
  1695. \@formatdoi{\@acmDOI}%
  1696. \else % Conference
  1697. \ifx\@acmISBN\@empty\else ACM~ISBN~\@acmISBN
  1698. \ifx\@acmPrice\@empty.\else\dots\$\@acmPrice\fi\\\fi
  1699. \ifx\@acmDOI\@empty\else\@formatdoi{\@acmDOI}\fi%
  1700. \fi
  1701. \fi
  1702. \fi
  1703. \fi}
  1704. \fi
  1705. \endgroup
  1706. \setcounter{footnote}{0}%
  1707. \@mkabstract
  1708. \if@ACM@printccs
  1709. \ifx\@concepts\@empty\else\bgroup
  1710. {\@specialsection{CCS Concepts}%
  1711. \@concepts\par}\egroup
  1712. \fi
  1713. \fi
  1714. \ifx\@keywords\@empty\else\bgroup
  1715. {\if@ACM@journal
  1716. \@specialsection{Additional Key Words and Phrases}%
  1717. \else
  1718. \@specialsection{Keywords}%
  1719. \fi
  1720. \@keywords}\par\egroup
  1721. \fi
  1722. \andify\authors
  1723. \andify\shortauthors
  1724. \global\let\authors=\authors
  1725. \global\let\shortauthors=\shortauthors
  1726. \if@ACM@printacmref
  1727. \@mkbibcitation
  1728. \fi
  1729. \hypersetup{%
  1730. pdfauthor={\authors},
  1731. pdftitle={\@title},
  1732. pdfsubject={\@concepts},
  1733. pdfkeywords={\@keywords},
  1734. pdfcreator={LaTeX with acmart
  1735. \csname ver@acmart.cls\endcsname\space
  1736. and hyperref
  1737. \csname ver@hyperref.sty\endcsname}}%
  1738. \global\@topnum\z@ % this prevents floats from falling
  1739. % at the top of page 1
  1740. \global\@botnum\z@ % we do not want them to be on the bottom either
  1741. \@printendtopmatter
  1742. \@afterindentfalse
  1743. \@afterheading
  1744. }
  1745. \def\@specialsection#1{%
  1746. \ifcase\ACM@format@nr
  1747. \relax % manuscript
  1748. \par\medskip\small\noindent#1: %
  1749. \or % acmsmall
  1750. \par\medskip\small\noindent#1: %
  1751. \or % acmlarge
  1752. \par\medskip\small\noindent#1: %
  1753. \or % acmtog
  1754. \par\medskip\small\noindent#1: %
  1755. \or % sigconf
  1756. \section*{#1}%
  1757. \or % siggraph
  1758. \section*{#1}%
  1759. \or % sigplan
  1760. \paragraph*{#1}%
  1761. \or % sigchi
  1762. \section*{#1}%
  1763. \or % sigchi-a
  1764. \section*{#1}%
  1765. \fi}
  1766. \def\@printtopmatter{%
  1767. \ifx\@startPage\@empty
  1768. \gdef\@startPage{1}%
  1769. \else
  1770. \setcounter{page}{\@startPage}%
  1771. \fi
  1772. \thispagestyle{firstpagestyle}%
  1773. \noindent
  1774. \ifcase\ACM@format@nr
  1775. \relax % manuscript
  1776. \box\mktitle@bx\par
  1777. \or % acmsmall
  1778. \box\mktitle@bx\par
  1779. \or % acmlarge
  1780. \box\mktitle@bx\par
  1781. \or % acmtog
  1782. \twocolumn[\box\mktitle@bx]%
  1783. \or % sigconf
  1784. \twocolumn[\box\mktitle@bx]%
  1785. \or % siggraph
  1786. \twocolumn[\box\mktitle@bx]%
  1787. \or % sigplan
  1788. \twocolumn[\box\mktitle@bx]%
  1789. \or % sigchi
  1790. \twocolumn[\box\mktitle@bx]%
  1791. \or % sigchi-a
  1792. \par\box\mktitle@bx\par\bigskip
  1793. \if@ACM@badge
  1794. \marginpar{\noindent
  1795. \ifx\@acmBadgeL@image\@empty\else
  1796. \href{\@acmBadgeL@url}{%
  1797. \includegraphics[width=\@ACM@badge@width]{\@acmBadgeL@image}}%
  1798. \hskip\@ACM@badge@skip
  1799. \fi
  1800. \ifx\@acmBadgeR@image\@empty\else
  1801. \href{\@acmBadgeR@url}{%
  1802. \includegraphics[width=\@ACM@badge@width]{\@acmBadgeR@image}}%
  1803. \fi}%
  1804. \fi
  1805. \fi
  1806. }
  1807. \def\@mktitle{%
  1808. \ifcase\ACM@format@nr
  1809. \relax % manuscript
  1810. \@mktitle@i
  1811. \or % acmsmall
  1812. \@mktitle@i
  1813. \or % acmlarge
  1814. \@mktitle@i
  1815. \or % acmtog
  1816. \@mktitle@i
  1817. \or % sigconf
  1818. \@mktitle@iii
  1819. \or % siggraph
  1820. \@mktitle@iii
  1821. \or % sigplan
  1822. \@mktitle@iii
  1823. \or % sigchi
  1824. \@mktitle@iii
  1825. \or % sigchi-a
  1826. \@mktitle@iv
  1827. \fi
  1828. }
  1829. \def\@titlefont{%
  1830. \ifcase\ACM@format@nr
  1831. \relax % manuscript
  1832. \LARGE\sffamily\bfseries
  1833. \or % acmsmall
  1834. \LARGE\sffamily\bfseries
  1835. \or % acmlarge
  1836. \LARGE\sffamily\bfseries
  1837. \or % acmtog
  1838. \Huge\sffamily
  1839. \or % sigconf
  1840. \Huge\sffamily\bfseries
  1841. \or % siggraph
  1842. \Huge\sffamily\bfseries
  1843. \or % sigplan
  1844. \Huge\bfseries
  1845. \or % sigchi
  1846. \Huge\sffamily\bfseries
  1847. \or % sigchi-a
  1848. \Huge\bfseries
  1849. \fi}
  1850. \def\@subtitlefont{\normalsize
  1851. \ifcase\ACM@format@nr
  1852. \relax % manuscript
  1853. \mdseries
  1854. \or % acmsmall
  1855. \mdseries
  1856. \or % acmlarge
  1857. \mdseries
  1858. \or % acmtog
  1859. \LARGE
  1860. \or % sigconf
  1861. \LARGE\mdseries
  1862. \or % siggraph
  1863. \LARGE\mdseries
  1864. \or % sigplan
  1865. \LARGE\mdseries
  1866. \or % sigchi
  1867. \LARGE\mdseries
  1868. \or % sigchi-a
  1869. \mdseries
  1870. \fi}
  1871. \def\@mktitle@i{\hsize=\textwidth
  1872. \@ACM@title@width=\hsize
  1873. \ifx\@acmBadgeL@image\@empty\else
  1874. \advance\@ACM@title@width by -\@ACM@badge@width
  1875. \advance\@ACM@title@width by -\@ACM@badge@skip
  1876. \fi
  1877. \ifx\@acmBadgeR@image\@empty\else
  1878. \advance\@ACM@title@width by -\@ACM@badge@width
  1879. \advance\@ACM@title@width by -\@ACM@badge@skip
  1880. \fi
  1881. \setbox\mktitle@bx=\vbox{\noindent\@titlefont
  1882. \ifx\@acmBadgeL@image\@empty\else
  1883. \raisebox{-.5\baselineskip}[\z@][\z@]{\href{\@acmBadgeL@url}{%
  1884. \includegraphics[width=\@ACM@badge@width]{\@acmBadgeL@image}}}%
  1885. \hskip\@ACM@badge@skip
  1886. \fi
  1887. \parbox[t]{\@ACM@title@width}{\raggedright
  1888. \@titlefont\noindent
  1889. \@title
  1890. \ifx\@subtitle\@empty\else
  1891. \par\noindent{\@subtitlefont\@subtitle}
  1892. \fi}%
  1893. \ifx\@acmBadgeR@image\@empty\else
  1894. \hskip\@ACM@badge@skip
  1895. \raisebox{-.5\baselineskip}[\z@][\z@]{\href{\@acmBadgeR@url}{%
  1896. \includegraphics[width=\@ACM@badge@width]{\@acmBadgeR@image}}}%
  1897. \fi
  1898. \par\bigskip}}%
  1899. \def\@mktitle@iii{\hsize=\textwidth
  1900. \setbox\mktitle@bx=\vbox{\@titlefont\centering
  1901. \@ACM@title@width=\hsize
  1902. \if@ACM@badge
  1903. \advance\@ACM@title@width by -2\@ACM@badge@width
  1904. \advance\@ACM@title@width by -2\@ACM@badge@skip
  1905. \parbox[b]{\@ACM@badge@width}{\strut
  1906. \ifx\@acmBadgeL@image\@empty\else
  1907. \raisebox{-.5\baselineskip}[\z@][\z@]{\href{\@acmBadgeL@url}{%
  1908. \includegraphics[width=\@ACM@badge@width]{\@acmBadgeL@image}}}%
  1909. \fi}%
  1910. \hskip\@ACM@badge@skip
  1911. \fi
  1912. \parbox[t]{\@ACM@title@width}{\centering\@titlefont
  1913. \@title
  1914. \ifx\@subtitle\@empty\else
  1915. \par\noindent{\@subtitlefont\@subtitle}
  1916. \fi
  1917. }%
  1918. \if@ACM@badge
  1919. \hskip\@ACM@badge@skip
  1920. \parbox[b]{\@ACM@badge@width}{\strut
  1921. \ifx\@acmBadgeR@image\@empty\else
  1922. \raisebox{-.5\baselineskip}[\z@][\z@]{\href{\@acmBadgeR@url}{%
  1923. \includegraphics[width=\@ACM@badge@width]{\@acmBadgeR@image}}}%
  1924. \fi}%
  1925. \fi
  1926. \par\bigskip}}%
  1927. \def\@mktitle@iv{\hsize=\textwidth
  1928. \setbox\mktitle@bx=\vbox{\raggedright\leftskip5pc\@titlefont
  1929. \noindent\leavevmode\leaders\hrule height 2pt\hfill\kern0pt\par
  1930. \noindent\@title
  1931. \ifx\@subtitle\@empty\else
  1932. \par\noindent\@subtitlefont\@subtitle
  1933. \fi
  1934. \par\bigskip}}%
  1935. \newbox\@ACM@commabox
  1936. \def\@ACM@addtoaddress#1{%
  1937. \ifvmode\else
  1938. \if@ACM@affiliation@obeypunctuation\else
  1939. \setbox\@ACM@commabox=\hbox{, }%
  1940. \unskip\cleaders\copy\@ACM@commabox\hskip\wd\@ACM@commabox
  1941. \fi\fi
  1942. #1}
  1943. \def\streetaddress#1{\unskip\ignorespaces}
  1944. \def\postcode#1{\unskip\ignorespaces}
  1945. \if@ACM@journal
  1946. \def\position#1{\unskip\ignorespaces}
  1947. \def\institution#1{\unskip~#1\ignorespaces}
  1948. \def\city#1{\unskip\ignorespaces}
  1949. \def\state#1{\unskip\ignorespaces}
  1950. \newcommand\department[2][0]{\unskip\ignorespaces}
  1951. \def\country#1{\if@ACM@affiliation@obeypunctuation\else, \fi#1\ignorespaces}
  1952. \else
  1953. \def\position#1{\if@ACM@affiliation@obeypunctuation#1\else#1\par\fi}%
  1954. \def\institution#1{\if@ACM@affiliation@obeypunctuation#1\else#1\par\fi}%
  1955. \newcommand\department[2][0]{\if@ACM@affiliation@obeypunctuation
  1956. #2\else#2\par\fi}%
  1957. \let\city\@ACM@addtoaddress
  1958. \let\state\@ACM@addtoaddress
  1959. \let\country\@ACM@addtoaddress
  1960. \fi
  1961. \def\@mkauthors{\begingroup
  1962. \hsize=\textwidth
  1963. \ifcase\ACM@format@nr
  1964. \relax % manuscript
  1965. \@mkauthors@i
  1966. \or % acmsmall
  1967. \@mkauthors@i
  1968. \or % acmlarge
  1969. \@mkauthors@i
  1970. \or % acmtog
  1971. \@mkauthors@i
  1972. \or % sigconf
  1973. \@mkauthors@iii
  1974. \or % siggraph
  1975. \@mkauthors@iii
  1976. \or % sigplan
  1977. \@mkauthors@iii
  1978. \or % sigchi
  1979. \@mkauthors@iii
  1980. \or % sigchi-a
  1981. \@mkauthors@iv
  1982. \fi
  1983. \endgroup
  1984. }
  1985. \def\@authorfont{\Large\sffamily}
  1986. \def\@affiliationfont{\normalsize\normalfont}
  1987. \ifcase\ACM@format@nr
  1988. \relax % manuscript
  1989. \or % acmsmall
  1990. \def\@authorfont{\large\sffamily}
  1991. \def\@affiliationfont{\small\normalfont}
  1992. \or % acmlarge
  1993. \or % acmtog
  1994. \def\@authorfont{\LARGE\sffamily}
  1995. \def\@affiliationfont{\large}
  1996. \or % sigconf
  1997. \def\@authorfont{\LARGE}
  1998. \def\@affiliationfont{\large}
  1999. \or % siggraph
  2000. \def\@authorfont{\normalsize\normalfont}
  2001. \def\@affiliationfont{\normalsize\normalfont}
  2002. \or % sigplan
  2003. \def\@authorfont{\Large\normalfont}
  2004. \def\@affiliationfont{\normalsize\normalfont}
  2005. \or % sigchi
  2006. \def\@authorfont{\bfseries}
  2007. \def\@affiliationfont{\mdseries}
  2008. \or % sigchi-a
  2009. \def\@authorfont{\bfseries}
  2010. \def\@affiliationfont{\mdseries}
  2011. \fi
  2012. \def\@typeset@author@line{%
  2013. \andify\@currentauthors\par\noindent
  2014. \@currentauthors\def\@currentauthors{}%
  2015. \ifx\@currentaffiliations\@empty\else
  2016. \andify\@currentaffiliations
  2017. \unskip, {\@currentaffiliations}\par
  2018. \fi
  2019. \def\@currentaffiliations{}}
  2020. \def\@mkauthors@i{%
  2021. \def\@currentauthors{}%
  2022. \def\@currentaffiliations{}%
  2023. \global\let\and\@typeset@author@line
  2024. \def\@author##1{%
  2025. \ifx\@currentauthors\@empty
  2026. \gdef\@currentauthors{\@authorfont\MakeTextUppercase{##1}}%
  2027. \else
  2028. \g@addto@macro{\@currentauthors}{\and\MakeTextUppercase{##1}}%
  2029. \fi
  2030. \gdef\and{}}%
  2031. \def\email##1##2{}%
  2032. \def\affiliation##1##2{%
  2033. \def\@tempa{##2}\ifx\@tempa\@empty\else
  2034. \ifx\@currentaffiliations\@empty
  2035. \gdef\@currentaffiliations{%
  2036. \setkeys{@ACM@affiliation@}{obeypunctuation=false}%
  2037. \setkeys{@ACM@affiliation@}{##1}%
  2038. \@affiliationfont##2}%
  2039. \else
  2040. \g@addto@macro{\@currentaffiliations}{\and
  2041. \setkeys{@ACM@affiliation@}{obeypunctuation=false}%
  2042. \setkeys{@ACM@affiliation@}{##1}##2}%
  2043. \fi
  2044. \fi
  2045. \global\let\and\@typeset@author@line}%
  2046. \global\setbox\mktitle@bx=\vbox{\noindent\box\mktitle@bx\par\medskip
  2047. \noindent\addresses\@typeset@author@line
  2048. \par\medskip}%
  2049. }
  2050. \newbox\author@bx
  2051. \newdimen\author@bx@wd
  2052. \newskip\author@bx@sep
  2053. \author@bx@sep=1pc\relax
  2054. \def\@typeset@author@bx{\bgroup\hsize=\author@bx@wd\def\and{\par}%
  2055. \global\setbox\author@bx=\vtop{\if@ACM@sigchiamode\else\centering\fi
  2056. \@authorfont\@currentauthors\par\@affiliationfont
  2057. \@currentaffiliation}\egroup
  2058. \box\author@bx\hspace{\author@bx@sep}%
  2059. \gdef\@currentauthors{}%
  2060. \gdef\@currentaffiliation{}}
  2061. \def\@mkauthors@iii{%
  2062. \author@bx@wd=\textwidth\relax
  2063. \advance\author@bx@wd by -\author@bx@sep\relax
  2064. \ifnum\@ACM@authorsperrow>0\relax
  2065. \divide\author@bx@wd by \@ACM@authorsperrow\relax
  2066. \else
  2067. \ifcase\num@authorgroups
  2068. \relax % 0?
  2069. \or % 1=one author per row
  2070. \or % 2=two authors per row
  2071. \divide\author@bx@wd by \num@authorgroups\relax
  2072. \or % 3=three authors per row
  2073. \divide\author@bx@wd by \num@authorgroups\relax
  2074. \or % 4=two authors per row (!)
  2075. \divide\author@bx@wd by 2\relax
  2076. \else % three authors per row
  2077. \divide\author@bx@wd by 3\relax
  2078. \fi
  2079. \fi
  2080. \advance\author@bx@wd by -\author@bx@sep\relax
  2081. \gdef\@currentauthors{}%
  2082. \gdef\@currentaffiliation{}%
  2083. \def\@author##1{\ifx\@currentauthors\@empty
  2084. \gdef\@currentauthors{\par##1}%
  2085. \else
  2086. \g@addto@macro\@currentauthors{\par##1}%
  2087. \fi
  2088. \gdef\and{}}%
  2089. \def\email##1##2{\ifx\@currentaffiliation\@empty
  2090. \gdef\@currentaffiliation{\nolinkurl{##2}}%
  2091. \else
  2092. \g@addto@macro\@currentaffiliation{\par\nolinkurl{##2}}%
  2093. \fi}%
  2094. \def\affiliation##1##2{\ifx\@currentaffiliation\@empty
  2095. \gdef\@currentaffiliation{%
  2096. \setkeys{@ACM@affiliation@}{obeypunctuation=false}%
  2097. \setkeys{@ACM@affiliation@}{##1}##2}%
  2098. \else
  2099. \g@addto@macro\@currentaffiliation{\par
  2100. \setkeys{@ACM@affiliation@}{obeypunctuation=false}%
  2101. \setkeys{@ACM@affiliation@}{##1}##2}%
  2102. \fi
  2103. \global\let\and\@typeset@author@bx
  2104. }%
  2105. \hsize=\textwidth
  2106. \global\setbox\mktitle@bx=\vbox{\noindent
  2107. \box\mktitle@bx\par\medskip\leavevmode
  2108. \lineskip=1pc\relax\centering\hspace*{-1em}%
  2109. \addresses\let\and\@typeset@author@bx\and\par\bigskip}}
  2110. \def\@mkauthors@iv{%
  2111. \author@bx@wd=\columnwidth\relax
  2112. \advance\author@bx@wd by -\author@bx@sep\relax
  2113. \ifnum\@ACM@authorsperrow>0\relax
  2114. \divide\author@bx@wd by \@ACM@authorsperrow\relax
  2115. \else
  2116. \ifcase\num@authorgroups
  2117. \relax % 0?
  2118. \or % 1=one author per row
  2119. \else % 2=two authors per row
  2120. \divide\author@bx@wd by 2\relax
  2121. \fi
  2122. \fi
  2123. \advance\author@bx@wd by -\author@bx@sep\relax
  2124. \gdef\@currentauthors{}%
  2125. \gdef\@currentaffiliation{}%
  2126. \def\@author##1{\ifx\@currentauthors\@empty
  2127. \gdef\@currentauthors{\par##1}%
  2128. \else
  2129. \g@addto@macro\@currentauthors{\par##1}%
  2130. \fi
  2131. \gdef\and{}}%
  2132. \def\email##1##2{\ifx\@currentaffiliation\@empty
  2133. \gdef\@currentaffiliation{\nolinkurl{##2}}%
  2134. \else
  2135. \g@addto@macro\@currentaffiliation{\par\nolinkurl{##2}}%
  2136. \fi}%
  2137. \def\affiliation##1##2{\ifx\@currentaffiliation\@empty
  2138. \gdef\@currentaffiliation{%
  2139. \setkeys{@ACM@affiliation@}{obeypunctuation=false}%
  2140. \setkeys{@ACM@affiliation@}{##1}##2}%
  2141. \else
  2142. \g@addto@macro\@currentaffiliation{\par
  2143. \setkeys{@ACM@affiliation@}{obeypunctuation=false}%
  2144. \setkeys{@ACM@affiliation@}{##1}##2}%
  2145. \fi
  2146. \global\let\and\@typeset@author@bx}%
  2147. \bgroup\hsize=\columnwidth
  2148. \par\raggedright\leftskip=\z@
  2149. \lineskip=1pc\noindent
  2150. \addresses\let\and\@typeset@author@bx\and\par\bigskip\egroup}
  2151. \def\@mkauthorsaddresses{%
  2152. \ifnum\num@authors>1\relax
  2153. Authors' \else Author's \fi
  2154. \ifnum\num@authorgroups>1\relax
  2155. addresses: \else address: \fi
  2156. \bgroup
  2157. \def\streetaddress##1{\unskip\@addpunct, ##1}%
  2158. \def\postcode##1{\unskip\@addpunct, ##1}%
  2159. \def\position##1{\unskip\ignorespaces}%
  2160. \def\institution##1{\unskip\@addpunct, ##1}%
  2161. \def\city##1{\unskip\@addpunct, ##1}%
  2162. \def\state##1{\unskip\@addpunct, ##1}%
  2163. \renewcommand\department[2][0]{\unskip\@addpunct, ##2}%
  2164. \def\country##1{\unskip\@addpunct, ##1}%
  2165. \def\and{\unskip\@addpunct; }%
  2166. \def\@author##1{##1}%
  2167. \def\email##1##2{\unskip\@addpunct, \nolinkurl{##2}}%
  2168. \addresses
  2169. \egroup}
  2170. \def\@setaddresses{}
  2171. \def\@authornotemark{\g@addto@macro\@currentauthors{\footnotemark\relax}}
  2172. \def\@@authornotemark#1{\g@addto@macro\@currentauthors{\footnotemark[#1]}}
  2173. \def\@mkteasers{%
  2174. \ifx\@teaserfigures\@empty\else
  2175. \def\@teaser##1{\par\bigskip\bgroup
  2176. \captionsetup{type=figure}##1\egroup\par}
  2177. \global\setbox\mktitle@bx=\vbox{\noindent\box\mktitle@bx\par
  2178. \noindent\@Description@presentfalse
  2179. \@teaserfigures\par\if@Description@present\else
  2180. \global\@undescribed@imagestrue
  2181. \ClassWarning{\@classname}{A possible image without
  2182. description}\fi
  2183. \medskip}%
  2184. \fi}
  2185. \def\@mkabstract{\bgroup
  2186. \ifx\@abstract\@lempty\else
  2187. {\phantomsection\addcontentsline{toc}{section}{Abstract}%
  2188. \if@ACM@journal
  2189. \everypar{\setbox\z@\lastbox\everypar{}}\small
  2190. \else
  2191. \section*{\abstractname}%
  2192. \fi
  2193. \ignorespaces\@abstract\par}%
  2194. \fi\egroup}
  2195. \def\@mkbibcitation{\bgroup
  2196. \def\@pages@word{\ifnum\getrefnumber{TotPages}=1\relax page\else pages\fi}%
  2197. \def\footnotemark{}%
  2198. \def\\{\unskip{} \ignorespaces}%
  2199. \def\footnote{\ClassError{\@classname}{Please do not use footnotes
  2200. inside a \string\title{} or \string\author{} command! Use
  2201. \string\titlenote{} or \string\authornote{} instead!}}%
  2202. \def\@article@string{\ifx\@acmArticle\@empty{\ }\else,
  2203. Article~\@acmArticle\ \fi}%
  2204. \par\medskip\small\noindent{\bfseries ACM Reference Format:}\par\nobreak
  2205. \noindent\bgroup
  2206. \def\\{\unskip{}, \ignorespaces}\authors\egroup. \@acmYear. \@title
  2207. \ifx\@subtitle\@empty. \else: \@subtitle. \fi
  2208. \if@ACM@nonacm\else
  2209. % The 'nonacm' option disables 'printacmref' by default,
  2210. % and the present \@mkbibcitation definition is never used
  2211. % in this case. The conditional remains useful if the user
  2212. % explicitly sets \settopmatter{printacmref=true}.
  2213. \if@ACM@journal
  2214. \textit{\@journalNameShort}
  2215. \@acmVolume, \@acmNumber \@article@string (\@acmPubDate),
  2216. \ref{TotPages}~\@pages@word.
  2217. \else
  2218. In \textit{\@acmBooktitle}%
  2219. \ifx\@acmEditors\@empty\textit{.}\else
  2220. \andify\@acmEditors\textit{, }\@acmEditors~\@editorsAbbrev.%
  2221. \fi\
  2222. ACM, New York, NY, USA%
  2223. \@article@string\unskip, \ref{TotPages}~\@pages@word.
  2224. \fi
  2225. \fi
  2226. \ifx\@acmDOI\@empty\else\@formatdoi{\@acmDOI}\fi
  2227. \par\egroup}
  2228. \def\@printendtopmatter{\par\bigskip}
  2229. \def\@setthanks{\long\def\thanks##1{\par##1\@addpunct.}\thankses}
  2230. \def\@setauthorsaddresses{\@authorsaddresses\unskip\@addpunct.}
  2231. \RequirePackage{fancyhdr}
  2232. \if@ACM@review
  2233. \newsavebox{\ACM@linecount@bx}
  2234. \newlength\ACM@linecount@bxht
  2235. \newcount\ACM@linecount
  2236. \ACM@linecount\@ne\relax
  2237. \def\ACM@mk@linecount{%
  2238. \savebox{\ACM@linecount@bx}[4em][t]{\parbox[t]{4em}{%
  2239. \setlength{\ACM@linecount@bxht}{0pt}%
  2240. \loop{\color{red}\scriptsize\the\ACM@linecount}\\
  2241. \global\advance\ACM@linecount by \@ne
  2242. \addtolength{\ACM@linecount@bxht}{\baselineskip}%
  2243. \ifdim\ACM@linecount@bxht<\textheight\repeat
  2244. {\color{red}\scriptsize\the\ACM@linecount}\hfill
  2245. \global\advance\ACM@linecount by \@ne}}}
  2246. \fi
  2247. \def\ACM@linecountL{%
  2248. \if@ACM@review
  2249. \ACM@mk@linecount
  2250. \begin{picture}(0,0)%
  2251. \put(-26,-22){\usebox{\ACM@linecount@bx}}%
  2252. \end{picture}%
  2253. \fi}
  2254. \def\ACM@linecountR{%
  2255. \if@ACM@review
  2256. \ACM@mk@linecount
  2257. \begin{picture}(0,0)%
  2258. \put(20,-22){\usebox{\ACM@linecount@bx}}%
  2259. \end{picture}%
  2260. \fi}
  2261. \if@ACM@timestamp
  2262. % Subtracting 30 from \time gives us the effect of rounding down despite
  2263. % \numexpr rounding to nearest
  2264. \newcounter{ACM@time@hours}
  2265. \setcounter{ACM@time@hours}{\numexpr (\time - 30) / 60 \relax}
  2266. \newcounter{ACM@time@minutes}
  2267. \setcounter{ACM@time@minutes}{\numexpr \time - \theACM@time@hours * 60 \relax}
  2268. \newcommand\ACM@timestamp{%
  2269. \footnotesize%
  2270. \ifx\@acmSubmissionID\@empty\relax\else
  2271. Submission ID: \@acmSubmissionID.{ }%
  2272. \fi
  2273. \the\year-\two@digits{\the\month}-\two@digits{\the\day}{ }%
  2274. \two@digits{\theACM@time@hours}:\two@digits{\theACM@time@minutes}{. }%
  2275. Page \thepage\ of \@startPage--\pageref*{TotPages}.%
  2276. }
  2277. \fi
  2278. \def\@shortauthors{%
  2279. \if@ACM@anonymous
  2280. Anon.
  2281. \ifx\@acmSubmissionID\@empty\else Submission Id: \@acmSubmissionID\fi
  2282. \else\shortauthors\fi}
  2283. \def\@headfootfont{\sffamily}
  2284. \fancypagestyle{standardpagestyle}{%
  2285. \fancyhf{}%
  2286. \renewcommand{\headrulewidth}{\z@}%
  2287. \renewcommand{\footrulewidth}{\z@}%
  2288. \def\@acmArticlePage{%
  2289. \ifx\@acmArticle\empty%
  2290. \if@ACM@printfolios\thepage\fi%
  2291. \else%
  2292. \@acmArticle\if@ACM@printfolios:\thepage\fi%
  2293. \fi%
  2294. }
  2295. \ifcase\ACM@format@nr
  2296. \relax % manuscript
  2297. \fancyhead[LE]{\ACM@linecountL\if@ACM@printfolios\thepage\fi}%
  2298. \fancyhead[RO]{\if@ACM@printfolios\thepage\fi}%
  2299. \fancyhead[RE]{\@shortauthors}%
  2300. \fancyhead[LO]{\ACM@linecountL\shorttitle}%
  2301. \if@ACM@nonacm\else%
  2302. \fancyfoot[RO,LE]{\footnotesize Manuscript submitted to ACM}
  2303. \fi%
  2304. \or % acmsmall
  2305. \fancyhead[LE]{\ACM@linecountL\@headfootfont\@acmArticlePage}%
  2306. \fancyhead[RO]{\@headfootfont\@acmArticlePage}%
  2307. \fancyhead[RE]{\@headfootfont\@shortauthors}%
  2308. \fancyhead[LO]{\ACM@linecountL\@headfootfont\shorttitle}%
  2309. \if@ACM@nonacm\else%
  2310. \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
  2311. \@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}%
  2312. \fi%
  2313. \or % acmlarge
  2314. \fancyhead[LE]{\ACM@linecountL\@headfootfont
  2315. \@acmArticlePage\quad\textbullet\quad\@shortauthors}%
  2316. \fancyhead[LO]{\ACM@linecountL}%
  2317. \fancyhead[RO]{\@headfootfont
  2318. \shorttitle\quad\textbullet\quad\@acmArticlePage}%
  2319. \if@ACM@nonacm\else%
  2320. \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
  2321. \@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}%
  2322. \fi%
  2323. \or % acmtog
  2324. \fancyhead[LE]{\ACM@linecountL\@headfootfont
  2325. \@acmArticlePage\quad\textbullet\quad\@shortauthors}%
  2326. \fancyhead[LO]{\ACM@linecountL}%
  2327. \fancyhead[RE]{\ACM@linecountR}%
  2328. \fancyhead[RO]{\@headfootfont
  2329. \shorttitle\quad\textbullet\quad\@acmArticlePage\ACM@linecountR}%
  2330. \if@ACM@nonacm\else%
  2331. \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
  2332. \@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}%
  2333. \fi%
  2334. \else % Proceedings
  2335. \fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}%
  2336. \fancyhead[LO]{\ACM@linecountL\@headfootfont\shorttitle}%
  2337. \fancyhead[RE]{\@headfootfont\@shortauthors\ACM@linecountR}%
  2338. \if@ACM@nonacm\else%
  2339. \fancyhead[LE]{\ACM@linecountL\@headfootfont\acmConference@shortname,
  2340. \acmConference@date, \acmConference@venue}%
  2341. \fancyhead[RO]{\@headfootfont\acmConference@shortname,
  2342. \acmConference@date, \acmConference@venue\ACM@linecountR}%
  2343. \fi%
  2344. \fi
  2345. \if@ACM@sigchiamode
  2346. \fancyheadoffset[L]{\dimexpr(\marginparsep+\marginparwidth)}%
  2347. \fi
  2348. \if@ACM@timestamp
  2349. \fancyfoot[LO,RE]{\ACM@timestamp}
  2350. \fi
  2351. }
  2352. \pagestyle{standardpagestyle}
  2353. \newdimen\@folio@wd
  2354. \@folio@wd=\z@
  2355. \newdimen\@folio@ht
  2356. \@folio@ht=\z@
  2357. \newdimen\@folio@voffset
  2358. \@folio@voffset=\z@
  2359. \def\@folio@max{1}
  2360. \ifcase\ACM@format@nr
  2361. \relax % manuscript
  2362. \or % acmsmall
  2363. \@folio@wd=45.75pt\relax
  2364. \@folio@ht=1.25in\relax
  2365. \@folio@voffset=.2in\relax
  2366. \def\@folio@max{8}
  2367. \or % acmlarge
  2368. \@folio@wd=43.25pt\relax
  2369. \@folio@ht=79pt\relax
  2370. \@folio@voffset=.55in\relax
  2371. \def\@folio@max{10}
  2372. \fi
  2373. \def\@folioblob{\@tempcnta=0\@acmArticleSeq\relax
  2374. \ifnum\@tempcnta=0\relax\else
  2375. \loop
  2376. \ifnum\@tempcnta>\@folio@max\relax
  2377. \advance\@tempcnta by - \@folio@max
  2378. \repeat
  2379. \advance\@tempcnta by -1\relax
  2380. \@tempdima=\@folio@ht\relax
  2381. \multiply\@tempdima by \the\@tempcnta\relax
  2382. \advance\@tempdima by -\@folio@voffset\relax
  2383. \begin{picture}(0,0)
  2384. \makebox[\z@]{\raisebox{-\@tempdima}{%
  2385. \rlap{%
  2386. \raisebox{-0.45\@folio@ht}[\z@][\z@]{%
  2387. \rule{\@folio@wd}{\@folio@ht}}}%
  2388. \parbox{\@folio@wd}{%
  2389. \centering
  2390. \textcolor{white}{\LARGE\sffamily\bfseries\@acmArticle}}}}
  2391. \end{picture}\fi}
  2392. \fancypagestyle{firstpagestyle}{%
  2393. \fancyhf{}%
  2394. \renewcommand{\headrulewidth}{\z@}%
  2395. \renewcommand{\footrulewidth}{\z@}%
  2396. \ifcase\ACM@format@nr
  2397. \relax % manuscript
  2398. \fancyhead[L]{\ACM@linecountL}%
  2399. \fancyfoot[RO,LE]{\if@ACM@printfolios\small\thepage\fi}%
  2400. \if@ACM@nonacm\else%
  2401. \fancyfoot[RE,LO]{\footnotesize Manuscript submitted to ACM}%
  2402. \fi%
  2403. \or % acmsmall
  2404. \if@ACM@nonacm\else%
  2405. \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
  2406. \@acmNumber, Article \@acmArticle. Publication date:
  2407. \@acmPubDate.}%
  2408. \fi%
  2409. \fancyhead[LE]{\ACM@linecountL\@folioblob}%
  2410. \fancyhead[LO]{\ACM@linecountL}%
  2411. \fancyhead[RO]{\@folioblob}%
  2412. \fancyheadoffset[RO,LE]{0.6\@folio@wd}%
  2413. \or % acmlarge
  2414. \if@ACM@nonacm\else%
  2415. \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
  2416. \@acmNumber, Article \@acmArticle. Publication date:
  2417. \@acmPubDate.}%
  2418. \fi%
  2419. \fancyhead[RO]{\@folioblob}%
  2420. \fancyhead[LE]{\ACM@linecountL\@folioblob}%
  2421. \fancyhead[LO]{\ACM@linecountL}%
  2422. \fancyheadoffset[RO,LE]{1.4\@folio@wd}%
  2423. \or % acmtog
  2424. \if@ACM@nonacm\else%
  2425. \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
  2426. \@acmNumber, Article \@acmArticle. Publication date:
  2427. \@acmPubDate.}%
  2428. \fi%
  2429. \fancyhead[L]{\ACM@linecountL}%
  2430. \fancyhead[R]{\ACM@linecountR}%
  2431. \else % Conference proceedings
  2432. \fancyhead[L]{\ACM@linecountL}%
  2433. \fancyhead[R]{\ACM@linecountR}%
  2434. \fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}%
  2435. \fi
  2436. \if@ACM@timestamp
  2437. \ifnum\ACM@format@nr=0\relax % Manuscript
  2438. \fancyfoot[LO,RE]{\ACM@timestamp\quad
  2439. \if@ACM@nonacm\else
  2440. \footnotesize Manuscript submitted to ACM
  2441. \fi}
  2442. \else
  2443. \fancyfoot[LO,RE]{\ACM@timestamp}
  2444. \fi
  2445. \fi
  2446. }
  2447. \let\ACM@ps@plain\ps@plain
  2448. \let\ACM@ps@myheadings\ps@myheadings
  2449. \let\ACM@ps@headings\ps@headings
  2450. \def\ACM@restore@pagestyle{%
  2451. \let\ps@plain\ACM@ps@plain
  2452. \let\ps@myheadings\ACM@ps@myheadings
  2453. \let\ps@headings\ACM@ps@headings}
  2454. \AtBeginDocument{\ACM@restore@pagestyle}
  2455. \def\ACM@NRadjust#1{%
  2456. \begingroup
  2457. \expandafter\ifx\csname Sectionformat\endcsname\relax
  2458. % do nothing when \Sectionformat is unknown
  2459. \def\next{\endgroup #1}%
  2460. \else
  2461. \def\next{\endgroup
  2462. \let\realSectionformat\Sectionformat
  2463. \def\ACM@sect@format@{#1}%
  2464. \let\Sectionformat\ACM@NR@adjustedSectionformat
  2465. %% next lines added 2018-06-17 to ensure section number is styled
  2466. \let\real@adddotafter\@adddotafter
  2467. \let\@adddotafter\ACM@adddotafter
  2468. #1{}% imposes the styles, but nullifies \MakeUppercase
  2469. \let\@adddotafter\real@adddotafter
  2470. }%
  2471. \fi \next
  2472. }
  2473. \def\ACM@NR@adjustedSectionformat#1#2{%
  2474. \realSectionformat{\ACM@sect@format{#1}}{#2}%
  2475. \let\Sectionformat\realSectionformat}
  2476. \DeclareRobustCommand{\ACM@sect@format}{\ACM@sect@format@}
  2477. \def\ACM@sect@format@null#1{#1}
  2478. \let\ACM@sect@format@\ACM@sect@format@null
  2479. \AtBeginDocument{%
  2480. \expandafter\ifx\csname LTX@adddotafter\endcsname\relax
  2481. \let\LTX@adddotafter\@adddotafter
  2482. \fi
  2483. }
  2484. \def\ACM@adddotafter#1{\ifx\relax#1\relax\else\LTX@adddotafter{#1}\fi}
  2485. \renewcommand\section{\@startsection{section}{1}{\z@}%
  2486. {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}%
  2487. {.25\baselineskip}%
  2488. {\ACM@NRadjust\@secfont}}
  2489. \renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
  2490. {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}%
  2491. {.25\baselineskip}%
  2492. {\ACM@NRadjust\@subsecfont}}
  2493. \renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
  2494. {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
  2495. {-3.5\p@}%
  2496. {\ACM@NRadjust{\@subsubsecfont\@adddotafter}}}
  2497. \renewcommand\paragraph{\@startsection{paragraph}{4}{\parindent}%
  2498. {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
  2499. {-3.5\p@}%
  2500. {\ACM@NRadjust{\@parfont\@adddotafter}}}
  2501. \renewcommand\part{\@startsection{part}{9}{\z@}%
  2502. {-10\p@ \@plus -4\p@ \@minus -2\p@}%
  2503. {4\p@}%
  2504. {\ACM@NRadjust\@parfont}}
  2505. \def\section@raggedright{\@rightskip\@flushglue
  2506. \rightskip\@rightskip
  2507. \leftskip\z@skip
  2508. \parindent\z@}
  2509. \def\@secfont{\sffamily\bfseries\section@raggedright\MakeTextUppercase}
  2510. \def\@subsecfont{\sffamily\bfseries\section@raggedright}
  2511. \def\@subsubsecfont{\sffamily\itshape}
  2512. \def\@parfont{\itshape}
  2513. \setcounter{secnumdepth}{3}
  2514. \ifcase\ACM@format@nr
  2515. \relax % manuscript
  2516. \or % acmsmall
  2517. \or % acmlarge
  2518. \def\@secfont{\sffamily\large\section@raggedright\MakeTextUppercase}
  2519. \def\@subsecfont{\sffamily\large\section@raggedright}
  2520. \or % acmtog
  2521. \def\@secfont{\sffamily\large\section@raggedright\MakeTextUppercase}
  2522. \def\@subsecfont{\sffamily\large\section@raggedright}
  2523. \or % sigconf
  2524. \def\@secfont{\bfseries\Large\section@raggedright\MakeTextUppercase}
  2525. \def\@subsecfont{\bfseries\Large\section@raggedright}
  2526. \or % siggraph
  2527. \def\@secfont{\sffamily\bfseries\Large\section@raggedright\MakeTextUppercase}
  2528. \def\@subsecfont{\sffamily\bfseries\Large\section@raggedright}
  2529. \or % sigplan
  2530. \def\@secfont{\bfseries\Large\section@raggedright}
  2531. \def\@subsecfont{\bfseries\section@raggedright}
  2532. \renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
  2533. {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}%
  2534. {.25\baselineskip}%
  2535. {\@subsubsecfont}}
  2536. \def\@subsubsecfont{\bfseries\section@raggedright}
  2537. \renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
  2538. {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
  2539. {-3.5\p@}%
  2540. {\@parfont\@addspaceafter}}
  2541. \def\@parfont{\bfseries\itshape}
  2542. \renewcommand\subparagraph{\@startsection{subparagraph}{5}{\z@}%
  2543. {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
  2544. {-3.5\p@}%
  2545. {\@subparfont\@addspaceafter}}
  2546. \def\@subparfont{\itshape}
  2547. \or % sigchi
  2548. \setcounter{secnumdepth}{1}
  2549. \def\@secfont{\sffamily\bfseries\section@raggedright\MakeTextUppercase}
  2550. \def\@subsecfont{\sffamily\bfseries\section@raggedright}
  2551. \or % sigchi-a
  2552. \setcounter{secnumdepth}{0}
  2553. \def\@secfont{\sffamily\bfseries\section@raggedright\MakeTextUppercase}
  2554. \def\@subsecfont{\sffamily\bfseries\section@raggedright}
  2555. \fi
  2556. \def\@adddotafter#1{#1\@addpunct{.}}
  2557. \def\@addspaceafter#1{#1\@addpunct{\enspace}}
  2558. \providecommand*\@dotsep{4.5}
  2559. \def\@acmplainbodyfont{\itshape}
  2560. \def\@acmplainindent{\parindent}
  2561. \def\@acmplainheadfont{\scshape}
  2562. \def\@acmplainnotefont{\@empty}
  2563. \ifcase\ACM@format@nr
  2564. \relax % manuscript
  2565. \or % acmsmall
  2566. \or % acmlarge
  2567. \or % acmtog
  2568. \or % sigconf
  2569. \or % siggraph
  2570. \or % sigplan
  2571. \def\@acmplainbodyfont{\itshape}
  2572. \def\@acmplainindent{\z@}
  2573. \def\@acmplainheadfont{\bfseries}
  2574. \def\@acmplainnotefont{\normalfont}
  2575. \or % sigchi
  2576. \or % sigchi-a
  2577. \fi
  2578. \newtheoremstyle{acmplain}%
  2579. {.5\baselineskip\@plus.2\baselineskip
  2580. \@minus.2\baselineskip}% space above
  2581. {.5\baselineskip\@plus.2\baselineskip
  2582. \@minus.2\baselineskip}% space below
  2583. {\@acmplainbodyfont}% body font
  2584. {\@acmplainindent}% indent amount
  2585. {\@acmplainheadfont}% head font
  2586. {.}% punctuation after head
  2587. {.5em}% spacing after head
  2588. {\thmname{#1}\thmnumber{ #2}\thmnote{ {\@acmplainnotefont(#3)}}}% head spec
  2589. \def\@acmdefinitionbodyfont{\normalfont}
  2590. \def\@acmdefinitionindent{\parindent}
  2591. \def\@acmdefinitionheadfont{\itshape}
  2592. \def\@acmdefinitionnotefont{\@empty}
  2593. \ifcase\ACM@format@nr
  2594. \relax % manuscript
  2595. \or % acmsmall
  2596. \or % acmlarge
  2597. \or % acmtog
  2598. \or % sigconf
  2599. \or % siggraph
  2600. \or % sigplan
  2601. \def\@acmdefinitionbodyfont{\normalfont}
  2602. \def\@acmdefinitionindent{\z@}
  2603. \def\@acmdefinitionheadfont{\bfseries}
  2604. \def\@acmdefinitionnotefont{\normalfont}
  2605. \or % sigchi
  2606. \or % sigchi-a
  2607. \fi
  2608. \newtheoremstyle{acmdefinition}%
  2609. {.5\baselineskip\@plus.2\baselineskip
  2610. \@minus.2\baselineskip}% space above
  2611. {.5\baselineskip\@plus.2\baselineskip
  2612. \@minus.2\baselineskip}% space below
  2613. {\@acmdefinitionbodyfont}% body font
  2614. {\@acmdefinitionindent}% indent amount
  2615. {\@acmdefinitionheadfont}% head font
  2616. {.}% punctuation after head
  2617. {.5em}% spacing after head
  2618. {\thmname{#1}\thmnumber{ #2}\thmnote{ {\@acmdefinitionnotefont(#3)}}}% head spec
  2619. \theoremstyle{acmplain}
  2620. \AtEndPreamble{%
  2621. \if@ACM@acmthm
  2622. \theoremstyle{acmplain}
  2623. \@ifundefined{theorem}{%
  2624. \newtheorem{theorem}{Theorem}[section]
  2625. }{}
  2626. \@ifundefined{conjecture}{%
  2627. \newtheorem{conjecture}[theorem]{Conjecture}
  2628. }{}
  2629. \@ifundefined{proposition}{%
  2630. \newtheorem{proposition}[theorem]{Proposition}
  2631. }{}
  2632. \@ifundefined{lemma}{%
  2633. \newtheorem{lemma}[theorem]{Lemma}
  2634. }{}
  2635. \@ifundefined{corollary}{%
  2636. \newtheorem{corollary}[theorem]{Corollary}
  2637. }{}
  2638. \theoremstyle{acmdefinition}
  2639. \@ifundefined{example}{%
  2640. \newtheorem{example}[theorem]{Example}
  2641. }{}
  2642. \@ifundefined{definition}{%
  2643. \newtheorem{definition}[theorem]{Definition}
  2644. }{}
  2645. \fi
  2646. \theoremstyle{acmplain}
  2647. }
  2648. \def\@proofnamefont{\scshape}
  2649. \def\@proofindent{\indent}
  2650. \ifcase\ACM@format@nr
  2651. \relax % manuscript
  2652. \or % acmsmall
  2653. \or % acmlarge
  2654. \or % acmtog
  2655. \or % sigconf
  2656. \or % siggraph
  2657. \or % sigplan
  2658. \def\@proofnamefont{\itshape}
  2659. \def\@proofindent{\noindent}
  2660. \or % sigchi
  2661. \or % sigchi-a
  2662. \fi
  2663. \renewenvironment{proof}[1][\proofname]{\par
  2664. \pushQED{\qed}%
  2665. \normalfont \topsep6\p@\@plus6\p@\relax
  2666. \trivlist
  2667. \item[\@proofindent\hskip\labelsep
  2668. {\@proofnamefont #1\@addpunct{.}}]\ignorespaces
  2669. }{%
  2670. \popQED\endtrivlist\@endpefalse
  2671. }
  2672. \newcommand\acksname{Acknowledgments}
  2673. \specialcomment{acks}{%
  2674. \begingroup
  2675. \section*{\acksname}
  2676. \phantomsection\addcontentsline{toc}{section}{\acksname}
  2677. }{%
  2678. \endgroup
  2679. }
  2680. \def\grantsponsor#1#2#3{#2}
  2681. \newcommand\grantnum[3][]{#3%
  2682. \def\@tempa{#1}\ifx\@tempa\@empty\else\space(\url{#1})\fi}
  2683. \AtEndPreamble{%
  2684. \if@ACM@screen
  2685. \includecomment{screenonly}
  2686. \excludecomment{printonly}
  2687. \else
  2688. \excludecomment{screenonly}
  2689. \includecomment{printonly}
  2690. \fi
  2691. \if@ACM@anonymous
  2692. \excludecomment{anonsuppress}
  2693. \excludecomment{acks}
  2694. \else
  2695. \includecomment{anonsuppress}
  2696. \fi}
  2697. \newcommand\showeprint[2][arxiv]{%
  2698. \def\@tempa{#1}%
  2699. \ifx\@tempa\@empty\def\@tempa{arxiv}\fi
  2700. \def\@tempb{arxiv}%
  2701. \ifx\@tempa\@tempb
  2702. arXiv:\href{http://arxiv.org/abs/#2}{#2}\else arXiv:#2%
  2703. \fi}
  2704. \normalsize\normalfont\frenchspacing
  2705. \endinput
  2706. %%
  2707. %% End of file `acmart.cls'.