source: docs/Working/re/splncs.bst @ 3618

Last change on this file since 3618 was 3618, checked in by cameron, 5 years ago

Lecture notes in CS style files

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