]> gitweb.michael.orlitzky.com - mjotex.git/blob - mjo.bst
Add initial mjo.bst copied directly from elsarticle-num.bst.
[mjotex.git] / mjo.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'.