|
|
1.1 ! root 1: |make(rp) ! 2: ! 3: |insert(../monk/monk.mac) ! 4: ! 5: ! 6: |comment(VOL2HEADER)|set_counter(page 163-1)|set_string(page_headers "'''")|set_string(even_headers "'Formatting References with Prefer''\f(NIprefer\fP'")|set_string(odd_headers "'\f(NIprefer\fP''Formatting References with Prefer'")|set_string(even_footers "_\\nP__UNIX Papers_")|set_string(odd_footers "'Research Tenth Edition''\\nP'") ! 7: |author(name "M. A. Derr", initials MAD, location MH, department 11225, ! 8: extension x4721, room 2D-455) ! 9: ! 10: |date(July 1, 1989) ! 11: |title(Formatting References with Prefer) ! 12: ! 13: |begin(abstract) ! 14: |i(Prefer) is a |small(UNIX) text processing ! 15: tool ! 16: that formats bibliographic references. ! 17: Using a bibliography database, it scans a document to ! 18: convert symbolic references ! 19: to citation marks and full references ready for typesetting. ! 20: It currently supports a variety of reference formatting ! 21: styles including those of the |s(ACM), |s(IEEE), and |s(APA). ! 22: |i(Prefer) ! 23: runs as a preprocessor to |i(troff) ! 24: and can also be invoked by ! 25: the |i(monk) text processing package. ! 26: This paper describes |i(prefer) and its supporting ! 27: tools for creating, indexing, ! 28: and retrieving from bibliography databases and for ! 29: converting |i(refer)-style databases and documents ! 30: for use with |i(prefer). ! 31: |end(abstract) ! 32: ! 33: ! 34: |titlebox ! 35: ! 36: |insert(prefer.cite) ! 37: ! 38: |style(two_column) ! 39: ! 40: |section(Introduction) ! 41: ! 42: |i(Prefer) is a |small(UNIX) text processing ! 43: tool|dagnote[In addition to ! 44: Tenth Edition |small(UNIX), ! 45: |i(prefer) runs under ! 46: |small(AT&T UNIX) System V ! 47: and 4.3|small(BSD UNIX).] ! 48: that formats bibliographic references. ! 49: Using a bibliography database, it scans a document to ! 50: convert symbolic references ! 51: to citation marks and full references ready for typesetting. ! 52: Like |i(eqn)|reference(latest eqn) and ! 53: |i(tbl)|reference(latest tbl), |i(prefer) ! 54: runs as a preprocessor to |i(troff) ! 55: |reference(latest troff tutorial). ! 56: It can also be invoked by ! 57: the |i(monk)|reference(latest monk) text processing package. ! 58: ! 59: |p ! 60: |i(Prefer) was designed to replace the |i{refer} ! 61: |reference{Lesk indexes} bibliography program. ! 62: |i(Refer) is not only lacking in flexibility, with much of ! 63: its functionality hardwired into C code, ! 64: but the code is difficult to modify and maintain. ! 65: |i(Prefer) improves on ! 66: |i{refer} and ! 67: on |i{bib} |reference{bib}, an earlier ! 68: |i{refer} replacement. ! 69: It also follows style conventions found in ! 70: other bibliography formatters such as |i{Scribe} |reference{scribe}, ! 71: and |i{BibTeX} |reference{latex} |reference{bibtex}. ! 72: It attains flexibility by encoding all style-dependent formatting ! 73: information in scripts written in |i{awk} |reference{awk 1988}, ! 74: a pattern scanning and processing language. ! 75: |i{Prefer} currently supports seven reference formatting styles: ! 76: ! 77: |environment(text_list; ! 78: list.pre "\&", list.format 1, ! 79: list.post "\ ", ! 80: if "@\*(l5@@", ! 81: set string l5 "nnnnnn", ! 82: store width l2 l5, ! 83: tab.stops "\n(l2u", ! 84: list.spacing off, list on; ! 85: ! 86: list off, tab.stops, ! 87: ) ! 88: |comment<summary: text_list (text list using text from item))> ! 89: ! 90: ! 91: |associate(item; ! 92: store string Ts l2; ! 93: ! 94: |ifvalue list.spacing on [ ! 95: blank.lines 6p, ! 96: ] ! 97: store width l2 l5, ! 98: store width l1 Ts, ! 99: if else "\n(l1>\n(l2", ! 100: add string.from.string Ts l4, ! 101: if else, ! 102: add string Ts " ", ! 103: store string Rs l4, ! 104: indent.line 0, ! 105: string Ts, concatenate; ! 106: [$;; ! 107: add string Ts $]) ! 108: |comment<summary: item (item of a list; IT)> ! 109: ! 110: |blank_space(6p) ! 111: .ds l5 |cw<spectrum>n ! 112: |begin(text_list) ! 113: |item{"\f(CWatt\fP"}|small(AT&T) Bell Laboratories ! 114: |item{"\f(CWacm\fP"}Association for Computing Machinery ! 115: |item{"\f(CWapa\fP"}American Psychological Association ! 116: |item{"\f(CWieee\fP"}Institute of Electrical and Electronics Engineers, Inc. ! 117: |item{"\f(CWlsa\fP"}Linguistic Society of America ! 118: |item{"\f(CWpami\fP"}Pattern Analysis and Machine Intelligence ! 119: |item{"\f(CWspectrum\fP"}|small(IEEE) Spectrum ! 120: |end(text_list) ! 121: In addition, users may define their own styles ! 122: by supplying an appropriate |i{awk} style script. ! 123: |i{Prefer} uses the |cw{att} style by default. ! 124: Unless noted, all examples in this paper will be ! 125: in |cw{att} style. ! 126: ! 127: |p ! 128: To give a flavor of what |i(prefer) can do, here is ! 129: a simple example of a document containing citations to ! 130: references in a bibliography database. ! 131: At the end of the document, the full references are printed. ! 132: Here's the document before it is formatted: ! 133: ! 134: |begin(here) ! 135: |begin(figure) ! 136: |begin(figsmall) ! 137: |insert(example/simple.in) ! 138: |end(figsmall) ! 139: |end(figure) ! 140: |end(here) ! 141: ! 142: The command |cw<|sp(|s)reference(awk)> tells |i(prefer) ! 143: to search a bibliography database for a reference containing ! 144: the word ``awk,'' somewhere ! 145: in a database entry, e.g, in the author or title field. ! 146: |i(Prefer) will replace ! 147: the |cw<|sp(|s)reference> ! 148: command with a citation mark that corresponds ! 149: to the matching reference. ! 150: References from each |cw<|sp(|s)reference> ! 151: command are remembered by |i(prefer). ! 152: When |i(prefer) reaches the |cw<|sp(|s)reference_placement> ! 153: command, references seen so far are formatted ! 154: according to the current style. ! 155: When the above document (in a file called ! 156: |cw(document)) is run through |i(prefer) ! 157: and |i(troff): ! 158: ! 159: |figure<|small{|cw(prefer document | troff) |i(-options) |cw(...)}> ! 160: ! 161: the following output is produced: ! 162: ! 163: |p ! 164: |begin(here) ! 165: |begin(figsmall) ! 166: |source(example/simple.t) ! 167: |end(figsmall) ! 168: |end(here) ! 169: ! 170: |p ! 171: In addition to the |i{prefer} program, ! 172: several other support tools are available. ! 173: |i(Penter) ! 174: is an interactive tool for creating ! 175: or appending to bibliography databases. ! 176: |i(Pinvert) creates an index to the bibliography database for fast retrieval. ! 177: |i(Plook) retrieves entries that match search keywords ! 178: from a bibliography database. ! 179: |i(Pconvert) converts |i(refer)-style documents and databases to ! 180: |i(prefer)-style. ! 181: The remainder of this ! 182: paper describes |i(prefer) and its supporting tools ! 183: and provides ! 184: examples of their use. ! 185: ! 186: |section(Bibliographic Database) ! 187: A bibliography database is a file consisting of ! 188: one or more entries separated by newlines. ! 189: Each entry is composed of several %attribute/value pairs ! 190: providing such information as type, author, title, and date. ! 191: For example, here is an entry describing the |i(awk) book ! 192: referenced in the previous example. ! 193: ! 194: |begin(here) ! 195: |begin(figure) ! 196: |begin(figsmall) ! 197: %type book ! 198: %author Alfred V. Aho ! 199: %author Brian W. Kernighan ! 200: %author Peter J. Weinberger ! 201: %title The |small(AWK) Programming Language ! 202: %publisher Addison-Wesley ! 203: %address Reading, Massachusetts ! 204: %date 1988 ! 205: |end(figsmall) ! 206: |end(figure) ! 207: |end(here) ! 208: ! 209: Appendix |remember{types} ! 210: provides a complete list of types and ! 211: attributes. ! 212: ! 213: |subsection{Building a Bibliography} ! 214: You may create or modify a bibliography database using your ! 215: favorite text editor or by using the tool, ! 216: |i{penter}.|starnote<|i(Penter) is based on a program ! 217: written by T.J. Kowalski and H. H. Goguen.> ! 218: After invoking |i{penter} with the name of the bibliography file ! 219: as the argument (|cw[prefer.out] by default), ! 220: |i{penter} prompts for a reference type. ! 221: Typing |cw<?> to this prompt ! 222: gets you a list of legal types. ! 223: Typing |cw<help> to the same prompt will get ! 224: you a subprompt for a reference type who's attributes ! 225: will be listed. Answering |cw<?> to this subprompt ! 226: will list attributes for each type. ! 227: |p ! 228: Each reference type has some required attributes and some optional ! 229: attributes. ! 230: After you respond to the initial reference type prompt ! 231: with a legal type, |i(penter) prompts for each ! 232: attribute associated with that type. ! 233: Some attributes have ! 234: default values, shown in brackets, |cw([) |i(default) |cw(]). ! 235: Defaults may be accepted ! 236: by typing a return, skipped by typing spaces before ! 237: the return, or overridden by typing a new value. ! 238: For attributes without defaults, ! 239: typing a value followed by return ! 240: enters that value, while typing return, skips the attribute. ! 241: Required attributes may not be skipped. ! 242: The character |cw<&> appended to an attribute value ! 243: causes the prompt for the current attribute to be repeated. ! 244: This allows multiple authors or editors to be entered ! 245: or allows titles to span multiple lines, for example. ! 246: |p ! 247: When |i{penter} is finished with an entry, it ! 248: begins again, prompting for another reference type. ! 249: To terminate a |i{penter} session, type |cw<quit> and ! 250: the new entries will be written to the bibliography file. ! 251: This example shows how to enter the previous reference ! 252: using |i(penter); the result is put in the file |cw(prefer.out). ! 253: |i(Penter)'s prompts are in |i(italics). ! 254: ! 255: |begin(here) ! 256: |begin(figure) ! 257: |begin(figsmall) ! 258: |cw(penter) ! 259: |i(Reference type [article]) |cw(book) ! 260: |i(author:) |cw(Alfred V. Aho&) ! 261: |i(author:) |cw(Brian W. Kernighan&) ! 262: |i(author:) |cw(Peter J. Weinberger) ! 263: |i(title:) |cw(The AWK Programming Language) ! 264: |i(publisher:) |cw(Addison-Wesley) ! 265: |i(date: 1988) ! 266: |i(volume:) ! 267: |i(other:) ! 268: |i(also:) ! 269: |i(keywords:) ! 270: |i(location status [don't have]:) ! 271: |i(read status [haven't read]:) ! 272: |i(comments:) ! 273: |i(Reference type [article]) |cw(quit) ! 274: |end(figsmall) ! 275: |end(figure) ! 276: |end(here) ! 277: ............. ! 278: |p ! 279: If you want to modify ! 280: the current entry, respond to the current prompt with |cw<~v> ! 281: to invoke a visual editor (|cw($VISUAL) ! 282: if set, or |i(vi) if not) ! 283: or |cw<~e> to invoke ! 284: a line editor (|cw($EDITOR) if set, or |i(ed) if not). ! 285: After making some changes and ! 286: leaving the editor, you will be back in |i{penter} at the same ! 287: point where you left off. ! 288: Alternatively, you can modify the bibliography ! 289: file with a text editor after you have exited |i(penter). ! 290: ! 291: |subsubsection(Author and editor names.) ! 292: Proper names may be entered in a variety of ways; ! 293: |i(prefer) knows how to figure out first names, initials, last names, ! 294: titles, etc. ! 295: It also knows about some two part last names such as ! 296: De Paul and Van Winkle. ! 297: For example, any of the following are acceptable ways to enter ! 298: a name. ! 299: ! 300: |begin(here) ! 301: |begin(figure) ! 302: |begin(figsmall) ! 303: %author John Thomas De Paul ! 304: %author Dr. John T. De Paul, Jr. ! 305: %editor J. T. De Paul Jr. ! 306: %editor De Paul, John T., Jr ! 307: |end(figsmall) ! 308: |end(figure) ! 309: |end(here) ! 310: |p ! 311: If you use the name of an organization or ! 312: corporation as an author or editor and do ! 313: not want |i(prefer) to parse it as the name ! 314: of a person, enclose the name in the |cw(%verbatim) command. ! 315: This command is also useful in keeping ! 316: double last names together. ! 317: Here are two examples: ! 318: |begin(here) ! 319: |begin{figure} ! 320: |begin(figsmall) ! 321: %author %verbatim(|small[AT&T] Bell Laboratories) ! 322: %author John %verbatim(Smith Jones) ! 323: |end(figsmall) ! 324: |end{figure} ! 325: |end(here) ! 326: ! 327: |subsubsection(The \f(CW%also\fP attributes.) ! 328: ! 329: Another class of attributes deserves special mention. ! 330: The |cw(%also) attributes allow one bibliographic reference ! 331: to refer by keyword to another reference contained in the ! 332: same database as this example shows: ! 333: ! 334: |comment(replace this reference with something more relevant and shorter; maybe put formatted version in examples section) ! 335: |begin(here) ! 336: |begin(figure) ! 337: |begin(figsmall) ! 338: |insert(example/hirst) ! 339: |end(figsmall) ! 340: |end(figure) ! 341: |end(here) ! 342: ! 343: When a reference to the first entry is formatted, ! 344: both references will appear in a single entry. ! 345: |begin(here) ! 346: |begin(figsmall) ! 347: |source(example/hirst.t) ! 348: |end(figsmall) ! 349: |end(here) ! 350: ! 351: |p ! 352: Two other attributes, ! 353: |cw(%also_begin) and |cw(%also_end), can enclose ! 354: another |cw(%also) attribute, ! 355: surrounding it with optional text ! 356: 'ne 2v ! 357: as this example demonstrates: ! 358: |begin(here) ! 359: |begin(figure) ! 360: |begin(figsmall) ! 361: %also_begin (See also ! 362: %also Grosz Sparck Jones Webber ! 363: %also_end ) ! 364: |end(figsmall) ! 365: |end(figure) ! 366: |end(here) ! 367: Alternatively, a partial or complete reference may be included between ! 368: |cw(%also_begin) and |cw(%also_end): ! 369: ! 370: |begin(here) ! 371: |begin(figure) ! 372: |begin(figsmall) ! 373: %also_begin Reprinted in ! 374: %type editedbook ! 375: %title Programming Languages: A Grand Tour ! 376: %editor Ellis Horowitz ! 377: %date 1983 ! 378: %publisher Computer Science Press ! 379: %address Rockville, MD ! 380: %also_end ! 381: |end(figsmall) ! 382: |end(figure) ! 383: |end(here) ! 384: While |cw(%also) is supported by |i{penter}, ! 385: |cw(%also_begin) and |cw(%also_end) are not and must ! 386: be entered using a text editor. ! 387: ....... ! 388: ! 389: |subsection(Indexing a Bibliography) ! 390: ! 391: |i(Pinvert)|dagnote<Based on the |i(bib)|reference(bib) version ! 392: by T. A. Budd> ! 393: creates a search key ! 394: index to one or more bibliography database files. ! 395: Indexing the database lets you refer to any ! 396: entry using a unique combination of search keys. ! 397: To create the index, |i(pinvert) uses words of at least ! 398: three characters found the bibliography. ! 399: Some common words (those found in |cw</usr/lib/eign>) ! 400: are ignored. ! 401: In addition, values of some of the attributes ! 402: are ignored (|cw(%volume) and |cw(%pages), for example). ! 403: |i(Pinvert) converts all keys to lower case, removes ! 404: non-alphanumeric characters, and truncates ! 405: each key to six characters. ! 406: |p ! 407: |i(Pinvert) with no arguments, assumes that the bibliography ! 408: file is |cw(prefer.out) and stores the index and header information in ! 409: |cw(prefer.out.i) and |cw(prefer.out.h). ! 410: If more than one file is being indexed, ! 411: the index is named after the first file ! 412: in the list. ! 413: For example, ! 414: ! 415: |figure<|small(|cw{pinvert ourbib theirbib mybib})> ! 416: ! 417: creates an index to all three bibliography files, ! 418: storing the index and header information ! 419: in |cw(ourbib.i) and |cw(ourbib.h), respectively. ! 420: Alternatively, index and header files can also be given a ! 421: unique name using ! 422: the |cw(-p) option: ! 423: ! 424: |figure(|small<|cw{pinvert \-p index yours mine ours}>) ! 425: ! 426: stores the index and header files ! 427: for the three bibliography files in |cw(index.i) and |cw(index.h). ! 428: ! 429: |p ! 430: |i(Pinvert) provides several other options. ! 431: .ds l5 |cw(\-k) |i(maxkey)n ! 432: |begin(text_list) ! 433: |blank_space(1) ! 434: |item{"\f(CW\-c\fP \fIcfile\fP"}specifies a file ! 435: of common words, one per line, ! 436: to exclude as indexing keys ! 437: (default is |cw(/usr/lib/eign)). ! 438: |blank_space(1) ! 439: |item{"\f(CW\-i\fP \fIifile\fP"}specifies a file ! 440: of attributes, one per line, ! 441: to ignore while collecting ! 442: keys from database entries. ! 443: The default file, |cw(/usr/lib/prefer/ignore), ! 444: contains the attributes |cw(%volume), |cw(%number), ! 445: |cw(%part), |cw(%pages), |cw(%also), |cw(%X), |cw(%Y), and |cw(%Z). ! 446: |blank_space(1) ! 447: |item{"\f(CW\-k\fP \fImaxkey\fP"}specifies the maximum number ! 448: of search keys ! 449: collected per reference (default is 100 keys). ! 450: |blank_space(1) ! 451: |item{"\f(CW\-l\fP \fIkeylen\fP"}specifies the maximum length of a search ! 452: key(default is 6 characters). ! 453: |blank_space(1) ! 454: |item{"\f(CW\-v\fP"}tells |i(pinvert) to print statistics. ! 455: |end(text_list) ! 456: ! 457: |subsection<Retrieval by Keyword> ! 458: ! 459: |i(Plook) is a command that uses an index ! 460: to search a bibliography database for references ! 461: that match search keys. ! 462: As in |i(pinvert), ! 463: search keys are a sequence of non-white space characters ! 464: with non-alphanumeric characters removed. ! 465: Keys must be at least three characters and are ! 466: converted to lower-case and truncated to six characters. ! 467: Some common words are ignored (those in the file |cw</usr/lib/eign> ! 468: by default). ! 469: If the search keys appear on the command line, |i(plook) retrieves ! 470: all references that contain all the search keys ! 471: and prints the references on ! 472: the standard output. ! 473: For example, ! 474: ! 475: |figure<|small(|cw{plook awk book})> ! 476: ! 477: would output: ! 478: ! 479: |begin(here) ! 480: |begin(figure) ! 481: |begin(figsmall) ! 482: |begin(i) ! 483: %type book ! 484: %author Alfred V. Aho ! 485: %author Brian W. Kernighan ! 486: %author Peter J. Weinberger ! 487: %title The AWK Programming Language ! 488: %publisher Addison-Wesley ! 489: %address Reading, Massachusetts ! 490: %date 1988 ! 491: |end(i) ! 492: |end(figsmall) ! 493: |end(figure) ! 494: |end(here) ! 495: ! 496: If the command line contains no search keys, ! 497: then |i(plook) reads a line of standard input for search keys. ! 498: After returning the matching reference(s) it waits for ! 499: the next line of keys, terminating when it receives ! 500: an end-of-file character, <|b(control-d)>. ! 501: Here's an example of this mode of use: ! 502: ! 503: |begin(here) ! 504: |begin(figure) ! 505: |begin(figsmall) ! 506: |cw(plook) ! 507: |cw(lesk indexes) ! 508: |begin(i) ! 509: %type incollection ! 510: %author M. E. Lesk ! 511: %title Some Applications of Inverted Indexes ! 512: on the UNIX System ! 513: %booktitle UNIX Programmer's Manual, ! 514: Seventh Edition ! 515: %publisher Bell Laboratories ! 516: %address Murray Hill, NJ ! 517: %date January, 1979 ! 518: %volume 2A ! 519: |end(i) ! 520: ! 521: |cw(lesk tables) ! 522: |begin(i) ! 523: %type incollection ! 524: %author M. E. Lesk ! 525: %title TBL \- A program to format tables ! 526: %booktitle UNIX Text Editing & Phototypesetting ! 527: Starter Package ! 528: %editor Claudine Tartanella ! 529: %publisher Computing Information Services, ! 530: Bell Laboratories ! 531: %address Murray Hill, NJ ! 532: %date 1980 ! 533: |end(i) ! 534: ! 535: |cw(<control-d>) ! 536: |end(figsmall) ! 537: |end(figure) ! 538: |end(here) ! 539: ! 540: |p ! 541: |i(Plook) ! 542: recognizes the options |cw<-c>, |cw<-l>, and |cw<-p> ! 543: with the same meanings as |i(pinvert). ! 544: If the index file is out of date or does not exist, ! 545: |i(plook) will try to create it by invoking |i(pinvert). ! 546: ! 547: |section(Formatting References In Documents) ! 548: ! 549: This section explores in detail the |i(prefer) program ! 550: for formatting documents with bibliographic references. ! 551: |i(Prefer) scans a text file looking for one ! 552: of the following commands to process: ! 553: ! 554: |begin(here) ! 555: |begin(figure) ! 556: |cw<|sp(|s)reference( |i[keywords... attributes... flags...] )> ! 557: |cw<|sp(|s)reference_placement> ! 558: |cw<|sp(|s)reference_include( |i[dbfile...] )> ! 559: |cw<|sp(|s)reference_database( |i[dbfile] )> ! 560: |cw<|sp(|s)reference_list( |i[dbfile...] )> ! 561: |cw<|sp(|s)reference_style( |i(style [arg...] ))> ! 562: |end(figure) ! 563: |end(here) ! 564: ! 565: Each will be described in turn. ! 566: The parentheses enclosing the command arguments ! 567: may be replaced by the |cw({}), |cw([]), or |cw(<>). ! 568: |i(Prefer) also accepts several command line options ! 569: that are explained at the end of this section. ! 570: ! 571: |subsection(Citations) ! 572: ! 573: The |cw<|sp(|s)reference> ! 574: command is for citing reference within a text. ! 575: As you saw in the introduction and in the ! 576: following example, you can cite a reference using ! 577: keywords which |i(prefer) will use ! 578: to search a bibliography database for a matching entry. ! 579: ! 580: |figure<|small[|cw{... sort methods|reference(Knuth Art 1973) ...}]> ! 581: ! 582: Keywords should be chosen so as to uniquely identify ! 583: a particular reference. ! 584: You can use words from any attribute ! 585: not ignored by |i(pinvert), including ! 586: |cw(%author), |cw(%title), |cw(%keyword) and |cw(%date). ! 587: If multiple references match the keys, ! 588: |i(prefer) will print a warning, ! 589: but use only the first match. ! 590: Similarly, if no references match, a warning message is printed. ! 591: If two or more references in the database share all possible search keys, ! 592: you can add extra words to the |cw(%keyword) attribute of each ! 593: entry in the database to ! 594: distinguish among them. ! 595: ! 596: |p ! 597: In addition to keyword search, you can cite ! 598: a reference by including ! 599: the entire reference in the command as shown ! 600: below. ! 601: Note that subsequent references to this reference ! 602: will have to respecify all the attributes. ! 603: |begin(here) ! 604: |begin(figure) ! 605: |begin(figsmall) ! 606: |sp(|s)reference( ! 607: %type book ! 608: %author Donald E. Knuth ! 609: %title The Art of Computer Programming ! 610: %volume Volume 3/Sorting and Searching ! 611: %publisher Addison-Wesley ! 612: %keywords sorting searching ! 613: %address Reading, MA ! 614: %date 1973 ! 615: ) ! 616: |end(figsmall) ! 617: |end(figure) ! 618: |end(here) ! 619: |p ! 620: A third way is to use keywords to select a database reference, ! 621: followed by attributes ! 622: that supplement or override attributes ! 623: in the database reference. ! 624: For example, a keyword selected reference could ! 625: be supplemented with a |cw(%also) entry as shown below. ! 626: |begin(here) ! 627: |begin(figure) ! 628: |begin(figsmall) ! 629: |sp(|s)reference( ! 630: McKeown phdthesis ! 631: %also_begin Also in ! 632: %type techreport ! 633: %publisher University of Pennsylvania ! 634: %date 1982 ! 635: %report Technical Report MS-CIS-82-5 ! 636: %also_end ! 637: ) ! 638: |end(figsmall) ! 639: |end(figure) ! 640: |end(here) ! 641: In all cases, |i(prefer) ! 642: replaces the citation command with ! 643: a citation mark that corresponds ! 644: to the full reference as it appears in the list ! 645: formatted by the |cw<|sp(|s)reference_placement> ! 646: command. ! 647: The |cw(att), |cw(ieee), and |cw(spectrum) styles ! 648: use superscripted numbers for citation marks; ! 649: |cw(acm) and |cw(pami) styles use numbers in square brackets; ! 650: |cw(apa) and |cw(lsa) styles use (author, year). ! 651: ! 652: |p ! 653: Following keywords and attributes, you can supply ! 654: flags that ! 655: modify the citation mark. ! 656: The citation flags, |cw(%no_author) and |cw(%no_date), ! 657: relevant to |cw(att) and |cw(lsa) styles, ! 658: cause the author field and date field, respectively, to be excluded ! 659: from the citation mark. ! 660: The |cw(%no_cite) flag, relevant to all styles, causes the entire citation to be ! 661: omitted, but the full reference is still printed in the list of ! 662: references. ! 663: Some styles ! 664: let you annotate a citation with text ! 665: using |cw(%pre_text) and |cw(%post_text). ! 666: Annotations could include introductory phrases ! 667: and page numbers, for example. ! 668: If multiple citation flags are used (e.g, both |cw(%no_author) ! 669: and |cw(%post_text)), ! 670: each must appear on it's own line. ! 671: Formatting the following document fragment in |cw(apa) style ! 672: |begin(here) ! 673: |begin(figure) ! 674: |begin(figsmall) ! 675: |insert(example/lamport.in) ! 676: |end(figsmall) ! 677: |end(figure) ! 678: |end(here) ! 679: produces this output: ! 680: |begin(here) ! 681: |begin(figure) ! 682: |begin(figsmall) ! 683: |source(example/lamport.t) ! 684: |end(figsmall) ! 685: |end(figure) ! 686: |end(here) ! 687: ! 688: More uses of |cw<|sp(|s)reference> are found in ! 689: Appendix |remember(examples). ! 690: ! 691: |subsection(Reference Placement) ! 692: ! 693: ! 694: The |cw<|sp(|s)reference_placement> command causes all ! 695: references seen since the beginning of the document, ! 696: the last |cw<|sp(|s)reference_placement>, ! 697: or the last |cw<|sp(|s)reference_style> command, ! 698: to be formatted and inserted in the document at that point. ! 699: The order of references depends on the current style. ! 700: References in |cw(att), |cw(ieee), and |cw(spectrum) styles ! 701: appear in the order first cited in the preceding text. ! 702: References in |cw(acm), |cw(apa), |cw(lsa), and |cw(pami) are sorted by ! 703: author, date, and title. ! 704: All except |cw(apa) and |cw(lsa) ! 705: have labels that match the citation ! 706: marks appearing in the text. ! 707: |p ! 708: See Appendix |remember(examples) for uses ! 709: and results of |cw<|sp(|s)reference_placement>. ! 710: ! 711: ! 712: |subsection(Including Additional References) ! 713: Sometimes you may want the reference list ! 714: to include more references than you actually ! 715: cite in the text. ! 716: The |cw<|sp(|s)reference_include( |i[dbfile...] )> command ! 717: includes the contents of one or more database files ! 718: in the list of references produced by ! 719: |cw<|sp(|s)reference_placement>, treating ! 720: them as |cw(%no_cite) entries. ! 721: For example, the |cw<|sp(|s)reference_placement> ! 722: command here: ! 723: ! 724: |begin(here) ! 725: |begin(figure) ! 726: |begin(figsmall) ! 727: |i(text with citations) ! 728: ... ! 729: |sp(|s)reference_include(morebibs) ! 730: |sp(|s)reference_placement ! 731: |end(figsmall) ! 732: |end(figure) ! 733: |end(here) ! 734: ! 735: will include in its list ! 736: of references all the entries in the file |cw(morebibs) ! 737: as well as ! 738: any citations found in the text. ! 739: ! 740: |subsection(Switching Databases) ! 741: ! 742: The command to search a new bibliography database is ! 743: |cw<|sp(|s)reference_database( |i[dbfile] )>. ! 744: |i(Prefer) then closes the current ! 745: database file, and opens the new one, |i(dbfile). ! 746: But it still remembers citations from the previous ! 747: database. ! 748: For example, in ! 749: ! 750: |begin(here) ! 751: |begin(figure) ! 752: |begin(figsmall) ! 753: |sp(|s)reference_database(mybib1) ! 754: |i(text with citations) ! 755: ... ! 756: |sp(|s)reference_database(mybib2) ! 757: |i(text with more citations) ! 758: ... ! 759: |sp(|s)reference_placement ! 760: |end(figsmall) ! 761: |end(figure) ! 762: |end(here) ! 763: ! 764: the first database, |cw(mybib1), ! 765: is consulted for the first part of the text, ! 766: while the database |cw(mybib2) is consulted ! 767: for the second part. ! 768: The |cw<|sp(|s)reference_placement> command ! 769: will list citations from both databases. ! 770: |p ! 771: All databases should be indexed using |i(pinvert). ! 772: However, if a database has not been indexed since its last update, ! 773: |i(prefer) will automatically ! 774: invoke |i(pinvert) before using the database. ! 775: ! 776: |subsection(Complete Bibliographies) ! 777: ! 778: Beside formatting references appearing in documents, ! 779: |i(prefer) also formats entire bibliography databases. ! 780: The command |cw<|sp(|s)reference_list( |i[dbfile...] )>, ! 781: behaves like |cw<|sp(|s)reference_placement> ! 782: except that instead of formatting citations appearing ! 783: in the previous text, it formats ! 784: all the references appearing in one or more bibliography ! 785: databases. ! 786: For example, ! 787: ! 788: |figure<|small[|sp(|s)reference_list(mybib88 mybib89)]> ! 789: ! 790: produces a list of all references in the file |cw(mybib88) ! 791: followed by all references in |cw(mybib89). ! 792: |p ! 793: Like |cw<|sp(|s)reference_database>, ! 794: this command changes the search database. ! 795: The current style dictates how each entry will be formatted. ! 796: By default, the entries will be printed ! 797: in the order they appear in the database(s). ! 798: Changing this order requires ! 799: setting some style arguments or ! 800: supplying some command line options. ! 801: Both ways are described below. ! 802: ! 803: ! 804: |subsection(Styles Options) ! 805: |save(stylesec) ! 806: The |cw<|sp(|s)reference_style( |i(style [arg...] ))> command provides one way ! 807: to change options regarding formatting style. ! 808: The first argument to this command selects ! 809: the style script. ! 810: It gives the name of one of ! 811: the styles provided by prefer ! 812: (|cw(att), |cw(acm), |cw(apa), |cw(ieee), |cw(spectrum), |cw(lsa) ! 813: or |cw(pami)), or the pathname of ! 814: a user-defined style script. ! 815: Note that any file in the current directory with the same ! 816: name as one of the |i(prefer) styles (e.g. |cw(acm)), ! 817: will override the |i(prefer) style. ! 818: The easiest way to define a new style is ! 819: to modify an existing |i{awk} style script that is similar ! 820: to the desired style. ! 821: Describing how to write a style script in further detail is ! 822: beyond the scope of this paper. ! 823: |p ! 824: Your document may use multiple formatting styles ! 825: by resetting the style using |cw<|sp(|s)reference_style>. ! 826: If you switch styles before issuing a |cw<|sp(|s)reference_placement> ! 827: command, the citations appearing before the style command ! 828: will be forgotten and thus, ! 829: will not be listed by any subsequent |cw<|sp(|s)reference_placement>. ! 830: |p ! 831: Some of the optional arguments to the style command control ! 832: how references ! 833: are formatted by the |cw<|sp(|s)reference_list> command. ! 834: |begin(here) ! 835: |begin(table) ! 836: center; ! 837: l l. ! 838: |cw(sequence) list in database order ! 839: |cw(sort) list according to current style ! 840: |cw(a) sort by author ! 841: |cw(d) sort by date ! 842: |cw(t) sort by title ! 843: |end(table) ! 844: |end(here) ! 845: The last three options may be used in combination. ! 846: If optional arguments are given, but the ! 847: style is to remain the same, the first ! 848: argument may be set to |cw(same). ! 849: |p ! 850: The style command recognizes several other ! 851: arguments that affect the formatting of references. ! 852: These are: ! 853: |begin(here) ! 854: |begin(table) ! 855: center; ! 856: l l. ! 857: |cw(tm) format as a technical memorandum ! 858: |cw(rp) format as a released paper ! 859: |cw(troff) format for |i(troff) ! 860: |cw(nroff) format for |i(nroff) ! 861: |end(table) ! 862: |end(here) ! 863: The defaults are for a paper to be formatted ! 864: as a technical memorandum using |i(troff) ! 865: Here are some examples of using the style command: ! 866: |begin(here) ! 867: |begin(figure) ! 868: |begin(figsmall) ! 869: |begin(cw) ! 870: |sp(|s)reference_style(/usr/mad/mystyle ad) ! 871: |sp(|s)reference_list(bib) ! 872: |sp(|s)reference_style(acm sort rp) ! 873: |sp(|s)reference_list(bib) ! 874: |sp(|s)reference_style(same sequence nroff) ! 875: |sp(|s)reference_list(bib) ! 876: |end(cw) ! 877: |end(figsmall) ! 878: |end(figure) ! 879: |end(here) ! 880: ! 881: The first command selects the user-defined style ! 882: in |cw(/usr/mad/mystyle) and says to sort according ! 883: to author, then date. ! 884: The bibliography file |cw(bib) is formatted accordingly. ! 885: The third command selects the |cw(acm) style, ! 886: and says to sort |cw(bib) according to that style. ! 887: It also say says to format it as a released paper. ! 888: The fifth command says to use the same style (|cw[acm]), ! 889: but this time print the references as they ! 890: appear in |cw(bib) and ! 891: format the paper using |i(nroff). ! 892: ! 893: ! 894: |subsection(Command Line arguments) ! 895: ! 896: Command line arguments provide another way ! 897: to select bibliography databases and set style options. ! 898: ! 899: .ds l5 |cw(\-s) |i(sname)n ! 900: |begin(text_list) ! 901: |blank_space(1) ! 902: |item{"\f(CW\-p\fP \fIdbfile\fP"}specifies a bibliography ! 903: database, |i(dbfile) (default is |cw(prefer.out)) ! 904: |blank_space(1) ! 905: |item{"\f(CW\-s\fP \fIsname\fP"}selects formatting style |i(sname) ! 906: (default is |cw(att)). The argument |i(sname) ! 907: names of one of the provided styles or ! 908: a user-defined style. ! 909: |blank_space(1) ! 910: |item{"\f(CW\-o\fP \fIokey\fP"}specifies how ! 911: the |cw<|sp(|s)reference_list> ! 912: command should order references. ! 913: The argument |i(okey) may be one of ! 914: |cw(sequence) (the default), |cw(sort), or a combination of ! 915: |cw(a), |cw(d), or |cw(t), as described above in Section ! 916: |remember(stylesec). ! 917: |blank_space(1) ! 918: |item{"\f(CW\-n\fP"}format using |i(nroff) rather than for |i(troff), ! 919: the default. ! 920: |blank_space(1) ! 921: |item{"\f(CW\-r\fP"}format as ! 922: a released paper, rather than an ! 923: internal technical memorandum, the default. ! 924: |end(text_list) ! 925: |blank_space(1) ! 926: |p ! 927: For example, the command ! 928: ! 929: |figure<|small[|cw{prefer -r -sacm -pmybib mydoc}]> ! 930: ! 931: processes |cw(mydoc) as a released paper, using |cw(acm) style ! 932: and the bibliography database |cw(mybib). ! 933: ! 934: |blank_space(1) ! 935: |section(Using |i<prefer> |b(With) |i<monk>) ! 936: ! 937: As mentioned earlier, the |i(monk) text formatting package ! 938: invokes |i(prefer) to format bibliographic references. ! 939: To do this, it must convert its own reference commands to ones ! 940: understood by |i(prefer). ! 941: For the ! 942: |cw<|sp(|s)reference>, ! 943: |cw<|sp(|s)reference_list>, ! 944: and |cw<|sp(|s)reference_database> ! 945: commands, this is easy; ! 946: |i(monk's) versions are identical to |i(prefer's). ! 947: Note that |i(monk) uses angle brackets |cw(<>) ! 948: to enclose the |i(prefer) ! 949: command arguments. ! 950: Thus if angle brackets appear in any of the command ! 951: arguments, confusion may arise. ! 952: ! 953: |p ! 954: The |cw<|sp(|s)reference_placement> command in |i(monk) ! 955: differs slightly from the |i(prefer) version, depending on ! 956: the |i(monk) document style. ! 957: For example, for technical memoranda ! 958: it causes a new page ! 959: to be printed and ! 960: the reference list to be headed by ! 961: a centered |small(|cw<REFERENCE>) title. ! 962: ! 963: |p ! 964: |i(Monk) does not have a ! 965: |cw<|sp(|s)reference_style> command. ! 966: Instead, it uses it's own |cw<|sp(|s)style> command ! 967: along with a |cw(reference) attribute/value pair. ! 968: For example, to change the reference style to |cw(ieee), use the ! 969: monk command ! 970: ! 971: |figure<|small[|sp(|s)style(reference ieee)]> ! 972: ! 973: To set any of the other options provided by the |i(prefer) ! 974: |cw<|sp(|s)reference_style> command, ! 975: use the |i(monk) |cw<|sp(|s)style> command ! 976: with a |cw(reference_option) attribute/value pair. ! 977: For example, ! 978: ! 979: |figure<|small[|sp(|s)style(reference_option rp)]> ! 980: ! 981: means format references for a released paper. ! 982: Other possible values for |cw(reference_option) are: ! 983: |cw(tm), |cw(troff), |cw(nroff), |cw(sort), |cw(sequence), and any ! 984: combination of the letters |cw(a), |cw(d), |cw(t). ! 985: These options have the same meanings as for ! 986: the |cw<|sp(|s)reference_style> command. ! 987: The command line options |cw<\-s>, |cw<\-o>, |cw<\-r>, and |cw<\-n> ! 988: of |i(prefer) are not set by |i(monk). ! 989: |i(Monk) uses the style command to set these options. ! 990: ! 991: |p ! 992: |i(Monk) uses the file |cw</usr/lib/monk/prefs> as its default bibliography ! 993: database. ! 994: You can specify an alternative database ! 995: with the |cw(\-R) option, which |i(monk) translates to the |cw<\-p> ! 996: option for |i(prefer). ! 997: For example, ! 998: ! 999: |figure<|small(|cw{monk \-Rmybib mydoc})> ! 1000: ! 1001: says that monk should use the file |cw(mybib) ! 1002: as the bibliography database when formatting |i(mydoc). ! 1003: ! 1004: |section(Converting From |i<refer> |b(To) |i<prefer> ) ! 1005: ! 1006: The |i(pconvert) command converts a |i(refer) style bibliography ! 1007: database ! 1008: to |i(prefer) format. ! 1009: For example, the command ! 1010: ! 1011: |figure<|small(|cw{pconvert refer.out > prefer.out})> ! 1012: ! 1013: scans the file |cw(refer.out) and writes the transformed version ! 1014: into |cw(prefer.out). ! 1015: |i(Pconvert) uses the attributes of each ! 1016: entry to infer the |cw(%type) of the entry. ! 1017: ! 1018: |p ! 1019: With the |cw(\-d) option |i(pconvert) ! 1020: changes |i(refer) style commands in a document ! 1021: to |i(prefer) style. ! 1022: For example ! 1023: ! 1024: |figure<|small(|cw{pconvert \-d oldpaper > newpaper})> ! 1025: ! 1026: scans |cw(oldpaper) for |i(refer) citations ! 1027: and converts them to |i(prefer) commands, ! 1028: writing the output to |cw(newpaper). ! 1029: ! 1030: ! 1031: |section(Acknowledgements) ! 1032: ! 1033: Sharon Murrel and Ted Kowalski ! 1034: encouraged me to write |i(prefer) and then integrated ! 1035: it into |i(monk). ! 1036: The idea of using the |i(awk) language to format references ! 1037: came from Ravi Sethi. ! 1038: Julia Hirschberg, Joe Kruskal, and Ted Kowalski ! 1039: contributed style scripts. ! 1040: Thanks to those who offered feature suggestions ! 1041: bug reports, and ! 1042: comments on versions of ! 1043: this paper ! 1044: including ! 1045: Judy Friedman, ! 1046: Julia Hirschberg, ! 1047: Andrew Hume, ! 1048: Ted Kowalski, ! 1049: Joe Kruskal, ! 1050: Doug McIlroy, ! 1051: Mel Melchner, ! 1052: Marcel Meth, ! 1053: Sharon Murrel, ! 1054: John Puttress, ! 1055: Sande Pruzansky, ! 1056: Ravi Sethi, ! 1057: and ! 1058: Wayne Wolf. ! 1059: ! 1060: |reference_placement ! 1061: ! 1062: |comment<|new_page> ! 1063: .ne 3i ! 1064: |appendix(Bibliography Types And Attributes) ! 1065: |save(types) ! 1066: ! 1067: |insert(example/ptemplate.m) ! 1068: ! 1069: .ne 3i ! 1070: |appendix(Examples) ! 1071: |save(examples) ! 1072: ! 1073: This sample document contains many examples of ! 1074: |cw<|sp(|s)reference> commands followed by ! 1075: a |cw<|sp(|s)reference_placement>. ! 1076: ! 1077: |begin(here) ! 1078: |begin(figure) ! 1079: |begin(figsmall) ! 1080: |insert(example/type.in) ! 1081: |end(figsmall) ! 1082: |end(figure) ! 1083: |end(here) ! 1084: ! 1085: |p ! 1086: When |i(prefer) formats this document according to |cw(acm) style ! 1087: it looks like this: ! 1088: ! 1089: |p ! 1090: |begin(figsmall) ! 1091: |source(example/type.acm) ! 1092: |end(figsmall) ! 1093: ! 1094: |p ! 1095: When formatted according to |cw(apa) style ! 1096: it looks like this: ! 1097: |p ! 1098: |begin(figsmall) ! 1099: |source(example/type.apa) ! 1100: |end(figsmall)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.