sageh.bst 30 KB

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