|
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} |