You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1124 lines
19 KiB

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