spmpsci.bst 29 KB

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