3
0

splncs04.bst 31 KB

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