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