github.com/vipernet-xyz/tm@v0.34.24/spec/consensus/consensus-paper/latex8.bst (about)

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