spbasic.bst 32 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658
  1. %%
  2. %% This is file `spbasic.bst',
  3. %% generated with the docstrip utility.
  4. %%
  5. %% The original source files were:
  6. %%
  7. %% merlin.mbs (with options: `ay,nat,seq-lab,vonx,nm-rvx,ed-rev,jnrlst,dt-beg,yr-par,yrp-x,yrpp-xsp,note-yr,jxper,jttl-rm,thtit-a,pgsep-c,num-xser,ser-vol,jnm-x,btit-rm,bt-rm,pre-pub,doi,edparxc,blk-tit,in-col,fin-bare,pp,ed,abr,mth-bare,ord,jabr,xand,eprint,url,url-blk,em-x,nfss,')
  8. %% ----------------------------------------
  9. %%
  10. %%********************************************************************************%%
  11. %% %%
  12. %% For Springer medical, life sciences, chemistry, geology, engineering and %%
  13. %% computer science publications. %%
  14. %% For use with the natbib package (see below). Default is author-year citations. %%
  15. %% When citations are numbered, please use \usepackage[numbers]{natbib}. %%
  16. %% A lack of punctuation is the key feature. Springer-Verlag 2004/10/15 %%
  17. %% Report bugs and improvements to: Joylene Vette-Guillaume or Frank Holzwarth %%
  18. %% %%
  19. %%********************************************************************************%%
  20. %%
  21. %% Copyright 1994-2004 Patrick W Daly
  22. % ===============================================================
  23. % IMPORTANT NOTICE:
  24. % This bibliographic style (bst) file has been generated from one or
  25. % more master bibliographic style (mbs) files, listed above.
  26. %
  27. % This generated file can be redistributed and/or modified under the terms
  28. % of the LaTeX Project Public License Distributed from CTAN
  29. % archives in directory macros/latex/base/lppl.txt; either
  30. % version 1 of the License, or any later version.
  31. % ===============================================================
  32. % Name and version information of the main mbs file:
  33. % \ProvidesFile{merlin.mbs}[2004/02/09 4.13 (PWD, AO, DPC)]
  34. % For use with BibTeX version 0.99a or later
  35. %-------------------------------------------------------------------
  36. % This bibliography style file is intended for texts in ENGLISH
  37. % This is an author-year citation style bibliography. As such, it is
  38. % non-standard LaTeX, and requires a special package file to function properly.
  39. % Such a package is natbib.sty by Patrick W. Daly
  40. % The form of the \bibitem entries is
  41. % \bibitem[Jones et al.(1990)]{key}...
  42. % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
  43. % The essential feature is that the label (the part in brackets) consists
  44. % of the author names, as they should appear in the citation, with the year
  45. % in parentheses following. There must be no space before the opening
  46. % parenthesis!
  47. % With natbib v5.3, a full list of authors may also follow the year.
  48. % In natbib.sty, it is possible to define the type of enclosures that is
  49. % really wanted (brackets or parentheses), but in either case, there must
  50. % be parentheses in the label.
  51. % The \cite command functions as follows:
  52. % \citet{key} ==>> Jones et al. (1990)
  53. % \citet*{key} ==>> Jones, Baker, and Smith (1990)
  54. % \citep{key} ==>> (Jones et al., 1990)
  55. % \citep*{key} ==>> (Jones, Baker, and Smith, 1990)
  56. % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
  57. % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990)
  58. % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32)
  59. % \citeauthor{key} ==>> Jones et al.
  60. % \citeauthor*{key} ==>> Jones, Baker, and Smith
  61. % \citeyear{key} ==>> 1990
  62. %---------------------------------------------------------------------
  63. ENTRY
  64. { address
  65. archive
  66. author
  67. booktitle
  68. chapter
  69. doi
  70. edition
  71. editor
  72. eid
  73. eprint
  74. howpublished
  75. institution
  76. journal
  77. key
  78. month
  79. note
  80. number
  81. organization
  82. pages
  83. publisher
  84. school
  85. series
  86. title
  87. type
  88. url
  89. volume
  90. year
  91. }
  92. {}
  93. { label extra.label sort.label short.list }
  94. INTEGERS { output.state before.all mid.sentence after.sentence after.block }
  95. FUNCTION {init.state.consts}
  96. { #0 'before.all :=
  97. #1 'mid.sentence :=
  98. #2 'after.sentence :=
  99. #3 'after.block :=
  100. }
  101. STRINGS { s t}
  102. FUNCTION {output.nonnull}
  103. { 's :=
  104. output.state mid.sentence =
  105. { ", " * write$ }
  106. { output.state after.block =
  107. { add.period$ write$
  108. newline$
  109. "\newblock " write$
  110. }
  111. { output.state before.all =
  112. 'write$
  113. { add.period$ " " * write$ }
  114. if$
  115. }
  116. if$
  117. mid.sentence 'output.state :=
  118. }
  119. if$
  120. s
  121. }
  122. FUNCTION {output}
  123. { duplicate$ empty$
  124. 'pop$
  125. 'output.nonnull
  126. if$
  127. }
  128. FUNCTION {output.check}
  129. { 't :=
  130. duplicate$ empty$
  131. { pop$ "empty " t * " in " * cite$ * warning$ }
  132. 'output.nonnull
  133. if$
  134. }
  135. FUNCTION {fin.entry}
  136. { duplicate$ empty$
  137. 'pop$
  138. 'write$
  139. if$
  140. newline$
  141. }
  142. FUNCTION {new.block}
  143. { output.state before.all =
  144. 'skip$
  145. { after.block 'output.state := }
  146. if$
  147. }
  148. FUNCTION {new.sentence}
  149. { output.state after.block =
  150. 'skip$
  151. { output.state before.all =
  152. 'skip$
  153. { after.sentence 'output.state := }
  154. if$
  155. }
  156. if$
  157. }
  158. FUNCTION {add.blank}
  159. { " " * before.all 'output.state :=
  160. }
  161. FUNCTION {no.blank.or.punct}
  162. { "\hspace{0pt}" * before.all 'output.state :=
  163. }
  164. FUNCTION {date.block}
  165. {
  166. add.blank
  167. }
  168. FUNCTION {not}
  169. { { #0 }
  170. { #1 }
  171. if$
  172. }
  173. FUNCTION {and}
  174. { 'skip$
  175. { pop$ #0 }
  176. if$
  177. }
  178. FUNCTION {or}
  179. { { pop$ #1 }
  180. 'skip$
  181. if$
  182. }
  183. STRINGS {z}
  184. FUNCTION {remove.dots}
  185. { 'z :=
  186. ""
  187. { z empty$ not }
  188. { z #1 #1 substring$
  189. z #2 global.max$ substring$ 'z :=
  190. duplicate$ "." = 'pop$
  191. { * }
  192. if$
  193. }
  194. while$
  195. }
  196. FUNCTION {new.block.checkb}
  197. { empty$
  198. swap$ empty$
  199. and
  200. 'skip$
  201. 'new.block
  202. if$
  203. }
  204. FUNCTION {field.or.null}
  205. { duplicate$ empty$
  206. { pop$ "" }
  207. 'skip$
  208. if$
  209. }
  210. FUNCTION {emphasize}
  211. { skip$ }
  212. FUNCTION {tie.or.space.prefix}
  213. { duplicate$ text.length$ #3 <
  214. { "~" }
  215. { " " }
  216. if$
  217. swap$
  218. }
  219. FUNCTION {capitalize}
  220. { "u" change.case$ "t" change.case$ }
  221. FUNCTION {space.word}
  222. { " " swap$ * " " * }
  223. % Here are the language-specific definitions for explicit words.
  224. % Each function has a name bbl.xxx where xxx is the English word.
  225. % The language selected here is ENGLISH
  226. FUNCTION {bbl.and}
  227. { "and"}
  228. FUNCTION {bbl.etal}
  229. { "et~al." }
  230. FUNCTION {bbl.editors}
  231. { "eds" }
  232. FUNCTION {bbl.editor}
  233. { "ed" }
  234. FUNCTION {bbl.edby}
  235. { "edited by" }
  236. FUNCTION {bbl.edition}
  237. { "edn" }
  238. FUNCTION {bbl.volume}
  239. { "vol" }
  240. FUNCTION {bbl.of}
  241. { "of" }
  242. FUNCTION {bbl.number}
  243. { "no." }
  244. FUNCTION {bbl.nr}
  245. { "no." }
  246. FUNCTION {bbl.in}
  247. { "in" }
  248. FUNCTION {bbl.pages}
  249. { "pp" }
  250. FUNCTION {bbl.page}
  251. { "p" }
  252. FUNCTION {bbl.chapter}
  253. { "chap" }
  254. FUNCTION {bbl.techrep}
  255. { "Tech. Rep." }
  256. FUNCTION {bbl.mthesis}
  257. { "Master's thesis" }
  258. FUNCTION {bbl.phdthesis}
  259. { "PhD thesis" }
  260. FUNCTION {bbl.first}
  261. { "1st" }
  262. FUNCTION {bbl.second}
  263. { "2nd" }
  264. FUNCTION {bbl.third}
  265. { "3rd" }
  266. FUNCTION {bbl.fourth}
  267. { "4th" }
  268. FUNCTION {bbl.fifth}
  269. { "5th" }
  270. FUNCTION {bbl.st}
  271. { "st" }
  272. FUNCTION {bbl.nd}
  273. { "nd" }
  274. FUNCTION {bbl.rd}
  275. { "rd" }
  276. FUNCTION {bbl.th}
  277. { "th" }
  278. MACRO {jan} {"Jan."}
  279. MACRO {feb} {"Feb."}
  280. MACRO {mar} {"Mar."}
  281. MACRO {apr} {"Apr."}
  282. MACRO {may} {"May"}
  283. MACRO {jun} {"Jun."}
  284. MACRO {jul} {"Jul."}
  285. MACRO {aug} {"Aug."}
  286. MACRO {sep} {"Sep."}
  287. MACRO {oct} {"Oct."}
  288. MACRO {nov} {"Nov."}
  289. MACRO {dec} {"Dec."}
  290. FUNCTION {eng.ord}
  291. { duplicate$ "1" swap$ *
  292. #-2 #1 substring$ "1" =
  293. { bbl.th * }
  294. { duplicate$ #-1 #1 substring$
  295. duplicate$ "1" =
  296. { pop$ bbl.st * }
  297. { duplicate$ "2" =
  298. { pop$ bbl.nd * }
  299. { "3" =
  300. { bbl.rd * }
  301. { bbl.th * }
  302. if$
  303. }
  304. if$
  305. }
  306. if$
  307. }
  308. if$
  309. }
  310. MACRO {acmcs} {"ACM Comput Surv"}
  311. MACRO {acta} {"Acta Inf"}
  312. MACRO {cacm} {"Commun ACM"}
  313. MACRO {ibmjrd} {"IBM~J~Res Dev"}
  314. MACRO {ibmsj} {"IBM Syst~J"}
  315. MACRO {ieeese} {"IEEE Trans Softw Eng"}
  316. MACRO {ieeetc} {"IEEE Trans Comput"}
  317. MACRO {ieeetcad}
  318. {"IEEE Trans Comput Aid Des"}
  319. MACRO {ipl} {"Inf Process Lett"}
  320. MACRO {jacm} {"J~ACM"}
  321. MACRO {jcss} {"J~Comput Syst Sci"}
  322. MACRO {scp} {"Sci Comput Program"}
  323. MACRO {sicomp} {"SIAM J~Comput"}
  324. MACRO {tocs} {"ACM Trans Comput Syst"}
  325. MACRO {tods} {"ACM Trans Database Syst"}
  326. MACRO {tog} {"ACM Trans Graphic"}
  327. MACRO {toms} {"ACM Trans Math Softw"}
  328. MACRO {toois} {"ACM Trans Office Inf Syst"}
  329. MACRO {toplas} {"ACM Trans Program Lang Syst"}
  330. MACRO {tcs} {"Theor Comput Sci"}
  331. FUNCTION {bibinfo.check}
  332. { swap$
  333. duplicate$ missing$
  334. {
  335. pop$ pop$
  336. ""
  337. }
  338. { duplicate$ empty$
  339. {
  340. swap$ pop$
  341. }
  342. { swap$
  343. pop$
  344. }
  345. if$
  346. }
  347. if$
  348. }
  349. FUNCTION {bibinfo.warn}
  350. { swap$
  351. duplicate$ missing$
  352. {
  353. swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
  354. ""
  355. }
  356. { duplicate$ empty$
  357. {
  358. swap$ "empty " swap$ * " in " * cite$ * warning$
  359. }
  360. { swap$
  361. pop$
  362. }
  363. if$
  364. }
  365. if$
  366. }
  367. FUNCTION {format.eprint}
  368. { eprint duplicate$ empty$
  369. 'skip$
  370. { "\eprint"
  371. archive empty$
  372. 'skip$
  373. { "[" * archive * "]" * }
  374. if$
  375. "{" * swap$ * "}" *
  376. }
  377. if$
  378. }
  379. FUNCTION {format.url}
  380. { url empty$
  381. { "" }
  382. { "\urlprefix\url{" url * "}" * }
  383. if$
  384. }
  385. STRINGS { bibinfo}
  386. INTEGERS { nameptr namesleft numnames }
  387. FUNCTION {format.names}
  388. { 'bibinfo :=
  389. duplicate$ empty$ 'skip$ {
  390. 's :=
  391. "" 't :=
  392. #1 'nameptr :=
  393. s num.names$ 'numnames :=
  394. numnames 'namesleft :=
  395. { namesleft #0 > }
  396. { s nameptr
  397. "{vv~}{ll}{ f{}}{ jj}"
  398. format.name$
  399. remove.dots
  400. bibinfo bibinfo.check
  401. 't :=
  402. nameptr #1 >
  403. {
  404. namesleft #1 >
  405. { ", " * t * }
  406. {
  407. "," *
  408. s nameptr "{ll}" format.name$ duplicate$ "others" =
  409. { 't := }
  410. { pop$ }
  411. if$
  412. t "others" =
  413. {
  414. " " * bbl.etal *
  415. }
  416. { " " * t * }
  417. if$
  418. }
  419. if$
  420. }
  421. 't
  422. if$
  423. nameptr #1 + 'nameptr :=
  424. namesleft #1 - 'namesleft :=
  425. }
  426. while$
  427. } if$
  428. }
  429. FUNCTION {format.names.ed}
  430. {
  431. format.names
  432. }
  433. FUNCTION {format.key}
  434. { empty$
  435. { key field.or.null }
  436. { "" }
  437. if$
  438. }
  439. FUNCTION {format.authors}
  440. { author "author" format.names
  441. }
  442. FUNCTION {get.bbl.editor}
  443. { editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
  444. FUNCTION {format.editors}
  445. { editor "editor" format.names duplicate$ empty$ 'skip$
  446. {
  447. " " *
  448. get.bbl.editor
  449. "(" swap$ * ")" *
  450. *
  451. }
  452. if$
  453. }
  454. FUNCTION {format.doi}
  455. { doi "doi" bibinfo.check
  456. duplicate$ empty$ 'skip$
  457. {
  458. "\doi{" swap$ * "}" *
  459. }
  460. if$
  461. }
  462. FUNCTION {format.note}
  463. {
  464. note empty$
  465. { "" }
  466. { note #1 #1 substring$
  467. duplicate$ "{" =
  468. 'skip$
  469. { output.state mid.sentence =
  470. { "l" }
  471. { "u" }
  472. if$
  473. change.case$
  474. }
  475. if$
  476. note #2 global.max$ substring$ * "note" bibinfo.check
  477. }
  478. if$
  479. }
  480. FUNCTION {format.title}
  481. { title
  482. duplicate$ empty$ 'skip$
  483. { "t" change.case$ }
  484. if$
  485. "title" bibinfo.check
  486. }
  487. FUNCTION {format.full.names}
  488. {'s :=
  489. "" 't :=
  490. #1 'nameptr :=
  491. s num.names$ 'numnames :=
  492. numnames 'namesleft :=
  493. { namesleft #0 > }
  494. { s nameptr
  495. "{vv~}{ll}" format.name$
  496. 't :=
  497. nameptr #1 >
  498. {
  499. namesleft #1 >
  500. { ", " * t * }
  501. {
  502. s nameptr "{ll}" format.name$ duplicate$ "others" =
  503. { 't := }
  504. { pop$ }
  505. if$
  506. t "others" =
  507. {
  508. " " * bbl.etal *
  509. }
  510. {
  511. numnames #2 >
  512. { "," * }
  513. 'skip$
  514. if$
  515. bbl.and
  516. space.word * t *
  517. }
  518. if$
  519. }
  520. if$
  521. }
  522. 't
  523. if$
  524. nameptr #1 + 'nameptr :=
  525. namesleft #1 - 'namesleft :=
  526. }
  527. while$
  528. }
  529. FUNCTION {author.editor.key.full}
  530. { author empty$
  531. { editor empty$
  532. { key empty$
  533. { cite$ #1 #3 substring$ }
  534. 'key
  535. if$
  536. }
  537. { editor format.full.names }
  538. if$
  539. }
  540. { author format.full.names }
  541. if$
  542. }
  543. FUNCTION {author.key.full}
  544. { author empty$
  545. { key empty$
  546. { cite$ #1 #3 substring$ }
  547. 'key
  548. if$
  549. }
  550. { author format.full.names }
  551. if$
  552. }
  553. FUNCTION {editor.key.full}
  554. { editor empty$
  555. { key empty$
  556. { cite$ #1 #3 substring$ }
  557. 'key
  558. if$
  559. }
  560. { editor format.full.names }
  561. if$
  562. }
  563. FUNCTION {make.full.names}
  564. { type$ "book" =
  565. type$ "inbook" =
  566. or
  567. 'author.editor.key.full
  568. { type$ "proceedings" =
  569. 'editor.key.full
  570. 'author.key.full
  571. if$
  572. }
  573. if$
  574. }
  575. FUNCTION {output.bibitem}
  576. { newline$
  577. "\bibitem[{" write$
  578. label write$
  579. ")" make.full.names duplicate$ short.list =
  580. { pop$ }
  581. { * }
  582. if$
  583. "}]{" * write$
  584. cite$ write$
  585. "}" write$
  586. newline$
  587. ""
  588. before.all 'output.state :=
  589. }
  590. FUNCTION {add.period}
  591. { duplicate$ empty$
  592. 'skip$
  593. { "." * add.blank }
  594. if$
  595. }
  596. FUNCTION {if.digit}
  597. { duplicate$ "0" =
  598. swap$ duplicate$ "1" =
  599. swap$ duplicate$ "2" =
  600. swap$ duplicate$ "3" =
  601. swap$ duplicate$ "4" =
  602. swap$ duplicate$ "5" =
  603. swap$ duplicate$ "6" =
  604. swap$ duplicate$ "7" =
  605. swap$ duplicate$ "8" =
  606. swap$ "9" = or or or or or or or or or
  607. }
  608. FUNCTION {n.separate}
  609. { 't :=
  610. ""
  611. #0 'numnames :=
  612. { t empty$ not }
  613. { t #-1 #1 substring$ if.digit
  614. { numnames #1 + 'numnames := }
  615. { #0 'numnames := }
  616. if$
  617. t #-1 #1 substring$ swap$ *
  618. t #-2 global.max$ substring$ 't :=
  619. numnames #5 =
  620. { duplicate$ #1 #2 substring$ swap$
  621. #3 global.max$ substring$
  622. "," swap$ * *
  623. }
  624. 'skip$
  625. if$
  626. }
  627. while$
  628. }
  629. FUNCTION {n.dashify}
  630. {
  631. 't :=
  632. ""
  633. { t empty$ not }
  634. { t #1 #1 substring$ "-" =
  635. { t #1 #2 substring$ "--" = not
  636. { "--" *
  637. t #2 global.max$ substring$ 't :=
  638. }
  639. { { t #1 #1 substring$ "-" = }
  640. { "-" *
  641. t #2 global.max$ substring$ 't :=
  642. }
  643. while$
  644. }
  645. if$
  646. }
  647. { t #1 #1 substring$ *
  648. t #2 global.max$ substring$ 't :=
  649. }
  650. if$
  651. }
  652. while$
  653. }
  654. FUNCTION {word.in}
  655. { bbl.in capitalize
  656. ":" *
  657. " " * }
  658. FUNCTION {format.date}
  659. { year "year" bibinfo.check duplicate$ empty$
  660. {
  661. "empty year in " cite$ * "; set to ????" * warning$
  662. pop$ "????"
  663. }
  664. 'skip$
  665. if$
  666. extra.label *
  667. before.all 'output.state :=
  668. " (" swap$ * ")" *
  669. }
  670. FUNCTION {format.btitle}
  671. { title "title" bibinfo.check
  672. duplicate$ empty$ 'skip$
  673. {
  674. }
  675. if$
  676. }
  677. FUNCTION {either.or.check}
  678. { empty$
  679. 'pop$
  680. { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  681. if$
  682. }
  683. FUNCTION {format.bvolume}
  684. { volume empty$
  685. { "" }
  686. { bbl.volume volume tie.or.space.prefix
  687. "volume" bibinfo.check * *
  688. series "series" bibinfo.check
  689. duplicate$ empty$ 'pop$
  690. { emphasize ", " * swap$ * }
  691. if$
  692. "volume and number" number either.or.check
  693. }
  694. if$
  695. }
  696. FUNCTION {format.number.series}
  697. { volume empty$
  698. { number empty$
  699. { series field.or.null }
  700. { series empty$
  701. { number "number" bibinfo.check }
  702. { output.state mid.sentence =
  703. { bbl.number }
  704. { bbl.number capitalize }
  705. if$
  706. number tie.or.space.prefix "number" bibinfo.check * *
  707. bbl.in space.word *
  708. series "series" bibinfo.check *
  709. }
  710. if$
  711. }
  712. if$
  713. }
  714. { "" }
  715. if$
  716. }
  717. FUNCTION {is.num}
  718. { chr.to.int$
  719. duplicate$ "0" chr.to.int$ < not
  720. swap$ "9" chr.to.int$ > not and
  721. }
  722. FUNCTION {extract.num}
  723. { duplicate$ 't :=
  724. "" 's :=
  725. { t empty$ not }
  726. { t #1 #1 substring$
  727. t #2 global.max$ substring$ 't :=
  728. duplicate$ is.num
  729. { s swap$ * 's := }
  730. { pop$ "" 't := }
  731. if$
  732. }
  733. while$
  734. s empty$
  735. 'skip$
  736. { pop$ s }
  737. if$
  738. }
  739. FUNCTION {convert.edition}
  740. { extract.num "l" change.case$ 's :=
  741. s "first" = s "1" = or
  742. { bbl.first 't := }
  743. { s "second" = s "2" = or
  744. { bbl.second 't := }
  745. { s "third" = s "3" = or
  746. { bbl.third 't := }
  747. { s "fourth" = s "4" = or
  748. { bbl.fourth 't := }
  749. { s "fifth" = s "5" = or
  750. { bbl.fifth 't := }
  751. { s #1 #1 substring$ is.num
  752. { s eng.ord 't := }
  753. { edition 't := }
  754. if$
  755. }
  756. if$
  757. }
  758. if$
  759. }
  760. if$
  761. }
  762. if$
  763. }
  764. if$
  765. t
  766. }
  767. FUNCTION {format.edition}
  768. { edition duplicate$ empty$ 'skip$
  769. {
  770. convert.edition
  771. output.state mid.sentence =
  772. { "l" }
  773. { "t" }
  774. if$ change.case$
  775. "edition" bibinfo.check
  776. " " * bbl.edition *
  777. }
  778. if$
  779. }
  780. INTEGERS { multiresult }
  781. FUNCTION {multi.page.check}
  782. { 't :=
  783. #0 'multiresult :=
  784. { multiresult not
  785. t empty$ not
  786. and
  787. }
  788. { t #1 #1 substring$
  789. duplicate$ "-" =
  790. swap$ duplicate$ "," =
  791. swap$ "+" =
  792. or or
  793. { #1 'multiresult := }
  794. { t #2 global.max$ substring$ 't := }
  795. if$
  796. }
  797. while$
  798. multiresult
  799. }
  800. FUNCTION {format.pages}
  801. { pages duplicate$ empty$ 'skip$
  802. { duplicate$ multi.page.check
  803. {
  804. bbl.pages swap$
  805. n.dashify
  806. }
  807. {
  808. bbl.page swap$
  809. }
  810. if$
  811. tie.or.space.prefix
  812. "pages" bibinfo.check
  813. * *
  814. }
  815. if$
  816. }
  817. FUNCTION {format.journal.pages}
  818. { pages duplicate$ empty$ 'pop$
  819. { swap$ duplicate$ empty$
  820. { pop$ pop$ format.pages }
  821. {
  822. ":" *
  823. swap$
  824. n.dashify
  825. "pages" bibinfo.check
  826. *
  827. }
  828. if$
  829. }
  830. if$
  831. }
  832. FUNCTION {format.journal.eid}
  833. { eid "eid" bibinfo.check
  834. duplicate$ empty$ 'pop$
  835. { swap$ duplicate$ empty$ 'skip$
  836. {
  837. ":" *
  838. }
  839. if$
  840. swap$ *
  841. }
  842. if$
  843. }
  844. FUNCTION {format.vol.num.pages}
  845. { volume field.or.null
  846. duplicate$ empty$ 'skip$
  847. {
  848. "volume" bibinfo.check
  849. }
  850. if$
  851. number "number" bibinfo.check duplicate$ empty$ 'skip$
  852. {
  853. swap$ duplicate$ empty$
  854. { "there's a number but no volume in " cite$ * warning$ }
  855. 'skip$
  856. if$
  857. swap$
  858. "(" swap$ * ")" *
  859. }
  860. if$ *
  861. eid empty$
  862. { format.journal.pages }
  863. { format.journal.eid }
  864. if$
  865. }
  866. FUNCTION {format.chapter.pages}
  867. { chapter empty$
  868. 'format.pages
  869. { type empty$
  870. { bbl.chapter }
  871. { type "l" change.case$
  872. "type" bibinfo.check
  873. }
  874. if$
  875. chapter tie.or.space.prefix
  876. "chapter" bibinfo.check
  877. * *
  878. pages empty$
  879. 'skip$
  880. { ", " * format.pages * }
  881. if$
  882. }
  883. if$
  884. }
  885. FUNCTION {format.booktitle}
  886. {
  887. booktitle "booktitle" bibinfo.check
  888. }
  889. FUNCTION {format.in.ed.booktitle}
  890. { format.booktitle duplicate$ empty$ 'skip$
  891. {
  892. editor "editor" format.names.ed duplicate$ empty$ 'pop$
  893. {
  894. " " *
  895. get.bbl.editor
  896. "(" swap$ * ") " *
  897. * swap$
  898. * }
  899. if$
  900. word.in swap$ *
  901. }
  902. if$
  903. }
  904. FUNCTION {format.thesis.type}
  905. { type duplicate$ empty$
  906. 'pop$
  907. { swap$ pop$
  908. "t" change.case$ "type" bibinfo.check
  909. }
  910. if$
  911. }
  912. FUNCTION {format.tr.number}
  913. { number "number" bibinfo.check
  914. type duplicate$ empty$
  915. { pop$ bbl.techrep }
  916. 'skip$
  917. if$
  918. "type" bibinfo.check
  919. swap$ duplicate$ empty$
  920. { pop$ "t" change.case$ }
  921. { tie.or.space.prefix * * }
  922. if$
  923. }
  924. FUNCTION {format.article.crossref}
  925. {
  926. word.in
  927. " \cite{" * crossref * "}" *
  928. }
  929. FUNCTION {format.book.crossref}
  930. { volume duplicate$ empty$
  931. { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
  932. pop$ word.in
  933. }
  934. { bbl.volume
  935. capitalize
  936. swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
  937. }
  938. if$
  939. " \cite{" * crossref * "}" *
  940. }
  941. FUNCTION {format.incoll.inproc.crossref}
  942. {
  943. word.in
  944. " \cite{" * crossref * "}" *
  945. }
  946. FUNCTION {format.org.or.pub}
  947. { 't :=
  948. ""
  949. address empty$ t empty$ and
  950. 'skip$
  951. {
  952. t empty$
  953. { address "address" bibinfo.check *
  954. }
  955. { t *
  956. address empty$
  957. 'skip$
  958. { ", " * address "address" bibinfo.check * }
  959. if$
  960. }
  961. if$
  962. }
  963. if$
  964. }
  965. FUNCTION {format.publisher.address}
  966. { publisher "publisher" bibinfo.warn format.org.or.pub
  967. }
  968. FUNCTION {format.organization.address}
  969. { organization "organization" bibinfo.check format.org.or.pub
  970. }
  971. FUNCTION {article}
  972. { output.bibitem
  973. format.authors "author" output.check
  974. author format.key output
  975. format.date "year" output.check
  976. date.block
  977. format.title "title" output.check
  978. new.sentence
  979. crossref missing$
  980. {
  981. journal
  982. remove.dots
  983. "journal" bibinfo.check
  984. "journal" output.check
  985. add.blank
  986. format.vol.num.pages output
  987. }
  988. { format.article.crossref output.nonnull
  989. format.pages output
  990. }
  991. if$
  992. format.doi output
  993. format.url output
  994. format.note output
  995. format.eprint output
  996. fin.entry
  997. }
  998. FUNCTION {book}
  999. { output.bibitem
  1000. author empty$
  1001. { format.editors "author and editor" output.check
  1002. editor format.key output
  1003. add.blank
  1004. }
  1005. { format.authors output.nonnull
  1006. crossref missing$
  1007. { "author and editor" editor either.or.check }
  1008. 'skip$
  1009. if$
  1010. }
  1011. if$
  1012. format.date "year" output.check
  1013. date.block
  1014. format.btitle "title" output.check
  1015. crossref missing$
  1016. { format.bvolume output
  1017. format.edition output
  1018. new.sentence
  1019. format.number.series output
  1020. format.publisher.address output
  1021. }
  1022. {
  1023. new.sentence
  1024. format.book.crossref output.nonnull
  1025. }
  1026. if$
  1027. format.doi output
  1028. format.url output
  1029. format.note output
  1030. format.eprint output
  1031. fin.entry
  1032. }
  1033. FUNCTION {booklet}
  1034. { output.bibitem
  1035. format.authors output
  1036. author format.key output
  1037. format.date "year" output.check
  1038. date.block
  1039. format.title "title" output.check
  1040. new.sentence
  1041. howpublished "howpublished" bibinfo.check output
  1042. address "address" bibinfo.check output
  1043. format.doi output
  1044. format.url output
  1045. format.note output
  1046. format.eprint output
  1047. fin.entry
  1048. }
  1049. FUNCTION {inbook}
  1050. { output.bibitem
  1051. author empty$
  1052. { format.editors "author and editor" output.check
  1053. editor format.key output
  1054. }
  1055. { format.authors output.nonnull
  1056. crossref missing$
  1057. { "author and editor" editor either.or.check }
  1058. 'skip$
  1059. if$
  1060. }
  1061. if$
  1062. format.date "year" output.check
  1063. date.block
  1064. format.btitle "title" output.check
  1065. crossref missing$
  1066. {
  1067. format.bvolume output
  1068. format.edition output
  1069. format.publisher.address output
  1070. format.chapter.pages "chapter and pages" output.check
  1071. new.sentence
  1072. format.number.series output
  1073. }
  1074. {
  1075. format.chapter.pages "chapter and pages" output.check
  1076. new.sentence
  1077. format.book.crossref output.nonnull
  1078. }
  1079. if$
  1080. format.doi output
  1081. format.url output
  1082. format.note output
  1083. format.eprint output
  1084. fin.entry
  1085. }
  1086. FUNCTION {incollection}
  1087. { output.bibitem
  1088. format.authors "author" output.check
  1089. author format.key output
  1090. format.date "year" output.check
  1091. date.block
  1092. format.title "title" output.check
  1093. new.sentence
  1094. crossref missing$
  1095. { format.in.ed.booktitle "booktitle" output.check
  1096. format.bvolume output
  1097. format.edition output
  1098. format.number.series output
  1099. format.publisher.address output
  1100. format.chapter.pages output
  1101. }
  1102. { format.incoll.inproc.crossref output.nonnull
  1103. format.chapter.pages output
  1104. }
  1105. if$
  1106. format.doi output
  1107. format.url output
  1108. format.note output
  1109. format.eprint output
  1110. fin.entry
  1111. }
  1112. FUNCTION {inproceedings}
  1113. { output.bibitem
  1114. format.authors "author" output.check
  1115. author format.key output
  1116. format.date "year" output.check
  1117. date.block
  1118. format.title "title" output.check
  1119. new.sentence
  1120. crossref missing$
  1121. { format.in.ed.booktitle "booktitle" output.check
  1122. publisher empty$
  1123. { format.organization.address output }
  1124. { organization "organization" bibinfo.check output
  1125. format.publisher.address output
  1126. }
  1127. if$
  1128. format.bvolume output
  1129. format.number.series output
  1130. format.pages output
  1131. }
  1132. { format.incoll.inproc.crossref output.nonnull
  1133. format.pages output
  1134. }
  1135. if$
  1136. format.doi output
  1137. format.url output
  1138. format.note output
  1139. format.eprint output
  1140. fin.entry
  1141. }
  1142. FUNCTION {conference} { inproceedings }
  1143. FUNCTION {manual}
  1144. { output.bibitem
  1145. format.authors output
  1146. author format.key output
  1147. format.date "year" output.check
  1148. date.block
  1149. format.btitle "title" output.check
  1150. new.sentence
  1151. organization "organization" bibinfo.check output
  1152. address "address" bibinfo.check output
  1153. format.edition output
  1154. format.doi output
  1155. format.url output
  1156. format.note output
  1157. format.eprint output
  1158. fin.entry
  1159. }
  1160. FUNCTION {mastersthesis}
  1161. { output.bibitem
  1162. format.authors "author" output.check
  1163. author format.key output
  1164. format.date "year" output.check
  1165. date.block
  1166. format.title
  1167. "title" output.check
  1168. new.sentence
  1169. bbl.mthesis format.thesis.type output.nonnull
  1170. school "school" bibinfo.warn output
  1171. address "address" bibinfo.check output
  1172. format.doi output
  1173. format.url output
  1174. format.note output
  1175. format.eprint output
  1176. fin.entry
  1177. }
  1178. FUNCTION {misc}
  1179. { output.bibitem
  1180. format.authors output
  1181. author format.key output
  1182. format.date "year" output.check
  1183. date.block
  1184. format.title output
  1185. new.sentence
  1186. howpublished "howpublished" bibinfo.check output
  1187. format.doi output
  1188. format.url output
  1189. format.note output
  1190. format.eprint output
  1191. fin.entry
  1192. }
  1193. FUNCTION {phdthesis}
  1194. { output.bibitem
  1195. format.authors "author" output.check
  1196. author format.key output
  1197. format.date "year" output.check
  1198. date.block
  1199. format.title
  1200. "title" output.check
  1201. new.sentence
  1202. bbl.phdthesis format.thesis.type output.nonnull
  1203. school "school" bibinfo.warn output
  1204. address "address" bibinfo.check output
  1205. format.doi output
  1206. format.url output
  1207. format.note output
  1208. format.eprint output
  1209. fin.entry
  1210. }
  1211. FUNCTION {proceedings}
  1212. { output.bibitem
  1213. format.editors output
  1214. editor format.key output
  1215. format.date "year" output.check
  1216. date.block
  1217. format.btitle "title" output.check
  1218. format.bvolume output
  1219. format.number.series output
  1220. publisher empty$
  1221. { format.organization.address output }
  1222. { organization "organization" bibinfo.check output
  1223. format.publisher.address output
  1224. }
  1225. if$
  1226. format.doi output
  1227. format.url output
  1228. format.note output
  1229. format.eprint output
  1230. fin.entry
  1231. }
  1232. FUNCTION {techreport}
  1233. { output.bibitem
  1234. format.authors "author" output.check
  1235. author format.key output
  1236. format.date "year" output.check
  1237. date.block
  1238. format.title
  1239. "title" output.check
  1240. new.sentence
  1241. format.tr.number output.nonnull
  1242. institution "institution" bibinfo.warn output
  1243. address "address" bibinfo.check output
  1244. format.doi output
  1245. format.url output
  1246. format.note output
  1247. format.eprint output
  1248. fin.entry
  1249. }
  1250. FUNCTION {unpublished}
  1251. { output.bibitem
  1252. format.authors "author" output.check
  1253. author format.key output
  1254. format.date "year" output.check
  1255. date.block
  1256. format.title "title" output.check
  1257. format.doi output
  1258. format.url output
  1259. format.note "note" output.check
  1260. format.eprint output
  1261. fin.entry
  1262. }
  1263. FUNCTION {default.type} { misc }
  1264. READ
  1265. FUNCTION {sortify}
  1266. { purify$
  1267. "l" change.case$
  1268. }
  1269. INTEGERS { len }
  1270. FUNCTION {chop.word}
  1271. { 's :=
  1272. 'len :=
  1273. s #1 len substring$ =
  1274. { s len #1 + global.max$ substring$ }
  1275. 's
  1276. if$
  1277. }
  1278. FUNCTION {format.lab.names}
  1279. { 's :=
  1280. "" 't :=
  1281. s #1 "{vv~}{ll}" format.name$
  1282. s num.names$ duplicate$
  1283. #2 >
  1284. { pop$
  1285. " " * bbl.etal *
  1286. }
  1287. { #2 <
  1288. 'skip$
  1289. { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  1290. {
  1291. " " * bbl.etal *
  1292. }
  1293. { bbl.and space.word * s #2 "{vv~}{ll}" format.name$
  1294. * }
  1295. if$
  1296. }
  1297. if$
  1298. }
  1299. if$
  1300. }
  1301. FUNCTION {author.key.label}
  1302. { author empty$
  1303. { key empty$
  1304. { cite$ #1 #3 substring$ }
  1305. 'key
  1306. if$
  1307. }
  1308. { author format.lab.names }
  1309. if$
  1310. }
  1311. FUNCTION {author.editor.key.label}
  1312. { author empty$
  1313. { editor empty$
  1314. { key empty$
  1315. { cite$ #1 #3 substring$ }
  1316. 'key
  1317. if$
  1318. }
  1319. { editor format.lab.names }
  1320. if$
  1321. }
  1322. { author format.lab.names }
  1323. if$
  1324. }
  1325. FUNCTION {editor.key.label}
  1326. { editor empty$
  1327. { key empty$
  1328. { cite$ #1 #3 substring$ }
  1329. 'key
  1330. if$
  1331. }
  1332. { editor format.lab.names }
  1333. if$
  1334. }
  1335. FUNCTION {calc.short.authors}
  1336. { type$ "book" =
  1337. type$ "inbook" =
  1338. or
  1339. 'author.editor.key.label
  1340. { type$ "proceedings" =
  1341. 'editor.key.label
  1342. 'author.key.label
  1343. if$
  1344. }
  1345. if$
  1346. 'short.list :=
  1347. }
  1348. FUNCTION {calc.label}
  1349. { calc.short.authors
  1350. short.list
  1351. "("
  1352. *
  1353. year duplicate$ empty$
  1354. { pop$ "????" }
  1355. 'skip$
  1356. if$
  1357. *
  1358. 'label :=
  1359. }
  1360. FUNCTION {sort.format.names}
  1361. { 's :=
  1362. #1 'nameptr :=
  1363. ""
  1364. s num.names$ 'numnames :=
  1365. numnames 'namesleft :=
  1366. { namesleft #0 > }
  1367. { s nameptr
  1368. "{ll{ }}{ f{ }}{ jj{ }}"
  1369. format.name$ 't :=
  1370. nameptr #1 >
  1371. {
  1372. " " *
  1373. namesleft #1 = t "others" = and
  1374. { "zzzzz" * }
  1375. { numnames #2 > nameptr #2 = and
  1376. { "zz" * year field.or.null * " " * }
  1377. 'skip$
  1378. if$
  1379. t sortify *
  1380. }
  1381. if$
  1382. }
  1383. { t sortify * }
  1384. if$
  1385. nameptr #1 + 'nameptr :=
  1386. namesleft #1 - 'namesleft :=
  1387. }
  1388. while$
  1389. }
  1390. FUNCTION {sort.format.title}
  1391. { 't :=
  1392. "A " #2
  1393. "An " #3
  1394. "The " #4 t chop.word
  1395. chop.word
  1396. chop.word
  1397. sortify
  1398. #1 global.max$ substring$
  1399. }
  1400. FUNCTION {author.sort}
  1401. { author empty$
  1402. { key empty$
  1403. { "to sort, need author or key in " cite$ * warning$
  1404. ""
  1405. }
  1406. { key sortify }
  1407. if$
  1408. }
  1409. { author sort.format.names }
  1410. if$
  1411. }
  1412. FUNCTION {author.editor.sort}
  1413. { author empty$
  1414. { editor empty$
  1415. { key empty$
  1416. { "to sort, need author, editor, or key in " cite$ * warning$
  1417. ""
  1418. }
  1419. { key sortify }
  1420. if$
  1421. }
  1422. { editor sort.format.names }
  1423. if$
  1424. }
  1425. { author sort.format.names }
  1426. if$
  1427. }
  1428. FUNCTION {editor.sort}
  1429. { editor empty$
  1430. { key empty$
  1431. { "to sort, need editor or key in " cite$ * warning$
  1432. ""
  1433. }
  1434. { key sortify }
  1435. if$
  1436. }
  1437. { editor sort.format.names }
  1438. if$
  1439. }
  1440. FUNCTION {presort}
  1441. { calc.label
  1442. label sortify
  1443. " "
  1444. *
  1445. type$ "book" =
  1446. type$ "inbook" =
  1447. or
  1448. 'author.editor.sort
  1449. { type$ "proceedings" =
  1450. 'editor.sort
  1451. 'author.sort
  1452. if$
  1453. }
  1454. if$
  1455. #1 entry.max$ substring$
  1456. 'sort.label :=
  1457. sort.label
  1458. *
  1459. " "
  1460. *
  1461. title field.or.null
  1462. sort.format.title
  1463. *
  1464. #1 entry.max$ substring$
  1465. 'sort.key$ :=
  1466. }
  1467. ITERATE {presort}
  1468. SORT
  1469. STRINGS { last.label next.extra }
  1470. INTEGERS { last.extra.num number.label }
  1471. FUNCTION {initialize.extra.label.stuff}
  1472. { #0 int.to.chr$ 'last.label :=
  1473. "" 'next.extra :=
  1474. #0 'last.extra.num :=
  1475. #0 'number.label :=
  1476. }
  1477. FUNCTION {forward.pass}
  1478. { last.label label =
  1479. { last.extra.num #1 + 'last.extra.num :=
  1480. last.extra.num int.to.chr$ 'extra.label :=
  1481. }
  1482. { "a" chr.to.int$ 'last.extra.num :=
  1483. "" 'extra.label :=
  1484. label 'last.label :=
  1485. }
  1486. if$
  1487. number.label #1 + 'number.label :=
  1488. }
  1489. FUNCTION {reverse.pass}
  1490. { next.extra "b" =
  1491. { "a" 'extra.label := }
  1492. 'skip$
  1493. if$
  1494. extra.label 'next.extra :=
  1495. extra.label
  1496. duplicate$ empty$
  1497. 'skip$
  1498. { "{\natexlab{" swap$ * "}}" * }
  1499. if$
  1500. 'extra.label :=
  1501. label extra.label * 'label :=
  1502. }
  1503. EXECUTE {initialize.extra.label.stuff}
  1504. ITERATE {forward.pass}
  1505. REVERSE {reverse.pass}
  1506. FUNCTION {bib.sort.order}
  1507. { sort.label
  1508. " "
  1509. *
  1510. year field.or.null sortify
  1511. *
  1512. " "
  1513. *
  1514. title field.or.null
  1515. sort.format.title
  1516. *
  1517. #1 entry.max$ substring$
  1518. 'sort.key$ :=
  1519. }
  1520. ITERATE {bib.sort.order}
  1521. SORT
  1522. FUNCTION {begin.bib}
  1523. { preamble$ empty$
  1524. 'skip$
  1525. { preamble$ write$ newline$ }
  1526. if$
  1527. "\begin{thebibliography}{" number.label int.to.str$ * "}" *
  1528. write$ newline$
  1529. "\providecommand{\natexlab}[1]{#1}"
  1530. write$ newline$
  1531. "\providecommand{\url}[1]{{#1}}"
  1532. write$ newline$
  1533. "\providecommand{\urlprefix}{URL }"
  1534. write$ newline$
  1535. "\expandafter\ifx\csname urlstyle\endcsname\relax"
  1536. write$ newline$
  1537. " \providecommand{\doi}[1]{DOI~\discretionary{}{}{}#1}\else"
  1538. write$ newline$
  1539. " \providecommand{\doi}{DOI~\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi"
  1540. write$ newline$
  1541. "\providecommand{\eprint}[2][]{\url{#2}}"
  1542. write$ newline$
  1543. }
  1544. EXECUTE {begin.bib}
  1545. EXECUTE {init.state.consts}
  1546. ITERATE {call.type$}
  1547. FUNCTION {end.bib}
  1548. { newline$
  1549. "\end{thebibliography}" write$ newline$
  1550. }
  1551. EXECUTE {end.bib}
  1552. %% End of customized bst file
  1553. %%
  1554. %% End of file `spbasic.bst'.