|
|
researchv10 Norman
###
### att reference formatting style
###
BEGIN {
PASS = ""; # only one pass thru document
sortflag = 0; # reference_placement bibliography is not sorted
STYLE = "att";
SKEY = "adt";
}
#######################################################
#
# Functions required by general awk script
#
#######################################################
##
## Set author and editor fields
## for reference
## for possible sorting
##
func setauthor(b,a) {
Afull[b,a] = LastF_M();
Asort[b] = Asort[b] Afull[b,a] " ";
}
func seteditor(b,a) {
E[b,a] = LastF_M();
Ename[b,a] = F_M_Last();
Esort[b] = Esort[b] E[b,a] " ";
}
##
## citations
## print a citation list
## troff superscripted numbers
## nroff numbers in square brackets
##
func citations(tpunc) {
seq = "no";
sep = "";
# troff citation
if(nroff == 0) {
tcite = "";
begin_super = "\\^\\s-2\\v'-0.4m'\\f1\\&";
end_super = "\\fP\\v'0.4m'\\s+2"
if(quote(tpunc) || period(tpunc))
end_super = end_super "\\ ";
# format the list of citations, putting in commas and hypens
for(i=1; i<=cites; i++) {
seq = sequence(i,cites);
if (seq == "in") continue;
if (seq == "end") {
sep = "-";
seq = "no";
}
tcite = tcite sep makemark(i);
sep = ",\\ ";
}
printf "%s%s%s%s", tpunc, begin_super, tcite, end_super;
}
# nroff citation
else {
ncite = "\n";
if(quote(tpunc)) {
ncite = tpunc " ";
tpunc = "\\ ";
}
else if(tpunc == "(") {
ncite = tpunc;
tpunc = "";
}
# format the list of citations, putting in commas and hypens
for(i=1; i<=cites; i++) {
seq = sequence(i,cites);
if (seq == "in") continue;
if (seq == "end") {
sep = "-";
seq = "no";
}
ncite = ncite sep "[" makemark(i) "]";
sep = ", ";
}
printf "%s%s", ncite, tpunc;
}
}
func quote(punc) {
if(tpunc == "\"" || tpunc == "'") return 1;
return 0;
}
func period(punc) {
if (tpunc == "." || tpunc == "!" || tpunc == "?") return 1;
return 0;
}
##
## makemark
## return citation mark: identical citations have the same number
##
func makemark(m) {
return(uniqno[bibptr[m]]);
}
##
## bibindex
## print citation mark for the bibliography;
## return an index for accessing rest of citation
##
func bibindex(b) {
printf ".sp .5\n.ti -\\w'[" b "]\\ \\ \\ 'u\n";
printf "[" b "]\\ \\ \\ " ;
if(sortflag) return sortorder[b];
else return b;
}
#############################################
#
# Reference types
#
############################################
func book(b) {
punc = ""
# authorlist,
if(authors[b]) {
authorlist(b);
punc = ",\n";
}
# italic(title),
if (title[b]) {
printf "%s\\f2\\&%s\\f1\\&", punc, title[b];
punc = ",\n";
}
# volume,
if(volstr[b]) {
printf "%s%s", punc, volstr[b];
punc = ",\n";
}
else if(volume[b]) {
printf "%sVol. %s", punc, volume[b];
punc = ",\n";
}
# pages,
if (pages[b]) {
if ( pages[b] ~ /[,-]/ )
printf "%spp. %s", punc, pages[b];
else printf "%sp. %s", punc, pages[b];
punc = ",\n";
}
# publisher,
printf "%s%s", punc, issuer[b] ;
punc = ",\n";
# location
if (city[b])
printf "%s%s", punc, city[b] ;
# (date)
printf " (%s)", date[b] ;
}
func editedbook(b) {
punc = "";
# authorlist (Eds.),
if(authors[b]) {
authorlist(b);
if(authors[b] <2)
printf " (Ed.)";
else
printf " (Eds.)";
punc = ",\n";
}
# italic(title),
if (title[b]) {
printf "%s\\f2\\&%s\\f1\\&", punc, title[b];
punc = ",\n";
}
# volume,
if(volstr[b]) {
printf "%s%s", punc, volstr[b];
punc = ",\n";
}
else if(volume[b]) {
printf "%sVol. %s", punc, volume[b];
punc = ",\n";
}
# publisher,
printf "%s%s", punc, issuer[b] ;
punc = ",\n";
# location,
if (city[b] != "")
printf "%s%s", punc, city[b] ;
# pages
if ( pages[b] != "" ) {
if ( pages[b] ~ /[,-]/ )
printf "%spp. %s", punc, pages[b];
else printf "%sp. %s", punc, pages[b];
}
# (date)
printf " (%s)", date[b] ;
}
func thesis(b) {
punc = ""
# authorlist,
if(authors[b]) {
authorlist(b);
punc = ",\n"
}
# italic(title),
if(title[b]) {
printf "%s\\f2\\&%s\\f1\\&", punc, title[b];
punc = ",\n"
}
# thesis,
printf punc;
if(reftype[b] == "phdthesis")
printf "PhD Thesis";
else
printf "Master's Thesis";
punc = ",\n";
# report number,
if(report[b])
printf "%s%s", punc, report[b];
# school
printf "%s%s", punc, issuer[b];
# (date)
printf " (%s)", date[b] ;
}
func review(b) {
article(b);
}
func article(b) {
punc = "";
# authorlist,
if(authors[b]) {
authorlist(b);
punc = ",\n"
}
# ``Title,''
if(title[b]) {
if(nroff)
printf "%s\"%s,\"", punc, title[b] ;
else
printf "%s``%s,''", punc, title[b] ;
punc = "\n";
}
# Reviewed title and author
if(booktitle[b]) {
printf "%sReview of \\f2\\&%s\\f1\\&", punc, booktitle[b];
if(editors[b]) {
printf " by ";
enamelist(b);
}
if (issuer[b]) {
printf " %s", issuer[b];
}
punc = ",\n";
}
# italics(journal)
printf "%s\\f2\\&%s\\f1\\&", punc, journal[b];
punc = ",\n";
# bold(volume)(number Pt part),
if (volstr[b])
printf " \\f3\\&%s\\f1\\&", volstr[b] ;
else if (volume[b])
printf " \\f3\\&%s\\f1\\&", volume[b] ;
if (numstr[b]) {
printf "(%s", numstr[b];
if(partstr[b])
printf " %s", partstr[b];
else if(part[b])
printf " Pt. %s", part[b];
printf ")";
}
else if (number[b]) {
printf "(%s", number[b];
if(partstr[b])
printf " %s", partstr[b];
else if(part[b])
printf " Pt. %s", part[b];
printf ")";
}
# pages,
if ( pages[b]) {
if ( pages[b] ~ /[,-]/ )
printf "%spp. %s", punc, pages[b];
else printf "%sp. %s", punc,pages[b];
}
# publisher
if(issuer[b])
if(authors[b] || editors[b])
printf "%s%s", punc, issuer[b];
# (date)
printf " (%s)", date[b];
}
func incollection(b) {
punc = "";
# Authorlist
if(authors[b]) {
authorlist(b);
punc = ",\n";
}
# ``Title,''
if(title[b]) {
if(nroff)
printf "%s\"%s,\"", punc, title[b] ;
else
printf "%s``%s,''", punc, title[b] ;
punc = "\n";
}
# pages
if ( pages[b]) {
if ( pages[b] ~ /[,-]/ )
printf "%spp. %s ", punc, pages[b];
else printf "%sp. %s ", punc, pages[b];
punc = "";
}
# in italics(booktitle),
printf "%sin \\f2\\&%s\\f1\\&", punc, booktitle[b];
punc = ",\n";
# volume,
if(volstr[b]) {
printf "%s%s", punc, volstr[b];
}
else if(volume[b]) {
printf "%sVol. %s", punc, volume[b];
}
# editorlist (Ed.),
if(editors[b]) {
printf punc;
editorlist(b);
if (editors[b] == 1) printf " (Ed.)"
else if (editors[b] > 1) printf " (Eds.)"
}
# publisher, location,
printf "%s%s", punc, issuer[b]
if (city[b])
printf ", %s", city[b] ;
# (date)
printf " (%s)", date[b];
}
func inproceedings(b) {
punc = "";
# authorlist
if(authors[b]) {
authorlist(b);
punc = ",\n";
}
# ``Title,''
if(title[b]) {
if(nroff)
printf "%s\"%s,\"", punc,title[b] ;
else
printf "%s``%s,''", punc,title[b] ;
punc = "\n";
}
# italics(journal)
printf "%s\\f2\\&%s\\f1\\&", punc, journal[b];
punc = ",\n";
# bold(vol)(no Pt. #),
if (volstr[b])
printf " \\f3\\&%s\\f1\\&", volstr[b] ;
else if (volume[b])
printf " \\f3\\&%s\\f1\\&", volume[b] ;
if (numstr[b]) {
printf "(%s", numstr[b];
if(partstr[b])
printf " %s", partstr[b];
else if(part[b])
printf " Pt. %s", part[b];
printf ")";
}
else if (number[b]) {
printf "(%s", number[b];
if(partstr[b])
printf " %s", partstr[b];
else if(part[b])
printf " Pt. %s", part[b];
printf ")";
}
# pages,
if ( pages[b]) {
if ( pages[b] ~ /[,-]/ )
printf "%spp. %s", punc, pages[b];
else printf "%sp. %s", punc, pages[b];
}
# editorlist (Ed.),
if(editors[b]) {
printf punc;
editorlist(b);
if (editors[b] == 1) printf " (Ed.)"
else if (editors[b] > 1) printf " (Eds.)"
}
# publisher
if(issuer[b])
if(authors[b] || editors[b])
printf "%s%s", punc, issuer[b];
if (city[b])
printf "%s%s", punc, city[b] ;
# (date)
printf " (%s)", date[b];
}
func proceedings(b) {
punc = "";
# authorlist,
if(authors[b]) {
authorlist(b);
punc = ",\n";
}
# editorlist (Ed.),
else if(editors[b]) {
printf punc;
editorlist(b);
if (editors[b] == 1) printf " (Ed.)"
else if (editors[b] > 1) printf " (Eds.)"
punc = ",\n";
}
# publisher,
else if(issuer[b]) {
printf "%s%s", punc, issuer[b];
punc = ",\n";
}
# italics(title)
if(title[b]) {
printf "%s\\f2\\&%s\\f1\\&", punc,title[b];
punc = " ";
}
# bold(vol)(no Pt. #),
if (volstr[b]) {
printf "%s\\f3\\&%s\\f1\\&", punc,volstr[b];
punc = ",\n";
}
else if (volume[b]) {
printf "%s\\f3\\&%s\\f1\\&", punc,volume[b];
punc = ",\n";
}
if (numstr[b]) {
printf "(%s", numstr[b];
if(partstr[b])
printf " %s", partstr[b];
else if(part[b])
printf " Pt. %s", part[b];
printf ")";
}
else if (number[b]) {
printf "(%s", number[b];
if(partstr[b])
printf " %s", partstr[b];
else if(part[b])
printf " Pt. %s", part[b];
printf ")";
}
# publisher,
if(issuer[b])
if(authors[b] != 0 || editors[b] != 0) {
printf "%s%s", punc, issuer[b];
punc = ",\n";
}
# location,
if (city[b])
printf "%s%s", punc, city[b] ;
# (date)
if (date[b])
printf " (%s)", date[b];
}
func techreport(b) {
punc = "";
# authorlist,
if(authors[b]) {
authorlist(b);
punc = ",\n";
}
# ``Title,''
if(title[b]) {
if(nroff)
printf "%s\"%s,\"", punc, title[b] ;
else
printf "%s``%s,''", punc, title[b] ;
punc = "\n";
}
# report,
printf "%s%s", punc, report[b];
punc = ",\n";
# publisher,
if (issuer[b]) printf "%s%s", punc, issuer[b] ;
# location
if (city[b])
printf "%s%s", punc, city[b] ;
# (date)
printf " (%s)", date[b] ;
}
func tm(b) {
punc = ""
# authorlist
if(authors[b]) {
authorlist(b);
punc = ",\n";
}
# italic(title),
if(title[b]) {
printf "%s\\f2\\&%s\\f1\\&", punc, title[b];
punc = ",\n";
}
# tmno
printf punc;
if(rp)
printf "AT&T Bell Laboratories internal memorandum";
else
printf "%s", tmno[b]
# (date)
printf " (%s)", date[b] ;
}
func manual(b) {
punc = "";
# authorlist,
if(authors[b]) {
authorlist(b);
punc = ",\n";
}
# editorlist (Ed.),
else if(editors[b] > 0) {
printf punc;
editorlist(b);
if (editors[b] == 1) printf " (Ed.)"
else if (editors[b] > 1) printf " (Eds.)"
punc = ",\n"
}
# publisher,
else if(issuer[b]) {
printf "%s%s", punc, issuer[b];
punc = ",\n";
}
# italic(title),
if(title[b]) {
printf "%s\\f2\\&%s\\f1\\&", punc, title[b];
punc = ",\n";
}
# volume,
if(volstr[b]) {
printf "%s%s", punc, volstr[b];
}
else if(volume[b]) {
printf "%sVol. %s", punc, volume[b];
}
# publisher,
if(issuer[b])
if(authors[b] || editors[b] ) {
printf "%s%s", punc, issuer[b];
punc = ",\n";
}
# location,
if (city[b])
printf "%s%s", punc, city[b] ;
# pages
if (pages[b]) {
if ( pages[b] ~ /[,-]/ )
printf "%spp. %s", punc, pages[b];
else
printf "%sp. %s", punc, pages[b];
}
# (date)
printf " (%s)", date[b];
}
func pamphlet(b)
{
punc = "";
# authorlist,
if(authors[b]) {
authorlist(b);
punc = ",\n";
}
# publisher,
else if(issuer[b]) {
printf "%s%s", punc, issuer[b];
punc = ",\n";
}
# ``Title,''
if(title[b]) {
printf "%s\\f2\\&%s\\f1\\&", punc, title[b] ;
punc = ",\n";
}
# publisher,
if(issuer[b]) {
if(authors[b] || editors[b]) {
printf "%s%s", punc, issuer[b];
}
}
# location
if (city[b]) {
printf "%s%s", punc, city[b] ;
}
# (date),
if (date[b]) {
printf " (%s)", date[b];
}
}
func default(b) {
punc = "";
# authorlist,
if(authors[b]) {
authorlist(b);
punc = ",\n";
}
# publisher,
else if(issuer[b]) {
printf "%s%s", punc, issuer[b];
punc = ",\n";
}
# title,
if(title[b]) {
printf "%s\\f2\\&%s\\f1\\&", punc, title[b] ;
punc = ",\n";
}
# volume,
if(volstr[b]) {
printf "%s%s", punc, volstr[b];
}
else if(volume[b]) {
printf "%sVol. %s", punc, volume[b];
}
# publisher,
if(issuer[b]) {
if(authors[b] || editors[b]) {
printf "%s%s", punc, issuer[b];
}
}
# location,
if (city[b]) {
printf "%s%s", punc, city[b] ;
}
# pages
if (pages[b]) {
if ( pages[b] ~ /[,-]/ )
printf "%spp. %s", punc, pages[b];
else
printf "%sp. %s", punc, pages[b];
}
# (date)
if (date[b]) {
printf " (%s)", date[b];
}
}
##
## authorlist
## First
## First and Second
## First, Second,..., and Last
##
func authorlist(b) {
if ( authors[b] == 0 ) ;
else if ( authors[b] == 1 ) {
printf Afull[b,1] ;
if(aetal[b]) printf ", et al.";
}
else if ( authors[b] == 2 ) printf Afull[b,1] " and " Afull[b,2];
else {
for ( j = 1; j < authors[b]; j++ ) print Afull[b,j] ", ";
printf "and " Afull[b,authors[b]];
}
}
##
## editorlist
## First
## First and Second
## First, Second,..., and Last
##
func editorlist(b) {
if ( editors[b] == 0 ) ;
else if ( editors[b] == 1 ) {
printf E[b,1] ;
if(eetal[b]) printf ", et al.";
}
else if ( editors[b] == 2 ) printf E[b,1] " and " E[b,2];
else {
for ( j = 1; j < editors[b]; j++ ) print E[b,j] ", ";
printf "and " E[b,editors[b]];
}
}
##
## enamelist
## First
## First and Second
## First, Second,..., and Last
##
func enamelist(b) {
if ( editors[b] == 0 ) ;
else if ( editors[b] == 1 ) {
printf Ename[b,1] ;
if(eetal[b]) printf ", et al.";
}
else if ( editors[b] == 2 ) printf Ename[b,1] " and " Ename[b,2];
else {
for ( j = 1; j < editors[b]; j++ ) print Ename[b,j] ", ";
printf "and " Ename[b,editors[b]];
}
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.