source: papers/SMPaT-2012_DCWoRMS/elsevier_guide/aricle/model1-num-names.bst @ 593

Revision 593, 24.9 KB checked in by wojtekp, 12 years ago (diff)
Line 
1%%
2%% This is file `model1-num-names.bst',
3%%
4%% Copyright 2009 Elsevier Ltd
5%%
6%% This file is part of the 'Elsarticle Bundle'.
7%% ---------------------------------------------
8%%
9%% It may be distributed under the conditions of the LaTeX Project Public
10%% License, either version 1.2 of this license or (at your option) any
11%% later version.  The latest version of this license is in
12%%    http://www.latex-project.org/lppl.txt
13%% and version 1.2 or later is part of all distributions of LaTeX
14%% version 1999/12/01 or later.
15%%
16%% $Id: model1-num-names.bst 125 2009-10-07 11:47:47Z rishi $
17%%
18%% $URL: http://lenova.river-valley.com/svn/elsbst/trunk/New-Model-1/model1-num-names.bst $
19%%
20%%
21
22ENTRY
23  { address
24    author
25    booktitle
26    chapter
27    edition
28    editor
29    howpublished
30    institution
31    journal
32    key
33    month
34    note
35    number
36    organization
37    pages
38    publisher
39    school
40    series
41    title
42    type
43    volume
44    year
45  }
46  {}
47  { label extra.label sort.label short.list }
48INTEGERS { output.state before.all mid.sentence after.sentence after.block }
49FUNCTION {init.state.consts}
50{ #0 'before.all :=
51  #1 'mid.sentence :=
52  #2 'after.sentence :=
53  #3 'after.block :=
54}
55STRINGS { s t}
56FUNCTION {output.nonnull}
57{ 's :=
58  output.state mid.sentence =
59    { ", " * write$ }
60    { output.state after.block =
61%        { add.period$ write$
62        { ", " * 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}
77FUNCTION {output}
78{ duplicate$ empty$
79    'pop$
80    'output.nonnull
81  if$
82}
83FUNCTION {output.check}
84{ 't :=
85  duplicate$ empty$
86    { pop$ "empty " t * " in " * cite$ * warning$ }
87    'output.nonnull
88  if$
89}
90FUNCTION {fin.entry}
91{ add.period$
92  write$
93  newline$
94}
95
96FUNCTION {new.block}
97{ output.state before.all =
98    'skip$
99    { after.block 'output.state := }
100  if$
101}
102FUNCTION {new.sentence}
103{ output.state after.block =
104    'skip$
105    { output.state before.all =
106        'skip$
107        { after.sentence 'output.state := }
108      if$
109    }
110  if$
111}
112FUNCTION {add.blank}
113{  " " * before.all 'output.state :=
114}
115
116FUNCTION {date.block}
117{
118  skip$
119}
120
121FUNCTION {not}
122{   { #0 }
123    { #1 }
124  if$
125}
126FUNCTION {and}
127{   'skip$
128    { pop$ #0 }
129  if$
130}
131FUNCTION {or}
132{   { pop$ #1 }
133    'skip$
134  if$
135}
136FUNCTION {new.block.checkb}
137{ empty$
138  swap$ empty$
139  and
140    'skip$
141    'new.block
142  if$
143}
144FUNCTION {field.or.null}
145{ duplicate$ empty$
146    { pop$ "" }
147    'skip$
148  if$
149}
150FUNCTION {emphasize}
151{ duplicate$ empty$
152    { pop$ "" }
153    { "\textit{" swap$ * "}" * }
154  if$
155}
156FUNCTION {tie.or.space.prefix}
157{ duplicate$ text.length$ #3 <
158    { "~" }
159    { " " }
160  if$
161  swap$
162}
163
164FUNCTION {capitalize}
165{ "u" change.case$ "t" change.case$ }
166
167FUNCTION {space.word}
168{ " " swap$ * " " * }
169 % Here are the language-specific definitions for explicit words.
170 % Each function has a name bbl.xxx where xxx is the English word.
171 % The language selected here is ENGLISH
172FUNCTION {bbl.and}
173{ "and"}
174
175FUNCTION {bbl.etal}
176{ "et~al." }
177
178FUNCTION {bbl.editors}
179{ "eds." }
180
181FUNCTION {bbl.editor}
182{ "ed." }
183
184FUNCTION {bbl.edby}
185{ "edited by" }
186
187FUNCTION {bbl.edition}
188{ "edition" }
189
190FUNCTION {bbl.volume}
191{ "volume" }
192
193FUNCTION {bbl.of}
194{ "of" }
195
196FUNCTION {bbl.number}
197{ "number" }
198
199FUNCTION {bbl.nr}
200{ "no." }
201
202FUNCTION {bbl.in}
203{ "in" }
204
205FUNCTION {bbl.pages}
206{ "pp." }
207
208FUNCTION {bbl.page}
209{ "p." }
210
211FUNCTION {bbl.chapter}
212{ "chapter" }
213
214FUNCTION {bbl.techrep}
215{ "Technical Report" }
216
217FUNCTION {bbl.mthesis}
218{ "Master's thesis" }
219
220FUNCTION {bbl.phdthesis}
221{ "Ph.D. thesis" }
222
223MACRO {jan} {"January"}
224
225MACRO {feb} {"February"}
226
227MACRO {mar} {"March"}
228
229MACRO {apr} {"April"}
230
231MACRO {may} {"May"}
232
233MACRO {jun} {"June"}
234
235MACRO {jul} {"July"}
236
237MACRO {aug} {"August"}
238
239MACRO {sep} {"September"}
240
241MACRO {oct} {"October"}
242
243MACRO {nov} {"November"}
244
245MACRO {dec} {"December"}
246
247MACRO {acmcs} {"ACM Comput. Surv."}
248
249MACRO {acta} {"Acta Inf."}
250
251MACRO {cacm} {"Commun. ACM"}
252
253MACRO {ibmjrd} {"IBM J. Res. Dev."}
254
255MACRO {ibmsj} {"IBM Syst.~J."}
256
257MACRO {ieeese} {"IEEE Trans. Software Eng."}
258
259MACRO {ieeetc} {"IEEE Trans. Comput."}
260
261MACRO {ieeetcad}
262 {"IEEE Trans. Comput. Aid. Des."}
263
264MACRO {ipl} {"Inf. Process. Lett."}
265
266MACRO {jacm} {"J.~ACM"}
267
268MACRO {jcss} {"J.~Comput. Syst. Sci."}
269
270MACRO {scp} {"Sci. Comput. Program."}
271
272MACRO {sicomp} {"SIAM J. Comput."}
273
274MACRO {tocs} {"ACM Trans. Comput. Syst."}
275
276MACRO {tods} {"ACM Trans. Database Syst."}
277
278MACRO {tog} {"ACM Trans. Graphic."}
279
280MACRO {toms} {"ACM Trans. Math. Software"}
281
282MACRO {toois} {"ACM Trans. Office Inf. Syst."}
283
284MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}
285
286MACRO {tcs} {"Theor. Comput. Sci."}
287
288FUNCTION {bibinfo.check}
289{ swap$
290  duplicate$ missing$
291    {
292      pop$ pop$
293      ""
294    }
295    { duplicate$ empty$
296        {
297          swap$ pop$
298        }
299        { swap$
300          "\bibinfo{" swap$ * "}{" * swap$ * "}" *
301        }
302      if$
303    }
304  if$
305}
306FUNCTION {bibinfo.warn}
307{ swap$
308  duplicate$ missing$
309    {
310      swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
311      ""
312    }
313    { duplicate$ empty$
314        {
315          swap$ "empty " swap$ * " in " * cite$ * warning$
316        }
317        { swap$
318          pop$
319        }
320      if$
321    }
322  if$
323}
324STRINGS  { bibinfo}
325INTEGERS { nameptr namesleft numnames }
326
327FUNCTION {format.names}
328{ 'bibinfo :=
329  duplicate$ empty$ 'skip$ {
330  's :=
331  "" 't :=
332  #1 'nameptr :=
333  s num.names$ 'numnames :=
334  numnames 'namesleft :=
335    { namesleft #0 > }
336    { s nameptr
337      "{f.~}{vv~}{ll}{, jj}"
338      format.name$
339      bibinfo bibinfo.check
340      't :=
341      nameptr #1 >
342        {
343          namesleft #1 >
344            { ", " * t * }
345            {
346              "," *
347              s nameptr "{ll}" format.name$ duplicate$ "others" =
348                { 't := }
349                { pop$ }
350              if$
351              t "others" =
352                {
353                  " " * bbl.etal *
354                }
355                { " " * t * }
356              if$
357            }
358          if$
359        }
360        't
361      if$
362      nameptr #1 + 'nameptr :=
363      namesleft #1 - 'namesleft :=
364    }
365  while$
366  } if$
367}
368FUNCTION {format.names.ed}
369{
370  format.names
371}
372FUNCTION {format.key}
373{ empty$
374    { key field.or.null }
375    { "" }
376  if$
377}
378
379FUNCTION {format.authors}
380{ author "author" format.names
381}
382FUNCTION {get.bbl.editor}
383{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
384
385FUNCTION {format.editors}
386{ editor "editor" format.names duplicate$ empty$ 'skip$
387    {
388      " " *
389      get.bbl.editor
390      capitalize
391   "(" swap$ * ")" *
392      *
393    }
394  if$
395}
396FUNCTION {format.note}
397{
398 note empty$
399    { "" }
400    { note #1 #1 substring$
401      duplicate$ "{" =
402        'skip$
403        { output.state mid.sentence =
404          { "l" }
405          { "u" }
406        if$
407        change.case$
408        }
409      if$
410      note #2 global.max$ substring$ * "note" bibinfo.check
411    }
412  if$
413}
414
415FUNCTION {format.title}
416{ title
417  duplicate$ empty$ 'skip$
418    { "t" change.case$ }
419  if$
420  "title" bibinfo.check
421}
422
423FUNCTION {format.full.names}
424{'s :=
425 "" 't :=
426 #1 'nameptr :=
427 s num.names$ 'numnames :=
428 numnames 'namesleft :=
429   { namesleft #0 > }
430   { s nameptr
431     "{vv~}{ll}" format.name$
432     't :=
433     nameptr #1 >
434       {
435         namesleft #1 >
436           { ", " * t * }
437           {
438             s nameptr "{ll}" format.name$ duplicate$ "others" =
439               { 't := }
440               { pop$ }
441             if$
442             t "others" =
443               {
444                 " " * bbl.etal *
445               }
446               {
447                 numnames #2 >
448                   { "," * }
449                   'skip$
450                 if$
451                 bbl.and
452                 space.word * t *
453               }
454             if$
455           }
456         if$
457       }
458       't
459     if$
460     nameptr #1 + 'nameptr :=
461     namesleft #1 - 'namesleft :=
462   }
463 while$
464}
465
466FUNCTION {author.editor.key.full}
467{ author empty$
468   { editor empty$
469       { key empty$
470           { cite$ #1 #3 substring$ }
471           'key
472         if$
473       }
474       { editor format.full.names }
475     if$
476   }
477   { author format.full.names }
478 if$
479}
480
481FUNCTION {author.key.full}
482{ author empty$
483   { key empty$
484        { cite$ #1 #3 substring$ }
485         'key
486     if$
487   }
488   { author format.full.names }
489 if$
490}
491
492FUNCTION {editor.key.full}
493{ editor empty$
494   { key empty$
495        { cite$ #1 #3 substring$ }
496         'key
497     if$
498   }
499   { editor format.full.names }
500 if$
501}
502
503FUNCTION {make.full.names}
504{ type$ "book" =
505 type$ "inbook" =
506 or
507   'author.editor.key.full
508   { type$ "proceedings" =
509       'editor.key.full
510       'author.key.full
511     if$
512   }
513 if$
514}
515
516FUNCTION {output.bibitem}
517{ newline$
518 "\bibitem[{" write$
519 label write$
520 ")" make.full.names duplicate$ short.list =
521    { pop$ }
522    { * }
523  if$
524 "}]{" * write$
525 cite$ write$
526 "}" write$
527 newline$
528 ""
529 before.all 'output.state :=
530}
531
532FUNCTION {n.dashify}
533{
534  't :=
535  ""
536    { t empty$ not }
537    { t #1 #1 substring$ "-" =
538        { t #1 #2 substring$ "--" = not
539            { "--" *
540              t #2 global.max$ substring$ 't :=
541            }
542            {   { t #1 #1 substring$ "-" = }
543                { "-" *
544                  t #2 global.max$ substring$ 't :=
545                }
546              while$
547            }
548          if$
549        }
550        { t #1 #1 substring$ *
551          t #2 global.max$ substring$ 't :=
552        }
553      if$
554    }
555  while$
556}
557
558FUNCTION {word.in}
559{ bbl.in
560  ":" *
561  " " * }
562
563FUNCTION {format.date}
564{ year "year" bibinfo.check duplicate$ empty$
565    {
566      "empty year in " cite$ * "; set to ????" * warning$
567       pop$ "????"
568    }
569    'skip$
570  if$
571  extra.label *
572}
573FUNCTION{format.year}
574{ year "year" bibinfo.check duplicate$ empty$
575    {  "empty year in " cite$ *
576       "; set to ????" *
577       warning$
578       pop$ "????"
579    }
580    {
581    }
582  if$
583  extra.label *
584  " (" swap$ * ")" *
585}
586FUNCTION {format.btitle}
587{ title "title" bibinfo.check
588  duplicate$ empty$ 'skip$
589    {
590    }
591  if$
592}
593FUNCTION {either.or.check}
594{ empty$
595    'pop$
596    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
597  if$
598}
599FUNCTION {format.bvolume}
600{ volume empty$
601    { "" }
602    { bbl.volume volume tie.or.space.prefix
603      "volume" bibinfo.check * *
604      series "series" bibinfo.check
605      duplicate$ empty$ 'pop$
606        { swap$ bbl.of space.word * swap$
607          emphasize * }
608      if$
609      "volume and number" number either.or.check
610    }
611  if$
612}
613FUNCTION {format.number.series}
614{ volume empty$
615    { number empty$
616        { series field.or.null }
617        { series empty$
618            { number "number" bibinfo.check }
619        { output.state mid.sentence =
620            { bbl.number }
621            { bbl.number capitalize }
622          if$
623          number tie.or.space.prefix "number" bibinfo.check * *
624          bbl.in space.word *
625          series "series" bibinfo.check *
626        }
627      if$
628    }
629      if$
630    }
631    { "" }
632  if$
633}
634
635FUNCTION {format.edition}
636{ edition duplicate$ empty$ 'skip$
637    {
638      output.state mid.sentence =
639        { "l" }
640        { "t" }
641      if$ change.case$
642      "edition" bibinfo.check
643      " " * bbl.edition *
644    }
645  if$
646}
647INTEGERS { multiresult }
648FUNCTION {multi.page.check}
649{ 't :=
650  #0 'multiresult :=
651    { multiresult not
652      t empty$ not
653      and
654    }
655    { t #1 #1 substring$
656      duplicate$ "-" =
657      swap$ duplicate$ "," =
658      swap$ "+" =
659      or or
660        { #1 'multiresult := }
661        { t #2 global.max$ substring$ 't := }
662      if$
663    }
664  while$
665  multiresult
666}
667FUNCTION {format.pages}
668{ pages duplicate$ empty$ 'skip$
669    { duplicate$ multi.page.check
670        {
671          bbl.pages swap$
672          n.dashify
673        }
674        {
675          bbl.page swap$
676        }
677      if$
678      tie.or.space.prefix
679      "pages" bibinfo.check
680      * *
681    }
682  if$
683}
684FUNCTION {format.journal.pages}
685{ pages duplicate$ empty$ 'pop$
686    { swap$ duplicate$ empty$
687        { pop$ pop$ format.pages }
688        {
689          " " *
690          swap$
691          n.dashify
692          "pages" bibinfo.check
693          *
694        }
695      if$
696    }
697  if$
698}
699FUNCTION {format.vol.num.pages}
700{ volume field.or.null
701  duplicate$ empty$ 'skip$
702    {
703      "volume" bibinfo.check
704    }
705  if$
706  format.year *
707}
708
709FUNCTION {format.chapter.pages}
710{ chapter empty$
711    { "" }
712    { type empty$
713        { bbl.chapter }
714        { type "l" change.case$
715          "type" bibinfo.check
716        }
717      if$
718      chapter tie.or.space.prefix
719      "chapter" bibinfo.check
720      * *
721    }
722  if$
723}
724
725FUNCTION {format.booktitle}
726{
727  booktitle "booktitle" bibinfo.check
728}
729FUNCTION {format.in.ed.booktitle}
730{ format.booktitle duplicate$ empty$ 'skip$
731    {
732      editor "editor" format.names.ed duplicate$ empty$ 'pop$
733        {
734          " " *
735          get.bbl.editor
736          capitalize
737          "(" swap$ * "), " *
738          * swap$
739          * }
740      if$
741      word.in swap$ *
742    }
743  if$
744}
745FUNCTION {format.thesis.type}
746{ type duplicate$ empty$
747    'pop$
748    { swap$ pop$
749      "t" change.case$ "type" bibinfo.check
750    }
751  if$
752}
753FUNCTION {format.tr.number}
754{ number "number" bibinfo.check
755  type duplicate$ empty$
756    { pop$ bbl.techrep }
757    'skip$
758  if$
759  "type" bibinfo.check
760  swap$ duplicate$ empty$
761    { pop$ "t" change.case$ }
762    { tie.or.space.prefix * * }
763  if$
764}
765FUNCTION {format.article.crossref}
766{
767  word.in
768  " \cite{" * crossref * "}" *
769}
770FUNCTION {format.book.crossref}
771{ volume duplicate$ empty$
772    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
773      pop$ word.in
774    }
775    { bbl.volume
776      swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
777    }
778  if$
779  " \cite{" * crossref * "}" *
780}
781FUNCTION {format.incoll.inproc.crossref}
782{
783  word.in
784  " \cite{" * crossref * "}" *
785}
786FUNCTION {format.org.or.pub}
787{ 't :=
788  ""
789  address empty$ t empty$ and
790    'skip$
791    {
792      t empty$
793        { address "address" bibinfo.check *
794        }
795        { t *
796          address empty$
797            'skip$
798            { ", " * address "address" bibinfo.check * }
799          if$
800        }
801      if$
802    }
803  if$
804}
805FUNCTION {format.publisher.address}
806{ publisher "publisher" bibinfo.check format.org.or.pub
807}
808
809FUNCTION {format.organization.address}
810{ organization "organization" bibinfo.check format.org.or.pub
811}
812
813FUNCTION {article}
814{ "%Type = Article" write$
815  output.bibitem
816  format.authors "author" output.check
817  author format.key output
818  new.block
819  format.title "title" output.check
820  new.block
821  crossref missing$
822    {
823      journal
824      "journal" bibinfo.check
825      "journal" output.check
826      add.blank
827      format.vol.num.pages output
828    }
829    { format.article.crossref output.nonnull
830    }
831  if$
832  format.journal.pages
833  new.sentence
834  format.note output
835  fin.entry
836}
837FUNCTION {book}
838{ "%Type = Book" write$
839  output.bibitem
840  author empty$
841    { format.editors "author and editor" output.check
842      editor format.key output
843    }
844    { format.authors output.nonnull
845      crossref missing$
846        { "author and editor" editor either.or.check }
847        'skip$
848      if$
849    }
850  if$
851  format.btitle "title" output.check
852  crossref missing$
853    { format.bvolume output
854      format.number.series output
855      format.publisher.address output
856    }
857    {
858      format.book.crossref output.nonnull
859    }
860  if$
861  format.edition output
862  format.date "year" output.check
863  new.sentence
864  format.note output
865  fin.entry
866}
867FUNCTION {booklet}
868{ "%Type = Booklet" write$
869  output.bibitem
870  format.authors output
871  author format.key output
872  format.title "title" output.check
873  howpublished "howpublished" bibinfo.check output
874  address "address" bibinfo.check output
875  format.date "year" output.check
876  new.sentence
877  format.note output
878  fin.entry
879}
880
881FUNCTION {inbook}
882{ "%Type = Inbook" write$
883  output.bibitem
884  author empty$
885    { format.editors "author and editor" output.check
886      editor format.key output
887    }
888    { format.authors output.nonnull
889      crossref missing$
890        { "author and editor" editor either.or.check }
891        'skip$
892      if$
893    }
894  if$
895  format.btitle "title" output.check
896  crossref missing$
897    {
898      format.bvolume output
899      format.number.series output
900      format.publisher.address output
901    }
902    {
903      format.book.crossref output.nonnull
904    }
905  if$
906  format.edition output
907  format.pages "pages" output.check
908  new.sentence
909  format.note output
910  fin.entry
911}
912
913FUNCTION {incollection}
914{ "%Type = Incollection" write$
915  output.bibitem
916  format.authors "author" output.check
917  author format.key output
918  new.block
919  format.title "title" output.check
920  new.block
921  crossref missing$
922    { format.in.ed.booktitle "booktitle" output.check
923      format.bvolume output
924      format.number.series output
925      format.publisher.address output
926      format.edition output
927      format.date output
928    }
929    { format.incoll.inproc.crossref output.nonnull
930    }
931  if$
932  format.pages "pages" output.check
933  new.sentence
934  format.note output
935  fin.entry
936}
937FUNCTION {inproceedings}
938{ "%Type = Inproceedings" write$
939  output.bibitem
940  format.authors "author" output.check
941  author format.key output
942  new.block
943  format.title "title" output.check
944  new.block
945  crossref missing$
946    { format.in.ed.booktitle "booktitle" output.check
947      format.bvolume output
948      format.number.series output
949      publisher empty$
950        { format.organization.address output }
951        { organization "organization" bibinfo.check output
952          format.publisher.address output
953          format.date output
954        }
955      if$
956    }
957    { format.incoll.inproc.crossref output.nonnull
958    }
959  if$
960  format.pages "pages" output.check
961  new.sentence
962  format.note output
963  fin.entry
964}
965FUNCTION {conference} { inproceedings }
966FUNCTION {manual}
967{ "%Type = Manual" write$
968  output.bibitem
969  format.authors output
970  author format.key output
971  format.btitle "title" output.check
972  organization "organization" bibinfo.check output
973  address "address" bibinfo.check output
974  format.edition output
975  format.date "year" output.check
976  new.sentence
977  format.note output
978  fin.entry
979}
980
981FUNCTION {mastersthesis}
982{ "%Type = Masterthesis" write$
983  output.bibitem
984  format.authors "author" output.check
985  author format.key output
986  format.btitle
987  "title" output.check
988  bbl.mthesis format.thesis.type output.nonnull
989  school "school" bibinfo.warn output
990  address "address" bibinfo.check output
991  format.date "year" output.check
992  new.sentence
993  format.note output
994  fin.entry
995}
996
997FUNCTION {misc}
998{ "%Type = Misc" write$
999  output.bibitem
1000  format.authors output
1001  author format.key output
1002  format.title output
1003  howpublished "howpublished" bibinfo.check output
1004  format.date "year" output.check
1005  new.sentence
1006  format.note output
1007  fin.entry
1008}
1009FUNCTION {phdthesis}
1010{ "%Type = Phdthesis" write$
1011  output.bibitem
1012  format.authors "author" output.check
1013  author format.key output
1014  format.btitle
1015  "title" output.check
1016  bbl.phdthesis format.thesis.type output.nonnull
1017  school "school" bibinfo.warn output
1018  address "address" bibinfo.check output
1019  format.date "year" output.check
1020  new.sentence
1021  format.note output
1022  fin.entry
1023}
1024
1025FUNCTION {proceedings}
1026{ "%Type = Proceedings" write$
1027  output.bibitem
1028  format.editors output
1029  editor format.key output
1030  format.btitle "title" output.check
1031  format.bvolume output
1032  format.number.series output
1033  publisher empty$
1034    { format.organization.address output }
1035    { organization "organization" bibinfo.check output
1036      format.publisher.address output
1037    }
1038  if$
1039  format.date "year" output.check
1040  new.sentence
1041  format.note output
1042  fin.entry
1043}
1044
1045FUNCTION {techreport}
1046{ "%Type = Techreport" write$
1047  output.bibitem
1048  format.authors "author" output.check
1049  author format.key output
1050  format.btitle
1051  "title" output.check
1052  format.tr.number output.nonnull
1053  institution "institution" bibinfo.warn output
1054  address "address" bibinfo.check output
1055  format.date "year" output.check
1056  new.sentence
1057  format.note output
1058  fin.entry
1059}
1060
1061FUNCTION {unpublished}
1062{ "%Type = Unpublished" write$
1063  output.bibitem
1064  format.authors "author" output.check
1065  author format.key output
1066  format.title "title" output.check
1067  format.date "year" output.check
1068  new.sentence
1069  format.note "note" output.check
1070  fin.entry
1071}
1072
1073FUNCTION {default.type} { misc }
1074READ
1075FUNCTION {sortify}
1076{ purify$
1077  "l" change.case$
1078}
1079INTEGERS { len }
1080FUNCTION {chop.word}
1081{ 's :=
1082  'len :=
1083  s #1 len substring$ =
1084    { s len #1 + global.max$ substring$ }
1085    's
1086  if$
1087}
1088FUNCTION {format.lab.names}
1089{ 's :=
1090  "" 't :=
1091  s #1 "{vv~}{ll}" format.name$
1092  s num.names$ duplicate$
1093  #2 >
1094    { pop$
1095      " " * bbl.etal *
1096    }
1097    { #2 <
1098        'skip$
1099        { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
1100            {
1101              " " * bbl.etal *
1102            }
1103            { bbl.and space.word * s #2 "{vv~}{ll}" format.name$
1104              * }
1105          if$
1106        }
1107      if$
1108    }
1109  if$
1110}
1111
1112FUNCTION {author.key.label}
1113{ author empty$
1114    { key empty$
1115        { cite$ #1 #3 substring$ }
1116        'key
1117      if$
1118    }
1119    { author format.lab.names }
1120  if$
1121}
1122
1123FUNCTION {author.editor.key.label}
1124{ author empty$
1125    { editor empty$
1126        { key empty$
1127            { cite$ #1 #3 substring$ }
1128            'key
1129          if$
1130        }
1131        { editor format.lab.names }
1132      if$
1133    }
1134    { author format.lab.names }
1135  if$
1136}
1137
1138FUNCTION {editor.key.label}
1139{ editor empty$
1140    { key empty$
1141        { cite$ #1 #3 substring$ }
1142        'key
1143      if$
1144    }
1145    { editor format.lab.names }
1146  if$
1147}
1148
1149FUNCTION {calc.short.authors}
1150{ type$ "book" =
1151  type$ "inbook" =
1152  or
1153    'author.editor.key.label
1154    { type$ "proceedings" =
1155        'editor.key.label
1156        'author.key.label
1157      if$
1158    }
1159  if$
1160  'short.list :=
1161}
1162
1163FUNCTION {calc.label}
1164{ calc.short.authors
1165  short.list
1166  "("
1167  *
1168  year duplicate$ empty$
1169     { pop$ "????" }
1170     { purify$ #-1 #4 substring$ }
1171  if$
1172  *
1173  'label :=
1174}
1175
1176FUNCTION {sort.format.names}
1177{ 's :=
1178  #1 'nameptr :=
1179  ""
1180  s num.names$ 'numnames :=
1181  numnames 'namesleft :=
1182    { namesleft #0 > }
1183    { s nameptr
1184      "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}"
1185      format.name$ 't :=
1186      nameptr #1 >
1187        {
1188          "   "  *
1189          namesleft #1 = t "others" = and
1190            { "zzzzz" * }
1191            { t sortify * }
1192          if$
1193        }
1194        { t sortify * }
1195      if$
1196      nameptr #1 + 'nameptr :=
1197      namesleft #1 - 'namesleft :=
1198    }
1199  while$
1200}
1201
1202FUNCTION {sort.format.title}
1203{ 't :=
1204  "A " #2
1205    "An " #3
1206      "The " #4 t chop.word
1207    chop.word
1208  chop.word
1209  sortify
1210  #1 global.max$ substring$
1211}
1212FUNCTION {author.sort}
1213{ author empty$
1214    { key empty$
1215        { "to sort, need author or key in " cite$ * warning$
1216          ""
1217        }
1218        { key sortify }
1219      if$
1220    }
1221    { author sort.format.names }
1222  if$
1223}
1224FUNCTION {author.editor.sort}
1225{ author empty$
1226    { editor empty$
1227        { key empty$
1228            { "to sort, need author, editor, or key in " cite$ * warning$
1229              ""
1230            }
1231            { key sortify }
1232          if$
1233        }
1234        { editor sort.format.names }
1235      if$
1236    }
1237    { author sort.format.names }
1238  if$
1239}
1240FUNCTION {editor.sort}
1241{ editor empty$
1242    { key empty$
1243        { "to sort, need editor or key in " cite$ * warning$
1244          ""
1245        }
1246        { key sortify }
1247      if$
1248    }
1249    { editor sort.format.names }
1250  if$
1251}
1252FUNCTION {presort}
1253{ calc.label
1254  label sortify
1255  "    "
1256  *
1257  type$ "book" =
1258  type$ "inbook" =
1259  or
1260    'author.editor.sort
1261    { type$ "proceedings" =
1262        'editor.sort
1263        'author.sort
1264      if$
1265    }
1266  if$
1267  #1 entry.max$ substring$
1268  'sort.label :=
1269  sort.label
1270  *
1271  "    "
1272  *
1273  title field.or.null
1274  sort.format.title
1275  *
1276  #1 entry.max$ substring$
1277  'sort.key$ :=
1278}
1279
1280ITERATE {presort}
1281%SORT
1282STRINGS { last.label next.extra }
1283INTEGERS { last.extra.num number.label }
1284FUNCTION {initialize.extra.label.stuff}
1285{ #0 int.to.chr$ 'last.label :=
1286  "" 'next.extra :=
1287  #0 'last.extra.num :=
1288  #0 'number.label :=
1289}
1290FUNCTION {forward.pass}
1291{ last.label label =
1292    { last.extra.num #1 + 'last.extra.num :=
1293      last.extra.num int.to.chr$ 'extra.label :=
1294    }
1295    { "a" chr.to.int$ 'last.extra.num :=
1296      "" 'extra.label :=
1297      label 'last.label :=
1298    }
1299  if$
1300  number.label #1 + 'number.label :=
1301}
1302FUNCTION {reverse.pass}
1303{ next.extra "b" =
1304    { "a" 'extra.label := }
1305    'skip$
1306  if$
1307  extra.label 'next.extra :=
1308  extra.label
1309  duplicate$ empty$
1310    'skip$
1311    { "{\natexlab{" swap$ * "}}" * }
1312  if$
1313  'extra.label :=
1314  label extra.label * 'label :=
1315}
1316EXECUTE {initialize.extra.label.stuff}
1317ITERATE {forward.pass}
1318REVERSE {reverse.pass}
1319FUNCTION {bib.sort.order}
1320{ sort.label
1321  "    "
1322  *
1323  year field.or.null sortify
1324  *
1325  "    "
1326  *
1327  title field.or.null
1328  sort.format.title
1329  *
1330  #1 entry.max$ substring$
1331  'sort.key$ :=
1332}
1333ITERATE {bib.sort.order}
1334%SORT
1335FUNCTION {begin.bib}
1336{ preamble$ empty$
1337    'skip$
1338    { preamble$ write$ newline$ }
1339  if$
1340  "\begin{thebibliography}{" number.label int.to.str$ * "}" *
1341  write$ newline$
1342  "\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi"
1343  write$ newline$
1344  "\providecommand{\bibinfo}[2]{#2}"
1345  write$ newline$
1346        "\ifx\xfnm\relax \def\xfnm[#1]{\unskip,\space#1}\fi"
1347  write$ newline$
1348}
1349EXECUTE {begin.bib}
1350EXECUTE {init.state.consts}
1351ITERATE {call.type$}
1352FUNCTION {end.bib}
1353{ newline$
1354  "\end{thebibliography}" write$ newline$
1355}
1356EXECUTE {end.bib}
1357%% End of customized bst file
1358%%
1359%% End of file `model1-num-names.bst'.
Note: See TracBrowser for help on using the repository browser.