|
|
researchv10 Norman
###
### ieee reference formatting style
###
BEGIN {
PASS = ""; # only one pass thru document
sortflag = 0; # reference_placement bibliography is not sorted
STYLE = ieee;
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] = F_MLast();
Asort[b] = Asort[b] LastFM()" ";
}
func seteditor(b,a) {
E[b,a] = F_MLast();
Esort[b] = Esort[b] LastFM() " ";
}
##
## 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";
# Vol. #,
if(volstr[b])
printf "%s%s", punc, volstr[b];
else if(volume[b])
printf "%sVol. %s", punc, volume[b];
}
# publisher,
printf "%s%s", punc, issuer[b] ;
punc = ",\n";
# location,
if (city[b])
printf "%s%s", punc, city[b] ;
# date,
printf "%s%s", punc, date[b] ;
# pages
if ( pages[b]) {
if ( pages[b] ~ /[,-]/ )
printf "%spp. %s", punc, pages[b];
else printf "%sp. %s", punc, pages[b];
}
}
func editedbook(b) {
punc = "";
# authorlist, Ed.,
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";
# Vol. #,
if(volstr[b])
printf "%s%s", punc, volstr[b];
else if(volume[b])
printf "%sVol. %s", punc, volume[b];
}
# publisher,
printf "%s%s", punc, issuer[b] ;
punc = ",\n";
# location,
if (city[b])
printf "%s%s", punc, city[b] ;
# date,
printf "%s%s", punc, date[b] ;
# pages
if ( pages[b]) {
if ( pages[b] ~ /[,-]/ )
printf "%spp. %s", punc, pages[b];
else printf "%sp. %s", punc, pages[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%s", punc, 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 ";
editorlist(b);
}
if (issuer[b]) {
printf " %s", issuer[b];
}
printf ",\n";
}
# italics(journal),
printf "\\f2\\&%s\\f1\\&", journal[b];
punc = ",\n";
# vol. #, no. #, Pt. #
if (volstr[b])
printf "%s%s", punc, volstr[b] ;
else if (volume[b])
printf "%sVol. %s", punc, volume[b] ;
if(numstr[b])
printf "%s%s", punc, numstr[b];
else if (number[b])
printf "%sNo. %s", punc, number[b] ;
if(partstr[b])
printf "%s%s", punc, partstr[b];
else if (part[b])
printf "%sPt. %s", punc, part[b] ;
# date,
printf "%s%s", punc, date[b];
# pages
if ( pages[b]) {
if ( pages[b] ~ /[,-]/ )
printf "%spp. %s", punc, pages[b];
else printf "%sp. %s", punc,pages[b];
}
}
func incollection(b) {
punc = "";
# authorlist,
if(authors[b]) {
authorlist(b);
punc = ",\n";
}
# ``Title,''
if(title[b]) {
if(nroff)
printf "%s\"%s,\"\n", punc, title[b] ;
else
printf "%s``%s,''\n", punc, title[b] ;
}
# in italics(booktitle),
printf "in \\f2\\&%s\\f1\\&", booktitle[b];
punc = ",\n";
# Vol. #,
if(volstr[b])
printf "%s%s", punc, volstr[b];
else if(volume[b])
printf "%sVol. %s", punc, volume[b];
# editorlist, eds.,
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%s", punc, date[b];
# pages
if ( pages[b]) {
if ( pages[b] ~ /[,-]/ )
printf "%spp. %s", punc,pages[b];
else printf "%sp. %s", punc,pages[b];
}
}
func inproceedings(b) {
punc = "";
# authorlist,
if(authors[b]) {
authorlist(b);
punc = ",\n";
}
# ``Title,''
if(title[b]) {
if(nroff)
printf "%s\"%s,\"\n", punc, title[b] ;
else
printf "%s``%s,''\n", punc, title[b] ;
}
# italics(journal),
printf "\\f2\\&%s\\f1\\&", journal[b];
punc = ",\n";
# vol. #, no. #,
if (volstr[b])
printf "%s%s", punc, volstr[b] ;
else if (volume[b])
printf "%sVol. %s", punc, volume[b] ;
if(numstr[b])
printf "%s%s", punc, numstr[b];
else if (number[b])
printf "%sNo. %s", punc, number[b] ;
if(partstr[b])
printf "%s%s", punc, partstr[b];
else if (part[b])
printf "%sPt. %s", punc, part[b] ;
# editorlist, eds.,
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];
# date,
printf "%s%s", punc, date[b];
# pages
if ( pages[b]) {
if ( pages[b] ~ /[,-]/ )
printf "%spp. %s", punc, pages[b];
else printf "%sp. %s", punc, pages[b];
}
}
func proceedings(b) {
punc = "";
# authorlist,
if(authors[b] >0) {
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 = ",\n";
}
# vol. #, no. #,
if (volstr[b])
printf "%s%s", punc, volstr[b] ;
else if (volume[b])
printf "%sVol. %s", punc, volume[b] ;
if(numstr[b])
printf "%s%s", punc, numstr[b];
else if (number[b])
printf "%sNo. %s", punc, number[b] ;
if(partstr[b])
printf "%s%s", punc, partstr[b];
else if (part[b])
printf "%sPt. %s", punc, part[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] ;
# (date)
if (date[b])
printf "%s(%s)", punc, date[b];
}
func techreport(b) {
punc = "";
# authorlist,
if(authors[b]) {
authorlist(b);
punc = ",\n";
}
# ``Title,''
if(title[b]) {
if(nroff)
printf "%s\"%s,\"\n", punc, title[b] ;
else
printf "%s``%s,''\n", punc, title[b] ;
}
# report,
printf "%s", report[b];
punc = ",\n";
# publisher,
if (issuer[b]) printf "%s%s", punc, issuer[b] ;
# date
printf "%s%s", punc, date[b] ;
}
func tm(b) {
punc = "";
# authorlist,
if(authors[b]) {
authorlist(b);
punc = ",\n";
}
# italics(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];
punc = ",\n";
# date
printf "%s%s", punc, date[b] ;
}
func manual(b) {
punc = "";
# authorlist,
if(authors[b] >0) {
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";
}
# italic(title),
if(title[b]) {
printf "%s\\f2\\&%s\\f1\\&", punc, title[b];
punc = ",\n";
}
# Vol. 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] ;
# date,
printf "%s%s", punc, date[b];
# pages
if (pages[b]) {
if ( pages[b] ~ /[,-]/ )
printf "%spp. %s", punc, pages[b];
else
printf "%sp. %s", punc, pages[b];
}
}
func pamphlet(b)
{
punc = "";
# authorlist,
if(authors[b] >0) {
authorlist(b);
punc = ",\n";
}
# publisher,
else if(issuer[b]) {
printf "%s%s", punc, issuer[b];
punc = ",\n";
}
# ``Title,''
if(title[b]) {
if(nroff) {
printf "%s\"%s", punc, title[b] ;
punc = ",\"\n";
}
else {
printf "%s``%s", punc, title[b] ;
punc = ",''\n";
}
}
# 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] ;
punc = ",\n";
}
# date
if (date[b]) {
printf "%s%s", punc, date[b];
punc = ",\n";
}
}
func default(b) {
punc = "";
# authorlist,
if(authors[b] >0) {
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";
}
# Vol. 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] ;
punc = ",\n";
}
# date,
if (date[b]) {
printf "%s%s", punc, date[b];
punc = ",\n";
}
# pages
if (pages[b]) {
if ( pages[b] ~ /[,-]/ )
printf "%spp. %s", punc, pages[b];
else
printf "%sp. %s", punc, pages[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]];
}
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.