]> mj.ucw.cz Git - diplomky.git/blob - czplainnat.bst
Restructure directory tree
[diplomky.git] / czplainnat.bst
1 %% File: `plainnat.bst'
2 %% A modification of `plain.bst' for use with natbib package
3 %%
4 %% Copyright 1993-2007 Patrick W Daly
5 %% Max-Planck-Institut f\"ur Sonnensystemforschung
6 %% Max-Planck-Str. 2
7 %% D-37191 Katlenburg-Lindau
8 %% Germany
9 %% E-mail: daly@mps.mpg.de
10 %%
11 %% This program can be redistributed and/or modified under the terms
12 %% of the LaTeX Project Public License Distributed from CTAN
13 %% archives in directory macros/latex/base/lppl.txt; either
14 %% version 1 of the License, or any later version.
15 %%
16  % Version and source file information:
17  % \ProvidesFile{natbst.mbs}[2007/11/26 1.93 (PWD)]
18  %
19  % BibTeX `plainnat' family
20  %   version 0.99b for BibTeX versions 0.99a or later,
21  %   for LaTeX versions 2.09 and 2e.
22  %
23  % For use with the `natbib.sty' package; emulates the corresponding
24  %   member of the `plain' family, but with author-year citations.
25  %
26  % With version 6.0 of `natbib.sty', it may also be used for numerical
27  %   citations, while retaining the commands \citeauthor, \citefullauthor,
28  %   and \citeyear to print the corresponding information.
29  %
30  % For version 7.0 of `natbib.sty', the KEY field replaces missing
31  %   authors/editors, and the date is left blank in \bibitem.
32  %
33  % Includes field EID for the sequence/citation number of electronic journals
34  %  which is used instead of page numbers.
35  %
36  % Includes fields ISBN and ISSN.
37  %
38  % Includes field URL for Internet addresses.
39  %
40  % Includes field DOI for Digital Object Idenfifiers.
41  %
42  % Works best with the url.sty package of Donald Arseneau.
43  %
44  % Works with identical authors and year are further sorted by
45  %   citation key, to preserve any natural sequence.
46  %
47 ENTRY
48   { address
49     author
50     booktitle
51     chapter
52     doi
53     eid
54     edition
55     editor
56     howpublished
57     institution
58     isbn
59     issn
60     journal
61     key
62     month
63     note
64     number
65     organization
66     pages
67     publisher
68     school
69     series
70     title
71     type
72     url
73     volume
74     year
75   }
76   {}
77   { label extra.label sort.label short.list }
78
79 INTEGERS { output.state before.all mid.sentence after.sentence after.block }
80
81 FUNCTION {init.state.consts}
82 { #0 'before.all :=
83   #1 'mid.sentence :=
84   #2 'after.sentence :=
85   #3 'after.block :=
86 }
87
88 STRINGS { s t }
89
90 FUNCTION {output.nonnull}
91 { 's :=
92   output.state mid.sentence =
93     { ", " * write$ }
94     { output.state after.block =
95         { add.period$ write$
96           newline$
97           "\newblock " write$
98         }
99         { output.state before.all =
100             'write$
101             { add.period$ " " * write$ }
102           if$
103         }
104       if$
105       mid.sentence 'output.state :=
106     }
107   if$
108   s
109 }
110
111 FUNCTION {output}
112 { duplicate$ empty$
113     'pop$
114     'output.nonnull
115   if$
116 }
117
118 FUNCTION {output.check}
119 { 't :=
120   duplicate$ empty$
121     { pop$ "empty " t * " in " * cite$ * warning$ }
122     'output.nonnull
123   if$
124 }
125
126 FUNCTION {fin.entry}
127 { add.period$
128   write$
129   newline$
130 }
131
132 FUNCTION {new.block}
133 { output.state before.all =
134     'skip$
135     { after.block 'output.state := }
136   if$
137 }
138
139 FUNCTION {new.sentence}
140 { output.state after.block =
141     'skip$
142     { output.state before.all =
143         'skip$
144         { after.sentence 'output.state := }
145       if$
146     }
147   if$
148 }
149
150 FUNCTION {not}
151 {   { #0 }
152     { #1 }
153   if$
154 }
155
156 FUNCTION {and}
157 {   'skip$
158     { pop$ #0 }
159   if$
160 }
161
162 FUNCTION {or}
163 {   { pop$ #1 }
164     'skip$
165   if$
166 }
167
168 FUNCTION {new.block.checka}
169 { empty$
170     'skip$
171     'new.block
172   if$
173 }
174
175 FUNCTION {new.block.checkb}
176 { empty$
177   swap$ empty$
178   and
179     'skip$
180     'new.block
181   if$
182 }
183
184 FUNCTION {new.sentence.checka}
185 { empty$
186     'skip$
187     'new.sentence
188   if$
189 }
190
191 FUNCTION {new.sentence.checkb}
192 { empty$
193   swap$ empty$
194   and
195     'skip$
196     'new.sentence
197   if$
198 }
199
200 FUNCTION {field.or.null}
201 { duplicate$ empty$
202     { pop$ "" }
203     'skip$
204   if$
205 }
206
207 FUNCTION {emphasize}
208 { duplicate$ empty$
209     { pop$ "" }
210     { "\emph{" swap$ * "}" * }
211   if$
212 }
213
214 FUNCTION {embolden}                       %% FUNCTION added by AK
215 { duplicate$ empty$
216     { pop$ "" }
217     { "{\bf " swap$ * "}" * }
218   if$
219 }
220
221 FUNCTION {scshape}                        %% FUNCTION added by AK
222 { duplicate$ empty$
223     { pop$ "" }
224     { "{\sc " swap$ * "}" * }
225   if$
226 }
227
228 INTEGERS { nameptr namesleft numnames }
229
230 FUNCTION {format.names}
231 { 's :=
232   #1 'nameptr :=
233   s num.names$ 'numnames :=
234   numnames 'namesleft :=
235     { namesleft #0 > }
236     { s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't :=      %% {ff~}{vv~}{ll}{, jj} changed to {vv~}{ll}{, jj}{, f.} by AK
237       nameptr #1 >
238         { namesleft #1 >
239             { ", " * t * }
240             { numnames #2 >
241                 { "" * }                                      %%  { "," * } changed to { "" * } by AK (on suggestion by MK)
242                 'skip$
243               if$
244               t "others" =
245                 { " a~kol." * }                               %% et~al. changed to a~kol. by AK
246                 { " {\rm a} " * t * }                         %% and changed to {\rm a} by AK
247               if$
248             }
249           if$
250         }
251         't
252       if$
253       nameptr #1 + 'nameptr :=
254       namesleft #1 - 'namesleft :=
255     }
256   while$
257 }
258
259 FUNCTION {format.key}
260 { empty$
261     { key field.or.null }
262     { "" }
263   if$
264 }
265
266 FUNCTION {format.authors}
267 { author empty$
268     { "" }
269     { author format.names scshape}                %% scshape added by AK
270   if$
271 }
272
273 FUNCTION {format.editors}
274 { editor empty$
275     { "" }
276     { editor format.names scshape                 %% scshape added by AK
277       editor num.names$ #1 >
278         { ", editors" * }
279         { ", editor" * }
280       if$
281     }
282   if$
283 }
284
285 FUNCTION {format.isbn}
286 { isbn empty$
287     { "" }
288     { new.block "ISBN " isbn * }
289   if$
290 }
291
292 FUNCTION {format.issn}
293 { issn empty$
294     { "" }
295     { new.block "ISSN " issn * }
296   if$
297 }
298
299 FUNCTION {format.url}
300 { url empty$
301     { "" }
302     { new.block "URL \url{" url * "}" * }
303   if$
304 }
305
306 FUNCTION {format.doi}
307 { doi empty$
308     { "" }
309     { new.block "\doi{" doi * "}" * }
310   if$
311 }
312
313 FUNCTION {format.title}
314 { title empty$
315     { "" }
316     { title "t" change.case$ }
317   if$
318 }
319
320 FUNCTION {format.full.names}
321 {'s :=
322   #1 'nameptr :=
323   s num.names$ 'numnames :=
324   numnames 'namesleft :=
325     { namesleft #0 > }
326     { s nameptr
327       "{vv~}{ll}" format.name$ 't :=
328       nameptr #1 >
329         {
330           namesleft #1 >
331             { ", " * t * }
332             {
333               numnames #2 >
334                 { "" * }                                      %% { "," * } changed to { "" * } by AK (on suggestion by MK)
335                 'skip$
336               if$
337               t "others" =
338                 { " a~kol." * }                               %% et~al. changed to a~kol. by AK
339                 { " a " * t * }                               %% and changed to a by AK
340               if$
341             }
342           if$
343         }
344         't
345       if$
346       nameptr #1 + 'nameptr :=
347       namesleft #1 - 'namesleft :=
348     }
349   while$
350 }
351
352 FUNCTION {author.editor.full}
353 { author empty$
354     { editor empty$
355         { "" }
356         { editor format.full.names }
357       if$
358     }
359     { author format.full.names }
360   if$
361 }
362
363 FUNCTION {author.full}
364 { author empty$
365     { "" }
366     { author format.full.names }
367   if$
368 }
369
370 FUNCTION {editor.full}
371 { editor empty$
372     { "" }
373     { editor format.full.names }
374   if$
375 }
376
377 FUNCTION {make.full.names}
378 { type$ "book" =
379   type$ "inbook" =
380   or
381     'author.editor.full
382     { type$ "proceedings" =
383         'editor.full
384         'author.full
385       if$
386     }
387   if$
388 }
389
390 FUNCTION {output.bibitem}
391 { newline$
392   "\bibitem[" write$
393   label write$
394   ")" make.full.names duplicate$ short.list =
395      { pop$ }
396      { * }
397    if$
398   "]{" * write$
399   cite$ write$
400   "}" write$
401   newline$
402   ""
403   before.all 'output.state :=
404 }
405
406 FUNCTION {n.dashify}
407 { 't :=
408   ""
409     { t empty$ not }
410     { t #1 #1 substring$ "-" =
411         { t #1 #2 substring$ "--" = not
412             { "--" *
413               t #2 global.max$ substring$ 't :=
414             }
415             {   { t #1 #1 substring$ "-" = }
416                 { "-" *
417                   t #2 global.max$ substring$ 't :=
418                 }
419               while$
420             }
421           if$
422         }
423         { t #1 #1 substring$ *
424           t #2 global.max$ substring$ 't :=
425         }
426       if$
427     }
428   while$
429 }
430
431 FUNCTION {format.date}
432 { year duplicate$ empty$
433     { "empty year in " cite$ * warning$
434        pop$ " " }
435     'skip$
436   if$
437   month empty$
438     'skip$
439     { month
440       " " * swap$ *
441     }
442   if$
443   extra.label *
444 }
445
446 %%% Non-successful atempt to change the function format.date to produce year in brackets
447 %FUNCTION {format.date}
448 %{ year duplicate$ empty$
449 %    { "empty year in " cite$ * warning$
450 %       pop$ " " }
451 %    {
452 %      " (" * year *                                   %% 'skip$ replaced by { "(" * year * } by AK
453 %    }
454 %  if$
455 %  month empty$
456 %    'skip$
457 %    { month
458 %      " " * swap$ *
459 %    }
460 %  if$
461 %  extra.label * ")" *                                %% extra.label * changed to extra.label * ")" * by AK
462 %}
463
464 FUNCTION {output.year.check}                          %% function added by AK
465 { year empty$                                         %% It replaces original format.date on most places below
466     { "empty year in " cite$ * warning$ }
467     { write$
468       " (" year * extra.label * ")" *
469       mid.sentence 'output.state :=
470     }
471   if$
472 }
473
474 FUNCTION {format.btitle}
475 { title emphasize
476 }
477
478 FUNCTION {tie.or.space.connect}
479 { duplicate$ text.length$ #3 <
480     { "~" }
481     { " " }
482   if$
483   swap$ * *
484 }
485
486 FUNCTION {either.or.check}
487 { empty$
488     'pop$
489     { "can't use both " swap$ * " fields in " * cite$ * warning$ }
490   if$
491 }
492
493 FUNCTION {format.bvolume}
494 { volume empty$
495     { "" }
496     { "volume" volume tie.or.space.connect
497       series empty$
498         'skip$
499         { " of " * series emphasize * }
500       if$
501       "volume and number" number either.or.check
502     }
503   if$
504 }
505
506 FUNCTION {format.number.series}
507 { volume empty$
508     { number empty$
509         { series field.or.null }
510         { output.state mid.sentence =
511             { "number" }
512             { "Number" }
513           if$
514           number tie.or.space.connect
515           series empty$
516             { "there's a number but no series in " cite$ * warning$ }
517             { " in " * series * }
518           if$
519         }
520       if$
521     }
522     { "" }
523   if$
524 }
525
526 FUNCTION {format.edition}
527 { edition empty$
528     { "" }
529     { output.state mid.sentence =
530         { edition "l" change.case$ " edition" * }
531         { edition "t" change.case$ " edition" * }
532       if$
533     }
534   if$
535 }
536
537 INTEGERS { multiresult }
538
539 FUNCTION {multi.page.check}
540 { 't :=
541   #0 'multiresult :=
542     { multiresult not
543       t empty$ not
544       and
545     }
546     { t #1 #1 substring$
547       duplicate$ "-" =
548       swap$ duplicate$ "," =
549       swap$ "+" =
550       or or
551         { #1 'multiresult := }
552         { t #2 global.max$ substring$ 't := }
553       if$
554     }
555   while$
556   multiresult
557 }
558
559 FUNCTION {format.pages}
560 { pages empty$
561     { "" }
562     { pages multi.page.check
563         { "pages" pages n.dashify tie.or.space.connect }
564         { "page" pages tie.or.space.connect }
565       if$
566     }
567   if$
568 }
569
570 FUNCTION {format.eid}
571 { eid empty$
572     { "" }
573     { "art." eid tie.or.space.connect }
574   if$
575 }
576
577 FUNCTION {format.vol.num.pages}
578 { volume field.or.null embolden           %% embolden added by AK
579   number empty$
580     'skip$
581     { "\penalty0 (" number * ")" * *
582       volume empty$
583         { "there's a number but no volume in " cite$ * warning$ }
584         'skip$
585       if$
586     }
587   if$
588   pages empty$
589     'skip$
590     { duplicate$ empty$
591         { pop$ format.pages }
592         { ", \penalty0 " * pages n.dashify * }    %%         { ":\penalty0 " * pages n.dashify * } changed to { ", \penalty0 " * pages n.dashify * } by AK
593       if$
594     }
595   if$
596 }
597
598 FUNCTION {format.vol.num.eid}
599 { volume field.or.null
600   number empty$
601     'skip$
602     { "\penalty0 (" number * ")" * *
603       volume empty$
604         { "there's a number but no volume in " cite$ * warning$ }
605         'skip$
606       if$
607     }
608   if$
609   eid empty$
610     'skip$
611     { duplicate$ empty$
612         { pop$ format.eid }
613         { ":\penalty0 " * eid * }
614       if$
615     }
616   if$
617 }
618
619 FUNCTION {format.chapter.pages}
620 { chapter empty$
621     'format.pages
622     { type empty$
623         { "chapter" }
624         { type "l" change.case$ }
625       if$
626       chapter tie.or.space.connect
627       pages empty$
628         'skip$
629         { ", " * format.pages * }
630       if$
631     }
632   if$
633 }
634
635 FUNCTION {format.in.ed.booktitle}
636 { booktitle empty$
637     { "" }
638     { editor empty$
639         { "In " booktitle emphasize * }
640         { "In " format.editors * ", " * booktitle emphasize * }
641       if$
642     }
643   if$
644 }
645
646 FUNCTION {empty.misc.check}
647 { author empty$ title empty$ howpublished empty$
648   month empty$ year empty$ note empty$
649   and and and and and
650   key empty$ not and
651     { "all relevant fields are empty in " cite$ * warning$ }
652     'skip$
653   if$
654 }
655
656 FUNCTION {format.thesis.type}
657 { type empty$
658     'skip$
659     { pop$
660       type "t" change.case$
661     }
662   if$
663 }
664
665 FUNCTION {format.tr.number}
666 { type empty$
667     { "Technical Report" }
668     'type
669   if$
670   number empty$
671     { "t" change.case$ }
672     { number tie.or.space.connect }
673   if$
674 }
675
676 FUNCTION {format.article.crossref}
677 { key empty$
678     { journal empty$
679         { "need key or journal for " cite$ * " to crossref " * crossref *
680           warning$
681           ""
682         }
683         { "In \emph{" journal * "}" * }
684       if$
685     }
686     { "In " }
687   if$
688   " \citet{" * crossref * "}" *
689 }
690
691 FUNCTION {format.book.crossref}
692 { volume empty$
693     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
694       "In "
695     }
696     { "Volume" volume tie.or.space.connect
697       " of " *
698     }
699   if$
700   editor empty$
701   editor field.or.null author field.or.null =
702   or
703     { key empty$
704         { series empty$
705             { "need editor, key, or series for " cite$ * " to crossref " *
706               crossref * warning$
707               "" *
708             }
709             { "\emph{" * series * "}" * }
710           if$
711         }
712         'skip$
713       if$
714     }
715     'skip$
716   if$
717   " \citet{" * crossref * "}" *
718 }
719
720 FUNCTION {format.incoll.inproc.crossref}
721 { editor empty$
722   editor field.or.null author field.or.null =
723   or
724     { key empty$
725         { booktitle empty$
726             { "need editor, key, or booktitle for " cite$ * " to crossref " *
727               crossref * warning$
728               ""
729             }
730             { "In \emph{" booktitle * "}" * }
731           if$
732         }
733         { "In " }
734       if$
735     }
736     { "In " }
737   if$
738   " \citet{" * crossref * "}" *
739 }
740
741 FUNCTION {article}
742 { output.bibitem
743   format.authors "author" output.check
744   author format.key output
745   new.block                                   %% added by AK
746   %format.date "year" output.check            %% added by AK, commented later on
747   output.year.check                           %% added by AK as replacement of format.date
748   new.block
749   format.title "title" output.check
750   new.block
751   crossref missing$
752     { journal emphasize "journal" output.check
753       eid empty$
754         { format.vol.num.pages output }
755         { format.vol.num.eid output }
756       if$
757       %% format.date "year" output.check    %% commented by AK
758     }
759     { format.article.crossref output.nonnull
760       eid empty$
761         { format.pages output }
762         { format.eid output }
763       if$
764     }
765   if$
766   format.issn output
767   format.doi output
768   format.url output
769   new.block
770   note output
771   fin.entry
772 }
773
774 FUNCTION {book}
775 { output.bibitem
776   author empty$
777     { format.editors "author and editor" output.check
778       editor format.key output
779     }
780     { format.authors output.nonnull
781       crossref missing$
782         { "author and editor" editor either.or.check }
783         'skip$
784       if$
785     }
786   if$
787   new.block                                     %% added by AK
788   %format.date "year" output.check              %% added by AK, commented later on
789   output.year.check                             %% added by AK as replacement of format.date
790   new.block
791   format.btitle "title" output.check
792   crossref missing$
793     { format.bvolume output
794       new.block
795       format.number.series output
796       new.sentence
797       publisher "publisher" output.check
798       address output
799     }
800     { new.block
801       format.book.crossref output.nonnull
802     }
803   if$
804   format.edition output
805   %% format.date "year" output.check            %% commented by AK
806   format.isbn output
807   format.doi output
808   format.url output
809   new.block
810   note output
811   fin.entry
812 }
813
814 FUNCTION {booklet}
815 { output.bibitem
816   format.authors output
817   author format.key output
818   new.block                                   %% added by AK
819   %format.date "year" output.check            %% added by AK, commented later on
820   output.year.check                           %% added by AK as replacement of format.date
821   new.block
822   format.title "title" output.check
823   howpublished address new.block.checkb
824   howpublished output
825   address output
826   %format.date output                         %% commented by AK
827   format.isbn output
828   format.doi output
829   format.url output
830   new.block
831   note output
832   fin.entry
833 }
834
835 FUNCTION {inbook}
836 { output.bibitem
837   author empty$
838     { format.editors "author and editor" output.check
839       editor format.key output
840     }
841     { format.authors output.nonnull
842       crossref missing$
843         { "author and editor" editor either.or.check }
844         'skip$
845       if$
846     }
847   if$
848   new.block                                   %% added by AK
849   %format.date "year" output.check            %% added by AK, commented later on
850   output.year.check                           %% added by AK as replacement of format.date
851   new.block
852   format.btitle "title" output.check
853   crossref missing$
854     { format.bvolume output
855       format.chapter.pages "chapter and pages" output.check
856       new.block
857       format.number.series output
858       new.sentence
859       publisher "publisher" output.check
860       address output
861     }
862     { format.chapter.pages "chapter and pages" output.check
863       new.block
864       format.book.crossref output.nonnull
865     }
866   if$
867   format.edition output
868   %format.date "year" output.check          %% commented by AK
869   format.isbn output
870   format.doi output
871   format.url output
872   new.block
873   note output
874   fin.entry
875 }
876
877 FUNCTION {incollection}
878 { output.bibitem
879   format.authors "author" output.check
880   author format.key output
881   new.block                                   %% added by AK
882   %format.date "year" output.check            %% added by AK, commented later on
883   output.year.check                           %% added by AK as replacement of format.date
884   new.block
885   format.title "title" output.check
886   new.block
887   crossref missing$
888     { format.in.ed.booktitle "booktitle" output.check
889       format.bvolume output
890       format.number.series output
891       format.chapter.pages output
892       new.sentence
893       publisher "publisher" output.check
894       address output
895       format.edition output
896       %format.date "year" output.check       %% commented by AK
897     }
898     { format.incoll.inproc.crossref output.nonnull
899       format.chapter.pages output
900     }
901   if$
902   format.isbn output
903   format.doi output
904   format.url output
905   new.block
906   note output
907   fin.entry
908 }
909
910 FUNCTION {inproceedings}
911 { output.bibitem
912   format.authors "author" output.check
913   author format.key output
914   new.block                                   %% added by AK
915   %format.date "year" output.check            %% added by AK, commented later on
916   output.year.check                           %% added by AK as replacement of format.date
917   new.block
918   format.title "title" output.check
919   new.block
920   crossref missing$
921     { format.in.ed.booktitle "booktitle" output.check
922       format.bvolume output
923       format.number.series output
924       format.pages output
925       address empty$
926         { organization publisher new.sentence.checkb
927           organization output
928           publisher output
929           %format.date "year" output.check    %% commented by AK
930         }
931         { address output.nonnull
932           format.date "year" output.check
933           new.sentence
934           organization output
935           publisher output
936         }
937       if$
938     }
939     { format.incoll.inproc.crossref output.nonnull
940       format.pages output
941     }
942   if$
943   format.isbn output
944   format.doi output
945   format.url output
946   new.block
947   note output
948   fin.entry
949 }
950
951 FUNCTION {conference} { inproceedings }
952
953 FUNCTION {manual}
954 { output.bibitem
955   format.authors output
956   author format.key output
957   new.block                                   %% added by AK
958   %format.date "year" output.check            %% added by AK, commented later on
959   output.year.check                           %% added by AK as replacement of format.date
960   new.block
961   format.btitle "title" output.check
962   organization address new.block.checkb
963   organization output
964   address output
965   format.edition output
966   %format.date output                         %% added by AK
967   format.url output
968   new.block
969   note output
970   fin.entry
971 }
972
973 FUNCTION {mastersthesis}
974 { output.bibitem
975   format.authors "author" output.check
976   author format.key output
977   new.block                                   %% added by AK
978   %format.date "year" output.check            %% added by AK, commented later on
979   output.year.check                           %% added by AK as replacement of format.date
980   new.block
981   format.title "title" output.check
982   new.block
983   "Master's thesis" format.thesis.type output.nonnull
984   school "school" output.check
985   address output
986   %format.date "year" output.check            %% added by AK
987   format.url output
988   new.block
989   note output
990   fin.entry
991 }
992
993 FUNCTION {misc}
994 { output.bibitem
995   format.authors output
996   author format.key output
997   new.block                                   %% added by AK
998   %format.date "year" output.check            %% added by AK, commented later on
999   output.year.check                           %% added by AK as replacement of format.date
1000   new.block                                   %% added by AK
1001   title howpublished new.block.checkb
1002   format.title output
1003   howpublished new.block.checka
1004   howpublished output
1005   %format.date output                         %% commented by AK
1006   format.issn output
1007   format.url output
1008   new.block
1009   note output
1010   fin.entry
1011   empty.misc.check
1012 }
1013
1014 FUNCTION {phdthesis}
1015 { output.bibitem
1016   format.authors "author" output.check
1017   author format.key output
1018   new.block                                   %% added by AK
1019   %format.date "year" output.check            %% added by AK, commented later on
1020   output.year.check                           %% added by AK as replacement of format.date
1021   new.block
1022   format.btitle "title" output.check
1023   new.block
1024   "PhD thesis" format.thesis.type output.nonnull
1025   school "school" output.check
1026   address output
1027   %format.date "year" output.check            %% commented by AK
1028   format.url output
1029   new.block
1030   note output
1031   fin.entry
1032 }
1033
1034 FUNCTION {proceedings}
1035 { output.bibitem
1036   format.editors output
1037   editor format.key output
1038   new.block                                   %% added by AK
1039   %format.date "year" output.check            %% added by AK, commented later on
1040   output.year.check                           %% added by AK as replacement of format.date
1041   new.block
1042   format.btitle "title" output.check
1043   format.bvolume output
1044   format.number.series output
1045   address output
1046   %format.date "year" output.check            %% commented by AK
1047   new.sentence
1048   organization output
1049   publisher output
1050   format.isbn output
1051   format.doi output
1052   format.url output
1053   new.block
1054   note output
1055   fin.entry
1056 }
1057
1058 FUNCTION {techreport}
1059 { output.bibitem
1060   format.authors "author" output.check
1061   author format.key output
1062   new.block                                   %% added by AK
1063   %format.date "year" output.check            %% added by AK, commented later on
1064   output.year.check                           %% added by AK as replacement of format.date
1065   new.block
1066   format.title "title" output.check
1067   new.block
1068   format.tr.number output.nonnull
1069   institution "institution" output.check
1070   address output
1071   %format.date "year" output.check             %% commented by AK
1072   format.url output
1073   new.block
1074   note output
1075   fin.entry
1076 }
1077
1078 FUNCTION {unpublished}
1079 { output.bibitem
1080   format.authors "author" output.check
1081   author format.key output
1082   new.block                                   %% added by AK
1083   %format.date "year" output.check            %% added by AK, commented later on
1084   output.year.check                           %% added by AK as replacement of format.date
1085   new.block
1086   format.title "title" output.check
1087   new.block
1088   note "note" output.check
1089   %format.date output                         %% commented by AK
1090   format.url output
1091   fin.entry
1092 }
1093
1094 FUNCTION {default.type} { misc }
1095
1096
1097 MACRO {jan} {"January"}
1098
1099 MACRO {feb} {"February"}
1100
1101 MACRO {mar} {"March"}
1102
1103 MACRO {apr} {"April"}
1104
1105 MACRO {may} {"May"}
1106
1107 MACRO {jun} {"June"}
1108
1109 MACRO {jul} {"July"}
1110
1111 MACRO {aug} {"August"}
1112
1113 MACRO {sep} {"September"}
1114
1115 MACRO {oct} {"October"}
1116
1117 MACRO {nov} {"November"}
1118
1119 MACRO {dec} {"December"}
1120
1121
1122
1123 MACRO {acmcs} {"ACM Computing Surveys"}
1124
1125 MACRO {acta} {"Acta Informatica"}
1126
1127 MACRO {cacm} {"Communications of the ACM"}
1128
1129 MACRO {ibmjrd} {"IBM Journal of Research and Development"}
1130
1131 MACRO {ibmsj} {"IBM Systems Journal"}
1132
1133 MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
1134
1135 MACRO {ieeetc} {"IEEE Transactions on Computers"}
1136
1137 MACRO {ieeetcad}
1138  {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
1139
1140 MACRO {ipl} {"Information Processing Letters"}
1141
1142 MACRO {jacm} {"Journal of the ACM"}
1143
1144 MACRO {jcss} {"Journal of Computer and System Sciences"}
1145
1146 MACRO {scp} {"Science of Computer Programming"}
1147
1148 MACRO {sicomp} {"SIAM Journal on Computing"}
1149
1150 MACRO {tocs} {"ACM Transactions on Computer Systems"}
1151
1152 MACRO {tods} {"ACM Transactions on Database Systems"}
1153
1154 MACRO {tog} {"ACM Transactions on Graphics"}
1155
1156 MACRO {toms} {"ACM Transactions on Mathematical Software"}
1157
1158 MACRO {toois} {"ACM Transactions on Office Information Systems"}
1159
1160 MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
1161
1162 MACRO {tcs} {"Theoretical Computer Science"}
1163
1164
1165 READ
1166
1167 FUNCTION {sortify}
1168 { purify$
1169   "l" change.case$
1170 }
1171
1172 INTEGERS { len }
1173
1174 FUNCTION {chop.word}
1175 { 's :=
1176   'len :=
1177   s #1 len substring$ =
1178     { s len #1 + global.max$ substring$ }
1179     's
1180   if$
1181 }
1182
1183 FUNCTION {format.lab.names}
1184 { 's :=
1185   s #1 "{vv~}{ll}" format.name$
1186   s num.names$ duplicate$
1187   #2 >
1188     { pop$ " a~kol." * }            %% originally et~al.
1189     { #2 <
1190         'skip$
1191         { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
1192             { " a~kol." * }                                            %% AK change
1193             { " a " * s #2 "{vv~}{ll}" format.name$ * }                %% AK change
1194           if$
1195         }
1196       if$
1197     }
1198   if$
1199 }
1200
1201 FUNCTION {author.key.label}
1202 { author empty$
1203     { key empty$
1204         { cite$ #1 #3 substring$ }
1205         'key
1206       if$
1207     }
1208     { author format.lab.names }
1209   if$
1210 }
1211
1212 FUNCTION {author.editor.key.label}
1213 { author empty$
1214     { editor empty$
1215         { key empty$
1216             { cite$ #1 #3 substring$ }
1217             'key
1218           if$
1219         }
1220         { editor format.lab.names }
1221       if$
1222     }
1223     { author format.lab.names }
1224   if$
1225 }
1226
1227 FUNCTION {author.key.organization.label}
1228 { author empty$
1229     { key empty$
1230         { organization empty$
1231             { cite$ #1 #3 substring$ }
1232             { "The " #4 organization chop.word #3 text.prefix$ }
1233           if$
1234         }
1235         'key
1236       if$
1237     }
1238     { author format.lab.names }
1239   if$
1240 }
1241
1242 FUNCTION {editor.key.organization.label}
1243 { editor empty$
1244     { key empty$
1245         { organization empty$
1246             { cite$ #1 #3 substring$ }
1247             { "The " #4 organization chop.word #3 text.prefix$ }
1248           if$
1249         }
1250         'key
1251       if$
1252     }
1253     { editor format.lab.names }
1254   if$
1255 }
1256
1257 FUNCTION {calc.short.authors}
1258 { type$ "book" =
1259   type$ "inbook" =
1260   or
1261     'author.editor.key.label
1262     { type$ "proceedings" =
1263         'editor.key.organization.label
1264         { type$ "manual" =
1265             'author.key.organization.label
1266             'author.key.label
1267           if$
1268         }
1269       if$
1270     }
1271   if$
1272   'short.list :=
1273 }
1274
1275 FUNCTION {calc.label}
1276 { calc.short.authors
1277   short.list
1278   "("
1279   *
1280   year duplicate$ empty$
1281   short.list key field.or.null = or
1282      { pop$ "" }
1283      'skip$
1284   if$
1285   *
1286   'label :=
1287 }
1288
1289 FUNCTION {sort.format.names}
1290 { 's :=
1291   #1 'nameptr :=
1292   ""
1293   s num.names$ 'numnames :=
1294   numnames 'namesleft :=
1295     { namesleft #0 > }
1296     {
1297       s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
1298       nameptr #1 >
1299         {
1300           "   "  *
1301           namesleft #1 = t "others" = and
1302             { "zzzzz" * }
1303             { numnames #2 > nameptr #2 = and
1304                 { "zz" * year field.or.null * "   " * }
1305                 'skip$
1306               if$
1307               t sortify *
1308             }
1309           if$
1310         }
1311         { t sortify * }
1312       if$
1313       nameptr #1 + 'nameptr :=
1314       namesleft #1 - 'namesleft :=
1315     }
1316   while$
1317 }
1318
1319 FUNCTION {sort.format.title}
1320 { 't :=
1321   "A " #2
1322     "An " #3
1323       "The " #4 t chop.word
1324     chop.word
1325   chop.word
1326   sortify
1327   #1 global.max$ substring$
1328 }
1329
1330 FUNCTION {author.sort}
1331 { author empty$
1332     { key empty$
1333         { "to sort, need author or key in " cite$ * warning$
1334           ""
1335         }
1336         { key sortify }
1337       if$
1338     }
1339     { author sort.format.names }
1340   if$
1341 }
1342
1343 FUNCTION {author.editor.sort}
1344 { author empty$
1345     { editor empty$
1346         { key empty$
1347             { "to sort, need author, editor, or key in " cite$ * warning$
1348               ""
1349             }
1350             { key sortify }
1351           if$
1352         }
1353         { editor sort.format.names }
1354       if$
1355     }
1356     { author sort.format.names }
1357   if$
1358 }
1359
1360 FUNCTION {author.organization.sort}
1361 { author empty$
1362     { organization empty$
1363         { key empty$
1364             { "to sort, need author, organization, or key in " cite$ * warning$
1365               ""
1366             }
1367             { key sortify }
1368           if$
1369         }
1370         { "The " #4 organization chop.word sortify }
1371       if$
1372     }
1373     { author sort.format.names }
1374   if$
1375 }
1376
1377 FUNCTION {editor.organization.sort}
1378 { editor empty$
1379     { organization empty$
1380         { key empty$
1381             { "to sort, need editor, organization, or key in " cite$ * warning$
1382               ""
1383             }
1384             { key sortify }
1385           if$
1386         }
1387         { "The " #4 organization chop.word sortify }
1388       if$
1389     }
1390     { editor sort.format.names }
1391   if$
1392 }
1393
1394
1395 FUNCTION {presort}
1396 { calc.label
1397   label sortify
1398   "    "
1399   *
1400   type$ "book" =
1401   type$ "inbook" =
1402   or
1403     'author.editor.sort
1404     { type$ "proceedings" =
1405         'editor.organization.sort
1406         { type$ "manual" =
1407             'author.organization.sort
1408             'author.sort
1409           if$
1410         }
1411       if$
1412     }
1413   if$
1414   "    "
1415   *
1416   year field.or.null sortify
1417   *
1418   "    "
1419   *
1420   cite$
1421   *
1422   #1 entry.max$ substring$
1423   'sort.label :=
1424   sort.label *
1425   #1 entry.max$ substring$
1426   'sort.key$ :=
1427 }
1428
1429 ITERATE {presort}
1430
1431 SORT
1432
1433 STRINGS { longest.label last.label next.extra }
1434
1435 INTEGERS { longest.label.width last.extra.num number.label }
1436
1437 FUNCTION {initialize.longest.label}
1438 { "" 'longest.label :=
1439   #0 int.to.chr$ 'last.label :=
1440   "" 'next.extra :=
1441   #0 'longest.label.width :=
1442   #0 'last.extra.num :=
1443   #0 'number.label :=
1444 }
1445
1446 FUNCTION {forward.pass}
1447 { last.label label =
1448     { last.extra.num #1 + 'last.extra.num :=
1449       last.extra.num int.to.chr$ 'extra.label :=
1450     }
1451     { "a" chr.to.int$ 'last.extra.num :=
1452       "" 'extra.label :=
1453       label 'last.label :=
1454     }
1455   if$
1456   number.label #1 + 'number.label :=
1457 }
1458
1459 FUNCTION {reverse.pass}
1460 { next.extra "b" =
1461     { "a" 'extra.label := }
1462     'skip$
1463   if$
1464   extra.label 'next.extra :=
1465   extra.label
1466   duplicate$ empty$
1467     'skip$
1468     { "{\natexlab{" swap$ * "}}" * }
1469   if$
1470   'extra.label :=
1471   label extra.label * 'label :=
1472 }
1473
1474 EXECUTE {initialize.longest.label}
1475
1476 ITERATE {forward.pass}
1477
1478 REVERSE {reverse.pass}
1479
1480 FUNCTION {bib.sort.order}
1481 { sort.label  'sort.key$ :=
1482 }
1483
1484 ITERATE {bib.sort.order}
1485
1486 SORT
1487
1488 FUNCTION {begin.bib}
1489 {   preamble$ empty$
1490     'skip$
1491     { preamble$ write$ newline$ }
1492   if$
1493   "\begin{thebibliography}{" number.label int.to.str$ * "}" *
1494   write$ newline$
1495   "\providecommand{\natexlab}[1]{#1}"
1496   write$ newline$
1497   "\providecommand{\url}[1]{\texttt{#1}}"
1498   write$ newline$
1499   "\expandafter\ifx\csname urlstyle\endcsname\relax"
1500   write$ newline$
1501   "  \providecommand{\doi}[1]{doi: #1}\else"
1502   write$ newline$
1503   "  \providecommand{\doi}{doi: \begingroup \urlstyle{rm}\Url}\fi"
1504   write$ newline$
1505 }
1506
1507 EXECUTE {begin.bib}
1508
1509 EXECUTE {init.state.consts}
1510
1511 ITERATE {call.type$}
1512
1513 FUNCTION {end.bib}
1514 { newline$
1515   "\end{thebibliography}" write$ newline$
1516 }
1517
1518 EXECUTE {end.bib}