]> AND Private Git Repository - 16dcc.git/blob - elsarticle-num.bst
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Ajout exemple 3-cube pour algo Wild
[16dcc.git] / elsarticle-num.bst
1 %% 
2 %% Copyright 2007, 2008, 2009 Elsevier Ltd
3 %% 
4 %% This file is part of the 'Elsarticle Bundle'.
5 %% ---------------------------------------------
6 %% 
7 %% It may be distributed under the conditions of the LaTeX Project Public
8 %% License, either version 1.2 of this license or (at your option) any
9 %% later version.  The latest version of this license is in
10 %%    http://www.latex-project.org/lppl.txt
11 %% and version 1.2 or later is part of all distributions of LaTeX
12 %% version 1999/12/01 or later.
13 %% 
14 %% The list of all files belonging to the 'Elsarticle Bundle' is
15 %% given in the file `manifest.txt'.
16 %% 
17 %%% Modification of BibTeX style file elsarticle-num.bst
18 %%% ... by urlbst, version 0.6 (marked with "% urlbst")
19 %%% See <http://purl.org/nxg/dist/urlbst>
20 %%% Added webpage entry type, and url and lastchecked fields.
21 %%% Added eprint support.
22 %%% Added DOI support.
23 %%% Added hyperref support.
24 %%% Original headers follow...
25
26 %%
27 %% This is file `elsarticle-num.bst',
28 %% generated with the docstrip utility.
29 %%
30 %% The original source files were:
31 %%
32 %% merlin.mbs  (with options: `,seq-no,nm-init,ed-au,dt-end,yr-par,yrp-x,jttl-rm,thtit-a,vnum-sp,volp-blk,jdt-p,pp-last,jnm-x,btit-rm,bt-rm,pub-date,pub-xpar,pre-edn,url,url-nl,edpar,blk-com,in-col,pp,ed,abr,ednx,ord,jabr,and-xcom,xand,em-x,nfss')
33 %% After docstrip generation some manual changes were made (SP)
34
35 %% ----------------------------------------
36
37 ENTRY
38   { address
39     author
40     booktitle
41     chapter
42     edition
43     editor
44     howpublished
45     institution
46     journal
47     key
48     month
49     note
50     number
51     organization
52     pages
53     publisher
54     school
55     series
56     title
57     type
58     volume
59     year
60     eprint % urlbst
61     doi % urlbst
62     url % urlbst
63     lastchecked % urlbst
64   }
65   {}
66   { label }
67
68 INTEGERS { output.state before.all mid.sentence after.sentence after.block }
69
70 STRINGS { urlintro eprinturl eprintprefix doiprefix doiurl openinlinelink closeinlinelink } % urlbst...
71 INTEGERS { hrefform inlinelinks makeinlinelink addeprints adddoiresolver }
72 FUNCTION {init.urlbst.variables}
73 {
74   "Available from: " 'urlintro := % prefix before URL
75   "http://arxiv.org/abs/" 'eprinturl := % prefix to make URL from eprint ref
76   "arXiv:" 'eprintprefix := % text prefix printed before eprint ref
77   "http://dx.doi.org/" 'doiurl := % prefix to make URL from DOI
78   "doi:" 'doiprefix :=      % text prefix printed before DOI ref
79   #1 'addeprints :=         % 0=no eprints; 1=include eprints
80   #1 'adddoiresolver :=     % 0=no DOI resolver; 1=include it
81   #2 'hrefform :=           % 0=no crossrefs; 1=hypertex xrefs; 2=hyperref refs
82   #1 'inlinelinks :=        % 0=URLs explicit; 1=URLs attached to titles
83   % the following are internal state variables, not config constants
84   #0 'makeinlinelink :=     % state variable managed by setup.inlinelink
85   "" 'openinlinelink :=     % ditto
86   "" 'closeinlinelink :=    % ditto
87 }
88 INTEGERS {
89   bracket.state
90   outside.brackets
91   open.brackets
92   within.brackets
93   close.brackets
94 }
95 FUNCTION {init.state.consts}
96 { #0 'outside.brackets := % urlbst
97   #1 'open.brackets :=
98   #2 'within.brackets :=
99   #3 'close.brackets :=
100
101   #0 'before.all :=
102   #1 'mid.sentence :=
103   #2 'after.sentence :=
104   #3 'after.block :=
105 }
106
107 STRINGS { s t }
108
109 FUNCTION {output.nonnull.original}
110 { 's :=
111   output.state mid.sentence =
112     { ", " * write$ }
113     { output.state after.block =
114         { add.period$ write$
115           newline$
116           "\newblock " write$
117         }
118         { output.state before.all =
119             'write$
120             { add.period$ " " * write$ }
121           if$
122         }
123       if$
124       mid.sentence 'output.state :=
125     }
126   if$
127   s
128 }
129
130 FUNCTION {setup.inlinelink}
131 { makeinlinelink
132     { hrefform #1 = % hypertex
133         { "\special {html:<a href=" quote$ * url * quote$ * "> }{" * 'openinlinelink :=
134           "\special {html:</a>}" 'closeinlinelink :=
135           }
136         { hrefform #2 = % hyperref
137             { "\href{" url * "}{" * 'openinlinelink :=
138               "}" 'closeinlinelink :=
139               }
140             'skip$
141           if$ % hrefform #2 =
142         }
143       if$ % hrefform #1 =
144       #0 'makeinlinelink :=
145     }
146     'skip$
147  if$ % makeinlinelink
148 }
149 FUNCTION {add.inlinelink}
150 { openinlinelink empty$
151     'skip$
152     { openinlinelink swap$ * closeinlinelink *
153       "" 'openinlinelink :=
154       }
155   if$
156 }
157 FUNCTION {output.nonnull}
158 { % Save the thing we've been asked to output
159   's :=
160   % If the bracket-state is close.brackets, then add a close-bracket to
161   % what is currently at the top of the stack, and set bracket.state
162   % to outside.brackets
163   bracket.state close.brackets =
164     { "]" *
165       outside.brackets 'bracket.state :=
166     }
167     'skip$
168   if$
169   bracket.state outside.brackets =
170     { % We're outside all brackets -- this is the normal situation.
171       % Write out what's currently at the top of the stack, using the
172       % original output.nonnull function.
173       s
174       add.inlinelink
175       output.nonnull.original % invoke the original output.nonnull
176     }
177     { % Still in brackets.  Add open-bracket or (continuation) comma, add the
178       % new text (in s) to the top of the stack, and move to the close-brackets
179       % state, ready for next time (unless inbrackets resets it).  If we come
180       % into this branch, then output.state is carefully undisturbed.
181       bracket.state open.brackets =
182         { " [" * }
183         { ", " * } % bracket.state will be within.brackets
184       if$
185       s *
186       close.brackets 'bracket.state :=
187     }
188   if$
189 }
190
191 FUNCTION {inbrackets}
192 { bracket.state close.brackets =
193     { within.brackets 'bracket.state := } % reset the state: not open nor closed
194     { open.brackets 'bracket.state := }
195   if$
196 }
197
198 FUNCTION {format.lastchecked}
199 { lastchecked empty$
200     { "" }
201     { inbrackets "cited " lastchecked * }
202   if$
203 }
204
205 FUNCTION {output}
206 { duplicate$ empty$
207     'pop$
208     'output.nonnull
209   if$
210 }
211
212 FUNCTION {output.check}
213 { 't :=
214   duplicate$ empty$
215     { pop$ "empty " t * " in " * cite$ * warning$ }
216     'output.nonnull
217   if$
218 }
219
220 FUNCTION {fin.entry.original}
221 { add.period$
222   write$
223   newline$
224 }
225
226 FUNCTION {new.block}
227 { output.state before.all =
228     'skip$
229     { after.block 'output.state := }
230   if$
231 }
232
233 FUNCTION {new.sentence}
234 { output.state after.block =
235     'skip$
236     { output.state before.all =
237         'skip$
238         { after.sentence 'output.state := }
239       if$
240     }
241   if$
242 }
243
244 FUNCTION {add.blank}
245 {  " " * before.all 'output.state :=
246 }
247
248 FUNCTION {date.block}
249 {
250   add.blank
251 }
252
253 FUNCTION {not}
254 {   { #0 }
255     { #1 }
256   if$
257 }
258
259 FUNCTION {and}
260 {   'skip$
261     { pop$ #0 }
262   if$
263 }
264
265 FUNCTION {or}
266 {   { pop$ #1 }
267     'skip$
268   if$
269 }
270
271 FUNCTION {new.block.checka}
272 { empty$
273     'skip$
274     'new.block
275   if$
276 }
277
278 FUNCTION {new.block.checkb}
279 { empty$
280   swap$ empty$
281   and
282     'skip$
283     'new.block
284   if$
285 }
286
287 FUNCTION {new.sentence.checka}
288 { empty$
289     'skip$
290     'new.sentence
291   if$
292 }
293
294 FUNCTION {new.sentence.checkb}
295 { empty$
296   swap$ empty$
297   and
298     'skip$
299     'new.sentence
300   if$
301 }
302
303 FUNCTION {field.or.null}
304 { duplicate$ empty$
305     { pop$ "" }
306     'skip$
307   if$
308 }
309
310 FUNCTION {emphasize}
311 { skip$ }
312
313 FUNCTION {capitalize}
314 { "u" change.case$ "t" change.case$ }
315
316 FUNCTION {space.word}
317 { " " swap$ * " " * }
318
319  % Here are the language-specific definitions for explicit words.
320  % Each function has a name bbl.xxx where xxx is the English word.
321  % The language selected here is ENGLISH
322 FUNCTION {bbl.and}
323 { "and"}
324
325 FUNCTION {bbl.etal}
326 { "et~al." }
327
328 FUNCTION {bbl.editors}
329 { "Eds." }
330
331 FUNCTION {bbl.editor}
332 { "Ed." }
333
334 FUNCTION {bbl.edby}
335 { "edited by" }
336
337 FUNCTION {bbl.edition}
338 { "Edition" }
339
340 FUNCTION {bbl.volume}
341 { "Vol." }
342
343 FUNCTION {bbl.of}
344 { "of" }
345
346 FUNCTION {bbl.number}
347 { "no." }
348
349 FUNCTION {bbl.nr}
350 { "no." }
351
352 FUNCTION {bbl.in}
353 { "in" }
354
355 FUNCTION {bbl.pages}
356 { "pp." }
357
358 FUNCTION {bbl.page}
359 { "p." }
360
361 FUNCTION {bbl.chapter}
362 { "Ch." }
363
364 FUNCTION {bbl.techrep}
365 { "Tech. Rep." }
366
367 FUNCTION {bbl.mthesis}
368 { "Master's thesis" }
369
370 FUNCTION {bbl.phdthesis}
371 { "Ph.D. thesis" }
372
373 FUNCTION {bbl.first}
374 { "1st" }
375
376 FUNCTION {bbl.second}
377 { "2nd" }
378
379 FUNCTION {bbl.third}
380 { "3rd" }
381
382 FUNCTION {bbl.fourth}
383 { "4th" }
384
385 FUNCTION {bbl.fifth}
386 { "5th" }
387
388 FUNCTION {bbl.st}
389 { "st" }
390
391 FUNCTION {bbl.nd}
392 { "nd" }
393
394 FUNCTION {bbl.rd}
395 { "rd" }
396
397 FUNCTION {bbl.th}
398 { "th" }
399
400 MACRO {jan} {"Jan."}
401
402 MACRO {feb} {"Feb."}
403
404 MACRO {mar} {"Mar."}
405
406 MACRO {apr} {"Apr."}
407
408 MACRO {may} {"May"}
409
410 MACRO {jun} {"Jun."}
411
412 MACRO {jul} {"Jul."}
413
414 MACRO {aug} {"Aug."}
415
416 MACRO {sep} {"Sep."}
417
418 MACRO {oct} {"Oct."}
419
420 MACRO {nov} {"Nov."}
421
422 MACRO {dec} {"Dec."}
423
424 FUNCTION {eng.ord}
425 { duplicate$ "1" swap$ *
426   #-2 #1 substring$ "1" =
427      { bbl.th * }
428      { duplicate$ #-1 #1 substring$
429        duplicate$ "1" =
430          { pop$ bbl.st * }
431          { duplicate$ "2" =
432              { pop$ bbl.nd * }
433              { "3" =
434                  { bbl.rd * }
435                  { bbl.th * }
436                if$
437              }
438            if$
439           }
440        if$
441      }
442    if$
443 }
444
445 MACRO {acmcs} {"ACM Comput. Surv."}
446
447 MACRO {acta} {"Acta Inf."}
448
449 MACRO {cacm} {"Commun. ACM"}
450
451 MACRO {ibmjrd} {"IBM J. Res. Dev."}
452
453 MACRO {ibmsj} {"IBM Syst.~J."}
454
455 MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
456
457 MACRO {ieeetc} {"IEEE Trans. Comput."}
458
459 MACRO {ieeetcad}
460  {"IEEE Trans. Comput.-Aided Design Integrated Circuits"}
461
462 MACRO {ipl} {"Inf. Process. Lett."}
463
464 MACRO {jacm} {"J.~ACM"}
465
466 MACRO {jcss} {"J.~Comput. Syst. Sci."}
467
468 MACRO {scp} {"Sci. Comput. Programming"}
469
470 MACRO {sicomp} {"SIAM J. Comput."}
471
472 MACRO {tocs} {"ACM Trans. Comput. Syst."}
473
474 MACRO {tods} {"ACM Trans. Database Syst."}
475
476 MACRO {tog} {"ACM Trans. Gr."}
477
478 MACRO {toms} {"ACM Trans. Math. Softw."}
479
480 MACRO {toois} {"ACM Trans. Office Inf. Syst."}
481
482 MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."}
483
484 MACRO {tcs} {"Theoretical Comput. Sci."}
485
486 FUNCTION {write.url}
487 { url empty$
488     { skip$ }
489     { "\newline\urlprefix\url{" url * "}" * write$ newline$ }
490   if$
491 }
492
493 INTEGERS { nameptr namesleft numnames }
494
495 FUNCTION {format.names}
496 { 's :=
497   #1 'nameptr :=
498   s num.names$ 'numnames :=
499   numnames 'namesleft :=
500     { namesleft #0 > }
501     { s nameptr
502       "{f.~}{vv~}{ll}{, jj}" format.name$
503     't :=
504       nameptr #1 >
505         {
506           namesleft #1 >
507             { ", " * t * }
508             {
509               "," *
510               s nameptr "{ll}" format.name$ duplicate$ "others" =
511                 { 't := }
512                 { pop$ }
513               if$
514               t "others" =
515                 {
516                   " " * bbl.etal *
517                 }
518                 { " " * t * }
519               if$
520             }
521           if$
522         }
523         't
524       if$
525       nameptr #1 + 'nameptr :=
526       namesleft #1 - 'namesleft :=
527     }
528   while$
529 }
530 FUNCTION {format.names.ed}
531 { format.names }
532 FUNCTION {format.authors}
533 { author empty$
534     { "" }
535     { author format.names }
536   if$
537 }
538
539 FUNCTION {format.editors}
540 { editor empty$
541     { "" }
542     { editor format.names
543       editor num.names$ #1 >
544         { " (" * bbl.editors * ")" * }
545         { " (" * bbl.editor * ")" * }
546       if$
547     }
548   if$
549 }
550
551 FUNCTION {format.in.editors}
552 { editor empty$
553     { "" }
554     { editor format.names.ed
555       editor num.names$ #1 >
556         { " (" * bbl.editors * ")" * }
557         { " (" * bbl.editor * ")" * }
558       if$
559     }
560   if$
561 }
562
563 FUNCTION {format.note}
564 {
565  note empty$
566     { "" }
567     { note #1 #1 substring$
568       duplicate$ "{" =
569         'skip$
570         { output.state mid.sentence =
571           { "l" }
572           { "u" }
573         if$
574         change.case$
575         }
576       if$
577       note #2 global.max$ substring$ *
578     }
579   if$
580 }
581
582 FUNCTION {format.title}
583 { title empty$
584     { "" }
585     { title "t" change.case$
586     }
587   if$
588 }
589
590 FUNCTION {output.bibitem.original}
591 { newline$
592   "\bibitem{" write$
593   cite$ write$
594   "}" write$
595   newline$
596   ""
597   before.all 'output.state :=
598 }
599
600 FUNCTION {n.dashify}
601 {
602   't :=
603   ""
604     { t empty$ not }
605     { t #1 #1 substring$ "-" =
606         { t #1 #2 substring$ "--" = not
607             { "--" *
608               t #2 global.max$ substring$ 't :=
609             }
610             {   { t #1 #1 substring$ "-" = }
611                 { "-" *
612                   t #2 global.max$ substring$ 't :=
613                 }
614               while$
615             }
616           if$
617         }
618         { t #1 #1 substring$ *
619           t #2 global.max$ substring$ 't :=
620         }
621       if$
622     }
623   while$
624 }
625
626 FUNCTION {word.in}
627 { bbl.in
628   ":" *
629   " " * }
630
631 FUNCTION {format.date}
632 { year empty$
633     { month empty$
634         { "" }
635         { "there's a month but no year in " cite$ * warning$
636           month
637         }
638       if$
639     }
640     { month empty$
641         'year
642         { month " " * year * }
643       if$
644     }
645   if$
646   duplicate$ empty$
647     'skip$
648     {
649       before.all 'output.state :=
650     " (" swap$ * ")" *
651     }
652   if$
653 }
654
655 FUNCTION{format.year}
656 { year duplicate$ empty$
657     { "empty year in " cite$ * warning$ pop$ "" }
658     { "(" swap$ * ")" * }
659   if$
660 }
661
662 FUNCTION {format.btitle}
663 { title
664 }
665
666 FUNCTION {tie.or.space.connect}
667 { duplicate$ text.length$ #3 <
668     { "~" }
669     { " " }
670   if$
671   swap$ * *
672 }
673
674 FUNCTION {either.or.check}
675 { empty$
676     'pop$
677     { "can't use both " swap$ * " fields in " * cite$ * warning$ }
678   if$
679 }
680
681 FUNCTION {format.bvolume}
682 { volume empty$
683     { "" }
684     { bbl.volume volume tie.or.space.connect
685       series empty$
686         'skip$
687         { bbl.of space.word * series emphasize * }
688       if$
689       "volume and number" number either.or.check
690     }
691   if$
692 }
693
694 FUNCTION {format.number.series}
695 { volume empty$
696     { number empty$
697         { series field.or.null }
698         { output.state mid.sentence =
699             { bbl.number }
700             { bbl.number capitalize }
701           if$
702           number tie.or.space.connect
703           series empty$
704             { "there's a number but no series in " cite$ * warning$ }
705             { bbl.in space.word * series * }
706           if$
707         }
708       if$
709     }
710     { "" }
711   if$
712 }
713
714 FUNCTION {is.num}
715 { chr.to.int$
716   duplicate$ "0" chr.to.int$ < not
717   swap$ "9" chr.to.int$ > not and
718 }
719
720 FUNCTION {extract.num}
721 { duplicate$ 't :=
722   "" 's :=
723   { t empty$ not }
724   { t #1 #1 substring$
725     t #2 global.max$ substring$ 't :=
726     duplicate$ is.num
727       { s swap$ * 's := }
728       { pop$ "" 't := }
729     if$
730   }
731   while$
732   s empty$
733     'skip$
734     { pop$ s }
735   if$
736 }
737
738 FUNCTION {convert.edition}
739 { edition extract.num "l" change.case$ 's :=
740   s "first" = s "1" = or
741     { bbl.first 't := }
742     { s "second" = s "2" = or
743         { bbl.second 't := }
744         { s "third" = s "3" = or
745             { bbl.third 't := }
746             { s "fourth" = s "4" = or
747                 { bbl.fourth 't := }
748                 { s "fifth" = s "5" = or
749                     { bbl.fifth 't := }
750                     { s #1 #1 substring$ is.num
751                         { s eng.ord 't := }
752                         { edition 't := }
753                       if$
754                     }
755                   if$
756                 }
757               if$
758             }
759           if$
760         }
761       if$
762     }
763   if$
764   t
765 }
766
767 FUNCTION {format.edition}
768 { edition empty$
769     { "" }
770     { output.state mid.sentence =
771         { convert.edition "l" change.case$ " " * bbl.edition * }
772         { convert.edition "t" change.case$ " " * bbl.edition * }
773       if$
774     }
775   if$
776 }
777
778 INTEGERS { multiresult }
779
780 FUNCTION {multi.page.check}
781 { 't :=
782   #0 'multiresult :=
783     { multiresult not
784       t empty$ not
785       and
786     }
787     { t #1 #1 substring$
788       duplicate$ "-" =
789       swap$ duplicate$ "," =
790       swap$ "+" =
791       or or
792         { #1 'multiresult := }
793         { t #2 global.max$ substring$ 't := }
794       if$
795     }
796   while$
797   multiresult
798 }
799
800 FUNCTION {format.pages}
801 { pages empty$
802     { "" }
803     { pages multi.page.check
804         { bbl.pages pages n.dashify tie.or.space.connect }
805         { bbl.page pages tie.or.space.connect }
806       if$
807     }
808   if$
809 }
810
811 FUNCTION {format.journal.pages}
812 { pages empty$
813     'skip$
814     { duplicate$ empty$
815         { pop$ format.pages }
816         {
817           " " *
818           format.year * " " *
819           pages n.dashify *
820         }
821       if$
822     }
823   if$
824 }
825
826 FUNCTION {format.vol.num.pages}
827 {
828   % volume field.or.null
829   " "
830   volume empty$
831     { pop$ "" }
832     { volume * }
833   if$
834   number empty$
835     'skip$
836     {
837       "~(" number * ")" * *
838       volume empty$
839         { "there's a number but no volume in " cite$ * warning$ }
840         'skip$
841       if$
842     }
843   if$
844 }
845
846 FUNCTION {format.chapter.pages}
847 { chapter empty$
848     { "" }
849     { type empty$
850         { bbl.chapter }
851         { type "l" change.case$ }
852       if$
853       chapter tie.or.space.connect
854     }
855   if$
856 }
857
858 FUNCTION {format.in.ed.booktitle}
859 { booktitle empty$
860     { "" }
861     { editor empty$
862         { word.in booktitle * }
863         { word.in format.in.editors * ", " *
864           booktitle * }
865       if$
866     }
867   if$
868 }
869
870 FUNCTION {empty.misc.check}
871 { author empty$ title empty$ howpublished empty$
872   month empty$ year empty$ note empty$
873   and and and and and
874     { "all relevant fields are empty in " cite$ * warning$ }
875     'skip$
876   if$
877 }
878
879 FUNCTION {format.thesis.type}
880 { type empty$
881     'skip$
882     { pop$
883       type "t" change.case$
884     }
885   if$
886 }
887
888 FUNCTION {format.tr.number}
889 { type empty$
890     { bbl.techrep }
891     'type
892   if$
893   number empty$
894     { "t" change.case$ }
895     { number tie.or.space.connect }
896   if$
897 }
898
899 FUNCTION {format.article.crossref}
900 {
901   key empty$
902     { journal empty$
903         { "need key or journal for " cite$ * " to crossref " * crossref *
904           warning$
905           ""
906         }
907         { word.in journal emphasize * }
908       if$
909     }
910     { word.in key * " " *}
911   if$
912   " \cite{" * crossref * "}" *
913 }
914
915 FUNCTION {format.crossref.editor}
916 { editor #1 "{vv~}{ll}" format.name$
917   editor num.names$ duplicate$
918   #2 >
919     { pop$
920       " " * bbl.etal *
921     }
922     { #2 <
923         'skip$
924         { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
925             {
926               " " * bbl.etal *
927             }
928             { bbl.and space.word * editor #2 "{vv~}{ll}" format.name$
929               * }
930           if$
931         }
932       if$
933     }
934   if$
935 }
936
937 FUNCTION {format.book.crossref}
938 { volume empty$
939     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
940       word.in
941     }
942     { bbl.volume volume tie.or.space.connect
943       bbl.of space.word *
944     }
945   if$
946   editor empty$
947   editor field.or.null author field.or.null =
948   or
949     { key empty$
950         { series empty$
951             { "need editor, key, or series for " cite$ * " to crossref " *
952               crossref * warning$
953               "" *
954             }
955             { series emphasize * }
956           if$
957         }
958         { key * }
959       if$
960     }
961     { format.crossref.editor * }
962   if$
963   " \cite{" * crossref * "}" *
964 }
965
966 FUNCTION {format.incoll.inproc.crossref}
967 {
968   editor empty$
969   editor field.or.null author field.or.null =
970   or
971     { key empty$
972         { booktitle empty$
973             { "need editor, key, or booktitle for " cite$ * " to crossref " *
974               crossref * warning$
975               ""
976             }
977             { word.in booktitle * }
978           if$
979         }
980         { word.in key * " " *}
981       if$
982     }
983     { word.in format.crossref.editor * " " *}
984   if$
985   " \cite{" * crossref * "}" *
986 }
987
988 FUNCTION {format.org.or.pub}
989 { 't :=
990   ""
991   year empty$
992     { "empty year in " cite$ * warning$ }
993     'skip$
994   if$
995   address empty$ t empty$ and
996   year empty$ and
997     'skip$
998     {
999       t empty$
1000         { address empty$
1001           'skip$
1002           { address * }
1003           if$
1004         }
1005         { t *
1006           address empty$
1007             'skip$
1008             { ", " * address * }
1009           if$
1010         }
1011       if$
1012       year empty$
1013         'skip$
1014         { t empty$ address empty$ and
1015             'skip$
1016             { ", " * }
1017           if$
1018           year *
1019         }
1020       if$
1021     }
1022   if$
1023 }
1024
1025 FUNCTION {format.publisher.address}
1026 { publisher empty$
1027     { "empty publisher in " cite$ * warning$
1028       ""
1029     }
1030     { publisher }
1031   if$
1032   format.org.or.pub
1033 }
1034
1035 FUNCTION {format.organization.address}
1036 { organization empty$
1037     { "" }
1038     { organization }
1039   if$
1040   format.org.or.pub
1041 }
1042
1043 FUNCTION {make.href.null}
1044 {
1045   pop$
1046 }
1047 FUNCTION {make.href.hypertex}
1048 {
1049   "\special {html:<a href=" quote$ *
1050   swap$ * quote$ * "> }" * swap$ *
1051   "\special {html:</a>}" *
1052 }
1053 FUNCTION {make.href.hyperref}
1054 {
1055   "\href {" swap$ * "} {\path{" * swap$ * "}}" *
1056 }
1057 FUNCTION {make.href}
1058 { hrefform #2 =
1059     'make.href.hyperref      % hrefform = 2
1060     { hrefform #1 =
1061         'make.href.hypertex  % hrefform = 1
1062         'make.href.null      % hrefform = 0 (or anything else)
1063       if$
1064     }
1065   if$
1066 }
1067
1068 FUNCTION {format.url}
1069 { inlinelinks #1 = url empty$ or
1070    { "" }
1071    { hrefform #1 =
1072        { % special case -- add HyperTeX specials
1073          urlintro "\url{" url * "}" * url make.href.hypertex * }
1074        { urlintro "\url{" * url * "}" * }
1075      if$
1076    }
1077   if$
1078 }
1079
1080 FUNCTION {format.eprint}
1081 { eprint empty$
1082     { "" }
1083     { eprintprefix eprint * eprinturl eprint * make.href }
1084   if$
1085 }
1086
1087 FUNCTION {format.doi}
1088 { doi empty$
1089     { "" }
1090     { doiprefix doi * doiurl doi * make.href }
1091   if$
1092 }
1093
1094 FUNCTION {output.url}
1095 { url empty$
1096     'skip$
1097     { new.block
1098       format.url output
1099       format.lastchecked output
1100     }
1101   if$
1102 }
1103
1104 FUNCTION {output.web.refs}
1105 {
1106   new.block
1107   output.url
1108   addeprints eprint empty$ not and
1109     { format.eprint output.nonnull }
1110     'skip$
1111   if$
1112   adddoiresolver doi empty$ not and
1113     { format.doi output.nonnull }
1114     'skip$
1115   if$
1116 }
1117
1118 FUNCTION {output.bibitem}
1119 { outside.brackets 'bracket.state :=
1120   output.bibitem.original
1121   inlinelinks url empty$ not and
1122     { #1 'makeinlinelink := }
1123     { #0 'makeinlinelink := }
1124   if$
1125 }
1126
1127 FUNCTION {fin.entry}
1128 { output.web.refs  % urlbst
1129   makeinlinelink       % ooops, it appears we didn't have a title for inlinelink
1130     { setup.inlinelink % add some artificial link text here, as a fallback
1131       "[link]" output.nonnull }
1132     'skip$
1133   if$
1134   bracket.state close.brackets = % urlbst
1135     { "]" * }
1136     'skip$
1137   if$
1138   fin.entry.original
1139 }
1140
1141 FUNCTION {webpage}
1142 { output.bibitem
1143   author empty$
1144     { editor empty$
1145         'skip$  % author and editor both optional
1146         { format.editors output.nonnull }
1147       if$
1148     }
1149     { editor empty$
1150         { format.authors output.nonnull }
1151         { "can't use both author and editor fields in " cite$ * warning$ }
1152       if$
1153     }
1154   if$
1155   new.block
1156   title empty$ 'skip$ 'setup.inlinelink if$
1157   format.title "title" output.check
1158   inbrackets "online" output
1159   new.block
1160   year empty$
1161     'skip$
1162     { format.date "year" output.check }
1163   if$
1164   % We don't need to output the URL details ('lastchecked' and 'url'),
1165   % because fin.entry does that for us, using output.web.refs.  The only
1166   % reason we would want to put them here is if we were to decide that
1167   % they should go in front of the rather miscellaneous information in 'note'.
1168   new.block
1169   note output
1170   fin.entry
1171 }
1172
1173 FUNCTION {article}
1174 { output.bibitem
1175   format.authors "author" output.check
1176   title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
1177   format.title "title" output.check
1178   crossref missing$
1179     { journal
1180       "journal" output.check
1181       % add.blank
1182   before.all 'output.state :=
1183       format.vol.num.pages output
1184     }
1185     { format.article.crossref output.nonnull
1186       format.pages output
1187     }
1188   if$
1189   format.journal.pages
1190   format.note output
1191   fin.entry
1192   write.url
1193 }
1194
1195 FUNCTION {book}
1196 { output.bibitem
1197   author empty$
1198     { format.editors "author and editor" output.check
1199     }
1200     { format.authors output.nonnull
1201       crossref missing$
1202         { "author and editor" editor either.or.check }
1203         'skip$
1204       if$
1205     }
1206   if$
1207   title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
1208   format.btitle "title" output.check
1209   crossref missing$
1210     { format.edition output
1211       format.bvolume output
1212       format.number.series output
1213       format.publisher.address output
1214     }
1215     {
1216       format.book.crossref output.nonnull
1217     }
1218   if$
1219   format.note output
1220   fin.entry
1221   write.url
1222 }
1223
1224 FUNCTION {booklet}
1225 { output.bibitem
1226   format.authors output
1227   title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
1228   format.title "title" output.check
1229   howpublished output
1230   address output
1231   format.note output
1232   format.date output
1233   fin.entry
1234   write.url
1235 }
1236
1237 FUNCTION {inbook}
1238 { output.bibitem
1239   author empty$
1240     { format.editors "author and editor" output.check
1241     }
1242     { format.authors output.nonnull
1243       crossref missing$
1244         { "author and editor" editor either.or.check }
1245         'skip$
1246       if$
1247     }
1248   if$
1249   title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
1250   format.btitle "title" output.check
1251   crossref missing$
1252     {
1253       format.edition output
1254       format.bvolume output
1255       format.number.series output
1256       format.publisher.address output
1257       format.chapter.pages "chapter and pages" output.check
1258     }
1259     {
1260       format.chapter.pages "chapter and pages" output.check
1261       format.book.crossref output.nonnull
1262     }
1263   if$
1264   format.pages "pages" output.check
1265   format.note output
1266   fin.entry
1267   write.url
1268 }
1269
1270 FUNCTION {incollection}
1271 { output.bibitem
1272   format.authors "author" output.check
1273   title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
1274   format.title "title" output.check
1275   crossref missing$
1276     { format.in.ed.booktitle "booktitle" output.check
1277       format.edition output
1278       format.bvolume output
1279       format.number.series output
1280       format.publisher.address output
1281       format.chapter.pages output
1282     }
1283     { format.incoll.inproc.crossref output.nonnull
1284       format.chapter.pages output
1285     }
1286   if$
1287   format.pages "pages" output.check
1288   format.note output
1289   fin.entry
1290   write.url
1291 }
1292
1293 FUNCTION {inproceedings}
1294 { output.bibitem
1295   format.authors "author" output.check
1296   title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
1297   format.title "title" output.check
1298   crossref missing$
1299     { format.in.ed.booktitle "booktitle" output.check
1300       format.edition output
1301       format.bvolume output
1302       format.number.series output
1303       publisher empty$
1304         { format.organization.address output }
1305         { organization output
1306           format.publisher.address output
1307         }
1308       if$
1309     }
1310     { format.incoll.inproc.crossref output.nonnull
1311     }
1312   if$
1313   format.pages "pages" output.check
1314   format.note output
1315   fin.entry
1316   write.url
1317 }
1318
1319 FUNCTION {conference} { inproceedings }
1320
1321 FUNCTION {manual}
1322 { output.bibitem
1323   author empty$
1324     { organization empty$
1325         'skip$
1326         { organization output.nonnull
1327           address output
1328         }
1329       if$
1330     }
1331     { format.authors output.nonnull }
1332   if$
1333   title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
1334   format.btitle "title" output.check
1335   author empty$
1336     { organization empty$
1337     {
1338           address output
1339         }
1340         'skip$
1341       if$
1342     }
1343     {
1344       organization output
1345       address output
1346     }
1347   if$
1348   format.edition output
1349   format.note output
1350   format.date output
1351   fin.entry
1352   write.url
1353 }
1354
1355 FUNCTION {mastersthesis}
1356 { output.bibitem
1357   format.authors "author" output.check
1358   title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
1359   format.title "title" output.check
1360   bbl.mthesis format.thesis.type output.nonnull
1361   school "school" output.check
1362   address output
1363   format.note output
1364   format.date "year" output.check
1365   fin.entry
1366   write.url
1367 }
1368
1369 FUNCTION {misc}
1370 { output.bibitem
1371   format.authors output
1372   title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
1373   format.title output
1374   howpublished output
1375   format.note output
1376   format.date output
1377   fin.entry
1378   write.url
1379   empty.misc.check
1380 }
1381
1382 FUNCTION {phdthesis}
1383 { output.bibitem
1384   format.authors "author" output.check
1385   title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
1386   format.title "title" output.check
1387   bbl.phdthesis format.thesis.type output.nonnull
1388   school "school" output.check
1389   address output
1390   format.note output
1391   format.date "year" output.check
1392   fin.entry
1393   write.url
1394 }
1395
1396 FUNCTION {proceedings}
1397 { output.bibitem
1398   editor empty$
1399     { organization output }
1400     { format.editors output.nonnull }
1401   if$
1402   title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
1403   format.btitle "title" output.check
1404   format.bvolume output
1405   format.number.series output
1406   editor empty$
1407     { publisher empty$
1408         'skip$
1409         {
1410           format.publisher.address output
1411         }
1412       if$
1413     }
1414     { publisher empty$
1415         {
1416           format.organization.address output }
1417         {
1418           organization output
1419           format.publisher.address output
1420         }
1421       if$
1422      }
1423   if$
1424   format.note output
1425   fin.entry
1426   write.url
1427 }
1428
1429 FUNCTION {techreport}
1430 { output.bibitem
1431   format.authors "author" output.check
1432   title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
1433   format.title "title" output.check
1434   format.tr.number output.nonnull
1435   institution "institution" output.check
1436   address output
1437   format.note output
1438   format.date "year" output.check
1439   fin.entry
1440   write.url
1441 }
1442
1443 FUNCTION {unpublished}
1444 { output.bibitem
1445   format.authors "author" output.check
1446   title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
1447   format.title "title" output.check
1448   format.note "note" output.check
1449   format.date output
1450   fin.entry
1451   write.url
1452 }
1453
1454 FUNCTION {default.type} { misc }
1455
1456 READ
1457
1458 STRINGS { longest.label }
1459
1460 INTEGERS { number.label longest.label.width }
1461
1462 FUNCTION {initialize.longest.label}
1463 { "" 'longest.label :=
1464   #1 'number.label :=
1465   #0 'longest.label.width :=
1466 }
1467
1468 FUNCTION {longest.label.pass}
1469 { number.label int.to.str$ 'label :=
1470   number.label #1 + 'number.label :=
1471   label width$ longest.label.width >
1472     { label 'longest.label :=
1473       label width$ 'longest.label.width :=
1474     }
1475     'skip$
1476   if$
1477 }
1478
1479 EXECUTE {initialize.longest.label}
1480
1481 ITERATE {longest.label.pass}
1482
1483 FUNCTION {begin.bib}
1484 { preamble$ empty$
1485     'skip$
1486     { preamble$ write$ newline$ }
1487   if$
1488   "\begin{thebibliography}{"  longest.label  * "}" *
1489   write$ newline$
1490   "\expandafter\ifx\csname url\endcsname\relax"
1491   write$ newline$
1492   "  \def\url#1{\texttt{#1}}\fi"
1493   write$ newline$
1494   "\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi"
1495   write$ newline$
1496   "\expandafter\ifx\csname href\endcsname\relax"
1497   write$ newline$
1498   "  \def\href#1#2{#2} \def\path#1{#1}\fi"
1499   write$ newline$
1500 }
1501
1502 EXECUTE {begin.bib}
1503
1504 EXECUTE {init.urlbst.variables}
1505 EXECUTE {init.state.consts}
1506
1507 ITERATE {call.type$}
1508
1509 FUNCTION {end.bib}
1510 { newline$
1511   "\end{thebibliography}" write$ newline$
1512 }
1513
1514 EXECUTE {end.bib}
1515 %% End of customized bst file
1516 %%
1517 %% End of file `elsarticle-num.bst'.