1 |
%%% Modification of BibTeX style file agu.bst |
2 |
%%% ... by urlbst, version 0.5 (marked with "% urlbst") |
3 |
%%% See <http://www.astro.gla.ac.uk/users/norman/distrib/urlbst/> |
4 |
%%% Added webpage entry type, and url and lastchecked fields. |
5 |
%%% Added eprint support. |
6 |
%%% Added DOI support. |
7 |
%%% Added hyperref support. |
8 |
%%% Original headers follow... |
9 |
|
10 |
%% |
11 |
%% This is file `agu.bst', generated |
12 |
%% on <1994/5/27> with the docstrip utility (2.2e). |
13 |
%% |
14 |
%% The original source files were: |
15 |
%% |
16 |
%% genbst.mbs (with options: `ay,seq-lab,nm-rev1,nmlm,x9,m1,dt-end,thtit-a,vol-it,volp-com,edby,blk-com,pp,ed,abr,lab-it,and-com,em-it') |
17 |
%% ---------------------------------------- |
18 |
%% *** For publications of the American Geophysical Union *** |
19 |
%% |
20 |
%% (Here are the specifications of the source file) |
21 |
%% \def\filename{genbst.mbs} |
22 |
%% \def\filedate{1994 February 7} |
23 |
%% \def\fileversion{1.2} |
24 |
%% For use with BibTeX version 0.99a or later, LaTeX version 2.09 |
25 |
%%------------------------------------------------------------------- |
26 |
%% NOTICE: |
27 |
%% This file may be used for non-profit purposes. |
28 |
%% It may not be distributed in exchange for money, |
29 |
%% other than distribution costs. |
30 |
%% |
31 |
%% The author provides it `as is' and does not guarantee it in any way. |
32 |
%% |
33 |
%% Copyright (C) 1993 Patrick W. Daly |
34 |
%% Max-Planck-Institut f\"ur Aeronomie |
35 |
%% Postfach 20 |
36 |
%% D-37189 Katlenburg-Lindau |
37 |
%% Germany |
38 |
%% |
39 |
%% E-mail: |
40 |
%% SPAN-- nsp::linmpi::daly (note nsp also known as ecd1) |
41 |
%% Internet-- daly@linmpi.dnet.gwdg.de |
42 |
%%----------------------------------------------------------- |
43 |
%% \CharacterTable |
44 |
%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z |
45 |
%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z |
46 |
%% Digits \0\1\2\3\4\5\6\7\8\9 |
47 |
%% Exclamation \! Double quote \" Hash (number) \# |
48 |
%% Dollar \$ Percent \% Ampersand \& |
49 |
%% Acute accent \' Left paren \( Right paren \) |
50 |
%% Asterisk \* Plus \+ Comma \, |
51 |
%% Minus \- Point \. Solidus \/ |
52 |
%% Colon \: Semicolon \; Less than \< |
53 |
%% Equals \= Greater than \> Question mark \? |
54 |
%% Commercial at \@ Left bracket \[ Backslash \\ |
55 |
%% Right bracket \] Circumflex \^ Underscore \_ |
56 |
%% Grave accent \` Left brace \{ Vertical bar \| |
57 |
%% Right brace \} Tilde \~} |
58 |
%%--------------------------------------------------------------------- |
59 |
% This is an author-year citation style bibliography. As such, it is |
60 |
% non-standard LaTeX, and requires a style option to function properly. |
61 |
% An appropriate style option is: natbib.sty by Patrick W. Daly |
62 |
% The form of the \bibitem entries is |
63 |
% \bibitem[Jones et al.(1990)]{key}... |
64 |
% The essential feature is that the label (the part in brackets) consists |
65 |
% of the author names, as they should appear in the citation, with the year |
66 |
% in parentheses following. There must be no space before the opening |
67 |
% parenthesis! |
68 |
% In natbib.sty, it is possible to define the type of enclosures that is |
69 |
% really wanted (brackets or parentheses), but in either case, there must |
70 |
% be parentheses in the label. |
71 |
% The \cite command functions as follows: |
72 |
% \cite{key} ==>> Jones et al. (1990) |
73 |
% \cite[]{key} ==>> (Jones et al., 1990) |
74 |
% \cite[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2) |
75 |
% \cite[e.g.][]{key} ==>> (e.g. Jones et al., 1990) |
76 |
% \cite[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32) |
77 |
% \citeauthor{key} Jones et al. |
78 |
% \citeyear{key} 1990 |
79 |
%%--------------------------------------------------------------------- |
80 |
|
81 |
ENTRY |
82 |
{ address |
83 |
author |
84 |
booktitle |
85 |
chapter |
86 |
edition |
87 |
editor |
88 |
howpublished |
89 |
institution |
90 |
journal |
91 |
key |
92 |
month |
93 |
note |
94 |
number |
95 |
organization |
96 |
pages |
97 |
publisher |
98 |
school |
99 |
series |
100 |
title |
101 |
type |
102 |
volume |
103 |
year |
104 |
eprint % urlbst |
105 |
doi % urlbst |
106 |
url % urlbst |
107 |
lastchecked % urlbst |
108 |
} |
109 |
{} |
110 |
{ label extra.label sort.label } |
111 |
|
112 |
INTEGERS { output.state before.all mid.sentence after.sentence after.block } |
113 |
|
114 |
STRINGS { urlintro eprinturl eprintprefix doiprefix doiurl } % urlbst... |
115 |
INTEGERS { hrefform addeprints adddoiresolver } |
116 |
% Following constants may be adjusted by hand, if desired |
117 |
FUNCTION {init.config.constants} |
118 |
{ |
119 |
"Available from: " 'urlintro := % prefix before URL |
120 |
"http://arxiv.org/abs/" 'eprinturl := % prefix to make URL from eprint ref |
121 |
"arXiv:" 'eprintprefix := % text prefix printed before eprint ref |
122 |
"http://dx.doi.org/" 'doiurl := % prefix to make URL from DOI |
123 |
"doi:" 'doiprefix := % text prefix printed before DOI ref |
124 |
#1 'addeprints := % 0=no eprints; 1=include eprints |
125 |
#1 'adddoiresolver := % 0=no DOI resolver; 1=include it |
126 |
#2 'hrefform := % 0=no crossrefs; 1=hypertex xrefs; 2=hyperref refs |
127 |
} |
128 |
INTEGERS { |
129 |
bracket.state |
130 |
outside.brackets |
131 |
open.brackets |
132 |
within.brackets |
133 |
close.brackets |
134 |
} |
135 |
% ...urlbst to here |
136 |
FUNCTION {init.state.consts} |
137 |
{ #0 'outside.brackets := % urlbst |
138 |
#1 'open.brackets := |
139 |
#2 'within.brackets := |
140 |
#3 'close.brackets := |
141 |
|
142 |
#0 'before.all := |
143 |
#1 'mid.sentence := |
144 |
#2 'after.sentence := |
145 |
#3 'after.block := |
146 |
} |
147 |
|
148 |
STRINGS { s t } |
149 |
|
150 |
% urlbst |
151 |
FUNCTION {output.nonnull.original} |
152 |
{ 's := |
153 |
output.state mid.sentence = |
154 |
{ ", " * write$ } |
155 |
{ output.state after.block = |
156 |
{ add.period$ write$ |
157 |
newline$ |
158 |
"\newblock " write$ |
159 |
} |
160 |
{ output.state before.all = |
161 |
'write$ |
162 |
{ add.period$ " " * write$ } |
163 |
if$ |
164 |
} |
165 |
if$ |
166 |
mid.sentence 'output.state := |
167 |
} |
168 |
if$ |
169 |
s |
170 |
} |
171 |
|
172 |
% urlbst... |
173 |
FUNCTION {output.nonnull} |
174 |
{ % Save the thing we've been asked to output |
175 |
's := |
176 |
% If the bracket-state is close.brackets, then add a close-bracket to |
177 |
% what is currently at the top of the stack, and set bracket.state |
178 |
% to outside.brackets |
179 |
bracket.state close.brackets = |
180 |
{ "]" * |
181 |
outside.brackets 'bracket.state := |
182 |
} |
183 |
'skip$ |
184 |
if$ |
185 |
bracket.state outside.brackets = |
186 |
{ % We're outside all brackets -- this is the normal situation. |
187 |
% Write out what's currently at the top of the stack, using the |
188 |
% original output.nonnull function. |
189 |
s |
190 |
output.nonnull.original |
191 |
} |
192 |
{ % Still in brackets. Add open-bracket or (continuation) comma, add the |
193 |
% new text (in s) to the top of the stack, and move to the close-brackets |
194 |
% state, ready for next time (unless inbrackets resets it). If we come |
195 |
% into this branch, then output.state is carefully undisturbed. |
196 |
bracket.state open.brackets = |
197 |
{ " [" * } |
198 |
{ ", " * } % bracket.state will be within.brackets |
199 |
if$ |
200 |
s * |
201 |
close.brackets 'bracket.state := |
202 |
} |
203 |
if$ |
204 |
} |
205 |
|
206 |
% Call this function just before adding something which should be presented in |
207 |
% brackets. bracket.state is handled specially within output.nonnull. |
208 |
FUNCTION {inbrackets} |
209 |
{ bracket.state close.brackets = |
210 |
{ within.brackets 'bracket.state := } % reset the state: not open nor closed |
211 |
{ open.brackets 'bracket.state := } |
212 |
if$ |
213 |
} |
214 |
|
215 |
FUNCTION {format.lastchecked} |
216 |
{ lastchecked empty$ |
217 |
{ "" } |
218 |
{ inbrackets "cited " lastchecked * } |
219 |
if$ |
220 |
} |
221 |
% ...urlbst to here |
222 |
|
223 |
FUNCTION {output} |
224 |
{ duplicate$ empty$ |
225 |
'pop$ |
226 |
'output.nonnull |
227 |
if$ |
228 |
} |
229 |
|
230 |
FUNCTION {output.check} |
231 |
{ 't := |
232 |
duplicate$ empty$ |
233 |
{ pop$ "empty " t * " in " * cite$ * warning$ } |
234 |
'output.nonnull |
235 |
if$ |
236 |
} |
237 |
|
238 |
FUNCTION {output.bibitem} |
239 |
{ outside.brackets 'bracket.state := % urlbst |
240 |
newline$ |
241 |
"\bibitem[" write$ |
242 |
label write$ |
243 |
")]{" write$ |
244 |
cite$ write$ |
245 |
"}" write$ |
246 |
newline$ |
247 |
"" |
248 |
before.all 'output.state := |
249 |
} |
250 |
|
251 |
FUNCTION {fin.entry} |
252 |
{ |
253 |
bracket.state close.brackets = % urlbst |
254 |
{ "]" * } |
255 |
'skip$ |
256 |
if$ |
257 |
add.period$ |
258 |
write$ |
259 |
newline$ |
260 |
} |
261 |
|
262 |
FUNCTION {new.block} |
263 |
{ output.state before.all = |
264 |
'skip$ |
265 |
{ after.block 'output.state := } |
266 |
if$ |
267 |
} |
268 |
|
269 |
FUNCTION {new.sentence} |
270 |
{ output.state after.block = |
271 |
'skip$ |
272 |
{ output.state before.all = |
273 |
'skip$ |
274 |
{ after.sentence 'output.state := } |
275 |
if$ |
276 |
} |
277 |
if$ |
278 |
} |
279 |
|
280 |
FUNCTION {not} |
281 |
{ { #0 } |
282 |
{ #1 } |
283 |
if$ |
284 |
} |
285 |
|
286 |
FUNCTION {and} |
287 |
{ 'skip$ |
288 |
{ pop$ #0 } |
289 |
if$ |
290 |
} |
291 |
|
292 |
FUNCTION {or} |
293 |
{ { pop$ #1 } |
294 |
'skip$ |
295 |
if$ |
296 |
} |
297 |
|
298 |
FUNCTION {new.block.checkb} |
299 |
{ empty$ |
300 |
swap$ empty$ |
301 |
and |
302 |
'skip$ |
303 |
'new.block |
304 |
if$ |
305 |
} |
306 |
|
307 |
FUNCTION {field.or.null} |
308 |
{ duplicate$ empty$ |
309 |
{ pop$ "" } |
310 |
'skip$ |
311 |
if$ |
312 |
} |
313 |
|
314 |
FUNCTION {emphasize} |
315 |
{ duplicate$ empty$ |
316 |
{ pop$ "" } |
317 |
{ "{\it " swap$ * "}" * } |
318 |
if$ |
319 |
} |
320 |
|
321 |
INTEGERS { nameptr namesleft numnames } |
322 |
|
323 |
FUNCTION {format.names} |
324 |
{ 's := |
325 |
#1 'nameptr := |
326 |
s num.names$ 'numnames := |
327 |
numnames 'namesleft := |
328 |
{ namesleft #0 > } |
329 |
{ nameptr #1 > |
330 |
{ s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := } |
331 |
{ s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := } |
332 |
if$ |
333 |
nameptr #1 > |
334 |
{ |
335 |
nameptr #2 = |
336 |
numnames #9 > and |
337 |
{ "others" 't := |
338 |
#1 'namesleft := } |
339 |
'skip$ |
340 |
if$ |
341 |
namesleft #1 > |
342 |
{ ", " * t * } |
343 |
{ |
344 |
"," * |
345 |
t "others" = |
346 |
{ " et~al." * } |
347 |
{ " and " * t * } |
348 |
if$ |
349 |
} |
350 |
if$ |
351 |
} |
352 |
't |
353 |
if$ |
354 |
nameptr #1 + 'nameptr := |
355 |
namesleft #1 - 'namesleft := |
356 |
} |
357 |
while$ |
358 |
} |
359 |
|
360 |
FUNCTION {format.names.ed} |
361 |
{ 's := |
362 |
#1 'nameptr := |
363 |
s num.names$ 'numnames := |
364 |
numnames 'namesleft := |
365 |
{ namesleft #0 > } |
366 |
{ s nameptr |
367 |
"{f.~}{vv~}{ll}{, jj}" |
368 |
format.name$ 't := |
369 |
nameptr #1 > |
370 |
{ |
371 |
namesleft #1 > |
372 |
{ ", " * t * } |
373 |
{ |
374 |
"," * |
375 |
t "others" = |
376 |
{ " et~al." * } |
377 |
{ " and " * t * } |
378 |
if$ |
379 |
} |
380 |
if$ |
381 |
} |
382 |
't |
383 |
if$ |
384 |
nameptr #1 + 'nameptr := |
385 |
namesleft #1 - 'namesleft := |
386 |
} |
387 |
while$ |
388 |
} |
389 |
|
390 |
FUNCTION {format.key} |
391 |
{ empty$ |
392 |
{ key field.or.null } |
393 |
{ "" } |
394 |
if$ |
395 |
} |
396 |
|
397 |
FUNCTION {format.authors} |
398 |
{ author empty$ |
399 |
{ "" } |
400 |
{ author format.names } |
401 |
if$ |
402 |
} |
403 |
|
404 |
FUNCTION {format.editors} |
405 |
{ editor empty$ |
406 |
{ "" } |
407 |
{ editor format.names |
408 |
editor num.names$ #1 > |
409 |
{ " (eds.)" * } |
410 |
{ " (ed.)" * } |
411 |
if$ |
412 |
} |
413 |
if$ |
414 |
} |
415 |
|
416 |
FUNCTION {format.in.editors} |
417 |
{ editor empty$ |
418 |
{ "" } |
419 |
{ editor format.names.ed |
420 |
} |
421 |
if$ |
422 |
} |
423 |
|
424 |
FUNCTION {format.title} |
425 |
{ title empty$ |
426 |
{ "" } |
427 |
{ title "t" change.case$ |
428 |
} |
429 |
if$ |
430 |
} |
431 |
|
432 |
FUNCTION {n.dashify} |
433 |
{ 't := |
434 |
"" |
435 |
{ t empty$ not } |
436 |
{ t #1 #1 substring$ "-" = |
437 |
{ t #1 #2 substring$ "--" = not |
438 |
{ "--" * |
439 |
t #2 global.max$ substring$ 't := |
440 |
} |
441 |
{ { t #1 #1 substring$ "-" = } |
442 |
{ "-" * |
443 |
t #2 global.max$ substring$ 't := |
444 |
} |
445 |
while$ |
446 |
} |
447 |
if$ |
448 |
} |
449 |
{ t #1 #1 substring$ * |
450 |
t #2 global.max$ substring$ 't := |
451 |
} |
452 |
if$ |
453 |
} |
454 |
while$ |
455 |
} |
456 |
|
457 |
FUNCTION {word.in} |
458 |
{ "in " } |
459 |
|
460 |
FUNCTION {format.date} |
461 |
{ year duplicate$ empty$ |
462 |
{ "empty year in " cite$ * "; set to ????" * warning$ |
463 |
pop$ "????" } |
464 |
'skip$ |
465 |
if$ |
466 |
extra.label * |
467 |
} |
468 |
|
469 |
FUNCTION {format.btitle} |
470 |
{ title emphasize |
471 |
} |
472 |
|
473 |
FUNCTION {tie.or.space.connect} |
474 |
{ duplicate$ text.length$ #3 < |
475 |
{ "~" } |
476 |
{ " " } |
477 |
if$ |
478 |
swap$ * * |
479 |
} |
480 |
|
481 |
FUNCTION {either.or.check} |
482 |
{ empty$ |
483 |
'pop$ |
484 |
{ "can't use both " swap$ * " fields in " * cite$ * warning$ } |
485 |
if$ |
486 |
} |
487 |
|
488 |
FUNCTION {format.bvolume} |
489 |
{ volume empty$ |
490 |
{ "" } |
491 |
{ "vol." volume tie.or.space.connect |
492 |
series empty$ |
493 |
'skip$ |
494 |
{ " of " * series emphasize * } |
495 |
if$ |
496 |
"volume and number" number either.or.check |
497 |
} |
498 |
if$ |
499 |
} |
500 |
|
501 |
FUNCTION {format.number.series} |
502 |
{ volume empty$ |
503 |
{ number empty$ |
504 |
{ series field.or.null } |
505 |
{ output.state mid.sentence = |
506 |
{ "no." } |
507 |
{ "No." } |
508 |
if$ |
509 |
number tie.or.space.connect |
510 |
series empty$ |
511 |
{ "there's a number but no series in " cite$ * warning$ } |
512 |
{ " in " * series * } |
513 |
if$ |
514 |
} |
515 |
if$ |
516 |
} |
517 |
{ "" } |
518 |
if$ |
519 |
} |
520 |
|
521 |
FUNCTION {format.edition} |
522 |
{ edition empty$ |
523 |
{ "" } |
524 |
{ output.state mid.sentence = |
525 |
{ edition "l" change.case$ " edn." * } |
526 |
{ edition "t" change.case$ " edn." * } |
527 |
if$ |
528 |
} |
529 |
if$ |
530 |
} |
531 |
|
532 |
INTEGERS { multiresult } |
533 |
|
534 |
FUNCTION {multi.page.check} |
535 |
{ 't := |
536 |
#0 'multiresult := |
537 |
{ multiresult not |
538 |
t empty$ not |
539 |
and |
540 |
} |
541 |
{ t #1 #1 substring$ |
542 |
duplicate$ "-" = |
543 |
swap$ duplicate$ "," = |
544 |
swap$ "+" = |
545 |
or or |
546 |
{ #1 'multiresult := } |
547 |
{ t #2 global.max$ substring$ 't := } |
548 |
if$ |
549 |
} |
550 |
while$ |
551 |
multiresult |
552 |
} |
553 |
|
554 |
FUNCTION {format.pages} |
555 |
{ pages empty$ |
556 |
{ "" } |
557 |
{ pages multi.page.check |
558 |
{ "pp." pages n.dashify tie.or.space.connect } |
559 |
{ "p." pages tie.or.space.connect } |
560 |
if$ |
561 |
} |
562 |
if$ |
563 |
} |
564 |
|
565 |
FUNCTION {format.vol.num.pages} |
566 |
{ volume field.or.null |
567 |
emphasize |
568 |
number empty$ |
569 |
'skip$ |
570 |
{ "(" number * ")" * * |
571 |
volume empty$ |
572 |
{ "there's a number but no volume in " cite$ * warning$ } |
573 |
'skip$ |
574 |
if$ |
575 |
} |
576 |
if$ |
577 |
pages empty$ |
578 |
'skip$ |
579 |
{ duplicate$ empty$ |
580 |
{ pop$ format.pages } |
581 |
{ ", " * pages n.dashify * } |
582 |
if$ |
583 |
} |
584 |
if$ |
585 |
} |
586 |
|
587 |
FUNCTION {format.chapter.pages} |
588 |
{ chapter empty$ |
589 |
'format.pages |
590 |
{ type empty$ |
591 |
{ "chap." } |
592 |
{ type "l" change.case$ } |
593 |
if$ |
594 |
chapter tie.or.space.connect |
595 |
pages empty$ |
596 |
'skip$ |
597 |
{ ", " * format.pages * } |
598 |
if$ |
599 |
} |
600 |
if$ |
601 |
} |
602 |
|
603 |
FUNCTION {format.in.ed.booktitle} |
604 |
{ booktitle empty$ |
605 |
{ "" } |
606 |
{ editor empty$ |
607 |
{ word.in booktitle emphasize * } |
608 |
{ word.in booktitle emphasize * ", edited by " * |
609 |
format.in.editors * } |
610 |
if$ |
611 |
} |
612 |
if$ |
613 |
} |
614 |
|
615 |
FUNCTION {format.thesis.type} |
616 |
{ type empty$ |
617 |
'skip$ |
618 |
{ pop$ |
619 |
type "t" change.case$ |
620 |
} |
621 |
if$ |
622 |
} |
623 |
|
624 |
FUNCTION {format.tr.number} |
625 |
{ type empty$ |
626 |
{ "Tech. Rep." } |
627 |
'type |
628 |
if$ |
629 |
number empty$ |
630 |
{ "t" change.case$ } |
631 |
{ number tie.or.space.connect } |
632 |
if$ |
633 |
} |
634 |
|
635 |
FUNCTION {format.article.crossref} |
636 |
{ |
637 |
word.in |
638 |
"\cite{" * crossref * "}" * |
639 |
} |
640 |
|
641 |
FUNCTION {format.book.crossref} |
642 |
{ volume empty$ |
643 |
{ "empty volume in " cite$ * "'s crossref of " * crossref * warning$ |
644 |
word.in |
645 |
} |
646 |
{ "vol." volume tie.or.space.connect |
647 |
" of " * |
648 |
} |
649 |
if$ |
650 |
"\cite{" * crossref * "}" * |
651 |
} |
652 |
|
653 |
FUNCTION {format.incoll.inproc.crossref} |
654 |
{ |
655 |
word.in |
656 |
"\cite{" * crossref * "}" * |
657 |
} |
658 |
|
659 |
% urlbst... |
660 |
% Functions for making hypertext links. |
661 |
% In all cases, the stack has (link-text href-url) |
662 |
% |
663 |
% make 'null' specials |
664 |
FUNCTION {make.href.null} |
665 |
{ |
666 |
pop$ |
667 |
} |
668 |
% make hypertex specials |
669 |
FUNCTION {make.href.hypertex} |
670 |
{ |
671 |
"\special {html:<a href=" quote$ * |
672 |
swap$ * quote$ * "> }" * swap$ * |
673 |
"\special {html:</a>}" * |
674 |
} |
675 |
% make hyperref specials |
676 |
FUNCTION {make.href.hyperref} |
677 |
{ |
678 |
" \myhref{" swap$ * "}{" * swap$ * "}" * |
679 |
} |
680 |
FUNCTION {make.href} |
681 |
{ hrefform #2 = |
682 |
'make.href.hyperref % hrefform = 2 |
683 |
{ hrefform #1 = |
684 |
'make.href.hypertex % hrefform = 1 |
685 |
'make.href.null % hrefform = 0 (or anything else) |
686 |
if$ |
687 |
} |
688 |
if$ |
689 |
} |
690 |
|
691 |
FUNCTION {format.url} |
692 |
{ url empty$ |
693 |
{ "" } |
694 |
{ hrefform #1 = |
695 |
{ % special case -- add HyperTeX specials |
696 |
urlintro "\url{" url * "}" * url make.href.hypertex * } |
697 |
{ urlintro "\url{" * url * "}" * } |
698 |
if$ |
699 |
} |
700 |
if$ |
701 |
} |
702 |
|
703 |
FUNCTION {format.eprint} |
704 |
{ eprint empty$ |
705 |
{ "" } |
706 |
{ eprintprefix eprint * eprinturl eprint * make.href } |
707 |
if$ |
708 |
} |
709 |
|
710 |
FUNCTION {format.doi} |
711 |
{ doi empty$ |
712 |
{ "" } |
713 |
{ doiprefix doi * doiurl doi * make.href } |
714 |
if$ |
715 |
} |
716 |
|
717 |
% Output a URL. We can't use the more normal idiom (something like |
718 |
% `format.url output'), because the `inbrackets' within |
719 |
% format.lastchecked applies to everything between calls to `output', |
720 |
% so that `format.url format.lastchecked * output' ends up with both |
721 |
% the URL and the lastchecked in brackets. |
722 |
FUNCTION {output.url} |
723 |
{ url empty$ |
724 |
'skip$ |
725 |
{ new.block |
726 |
format.url output |
727 |
format.lastchecked output |
728 |
} |
729 |
if$ |
730 |
} |
731 |
|
732 |
FUNCTION {output.web.refs} |
733 |
{ |
734 |
new.block |
735 |
output.url |
736 |
addeprints eprint empty$ not and |
737 |
{ format.eprint output.nonnull } |
738 |
'skip$ |
739 |
if$ |
740 |
adddoiresolver doi empty$ not and |
741 |
{ format.doi output.nonnull } |
742 |
'skip$ |
743 |
if$ |
744 |
% addeprints |
745 |
% { eprint empty$ |
746 |
% 'skip$ |
747 |
% { format.eprint output.nonnull } |
748 |
% if$ |
749 |
% } |
750 |
% 'skip$ |
751 |
% if$ |
752 |
} |
753 |
|
754 |
% Webpage entry type. |
755 |
% Title and url fields required; |
756 |
% author, note, year, month, and lastchecked fields optional |
757 |
% See references |
758 |
% ISO 690-2 http://www.nlc-bnc.ca/iso/tc46sc9/standard/690-2e.htm |
759 |
% http://www.classroom.net/classroom/CitingNetResources.html |
760 |
% http://neal.ctstateu.edu/history/cite.html |
761 |
% http://www.cas.usf.edu/english/walker/mla.html |
762 |
% for citation formats for web pages. |
763 |
FUNCTION {webpage} |
764 |
{ output.bibitem |
765 |
author empty$ |
766 |
{ editor empty$ |
767 |
'skip$ % author and editor both optional |
768 |
{ format.editors output.nonnull } |
769 |
if$ |
770 |
} |
771 |
{ editor empty$ |
772 |
{ format.authors output.nonnull } |
773 |
{ "can't use both author and editor fields in " cite$ * warning$ } |
774 |
if$ |
775 |
} |
776 |
if$ |
777 |
% author empty$ |
778 |
% 'skip$ |
779 |
% { format.authors output.nonnull } |
780 |
% if$ |
781 |
new.block |
782 |
format.title "title" output.check |
783 |
inbrackets "online" output |
784 |
new.block |
785 |
year empty$ |
786 |
'skip$ |
787 |
{ format.date "year" output.check } |
788 |
if$ |
789 |
lastchecked empty$ |
790 |
'skip$ |
791 |
{ format.lastchecked output } |
792 |
if$ |
793 |
new.block |
794 |
format.url "url" output.check |
795 |
new.block |
796 |
note output |
797 |
fin.entry |
798 |
} |
799 |
% ...urlbst to here |
800 |
|
801 |
|
802 |
FUNCTION {article} |
803 |
{ output.bibitem |
804 |
format.authors "author" output.check |
805 |
author format.key output |
806 |
format.title "title" output.check |
807 |
crossref missing$ |
808 |
{ journal emphasize "journal" output.check |
809 |
format.vol.num.pages output |
810 |
} |
811 |
{ format.article.crossref output.nonnull |
812 |
format.pages output |
813 |
} |
814 |
if$ |
815 |
note output |
816 |
format.date "year" output.check |
817 |
output.web.refs % urlbst |
818 |
fin.entry |
819 |
} |
820 |
|
821 |
FUNCTION {book} |
822 |
{ output.bibitem |
823 |
author empty$ |
824 |
{ format.editors "author and editor" output.check |
825 |
editor format.key output |
826 |
} |
827 |
{ format.authors output.nonnull |
828 |
crossref missing$ |
829 |
{ "author and editor" editor either.or.check } |
830 |
'skip$ |
831 |
if$ |
832 |
} |
833 |
if$ |
834 |
format.btitle "title" output.check |
835 |
crossref missing$ |
836 |
{ format.bvolume output |
837 |
format.number.series output |
838 |
new.sentence |
839 |
publisher "publisher" output.check |
840 |
address output |
841 |
} |
842 |
{ |
843 |
format.book.crossref output.nonnull |
844 |
} |
845 |
if$ |
846 |
format.edition output |
847 |
note output |
848 |
format.date "year" output.check |
849 |
output.web.refs % urlbst |
850 |
fin.entry |
851 |
} |
852 |
|
853 |
FUNCTION {booklet} |
854 |
{ output.bibitem |
855 |
format.authors output |
856 |
author format.key output |
857 |
format.title "title" output.check |
858 |
howpublished output |
859 |
address output |
860 |
note output |
861 |
format.date "year" output.check |
862 |
output.web.refs % urlbst |
863 |
fin.entry |
864 |
} |
865 |
|
866 |
FUNCTION {inbook} |
867 |
{ output.bibitem |
868 |
author empty$ |
869 |
{ format.editors "author and editor" output.check |
870 |
editor format.key output |
871 |
} |
872 |
{ format.authors output.nonnull |
873 |
crossref missing$ |
874 |
{ "author and editor" editor either.or.check } |
875 |
'skip$ |
876 |
if$ |
877 |
} |
878 |
if$ |
879 |
format.btitle "title" output.check |
880 |
crossref missing$ |
881 |
{ format.bvolume output |
882 |
format.chapter.pages "chapter and pages" output.check |
883 |
format.number.series output |
884 |
new.sentence |
885 |
publisher "publisher" output.check |
886 |
address output |
887 |
} |
888 |
{ format.chapter.pages "chapter and pages" output.check |
889 |
format.book.crossref output.nonnull |
890 |
} |
891 |
if$ |
892 |
format.edition output |
893 |
note output |
894 |
format.date "year" output.check |
895 |
output.web.refs % urlbst |
896 |
fin.entry |
897 |
} |
898 |
|
899 |
FUNCTION {incollection} |
900 |
{ output.bibitem |
901 |
format.authors "author" output.check |
902 |
author format.key output |
903 |
format.title "title" output.check |
904 |
crossref missing$ |
905 |
{ format.in.ed.booktitle "booktitle" output.check |
906 |
format.bvolume output |
907 |
format.number.series output |
908 |
format.chapter.pages output |
909 |
new.sentence |
910 |
publisher "publisher" output.check |
911 |
address output |
912 |
format.edition output |
913 |
} |
914 |
{ format.incoll.inproc.crossref output.nonnull |
915 |
format.chapter.pages output |
916 |
} |
917 |
if$ |
918 |
note output |
919 |
format.date "year" output.check |
920 |
output.web.refs % urlbst |
921 |
fin.entry |
922 |
} |
923 |
|
924 |
FUNCTION {inproceedings} |
925 |
{ output.bibitem |
926 |
format.authors "author" output.check |
927 |
author format.key output |
928 |
format.title "title" output.check |
929 |
crossref missing$ |
930 |
{ format.in.ed.booktitle "booktitle" output.check |
931 |
format.bvolume output |
932 |
format.number.series output |
933 |
format.pages output |
934 |
address output |
935 |
new.sentence |
936 |
organization output |
937 |
publisher output |
938 |
} |
939 |
{ format.incoll.inproc.crossref output.nonnull |
940 |
format.pages output |
941 |
} |
942 |
if$ |
943 |
note output |
944 |
format.date "year" output.check |
945 |
output.web.refs % urlbst |
946 |
fin.entry |
947 |
} |
948 |
|
949 |
FUNCTION {conference} { inproceedings } |
950 |
|
951 |
FUNCTION {manual} |
952 |
{ output.bibitem |
953 |
format.authors output |
954 |
author format.key output |
955 |
format.btitle "title" output.check |
956 |
organization output |
957 |
address output |
958 |
format.edition output |
959 |
note output |
960 |
format.date "year" output.check |
961 |
output.web.refs % urlbst |
962 |
fin.entry |
963 |
} |
964 |
|
965 |
FUNCTION {mastersthesis} |
966 |
{ output.bibitem |
967 |
format.authors "author" output.check |
968 |
author format.key output |
969 |
format.title "title" output.check |
970 |
"Master's thesis" format.thesis.type output.nonnull |
971 |
school "school" output.check |
972 |
address output |
973 |
note output |
974 |
format.date "year" output.check |
975 |
output.web.refs % urlbst |
976 |
fin.entry |
977 |
} |
978 |
|
979 |
FUNCTION {misc} |
980 |
{ output.bibitem |
981 |
format.authors output |
982 |
author format.key output |
983 |
format.title output |
984 |
howpublished output |
985 |
note output |
986 |
format.date "year" output.check |
987 |
output.web.refs % urlbst |
988 |
fin.entry |
989 |
} |
990 |
|
991 |
FUNCTION {phdthesis} |
992 |
{ output.bibitem |
993 |
format.authors "author" output.check |
994 |
author format.key output |
995 |
format.title "title" output.check |
996 |
"Ph.D. thesis" format.thesis.type output.nonnull |
997 |
school "school" output.check |
998 |
address output |
999 |
note output |
1000 |
format.date "year" output.check |
1001 |
output.web.refs % urlbst |
1002 |
fin.entry |
1003 |
} |
1004 |
|
1005 |
FUNCTION {proceedings} |
1006 |
{ output.bibitem |
1007 |
format.editors output |
1008 |
editor format.key output |
1009 |
format.btitle "title" output.check |
1010 |
format.bvolume output |
1011 |
format.number.series output |
1012 |
address output |
1013 |
new.sentence |
1014 |
organization output |
1015 |
publisher output |
1016 |
note output |
1017 |
format.date "year" output.check |
1018 |
output.web.refs % urlbst |
1019 |
fin.entry |
1020 |
} |
1021 |
|
1022 |
FUNCTION {techreport} |
1023 |
{ output.bibitem |
1024 |
format.authors "author" output.check |
1025 |
author format.key output |
1026 |
format.title "title" output.check |
1027 |
format.tr.number output.nonnull |
1028 |
institution "institution" output.check |
1029 |
address output |
1030 |
note output |
1031 |
format.date "year" output.check |
1032 |
output.web.refs % urlbst |
1033 |
fin.entry |
1034 |
} |
1035 |
|
1036 |
FUNCTION {unpublished} |
1037 |
{ output.bibitem |
1038 |
format.authors "author" output.check |
1039 |
author format.key output |
1040 |
format.title "title" output.check |
1041 |
note "note" output.check |
1042 |
format.date "year" output.check |
1043 |
output.web.refs % urlbst |
1044 |
fin.entry |
1045 |
} |
1046 |
|
1047 |
FUNCTION {default.type} { misc } |
1048 |
|
1049 |
MACRO {jan} {"January"} |
1050 |
|
1051 |
MACRO {feb} {"February"} |
1052 |
|
1053 |
MACRO {mar} {"March"} |
1054 |
|
1055 |
MACRO {apr} {"April"} |
1056 |
|
1057 |
MACRO {may} {"May"} |
1058 |
|
1059 |
MACRO {jun} {"June"} |
1060 |
|
1061 |
MACRO {jul} {"July"} |
1062 |
|
1063 |
MACRO {aug} {"August"} |
1064 |
|
1065 |
MACRO {sep} {"September"} |
1066 |
|
1067 |
MACRO {oct} {"October"} |
1068 |
|
1069 |
MACRO {nov} {"November"} |
1070 |
|
1071 |
MACRO {dec} {"December"} |
1072 |
|
1073 |
MACRO {acmcs} {"ACM Computing Surveys"} |
1074 |
|
1075 |
MACRO {acta} {"Acta Informatica"} |
1076 |
|
1077 |
MACRO {cacm} {"Communications of the ACM"} |
1078 |
|
1079 |
MACRO {ibmjrd} {"IBM Journal of Research and Development"} |
1080 |
|
1081 |
MACRO {ibmsj} {"IBM Systems Journal"} |
1082 |
|
1083 |
MACRO {ieeese} {"IEEE Transactions on Software Engineering"} |
1084 |
|
1085 |
MACRO {ieeetc} {"IEEE Transactions on Computers"} |
1086 |
|
1087 |
MACRO {ieeetcad} |
1088 |
{"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} |
1089 |
|
1090 |
MACRO {ipl} {"Information Processing Letters"} |
1091 |
|
1092 |
MACRO {jacm} {"Journal of the ACM"} |
1093 |
|
1094 |
MACRO {jcss} {"Journal of Computer and System Sciences"} |
1095 |
|
1096 |
MACRO {scp} {"Science of Computer Programming"} |
1097 |
|
1098 |
MACRO {sicomp} {"SIAM Journal on Computing"} |
1099 |
|
1100 |
MACRO {tocs} {"ACM Transactions on Computer Systems"} |
1101 |
|
1102 |
MACRO {tods} {"ACM Transactions on Database Systems"} |
1103 |
|
1104 |
MACRO {tog} {"ACM Transactions on Graphics"} |
1105 |
|
1106 |
MACRO {toms} {"ACM Transactions on Mathematical Software"} |
1107 |
|
1108 |
MACRO {toois} {"ACM Transactions on Office Information Systems"} |
1109 |
|
1110 |
MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} |
1111 |
|
1112 |
MACRO {tcs} {"Theoretical Computer Science"} |
1113 |
|
1114 |
READ |
1115 |
|
1116 |
FUNCTION {sortify} |
1117 |
{ purify$ |
1118 |
"l" change.case$ |
1119 |
} |
1120 |
|
1121 |
INTEGERS { len } |
1122 |
|
1123 |
FUNCTION {chop.word} |
1124 |
{ 's := |
1125 |
'len := |
1126 |
s #1 len substring$ = |
1127 |
{ s len #1 + global.max$ substring$ } |
1128 |
's |
1129 |
if$ |
1130 |
} |
1131 |
|
1132 |
FUNCTION {format.lab.names} |
1133 |
{ 's := |
1134 |
s #1 "{vv~}{ll}" format.name$ |
1135 |
s num.names$ duplicate$ |
1136 |
#2 > |
1137 |
{ pop$ " et~al." * } |
1138 |
{ #2 < |
1139 |
'skip$ |
1140 |
{ s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = |
1141 |
{ " et~al." * } |
1142 |
{ " and " * s #2 "{vv~}{ll}" format.name$ * } |
1143 |
if$ |
1144 |
} |
1145 |
if$ |
1146 |
} |
1147 |
if$ |
1148 |
} |
1149 |
|
1150 |
FUNCTION {author.key.label} |
1151 |
{ author empty$ |
1152 |
{ key empty$ |
1153 |
{ cite$ #1 #3 substring$ } |
1154 |
'key |
1155 |
if$ |
1156 |
} |
1157 |
{ author format.lab.names } |
1158 |
if$ |
1159 |
} |
1160 |
|
1161 |
FUNCTION {author.editor.key.label} |
1162 |
{ author empty$ |
1163 |
{ editor empty$ |
1164 |
{ key empty$ |
1165 |
{ cite$ #1 #3 substring$ } |
1166 |
'key |
1167 |
if$ |
1168 |
} |
1169 |
{ editor format.lab.names } |
1170 |
if$ |
1171 |
} |
1172 |
{ author format.lab.names } |
1173 |
if$ |
1174 |
} |
1175 |
|
1176 |
FUNCTION {editor.key.label} |
1177 |
{ editor empty$ |
1178 |
{ key empty$ |
1179 |
{ cite$ #1 #3 substring$ } |
1180 |
'key |
1181 |
if$ |
1182 |
} |
1183 |
{ editor format.lab.names } |
1184 |
if$ |
1185 |
} |
1186 |
|
1187 |
FUNCTION {calc.label} |
1188 |
{ type$ "book" = |
1189 |
type$ "inbook" = |
1190 |
or |
1191 |
'author.editor.key.label |
1192 |
{ type$ "proceedings" = |
1193 |
'editor.key.label |
1194 |
'author.key.label |
1195 |
if$ |
1196 |
} |
1197 |
if$ |
1198 |
emphasize |
1199 |
"(" |
1200 |
* |
1201 |
year duplicate$ empty$ |
1202 |
{ pop$ "????" } |
1203 |
{ purify$ #-1 #4 substring$ } |
1204 |
if$ |
1205 |
* |
1206 |
'label := |
1207 |
} |
1208 |
|
1209 |
FUNCTION {sort.format.names} |
1210 |
{ 's := |
1211 |
#1 'nameptr := |
1212 |
"" |
1213 |
s num.names$ 'numnames := |
1214 |
numnames 'namesleft := |
1215 |
{ namesleft #0 > } |
1216 |
{ nameptr #1 > |
1217 |
{ " " * } |
1218 |
'skip$ |
1219 |
if$ |
1220 |
s nameptr |
1221 |
"{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" |
1222 |
format.name$ 't := |
1223 |
nameptr numnames = t "others" = and |
1224 |
{ "et al" * } |
1225 |
{ numnames #2 > nameptr #2 = and |
1226 |
{ "zzzzzz" * #1 'namesleft := } |
1227 |
{ t sortify * } |
1228 |
if$ |
1229 |
} |
1230 |
if$ |
1231 |
nameptr #1 + 'nameptr := |
1232 |
namesleft #1 - 'namesleft := |
1233 |
} |
1234 |
while$ |
1235 |
} |
1236 |
|
1237 |
FUNCTION {sort.format.title} |
1238 |
{ 't := |
1239 |
"A " #2 |
1240 |
"An " #3 |
1241 |
"The " #4 t chop.word |
1242 |
chop.word |
1243 |
chop.word |
1244 |
sortify |
1245 |
#1 global.max$ substring$ |
1246 |
} |
1247 |
|
1248 |
FUNCTION {author.sort} |
1249 |
{ author empty$ |
1250 |
{ key empty$ |
1251 |
{ "to sort, need author or key in " cite$ * warning$ |
1252 |
"" |
1253 |
} |
1254 |
{ key sortify } |
1255 |
if$ |
1256 |
} |
1257 |
{ author sort.format.names } |
1258 |
if$ |
1259 |
} |
1260 |
|
1261 |
FUNCTION {author.editor.sort} |
1262 |
{ author empty$ |
1263 |
{ editor empty$ |
1264 |
{ key empty$ |
1265 |
{ "to sort, need author, editor, or key in " cite$ * warning$ |
1266 |
"" |
1267 |
} |
1268 |
{ key sortify } |
1269 |
if$ |
1270 |
} |
1271 |
{ editor sort.format.names } |
1272 |
if$ |
1273 |
} |
1274 |
{ author sort.format.names } |
1275 |
if$ |
1276 |
} |
1277 |
|
1278 |
FUNCTION {editor.sort} |
1279 |
{ editor empty$ |
1280 |
{ key empty$ |
1281 |
{ "to sort, need editor or key in " cite$ * warning$ |
1282 |
"" |
1283 |
} |
1284 |
{ key sortify } |
1285 |
if$ |
1286 |
} |
1287 |
{ editor sort.format.names } |
1288 |
if$ |
1289 |
} |
1290 |
|
1291 |
FUNCTION {presort} |
1292 |
{ calc.label |
1293 |
label sortify |
1294 |
" " |
1295 |
* |
1296 |
type$ "book" = |
1297 |
type$ "inbook" = |
1298 |
or |
1299 |
'author.editor.sort |
1300 |
{ type$ "proceedings" = |
1301 |
'editor.sort |
1302 |
'author.sort |
1303 |
if$ |
1304 |
} |
1305 |
if$ |
1306 |
#1 entry.max$ substring$ |
1307 |
'sort.label := |
1308 |
sort.label |
1309 |
* |
1310 |
" " |
1311 |
* |
1312 |
title field.or.null |
1313 |
sort.format.title |
1314 |
* |
1315 |
#1 entry.max$ substring$ |
1316 |
'sort.key$ := |
1317 |
} |
1318 |
|
1319 |
ITERATE {presort} |
1320 |
|
1321 |
SORT |
1322 |
|
1323 |
STRINGS { last.label next.extra } |
1324 |
|
1325 |
INTEGERS { last.extra.num } |
1326 |
|
1327 |
FUNCTION {initialize.extra.label.stuff} |
1328 |
{ #0 int.to.chr$ 'last.label := |
1329 |
"" 'next.extra := |
1330 |
#0 'last.extra.num := |
1331 |
} |
1332 |
|
1333 |
FUNCTION {forward.pass} |
1334 |
{ last.label label = |
1335 |
{ last.extra.num #1 + 'last.extra.num := |
1336 |
last.extra.num int.to.chr$ 'extra.label := |
1337 |
} |
1338 |
{ "a" chr.to.int$ 'last.extra.num := |
1339 |
"" 'extra.label := |
1340 |
label 'last.label := |
1341 |
} |
1342 |
if$ |
1343 |
} |
1344 |
|
1345 |
FUNCTION {reverse.pass} |
1346 |
{ next.extra "b" = |
1347 |
{ "a" 'extra.label := } |
1348 |
'skip$ |
1349 |
if$ |
1350 |
extra.label 'next.extra := |
1351 |
label extra.label * 'label := |
1352 |
} |
1353 |
|
1354 |
EXECUTE {initialize.extra.label.stuff} |
1355 |
|
1356 |
ITERATE {forward.pass} |
1357 |
|
1358 |
REVERSE {reverse.pass} |
1359 |
|
1360 |
FUNCTION {bib.sort.order} |
1361 |
{ sort.label |
1362 |
" " |
1363 |
* |
1364 |
year field.or.null sortify |
1365 |
* |
1366 |
" " |
1367 |
* |
1368 |
title field.or.null |
1369 |
sort.format.title |
1370 |
* |
1371 |
#1 entry.max$ substring$ |
1372 |
'sort.key$ := |
1373 |
} |
1374 |
|
1375 |
ITERATE {bib.sort.order} |
1376 |
|
1377 |
SORT |
1378 |
|
1379 |
FUNCTION {begin.bib} |
1380 |
{ preamble$ empty$ |
1381 |
'skip$ |
1382 |
{ preamble$ write$ newline$ } |
1383 |
if$ |
1384 |
"\begin{thebibliography}{}" write$ newline$ |
1385 |
} |
1386 |
|
1387 |
EXECUTE {begin.bib} |
1388 |
|
1389 |
EXECUTE {init.config.constants} |
1390 |
EXECUTE {init.state.consts} |
1391 |
|
1392 |
ITERATE {call.type$} |
1393 |
|
1394 |
FUNCTION {end.bib} |
1395 |
{ newline$ |
1396 |
"\end{thebibliography}" write$ newline$ |
1397 |
} |
1398 |
|
1399 |
EXECUTE {end.bib} |
1400 |
%% End of customized bst file |