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