latex8.bst 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113
  1. % ---------------------------------------------------------------
  2. %
  3. % by Paolo.Ienne@di.epfl.ch
  4. %
  5. % ---------------------------------------------------------------
  6. %
  7. % no guarantee is given that the format corresponds perfectly to
  8. % IEEE 8.5" x 11" Proceedings, but most features should be ok.
  9. %
  10. % ---------------------------------------------------------------
  11. %
  12. % `latex8' from BibTeX standard bibliography style `abbrv'
  13. % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
  14. % Copyright (C) 1985, all rights reserved.
  15. % Copying of this file is authorized only if either
  16. % (1) you make absolutely no changes to your copy, including name, or
  17. % (2) if you do make changes, you name it something other than
  18. % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
  19. % This restriction helps ensure that all standard styles are identical.
  20. % The file btxbst.doc has the documentation for this style.
  21. ENTRY
  22. { address
  23. author
  24. booktitle
  25. chapter
  26. edition
  27. editor
  28. howpublished
  29. institution
  30. journal
  31. key
  32. month
  33. note
  34. number
  35. organization
  36. pages
  37. publisher
  38. school
  39. series
  40. title
  41. type
  42. volume
  43. year
  44. }
  45. {}
  46. { label }
  47. INTEGERS { output.state before.all mid.sentence after.sentence after.block }
  48. FUNCTION {init.state.consts}
  49. { #0 'before.all :=
  50. #1 'mid.sentence :=
  51. #2 'after.sentence :=
  52. #3 'after.block :=
  53. }
  54. STRINGS { s t }
  55. FUNCTION {output.nonnull}
  56. { 's :=
  57. output.state mid.sentence =
  58. { ", " * write$ }
  59. { output.state after.block =
  60. { add.period$ write$
  61. newline$
  62. "\newblock " write$
  63. }
  64. { output.state before.all =
  65. 'write$
  66. { add.period$ " " * write$ }
  67. if$
  68. }
  69. if$
  70. mid.sentence 'output.state :=
  71. }
  72. if$
  73. s
  74. }
  75. FUNCTION {output}
  76. { duplicate$ empty$
  77. 'pop$
  78. 'output.nonnull
  79. if$
  80. }
  81. FUNCTION {output.check}
  82. { 't :=
  83. duplicate$ empty$
  84. { pop$ "empty " t * " in " * cite$ * warning$ }
  85. 'output.nonnull
  86. if$
  87. }
  88. FUNCTION {output.bibitem}
  89. { newline$
  90. "\bibitem{" write$
  91. cite$ write$
  92. "}" write$
  93. newline$
  94. ""
  95. before.all 'output.state :=
  96. }
  97. FUNCTION {fin.entry}
  98. { add.period$
  99. write$
  100. newline$
  101. }
  102. FUNCTION {new.block}
  103. { output.state before.all =
  104. 'skip$
  105. { after.block 'output.state := }
  106. if$
  107. }
  108. FUNCTION {new.sentence}
  109. { output.state after.block =
  110. 'skip$
  111. { output.state before.all =
  112. 'skip$
  113. { after.sentence 'output.state := }
  114. if$
  115. }
  116. if$
  117. }
  118. FUNCTION {not}
  119. { { #0 }
  120. { #1 }
  121. if$
  122. }
  123. FUNCTION {and}
  124. { 'skip$
  125. { pop$ #0 }
  126. if$
  127. }
  128. FUNCTION {or}
  129. { { pop$ #1 }
  130. 'skip$
  131. if$
  132. }
  133. FUNCTION {new.block.checka}
  134. { empty$
  135. 'skip$
  136. 'new.block
  137. if$
  138. }
  139. FUNCTION {new.block.checkb}
  140. { empty$
  141. swap$ empty$
  142. and
  143. 'skip$
  144. 'new.block
  145. if$
  146. }
  147. FUNCTION {new.sentence.checka}
  148. { empty$
  149. 'skip$
  150. 'new.sentence
  151. if$
  152. }
  153. FUNCTION {new.sentence.checkb}
  154. { empty$
  155. swap$ empty$
  156. and
  157. 'skip$
  158. 'new.sentence
  159. if$
  160. }
  161. FUNCTION {field.or.null}
  162. { duplicate$ empty$
  163. { pop$ "" }
  164. 'skip$
  165. if$
  166. }
  167. FUNCTION {emphasize}
  168. { duplicate$ empty$
  169. { pop$ "" }
  170. { "{\em " swap$ * "}" * }
  171. if$
  172. }
  173. INTEGERS { nameptr namesleft numnames }
  174. FUNCTION {format.names}
  175. { 's :=
  176. #1 'nameptr :=
  177. s num.names$ 'numnames :=
  178. numnames 'namesleft :=
  179. { namesleft #0 > }
  180. { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
  181. nameptr #1 >
  182. { namesleft #1 >
  183. { ", " * t * }
  184. { numnames #2 >
  185. { "," * }
  186. 'skip$
  187. if$
  188. t "others" =
  189. { " et~al." * }
  190. { " and " * t * }
  191. if$
  192. }
  193. if$
  194. }
  195. 't
  196. if$
  197. nameptr #1 + 'nameptr :=
  198. namesleft #1 - 'namesleft :=
  199. }
  200. while$
  201. }
  202. FUNCTION {format.authors}
  203. { author empty$
  204. { "" }
  205. { author format.names }
  206. if$
  207. }
  208. FUNCTION {format.editors}
  209. { editor empty$
  210. { "" }
  211. { editor format.names
  212. editor num.names$ #1 >
  213. { ", editors" * }
  214. { ", editor" * }
  215. if$
  216. }
  217. if$
  218. }
  219. FUNCTION {format.title}
  220. { title empty$
  221. { "" }
  222. { title "t" change.case$ }
  223. if$
  224. }
  225. FUNCTION {n.dashify}
  226. { 't :=
  227. ""
  228. { t empty$ not }
  229. { t #1 #1 substring$ "-" =
  230. { t #1 #2 substring$ "--" = not
  231. { "--" *
  232. t #2 global.max$ substring$ 't :=
  233. }
  234. { { t #1 #1 substring$ "-" = }
  235. { "-" *
  236. t #2 global.max$ substring$ 't :=
  237. }
  238. while$
  239. }
  240. if$
  241. }
  242. { t #1 #1 substring$ *
  243. t #2 global.max$ substring$ 't :=
  244. }
  245. if$
  246. }
  247. while$
  248. }
  249. FUNCTION {format.date}
  250. { year empty$
  251. { month empty$
  252. { "" }
  253. { "there's a month but no year in " cite$ * warning$
  254. month
  255. }
  256. if$
  257. }
  258. { month empty$
  259. 'year
  260. { month " " * year * }
  261. if$
  262. }
  263. if$
  264. }
  265. FUNCTION {format.btitle}
  266. { title emphasize
  267. }
  268. FUNCTION {tie.or.space.connect}
  269. { duplicate$ text.length$ #3 <
  270. { "~" }
  271. { " " }
  272. if$
  273. swap$ * *
  274. }
  275. FUNCTION {either.or.check}
  276. { empty$
  277. 'pop$
  278. { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  279. if$
  280. }
  281. FUNCTION {format.bvolume}
  282. { volume empty$
  283. { "" }
  284. { "volume" volume tie.or.space.connect
  285. series empty$
  286. 'skip$
  287. { " of " * series emphasize * }
  288. if$
  289. "volume and number" number either.or.check
  290. }
  291. if$
  292. }
  293. FUNCTION {format.number.series}
  294. { volume empty$
  295. { number empty$
  296. { series field.or.null }
  297. { output.state mid.sentence =
  298. { "number" }
  299. { "Number" }
  300. if$
  301. number tie.or.space.connect
  302. series empty$
  303. { "there's a number but no series in " cite$ * warning$ }
  304. { " in " * series * }
  305. if$
  306. }
  307. if$
  308. }
  309. { "" }
  310. if$
  311. }
  312. FUNCTION {format.edition}
  313. { edition empty$
  314. { "" }
  315. { output.state mid.sentence =
  316. { edition "l" change.case$ " edition" * }
  317. { edition "t" change.case$ " edition" * }
  318. if$
  319. }
  320. if$
  321. }
  322. INTEGERS { multiresult }
  323. FUNCTION {multi.page.check}
  324. { 't :=
  325. #0 'multiresult :=
  326. { multiresult not
  327. t empty$ not
  328. and
  329. }
  330. { t #1 #1 substring$
  331. duplicate$ "-" =
  332. swap$ duplicate$ "," =
  333. swap$ "+" =
  334. or or
  335. { #1 'multiresult := }
  336. { t #2 global.max$ substring$ 't := }
  337. if$
  338. }
  339. while$
  340. multiresult
  341. }
  342. FUNCTION {format.pages}
  343. { pages empty$
  344. { "" }
  345. { pages multi.page.check
  346. { "pages" pages n.dashify tie.or.space.connect }
  347. { "page" pages tie.or.space.connect }
  348. if$
  349. }
  350. if$
  351. }
  352. FUNCTION {format.vol.num.pages}
  353. { volume field.or.null
  354. number empty$
  355. 'skip$
  356. { "(" number * ")" * *
  357. volume empty$
  358. { "there's a number but no volume in " cite$ * warning$ }
  359. 'skip$
  360. if$
  361. }
  362. if$
  363. pages empty$
  364. 'skip$
  365. { duplicate$ empty$
  366. { pop$ format.pages }
  367. { ":" * pages n.dashify * }
  368. if$
  369. }
  370. if$
  371. }
  372. FUNCTION {format.chapter.pages}
  373. { chapter empty$
  374. 'format.pages
  375. { type empty$
  376. { "chapter" }
  377. { type "l" change.case$ }
  378. if$
  379. chapter tie.or.space.connect
  380. pages empty$
  381. 'skip$
  382. { ", " * format.pages * }
  383. if$
  384. }
  385. if$
  386. }
  387. FUNCTION {format.in.ed.booktitle}
  388. { booktitle empty$
  389. { "" }
  390. { editor empty$
  391. { "In " booktitle emphasize * }
  392. { "In " format.editors * ", " * booktitle emphasize * }
  393. if$
  394. }
  395. if$
  396. }
  397. FUNCTION {empty.misc.check}
  398. { author empty$ title empty$ howpublished empty$
  399. month empty$ year empty$ note empty$
  400. and and and and and
  401. key empty$ not and
  402. { "all relevant fields are empty in " cite$ * warning$ }
  403. 'skip$
  404. if$
  405. }
  406. FUNCTION {format.thesis.type}
  407. { type empty$
  408. 'skip$
  409. { pop$
  410. type "t" change.case$
  411. }
  412. if$
  413. }
  414. FUNCTION {format.tr.number}
  415. { type empty$
  416. { "Technical Report" }
  417. 'type
  418. if$
  419. number empty$
  420. { "t" change.case$ }
  421. { number tie.or.space.connect }
  422. if$
  423. }
  424. FUNCTION {format.article.crossref}
  425. { key empty$
  426. { journal empty$
  427. { "need key or journal for " cite$ * " to crossref " * crossref *
  428. warning$
  429. ""
  430. }
  431. { "In {\em " journal * "\/}" * }
  432. if$
  433. }
  434. { "In " key * }
  435. if$
  436. " \cite{" * crossref * "}" *
  437. }
  438. FUNCTION {format.crossref.editor}
  439. { editor #1 "{vv~}{ll}" format.name$
  440. editor num.names$ duplicate$
  441. #2 >
  442. { pop$ " et~al." * }
  443. { #2 <
  444. 'skip$
  445. { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  446. { " et~al." * }
  447. { " and " * editor #2 "{vv~}{ll}" format.name$ * }
  448. if$
  449. }
  450. if$
  451. }
  452. if$
  453. }
  454. FUNCTION {format.book.crossref}
  455. { volume empty$
  456. { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
  457. "In "
  458. }
  459. { "Volume" volume tie.or.space.connect
  460. " of " *
  461. }
  462. if$
  463. editor empty$
  464. editor field.or.null author field.or.null =
  465. or
  466. { key empty$
  467. { series empty$
  468. { "need editor, key, or series for " cite$ * " to crossref " *
  469. crossref * warning$
  470. "" *
  471. }
  472. { "{\em " * series * "\/}" * }
  473. if$
  474. }
  475. { key * }
  476. if$
  477. }
  478. { format.crossref.editor * }
  479. if$
  480. " \cite{" * crossref * "}" *
  481. }
  482. FUNCTION {format.incoll.inproc.crossref}
  483. { editor empty$
  484. editor field.or.null author field.or.null =
  485. or
  486. { key empty$
  487. { booktitle empty$
  488. { "need editor, key, or booktitle for " cite$ * " to crossref " *
  489. crossref * warning$
  490. ""
  491. }
  492. { "In {\em " booktitle * "\/}" * }
  493. if$
  494. }
  495. { "In " key * }
  496. if$
  497. }
  498. { "In " format.crossref.editor * }
  499. if$
  500. " \cite{" * crossref * "}" *
  501. }
  502. FUNCTION {article}
  503. { output.bibitem
  504. format.authors "author" output.check
  505. new.block
  506. format.title "title" output.check
  507. new.block
  508. crossref missing$
  509. { journal emphasize "journal" output.check
  510. format.vol.num.pages output
  511. format.date "year" output.check
  512. }
  513. { format.article.crossref output.nonnull
  514. format.pages output
  515. }
  516. if$
  517. new.block
  518. note output
  519. fin.entry
  520. }
  521. FUNCTION {book}
  522. { output.bibitem
  523. author empty$
  524. { format.editors "author and editor" output.check }
  525. { format.authors output.nonnull
  526. crossref missing$
  527. { "author and editor" editor either.or.check }
  528. 'skip$
  529. if$
  530. }
  531. if$
  532. new.block
  533. format.btitle "title" output.check
  534. crossref missing$
  535. { format.bvolume output
  536. new.block
  537. format.number.series output
  538. new.sentence
  539. publisher "publisher" output.check
  540. address output
  541. }
  542. { new.block
  543. format.book.crossref output.nonnull
  544. }
  545. if$
  546. format.edition output
  547. format.date "year" output.check
  548. new.block
  549. note output
  550. fin.entry
  551. }
  552. FUNCTION {booklet}
  553. { output.bibitem
  554. format.authors output
  555. new.block
  556. format.title "title" output.check
  557. howpublished address new.block.checkb
  558. howpublished output
  559. address output
  560. format.date output
  561. new.block
  562. note output
  563. fin.entry
  564. }
  565. FUNCTION {inbook}
  566. { output.bibitem
  567. author empty$
  568. { format.editors "author and editor" output.check }
  569. { format.authors output.nonnull
  570. crossref missing$
  571. { "author and editor" editor either.or.check }
  572. 'skip$
  573. if$
  574. }
  575. if$
  576. new.block
  577. format.btitle "title" output.check
  578. crossref missing$
  579. { format.bvolume output
  580. format.chapter.pages "chapter and pages" output.check
  581. new.block
  582. format.number.series output
  583. new.sentence
  584. publisher "publisher" output.check
  585. address output
  586. }
  587. { format.chapter.pages "chapter and pages" output.check
  588. new.block
  589. format.book.crossref output.nonnull
  590. }
  591. if$
  592. format.edition output
  593. format.date "year" output.check
  594. new.block
  595. note output
  596. fin.entry
  597. }
  598. FUNCTION {incollection}
  599. { output.bibitem
  600. format.authors "author" output.check
  601. new.block
  602. format.title "title" output.check
  603. new.block
  604. crossref missing$
  605. { format.in.ed.booktitle "booktitle" output.check
  606. format.bvolume output
  607. format.number.series output
  608. format.chapter.pages output
  609. new.sentence
  610. publisher "publisher" output.check
  611. address output
  612. format.edition output
  613. format.date "year" output.check
  614. }
  615. { format.incoll.inproc.crossref output.nonnull
  616. format.chapter.pages output
  617. }
  618. if$
  619. new.block
  620. note output
  621. fin.entry
  622. }
  623. FUNCTION {inproceedings}
  624. { output.bibitem
  625. format.authors "author" output.check
  626. new.block
  627. format.title "title" output.check
  628. new.block
  629. crossref missing$
  630. { format.in.ed.booktitle "booktitle" output.check
  631. format.bvolume output
  632. format.number.series output
  633. format.pages output
  634. address empty$
  635. { organization publisher new.sentence.checkb
  636. organization output
  637. publisher output
  638. format.date "year" output.check
  639. }
  640. { address output.nonnull
  641. format.date "year" output.check
  642. new.sentence
  643. organization output
  644. publisher output
  645. }
  646. if$
  647. }
  648. { format.incoll.inproc.crossref output.nonnull
  649. format.pages output
  650. }
  651. if$
  652. new.block
  653. note output
  654. fin.entry
  655. }
  656. FUNCTION {conference} { inproceedings }
  657. FUNCTION {manual}
  658. { output.bibitem
  659. author empty$
  660. { organization empty$
  661. 'skip$
  662. { organization output.nonnull
  663. address output
  664. }
  665. if$
  666. }
  667. { format.authors output.nonnull }
  668. if$
  669. new.block
  670. format.btitle "title" output.check
  671. author empty$
  672. { organization empty$
  673. { address new.block.checka
  674. address output
  675. }
  676. 'skip$
  677. if$
  678. }
  679. { organization address new.block.checkb
  680. organization output
  681. address output
  682. }
  683. if$
  684. format.edition output
  685. format.date output
  686. new.block
  687. note output
  688. fin.entry
  689. }
  690. FUNCTION {mastersthesis}
  691. { output.bibitem
  692. format.authors "author" output.check
  693. new.block
  694. format.title "title" output.check
  695. new.block
  696. "Master's thesis" format.thesis.type output.nonnull
  697. school "school" output.check
  698. address output
  699. format.date "year" output.check
  700. new.block
  701. note output
  702. fin.entry
  703. }
  704. FUNCTION {misc}
  705. { output.bibitem
  706. format.authors output
  707. title howpublished new.block.checkb
  708. format.title output
  709. howpublished new.block.checka
  710. howpublished output
  711. format.date output
  712. new.block
  713. note output
  714. fin.entry
  715. empty.misc.check
  716. }
  717. FUNCTION {phdthesis}
  718. { output.bibitem
  719. format.authors "author" output.check
  720. new.block
  721. format.btitle "title" output.check
  722. new.block
  723. "PhD thesis" format.thesis.type output.nonnull
  724. school "school" output.check
  725. address output
  726. format.date "year" output.check
  727. new.block
  728. note output
  729. fin.entry
  730. }
  731. FUNCTION {proceedings}
  732. { output.bibitem
  733. editor empty$
  734. { organization output }
  735. { format.editors output.nonnull }
  736. if$
  737. new.block
  738. format.btitle "title" output.check
  739. format.bvolume output
  740. format.number.series output
  741. address empty$
  742. { editor empty$
  743. { publisher new.sentence.checka }
  744. { organization publisher new.sentence.checkb
  745. organization output
  746. }
  747. if$
  748. publisher output
  749. format.date "year" output.check
  750. }
  751. { address output.nonnull
  752. format.date "year" output.check
  753. new.sentence
  754. editor empty$
  755. 'skip$
  756. { organization output }
  757. if$
  758. publisher output
  759. }
  760. if$
  761. new.block
  762. note output
  763. fin.entry
  764. }
  765. FUNCTION {techreport}
  766. { output.bibitem
  767. format.authors "author" output.check
  768. new.block
  769. format.title "title" output.check
  770. new.block
  771. format.tr.number output.nonnull
  772. institution "institution" output.check
  773. address output
  774. format.date "year" output.check
  775. new.block
  776. note output
  777. fin.entry
  778. }
  779. FUNCTION {unpublished}
  780. { output.bibitem
  781. format.authors "author" output.check
  782. new.block
  783. format.title "title" output.check
  784. new.block
  785. note "note" output.check
  786. format.date output
  787. fin.entry
  788. }
  789. FUNCTION {default.type} { misc }
  790. MACRO {jan} {"Jan."}
  791. MACRO {feb} {"Feb."}
  792. MACRO {mar} {"Mar."}
  793. MACRO {apr} {"Apr."}
  794. MACRO {may} {"May"}
  795. MACRO {jun} {"June"}
  796. MACRO {jul} {"July"}
  797. MACRO {aug} {"Aug."}
  798. MACRO {sep} {"Sept."}
  799. MACRO {oct} {"Oct."}
  800. MACRO {nov} {"Nov."}
  801. MACRO {dec} {"Dec."}
  802. MACRO {acmcs} {"ACM Comput. Surv."}
  803. MACRO {acta} {"Acta Inf."}
  804. MACRO {cacm} {"Commun. ACM"}
  805. MACRO {ibmjrd} {"IBM J. Res. Dev."}
  806. MACRO {ibmsj} {"IBM Syst.~J."}
  807. MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
  808. MACRO {ieeetc} {"IEEE Trans. Comput."}
  809. MACRO {ieeetcad}
  810. {"IEEE Trans. Comput.-Aided Design Integrated Circuits"}
  811. MACRO {ipl} {"Inf. Process. Lett."}
  812. MACRO {jacm} {"J.~ACM"}
  813. MACRO {jcss} {"J.~Comput. Syst. Sci."}
  814. MACRO {scp} {"Sci. Comput. Programming"}
  815. MACRO {sicomp} {"SIAM J. Comput."}
  816. MACRO {tocs} {"ACM Trans. Comput. Syst."}
  817. MACRO {tods} {"ACM Trans. Database Syst."}
  818. MACRO {tog} {"ACM Trans. Gr."}
  819. MACRO {toms} {"ACM Trans. Math. Softw."}
  820. MACRO {toois} {"ACM Trans. Office Inf. Syst."}
  821. MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."}
  822. MACRO {tcs} {"Theoretical Comput. Sci."}
  823. READ
  824. FUNCTION {sortify}
  825. { purify$
  826. "l" change.case$
  827. }
  828. INTEGERS { len }
  829. FUNCTION {chop.word}
  830. { 's :=
  831. 'len :=
  832. s #1 len substring$ =
  833. { s len #1 + global.max$ substring$ }
  834. 's
  835. if$
  836. }
  837. FUNCTION {sort.format.names}
  838. { 's :=
  839. #1 'nameptr :=
  840. ""
  841. s num.names$ 'numnames :=
  842. numnames 'namesleft :=
  843. { namesleft #0 > }
  844. { nameptr #1 >
  845. { " " * }
  846. 'skip$
  847. if$
  848. s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't :=
  849. nameptr numnames = t "others" = and
  850. { "et al" * }
  851. { t sortify * }
  852. if$
  853. nameptr #1 + 'nameptr :=
  854. namesleft #1 - 'namesleft :=
  855. }
  856. while$
  857. }
  858. FUNCTION {sort.format.title}
  859. { 't :=
  860. "A " #2
  861. "An " #3
  862. "The " #4 t chop.word
  863. chop.word
  864. chop.word
  865. sortify
  866. #1 global.max$ substring$
  867. }
  868. FUNCTION {author.sort}
  869. { author empty$
  870. { key empty$
  871. { "to sort, need author or key in " cite$ * warning$
  872. ""
  873. }
  874. { key sortify }
  875. if$
  876. }
  877. { author sort.format.names }
  878. if$
  879. }
  880. FUNCTION {author.editor.sort}
  881. { author empty$
  882. { editor empty$
  883. { key empty$
  884. { "to sort, need author, editor, or key in " cite$ * warning$
  885. ""
  886. }
  887. { key sortify }
  888. if$
  889. }
  890. { editor sort.format.names }
  891. if$
  892. }
  893. { author sort.format.names }
  894. if$
  895. }
  896. FUNCTION {author.organization.sort}
  897. { author empty$
  898. { organization empty$
  899. { key empty$
  900. { "to sort, need author, organization, or key in " cite$ * warning$
  901. ""
  902. }
  903. { key sortify }
  904. if$
  905. }
  906. { "The " #4 organization chop.word sortify }
  907. if$
  908. }
  909. { author sort.format.names }
  910. if$
  911. }
  912. FUNCTION {editor.organization.sort}
  913. { editor empty$
  914. { organization empty$
  915. { key empty$
  916. { "to sort, need editor, organization, or key in " cite$ * warning$
  917. ""
  918. }
  919. { key sortify }
  920. if$
  921. }
  922. { "The " #4 organization chop.word sortify }
  923. if$
  924. }
  925. { editor sort.format.names }
  926. if$
  927. }
  928. FUNCTION {presort}
  929. { type$ "book" =
  930. type$ "inbook" =
  931. or
  932. 'author.editor.sort
  933. { type$ "proceedings" =
  934. 'editor.organization.sort
  935. { type$ "manual" =
  936. 'author.organization.sort
  937. 'author.sort
  938. if$
  939. }
  940. if$
  941. }
  942. if$
  943. " "
  944. *
  945. year field.or.null sortify
  946. *
  947. " "
  948. *
  949. title field.or.null
  950. sort.format.title
  951. *
  952. #1 entry.max$ substring$
  953. 'sort.key$ :=
  954. }
  955. ITERATE {presort}
  956. SORT
  957. STRINGS { longest.label }
  958. INTEGERS { number.label longest.label.width }
  959. FUNCTION {initialize.longest.label}
  960. { "" 'longest.label :=
  961. #1 'number.label :=
  962. #0 'longest.label.width :=
  963. }
  964. FUNCTION {longest.label.pass}
  965. { number.label int.to.str$ 'label :=
  966. number.label #1 + 'number.label :=
  967. label width$ longest.label.width >
  968. { label 'longest.label :=
  969. label width$ 'longest.label.width :=
  970. }
  971. 'skip$
  972. if$
  973. }
  974. EXECUTE {initialize.longest.label}
  975. ITERATE {longest.label.pass}
  976. FUNCTION {begin.bib}
  977. { preamble$ empty$
  978. 'skip$
  979. { preamble$ write$ newline$ }
  980. if$
  981. "\begin{thebibliography}{" longest.label *
  982. "}\setlength{\itemsep}{-1ex}\small" * write$ newline$
  983. }
  984. EXECUTE {begin.bib}
  985. EXECUTE {init.state.consts}
  986. ITERATE {call.type$}
  987. FUNCTION {end.bib}
  988. { newline$
  989. "\end{thebibliography}" write$ newline$
  990. }
  991. EXECUTE {end.bib}
  992. % end of file latex8.bst
  993. % ---------------------------------------------------------------