templates/acl/acl_natbib.bst
templates/acl/acl_natbib.bstBrowse 56 files
12,390 tokens
45,186 bytes
Token encoding: o200k_base
Snapshot 24fd22b
← Back to SKILL.md
1%%% Modification of BibTeX style file acl_natbib_nourl.bst2%%% ... by urlbst, version 0.9.1 (marked with "% urlbst")3%%% See <https://purl.org/nxg/dist/urlbst> and repository <https://heptapod.host/nxg/urlbst>4%%% Modifications Copyright 2002–23, Norman Gray,5%%% and distributed under the terms of the LPPL; see README for discussion.6%%%7%%% Added webpage entry type, and url and lastchecked fields.8%%% Added eprint support.9%%% Added DOI support.10%%% Added PUBMED support.11%%% Added hyperref support.12%%% Original headers follow...13 14%%15%% This is file `acl_natbib_basic.bst',16%% generated with the docstrip utility.17%%18%% The original source files were:19%%20%% merlin.mbs (with options: `ay,nat,pres,ed-au,keyxyr,blkyear,dt-beg,yr-per,note-yr,num-xser,pre-edn,xedn,nfss')21%% ----------------------------------------22%% *** Intended for ACL conferences ***23%% 24%% Copyright 1994-2011 Patrick W Daly25 % ===============================================================26 % IMPORTANT NOTICE:27 % This bibliographic style (bst) file has been generated from one or28 % more master bibliographic style (mbs) files, listed above.29 %30 % This generated file can be redistributed and/or modified under the terms31 % of the LaTeX Project Public License Distributed from CTAN32 % archives in directory macros/latex/base/lppl.txt; either33 % version 1 of the License, or any later version.34 % ===============================================================35 % Name and version information of the main mbs file:36 % \ProvidesFile{merlin.mbs}[2011/11/18 4.33 (PWD, AO, DPC)]37 % For use with BibTeX version 0.99a or later38 %-------------------------------------------------------------------39 % This bibliography style file is intended for texts in ENGLISH40 % This is an author-year citation style bibliography. As such, it is41 % non-standard LaTeX, and requires a special package file to function properly.42 % Such a package is natbib.sty by Patrick W. Daly43 % The form of the \bibitem entries is44 % \bibitem[Jones et al.(1990)]{key}...45 % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...46 % The essential feature is that the label (the part in brackets) consists47 % of the author names, as they should appear in the citation, with the year48 % in parentheses following. There must be no space before the opening49 % parenthesis!50 % With natbib v5.3, a full list of authors may also follow the year.51 % In natbib.sty, it is possible to define the type of enclosures that is52 % really wanted (brackets or parentheses), but in either case, there must53 % be parentheses in the label.54 % The \cite command functions as follows:55 % \citet{key} ==>> Jones et al. (1990)56 % \citet*{key} ==>> Jones, Baker, and Smith (1990)57 % \citep{key} ==>> (Jones et al., 1990)58 % \citep*{key} ==>> (Jones, Baker, and Smith, 1990)59 % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)60 % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990)61 % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., 1990, p. 32)62 % \citeauthor{key} ==>> Jones et al.63 % \citeauthor*{key} ==>> Jones, Baker, and Smith64 % \citeyear{key} ==>> 199065 %---------------------------------------------------------------------66 67%% 2025 modified to truncate author lists of more than 20 authors68 69ENTRY70 { address71 archivePrefix72 author73 booktitle74 chapter75 edition76 editor77 eid78 eprint79 eprinttype % = archivePrefix80 howpublished81 institution82 journal83 key84 month85 note86 number87 organization88 pages89 publisher90 school91 series92 title93 type94 volume95 year96 doi % urlbst97 pubmed % urlbst98 url % urlbst99 lastchecked % urlbst100 }101 {}102 { label extra.label sort.label short.list }103INTEGERS { output.state before.all mid.sentence after.sentence after.block }104% urlbst...105% urlbst constants and state variables106STRINGS { urlintro107 eprinturl eprintprefix doiprefix doiurl pubmedprefix pubmedurl108 citedstring onlinestring linktextstring109 openinlinelink closeinlinelink }110INTEGERS { hrefform doiform inlinelinks makeinlinelink111 addeprints adddoi addpubmed }112FUNCTION {init.urlbst.variables}113{114 % The following constants may be adjusted by hand, if desired115 116 % The first set allow you to enable or disable certain functionality.117 #1 'addeprints := % 0=no eprints; 1=include eprints118 #2 'hrefform := % 0=no crossrefs; 1=hypertex hrefs; 2=hyperref hrefs119 #1 'inlinelinks := % 0=URLs explicit; 1=URLs attached to titles120 #1 'adddoi := % 0=no DOI resolver; 1=include it121 #1 'addpubmed := % 0=no PUBMED resolver; 1=include it122 #0 'doiform := % 0=with href; 1=with \doi{}123 124 % String constants, which you _might_ want to tweak.125 "online" 'onlinestring := % label that a resource is online126 "[link]" 'linktextstring := % anonymous link text127 "http://www.ncbi.nlm.nih.gov/pubmed/" 'pubmedurl := % prefix to make URL from PUBMED128 "https://doi.org/" 'doiurl := % prefix to make URL from DOI129 "doi:" 'doiprefix := % printed text to introduce DOI130 "https://arxiv.org/abs/" 'eprinturl := % prefix to make URL from eprint ref131 "cited " 'citedstring := % label in "lastchecked" remark132 "arXiv:" 'eprintprefix := % text prefix printed before eprint ref133 "PMID:" 'pubmedprefix := % text prefix printed before PUBMED ref134 "URL: " 'urlintro := % text prefix before URL135 136 % The following are internal state variables, not configuration constants,137 % so they shouldn't be fiddled with.138 #0 'makeinlinelink := % state variable managed by possibly.setup.inlinelink139 "" 'openinlinelink := % ditto140 "" 'closeinlinelink := % ditto141}142INTEGERS {143 bracket.state144 outside.brackets145 open.brackets146 within.brackets147 close.brackets148}149% ...urlbst to here150FUNCTION {init.state.consts}151{ #0 'outside.brackets := % urlbst...152 #1 'open.brackets :=153 #2 'within.brackets :=154 #3 'close.brackets := % ...urlbst to here155 156 #0 'before.all :=157 #1 'mid.sentence :=158 #2 'after.sentence :=159 #3 'after.block :=160}161STRINGS { s t}162% urlbst163FUNCTION {output.nonnull.original}164{ 's :=165 output.state mid.sentence =166 { ", " * write$ }167 { output.state after.block =168 { add.period$ write$169 newline$170 "\newblock " write$171 }172 { output.state before.all =173 'write$174 { add.period$ " " * write$ }175 if$176 }177 if$178 mid.sentence 'output.state :=179 }180 if$181 s182}183 184% urlbst...185% Minimal DOI parsing.186% Given a DOI on the stack, check whether it starts with 'doiurl' or not.187% In either case, leave on the stack first a DOI with, and then a DOI without, the URL prefix.188FUNCTION {parse.doi}189{190 #1 doiurl text.length$ substring$191 doiurl =192 { doi193 doi doiurl text.length$ #1 + #999 substring$ }194 { doiurl doi *195 doi }196 if$197}198% The following three functions are for handling inlinelink. They wrap199% a block of text which is potentially output with write$ by multiple200% other functions, so we don't know the content a priori.201% They communicate between each other using the variables makeinlinelink202% (which is true if a link should be made), and closeinlinelink (which holds203% the string which should close any current link. They can be called204% at any time, but start.inlinelink will be a no-op unless something has205% previously set makeinlinelink true, and the two ...end.inlinelink functions206% will only do their stuff if start.inlinelink has previously set207% closeinlinelink to be non-empty.208% (thanks to 'ijvm' for suggested code here)209FUNCTION {uand}210{ 'skip$ { pop$ #0 } if$ } % 'and' (which isn't defined at this point in the file)211FUNCTION {possibly.setup.inlinelink}212{ makeinlinelink hrefform #0 > uand213 { doi empty$ adddoi uand214 { pubmed empty$ addpubmed uand215 { eprint empty$ addeprints uand216 { url empty$217 { "" }218 { url }219 if$ }220 { eprinturl eprint * }221 if$ }222 { pubmedurl pubmed * }223 if$ }224% { doiurl doi * }225 { doi empty$226 { "XXX" }227 { doi parse.doi pop$ }228 if$229 }230 if$231 % an appropriately-formatted URL is now on the stack232 hrefform #1 = % hypertex233 { "\special {html:<a href=" quote$ * swap$ * quote$ * "> }{" * 'openinlinelink :=234 "\special {html:</a>}" 'closeinlinelink := }235 { "\href {" swap$ * "} {" * 'openinlinelink := % hrefform=#2 -- hyperref236 % the space between "} {" matters: a URL of just the right length can cause "\% newline em"237 "}" 'closeinlinelink := }238 if$239 #0 'makeinlinelink :=240 }241 'skip$242 if$ % makeinlinelink243}244FUNCTION {add.inlinelink}245{ openinlinelink empty$246 'skip$247 { openinlinelink swap$ * closeinlinelink *248 "" 'openinlinelink :=249 }250 if$251}252FUNCTION {output.nonnull}253{ % Save the thing we've been asked to output254 's :=255 % If the bracket-state is close.brackets, then add a close-bracket to256 % what is currently at the top of the stack, and set bracket.state257 % to outside.brackets258 bracket.state close.brackets =259 { "]" *260 outside.brackets 'bracket.state :=261 }262 'skip$263 if$264 bracket.state outside.brackets =265 { % We're outside all brackets -- this is the normal situation.266 % Write out what's currently at the top of the stack, using the267 % original output.nonnull function.268 s269 add.inlinelink270 output.nonnull.original % invoke the original output.nonnull271 }272 { % Still in brackets. Add open-bracket or (continuation) comma, add the273 % new text (in s) to the top of the stack, and move to the close-brackets274 % state, ready for next time (unless inbrackets resets it). If we come275 % into this branch, then output.state is carefully undisturbed.276 bracket.state open.brackets =277 { " [" * }278 { ", " * } % bracket.state will be within.brackets279 if$280 s *281 close.brackets 'bracket.state :=282 }283 if$284}285 286% Call this function just before adding something which should be presented in287% brackets. bracket.state is handled specially within output.nonnull.288FUNCTION {inbrackets}289{ bracket.state close.brackets =290 { within.brackets 'bracket.state := } % reset the state: not open nor closed291 { open.brackets 'bracket.state := }292 if$293}294 295FUNCTION {format.lastchecked}296{ lastchecked empty$297 { "" }298 { inbrackets citedstring lastchecked * }299 if$300}301% ...urlbst to here302FUNCTION {output}303{ duplicate$ empty$304 'pop$305 'output.nonnull306 if$307}308FUNCTION {output.check}309{ 't :=310 duplicate$ empty$311 { pop$ "empty " t * " in " * cite$ * warning$ }312 'output.nonnull313 if$314}315FUNCTION {fin.entry.original} % urlbst (renamed from fin.entry, so it can be wrapped below)316{ add.period$317 write$318 newline$319}320 321FUNCTION {new.block}322{ output.state before.all =323 'skip$324 { after.block 'output.state := }325 if$326}327FUNCTION {new.sentence}328{ output.state after.block =329 'skip$330 { output.state before.all =331 'skip$332 { after.sentence 'output.state := }333 if$334 }335 if$336}337FUNCTION {add.blank}338{ " " * before.all 'output.state :=339}340 341FUNCTION {date.block}342{343 new.block344}345 346FUNCTION {not}347{ { #0 }348 { #1 }349 if$350}351FUNCTION {and}352{ 'skip$353 { pop$ #0 }354 if$355}356FUNCTION {or}357{ { pop$ #1 }358 'skip$359 if$360}361FUNCTION {new.block.checkb}362{ empty$363 swap$ empty$364 and365 'skip$366 'new.block367 if$368}369FUNCTION {field.or.null}370{ duplicate$ empty$371 { pop$ "" }372 'skip$373 if$374}375FUNCTION {emphasize}376{ duplicate$ empty$377 { pop$ "" }378 { "\emph{" swap$ * "}" * }379 if$380}381FUNCTION {tie.or.space.prefix} % puts ~ before the preceding part if it is of length <3382{ duplicate$ text.length$ #3 <383 { "~" }384 { " " }385 if$386 swap$387}388 389FUNCTION {capitalize}390{ "u" change.case$ "t" change.case$ }391 392FUNCTION {space.word}393{ " " swap$ * " " * }394 % Here are the language-specific definitions for explicit words.395 % Each function has a name bbl.xxx where xxx is the English word.396 % The language selected here is ENGLISH397FUNCTION {bbl.and}398{ "and"}399 400FUNCTION {bbl.etal}401{ "et~al." }402 403FUNCTION {bbl.editors}404{ "editors" }405 406FUNCTION {bbl.editor}407{ "editor" }408 409FUNCTION {bbl.edby}410{ "edited by" }411 412FUNCTION {bbl.edition}413{ "edition" }414 415FUNCTION {bbl.volume}416{ "volume" }417 418FUNCTION {bbl.of}419{ "of" }420 421FUNCTION {bbl.number}422{ "number" }423 424FUNCTION {bbl.nr}425{ "no." }426 427FUNCTION {bbl.in}428{ "in" }429 430FUNCTION {bbl.pages}431{ "pages" }432 433FUNCTION {bbl.page}434{ "page" }435 436FUNCTION {bbl.chapter}437{ "chapter" }438 439FUNCTION {bbl.techrep}440{ "Technical Report" }441 442FUNCTION {bbl.mthesis}443{ "Master's thesis" }444 445FUNCTION {bbl.phdthesis}446{ "Ph.D. thesis" }447 448MACRO {jan} {"January"}449 450MACRO {feb} {"February"}451 452MACRO {mar} {"March"}453 454MACRO {apr} {"April"}455 456MACRO {may} {"May"}457 458MACRO {jun} {"June"}459 460MACRO {jul} {"July"}461 462MACRO {aug} {"August"}463 464MACRO {sep} {"September"}465 466MACRO {oct} {"October"}467 468MACRO {nov} {"November"}469 470MACRO {dec} {"December"}471 472MACRO {acmcs} {"ACM Computing Surveys"}473 474MACRO {acta} {"Acta Informatica"}475 476MACRO {cacm} {"Communications of the ACM"}477 478MACRO {ibmjrd} {"IBM Journal of Research and Development"}479 480MACRO {ibmsj} {"IBM Systems Journal"}481 482MACRO {ieeese} {"IEEE Transactions on Software Engineering"}483 484MACRO {ieeetc} {"IEEE Transactions on Computers"}485 486MACRO {ieeetcad}487 {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}488 489MACRO {ipl} {"Information Processing Letters"}490 491MACRO {jacm} {"Journal of the ACM"}492 493MACRO {jcss} {"Journal of Computer and System Sciences"}494 495MACRO {scp} {"Science of Computer Programming"}496 497MACRO {sicomp} {"SIAM Journal on Computing"}498 499MACRO {tocs} {"ACM Transactions on Computer Systems"}500 501MACRO {tods} {"ACM Transactions on Database Systems"}502 503MACRO {tog} {"ACM Transactions on Graphics"}504 505MACRO {toms} {"ACM Transactions on Mathematical Software"}506 507MACRO {toois} {"ACM Transactions on Office Information Systems"}508 509MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}510 511MACRO {tcs} {"Theoretical Computer Science"}512 513% bibinfo.check avoids acting on missing fields while bibinfo.warn will514% issue a warning message if a missing field is detected. Prior to calling515% the bibinfo functions, the user should push the field value and then its516% name string, in that order.517FUNCTION {bibinfo.check}518{ swap$519 duplicate$ missing$520 {521 pop$ pop$522 ""523 }524 { duplicate$ empty$525 {526 swap$ pop$527 }528 { swap$529 pop$530 }531 if$532 }533 if$534}535FUNCTION {bibinfo.warn}536{ swap$537 duplicate$ missing$538 {539 swap$ "missing " swap$ * " in " * cite$ * warning$ pop$540 ""541 }542 { duplicate$ empty$543 {544 swap$ "empty " swap$ * " in " * cite$ * warning$545 }546 { swap$547 pop$548 }549 if$550 }551 if$552}553INTEGERS { nameptr namesleft numnames }554 555 556STRINGS { bibinfo}557 558FUNCTION {format.names}559{ 'bibinfo :=560 duplicate$ empty$ 'skip$ {561 's :=562 "" 't :=563 #1 'nameptr :=564 s num.names$ 'numnames :=565 numnames 'namesleft :=566 { namesleft #0 > }567 { s nameptr568 "{ff~}{vv~}{ll}{, jj}" % first name first for all authors569 format.name$570 bibinfo bibinfo.check571 't :=572 nameptr #1 >573 {574 nameptr #19 % truncate after 19 names575 #1 + =576 numnames #20 % if there are more than 20 names577 > and578 { "others" 't :=579 #1 'namesleft := }580 'skip$581 if$ % end truncation of long list of names582 namesleft #1 >583 { ", " * t * }584 {585 s nameptr "{ll}" format.name$ duplicate$ "others" =586 { 't := }587 { pop$ }588 if$589 numnames #2 >590 { "," * }591 'skip$592 if$593 t "others" =594 {595 %% " " * bbl.etal *596 % compute the number of remaining authors597 " and " * numnames nameptr - #1 + int.to.str$ * " others" *598 }599 {600 bbl.and601 space.word * t *602 }603 if$604 }605 if$606 }607 't608 if$609 nameptr #1 + 'nameptr :=610 namesleft #1 - 'namesleft :=611 }612 while$613 } if$614}615FUNCTION {format.names.ed}616{617 format.names618}619FUNCTION {format.key}620{ empty$621 { key field.or.null }622 { "" }623 if$624}625 626FUNCTION {format.authors}627{ author "author" format.names628}629FUNCTION {get.bbl.editor}630{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }631 632FUNCTION {format.editors}633{ editor "editor" format.names duplicate$ empty$ 'skip$634 {635 "," *636 " " *637 get.bbl.editor638 *639 }640 if$641}642FUNCTION {format.note}643{644 note empty$645 { "" }646 { note #1 #1 substring$647 duplicate$ "{" =648 'skip$649 { output.state mid.sentence =650 { "l" }651 { "u" }652 if$653 change.case$654 }655 if$656 note #2 global.max$ substring$ * "note" bibinfo.check657 }658 if$659}660 661FUNCTION {format.title}662{ title663 duplicate$ empty$ 'skip$664 { "t" change.case$ }665 if$666 "title" bibinfo.check667}668FUNCTION {format.full.names}669{'s :=670 "" 't :=671 #1 'nameptr :=672 s num.names$ 'numnames :=673 numnames 'namesleft :=674 { namesleft #0 > }675 { s nameptr676 "{vv~}{ll}" format.name$677 't :=678 nameptr #1 >679 {680 namesleft #1 >681 { ", " * t * }682 {683 s nameptr "{ll}" format.name$ duplicate$ "others" =684 { 't := }685 { pop$ }686 if$687 t "others" =688 {689 " " * bbl.etal *690 }691 {692 numnames #2 >693 { "," * }694 'skip$695 if$696 bbl.and697 space.word * t *698 }699 if$700 }701 if$702 }703 't704 if$705 nameptr #1 + 'nameptr :=706 namesleft #1 - 'namesleft :=707 }708 while$709}710 711FUNCTION {author.editor.key.full}712{ author empty$713 { editor empty$714 { key empty$715 { cite$ #1 #3 substring$ }716 'key717 if$718 }719 { editor format.full.names }720 if$721 }722 { author format.full.names }723 if$724}725 726FUNCTION {author.key.full}727{ author empty$728 { key empty$729 { cite$ #1 #3 substring$ }730 'key731 if$732 }733 { author format.full.names }734 if$735}736 737FUNCTION {editor.key.full}738{ editor empty$739 { key empty$740 { cite$ #1 #3 substring$ }741 'key742 if$743 }744 { editor format.full.names }745 if$746}747 748FUNCTION {make.full.names}749{ type$ "book" =750 type$ "inbook" =751 or752 'author.editor.key.full753 { type$ "proceedings" =754 'editor.key.full755 'author.key.full756 if$757 }758 if$759}760 761FUNCTION {output.bibitem.original} % urlbst (renamed from output.bibitem, so it can be wrapped below)762{ newline$763 "\bibitem[{" write$764 label write$765 ")" make.full.names duplicate$ short.list =766 { pop$ }767 { * }768 if$769 "}]{" * write$770 cite$ write$771 "}" write$772 newline$773 ""774 before.all 'output.state :=775}776 777FUNCTION {n.dashify}778{779 't :=780 ""781 { t empty$ not }782 { t #1 #1 substring$ "-" =783 { t #1 #2 substring$ "--" = not784 { "--" *785 t #2 global.max$ substring$ 't :=786 }787 { { t #1 #1 substring$ "-" = }788 { "-" *789 t #2 global.max$ substring$ 't :=790 }791 while$792 }793 if$794 }795 { t #1 #1 substring$ *796 t #2 global.max$ substring$ 't :=797 }798 if$799 }800 while$801}802 803FUNCTION {word.in}804{ bbl.in capitalize805 " " * }806 807FUNCTION {format.date}808{ year "year" bibinfo.check duplicate$ empty$809 {810 }811 'skip$812 if$813 extra.label *814 before.all 'output.state :=815 after.sentence 'output.state :=816}817FUNCTION {format.btitle}818{ title "title" bibinfo.check819 duplicate$ empty$ 'skip$820 {821 emphasize822 }823 if$824}825FUNCTION {either.or.check}826{ empty$827 'pop$828 { "can't use both " swap$ * " fields in " * cite$ * warning$ }829 if$830}831FUNCTION {format.bvolume}832{ volume empty$833 { "" }834 { bbl.volume volume tie.or.space.prefix835 "volume" bibinfo.check * *836 series "series" bibinfo.check837 duplicate$ empty$ 'pop$838 { swap$ bbl.of space.word * swap$839 emphasize * }840 if$841 "volume and number" number either.or.check842 }843 if$844}845FUNCTION {format.number.series}846{ volume empty$847 { number empty$848 { series field.or.null }849 { series empty$850 { number "number" bibinfo.check }851 { output.state mid.sentence =852 { bbl.number }853 { bbl.number capitalize }854 if$855 number tie.or.space.prefix "number" bibinfo.check * *856 bbl.in space.word *857 series "series" bibinfo.check *858 }859 if$860 }861 if$862 }863 { "" }864 if$865}866 867FUNCTION {format.edition}868{ edition duplicate$ empty$ 'skip$869 {870 output.state mid.sentence =871 { "l" }872 { "t" }873 if$ change.case$874 "edition" bibinfo.check875 " " * bbl.edition *876 }877 if$878}879INTEGERS { multiresult }880FUNCTION {multi.page.check}881{ 't :=882 #0 'multiresult :=883 { multiresult not884 t empty$ not885 and886 }887 { t #1 #1 substring$888 duplicate$ "-" =889 swap$ duplicate$ "," =890 swap$ "+" =891 or or892 { #1 'multiresult := }893 { t #2 global.max$ substring$ 't := }894 if$895 }896 while$897 multiresult898}899FUNCTION {format.pages}900{ pages duplicate$ empty$ 'skip$901 { duplicate$ multi.page.check902 {903 bbl.pages swap$904 n.dashify905 }906 {907 bbl.page swap$908 }909 if$910 tie.or.space.prefix911 "pages" bibinfo.check912 * *913 }914 if$915}916FUNCTION {format.journal.pages}917{ pages duplicate$ empty$ 'pop$918 { swap$ duplicate$ empty$919 { pop$ pop$ format.pages }920 {921 ":" *922 swap$923 n.dashify924 "pages" bibinfo.check925 *926 }927 if$928 }929 if$930}931FUNCTION {format.journal.eid}932{ eid "eid" bibinfo.check933 duplicate$ empty$ 'pop$934 { swap$ duplicate$ empty$ 'skip$935 {936 ":" *937 }938 if$939 swap$ *940 }941 if$942}943FUNCTION {format.vol.num.pages}944{ volume field.or.null945 duplicate$ empty$ 'skip$946 {947 "volume" bibinfo.check948 }949 if$950 number "number" bibinfo.check duplicate$ empty$ 'skip$951 {952 swap$ duplicate$ empty$953 { "there's a number but no volume in " cite$ * warning$ }954 'skip$955 if$956 swap$957 "(" swap$ * ")" *958 }959 if$ *960 eid empty$961 { format.journal.pages }962 { format.journal.eid }963 if$964}965 966FUNCTION {format.chapter}967{ chapter empty$968 'format.pages969 { type empty$970 { bbl.chapter }971 { type "l" change.case$972 "type" bibinfo.check973 }974 if$975 chapter tie.or.space.prefix976 "chapter" bibinfo.check977 * *978 }979 if$980}981 982FUNCTION {format.chapter.pages}983{ chapter empty$984 'format.pages985 { type empty$986 { bbl.chapter }987 { type "l" change.case$988 "type" bibinfo.check989 }990 if$991 chapter tie.or.space.prefix992 "chapter" bibinfo.check993 * *994 pages empty$995 'skip$996 { ", " * format.pages * }997 if$998 }999 if$1000}1001 1002FUNCTION {format.booktitle}1003{1004 booktitle "booktitle" bibinfo.check1005 emphasize1006}1007FUNCTION {format.in.booktitle}1008{ format.booktitle duplicate$ empty$ 'skip$1009 {1010 word.in swap$ *1011 }1012 if$1013}1014FUNCTION {format.in.ed.booktitle}1015{ format.booktitle duplicate$ empty$ 'skip$1016 {1017 editor "editor" format.names.ed duplicate$ empty$ 'pop$1018 {1019 "," *1020 " " *1021 get.bbl.editor1022 ", " *1023 * swap$1024 * }1025 if$1026 word.in swap$ *1027 }1028 if$1029}1030FUNCTION {format.thesis.type}1031{ type duplicate$ empty$1032 'pop$1033 { swap$ pop$1034 "t" change.case$ "type" bibinfo.check1035 }1036 if$1037}1038FUNCTION {format.tr.number}1039{ number "number" bibinfo.check1040 type duplicate$ empty$1041 { pop$ bbl.techrep }1042 'skip$1043 if$1044 "type" bibinfo.check1045 swap$ duplicate$ empty$1046 { pop$ "t" change.case$ }1047 { tie.or.space.prefix * * }1048 if$1049}1050FUNCTION {format.article.crossref}1051{1052 word.in1053 " \cite{" * crossref * "}" *1054}1055FUNCTION {format.book.crossref}1056{ volume duplicate$ empty$1057 { "empty volume in " cite$ * "'s crossref of " * crossref * warning$1058 pop$ word.in1059 }1060 { bbl.volume1061 capitalize1062 swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *1063 }1064 if$1065 " \cite{" * crossref * "}" *1066}1067FUNCTION {format.incoll.inproc.crossref}1068{1069 word.in1070 " \cite{" * crossref * "}" *1071}1072FUNCTION {format.org.or.pub}1073{ 't :=1074 ""1075 address empty$ t empty$ and1076 'skip$1077 {1078 t empty$1079 { address "address" bibinfo.check *1080 }1081 { t *1082 address empty$1083 'skip$1084 { ", " * address "address" bibinfo.check * }1085 if$1086 }1087 if$1088 }1089 if$1090}1091FUNCTION {format.publisher.address}1092{ publisher "publisher" bibinfo.warn format.org.or.pub1093}1094 1095FUNCTION {format.organization.address}1096{ organization "organization" bibinfo.check format.org.or.pub1097}1098 1099FUNCTION {archiveprefix.or.eprinttype} % holder for eprinttype with archiveprefix precedence1100{1101 archiveprefix empty$1102 {1103 eprinttype empty$1104 { "" } % not using 'skip$ to reduce errors like "nothing to pop from stack"1105 { eprinttype }1106 if$1107 }1108 { archiveprefix }1109 if$1110}1111 1112FUNCTION {output.eprint} % this is only used with the @misc record type (common for arXiv and other preprint server bibtex records)1113{1114 eprint empty$1115 {% if eprint field is empty1116 publisher field.or.null "arXiv" = % field.or.null here helps when no publisher field in the record1117 { publisher " preprint" * } % add " preprint" to publisher with the idea that publisher is the name of the preprint server1118 { "" } % if publisher != "arXiv" then empty output1119 if$1120 emphasize % no output function after emphasize because nothing goes after this1121 }1122 {% if eprint field is not empty1123 archiveprefix.or.eprinttype empty$1124 { "" } % not using 'skip$ to reduce errors like "nothing to pop from stack"1125 {% if archiveprefix or eprinttype fields are not empty1126 journal empty$1127 { "Preprint" } % if journal field is empty: output just "Preprint" emphasized like a journal name1128 { journal } % if journal field is not empty, output it (takes precedence)1129 if$1130 emphasize output % emphasize what we formed before, setting output as a border to the subblock that follows with the comma delimiter1131 archiveprefix.or.eprinttype ":" * eprint * % subblock with eprinttype and eprint number1132 }1133 if$1134 }1135 if$1136}1137 1138% urlbst...1139% Functions for making hypertext links.1140% In all cases, the stack has (link-text href-url)1141%1142% make 'null' specials1143FUNCTION {make.href.null}1144{1145 pop$1146}1147% make hypertex specials1148FUNCTION {make.href.hypertex}1149{1150 "\special {html:<a href=" quote$ *1151 swap$ * quote$ * "> }" * swap$ *1152 "\special {html:</a>}" *1153}1154% make hyperref specials1155FUNCTION {make.href.hyperref}1156{1157 "\href {" swap$ * "} {\path{" * swap$ * "}}" *1158}1159FUNCTION {make.href}1160{ hrefform #2 =1161 'make.href.hyperref % hrefform = 21162 { hrefform #1 =1163 'make.href.hypertex % hrefform = 11164 'make.href.null % hrefform = 0 (or anything else)1165 if$1166 }1167 if$1168}1169 1170% If inlinelinks is true, then format.url should be a no-op, since it's1171% (a) redundant, and (b) could end up as a link-within-a-link.1172FUNCTION {format.url}1173{ inlinelinks #1 = url empty$ or1174 { "" }1175 { hrefform #1 =1176 { % special case -- add HyperTeX specials1177 urlintro "\url{" url * "}" * url make.href.hypertex * }1178 { urlintro "\url{" * url * "}" * }1179 if$1180 }1181 if$1182}1183FUNCTION {format.eprint}1184{ eprint empty$1185 { "" }1186 { eprintprefix eprint * eprinturl eprint * make.href }1187 if$1188}1189 1190FUNCTION {format.doi}1191{ doi empty$1192 { "" }1193 { doi parse.doi % leaves "https://doi.org/DOI" DOI on the stack1194 's := 't :=1195 doiform #1 =1196 { "\doi{" s * "}" * }1197 { doiprefix s * t make.href }1198 if$1199 }1200 if$1201}1202 1203FUNCTION {format.pubmed}1204{ pubmed empty$1205 { "" }1206 { pubmedprefix pubmed * pubmedurl pubmed * make.href }1207 if$1208}1209 1210% Output a URL. We can't use the more normal idiom (something like1211% `format.url output'), because the `inbrackets' within1212% format.lastchecked applies to everything between calls to `output',1213% so that `format.url format.lastchecked * output' ends up with both1214% the URL and the lastchecked in brackets.1215FUNCTION {output.url}1216{ url empty$1217 'skip$1218 { new.block1219 format.url output1220 format.lastchecked output1221 }1222 if$1223}1224 1225FUNCTION {output.web.refs}1226{1227 new.block1228 inlinelinks1229 'skip$ % links were inline -- don't repeat them1230 { % If the generated DOI will be the same as the URL,1231 % then don't print the URL (thanks to Joseph Wright1232 % for (the original version of) this code,1233 % at http://tex.stackexchange.com/questions/5660)1234 adddoi1235 doi empty$ { "X" } { doi parse.doi pop$ } if$ % DOI URL to be generated1236 url empty$ { "Y" } { url } if$ % the URL, or "Y" if empty1237 = % are the strings equal?1238 and1239 'skip$1240 { output.url }1241 if$1242 addeprints eprint empty$ not and1243 { format.eprint output.nonnull }1244 'skip$1245 if$1246 adddoi doi empty$ not and1247 { format.doi output.nonnull }1248 'skip$1249 if$1250 addpubmed pubmed empty$ not and1251 { format.pubmed output.nonnull }1252 'skip$1253 if$1254 }1255 if$1256}1257 1258% Wrapper for output.bibitem.original.1259% If the URL field is not empty, set makeinlinelink to be true,1260% so that an inline link will be started at the next opportunity1261FUNCTION {output.bibitem}1262{ outside.brackets 'bracket.state :=1263 output.bibitem.original1264 inlinelinks url empty$ not doi empty$ not or pubmed empty$ not or eprint empty$ not or and1265 { #1 'makeinlinelink := }1266 { #0 'makeinlinelink := }1267 if$1268}1269 1270% Wrapper for fin.entry.original1271FUNCTION {fin.entry}1272{ output.web.refs % urlbst1273 makeinlinelink % ooops, it appears we didn't have a title for inlinelink1274 { possibly.setup.inlinelink % add some artificial link text here, as a fallback1275 linktextstring output.nonnull }1276 'skip$1277 if$1278 bracket.state close.brackets = % urlbst1279 { "]" * }1280 'skip$1281 if$1282 fin.entry.original1283}1284 1285% Webpage entry type.1286% Title and url fields required;1287% author, note, year, month, and lastchecked fields optional1288% See references1289% ISO 690-2 http://www.nlc-bnc.ca/iso/tc46sc9/standard/690-2e.htm1290% http://www.classroom.net/classroom/CitingNetResources.html1291% http://neal.ctstateu.edu/history/cite.html1292% http://www.cas.usf.edu/english/walker/mla.html1293% for citation formats for web pages.1294FUNCTION {webpage}1295{ output.bibitem1296 author empty$1297 { editor empty$1298 'skip$ % author and editor both optional1299 { format.editors output.nonnull }1300 if$1301 }1302 { editor empty$1303 { format.authors output.nonnull }1304 { "can't use both author and editor fields in " cite$ * warning$ }1305 if$1306 }1307 if$1308 new.block1309 title empty$ 'skip$ 'possibly.setup.inlinelink if$1310 format.title "title" output.check1311 inbrackets onlinestring output1312 new.block1313 year empty$1314 'skip$1315 { format.date "year" output.check }1316 if$1317 % We don't need to output the URL details ('lastchecked' and 'url'),1318 % because fin.entry does that for us, using output.web.refs. The only1319 % reason we would want to put them here is if we were to decide that1320 % they should go in front of the rather miscellaneous information in 'note'.1321 new.block1322 note output1323 fin.entry1324}1325% ...urlbst to here1326 1327 1328FUNCTION {article}1329{ output.bibitem1330 format.authors "author" output.check1331 author format.key output1332 format.date "year" output.check1333 date.block1334 title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst1335 format.title "title" output.check1336 new.block1337 crossref missing$1338 {1339 journal1340 "journal" bibinfo.check1341 emphasize1342 "journal" output.check1343 possibly.setup.inlinelink format.vol.num.pages output% urlbst1344 }1345 { format.article.crossref output.nonnull1346 format.pages output1347 }1348 if$1349 new.block1350 format.note output1351 fin.entry1352}1353FUNCTION {book}1354{ output.bibitem1355 author empty$1356 { format.editors "author and editor" output.check1357 editor format.key output1358 }1359 { format.authors output.nonnull1360 crossref missing$1361 { "author and editor" editor either.or.check }1362 'skip$1363 if$1364 }1365 if$1366 format.date "year" output.check1367 date.block1368 title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst1369 format.btitle "title" output.check1370 format.edition output1371 crossref missing$1372 { format.bvolume output1373 new.block1374 format.number.series output1375 new.sentence1376 format.publisher.address output1377 }1378 {1379 new.block1380 format.book.crossref output.nonnull1381 }1382 if$1383 new.block1384 format.note output1385 fin.entry1386}1387FUNCTION {booklet}1388{ output.bibitem1389 format.authors output1390 author format.key output1391 format.date "year" output.check1392 date.block1393 title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst1394 format.title "title" output.check1395 new.block1396 howpublished "howpublished" bibinfo.check output1397 address "address" bibinfo.check output1398 new.block1399 format.note output1400 fin.entry1401}1402 1403FUNCTION {inbook}1404{ output.bibitem1405 author empty$1406 { format.editors "author and editor" output.check1407 editor format.key output1408 }1409 { format.authors output.nonnull1410 crossref missing$1411 { "author and editor" editor either.or.check }1412 'skip$1413 if$1414 }1415 if$1416 format.date "year" output.check1417 date.block1418 title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst1419 format.btitle "title" output.check1420 crossref missing$1421 {1422 format.edition output1423 format.bvolume output1424 format.chapter "chapter" output.check1425 new.block1426 format.number.series output1427 new.sentence1428 format.publisher.address output1429 }1430 {1431 format.chapter "chapter" output.check1432 new.block1433 format.book.crossref output.nonnull1434 }1435 if$1436 new.block1437 format.note output1438 fin.entry1439}1440 1441FUNCTION {incollection}1442{ output.bibitem1443 format.authors "author" output.check1444 author format.key output1445 format.date "year" output.check1446 date.block1447 title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst1448 format.title "title" output.check1449 new.block1450 crossref missing$1451 { format.in.ed.booktitle "booktitle" output.check1452 format.edition output1453 format.bvolume output1454 format.number.series output1455 format.chapter.pages output1456 new.sentence1457 format.publisher.address output1458 }1459 { format.incoll.inproc.crossref output.nonnull1460 format.chapter.pages output1461 }1462 if$1463 new.block1464 format.note output1465 fin.entry1466}1467FUNCTION {inproceedings}1468{ output.bibitem1469 format.authors "author" output.check1470 author format.key output1471 format.date "year" output.check1472 date.block1473 title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst1474 format.title "title" output.check1475 new.block1476 crossref missing$1477 { format.in.booktitle "booktitle" output.check1478 format.bvolume output1479 format.number.series output1480 format.pages output1481 address "address" bibinfo.check output1482 new.sentence1483 organization "organization" bibinfo.check output1484 publisher "publisher" bibinfo.check output1485 }1486 { format.incoll.inproc.crossref output.nonnull1487 format.pages output1488 }1489 if$1490 new.block1491 format.note output1492 fin.entry1493}1494FUNCTION {conference} { inproceedings }1495FUNCTION {manual}1496{ output.bibitem1497 format.authors output1498 author format.key output1499 format.date "year" output.check1500 date.block1501 title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst1502 format.btitle "title" output.check1503 format.edition output1504 organization address new.block.checkb1505 organization "organization" bibinfo.check output1506 address "address" bibinfo.check output1507 new.block1508 format.note output1509 fin.entry1510}1511 1512FUNCTION {mastersthesis}1513{ output.bibitem1514 format.authors "author" output.check1515 author format.key output1516 format.date "year" output.check1517 date.block1518 title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst1519 format.title1520 "title" output.check1521 new.block1522 bbl.mthesis format.thesis.type output.nonnull1523 school "school" bibinfo.warn output1524 address "address" bibinfo.check output1525 month "month" bibinfo.check output1526 new.block1527 format.note output1528 fin.entry1529}1530 1531FUNCTION {misc}1532{ output.bibitem1533 format.authors output1534 author format.key output1535 format.date "year" output.check1536 date.block1537 title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst1538 format.title output1539 new.block1540 howpublished "howpublished" bibinfo.check output1541 new.block1542 output.eprint output1543 new.block1544 format.note output1545 fin.entry1546}1547FUNCTION {phdthesis}1548{ output.bibitem1549 format.authors "author" output.check1550 author format.key output1551 format.date "year" output.check1552 date.block1553 title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst1554 format.btitle1555 "title" output.check1556 new.block1557 bbl.phdthesis format.thesis.type output.nonnull1558 school "school" bibinfo.warn output1559 address "address" bibinfo.check output1560 new.block1561 format.note output1562 fin.entry1563}1564 1565FUNCTION {presentation}1566{ output.bibitem1567 format.authors output1568 author format.key output1569 new.block1570 title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst1571 format.title output1572 new.block1573 format.organization.address "organization and address" output.check1574 month "month" output.check1575 year "year" output.check1576 new.block1577 format.note output1578 new.sentence1579 type missing$ 'skip$1580 {"(" type capitalize * ")" * output}1581 if$1582 fin.entry1583}1584 1585FUNCTION {proceedings}1586{ output.bibitem1587 format.editors output1588 editor format.key output1589 format.date "year" output.check1590 date.block1591 title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst1592 format.btitle "title" output.check1593 format.bvolume output1594 format.number.series output1595 new.sentence1596 publisher empty$1597 { format.organization.address output }1598 { organization "organization" bibinfo.check output1599 new.sentence1600 format.publisher.address output1601 }1602 if$1603 new.block1604 format.note output1605 fin.entry1606}1607 1608FUNCTION {techreport}1609{ output.bibitem1610 format.authors "author" output.check1611 author format.key output1612 format.date "year" output.check1613 date.block1614 title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst1615 format.title1616 "title" output.check1617 new.block1618 format.tr.number output.nonnull1619 institution "institution" bibinfo.warn output1620 address "address" bibinfo.check output1621 new.block1622 format.note output1623 fin.entry1624}1625 1626FUNCTION {unpublished}1627{ output.bibitem1628 format.authors "author" output.check1629 author format.key output1630 format.date "year" output.check1631 date.block1632 title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst1633 format.title "title" output.check1634 new.block1635 format.note "note" output.check1636 fin.entry1637}1638 1639FUNCTION {default.type} { misc }1640READ1641FUNCTION {sortify}1642{ purify$1643 "l" change.case$1644}1645INTEGERS { len }1646FUNCTION {chop.word}1647{ 's :=1648 'len :=1649 s #1 len substring$ =1650 { s len #1 + global.max$ substring$ }1651 's1652 if$1653}1654FUNCTION {format.lab.names}1655{ 's :=1656 "" 't :=1657 s #1 "{vv~}{ll}" format.name$1658 s num.names$ duplicate$1659 #2 >1660 { pop$1661 " " * bbl.etal *1662 }1663 { #2 <1664 'skip$1665 { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =1666 {1667 " " * bbl.etal *1668 }1669 { bbl.and space.word * s #2 "{vv~}{ll}" format.name$1670 * }1671 if$1672 }1673 if$1674 }1675 if$1676}1677 1678FUNCTION {author.key.label}1679{ author empty$1680 { key empty$1681 { cite$ #1 #3 substring$ }1682 'key1683 if$1684 }1685 { author format.lab.names }1686 if$1687}1688 1689FUNCTION {author.editor.key.label}1690{ author empty$1691 { editor empty$1692 { key empty$1693 { cite$ #1 #3 substring$ }1694 'key1695 if$1696 }1697 { editor format.lab.names }1698 if$1699 }1700 { author format.lab.names }1701 if$1702}1703 1704FUNCTION {editor.key.label}1705{ editor empty$1706 { key empty$1707 { cite$ #1 #3 substring$ }1708 'key1709 if$1710 }1711 { editor format.lab.names }1712 if$1713}1714 1715FUNCTION {calc.short.authors}1716{ type$ "book" =1717 type$ "inbook" =1718 or1719 'author.editor.key.label1720 { type$ "proceedings" =1721 'editor.key.label1722 'author.key.label1723 if$1724 }1725 if$1726 'short.list :=1727}1728 1729FUNCTION {calc.label}1730{ calc.short.authors1731 short.list1732 "("1733 *1734 year duplicate$ empty$1735 short.list key field.or.null = or1736 { pop$ "" }1737 'skip$1738 if$1739 *1740 'label :=1741}1742 1743FUNCTION {sort.format.names}1744{ 's :=1745 #1 'nameptr :=1746 ""1747 s num.names$ 'numnames :=1748 numnames 'namesleft :=1749 { namesleft #0 > }1750 { s nameptr1751 "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}"1752 format.name$ 't :=1753 nameptr #1 >1754 {1755 " " *1756 namesleft #1 = t "others" = and1757 { "zzzzz" 't := }1758 'skip$1759 if$1760 t sortify *1761 }1762 { t sortify * }1763 if$1764 nameptr #1 + 'nameptr :=1765 namesleft #1 - 'namesleft :=1766 }1767 while$1768}1769 1770FUNCTION {sort.format.title}1771{ 't :=1772 "A " #21773 "An " #31774 "The " #4 t chop.word1775 chop.word1776 chop.word1777 sortify1778 #1 global.max$ substring$1779}1780FUNCTION {author.sort}1781{ author empty$1782 { key empty$1783 { "to sort, need author or key in " cite$ * warning$1784 ""1785 }1786 { key sortify }1787 if$1788 }1789 { author sort.format.names }1790 if$1791}1792FUNCTION {author.editor.sort}1793{ author empty$1794 { editor empty$1795 { key empty$1796 { "to sort, need author, editor, or key in " cite$ * warning$1797 ""1798 }1799 { key sortify }1800 if$1801 }1802 { editor sort.format.names }1803 if$1804 }1805 { author sort.format.names }1806 if$1807}1808FUNCTION {editor.sort}1809{ editor empty$1810 { key empty$1811 { "to sort, need editor or key in " cite$ * warning$1812 ""1813 }1814 { key sortify }1815 if$1816 }1817 { editor sort.format.names }1818 if$1819}1820FUNCTION {presort}1821{ calc.label1822 label sortify1823 " "1824 *1825 type$ "book" =1826 type$ "inbook" =1827 or1828 'author.editor.sort1829 { type$ "proceedings" =1830 'editor.sort1831 'author.sort1832 if$1833 }1834 if$1835 #1 entry.max$ substring$1836 'sort.label :=1837 sort.label1838 *1839 " "1840 *1841 title field.or.null1842 sort.format.title1843 *1844 #1 entry.max$ substring$1845 'sort.key$ :=1846}1847 1848ITERATE {presort}1849SORT1850STRINGS { last.label next.extra }1851INTEGERS { last.extra.num last.extra.num.extended last.extra.num.blank number.label }1852FUNCTION {initialize.extra.label.stuff}1853{ #0 int.to.chr$ 'last.label :=1854 "" 'next.extra :=1855 #0 'last.extra.num :=1856 "a" chr.to.int$ #1 - 'last.extra.num.blank :=1857 last.extra.num.blank 'last.extra.num.extended :=1858 #0 'number.label :=1859}1860FUNCTION {forward.pass}1861{ last.label label =1862 { last.extra.num #1 + 'last.extra.num :=1863 last.extra.num "z" chr.to.int$ >1864 { "a" chr.to.int$ 'last.extra.num :=1865 last.extra.num.extended #1 + 'last.extra.num.extended :=1866 }1867 'skip$1868 if$1869 last.extra.num.extended last.extra.num.blank >1870 { last.extra.num.extended int.to.chr$1871 last.extra.num int.to.chr$1872 * 'extra.label := }1873 { last.extra.num int.to.chr$ 'extra.label := }1874 if$1875 }1876 { "a" chr.to.int$ 'last.extra.num :=1877 "" 'extra.label :=1878 label 'last.label :=1879 }1880 if$1881 number.label #1 + 'number.label :=1882}1883FUNCTION {reverse.pass}1884{ next.extra "b" =1885 { "a" 'extra.label := }1886 'skip$1887 if$1888 extra.label 'next.extra :=1889 extra.label1890 duplicate$ empty$1891 'skip$1892 { year field.or.null #-1 #1 substring$ chr.to.int$ #65 < 1893 { "{\natexlab{" swap$ * "}}" * }1894 { "{(\natexlab{" swap$ * "})}" * }1895 if$ }1896 if$1897 'extra.label :=1898 label extra.label * 'label :=1899}1900EXECUTE {initialize.extra.label.stuff}1901ITERATE {forward.pass}1902REVERSE {reverse.pass}1903FUNCTION {bib.sort.order}1904{ sort.label1905 " "1906 *1907 year field.or.null sortify1908 *1909 " "1910 *1911 title field.or.null1912 sort.format.title1913 *1914 #1 entry.max$ substring$1915 'sort.key$ :=1916}1917ITERATE {bib.sort.order}1918SORT1919FUNCTION {begin.bib}1920{ preamble$ empty$1921 'skip$1922 { preamble$ write$ newline$ }1923 if$1924 "\begin{thebibliography}{" number.label int.to.str$ * "}" *1925 write$ newline$1926 "\providecommand{\natexlab}[1]{#1}"1927 write$ newline$1928}1929EXECUTE {begin.bib}1930EXECUTE {init.urlbst.variables} % urlbst1931EXECUTE {init.state.consts}1932ITERATE {call.type$}1933FUNCTION {end.bib}1934{ newline$1935 "\end{thebibliography}" write$ newline$1936}1937EXECUTE {end.bib}1938%% End of customized bst file1939%%1940%% End of file `acl_natbib_basic.bst'.1941