]> AND Private Git Repository - kahina_paper1.git/blob - model3-num-names.bst
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
cd1039382d1e2fc8a0543312627889919d05c9bd
[kahina_paper1.git] / model3-num-names.bst
1 %%
2 %% This is file `model3-num-names.bst'  (Version 2.0),
3 %% 
4 %% Copyright 2009-2012 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: model3-num-names.bst 211 2012-10-22 07:31:59Z rishi $
17 %%
18 %% $URL: http://lenova.river-valley.com/svn/elsbst/trunk/New-Model-3/model3-num-names.bst $
19 %%
20 %%
21
22 ENTRY
23   { address
24     archive
25     author
26     booktitle
27     chapter
28     collaboration
29     edition
30     editor
31     eid
32     howpublished
33     institution
34     isbn
35     journal
36     key
37     month
38     note
39     number
40     numpages
41     organization
42     pages
43     publisher
44     school
45     series
46     title
47     type
48     volume
49     year
50     url
51     doi
52     eprint
53     pubmed
54   }
55   {}
56   { label extra.label sort.label short.list }
57
58 INTEGERS { output.state before.all mid.sentence after.sentence after.block }
59
60 STRINGS { urlprefix doiprefix eprintprefix pubmedprefix }
61
62 FUNCTION {init.web.variables}
63 {
64  "\URLprefix "     'urlprefix :=
65  "\DOIprefix"      'doiprefix :=
66  "\ArXivprefix  "   'eprintprefix :=
67  "\Pubmedprefix "  'pubmedprefix :=
68 }
69
70 FUNCTION {init.state.consts}
71 { #0 'before.all :=
72   #1 'mid.sentence :=
73   #2 'after.sentence :=
74   #3 'after.block :=
75 }
76
77 STRINGS { s t}
78
79 FUNCTION {output.nonnull}
80 { 's :=
81   output.state mid.sentence =
82     { "; " * write$ }
83     { output.state after.block =
84         { add.period$ write$
85           newline$
86           "\newblock " write$
87         }
88         { output.state before.all =
89             'write$
90             { add.period$ " " * write$ }
91           if$
92         }
93       if$
94       mid.sentence 'output.state :=
95     }
96   if$
97   s
98 }
99 FUNCTION {output}
100 { duplicate$ empty$
101     'pop$
102     'output.nonnull
103   if$
104 }
105 FUNCTION {output.check}
106 { 't :=
107   duplicate$ empty$
108     { pop$ "empty " t * " in " * cite$ * warning$ }
109     'output.nonnull
110   if$
111 }
112 FUNCTION {fin.entry}
113 { add.period$
114   write$
115   newline$
116 }
117
118 FUNCTION {new.block}
119 { output.state before.all =
120     'skip$
121     { after.block 'output.state := }
122   if$
123 }
124 FUNCTION {new.sentence}
125 { output.state after.block =
126     'skip$
127     { output.state before.all =
128         'skip$
129         { after.sentence 'output.state := }
130       if$
131     }
132   if$
133 }
134 FUNCTION {add.blank}
135 {  " " * before.all 'output.state :=
136 }
137
138 FUNCTION {no.blank.or.punct}
139 {  "" * before.all 'output.state :=
140 }
141
142 FUNCTION {date.block}
143 {
144   ";" *
145   no.blank.or.punct
146 }
147
148 FUNCTION {book.date.block}
149 {
150   "," *
151   no.blank.or.punct
152 }
153
154 FUNCTION {not}
155 {   { #0 }
156     { #1 }
157   if$
158 }
159 FUNCTION {and}
160 {   'skip$
161     { pop$ #0 }
162   if$
163 }
164 FUNCTION {or}
165 {   { pop$ #1 }
166     'skip$
167   if$
168 }
169 STRINGS {z}
170 FUNCTION {remove.dots}
171 { 'z :=
172   ""
173   { z empty$ not }
174   { z #1 #1 substring$
175     z #2 global.max$ substring$ 'z :=
176     duplicate$ "." = 'pop$
177       { * }
178     if$
179   }
180   while$
181 }
182 FUNCTION {new.block.checkb}
183 { empty$
184   swap$ empty$
185   and
186     'skip$
187     'new.block
188   if$
189 }
190 FUNCTION {field.or.null}
191 { duplicate$ empty$
192     { pop$ "" }
193     'skip$
194   if$
195 }
196 FUNCTION {emphasize}
197 { duplicate$ empty$
198     { pop$ "" }
199     { "\emph{" swap$ * "}" * }
200   if$
201 }
202 FUNCTION {tie.or.space.prefix}
203 { duplicate$ text.length$ #3 <
204     { "~" }
205     { " " }
206   if$
207   swap$
208 }
209
210 FUNCTION {capitalize}
211 { "u" change.case$ "t" change.case$ }
212
213 FUNCTION {space.word}
214 { " " swap$ * " " * }
215  % Here are the language-specific definitions for explicit words.
216  % Each function has a name bbl.xxx where xxx is the English word.
217  % The language selected here is ENGLISH
218 FUNCTION {bbl.and}
219 { "and"}
220
221 FUNCTION {bbl.etal}
222 { "et~al." }
223
224 FUNCTION {bbl.editors}
225 { "editors" }
226
227 FUNCTION {bbl.editor}
228 { "editor" }
229
230 FUNCTION {bbl.edby}
231 { "edited by" }
232
233 FUNCTION {bbl.edition}
234 { "ed." }
235
236 FUNCTION {bbl.volume}
237 { "vol." }
238
239 FUNCTION {bbl.of}
240 { "of" }
241
242 FUNCTION {bbl.number}
243 { "no." }
244
245 FUNCTION {bbl.nr}
246 { "no." }
247
248 FUNCTION {bbl.in}
249 { "in" }
250
251 FUNCTION {bbl.pages}
252 { " p." }
253
254 FUNCTION {bbl.page}
255 { " p." }
256
257 FUNCTION {bbl.eidpp}
258 { "pages" }
259
260 FUNCTION {bbl.chapter}
261 { "chap." }
262
263 FUNCTION {bbl.techrep}
264 { "Tech. Rep." }
265
266 FUNCTION {bbl.mthesis}
267 { "Master's thesis" }
268
269 FUNCTION {bbl.phdthesis}
270 { "Ph.D. thesis" }
271
272 FUNCTION {close.brace}
273 { "}{}" }
274
275 MACRO {jan} {"Jan."}
276
277 MACRO {feb} {"Feb."}
278
279 MACRO {mar} {"Mar."}
280
281 MACRO {apr} {"Apr."}
282
283 MACRO {may} {"May"}
284
285 MACRO {jun} {"Jun."}
286
287 MACRO {jul} {"Jul."}
288
289 MACRO {aug} {"Aug."}
290
291 MACRO {sep} {"Sep."}
292
293 MACRO {oct} {"Oct."}
294
295 MACRO {nov} {"Nov."}
296
297 MACRO {dec} {"Dec."}
298
299 MACRO {acmcs} {"ACM Comput. Surv."}
300
301 MACRO {acta} {"Acta Inf."}
302
303 MACRO {cacm} {"Commun. ACM"}
304
305 MACRO {ibmjrd} {"IBM J. Res. Dev."}
306
307 MACRO {ibmsj} {"IBM Syst.~J."}
308
309 MACRO {ieeese} {"IEEE Trans. Software Eng."}
310
311 MACRO {ieeetc} {"IEEE Trans. Comput."}
312
313 MACRO {ieeetcad}
314  {"IEEE Trans. Comput. Aid. Des."}
315
316 MACRO {ipl} {"Inf. Process. Lett."}
317
318 MACRO {jacm} {"J.~ACM"}
319
320 MACRO {jcss} {"J.~Comput. Syst. Sci."}
321
322 MACRO {scp} {"Sci. Comput. Program."}
323
324 MACRO {sicomp} {"SIAM J. Comput."}
325
326 MACRO {tocs} {"ACM Trans. Comput. Syst."}
327
328 MACRO {tods} {"ACM Trans. Database Syst."}
329
330 MACRO {tog} {"ACM Trans. Graphic."}
331
332 MACRO {toms} {"ACM Trans. Math. Software"}
333
334 MACRO {toois} {"ACM Trans. Office Inf. Syst."}
335
336 MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}
337
338 MACRO {tcs} {"Theor. Comput. Sci."}
339
340 FUNCTION {bibinfo.check}
341 { swap$
342   duplicate$ missing$
343     {
344       pop$ pop$
345       ""
346     }
347     { duplicate$ empty$
348         {
349           swap$ pop$
350         }
351         { swap$
352           "\bibinfo{" swap$ * "}{" * swap$ * "}" *
353         }
354       if$
355     }
356   if$
357 }
358 FUNCTION {bibinfo.warn}
359 { swap$
360   duplicate$ missing$
361     {
362       swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
363       ""
364     }
365     { duplicate$ empty$
366         {
367           swap$ "empty " swap$ * " in " * cite$ * warning$
368         }
369         { swap$
370           pop$
371         }
372       if$
373     }
374   if$
375 }
376
377
378 INTEGERS { nameptr namesleft numnames }
379
380
381 STRINGS  { bibinfo}
382
383 % FUNCTION {format.names}
384 % { 'bibinfo :=
385 %   duplicate$ empty$ 'skip$ {
386 %   's :=
387 %   "" 't :=
388 %   #1 'nameptr :=
389 %   s num.names$ 'numnames :=
390 %   numnames 'namesleft :=
391 %     { namesleft #0 > }
392 %     { s nameptr
393 %       "{vv~}{ll}{ jj}{ f{}}"
394 %       format.name$
395 %       remove.dots
396 %       bibinfo bibinfo.check
397 %       't :=
398 %       nameptr #1 >
399 %         {
400 %           namesleft #1 >
401 %             { ", " * t * }
402 %             {
403 %               s nameptr "{ll}" format.name$ duplicate$ "others" =
404 %                 { 't := }
405 %                 { pop$ }
406 %               if$
407 %               "," *
408 %               t "others" =
409 %                 {
410 %                   " " * bbl.etal *
411 %                 }
412 %                 { " " * t * }
413 %               if$
414 %             }
415 %           if$
416 %         }
417 %         't
418 %       if$
419 %       nameptr #1 + 'nameptr :=
420 %       namesleft #1 - 'namesleft :=
421 %     }
422 %   while$
423 %   } if$
424 % }
425
426 FUNCTION {format.names}
427 { 'bibinfo :=
428   duplicate$ empty$ 'skip$ {
429   's :=
430   "" 't :=
431   #1 'nameptr :=
432   s num.names$ 'numnames :=
433   numnames 'namesleft :=
434     { namesleft #0 > }
435     { s nameptr
436       "{vv~}{ll}{ jj}\xfnm[{ f{.}.}]"
437       format.name$
438 %      remove.dots
439       bibinfo bibinfo.check
440       't :=
441       nameptr #1 >
442         {
443           nameptr #6
444           #1 + =
445           numnames #6
446           > and
447             { "others" 't :=
448               #1 'namesleft := }
449             'skip$
450           if$
451           namesleft #1 >
452             { ", " * t * }
453             {
454               "," *
455               s nameptr "{ll}" format.name$ duplicate$ "others" =
456                 { 't := }
457                 { pop$ }
458               if$
459               t "others" =
460                 {
461                   " " * bbl.etal *
462                 }
463                 { " " * t * }
464               if$
465             }
466           if$
467         }
468         't
469       if$
470       nameptr #1 + 'nameptr :=
471       namesleft #1 - 'namesleft :=
472     }
473   while$
474   } if$
475 }
476
477
478 FUNCTION {format.names.ed}
479 {
480   format.names
481 }
482 FUNCTION {format.key}
483 { empty$
484     { key field.or.null }
485     { "" }
486   if$
487 }
488
489 FUNCTION {format.authors}
490 { author "author" format.names
491     duplicate$ empty$ 'skip$
492     { collaboration "collaboration" bibinfo.check
493       duplicate$ empty$ 'skip$
494         { " (" swap$ * ")" * }
495       if$
496       *
497     }
498   if$
499 }
500 FUNCTION {get.bbl.editor}
501 { editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
502
503 FUNCTION {format.editors}
504 { editor "editor" format.names duplicate$ empty$ 'skip$
505     {
506       "," *
507       " " *
508       get.bbl.editor
509       *
510     }
511   if$
512 }
513 FUNCTION {format.isbn}
514 { isbn "isbn" bibinfo.check
515   duplicate$ empty$ 'skip$
516     {
517       new.block
518       "ISBN " swap$ *
519     }
520   if$
521 }
522
523 FUNCTION {format.note}
524 {
525  note empty$
526     { "" }
527     { note #1 #1 substring$
528       duplicate$ "{" =
529         'skip$
530         { output.state mid.sentence =
531           { "l" }
532           { "u" }
533         if$
534         change.case$
535         }
536       if$
537       note #2 global.max$ substring$ * "note" bibinfo.check
538     }
539   if$
540 }
541
542 FUNCTION {format.title}
543 { title
544   duplicate$ empty$ 'skip$
545     { "t" change.case$ }
546   if$
547   "title" bibinfo.check
548 }
549 FUNCTION {format.full.names}
550 {'s :=
551  "" 't :=
552   #1 'nameptr :=
553   s num.names$ 'numnames :=
554   numnames 'namesleft :=
555     { namesleft #0 > }
556     { s nameptr
557       "{vv~}{ll}" format.name$
558       't :=
559       nameptr #1 >
560         {
561           nameptr #6
562           #1 + =
563           numnames #6
564           > and
565             { "others" 't :=
566               #1 'namesleft := }
567             'skip$
568           if$
569           namesleft #1 >
570             { ", " * t * }
571             {
572               s nameptr "{ll}" format.name$ duplicate$ "others" =
573                 { 't := }
574                 { pop$ }
575               if$
576               t "others" =
577                 {
578                   " " * bbl.etal *
579                 }
580                 {
581                   bbl.and
582                   space.word * t *
583                 }
584               if$
585             }
586           if$
587         }
588         't
589       if$
590       nameptr #1 + 'nameptr :=
591       namesleft #1 - 'namesleft :=
592     }
593   while$
594 }
595
596 FUNCTION {author.editor.key.full}
597 { author empty$
598     { editor empty$
599         { key empty$
600             { cite$ #1 #3 substring$ }
601             'key
602           if$
603         }
604         { editor format.full.names }
605       if$
606     }
607     { author format.full.names }
608   if$
609 }
610
611 FUNCTION {author.key.full}
612 { author empty$
613     { key empty$
614          { cite$ #1 #3 substring$ }
615           'key
616       if$
617     }
618     { author format.full.names }
619   if$
620 }
621
622 FUNCTION {editor.key.full}
623 { editor empty$
624     { key empty$
625          { cite$ #1 #3 substring$ }
626           'key
627       if$
628     }
629     { editor format.full.names }
630   if$
631 }
632
633 FUNCTION {make.full.names}
634 { type$ "book" =
635   type$ "inbook" =
636   or
637     'author.editor.key.full
638     { type$ "proceedings" =
639         'editor.key.full
640         'author.key.full
641       if$
642     }
643   if$
644 }
645
646 FUNCTION {output.bibitem}
647 { newline$
648   "\bibitem[{" write$
649   label write$
650   ")" make.full.names duplicate$ short.list =
651      { pop$ }
652      { * }
653    if$
654   "}]{" * write$
655   cite$ write$
656   "}" write$
657   newline$
658   ""
659   before.all 'output.state :=
660 }
661
662 FUNCTION {n.dashify}
663 {
664   't :=
665   ""
666     { t empty$ not }
667     { t #1 #1 substring$ "-" =
668         { t #1 #2 substring$ "--" = not
669             { "--" *
670               t #2 global.max$ substring$ 't :=
671             }
672             {   { t #1 #1 substring$ "-" = }
673                 { "-" *
674                   t #2 global.max$ substring$ 't :=
675                 }
676               while$
677             }
678           if$
679         }
680         { t #1 #1 substring$ *
681           t #2 global.max$ substring$ 't :=
682         }
683       if$
684     }
685   while$
686 }
687
688 FUNCTION {word.in}
689 { bbl.in capitalize
690   ":" *
691   " " * }
692
693 FUNCTION {format.date}
694 { year "year" bibinfo.check duplicate$ empty$
695     {
696       "empty year in " cite$ * "; set to ????" * warning$
697        pop$ "????"
698     }
699     'skip$
700   if$
701   extra.label *
702 }
703 FUNCTION {format.btitle}
704 { title "title" bibinfo.check
705   duplicate$ empty$ 'skip$
706     {
707     }
708   if$
709 }
710 FUNCTION {either.or.check}
711 { empty$
712     'pop$
713     { "can't use both " swap$ * " fields in " * cite$ * warning$ }
714   if$
715 }
716 FUNCTION {format.bvolume}
717 { volume empty$
718     { "" }
719     { bbl.volume volume tie.or.space.prefix
720       "volume" bibinfo.check * *
721       series "series" bibinfo.check
722       duplicate$ empty$ 'pop$
723         { swap$ bbl.of space.word * swap$
724           emphasize * }
725       if$
726       "volume and number" number either.or.check
727     }
728   if$
729 }
730 FUNCTION {format.number.series}
731 { volume empty$
732     { number empty$
733         { series field.or.null }
734         { series empty$
735             { number "number" bibinfo.check }
736             { output.state mid.sentence =
737                 { bbl.number }
738                 { bbl.number capitalize }
739               if$
740               number tie.or.space.prefix "number" bibinfo.check * *
741               bbl.in space.word *
742               series "series" bibinfo.check *
743             }
744           if$
745         }
746       if$
747     }
748     { "" }
749   if$
750 }
751
752 FUNCTION {format.edition}
753 { edition duplicate$ empty$ 'skip$
754     {
755       output.state mid.sentence =
756         { "l" }
757         { "t" }
758       if$ change.case$
759       "edition" bibinfo.check
760       " " * bbl.edition *
761     }
762   if$
763 }
764 INTEGERS { multiresult }
765 FUNCTION {multi.page.check}
766 { 't :=
767   #0 'multiresult :=
768     { multiresult not
769       t empty$ not
770       and
771     }
772     { t #1 #1 substring$
773       duplicate$ "-" =
774       swap$ duplicate$ "," =
775       swap$ "+" =
776       or or
777         { #1 'multiresult := }
778         { t #2 global.max$ substring$ 't := }
779       if$
780     }
781   while$
782   multiresult
783 }
784
785 FUNCTION {format.pages}
786 { pages duplicate$ empty$ 'skip$
787     { duplicate$ multi.page.check
788         {
789           bbl.pages swap$
790           n.dashify
791         }
792         {
793           bbl.page swap$
794         }
795       if$
796       tie.or.space.prefix
797       "pages" bibinfo.check
798       * *
799     }
800   if$
801 }
802 FUNCTION {format.journal.pages}
803 { pages duplicate$ empty$ 'pop$
804     { swap$ duplicate$ empty$
805         { pop$ pop$ format.pages }
806         {
807           ":" *
808           swap$
809           n.dashify
810           "pages" bibinfo.check
811           *
812         }
813       if$
814     }
815   if$
816 }
817 FUNCTION {format.journal.eid}
818 { eid "eid" bibinfo.check
819   duplicate$ empty$ 'pop$
820     { swap$ duplicate$ empty$ 'skip$
821       {
822           ":" *
823       }
824       if$
825       swap$ *
826       numpages empty$ 'skip$
827         { bbl.eidpp numpages tie.or.space.prefix
828           "numpages" bibinfo.check * *
829           " (" swap$ * ")" * *
830         }
831       if$
832     }
833   if$
834 }
835 FUNCTION {format.vol.num.pages}
836 { volume field.or.null
837   duplicate$ empty$ 'skip$
838     {
839       "volume" bibinfo.check
840     }
841   if$
842   number "number" bibinfo.check duplicate$ empty$ 'skip$
843     {
844       swap$ duplicate$ empty$
845         { "there's a number but no volume in " cite$ * warning$ }
846         'skip$
847       if$
848       swap$
849       "(" swap$ * ")" *
850     }
851   if$ *
852 }
853
854 FUNCTION {format.chapter.pages}
855 { chapter empty$
856     { "" }
857     { type empty$
858         { bbl.chapter }
859         { type "l" change.case$
860           "type" bibinfo.check
861         }
862       if$
863       chapter tie.or.space.prefix
864       "chapter" bibinfo.check
865       * *
866     }
867   if$
868 }
869
870 FUNCTION {format.booktitle}
871 {
872   booktitle "booktitle" bibinfo.check
873 }
874 FUNCTION {format.in.ed.booktitle}
875 { format.booktitle duplicate$ empty$ 'skip$
876     {
877       editor "editor" format.names.ed duplicate$ empty$ 'pop$
878         {
879           "," *
880           " " *
881           get.bbl.editor
882           ". " *
883           * swap$
884           * }
885       if$
886       word.in swap$ *
887     }
888   if$
889 }
890 FUNCTION {format.thesis.type}
891 { type duplicate$ empty$
892     'pop$
893     { swap$ pop$
894       "t" change.case$ "type" bibinfo.check
895     }
896   if$
897 }
898 FUNCTION {format.tr.number}
899 { number "number" bibinfo.check
900   type duplicate$ empty$
901     { pop$ bbl.techrep }
902     'skip$
903   if$
904   "type" bibinfo.check
905   swap$ duplicate$ empty$
906     { pop$ "t" change.case$ }
907     { tie.or.space.prefix * * }
908   if$
909 }
910 FUNCTION {format.article.crossref}
911 {
912   word.in
913   " \cite{" * crossref * "}" *
914 }
915 FUNCTION {format.book.crossref}
916 { volume duplicate$ empty$
917     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
918       pop$ word.in
919     }
920     { bbl.volume
921       capitalize
922       swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
923     }
924   if$
925   " \cite{" * crossref * "}" *
926 }
927 FUNCTION {format.incoll.inproc.crossref}
928 {
929   word.in
930   " \cite{" * crossref * "}" *
931 }
932 FUNCTION {format.org.or.pub}
933 { 't :=
934   ""
935   address empty$ t empty$ and
936     'skip$
937     {
938       address "address" bibinfo.check *
939       t empty$
940         'skip$
941         { address empty$
942             'skip$
943             { ": " * }
944           if$
945           t *
946         }
947       if$
948     }
949   if$
950 }
951 FUNCTION {format.publisher.address}
952 { publisher "publisher" bibinfo.check format.org.or.pub
953 }
954
955 FUNCTION {format.organization.address}
956 { organization "organization" bibinfo.check format.org.or.pub
957 }
958
959 FUNCTION {print.url}
960  {url duplicate$ empty$
961    { pop$ "" }
962    { new.sentence
963      urlprefix "\url{" * swap$  * "}" *
964    }
965    if$
966  }
967
968 FUNCTION {print.doi}
969  {doi duplicate$ empty$
970    { pop$ "" }
971    { new.sentence
972      doiprefix "\doi{" * swap$  * "}" *
973    }
974    if$
975  }
976
977 FUNCTION {print.eprint}
978  {eprint duplicate$ empty$
979    { pop$ "" }
980    { new.sentence
981      duplicate$ "\href{http://arxiv.org/abs/" swap$ * "}{\tt arXiv:" * swap$ * "}" *
982    }
983    if$
984  }
985
986 FUNCTION {print.pubmed}
987  {pubmed duplicate$ empty$
988    { pop$ "" }
989    { new.sentence
990      pubmedprefix "\Pubmed{" * swap$  * "}" *
991    }
992    if$
993  }
994
995 FUNCTION {webpage}
996 { "%Type = Webpage" write$
997   output.bibitem
998   format.authors "author" output.check
999   author format.key output
1000   author empty$
1001   {
1002     format.title "title" output.check
1003     new.block
1004     format.date "year" output.check
1005     date.block
1006   }
1007   {
1008     format.date "year" output.check
1009     date.block
1010     format.title "title" output.check
1011     new.block
1012 }
1013   if$
1014   print.url output
1015   fin.entry
1016 }
1017
1018 FUNCTION {article}
1019 { "%Type = Article" write$
1020   output.bibitem
1021   format.authors "author" output.check
1022   author format.key output
1023   new.block
1024   format.title "title" output.check
1025   new.block
1026   crossref missing$
1027     {
1028       journal
1029       remove.dots
1030       "journal" bibinfo.check
1031       "journal" output.check
1032       add.blank
1033       format.date "year" output.check
1034       date.block
1035       format.vol.num.pages output
1036     }
1037     { format.article.crossref output.nonnull
1038     }
1039   if$
1040   eid empty$
1041     { format.journal.pages }
1042     { format.journal.eid }
1043   if$
1044   new.block
1045   print.url output
1046   print.doi output
1047   print.eprint output
1048   print.pubmed output
1049   format.note output
1050   fin.entry
1051 }
1052
1053 FUNCTION {book}
1054 { "%Type = Book" write$
1055   output.bibitem
1056   author empty$
1057     { format.editors "author and editor" output.check
1058       editor format.key output
1059     }
1060     { format.authors output.nonnull
1061       crossref missing$
1062         { "author and editor" editor either.or.check }
1063         'skip$
1064       if$
1065     }
1066   if$
1067   new.block
1068   format.btitle "title" output.check
1069   crossref missing$
1070     { format.bvolume output
1071       new.block
1072       new.sentence
1073       format.number.series output
1074       format.edition output
1075       format.publisher.address output
1076     }
1077     {
1078       new.block
1079       format.book.crossref output.nonnull
1080     }
1081   if$
1082   format.date "year" output.check
1083   format.isbn output
1084   new.block
1085   print.url output
1086   print.doi output
1087   print.eprint output
1088   print.pubmed output
1089   format.note output
1090   fin.entry
1091 }
1092
1093 FUNCTION {booklet}
1094 { "%Type = Booklet" write$
1095   output.bibitem
1096   format.authors output
1097   author format.key output
1098   new.block
1099   format.title "title" output.check
1100   new.block
1101   howpublished "howpublished" bibinfo.check output
1102   address "address" bibinfo.check output
1103   format.date "year" output.check
1104   format.isbn output
1105   new.block
1106   print.url output
1107   print.doi output
1108   print.eprint output
1109   print.pubmed output
1110   format.note output
1111   fin.entry
1112 }
1113
1114 FUNCTION {inbook}
1115 { "%Type = Inbook" write$
1116   output.bibitem
1117   author empty$
1118     { format.editors "author and editor" output.check
1119       editor format.key output
1120     }
1121     { format.authors output.nonnull
1122       crossref missing$
1123         { "author and editor" editor either.or.check }
1124         'skip$
1125       if$
1126     }
1127   if$
1128   new.block
1129   format.btitle "title" output.check
1130   crossref missing$
1131     {
1132       format.bvolume output
1133       format.chapter.pages "chapter and pages" output.check
1134       new.block
1135       new.sentence
1136       format.number.series output
1137       format.edition output
1138       format.publisher.address output
1139     }
1140     {
1141       format.chapter.pages "chapter and pages" output.check
1142       new.block
1143       format.book.crossref output.nonnull
1144     }
1145   if$
1146   crossref missing$
1147     { format.isbn output }
1148     'skip$
1149   if$
1150   format.date "year" output.check
1151   book.date.block
1152   format.pages "pages" output.check
1153   new.block
1154   print.url output
1155   print.doi output
1156   print.eprint output
1157   print.pubmed output
1158   format.note output
1159   fin.entry
1160 }
1161
1162 FUNCTION {incollection}
1163 { "%Type = Incollection" write$
1164   output.bibitem
1165   format.authors "author" output.check
1166   author format.key output
1167   new.block
1168   format.title "title" output.check
1169   new.block
1170   crossref missing$
1171     { format.in.ed.booktitle "booktitle" output.check
1172       format.bvolume output
1173       format.chapter.pages output
1174       format.edition output
1175       new.sentence
1176       format.number.series output
1177       format.publisher.address output
1178       format.isbn output
1179     }
1180     { format.incoll.inproc.crossref output.nonnull
1181       format.chapter.pages output
1182     }
1183   if$
1184   format.date "year" output.check
1185   book.date.block
1186   format.pages "pages" output.check
1187   new.block
1188   print.url output
1189   print.doi output
1190   print.eprint output
1191   print.pubmed output
1192   format.note output
1193   fin.entry
1194 }
1195
1196 FUNCTION {inproceedings}
1197 { "%Type = Inproceedings" write$
1198   output.bibitem
1199   format.authors "author" output.check
1200   author format.key output
1201   new.block
1202   format.title "title" output.check
1203   new.block
1204   crossref missing$
1205     { format.in.ed.booktitle "booktitle" output.check
1206       format.bvolume output
1207       new.sentence
1208       format.number.series output
1209       publisher empty$
1210         { format.organization.address output }
1211         { organization "organization" bibinfo.check output
1212           format.publisher.address output
1213         }
1214       if$
1215       format.isbn output
1216     }
1217     { format.incoll.inproc.crossref output.nonnull
1218     }
1219   if$
1220   format.date "year" output.check
1221   book.date.block
1222   format.pages "pages" output.check
1223   new.block
1224   print.url output
1225   print.doi output
1226   print.eprint output
1227   print.pubmed output
1228   format.note output
1229   fin.entry
1230 }
1231
1232 FUNCTION {conference} { inproceedings }
1233
1234 FUNCTION {manual}
1235 { "%Type = Manual" write$
1236   output.bibitem
1237   format.authors output
1238   author format.key output
1239   new.block
1240   format.btitle "title" output.check
1241   format.edition output
1242   organization address new.block.checkb
1243   organization "organization" bibinfo.check output
1244   address "address" bibinfo.check output
1245   format.date "year" output.check
1246   new.block
1247   print.url output
1248   print.doi output
1249   print.eprint output
1250   print.pubmed output
1251   format.note output
1252   fin.entry
1253 }
1254
1255 FUNCTION {mastersthesis}
1256 { "%Type = Masterthesis" write$
1257   output.bibitem
1258   format.authors "author" output.check
1259   author format.key output
1260   new.block
1261   format.title
1262   "title" output.check
1263   new.block
1264   bbl.mthesis format.thesis.type output.nonnull
1265   school "school" bibinfo.warn output
1266   address "address" bibinfo.check output
1267   format.date "year" output.check
1268   new.block
1269   print.url output
1270   print.doi output
1271   print.eprint output
1272   print.pubmed output
1273   format.note output
1274   fin.entry
1275 }
1276
1277 FUNCTION {misc}
1278 { "%Type = Misc" write$
1279   output.bibitem
1280   format.authors output
1281   author format.key output
1282   new.block
1283   format.title output
1284   new.block
1285   howpublished "howpublished" bibinfo.check output
1286   format.date "year" output.check
1287   new.block
1288   print.url output
1289   print.doi output
1290   print.eprint output
1291   print.pubmed output
1292   format.note output
1293   fin.entry
1294 }
1295
1296 FUNCTION {phdthesis}
1297 { "%Type = Phdthesis" write$
1298   output.bibitem
1299   format.authors "author" output.check
1300   author format.key output
1301   new.block
1302   format.title
1303   "title" output.check
1304   new.block
1305   bbl.phdthesis format.thesis.type output.nonnull
1306   school "school" bibinfo.warn output
1307   address "address" bibinfo.check output
1308   format.date "year" output.check
1309   new.block
1310   print.url output
1311   print.doi output
1312   print.eprint output
1313   print.pubmed output
1314   format.note output
1315   fin.entry
1316 }
1317
1318 FUNCTION {proceedings}
1319 { "%Type = Proceedings" write$
1320   output.bibitem
1321   format.editors output
1322   editor format.key output
1323   new.block
1324   format.btitle "title" output.check
1325   format.bvolume output
1326   new.sentence
1327   format.number.series output
1328   publisher empty$
1329     { format.organization.address output }
1330     { organization "organization" bibinfo.check output
1331       format.publisher.address output
1332     }
1333   if$
1334   format.date "year" output.check
1335   format.isbn output
1336   new.block
1337   print.url output
1338   print.doi output
1339   print.eprint output
1340   print.pubmed output
1341   format.note output
1342   fin.entry
1343 }
1344
1345 FUNCTION {techreport}
1346 { "%Type = Techreport" write$
1347   output.bibitem
1348   format.authors "author" output.check
1349   author format.key output
1350   new.block
1351   format.title
1352   "title" output.check
1353   new.block
1354   format.tr.number output.nonnull
1355   institution "institution" bibinfo.warn output
1356   address "address" bibinfo.check output
1357   format.date "year" output.check
1358   new.block
1359   print.url output
1360   print.doi output
1361   print.eprint output
1362   print.pubmed output
1363   format.note output
1364   fin.entry
1365 }
1366
1367 FUNCTION {unpublished}
1368 { "%Type = Unpublished" write$
1369   output.bibitem
1370   format.authors "author" output.check
1371   author format.key output
1372   new.block
1373   format.title "title" output.check
1374   format.date "year" output.check
1375   new.block
1376   print.url output
1377   print.doi output
1378   print.eprint output
1379   print.pubmed output
1380   format.note "note" output.check
1381   fin.entry
1382 }
1383
1384 FUNCTION {default.type} { misc }
1385 READ
1386 FUNCTION {sortify}
1387 { purify$
1388   "l" change.case$
1389 }
1390 INTEGERS { len }
1391 FUNCTION {chop.word}
1392 { 's :=
1393   'len :=
1394   s #1 len substring$ =
1395     { s len #1 + global.max$ substring$ }
1396     's
1397   if$
1398 }
1399 FUNCTION {format.lab.names}
1400 { 's :=
1401   "" 't :=
1402   s #1 "{vv~}{ll}" format.name$
1403   s num.names$ duplicate$
1404   #2 >
1405     { pop$
1406       " " * bbl.etal *
1407     }
1408     { #2 <
1409         'skip$
1410         { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
1411             {
1412               " " * bbl.etal *
1413             }
1414             { bbl.and space.word * s #2 "{vv~}{ll}" format.name$
1415               * }
1416           if$
1417         }
1418       if$
1419     }
1420   if$
1421 }
1422
1423 FUNCTION {author.key.label}
1424 { author empty$
1425     { key empty$
1426         { cite$ #1 #3 substring$ }
1427         'key
1428       if$
1429     }
1430     { author format.lab.names }
1431   if$
1432 }
1433
1434 FUNCTION {author.editor.key.label}
1435 { author empty$
1436     { editor empty$
1437         { key empty$
1438             { cite$ #1 #3 substring$ }
1439             'key
1440           if$
1441         }
1442         { editor format.lab.names }
1443       if$
1444     }
1445     { author format.lab.names }
1446   if$
1447 }
1448
1449 FUNCTION {editor.key.label}
1450 { editor empty$
1451     { key empty$
1452         { cite$ #1 #3 substring$ }
1453         'key
1454       if$
1455     }
1456     { editor format.lab.names }
1457   if$
1458 }
1459
1460 FUNCTION {calc.short.authors}
1461 { type$ "book" =
1462   type$ "inbook" =
1463   or
1464     'author.editor.key.label
1465     { type$ "proceedings" =
1466         'editor.key.label
1467         'author.key.label
1468       if$
1469     }
1470   if$
1471   'short.list :=
1472 }
1473
1474 FUNCTION {calc.label}
1475 { calc.short.authors
1476   short.list
1477   "("
1478   *
1479   year duplicate$ empty$
1480      { pop$ "????" }
1481      { purify$ #-1 #4 substring$ }
1482   if$
1483   *
1484   'label :=
1485 }
1486
1487 FUNCTION {sort.format.names}
1488 { 's :=
1489   #1 'nameptr :=
1490   ""
1491   s num.names$ 'numnames :=
1492   numnames 'namesleft :=
1493     { namesleft #0 > }
1494     { s nameptr
1495       "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}"
1496 %      "{vv~}{ll~}{\rd[f.f.]}{jj~}"
1497       format.name$ 't :=
1498       nameptr #1 >
1499         {
1500           "   "  *
1501           namesleft #1 = t "others" = and
1502             { "zzzzz" * }
1503             { t sortify * }
1504           if$
1505         }
1506         { t sortify * }
1507       if$
1508       nameptr #1 + 'nameptr :=
1509       namesleft #1 - 'namesleft :=
1510     }
1511   while$
1512 }
1513
1514 FUNCTION {sort.format.title}
1515 { 't :=
1516   "A " #2
1517     "An " #3
1518       "The " #4 t chop.word
1519     chop.word
1520   chop.word
1521   sortify
1522   #1 global.max$ substring$
1523 }
1524 FUNCTION {author.sort}
1525 { author empty$
1526     { key empty$
1527         { "to sort, need author or key in " cite$ * warning$
1528           ""
1529         }
1530         { key sortify }
1531       if$
1532     }
1533     { author sort.format.names }
1534   if$
1535 }
1536 FUNCTION {author.editor.sort}
1537 { author empty$
1538     { editor empty$
1539         { key empty$
1540             { "to sort, need author, editor, or key in " cite$ * warning$
1541               ""
1542             }
1543             { key sortify }
1544           if$
1545         }
1546         { editor sort.format.names }
1547       if$
1548     }
1549     { author sort.format.names }
1550   if$
1551 }
1552 FUNCTION {editor.sort}
1553 { editor empty$
1554     { key empty$
1555         { "to sort, need editor or key in " cite$ * warning$
1556           ""
1557         }
1558         { key sortify }
1559       if$
1560     }
1561     { editor sort.format.names }
1562   if$
1563 }
1564 INTEGERS { seq.num }
1565 FUNCTION {init.seq}
1566 { #0 'seq.num :=}
1567 EXECUTE {init.seq}
1568 FUNCTION {int.to.fix}
1569 { "000000000" swap$ int.to.str$ *
1570   #-1 #10 substring$
1571 }
1572 FUNCTION {presort}
1573 { calc.label
1574   label sortify
1575   "    "
1576   *
1577   seq.num #1 + 'seq.num :=
1578   seq.num  int.to.fix
1579   'sort.label :=
1580   sort.label
1581   *
1582   "    "
1583   *
1584   title field.or.null
1585   sort.format.title
1586   *
1587   #1 entry.max$ substring$
1588   'sort.key$ :=
1589 }
1590
1591 ITERATE {presort}
1592 SORT
1593 STRINGS { last.label next.extra }
1594 INTEGERS { last.extra.num number.label }
1595 FUNCTION {initialize.extra.label.stuff}
1596 { #0 int.to.chr$ 'last.label :=
1597   "" 'next.extra :=
1598   #0 'last.extra.num :=
1599   #0 'number.label :=
1600 }
1601 FUNCTION {forward.pass}
1602 { last.label label =
1603     { last.extra.num #1 + 'last.extra.num :=
1604       last.extra.num int.to.chr$ 'extra.label :=
1605     }
1606     { "a" chr.to.int$ 'last.extra.num :=
1607       "" 'extra.label :=
1608       label 'last.label :=
1609     }
1610   if$
1611   number.label #1 + 'number.label :=
1612 }
1613 FUNCTION {reverse.pass}
1614 { next.extra "b" =
1615     { "a" 'extra.label := }
1616     'skip$
1617   if$
1618   extra.label 'next.extra :=
1619   extra.label
1620   duplicate$ empty$
1621     'skip$
1622     { "{\natexlab{" swap$ * "}}" * }
1623   if$
1624   'extra.label :=
1625   label extra.label * 'label :=
1626 }
1627 EXECUTE {initialize.extra.label.stuff}
1628 ITERATE {forward.pass}
1629 REVERSE {reverse.pass}
1630 FUNCTION {bib.sort.order}
1631 { sort.label
1632   "    "
1633   *
1634   year field.or.null sortify
1635   *
1636   "    "
1637   *
1638   title field.or.null
1639   sort.format.title
1640   *
1641   #1 entry.max$ substring$
1642   'sort.key$ :=
1643 }
1644 ITERATE {bib.sort.order}
1645 SORT
1646 FUNCTION {begin.bib}
1647 { preamble$ empty$
1648     'skip$
1649     { preamble$ write$ newline$ }
1650   if$
1651   "\begin{thebibliography}{" number.label int.to.str$ * "}" *
1652   write$ newline$
1653   "\providecommand{\natexlab}[1]{#1}"
1654   write$ newline$
1655   "\providecommand{\url}[1]{\texttt{#1}}"
1656   write$ newline$
1657   "\providecommand{\href}[2]{#2}"
1658   write$ newline$
1659   "\providecommand{\path}[1]{#1}"
1660   write$ newline$
1661   "\providecommand{\eprint}[1]{\href{http://arxiv.org/abs/#1}{\path{#1}}}"
1662   write$ newline$
1663   "\providecommand{\DOIprefix}{doi:}"
1664   write$ newline$
1665   "\providecommand{\ArXivprefix}{arXiv:}"
1666   write$ newline$
1667   "\providecommand{\URLprefix}{URL: }"
1668   write$ newline$
1669   "\providecommand{\Pubmedprefix}{pmid:}"
1670   write$ newline$
1671   "\providecommand{\doi}[1]{\href{http://dx.doi.org/#1}{\path{#1}}}"
1672   write$ newline$
1673   "\providecommand{\Pubmed}[1]{\href{pmid:#1}{\path{#1}}}"
1674   write$ newline$
1675   "\providecommand{\BIBand}{and}"
1676   write$ newline$
1677   "\providecommand{\bibinfo}[2]{#2}"
1678   write$ newline$
1679         "\ifx\xfnm\undefined \def\xfnm[#1]{\unskip,\space#1}\fi"
1680   write$ newline$
1681 }
1682 EXECUTE {begin.bib}
1683 EXECUTE {init.state.consts}
1684 EXECUTE {init.web.variables} 
1685 ITERATE {call.type$}
1686 FUNCTION {end.bib}
1687 { newline$
1688   "\end{thebibliography}" write$ newline$
1689 }
1690 EXECUTE {end.bib}
1691 %% End of customized bst file
1692 %%
1693 %% End of file `model3-num-names.bst'.
1694 %%
1695 %% Change log:
1696 %% -----------
1697 %% 22.04.2011
1698 %%
1699 %% 10.08.2012
1700 %%   a. doi, url, eprint, pmid added
1701 %%   b. Bibtype `webpage' defined
1702 %%