|
|
1.1 root 1: ###
2: ### pami reference formatting style
3: ###
4:
5: BEGIN {
6: PASS="%TWOPASS"; # only one pass thru document
7: sortflag = 1; # reference_placement bib is sortedone
8: STYLE = "pami";
9: SKEY = "adt";
10: }
11:
12:
13:
14: #######################################################
15: #
16: # Functions required by general awk script
17: #
18: #######################################################
19:
20:
21: ##
22: ## Set author and editor fields
23: ## for reference list
24: ## for citation
25: ## for possible sorting
26: ##
27:
28: func setauthor(b,a) {
29: Afull[b,a] = FMLast();
30: Asort[b] = Asort[b] LastFM() " ";
31: }
32:
33: func seteditor(b,a) {
34: E[b,a] = FMLast();
35: Efull[b,a] = LastFM();
36: Esort[b] = Esort[b] Efull[b,a] " ";
37: }
38:
39:
40: ##
41: ## citations
42: ## print a citation list
43: ## (Last, year; Last, year...)
44: ##
45: func citations(lastpunc) {
46: seq = "no";
47: punc = "\n";
48: if(lastpunc == "\"" || lastpunc == "'") {
49: punc = lastpunc " ";
50: lastpunc = "\\ ";
51: }
52: if(lastpunc == "(") {
53: punc = lastpunc;
54: lastpunc = "";
55: }
56: for(i=1; i<=cites; i++) {
57: cn = bibptr[i]
58: seq = sequence(i,cites);
59: if (seq == "in") continue;
60: if (seq == "end") {
61: punc = "-";
62: seq = "no";
63: }
64: printf "%s[", punc;
65: if (pre_text[cn]) printf "%s ", pre_text[cn];
66: printf "%s", makemark(i);
67: if(post_text[cn]) {
68: if (is_punc(substr(post_text[cn],1,1)) == 0) print "";
69: printf "%s", post_text[cn];
70: }
71: printf "]";
72: punc = ", ";
73: }
74: printf lastpunc;
75: }
76:
77: func is_punc(p)
78: {
79: if(p == ",") return 1;
80: if(p == ".") return 1;
81: if(p == ";") return 1;
82: return 0;
83: }
84:
85:
86: ##
87: ## makemark
88: ## return citation mark: identical citations have the same number
89: ##
90: func makemark(m) {
91: return(inverse[uniqno[bibptr[m]]]);
92: }
93:
94:
95:
96: ##
97: ## bibindex
98: ## print citation mark for the bibliography;
99: ## return an index for accessing rest of citation
100: ##
101: func bibindex(b) {
102: printf ".sp .5\n.ti -\\w'[" b "]\\ \\ \\ 'u\n";
103: printf "[" b "]\\ \\ \\ ";
104: if(sortflag) return sortorder[b];
105: else return b;
106: }
107:
108:
109:
110: #############################################
111: #
112: # Reference types
113: #
114: ############################################
115:
116:
117: func book(b) {
118: # authorlist
119: if(authors[b]) {
120: printfull(b);
121: printf ",\n";
122: }
123: # (italic) title.
124: if(title[b])
125: printf "\\f2\\&%s\\f1\\&.\n", title[b];
126: # Vol. #.
127: if (volstr[b])
128: printf "%s.\n", volstr[b] ;
129: else if (volume[b])
130: printf "Vol. %s.\n", volume[b] ;
131: # [location: ]publisher,
132: if (city[b]) printf "%s: ", city[b] ;
133: printf "%s,\n", issuer[b] ;
134: # date
135: printf date[b] ;
136: }
137:
138: func editedbook(b) {
139: # authorlist, Ed[s].,
140: if(authors[b]) {
141: printfull(b);
142: if(authors[b] <2)
143: printf ", Ed.,\n";
144: else
145: printf ", Eds.,\n";
146: }
147: # (italic) title.
148: if(title[b])
149: printf "\\f2\\&%s\\f1\\&.\n", title[b];
150: # Vol. #.
151: if (volstr[b])
152: printf "%s.\n", volstr[b] ;
153: else if (volume[b])
154: printf "Vol. %s.\n", volume[b] ;
155: # [location: ]publisher,
156: if (city[b]) printf "%s: ", city[b] ;
157: printf "%s,\n", issuer[b] ;
158: # date
159: printf date[b] ;
160: }
161:
162: func incollection(b) {
163: # authorlist,
164: if(authors[b]) {
165: printfull(b);
166: printf ",\n";
167: }
168: # ``title,''
169: if(title[b]) {
170: if(nroff)
171: printf "\"%s,\"", title[b] ;
172: else
173: printf "``%s,''", title[b] ;
174: }
175: # in (italics) booktitle,
176: printf "In \\f2\\&%s\\f1\\&,\n", booktitle[b];
177: # Vol. #,
178: if (volstr[b])
179: printf "%s,\n", volstr[b] ;
180: else if (volume[b])
181: printf "Vol. %s,\n", volume[b] ;
182: # editorlist Ed.
183: if (editors[b]) {
184: editorlist(b);
185: if (editors[b] == 1) printf ", Ed.\n"
186: else if (editors[b] > 1) printf ", Eds.\n"
187: }
188: # [location: ]publisher,
189: if (city[b]) printf "%s: ", city[b] ;
190: printf "%s,\n", issuer[b] ;
191: # date
192: printf date[b] ;
193: # pages,
194: if ( pages[b]) {
195: if ( pages[b] ~ /[,-]/ )
196: printf ",\npp. %s", pages[b];
197: else printf ",\np. %s", pages[b];
198: }
199: }
200:
201: func thesis(b) {
202: # authorlist,
203: if(authors[b]) {
204: printfull(b);
205: printf ",\n";
206: }
207: # ``title,''
208: if(title[b]) {
209: if(nroff)
210: printf "\"%s,\"", title[b] ;
211: else
212: printf "``%s,''", title[b] ;
213: }
214: # thesis, publisher,
215: if(reftype[b] == "phdthesis")
216: printf "PhD dissertation, %s", issuer[b];
217: else if(reftype[b] == "mastersthesis")
218: printf "Master's dissertation, %s", issuer[b];
219: # date
220: printf ",\n%s", date[b] ;
221: }
222:
223: func review(b) {
224: article(b);
225: }
226:
227: func article(b) {
228: # authorlist,
229: if(authors[b]) {
230: printfull(b);
231: printf ",\n";
232: }
233: # ``title,''
234: if(title[b]) {
235: if(nroff)
236: printf "\"%s,\"", title[b] ;
237: else
238: printf "``%s,''", title[b] ;
239: }
240: # review
241: if(booktitle[b]) {
242: printf "Review of \\f2\\&%s\\f1\\&", booktitle[b];
243: if(editors[b]) {
244: printf " by "
245: editorlist(b);
246: }
247: if (issuer[b]) {
248: printf " %s", issuer[b];
249: }
250: printf ".\n";
251: }
252: # (italics) journal,
253: printf "\\f2\\&%s\\f1\\&,\n", journal[b];
254: # vol. #,
255: if (volstr[b])
256: printf "%s, ", volstr[b] ;
257: else if (volume[b])
258: printf "vol. %s, ", volume[b] ;
259: # no. #,
260: if(numstr[b])
261: printf "%s, ", numstr[b];
262: else if (number[b])
263: printf "no. %s, ", number[b] ;
264: # pt. #,
265: if(partstr[b])
266: printf "%s, ", partstr[b];
267: else if (part[b])
268: printf "pt. %s, ", part[b] ;
269: # pages,
270: if ( pages[b]) {
271: if ( pages[b] ~ /[,-]/ )
272: printf "pp. %s, ", pages[b];
273: else printf "p. %, s", pages[b];
274: }
275: # date
276: printf "%s", date[b] ;
277: }
278:
279: func inproceedings(b) {
280: # authorlist,
281: if(authors[b]) {
282: printfull(b);
283: printf ",\n";
284: }
285: # ``title,''
286: if(title[b]) {
287: if(nroff)
288: printf "\"%s,\"", title[b] ;
289: else
290: printf "``%s,''", title[b] ;
291: }
292: # (italics) journal,
293: printf "in \\f2\\&%s\\f1\\&,", journal[b];
294: # volume,
295: if (volstr[b])
296: printf ", %s", volstr[b] ;
297: else if (volume[b])
298: printf ", Vol. %s", volume[b] ;
299: if(numstr[b])
300: printf ", %s", numstr[b];
301: else if (number[b])
302: printf ", No. %s", number[b] ;
303: if(partstr[b])
304: printf ", %s", partstr[b];
305: else if (part[b])
306: printf ", Pt. %s", part[b] ;
307: # [location: ]publisher,
308: if (city[b]) printf "%s: ", city[b] ;
309: printf "%s,\n", issuer[b] ;
310: # date
311: printf date[b] ;
312: # pages,
313: if ( pages[b]) {
314: if ( pages[b] ~ /[,-]/ )
315: printf ",\npp. %s", pages[b];
316: else printf ",\np. %s", pages[b];
317: }
318: }
319:
320: func proceedings(b) {
321: # authorlist,
322: if(authors[b]) {
323: printfull(b);
324: printf ",\n";
325: }
326: # editorlist, Ed.
327: else if(editors[b]) {
328: editorlist(b);
329: if (editors[b] == 1) printf ", Ed."
330: else if (editors[b] > 1) printf ", Eds."
331: printf ",\n";
332: }
333: # publisher.
334: else if(issuer[b]) {
335: printf "%s", issuer[b];
336: printf ".\n";
337: }
338: # (italics) title,
339: if(title[b]) {
340: printf "\\f2\\&%s\\f1\\&", title[b];
341: printf ",\n";
342: }
343: # vol. #,
344: if (volstr[b])
345: printf "%s, ", volstr[b] ;
346: else if (volume[b])
347: printf "vol. %s, ", volume[b] ;
348: # no. #,
349: if(numstr[b])
350: printf "%s, ", numstr[b];
351: else if (number[b])
352: printf "no. %s, ", number[b] ;
353: # pt. #,
354: if(partstr[b])
355: printf "%s, ", partstr[b];
356: else if (part[b])
357: printf "pt. %s, ", part[b] ;
358: # publisher,
359: if(issuer[b]) {
360: if(authors[b] || editors[b]) {
361: printf issuer[b];
362: printf ",\n";
363: }
364: }
365: # location,
366: if (city[b]) {
367: printf city[b] ;
368: printf ",\n";
369: }
370: # date
371: if (date[b])
372: printf date[b];
373: }
374:
375: func techreport(b) {
376: # authorlist,
377: if(authors[b]) {
378: printfull(b);
379: printf ",\n";
380: }
381: # ``title,''
382: if(title[b]) {
383: if(nroff)
384: printf "\"%s,\"", title[b] ;
385: else
386: printf "``%s,''", title[b] ;
387: }
388: # publisher,
389: if (issuer[b]) printf ",\n%s", issuer[b] ;
390: # location,
391: if (city[b]) {
392: printf city[b] ;
393: printf ",\n";
394: }
395: # report number,
396: printf report[b]
397: # date
398: printf ",\n%s", date[b] ;
399: }
400:
401: func tm(b) {
402: # authorlist,
403: if(authors[b]) {
404: printfull(b);
405: printf ",\n";
406: }
407: # ``title,''
408: if(title[b]) {
409: if(nroff)
410: printf "\"%s,\"", title[b] ;
411: else
412: printf "``%s,''", title[b] ;
413: }
414: # report number,
415: if(rp)
416: printf "AT&T Bell Laboratories internal memorandum";
417: else
418: printf tmno[b]
419: # date
420: printf ",\n%s", date[b] ;
421: }
422:
423: func manual(b) {
424: # authorlist,
425: if(authors[b]) {
426: printfull(b);
427: printf ",\n";
428: }
429: # editorlist, Ed.
430: else if(editors[b]) {
431: editorlist(b);
432: if (editors[b] == 1) printf ", Ed."
433: else if (editors[b] > 1) printf ", Eds."
434: printf ",\n";
435: }
436: # publisher.
437: else if(issuer[b]) {
438: printf "%s", issuer[b];
439: printf ".\n";
440: }
441: # (italics) title,
442: if(title[b]) {
443: printf "\\f2\\&%s\\f1\\&", title[b];
444: printf ",\n";
445: # vol. #,
446: if (volstr[b])
447: printf "%s, ", volstr[b] ;
448: else if (volume[b])
449: printf "vol. %s, ", volume[b] ;
450: }
451: # publisher,
452: if(issuer[b]) {
453: if(authors[b] || editors[b]) {
454: printf issuer[b];
455: printf ",\n";
456: }
457: }
458: # location,
459: if (city[b]) {
460: printf city[b] ;
461: printf ",\n";
462: }
463: # date
464: printf date[b];
465: }
466:
467: func pamphlet(b) {
468: default(b);
469: }
470:
471: func default(b) {
472: # authorlist
473: punc = "";
474: if(authors[b]) {
475: printfull(b);
476: punc = ",\n";
477: }
478: # publisher.
479: else if(issuer[b]) {
480: printf "%s%s", punc, issuer[b];
481: punc = ".\n";
482: }
483: # title,
484: if (title[b]) {
485: printf "%s%s", punc, title[b];
486: punc = ".\n";
487: }
488: # volume,
489: if(volstr[b]) {
490: printf ", %s", volstr[b];
491: }
492: else if (volume[b]) {
493: printf ", Vol. %s", punc, volume[b] ;
494: }
495: # publisher,
496: if(issuer[b]) {
497: printf "%s%s", punc, issuer[b];
498: punc = ", ";
499: }
500: # location,
501: if (city[b]) {
502: printf "%s%s", punc, city[b] ;
503: punc = ", ";
504: }
505: # date,
506: if (date[b]) {
507: printf "%s%s", punc, date[b];
508: punc = ", ";
509: }
510: # pages
511: if (pages[b]) {
512: if ( pages[b] ~ /[,-]/ )
513: printf "%spp. %s", punc, pages[b];
514: else
515: printf "%sp. %s", punc, pages[b];
516: }
517: }
518:
519:
520:
521: # authorlist
522: # First
523: # First and Second
524: # First, Second, ..., and Last
525:
526: func printfull(b) {
527: if ( authors[b] == 0 ) ;
528: else if ( authors[b] == 1 ) {
529: printf Afull[b,1] ;
530: if(aetal[b]) printf ", et al.";
531: }
532: else if ( authors[b] == 2 ) printf Afull[b,1] " and " Afull[b,2];
533: else {
534: for ( j = 1; j < authors[b]; j++ ) printf Afull[b,j] ", ";
535: printf "and " Afull[b,authors[b]];
536: }
537: }
538:
539: func editorlist(b) {
540: if ( editors[b] == 0 ) ;
541: else if ( editors[b] == 1 ) printf E[b,1] ;
542: else if ( editors[b] == 2 ) printf E[b,1] " and " E[b,2];
543: else {
544: for ( j = 1; j < editors[b]; j++ ) printf E[b,j] ", ";
545: printf "and " E[b,editors[b]];
546: }
547: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.