12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894 |
- %%% -*-BibTeX-*-
- %%% ====================================================================
- %%% @BibTeX-style-file{
- %%% author = "Nelson H. F. Beebe, Boris Veytsman and Gerald Murray",
- %%% version = "2.1",
- %%% date = "14 June 2017",
- %%% filename = "ACM-Reference-Format.bst",
- %%% email = "borisv@lk.net, boris@varphi.com",
- %%% codetable = "ISO/ASCII",
- %%% keywords = "ACM Transactions bibliography style; BibTeX",
- %%% license = "public domain",
- %%% supported = "yes",
- %%% abstract = "",
- %%% }
- %%% ====================================================================
-
- %%% Revision history: see source in git
-
- ENTRY
- { address
- advisor
- archiveprefix
- author
- booktitle
- chapter
- city
- date
- edition
- editor
- eprint
- eprinttype
- eprintclass
- howpublished
- institution
- journal
- key
- month
- note
- number
- organization
- pages
- primaryclass
- publisher
- school
- series
- title
- type
- volume
- year
- % New keys recognized
- issue % UTAH: used in, e.g., ACM SIGSAM Bulletin and ACM Communications in Computer Algebra
- articleno
- eid
- day % UTAH: needed for newspapers, weeklies, bi-weeklies
- doi % UTAH
- url % UTAH
- bookpages % UTAH
- numpages
- lastaccessed % UTAH: used only for @Misc{...}
- coden % UTAH
- isbn % UTAH
- isbn-13 % UTAH
- issn % UTAH
- lccn % UTAH
- }
- {}
- { label.year extra.label sort.year sort.label basic.label.year}
-
- INTEGERS { output.state before.all mid.sentence after.sentence after.block }
-
- INTEGERS { show-isbn-10-and-13 } % initialized below in begin.bib
-
- INTEGERS { nameptr namesleft numnames }
-
- INTEGERS { multiresult }
-
- INTEGERS { len }
-
- INTEGERS { last.extra.num }
-
- STRINGS { s t t.org u }
-
- STRINGS { last.label next.extra }
-
- STRINGS { p1 p2 p3 page.count }
-
-
- FUNCTION { not }
- {
- { #0 }
- { #1 }
- if$
- }
-
- FUNCTION { and }
- {
- 'skip$
- { pop$ #0 }
- if$
- }
-
- FUNCTION { or }
- {
- { pop$ #1 }
- 'skip$
- if$
- }
-
-
- FUNCTION { dump.stack.1 }
- {
- duplicate$ "STACK[top] = [" swap$ * "]" * warning$
- }
-
- FUNCTION { dump.stack.2 }
- {
- duplicate$ "STACK[top ] = [" swap$ * "]" * warning$
- swap$
- duplicate$ "STACK[top-1] = [" swap$ * "]" * warning$
- swap$
- }
-
- FUNCTION { empty.or.unknown }
- {
- %% Examine the top stack entry, and push 1 if it is empty, or
- %% consists only of whitespace, or is a string beginning with two
- %% queries (??), and otherwise, push 0.
- %%
- %% This function provides a replacement for empty$, with the
- %% convenient feature that unknown values marked by two leading
- %% queries are treated the same as missing values, and thus, do not
- %% appear in the output .bbl file, and yet, their presence in .bib
- %% file(s) serves to mark values which are temporarily missing, but
- %% are expected to be filled in eventually once more data is
- %% obtained. The TeX User Group and BibNet bibliography archives
- %% make extensive use of this practice.
- %%
- %% An empty string cannot serve the same purpose, because just as in
- %% statistics data processing, an unknown value is not the same as an
- %% empty value.
- %%
- %% At entry: stack = ... top:[string]
- %% At exit: stack = ... top:[0 or 1]
-
- duplicate$ empty$
- { pop$ #1 }
- { #1 #2 substring$ "??" = }
- if$
- }
-
- FUNCTION { writeln }
- {
- %% In BibTeX style files, the sequences
- %%
- %% ... "one" "two" output
- %% ... "one" "two" output.xxx
- %%
- %% ship "one" to the output file, possibly following by punctuation,
- %% leaving the stack with
- %%
- %% ... "two"
- %%
- %% There is thus a one-string lag in output processing that must be
- %% carefully handled to avoid duplicating a string in the output
- %% file. Unless otherwise noted, all output.xxx functions leave
- %% just one new string on the stack, and that model should be born
- %% in mind when reading or writing function code.
- %%
- %% BibTeX's asynchronous buffering of output from strings from the
- %% stack is confusing because newline$ bypasses the buffer. It
- %% would have been so much easier for newline to be a character
- %% rather than a state of the output-in-progress.
- %%
- %% The documentation in btxhak.dvi is WRONG: it says
- %%
- %% newline$ Writes onto the bbl file what's accumulated in the
- %% output buffer. It writes a blank line if and only
- %% if the output buffer is empty. Since write$ does
- %% reasonable line breaking, you should use this
- %% function only when you want a blank line or an
- %% explicit line break.
- %%
- %% write$ Pops the top (string) literal and writes it on the
- %% output buffer (which will result in stuff being
- %% written onto the bbl file when the buffer fills
- %% up).
- %%
- %% Examination of the BibTeX source code shows that write$ does
- %% indeed behave as claimed, but newline$ sends a newline character
- %% directly to the output file, leaving the stack unchanged. The
- %% first line "Writes onto ... buffer." is therefore wrong.
- %%
- %% The original BibTeX style files almost always use "write$ newline$"
- %% in that order, so it makes sense to hide that pair in a private
- %% function like this one, named after a statement in Pascal,
- %% the programming language embedded in the BibTeX Web program.
-
- write$ % output top-of-stack string
- newline$ % immediate write of newline (not via stack)
- }
-
- FUNCTION { init.state.consts }
- {
- #0 'before.all :=
- #1 'mid.sentence :=
- #2 'after.sentence :=
- #3 'after.block :=
- }
-
- FUNCTION { output.nonnull }
- { % Stack in: ... R S T Stack out: ... R T File out: S<comma><space>
- 's :=
- output.state mid.sentence =
- {
- ", " * write$
- }
- {
- output.state after.block =
- {
- add.period$ writeln
- "\newblock " write$
- }
- {
- output.state before.all =
- {
- write$
- }
- {
- add.period$ " " * write$
- }
- if$
- }
- if$
- mid.sentence 'output.state :=
- }
- if$
- s
- }
-
- FUNCTION { output.nonnull.dot.space }
- { % Stack in: ... R S T Stack out: ... R T File out: S<dot><space>
- 's :=
- output.state mid.sentence = % { "<DEBUG output.nonnull.dot.space>. " * write$ }
- {
- ". " * write$
- }
- {
- output.state after.block =
- {
- add.period$ writeln "\newblock " write$
- }
- {
- output.state before.all =
- {
- write$
- }
- {
- add.period$ " " * write$
- }
- if$
- }
- if$
- mid.sentence 'output.state :=
- }
- if$
- s
- }
-
- FUNCTION { output.nonnull.remove }
- { % Stack in: ... R S T Stack out: ... R T File out: S<space>
- 's :=
- output.state mid.sentence =
- {
- " " * write$
- }
- {
- output.state after.block =
- {
- add.period$ writeln "\newblock " write$
- }
- {
- output.state before.all =
- {
- write$
- }
- {
- add.period$ " " * write$
- }
- if$
- }
- if$
- mid.sentence 'output.state :=
- }
- if$
- s
- }
-
- FUNCTION { output.nonnull.removenospace }
- { % Stack in: ... R S T Stack out: ... R T File out: S
- 's :=
- output.state mid.sentence =
- {
- "" * write$
- }
- {
- output.state after.block =
- {
- add.period$ writeln "\newblock " write$
- }
- {
- output.state before.all =
- {
- write$
- }
- {
- add.period$ " " * write$
- }
- if$
- }
- if$
- mid.sentence 'output.state :=
- }
- if$
- s
- }
-
- FUNCTION { output }
- { % discard top token if empty, else like output.nonnull
- duplicate$ empty.or.unknown
- 'pop$
- 'output.nonnull
- if$
- }
-
- FUNCTION { output.dot.space }
- { % discard top token if empty, else like output.nonnull.dot.space
- duplicate$ empty.or.unknown
- 'pop$
- 'output.nonnull.dot.space
- if$
- }
-
- FUNCTION { output.removenospace }
- { % discard top token if empty, else like output.nonnull.removenospace
- duplicate$ empty.or.unknown
- 'pop$
- 'output.nonnull.removenospace
- if$
- }
-
- FUNCTION { output.check }
- { % like output, but warn if key name on top-of-stack is not set
- 't :=
- duplicate$ empty.or.unknown
- { pop$ "empty " t * " in " * cite$ * warning$ }
- 'output.nonnull
- if$
- }
-
- FUNCTION { bibinfo.output.check }
- { % like output.check, adding bibinfo field
- 't :=
- duplicate$ empty.or.unknown
- { pop$ "empty " t * " in " * cite$ * warning$ }
- { "\bibinfo{" t "}{" * * swap$ * "}" *
- output.nonnull }
- if$
- }
-
- FUNCTION { output.check.dot.space }
- { % like output.dot.space, but warn if key name on top-of-stack is not set
- 't :=
- duplicate$ empty.or.unknown
- { pop$ "empty " t * " in " * cite$ * warning$ }
- 'output.nonnull.dot.space
- if$
- }
-
- FUNCTION { fin.block }
- { % functionally, but not logically, identical to fin.entry
- add.period$
- writeln
- }
-
- FUNCTION { fin.entry }
- {
- add.period$
- writeln
- }
-
- FUNCTION { new.sentence }
- { % update sentence state, with neither output nor stack change
- output.state after.block =
- 'skip$
- {
- output.state before.all =
- 'skip$
- { after.sentence 'output.state := }
- if$
- }
- if$
- }
-
- FUNCTION { fin.sentence }
- {
- add.period$
- write$
- new.sentence
- ""
- }
-
- FUNCTION { new.block }
- {
- output.state before.all =
- 'skip$
- { after.block 'output.state := }
- if$
- }
-
- FUNCTION { output.coden } % UTAH
- { % output non-empty CODEN as one-line sentence (stack untouched)
- coden empty.or.unknown
- { }
- { "\showCODEN{" coden * "}" * writeln }
- if$
- }
-
- FUNCTION { format.articleno }
- {
- articleno empty.or.unknown not eid empty.or.unknown not and
- { "Both articleno and eid are defined for " cite$ * warning$ }
- 'skip$
- if$
- articleno empty.or.unknown eid empty.or.unknown and
- { "" }
- {
- numpages empty.or.unknown
- { "articleno or eid field, but no numpages field, in "
- cite$ * warning$ }
- { }
- if$
- eid empty.or.unknown
- { "Article \bibinfo{articleno}{" articleno * "}" * }
- { "Article \bibinfo{articleno}{" eid * "}" * }
- if$
- }
- if$
- }
-
- FUNCTION { format.year }
- { % push year string or "[n. d.]" onto output stack
- %% Because year is a mandatory field, we always force SOMETHING
- %% to be output
- "\bibinfo{year}{"
- year empty.or.unknown
- { "[n. d.]" }
- { year }
- if$
- * "}" *
- }
-
- FUNCTION { format.day.month }
- { % push "day month " or "month " or "" onto output stack
- day empty.or.unknown
- {
- month empty.or.unknown
- { "" }
- { "\bibinfo{date}{" month * "} " *}
- if$
- }
- {
- month empty.or.unknown
- { "" }
- { "\bibinfo{date}{" day * " " * month * "} " *}
- if$
- }
- if$
- }
-
- FUNCTION { format.day.month.year } % UTAH
- { % if month is empty, push "" else push "(MON.)" or "(DD MON.)"
- % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
- % acm-*.bst addition: prefix parenthesized date string with
- % ", Article nnn "
- articleno empty.or.unknown eid empty.or.unknown and
- { "" }
- { output.state after.block =
- {", " format.articleno * }
- { format.articleno }
- if$
- }
- if$
- " (" * format.day.month * format.year * ")" *
- }
-
- FUNCTION { output.day.month.year } % UTAH
- { % if month is empty value, do nothing; else output stack top and
- % leave with new top string "(MON.)" or "(DD MON.)"
- % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
- format.day.month.year
- output.nonnull.remove
- }
-
- FUNCTION { strip.doi } % UTAH
- { % Strip any Web address prefix to recover the bare DOI, leaving the
- % result on the output stack, as recommended by CrossRef DOI
- % documentation.
- % For example, reduce "http://doi.acm.org/10.1145/1534530.1534545" to
- % "10.1145/1534530.1534545". That is later typeset and displayed as
- % doi:10.1145/1534530.1534545 as the LAST item in the reference list
- % entry. Publisher Web sites wrap this with a suitable link to a real
- % URL to resolve the DOI, and the master https://doi.org/ address is
- % preferred, since publisher-specific URLs can disappear in response
- % to economic events. All journals are encouraged by the DOI
- % authorities to use that typeset format and link procedures for
- % uniformity across all publications that include DOIs in reference
- % lists.
- % The numeric prefix is guaranteed to start with "10.", so we use
- % that as a test.
- % 2017-02-04 Added stripping of https:// (Boris)
- doi #1 #3 substring$ "10." =
- { doi }
- {
- doi 't := % get modifiable copy of DOI
-
- % Change https:// to http:// to strip both prefixes (BV)
-
- t #1 #8 substring$ "https://" =
- { "http://" t #9 t text.length$ #8 - substring$ * 't := }
- { }
- if$
-
- t #1 #7 substring$ "http://" =
- {
- t #8 t text.length$ #7 - substring$ 't :=
-
- "INTERNAL STYLE-FILE ERROR" 's :=
-
- % search for next "/" and assign its suffix to s
-
- { t text.length$ }
- {
- t #1 #1 substring$ "/" =
- {
- % save rest of string as true DOI (should be 10.xxxx/yyyy)
- t #2 t text.length$ #1 - substring$ 's :=
- "" 't := % empty string t terminates the loop
- }
- {
- % discard first character and continue loop: t <= substring(t,2,last)
- t #2 t text.length$ #1 - substring$ 't :=
- }
- if$
- }
- while$
-
- % check for valid DOI (should be 10.xxxx/yyyy)
- s #1 #3 substring$ "10." =
- { }
- { "unrecognized DOI substring " s * " in DOI value [" * doi * "]" * warning$ }
- if$
-
- s % push the stripped DOI on the output stack
-
- }
- {
- "unrecognized DOI value [" doi * "]" * warning$
- doi % push the unrecognized original DOI on the output stack
- }
- if$
- }
- if$
- }
-
- %
- % Change by BV: added standard prefix to URL
- %
- FUNCTION { output.doi } % UTAH
- { % output non-empty DOI as one-line sentence (stack untouched)
- doi empty.or.unknown
- { }
- {
- %% Use \urldef here for the same reason it is used in output.url,
- %% see output.url for further discussion.
- "\urldef\tempurl%" writeln
- "\url{https://doi.org/" strip.doi * "}" * writeln
- "\showDOI{\tempurl}" writeln
- }
- if$
- }
-
- FUNCTION { output.isbn } % UTAH
- { % output non-empty ISBN-10 and/or ISBN-13 as one-line sentences (stack untouched)
- show-isbn-10-and-13
- {
- %% show both 10- and 13-digit ISBNs
- isbn empty.or.unknown
- { }
- {
- "\showISBNx{" isbn * "}" * writeln
- }
- if$
- isbn-13 empty.or.unknown
- { }
- {
- "\showISBNxiii{" isbn-13 * "}" * writeln
- }
- if$
- }
- {
- %% show 10-digit ISBNs only if 13-digit ISBNs not available
- isbn-13 empty.or.unknown
- {
- isbn empty.or.unknown
- { }
- {
- "\showISBNx{" isbn * "}" * writeln
- }
- if$
- }
- {
- "\showISBNxiii{" isbn-13 * "}" * writeln
- }
- if$
- }
- if$
- }
-
- FUNCTION { output.issn } % UTAH
- { % output non-empty ISSN as one-line sentence (stack untouched)
- issn empty.or.unknown
- { }
- { "\showISSN{" issn * "}" * writeln }
- if$
- }
-
- FUNCTION { output.issue }
- { % output non-empty issue number as a one-line sentence (stack untouched)
- issue empty.or.unknown
- { }
- { "Issue " issue * "." * writeln }
- if$
- }
-
- FUNCTION { output.lccn } % UTAH
- { % return with stack untouched
- lccn empty.or.unknown
- { }
- { "\showLCCN{" lccn * "}" * writeln }
- if$
- }
-
- FUNCTION { output.note } % UTAH
- { % return with stack empty
- note empty.or.unknown
- { }
- { "\shownote{" note add.period$ * "}" * writeln }
- if$
- }
-
- FUNCTION { output.note.check } % UTAH
- { % return with stack empty
- note empty.or.unknown
- { "empty note in " cite$ * warning$ }
- { "\shownote{" note add.period$ * "}" * writeln }
- if$
- }
-
- FUNCTION { output.eprint } %
- { % return with stack empty
- eprint empty.or.unknown
- { }
- { "\showeprint"
- archiveprefix empty.or.unknown
- { eprinttype empty.or.unknown
- { }
- { "[" eprinttype "]" * * * }
- if$
- }
- { "[" archiveprefix "l" change.case$ "]" * * * }
- if$
- "{" *
- primaryclass empty.or.unknown
- { eprintclass empty.or.unknown
- { }
- { eprintclass "/" * * }
- if$
- }
- { primaryclass "/" * * }
- if$
- eprint "}" * *
- writeln
- }
- if$
- }
-
-
- %
- % Changes by BV 2011/04/15. Do not output
- % url if doi is defined
- %
- FUNCTION { output.url } % UTAH
- { % return with stack untouched
- % output URL and associated lastaccessed fields
- doi empty.or.unknown
- {
- url empty.or.unknown
- { }
- {
- %% Use \urldef, outside \showURL, so that %nn, #, etc in URLs work
- %% correctly. Put the actual URL on its own line to reduce the
- %% likelihood of BibTeX's nasty line wrapping after column 79.
- %% \url{} can undo this, but if that doesn't work for some reason
- %% the .bbl file would have to be repaired manually.
- "\urldef\tempurl%" writeln
- "\url{" url * "}" * writeln
-
- "\showURL{%" writeln
- lastaccessed empty.or.unknown
- { "" }
- { "Retrieved " lastaccessed * " from " * }
- if$
- "\tempurl}" * writeln
- }
- if$
- }
- { }
- if$
- }
-
- FUNCTION { output.year.check }
- { % warn if year empty, output top string and leave " YEAR<label>" on stack in mid-sentence
- year empty.or.unknown
- { "empty year in " cite$ * warning$
- write$
- " \bibinfo{year}{[n. d.]}"
- "\natexlab{" extra.label * "}" * *
- mid.sentence 'output.state :=
- }
- { write$
- " \bibinfo{year}{" year * "}" *
- "\natexlab{" extra.label * "}" * *
- mid.sentence 'output.state :=
- }
- if$
- }
-
-
- FUNCTION { le }
- {
- %% test whether first number is less than or equal to second number
- %% stack in: n1 n2
- %% stack out: if n1 <= n2 then 1 else 0
-
- %% "DEBUG: le " cite$ * warning$
- > { #0 } { #1 } if$
- }
-
- FUNCTION { ge }
- {
- %% test whether first number is greater than or equal to second number
- %% stack in: n1 n2
- %% stack out: if n1 >= n2 then 1 else 0
-
- %% "DEBUG: ge " cite$ * warning$
- < { #0 } { #1 } if$
- }
-
- FUNCTION { is.leading.digit }
- {
- %% test whether first character of string is a digit
- %% stack in: string
- %% stack out: if first-char-is-digit then 1 else 0
-
- #1 #1 substring$ % replace string by string[1:1]
- duplicate$ % string[1:1] string[1:1]
- chr.to.int$
- "0" chr.to.int$ swap$ le % "0" <= string[1:1] --> 0-or-1
- swap$ % 0-or-1 string[1:1]
- chr.to.int$
- "9" chr.to.int$ le % string[1:1} <= "9" --> 0-or-1
- and
- }
-
- FUNCTION { skip.digits }
- {
- %% skip over leading digits in string
- %% stack in: string
- %% stack out: rest-of-string leading-digits
-
- %% "DEBUG: enter skip.digits " cite$ * warning$
-
- %% dump.stack.1
-
- duplicate$
- 't :=
- 't.org :=
- "" 'u :=
-
- { t text.length$ }
- {
- %% "=================DEBUG: skip.digits t = [" t * "]" * warning$
- t is.leading.digit
- { t #2 t text.length$ #1 - substring$ }
- {
- t 'u :=
- ""
- }
- if$
- 't :=
- }
- while$
-
- u % rest of string
- t.org #1 t.org text.length$ u text.length$ - substring$ % leading digits
-
- %% "DEBUG: t.org = [" t.org * "]" * warning$
- %% "DEBUG: u = [" u * "]" * warning$
-
- %% dump.stack.2
-
- %% "DEBUG: leave skip.digits " cite$ * warning$
- }
-
- FUNCTION { skip.nondigits }
- {
- %% skip over leading nondigits in string
- %% stack in: string
- %% stack out: rest-of-string
-
- %% "DEBUG: enter skip.nondigits " cite$ * warning$
-
- 't :=
- "" 'u :=
-
- { t text.length$ }
- {
- %% "=================DEBUG: skip.nondigits t = [" t * "]" * warning$
- t is.leading.digit
- {
- t 'u :=
- ""
- }
- { t #2 t text.length$ #1 - substring$ }
- if$
- 't :=
- }
- while$
-
- u % rest of string
-
- %% dump.stack.1
- %% "DEBUG: leave skip.nondigits " cite$ * warning$
- }
-
- FUNCTION { parse.next.number }
- {
- %% stack in: string
- %% stack out: rest-of-string next-numeric-part-of-string
- %% Example:
- %% stack in: "123:1--123:59"
- %% stack out: ":1--123:59" "123"
-
- 's :=
- s skip.nondigits 's :=
- s skip.digits
- }
-
- FUNCTION { reduce.pages.to.page.count }
- {
- %% Stack in: arbitrary-and-unused
- %% Stack out: unchanged
- %%
- %% For the new-style pagination with article number and numpages or
- %% pages, we expect to have BibTeX entries containing something like
- %% articleno = "17",
- %% pages = "1--23",
- %% with output "Article 17, 23 pages",
- %% or
- %% articleno = "17",
- %% numpages = "23",
- %% with output "Article 17, 23 pages",
- %% or
- %% articleno = "17",
- %% pages = "17:1--17:23",
- %% with output "Article 17, 23 pages",
- %%
- %% If articleno is missing or empty, then we should output "1--23",
- %% "23" (with a warning of a missing articleno), or "17:1--17:23",
- %% respectively.
-
- %% "DEBUG: enter reduce.pages.to.page.count " cite$ * warning$
-
- %% "DEBUG: pages = [" pages * "]" * warning$
-
- pages
- parse.next.number 'p1 :=
- parse.next.number 'p2 :=
- parse.next.number 'p3 :=
- parse.next.number 'page.count :=
-
- duplicate$
- empty.or.unknown
- { }
- {
- duplicate$ "unexpected trailing garbage [" swap$ *
- "] after n:p1--n:p2 in pages = [" *
- pages *
- "] in " *
- cite$ *
- warning$
- }
- if$
-
- pop$
-
- %% "DEBUG: reduce.pages.to.page.count: "
- %% " p1 = " p1 * *
- %% " p2 = " p2 * *
- %% " p3 = " p3 * *
- %% " p4 = " page.count * *
- %% " in " cite$ * * warning$
-
- p1 p3 = p2 "1" = and numpages empty.or.unknown and
- { "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$ }
- {
- numpages empty.or.unknown
- { pages }
- { numpages }
- if$
- 'page.count :=
- }
- if$
-
- p1 "1" = p3 empty.or.unknown and numpages empty.or.unknown and
- {
- p2 'page.count :=
- "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$
- }
- {
- numpages empty.or.unknown
- { pages }
- { numpages }
- if$
- 'page.count :=
- }
- if$
-
- %% "DEBUG: leave reduce.pages.to.page.count " cite$ * warning$
- }
-
- FUNCTION { new.block.checkb }
- { % issue a new.block only if at least one of top two stack strings is not empty
- empty.or.unknown
- swap$ empty.or.unknown
- and
- 'skip$
- 'new.block
- if$
- }
-
- FUNCTION { field.or.null }
- { % convert empty value to null string, else return value
- duplicate$ empty.or.unknown
- { pop$ "" }
- 'skip$
- if$
- }
-
-
-
- FUNCTION { emphasize }
- { % emphasize a non-empty top string on the stack
- duplicate$ empty.or.unknown
- { pop$ "" }
- { "\emph{" swap$ * "}" * }
- if$
- }
-
- FUNCTION { comma }
- { % convert empty string to null string, or brace string and add trailing comma
- duplicate$ empty.or.unknown
- { pop$ "" }
- { "{" swap$ * "}," * }
- if$
- }
-
- FUNCTION { format.names }
- {
- % Format bibliographical entries with the first author last name first,
- % and subsequent authors with initials followed by last name.
- % All names are formatted in this routine.
-
- 's :=
- #1 'nameptr := % nameptr = 1;
- s num.names$ 'numnames := % numnames = num.name$(s);
- numnames 'namesleft :=
- { namesleft #0 > }
- { nameptr #1 =
- %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
- %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
- {"\bibinfo{person}{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
- {"\bibinfo{person}{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
- if$
- nameptr #1 >
- {
- namesleft #1 >
- { ", " * t * }
- {
- numnames #2 >
- { "," * }
- 'skip$
- if$
- t "\bibinfo{person}{others}" =
- { " {et~al\mbox{.}}" * } % jrh: avoid spacing problems
- { " {and} " * t * } % from Chicago Manual of Style
- if$
- }
- if$
- }
- 't
- if$
- nameptr #1 + 'nameptr := % nameptr += 1;
- namesleft #1 - 'namesleft := % namesleft =- 1;
- }
- while$
- }
-
- FUNCTION { my.full.label }
- {
- 's :=
- #1 'nameptr := % nameptr = 1;
- s num.names$ 'numnames := % numnames = num.name$(s);
- numnames 'namesleft :=
- { namesleft #0 > }
-
- { s nameptr "{vv~}{ll}" format.name$ 't := % get the next name
- nameptr #1 >
- {
- namesleft #1 >
- { ", " * t * }
- {
- numnames #2 >
- { "," * }
- 'skip$
- if$
- t "others" =
- { " et~al\mbox{.}" * } % jrh: avoid spacing problems
- { " and " * t * } % from Chicago Manual of Style
- if$
- }
- if$
- }
- 't
- if$
- nameptr #1 + 'nameptr := % nameptr += 1;
- namesleft #1 - 'namesleft := % namesleft =- 1;
- }
- while$
-
- }
-
- FUNCTION { format.names.fml }
- {
- % Format names in "familiar" format, with first initial followed by
- % last name. Like format.names, ALL names are formatted.
- % jtb: The names are NOT put in small caps
-
- 's :=
- #1 'nameptr := % nameptr = 1;
- s num.names$ 'numnames := % numnames = num.name$(s);
- numnames 'namesleft :=
- { namesleft #0 > }
-
- {
- "\bibinfo{person}{" s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ * "}" * 't :=
-
- nameptr #1 >
- {
- namesleft #1 >
- { ", " * t * }
- {
- numnames #2 >
- { "," * }
- 'skip$
- if$
- t "\bibinfo{person}{others}" =
- { " {et~al\mbox{.}}" * }
- { " {and} " * t * }
- if$
- }
- if$
- }
- 't
- if$
- nameptr #1 + 'nameptr := % nameptr += 1;
- namesleft #1 - 'namesleft := % namesleft =- 1;
- }
- while$
- }
-
- FUNCTION { format.authors }
- {
- author empty.or.unknown
- { "" }
- {
- "\bibfield{author}{"
- author format.names add.period$ * "}" *} % jtb: add period if none before
- if$
- }
-
- FUNCTION { format.key }
- {
- empty.or.unknown
- { key field.or.null }
- { "" }
- if$
- }
-
- FUNCTION { format.no.key }
- {
- empty.or.unknown
- { "" }
- { "" }
- if$
- }
-
- FUNCTION { format.editors.fml }
- {
- % Format editor names for use in the "in" types: inbook, incollection,
- % inproceedings: first initial, then last names. When editors are the
- % LABEL for an entry, then format.editor is used which lists editors
- % by last name first.
-
- editor empty.or.unknown
- { "" }
- {
- "\bibfield{editor}{"
- editor format.names.fml
- * "}" *
- editor num.names$ #1 >
- { " (Eds.)" * }
- { " (Ed.)" * }
- if$
- }
- if$
- }
-
- FUNCTION { format.editors }
- { % format editor names for use in labels, last names first.
- editor empty.or.unknown
- { "" }
- {
- "\bibfield{editor}{"
- editor format.names
- * "}" *
- editor num.names$ #1 >
- { " (Eds.)." * }
- { " (Ed.)." * }
- if$
- }
- if$
- }
-
- FUNCTION { format.articletitle }
- {
- title empty.or.unknown
- { "" }
- % Use this to preserve lettercase in titles:
- { "\showarticletitle{" title * "}" * }
- % Use this for downcase title style:
- % { \showarticletitle{" title "t" change.case$ * "}" * }
- if$
- }
-
- FUNCTION { format.title }
- {
- title empty.or.unknown
- { "" }
- % Use this to preserve lettercase in titles:
- { "\bibinfo{title}{" title * "}" * }
- % Use this for downcase title style:
- % { title "t" change.case$ }
- if$
- }
-
- FUNCTION { n.dashify }
- {
- 't :=
- ""
- { t empty.or.unknown not }
- {
- t #1 #1 substring$ "-" =
- {
- t #1 #2 substring$ "--" = not
- { "--" *
- t #2 global.max$ substring$ 't :=
- }
- {
- { t #1 #1 substring$ "-" = }
- {
- "-" *
- t #2 global.max$ substring$ 't :=
- }
- while$
- }
- if$
- }
- {
- t #1 #1 substring$ *
- t #2 global.max$ substring$ 't :=
- }
- if$
- }
- while$
- }
-
- FUNCTION { format.a.title.with.edition }
- {
- "\bibinfo{booktitle}{"
- swap$ emphasize *
- edition empty.or.unknown
- 'skip$
- { " (\bibinfo{edition}{" * edition "l" change.case$ *
- "} ed.)" * } % jtb: no parens for ed.
- if$
- "}" *
- }
-
- FUNCTION { format.btitle }
- { title format.a.title.with.edition }
-
- FUNCTION { format.emphasize.booktitle }
- { booktitle format.a.title.with.edition }
-
- FUNCTION { format.city }
- {
- % jtb: if the preceding string (the title of the conference) is non-empty,
- % jtb: append the location, otherwise leave empty (so as to trigger the
- % jtb: error message in output.check
-
- duplicate$ empty.or.unknown
- { }
- {
- city empty.or.unknown
- {
- date empty.or.unknown
- { }
- { " (" * date * ")" * }
- if$
- }
- {
- date empty.or.unknown
- { " (" * city * ")" * }
- { " (" * city * ", " * date * ")" * }
- if$
- }
- if$
- }
- if$
- }
-
- FUNCTION { tie.or.space.connect }
- {
- duplicate$ text.length$ #3 <
- { "~" }
- { " " }
- if$
- swap$ * *
- }
-
- FUNCTION { either.or.check }
- {
- empty.or.unknown
- 'pop$
- { "can't use both " swap$ * " fields in " * cite$ * warning$ }
- if$
- }
-
- FUNCTION { format.bvolume }
- {
- % jtb: If there is a series, this is added and the volume trails after it.
- % jtb: Otherwise, "Vol" is Capitalized.
-
- volume empty.or.unknown
- { "" }
- {
- series empty.or.unknown
- { "Vol.~\bibinfo{volume}{" volume "}" * *}
- { "\bibinfo{series}{" series "}, " * *
- "Vol.~\bibinfo{volume}{" volume "}" * * *}
- if$
- "volume and number" number either.or.check
- }
- if$
- }
-
- FUNCTION { format.bvolume.noseries }
- {
- volume empty.or.unknown
- { "" }
- { "Vol.~\bibinfo{volume}{" volume "}" * *
- "volume and number" number either.or.check
- }
- if$
- }
-
- FUNCTION { format.series }
- {
- series empty.or.unknown
- {""}
- {" \emph{(\bibinfo{series}{" * series "})}" *}
- if$
- }
-
- FUNCTION { format.number.series }
- {
- volume empty.or.unknown
- {
- number empty.or.unknown
- {
- volume empty.or.unknown
- { "" }
- {
- series empty.or.unknown
- { "" }
- { " (\bibinfo{series}{" series * "})" * }
- if$
- }
- if$
- } % { series field.or.null }
- {
- output.state mid.sentence =
- { "Number" } % gnp - changed to mixed case always
- { "Number" }
- if$
- number tie.or.space.connect series empty.or.unknown
- { "there's a number but no series in " cite$ * warning$ }
- { " in \bibinfo{series}{" * series * "}" * }
- if$
- }
- if$
- }
- {
- ""
- }
- if$
- }
-
- FUNCTION { multi.page.check }
- {
- 't :=
- #0 'multiresult :=
- { multiresult not
- t empty.or.unknown not
- and
- }
- { t #1 #1 substring$
- duplicate$ "-" =
- swap$ duplicate$ "," =
- swap$ "+" =
- or or
- { #1 'multiresult := }
- { t #2 global.max$ substring$ 't := }
- if$
- }
- while$
- multiresult
- }
-
- FUNCTION { format.pages }
- {
- pages empty.or.unknown
- { "" }
- { "\bibinfo{pages}{"
- pages multi.page.check
- { pages n.dashify } % gnp - removed () % jtb: removed pp.
- { pages }
- if$
- * "}" *
- }
- if$
- }
-
- FUNCTION { format.pages.check.without.articleno }
- { %% format pages field only if articleno is absent
- %% Stack out: pages-specification
- numpages missing$ pages missing$ and
- { "page numbers missing in both pages and numpages fields in " cite$ * warning$ }
- { }
- if$
-
- articleno empty.or.unknown eid empty.or.unknown and
- {
- pages missing$
- { numpages }
- { format.pages }
- if$
- }
- { "" }
- if$
- }
-
- FUNCTION { format.pages.check }
- {
- pages empty.or.unknown
- { "page numbers missing in " cite$ * warning$ "" }
- { pages n.dashify }
- if$
- }
-
- FUNCTION { format.bookpages }
- {
- bookpages empty.or.unknown
- { "" }
- { bookpages "book pages" tie.or.space.connect }
- if$
- }
-
- FUNCTION { format.named.pages }
- {
- pages empty.or.unknown
- { "" }
- { format.pages "pages" tie.or.space.connect }
- if$
- }
-
- %
- % Changed by Boris Veytsman, 2011-03-13
- % Now the word "pages" is printed even if
- % there field pages is not empty.
- %
-
- FUNCTION { format.page.count }
- {
- page.count empty.or.unknown
- { "" }
- { "\bibinfo{numpages}{" page.count * "}~pages" * }
- if$
- }
-
- FUNCTION { format.articleno.numpages }
- {
- %% There are seven possible outputs, depending on which fields are set.
- %%
- %% These four are handled here:
- %%
- %% articleno, numpages, pages -> "Article articleno-value, numpages-value pages"
- %% articleno, numpages -> "Article articleno-value, numpages-value pages"
- %% articleno, pages -> "Article articleno-value, reduced-pages-value pages"
- %% articleno -> "Article articleno-value" and warn about missing numpages
- %%
- %% The remaining three have already been handled by
- %% format.pages.check.without.articleno:
- %%
- %% numpages, pages -> "pages-value"
- %% numpages -> "numpages-value"
- %% pages -> "pages-value"
- %%
- %% We no longer issue warninig when missing articleno, but having numpages
-
- articleno empty.or.unknown eid empty.or.unknown and
- {
- %% numpages empty.or.unknown
- %% { }
- %% { "numpages field, but no articleno or eid field, in "
- %% cite$ * warning$ }
- %% if$
- ""
- }
- {
- numpages empty.or.unknown
- {
- pages empty.or.unknown
- {
- "articleno or eid, but no pages or numpages field in "
- cite$ * warning$
- "" 'page.count :=
- }
- { reduce.pages.to.page.count }
- if$
- }
- { numpages 'page.count := }
- if$
-
- %% The Article number is now handled in format.day.month.year because
- %% ACM prefers the style "Digital Libraries 12, 3, Article 5 (July 2008)"
- %% over "Digital Libraries 12, 3 (July 2008), Article 5"
- %% format.articleno output
- format.page.count
- }
- if$
- }
-
- FUNCTION {calc.format.page.count}
- {
- numpages empty.or.unknown
- {
- pages empty.or.unknown
- {
- "" 'page.count :=
- }
- { reduce.pages.to.page.count }
- if$
- }
- { numpages 'page.count := }
- if$
- format.page.count
- }
-
-
- FUNCTION { journal.canon.abbrev }
- {
- % Returns a canonical abbreviation for 'journal', or else 'journal'
- % unchanged.
- journal "ACM Computing Surveys" = { "Comput. Surveys" } {
- journal "{ACM} Computing Surveys" = { "Comput. Surveys" } {
- journal "ACM Transactions on Mathematical Software" = { "ACM Trans. Math. Software" } {
- journal "{ACM} Transactions on Mathematical Software" = { "ACM Trans. Math. Software" } {
- journal "ACM SIGNUM Newsletter" = { "ACM SIGNUM Newslett." } {
- journal "ACM {SIGNUM} Newsletter" = { "ACM SIGNUM Newslett." } {
- journal "{ACM} SIGNUM Newsletter" = { "ACM SIGNUM Newslett." } {
- journal "{ACM} {SIGNUM} Newsletter" = { "ACM SIGNUM Newslett." } {
- journal "American Journal of Sociology" = { "Amer. J. Sociology" } {
- journal "American Mathematical Monthly" = { "Amer. Math. Monthly" } {
- journal "American Mathematical Society Translations" = { "Amer. Math. Soc. Transl." } {
- journal "Applied Mathematics and Computation" = { "Appl. Math. Comput." } {
- journal "British Journal of Mathematical and Statistical Psychology" = { "Brit. J. Math. Statist. Psych." } {
- journal "Bulletin of the American Mathematical Society" = { "Bull. Amer. Math. Soc." } {
- journal "Canadian Mathematical Bulletin" = { "Canad. Math. Bull." } {
- journal "Communications of the ACM" = { "Commun. ACM" } {
- journal "Communications of the {ACM}" = { "Commun. ACM" } {
- journal "Computers and Structures" = { "Comput. \& Structures" } {
- journal "Contemporary Mathematics" = { "Contemp. Math." } {
- journal "Crelle's Journal" = { "Crelle's J." } {
- journal "Giornale di Mathematiche" = { "Giorn. Mat." } {
- journal "IEEE Transactions on Aerospace and Electronic Systems" = { "IEEE Trans. Aerospace Electron. Systems" } {
- journal "{IEEE} Transactions on Aerospace and Electronic Systems" = { "IEEE Trans. Aerospace Electron. Systems" } {
- journal "IEEE Transactions on Automatic Control" = { "IEEE Trans. Automat. Control" } {
- journal "{IEEE} Transactions on Automatic Control" = { "IEEE Trans. Automat. Control" } {
- journal "IEEE Transactions on Computers" = { "IEEE Trans. Comput." } {
- journal "{IEEE} Transactions on Computers" = { "IEEE Trans. Comput." } {
- journal "IMA Journal of Numerical Analysis" = { "IMA J. Numer. Anal." } {
- journal "{IMA} Journal of Numerical Analysis" = { "IMA J. Numer. Anal." } {
- journal "Information Processing Letters" = { "Inform. Process. Lett." } {
- journal "International Journal for Numerical Methods in Engineering" = { "Internat. J. Numer. Methods Engrg." } {
- journal "International Journal of Control" = { "Internat. J. Control" } {
- journal "International Journal of Supercomputing Applications" = { "Internat. J. Supercomputing Applic." } {
- journal "Journal of Computational Physics" = { "J. Comput. Phys." } {
- journal "Journal of Computational and Applied Mathematics" = { "J. Comput. Appl. Math." } {
- journal "Journal of Computer and System Sciences" = { "J. Comput. System Sci." } {
- journal "Journal of Mathematical Analysis and Applications" = { "J. Math. Anal. Appl." } {
- journal "Journal of Mathematical Physics" = { "J. Math. Phys." } {
- journal "Journal of Parallel and Distributed Computing" = { "J. Parallel and Distrib. Comput." } {
- journal "Journal of Research of the National Bureau of Standards" = { "J. Res. Nat. Bur. Standards" } {
- journal "Journal of VLSI and Computer Systems" = { "J. VLSI Comput. Syst." } {
- journal "Journal of {VLSI} and Computer Systems" = { "J. VLSI Comput. Syst." } {
- journal "Journal of the ACM" = { "J. ACM" } {
- journal "Journal of the American Statistical Association" = { "J. Amer. Statist. Assoc." } {
- journal "Journal of the Institute of Mathematics and its Applications" = { "J. Inst. Math. Appl." } {
- journal "Journal of the Society for Industrial and Applied Mathematics" = { "J. Soc. Indust. Appl. Math." } {
- journal "Journal of the Society for Industrial and Applied Mathematics, Series B, Numerical Analysis" = { "J. Soc. Indust. Appl. Math. Ser. B Numer. Anal." } {
- journal "Linear Algebra and its Applications" = { "Linear Algebra Appl." } {
- journal "Mathematica Scandinavica" = { "Math. Scand." } {
- journal "Mathematical Tables and Other Aids to Computation" = { "Math. Tables Aids Comput." } {
- journal "Mathematics of Computation" = { "Math. Comp." } {
- journal "Mathematische Annalen" = { "Math. Ann." } {
- journal "Numerische Mathematik" = { "Numer. Math." } {
- journal "Pacific Journal of Mathematics" = { "Pacific J. Math." } {
- journal "Parallel Computing" = { "Parallel Comput." } {
- journal "Philosophical Magazine" = { "Philos. Mag." } {
- journal "Proceedings of the American Mathematical Society" = { "Proc. Amer. Math. Soc." } {
- journal "Proceedings of the IEEE" = { "Proc. IEEE" } {
- journal "Proceedings of the {IEEE}" = { "Proc. IEEE" } {
- journal "Proceedings of the National Academy of Sciences of the USA" = { "Proc. Nat. Acad. Sci. U. S. A." } {
- journal "Quarterly Journal of Mathematics, Oxford, Series (2)" = { "Quart. J. Math. Oxford Ser. (2)" } {
- journal "Quarterly of Applied Mathematics" = { "Quart. Appl. Math." } {
- journal "Review of the International Statisical Institute" = { "Rev. Inst. Internat. Statist." } {
- journal "SIAM Journal on Algebraic and Discrete Methods" = { "SIAM J. Algebraic Discrete Methods" } {
- journal "{SIAM} Journal on Algebraic and Discrete Methods" = { "SIAM J. Algebraic Discrete Methods" } {
- journal "SIAM Journal on Applied Mathematics" = { "SIAM J. Appl. Math." } {
- journal "{SIAM} Journal on Applied Mathematics" = { "SIAM J. Appl. Math." } {
- journal "SIAM Journal on Computing" = { "SIAM J. Comput." } {
- journal "{SIAM} Journal on Computing" = { "SIAM J. Comput." } {
- journal "SIAM Journal on Matrix Analysis and Applications" = { "SIAM J. Matrix Anal. Appl." } {
- journal "{SIAM} Journal on Matrix Analysis and Applications" = { "SIAM J. Matrix Anal. Appl." } {
- journal "SIAM Journal on Numerical Analysis" = { "SIAM J. Numer. Anal." } {
- journal "{SIAM} Journal on Numerical Analysis" = { "SIAM J. Numer. Anal." } {
- journal "SIAM Journal on Scientific and Statistical Computing" = { "SIAM J. Sci. Statist. Comput." } {
- journal "{SIAM} Journal on Scientific and Statistical Computing" = { "SIAM J. Sci. Statist. Comput." } {
- journal "SIAM Review" = { "SIAM Rev." } {
- journal "{SIAM} Review" = { "SIAM Rev." } {
- journal "Software Practice and Experience" = { "Software Prac. Experience" } {
- journal "Statistical Science" = { "Statist. Sci." } {
- journal "The Computer Journal" = { "Comput. J." } {
- journal "Transactions of the American Mathematical Society" = { "Trans. Amer. Math. Soc." } {
- journal "USSR Computational Mathematics and Mathematical Physics" = { "U. S. S. R. Comput. Math. and Math. Phys." } {
- journal "{USSR} Computational Mathematics and Mathematical Physics" = { "U. S. S. R. Comput. Math. and Math. Phys." } {
- journal "Zeitschrift fur Angewandte Mathematik und Mechanik" = { "Z. Angew. Math. Mech." } {
- journal "Zeitschrift fur Angewandte Mathematik und Physik" = { "Z. Angew. Math. Phys." } {
- journal
- } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$
- } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$
- } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$
- } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$
- } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$
- } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$
- } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$
- } if$ } if$ } if$ } if$ } if$ } if$ } if$ } if$
- }
-
- FUNCTION { format.journal.volume.number.day.month.year }
- {
- % By Young (and Spencer)
- % GNP - fixed bugs with missing volume, number, and/or pages
- %
- % Format journal, volume, number, pages for article types.
- %
- journal empty.or.unknown
- { "no journal in " cite$ * warning$ "" }
- { "\bibinfo{journal}{"
- journal.canon.abbrev emphasize *
- "}" * }
- if$
-
- number empty.or.unknown
- {
- volume empty.or.unknown
- { "no number and no volume in " cite$ * warning$ "" * }
- { " " * " \bibinfo{volume}{" * volume * "}" * }
- if$
- }
- {
- volume empty.or.unknown
- {
- "unusual to have number, but no volume, for " cite$ * warning$
- " \bibinfo{number}{" * number * "}" *
- }
- { " \bibinfo{volume}{" * volume * "}, \bibinfo{number}{" *
- number * "}" *}
- if$
- }
- if$
- after.block 'output.state :=
-
- % Sometimes proceedings are published in journals
- % In this case we do not want to put year, day and month here
-
- type$ "inproceedings" =
- { }
- {format.day.month.year * }
- if$
- }
-
- FUNCTION { format.chapter.pages }
- {
- chapter empty.or.unknown
- 'format.pages
- { type empty.or.unknown
- { "Chapter" } % gnp - changed to mixed case
- { type "t" change.case$ }
- if$
- chapter tie.or.space.connect
- pages empty.or.unknown
- {"page numbers missing in " cite$ * warning$} % gnp - added check
- { ", " * format.pages * }
- if$
- }
- if$
- }
-
- FUNCTION { format.in.emphasize.booktitle }
- { % jtb: format for collections or proceedings not appearing in a journal
- booktitle empty.or.unknown
- { "" }
- { "In " format.emphasize.booktitle * }
- if$
- }
-
- FUNCTION { format.in.booktitle }
- { % jtb: format for proceedings appearing in a journal
- booktitle empty.or.unknown
- { "" }
- { "In \bibinfo{booktitle}{" booktitle * "}" * }
- if$
- }
-
- FUNCTION { format.in.ed.booktitle }
- {
- booktitle empty.or.unknown
- { "" }
- { editor empty.or.unknown
- { "In " format.emphasize.booktitle * }
- % jtb: swapped editor location
- { "In " format.emphasize.booktitle * ", " * format.editors.fml * }
- if$
- }
- if$
- }
-
- FUNCTION { format.thesis.type }
- { % call with default type on stack top
- type empty.or.unknown
- 'skip$ % use default type
- {
- pop$ % discard default type
- % NO: it is silly to have to brace protect every degree type!: type "t" change.case$
- type
- }
- if$
- }
-
- FUNCTION { format.tr.number }
- {
- "\bibinfo{type}{"
- type empty.or.unknown
- { "{T}echnical {R}eport" }
- 'type
- if$
- "}" * *
- number empty.or.unknown
- { "t" change.case$ }
- %% LOOKS BAD: { "." * number tie.or.space.connect }
- %% Prefer "Research report RJ687." to "Research report. RJ687."
- { number tie.or.space.connect }
- if$
- }
-
- FUNCTION { format.advisor }
- {
- advisor empty.or.unknown
- { "" }
- { "Advisor(s) " advisor * }
- if$
- }
-
- FUNCTION { format.article.crossref }
- { "See"
- "\citeN{" * crossref * "}" *
- }
-
- FUNCTION { format.crossref.editor }
- {
- editor #1 "{vv~}{ll}" format.name$
- editor num.names$ duplicate$
- #2 >
- { pop$ " et~al\mbox{.}" * } % jrh: avoid spacing problems
- { #2 <
- 'skip$
- { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
- { " et~al\mbox{.}" * } % jrh: avoid spacing problems
- { " and " * editor #2 "{vv~}{ll}" format.name$ * }
- if$
- }
- if$
- }
- if$
- }
-
- FUNCTION { format.book.crossref }
- {
- volume empty.or.unknown
- { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
- "In "
- }
- { "Volume" volume tie.or.space.connect % gnp - changed to mixed case
- " of " *
- }
- if$
- editor empty.or.unknown
- editor field.or.null author field.or.null =
- or
- { key empty.or.unknown
- { series empty.or.unknown
- { "need editor, key, or series for " cite$ * " to crossref " *
- crossref * warning$
- "" *
- }
- { series emphasize * }
- if$
- }
- { key * }
- if$
- }
- { format.crossref.editor * }
- if$
- " \citeN{" * crossref * "}" *
- }
-
- FUNCTION { format.incoll.inproc.crossref }
- { "See"
- " \citeN{" * crossref * "}" *
- }
-
- FUNCTION { format.lab.names }
- {
- % format.lab.names:
- %
- % determines "short" names for the abbreviated author information.
- % "Long" labels are created in calc.label, using the routine my.full.label
- % to format author and editor fields.
- %
- % There are 4 cases for labels. (n=3 in the example)
- % a) one author Foo
- % b) one to n Foo, Bar and Baz
- % c) use of "and others" Foo, Bar et al.
- % d) more than n Foo et al.
-
- 's :=
- s num.names$ 'numnames :=
- numnames #2 > % change number to number of others allowed before
- % forcing "et al".
- { s #1 "{vv~}{ll}" format.name$ " et~al\mbox{.}" * } % jrh: \mbox{} added
- {
- numnames #1 - 'namesleft :=
- #2 'nameptr :=
- s #1 "{vv~}{ll}" format.name$
- { namesleft #0 > }
- { nameptr numnames =
- { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
- { " et~al\mbox{.}" * } % jrh: avoid spacing problems
- { " and " * s nameptr "{vv~}{ll}" format.name$ * }
- if$
- }
- { ", " * s nameptr "{vv~}{ll}" format.name$ * }
- if$
- nameptr #1 + 'nameptr :=
- namesleft #1 - 'namesleft :=
- }
- while$
- }
- if$
- }
-
- FUNCTION { author.key.label }
- {
- author empty.or.unknown
- { key empty.or.unknown
- { "no key, author in " cite$ * warning$
- cite$ #1 #3 substring$ }
- 'key
- if$
- }
- { author format.lab.names }
- if$
- }
-
- FUNCTION { editor.key.organization.label }
- { % added - gnp. Provide label formatting by organization if editor is null.
- editor empty.or.unknown
- { organization empty.or.unknown
- { key empty.or.unknown
- { "no key, editor or organization in " cite$ * warning$
- cite$ #1 #3 substring$ }
- 'key
- if$
- }
- { organization }
- if$
- }
- { editor format.lab.names }
- if$
- }
-
- FUNCTION { author.editor.key.label }
- {
- author empty.or.unknown
- { editor empty.or.unknown
- { key empty.or.unknown
- { "no key, author, or editor in " cite$ * warning$
- cite$ #1 #3 substring$ }
- 'key
- if$
- }
- { editor format.lab.names }
- if$
- }
- { author format.lab.names }
- if$
- }
-
- FUNCTION { author.editor.key.organization.label }
- { % added - gnp. Provide label formatting by organization if author is null.
- author empty.or.unknown
- { editor empty.or.unknown
- { organization empty.or.unknown
- { key empty.or.unknown
- { "no key, author, editor or organization in " cite$ * warning$
- cite$ #1 #3 substring$ }
- 'key
- if$
- }
- { organization }
- if$
- }
- { editor format.lab.names }
- if$
- }
- { author format.lab.names }
- if$
- }
-
- % Calculate label and leave it on stack
- FUNCTION { calc.basic.label }
- {
- type$ "book" =
- type$ "inbook" =
- or
- type$ "article" =
- or
- 'author.editor.key.label
- { type$ "proceedings" =
- type$ "periodical" =
- or
- 'editor.key.organization.label
- { type$ "manual" =
- 'author.editor.key.organization.label
- 'author.key.label
- if$
- }
- if$
- }
- if$
- duplicate$
- year empty.or.unknown
- { "[n. d.]" }
- { year field.or.null purify$ #-1 #4 substring$}
- if$
- *
- 'basic.label.year :=
- }
-
- FUNCTION { calc.label }
- {
- % Changed - GNP. See also author.editor.organization.sort, editor.organization.sort
- % Form label for BibTeX entry. The classification of which fields are used
- % for which type of entry (book, inbook, etc.) are taken from alpha.bst.
- % The change here from newapa is to also include organization as a
- % citation label if author or editor is missing.
-
- calc.basic.label
-
- author empty.or.unknown % generate the full label citation information.
- {
- editor empty.or.unknown
- {
- organization empty.or.unknown
- {
- key empty.or.unknown
- {
- "no author, editor, organization, or key in " cite$ * warning$
- "??"
- }
- { key }
- if$
- }
- { organization }
- if$
- }
- { editor my.full.label }
- if$
- }
- { author my.full.label }
- if$
-
- % leave label on the stack, to be popped when required.
-
- "}{" * swap$ * "}{" *
- % year field.or.null purify$ #-1 #4 substring$ *
- %
- % save the year for sort processing afterwards (adding a, b, c, etc.)
- %
- year empty.or.unknown
- { "[n. d.]" }
- { year field.or.null purify$ #-1 #4 substring$}
- if$
- 'label.year :=
- }
-
-
- FUNCTION { output.bibitem }
- {
- newline$
- "\bibitem[\protect\citeauthoryear{" write$
- calc.label write$
- sort.year write$
- "}]%" writeln
- " {" write$
- cite$ write$
- "}" writeln
- ""
- before.all 'output.state :=
- }
-
-
- FUNCTION { output.issue.doi.coden.isxn.lccn.url.eprint }
- { % enter and return with stack empty
- %% We switch now from buffered output to output of complete lines, so
- %% that the Issue .. URL data have their own lines, and are less likely
- %% to be line-wrapped by BibTeX's short-sighted algorithm, which wraps
- %% lines longer than 79 characters, backtracking to what it thinks is
- %% a break point in the string. Any such wrapping MUST be undone to
- %% prevent percent-newline from appearing in DOIs and URLs. The
- %% output data are intentionally wrapped in \showxxx{} macros at
- %% beginning of line, and that supply their own punctuation (if they
- %% are not defined to suppress output entirely), to make it easier for
- %% other software to recover them from .bbl files.
- %%
- %% It also makes it possible to later change the macro definitions
- %% to suppress particular output values, or alter their appearance.
- %%
- %% Note that it is possible for theses, technical reports, and
- %% manuals to have ISBNs, and anything that has an ISBN may also
- %% have an ISSN. When there are no values for these keys, there
- %% is no output generated for them here.
-
- "\newblock" writeln
- after.block 'output.state :=
-
- output.issue
- output.isbn
- output.coden % CODEN is functionally like ISSN, so output them sequentially
- output.issn
- output.lccn
- output.doi % DOI is ALWAYS last according to CrossRef DOI documentation
- output.eprint
- output.url % but ACM wants URL last
- }
-
- FUNCTION { output.issue.doi.coden.isxn.lccn.url.eprint.note }
- { % enter with stack empty, return with empty string on stack
- output.issue.doi.coden.isxn.lccn.url.eprint
- note empty.or.unknown
- { }
- {
- "\newblock" writeln
- output.note
- }
- if$
- ""
- }
-
- FUNCTION { output.issue.doi.coden.isxn.lccn.url.eprint.note.check }
- { % enter with stack empty, return with empty string on stack
- output.issue.doi.coden.isxn.lccn.url.eprint
- note empty.or.unknown
- { }
- {
- "\newblock" writeln
- output.note.check
- }
- if$
- ""
- }
-
- FUNCTION { article }
- {
- output.bibitem
-
- author empty.or.unknown
- {
- editor empty.or.unknown
- { "neither author and editor supplied for " cite$ * warning$ }
- { format.editors "editor" output.check }
- if$
- }
- { format.authors "author" output.check }
- if$
-
- author format.no.key output % added
- output.year.check % added
- new.block
- format.articletitle "title" output.check
- new.block
- howpublished empty.or.unknown
- { }
- { "\bibinfo{howpublished}{" howpublished "}" * * output }
- if$
-
- crossref missing$
- { format.journal.volume.number.day.month.year output}
- {
- "cross reference in @Article{...} is unusual" warning$
- format.article.crossref output.nonnull
- }
- if$
-
- format.pages.check.without.articleno output
- format.articleno.numpages output
- fin.block
- output.issue.doi.coden.isxn.lccn.url.eprint.note
- fin.entry
- }
-
- FUNCTION { book }
- {
- output.bibitem
- author empty.or.unknown
- { format.editors "author and editor" output.check }
- { format.authors output.nonnull
- crossref missing$
- { "author and editor" editor either.or.check }
- 'skip$
- if$
- }
- if$
- output.year.check % added
- new.block
- format.btitle "title" output.check
- crossref missing$
- { new.sentence % jtb: start a new sentence for series/volume
- format.bvolume output
- new.block
- format.number.series output
- new.sentence
- publisher "publisher" bibinfo.output.check
- address "address" bibinfo.output.check % jtb: require address
- fin.sentence
- pages empty.or.unknown
- { format.bookpages } % use bookpages when pages empty
- { format.pages.check "pages" tie.or.space.connect }
- if$
- output
- }
- { new.block
- format.book.crossref output.nonnull
- }
- if$
- fin.block
- output.issue.doi.coden.isxn.lccn.url.eprint.note
- fin.entry
- }
-
- FUNCTION { booklet }
- {
- output.bibitem
- format.authors output
- author format.key output % added
- output.year.check % added
- new.block
- format.title "title" output.check
- new.block
- howpublished empty.or.unknown
- { }
- { "\bibinfo{howpublished}{" howpublished "}" * * output }
- if$
- address output
- fin.block
- output.issue.doi.coden.isxn.lccn.url.eprint.note
- fin.entry
- }
-
- FUNCTION { inbook }
- {
- output.bibitem
- author empty.or.unknown
- { format.editors
- "author and editor" output.check
- }
- { format.authors output.nonnull
- crossref missing$
- { "author and editor" editor either.or.check }
- 'skip$
- if$
- }
- if$
- output.year.check % added
- new.block
- format.btitle "title" output.check
- crossref missing$
- { new.sentence % jtb: start a new sentence for series/volume
- format.bvolume output
- new.block
- format.number.series output
- new.sentence
- publisher "publisher" bibinfo.output.check
- address "address" bibinfo.output.check % jtb: require address
- format.bookpages output
- format.chapter.pages
- "chapter and pages" output.check % jtb: moved from before publisher
- }
- {
- format.bookpages output
- format.chapter.pages "chapter and pages" output.check
- new.block
- format.book.crossref output.nonnull
- }
- if$
- fin.block
- output.issue.doi.coden.isxn.lccn.url.eprint.note
- fin.entry
- }
-
- FUNCTION { incollection }
- {
- output.bibitem
- format.authors "author" output.check
- author format.key output % added
- output.year.check % added
- new.block
- format.articletitle "title" output.check
- new.block
- crossref missing$
- { format.in.ed.booktitle "booktitle" output.check
- new.sentence % jtb: start a new sentence for series/volume
- format.bvolume output
- format.number.series output
- new.sentence
- publisher "publisher" bibinfo.output.check
- address "address" bibinfo.output.check % jtb: require address
- format.bookpages output
- format.chapter.pages output % gnp - was special.output.nonnull
- % left out comma before page numbers
- % jtb: moved from before publisher
- }
- {
- format.incoll.inproc.crossref output.nonnull
- format.chapter.pages output
- }
- if$
- fin.block
- output.issue.doi.coden.isxn.lccn.url.eprint.note
- fin.entry
- }
-
- FUNCTION { inproceedings }
- {
- output.bibitem
- format.authors "author" output.check
- author format.key output % added
- output.year.check % added
- new.block
- format.articletitle "title" output.check
- howpublished empty.or.unknown
- { }
- { "\bibinfo{howpublished}{" howpublished "}" * * output.dot.space }
- if$
- crossref missing$
- {
- journal missing$ % jtb: proceedings appearing in journals
- { format.in.emphasize.booktitle format.city "booktitle" output.check.dot.space
- format.series output.removenospace
- format.editors.fml output % BV 2011/09/27 Moved dot to comma
- format.bvolume.noseries output
- new.sentence
- organization output
- publisher "publisher" bibinfo.output.check % jtb: require publisher (?)
- address "address" bibinfo.output.check % jtb: require address
- format.bookpages output
- }
- {
- format.in.booktitle format.city "booktitle" output.check
- format.editors.fml output
- new.sentence
- format.journal.volume.number.day.month.year output
- }
- if$
- format.articleno output
- format.pages.check.without.articleno output
- }
- {
- format.incoll.inproc.crossref output.nonnull
- format.articleno output
- format.pages.check.without.articleno output
- }
- if$
- format.articleno.numpages output
- fin.block
- output.issue.doi.coden.isxn.lccn.url.eprint.note
- fin.entry
- }
-
- FUNCTION { conference } { inproceedings }
-
- FUNCTION { manual }
- {
- output.bibitem
- author empty.or.unknown
- { editor empty.or.unknown
- { organization "organization" output.check
- organization format.key output } % if all else fails, use key
- { format.editors "author and editor" output.check }
- if$
- }
- { format.authors output.nonnull }
- if$
- output.year.check % added
- new.block
- format.btitle "title" output.check
- organization address new.block.checkb
- % jtb: back to normal style: organization, address
- organization "organization" output.check
- address output
- fin.block
- output.issue.doi.coden.isxn.lccn.url.eprint.note
- fin.entry
- }
-
- FUNCTION { mastersthesis }
- {
- output.bibitem
- format.authors "author" output.check
- author format.key output % added
- output.year.check % added
- new.block
- format.title emphasize "title" output.check % NB: ACM style requires emphasized thesis title
- new.block
- "\bibinfo{thesistype}{Master's\ thesis}" format.thesis.type output
- new.sentence
- school "school" bibinfo.output.check
- address empty.or.unknown
- { }
- { "\bibinfo{address}{" address * "}" * output }
- if$
- new.block
- format.advisor output
- fin.block
- output.issue.doi.coden.isxn.lccn.url.eprint.note
- fin.entry
- }
-
- FUNCTION { misc }
- {
- output.bibitem
- format.authors "author" output.check
- author format.key output % added
- output.year.check % added
- title howpublished new.block.checkb
- format.title output
- new.block
- howpublished empty.or.unknown
- { }
- { "\bibinfo{howpublished}{" howpublished "}" * * output }
- if$
- "" output.nonnull.dot.space
- calc.format.page.count output
- fin.block
- output.issue.doi.coden.isxn.lccn.url.eprint.note
- fin.entry
- }
-
- FUNCTION { online } { misc }
-
- FUNCTION { game } { misc }
-
-
- FUNCTION { phdthesis }
- {
- output.bibitem
- format.authors "author" output.check
- author format.key output % added
- output.year.check % added
- new.block
- format.title emphasize "title" output.check % NB: ACM style requires emphasized thesis title
- new.block
- "\bibinfo{thesistype}{Ph.D. Dissertation}" format.thesis.type output
- new.sentence
- school "school" bibinfo.output.check
- address empty.or.unknown
- { }
- { "\bibinfo{address}{" address * "}" * output }
- if$
- new.block
- format.advisor output
- fin.block
- output.issue.doi.coden.isxn.lccn.url.eprint.note
- fin.entry
- }
-
- FUNCTION {format.date}
- { year empty.or.unknown
- { month empty.or.unknown
- {
- "" % output empty date if year/month both empty
- day empty.or.unknown
- { }
- { "there's a day but no month or year in " cite$ * warning$ }
- if$
- }
- { "there's a month but no year in " cite$ * warning$
- month
- day empty.or.unknown
- { }
- { " " * day * }
- if$
- }
- if$
- }
- { month empty.or.unknown
- {
- year % output only year if month empty
- day empty.or.unknown
- { }
- { "there's a day and year but no month in " cite$ * warning$ }
- if$
- }
- {
- month " " *
- day empty.or.unknown
- { }
- { day * ", " * }
- if$
- year *
- }
- if$
- }
- if$
- }
-
- FUNCTION {new.block.checka}
- {
- empty.or.unknown
- 'skip$
- 'new.block
- if$
- }
-
- FUNCTION { periodical }
- {
- output.bibitem
- editor empty.or.unknown
- { organization output }
- { format.editors output.nonnull }
- if$
- new.block
- output.year.check
- new.sentence
- format.articletitle "title" output.check
- format.journal.volume.number.day.month.year output
- calc.format.page.count output
- fin.entry
- }
-
- FUNCTION { proceedings }
- {
- output.bibitem
- editor empty.or.unknown
- { organization output
- organization format.key output } % gnp - changed from author format.key
- { format.editors output.nonnull }
- if$
- % author format.key output % gnp - removed (should be either
- % editor or organization
- output.year.check % added (newapa)
- new.block
- format.btitle format.city "title" output.check % jtb: added city
- new.sentence
- format.bvolume output
- format.number.series output
- new.sentence
- organization output
- % jtb: normal order: publisher, address
- publisher empty.or.unknown
- { }
- { "\bibinfo{publisher}{" publisher * "}" * output }
- if$
- address empty.or.unknown
- { }
- { "\bibinfo{address}{" address * "}" * output }
- if$
- fin.block
- output.issue.doi.coden.isxn.lccn.url.eprint.note
- fin.entry
- }
-
- FUNCTION { collection } { proceedings }
-
- FUNCTION { techreport }
- {
- output.bibitem
- format.authors "author" output.check
- author format.key output % added
- output.year.check % added
- new.block
- format.btitle "title" output.check
- new.block
- % format.tr.number output % jtb: moved month ...
- format.tr.number output new.sentence % Gerry - need dot 2011/09/28
- institution "institution" bibinfo.output.check
- address empty.or.unknown
- { }
- { "\bibinfo{address}{" address "}" * * output }
- if$
- new.sentence
- format.named.pages output
- % ACM omits year at end in transactions style
- % format.day.month.year output.nonnull.dot.space % jtb: ... to here (no parens)
- fin.block
- output.issue.doi.coden.isxn.lccn.url.eprint.note
- fin.entry
- }
-
- FUNCTION { unpublished }
- {
- output.bibitem
- format.authors
- "author" output.check
- author format.key output % added
- output.year.check % added
- new.block
- format.title "title" output.check
- fin.sentence
- output.day.month.year % UTAH
- calc.format.page.count output
- fin.block
- output.issue.doi.coden.isxn.lccn.url.eprint.note.check
- fin.entry
- }
-
- FUNCTION { default.type } { misc }
-
- %%% ACM journal-style month definitions: full name if 1--5 letters, else
- %%% abbreviation of 3 or 4 characters and a dot
-
- MACRO {jan} {"Jan."}
-
- MACRO {feb} {"Feb."}
-
- MACRO {mar} {"March"}
-
- MACRO {apr} {"April"}
-
- MACRO {may} {"May"}
-
- MACRO {jun} {"June"}
-
- MACRO {jul} {"July"}
-
- MACRO {aug} {"Aug."}
-
- MACRO {sep} {"Sept."}
-
- MACRO {oct} {"Oct."}
-
- MACRO {nov} {"Nov."}
-
- MACRO {dec} {"Dec."}
-
-
-
- READ
-
- FUNCTION { sortify }
- {
- purify$
- "l" change.case$
- }
-
- FUNCTION { chop.word }
- {
- 's :=
- 'len :=
- s #1 len substring$ =
- { s len #1 + global.max$ substring$ }
- 's
- if$
- }
-
- FUNCTION { sort.format.names }
- {
- 's :=
- #1 'nameptr :=
- ""
- s num.names$ 'numnames :=
- numnames 'namesleft :=
- { namesleft #0 > }
- { nameptr #1 >
- { " " * }
- 'skip$
- if$
- s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't :=
- nameptr numnames = t "others" = and
- { " et~al" * }
- { t sortify * }
- if$
- nameptr #1 + 'nameptr :=
- namesleft #1 - 'namesleft :=
- }
- while$
- }
-
- FUNCTION { sort.format.title }
- {
- 't :=
- "A " #2
- "An " #3
- "The " #4 t chop.word
- chop.word
- chop.word
- sortify
- #1 global.max$ substring$
- }
-
- FUNCTION { author.sort }
- {
- author empty.or.unknown
- { key empty.or.unknown
- { "to sort, need author or key in " cite$ * warning$
- "" }
- { key sortify }
- if$
- }
- { author sort.format.names }
- if$
- }
-
- FUNCTION { author.editor.sort }
- {
- author empty.or.unknown
- {
- editor empty.or.unknown
- {
- key empty.or.unknown
- { "to sort, need author, editor, or key in " cite$ * warning$
- ""
- }
- { key sortify }
- if$
- }
- { editor sort.format.names }
- if$
- }
- { author sort.format.names }
- if$
- }
-
- FUNCTION { editor.organization.sort }
- {
- % added - GNP. Stack editor or organization for sorting (from alpha.bst).
- % Unlike alpha.bst, we need entire names, not abbreviations
-
- editor empty.or.unknown
- { organization empty.or.unknown
- { key empty.or.unknown
- { "to sort, need editor, organization, or key in " cite$ * warning$
- ""
- }
- { key sortify }
- if$
- }
- { organization sortify }
- if$
- }
- { editor sort.format.names }
- if$
- }
-
- FUNCTION { author.editor.organization.sort }
- {
- % added - GNP. Stack author or organization for sorting (from alpha.bst).
- % Unlike alpha.bst, we need entire names, not abbreviations
-
- author empty.or.unknown
- {
- editor empty.or.unknown
- { organization empty.or.unknown
- { key empty.or.unknown
- { "to sort, need author, editor, or key in " cite$ * warning$
- ""
- }
- { key sortify }
- if$
- }
- { organization sortify }
- if$
- }
- { editor sort.format.names }
- if$
- }
- { author sort.format.names }
- if$
- }
-
- FUNCTION { presort }
- {
- % Presort creates the bibentry's label via a call to calc.label, and then
- % sorts the entries based on entry type. Chicago.bst adds support for
- % including organizations as the sort key; the following is stolen from
- % alpha.bst.
-
- calc.label
- basic.label.year
- swap$
- " "
- swap$
- * *
- " "
- *
- sortify
- year field.or.null purify$ #-1 #4 substring$ * % add year
- " "
- *
- type$ "book" =
- type$ "inbook" =
- or
- type$ "article" =
- or
- 'author.editor.sort
- { type$ "proceedings" =
- type$ "periodical" =
- or
- 'editor.organization.sort
- { type$ "manual" =
- 'author.editor.organization.sort
- 'author.sort
- if$
- }
- if$
- }
- if$
- #1 entry.max$ substring$ % added for newapa
- 'sort.label := % added for newapa
- sort.label % added for newapa
- *
- " "
- *
- title field.or.null
- sort.format.title
- *
- #1 entry.max$ substring$
- 'sort.key$ :=
- }
-
-
-
- ITERATE { presort }
-
- SORT % by label, year, author/editor, title
-
- % From plainnat.bst
- STRINGS { longest.label }
-
- INTEGERS { longest.label.width number.label }
-
- FUNCTION {initialize.longest.label}
- { "" 'longest.label :=
- #0 int.to.chr$ 'last.label :=
- "" 'next.extra :=
- #0 'longest.label.width :=
- #0 'last.extra.num :=
- #0 'number.label :=
- }
-
-
-
- FUNCTION { initialize.extra.label.stuff }
- { #0 int.to.chr$ 'last.label :=
- "" 'next.extra :=
- #0 'last.extra.num :=
- }
-
- FUNCTION { forward.pass }
- {
- % Pass through all entries, comparing current entry to last one.
- % Need to concatenate year to the stack (done by calc.label) to determine
- % if two entries are the same (see presort)
-
- last.label
- calc.basic.label year field.or.null purify$ #-1 #4 substring$ * % add year
- #1 entry.max$ substring$ = % are they equal?
- { last.extra.num #1 + 'last.extra.num :=
- last.extra.num int.to.chr$ 'extra.label :=
- }
- { "a" chr.to.int$ 'last.extra.num :=
- "" 'extra.label :=
- calc.basic.label year field.or.null purify$ #-1 #4 substring$ * % add year
- #1 entry.max$ substring$ 'last.label := % assign to last.label
- }
- if$
- number.label #1 + 'number.label :=
- }
-
- FUNCTION { reverse.pass }
- {
- next.extra "b" =
- { "a" 'extra.label := }
- 'skip$
- if$
- label.year extra.label * 'sort.year :=
- extra.label 'next.extra :=
- }
-
- EXECUTE {initialize.extra.label.stuff}
- EXECUTE {initialize.longest.label}
-
-
- ITERATE {forward.pass}
-
- REVERSE {reverse.pass}
-
- FUNCTION { bib.sort.order }
- {
- sort.label
- " "
- *
- year field.or.null sortify
- *
- " "
- *
- title field.or.null
- sort.format.title
- *
- #1 entry.max$ substring$
- 'sort.key$ :=
- }
-
- ITERATE { bib.sort.order }
-
- SORT % by sort.label, year, title --- giving final bib. order.
-
- FUNCTION { begin.bib }
- {
- %% Set to #0 show 13-digit ISBN in preference to 10-digit ISBN.
- %% Set to #1 to show both 10-digit and 13-digit ISBNs.
- #1 'show-isbn-10-and-13 :=
-
- "%%% -*-BibTeX-*-" writeln
- "%%% Do NOT edit. File created by BibTeX with style" writeln
- "%%% ACM-Reference-Format-Journals [18-Jan-2012]." writeln
- "" writeln
-
- preamble$ empty.or.unknown
- 'skip$
- { preamble$ writeln }
- if$
- "\begin{thebibliography}{" number.label int.to.str$ * "}" * writeln
- "" writeln
- "%%% ====================================================================" writeln
- "%%% NOTE TO THE USER: you can override these defaults by providing" writeln
- "%%% customized versions of any of these macros before the \bibliography" writeln
- "%%% command. Each of them MUST provide its own final punctuation," writeln
- "%%% except for \shownote{}, \showDOI{}, and \showURL{}. The latter two" writeln
- "%%% do not use final punctuation, in order to avoid confusing it with" writeln
- "%%% the Web address." writeln
- "%%%" writeln
- "%%% To suppress output of a particular field, define its macro to expand" writeln
- "%%% to an empty string, or better, \unskip, like this:" writeln
- "%%%" writeln
- "%%% \newcommand{\showDOI}[1]{\unskip} % LaTeX syntax" writeln
- "%%%" writeln
- "%%% \def \showDOI #1{\unskip} % plain TeX syntax" writeln
- "%%%" writeln
- "%%% ====================================================================" writeln
- "" writeln
-
- %% ACM publications do not use CODEN, ISSN, and LCCN data, so their default
- %% macro wrappers expand to \unskip, discarding their values and unwanted
- %% space.
- %%
- %% For other publications, prior definitions like these may be useful:
- %%
- %% Plain TeX:
- %% \def \showCODEN #1{CODEN #1.}
- %% \def \showISSN #1{ISSN #1.}
- %% \def \showLCCN #1{LCCN #1.}
- %%
- %% LaTeX:
- %% \newcommand{\showCODEN}[1]{CODEN #1.}
- %% \newcommand{\showISSN}[1]#1{ISSN #1.}
- %% \newcommand{\showLCCN}[1]{LCCN #1.}
-
- "\ifx \showCODEN \undefined \def \showCODEN #1{\unskip} \fi" writeln
- "\ifx \showDOI \undefined \def \showDOI #1{#1}\fi" writeln
- % ACM styles omit ISBNs, but they can be included by suitable definitions of
- % \showISBNx and \showISBNxiii before the .bbl file is read
- "\ifx \showISBNx \undefined \def \showISBNx #1{\unskip} \fi" writeln
- "\ifx \showISBNxiii \undefined \def \showISBNxiii #1{\unskip} \fi" writeln
- "\ifx \showISSN \undefined \def \showISSN #1{\unskip} \fi" writeln
- "\ifx \showLCCN \undefined \def \showLCCN #1{\unskip} \fi" writeln
- "\ifx \shownote \undefined \def \shownote #1{#1} \fi" writeln % NB: final period supplied by add.period$ above
- "\ifx \showarticletitle \undefined \def \showarticletitle #1{#1} \fi" writeln
- "\ifx \showURL \undefined \def \showURL {\relax} \fi" writeln
- "% The following commands are used for tagged output and should be " writeln
- "% invisible to TeX" writeln
- "\providecommand\bibfield[2]{#2}" writeln
- "\providecommand\bibinfo[2]{#2}" writeln
- "\providecommand\natexlab[1]{#1}" writeln
- "\providecommand\showeprint[2][]{arXiv:#2}" writeln
- }
-
- EXECUTE {begin.bib}
-
- EXECUTE {init.state.consts}
-
- ITERATE {call.type$}
-
- FUNCTION { end.bib }
- {
- newline$
- "\end{thebibliography}"
- writeln
- }
-
- EXECUTE {end.bib}
|