itmalpha.bst 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326
  1. % BibTeX style "itmalpha" derived from standard bibliography style `galpha'
  2. % $Id: itmalpha.bst,v 1.2 2005/01/24 13:12:54 bless Exp $
  3. % This style differs in the following:
  4. % Labels are formatted to have 4 characters for names at least:
  5. % One author: the first four letters of the last name
  6. % Two authors: the first two letters of their last name
  7. % Three authors: the first two letters of the first author´s last name and
  8. % the first letter of the following authors´ last name
  9. % Four authors: the first letter of each last name
  10. % More than four: the first letter of the last name of the first three and
  11. % a plus sign
  12. % "Seiten" was replaced by "S."
  13. % "Ausgabe" was replaced by "Auflage"
  14. % @Techreport now also uses an editor entry
  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 extra.label sort.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.nonnull.nocomma}
  78. { 's :=
  79. output.state mid.sentence =
  80. { " " * write$ }
  81. { output.state after.block =
  82. { add.period$ write$
  83. newline$
  84. "\newblock " write$
  85. }
  86. { output.state before.all =
  87. 'write$
  88. { add.period$ " " * write$ }
  89. if$
  90. }
  91. if$
  92. mid.sentence 'output.state :=
  93. }
  94. if$
  95. s
  96. }
  97. FUNCTION {output}
  98. { duplicate$ empty$
  99. 'pop$
  100. 'output.nonnull
  101. if$
  102. }
  103. FUNCTION {output.nocomma}
  104. { duplicate$ empty$
  105. 'pop$
  106. 'output.nonnull.nocomma
  107. if$
  108. }
  109. FUNCTION {output.check}
  110. { 't :=
  111. duplicate$ empty$
  112. { pop$ "empty " t * " in " * cite$ * warning$ }
  113. 'output.nonnull
  114. if$
  115. }
  116. FUNCTION {output.bibitem}
  117. { newline$
  118. "\bibitem[" write$
  119. label write$
  120. "]{" write$
  121. cite$ write$
  122. "}" write$
  123. newline$
  124. ""
  125. before.all 'output.state :=
  126. }
  127. FUNCTION {fin.entry}
  128. { add.period$
  129. write$
  130. newline$
  131. }
  132. FUNCTION {new.block}
  133. { output.state before.all =
  134. 'skip$
  135. { after.block 'output.state := }
  136. if$
  137. }
  138. FUNCTION {new.sentence}
  139. { output.state after.block =
  140. 'skip$
  141. { output.state before.all =
  142. 'skip$
  143. { after.sentence 'output.state := }
  144. if$
  145. }
  146. if$
  147. }
  148. FUNCTION {not}
  149. { { #0 }
  150. { #1 }
  151. if$
  152. }
  153. FUNCTION {and}
  154. { 'skip$
  155. { pop$ #0 }
  156. if$
  157. }
  158. FUNCTION {or}
  159. { { pop$ #1 }
  160. 'skip$
  161. if$
  162. }
  163. FUNCTION {new.block.checka}
  164. { empty$
  165. 'skip$
  166. 'new.block
  167. if$
  168. }
  169. FUNCTION {new.block.checkb}
  170. { empty$
  171. swap$ empty$
  172. and
  173. 'skip$
  174. 'new.block
  175. if$
  176. }
  177. FUNCTION {new.sentence.checka}
  178. { empty$
  179. 'skip$
  180. 'new.sentence
  181. if$
  182. }
  183. FUNCTION {new.sentence.checkb}
  184. { empty$
  185. swap$ empty$
  186. and
  187. 'skip$
  188. 'new.sentence
  189. if$
  190. }
  191. FUNCTION {field.or.null}
  192. { duplicate$ empty$
  193. { pop$ "" }
  194. 'skip$
  195. if$
  196. }
  197. FUNCTION {emphasize}
  198. { duplicate$ empty$
  199. { pop$ "" }
  200. { "{\em " swap$ * "}" * }
  201. if$
  202. }
  203. FUNCTION {boldface}
  204. { duplicate$ empty$
  205. { pop$ "" }
  206. { "{\bf " swap$ * "}" * }
  207. if$
  208. }
  209. INTEGERS { nameptr namesleft numnames }
  210. FUNCTION {format.names}
  211. { 's :=
  212. #1 'nameptr :=
  213. s num.names$ 'numnames :=
  214. numnames 'namesleft :=
  215. { namesleft #0 > }
  216. { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
  217. nameptr #1 >
  218. { namesleft #1 >
  219. { ", " * t * }
  220. { namesleft #2 >
  221. { "," * }
  222. 'skip$
  223. if$
  224. t "others" =
  225. { " und andere." * }
  226. { " und " * t * }
  227. if$
  228. }
  229. if$
  230. }
  231. 't
  232. if$
  233. nameptr #1 + 'nameptr :=
  234. namesleft #1 - 'namesleft :=
  235. }
  236. while$
  237. }
  238. FUNCTION {format.authors}
  239. { author empty$
  240. { "" }
  241. { author format.names }
  242. if$
  243. }
  244. FUNCTION {format.editors}
  245. { editor empty$
  246. { "" }
  247. { editor format.names
  248. editor num.names$ #1 >
  249. { " (Hrsg.)" * }
  250. { " (Hrsg.)" * }
  251. if$
  252. }
  253. if$
  254. }
  255. FUNCTION {format.title}
  256. { title empty$
  257. { "" }
  258. { title }
  259. if$
  260. }
  261. FUNCTION {n.dashify}
  262. { 't :=
  263. ""
  264. { t empty$ not }
  265. { t #1 #1 substring$ "-" =
  266. { t #1 #2 substring$ "--" = not
  267. { "--" *
  268. t #2 global.max$ substring$ 't :=
  269. }
  270. { { t #1 #1 substring$ "-" = }
  271. { "-" *
  272. t #2 global.max$ substring$ 't :=
  273. }
  274. while$
  275. }
  276. if$
  277. }
  278. { t #1 #1 substring$ *
  279. t #2 global.max$ substring$ 't :=
  280. }
  281. if$
  282. }
  283. while$
  284. }
  285. FUNCTION {format.date}
  286. { year empty$
  287. { month empty$
  288. { "" }
  289. { "there's a month but no year in " cite$ * warning$
  290. month
  291. }
  292. if$
  293. }
  294. { month empty$
  295. 'year
  296. { month " " * year * }
  297. if$
  298. }
  299. if$
  300. }
  301. FUNCTION {format.btitle}
  302. { title emphasize
  303. }
  304. FUNCTION {tie.or.space.connect}
  305. { duplicate$ text.length$ #3 <
  306. { "~" }
  307. { " " }
  308. if$
  309. swap$ * *
  310. }
  311. FUNCTION {either.or.check}
  312. { empty$
  313. 'pop$
  314. { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  315. if$
  316. }
  317. FUNCTION {format.bvolume}
  318. { volume empty$
  319. { "" }
  320. { "Band" volume tie.or.space.connect
  321. series empty$
  322. 'skip$
  323. { " der " * series emphasize * }
  324. if$
  325. "volume and number" number either.or.check
  326. }
  327. if$
  328. }
  329. FUNCTION {format.number.series}
  330. { volume empty$
  331. { number empty$
  332. { series field.or.null }
  333. { "Nr." number tie.or.space.connect
  334. series empty$
  335. { "there's a number but no series in " cite$ * warning$ }
  336. { " der " * series * }
  337. if$
  338. }
  339. if$
  340. }
  341. { "" }
  342. if$
  343. }
  344. FUNCTION {format.edition}
  345. { edition empty$
  346. { "" }
  347. { edition ".~Auf\penalty10000\discretionary{-}{}{\kern.03em}\allowhyphens lage" * } % changed by bless
  348. if$
  349. }
  350. INTEGERS { multiresult }
  351. FUNCTION {multi.page.check}
  352. { 't :=
  353. #0 'multiresult :=
  354. { multiresult not
  355. t empty$ not
  356. and
  357. }
  358. { t #1 #1 substring$
  359. duplicate$ "-" =
  360. swap$ duplicate$ "," =
  361. swap$ "+" =
  362. or or
  363. { #1 'multiresult := }
  364. { t #2 global.max$ substring$ 't := }
  365. if$
  366. }
  367. while$
  368. multiresult
  369. }
  370. FUNCTION {format.pages}
  371. { pages empty$
  372. { "" }
  373. { pages multi.page.check
  374. { "S.~" pages n.dashify * } % changed by bless
  375. { "S.~" pages * } % changed by bless
  376. if$
  377. }
  378. if$
  379. }
  380. FUNCTION {format.vol.num}
  381. { number empty$
  382. { volume empty$
  383. { "" }
  384. { "Band" volume tie.or.space.connect }
  385. if$
  386. }
  387. { volume field.or.null
  388. "(" number * ")" * *
  389. volume empty$
  390. { "there's a number but no volume in " cite$ * warning$ }
  391. 'skip$
  392. if$
  393. }
  394. if$
  395. }
  396. FUNCTION {format.chapter.pages}
  397. { chapter empty$
  398. 'format.pages
  399. { type empty$
  400. { "Kapitel" }
  401. { type "l" change.case$ }
  402. if$
  403. chapter tie.or.space.connect
  404. pages empty$
  405. 'skip$
  406. { ", " * format.pages * }
  407. if$
  408. }
  409. if$
  410. }
  411. FUNCTION {format.in.ed.booktitle}
  412. { booktitle empty$
  413. { "" }
  414. { editor empty$
  415. { "In " booktitle emphasize * }
  416. { "In " format.editors * ", " * booktitle emphasize * }
  417. if$
  418. }
  419. if$
  420. }
  421. FUNCTION {empty.misc.check}
  422. { author empty$ title empty$ howpublished empty$
  423. month empty$ year empty$ note empty$
  424. and and and and and
  425. key empty$ not and
  426. { "all relevant fields are empty in " cite$ * warning$ }
  427. 'skip$
  428. if$
  429. }
  430. FUNCTION {format.thesis.type}
  431. { type empty$
  432. 'skip$
  433. { pop$
  434. type % "t" change.case$
  435. }
  436. if$
  437. }
  438. FUNCTION {format.tr.number}
  439. { type empty$
  440. { "{T}echnischer {B}ericht" }
  441. 'type
  442. if$
  443. number empty$
  444. { "t" change.case$ }
  445. { number tie.or.space.connect }
  446. if$
  447. }
  448. FUNCTION {format.article.crossref}
  449. { key empty$
  450. { journal empty$
  451. { "need key or journal for " cite$ * " to crossref " * crossref *
  452. warning$
  453. ""
  454. }
  455. { "In {\em " journal * "\/}" * }
  456. if$
  457. }
  458. { "In " key * }
  459. if$
  460. " \cite{" * crossref * "}" *
  461. }
  462. FUNCTION {format.crossref.editor}
  463. { editor #1 "{vv~}{ll}" format.name$
  464. editor num.names$ duplicate$
  465. #2 >
  466. { pop$ " und andere" * }
  467. { #2 <
  468. 'skip$
  469. { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  470. { " und andere" * }
  471. { " und " * editor #2 "{vv~}{ll}" format.name$ * }
  472. if$
  473. }
  474. if$
  475. }
  476. if$
  477. }
  478. FUNCTION {format.book.crossref}
  479. { volume empty$
  480. { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
  481. "In "
  482. }
  483. { "Band" volume tie.or.space.connect
  484. " der " *
  485. }
  486. if$
  487. editor empty$
  488. editor field.or.null author field.or.null =
  489. or
  490. { key empty$
  491. { series empty$
  492. { "need editor, key, or series for " cite$ * " to crossref " *
  493. crossref * warning$
  494. "" *
  495. }
  496. { "{\em " * series * "\/}" * }
  497. if$
  498. }
  499. { key * }
  500. if$
  501. }
  502. { format.crossref.editor * }
  503. if$
  504. " \cite{" * crossref * "}" *
  505. }
  506. FUNCTION {format.incoll.inproc.crossref}
  507. { editor empty$
  508. editor field.or.null author field.or.null =
  509. or
  510. { key empty$
  511. { booktitle empty$
  512. { "need editor, key, or booktitle for " cite$ * " to crossref " *
  513. crossref * warning$
  514. ""
  515. }
  516. { "In {\em " booktitle * "\/}" * }
  517. if$
  518. }
  519. { "In " key * }
  520. if$
  521. }
  522. { "In " format.crossref.editor * }
  523. if$
  524. " \cite{" * crossref * "}" *
  525. }
  526. FUNCTION {article}
  527. { output.bibitem
  528. format.authors "author" output.check
  529. new.block
  530. format.title "title" output.check
  531. new.block
  532. crossref missing$
  533. { journal emphasize "journal" output.check
  534. format.vol.num output
  535. format.date "year" output.check
  536. format.pages output
  537. new.block
  538. note output
  539. }
  540. { format.article.crossref output.nonnull
  541. format.pages output
  542. }
  543. if$
  544. fin.entry
  545. }
  546. FUNCTION {book}
  547. { output.bibitem
  548. author empty$
  549. { format.editors "author and editor" output.check }
  550. { format.authors output.nonnull
  551. crossref missing$
  552. { "author and editor" editor either.or.check }
  553. 'skip$
  554. if$
  555. }
  556. if$
  557. new.block
  558. format.btitle "title" output.check
  559. crossref missing$
  560. { format.bvolume output
  561. new.block
  562. format.number.series output
  563. new.sentence
  564. publisher "publisher" output.check
  565. address output
  566. new.block
  567. note output
  568. }
  569. { new.block
  570. format.book.crossref output.nonnull
  571. }
  572. if$
  573. format.edition output
  574. format.date "year" output.check
  575. fin.entry
  576. }
  577. FUNCTION {booklet}
  578. { output.bibitem
  579. format.authors output
  580. new.block
  581. format.title "title" output.check
  582. howpublished address new.block.checkb
  583. howpublished output
  584. address output
  585. format.date output
  586. new.block
  587. note output
  588. fin.entry
  589. }
  590. FUNCTION {inbook}
  591. { output.bibitem
  592. author empty$
  593. { format.editors "author and editor" output.check }
  594. { format.authors output.nonnull
  595. crossref missing$
  596. { "author and editor" editor either.or.check }
  597. 'skip$
  598. if$
  599. }
  600. if$
  601. new.block
  602. format.btitle "title" output.check
  603. crossref missing$
  604. { format.bvolume output
  605. format.chapter.pages "chapter and pages" output.check
  606. new.block
  607. format.number.series output
  608. new.sentence
  609. publisher "publisher" output.check
  610. address output
  611. new.block
  612. note output
  613. }
  614. { format.chapter.pages "chapter and pages" output.check
  615. new.block
  616. format.book.crossref output.nonnull
  617. }
  618. if$
  619. format.edition output
  620. format.date "year" output.check
  621. fin.entry
  622. }
  623. FUNCTION {incollection}
  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.chapter.pages output
  634. new.sentence
  635. publisher "publisher" output.check
  636. address output
  637. format.edition output
  638. format.date "year" output.check
  639. new.block
  640. note output
  641. }
  642. { format.incoll.inproc.crossref output.nonnull
  643. format.chapter.pages output
  644. }
  645. if$
  646. fin.entry
  647. }
  648. FUNCTION {inproceedings}
  649. { output.bibitem
  650. format.authors "author" output.check
  651. new.block
  652. format.title "title" output.check
  653. new.block
  654. crossref missing$
  655. { format.in.ed.booktitle "booktitle" output.check
  656. format.bvolume output
  657. format.number.series output
  658. address empty$
  659. { organization publisher new.sentence.checkb
  660. organization output
  661. publisher output
  662. format.date "year" output.check
  663. }
  664. { address output.nonnull
  665. format.date "year" output.check
  666. new.sentence
  667. organization output
  668. publisher output
  669. }
  670. if$
  671. }
  672. { format.incoll.inproc.crossref output.nonnull
  673. }
  674. if$
  675. format.pages output
  676. new.block
  677. note output
  678. fin.entry
  679. }
  680. FUNCTION {conference} { inproceedings }
  681. FUNCTION {manual}
  682. { output.bibitem
  683. author empty$
  684. { organization empty$
  685. 'skip$
  686. { organization output.nonnull
  687. address output
  688. }
  689. if$
  690. }
  691. { format.authors output.nonnull }
  692. if$
  693. new.block
  694. format.btitle "title" output.check
  695. author empty$
  696. { organization empty$
  697. { address new.block.checka
  698. address output
  699. }
  700. 'skip$
  701. if$
  702. }
  703. { organization address new.block.checkb
  704. organization output
  705. address output
  706. }
  707. if$
  708. format.edition output
  709. format.date output
  710. new.block
  711. note output
  712. fin.entry
  713. }
  714. FUNCTION {mastersthesis}
  715. { output.bibitem
  716. format.authors "author" output.check
  717. new.block
  718. format.title "title" output.check
  719. new.block
  720. "Diplomarbeit" format.thesis.type output.nonnull
  721. school "school" output.check
  722. address output
  723. format.date "year" output.check
  724. new.block
  725. note output
  726. fin.entry
  727. }
  728. FUNCTION {misc}
  729. { output.bibitem
  730. author empty$ % added by R.Bless
  731. { format.editors output.nonnull } % added by R.Bless
  732. { format.authors "author" output.check } % added by R.Bless
  733. if$
  734. title howpublished new.block.checkb
  735. format.title output
  736. howpublished new.block.checka
  737. howpublished output
  738. organization output
  739. institution output
  740. format.date output
  741. new.block
  742. note output
  743. fin.entry
  744. empty.misc.check
  745. }
  746. FUNCTION {phdthesis}
  747. { output.bibitem
  748. format.authors "author" output.check
  749. new.block
  750. format.btitle "title" output.check
  751. new.block
  752. "Dissertation" format.thesis.type output.nonnull
  753. school "school" output.check
  754. address output
  755. format.date "year" output.check
  756. new.block
  757. note output
  758. fin.entry
  759. }
  760. FUNCTION {proceedings}
  761. { output.bibitem
  762. editor empty$
  763. { organization output }
  764. { format.editors output.nonnull }
  765. if$
  766. new.block
  767. format.btitle "title" output.check
  768. address empty$
  769. { editor empty$
  770. { publisher new.sentence.checka }
  771. { organization publisher new.sentence.checkb
  772. organization output
  773. }
  774. if$
  775. format.bvolume output
  776. format.number.series output
  777. publisher output
  778. format.date "year" output.check
  779. }
  780. { address output.nonnull
  781. format.date "year" output.check
  782. new.sentence
  783. editor empty$
  784. 'skip$
  785. { organization output
  786. new.block
  787. }
  788. if$
  789. format.bvolume output
  790. format.number.series output
  791. publisher output
  792. }
  793. if$
  794. new.block
  795. note output
  796. fin.entry
  797. }
  798. FUNCTION {techreport}
  799. { output.bibitem
  800. editor empty$ % added by R.Bless
  801. { format.authors "author" output.check } % added by R.Bless
  802. { format.editors output.nonnull } % added by R.Bless
  803. if$
  804. new.block
  805. format.title "title" output.check
  806. new.block
  807. format.tr.number output.nonnull
  808. institution "institution" output.check
  809. address output
  810. format.date "year" output.check
  811. new.block
  812. note output
  813. fin.entry
  814. }
  815. FUNCTION {unpublished}
  816. { output.bibitem
  817. format.authors "author" output.check
  818. new.block
  819. format.title "title" output.check
  820. new.block
  821. note "note" output.check
  822. format.date output
  823. fin.entry
  824. }
  825. FUNCTION {default.type} { misc }
  826. MACRO {jan} {"Januar"}
  827. MACRO {feb} {"Februar"}
  828. MACRO {mar} {"März"}
  829. MACRO {apr} {"April"}
  830. MACRO {may} {"Mai"}
  831. MACRO {jun} {"Juni"}
  832. MACRO {jul} {"Juli"}
  833. MACRO {aug} {"August"}
  834. MACRO {sep} {"September"}
  835. MACRO {oct} {"Oktober"}
  836. MACRO {nov} {"November"}
  837. MACRO {dec} {"Dezember"}
  838. MACRO {acmcs} {"ACM Computing Surveys"}
  839. MACRO {acta} {"Acta Informatica"}
  840. MACRO {cacm} {"Communications of the ACM"}
  841. MACRO {ibmjrd} {"IBM Journal of Research and Development"}
  842. MACRO {ibmsj} {"IBM Systems Journal"}
  843. MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
  844. MACRO {ieeetc} {"IEEE Transactions on Computers"}
  845. MACRO {ieeetcad}
  846. {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
  847. MACRO {ipl} {"Information Processing Letters"}
  848. MACRO {jacm} {"Journal of the ACM"}
  849. MACRO {jcss} {"Journal of Computer and System Sciences"}
  850. MACRO {scp} {"Science of Computer Programming"}
  851. MACRO {sicomp} {"SIAM Journal on Computing"}
  852. MACRO {tocs} {"ACM Trans\-actions on Computer Systems"}
  853. MACRO {tods} {"ACM Transactions on Database Systems"}
  854. MACRO {tog} {"ACM Transactions on Graphics"}
  855. MACRO {toms} {"ACM Transactions on Mathematical Software"}
  856. MACRO {toois} {"ACM Transactions on Office Information Systems"}
  857. MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
  858. MACRO {tcs} {"Theoretical Computer Science"}
  859. READ
  860. FUNCTION {sortify}
  861. { purify$
  862. "l" change.case$
  863. }
  864. INTEGERS { len }
  865. FUNCTION {chop.word}
  866. { 's :=
  867. 'len :=
  868. s #1 len substring$ =
  869. { s len #1 + global.max$ substring$ }
  870. 's
  871. if$
  872. }
  873. INTEGERS { et.al.char.used }
  874. FUNCTION {initialize.et.al.char.used}
  875. { #0 'et.al.char.used :=
  876. }
  877. EXECUTE {initialize.et.al.char.used}
  878. INTEGERS { charsleft } % added by bless
  879. % the following funtion was modified to produce Labels of width 4
  880. FUNCTION {format.lab.names}
  881. { 's :=
  882. s num.names$ 'numnames :=
  883. #4 'charsleft :=
  884. numnames #1 >
  885. { numnames #4 >
  886. { #4 'namesleft := }
  887. { numnames 'namesleft := }
  888. if$
  889. #1 'nameptr :=
  890. ""
  891. { charsleft #0 > }
  892. { charsleft namesleft >
  893. {
  894. nameptr numnames =
  895. { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  896. { "{\etalchar{+}}" *
  897. #1 'et.al.char.used :=
  898. charsleft #1 - 'charsleft :=
  899. }
  900. { s nameptr "{v{}}{l{}}" format.name$
  901. text.length$ #2 <
  902. { s nameptr "{ll{}}" format.name$ #2 text.prefix$ *}
  903. { s nameptr "{v{}}{l{}}" format.name$ *}
  904. if$
  905. charsleft #2 - 'charsleft :=
  906. }
  907. if$
  908. }
  909. { s nameptr "{v{}}{l{}}" format.name$
  910. text.length$ #2 <
  911. { s nameptr "{ll{}}" format.name$ #2 text.prefix$ *}
  912. { s nameptr "{v{}}{l{}}" format.name$ *}
  913. if$
  914. charsleft #2 - 'charsleft :=
  915. }
  916. if$
  917. }
  918. {
  919. s nameptr "{l{}}" format.name$ *
  920. charsleft #1 - 'charsleft :=
  921. }
  922. if$
  923. nameptr #1 + 'nameptr :=
  924. namesleft #1 - 'namesleft :=
  925. }
  926. while$
  927. numnames #4 >
  928. { "{\etalchar{+}}" *
  929. #1 'et.al.char.used :=
  930. }
  931. 'skip$
  932. if$
  933. }
  934. { s #1 "{v{}}{l{}}" format.name$
  935. text.length$ #2 <
  936. { s #1 "{ll}" format.name$ #4 text.prefix$ }
  937. { s #1 "{v{}}{ll}" format.name$ #4 text.prefix$ }
  938. if$
  939. }
  940. if$
  941. }
  942. FUNCTION {author.key.label}
  943. { author empty$
  944. { key empty$
  945. { cite$ #1 #4 substring$ }
  946. { key #4 text.prefix$ }
  947. if$
  948. }
  949. { author format.lab.names }
  950. if$
  951. }
  952. FUNCTION {author.editor.key.label}
  953. { author empty$
  954. { editor empty$
  955. { key empty$
  956. { cite$ #1 #4 substring$ }
  957. { key #4 text.prefix$ }
  958. if$
  959. }
  960. { editor format.lab.names }
  961. if$
  962. }
  963. { author format.lab.names }
  964. if$
  965. }
  966. FUNCTION {author.key.organization.label}
  967. { author empty$
  968. { key empty$
  969. { organization empty$
  970. { cite$ #1 #4 substring$ }
  971. { "The " #4 organization chop.word #4 text.prefix$ }
  972. if$
  973. }
  974. { key #4 text.prefix$ }
  975. if$
  976. }
  977. { author format.lab.names }
  978. if$
  979. }
  980. FUNCTION {editor.key.organization.label}
  981. { editor empty$
  982. { key empty$
  983. { organization empty$
  984. { cite$ #1 #4 substring$ }
  985. { "The " #4 organization chop.word #4 text.prefix$ }
  986. if$
  987. }
  988. { key #4 text.prefix$ }
  989. if$
  990. }
  991. { editor format.lab.names }
  992. if$
  993. }
  994. FUNCTION {calc.label}
  995. { type$ "book" =
  996. type$ "inbook" =
  997. type$ "techreport" =
  998. type$ "misc" =
  999. or
  1000. or
  1001. or
  1002. 'author.editor.key.label
  1003. { type$ "proceedings" =
  1004. 'editor.key.organization.label
  1005. { type$ "manual" =
  1006. 'author.key.organization.label
  1007. 'author.key.label
  1008. if$
  1009. }
  1010. if$
  1011. }
  1012. if$
  1013. duplicate$
  1014. year field.or.null purify$ #-1 #2 substring$
  1015. *
  1016. 'label :=
  1017. year field.or.null purify$ #-1 #4 substring$
  1018. *
  1019. sortify 'sort.label :=
  1020. }
  1021. FUNCTION {sort.format.names}
  1022. { 's :=
  1023. #1 'nameptr :=
  1024. ""
  1025. s num.names$ 'numnames :=
  1026. numnames 'namesleft :=
  1027. { namesleft #0 > }
  1028. { nameptr #1 >
  1029. { " " * }
  1030. 'skip$
  1031. if$
  1032. s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
  1033. nameptr numnames = t "others" = and
  1034. { "und andere" * }
  1035. { t sortify * }
  1036. if$
  1037. nameptr #1 + 'nameptr :=
  1038. namesleft #1 - 'namesleft :=
  1039. }
  1040. while$
  1041. }
  1042. FUNCTION {sort.format.title}
  1043. { 't :=
  1044. "A " #2
  1045. "An " #3
  1046. "The " #4 t chop.word
  1047. chop.word
  1048. chop.word
  1049. sortify
  1050. #1 global.max$ substring$
  1051. }
  1052. FUNCTION {author.sort}
  1053. { author empty$
  1054. { key empty$
  1055. { "to sort, need author or key in " cite$ * warning$
  1056. ""
  1057. }
  1058. { key sortify }
  1059. if$
  1060. }
  1061. { author sort.format.names }
  1062. if$
  1063. }
  1064. FUNCTION {author.editor.sort}
  1065. { author empty$
  1066. { editor empty$
  1067. { key empty$
  1068. { "to sort, need author, editor, or key in " cite$ * warning$
  1069. ""
  1070. }
  1071. { key sortify }
  1072. if$
  1073. }
  1074. { editor sort.format.names }
  1075. if$
  1076. }
  1077. { author sort.format.names }
  1078. if$
  1079. }
  1080. FUNCTION {author.organization.sort}
  1081. { author empty$
  1082. { organization empty$
  1083. { key empty$
  1084. { "to sort, need author, organization, or key in " cite$ * warning$
  1085. ""
  1086. }
  1087. { key sortify }
  1088. if$
  1089. }
  1090. { "The " #4 organization chop.word sortify }
  1091. if$
  1092. }
  1093. { author sort.format.names }
  1094. if$
  1095. }
  1096. FUNCTION {editor.organization.sort}
  1097. { editor empty$
  1098. { organization empty$
  1099. { key empty$
  1100. { "to sort, need editor, organization, or key in " cite$ * warning$
  1101. ""
  1102. }
  1103. { key sortify }
  1104. if$
  1105. }
  1106. { "The " #4 organization chop.word sortify }
  1107. if$
  1108. }
  1109. { editor sort.format.names }
  1110. if$
  1111. }
  1112. FUNCTION {presort}
  1113. { calc.label
  1114. sort.label
  1115. " "
  1116. *
  1117. type$ "book" =
  1118. type$ "inbook" =
  1119. type$ "techreport" =
  1120. or
  1121. or
  1122. 'author.editor.sort
  1123. { type$ "proceedings" =
  1124. 'editor.organization.sort
  1125. { type$ "manual" =
  1126. 'author.organization.sort
  1127. 'author.sort
  1128. if$
  1129. }
  1130. if$
  1131. }
  1132. if$
  1133. *
  1134. " "
  1135. *
  1136. year field.or.null sortify
  1137. *
  1138. " "
  1139. *
  1140. title field.or.null
  1141. sort.format.title
  1142. *
  1143. #1 entry.max$ substring$
  1144. 'sort.key$ :=
  1145. }
  1146. ITERATE {presort}
  1147. SORT
  1148. STRINGS { longest.label last.sort.label next.extra }
  1149. INTEGERS { longest.label.width last.extra.num }
  1150. FUNCTION {initialize.longest.label}
  1151. { "" 'longest.label :=
  1152. #0 int.to.chr$ 'last.sort.label :=
  1153. "" 'next.extra :=
  1154. #0 'longest.label.width :=
  1155. #0 'last.extra.num :=
  1156. }
  1157. FUNCTION {forward.pass}
  1158. { last.sort.label sort.label =
  1159. { last.extra.num #1 + 'last.extra.num :=
  1160. last.extra.num int.to.chr$ 'extra.label :=
  1161. }
  1162. { "a" chr.to.int$ 'last.extra.num :=
  1163. "" 'extra.label :=
  1164. sort.label 'last.sort.label :=
  1165. }
  1166. if$
  1167. }
  1168. FUNCTION {reverse.pass}
  1169. { next.extra "b" =
  1170. { "a" 'extra.label := }
  1171. 'skip$
  1172. if$
  1173. label extra.label * 'label :=
  1174. label width$ longest.label.width >
  1175. { label 'longest.label :=
  1176. label width$ 'longest.label.width :=
  1177. }
  1178. 'skip$
  1179. if$
  1180. extra.label 'next.extra :=
  1181. }
  1182. EXECUTE {initialize.longest.label}
  1183. ITERATE {forward.pass}
  1184. REVERSE {reverse.pass}
  1185. FUNCTION {begin.bib}
  1186. { et.al.char.used
  1187. { "\def\etalchar#1{$^{#1}$}" write$ newline$ }
  1188. 'skip$
  1189. if$
  1190. preamble$ empty$
  1191. 'skip$
  1192. { preamble$ write$ newline$ }
  1193. if$
  1194. "\begin{thebibliography}{" longest.label * "}" * write$ newline$
  1195. }
  1196. EXECUTE {begin.bib}
  1197. EXECUTE {init.state.consts}
  1198. ITERATE {call.type$}
  1199. FUNCTION {end.bib}
  1200. { newline$
  1201. "\end{thebibliography}" write$ newline$
  1202. }
  1203. EXECUTE {end.bib}