Commit 15b52932fab088ac6c6c48a60931f1223996ae36

Authored by Paulo Meireles
1 parent 42ecd373

Adding a draft for OpenSym 2017

opensym2017/.gitignore 0 → 100644
... ... @@ -0,0 +1,10 @@
  1 +.DS_Store
  2 +*.sw*
  3 +guide.tex
  4 +*.bak
  5 +*.pdf
  6 +*.aux
  7 +*.log
  8 +*.bbl
  9 +*.blg
  10 +*.out
... ...
opensym2017/Makefile 0 → 100755
... ... @@ -0,0 +1,15 @@
  1 +TARGET=spb
  2 +
  3 +all: $(TARGET).tex
  4 + pdflatex $(TARGET).tex
  5 + bibtex $(TARGET)
  6 + pdflatex $(TARGET).tex
  7 + pdflatex $(TARGET).tex
  8 + evince $(TARGET).pdf &
  9 +
  10 +edit:
  11 + gedit Makefile *.bib *.tex &
  12 +
  13 +clean:
  14 + rm -f $(TARGET).pdf *.out *.aux *.log *.blg *.bbl *.dvi *.ps *.toc *.lot *.lof *.idx *~
  15 +
... ...
opensym2017/README.md 0 → 100644
opensym2017/SIGCHI-Reference-Format.bst 0 → 100755
... ... @@ -0,0 +1,3352 @@
  1 +%%% -*-BibTeX-*-
  2 +%%% ====================================================================
  3 +%%% @BibTeX-style-file{
  4 +%%% author = "Nelson H. F. Beebe, Boris Veytsman and Gerald Murray",
  5 +%%% version = "1.00",
  6 +%%% date = "18 January 2012",
  7 +%%% time = "11:48 EST",
  8 +%%% filename = "ACM-Reference-Format-Journals.bst",
  9 +%%% address = "University of Utah
  10 +%%% Department of Mathematics, 110 LCB
  11 +%%% 155 S 1400 E RM 233
  12 +%%% Salt Lake City, UT 84112-0090
  13 +%%% USA",
  14 +%%% telephone = "+1 801 581 5254",
  15 +%%% FAX = "+1 801 581 4148",
  16 +%%% URL = "http://www.math.utah.edu/~beebe",
  17 +%%% checksum = "available here: http://www.acm.org/publications/latex_style/CRC-journals.txt"
  18 +%%% email = "beebe@math.utah.edu, beebe@acm.org,
  19 +%%% beebe@computer.org, borisv@lk.net, murray@hq.acm.org",
  20 +%%% codetable = "ISO/ASCII",
  21 +%%% keywords = "ACM Transactions bibliography style; BibTeX",
  22 +%%% license = "public domain",
  23 +%%% supported = "yes",
  24 +%%% abstract = "",
  25 +%%% docstring = "The checksum field, above, is produced by WinMD5Free (v1.20)
  26 +%%% available from http://www.winmd5.com/?rid=winmd5,"
  27 +%%% }
  28 +%%% ====================================================================
  29 +
  30 +% "SIGCHI Format" BibTeX style, Forked from ACM-Reference-Format-Journals.bst
  31 +% Modifications 13-FEBURARY-2015 (David Ayman Shamma)
  32 +
  33 +% "ACM Transactions" BibTeX style, ACM-Reference-Format-Journals.bst
  34 +% for BibTeX version 0.99c, LaTeX version 3.141
  35 +% ACM extensions with code cleaned up, extended, and debugged 10--15-Nov-2008
  36 +% Revised 17-APRIL-2008 (Nelson)
  37 +% Revised 13-MARCH-2011 (Boris/Gerry)
  38 +% Revised 23-MARCH-2011 (Boris/Gerry)
  39 +% Revised 27-MARCH-2011 (Boris/Gerry)
  40 +% Revised 15-APRIL-2011 (Boris/Gerry)
  41 +% Revised 27-SEPTEMBER-2011 (Boris)
  42 +%
  43 +%
  44 +% History (by Nelson)
  45 +%
  46 +% Based on 'acmtrans' (for ACM Journals)
  47 +% Date: 28th April 2008
  48 +%
  49 +% 1. Avoid 'repeating' the 'month' values.
  50 +% 2. Avoid incorrectly italicizing the volume number.
  51 +% 3. Avoid non italicizing certain titles (book, inproceedings etc).
  52 +% 4. NO series if there is NO volume.
  53 +% 5. Sorting of reference with first surname.
  54 +% 6. Article no added for Inproceedings.
  55 +%
  56 +% Date: 07th May 2008
  57 +%
  58 +% 1. Abbreviation list added
  59 +%
  60 +% Citation format: [author-last-name year]
  61 +% [author-last-name and author-last-name year]
  62 +% [author-last-name, author-last-name, and author-last-name year]
  63 +% [author-last-name et al. year]
  64 +% [author-last-name]
  65 +% author-last-name [year]
  66 +% [author-last-name and author-last-name]
  67 +% [author-last-name et al.]
  68 +% [year] or [year,year]
  69 +% year or year,year
  70 +%
  71 +% Reference list ordering: alphabetical by author or whatever passes
  72 +% for author in the absence of one.
  73 +%
  74 +% Features of the old acmtrans.bst:
  75 +% =================================
  76 +%
  77 +% - all authors appear last name first.
  78 +% - all pages are listed xx-xx, (no pp.) and are at the end of the reference
  79 +% - publishers are identified as publisher, address
  80 +% - conferences papers (inproceedings) may give city of conference,
  81 +% date of conference, and journal that the proceedings appear in.
  82 +% - months abbreviated to max four letters (eg. Mar.)
  83 +% - volume of a series indicated after the title of the series
  84 +% - editors appear after edited title and are identified by a trailing "Eds."
  85 +% not in parentheses. Editor names are not given in small caps.
  86 +% (unless there is no author line)
  87 +% - names terminated with a period even if there is no first name.
  88 +% - editions are indicated trailing after the work, not in parentheses.
  89 +% - "et al." citations have a protected period to avoid bad spacing (jrh)
  90 +% - "address" required when publisher given
  91 +% - series (roman) and volume are in a sentence separate from (book-)title
  92 +%
  93 +%
  94 +% Features of chicago.bst:
  95 +% =======================
  96 +%
  97 +% - full names used in citations, but abbreviated citations are available
  98 +% (see above)
  99 +% - if an entry has a "month", then the month and year are also printed
  100 +% as part of that bibitem.
  101 +% - all conjunctions use "and" instead of "\&"
  102 +% - major modification from Chicago Manual of Style (13th ed.) is that
  103 +% only the first author in a reference appears last name first-
  104 +% additional authors appear as J. Q. Public.
  105 +% - pages are listed as "pp. xx-xx" in all entry types except
  106 +% article entries.
  107 +% - book, inbook, and manual use "location: publisher" (or organization)
  108 +% for address and publisher. All other types list publishers separately.
  109 +% - "pp." are used to identify page numbers for all entry types except
  110 +% articles.
  111 +% - organization is used as a citation label if neither author nor editor
  112 +% is present (for manuals).
  113 +% - "et al." is used for long author and editor lists, or when "others"
  114 +% is used.
  115 +%
  116 +% Modifications and bug fixes from newapa.bst:
  117 +% ===========================================
  118 +%
  119 +% - added month, year to bib entries if month is present
  120 +% - fixed bug with In proceedings, added necessary comma after title
  121 +% - all conjunctions changed to "and" from "\&"
  122 +% - fixed bug with author labels in my.full.label: "et al." now is
  123 +% generated when "others" is an author name
  124 +% - major modification from Chicago Manual of Style (13th ed.) is that
  125 +% only the first author in a reference appears last name first-
  126 +% additional authors appear as J. Q. Public.
  127 +% - pages are listed as "pp. xx-xx" in all entry types except
  128 +% article entries. Unnecessary (IMHO) "()" around page numbers
  129 +% were removed, and page numbers now don't end with a period.
  130 +% - created chicago.sty for use with this bibstyle (required).
  131 +% - fixed bugs in FUNCTION {format.vol.num.pages} for missing volume,
  132 +% number, and /or pages. Renamed to format.journal.volume.number.
  133 +% - fixed bug in formatting booktitles: additional period an error if
  134 +% book has a volume.
  135 +% - fixed bug: editors usually given redundant period before next clause
  136 +% (format.editors.dot) removed.
  137 +% - added label support for organizations, if both author and editor
  138 +% are missing (from alpha.bst). If organization is too long, then
  139 +% the key field is used for abbreviated citations.
  140 +% - In proceedings or books of several volumes, no comma was written
  141 +% between the "Volume x" and the page numbers (this was intentional
  142 +% in newapa.bst). Fixed.
  143 +% - Some journals may not have volumes/numbers, only month/year (eg.
  144 +% IEEE Computer). Fixed bug in article style that assumed volume/number
  145 +% was always present.
  146 +%
  147 +% Original documentation for newapa.sty:
  148 +% =====================================
  149 +%
  150 +% This version was made by modifying the master file made by
  151 +% Oren Patashnik (PATASHNIK@SCORE.STANFORD.EDU), and the 'named' BibTeX
  152 +% style of Peter F. Patel-Schneider.
  153 +%
  154 +% Copyright (C) 1985, all rights reserved.
  155 +% Copying of this file is authorized only if either
  156 +% (1) you make absolutely no changes to your copy, including name, or
  157 +% (2) if you do make changes, you name it something other than 'newapa.bst'.
  158 +% There are undoubtably bugs in this style. If you make bug fixes,
  159 +% improvements, etc. please let me know. My e-mail address is:
  160 +% spencer@cgrg.ohio.state.edu or 71160.3141@compuserve.com
  161 +%
  162 +% This style was made from 'plain.bst', 'named.bst', and 'apalike.bst',
  163 +% with lots of tweaking to make it look like APA style, along with tips
  164 +% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'.
  165 +%
  166 +%
  167 +% Start of ACM-Reference-Format-Journals.bst
  168 +%
  169 +% Note: Many of the new bibentry 'fields' will only work with the
  170 +% 'ACM-Reference-Format-Journals.bst' file. Legacy .bib files (which will, in all probability,
  171 +% NOT contain these new fields) will _still_ work with the ACM-Reference-Format-Journals.bst.
  172 +%
  173 +%
  174 +ENTRY
  175 + { address
  176 + advisor
  177 + author
  178 + booktitle
  179 + chapter
  180 + city % jtb: added
  181 + date % jtb: added
  182 + edition
  183 + editor
  184 + howpublished
  185 + institution
  186 + journal
  187 + key
  188 + month
  189 + note
  190 + number
  191 + organization
  192 + pages
  193 + publisher
  194 + school
  195 + series
  196 + title
  197 + type
  198 + volume
  199 + year
  200 + % New keys recognized
  201 + issue % UTAH: used in, e.g., ACM SIGSAM Bulletin and ACM Communications in Computer Algebra
  202 + articleno
  203 + day % UTAH: needed for newspapers, weeklies, bi-weeklies
  204 + doi % UTAH
  205 + url % UTAH
  206 + bookpages % UTAH
  207 + numpages
  208 + lastaccessed % UTAH: used only for @Misc{...}
  209 + coden % UTAH
  210 + isbn % UTAH
  211 + isbn-13 % UTAH
  212 + issn % UTAH
  213 + lccn % UTAH
  214 + }
  215 + {}
  216 + { label.year extra.label sort.year sort.label }
  217 +
  218 +INTEGERS { output.state before.all mid.sentence after.sentence after.block }
  219 +
  220 +INTEGERS { show-isbn-10-and-13 } % initialized below in begin.bib
  221 +
  222 +INTEGERS { nameptr namesleft numnames }
  223 +
  224 +INTEGERS { multiresult }
  225 +
  226 +INTEGERS { len }
  227 +
  228 +INTEGERS { last.extra.num }
  229 +
  230 +STRINGS { s t t.org u }
  231 +
  232 +STRINGS { last.label next.extra }
  233 +
  234 +STRINGS { p1 p2 p3 page.count }
  235 +
  236 +FUNCTION { dump.stack.1 }
  237 +{
  238 + duplicate$ "STACK[top] = [" swap$ * "]" * warning$
  239 +}
  240 +
  241 +FUNCTION { dump.stack.2 }
  242 +{
  243 + duplicate$ "STACK[top ] = [" swap$ * "]" * warning$
  244 + swap$
  245 + duplicate$ "STACK[top-1] = [" swap$ * "]" * warning$
  246 + swap$
  247 +}
  248 +
  249 +FUNCTION { empty.or.unknown }
  250 +{
  251 + %% Examine the top stack entry, and push 1 if it is empty, or
  252 + %% consists only of whitespace, or is a string beginning with two
  253 + %% queries (??), and otherwise, push 0.
  254 + %%
  255 + %% This function provides a replacement for empty$, with the
  256 + %% convenient feature that unknown values marked by two leading
  257 + %% queries are treated the same as missing values, and thus, do not
  258 + %% appear in the output .bbl file, and yet, their presence in .bib
  259 + %% file(s) serves to mark values which are temporarily missing, but
  260 + %% are expected to be filled in eventually once more data is
  261 + %% obtained. The TeX User Group and BibNet bibliography archives
  262 + %% make extensive use of this practice.
  263 + %%
  264 + %% An empty string cannot serve the same purpose, because just as in
  265 + %% statistics data processing, an unknown value is not the same as an
  266 + %% empty value.
  267 + %%
  268 + %% At entry: stack = ... top:[string]
  269 + %% At exit: stack = ... top:[0 or 1]
  270 +
  271 + duplicate$ empty$
  272 + { pop$ #1 }
  273 + { #1 #2 substring$ "??" = }
  274 + if$
  275 +}
  276 +
  277 +FUNCTION { writeln }
  278 +{
  279 + %% In BibTeX style files, the sequences
  280 + %%
  281 + %% ... "one" "two" output
  282 + %% ... "one" "two" output.xxx
  283 + %%
  284 + %% ship "one" to the output file, possibly following by punctuation,
  285 + %% leaving the stack with
  286 + %%
  287 + %% ... "two"
  288 + %%
  289 + %% There is thus a one-string lag in output processing that must be
  290 + %% carefully handled to avoid duplicating a string in the output
  291 + %% file. Unless otherwise noted, all output.xxx functions leave
  292 + %% just one new string on the stack, and that model should be born
  293 + %% in mind when reading or writing function code.
  294 + %%
  295 + %% BibTeX's asynchronous buffering of output from strings from the
  296 + %% stack is confusing because newline$ bypasses the buffer. It
  297 + %% would have been so much easier for newline to be a character
  298 + %% rather than a state of the output-in-progress.
  299 + %%
  300 + %% The documentation in btxhak.dvi is WRONG: it says
  301 + %%
  302 + %% newline$ Writes onto the bbl file what's accumulated in the
  303 + %% output buffer. It writes a blank line if and only
  304 + %% if the output buffer is empty. Since write$ does
  305 + %% reasonable line breaking, you should use this
  306 + %% function only when you want a blank line or an
  307 + %% explicit line break.
  308 + %%
  309 + %% write$ Pops the top (string) literal and writes it on the
  310 + %% output buffer (which will result in stuff being
  311 + %% written onto the bbl file when the buffer fills
  312 + %% up).
  313 + %%
  314 + %% Examination of the BibTeX source code shows that write$ does
  315 + %% indeed behave as claimed, but newline$ sends a newline character
  316 + %% directly to the output file, leaving the stack unchanged. The
  317 + %% first line "Writes onto ... buffer." is therefore wrong.
  318 + %%
  319 + %% The original BibTeX style files almost always use "write$ newline$"
  320 + %% in that order, so it makes sense to hide that pair in a private
  321 + %% function like this one, named after a statement in Pascal,
  322 + %% the programming language embedded in the BibTeX Web program.
  323 +
  324 + write$ % output top-of-stack string
  325 + newline$ % immediate write of newline (not via stack)
  326 +}
  327 +
  328 +FUNCTION { init.state.consts }
  329 +{
  330 + #0 'before.all :=
  331 + #1 'mid.sentence :=
  332 + #2 'after.sentence :=
  333 + #3 'after.block :=
  334 +}
  335 +
  336 +FUNCTION { output.nonnull }
  337 +{ % Stack in: ... R S T Stack out: ... R T File out: S<comma><space>
  338 + 's :=
  339 + output.state mid.sentence =
  340 + {
  341 + ", " * write$
  342 + }
  343 + {
  344 + output.state after.block =
  345 + {
  346 + add.period$ writeln
  347 + "\newblock " write$
  348 + }
  349 + {
  350 + output.state before.all =
  351 + {
  352 + write$
  353 + }
  354 + {
  355 + add.period$ " " * write$
  356 + }
  357 + if$
  358 + }
  359 + if$
  360 + mid.sentence 'output.state :=
  361 + }
  362 + if$
  363 + s
  364 +}
  365 +
  366 +FUNCTION { output.nonnull.dot.space }
  367 +{ % Stack in: ... R S T Stack out: ... R T File out: S<dot><space>
  368 + 's :=
  369 + output.state mid.sentence = % { "<DEBUG output.nonnull.dot.space>. " * write$ }
  370 + {
  371 + ". " * write$
  372 + }
  373 + {
  374 + output.state after.block =
  375 + {
  376 + add.period$ writeln "\newblock " write$
  377 + }
  378 + {
  379 + output.state before.all =
  380 + {
  381 + write$
  382 + }
  383 + {
  384 + add.period$ " " * write$
  385 + }
  386 + if$
  387 + }
  388 + if$
  389 + mid.sentence 'output.state :=
  390 + }
  391 + if$
  392 + s
  393 +}
  394 +
  395 +FUNCTION { output.nonnull.remove }
  396 +{ % Stack in: ... R S T Stack out: ... R T File out: S<space>
  397 + 's :=
  398 + output.state mid.sentence =
  399 + {
  400 + " " * write$
  401 + }
  402 + {
  403 + output.state after.block =
  404 + {
  405 + add.period$ writeln "\newblock " write$
  406 + }
  407 + {
  408 + output.state before.all =
  409 + {
  410 + write$
  411 + }
  412 + {
  413 + add.period$ " " * write$
  414 + }
  415 + if$
  416 + }
  417 + if$
  418 + mid.sentence 'output.state :=
  419 + }
  420 + if$
  421 + s
  422 +}
  423 +
  424 +FUNCTION { output.nonnull.removenospace }
  425 +{ % Stack in: ... R S T Stack out: ... R T File out: S
  426 + 's :=
  427 + output.state mid.sentence =
  428 + {
  429 + "" * write$
  430 + }
  431 + {
  432 + output.state after.block =
  433 + {
  434 + add.period$ writeln "\newblock " write$
  435 + }
  436 + {
  437 + output.state before.all =
  438 + {
  439 + write$
  440 + }
  441 + {
  442 + add.period$ " " * write$
  443 + }
  444 + if$
  445 + }
  446 + if$
  447 + mid.sentence 'output.state :=
  448 + }
  449 + if$
  450 + s
  451 +}
  452 +
  453 +FUNCTION { output }
  454 +{ % discard top token if empty, else like output.nonnull
  455 + duplicate$ empty.or.unknown
  456 + 'pop$
  457 + 'output.nonnull
  458 + if$
  459 +}
  460 +
  461 +FUNCTION { output.dot.space }
  462 +{ % discard top token if empty, else like output.nonnull.dot.space
  463 + duplicate$ empty.or.unknown
  464 + 'pop$
  465 + 'output.nonnull.dot.space
  466 + if$
  467 +}
  468 +
  469 +FUNCTION { output.removenospace }
  470 +{ % discard top token if empty, else like output.nonnull.removenospace
  471 + duplicate$ empty.or.unknown
  472 + 'pop$
  473 + 'output.nonnull.removenospace
  474 + if$
  475 +}
  476 +
  477 +FUNCTION { output.check }
  478 +{ % like output, but warn if key name on top-of-stack is not set
  479 + 't :=
  480 + duplicate$ empty.or.unknown
  481 + { pop$ "empty " t * " in " * cite$ * warning$ }
  482 + 'output.nonnull
  483 + if$
  484 +}
  485 +
  486 +FUNCTION { output.check.dot.space }
  487 +{ % like output.dot.space, but warn if key name on top-of-stack is not set
  488 + 't :=
  489 + duplicate$ empty.or.unknown
  490 + { pop$ "empty " t * " in " * cite$ * warning$ }
  491 + 'output.nonnull.dot.space
  492 + if$
  493 +}
  494 +
  495 +FUNCTION { fin.block }
  496 +{ % functionally, but not logically, identical to fin.entry
  497 + add.period$
  498 + writeln
  499 +}
  500 +
  501 +FUNCTION { fin.entry }
  502 +{
  503 + add.period$
  504 + writeln
  505 +}
  506 +
  507 +FUNCTION { new.sentence }
  508 +{ % update sentence state, with neither output nor stack change
  509 + output.state after.block =
  510 + 'skip$
  511 + {
  512 + output.state before.all =
  513 + 'skip$
  514 + { after.sentence 'output.state := }
  515 + if$
  516 + }
  517 + if$
  518 +}
  519 +
  520 +FUNCTION { fin.sentence }
  521 +{
  522 + add.period$
  523 + write$
  524 + new.sentence
  525 + ""
  526 +}
  527 +
  528 +FUNCTION { new.block }
  529 +{
  530 + output.state before.all =
  531 + 'skip$
  532 + { after.block 'output.state := }
  533 + if$
  534 +}
  535 +
  536 +FUNCTION { output.coden } % UTAH
  537 +{ % output non-empty CODEN as one-line sentence (stack untouched)
  538 + coden empty.or.unknown
  539 + { }
  540 + { "\showCODEN{" coden * "}" * writeln }
  541 + if$
  542 +}
  543 +
  544 +FUNCTION { format.articleno }
  545 +{
  546 + articleno empty.or.unknown
  547 + { "" }
  548 + {
  549 + numpages empty.or.unknown
  550 + { "articleno field, but no numpages field, in " cite$ * warning$ }
  551 + { }
  552 + if$
  553 + "Article " articleno *
  554 + }
  555 + if$
  556 +}
  557 +
  558 +FUNCTION { format.year }
  559 +{ % push year string or "????" onto output stack
  560 + %% Because year is a mandatory field, we always force SOMETHING
  561 + %% to be output
  562 + year empty.or.unknown
  563 + { "????" }
  564 + { year }
  565 + if$
  566 +}
  567 +
  568 +FUNCTION { format.day.month }
  569 +{ % push "day month " or "month " or "" onto output stack
  570 + day empty.or.unknown
  571 + {
  572 + month empty.or.unknown
  573 + { "" }
  574 + { month " " *}
  575 + if$
  576 + }
  577 + {
  578 + month empty.or.unknown
  579 + { "" }
  580 + { day " " * month * " " *}
  581 + if$
  582 + }
  583 + if$
  584 +}
  585 +
  586 +FUNCTION { format.day.month.year } % UTAH
  587 +{ % if month is empty, push "" else push "(MON.)" or "(DD MON.)"
  588 + % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
  589 + % acm-*.bst addition: prefix parenthesized date string with
  590 + % ", Article nnn "
  591 + articleno empty.or.unknown
  592 + { "" }
  593 + { ", " format.articleno * }
  594 + if$
  595 + " (" * format.day.month * format.year * ")" *
  596 +}
  597 +
  598 +FUNCTION { output.day.month.year } % UTAH
  599 +{ % if month is empty value, do nothing; else output stack top and
  600 + % leave with new top string "(MON.)" or "(DD MON.)"
  601 + % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
  602 + format.day.month.year
  603 + output.nonnull.remove
  604 +}
  605 +
  606 +FUNCTION { strip.doi } % UTAH
  607 +{ % Strip any Web address prefix to recover the bare DOI, leaving the
  608 + % result on the output stack, as recommended by CrossRef DOI
  609 + % documentation.
  610 + % For example, reduce "http://doi.acm.org/10.1145/1534530.1534545" to
  611 + % "10.1145/1534530.1534545". That is later typeset and displayed as
  612 + % doi:10.1145/1534530.1534545 as the LAST item in the reference list
  613 + % entry. Publisher Web sites wrap this with a suitable link to a real
  614 + % URL to resolve the DOI, and the master http://dx.doi.org/ address is
  615 + % preferred, since publisher-specific URLs can disappear in response
  616 + % to economic events. All journals are encouraged by the DOI
  617 + % authorities to use that typeset format and link procedures for
  618 + % uniformity across all publications that include DOIs in reference
  619 + % lists.
  620 + % The numeric prefix is guaranteed to start with "10.", so we use
  621 + % that as a test.
  622 + doi #1 #3 substring$ "10." =
  623 + { doi }
  624 + {
  625 + doi #1 #7 substring$ "http://" =
  626 + {
  627 + doi #8 doi text.length$ #7 - substring$ 't := % get modifiable copy of rest of DOI
  628 +
  629 + "INTERNAL STYLE-FILE ERROR" 's :=
  630 +
  631 + % search for next "/" and assign its suffix to s
  632 +
  633 + { t text.length$ }
  634 + {
  635 + t #1 #1 substring$ "/" =
  636 + {
  637 + % save rest of string as true DOI (should be 10.xxxx/yyyy)
  638 + t #2 t text.length$ #1 - substring$ 's :=
  639 + "" 't := % empty string t terminates the loop
  640 + }
  641 + {
  642 + % discard first character and continue loop: t <= substring(t,2,last)
  643 + t #2 t text.length$ #1 - substring$ 't :=
  644 + }
  645 + if$
  646 + }
  647 + while$
  648 +
  649 + % check for valid DOI (should be 10.xxxx/yyyy)
  650 + s #1 #3 substring$ "10." =
  651 + { }
  652 + { "unrecognized DOI substring " s * " in DOI value [" * doi * "]" * warning$ }
  653 + if$
  654 +
  655 + s % push the stripped DOI on the output stack
  656 +
  657 + }
  658 + {
  659 + "unrecognized DOI value [" doi * "]" * warning$
  660 + doi % push the unrecognized original DOI on the output stack
  661 + }
  662 + if$
  663 + }
  664 + if$
  665 +}
  666 +
  667 +%
  668 +% Change by BV: added standard prefix to URL
  669 +%
  670 +FUNCTION { output.doi } % UTAH
  671 +{ % output non-empty DOI as one-line sentence (stack untouched)
  672 + doi empty.or.unknown
  673 + { }
  674 + {
  675 + %% NB: We want URLs at beginning of line to reduce likelihood of
  676 + %% BibTeX's nasty line wrapping after column 79, which then requires
  677 + %% manual (or automated) editing of the .bbl file to repair.
  678 + %% The \url{} macro strips percent-newlines, and is thus safe in
  679 + %% the presence of the line wrapping, but \path|...| and
  680 + %% \verb|...| do not.
  681 + "\showDOI{%" writeln
  682 + "\url{http://dx.doi.org/" strip.doi * "}}" * writeln
  683 + }
  684 + if$
  685 +}
  686 +
  687 +FUNCTION { output.isbn } % UTAH
  688 +{ % output non-empty ISBN-10 and/or ISBN-13 as one-line sentences (stack untouched)
  689 + show-isbn-10-and-13
  690 + {
  691 + %% show both 10- and 13-digit ISBNs
  692 + isbn empty.or.unknown
  693 + { }
  694 + {
  695 + "\showISBNx{" isbn * "}" * writeln
  696 + }
  697 + if$
  698 + isbn-13 empty.or.unknown
  699 + { }
  700 + {
  701 + "\showISBNxiii{" isbn-13 * "}" * writeln
  702 + }
  703 + if$
  704 + }
  705 + {
  706 + %% show 10-digit ISBNs only if 13-digit ISBNs not available
  707 + isbn-13 empty.or.unknown
  708 + {
  709 + isbn empty.or.unknown
  710 + { }
  711 + {
  712 + "\showISBNx{" isbn * "}" * writeln
  713 + }
  714 + if$
  715 + }
  716 + {
  717 + "\showISBNxiii{" isbn-13 * "}" * writeln
  718 + }
  719 + if$
  720 + }
  721 + if$
  722 +}
  723 +
  724 +FUNCTION { output.issn } % UTAH
  725 +{ % output non-empty ISSN as one-line sentence (stack untouched)
  726 + issn empty.or.unknown
  727 + { }
  728 + { "\showISSN{" issn * "}" * writeln }
  729 + if$
  730 +}
  731 +
  732 +FUNCTION { output.issue }
  733 +{ % output non-empty issue number as a one-line sentence (stack untouched)
  734 + issue empty.or.unknown
  735 + { }
  736 + { "Issue " issue * "." * writeln }
  737 + if$
  738 +}
  739 +
  740 +FUNCTION { output.lccn } % UTAH
  741 +{ % return with stack untouched
  742 + lccn empty.or.unknown
  743 + { }
  744 + { "\showLCCN{" lccn * "}" * writeln }
  745 + if$
  746 +}
  747 +
  748 +FUNCTION { output.note } % UTAH
  749 +{ % return with stack empty
  750 + note empty.or.unknown
  751 + { }
  752 + { "\shownote{" note add.period$ * "}" * writeln }
  753 + if$
  754 +}
  755 +
  756 +FUNCTION { output.note.check } % UTAH
  757 +{ % return with stack empty
  758 + note empty.or.unknown
  759 + { "empty note in " cite$ * warning$ }
  760 + { "\shownote{" note add.period$ * "}" * writeln }
  761 + if$
  762 +}
  763 +
  764 +%
  765 +% Changes by BV 2011/04/15. Do not output
  766 +% url if doi is defined
  767 +%
  768 +FUNCTION { output.url } % UTAH
  769 +{ % return with stack untouched
  770 + % output URL and associated lastaccessed fields
  771 + doi empty.or.unknown
  772 + {
  773 + url empty.or.unknown
  774 + { }
  775 + {
  776 + %% NB: We want URLs at beginning of line to reduce likelihood of
  777 + %% BibTeX's nasty line wrapping after column 79, which would require
  778 + %% manual (or automated) editing of the .bbl file to repair. However,
  779 + %% the \url{} macro handles the unwrapping job automatically.
  780 + "\showURL{%" writeln
  781 + lastaccessed empty.or.unknown
  782 + { "" }
  783 + { "Retrieved " lastaccessed * " from " * }
  784 + if$
  785 +
  786 + %% The URL field may contain a semicolon-separated list of Web
  787 + %% addresses, and we locate and wrap each of them in \url{...}.
  788 + %% The simplistic approach of putting the entire list into the
  789 + %% macro argument is that the semicolons are typeset in a
  790 + %% typewriter font, and no space follows them.
  791 + %%
  792 + %% We therefore replace the original code
  793 + %% "\url{" * url * "}}" * writeln
  794 + %% with this character-at-a-time loop:
  795 +
  796 + "\url{" *
  797 +
  798 + url 't := % get modifiable copy of URL list
  799 +
  800 + { t text.length$ }
  801 + {
  802 + t #1 #1 substring$ ";" =
  803 + { % then split argument at separator
  804 + "};" * writeln
  805 + "\url{"
  806 + }
  807 + { % else concatenate nonblank character to argument
  808 + t #1 #1 substring$ " " =
  809 + { }
  810 + { t #1 #1 substring$ * }
  811 + if$
  812 + }
  813 + if$
  814 +
  815 + t #2 t text.length$ #1 - substring$ 't :=
  816 + }
  817 + while$
  818 +
  819 + "}}" * writeln
  820 + }
  821 + if$
  822 + }
  823 + { }
  824 + if$
  825 +}
  826 +
  827 +FUNCTION { output.year.check }
  828 +{ % warn if year empty, else output top string and leave " YEAR<label>" on stack in mid-sentence
  829 + year empty.or.unknown
  830 + { "empty year in " cite$ * warning$ }
  831 + { write$
  832 + " " year * extra.label *
  833 + mid.sentence 'output.state :=
  834 + }
  835 + if$
  836 +}
  837 +
  838 +FUNCTION { not }
  839 +{
  840 + { #0 }
  841 + { #1 }
  842 + if$
  843 +}
  844 +
  845 +FUNCTION { and }
  846 +{
  847 + 'skip$
  848 + { pop$ #0 }
  849 + if$
  850 +}
  851 +
  852 +FUNCTION { or }
  853 +{
  854 + { pop$ #1 }
  855 + 'skip$
  856 + if$
  857 +}
  858 +
  859 +FUNCTION { le }
  860 +{
  861 + %% test whether first number is less than or equal to second number
  862 + %% stack in: n1 n2
  863 + %% stack out: if n1 <= n2 then 1 else 0
  864 +
  865 + %% "DEBUG: le " cite$ * warning$
  866 + > { #0 } { #1 } if$
  867 +}
  868 +
  869 +FUNCTION { ge }
  870 +{
  871 + %% test whether first number is greater than or equal to second number
  872 + %% stack in: n1 n2
  873 + %% stack out: if n1 >= n2 then 1 else 0
  874 +
  875 + %% "DEBUG: ge " cite$ * warning$
  876 + < { #0 } { #1 } if$
  877 +}
  878 +
  879 +FUNCTION { is.leading.digit }
  880 +{
  881 + %% test whether first character of string is a digit
  882 + %% stack in: string
  883 + %% stack out: if first-char-is-digit then 1 else 0
  884 +
  885 + #1 #1 substring$ % replace string by string[1:1]
  886 + duplicate$ % string[1:1] string[1:1]
  887 + chr.to.int$
  888 + "0" chr.to.int$ swap$ le % "0" <= string[1:1] --> 0-or-1
  889 + swap$ % 0-or-1 string[1:1]
  890 + chr.to.int$
  891 + "9" chr.to.int$ le % string[1:1} <= "9" --> 0-or-1
  892 + and
  893 +}
  894 +
  895 +FUNCTION { skip.digits }
  896 +{
  897 + %% skip over leading digits in string
  898 + %% stack in: string
  899 + %% stack out: rest-of-string leading-digits
  900 +
  901 + %% "DEBUG: enter skip.digits " cite$ * warning$
  902 +
  903 + %% dump.stack.1
  904 +
  905 + duplicate$
  906 + 't :=
  907 + 't.org :=
  908 + "" 'u :=
  909 +
  910 + { t text.length$ }
  911 + {
  912 + %% "=================DEBUG: skip.digits t = [" t * "]" * warning$
  913 + t is.leading.digit
  914 + { t #2 t text.length$ #1 - substring$ }
  915 + {
  916 + t 'u :=
  917 + ""
  918 + }
  919 + if$
  920 + 't :=
  921 + }
  922 + while$
  923 +
  924 + u % rest of string
  925 + t.org #1 t.org text.length$ u text.length$ - substring$ % leading digits
  926 +
  927 + %% "DEBUG: t.org = [" t.org * "]" * warning$
  928 + %% "DEBUG: u = [" u * "]" * warning$
  929 +
  930 + %% dump.stack.2
  931 +
  932 + %% "DEBUG: leave skip.digits " cite$ * warning$
  933 +}
  934 +
  935 +FUNCTION { skip.nondigits }
  936 +{
  937 + %% skip over leading nondigits in string
  938 + %% stack in: string
  939 + %% stack out: rest-of-string
  940 +
  941 + %% "DEBUG: enter skip.nondigits " cite$ * warning$
  942 +
  943 + 't :=
  944 + "" 'u :=
  945 +
  946 + { t text.length$ }
  947 + {
  948 + %% "=================DEBUG: skip.nondigits t = [" t * "]" * warning$
  949 + t is.leading.digit
  950 + {
  951 + t 'u :=
  952 + ""
  953 + }
  954 + { t #2 t text.length$ #1 - substring$ }
  955 + if$
  956 + 't :=
  957 + }
  958 + while$
  959 +
  960 + u % rest of string
  961 +
  962 + %% dump.stack.1
  963 + %% "DEBUG: leave skip.nondigits " cite$ * warning$
  964 +}
  965 +
  966 +FUNCTION { parse.next.number }
  967 +{
  968 + %% stack in: string
  969 + %% stack out: rest-of-string next-numeric-part-of-string
  970 + %% Example:
  971 + %% stack in: "123:1--123:59"
  972 + %% stack out: ":1--123:59" "123"
  973 +
  974 + 's :=
  975 + s skip.nondigits 's :=
  976 + s skip.digits
  977 +}
  978 +
  979 +FUNCTION { reduce.pages.to.page.count }
  980 +{
  981 + %% Stack in: arbitrary-and-unused
  982 + %% Stack out: unchanged
  983 + %%
  984 + %% For the new-style pagination with article number and numpages or
  985 + %% pages, we expect to have BibTeX entries containing something like
  986 + %% articleno = "17",
  987 + %% pages = "1--23",
  988 + %% with output "Article 17, 23 pages",
  989 + %% or
  990 + %% articleno = "17",
  991 + %% numpages = "23",
  992 + %% with output "Article 17, 23 pages",
  993 + %% or
  994 + %% articleno = "17",
  995 + %% pages = "17:1--17:23",
  996 + %% with output "Article 17, 23 pages",
  997 + %%
  998 + %% If articleno is missing or empty, then we should output "1--23",
  999 + %% "23" (with a warning of a missing articleno), or "17:1--17:23",
  1000 + %% respectively.
  1001 +
  1002 + %% "DEBUG: enter reduce.pages.to.page.count " cite$ * warning$
  1003 +
  1004 + %% "DEBUG: pages = [" pages * "]" * warning$
  1005 +
  1006 + pages
  1007 + parse.next.number 'p1 :=
  1008 + parse.next.number 'p2 :=
  1009 + parse.next.number 'p3 :=
  1010 + parse.next.number 'page.count :=
  1011 +
  1012 + duplicate$
  1013 + empty.or.unknown
  1014 + { }
  1015 + {
  1016 + duplicate$ "unexpected trailing garbage [" swap$ *
  1017 + "] after n:p1--n:p2 in pages = [" *
  1018 + pages *
  1019 + "] in " *
  1020 + cite$ *
  1021 + warning$
  1022 + }
  1023 + if$
  1024 +
  1025 + pop$
  1026 +
  1027 + %% "DEBUG: reduce.pages.to.page.count: "
  1028 + %% " p1 = " p1 * *
  1029 + %% " p2 = " p2 * *
  1030 + %% " p3 = " p3 * *
  1031 + %% " p4 = " page.count * *
  1032 + %% " in " cite$ * * warning$
  1033 +
  1034 + p1 p3 = p2 "1" = and numpages empty.or.unknown and
  1035 + { "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$ }
  1036 + {
  1037 + numpages empty.or.unknown
  1038 + { pages }
  1039 + { numpages }
  1040 + if$
  1041 + 'page.count :=
  1042 + }
  1043 + if$
  1044 +
  1045 + p1 "1" = p3 empty.or.unknown and numpages empty.or.unknown and
  1046 + {
  1047 + p2 'page.count :=
  1048 + "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$
  1049 + }
  1050 + {
  1051 + numpages empty.or.unknown
  1052 + { pages }
  1053 + { numpages }
  1054 + if$
  1055 + 'page.count :=
  1056 + }
  1057 + if$
  1058 +
  1059 + %% "DEBUG: leave reduce.pages.to.page.count " cite$ * warning$
  1060 +}
  1061 +
  1062 +FUNCTION { new.block.checkb }
  1063 +{ % issue a new.block only if at least one of top two stack strings is not empty
  1064 + empty.or.unknown
  1065 + swap$ empty.or.unknown
  1066 + and
  1067 + 'skip$
  1068 + 'new.block
  1069 + if$
  1070 +}
  1071 +
  1072 +FUNCTION { field.or.null }
  1073 +{ % convert empty value to null string, else return value
  1074 + duplicate$ empty.or.unknown
  1075 + { pop$ "" }
  1076 + 'skip$
  1077 + if$
  1078 +}
  1079 +
  1080 +FUNCTION { emphasize }
  1081 +{ % emphasize a non-empty top string on the stack (WITHOUT italic correction)
  1082 + duplicate$ empty.or.unknown
  1083 + { pop$ "" }
  1084 + { "{\em " swap$ * "}" * }
  1085 + if$
  1086 +}
  1087 +
  1088 +FUNCTION { emphasize.with.italic.correction }
  1089 +{ % convert empty string to null string, or emphasize with a trailing italic correction
  1090 + duplicate$ empty.or.unknown
  1091 + { pop$ "" }
  1092 + { "{\em " swap$ * "\/}" * }
  1093 + if$
  1094 +}
  1095 +
  1096 +FUNCTION { comma }
  1097 +{ % convert empty string to null string, or brace string and add trailing comma
  1098 + duplicate$ empty.or.unknown
  1099 + { pop$ "" }
  1100 + { "{" swap$ * "}," * }
  1101 + if$
  1102 +}
  1103 +
  1104 +FUNCTION { format.names }
  1105 +{
  1106 + % Format bibliographical entries with the first author last name first,
  1107 + % and subsequent authors with initials followed by last name.
  1108 + % All names are formatted in this routine.
  1109 +
  1110 + 's :=
  1111 + #1 'nameptr := % nameptr = 1;
  1112 + s num.names$ 'numnames := % numnames = num.name$(s);
  1113 + numnames 'namesleft :=
  1114 + { namesleft #0 > }
  1115 + { nameptr #1 =
  1116 + %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
  1117 + %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
  1118 + {"{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
  1119 + {"{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
  1120 + if$
  1121 + nameptr #1 >
  1122 + {
  1123 + namesleft #1 >
  1124 + { ", " * t * }
  1125 + {
  1126 + numnames #2 >
  1127 + { "," * }
  1128 + 'skip$
  1129 + if$
  1130 + t "{\sc others}" =
  1131 + { " {et~al\mbox{.}}" * } % jrh: avoid spacing problems
  1132 + { " {and} " * t * } % from Chicago Manual of Style
  1133 + if$
  1134 + }
  1135 + if$
  1136 + }
  1137 + 't
  1138 + if$
  1139 + nameptr #1 + 'nameptr := % nameptr += 1;
  1140 + namesleft #1 - 'namesleft := % namesleft =- 1;
  1141 + }
  1142 + while$
  1143 +}
  1144 +
  1145 +FUNCTION { my.full.label }
  1146 +{
  1147 + 's :=
  1148 + #1 'nameptr := % nameptr = 1;
  1149 + s num.names$ 'numnames := % numnames = num.name$(s);
  1150 + numnames 'namesleft :=
  1151 + { namesleft #0 > }
  1152 +
  1153 + { s nameptr "{vv~}{ll}" format.name$ 't := % get the next name
  1154 + nameptr #1 >
  1155 + {
  1156 + namesleft #1 >
  1157 + { ", " * t * }
  1158 + {
  1159 + numnames #2 >
  1160 + { "," * }
  1161 + 'skip$
  1162 + if$
  1163 + t "others" =
  1164 + { " et~al\mbox{.}" * } % jrh: avoid spacing problems
  1165 + { " and " * t * } % from Chicago Manual of Style
  1166 + if$
  1167 + }
  1168 + if$
  1169 + }
  1170 + 't
  1171 + if$
  1172 + nameptr #1 + 'nameptr := % nameptr += 1;
  1173 + namesleft #1 - 'namesleft := % namesleft =- 1;
  1174 + }
  1175 + while$
  1176 +
  1177 +}
  1178 +
  1179 +FUNCTION { format.names.fml }
  1180 +{
  1181 + % Format names in "familiar" format, with first initial followed by
  1182 + % last name. Like format.names, ALL names are formatted.
  1183 + % jtb: The names are NOT put in small caps
  1184 +
  1185 + 's :=
  1186 + #1 'nameptr := % nameptr = 1;
  1187 + s num.names$ 'numnames := % numnames = num.name$(s);
  1188 + numnames 'namesleft :=
  1189 + { namesleft #0 > }
  1190 +
  1191 + {
  1192 + "{" s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ * "}" * 't :=
  1193 +
  1194 + nameptr #1 >
  1195 + {
  1196 + namesleft #1 >
  1197 + { ", " * t * }
  1198 + {
  1199 + numnames #2 >
  1200 + { "," * }
  1201 + 'skip$
  1202 + if$
  1203 + t "{others}" =
  1204 + { " {et~al\mbox{.}}" * }
  1205 + { " {and} " * t * }
  1206 + if$
  1207 + }
  1208 + if$
  1209 + }
  1210 + 't
  1211 + if$
  1212 + nameptr #1 + 'nameptr := % nameptr += 1;
  1213 + namesleft #1 - 'namesleft := % namesleft =- 1;
  1214 + }
  1215 + while$
  1216 +}
  1217 +
  1218 +FUNCTION { format.authors }
  1219 +{
  1220 + author empty.or.unknown
  1221 + { "" }
  1222 + { author format.names add.period$} % jtb: add period if none before
  1223 + if$
  1224 +}
  1225 +
  1226 +FUNCTION { format.key }
  1227 +{
  1228 + empty.or.unknown
  1229 + { key field.or.null }
  1230 + { "" }
  1231 + if$
  1232 +}
  1233 +
  1234 +FUNCTION { format.no.key }
  1235 +{
  1236 + empty.or.unknown
  1237 + { "" }
  1238 + { "" }
  1239 + if$
  1240 +}
  1241 +
  1242 +FUNCTION { format.editors.fml }
  1243 +{
  1244 + % Format editor names for use in the "in" types: inbook, incollection,
  1245 + % inproceedings: first initial, then last names. When editors are the
  1246 + % LABEL for an entry, then format.editor is used which lists editors
  1247 + % by last name first.
  1248 +
  1249 + editor empty.or.unknown
  1250 + { "" }
  1251 + {
  1252 + editor format.names.fml editor num.names$ #1 >
  1253 + { " (Eds.)" * }
  1254 + { " (Ed.)" * }
  1255 + if$
  1256 + }
  1257 + if$
  1258 +}
  1259 +
  1260 +FUNCTION { format.editors }
  1261 +{ % format editor names for use in labels, last names first.
  1262 + editor empty.or.unknown
  1263 + { "" }
  1264 + {
  1265 + editor format.names
  1266 + editor num.names$ #1 >
  1267 + { " (Eds.)." * }
  1268 + { " (Ed.)." * }
  1269 + if$
  1270 + }
  1271 + if$
  1272 +}
  1273 +
  1274 +FUNCTION { format.articletitle }
  1275 +{
  1276 + title empty.or.unknown
  1277 + { "" }
  1278 + % Use this to preserve lettercase in titles:
  1279 + { "\showarticletitle{" title * "}" * }
  1280 + % Use this for downcase title style:
  1281 + % { \showarticletitle{" title "t" change.case$ * "}" * }
  1282 + if$
  1283 +}
  1284 +
  1285 +FUNCTION { format.title }
  1286 +{
  1287 + title empty.or.unknown
  1288 + { "" }
  1289 + % Use this to preserve lettercase in titles:
  1290 + { title }
  1291 + % Use this for downcase title style:
  1292 + % { title "t" change.case$ }
  1293 + if$
  1294 +}
  1295 +
  1296 +FUNCTION { n.dashify }
  1297 +{
  1298 + 't :=
  1299 + ""
  1300 + { t empty.or.unknown not }
  1301 + {
  1302 + t #1 #1 substring$ "-" =
  1303 + {
  1304 + t #1 #2 substring$ "--" = not
  1305 + { "--" *
  1306 + t #2 global.max$ substring$ 't :=
  1307 + }
  1308 + {
  1309 + { t #1 #1 substring$ "-" = }
  1310 + {
  1311 + "-" *
  1312 + t #2 global.max$ substring$ 't :=
  1313 + }
  1314 + while$
  1315 + }
  1316 + if$
  1317 + }
  1318 + {
  1319 + t #1 #1 substring$ *
  1320 + t #2 global.max$ substring$ 't :=
  1321 + }
  1322 + if$
  1323 + }
  1324 + while$
  1325 +}
  1326 +
  1327 +FUNCTION { format.btitle }
  1328 +{
  1329 + edition empty.or.unknown
  1330 + { title emphasize }
  1331 + { title empty.or.unknown
  1332 + { title emphasize } % jtb: what is this supposed to do ?!?
  1333 + { "{\em " title * "\/} (" * edition "l" change.case$ * " ed.)" * } % jtb: no parens for ed.
  1334 + if$
  1335 + }
  1336 + if$
  1337 +}
  1338 +
  1339 +FUNCTION { format.emphasize.booktitle }
  1340 +{ % push "" or "{\em booktitle}" or "{\em booktitle}, (second ed.)" on stack
  1341 + edition empty.or.unknown
  1342 + { booktitle emphasize }
  1343 + { booktitle empty.or.unknown
  1344 + { "" }
  1345 + { "{\em " booktitle * "} (" * edition "l" change.case$ * " ed.)" * }
  1346 + if$
  1347 + }
  1348 + if$
  1349 +}
  1350 +
  1351 +FUNCTION { format.city }
  1352 +{
  1353 + % jtb: if the preceding string (the title of the conference) is non-empty,
  1354 + % jtb: append the location, otherwise leave empty (so as to trigger the
  1355 + % jtb: error message in output.check
  1356 +
  1357 + duplicate$ empty.or.unknown
  1358 + { }
  1359 + {
  1360 + city empty.or.unknown
  1361 + {
  1362 + date empty.or.unknown
  1363 + { }
  1364 + { " (" * date * ")" * }
  1365 + if$
  1366 + }
  1367 + {
  1368 + date empty.or.unknown
  1369 + { " (" * city * ")" * }
  1370 + { " (" * city * ", " * date * ")" * }
  1371 + if$
  1372 + }
  1373 + if$
  1374 + }
  1375 + if$
  1376 +}
  1377 +
  1378 +FUNCTION { tie.or.space.connect }
  1379 +{
  1380 + duplicate$ text.length$ #3 <
  1381 + { "~" }
  1382 + { " " }
  1383 + if$
  1384 + swap$ * *
  1385 +}
  1386 +
  1387 +FUNCTION { either.or.check }
  1388 +{
  1389 + empty.or.unknown
  1390 + 'pop$
  1391 + { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  1392 + if$
  1393 +}
  1394 +
  1395 +FUNCTION { format.bvolume }
  1396 +{
  1397 + % jtb: If there is a series, this is added and the volume trails after it.
  1398 + % jtb: Otherwise, "Vol" is Capitalized.
  1399 +
  1400 + volume empty.or.unknown
  1401 + { "" }
  1402 + {
  1403 + series empty.or.unknown
  1404 + { "Vol." volume tie.or.space.connect}
  1405 + { series ", " * "Vol." volume tie.or.space.connect *}
  1406 + if$
  1407 + "volume and number" number either.or.check
  1408 + }
  1409 + if$
  1410 +}
  1411 +
  1412 +FUNCTION { format.bvolume.noseries }
  1413 +{
  1414 + volume empty.or.unknown
  1415 + { "" }
  1416 + {
  1417 + series empty.or.unknown
  1418 + { "Vol." volume tie.or.space.connect}
  1419 + { "Vol." volume tie.or.space.connect}
  1420 +% { series ", " * "Vol." volume tie.or.space.connect *}
  1421 + if$
  1422 + "volume and number" number either.or.check
  1423 + }
  1424 + if$
  1425 +}
  1426 +
  1427 +FUNCTION { format.series }
  1428 +{
  1429 + series empty.or.unknown
  1430 + {""}
  1431 + {" {\em (" * series ")}" *}
  1432 + if$
  1433 +}
  1434 +
  1435 +FUNCTION { format.number.series }
  1436 +{
  1437 + volume empty.or.unknown
  1438 + {
  1439 + number empty.or.unknown
  1440 + {
  1441 + volume empty.or.unknown
  1442 + { "" }
  1443 + {
  1444 + series empty.or.unknown
  1445 + { "" }
  1446 + { " (" series * ")" * }
  1447 + if$
  1448 + }
  1449 + if$
  1450 + } % { series field.or.null }
  1451 + {
  1452 + output.state mid.sentence =
  1453 + { "Number" } % gnp - changed to mixed case always
  1454 + { "Number" }
  1455 + if$
  1456 + number tie.or.space.connect series empty.or.unknown
  1457 + { "there's a number but no series in " cite$ * warning$ }
  1458 + { " in " * series * }
  1459 + if$
  1460 + }
  1461 + if$
  1462 + }
  1463 + {
  1464 + ""
  1465 + }
  1466 + if$
  1467 +}
  1468 +
  1469 +FUNCTION { multi.page.check }
  1470 +{
  1471 + 't :=
  1472 + #0 'multiresult :=
  1473 + { multiresult not
  1474 + t empty.or.unknown not
  1475 + and
  1476 + }
  1477 + { t #1 #1 substring$
  1478 + duplicate$ "-" =
  1479 + swap$ duplicate$ "," =
  1480 + swap$ "+" =
  1481 + or or
  1482 + { #1 'multiresult := }
  1483 + { t #2 global.max$ substring$ 't := }
  1484 + if$
  1485 + }
  1486 + while$
  1487 + multiresult
  1488 +}
  1489 +
  1490 +FUNCTION { format.pages }
  1491 +{
  1492 + pages empty.or.unknown
  1493 + { "" }
  1494 + {
  1495 + pages multi.page.check
  1496 + { pages n.dashify } % gnp - removed () % jtb: removed pp.
  1497 + { pages }
  1498 + if$
  1499 + }
  1500 + if$
  1501 +}
  1502 +
  1503 +FUNCTION { format.pages.check.without.articleno }
  1504 +{ %% format pages field only if articleno is absent
  1505 + %% Stack out: pages-specification
  1506 + numpages missing$ pages missing$ and
  1507 + { "page numbers missing in both pages and numpages fields in " cite$ * warning$ }
  1508 + { }
  1509 + if$
  1510 +
  1511 + articleno empty.or.unknown
  1512 + {
  1513 + pages missing$
  1514 + { numpages }
  1515 + { format.pages }
  1516 + if$
  1517 + }
  1518 + { "" }
  1519 + if$
  1520 +}
  1521 +
  1522 +FUNCTION { format.pages.check }
  1523 +{
  1524 + pages empty.or.unknown
  1525 + { "page numbers missing in " cite$ * warning$ "" }
  1526 + { pages n.dashify }
  1527 + if$
  1528 +}
  1529 +
  1530 +FUNCTION { format.bookpages }
  1531 +{
  1532 + bookpages empty.or.unknown
  1533 + { "" }
  1534 + { bookpages "book pages" tie.or.space.connect }
  1535 + if$
  1536 +}
  1537 +
  1538 +FUNCTION { format.named.pages }
  1539 +{
  1540 + pages empty.or.unknown
  1541 + { "" }
  1542 + { format.pages "pages" tie.or.space.connect }
  1543 + if$
  1544 +}
  1545 +
  1546 +%
  1547 +% Changed by Boris Veytsman, 2011-03-13
  1548 +% Now the word "pages" is printed even if
  1549 +% there field pages is not empty.
  1550 +%
  1551 +
  1552 +FUNCTION { format.page.count }
  1553 +{
  1554 + page.count empty.or.unknown
  1555 + { "" }
  1556 + {
  1557 + articleno empty.or.unknown
  1558 + { "numpages field, but no articleno field, in " cite$ * warning$ }
  1559 + { }
  1560 + if$
  1561 + page.count "pages" tie.or.space.connect
  1562 + }
  1563 + if$
  1564 +}
  1565 +
  1566 +FUNCTION { format.articleno.numpages }
  1567 +{
  1568 + %% There are seven possible outputs, depending on which fields are set.
  1569 + %%
  1570 + %% These four are handled here:
  1571 + %%
  1572 + %% articleno, numpages, pages -> "Article articleno-value, numpages-value pages"
  1573 + %% articleno, numpages -> "Article articleno-value, numpages-value pages"
  1574 + %% articleno, pages -> "Article articleno-value, reduced-pages-value pages"
  1575 + %% articleno -> "Article articleno-value" and warn about missing numpages
  1576 + %%
  1577 + %% The remaining three have already been handled by
  1578 + %% format.pages.check.without.articleno:
  1579 + %%
  1580 + %% numpages, pages -> "pages-value"
  1581 + %% numpages -> "numpages-value"
  1582 + %% pages -> "pages-value"
  1583 +
  1584 + articleno empty.or.unknown
  1585 + {
  1586 + numpages empty.or.unknown
  1587 + { }
  1588 + { "require articleno with numpages field in " cite$ * warning$ }
  1589 + if$
  1590 + ""
  1591 + }
  1592 + {
  1593 + numpages empty.or.unknown
  1594 + {
  1595 + pages empty.or.unknown
  1596 + {
  1597 + "require pages or numpages fields with articleno field in " cite$ * warning$
  1598 + "" 'page.count :=
  1599 + }
  1600 + { reduce.pages.to.page.count }
  1601 + if$
  1602 + }
  1603 + { numpages 'page.count := }
  1604 + if$
  1605 +
  1606 + %% The Article number is now handled in format.day.month.year because
  1607 + %% ACM prefers the style "Digital Libraries 12, 3, Article 5 (July 2008)"
  1608 + %% over "Digital Libraries 12, 3 (July 2008), Article 5"
  1609 + %% format.articleno output
  1610 + format.page.count
  1611 + }
  1612 + if$
  1613 +}
  1614 +
  1615 +FUNCTION { format.journal.volume.number.day.month.year }
  1616 +{
  1617 + % By Young (and Spencer)
  1618 + % GNP - fixed bugs with missing volume, number, and/or pages
  1619 + %
  1620 + % Format journal, volume, number, pages for article types.
  1621 + %
  1622 + journal empty.or.unknown
  1623 + { "no journal in " cite$ * warning$
  1624 + "" }
  1625 +% { journal emphasize.with.italic.correction }
  1626 + {
  1627 + journal "Journal of the ACM" =
  1628 + { "{\it J. ACM}" }
  1629 + {
  1630 + journal "American Mathematical Society Translations" =
  1631 + { "{\it Amer. Math. Soc. Transl.}" }
  1632 + {
  1633 + journal "Bulletin of the American Mathematical Society" =
  1634 + { "{\it Bull. Amer. Math. Soc.}" }
  1635 + {
  1636 + journal "Proceedings of the American Mathematical Society" =
  1637 + { "{\it Proc. Amer. Math. Soc.}" }
  1638 + {
  1639 + journal "Transactions of the American Mathematical Society" =
  1640 + { "{\it Trans. Amer. Math. Soc.}" }
  1641 + {
  1642 + journal "Communications of the {ACM}" =
  1643 + { "{\it Commun. {ACM}}" }
  1644 + {
  1645 + journal "{ACM} Computing Surveys" =
  1646 + { "{\it Comput. Surveys}" }
  1647 + {
  1648 + journal "{ACM} Transactions on Mathematical Software" =
  1649 + { "{\it {ACM} Trans. Math. Software}" }
  1650 + {
  1651 + journal "{ACM} {SIGNUM} Newsletter" =
  1652 + { "{\it {ACM} {SIGNUM} Newslett.}" }
  1653 + {
  1654 + journal "American Journal of Sociology" =
  1655 + { "{\it Amer. J. Sociology}" }
  1656 + {
  1657 + journal "Journal of the American Statistical Association" =
  1658 + { "{\it J. Amer. Statist. Assoc.}" }
  1659 + {
  1660 + journal "Applied Mathematics and Computation" =
  1661 + { "{\it Appl. Math. Comput.}" }
  1662 + {
  1663 + journal "American Mathematical Monthly" =
  1664 + { "{\it Amer. Math. Monthly}" }
  1665 + {
  1666 + journal "British Journal of Mathematical and Statistical Psychology" =
  1667 + { "{\it Brit. J. Math. Statist. Psych.}" }
  1668 + {
  1669 + journal "Canadian Mathematical Bulletin" =
  1670 + { "{\it Canad. Math. Bull.}" }
  1671 + {
  1672 + journal "Journal of Computational and Applied Mathematics" =
  1673 + { "{\it J. Comput. Appl. Math.}" }
  1674 + {
  1675 + journal "Journal of Computational Physics" =
  1676 + { "{\it J. Comput. Phys.}" }
  1677 + {
  1678 + journal "Computers and Structures" =
  1679 + { "{\it Comput. \& Structures}" }
  1680 + {
  1681 + journal "The Computer Journal" =
  1682 + { "{\it Comput. J.}" }
  1683 + {
  1684 + journal "Journal of Computer and System Sciences" =
  1685 + { "{\it J. Comput. System Sci.}" }
  1686 + {
  1687 + journal "Contemporary Mathematics" =
  1688 + { "{\it Contemp. Math.}" }
  1689 + {
  1690 + journal "Crelle's Journal" =
  1691 + { "{\it Crelle's J.}" }
  1692 + {
  1693 + journal "Giornale di Mathematiche" =
  1694 + { "{\it Giorn. Mat.}" }
  1695 + {
  1696 + journal "{IEEE} Transactions on Computers" =
  1697 + { "{\it {IEEE} Trans. Comput.}" }
  1698 + {
  1699 + journal "{IEEE} Transactions on Automatic Control" =
  1700 + { "{\it {IEEE} Trans. Automat. Control}" }
  1701 + {
  1702 + journal "Proceedings of the {IEEE}" =
  1703 + { "{\it Proc. {IEEE}}" }
  1704 + {
  1705 + journal "{IEEE} Transactions on Aerospace and Electronic Systems" =
  1706 + { "{\it {IEEE} Trans. Aerospace Electron. Systems}" }
  1707 + {
  1708 + journal "{IMA} Journal of Numerical Analysis" =
  1709 + { "{\it {IMA} J. Numer. Anal.}" }
  1710 + {
  1711 + journal "Information Processing Letters" =
  1712 + { "{\it Inform. Process. Lett.}" }
  1713 + {
  1714 + journal "Journal of the Institute of Mathematics and its Applications" =
  1715 + { "{\it J. Inst. Math. Appl.}" }
  1716 + {
  1717 + journal "International Journal of Control" =
  1718 + { "{\it Internat. J. Control}" }
  1719 + {
  1720 + journal "International Journal for Numerical Methods in Engineering" =
  1721 + { "{\it Internat. J. Numer. Methods Engrg.}" }
  1722 + {
  1723 + journal "International Journal of Supercomputing Applications" =
  1724 + { "{\it Internat. J. Supercomputing Applic.}" }
  1725 + {
  1726 + journal "Journal of Research of the National Bureau of Standards" =
  1727 + { "{\it J. Res. Nat. Bur. Standards}" }
  1728 + {
  1729 + journal "Linear Algebra and its Applications" =
  1730 + { "{\it Linear Algebra Appl.}" }
  1731 + {
  1732 + journal "Journal of Mathematical Analysis and Applications" =
  1733 + { "{\it J. Math. Anal. Appl.}" }
  1734 + {
  1735 + journal "Mathematische Annalen" =
  1736 + { "{\it Math. Ann.}" }
  1737 + {
  1738 + journal "Journal of Mathematical Physics" =
  1739 + { "{\it J. Math. Phys.}" }
  1740 + {
  1741 + journal "Mathematics of Computation" =
  1742 + { "{\it Math. Comp.}" }
  1743 + {
  1744 + journal "Mathematica Scandinavica" =
  1745 + { "{\it Math. Scand.}" }
  1746 + {
  1747 + journal "Mathematical Tables and Other Aids to Computation" =
  1748 + { "{\it Math. Tables Aids Comput.}" }
  1749 + {
  1750 + journal "Numerische Mathematik" =
  1751 + { "{\it Numer. Math.}" }
  1752 + {
  1753 + journal "Pacific Journal of Mathematics" =
  1754 + { "{\it Pacific J. Math.}" }
  1755 + {
  1756 + journal "Journal of Parallel and Distributed Computing" =
  1757 + { "{\it J. Parallel and Distrib. Comput.}" }
  1758 + {
  1759 + journal "Parallel Computing" =
  1760 + { "{\it Parallel Comput.}" }
  1761 + {
  1762 + journal "Philosophical Magazine" =
  1763 + { "{\it Philos. Mag.}" }
  1764 + {
  1765 + journal "Proceedings of the National Academy of Sciences of the USA" =
  1766 + { "{\it Proc. Nat. Acad. Sci. U. S. A.}" }
  1767 + {
  1768 + journal "Quarterly Journal of Mathematics, Oxford, Series (2)" =
  1769 + { "{\it Quart. J. Math. Oxford Ser. (2)}" }
  1770 + {
  1771 + journal "Quarterly of Applied Mathematics" =
  1772 + { "{\it Quart. Appl. Math.}" }
  1773 + {
  1774 + journal "Review of the International Statisical Institute" =
  1775 + { "{\it Rev. Inst. Internat. Statist.}" }
  1776 + {
  1777 + journal "Journal of the Society for Industrial and Applied Mathematics" =
  1778 + { "{\it J. Soc. Indust. Appl. Math.}" }
  1779 + {
  1780 + journal "Journal of the Society for Industrial and Applied Mathematics, Series B, Numerical Analysis" =
  1781 + { "{\it J. Soc. Indust. Appl. Math. Ser. B Numer. Anal.}" }
  1782 + {
  1783 + journal "{SIAM} Journal on Algebraic and Discrete Methods" =
  1784 + { "{\it {SIAM} J. Algebraic Discrete Methods}" }
  1785 + {
  1786 + journal "{SIAM} Journal on Applied Mathematics" =
  1787 + { "{\it {SIAM} J. Appl. Math.}" }
  1788 + {
  1789 + journal "{SIAM} Journal on Computing" =
  1790 + { "{\it {SIAM} J. Comput.}" }
  1791 + {
  1792 + journal "{SIAM} Journal on Matrix Analysis and Applications" =
  1793 + { "{\it {SIAM} J. Matrix Anal. Appl.}" }
  1794 + {
  1795 + journal "{SIAM} Journal on Numerical Analysis" =
  1796 + { "{\it {SIAM} J. Numer. Anal.}" }
  1797 + {
  1798 + journal "{SIAM} Review" =
  1799 + { "{\it {SIAM} Rev.}" }
  1800 + {
  1801 + journal "{SIAM} Journal on Scientific and Statistical Computing" =
  1802 + { "{\it {SIAM} J. Sci. Statist. Comput.}" }
  1803 + {
  1804 + journal "Software Practice and Experience" =
  1805 + { "{\it Software Prac. Experience}" }
  1806 + {
  1807 + journal "Statistical Science" =
  1808 + { "{\it Statist. Sci.}" }
  1809 + {
  1810 + journal "{USSR} Computational Mathematics and Mathematical Physics" =
  1811 + { "{\it {U. S. S. R.} Comput. Math. and Math. Phys.}" }
  1812 + {
  1813 + journal "Journal of {VLSI} and Computer Systems" =
  1814 + { "{\it J. {VLSI} Comput. Syst.}" }
  1815 + {
  1816 + journal "Zeitschrift fur Angewandte Mathematik und Mechanik" =
  1817 + { "{\it Z. Angew. Math. Mech.}" }
  1818 + {
  1819 + journal "Zeitschrift fur Angewandte Mathematik und Physik" =
  1820 + { "{\it Z. Angew. Math. Phys.}" }
  1821 + {
  1822 + journal "ACM Computing Surveys" =
  1823 + { "{\it Comput. Surveys}" }
  1824 + {
  1825 + journal "ACM Transactions on Mathematical Software" =
  1826 + { "{\it ACM Trans. Math. Software}" }
  1827 + {
  1828 + journal "ACM {SIGNUM} Newsletter" =
  1829 + { "{\it ACM {SIGNUM} Newslett.}" }
  1830 + {
  1831 + journal "IEEE Transactions on Computers" =
  1832 + { "{\it IEEE Trans. Comput.}" }
  1833 + {
  1834 + journal "IEEE Transactions on Automatic Control" =
  1835 + { "{\it IEEE Trans. Automat. Control}" }
  1836 + {
  1837 + journal "Proceedings of the IEEE" =
  1838 + { "{\it Proc. IEEE}" }
  1839 + {
  1840 + journal "IEEE Transactions on Aerospace and Electronic Systems" =
  1841 + { "{\it IEEE Trans. Aerospace Electron. Systems}" }
  1842 + {
  1843 + journal "IMA Journal of Numerical Analysis" =
  1844 + { "{\it IMA J. Numer. Anal.}" }
  1845 + {
  1846 + journal "SIAM Journal on Algebraic and Discrete Methods" =
  1847 + { "{\it SIAM J. Algebraic Discrete Methods}" }
  1848 + {
  1849 + journal "SIAM Journal on Applied Mathematics" =
  1850 + { "{\it SIAM J. Appl. Math.}" }
  1851 + {
  1852 + journal "SIAM Journal on Computing" =
  1853 + { "{\it SIAM J. Comput.}" }
  1854 + {
  1855 + journal "SIAM Journal on Matrix Analysis and Applications" =
  1856 + { "{\it SIAM J. Matrix Anal. Appl.}" }
  1857 + {
  1858 + journal "SIAM Journal on Numerical Analysis" =
  1859 + { "{\it SIAM J. Numer. Anal.}" }
  1860 + {
  1861 + journal "SIAM Review" =
  1862 + { "{\it SIAM Rev.}" }
  1863 + {
  1864 + journal "SIAM Journal on Scientific and Statistical Computing" =
  1865 + { "{\it SIAM J. Sci. Statist. Comput.}" }
  1866 + {
  1867 + journal "USSR Computational Mathematics and Mathematical Physics" =
  1868 + { "{\it U. S. S. R. Comput. Math. and Math. Phys.}" }
  1869 + {
  1870 + journal "Journal of VLSI and Computer Systems" =
  1871 + { "{\it J. VLSI Comput. Syst.}" }
  1872 + {
  1873 + journal "Communications of the ACM" =
  1874 + { "{\it Commun. ACM}" }
  1875 + %% If no match with cases needing special handling, just output journal name
  1876 + { journal emphasize.with.italic.correction }
  1877 + if$
  1878 + }
  1879 + if$
  1880 + }
  1881 + if$
  1882 + }
  1883 + if$
  1884 + }
  1885 + if$
  1886 + }
  1887 + if$
  1888 + }
  1889 + if$
  1890 + }
  1891 + if$
  1892 + }
  1893 + if$
  1894 + }
  1895 + if$
  1896 + }
  1897 + if$
  1898 + }
  1899 + if$
  1900 + }
  1901 + if$
  1902 + }
  1903 + if$
  1904 + }
  1905 + if$
  1906 + }
  1907 + if$
  1908 + }
  1909 + if$
  1910 + }
  1911 + if$
  1912 + }
  1913 + if$
  1914 + }
  1915 + if$
  1916 + }
  1917 + if$
  1918 + }
  1919 + if$
  1920 + }
  1921 + if$
  1922 + }
  1923 + if$
  1924 + }
  1925 + if$
  1926 + }
  1927 + if$
  1928 + }
  1929 + if$
  1930 + }
  1931 + if$
  1932 + }
  1933 + if$
  1934 + }
  1935 + if$
  1936 + }
  1937 + if$
  1938 + }
  1939 + if$
  1940 + }
  1941 + if$
  1942 + }
  1943 + if$
  1944 + }
  1945 + if$
  1946 + }
  1947 + if$
  1948 + }
  1949 + if$
  1950 + }
  1951 + if$
  1952 + }
  1953 + if$
  1954 + }
  1955 + if$
  1956 + }
  1957 + if$
  1958 + }
  1959 + if$
  1960 + }
  1961 + if$
  1962 + }
  1963 + if$
  1964 + }
  1965 + if$
  1966 + }
  1967 + if$
  1968 + }
  1969 + if$
  1970 + }
  1971 + if$
  1972 + }
  1973 + if$
  1974 + }
  1975 + if$
  1976 + }
  1977 + if$
  1978 + }
  1979 + if$
  1980 + }
  1981 + if$
  1982 + }
  1983 + if$
  1984 + }
  1985 + if$
  1986 + }
  1987 + if$
  1988 + }
  1989 + if$
  1990 + }
  1991 + if$
  1992 + }
  1993 + if$
  1994 + }
  1995 + if$
  1996 + }
  1997 + if$
  1998 + }
  1999 + if$
  2000 + }
  2001 + if$
  2002 + }
  2003 + if$
  2004 + }
  2005 + if$
  2006 + }
  2007 + if$
  2008 + }
  2009 + if$
  2010 + }
  2011 + if$
  2012 + }
  2013 + if$
  2014 + }
  2015 + if$
  2016 + }
  2017 + if$
  2018 + }
  2019 + if$
  2020 + }
  2021 + if$
  2022 + }
  2023 + if$
  2024 + }
  2025 + if$
  2026 + }
  2027 + if$
  2028 + }
  2029 + if$
  2030 + }
  2031 + if$
  2032 + }
  2033 + if$
  2034 + }
  2035 + if$
  2036 + }
  2037 + if$
  2038 + }
  2039 + if$
  2040 + }
  2041 + if$
  2042 + }
  2043 + if$
  2044 +
  2045 + number empty.or.unknown
  2046 + {
  2047 + volume empty.or.unknown
  2048 + { "no number and no volume in " cite$ * warning$ "" * }
  2049 + { " " * " {" * volume * "}" * }
  2050 + if$
  2051 + }
  2052 + {
  2053 + volume empty.or.unknown
  2054 + {
  2055 + "unusual to have number, but no volume, for " cite$ * warning$
  2056 + " " * number *
  2057 + }
  2058 + { " " * volume comma " " * number * * }
  2059 + if$
  2060 + }
  2061 + if$
  2062 +
  2063 + format.day.month.year *
  2064 +}
  2065 +
  2066 +FUNCTION { format.chapter.pages }
  2067 +{
  2068 + chapter empty.or.unknown
  2069 + 'format.pages
  2070 + { type empty.or.unknown
  2071 + { "Chapter" } % gnp - changed to mixed case
  2072 + { type "t" change.case$ }
  2073 + if$
  2074 + chapter tie.or.space.connect
  2075 + pages empty.or.unknown
  2076 + {"page numbers missing in " cite$ * warning$} % gnp - added check
  2077 + { ", " * format.pages * }
  2078 + if$
  2079 + }
  2080 + if$
  2081 +}
  2082 +
  2083 +FUNCTION { format.in.emphasize.booktitle }
  2084 +{ % jtb: format for collections or proceedings not appearing in a journal
  2085 + booktitle empty.or.unknown
  2086 + { "" }
  2087 + { "In " format.emphasize.booktitle * }
  2088 + if$
  2089 +}
  2090 +
  2091 +FUNCTION { format.in.booktitle }
  2092 +{ % jtb: format for proceedings appearing in a journal
  2093 + booktitle empty.or.unknown
  2094 + { "" }
  2095 + { "In " booktitle * }
  2096 + if$
  2097 +}
  2098 +
  2099 +FUNCTION { format.in.ed.booktitle }
  2100 +{
  2101 + booktitle empty.or.unknown
  2102 + { "" }
  2103 + { editor empty.or.unknown
  2104 + { "In " format.emphasize.booktitle * }
  2105 + % jtb: swapped editor location
  2106 + { "In " format.emphasize.booktitle * ", " * format.editors.fml * }
  2107 + if$
  2108 + }
  2109 + if$
  2110 +}
  2111 +
  2112 +FUNCTION { format.thesis.type }
  2113 +{ % call with default type on stack top
  2114 + type empty.or.unknown
  2115 + 'skip$ % use default type
  2116 + {
  2117 + pop$ % discard default type
  2118 + % NO: it is silly to have to brace protect every degree type!: type "t" change.case$
  2119 + type
  2120 + }
  2121 + if$
  2122 +}
  2123 +
  2124 +FUNCTION { format.tr.number }
  2125 +{
  2126 + type empty.or.unknown
  2127 +% { "Tech. Rep." }
  2128 + { "{T}echnical {R}eport" } % ACM wants it explicit (Gerry 9/28)
  2129 + 'type
  2130 + if$
  2131 + number empty.or.unknown
  2132 + { "t" change.case$ }
  2133 + %% LOOKS BAD: { "." * number tie.or.space.connect }
  2134 + %% Prefer "Research report RJ687." to "Research report. RJ687."
  2135 + { number tie.or.space.connect }
  2136 + if$
  2137 +}
  2138 +
  2139 +FUNCTION { format.advisor }
  2140 +{
  2141 + advisor empty.or.unknown
  2142 + { "" }
  2143 + { "Advisor(s) " advisor * }
  2144 + if$
  2145 +}
  2146 +
  2147 +FUNCTION { format.article.crossref }
  2148 +{ "See"
  2149 + "\citeN{" * crossref * "}" *
  2150 +}
  2151 +
  2152 +FUNCTION { format.crossref.editor }
  2153 +{
  2154 + editor #1 "{vv~}{ll}" format.name$
  2155 + editor num.names$ duplicate$
  2156 + #2 >
  2157 + { pop$ " et~al\mbox{.}" * } % jrh: avoid spacing problems
  2158 + { #2 <
  2159 + 'skip$
  2160 + { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  2161 + { " et~al\mbox{.}" * } % jrh: avoid spacing problems
  2162 + { " and " * editor #2 "{vv~}{ll}" format.name$ * }
  2163 + if$
  2164 + }
  2165 + if$
  2166 + }
  2167 + if$
  2168 +}
  2169 +
  2170 +FUNCTION { format.book.crossref }
  2171 +{
  2172 + volume empty.or.unknown
  2173 + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
  2174 + "In "
  2175 + }
  2176 + { "Volume" volume tie.or.space.connect % gnp - changed to mixed case
  2177 + " of " *
  2178 + }
  2179 + if$
  2180 + editor empty.or.unknown
  2181 + editor field.or.null author field.or.null =
  2182 + or
  2183 + { key empty.or.unknown
  2184 + { series empty.or.unknown
  2185 + { "need editor, key, or series for " cite$ * " to crossref " *
  2186 + crossref * warning$
  2187 + "" *
  2188 + }
  2189 + { "{\em " * series * "\/}" * }
  2190 + if$
  2191 + }
  2192 + { key * }
  2193 + if$
  2194 + }
  2195 + { format.crossref.editor * }
  2196 + if$
  2197 + " \citeN{" * crossref * "}" *
  2198 +}
  2199 +
  2200 +FUNCTION { format.incoll.inproc.crossref }
  2201 +{ "See"
  2202 + " \citeN{" * crossref * "}" *
  2203 +}
  2204 +
  2205 +FUNCTION { format.lab.names }
  2206 +{
  2207 + % format.lab.names:
  2208 + %
  2209 + % determines "short" names for the abbreviated author information.
  2210 + % "Long" labels are created in calc.label, using the routine my.full.label
  2211 + % to format author and editor fields.
  2212 + %
  2213 + % There are 4 cases for labels. (n=3 in the example)
  2214 + % a) one author Foo
  2215 + % b) one to n Foo, Bar and Baz
  2216 + % c) use of "and others" Foo, Bar et al.
  2217 + % d) more than n Foo et al.
  2218 +
  2219 + 's :=
  2220 + s num.names$ 'numnames :=
  2221 + numnames #2 > % change number to number of others allowed before
  2222 + % forcing "et al".
  2223 + { s #1 "{vv~}{ll}" format.name$ " et~al\mbox{.}" * } % jrh: \mbox{} added
  2224 + {
  2225 + numnames #1 - 'namesleft :=
  2226 + #2 'nameptr :=
  2227 + s #1 "{vv~}{ll}" format.name$
  2228 + { namesleft #0 > }
  2229 + { nameptr numnames =
  2230 + { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  2231 + { " et~al\mbox{.}" * } % jrh: avoid spacing problems
  2232 + { " and " * s nameptr "{vv~}{ll}" format.name$ * }
  2233 + if$
  2234 + }
  2235 + { ", " * s nameptr "{vv~}{ll}" format.name$ * }
  2236 + if$
  2237 + nameptr #1 + 'nameptr :=
  2238 + namesleft #1 - 'namesleft :=
  2239 + }
  2240 + while$
  2241 + }
  2242 + if$
  2243 +}
  2244 +
  2245 +FUNCTION { author.key.label }
  2246 +{
  2247 + author empty.or.unknown
  2248 + { key empty.or.unknown
  2249 + { "no key, author in " cite$ * warning$
  2250 + cite$ #1 #3 substring$ }
  2251 + 'key
  2252 + if$
  2253 + }
  2254 + { author format.lab.names }
  2255 + if$
  2256 +}
  2257 +
  2258 +FUNCTION { author.key.organization.label }
  2259 +{ % added - gnp. Provide label formatting by organization if author is null.
  2260 + author empty.or.unknown
  2261 + { organization empty.or.unknown
  2262 + { key empty.or.unknown
  2263 + { "no key, author or organization in " cite$ * warning$
  2264 + cite$ #1 #3 substring$ }
  2265 + 'key
  2266 + if$
  2267 + }
  2268 + { organization }
  2269 + if$
  2270 + }
  2271 + { author format.lab.names }
  2272 + if$
  2273 +}
  2274 +
  2275 +FUNCTION { editor.key.organization.label }
  2276 +{ % added - gnp. Provide label formatting by organization if editor is null.
  2277 + editor empty.or.unknown
  2278 + { organization empty.or.unknown
  2279 + { key empty.or.unknown
  2280 + { "no key, editor or organization in " cite$ * warning$
  2281 + cite$ #1 #3 substring$ }
  2282 + 'key
  2283 + if$
  2284 + }
  2285 + { organization }
  2286 + if$
  2287 + }
  2288 + { editor format.lab.names }
  2289 + if$
  2290 +}
  2291 +
  2292 +FUNCTION { author.editor.key.label }
  2293 +{
  2294 + author empty.or.unknown
  2295 + { editor empty.or.unknown
  2296 + { key empty.or.unknown
  2297 + { "no key, author, or editor in " cite$ * warning$
  2298 + cite$ #1 #3 substring$ }
  2299 + 'key
  2300 + if$
  2301 + }
  2302 + { editor format.lab.names }
  2303 + if$
  2304 + }
  2305 + { author format.lab.names }
  2306 + if$
  2307 +}
  2308 +
  2309 +FUNCTION { calc.label }
  2310 +{
  2311 + % Changed - GNP. See also author.organization.sort, editor.organization.sort
  2312 + % Form label for BibTeX entry. The classification of which fields are used
  2313 + % for which type of entry (book, inbook, etc.) are taken from alpha.bst.
  2314 + % The change here from newapa is to also include organization as a
  2315 + % citation label if author or editor is missing.
  2316 +
  2317 + type$ "book" =
  2318 + type$ "inbook" =
  2319 + or
  2320 + type$ "periodical" =
  2321 + or
  2322 + 'author.editor.key.label
  2323 + { type$ "proceedings" =
  2324 + 'editor.key.organization.label
  2325 + { type$ "manual" =
  2326 + 'author.key.organization.label
  2327 + 'author.key.label
  2328 + if$
  2329 + }
  2330 + if$
  2331 + }
  2332 + if$
  2333 +
  2334 + author empty.or.unknown % generate the full label citation information.
  2335 + {
  2336 + editor empty.or.unknown
  2337 + {
  2338 + organization empty.or.unknown
  2339 + {
  2340 + key empty.or.unknown
  2341 + {
  2342 + "no author, editor, organization, or key in " cite$ * warning$
  2343 + "??"
  2344 + }
  2345 + { key }
  2346 + if$
  2347 + }
  2348 + { organization }
  2349 + if$
  2350 + }
  2351 + { editor my.full.label }
  2352 + if$
  2353 + }
  2354 + { author my.full.label }
  2355 + if$
  2356 +
  2357 + % leave label on the stack, to be popped when required.
  2358 +
  2359 + "}{" * swap$ * "}{" *
  2360 + % year field.or.null purify$ #-1 #4 substring$ *
  2361 + %
  2362 + % save the year for sort processing afterwards (adding a, b, c, etc.)
  2363 + %
  2364 + year field.or.null purify$ #-1 #4 substring$
  2365 + 'label.year :=
  2366 +}
  2367 +
  2368 +%
  2369 +% Change by Gerry: use number-like citations for transactions
  2370 +% 2011/03/23
  2371 +% Reverting: Ayman
  2372 +FUNCTION {output.bibitem}
  2373 +{ newline$
  2374 + "\bibitem{" write$
  2375 + cite$ write$
  2376 + "}" write$
  2377 + newline$
  2378 + ""
  2379 + before.all 'output.state :=
  2380 +}
  2381 +
  2382 +% FUNCTION { output.bibitem }
  2383 +% {
  2384 +% newline$
  2385 +% "\bibitem[\protect\citeauthoryear{" write$
  2386 +% calc.label write$
  2387 +% sort.year write$
  2388 +% "}]%" writeln
  2389 +% " {" write$
  2390 +% cite$ write$
  2391 +% "}" writeln
  2392 +% ""
  2393 +% before.all 'output.state :=
  2394 +% }
  2395 +
  2396 +
  2397 +FUNCTION { output.issue.doi.coden.isxn.lccn.url }
  2398 +{ % enter and return with stack empty
  2399 + %% We switch now from buffered output to output of complete lines, so
  2400 + %% that the Issue .. URL data have their own lines, and are less likely
  2401 + %% to be line-wrapped by BibTeX's short-sighted algorithm, which wraps
  2402 + %% lines longer than 79 characters, backtracking to what it thinks is
  2403 + %% a break point in the string. Any such wrapping MUST be undone to
  2404 + %% prevent percent-newline from appearing in DOIs and URLs. The
  2405 + %% output data are intentionally wrapped in \showxxx{} macros at
  2406 + %% beginning of line, and that supply their own punctuation (if they
  2407 + %% are not defined to suppress output entirely), to make it easier for
  2408 + %% other software to recover them from .bbl files.
  2409 + %%
  2410 + %% It also makes it possible to later change the macro definitions
  2411 + %% to suppress particular output values, or alter their appearance.
  2412 + %%
  2413 + %% Note that it is possible for theses, technical reports, and
  2414 + %% manuals to have ISBNs, and anything that has an ISBN may also
  2415 + %% have an ISSN. When there are no values for these keys, there
  2416 + %% is no output generated for them here.
  2417 +
  2418 + "\newblock" writeln
  2419 + after.block 'output.state :=
  2420 +
  2421 + output.issue
  2422 + output.isbn
  2423 + output.coden % CODEN is functionally like ISSN, so output them sequentially
  2424 + output.issn
  2425 + output.lccn
  2426 + output.doi % DOI is ALWAYS last according to CrossRef DOI documentation
  2427 + output.url % but ACM wants URL last
  2428 +}
  2429 +
  2430 +FUNCTION { output.issue.doi.coden.isxn.lccn.url.note }
  2431 +{ % enter with stack empty, return with empty string on stack
  2432 + output.issue.doi.coden.isxn.lccn.url
  2433 + note empty.or.unknown
  2434 + { }
  2435 + {
  2436 + "\newblock" writeln
  2437 + output.note
  2438 + }
  2439 + if$
  2440 + ""
  2441 +}
  2442 +
  2443 +FUNCTION { output.issue.doi.coden.isxn.lccn.url.note.check }
  2444 +{ % enter with stack empty, return with empty string on stack
  2445 + output.issue.doi.coden.isxn.lccn.url
  2446 + note empty.or.unknown
  2447 + { }
  2448 + {
  2449 + "\newblock" writeln
  2450 + output.note.check
  2451 + }
  2452 + if$
  2453 + ""
  2454 +}
  2455 +
  2456 +FUNCTION { article }
  2457 +{
  2458 + output.bibitem
  2459 +
  2460 + author empty.or.unknown
  2461 + {
  2462 + editor empty.or.unknown
  2463 + { "neither author and editor supplied for " cite$ * warning$ }
  2464 + { format.editors "editor" output.check }
  2465 + if$
  2466 + }
  2467 + { format.authors "author" output.check }
  2468 + if$
  2469 +
  2470 + author format.no.key output % added
  2471 + output.year.check % added
  2472 + new.block
  2473 + format.articletitle "title" output.check
  2474 + new.block
  2475 + howpublished output
  2476 +
  2477 + crossref missing$
  2478 + { format.journal.volume.number.day.month.year }
  2479 + {
  2480 + "cross reference in @Article{...} is unusual" warning$
  2481 + format.article.crossref output.nonnull
  2482 + }
  2483 + if$
  2484 + output
  2485 +
  2486 + format.pages.check.without.articleno output
  2487 + format.articleno.numpages output
  2488 + fin.block
  2489 + output.issue.doi.coden.isxn.lccn.url.note
  2490 + fin.entry
  2491 +}
  2492 +
  2493 +FUNCTION { book }
  2494 +{
  2495 + output.bibitem
  2496 + author empty.or.unknown
  2497 + { format.editors "author and editor" output.check }
  2498 + { format.authors output.nonnull
  2499 + crossref missing$
  2500 + { "author and editor" editor either.or.check }
  2501 + 'skip$
  2502 + if$
  2503 + }
  2504 + if$
  2505 + output.year.check % added
  2506 + new.block
  2507 + format.btitle "title" output.check
  2508 + crossref missing$
  2509 + { new.sentence % jtb: start a new sentence for series/volume
  2510 + format.bvolume output
  2511 + new.block
  2512 + format.number.series output
  2513 + new.sentence
  2514 + publisher "publisher" output.check
  2515 + address "address" output.check % jtb: require address
  2516 + fin.sentence
  2517 + pages empty.or.unknown
  2518 + { format.bookpages } % use bookpages when pages empty
  2519 + { format.pages.check "pages" tie.or.space.connect }
  2520 + if$
  2521 + output
  2522 + }
  2523 + { new.block
  2524 + format.book.crossref output.nonnull
  2525 + }
  2526 + if$
  2527 + fin.block
  2528 + output.issue.doi.coden.isxn.lccn.url.note
  2529 + fin.entry
  2530 +}
  2531 +
  2532 +FUNCTION { booklet }
  2533 +{
  2534 + output.bibitem
  2535 + format.authors output
  2536 + author format.key output % added
  2537 + output.year.check % added
  2538 + new.block
  2539 + format.title "title" output.check
  2540 + new.block
  2541 + howpublished output
  2542 + address output
  2543 + fin.block
  2544 + output.issue.doi.coden.isxn.lccn.url.note
  2545 + fin.entry
  2546 +}
  2547 +
  2548 +FUNCTION { inbook }
  2549 +{
  2550 + output.bibitem
  2551 + author empty.or.unknown
  2552 + { format.editors
  2553 + "author and editor" output.check
  2554 + }
  2555 + { format.authors output.nonnull
  2556 + crossref missing$
  2557 + { "author and editor" editor either.or.check }
  2558 + 'skip$
  2559 + if$
  2560 + }
  2561 + if$
  2562 + output.year.check % added
  2563 + new.block
  2564 + format.btitle "title" output.check
  2565 + crossref missing$
  2566 + { new.sentence % jtb: start a new sentence for series/volume
  2567 + format.bvolume output
  2568 + new.block
  2569 + format.number.series output
  2570 + new.sentence
  2571 + publisher "publisher" output.check
  2572 + address "address" output.check % jtb: require address
  2573 + format.bookpages output
  2574 + format.chapter.pages
  2575 + "chapter and pages" output.check % jtb: moved from before publisher
  2576 + }
  2577 + {
  2578 + format.bookpages output
  2579 + format.chapter.pages "chapter and pages" output.check
  2580 + new.block
  2581 + format.book.crossref output.nonnull
  2582 + }
  2583 + if$
  2584 + fin.block
  2585 + output.issue.doi.coden.isxn.lccn.url.note
  2586 + fin.entry
  2587 +}
  2588 +
  2589 +FUNCTION { incollection }
  2590 +{
  2591 + output.bibitem
  2592 + format.authors "author" output.check
  2593 + author format.key output % added
  2594 + output.year.check % added
  2595 + new.block
  2596 + format.articletitle "title" output.check
  2597 + new.block
  2598 + crossref missing$
  2599 + { format.in.ed.booktitle "booktitle" output.check
  2600 + new.sentence % jtb: start a new sentence for series/volume
  2601 + format.bvolume output
  2602 + format.number.series output
  2603 + new.sentence
  2604 + publisher "publisher" output.check
  2605 + address "address" output.check % jtb: require address
  2606 + format.bookpages output
  2607 + format.chapter.pages output % gnp - was special.output.nonnull
  2608 + % left out comma before page numbers
  2609 + % jtb: moved from before publisher
  2610 + }
  2611 + {
  2612 + format.incoll.inproc.crossref output.nonnull
  2613 + format.chapter.pages output
  2614 + }
  2615 + if$
  2616 + fin.block
  2617 + output.issue.doi.coden.isxn.lccn.url.note
  2618 + fin.entry
  2619 +}
  2620 +
  2621 +FUNCTION { inproceedings }
  2622 +{
  2623 + output.bibitem
  2624 + format.authors "author" output.check
  2625 + author format.key output % added
  2626 + output.year.check % added
  2627 + new.block
  2628 + format.articletitle "title" output.check
  2629 + howpublished output.dot.space
  2630 + crossref missing$
  2631 + {
  2632 + journal missing$ % jtb: proceedings appearing in journals
  2633 + { format.in.emphasize.booktitle format.city "booktitle" output.check.dot.space
  2634 + format.series output.removenospace
  2635 + format.editors.fml output % BV 2011/09/27 Moved dot to comma
  2636 + format.bvolume.noseries output
  2637 + new.sentence
  2638 + organization output
  2639 + publisher "publisher" output.check % jtb: require publisher (?)
  2640 + address "address" output.check % jtb: require address
  2641 + format.bookpages output
  2642 + }
  2643 + {
  2644 + format.in.booktitle format.city "booktitle" output.check
  2645 + format.editors.fml output
  2646 + new.sentence
  2647 + format.journal.volume.number.day.month.year output
  2648 + }
  2649 + if$
  2650 + format.articleno output
  2651 + format.pages.check.without.articleno output
  2652 + }
  2653 + {
  2654 + format.incoll.inproc.crossref output.nonnull
  2655 + format.articleno output
  2656 + format.pages.check.without.articleno output
  2657 + }
  2658 + if$
  2659 + format.articleno.numpages output
  2660 + fin.block
  2661 + output.issue.doi.coden.isxn.lccn.url.note
  2662 + fin.entry
  2663 +}
  2664 +
  2665 +FUNCTION { conference } { inproceedings }
  2666 +
  2667 +FUNCTION { manual }
  2668 +{
  2669 + output.bibitem
  2670 + author empty.or.unknown
  2671 + { editor empty.or.unknown
  2672 + { organization "organization" output.check
  2673 + organization format.key output } % if all else fails, use key
  2674 + { format.editors "author and editor" output.check }
  2675 + if$
  2676 + }
  2677 + { format.authors output.nonnull }
  2678 + if$
  2679 + output.year.check % added
  2680 + new.block
  2681 + format.btitle "title" output.check
  2682 + organization address new.block.checkb
  2683 + % jtb: back to normal style: organization, address
  2684 + organization "organization" output.check
  2685 + address output
  2686 + fin.block
  2687 + output.issue.doi.coden.isxn.lccn.url.note
  2688 + fin.entry
  2689 +}
  2690 +
  2691 +FUNCTION { mastersthesis }
  2692 +{
  2693 + output.bibitem
  2694 + format.authors "author" output.check
  2695 + author format.key output % added
  2696 + output.year.check % added
  2697 + new.block
  2698 + format.title emphasize "title" output.check % NB: ACM style requires emphasized thesis title
  2699 + new.block
  2700 + "Master's\ thesis" format.thesis.type output new.sentence % Added dot. BV 2011/09/27
  2701 + school "school" output.check
  2702 + address output
  2703 + new.block
  2704 + format.advisor output
  2705 + fin.block
  2706 + output.issue.doi.coden.isxn.lccn.url.note
  2707 + fin.entry
  2708 +}
  2709 +
  2710 +FUNCTION { misc }
  2711 +{
  2712 + output.bibitem
  2713 + format.authors output
  2714 + author format.key output % added
  2715 + output.year.check % added
  2716 + title howpublished new.block.checkb
  2717 + format.title output
  2718 + new.block
  2719 + howpublished output
  2720 + "" output.nonnull.dot.space
  2721 + output.day.month.year % Gerry - appears odd if (only) the year is 'repeated' but (appears) 'valuable' if the month/day is _also_ included - 2011/09/28
  2722 + fin.block
  2723 + output.issue.doi.coden.isxn.lccn.url.note
  2724 + fin.entry
  2725 +}
  2726 +
  2727 +FUNCTION { phdthesis }
  2728 +{
  2729 + output.bibitem
  2730 + format.authors "author" output.check
  2731 + author format.key output % added
  2732 + output.year.check % added
  2733 + new.block
  2734 + format.title emphasize "title" output.check % NB: ACM style requires emphasized thesis title
  2735 + new.block
  2736 + "Ph.D. Dissertation" format.thesis.type output new.sentence % Added dot. BV 2011/09/27
  2737 + school "school" output.check
  2738 + address output
  2739 + new.block
  2740 + format.advisor output
  2741 + fin.block
  2742 + output.issue.doi.coden.isxn.lccn.url.note
  2743 + fin.entry
  2744 +}
  2745 +
  2746 +FUNCTION {format.date}
  2747 +{ year empty.or.unknown
  2748 + { month empty.or.unknown
  2749 + {
  2750 + "" % output empty date if year/month both empty
  2751 + day empty.or.unknown
  2752 + { }
  2753 + { "there's a day but no month or year in " cite$ * warning$ }
  2754 + if$
  2755 + }
  2756 + { "there's a month but no year in " cite$ * warning$
  2757 + month
  2758 + day empty.or.unknown
  2759 + { }
  2760 + { " " * day * }
  2761 + if$
  2762 + }
  2763 + if$
  2764 + }
  2765 + { month empty.or.unknown
  2766 + {
  2767 + year % output only year if month empty
  2768 + day empty.or.unknown
  2769 + { }
  2770 + { "there's a day and year but no month in " cite$ * warning$ }
  2771 + if$
  2772 + }
  2773 + {
  2774 + month " " *
  2775 + day empty.or.unknown
  2776 + { }
  2777 + { day * ", " * }
  2778 + if$
  2779 + year *
  2780 + }
  2781 + if$
  2782 + }
  2783 + if$
  2784 +}
  2785 +
  2786 +FUNCTION {new.block.checka}
  2787 +{
  2788 + empty.or.unknown
  2789 + 'skip$
  2790 + 'new.block
  2791 + if$
  2792 +}
  2793 +
  2794 +FUNCTION { periodical }
  2795 +{
  2796 + output.bibitem
  2797 + editor empty.or.unknown
  2798 + { organization output }
  2799 + { format.editors output.nonnull }
  2800 + if$
  2801 + new.block
  2802 + title emphasize "title" output.check
  2803 + format.date output
  2804 + new.sentence
  2805 + publisher output
  2806 + address output
  2807 + howpublished new.block.checka
  2808 + howpublished output
  2809 + fin.block
  2810 + output.issue.doi.coden.isxn.lccn.url.note
  2811 + fin.entry
  2812 +}
  2813 +
  2814 +FUNCTION { proceedings }
  2815 +{
  2816 + output.bibitem
  2817 + editor empty.or.unknown
  2818 + { organization output
  2819 + organization format.key output } % gnp - changed from author format.key
  2820 + { format.editors output.nonnull }
  2821 + if$
  2822 + % author format.key output % gnp - removed (should be either
  2823 + % editor or organization
  2824 + output.year.check % added (newapa)
  2825 + new.block
  2826 + format.btitle format.city "title" output.check % jtb: added city
  2827 + new.sentence
  2828 + format.bvolume output
  2829 + format.number.series output
  2830 + new.sentence
  2831 + organization output
  2832 + % jtb: normal order: publisher, address
  2833 + publisher output
  2834 + address output
  2835 + fin.block
  2836 + output.issue.doi.coden.isxn.lccn.url.note
  2837 + fin.entry
  2838 +}
  2839 +
  2840 +FUNCTION { techreport }
  2841 +{
  2842 + output.bibitem
  2843 + format.authors "author" output.check
  2844 + author format.key output % added
  2845 + output.year.check % added
  2846 + new.block
  2847 + format.btitle "title" output.check
  2848 + new.block
  2849 +% format.tr.number output % jtb: moved month ...
  2850 + format.tr.number output new.sentence % Gerry - need dot 2011/09/28
  2851 + institution "institution" output.check
  2852 + address output
  2853 + new.sentence
  2854 + format.named.pages output
  2855 + % ACM omits year at end in transactions style
  2856 + % format.day.month.year output.nonnull.dot.space % jtb: ... to here (no parens)
  2857 + fin.block
  2858 + output.issue.doi.coden.isxn.lccn.url.note
  2859 + fin.entry
  2860 +}
  2861 +
  2862 +FUNCTION { unpublished }
  2863 +{
  2864 + output.bibitem
  2865 + format.authors
  2866 + "author" output.check
  2867 + author format.key output % added
  2868 + output.year.check % added
  2869 + new.block
  2870 + format.title "title" output.check
  2871 + fin.sentence
  2872 + output.day.month.year % UTAH
  2873 + fin.block
  2874 + output.issue.doi.coden.isxn.lccn.url.note.check
  2875 + fin.entry
  2876 +}
  2877 +
  2878 +FUNCTION { default.type } { misc }
  2879 +
  2880 +%%% ACM journal-style month definitions: full name if 1--5 letters, else
  2881 +%%% abbreviation of 3 or 4 characters and a dot
  2882 +
  2883 +MACRO {jan} {"Jan."}
  2884 +
  2885 +MACRO {feb} {"Feb."}
  2886 +
  2887 +MACRO {mar} {"March"}
  2888 +
  2889 +MACRO {apr} {"April"}
  2890 +
  2891 +MACRO {may} {"May"}
  2892 +
  2893 +MACRO {jun} {"June"}
  2894 +
  2895 +MACRO {jul} {"July"}
  2896 +
  2897 +MACRO {aug} {"Aug."}
  2898 +
  2899 +MACRO {sep} {"Sept."}
  2900 +
  2901 +MACRO {oct} {"Oct."}
  2902 +
  2903 +MACRO {nov} {"Nov."}
  2904 +
  2905 +MACRO {dec} {"Dec."}
  2906 +
  2907 +
  2908 +%%% ====================================================================
  2909 +%%% I M P O R T A N T C H A N G E
  2910 +%%%
  2911 +%%% For the 2009 release of the official acm-*.bst files, there are to
  2912 +%%% be NO predefined journal abbreviations in those style files.
  2913 +%%%
  2914 +%%% ACM may later develop an official list of mappings of full journal
  2915 +%%% names of commonly-cited journals to ACM-preferred abbreviations, but
  2916 +%%% authors should consider that use of any of these commented-out
  2917 +%%% abbreviations is DEPRECATED unless the BibTeX file itself provides
  2918 +%%% its own @String{name = "value"} definitions.
  2919 +%%%
  2920 +%%% Use of journal (and publisher and address) @String{...}
  2921 +%%% abbreviations, as opposed to explicit value assignments such as
  2922 +%%% journal = "J. ACM" and publisher = "IEEE", is preferred in
  2923 +%%% bibliographic databases, because it makes it easier for journal
  2924 +%%% production staff to replace those definitions by publisher-preferred
  2925 +%%% abbreviations when articles are typeset for publication.
  2926 +%%%
  2927 +%%% For historical reasons, and because some of these abbreviations are
  2928 +%%% used in other (non-ACM) bibliography style files, they are preserved
  2929 +%%% here in comments. Future releases of the acm*-.bst files are likely
  2930 +%%% to remove them entirely.
  2931 +%%% ====================================================================
  2932 +%%%
  2933 +%%% DEPRECATED: MACRO {acmcs} {"ACM Comput. Surv."} % original BibTeX
  2934 +%%% DEPRECATED:
  2935 +%%% DEPRECATED: MACRO {acmlett} {"ACM Lett. Program. Lang. Syst."}
  2936 +%%% DEPRECATED:
  2937 +%%% DEPRECATED: MACRO {acta} {"Acta Inf."} % original BibTeX
  2938 +%%% DEPRECATED:
  2939 +%%% DEPRECATED: MACRO {ai} {"Artificial Intelligence"}
  2940 +%%% DEPRECATED:
  2941 +%%% DEPRECATED: MACRO {al} {"Ada Lett."}
  2942 +%%% DEPRECATED:
  2943 +%%% DEPRECATED: MACRO {acr} {"Adv. Comput. Res."}
  2944 +%%% DEPRECATED:
  2945 +%%% DEPRECATED: MACRO {bit} {"Bit"}
  2946 +%%% DEPRECATED:
  2947 +%%% DEPRECATED: MACRO {cacm} {"Commun. ACM"} % original BibTeX
  2948 +%%% DEPRECATED:
  2949 +%%% DEPRECATED: MACRO {cj} {"Comput. J."}
  2950 +%%% DEPRECATED:
  2951 +%%% DEPRECATED: MACRO {cn} {"Comput. Netw."}
  2952 +%%% DEPRECATED:
  2953 +%%% DEPRECATED: MACRO {cl} {"Comput. Lang."}
  2954 +%%% DEPRECATED:
  2955 +%%% DEPRECATED: MACRO {ibmjrd} {"IBM J. Res. and Development"} % original BibTeX
  2956 +%%% DEPRECATED:
  2957 +%%% DEPRECATED: MACRO {ibmsj} {"IBM Systems Journal"} % original BibTeX
  2958 +%%% DEPRECATED:
  2959 +%%% DEPRECATED: MACRO {ict} {"Inf. Contr."}
  2960 +%%% DEPRECATED:
  2961 +%%% DEPRECATED: MACRO {ieebcs} {"IEE/BCS Softw. Eng. J."}
  2962 +%%% DEPRECATED:
  2963 +%%% DEPRECATED: MACRO {ieees} {"IEEE Softw."}
  2964 +%%% DEPRECATED:
  2965 +%%% DEPRECATED: MACRO {ieeese} {"IEEE Trans. Softw. Eng."} % original BibTeX
  2966 +%%% DEPRECATED:
  2967 +%%% DEPRECATED: MACRO {ieeetc} {"IEEE Trans. Comput."} % original BibTeX
  2968 +%%% DEPRECATED:
  2969 +%%% DEPRECATED: MACRO {ieeetcad} {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} % original BibTeX
  2970 +%%% DEPRECATED:
  2971 +%%% DEPRECATED: MACRO {ieeetpds} {"IEEE Trans. Parall. Distrib. Syst."}
  2972 +%%% DEPRECATED:
  2973 +%%% DEPRECATED: MACRO {ieeetit} {"IEEE Trans. Inf. Theory"}
  2974 +%%% DEPRECATED:
  2975 +%%% DEPRECATED: MACRO {ipl} {"Inf. Process. Lett."} % original BibTeX
  2976 +%%% DEPRECATED:
  2977 +%%% DEPRECATED: MACRO {icp} {"Inf. Comput."}
  2978 +%%% DEPRECATED:
  2979 +%%% DEPRECATED: MACRO {ist} {"Inf. Softw. Tech."}
  2980 +%%% DEPRECATED:
  2981 +%%% DEPRECATED: MACRO {ijsa} {"Int. J. Supercomput. Appl."}
  2982 +%%% DEPRECATED:
  2983 +%%% DEPRECATED: MACRO {ijpp} {"Int. J. Parallel Program."}
  2984 +%%% DEPRECATED:
  2985 +%%% DEPRECATED: MACRO {jacm} {"J. ACM"} % original BibTeX
  2986 +%%% DEPRECATED:
  2987 +%%% DEPRECATED: % MACRO {jcss} {"Journal of Computer and System Sciences"} % original BibTeX
  2988 +%%% DEPRECATED: MACRO {jcss} {"J. Comput. Syst. Sci."} % original BibTeX
  2989 +%%% DEPRECATED:
  2990 +%%% DEPRECATED: MACRO {jlp} {"J. Logic Program."}
  2991 +%%% DEPRECATED:
  2992 +%%% DEPRECATED: MACRO {jfp} {"J. Funct. Program."}
  2993 +%%% DEPRECATED:
  2994 +%%% DEPRECATED: MACRO {jsmrp} {"J. Softw. Maint. Res. Pract."}
  2995 +%%% DEPRECATED:
  2996 +%%% DEPRECATED: MACRO {jss} {"J. Syst. Softw."}
  2997 +%%% DEPRECATED:
  2998 +%%% DEPRECATED: MACRO {jlc} {"J. Logic and Comput."}
  2999 +%%% DEPRECATED:
  3000 +%%% DEPRECATED: MACRO {jlsc} {"J. Lisp Symb. Comput."}
  3001 +%%% DEPRECATED:
  3002 +%%% DEPRECATED: MACRO {lpls} {"Lett. Program. Lang. Syst."}
  3003 +%%% DEPRECATED:
  3004 +%%% DEPRECATED: MACRO {mor} {"Math. Oper. Res."}
  3005 +%%% DEPRECATED:
  3006 +%%% DEPRECATED: MACRO {mscs} {"Math. Struct. Comput. Sci."}
  3007 +%%% DEPRECATED:
  3008 +%%% DEPRECATED: MACRO {mst} {"Math. Syst. Theor."}
  3009 +%%% DEPRECATED:
  3010 +%%% DEPRECATED: MACRO {ngc} {"New Gen. Comput."}
  3011 +%%% DEPRECATED:
  3012 +%%% DEPRECATED: MACRO {scp} {"Sci. Comput. Program."} % original BibTeX
  3013 +%%% DEPRECATED:
  3014 +%%% DEPRECATED: MACRO {sicomp} {"SIAM J. Comput."} % original BibTeX
  3015 +%%% DEPRECATED:
  3016 +%%% DEPRECATED: MACRO {spe} {"Softw. Pract. Exper."}
  3017 +%%% DEPRECATED:
  3018 +%%% DEPRECATED: MACRO {tocs} {"ACM Trans. Comput. Syst."} % original BibTeX
  3019 +%%% DEPRECATED:
  3020 +%%% DEPRECATED: MACRO {tods} {"ACM Trans. Database Syst."} % original BibTeX
  3021 +%%% DEPRECATED:
  3022 +%%% DEPRECATED: MACRO {tog} {"ACM Trans. Graphics"} % original BibTeX
  3023 +%%% DEPRECATED:
  3024 +%%% DEPRECATED: MACRO {toms} {"ACM Trans. Math. Softw."} % original BibTeX
  3025 +%%% DEPRECATED:
  3026 +%%% DEPRECATED: MACRO {toois} {"ACM Trans. Office Inf. Syst."} % original BibTeX
  3027 +%%% DEPRECATED:
  3028 +%%% DEPRECATED: MACRO {toplas} {"ACM Trans. Program. Lang. Syst."} % original BibTeX
  3029 +%%% DEPRECATED:
  3030 +%%% DEPRECATED: MACRO {tcs} {"Theor. Comput. Sci."} % original BibTeX
  3031 +%%% DEPRECATED:
  3032 +%%% DEPRECATED: MACRO {tr} {"Tech. Rep."}
  3033 +%%% ====================================================================
  3034 +
  3035 +READ
  3036 +
  3037 +FUNCTION { sortify }
  3038 +{
  3039 + purify$
  3040 + "l" change.case$
  3041 +}
  3042 +
  3043 +FUNCTION { chop.word }
  3044 +{
  3045 + 's :=
  3046 + 'len :=
  3047 + s #1 len substring$ =
  3048 + { s len #1 + global.max$ substring$ }
  3049 + 's
  3050 + if$
  3051 +}
  3052 +
  3053 +FUNCTION { sort.format.names }
  3054 +{
  3055 + 's :=
  3056 + #1 'nameptr :=
  3057 + ""
  3058 + s num.names$ 'numnames :=
  3059 + numnames 'namesleft :=
  3060 + { namesleft #0 > }
  3061 + { nameptr #1 >
  3062 + { " " * }
  3063 + 'skip$
  3064 + if$
  3065 + % s nameptr "{ff{ } }{ll{ }}{ vv{ }}{ jj{ }}" format.name$ 't :=
  3066 + s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't :=
  3067 + nameptr numnames = t "others" = and
  3068 + { " et~al" * }
  3069 + { t sortify * }
  3070 + if$
  3071 + nameptr #1 + 'nameptr :=
  3072 + namesleft #1 - 'namesleft :=
  3073 + }
  3074 + while$
  3075 +}
  3076 +
  3077 +FUNCTION { sort.format.title }
  3078 +{
  3079 + 't :=
  3080 + "A " #2
  3081 + "An " #3
  3082 + "The " #4 t chop.word
  3083 + chop.word
  3084 + chop.word
  3085 + sortify
  3086 + #1 global.max$ substring$
  3087 +}
  3088 +
  3089 +FUNCTION { author.sort }
  3090 +{
  3091 + author empty.or.unknown
  3092 + { key empty.or.unknown
  3093 + { "to sort, need author or key in " cite$ * warning$
  3094 + "" }
  3095 + { key sortify }
  3096 + if$
  3097 + }
  3098 + { author sort.format.names }
  3099 + if$
  3100 +}
  3101 +
  3102 +FUNCTION { author.editor.sort }
  3103 +{
  3104 + author empty.or.unknown
  3105 + {
  3106 + editor empty.or.unknown
  3107 + {
  3108 + key empty.or.unknown
  3109 + { "to sort, need author, editor, or key in " cite$ * warning$
  3110 + ""
  3111 + }
  3112 + { key sortify }
  3113 + if$
  3114 + }
  3115 + { editor sort.format.names }
  3116 + if$
  3117 + }
  3118 + { author sort.format.names }
  3119 + if$
  3120 +}
  3121 +
  3122 +FUNCTION { author.organization.sort }
  3123 +{
  3124 + % added - GNP. Stack author or organization for sorting (from alpha.bst).
  3125 + % Unlike alpha.bst, we need entire names, not abbreviations
  3126 +
  3127 + author empty.or.unknown
  3128 + { organization empty.or.unknown
  3129 + { key empty.or.unknown
  3130 + { "to sort, need author, organization, or key in " cite$ * warning$
  3131 + ""
  3132 + }
  3133 + { key sortify }
  3134 + if$
  3135 + }
  3136 + { organization sortify }
  3137 + if$
  3138 + }
  3139 + { author sort.format.names }
  3140 + if$
  3141 +}
  3142 +
  3143 +FUNCTION { editor.organization.sort }
  3144 +{
  3145 + % added - GNP. Stack editor or organization for sorting (from alpha.bst).
  3146 + % Unlike alpha.bst, we need entire names, not abbreviations
  3147 +
  3148 + editor empty.or.unknown
  3149 + { organization empty.or.unknown
  3150 + { key empty.or.unknown
  3151 + { "to sort, need editor, organization, or key in " cite$ * warning$
  3152 + ""
  3153 + }
  3154 + { key sortify }
  3155 + if$
  3156 + }
  3157 + { organization sortify }
  3158 + if$
  3159 + }
  3160 + { editor sort.format.names }
  3161 + if$
  3162 +}
  3163 +
  3164 +FUNCTION { presort }
  3165 +{
  3166 + % Presort creates the bibentry's label via a call to calc.label, and then
  3167 + % sorts the entries based on entry type. Chicago.bst adds support for
  3168 + % including organizations as the sort key; the following is stolen from
  3169 + % alpha.bst.
  3170 +
  3171 + calc.label sortify % recalculate bibitem label
  3172 + year field.or.null purify$ #-1 #4 substring$ * % add year
  3173 + " "
  3174 + *
  3175 + type$ "book" =
  3176 + type$ "inbook" =
  3177 + or
  3178 + 'author.editor.sort
  3179 + { type$ "proceedings" =
  3180 + 'editor.organization.sort
  3181 + { type$ "manual" =
  3182 + 'author.organization.sort
  3183 + 'author.sort
  3184 + if$
  3185 + }
  3186 + if$
  3187 + }
  3188 + if$
  3189 + #1 entry.max$ substring$ % added for newapa
  3190 + 'sort.label := % added for newapa
  3191 + sort.label % added for newapa
  3192 + *
  3193 + " "
  3194 + *
  3195 + title field.or.null
  3196 + sort.format.title
  3197 + *
  3198 + #1 entry.max$ substring$
  3199 + 'sort.key$ :=
  3200 +}
  3201 +
  3202 +ITERATE { presort }
  3203 +
  3204 +SORT % by label, year, author/editor, title
  3205 +
  3206 +FUNCTION { initialize.extra.label.stuff }
  3207 +{ #0 int.to.chr$ 'last.label :=
  3208 + "" 'next.extra :=
  3209 + #0 'last.extra.num :=
  3210 +}
  3211 +
  3212 +FUNCTION { forward.pass }
  3213 +{
  3214 + % Pass through all entries, comparing current entry to last one.
  3215 + % Need to concatenate year to the stack (done by calc.label) to determine
  3216 + % if two entries are the same (see presort)
  3217 +
  3218 + last.label
  3219 + % OLD:calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
  3220 + % NEW:
  3221 + author.key.label year field.or.null purify$ #-1 #4 substring$ * % add year
  3222 + #1 entry.max$ substring$ = % are they equal?
  3223 + { last.extra.num #1 + 'last.extra.num :=
  3224 + last.extra.num int.to.chr$ 'extra.label :=
  3225 + }
  3226 + { "a" chr.to.int$ 'last.extra.num :=
  3227 + "" 'extra.label :=
  3228 + % OLD: calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
  3229 + % NEW:
  3230 + author.key.label year field.or.null purify$ #-1 #4 substring$ * % add year
  3231 + #1 entry.max$ substring$ 'last.label := % assign to last.label
  3232 + }
  3233 + if$
  3234 +}
  3235 +
  3236 +FUNCTION { reverse.pass }
  3237 +{
  3238 + next.extra "b" =
  3239 + { "a" 'extra.label := }
  3240 + 'skip$
  3241 + if$
  3242 + label.year extra.label * 'sort.year :=
  3243 + extra.label 'next.extra :=
  3244 +}
  3245 +
  3246 +EXECUTE {initialize.extra.label.stuff}
  3247 +
  3248 +ITERATE {forward.pass}
  3249 +
  3250 +REVERSE {reverse.pass}
  3251 +
  3252 +FUNCTION { bib.sort.order }
  3253 +{
  3254 + sort.label
  3255 + " "
  3256 + *
  3257 + year field.or.null sortify
  3258 + *
  3259 + " "
  3260 + *
  3261 + title field.or.null
  3262 + sort.format.title
  3263 + *
  3264 + #1 entry.max$ substring$
  3265 + 'sort.key$ :=
  3266 +}
  3267 +
  3268 +ITERATE { bib.sort.order }
  3269 +
  3270 +SORT % by sort.label, year, title --- giving final bib. order.
  3271 +
  3272 +FUNCTION { begin.bib }
  3273 +{
  3274 + %% Set to #0 show 13-digit ISBN in preference to 10-digit ISBN.
  3275 + %% Set to #1 to show both 10-digit and 13-digit ISBNs.
  3276 + #1 'show-isbn-10-and-13 :=
  3277 +
  3278 + "%%% -*-BibTeX-*-" writeln
  3279 + "%%% Do NOT edit. File created by BibTeX with style" writeln
  3280 + "%%% ACM-Reference-Format-Journals [18-Jan-2012]." writeln
  3281 + "" writeln
  3282 +
  3283 + preamble$ empty.or.unknown
  3284 + 'skip$
  3285 + { preamble$ writeln }
  3286 + if$
  3287 + "\begin{thebibliography}{00}" writeln
  3288 + "" writeln
  3289 + "%%% ====================================================================" writeln
  3290 + "%%% NOTE TO THE USER: you can override these defaults by providing" writeln
  3291 + "%%% customized versions of any of these macros before the \bibliography" writeln
  3292 + "%%% command. Each of them MUST provide its own final punctuation," writeln
  3293 + "%%% except for \shownote{}, \showDOI{}, and \showURL{}. The latter two" writeln
  3294 + "%%% do not use final punctuation, in order to avoid confusing it with" writeln
  3295 + "%%% the Web address." writeln
  3296 + "%%%" writeln
  3297 + "%%% To suppress output of a particular field, define its macro to expand" writeln
  3298 + "%%% to an empty string, or better, \unskip, like this:" writeln
  3299 + "%%%" writeln
  3300 + "%%% \newcommand{\showDOI}[1]{\unskip} % LaTeX syntax" writeln
  3301 + "%%%" writeln
  3302 + "%%% \def \showDOI #1{\unskip} % plain TeX syntax" writeln
  3303 + "%%%" writeln
  3304 + "%%% ====================================================================" writeln
  3305 + "" writeln
  3306 +
  3307 + %% ACM publications do not use CODEN, ISSN, and LCCN data, so their default
  3308 + %% macro wrappers expand to \unskip, discarding their values and unwanted
  3309 + %% space.
  3310 + %%
  3311 + %% For other publications, prior definitions like these may be useful:
  3312 + %%
  3313 + %% Plain TeX:
  3314 + %% \def \showCODEN #1{CODEN #1.}
  3315 + %% \def \showISSN #1{ISSN #1.}
  3316 + %% \def \showLCCN #1{LCCN #1.}
  3317 + %%
  3318 + %% LaTeX:
  3319 + %% \newcommand{\showCODEN}[1]{CODEN #1.}
  3320 + %% \newcommand{\showISSN}[1]#1{ISSN #1.}
  3321 + %% \newcommand{\showLCCN}[1]{LCCN #1.}
  3322 +
  3323 + "\ifx \showCODEN \undefined \def \showCODEN #1{\unskip} \fi" writeln
  3324 + "\ifx \showDOI \undefined \def \showDOI #1{{\tt DOI:}\penalty0{#1}\ } \fi" writeln
  3325 + % ACM styles omit ISBNs, but they can be included by suitable definitions of
  3326 + % \showISBNx and \showISBNxiii before the .bbl file is read
  3327 + "\ifx \showISBNx \undefined \def \showISBNx #1{\unskip} \fi" writeln
  3328 + "\ifx \showISBNxiii \undefined \def \showISBNxiii #1{\unskip} \fi" writeln
  3329 + "\ifx \showISSN \undefined \def \showISSN #1{\unskip} \fi" writeln
  3330 + "\ifx \showLCCN \undefined \def \showLCCN #1{\unskip} \fi" writeln
  3331 + "\ifx \shownote \undefined \def \shownote #1{#1} \fi" writeln % NB: final period supplied by add.period$ above
  3332 + "\ifx \showarticletitle \undefined \def \showarticletitle #1{#1} \fi" writeln
  3333 + "\ifx \showURL \undefined \def \showURL #1{#1} \fi" writeln
  3334 +}
  3335 +
  3336 +EXECUTE {begin.bib}
  3337 +
  3338 +EXECUTE {init.state.consts}
  3339 +
  3340 +ITERATE {call.type$}
  3341 +
  3342 +FUNCTION { end.bib }
  3343 +{
  3344 + newline$
  3345 + "\end{thebibliography}"
  3346 + writeln
  3347 +}
  3348 +
  3349 +EXECUTE {end.bib}
  3350 +
  3351 +%%% End of ACM-Reference-Format-Journals.bst V1.00 - 18 January 2012
  3352 +
... ...
opensym2017/acmcopyright.sty 0 → 100755
... ... @@ -0,0 +1,221 @@
  1 +%%
  2 +%% This is file `acmcopyright.sty',
  3 +%% generated with the docstrip utility.
  4 +%%
  5 +%% The original source files were:
  6 +%%
  7 +%% acmcopyright.dtx (with options: `style')
  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 acmcopyright.sty.
  15 +%%
  16 +%% For distribution of the original source see the terms
  17 +%% for copying and modification in the file acmcopyright.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 +\ProvidesPackage{acmcopyright}
  40 +[2014/06/29 v1.2 Copyright statemens for ACM classes]
  41 +\newif\if@printcopyright
  42 +\@printcopyrighttrue
  43 +\newif\if@printpermission
  44 +\@printpermissiontrue
  45 +\newif\if@acmowned
  46 +\@acmownedtrue
  47 +\RequirePackage{xkeyval}
  48 +\define@choicekey*{ACM@}{acmcopyrightmode}[%
  49 + \acm@copyrightinput\acm@copyrightmode]{none,acmcopyright,acmlicensed,%
  50 + rightsretained,usgov,usgovmixed,cagov,cagovmixed,%
  51 + licensedusgovmixed,licensedcagovmixed,othergov,licensedothergov}{%
  52 + \@printpermissiontrue
  53 + \@printcopyrighttrue
  54 + \@acmownedtrue
  55 + \ifnum\acm@copyrightmode=0\relax % none
  56 + \@printpermissionfalse
  57 + \@printcopyrightfalse
  58 + \@acmownedfalse
  59 + \fi
  60 + \ifnum\acm@copyrightmode=2\relax % acmlicensed
  61 + \@acmownedfalse
  62 + \fi
  63 + \ifnum\acm@copyrightmode=3\relax % rightsretained
  64 + \@acmownedfalse
  65 + \fi
  66 + \ifnum\acm@copyrightmode=4\relax % usgov
  67 + \@printpermissiontrue
  68 + \@printcopyrightfalse
  69 + \@acmownedfalse
  70 + \fi
  71 + \ifnum\acm@copyrightmode=6\relax % cagov
  72 + \@acmownedfalse
  73 + \fi
  74 + \ifnum\acm@copyrightmode=8\relax % licensedusgovmixed
  75 + \@acmownedfalse
  76 + \fi
  77 + \ifnum\acm@copyrightmode=9\relax % licensedcagovmixed
  78 + \@acmownedfalse
  79 + \fi
  80 + \ifnum\acm@copyrightmode=10\relax % othergov
  81 + \@acmownedtrue
  82 + \fi
  83 + \ifnum\acm@copyrightmode=11\relax % licensedothergov
  84 + \@acmownedfalse
  85 + \@printcopyrightfalse
  86 + \fi}
  87 +\def\setcopyright#1{\setkeys{ACM@}{acmcopyrightmode=#1}}
  88 +\setcopyright{acmcopyright}
  89 +\def\@copyrightowner{%
  90 + \ifcase\acm@copyrightmode\relax % none
  91 + \or % acmcopyright
  92 + ACM.
  93 + \or % acmlicensed
  94 + Copyright held by the owner/author(s). Publication rights licensed to
  95 + ACM.
  96 + \or % rightsretained
  97 + Copyright held by the owner/author(s).
  98 + \or % usgov
  99 + \or % usgovmixed
  100 + ACM.
  101 + \or % cagov
  102 + Crown in Right of Canada.
  103 + \or %cagovmixed
  104 + ACM.
  105 + \or %licensedusgovmixed
  106 + Copyright held by the owner/author(s). Publication rights licensed to
  107 + ACM.
  108 + \or %licensedcagovmixed
  109 + Copyright held by the owner/author(s). Publication rights licensed to
  110 + ACM.
  111 + \or % othergov
  112 + ACM.
  113 + \or % licensedothergov
  114 + \fi}
  115 +\def\@copyrightpermission{%
  116 + \ifcase\acm@copyrightmode\relax % none
  117 + \or % acmcopyright
  118 + Permission to make digital or hard copies of all or part of this
  119 + work for personal or classroom use is granted without fee provided
  120 + that copies are not made or distributed for profit or commercial
  121 + advantage and that copies bear this notice and the full citation on
  122 + the first page. Copyrights for components of this work owned by
  123 + others than ACM must be honored. Abstracting with credit is
  124 + permitted. To copy otherwise, or republish, to post on servers or to
  125 + redistribute to lists, requires prior specific permission
  126 + and\hspace*{.5pt}/or a fee. Request permissions from
  127 + permissions@acm.org.
  128 + \or % acmlicensed
  129 + Permission to make digital or hard copies of all or part of this
  130 + work for personal or classroom use is granted without fee provided
  131 + that copies are not made or distributed for profit or commercial
  132 + advantage and that copies bear this notice and the full citation on
  133 + the first page. Copyrights for components of this work owned by
  134 + others than the author(s) must be honored. Abstracting with credit
  135 + is permitted. To copy otherwise, or republish, to post on servers
  136 + or to redistribute to lists, requires prior specific permission
  137 + and\hspace*{.5pt}/or a fee. Request permissions from
  138 + permissions@acm.org.
  139 + \or % rightsretained
  140 + Permission to make digital or hard copies of part or all of this work
  141 + for personal or classroom use is granted without fee provided that
  142 + copies are not made or distributed for profit or commercial advantage
  143 + and that copies bear this notice and the full citation on the first
  144 + page. Copyrights for third-party components of this work must be
  145 + honored. For all other uses, contact the
  146 + owner\hspace*{.5pt}/author(s).
  147 + \or % usgov
  148 + This paper is authored by an employee(s) of the United States
  149 + Government and is in the public domain. Non-exclusive copying or
  150 + redistribution is allowed, provided that the article citation is
  151 + given and the authors and agency are clearly identified as its
  152 + source.
  153 + \or % usgovmixed
  154 + ACM acknowledges that this contribution was authored or co-authored
  155 + by an employee, or contractor of the national government. As such,
  156 + the Government retains a nonexclusive, royalty-free right to
  157 + publish or reproduce this article, or to allow others to do so, for
  158 + Government purposes only. Permission to make digital or hard copies
  159 + for personal or classroom use is granted. Copies must bear this
  160 + notice and the full citation on the first page. Copyrights for
  161 + components of this work owned by others than ACM must be
  162 + honored. To copy otherwise, distribute, republish, or post,
  163 + requires prior specific permission and\hspace*{.5pt}/or a
  164 + fee. Request permissions from permissions@acm.org.
  165 + \or % cagov
  166 + This article was authored by employees of the Government of Canada.
  167 + As such, the Canadian government retains all interest in the
  168 + copyright to this work and grants to ACM a nonexclusive,
  169 + royalty-free right to publish or reproduce this article, or to allow
  170 + others to do so, provided that clear attribution is given both to
  171 + the authors and the Canadian government agency employing them.
  172 + Permission to make digital or hard copies for personal or classroom
  173 + use is granted. Copies must bear this notice and the full citation
  174 + on the first page. Copyrights for components of this work owned by
  175 + others than the Canadain Government must be honored. To copy
  176 + otherwise, distribute, republish, or post, requires prior specific
  177 + permission and\hspace*{.5pt}/or a fee. Request permissions from
  178 + permissions@acm.org.
  179 + \or % cagovmixed
  180 + ACM acknowledges that this contribution was co-authored by an
  181 + affiliate of the national government of Canada. As such, the Crown
  182 + in Right of Canada retains an equal interest in the copyright.
  183 + Reprints must include clear attribution to ACM and the author's
  184 + government agency affiliation. Permission to make digital or hard
  185 + copies for personal or classroom use is granted. Copies must bear
  186 + this notice and the full citation on the first page. Copyrights for
  187 + components of this work owned by others than ACM must be honored.
  188 + To copy otherwise, distribute, republish, or post, requires prior
  189 + specific permission and\hspace*{.5pt}/or a fee. Request permissions
  190 + from permissions@acm.org.
  191 + \or % licensedusgovmixed
  192 + Publication rights licensed to ACM. ACM acknowledges that this
  193 + contribution was authored or co-authored by an employee, contractor
  194 + or affiliate of the United States government. As such, the
  195 + Government retains a nonexclusive, royalty-free right to publish or
  196 + reproduce this article, or to allow others to do so, for Government
  197 + purposes only.
  198 + \or % licensedcagovmixed
  199 + Publication rights licensed to ACM. ACM acknowledges that this
  200 + contribution was authored or co-authored by an employee, contractor
  201 + or affiliate of the national government of Canada. As such, the
  202 + Government retains a nonexclusive, royalty-free right to publish or
  203 + reproduce this article, or to allow others to do so, for Government
  204 + purposes only.
  205 + \or % othergov
  206 + ACM acknowledges that this contribution was authored or co-authored
  207 + by an employee, contractor or affiliate of a national government. As
  208 + such, the Government retains a nonexclusive, royalty-free right to
  209 + publish or reproduce this article, or to allow others to do so, for
  210 + Government purposes only.
  211 + \or % licensedothergov
  212 + Publication rights licensed to ACM. ACM acknowledges that this
  213 + contribution was authored or co-authored by an employee, contractor
  214 + or affiliate of a national government. As such, the Government
  215 + retains a nonexclusive, royalty-free right to publish or reproduce
  216 + this article, or to allow others to do so, for Government purposes
  217 + only.
  218 + \fi}
  219 +\endinput
  220 +%%
  221 +%% End of file `acmcopyright.sty'.
... ...
opensym2017/content/00-abstract.tex 0 → 100644
... ... @@ -0,0 +1,14 @@
  1 +\begin{abstract}
  2 +The Brazilian Public Software is a program by the Brazilian Federal
  3 +Government to foster the sharing and collaboration on FOSS solutions for
  4 +the public administration. In this paper, we present an integrated
  5 +development platform that was developed for the program. The development
  6 +of this platform used several FOSS applications, and contributed
  7 +features back to them. We discuss the development methodology, platform
  8 +architecture, and the user experience efforts carried out.
  9 +\end{abstract}
  10 +
  11 +\category{H.5.m.}{Information Interfaces and Presentation
  12 + (e.g. HCI)}{Miscellaneous}
  13 +
  14 +\keywords{\plainkeywords}
... ...
opensym2017/content/01-introduction.tex 0 → 100644
... ... @@ -0,0 +1,50 @@
  1 +\section{Introduction}
  2 +\label{sec:intro}
  3 +
  4 +During the last few decades, the Brazilian Federal Government has
  5 +improved its software adoption and development processes. In 2003, the
  6 +recommendation to adopt Free/Open Source Software (FOSS) become a public
  7 +policy. In 2007, the Brazilian Government released a portal called
  8 +Brazilian Public Software (\textit{Software Público Brasileiro} -- SPB,
  9 +in Portuguese), with the goal of sharing FOSS projects developed by, or
  10 +for, the Brazilian Government.
  11 +
  12 +The Brazilian legal instrument on software contracting
  13 +(\textit{Instrução Normativa} 04/2012) mandates that public management
  14 +must consult the SPB Portal to adopt a software solution. The
  15 +acquisition of a proprietary solution must be explicitly justified by
  16 +demonstrating that there is no suitable option in the SPB Portal.
  17 +
  18 +Since 2009, however, the SPB Portal was having several technical issues.
  19 +The original codebase was not being developed anymore, and there as a
  20 +large amount of technical debt to overcome. The system was a modified
  21 +version of an existing FOSS platform that was not being developed
  22 +anymore, and the portal maintenance was becoming harder and harder.
  23 +
  24 +From January 2014 to June 2016, a new platform for the SPB Portal was
  25 +designed and developed by the University of Brasília (UnB) and the
  26 +University of São Paulo (USP) in a partnership with the Brazilian
  27 +Ministry of Budget, Planning, and Management. This new Portal was
  28 +designed as an integrated platform for collaborative software
  29 +development. It includes functionality for social networking, mailing
  30 +lists, version control system, and source code quality monitoring. In
  31 +this paper, we present an overview of this new generation of the SPB
  32 +Portal.
  33 +
  34 +The project was developed by a team of 3 professors, 6 professionals, 2
  35 +masters students, and approximately 40 undergrad students (not all of
  36 +them at the same time, though -- graduations and other events triggered
  37 +changes in the team).
  38 +
  39 +\begin{figure*}[hbt]
  40 + \centering
  41 + \includegraphics[width=.9\linewidth]{figures/home-SPB.png}
  42 + \caption{The new SPB Portal.}
  43 + \label{fig:spb}
  44 +\end{figure*}
  45 +
  46 +Figure \ref{fig:spb} shows the home page of this integrated platform.
  47 +The development tried to be as faithful as possible to FOSS development.
  48 +All development was done in the open, and the changes we needed in the
  49 +tools user were contributed back to their communities.
  50 +
... ...
opensym2017/content/02-spb.tex 0 → 100644
... ... @@ -0,0 +1,73 @@
  1 +\section{Brazilian Public Software versus Free/Open Source Software}
  2 +\label{sec:spb}
  3 +
  4 +%TODO: Hilmer
  5 +
  6 +O software livre é considerado um fenômeno recente que ganhou destaque nos
  7 +últimos anos e despertou maior interesse de observação por parte da academia.
  8 +No entanto, desde o início da computação a maior parte dos desenvolvedores
  9 +trabalhava da forma que hoje identificamos como software livre, ou seja,
  10 +compartilhando código de forma aberta. Essa característica faz com que o código
  11 +esteja disponível para inspeção, alteração, e utilização por qualquer pessoa,
  12 +física ou jurídica~\cite{kon2012},
  13 +~\cite{hippel2003}.
  14 +
  15 +Os elementos que diferenciam o software livre de outros tipos de software é o
  16 +entendimento do processo de desenvolvimento, do contexto econômico, da relação
  17 +entre os desenvolvedores e usuários, além das características éticas e legais
  18 +que se relacionam ao software. No contexto do software livre é promovida a
  19 +liberdade do usuário e seu desenvolvimento tem alicerce
  20 +em colaboração e desenvolvimento aberto.\cite{meirelles2013}.
  21 +
  22 +Do ponto de vista econômico, diferentemente do que ocorre com o software
  23 +proprietário, restrito, o software livre promove o estabelecimento de vários
  24 +fornecedores que competem entre si com base no mesmo software. Essa competição
  25 +mais forte entre fornecedores traz vantagens para os usuários, pois dá melhores
  26 +garantias quanto ao desenvolvimento futuro do sistema e induz a uma redução nos
  27 +preços. Essas liberdades e garantias sobre o software são estabelecidas no
  28 +Brasil pela Lei 9610/98, lei de direitos autorais. Na sua maioria das vezes,
  29 +essa proteção decorrente da lei segue aliada aos termos conferidos por um
  30 +contrato atinente a determinado software. Esse contrato é denominado
  31 +``licença''. A licença de um software estabelece um rol de direitos e deveres
  32 +que se projetam sobre um determinado usuário do software. Em especial, o que
  33 +diferencia o software livre do software restrito é apenas a forma de
  34 +licenciamento\cite{sabino2009}. As licenças de software livre são o
  35 +que garantem o direito de executar, estudar, adaptar, e aperfeiçoar o software,
  36 +como por exemplo as licenças \textit{GPL (GNU General Public License)} aceitas
  37 +para projetos hospedados no portal do software público brasileiro.
  38 +
  39 +O Portal do Software Público Brasileiro (SPB), inaugurado em 2007, na prática,
  40 +é um sistema web que se consolidou como um ambiente de compartilhamento de
  41 +projetos de software. Oferece um espaço (comunidade) para cada software. Por
  42 +isso, a atual plataforma para o SPB foi pensada para contemplar ferramentas que
  43 +promovam a colaboração e a interação nas comunidades (por gestores, usuários e
  44 +desenvolvedores) dos projetos, conforme as práticas usadas nas comunidades de
  45 +software livre. Isso inclui listas de e-mail, fóruns de discussão, issue
  46 +trackers, sistemas de controle de versão e ambientes de rede
  47 +social.
  48 +
  49 +Inicialmente, o propósito do Portal era apenas compartilhar os softwares
  50 +desenvolvidos no governo, visando diminuir os custos de contratação de
  51 +software. Entretanto, se observou que ao disponibilizar os softwares
  52 +rapidamente formaram-se comunidades em torno daquele software com diversas
  53 +pessoas colaborando e compartilhando os resultados obtidos através do uso
  54 +daquelas soluções. Dessa forma, algumas cooperativas de desenvolvimento de
  55 +software e empresas privadas demonstraram o interesse em disponibilizar seus
  56 +softwares na plataforma do SPB.
  57 +
  58 +O conceito de software público diferencia-se do de software livre em alguns
  59 +aspectos, destacando-se a atribuição de bem público ao software e a
  60 +obrigatoriedade do software estar no Portal do Software Público. Embora haja
  61 +algumas diferenças entre o que é um software livre e um software público
  62 +brasileiro, há princípios comuns, como a tendência da descentralização na
  63 +tomada de decisões, o intenso compartilhamento de informações e os processos de
  64 +retroalimentação decorrentes do uso dos artefatos produzidos. Por um lado, o
  65 +software livre se apresenta atualmente como um modelo já consolidado e viável
  66 +em um número crescente de aplicações e ambientes. Por outro lado, restam
  67 +incertezas jurídicas e econômicas. Alguns desses desafios estão vinculados às
  68 +barreiras criadas pelo modelo e cultura do software
  69 +restrito~\cite{kon2012}. Além dessas, existem também as dificuldades
  70 +para a entrada e a permanência de novos contribuidores nos projetos. A questão
  71 +que motivou esta pesquisa é que essas dificuldades podem ser maiores no
  72 +contexto dos projetos de software público brasileiro, devido à estrutura
  73 +organizacional e aos processos do Governo Federal.
... ...
opensym2017/content/03-arch.tex 0 → 100644
... ... @@ -0,0 +1,105 @@
  1 +\section{Architecture}
  2 +\label{sec:architecture}
  3 +
  4 +%TODO: Kanashiro e Siqueira
  5 +
  6 +The two main requirements provided by the Brazilian Federal Government
  7 +for the new platform were:
  8 +%
  9 +1) \textit{Integrate existing FOSS systems}, with minimal differences
  10 +from their original versions. This way, the platform can benefit from
  11 +improvements done by the upstream communities that provide those
  12 +systems, and the maintenance effort that is specific for the SPB Portal
  13 +should be reduced;
  14 +%
  15 +and
  16 +2) \textit{Provide a consistent user interface} across the different
  17 +systems, as well as centralized authentication.
  18 +
  19 +The first requirement was accomplished by dedicating specialized teams
  20 +for each system that was being integrated. The teams would learn how to
  21 +develop their assigned systems, and contribute the necessary features
  22 +directly to the original communities, so that the version we used was
  23 +not significantly different from the original. Of course, at times
  24 +project deadlines forced us to use our own version before tho features
  25 +were fully reviewed and integrated upstream to the original projects,
  26 +but we managed to contribute the vast majority of the changes back.
  27 +
  28 +For the second requirement, we integrated a web integration platform
  29 +called Colab\footnote{\url{https://github.com/colab/colab}}. Colab
  30 +serves as a frontend for other web applications as a reverse proxy,
  31 +manages authentication, and can apply changes to the HTML provided by
  32 +the integrated applications in order to provide visual consistency.
  33 +Colab had support for an initial set of applications (Trac, GNU Mailman,
  34 +Apache Lucene) hard-coded; our team evolved Colab so that it can now
  35 +receive plugins to add support for new applications with minimal changes
  36 +to its existing core. We added support for the other applications used
  37 +in the SPB platform: Noosfero, GitLab, and Mezuro.
  38 +
  39 +Noosfero\footnote{\url{http://noosfero.org/}} is a software for building
  40 +social and collaboration networks. Besides the classical social
  41 +networking features, it also provides publication features such as blogs
  42 +and a general-purpose CMS (Content Management System). Most of the user
  43 +interactions with SPB is through Noosfero: user registration, project
  44 +home pages and documentation, and contact forms.
  45 +GitLab\footnote{\url{http://gitlab.com/}} is a web-based Git repository
  46 +manager with wiki pages and issue tracking features.
  47 +Mezuro\footnote{\url{http://mezuro.org/}} is a platform to collect source code
  48 +metric to monitor the internal quality of softwares written in C, C++,
  49 +Java, Python, Ruby, and PHP. GNU Mailman is used for mailing lists.
  50 +
  51 +\begin{figure}[hbt]
  52 + \centering
  53 + \includegraphics[width=\linewidth]{figures/arch.png}
  54 + \caption{SPB architecture overview.}
  55 + \label{fig:architecture}
  56 +\end{figure}
  57 +
  58 +The conceptual architecture of the platform is presented in Figure
  59 +\ref{fig:architecture}. Colab initially handles all user interaction,
  60 +directing requests to one of the integrated applications. It
  61 +post-processes responses from the applications to apply a consistent
  62 +visual appearance, manages authentication, and provides a unified search
  63 +functionality: instead of using the redundant restricted search
  64 +functionality of each application, a search in the SPB portal might
  65 +return content from any of the applications, be it web pages, mailing
  66 +list posts, or source code.
  67 +
  68 +%TODO: deixar coeso daqui para baixo
  69 +
  70 +\begin{figure*}[hbt]
  71 + \centering
  72 + \includegraphics[width=\linewidth]{figures/arch2.png}
  73 + \caption{Instanciation view of the SPB architecture.}
  74 + \label{fig:architecture2}
  75 +\end{figure*}
  76 +
  77 +In real, the SPB platform was deployed in 7 virtual machines with different functions,
  78 +as we can see in Figure \ref{fig:architecture2}.
  79 +
  80 +The \textit{reverseproxy} handles the HTTP requests and redirects them to the
  81 +\textit{integration}, the \textit{email} sends and receives e-mails on behalf
  82 +of the platform and the \textit{monitor} keeps the entire environment tracked.
  83 +These three \textit{VMs} mentioned - \textit{reverseproxy}, \textit{email} and
  84 +\textit{monitor} - are accessible via Internet and the other ones are only
  85 +available in the local network created between them.
  86 +
  87 +\textit{Integration} works as a second layer of proxy beneath
  88 +\textit{reverseproxy}, any request to the platform will be handled by it. The
  89 +Colab service provides interface, authentication and search engine integration
  90 +among all the services. When a request is received to a specific service,
  91 +Colab authenticates the user in the target tool, sends the request and makes a
  92 +visual transformation in the HTML page which is the content of the response.
  93 +Another user-oriented feature is the integrated search engine, when the user
  94 +want to find something in the platform Colab will perform the search in the
  95 +whole databases. Colab itself provides a web interface for GNU Mailman and we
  96 +have two others integrated tools in \textit{integration}: Gitlab and Prezento.
  97 +Gitlab provides web interface for Git repositories and issues tracker, and
  98 +Prezento is a front-end for source code static analysis.
  99 +
  100 +The source code static analysis is performed by \textit{mezuro}. It runs some
  101 +static analysis tools on source code stored in repository and provide this data
  102 +to Prezento. A social network and CMS (Content Manager System) is provided by
  103 +Noosfero in \textit{social}, and the databases of all tools with a cache
  104 +service are in \textit{database}.
  105 +
... ...
opensym2017/content/04-features.tex 0 → 100644
... ... @@ -0,0 +1,8 @@
  1 +\section{Features}
  2 +\label{sec:spb}
  3 +
  4 +%TODO: Paulo e Melissa
  5 +
  6 +...
  7 +
  8 +
... ...
opensym2017/content/05-process.tex 0 → 100644
... ... @@ -0,0 +1,6 @@
  1 +\section{Development Organization and Process}
  2 +\label{sec:process}
  3 +
  4 +%TODO: Siqueira e Hilmer
  5 +
  6 +...
... ...
opensym2017/content/06-ux.tex 0 → 100644
... ... @@ -0,0 +1,33 @@
  1 +\section{User eXperience evolution}
  2 +
  3 +The integration of collaborative environments goes beyond functional aspects.
  4 +Offering the population an unified experience across these environments has
  5 +been the key to encourage the use of the platform as it reduces the perception
  6 +of complexity. Thus, the SPB Portal information architecture was redesigned
  7 +to provide a transparent navigation and to reach users with different profiles.
  8 +A process of harmonization has been employed on the interaction models of each
  9 +tool to reduce the learning curve. At the same time, a new visual style was
  10 +created to unify the navigation experience and to comply with the guidelines of
  11 +the digital communication identity standard established by the Federal
  12 +Government.
  13 +
  14 +With the increase in system features and the addition of new tools, the
  15 +visual style has steadily evolved to keep the navigation unified. Moreover,
  16 +tools from different backgrounds, which in many cases provide similar
  17 +functionality, prompted the development of an unified interface. Some
  18 +features, such as search and user profile editing were eliminated from
  19 +the individual applications, and implemented centrally to ensure a
  20 +consistent look and feel.
  21 +
  22 +Another challenge was responsive web design. The integrated applications
  23 +had varying degrees of support for responsiveness, and the common
  24 +interface had to adapt for each individual scenario. In particular
  25 +Noosfero did not yet have a responsive design; we engaged in its
  26 +development and contributed towards that goal.
  27 +
  28 +After the initial release of the new SPB Portal in 2014, several
  29 +validations activities were implemented in 2015 and 2016. The aim was to
  30 +provide the most wanted features by casual users (such as public
  31 +servants interested in downloads and documentation) immediately, while
  32 +allowing more experienced users (such as developers) to easily drill down
  33 +to the details.
... ...
opensym2017/content/07-finals.tex 0 → 100644
... ... @@ -0,0 +1,13 @@
  1 +\section{Final remarks}
  2 +
  3 +The portal is available at \url{softwarepublico.gov.br}. All
  4 +documentation, including detailed architecture and operation manuals are
  5 +also available\footnote{\url{https://softwarepublico.gov.br/doc/}
  6 +(in Portuguese only at the moment)}).
  7 +%
  8 +All the integrated tools are FOSS and our contributions were published
  9 +in open repositories, available on the SPB Portal itself. We also
  10 +contributed these features back to the respective communities: that
  11 +benefits those communities, as well as us since we can share future
  12 +development and maintenance effort with other organizations that
  13 +participate in their projects.
... ...
opensym2017/figures/arch.png 0 → 100644

39.2 KB

opensym2017/figures/arch.svg 0 → 100644
... ... @@ -0,0 +1,302 @@
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<!-- Created with Inkscape (http://www.inkscape.org/) -->
  3 +
  4 +<svg
  5 + xmlns:dc="http://purl.org/dc/elements/1.1/"
  6 + xmlns:cc="http://creativecommons.org/ns#"
  7 + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  8 + xmlns:svg="http://www.w3.org/2000/svg"
  9 + xmlns="http://www.w3.org/2000/svg"
  10 + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
  11 + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
  12 + width="1024"
  13 + height="480"
  14 + viewBox="0 0 270.93333 126.99987"
  15 + version="1.1"
  16 + id="svg8"
  17 + inkscape:version="0.92.1 r15371"
  18 + sodipodi:docname="arch.svg"
  19 + inkscape:export-filename="/home/terceiro/research/papers/2017/spb/OSS-2017/figures/arch.png"
  20 + inkscape:export-xdpi="96"
  21 + inkscape:export-ydpi="96">
  22 + <defs
  23 + id="defs2">
  24 + <marker
  25 + inkscape:stockid="Arrow1Lend"
  26 + orient="auto"
  27 + refY="0"
  28 + refX="0"
  29 + id="marker5935"
  30 + style="overflow:visible"
  31 + inkscape:isstock="true">
  32 + <path
  33 + id="path5933"
  34 + d="M 0,0 5,-5 -12.5,0 5,5 Z"
  35 + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
  36 + transform="matrix(-0.8,0,0,-0.8,-10,0)"
  37 + inkscape:connector-curvature="0" />
  38 + </marker>
  39 + <marker
  40 + inkscape:isstock="true"
  41 + style="overflow:visible"
  42 + id="marker5359"
  43 + refX="0"
  44 + refY="0"
  45 + orient="auto"
  46 + inkscape:stockid="Arrow1Lend"
  47 + inkscape:collect="always">
  48 + <path
  49 + transform="matrix(-0.8,0,0,-0.8,-10,0)"
  50 + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
  51 + d="M 0,0 5,-5 -12.5,0 5,5 Z"
  52 + id="path5357"
  53 + inkscape:connector-curvature="0" />
  54 + </marker>
  55 + <marker
  56 + inkscape:stockid="Arrow1Lend"
  57 + orient="auto"
  58 + refY="0"
  59 + refX="0"
  60 + id="marker5019"
  61 + style="overflow:visible"
  62 + inkscape:isstock="true">
  63 + <path
  64 + id="path5017"
  65 + d="M 0,0 5,-5 -12.5,0 5,5 Z"
  66 + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
  67 + transform="matrix(-0.8,0,0,-0.8,-10,0)"
  68 + inkscape:connector-curvature="0" />
  69 + </marker>
  70 + <marker
  71 + inkscape:stockid="Arrow1Lend"
  72 + orient="auto"
  73 + refY="0"
  74 + refX="0"
  75 + id="marker4863"
  76 + style="overflow:visible"
  77 + inkscape:isstock="true"
  78 + inkscape:collect="always">
  79 + <path
  80 + id="path4861"
  81 + d="M 0,0 5,-5 -12.5,0 5,5 Z"
  82 + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
  83 + transform="matrix(-0.8,0,0,-0.8,-10,0)"
  84 + inkscape:connector-curvature="0" />
  85 + </marker>
  86 + <marker
  87 + inkscape:stockid="Arrow1Lend"
  88 + orient="auto"
  89 + refY="0"
  90 + refX="0"
  91 + id="Arrow1Lend"
  92 + style="overflow:visible"
  93 + inkscape:isstock="true">
  94 + <path
  95 + id="path4580"
  96 + d="M 0,0 5,-5 -12.5,0 5,5 Z"
  97 + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
  98 + transform="matrix(-0.8,0,0,-0.8,-10,0)"
  99 + inkscape:connector-curvature="0" />
  100 + </marker>
  101 + </defs>
  102 + <sodipodi:namedview
  103 + id="base"
  104 + pagecolor="#ffffff"
  105 + bordercolor="#666666"
  106 + borderopacity="1.0"
  107 + inkscape:pageopacity="0.0"
  108 + inkscape:pageshadow="2"
  109 + inkscape:zoom="1.0104167"
  110 + inkscape:cx="335.34021"
  111 + inkscape:cy="240"
  112 + inkscape:document-units="mm"
  113 + inkscape:current-layer="g6086"
  114 + showgrid="false"
  115 + units="px"
  116 + inkscape:window-width="1366"
  117 + inkscape:window-height="704"
  118 + inkscape:window-x="0"
  119 + inkscape:window-y="27"
  120 + inkscape:window-maximized="1" />
  121 + <metadata
  122 + id="metadata5">
  123 + <rdf:RDF>
  124 + <cc:Work
  125 + rdf:about="">
  126 + <dc:format>image/svg+xml</dc:format>
  127 + <dc:type
  128 + rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
  129 + <dc:title></dc:title>
  130 + </cc:Work>
  131 + </rdf:RDF>
  132 + </metadata>
  133 + <g
  134 + inkscape:label="Layer 1"
  135 + inkscape:groupmode="layer"
  136 + id="layer1"
  137 + transform="translate(0,-170.0001)">
  138 + <g
  139 + id="g6086"
  140 + transform="translate(0,79.375004)">
  141 + <g
  142 + transform="matrix(0.78525619,0,0,0.78525619,-49.623926,77.658487)"
  143 + id="g4513">
  144 + <rect
  145 + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
  146 + id="rect4504"
  147 + width="72.343452"
  148 + height="24.587317"
  149 + x="79.908783"
  150 + y="145.22058" />
  151 + <text
  152 + xml:space="preserve"
  153 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.05688667px;line-height:28.67301178px;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.14692044px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  154 + x="82.755447"
  155 + y="163.29472"
  156 + id="text4508"><tspan
  157 + sodipodi:role="line"
  158 + id="tspan4506"
  159 + x="82.755447"
  160 + y="163.29472"
  161 + style="stroke-width:1.14692044px">Noosfero</tspan></text>
  162 + </g>
  163 + <g
  164 + id="g4521"
  165 + transform="matrix(0.78525619,0,0,0.78525619,44.313728,28.743922)">
  166 + <rect
  167 + y="145.22058"
  168 + x="79.908783"
  169 + height="24.587317"
  170 + width="72.343452"
  171 + id="rect4515"
  172 + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
  173 + <text
  174 + id="text4519"
  175 + y="163.19838"
  176 + x="96.076134"
  177 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.05688667px;line-height:28.67301178px;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.14692044px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  178 + xml:space="preserve"><tspan
  179 + style="stroke-width:1.14692044px"
  180 + y="163.19838"
  181 + x="96.076134"
  182 + id="tspan4517"
  183 + sodipodi:role="line">Colab</tspan></text>
  184 + </g>
  185 + <g
  186 + transform="matrix(0.78525619,0,0,0.78525619,12.608456,78.877338)"
  187 + id="g4529">
  188 + <rect
  189 + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
  190 + id="rect4523"
  191 + width="72.343452"
  192 + height="24.587317"
  193 + x="80.408913"
  194 + y="143.66841" />
  195 + <text
  196 + xml:space="preserve"
  197 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.05688667px;line-height:28.67301178px;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.14692044px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  198 + x="95.870644"
  199 + y="161.64621"
  200 + id="text4527"><tspan
  201 + sodipodi:role="line"
  202 + id="tspan4525"
  203 + x="95.870644"
  204 + y="161.64621"
  205 + style="stroke-width:1.14692044px">Gitlab</tspan></text>
  206 + </g>
  207 + <g
  208 + id="g4537"
  209 + transform="matrix(0.78525619,0,0,0.78525619,129.65802,78.713424)">
  210 + <rect
  211 + y="143.87715"
  212 + x="90.852165"
  213 + height="24.587317"
  214 + width="72.343452"
  215 + id="rect4531"
  216 + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
  217 + <text
  218 + id="text4535"
  219 + y="161.64621"
  220 + x="99.913902"
  221 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.05688667px;line-height:28.67301178px;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.14692044px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  222 + xml:space="preserve"><tspan
  223 + style="stroke-width:1.14692044px"
  224 + y="161.64621"
  225 + x="99.913902"
  226 + id="tspan4533"
  227 + sodipodi:role="line">Mezuro</tspan></text>
  228 + </g>
  229 + <g
  230 + id="g4545"
  231 + transform="matrix(0.78525619,0,0,0.78525619,126.12242,40.111281)">
  232 + <rect
  233 + y="193.03581"
  234 + x="15.603492"
  235 + height="24.587317"
  236 + width="72.343452"
  237 + id="rect4539"
  238 + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
  239 + <text
  240 + id="text4543"
  241 + y="211.01361"
  242 + x="22.292139"
  243 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.05688667px;line-height:28.67301178px;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.14692044px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  244 + xml:space="preserve"><tspan
  245 + style="stroke-width:1.14692044px"
  246 + y="211.01361"
  247 + x="22.292139"
  248 + id="tspan4541"
  249 + sodipodi:role="line">Mailman</tspan></text>
  250 + </g>
  251 + <g
  252 + transform="translate(-17.596701,-1.6758763)"
  253 + id="g4573">
  254 + <path
  255 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#888a85;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
  256 + d="m 105.30904,123.67103 c 0,3.13366 -7.096307,5.15651 -7.096307,5.15651 0,0 -0.634831,10.34294 -4.763388,12.39652 -4.128557,2.05358 -14.837858,-1.9901 -14.837858,-1.9901 0,0 -10.290461,6.46437 -16.590428,6.46437 -6.299966,0 -16.088912,-7.96891 -16.088912,-7.96891 0,0 -8.034554,4.71236 -12.163111,2.65878 -4.128557,-2.05359 -6.435105,-10.39045 -6.435105,-10.39045 0,0 -3.752876,-3.69458 -3.752875,-6.82824 1e-6,-3.13366 5.758939,-5.49087 5.758939,-5.49087 0,0 -2.348532,-8.4531 1.754298,-10.55761 5.633102,-2.88945 17.512605,-0.51748 17.512605,-0.51748 0,0 7.114196,-6.29719 13.414161,-6.29719 6.299965,0 14.25002,6.13002 14.25002,6.13002 0,0 13.885563,-1.53611 18.01412,0.51748 4.128557,2.05358 5.097733,9.72176 5.097733,9.72176 0,0 5.926108,3.86175 5.926108,6.99541 z"
  257 + id="path4549"
  258 + inkscape:connector-curvature="0"
  259 + sodipodi:nodetypes="scscscscscscscscs" />
  260 + <text
  261 + xml:space="preserve"
  262 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.60877037px;line-height:22.51565933px;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.90062636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  263 + x="43.804577"
  264 + y="125.93317"
  265 + id="text4519-3"><tspan
  266 + sodipodi:role="line"
  267 + id="tspan4517-6"
  268 + x="43.804577"
  269 + y="125.93317"
  270 + style="stroke-width:0.90062636px">internet</tspan></text>
  271 + </g>
  272 + <path
  273 + sodipodi:nodetypes="csc"
  274 + inkscape:connector-curvature="0"
  275 + id="path4575"
  276 + d="m 89.299838,121.99515 c 0,0 41.636142,-2.8699 41.912782,9.30257 l 0.20948,9.21731"
  277 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-end:url(#Arrow1Lend);enable-background:accumulate" />
  278 + <path
  279 + inkscape:connector-curvature="0"
  280 + id="path4859"
  281 + d="m 131.24135,164.86986 -87.987992,24.8855"
  282 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-end:url(#marker4863);enable-background:accumulate" />
  283 + <path
  284 + inkscape:connector-curvature="0"
  285 + id="path5015"
  286 + d="m 143.33679,164.86986 87.98803,24.8855"
  287 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-end:url(#marker5019);enable-background:accumulate" />
  288 + <path
  289 + sodipodi:nodetypes="cc"
  290 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-end:url(#marker5359);enable-background:accumulate"
  291 + d="m 134.80714,164.86986 -24.36704,24.8855"
  292 + id="path5355"
  293 + inkscape:connector-curvature="0" />
  294 + <path
  295 + inkscape:connector-curvature="0"
  296 + id="path5931"
  297 + d="m 138.22112,164.86986 24.36704,24.8855"
  298 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-end:url(#marker5935);enable-background:accumulate"
  299 + sodipodi:nodetypes="cc" />
  300 + </g>
  301 + </g>
  302 +</svg>
... ...
opensym2017/figures/arch2.png 0 → 100644

109 KB

opensym2017/figures/home-SPB.png 0 → 100644

88.4 KB

opensym2017/sigchi-ext.cls 0 → 100644
... ... @@ -0,0 +1,623 @@
  1 +% CHI Extended Abstracts template.
  2 +%
  3 +% Tested with a clean LaTeX installation on Windows XP, Ubuntu 9.04
  4 +% and above (should work in normal LaTeX environments)
  5 +%
  6 +% Filename: sigchi-ext.cls
  7 +%
  8 +% Features:
  9 +% - simpler design, two 'real' columns, better handling of
  10 +% footnotes/marginal notes
  11 +% - adheres to ACM archival format, so you don't need to change your
  12 +% LaTeX markup significantly from other ACM templates
  13 +% - font sizes, spacing between paragraphs, and look&feel more
  14 +% according to CHI's Ext. Abstracts template (MS Word)
  15 +% - supports an optional ACM teaser image on first page
  16 +% - improved PDF bookmarking
  17 +%
  18 +% CHANGELOG:
  19 +% 2015-03-21 David A. Shamma Removed bibsty dependency.
  20 +% 2015-01-05 David A. Shamma Updating for new format and Github repo.
  21 +% 2013-07-22 Paul Baumann Added example copyright to LaTeX file.
  22 +% 2010-12-01 Luis A. Leiva A lot of refactorization.
  23 +% 2010-10-18 Manas Tungare Restored support for \figures.
  24 +% 2010-08-09 Manas Tungare Updated copyright info for CHI 2011
  25 +% 2009-12-04 Stephen Voida Updated copyright info for CHI 2010
  26 +% 2009-11-17 Manas Tungare Refactored the title & author sections.
  27 +% 2008-11-25 Manas Tungare Initial create.
  28 +%
  29 +% LICENSE: Public domain: You are free to do whatever you want with
  30 +% this template. If you improve this in any way, please submit a
  31 +% pull request to the Github repository.
  32 +
  33 +
  34 +\NeedsTeXFormat{LaTeX2e}[1995/12/01]
  35 +\ProvidesClass{sigchi-ext}[2015/1/05, David A. Shamma]
  36 +
  37 +\typeout{CHI Extended Abstracts template}
  38 +\typeout{- updated by David A. Shamma.}
  39 +\typeout{- refactored by Luis A. Leiva}
  40 +\typeout{- original by Manas Tungare}
  41 +\typeout{}
  42 +\typeout{Available at https://github.com/sigchi.}
  43 +\typeout{}
  44 +
  45 +\LoadClass[10pt,letterpaper,landscape]{article}[1996/10/31]
  46 +
  47 +% -----------------------------------------------------------------------------
  48 +% Set paper and margin sizes
  49 +
  50 +\setlength{\paperheight}{8.5in}
  51 +\setlength{\paperwidth}{11in}
  52 +
  53 +\setlength{\textwidth}{7.25in}
  54 +\setlength{\textheight}{6in}
  55 +
  56 +\setlength{\oddsidemargin}{1.5in}
  57 +\setlength{\topmargin}{0.25in}
  58 +
  59 +\setlength{\columnsep}{0.5in}
  60 +
  61 +\setlength{\voffset}{-0.2in}
  62 +
  63 +\setlength{\parindent}{0pt}
  64 +\setlength{\footskip}{0.5in}
  65 +
  66 +\setlength{\marginparsep}{15pt}
  67 +\setlength{\marginparwidth}{1.8in}
  68 +
  69 +\setlength{\itemsep}{0pt}
  70 +\setlength{\parsep}{0pt}
  71 +\setlength{\topsep}{0pt}
  72 +\setlength{\parskip}{9pt}
  73 +
  74 +% -----------------------------------------------------------------------------
  75 +% Set paper columns and avoid justifying text, according to CHI's MS
  76 +% Word template
  77 +\twocolumn
  78 +\raggedright
  79 +
  80 +% Use LaTeX standard sans-serif fonts
  81 +\renewcommand*\familydefault{\sfdefault}
  82 +
  83 +% -----------------------------------------------------------------------------
  84 +% Allowed environments and commands
  85 +
  86 +%% Todo: fix the floats! This overrides floating images, which is
  87 +%% needed for marginpar images but not for inline. So the trade off
  88 +%% is to make actual floats work then make a new environment for
  89 +%% marginepar images. -ayman
  90 +% \renewenvironment{table}{\def\@captype{table}}{}
  91 +% \renewenvironment{figure}{\def\@captype{figure}}{}
  92 +\renewcommand{\thanks}[1]{} % No thanks in this template
  93 +\pagestyle{empty} % No page numbers
  94 +
  95 +% -----------------------------------------------------------------------------
  96 +% Paper Metadata
  97 +
  98 +\newcommand*{\copyrightinfo}[1]{\gdef\@copyrightinfo{\raggedright#1}}
  99 +
  100 +% Allow to copy-paste the ACM bibstrip in the Permission Release Form.
  101 +\RequirePackage{acmcopyright}
  102 +% Define the required commands.
  103 +\newcommand*{\CopyrightYear}[1]{} % Actually not used, but needed for consistency
  104 +\newcommand*{\acmPrice}[1]{} % Actually not used, but needed for consistency
  105 +\newcommand*{\conferenceinfo}[2]{\gdef\@crconferenceinfo{\emph{#1}, #2}}
  106 +\newcommand*{\isbn}[1]{\gdef\@crisbn{ACM~#1.}}
  107 +\newcommand*{\doi}[1]{\gdef\@crdoi{\urlstyle{crc}\url{#1}}}
  108 +% The follwing command typesets the required ACM bibstrip.
  109 +% It must be invoked between \begin{document} and \maketitle, either after or before CCS codes.
  110 +% So just use \copyrightinfo{\acmcopyright} to override the manual copyright info.
  111 +\newcommand*{\acmcopyright}{
  112 + \@copyrightpermission\par\smallskip
  113 + \@copyrightowner\par
  114 + \@crconferenceinfo\par
  115 + \@crisbn\par
  116 + \@crdoi
  117 +}
  118 +
  119 +\def\keywords{
  120 +\section*{Author Keywords}
  121 +}
  122 +
  123 +\def\terms{
  124 +\section*{General Terms}
  125 +}
  126 +
  127 +% -----------------------------------------------------------------------------
  128 +% ACM Classification - Gerry/Georgia November 2nd. 1999
  129 +
  130 +\newcount\catcount
  131 +\global\catcount=1
  132 +
  133 +\def\category#1#2#3{%
  134 +\ifnum\catcount=1
  135 + \section*{ACM Classification Keywords}
  136 + \advance\catcount by 1\else{\unskip; }%
  137 +\fi
  138 +\@ifnextchar [{\@category{#1}{#2}{#3}}{\@category{#1}{#2}{#3}[]}%
  139 +}
  140 +
  141 +\def\@category#1#2#3[#4]{%
  142 + \begingroup
  143 + \let\and\relax
  144 +% #1 [\textbf{#2}]%
  145 + #1 [#2]%
  146 + \if!#4!%
  147 + \if!#3!\else : #3\fi
  148 + \else
  149 + :\space
  150 + \if!#3!\else #3\kern\z@---\hskip\z@\fi
  151 + \textit{#4}%
  152 + \fi
  153 + \endgroup
  154 +}
  155 +
  156 +% -----------------------------------------------------------------------------
  157 +% Typeset titles of chapters and sections in sans-serif
  158 +
  159 +\def\@makeschapterhead#1{
  160 + \vspace*{50\p@}
  161 + {\parindent \z@ \raggedright
  162 + \sffamily
  163 + \interlinepenalty\@M
  164 + \Huge\bfseries #1\par\nobreak
  165 + \vskip 20\p@
  166 + }
  167 +}
  168 +
  169 +\def\sectionsindent{\z@}
  170 +\def\sectionsbeforeskip{-3.5ex \@plus -0.1ex \@minus -0.2ex}
  171 +\def\sectionsafterskip{0.2ex \@plus 0.01ex}
  172 +% LaTeX scheme is {name}{level}{indent}{beforeskip}{afterskip}{style}
  173 +\renewcommand\section{
  174 + \@startsection{section}{1}{\sectionsindent}{\sectionsbeforeskip}{\sectionsafterskip}%
  175 + {\sffamily\large\bfseries\phantomsection}
  176 +}
  177 +\renewcommand\subsection{
  178 + \@startsection{subsection}{2}{\sectionsindent}{\sectionsbeforeskip}{\sectionsafterskip}%
  179 + {\sffamily\normalsize\itshape\phantomsection}
  180 +}
  181 +\renewcommand\subsubsection{
  182 + \@startsection{subsubsection}{3}{\sectionsindent}{\sectionsbeforeskip}{\sectionsafterskip}%
  183 + %{\sffamily\MakeUppercase\small\itshape\phantomsection}
  184 + {\sffamily\normalsize\itshape\phantomsection}
  185 +}
  186 +
  187 +% Now remove vertical space after sections (same as class' font size)
  188 +\usepackage[compact]{titlesec}
  189 +\titlespacing{\section}{0pt}{*0}{-9pt}
  190 +\titlespacing{\subsection}{0pt}{*0}{-9pt}
  191 +\titlespacing{\subsubsection}{0pt}{*0}{-9pt}
  192 +
  193 +% Add references to TOC
  194 +\let\myrefname\refname
  195 +\renewcommand\refname{\addcontentsline{toc}{section}{\myrefname}\myrefname}
  196 +
  197 +% Typeset captions
  198 +\usepackage[small,bf,sf]{caption}
  199 +\captionsetup{font={small,sf},textfont=sf,justification=raggedright}
  200 +
  201 +% Typeset URLs
  202 +\usepackage{url}
  203 +% Define a (compact) global style for URLs, rather than the default one
  204 +% \def\url@leostyle{\@ifundefined{selectfont}{\def\UrlFont{\sf}}{\def\UrlFont{\small\bf\ttfamily}}}
  205 +\def\url@leostyle{\@ifundefined{selectfont}{\def\UrlFont{\sf}}{\def\UrlFont{\small\sffamily}}}
  206 +\def\url@crcstyle{\@ifundefined{selectfont}{\def\UrlFont{\sf}}{\def\UrlFont{\scriptsize\sffamily}}}
  207 +\urlstyle{leo}
  208 +
  209 +%% Fix Hypenation - to restore hyphenation we need this package.
  210 +%% https://twitter.com/anjirokhan/status/546046683331973120
  211 +\usepackage{ragged2e}
  212 +
  213 +\usepackage{enumitem}
  214 +
  215 +% Set footones ALWAYS at the bottom of the pages
  216 +\usepackage[bottom]{footmisc}
  217 +
  218 +% Optionally save space in lists (place this command after a list environment (e.g., itemize, enumerate, description)
  219 +\newcommand{\compresslist}{
  220 + \vspace{-1em}
  221 + \setlength{\itemsep}{1pt}
  222 + \setlength{\parskip}{0pt}
  223 + \setlength{\parsep}{0pt}
  224 +}
  225 +
  226 +% -----------------------------------------------------------------------------
  227 +% Hyperref for fancy typesetting, PDF metadata, and PDF bookmarks
  228 +\RequirePackage{color}
  229 +\definecolor{linkColor}{RGB}{6,125,233}
  230 +\RequirePackage[
  231 + colorlinks,
  232 + citecolor=black,
  233 + linkcolor=black,
  234 + menucolor=black,
  235 + urlcolor=linkColor,
  236 + linktocpage,
  237 + naturalnames,
  238 + plainpages,
  239 + breaklinks=true,
  240 + bookmarksnumbered,
  241 + pdfstartview={FitH},
  242 + final
  243 +]{hyperref}
  244 +
  245 +% Numbering is not allowed for any {sub{sub}}sections
  246 +\setcounter{secnumdepth}{-1}
  247 +
  248 +% -----------------------------------------------------------------------------
  249 +% Text enhancements
  250 +
  251 +\doublehyphendemerits=9999 % No consecutive line hyphens
  252 +\brokenpenalty=9999 % No broken words across pages
  253 +\widowpenalty=9999 % Almost no widows at bottom of page
  254 +\clubpenalty=9999 % Almost no orphans at top of page
  255 +\interfootnotelinepenalty=9999 % Almost never break footnotes
  256 +
  257 +% -----------------------------------------------------------------------------
  258 +% Allow placing an optional teaser image below author(s) name
  259 +
  260 +\newcommand{\acm@empty}{}
  261 +\newcommand{\acm@teaser}{}
  262 +\newcommand{\teaser}[1]{\renewcommand{\acm@teaser}{#1}}
  263 +
  264 +% -----------------------------------------------------------------------------
  265 +% Authors handling
  266 +
  267 +\gdef\numberofauthors#1{}
  268 +\newcommand{\alignauthor}[1]{%
  269 + \parbox[t]{0.5\linewidth}{\raggedright#1}%
  270 +}
  271 +\newcommand{\affaddr}[1]{#1}
  272 +\newcommand{\email}[1]{#1}
  273 +
  274 +% -----------------------------------------------------------------------------
  275 +% Typeset first page
  276 +
  277 +\renewcommand{\maketitle}{
  278 + % allocate paper title
  279 + \begin{minipage}[t]{0.19\textwidth}\mbox{}\end{minipage}%
  280 + \begin{minipage}[b]{0.81\textwidth}
  281 + \rule{1.03\textwidth}{3pt}
  282 + \renewcommand\baselinestretch{0.75}
  283 + \usefont{OT1}{phv}{bc}{n}\selectfont
  284 + \raggedright\Huge\bfseries\@title\par
  285 + \end{minipage}
  286 +
  287 + \vfil
  288 +
  289 + % allocate authors, optional teaser, ...
  290 +% \begin{minipage}[b][0.74\textheight][b]{\linewidth}
  291 +% \begin{minipage}[t][0.2\textheight][t]{\linewidth}\mbox{}\end{minipage}
  292 + \begin{minipage}[t][0.76\textheight][t]{\linewidth}
  293 + \ifx\acm@teaser\acm@empty
  294 + \begin{minipage}[t][0.5\textheight][t]{\linewidth}{\small\@author}\end{minipage}
  295 + \else
  296 + \small\@author\par
  297 + \vfill
  298 + \begingroup
  299 + \def\@captype{figure}
  300 + \acm@teaser
  301 + \endgroup\par
  302 + \fi
  303 +
  304 + \vfil
  305 +
  306 + % ... and ACM copyright
  307 + \rule{\columnwidth}{0.5pt}
  308 + {\scriptsize\@copyrightinfo \\}
  309 + \end{minipage}
  310 +
  311 + % avoid title overlapping with abstract
  312 + \begin{minipage}[t][0.2\textheight][t]{\linewidth}\mbox{}\end{minipage}
  313 +}
  314 +
  315 +% -----------------------------------------------------------------------------
  316 +% Default copyright strip
  317 +\copyrightinfo{Paste the appropriate copyright statement here. ACM
  318 + now supports three different copyright statements:
  319 + \begin{itemize}[noitemsep,topsep=0pt,parsep=0pt,partopsep=0pt]
  320 + \item ACM copyright: ACM holds the copyright on the work. This is
  321 + the historical approach.
  322 + \item License: The author(s) retain copyright, but ACM receives an
  323 + exclusive publication license.
  324 + \item Open Access: The author(s) wish to pay for the work to be open
  325 + access. The additional fee must be paid to ACM.
  326 + \end{itemize}
  327 + This text field is large enough to hold the appropriate release
  328 + statement assuming it is single spaced in a sans-serif 7 point
  329 + font. \\ \textcolor{red}{Every submission will be assigned their own
  330 + unique DOI string to be included here.}}
  331 +
  332 +% -----------------------------------------------------------------------------
  333 +% Including bibspacing.sty inline from http://bit.ly/1vlKdb0
  334 +
  335 +% \newdimen\bibindent
  336 +% \setlength\bibindent{1.5em}
  337 +% \newdimen\bibspacing
  338 +% \setlength\bibspacing\z@
  339 +% \renewenvironment{thebibliography}[1]{%
  340 +% \section*{\refname
  341 +% \@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}}%
  342 +% \list{\@biblabel{\@arabic\c@enumiv}}%
  343 +% {\settowidth\labelwidth{\@biblabel{#1}}%
  344 +% \leftmargin\labelwidth
  345 +% \advance\leftmargin\labelsep
  346 +% \itemsep\z@skip % should this be commented out?
  347 +% \parsep\z@skip % should this be commented out?
  348 +% \@openbib@code
  349 +% \usecounter{enumiv}%
  350 +% \let\p@enumiv\@empty
  351 +% \renewcommand\theenumiv{\@arabic\c@enumiv}}%
  352 +% \sloppy\clubpenalty4000\widowpenalty4000%
  353 +% \sfcode`\.\@m}
  354 +% {\def\@noitemerr
  355 +% {\@latex@warning{Empty `thebibliography' environment}}%
  356 +% \endlist}
  357 +
  358 +%% https://code.google.com/p/tufte-latex/source/browse/tufte-common.def
  359 +
  360 +% Paragraph indentation and separation for marginal text
  361 +\newcommand{\@tufte@margin@par}{%
  362 + \setlength{\RaggedRightParindent}{0.5pc}%
  363 + \setlength{\JustifyingParindent}{0.5pc}%
  364 + \setlength{\parindent}{0.5pc}%
  365 + \setlength{\parskip}{0pt}%
  366 +}
  367 +
  368 +%%
  369 +% The placeins package provides the \FloatBarrier command. This forces
  370 +% LaTeX to place all of the floats before proceeding. We'll use this to
  371 +% keep the float (figure and table) numbers in sequence.
  372 +\RequirePackage{placeins}
  373 +
  374 +%%
  375 +% Margin float environment
  376 +
  377 +\newsavebox{\@tufte@margin@floatbox}
  378 +\newenvironment{@tufte@margin@float}[2][-1.2ex]%
  379 + {\FloatBarrier% process all floats before this point so the figure/table numbers stay in order.
  380 + \begin{lrbox}{\@tufte@margin@floatbox}%
  381 + \begin{minipage}{\marginparwidth}%
  382 + %% \@tufte@caption@font%
  383 + \def\@captype{#2}%
  384 + \hbox{}\vspace*{#1}%
  385 + %% \@tufte@caption@justification%
  386 + \@tufte@margin@par%
  387 + \noindent%
  388 + }
  389 + {\end{minipage}%
  390 + \end{lrbox}%
  391 + \marginpar{\usebox{\@tufte@margin@floatbox}}%
  392 + }
  393 +
  394 +
  395 +%%
  396 +% Margin figure environment
  397 +
  398 +\newenvironment{marginfigure}[1][-1.2ex]%
  399 + {\begin{@tufte@margin@float}[#1]{figure}}
  400 + {\end{@tufte@margin@float}}
  401 +
  402 +
  403 +%%
  404 +% Margin table environment
  405 +
  406 +\newenvironment{margintable}[1][-1.2ex]%
  407 + {\begin{@tufte@margin@float}[#1]{table}}
  408 + {\end{@tufte@margin@float}}
  409 +
  410 +%%
  411 +% Auto-detects the proper text alignment based on the various class options
  412 +
  413 +\newcommand*{\@tufte@justification@autodetect}{%
  414 + \ifthenelse{\boolean{@tufte@justified}}%
  415 + {\justifying}%
  416 + {\RaggedRight}%
  417 +}
  418 +
  419 +%%
  420 +% Forces the outer edge of the caption to be set ragged.
  421 +% Therefore, on verso pages it's ragged left, and on recto pages it's ragged right.
  422 +
  423 +\newcommand*{\@tufte@justification@caption@outer}{%
  424 + \ifthenelse{\boolean{@tufte@float@recto}}%
  425 + {\RaggedRight}%
  426 + {\RaggedLeft}%
  427 +}
  428 +
  429 +\newcommand*{\@tufte@justification@outer}{%
  430 + \@tufte@checkoddpage%
  431 + \ifthenelse{\boolean{@tufte@odd@page}}%
  432 + {\RaggedRight}%
  433 + {\RaggedLeft}%
  434 +}
  435 +
  436 +%%
  437 +% For the CCSXML 2012 Categories
  438 +
  439 +\let\@concepts\@empty
  440 +% Support for CCSXML file
  441 +\RequirePackage{comment}
  442 +\excludecomment{CCSXML}
  443 +
  444 +% New concepts scheme
  445 +%
  446 +% The first argument is the significance, the
  447 +% second is the concept(s)
  448 +%
  449 +\newcommand\ccsdesc[2][100]{%
  450 + \ccsdesc@parse#1~#2~}
  451 +%
  452 +% The parser of the expression Significance~General~Specific
  453 +%
  454 +\def\ccsdesc@parse#1~#2~#3~{%
  455 + \expandafter\ifx\csname CCS@#2\endcsname\relax
  456 + \expandafter\gdef\csname CCS@#2\endcsname{\textbullet\textbf{#2} $\to$ }%
  457 + \g@addto@macro{\@concepts}{\csname CCS@#2\endcsname}\fi
  458 + \expandafter\g@addto@macro\expandafter{\csname CCS@#2\endcsname}{%
  459 + \ifnum#1>499\textbf{#3; }\else
  460 + \ifnum#1>299\textit{#3; }\else
  461 + #3; \fi\fi}}
  462 +
  463 +\newcommand\printccsdesc{%
  464 + \ifx\@concepts\@empty\else
  465 + \if@twocolumn
  466 + \section*{CCS Concepts}
  467 + \@concepts
  468 + \else \small
  469 + \quotation{\@concepts}%
  470 + \fi
  471 + \fi}
  472 +
  473 +%%
  474 +% Pulling in citation formatting from `sigchi.cls' file.
  475 +
  476 +\parindent 0pt
  477 +\typeout{Using 'Abbrev' bibliography style}
  478 +\newcommand\bibyear[2]{%
  479 + \unskip\quad\ignorespaces#1\unskip
  480 + \if#2..\quad \else \quad#2 \fi
  481 +}
  482 +\newcommand{\bibemph}[1]{{\em#1}}
  483 +\newcommand{\bibemphic}[1]{{\em#1\/}}
  484 +\newcommand{\bibsc}[1]{{\sc#1}}
  485 +\def\@normalcite{%
  486 + \def\@cite##1##2{[##1\if@tempswa , ##2\fi]}%
  487 +}
  488 +\def\@citeNB{%
  489 + \def\@cite##1##2{##1\if@tempswa , ##2\fi}%
  490 +}
  491 +\def\@citeRB{%
  492 + \def\@cite##1##2{##1\if@tempswa , ##2\fi]}%
  493 +}
  494 +\def\start@cite#1#2{%
  495 + \edef\citeauthoryear##1##2##3{%
  496 + ###1%
  497 + \ifnum#2=\z@ \else\ ###2\fi
  498 + }%
  499 + \ifnum#1=\thr@@
  500 + \let\@@cite\@citeyear
  501 + \else
  502 + \let\@@cite\@citenormal
  503 + \fi
  504 + \@ifstar{\@citeNB\@@cite}{\@normalcite\@@cite}%
  505 +}
  506 +\def\cite{\start@cite23}
  507 +\def\citeNP{\cite*}
  508 +\def\citeA{\start@cite10}
  509 +\def\citeANP{\citeA*}
  510 +\def\shortcite{\start@cite23}
  511 +\def\shortciteNP{\shortcite*}
  512 +\def\shortciteA{\start@cite20}
  513 +\def\shortciteANP{\shortciteA*}
  514 +\def\citeyear{\start@cite30}
  515 +\def\citeyearNP{\citeyear*}
  516 +\def\citeN{%
  517 + \@citeRB
  518 + \def\citeauthoryear##1##2##3{##1\ [##3%
  519 + \def\reserved@a{##1}%
  520 + \def\citeauthoryear####1####2####3{%
  521 + \def\reserved@b{####1}%
  522 + \ifx\reserved@a\reserved@b
  523 + ####3%
  524 + \else
  525 + \errmessage{Package acmart Error: author mismatch
  526 + in \string\citeN^^J^^J%
  527 + See the acmart package documentation for explanation}%
  528 + \fi
  529 + }%
  530 + }%
  531 + \@ifstar\@citeyear\@citeyear
  532 +}
  533 +\def\shortciteN{%
  534 + \@citeRB
  535 + \def\citeauthoryear##1##2##3{##2\ [##3%
  536 + \def\reserved@a{##2}%
  537 + \def\citeauthoryear####1####2####3{%
  538 + \def\reserved@b{####2}%
  539 + \ifx\reserved@a\reserved@b
  540 + ####3%
  541 + \else
  542 + \errmessage{Package acmart Error: author mismatch
  543 + in \string\shortciteN^^J^^J%
  544 + See the acmart package documentation for explanation}%
  545 + \fi
  546 + }%
  547 + }%
  548 + \@ifstar\@citeyear\@citeyear % changed from "\@ifstart" 12 Jan 2000 gkmt
  549 +}
  550 +
  551 + \def\@citenormal{%
  552 + \@ifnextchar [{\@tempswatrue\@citex;}
  553 + {\@tempswafalse\@citex[]}% GERRY FIX FOR BABEL 3/20/2009
  554 +}
  555 +\def\@citeyear{%
  556 + \@ifnextchar [{\@tempswatrue\@citex,}%
  557 + {\@tempswafalse\@citex[]}% GERRY FIX FOR BABEL 3/20/2009
  558 +}
  559 +\def\@citex#1[#2]#3{%
  560 + \let\@citea\@empty
  561 + \@cite{%
  562 + \@for\@citeb:=#3\do{%
  563 + \@citea
  564 + \def\@citea{#1, }% % GERRY FIX FOR BABEL 3/20/2009 -- SO THAT YOU GET [1, 2] IN THE BODY TEXT
  565 + \edef\@citeb{\expandafter\@iden\@citeb}%
  566 + \if@filesw
  567 + \immediate\write\@auxout{\string\citation{\@citeb}}%
  568 + \fi
  569 + \@ifundefined{b@\@citeb}{%
  570 + {\bf ?}%
  571 + \@warning{%
  572 + Citation `\@citeb' on page \thepage\space undefined%
  573 + }%
  574 + }%
  575 + {\csname b@\@citeb\endcsname}%
  576 + }%
  577 + }{#2}%
  578 +}
  579 +\let\@biblabel\@gobble
  580 +\newdimen\bibindent
  581 +\bibindent=0em
  582 +\newskip\bibsep % [jdf] allow bib space tweaking
  583 +\bibsep 2pt \@plus 1pt \@minus 1pt % [jdf] initial spacing between ref entries
  584 +\setcounter{enumi}{1}
  585 +\def\thebibliography#1{%
  586 +%% Comment this to have blue DOI links.
  587 +\makeatletter
  588 +\def\url@leostyle{%
  589 +\@ifundefined{selectfont}{\def\UrlFont{\sf}}{\def\UrlFont{\color{black}\small\bf\ttfamily}}}
  590 +\makeatother
  591 +\urlstyle{leo}
  592 +%%
  593 + \section{%
  594 + {REFERENCES}
  595 + \@mkboth{{\refname}}{{\refname}}%
  596 + }%
  597 +% \list{[\arabic{enumi}]}{%
  598 + \list{\arabic{enumi}.}{% DLC
  599 +% \settowidth\labelwidth{[#1]}%
  600 + \settowidth\labelwidth{#1.}% DLC
  601 + \leftmargin\labelwidth
  602 + \advance\leftmargin\labelsep
  603 + \advance\leftmargin\bibindent
  604 + \itemindent -\bibindent
  605 + \listparindent \itemindent
  606 + \usecounter{enumi}
  607 + \itemsep\bibsep% [jdf] standard spacing between references
  608 + }%
  609 + \let\newblock\@empty
  610 + \raggedright %% 7 JAN 2000 gkmt
  611 + \sloppy
  612 + \sfcode`\.=1000\relax
  613 +}
  614 +
  615 +
  616 +\gdef\balancecolumns
  617 +{\vfill\eject
  618 +\global\@colht=\textheight
  619 +\global\ht\@cclv=\textheight
  620 +}
  621 +
  622 +% That's all folks!
  623 +\endinput
... ...
opensym2017/sigchi.cls 0 → 100644
... ... @@ -0,0 +1,1676 @@
  1 +% CHI Proceedings Template.
  2 +%
  3 +% FILENAME: sigchi.cls
  4 +%
  5 +% SOURCE: See https://github.com/sigchi for latest official version.
  6 +%
  7 +% NOTE: If you wish to edit this document, please list edits properly
  8 +% in the CHANGELOG section and not scattered through the code.
  9 +%
  10 +% CHANGELOG:
  11 +%
  12 +% 2015-12-10 Daniel Ashbrook Switch 7-bit fonts to 8-bit
  13 +%
  14 +% 2015-03-21 David A. Shamma Updating for new format and Github
  15 +% repo for CHI 2016.
  16 +%
  17 +% 2014-07-30 Scooter Morris Updated to add DOI text to copyright
  18 +% footer
  19 +%
  20 +% 2011-10-19 DanCo Added \sloppy to reduce overfull lines per Sheridan
  21 +%
  22 +% 2011-08-28 Jean-Daniel Fekete Re-added flushleft in \terms &
  23 +% \category, added compatibility for the caption package
  24 +%
  25 +% 2006 Andrew Duchowski Updated the metafont names to use more
  26 +% modern Berry font naming schemes.
  27 +%
  28 +% 2002-07-30 JS/GM Fix to vertical spacing before Proofs
  29 +%
  30 +% 2002-07-29 Georgia Fixed bug in sub-sub-section numbering in
  31 +% paragraphs
  32 +%
  33 +% 1999-09-11 Gerry Murry Allowance Made to switch default fonts
  34 +% between those systems using METAFONT and those using 'Type 1' or
  35 +% 'Truetype' fonts. See LINE NUMBER 266 for details. Also provided
  36 +% for enumerated/annotated Corollaries 'surrounded' by enumerated
  37 +% Theorems (line 838).
  38 +%
  39 +% Modified from ACM_PROC_ARTICLE-SP DOCUMENT STYLE by G.K.M. Tobin
  40 +% August-October 1999. Adapted from ARTICLE document style by Ken
  41 +% Traub, Olin Shivers also using elements of esub2acm.cls. Modified
  42 +% from ARTICLE DOCUMENT STYLE -- Released 16 March 1988 for LaTeX
  43 +% version 2.09 by Leslie Lamport, 16 March 1988.
  44 +%
  45 +% MISC:
  46 +%
  47 +% Fixed the format to match the Word template and added a \teaser
  48 +% command to add a teaser image.
  49 +%
  50 +% Made the Permission Statement / Conference Info / Copyright Info
  51 +% 'user definable' in the source .tex file OR automatic if not
  52 +% specified. This 'sp' version does NOT produce the permission block.
  53 +%
  54 +% Major change in January 2000 was to include a "blank line" in
  55 +% between new paragraphs. This involved major changes to the, then,
  56 +% acmproc-sp.cls 1.0SP file, precipitating a 'new' name:
  57 +% "acm_proc_article-sp.cls" V2.01SP. Footnotes inside table cells
  58 +% using \minipage (Oct. 2002)
  59 +%
  60 +% LICENSE: Public domain: You are free to do whatever you want with
  61 +% this template. If you improve this in any way, please submit a
  62 +% pull request to the Github repository.
  63 +%
  64 +% ---- Start of example ----
  65 +%
  66 +% \documentclass{sigchi}
  67 +% \usepackage{times}
  68 +% \pagenumbering{arabic} % Arabic page numbers for submission.
  69 +% % Remove this line to eliminate page numbers
  70 +% % for the camera ready copy
  71 +% \title{The Title}
  72 +% \numberofauthors{2}
  73 +% \author{
  74 +% \alignauthor Author 1
  75 +% \affaddr{Affiliation}\\
  76 +% \affaddr{Affiliation}\\
  77 +% \email{author@a.com}
  78 +% \alignauthor Author 2
  79 +% \affaddr{Affiliation}\\
  80 +% \affaddr{Affiliation}\\
  81 +% \email{author2@b.com}
  82 +% }
  83 +%
  84 +%\begin{document}
  85 +%\maketitle
  86 +%\abstract{This is the abstract}
  87 +%\keywords{Put author keywords here}
  88 +%\classification{The ACM Classification keywords here.}
  89 +%
  90 +%\section{Introduction}
  91 +% ...
  92 +%
  93 +% ---- End of example ----
  94 +%
  95 +% For the ACM Tracking Purposes
  96 +\def\fileversion{V0.20}
  97 +\def\filedate{March 21, 2015}
  98 +\def\docdate {\filedate}
  99 +% Packages
  100 +\usepackage{epsfig}
  101 +\usepackage{amssymb}
  102 +\usepackage{amsmath}
  103 +\usepackage{amsfonts}
  104 +%%% ACM_PROC_ARTICLE-SP is a document style for producing two-column camera-ready pages for
  105 +%%% ACM conferences, according to ACM specifications. The main features of
  106 +%%% this style are:
  107 +%%%
  108 +%%% 1) Two columns.
  109 +%%% 2) Side and top margins of 4.5pc, bottom margin of 6pc, column gutter of
  110 +%%% 2pc, hence columns are 20pc wide and 55.5pc tall. (6pc =3D 1in, approx)
  111 +%%% 3) First page has title information, and an extra 6pc of space at the
  112 +%%% bottom of the first column for the ACM copyright notice.
  113 +%%% 4) Text is 9pt on 10pt baselines; titles (except main) are 9pt bold.
  114 +%%%
  115 +%%%
  116 +%%% There are a few restrictions you must observe:
  117 +%%%
  118 +%%% 1) You cannot change the font size; ACM wants you to use 9pt.
  119 +%%% 3) You must start your paper with the \maketitle command. Prior to the
  120 +%%% \maketitle you must have \title and \author commands. If you have a
  121 +%%% \date command it will be ignored; no date appears on the paper, since
  122 +%%% the proceedings will have a date on the front cover.
  123 +%%% 4) Marginal paragraphs, tables of contents, lists of figures and tables,
  124 +%%% and page headings are all forbidden.
  125 +%%% 5) The `figure' environment will produce a figure one column wide; if you
  126 +%%% want one that is two columns wide, use `figure*'.
  127 +%%%
  128 +%
  129 +%%% Copyright Space:
  130 +%%% This style automatically leaves 1" blank space at the bottom of page 1/
  131 +%%% column 1. This space can optionally be filled with some text using the
  132 +%%% \toappear{...} command. If used, this command must be BEFORE the \maketitle
  133 +%%% command. If this command is defined AND [preprint] is on, then the
  134 +%%% space is filled with the {...} text (at the bottom); otherwise, it is
  135 +%%% blank. If you use \toappearbox{...} instead of \toappear{...} then a
  136 +%%% box will be drawn around the text (if [preprint] is on).
  137 +%%%
  138 +%%% A typical usage looks like this:
  139 +%%% \toappear{To appear in the Ninth AES Conference on Medievil Lithuanian
  140 +%%% Embalming Technique, June 1991, Alfaretta, Georgia.}
  141 +%%% This will be included in the preprint, and left out of the conference
  142 +%%% version.
  143 +%%%
  144 +%%% WARNING:
  145 +%%% Some dvi-ps converters heuristically allow chars to drift from their
  146 +%%% true positions a few pixels. This may be noticeable with the 9pt sans-serif
  147 +%%% bold font used for section headers.
  148 +%%% You may turn this hackery off via the -e option:
  149 +%%% dvips -e 0 foo.dvi >foo.ps
  150 +%%%
  151 +
  152 +\typeout{}
  153 +
  154 +\typeout{Document Class SIGCHI}
  155 +
  156 +\typeout{Available at https://github.com/sigchi.}
  157 +
  158 +\typeout{}
  159 +
  160 +\typeout{- <May 11, 2016> Updated by Florian Heller to accept ACM copyright commands.}
  161 +
  162 +\typeout{- <March 21, 2015> Updated by David A. Shamma for CHI 2016.}
  163 +
  164 +\typeout{- <July 30, 2014> Updated for for 2014 by William Hudson and
  165 + Jean-Daniel Fekete.}
  166 +
  167 +\typeout{- <October 19, 2010> Updated for 2011 by Manas Tungare.}
  168 +
  169 +\typeout{Shamelessly copied from}
  170 +
  171 +\typeout{- <September 7, 2000> Modified by Jan O. Borchers from
  172 + `chiproceedings'}
  173 +
  174 +\typeout{- <October 2, 2002> Modified by G.K.M. Tobin from
  175 + `acm_proc_article-sp'}
  176 +
  177 +\typeout{- <May 22, 1989> Hacked from `acmconf' 4/91 by
  178 + shivers@cs.cmu.edu, 4/93 by theobald@cs.mcgill.ca}
  179 +
  180 +\typeout{Excerpts were taken from (Journal Style) 'esub2acm.cls'.}
  181 +
  182 +\typeout{}
  183 +
  184 +% Options taken from ACM LaTeX template. FH, May 11 2016
  185 +% New option code by BV
  186 +
  187 +\newcount\ACM@basesize
  188 +\ACM@basesize=9\relax
  189 +\DeclareOption{9pt}{\ACM@basesize=9\relax}
  190 +\DeclareOption{10pt}{\ACM@basesize=10\relax}
  191 +\DeclareOption{11pt}{\ClassError{sig-alternate}{The `11pt' option is
  192 + not allowed}{sig-alternate now exists in 9pt and 10pt versions only}}
  193 +\DeclareOption{12pt}{\ClassError{sig-alternate}{The `12pt' option is
  194 + not allowed}{sig-alternate now exists in 9pt and 10pt versions only}}
  195 +
  196 +\ExecuteOptions{9pt}
  197 +\ProcessOptions
  198 +
  199 +\def\doi#1{\def\@doi{#1}}
  200 +\doi{http://dx.doi.org/10.1145/0000000.0000000}
  201 +
  202 +\let\@concepts\@empty
  203 +
  204 +
  205 +\oddsidemargin 1.9025cm % [jdf] stick to CHI Formating Guidelines
  206 +\evensidemargin 1.9025cm % [jdf] idem
  207 +\advance\oddsidemargin by -1in % Correct for LaTeX gratuitousness
  208 +\advance\evensidemargin by -1in % Correct for LaTeX gratuitousness
  209 +\marginparwidth 0pt % Margin pars are not allowed.
  210 +\marginparsep 11pt % Horizontal space between outer margin and
  211 + % marginal note
  212 +
  213 + % Top of page:
  214 +\topmargin 2.2cm % [jdf] stick to CHI Formating Guidelines
  215 +%\topmargin 6.5pc % Nominal distance from top of page to top of % 00-09-07 job (for A4)
  216 + % box containing running head.
  217 +\advance\topmargin by -1in % Correct for LaTeX gratuitousness
  218 +\headheight 0pt % Height of box containing running head.
  219 +\headsep 0pt % Space between running head and text.
  220 + % Bottom of page:
  221 +\footskip 30pt % Distance from baseline of box containing foot
  222 + % to baseline of last line of text.
  223 +\@ifundefined{footheight}{\newdimen\footheight}{}% this is for LaTeX2e
  224 +\footheight 12pt % Height of box containing running foot.
  225 +
  226 +
  227 +%% Must redefine the top margin so there's room for headers and
  228 +%% page numbers if you are using the preprint option. Footers
  229 +%% are OK as is. Olin.
  230 +\advance\topmargin by -37pt % Leave 37pt above text for headers
  231 +\headheight 12pt % Height of box containing running head.
  232 +\headsep 25pt % Space between running head and text.
  233 +
  234 +\textheight 23cm % [jdf] stick to CHI Formating Guidelines
  235 +\textwidth 18cm % [jdf] stick to CHI Formating Guidelines
  236 + % For two-column mode:
  237 +\columnsep 8.5mm % [jdf] stick to CHI Formating Guidelines
  238 +\columnseprule 0pt % Width of rule between columns.
  239 +\hfuzz 1pt % Allow some variation in column width, otherwise it's
  240 + % too hard to typeset in narrow columns.
  241 +
  242 +\footnotesep 5.6pt % Height of strut placed at the beginning of every
  243 + % footnote =3D height of normal \footnotesize strut,
  244 + % so no extra space between footnotes.
  245 +
  246 +\skip\footins 8.1pt plus 4pt minus 2pt % Space between last line of text and
  247 + % top of first footnote.
  248 +\floatsep 11pt plus 2pt minus 2pt % Space between adjacent floats moved
  249 + % to top or bottom of text page.
  250 +\textfloatsep 18pt plus 2pt minus 4pt % Space between main text and floats
  251 + % at top or bottom of page.
  252 +\intextsep 11pt plus 2pt minus 2pt % Space between in-text figures and
  253 + % text.
  254 +\@ifundefined{@maxsep}{\newdimen\@maxsep}{}% this is for LaTeX2e
  255 +\@maxsep 18pt % The maximum of \floatsep,
  256 + % \textfloatsep and \intextsep (minus
  257 + % the stretch and shrink).
  258 +\dblfloatsep 11pt plus 2pt minus 2pt % Same as \floatsep for double-column
  259 + % figures in two-column mode.
  260 +\dbltextfloatsep 18pt plus 2pt minus 4pt% \textfloatsep for double-column
  261 + % floats.
  262 +\@ifundefined{@dblmaxsep}{\newdimen\@dblmaxsep}{}% this is for LaTeX2e
  263 +\@dblmaxsep 18pt % The maximum of \dblfloatsep and
  264 + % \dbltexfloatsep.
  265 +\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be
  266 + % 0pt plus ...)
  267 +\@fpsep 8pt plus 2fil % Space between floats on float page/column.
  268 +\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be
  269 + % 0pt plus ... )
  270 +\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
  271 +\@dblfpsep 8pt plus 2fil % Space between floats on float page.
  272 +\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
  273 + % 0pt plus ... )
  274 +\marginparpush 5pt % Minimum vertical separation between two marginal
  275 + % notes.
  276 +
  277 +\parskip 0pt % Extra vertical space between paragraphs.
  278 + % Set to 0pt outside sections, to keep section heads
  279 + % uniformly spaced. The value of parskip is set
  280 + % to leading value _within_ sections.
  281 + % 12 Jan 2000 gkmt
  282 +\parindent 0pt % Width of paragraph indentation.
  283 +%\partopsep 2pt plus 1pt minus 1pt% Extra vertical space, in addition to
  284 + % \parskip and \topsep, added when user
  285 + % leaves blank line before environment.
  286 +\partopsep 0pt % 00-09-07 job
  287 +
  288 +\doublehyphendemerits=9999 % No consecutive line hyphens
  289 +\brokenpenalty=9999 % No broken words across pages
  290 +\widowpenalty=9999 % Almost no widows at bottom of page
  291 +\clubpenalty=9999 % Almost no orphans at top of page
  292 +\interfootnotelinepenalty=9999 % Almost never break footnotes
  293 +
  294 +\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
  295 +\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
  296 +\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
  297 +
  298 +\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
  299 +\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
  300 +\@itempenalty -\@lowpenalty % Between list items.
  301 +
  302 +\@namedef{ds@10pt}{\@latexerr{The `10pt' option is not allowed in the `acmconf'
  303 + document style.}\@eha}
  304 +\@namedef{ds@11pt}{\@latexerr{The `11pt' option is not allowed in the `acmconf'
  305 + document style.}\@eha}
  306 +\@namedef{ds@12pt}{\@latexerr{The `12pt' option is not allowed in the `acmconf'
  307 + document style.}\@eha}
  308 +
  309 +\@options
  310 +
  311 +\lineskip 2pt % \lineskip is 1pt for all font sizes.
  312 +\normallineskip 2pt
  313 +\def\baselinestretch{1}
  314 +
  315 +\abovedisplayskip 9pt plus2pt minus4.5pt%
  316 +\belowdisplayskip \abovedisplayskip
  317 +\abovedisplayshortskip \z@ plus3pt%
  318 +\belowdisplayshortskip 5.4pt plus3pt minus3pt%
  319 +\let\@listi\@listI % Setting of \@listi added 9 Jun 87
  320 +
  321 +\def\small{\@setsize\small{9pt}\viiipt\@viiipt
  322 +\abovedisplayskip 7.6pt plus 3pt minus 4pt%
  323 +\belowdisplayskip \abovedisplayskip
  324 +\abovedisplayshortskip \z@ plus2pt%
  325 +\belowdisplayshortskip 3.6pt plus2pt minus 2pt
  326 +\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
  327 +\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
  328 +\itemsep \parsep}}
  329 +
  330 +\def\footnotesize{\@setsize\footnotesize{9pt}\ixpt\@ixpt
  331 +\abovedisplayskip 6.4pt plus 2pt minus 4pt%
  332 +\belowdisplayskip \abovedisplayskip
  333 +\abovedisplayshortskip \z@ plus 1pt%
  334 +\belowdisplayshortskip 2.7pt plus 1pt minus 2pt
  335 +\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
  336 +\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
  337 +\itemsep \parsep}}
  338 +
  339 +\newcount\aucount
  340 +\newcount\originalaucount
  341 +\newdimen\auwidth
  342 +\auwidth=\textwidth
  343 +\newdimen\auskip
  344 +\newcount\auskipcount
  345 +\newdimen\auskip
  346 +\global\auskip=1pc
  347 +\newdimen\allauboxes
  348 +\allauboxes=\auwidth
  349 +\newtoks\addauthors
  350 +
  351 +\newtoks\subtitletext
  352 +\gdef\subtitle#1{\subtitletext={#1}}
  353 +
  354 +\gdef\additionalauthors#1{\addauthors={#1}}
  355 +
  356 +\gdef\numberofauthors#1{\global\aucount=#1
  357 +\ifnum\aucount>3\global\originalaucount=\aucount \global\aucount=3\fi%
  358 +\global\auskipcount=\aucount\global\advance\auskipcount by -1 % [jdf] fix
  359 +\global\multiply\auskipcount by 2
  360 +\global\multiply\auskip by \auskipcount
  361 +\global\advance\auwidth by -\auskip
  362 +\global\divide\auwidth by \aucount
  363 +\global\advance\auwidth by -5pt} % [jdf] tabular add some horizontal space
  364 +
  365 +% \and was modified to count the number of authors. GKMT 12 Aug 1999
  366 +\def\alignauthor{% % \begin{tabular}
  367 + \end{tabular} %
  368 + \hskip 1pt % [jdf] allow break for more than 3 authors
  369 + \begin{tabular}[t]{p{\auwidth}}%
  370 + \centering\baselineskip 13pt}% [jdf] added more vertical spacing
  371 +
  372 +% *** NOTE *** NOTE *** NOTE *** NOTE ***
  373 +% If you have 'font problems' then you may need
  374 +% to change these, e.g. 'arialb' instead of "arialbd".
  375 +% Gerry Murray 11/11/1999
  376 +% *** OR ** comment out block A and activate block B or vice versa.
  377 +% **********************************************
  378 +%
  379 +% -- Start of block A -- (Type 1 or Truetype fonts)
  380 +%\newfont{\secfnt}{timesbd at 12pt} % was timenrb originally - now is timesbd
  381 +%\newfont{\secit}{timesbi at 12pt} %13 Jan 00 gkmt
  382 +%\newfont{\subsecfnt}{timesi at 11pt} % was timenrri originally - now is timesi
  383 +%\newfont{\subsecit}{timesbi at 11pt} % 13 Jan 00 gkmt -- was times changed to timesbi gm 2/4/2000
  384 +% % because "normal" is italic, "italic" is Roman
  385 +%\newfont{\ttlfnt}{arialbd at 18pt} % was arialb originally - now is arialbd
  386 +%\newfont{\ttlit}{arialbi at 18pt} % 13 Jan 00 gkmt
  387 +%\newfont{\subttlfnt}{arial at 14pt} % was arialr originally - now is arial
  388 +%\newfont{\subttlit}{ariali at 14pt} % 13 Jan 00 gkmt
  389 +%\newfont{\subttlbf}{arialbd at 14pt} % 13 Jan 00 gkmt
  390 +%\newfont{\aufnt}{arial at 12pt} % was arialr originally - now is arial
  391 +%\newfont{\auit}{ariali at 12pt} % 13 Jan 00 gkmt
  392 +%\newfont{\affaddr}{arial at 10pt} % was arialr originally - now is arial
  393 +%\newfont{\affaddrit}{ariali at 10pt} %13 Jan 00 gkmt
  394 +%\newfont{\eaddfnt}{arial at 12pt} % was arialr originally - now is arial
  395 +%\newfont{\ixpt}{times at 9pt} % was timenrr originally - now is times
  396 +%\newfont{\confname}{timesi at 8pt} % was timenrri - now is timesi
  397 +%\newfont{\crnotice}{times at 8pt} % was timenrr originally - now is times
  398 +%\newfont{\ninept}{times at 9pt} % was timenrr originally - now is times
  399 +
  400 +% *********************************************
  401 +% -- End of block A --
  402 +%
  403 +%
  404 +% -- Start of block B -- METAFONT
  405 +% +++++++++++++++++++++++++++++++++++++++++++++
  406 +% Next (default) block for those using Metafont
  407 +% Gerry Murray 11/11/1999
  408 +% *** THIS BLOCK FOR THOSE USING METAFONT *****
  409 +% *********************************************
  410 +%%\newfont{\secfnt}{ptmb at 12pt}
  411 +%\newfont{\secfnt}{phvb at 9pt} % 00-09-07 job
  412 +%%\newfont{\secit}{ptmbi at 12pt} %13 Jan 00 gkmt
  413 +%\newfont{\secit}{phvbo at 9pt} %13 Jan 00 gkmt % 00-09-07 job
  414 +%%\newfont{\subsecfnt}{ptmri at 11pt}
  415 +%\newfont{\subsecfnt}{phvro at 9pt} % 00-09-07 job
  416 +%%\newfont{\subsecit}{ptmbi at 11pt} % 13 Jan 00 gkmt -- was ptmr changed to ptmbi gm 2/4/2000
  417 +%\newfont{\subsecit}{phvr at 9pt} % 13 Jan 00 gkmt -- was ptmr changed to ptmbi gm 2/4/2000 % 00-09-07 job
  418 +% % because "normal" is italic, "italic" is Roman
  419 +%\newfont{\ttlfnt}{phvb at 18pt}
  420 +%\newfont{\ttlit}{phvbo at 18pt} % GM 2/4/2000
  421 +%\newfont{\subttlfnt}{phvr at 14pt}
  422 +%\newfont{\subttlit}{phvro at 14pt} % GM 2/4/2000
  423 +%\newfont{\subttlbf}{phvb at 14pt} % 13 Jan 00 gkmt
  424 +%%\newfont{\aufnt}{phvr at 12pt}
  425 +%\newfont{\aufnt}{ptmb at 12pt} % 00-09-07 job
  426 +%%\newfont{\auit}{phvro at 12pt} % GM 2/4/2000
  427 +%\newfont{\auit}{ptmbo at 12pt} % GM 2/4/2000 % 00-09-07 job
  428 +%%\newfont{\affaddr}{phvr at 10pt}
  429 +%\newfont{\affaddr}{ptmr at 12pt} % 00-09-07 job
  430 +%%\newfont{\affaddrit}{phvro at 10pt} % GM 2/4/2000
  431 +%\newfont{\affaddrit}{ptmro at 12pt} % GM 2/4/2000 % 00-09-07 job
  432 +%%\newfont{\eaddfnt}{phvr at 12pt}
  433 +%\newfont{\eaddfnt}{ptmr at 12pt} % 00-09-07 job
  434 +%%\newfont{\ixpt}{ptmr at 9pt}
  435 +%\newfont{\ixpt}{ptmr at 10pt} % 00-09-07 job
  436 +%\newfont{\confname}{ptmri at 8pt}
  437 +%\newfont{\crnotice}{ptmr at 8pt}
  438 +%%\newfont{\ninept}{ptmr at 9pt}
  439 +%\newfont{\ninept}{ptmr at 10pt} % 00-09-07 job
  440 +% *********************************************
  441 +% -- End of block B --
  442 +%
  443 +%
  444 +% -- Start of block C -- METAFONT (modern usage)
  445 +% +++++++++++++++++++++++++++++++++++++++++++++
  446 +% Next (default) block for those using Metafont
  447 +% Andrew Duchowski 06/19/2006
  448 +% *** THIS BLOCK FOR THOSE USING METAFONT *****
  449 +% *********************************************
  450 +% notes: 7t fonts are 7-bit latex, 8t fonts are T1 fonts
  451 +\newfont{\secfnt}{phvb8t at 9pt}
  452 +\newfont{\secit}{phvbo8t at 9pt}
  453 +\newfont{\subsecfnt}{phvro8t at 9pt}
  454 +\newfont{\subsecit}{phvr8t at 9pt}
  455 +\newfont{\ttlfnt}{phvb8t at 18pt}
  456 +\newfont{\ttlit}{phvbo8t at 18pt}
  457 +\newfont{\subttlfnt}{phvr8t at 14pt}
  458 +\newfont{\subttlit}{phvro8t at 14pt}
  459 +\newfont{\subttlbf}{phvb8t at 14pt}
  460 +\newfont{\aufnt}{ptmb8t at 12pt}
  461 +\newfont{\auit}{ptmbo8t at 12pt}
  462 +\newfont{\affaddr}{ptmr8t at 12pt}
  463 +\newfont{\affaddrit}{ptmro8t at 12pt}
  464 +\newfont{\eaddfnt}{ptmr8t at 12pt}
  465 +\newfont{\ixpt}{ptmr8t at 10pt}
  466 +\newfont{\confname}{ptmri8t at 8pt}
  467 +\newfont{\crnotice}{ptmr8t at 8pt}
  468 +\newfont{\ninept}{ptmr8t at 10pt}
  469 +% +++++++++++++++++++++++++++++++++++++++++++++
  470 +% -- End of block C --
  471 +
  472 +%\def\email#1{{{\eaddfnt{\vskip 4pt#1}}}}
  473 +\def\email#1{{{\eaddfnt{#1}}}} % 00-09-07 job
  474 +
  475 +\def\addauthorsection{\ifnum\originalaucount>3
  476 + \section{Additional Authors}\the\addauthors
  477 + \fi}
  478 +
  479 +\newcount\savesection
  480 +\newcount\sectioncntr
  481 +\global\sectioncntr=1
  482 +
  483 +\setcounter{secnumdepth}{0}
  484 +
  485 +\def\appendix{\par
  486 +\section*{APPENDIX}
  487 +\setcounter{section}{0}
  488 + \setcounter{subsection}{0}
  489 + \def\thesection{\Alph{section}} }
  490 +
  491 +
  492 +%\leftmargini 22.5pt
  493 +\leftmargini 10pt % DLC
  494 +\leftmarginii 19.8pt % > \labelsep + width of '(m)'
  495 +\leftmarginiii 16.8pt % > \labelsep + width of 'vii.'
  496 +\leftmarginiv 15.3pt % > \labelsep + width of 'M.'
  497 +\leftmarginv 9pt
  498 +\leftmarginvi 9pt
  499 +
  500 +\leftmargin\leftmargini
  501 +\labelsep 4.5pt
  502 +\labelwidth\leftmargini\advance\labelwidth-\labelsep
  503 +
  504 +\def\@listI{\leftmargin\leftmargini \parsep 3.6pt plus 2pt minus 1pt%
  505 +%\topsep 7.2pt plus 2pt minus 4pt%
  506 +\topsep 0pt% % 00-09-07 job
  507 +\itemsep 3.6pt plus 2pt minus 1pt}
  508 +
  509 +\let\@listi\@listI
  510 +\@listi
  511 +
  512 +\def\@listii{\leftmargin\leftmarginii
  513 + \labelwidth\leftmarginii\advance\labelwidth-\labelsep
  514 + \topsep 3.6pt plus 2pt minus 1pt
  515 + \parsep 1.8pt plus 0.9pt minus 0.9pt
  516 + \itemsep \parsep}
  517 +
  518 +\def\@listiii{\leftmargin\leftmarginiii
  519 + \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
  520 + \topsep 1.8pt plus 0.9pt minus 0.9pt
  521 + \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
  522 + \itemsep \topsep}
  523 +
  524 +\def\@listiv{\leftmargin\leftmarginiv
  525 + \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
  526 +
  527 +\def\@listv{\leftmargin\leftmarginv
  528 + \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
  529 +
  530 +\def\@listvi{\leftmargin\leftmarginvi
  531 + \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
  532 +
  533 +\def\labelenumi{\theenumi.}
  534 +\def\theenumi{\arabic{enumi}}
  535 +
  536 +\def\labelenumii{(\theenumii)}
  537 +\def\theenumii{\alph{enumii}}
  538 +\def\p@enumii{\theenumi}
  539 +
  540 +\def\labelenumiii{\theenumiii.}
  541 +\def\theenumiii{\roman{enumiii}}
  542 +\def\p@enumiii{\theenumi(\theenumii)}
  543 +
  544 +\def\labelenumiv{\theenumiv.}
  545 +\def\theenumiv{\Alph{enumiv}}
  546 +\def\p@enumiv{\p@enumiii\theenumiii}
  547 +
  548 +\def\labelitemi{$\bullet$}
  549 +\def\labelitemii{\bf --}
  550 +\def\labelitemiii{$\ast$}
  551 +\def\labelitemiv{$\cdot$}
  552 +
  553 +\def\verse{\let\\=\@centercr
  554 + \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
  555 + \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
  556 +\let\endverse\endlist
  557 +
  558 +\def\quotation{\list{}{\listparindent 1.5em
  559 + \itemindent\listparindent
  560 + \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
  561 +\let\endquotation=\endlist
  562 +
  563 +\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
  564 +\let\endquote=\endlist
  565 +
  566 +\def\descriptionlabel#1{\hspace\labelsep \bf #1}
  567 +\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
  568 + \let\makelabel\descriptionlabel}}
  569 +
  570 +\let\enddescription\endlist
  571 +
  572 +\def\theequation{\arabic{equation}}
  573 +
  574 +\arraycolsep 4.5pt % Half the space between columns in an array environment.
  575 +\tabcolsep 5.4pt % Half the space between columns in a tabular environment.
  576 +\arrayrulewidth .4pt % Width of rules in array and tabular environment.
  577 +\doublerulesep 1.8pt % Space between adjacent rules in array or tabular env.
  578 +
  579 +\tabbingsep \labelsep % Space used by the \' command. (See LaTeX manual.)
  580 +
  581 +\skip\@mpfootins =\skip\footins
  582 +
  583 +\fboxsep =2.7pt % Space left between box and text by \fbox and \framebox.
  584 +\fboxrule =.4pt % Width of rules in box made by \fbox and \framebox.
  585 +
  586 +\def\thepart{\Roman{part}} % Roman numeral part numbers.
  587 +\def\thesection {\arabic{section}}
  588 +\def\thesubsection {\thesection.\arabic{subsection}}
  589 +%\def\thesubsubsection {\thesubsection.\arabic{subsubsection}} % GM 7/30/2002
  590 +%\def\theparagraph {\thesubsubsection.\arabic{paragraph}} % GM 7/30/2002
  591 +\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
  592 +
  593 +\def\@pnumwidth{1.55em}
  594 +\def\@tocrmarg {2.55em}
  595 +\def\@dotsep{4.5}
  596 +\setcounter{tocdepth}{3}
  597 +
  598 +\def\tableofcontents{\@latexerr{\tableofcontents: Tables of contents are not
  599 + allowed in the `acmconf' document style.}\@eha}
  600 +
  601 +\def\l@part#1#2{\addpenalty{\@secpenalty}
  602 + \addvspace{2.25em plus 1pt} % space above part line
  603 + \begingroup
  604 + \@tempdima 3em % width of box holding part number, used by
  605 + \parindent \z@ \rightskip \@pnumwidth %% \numberline
  606 + \parfillskip -\@pnumwidth
  607 + {\large \bf % set line in \large boldface
  608 + \leavevmode % TeX command to enter horizontal mode.
  609 + #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
  610 + \nobreak % Never break after part entry
  611 + \endgroup}
  612 +
  613 +\def\l@section#1#2{\addpenalty{\@secpenalty} % good place for page break
  614 + \addvspace{1.0em plus 1pt} % space above toc entry
  615 + \@tempdima 1.5em % width of box holding section number
  616 + \begingroup
  617 + \parindent \z@ \rightskip \@pnumwidth
  618 + \parfillskip -\@pnumwidth
  619 + \bf % Boldface.
  620 + \leavevmode % TeX command to enter horizontal mode.
  621 + \advance\leftskip\@tempdima %% added 5 Feb 88 to conform to
  622 + \hskip -\leftskip %% 25 Jan 88 change to \numberline
  623 + #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par
  624 + \endgroup}
  625 +
  626 +
  627 +\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
  628 +\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
  629 +\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
  630 +\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
  631 +
  632 +\def\listoffigures{\@latexerr{\listoffigures: Lists of figures are not
  633 + allowed in the `acmconf' document style.}\@eha}
  634 +
  635 +\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
  636 +
  637 +\def\listoftables{\@latexerr{\listoftables: Lists of tables are not
  638 + allowed in the `acmconf' document style.}\@eha}
  639 +\let\l@table\l@figure
  640 +
  641 +\def\footnoterule{\kern-3\p@
  642 + \hrule width .4\columnwidth
  643 + \kern 2.6\p@} % The \hrule has default height of .4pt .
  644 +% ------
  645 +\long\def\@makefntext#1{\noindent
  646 +%\hbox to .5em{\hss$^{\@thefnmark}$}#1} % original
  647 +\hbox to .5em{\hss\textsuperscript{\@thefnmark}}#1} % C. Clifton / GM Oct. 2nd. 2002
  648 +% -------
  649 +
  650 +\long\def\@maketntext#1{\noindent
  651 +#1}
  652 +
  653 +\long\def\@maketitlenotetext#1#2{\noindent
  654 + \hbox to 1.8em{\hss$^{#1}$}#2}
  655 +
  656 +\setcounter{topnumber}{2}
  657 +\def\topfraction{.7}
  658 +\setcounter{bottomnumber}{1}
  659 +\def\bottomfraction{.3}
  660 +\setcounter{totalnumber}{3}
  661 +\def\textfraction{.2}
  662 +\def\floatpagefraction{.5}
  663 +\setcounter{dbltopnumber}{2}
  664 +\def\dbltopfraction{.7}
  665 +\def\dblfloatpagefraction{.5}
  666 +
  667 +% According to the CHI specifications, captions should be centered.
  668 +% This looks kind of bad for multi-line captions, so I only center
  669 +% 1-line captions.
  670 +\long\def\@makecaption#1#2{
  671 + \vskip 2pt % \baselineskip
  672 + \setbox\@tempboxa\hbox{\small
  673 +\textbf{#1. #2}} % DLC
  674 + \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
  675 + \small\textbf{#1. #2}\par % THEN set as ordinary paragraph.
  676 + \else % ELSE center.
  677 + \hbox to\hsize{\hfil\box\@tempboxa\hfil}\par
  678 + \fi}
  679 +
  680 +\@ifundefined{figure}{\newcounter {figure}} % this is for LaTeX2e
  681 +
  682 +\def\fps@figure{tbp}
  683 +\def\ftype@figure{1}
  684 +\def\ext@figure{lof}
  685 +\def\fnum@figure{Figure \thefigure}
  686 +\def\figure{\@float{figure}}
  687 +\def\endfigure{\end@float}
  688 +\@namedef{figure*}{\@dblfloat{figure}}
  689 +\@namedef{endfigure*}{\end@dblfloat}
  690 +
  691 +\@ifundefined{table}{\newcounter {table}} % this is for LaTeX2e
  692 +
  693 +\def\fps@table{tbp}
  694 +\def\ftype@table{2}
  695 +\def\ext@table{lot}
  696 +\def\fnum@table{Table \thetable}
  697 +\def\table{\@float{table}}
  698 +\def\endtable{\end@float}
  699 +\@namedef{table*}{\@dblfloat{table}}
  700 +\@namedef{endtable*}{\end@dblfloat}
  701 +
  702 +% [jdf] create a \teaser command for adding a figure in title page
  703 +\newcommand{\chi@empty}{}
  704 +\newcommand{\chi@teaser}{}
  705 +\newcommand{\teaser}[1]{\renewcommand{\chi@teaser}{#1}}
  706 +
  707 +\newlength{\teaserspace}
  708 +\setlength{\teaserspace}{0.25in}
  709 +% [jdf] end teaser
  710 +
  711 +\newtoks\titleboxnotes
  712 +\newcount\titleboxnoteflag
  713 +
  714 +\def\maketitle{\par
  715 + \begingroup
  716 + \def\thefootnote{\fnsymbol{footnote}}
  717 + \def\@makefnmark{\hbox
  718 + to 0pt{$^{\@thefnmark}$\hss}}
  719 + \twocolumn[\@maketitle]
  720 +\@thanks
  721 + \endgroup
  722 + \setcounter{footnote}{0}
  723 + \let\maketitle\relax
  724 + \let\@maketitle\relax
  725 + \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@subtitle{}\let\thanks\relax
  726 + \@copyrightspace} % JRB 2008-08-13 this line was commented out for some reason
  727 + % which meant that the copyright space wasn't reserved.
  728 + % I re-enabled it.
  729 +
  730 +% actual class setup happens here:
  731 + \NeedsTeXFormat{LaTeX2e}
  732 + \ProvidesClass{sigchi} [2011/06/06 - V0.16] % DLC
  733 + \RequirePackage{latexsym}% QUERY: are these two really needed?
  734 +
  735 +\def\@height{height}
  736 +\def\@width{width}
  737 +\def\@minus{minus}
  738 +\def\@plus{plus}
  739 +\def\hb@xt@{\hbox to}
  740 +\newif\if@faircopy
  741 +\@faircopyfalse
  742 +\def\ds@faircopy{\@faircopytrue}
  743 +
  744 +\def\ds@preprint{\@faircopyfalse}
  745 +
  746 +\@twosidetrue
  747 +\@mparswitchtrue
  748 +\def\ds@draft{\overfullrule 5\p@}
  749 +
  750 +\lineskip \p@
  751 +\normallineskip \p@
  752 +\def\baselinestretch{1}
  753 +\def\@ptsize{0} %needed for amssymbols.sty
  754 +
  755 +% allow use of old-style font change commands in LaTeX2e
  756 +\@maxdepth\maxdepth
  757 +%
  758 +\DeclareOldFontCommand{\rm}{\ninept\rmfamily}{\mathrm}
  759 +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
  760 +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
  761 +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
  762 +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
  763 +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
  764 +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
  765 +\DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}}
  766 +\DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}}
  767 +
  768 + \renewcommand{\rmdefault}{cmr} % was 'ttm'
  769 +% Note! I have also found 'mvr' to work ESPECIALLY well.
  770 +% Gerry - October 1999
  771 +% You may need to change your LV1times.fd file so that sc is
  772 +% mapped to cmcsc - -for smallcaps -- that is if you decide
  773 +% to change {cmr} to {times} above. (Not recommended)
  774 + \renewcommand{\@ptsize}{}
  775 + \renewcommand{\normalsize}{%
  776 +% \@setfontsize\normalsize\@ixpt{10.5\p@}%\ninept%
  777 + \@setfontsize\normalsize\@xpt{11\p@}%\ninept% % from 9/10.5 to 10/11 00-09-07 job
  778 + \abovedisplayskip 6\p@ \@plus2\p@ \@minus\p@
  779 + \belowdisplayskip \abovedisplayskip
  780 + \abovedisplayshortskip 6\p@ \@minus 3\p@
  781 + \belowdisplayshortskip 6\p@ \@minus 3\p@
  782 + \let\@listi\@listI
  783 + }
  784 +
  785 + \newcommand\scriptsize{\@setfontsize\scriptsize\@viipt{8\p@}}
  786 + \newcommand\tiny{\@setfontsize\tiny\@vpt{6\p@}}
  787 + \newcommand\large{\@setfontsize\large\@xiipt{14\p@}}
  788 + \newcommand\Large{\@setfontsize\Large\@xivpt{18\p@}}
  789 + \newcommand\LARGE{\@setfontsize\LARGE\@xviipt{20\p@}}
  790 + \newcommand\huge{\@setfontsize\huge\@xxpt{25\p@}}
  791 + \newcommand\Huge{\@setfontsize\Huge\@xxvpt{30\p@}}
  792 +
  793 +\normalsize
  794 +
  795 +% make aubox hsize/number of authors up to 3, less gutter
  796 +% then showbox gutter showbox gutter showbox -- GKMT Aug 99
  797 +%\newbox\@acmtitlebox % [jdf] no use of the box
  798 +\def\@maketitle{\newpage
  799 + \null
  800 +%\setbox\@acmtitlebox\vbox{ % [jdf] box not used
  801 +\baselineskip 20pt % [jdf] no skip
  802 + \vskip 1em % [jdf] removed Vertical space above title.
  803 + \begin{center}
  804 + {\ttlfnt \@title\par} % Title set in 18pt Helvetica (Arial) bold size.
  805 + \vskip 0.5ex % [jdf] Vertical space after title.
  806 +%This should be the subtitle.
  807 +{\subttlfnt \the\subtitletext\par}\vskip 0.7ex%\fi [jdf] less vertical space
  808 + {\baselineskip 16pt\aufnt % each author set in \12 pt Arial, in a
  809 + \lineskip .5em % tabular environment
  810 + \begin{tabular}[t]{c}\@author
  811 + \end{tabular}\par}
  812 + \vskip 1em % [jdf] reduced Vertical space after author.
  813 + \end{center}% % [jdf] begin add teaser
  814 + \ifx\chi@teaser\chi@empty \else%
  815 + \begingroup%
  816 + \def\@captype{figure}%
  817 + \chi@teaser%
  818 + \endgroup\par%
  819 + \vspace{\teaserspace}% % [jdf] end teaser
  820 + \fi}
  821 +% \dimen0=\ht\@acmtitlebox % [jdf] removed box stuff
  822 +% \advance\dimen0 by -12.75pc\relax % Increased space for title box -- KBT
  823 +% \advance\dimen0 by -8.75pc\relax % Increased space for title box -- KBT % 00-09-07 job (decreased)
  824 +% \unvbox\@acmtitlebox
  825 +% \ifdim\dimen0<0.0pt\relax\vskip-\dimen0\fi}
  826 +
  827 +
  828 +\newcount\titlenotecount
  829 +\global\titlenotecount=0
  830 +\newtoks\tntoks
  831 +\newtoks\tntokstwo
  832 +\newtoks\tntoksthree
  833 +\newtoks\tntoksfour
  834 +\newtoks\tntoksfive
  835 +
  836 +\def\abstract{
  837 +\ifnum\titlenotecount>0 % was =1
  838 + \insert\footins{%
  839 + \reset@font\footnotesize
  840 + \interlinepenalty\interfootnotelinepenalty
  841 + \splittopskip\footnotesep
  842 + \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
  843 + \hsize\columnwidth \@parboxrestore
  844 + \protected@edef\@currentlabel{%
  845 + }%
  846 + \color@begingroup
  847 +\ifnum\titlenotecount=1
  848 + \@maketntext{%
  849 + \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\@finalstrut\strutbox}%
  850 +\fi
  851 +\ifnum\titlenotecount=2
  852 + \@maketntext{%
  853 + \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
  854 +\@maketntext{%
  855 + \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\@finalstrut\strutbox}%
  856 +\fi
  857 +\ifnum\titlenotecount=3
  858 + \@maketntext{%
  859 + \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
  860 +\@maketntext{%
  861 + \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}%
  862 +\@maketntext{%
  863 + \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\@finalstrut\strutbox}%
  864 +\fi
  865 +\ifnum\titlenotecount=4
  866 + \@maketntext{%
  867 + \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
  868 +\@maketntext{%
  869 + \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}%
  870 +\@maketntext{%
  871 + \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\par\@finalstrut\strutbox}%
  872 +\@maketntext{%
  873 + \raisebox{4pt}{$\S$}\rule\z@\footnotesep\ignorespaces\the\tntoksfour\@finalstrut\strutbox}%
  874 +\fi
  875 +\ifnum\titlenotecount=5
  876 + \@maketntext{%
  877 + \raisebox{4pt}{$\ast$}\rule\z@\footnotesep\ignorespaces\the\tntoks\par\@finalstrut\strutbox}%
  878 +\@maketntext{%
  879 + \raisebox{4pt}{$\dagger$}\rule\z@\footnotesep\ignorespaces\the\tntokstwo\par\@finalstrut\strutbox}%
  880 +\@maketntext{%
  881 + \raisebox{4pt}{$\ddagger$}\rule\z@\footnotesep\ignorespaces\the\tntoksthree\par\@finalstrut\strutbox}%
  882 +\@maketntext{%
  883 + \raisebox{4pt}{$\S$}\rule\z@\footnotesep\ignorespaces\the\tntoksfour\par\@finalstrut\strutbox}%
  884 +\@maketntext{%
  885 + \raisebox{4pt}{$\P$}\rule\z@\footnotesep\ignorespaces\the\tntoksfive\@finalstrut\strutbox}%
  886 +\fi
  887 + \color@endgroup} %g}
  888 +\fi
  889 +\setcounter{footnote}{0}
  890 +\section*{ABSTRACT}\normalsize %\the\parskip \the\baselineskip%\ninept
  891 +}
  892 +
  893 +\def\endabstract{\if@twocolumn\else\endquotation\fi}
  894 +
  895 +\def\keywords#1{%\if@twocolumn
  896 +\section*{Author Keywords}
  897 +\begin{flushleft}#1\end{flushleft}
  898 +%\else \small
  899 +%\quotation #1
  900 +%\fi
  901 +}
  902 +
  903 +\def\classification#1{%\if@twocolumn
  904 +\section*{ACM Classification Keywords}
  905 +\begin{flushleft}#1\end{flushleft}
  906 +%\else \small
  907 +%\quotation\the\parskip
  908 +%\fi
  909 +}
  910 +
  911 +% I've pulled the check for 2 cols, since proceedings are _always_
  912 +% two-column 11 Jan 2000 gkmt
  913 +\def\terms#1{%\if@twocolumn
  914 +\section*{General Terms}
  915 +\begin{flushleft}#1\end{flushleft}
  916 +%\else \small
  917 +%\quotation\the\parskip
  918 +%\fi
  919 +}
  920 +
  921 +% -- Classification needs to be a bit smart due to optionals - Gerry/Georgia November 2nd. 1999
  922 +\newcount\catcount
  923 +\global\catcount=1
  924 +
  925 +\def\category#1#2#3{%
  926 +\ifnum\catcount=1
  927 +\section*{ACM Classification Keywords} % DLC
  928 +\advance\catcount by 1\else{\unskip; }\fi
  929 + \@ifnextchar [{\@category{#1}{#2}{#3}}{\@category{#1}{#2}{#3}[]}%
  930 +}
  931 +
  932 +\def\@category#1#2#3[#4]{%
  933 + \begingroup
  934 + \let\and\relax
  935 +% #1 [\textbf{#2}]%
  936 + #1 #2% % DLC
  937 + \if!#4!%
  938 + \if!#3!\else : #3\fi
  939 + \else
  940 + :\space
  941 + \if!#3!\else #3\kern\z@---\hskip\z@\fi
  942 + \textit{#4}%
  943 + \fi
  944 + \endgroup
  945 +}
  946 +%
  947 +
  948 +%%% This section (written by KBT) handles the 1" box in the lower left
  949 +%%% corner of the left column of the first page by creating a picture,
  950 +%%% and inserting the predefined string at the bottom (with a negative
  951 +%%% displacement to offset the space allocated for a non-existent
  952 +%%% caption).
  953 +%%%
  954 +\newtoks\copyrightnotice
  955 +\def\ftype@copyrightbox{8}
  956 +\def\@copyrightspace{
  957 +\@float{copyrightbox}[b]
  958 +\begin{center}
  959 +\setlength{\unitlength}{1pc}
  960 +\ifnum\ACM@basesize=9
  961 +\begin{picture}(20,6) %Space for copyright notice
  962 +\put(0,-0.95){\crnotice{\@toappear}}
  963 +\end{picture}
  964 +\fi
  965 +\ifnum\ACM@basesize=10
  966 +\begin{picture}(20,7) %Space for copyright notice
  967 +\put(0,-0.95){\crnotice{\@toappear}}
  968 +\end{picture}
  969 +\fi
  970 +\end{center}
  971 +\end@float}
  972 +
  973 +\def\@toappear{} % Default setting blank - commands below change this.
  974 +\long\def\toappear#1{\def\@toappear{\parbox[b]{20pc}{\baselineskip 9pt#1}}}
  975 +\def\toappearbox#1{\def\@toappear{\raisebox{5pt}{\framebox[20pc]{\parbox[b]{19pc}{#1}}}}}
  976 +
  977 +\newtoks\conf
  978 +\newtoks\confinfo
  979 +\def\conferenceinfo#1#2{\global\conf={#1}\global\confinfo{#2}}
  980 +
  981 +
  982 +% Introduce a "chi_draft" option which conditionally enables marginpars with a warning.
  983 +\let\oldmarginpar\marginpar
  984 +\renewcommand{\marginpar}[2][]{\@latexerr{The marginpar command is not allowed in the
  985 + `acmconf' document style.}\@eha}
  986 +\DeclareOption{chi_draft}{
  987 + \marginparwidth 40pt
  988 + \renewcommand{\marginpar}[2][]{\@latex@warning{The marginpar command is not allowed in the `acmconf'
  989 + document style. Remove all occurences before final document submission.}\oldmarginpar[#1]{#2}}
  990 +}
  991 +% Immediately execute the options at this point. Reason is discussed
  992 +% here: https://tex.stackexchange.com/questions/203387/
  993 +\ProcessOptions
  994 +
  995 +\mark{{}{}} % Initializes TeX's marks
  996 +
  997 +\def\today{\ifcase\month\or
  998 + January\or February\or March\or April\or May\or June\or
  999 + July\or August\or September\or October\or November\or December\fi
  1000 + \space\number\day, \number\year}
  1001 +
  1002 +\def\@begintheorem#1#2{%
  1003 + \trivlist
  1004 + \item[%
  1005 + \hskip 10\p@
  1006 + \hskip \labelsep
  1007 + {{\sc #1}\hskip 5\p@\relax#2.}%
  1008 + ]
  1009 + \it
  1010 +}
  1011 +\def\@opargbegintheorem#1#2#3{%
  1012 + \trivlist
  1013 + \item[%
  1014 + \hskip 10\p@
  1015 + \hskip \labelsep
  1016 + {\sc #1\ #2\ % This mod by Gerry to enumerate corollaries
  1017 + \setbox\@tempboxa\hbox{(#3)} % and bracket the 'corollary title'
  1018 + \ifdim \wd\@tempboxa>\z@ % and retain the correct numbering of e.g. theorems
  1019 + \hskip 5\p@\relax % if they occur 'around' said corollaries.
  1020 + \box\@tempboxa % Gerry - Nov. 1999.
  1021 + \fi.}%
  1022 + ]
  1023 + \it
  1024 +}
  1025 +\newif\if@qeded
  1026 +\global\@qededfalse
  1027 +
  1028 +% -- original
  1029 +%\def\proof{%
  1030 +% \vspace{-\parskip} % GM July 2000 (for tighter spacing)
  1031 +% \global\@qededfalse
  1032 +% \@ifnextchar[{\@xproof}{\@proof}%
  1033 +%}
  1034 +% -- end of original
  1035 +
  1036 +% (JSS) Fix for vertical spacing bug - Gerry Murray July 30th. 2002
  1037 +\def\proof{%
  1038 +\vspace{-\lastskip}\vspace{-\parsep}\penalty-51%
  1039 +\global\@qededfalse
  1040 +\@ifnextchar[{\@xproof}{\@proof}%
  1041 +}
  1042 +
  1043 +\def\endproof{%
  1044 + \if@qeded\else\qed\fi
  1045 + \endtrivlist
  1046 +}
  1047 +\def\@proof{%
  1048 + \trivlist
  1049 + \item[%
  1050 + \hskip 10\p@
  1051 + \hskip \labelsep
  1052 + {\sc Proof.}%
  1053 + ]
  1054 + \ignorespaces
  1055 +}
  1056 +\def\@xproof[#1]{%
  1057 + \trivlist
  1058 + \item[\hskip 10\p@\hskip \labelsep{\sc Proof #1.}]%
  1059 + \ignorespaces
  1060 +}
  1061 +\def\qed{%
  1062 + \unskip
  1063 + \kern 10\p@
  1064 + \begingroup
  1065 + \unitlength\p@
  1066 + \linethickness{.4\p@}%
  1067 + \framebox(6,6){}%
  1068 + \endgroup
  1069 + \global\@qededtrue
  1070 +}
  1071 +
  1072 +\def\newdef#1#2{%
  1073 + \expandafter\@ifdefinable\csname #1\endcsname
  1074 + {\@definecounter{#1}%
  1075 + \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
  1076 + \global\@namedef{#1}{\@defthm{#1}{#2}}%
  1077 + \global\@namedef{end#1}{\@endtheorem}%
  1078 + }%
  1079 +}
  1080 +\def\@defthm#1#2{%
  1081 + \refstepcounter{#1}%
  1082 + \@ifnextchar[{\@ydefthm{#1}{#2}}{\@xdefthm{#1}{#2}}%
  1083 +}
  1084 +\def\@xdefthm#1#2{%
  1085 + \@begindef{#2}{\csname the#1\endcsname}%
  1086 + \ignorespaces
  1087 +}
  1088 +\def\@ydefthm#1#2[#3]{%
  1089 + \trivlist
  1090 + \item[%
  1091 + \hskip 10\p@
  1092 + \hskip \labelsep
  1093 + {\it #2%
  1094 + \savebox\@tempboxa{#3}%
  1095 + \ifdim \wd\@tempboxa>\z@
  1096 + \ \box\@tempboxa
  1097 + \fi.%
  1098 + }]%
  1099 + \ignorespaces
  1100 +}
  1101 +\def\@begindef#1#2{%
  1102 + \trivlist
  1103 + \item[%
  1104 + \hskip 10\p@
  1105 + \hskip \labelsep
  1106 + {\it #1\ \rm #2.}%
  1107 + ]%
  1108 +}
  1109 +\def\theequation{\arabic{equation}}
  1110 +
  1111 +\newcounter{part}
  1112 +\newcounter{section}
  1113 +\newcounter{subsection}[section]
  1114 +\newcounter{subsubsection}[subsection]
  1115 +\newcounter{paragraph}[subsubsection]
  1116 +\def\thepart{\Roman{part}}
  1117 +\def\thesection{\arabic{section}}
  1118 +\def\thesubsection{\thesection.\arabic{subsection}}
  1119 +\def\thesubsubsection{\thesubsection.\arabic{subsubsection}} %removed \subsecfnt 29 July 2002 gkmt
  1120 +\def\theparagraph{\thesubsubsection.\arabic{paragraph}} %removed \subsecfnt 29 July 2002 gkmt
  1121 +
  1122 +\newif\if@uchead
  1123 +\@ucheadfalse
  1124 +
  1125 +%% CHANGES: NEW NOTE
  1126 +%% NOTE: OK to use old-style font commands below, since they were
  1127 +%% suitably redefined for LaTeX2e
  1128 +%% END CHANGES
  1129 +\def\part{%
  1130 + \@startsection{part}{9}{\z@}{-10\p@ \@plus -4\p@ \@minus -2\p@}
  1131 + {4\p@}{\normalsize\@ucheadtrue}%
  1132 +}
  1133 +
  1134 +% Rationale for changes made in next four definitions:
  1135 +% "Before skip" is made elastic to provide some give in setting columns (vs.
  1136 +% parskip, which is non-elastic to keep section headers "anchored" to their
  1137 +% subsequent text.
  1138 +%
  1139 +% "After skip" is minimized -- BUT setting it to 0pt resulted in run-in heads, despite
  1140 +% the documentation asserted only after-skip < 0pt would have result.
  1141 +%
  1142 +% Baselineskip added to style to ensure multi-line section titles, and section heads
  1143 +% followed by another section head rather than text, are decently spaced vertically.
  1144 +% 12 Jan 2000 gkmt
  1145 +\def\section{%
  1146 + \@startsection{section}{1}{\z@}{8pt plus 3pt minus 3pt}%
  1147 + {0.5pt}{\baselineskip=14pt\secfnt\@ucheadtrue}%
  1148 +}
  1149 +
  1150 +\def\subsection{%
  1151 + \@startsection{subsection}{2}{\z@}{8pt plus 3pt minus 3pt}%
  1152 + {0.5pt}{\baselineskip=14pt\secfnt}%
  1153 +}
  1154 +\def\subsubsection{%
  1155 + \@startsection{subsubsection}{3}{\z@}{4pt plus 2pt minus 1pt}%
  1156 + {0.5pt}{\baselineskip=14pt\subsecfnt}%
  1157 +}
  1158 +
  1159 +\def\paragraph{%
  1160 + \@startsection{paragraph}{3}{\z@}{4pt plus 2pt minus 1pt}%
  1161 + {0.5pt}{\baselineskip=14pt\subsecfnt}%
  1162 +}
  1163 +
  1164 +\let\@period=.
  1165 +\def\@startsection#1#2#3#4#5#6{%
  1166 + \if@noskipsec %gkmt, 11 aug 99
  1167 + \global\let\@period\@empty
  1168 + \leavevmode
  1169 + \global\let\@period.%
  1170 + \fi
  1171 + \par
  1172 + \@tempskipa #4\relax
  1173 + \@afterindenttrue
  1174 + \ifdim \@tempskipa <\z@
  1175 + \@tempskipa -\@tempskipa
  1176 + \@afterindentfalse
  1177 + \fi
  1178 + %\if@nobreak 11 Jan 00 gkmt
  1179 + %\everypar{}
  1180 + %\else
  1181 + \addpenalty\@secpenalty
  1182 + \addvspace\@tempskipa
  1183 + %\fi
  1184 + \parskip=0pt
  1185 + \@ifstar
  1186 + {\@ssect{#3}{#4}{#5}{#6}}
  1187 + {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}%
  1188 +}
  1189 +
  1190 +
  1191 +\def\@ssect#1#2#3#4#5{%
  1192 + \@tempskipa #3\relax
  1193 + \ifdim \@tempskipa>\z@
  1194 + \begingroup
  1195 + #4{%
  1196 + \@hangfrom{\hskip #1}%
  1197 + \interlinepenalty \@M #5\@@par}%
  1198 + \endgroup
  1199 + \else
  1200 + \def\@svsechd{#4{\hskip #1\relax #5}}%
  1201 + \fi
  1202 + \par\nobreak
  1203 + \vskip -6pt % [jdf] less space between section as in the Word template
  1204 + \@xsect{#3}\parskip=6pt} % [jdf] paragraph skip shorter
  1205 +
  1206 +
  1207 +\def\@sect#1#2#3#4#5#6[#7]#8{%
  1208 + \ifnum #2>\c@secnumdepth
  1209 + \let\@svsec\@\refstepcounter{#1}
  1210 + \else
  1211 + \refstepcounter{#1}%
  1212 + \edef\@svsec{%
  1213 + \begingroup
  1214 + %\ifnum#2>2 \noexpand\rm \fi % changed to next 29 July 2002 gkmt
  1215 + \ifnum#2>2 \noexpand#6 \fi
  1216 + \csname the#1\endcsname
  1217 + \endgroup
  1218 + \ifnum #2=1\relax .\fi
  1219 + \hskip 1em
  1220 + }%
  1221 + \fi
  1222 + \@tempskipa #5\relax
  1223 + \ifdim \@tempskipa>\z@
  1224 + \begingroup
  1225 + #6\relax
  1226 + \@hangfrom{\hskip #3\relax\@svsec}%
  1227 + \begingroup
  1228 + \interlinepenalty \@M
  1229 + \if@uchead
  1230 + \uppercase{#8}%
  1231 + \else
  1232 + #8%
  1233 + \fi
  1234 + \par
  1235 + \endgroup
  1236 + \endgroup
  1237 + \csname #1mark\endcsname{#7}%
  1238 + \par\nobreak
  1239 + \vskip -6pt % [jdf] less space between section as in the Word template
  1240 + \addcontentsline{toc}{#1}{%
  1241 + \ifnum #2>\c@secnumdepth \else
  1242 + \protect\numberline{\csname the#1\endcsname}%
  1243 + \fi
  1244 + #7%
  1245 + }%
  1246 + \else
  1247 + \def\@svsechd{%
  1248 + #6%
  1249 + \hskip #3\relax
  1250 + \@svsec
  1251 + \if@uchead
  1252 + \uppercase{#8}%
  1253 + \else
  1254 + #8%
  1255 + \fi
  1256 + \csname #1mark\endcsname{#7}%
  1257 + \addcontentsline{toc}{#1}{%
  1258 + \ifnum #2>\c@secnumdepth \else
  1259 + \protect\numberline{\csname the#1\endcsname}%
  1260 + \fi
  1261 + #7%
  1262 + }%
  1263 + }%
  1264 + \fi
  1265 + \@xsect{#5}\parskip=6pt% [jdf] shorter
  1266 +}
  1267 +\def\@xsect#1{%
  1268 + \@tempskipa #1\relax
  1269 + \ifdim \@tempskipa>\z@
  1270 + \par
  1271 + \nobreak
  1272 + \vskip \@tempskipa
  1273 + \@afterheading
  1274 + \else
  1275 + \global\@nobreakfalse
  1276 + \global\@noskipsectrue
  1277 + \everypar{%
  1278 + \if@noskipsec
  1279 + \global\@noskipsecfalse
  1280 + \clubpenalty\@M
  1281 + \hskip -\parindent
  1282 + \begingroup
  1283 + \@svsechd
  1284 + \@period
  1285 + \endgroup
  1286 + \unskip
  1287 + \@tempskipa #1\relax
  1288 + \hskip -\@tempskipa
  1289 + \else
  1290 + \clubpenalty \@clubpenalty
  1291 + \everypar{}%
  1292 + \fi
  1293 + }%
  1294 + \fi
  1295 + \ignorespaces
  1296 +}
  1297 +
  1298 +\def\@trivlist{%
  1299 + \@topsepadd\topsep
  1300 + \if@noskipsec
  1301 + \global\let\@period\@empty
  1302 + \leavevmode
  1303 + \global\let\@period.%
  1304 + \fi
  1305 + \ifvmode
  1306 + \advance\@topsepadd\partopsep
  1307 + \else
  1308 + \unskip
  1309 + \par
  1310 + \fi
  1311 + \if@inlabel
  1312 + \@noparitemtrue
  1313 + \@noparlisttrue
  1314 + \else
  1315 + \@noparlistfalse
  1316 + \@topsep\@topsepadd
  1317 + \fi
  1318 + \advance\@topsep \parskip
  1319 + \leftskip\z@skip
  1320 + \rightskip\@rightskip
  1321 + \parfillskip\@flushglue
  1322 + \@setpar{\if@newlist\else{\@@par}\fi}
  1323 + \global\@newlisttrue
  1324 + \@outerparskip\parskip
  1325 +}
  1326 +
  1327 +%%% Actually, 'abbrev' works just fine as the default - Gerry Feb. 2000
  1328 +%%% Bibliography style.
  1329 +
  1330 +\parindent 0pt
  1331 +\typeout{Using 'Abbrev' bibliography style}
  1332 +\newcommand\bibyear[2]{%
  1333 + \unskip\quad\ignorespaces#1\unskip
  1334 + \if#2..\quad \else \quad#2 \fi
  1335 +}
  1336 +\newcommand{\bibemph}[1]{{\em#1}}
  1337 +\newcommand{\bibemphic}[1]{{\em#1\/}}
  1338 +\newcommand{\bibsc}[1]{{\sc#1}}
  1339 +\def\@normalcite{%
  1340 + \def\@cite##1##2{[##1\if@tempswa , ##2\fi]}%
  1341 +}
  1342 +\def\@citeNB{%
  1343 + \def\@cite##1##2{##1\if@tempswa , ##2\fi}%
  1344 +}
  1345 +\def\@citeRB{%
  1346 + \def\@cite##1##2{##1\if@tempswa , ##2\fi]}%
  1347 +}
  1348 +\def\start@cite#1#2{%
  1349 + \edef\citeauthoryear##1##2##3{%
  1350 + ###1%
  1351 + \ifnum#2=\z@ \else\ ###2\fi
  1352 + }%
  1353 + \ifnum#1=\thr@@
  1354 + \let\@@cite\@citeyear
  1355 + \else
  1356 + \let\@@cite\@citenormal
  1357 + \fi
  1358 + \@ifstar{\@citeNB\@@cite}{\@normalcite\@@cite}%
  1359 +}
  1360 +\def\cite{\start@cite23}
  1361 +\def\citeNP{\cite*}
  1362 +\def\citeA{\start@cite10}
  1363 +\def\citeANP{\citeA*}
  1364 +\def\shortcite{\start@cite23}
  1365 +\def\shortciteNP{\shortcite*}
  1366 +\def\shortciteA{\start@cite20}
  1367 +\def\shortciteANP{\shortciteA*}
  1368 +\def\citeyear{\start@cite30}
  1369 +\def\citeyearNP{\citeyear*}
  1370 +\def\citeN{%
  1371 + \@citeRB
  1372 + \def\citeauthoryear##1##2##3{##1\ [##3%
  1373 + \def\reserved@a{##1}%
  1374 + \def\citeauthoryear####1####2####3{%
  1375 + \def\reserved@b{####1}%
  1376 + \ifx\reserved@a\reserved@b
  1377 + ####3%
  1378 + \else
  1379 + \errmessage{Package acmart Error: author mismatch
  1380 + in \string\citeN^^J^^J%
  1381 + See the acmart package documentation for explanation}%
  1382 + \fi
  1383 + }%
  1384 + }%
  1385 + \@ifstar\@citeyear\@citeyear
  1386 +}
  1387 +\def\shortciteN{%
  1388 + \@citeRB
  1389 + \def\citeauthoryear##1##2##3{##2\ [##3%
  1390 + \def\reserved@a{##2}%
  1391 + \def\citeauthoryear####1####2####3{%
  1392 + \def\reserved@b{####2}%
  1393 + \ifx\reserved@a\reserved@b
  1394 + ####3%
  1395 + \else
  1396 + \errmessage{Package acmart Error: author mismatch
  1397 + in \string\shortciteN^^J^^J%
  1398 + See the acmart package documentation for explanation}%
  1399 + \fi
  1400 + }%
  1401 + }%
  1402 + \@ifstar\@citeyear\@citeyear % changed from "\@ifstart" 12 Jan 2000 gkmt
  1403 +}
  1404 +
  1405 + \def\@citenormal{%
  1406 + \@ifnextchar [{\@tempswatrue\@citex;}
  1407 + {\@tempswafalse\@citex[]}% GERRY FIX FOR BABEL 3/20/2009
  1408 +}
  1409 +\def\@citeyear{%
  1410 + \@ifnextchar [{\@tempswatrue\@citex,}%
  1411 + {\@tempswafalse\@citex[]}% GERRY FIX FOR BABEL 3/20/2009
  1412 +}
  1413 +\def\@citex#1[#2]#3{%
  1414 + \let\@citea\@empty
  1415 + \@cite{%
  1416 + \@for\@citeb:=#3\do{%
  1417 + \@citea
  1418 + \def\@citea{#1, }% % GERRY FIX FOR BABEL 3/20/2009 -- SO THAT YOU GET [1, 2] IN THE BODY TEXT
  1419 + \edef\@citeb{\expandafter\@iden\@citeb}%
  1420 + \if@filesw
  1421 + \immediate\write\@auxout{\string\citation{\@citeb}}%
  1422 + \fi
  1423 + \@ifundefined{b@\@citeb}{%
  1424 + {\bf ?}%
  1425 + \@warning{%
  1426 + Citation `\@citeb' on page \thepage\space undefined%
  1427 + }%
  1428 + }%
  1429 + {\csname b@\@citeb\endcsname}%
  1430 + }%
  1431 + }{#2}%
  1432 +}
  1433 +\let\@biblabel\@gobble
  1434 +\newdimen\bibindent
  1435 +\bibindent=0em
  1436 +\newskip\bibsep % [jdf] allow bib space tweaking
  1437 +\bibsep 2pt \@plus 1pt \@minus 1pt % [jdf] initial spacing between ref entries
  1438 +\setcounter{enumi}{1}
  1439 +\def\thebibliography#1{%
  1440 +%% Comment this to have blue DOI links.
  1441 +\makeatletter
  1442 +\def\url@leostyle{%
  1443 +\@ifundefined{selectfont}{\def\UrlFont{\sf}}{\def\UrlFont{\color{black}\small\bf\ttfamily}}}
  1444 +\makeatother
  1445 +\urlstyle{leo}
  1446 +%%
  1447 + \section{%
  1448 + {References}
  1449 + \@mkboth{{\refname}}{{\refname}}%
  1450 + }%
  1451 +% \list{[\arabic{enumi}]}{%
  1452 + \list{\arabic{enumi}.}{% DLC
  1453 +% \settowidth\labelwidth{[#1]}%
  1454 + \settowidth\labelwidth{#1.}% DLC
  1455 + \leftmargin\labelwidth
  1456 + \advance\leftmargin\labelsep
  1457 + \advance\leftmargin\bibindent
  1458 + \itemindent -\bibindent
  1459 + \listparindent \itemindent
  1460 + \usecounter{enumi}
  1461 + \itemsep\bibsep% [jdf] standard spacing between references
  1462 + }%
  1463 + \let\newblock\@empty
  1464 + \raggedright %% 7 JAN 2000 gkmt
  1465 + \sloppy
  1466 + \sfcode`\.=1000\relax
  1467 +}
  1468 +
  1469 +
  1470 +\gdef\balancecolumns
  1471 +{\vfill\eject
  1472 +\global\@colht=\textheight
  1473 +\global\ht\@cclv=\textheight
  1474 +}
  1475 +
  1476 +\newcount\colcntr
  1477 +\global\colcntr=0
  1478 +\newbox\savebox
  1479 +
  1480 +\gdef \@makecol {%
  1481 +\global\advance\colcntr by 1
  1482 +\ifnum\colcntr>2 \global\colcntr=1\fi
  1483 + \ifvoid\footins
  1484 + \setbox\@outputbox \box\@cclv
  1485 + \else
  1486 + \setbox\@outputbox \vbox{%
  1487 +\boxmaxdepth \@maxdepth
  1488 + \@tempdima\dp\@cclv
  1489 + \unvbox \@cclv
  1490 + \vskip-\@tempdima
  1491 + \vskip \skip\footins
  1492 + \color@begingroup
  1493 + \normalcolor
  1494 + \footnoterule
  1495 + \unvbox \footins
  1496 + \color@endgroup
  1497 + }%
  1498 + \fi
  1499 + \xdef\@freelist{\@freelist\@midlist}%
  1500 + \global \let \@midlist \@empty
  1501 + \@combinefloats
  1502 + \ifvbox\@kludgeins
  1503 + \@makespecialcolbox
  1504 + \else
  1505 + \setbox\@outputbox \vbox to\@colht {%
  1506 +\@texttop
  1507 + \dimen@ \dp\@outputbox
  1508 + \unvbox \@outputbox
  1509 + \vskip -\dimen@
  1510 + \@textbottom
  1511 + }%
  1512 + \fi
  1513 + \global \maxdepth \@maxdepth
  1514 +}
  1515 +\def\titlenote{\@ifnextchar[\@xtitlenote{\stepcounter\@mpfn
  1516 +\global\advance\titlenotecount by 1
  1517 +\ifnum\titlenotecount=1
  1518 + \raisebox{9pt}{$\ast$}
  1519 +\fi
  1520 +\ifnum\titlenotecount=2
  1521 + \raisebox{9pt}{$\dagger$}
  1522 +\fi
  1523 +\ifnum\titlenotecount=3
  1524 + \raisebox{9pt}{$\ddagger$}
  1525 +\fi
  1526 +\ifnum\titlenotecount=4
  1527 +\raisebox{9pt}{$\S$}
  1528 +\fi
  1529 +\ifnum\titlenotecount=5
  1530 +\raisebox{9pt}{$\P$}
  1531 +\fi
  1532 + \@titlenotetext
  1533 +}}
  1534 +
  1535 +\long\def\@titlenotetext#1{\insert\footins{%
  1536 +\ifnum\titlenotecount=1\global\tntoks={#1}\fi
  1537 +\ifnum\titlenotecount=2\global\tntokstwo={#1}\fi
  1538 +\ifnum\titlenotecount=3\global\tntoksthree={#1}\fi
  1539 +\ifnum\titlenotecount=4\global\tntoksfour={#1}\fi
  1540 +\ifnum\titlenotecount=5\global\tntoksfive={#1}\fi
  1541 + \reset@font\footnotesize
  1542 + \interlinepenalty\interfootnotelinepenalty
  1543 + \splittopskip\footnotesep
  1544 + \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
  1545 + \hsize\columnwidth \@parboxrestore
  1546 + \protected@edef\@currentlabel{%
  1547 + }%
  1548 + \color@begingroup
  1549 + \color@endgroup}}
  1550 +
  1551 +%%%%%%%%%%%%%%%%%%%%%%%%%
  1552 +\ps@plain
  1553 +\baselineskip=11pt
  1554 +\let\thepage\relax % For NO page numbers - Gerry Nov. 30th. 1999
  1555 +\def\setpagenumber#1{\global\setcounter{page}{#1}}
  1556 +%\pagenumbering{arabic} % Arabic page numbers but commented out for NO page numbes - Gerry Nov. 30th. 1999
  1557 +\twocolumn % Double column.
  1558 +\flushbottom % Even bottom -- alas, does not balance columns at end of document
  1559 +\pagestyle{plain}
  1560 +
  1561 +% Need Copyright Year and Copyright Data to be user definable (in .tex file).
  1562 +% Gerry Nov. 30th. 1999
  1563 +\newtoks\copyrtyr
  1564 +\newtoks\acmcopyr
  1565 +\newtoks\boilerplate
  1566 +
  1567 +\global\acmcopyr={X-XXXXX-XX-X/XX/XX} % Default - 5/11/2001 *** Gerry
  1568 +\global\copyrtyr={\the\year} % Default - 3/3/2003 *** Gerry
  1569 +\def\acmPrice#1{\gdef\@acmPrice{#1}}
  1570 +\acmPrice{} %article price % Changed to 15 - June 2012 - Gerry
  1571 +
  1572 +
  1573 +\def\CopyrightYear#1{\global\copyrtyr{#1}}
  1574 +\def\crdata#1{\global\acmcopyr{#1}}
  1575 +\def\permission#1{\global\boilerplate{#1}}
  1576 +
  1577 +% ISBN
  1578 +%
  1579 +\def\isbn#1{\global\acmcopyr={#1}}
  1580 +\isbn{978-1-4503-2138-9}
  1581 +
  1582 +\RequirePackage{url}
  1583 +\urlstyle{rm}
  1584 +\def\doi#1{\def\@doi{#1}}
  1585 +\doi{10.1145/1235}
  1586 +\def\printdoi#1{\url{#1}}
  1587 +
  1588 +
  1589 +
  1590 +% Copyright
  1591 +\RequirePackage{acmcopyright}
  1592 +\setcopyright{none}
  1593 +
  1594 +%
  1595 +\global\boilerplate={\@copyrightpermission}
  1596 +%
  1597 +\newtoks\copyrightetc
  1598 +\ifnum\ACM@basesize=9\relax
  1599 +\global\copyrightetc{%
  1600 +{\noindent\confname\ \the\conf } \the\confinfo \par\smallskip
  1601 + \if@printcopyright
  1602 + \copyright\ \the\copyrtyr\ \@copyrightowner
  1603 + \fi
  1604 + \if@acmowned ISBN \else\ifnum\acm@copyrightmode=2 ISBN \else \par\smallskip ACM ISBN \fi\fi
  1605 + \the\acmcopyr\ifx\@acmPrice\@empty.\else\dots\@acmPrice\fi\par\smallskip
  1606 +{DOI: \small\expandafter\printdoi\expandafter{\@doi}}}
  1607 +\toappear{\fontsize{7pt}{8pt}\fontfamily{ptm}\selectfont
  1608 + \the\boilerplate\par\smallskip
  1609 + \the\copyrightetc}
  1610 +\fi
  1611 +\ifnum\ACM@basesize=10\relax
  1612 +\global\copyrightetc{%
  1613 +{\noindent\confname\ \the\conf\ \the\confinfo}\par\smallskip
  1614 + \if@printcopyright
  1615 + \copyright\ \the\copyrtyr\ \@copyrightowner
  1616 + \fi
  1617 + \if@acmowned ISBN \else\ifnum\acm@copyrightmode=2 ISBN \else \par\smallskip ACM ISBN \fi\fi
  1618 + \the\acmcopyr\ifx\@acmPrice\@empty.\else\dots\@acmPrice\fi\par\smallskip
  1619 +{DOI: \small\expandafter\printdoi\expandafter{\@doi}}}
  1620 +\toappear{\fontsize{7.5pt}{8.5pt}\fontfamily{ptm}\selectfont
  1621 + \the\boilerplate\par\smallskip
  1622 + \the\copyrightetc}
  1623 +\fi
  1624 +
  1625 +\clubpenalty=10000
  1626 +\widowpenalty = 10000
  1627 +
  1628 +%%
  1629 +% For the CCSXML 2012 Categories
  1630 +
  1631 +\let\@concepts\@empty
  1632 +% Support for CCSXML file
  1633 +\RequirePackage{comment}
  1634 +\excludecomment{CCSXML}
  1635 +
  1636 +% New concepts scheme
  1637 +%
  1638 +% The first argument is the significance, the
  1639 +% second is the concept(s)
  1640 +%
  1641 +\newcommand\ccsdesc[2][100]{%
  1642 + \ccsdesc@parse#1~#2~}
  1643 +%
  1644 +% The parser of the expression Significance~General~Specific
  1645 +%
  1646 +\def\ccsdesc@parse#1~#2~#3~{%
  1647 + \expandafter\ifx\csname CCS@#2\endcsname\relax
  1648 + \expandafter\gdef\csname CCS@#2\endcsname{\textbullet\textbf{#2} $\to$ }%
  1649 + \g@addto@macro{\@concepts}{\csname CCS@#2\endcsname}\fi
  1650 + \expandafter\g@addto@macro\expandafter{\csname CCS@#2\endcsname}{%
  1651 + \ifnum#1>499\textbf{#3; }\else
  1652 + \ifnum#1>299\textit{#3; }\else
  1653 + #3; \fi\fi}}
  1654 +
  1655 +\newcommand\printccsdesc{%
  1656 + \ifx\@concepts\@empty\else
  1657 + \if@twocolumn
  1658 + \section*{CCS Concepts}
  1659 + \@concepts
  1660 + \else \small
  1661 + \quotation{\@concepts}%
  1662 + \fi
  1663 + \fi}
  1664 +
  1665 +
  1666 +%% DanCo, 10/19/11: Added this to reduce overfull lines per Sheridan
  1667 +%% request; it leads to occasionally unpleasant extra whitespace,
  1668 +%% though actually no worse and perhaps better than the
  1669 +%% default Word template.
  1670 +%%
  1671 +%% This can be manually controlled instead by authors in text
  1672 +%% by putting \sloppy before and \fussy immediately
  1673 +%% after troublesome paras. Idea found at
  1674 +%% http://www.economics.utoronto.ca/osborne/latex/PMAKEUP.HTM
  1675 +
  1676 +\sloppy
... ...
opensym2017/spb.bib 0 → 100644
... ... @@ -0,0 +1,48 @@
  1 +@book{kon2012,
  2 + title={Software Livre e Propriedade Intelectual: Aspectos Jur{\'\i}dicos, Licen{\c{c}}as e Modelos de Neg{\'o}cios},
  3 + author={Kon, Fabio and Lago, Nelson and Meirelles, Paulo and Sabino, Vanessa},
  4 + journal={http://ccsl. ime. usp. br/files/slpi. pdf>. Acesso em},
  5 + volume={2},
  6 + pages={12},
  7 + year={2012}
  8 +}
  9 +
  10 +@article{hippel2003,
  11 + author = {Hippel, Eric von and Krogh, Georg von},
  12 + title = {Open Source Software and the "Private-Collective" Innovation Model: Issues for Organization Science},
  13 + journal = {Organization Science},
  14 + issue_date = {March 2003},
  15 + volume = {14},
  16 + number = {2},
  17 + month = mar,
  18 + year = {2003},
  19 + issn = {1526-5455},
  20 + pages = {209--223},
  21 + numpages = {15},
  22 + url = {http://dx.doi.org/10.1287/orsc.14.2.209.14992},
  23 + doi = {10.1287/orsc.14.2.209.14992},
  24 + acmid = {970585},
  25 + publisher = {INFORMS},
  26 + address = {Institute for Operations Research and the Management Sciences (INFORMS), Linthicum, Maryland, USA},
  27 + keywords = {Incentives, Innovation, Open source software, User innovation, users, collective action},
  28 +}
  29 +
  30 +@phdthesis{meirelles2013,
  31 + title={Monitoring Source Code Metrics in Free Software Projects},
  32 + author={Meirelles, Paulo Roberto Miranda},
  33 + year={2013},
  34 + school={Department of Computer Science -- Institute of Mathematics and Statistics of University of S{\~a}o Paulo},
  35 + note = {[in portuguese]},
  36 + url={http://www.teses.usp.br/teses/disponiveis/45/45134/tde-27082013-090242/en.php}
  37 +}
  38 +
  39 +@mastersthesis{sabino2009,
  40 + title={A systematic study on Free Software License},
  41 + author={Vanessa Sabino},
  42 + year={2009},
  43 + school={Department of Computer Science -- Institute of Mathematics and Statistics of University of S{\~a}o Paulo},
  44 + note = {[in portuguese]},
  45 + url={http://www.teses.usp.br/teses/disponiveis/45/45134/tde-14032012-003454/en.php}
  46 +
  47 +}
  48 +
... ...
opensym2017/spb.tex 0 → 100644
... ... @@ -0,0 +1,164 @@
  1 +\documentclass{sigchi}
  2 +
  3 +% Use this section to set the ACM copyright statement (e.g. for
  4 +% preprints). Consult the conference website for the camera-ready
  5 +% copyright statement.
  6 +
  7 +% Copyright
  8 +\CopyrightYear{2017}
  9 +%\setcopyright{acmcopyright}
  10 +\setcopyright{acmlicensed}
  11 +%\setcopyright{rightsretained}
  12 +%\setcopyright{usgov}
  13 +%\setcopyright{usgovmixed}
  14 +%\setcopyright{cagov}
  15 +%\setcopyright{cagovmixed}
  16 +% DOI
  17 +\doi{http://dx.doi.org/10.475/123_4}
  18 +% ISBN
  19 +\isbn{123-4567-24-567/08/06}
  20 +%Conference
  21 +\conferenceinfo{CHI'16,}{May 07--12, 2016, San Jose, CA, USA}
  22 +%Price
  23 +\acmPrice{\$15.00}
  24 +
  25 +% Use this command to override the default ACM copyright statement
  26 +% (e.g. for preprints). Consult the conference website for the
  27 +% camera-ready copyright statement.
  28 +
  29 +%% HOW TO OVERRIDE THE DEFAULT COPYRIGHT STRIP --
  30 +%% Please note you need to make sure the copy for your specific
  31 +%% license is used here!
  32 +% \toappear{
  33 +% Permission to make digital or hard copies of all or part of this work
  34 +% for personal or classroom use is granted without fee provided that
  35 +% copies are not made or distributed for profit or commercial advantage
  36 +% and that copies bear this notice and the full citation on the first
  37 +% page. Copyrights for components of this work owned by others than ACM
  38 +% must be honored. Abstracting with credit is permitted. To copy
  39 +% otherwise, or republish, to post on servers or to redistribute to
  40 +% lists, requires prior specific permission and/or a fee. Request
  41 +% permissions from \href{mailto:Permissions@acm.org}{Permissions@acm.org}. \\
  42 +% \emph{CHI '16}, May 07--12, 2016, San Jose, CA, USA \\
  43 +% ACM xxx-x-xxxx-xxxx-x/xx/xx\ldots \$15.00 \\
  44 +% DOI: \url{http://dx.doi.org/xx.xxxx/xxxxxxx.xxxxxxx}
  45 +% }
  46 +
  47 +% Arabic page numbers for submission. Remove this line to eliminate
  48 +% page numbers for the camera ready copy
  49 +% \pagenumbering{arabic}
  50 +
  51 +% Load basic packages
  52 +\usepackage{balance} % to better equalize the last page
  53 +\usepackage{graphics} % for EPS, load graphicx instead
  54 +\usepackage[T1]{fontenc} % for umlauts and other diaeresis
  55 +\usepackage{txfonts}
  56 +\usepackage{mathptmx}
  57 +\usepackage[pdflang={en-US},pdftex]{hyperref}
  58 +\usepackage{color}
  59 +\usepackage{booktabs}
  60 +\usepackage{textcomp}
  61 +
  62 +% Some optional stuff you might like/need.
  63 +\usepackage{microtype} % Improved Tracking and Kerning
  64 +% \usepackage[all]{hypcap} % Fixes bug in hyperref caption linking
  65 +\usepackage{ccicons} % Cite your images correctly!
  66 +\usepackage[utf8]{inputenc} % for a UTF8 editor only
  67 +
  68 +% If you want to use todo notes, marginpars etc. during creation of
  69 +% your draft document, you have to enable the "chi_draft" option for
  70 +% the document class. To do this, change the very first line to:
  71 +% "\documentclass[chi_draft]{sigchi}". You can then place todo notes
  72 +% by using the "\todo{...}" command. Make sure to disable the draft
  73 +% option again before submitting your final document.
  74 +\usepackage{todonotes}
  75 +
  76 +% Paper metadata (use plain text, for PDF inclusion and later
  77 +% re-using, if desired). Use \emtpyauthor when submitting for review
  78 +% so you remain anonymous.
  79 +\def\plaintitle{Brazilian Public Software Portal: an integrated platform for collaborative development}
  80 +\def\plainauthor{Paulo Meirelles, Antonio Terceiro, Hilmer Neri, Melissa Wen, Ridrigo Siqueira, Lucas Kanashiro}
  81 +\def\emptyauthor{}
  82 +\def\plainkeywords{Brazilian Public Software, Free/Libre/Open Source Software, Software Evolution, Integrated Platform.}
  83 +\def\plaingeneralterms{Documentation, Standardization}
  84 +
  85 +% llt: Define a global style for URLs, rather that the default one
  86 +\makeatletter
  87 +\def\url@leostyle{%
  88 + \@ifundefined{selectfont}{
  89 + \def\UrlFont{\sf}
  90 + }{
  91 + \def\UrlFont{\small\bf\ttfamily}
  92 + }}
  93 +\makeatother
  94 +\urlstyle{leo}
  95 +
  96 +% To make various LaTeX processors do the right thing with page size.
  97 +\def\pprw{8.5in}
  98 +\def\pprh{11in}
  99 +\special{papersize=\pprw,\pprh}
  100 +\setlength{\paperwidth}{\pprw}
  101 +\setlength{\paperheight}{\pprh}
  102 +\setlength{\pdfpagewidth}{\pprw}
  103 +\setlength{\pdfpageheight}{\pprh}
  104 +
  105 +% Make sure hyperref comes last of your loaded packages, to give it a
  106 +% fighting chance of not being over-written, since its job is to
  107 +% redefine many LaTeX commands.
  108 +\definecolor{linkColor}{RGB}{6,125,233}
  109 +\hypersetup{%
  110 + pdftitle={\plaintitle},
  111 + pdfauthor={\plainauthor},
  112 + pdfkeywords={\plainkeywords},
  113 + pdfdisplaydoctitle=true, % For Accessibility
  114 + bookmarksnumbered,
  115 + pdfstartview={FitH},
  116 + colorlinks,
  117 + citecolor=black,
  118 + filecolor=black,
  119 + linkcolor=black,
  120 + urlcolor=linkColor,
  121 + breaklinks=true,
  122 + hypertexnames=false
  123 +}
  124 +
  125 +% create a shortcut to typeset table headings
  126 +% \newcommand\tabhead[1]{\small\textbf{#1}}
  127 +
  128 +% End of preamble. Here it comes the document.
  129 +\begin{document}
  130 +
  131 +\title{\plaintitle}
  132 +
  133 +\numberofauthors{6}
  134 +\author{%
  135 + \alignauthor{Paulo Meirelles,\\Hilmer Neri\\
  136 + \affaddr{Faculty Gama (FGA) \\ University of Bras\'ilia}\\
  137 + \affaddr{Gama, Brazil}\\
  138 + \email{\{paulormm,hilmer\}@unb.br}}\\
  139 + \alignauthor{Antonio Terceiro,\\Melissa Wen\\
  140 + \affaddr{Colivre}\\
  141 + \affaddr{Salvador, Brazil}\\
  142 + \email{\{terceiro,melissa\}@colivre.coop.br}}\\
  143 + \alignauthor{Rodrigo Siqueira,\\Lucas Kanashiro\\
  144 + \affaddr{FLOSS Competence Center \\ University of S\~ao Paulo}\\
  145 + \affaddr{São Paulo, Brazil}\\
  146 + \email{\{siqueira,ldk\}@ime.usp.br}}\\
  147 +}
  148 +
  149 +\maketitle
  150 +%------------------------------------------------------------------------------
  151 +\input{content/00-abstract}
  152 +%------------------------------------------------------------------------------
  153 +\input{content/01-introduction}
  154 +\input{content/02-spb}
  155 +\input{content/03-arch}
  156 +\input{content/04-features}
  157 +\input{content/05-process}
  158 +\input{content/06-ux}
  159 +\input{content/07-finals}
  160 +
  161 +%------------------------------------------------------------------------------
  162 +\bibliographystyle{SIGCHI-Reference-Format}
  163 +\bibliography{spb}
  164 +\end{document}
... ...