doc/jnsao.bst

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

mercurial