SCRIBE INTRODUCTORY USER'S MANUAL FIRST EDITION (DOC FILE VERSION) Brian K. Reid 7 August 1978 CARNEGIE-MELLON UNIVERSITY COMPUTER SCIENCE DEPARTMENT This manual corresponds to SCRIBE version CMU 0E(110)-5. Copyright -C- 1978 Brian K. Reid The research that produced SCRIBE was funded in part by the Rome Air Development Center under Contract No. F306-2-75-C-0218, in part by Army Research Contract No. DAAG29-77-C-0034, and in part by the Defense Advanced Research Projects Agency under contract No. F44620-73-C-0074. PAGE 1 Preface This manual is a beginner's manual for the SCRIBE document production system developed in the Computer Science Department at Carnegie-Mellon University. The reader is expected to have used (however briefly) a timesharing computer, to know how to use a text editor, and to understand the notion of a timesharing "file system". No particular computer expertise or knowledge of programming is needed. If you feel that you don't have that background, see the CMU Computer Science Department's Computer Primer. On the other hand, if you have a lot of programming experience and would like to know more, there is a SCRIBE Experts' Manual available, as a companion to this one. SCRIBE is still under development. This first edition of the Introductory User's Manual was written for internal use in the Computer Science Department, and the particular set of formatting commands that we have devised and documented are designed around the sorts of documents that computer scientists produce. Users in non-academic or non-mathematical environments will have very little use for the "Theorem" or "Equation" features, but may find something else desirable. In time there will be separate editions of the manual. This manual was produced with SCRIBE and printed on the Computer Science Department's Xerox Graphics Printer. If you find anything wrong with it, please let me know. My ARPANET mail address is "Reid@CMU-10A"; my regular snailmail address is "Department of Computer Science, Carnegie-Mellon University, Pittsburgh PA 15213". PAGE 2 SCRIBE USERS' MANUAL 1. Introduction SCRIBE is a document production program. It produces "documents", designed to be read by people, from "manuscript files", which are primarily to be read by the computer. The manuscript files that SCRIBE processes are created by people by using a text editor; the document files that SCRIBE produces are printed on printing devices to produce paper copy. SCRIBE is a big program. It has many exotic capabilities, most of which you will probably never need. But as the people who sell cars with big engines are fond of saying, it's nice to have the power there in case you need to use it. Unlike many big programs, SCRIBE looks simple. You don't need very many commands, and the ones that you do need are not complicated. If you have used computer text editors before, you should be able to learn enough about SCRIBE in an hour to be able to produce your first document. As you learn more about document production and find that you want more "features" or more power, just read farther in the manual and you will probably find what you are looking for. The SCRIBE Experts' Manual, a companion volume to this one, describes how to do complicated things. We have made it a separate manual to emphasize the fact that SCRIBE is quite useful to people who aren't experts, and also to save printing costs, since not everybody needs to be an expert. 1.1 Some Explanation for Non-Programmers The preparation of a document requires, in addition to the actual text, an understanding of how the text is to be formatted. When a secretary types a document, he applies his knowledge of typing and formats and his understanding of what the words and sentences mean, and chooses a reasonable format for various pieces of the text. When a typographer typesets a document for publication, he needs editor's marks, in colored pencil, to show him what to do. Computers are at a double disadvantage in the production of documents. They are not clever, like secretaries, nor can they read penciled proofreader's marks, like typographers. Computers can recognize the 95 characters on their keyboard, but not penciled notes. Somehow, using only those 95 characters, we must devise a means of communicating to the computer all of the various kinds of information that secretaries can figure out for themselves and typographers get from the pencil marks. SCRIBE has such a scheme, using special sequences of characters to represent formatting commands, and if it sometimes seems to you as though a certain construct is too baroque or too mathematical, please understand why it is that way. INTRODUCTION PAGE 3 1.2 Some Explanation for Programmers The SCRIBE system was designed to make document production easy for the non-expert, and to allow him to make small changes to the formats and styles without needing to learn much about how the program works. SCRIBE is not a programming language. SCRIBE does not have `commands' in the usual sense of the word: its commands are not procedural. A SCRIBE command specifies the result that is desired rather than the method to achieve it. For example, to enter a quotation in running text, it is customary to switch to single spacing, indent the left and right margins, and then change back again to normal margins and spacing. In SCRIBE, this would be achieved by placing a "@begin(quotation)" command at the front of the quotation's text, and an "@End(quotation)" after its text. The details of the knowledge of how to print a QUOTATION are encoded in SCRIBE's internal tables. The non-procedural nature of SCRIBE typically gives fits to people who have grown accustomed to procedural document formatters. Programmers are used to thinking in terms of procedural commands, and are used to having the full power of the document formatter available at the command level. Many expert programmers, upon first seeing SCRIBE, seem to think that it is weak and powerless and unflexible, when what they really mean is that it doesn't conform to their notion of what a procedural command language should do. SCRIBE has been in use at Carnegie-Mellon since January 1978. We have found that even hard-core hackers can learn how to use SCRIBE effectively, but that they must learn to think differently before they will ever be comfortable with it. People who aren't experts at older document systems have had no difficulty learning to use SCRIBE. PAGE 4 SCRIBE USERS' MANUAL 2. Getting Started This chapter is for new users, who have never used SCRIBE before and who would like to learn how to use it for simple things. 2.1 Preparing Input for Scribe A manuscript file prepared for input to SCRIBE consists primarily of plain text. Paragraphs are separated by blank lines, and commands, if present, are flagged with an "@" sign. If you want an "@" sign to appear in your output, you must type two of them: "@@". The various commands are described in this and following chapters. A file containing no commands at all will work just fine; it will yield simple justified paragraphed text. On the PDP-10, a manuscript file should be given the extension ".MSS"; our example that we discuss here will be called TRIAL.MSS. 2.2 Running Scribe Suppose that we have built a manuscript file named TRIAL.MSS, with the 1 following contents: 00100 So when he came to the churchyard Sir Arthur alighted and tied his 00200 horse to the stile. And so he went to the tent and found no knights 00300 there for they were at jousting. And so he handled the sword by the 00400 handles and lightly and fiercely pulled it out of the stone, and took 00500 his horse and rode his way until he came to his brother, Sir Kay, and 00600 delivered him the sword. 00700 00800 And as soon as Sir Kay saw the sword he wist well it was the sword 00900 from the stone, and so he rode to his father, Sir Ector, and said, 01000 `Sir, lo! here is the sword of the stone, wherefore I must be King of 01100 this land.' The blank line (700) indicates the end of one paragraph and the beginning of another. To process this file, we run SCRIBE; it will prompt us for input by typing an asterisk: --------------- 1 From Le Morte Darthur, by Sir Thomas Malory. GETTING STARTED PAGE 5 R SCRIBE * In response to the prompt, type the file name of the manuscript file that is to be processed. R SCRIBE *TRIAL.MSS SCRIBE will then process the file. It will produce as output a file called TRIAL.LPT. This TRIAL.LPT file that it produces, when typed on the terminal, will look something like this: So when he came to the churchyard Sir Arthur alighted and tied his horse to the stile. And so he went to the tent and found no knights there for they were at jousting. And so he handled the sword by the handles and lightly and fiercely pulled it out of the stone, and took his horse and rode his way until he came to his brother, Sir Kay, and delivered him the sword. And as soon as Sir Kay saw the sword he wist well it was the sword from the stone, and so he rode to his father, Sir Ector, and said, `Sir, lo! here is the sword of the stone, wherefore I must be King of this land.' 1 The reader is invited to copy the file TRIAL.MSS[A800DP99] and go through this exercise. 2.3 Printing Devices When SCRIBE processes a manuscript file into a document file, it does so with a particular printing device in mind. The device characteristics determine the number of characters that SCRIBE tries to put on a line, the number of lines that it tries to put on a page, the methods used to accomplish underlining and backspacing, and so on. If you don't tell SCRIBE anything one way or another about printing devices, it will assume that you are preparing a file for the line printer. If you aren't, you must put a @DEVICE command at the beginning of your manuscript file, telling SCRIBE what device you are using. The format is "@DEVICE(what --------------- 1 Only at CMU Computer Science Department sites. PAGE 6 SCRIBE USERS' MANUAL 2 kind)" ; some examples follow: @DEVICE(LPT) Prepare for a line printer @Device(XGP) Prepare document for Xerox Graphics Printer @DEVICE(DIABLO) Prepare for Diablo HyType terminal @device(FILE) Prepare as a computer file To return to our example of the previous section, let's change it to produce output for the XGP. The updated manuscript file TRIAL.MSS would now look like this: 00050 @device(XGP) 00100 So when he came to the churchyard Sir Arthur alighted and tied his 00200 horse to the stile. And so he went to the tent and found no knights 00300 there for they were at jousting. And so he handled the sword by the 00400 handles and lightly and fiercely pulled it out of the stone, and took 00500 his horse and rode his way until he came to his brother, Sir Key, and 00600 delivered him the sword. 00700 00800 And as soon as Sir Kay saw the sword he wist well it was the sword 00900 from the stone, and so he rode to his father, Sir Ector, and said, 01000 `Sir, lo! here is the sword of the stone, wherefore I must be King of 01100 this land.' If this file were now run through SCRIBE, it would produce an output file named TRIAL.XGO suitable for printing on the XGP, instead of the TRIAL.LPT that it produced before. A table of the DEVICE codes known to SCRIBE is shown in figure 2-1. We expect to be able to add a device type for a photocomposing machine as soon as one becomes available to us. --------------- 2 Upper and lower case may be used interchangeably in any SCRIBE command; varying case will be used throughout this manual to emphasize that. PREPARING A MANUSCRIPT PAGE 7 Page Page Code Length Width Description @z[?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2?2 LPT 53 lines 132 cols Line printer (standard) XGP 11 inches 8.5 inches Xerox Graphics Printer DIABLO 11 inches 8.5 inches Diablo HyType printer LA36 66 lines 132 cols LA36 DECwriter TI700 50 lines 80 cols Texas Instruments 700 SOS 50 lines 69 cols SOS file FILE 50 lines 79 cols Standard DOC file CRT 24 lines 79 cols Pages match CRT screen size Figure 2-1: Device Types Known To SCRIBE PAGE 8 SCRIBE USERS' MANUAL 3. Preparing a Manuscript You now know how to build a manuscript file that contains plain text, and then run it through SCRIBE to produce a document. In this section we will tell you how to fancy it up with italics, underlining, subscripts, superscripts, and so forth. Let's start with an example, then get to a more general explanation. To get 1 italics, surround the letters that you want italicized with @i[...], like this: The inscription read, "@i[De minimus non curat lex]." which will produce output that looks like this: The inscription read, "De minimus non curat lex." Before going on with more explanations, we need to talk some nuts and bolts. 3.1 Delimiters The square brackets [] used in the example above are called delimiters. They delimit the characters being italicized. Computer keyboards contain several pairs of matching left and right delimiters, and any of them may equally well be used. For example, you could have put @i(De minimus..) or @i<De minimus..>. It doesn't really matter which kind of delimiter you use as long as the closing delimiter matches the opening delimiter. If you tried @i<De minimus...], SCRIBE will just keep italicizing until it comes to a ">" character or the end of the paragraph. The delimiter pairs that you may use are (...), [...], {...}, <...>, '...', `...', and "...". Suppose that you wanted boldface and underlining of the same text. To get boldface, you use @b[...] around the text to be boldfaced. To get underlining, we put @u[...] around the text to be underlined. Why would anybody want @b[@u[boldfaced underlining]]? This is called nesting of the delimiters. The output that it will produce will --------------- 1 If this document was printed on a device not capable of italicizing letters, then you will see underlining or overstriking where we intend italics. PREPARING A MANUSCRIPT PAGE 9 look like this: Why would anybody want boldfaced underlining? The concept of nesting should be familiar to everyone in the notion of quotations inside quotations; the inner quotation is delimited with single quotes and the outer quotation is delimited with double quotes, like this: Macomber said, "But the sign said `No Hunting.'" SCRIBE is clever enough to let you nest like delimiters without getting itself confused, but you can use different delimiters if you want: Why would anybody want @b<@u[boldfaced underlining]>? If you want to include an un-nested delimiter character inside a pair of delimiters, you have to be careful. Suppose, for example, that you wanted to put an underlined ")" character in your text. If you used parentheses as delimiters, and put @u()), SCRIBE would treat that as "@u()" followed by ")", and would not do what you wanted. This might seem like a useless warning, but the situation comes up in mathematical formatting. Equations and formulas are frequently printed with italicized variable names, and frequently contain parentheses. To get the sequence "2*(4+y)-b" correctly italicized, we must be careful not to use parentheses as delimiters: @i[2*(4+y)-b] will work, but @i(2*(4+y)-b) will not do what you want: it will print as "2*(4+y-b)", which is wrong. 3.2 Printing Device Considerations Not every feature provided by SCRIBE can be realized on every output device. The line printer, for example, cannot print italics or even underline, but it can generate boldface by overstriking. The XGP at CMU can italicize and underline and boldface, but cannot do italics and boldface on the same line. In fact, our XGP is restricted to no more than two fonts in any pair of lines. Some of the features in SCRIBE cannot be achieved on any of the printing devices currently available to it, but were installed in anticipation of a photocomposing machine or better Xerographic printers. For example, the overbar code @o[] and the script code @s[] cannot be printed on even the XGP without special tinkering that is beyond the scope of this manual. 3.3 Italics, Underlining, Etcetera SCRIBE recognizes all of the font-change codes listed in figure 3-1. Whether it will actually produce the requested font change depends on the nature of the final printing device being used. If SCRIBE cannot produce a particular code PAGE 10 SCRIBE USERS' MANUAL on a particular printing device, it will attempt a compromise. In general, if a final printing device cannot print a particular effect, SCRIBE will generate underlining or overstriking instead. @i[phrase] Italics @u[phrase] Underline non-blank characters @ux[phrase] Underline all characters @un[phrase] Underline alpha-numerics (but not punctuation or spaces) @b[phrase] Boldface @r[phrase] Roman (the normal typeface) @t[phrase] Typewriter font super @+[phrase] print script @c[phrase] SMALL CAPITALS @-[phrase] print script sub @g[phrase] Greek (@g[Ellen]) @o[phrase] Overbar @p[phrase] Bold Italics Figure 3-1: Font-change Codes 3.4 Inserts You now know how to produce paragraphed text with various fancy effects like italics and underlining. In this section, we will show you how to insert various things into the middle of running text. Anything put into running text is called an insert. Inserts can be quotations, examples, equations, tables, or what have you. The text will resume in the same paragraph after the insert. 3.4.1 Specifying an Insert There are two ways of specifying an insert. The long form requires more typing, but is immune to problems with delimiters. Both yield the same result. Consider this example: to put a quotation into running text, we mark its beginning with "@BEGIN(QUOTATION)" and its end with "@End(QUOTATION)". Thus: PREPARING A MANUSCRIPT PAGE 11 @Begin(Quotation) Body of quotation. @End(Quotation) This is the long form. The short form of the same thing would be: @Quotation( Body of quotation. ) Obviously, the short form requires that the body of the quotation not contain the right delimiter that closes the quotation. If your quotation is short, you can specify it all on one line: @Quotation(Body of quotation) SCRIBE will produce the same output from any of the three forms shown above. A quotation in running text comes out single spaced, with the left and right margins widened a little, like this: The fact is, that civilization requires slaves. The Greeks were quite right there. Unless there are slaves to do ugly, horrible, uninteresting work, culture and contemplation become impossible. Human slavery is wrong, insecure, and demoralizing. On mechanical slavery, 1 on the slavery of the machine, the future of the world depends . 3.4.2 Simple Inserts SCRIBE knows about the following collection of simple insert types. Any one of them may be used in any document type. They may be used in the long form (using BEGIN and END), or the short form, @NAME(body of insert). ENTER is a synonym for BEGIN and LEAVE is a synonym for END. Each of these insert types is described inf figure 3-2; examples of the use of each can be seen in Appendix I. --------------- 1 From Oscar Wilde, The Soul of Man under Socialism, 1895 PAGE 12 SCRIBE USERS' MANUAL QUOTATION Text quotation VERSE Verse quotation EXAMPLE Example of computer type-in or type-out DISPLAY Non-justified insert. Each line is separate. CENTER Each line centered VERBATIM Characters copied exactly, without formatting FORMAT Hand-formatted text ITEMIZE Paragraphs with a tick-mark in front of each ENUMERATE Paragraphs with a number in front of each DESCRIPTION Outdented paragraphs; single spacing EQUATION Equation, with a number put in the right margin THEOREM Numbered theorem Figure 3-2: Basic Insert Types 3.4.2.1 QUOTATION and VERSE The QUOTATION insert has already been described (previous section). It inserts prose quotations in running text. The VERSE insert differs from the QUOTATION insert in the way it handles lines. QUOTATION doesn't pay any attention to ends of lines in the manuscript file; it puts as many characters on each line as will fit there. VERSE starts a new line in the final document for each end-of-line in the manuscript file, regardless of whether the existing line is full. If VERSE needs to use more than one line of the document to hold the text from one line of the manuscript, the second and following lines will be indented a bit from the left. A VERSE insert comes out looking like this: Oh, East is East and West is West, and never the twain shall meet, Till Earth and Sky stand presently at God's great Judgment Seat; But there is neither East nor West, border, nor breed, nor birth When two strong men stand face to face, though they come from the ends 1 of the earth . --------------- 1 Rudyard Kipling, The Ballad of East and West. PREPARING A MANUSCRIPT PAGE 13 3.4.2.2 EXAMPLE and DISPLAY The EXAMPLE and DISPLAY insert types are very similar; they differ only in the type face that will be used. In either EXAMPLE or DISPLAY inserts, each line of the manuscript file will produce one line in the document. Since EXAMPLE is for showing examples of computer type-in and type-out (useful in user's manuals), it will appear in a typeface that is designed to look like computer output. DISPLAY inserts will appear in the normal body type face. Thus: This is an EXAMPLE insert This is a DISPLAY insert The examples were generated like this: @Begin(Example) This is an EXAMPLE insert @End(Example) @Begin(Display) This is a DISPLAY insert @End(Display) If your copy of this manual was printed on a device that cannot change fonts (such as the Diablo printer), then those two lines will look nearly identical. 3.4.2.3 CENTER A CENTER insert is similar to a DISPLAY, except that it centers its lines rather than left-justifying them. Like DISPLAY, CENTER produces one line in the document for each line of the manuscript file that is inside the CENTER. This is a CENTER insert If there is more than one line in a CENTER insert, each line will be centered individually: for the example we just gave, the text to generate it was @Begin(center) This is a CENTER insert @End(center) PAGE 14 SCRIBE USERS' MANUAL although we could just as well have used @center(This is a CENTER insert) If you think that you want boldface centering, and find yourself wondering whether you should say @b(@center(Mynah Birds)) or @center(@b(Mynah Birds)), the chances are that what you are really doing is making a heading, and you should use @Heading(Mynah Birds) instead; see Chapter 5. 3.4.2.4 VERBATIM and FORMAT A VERBATIM insert is printed exactly as you type it; no justifying or moving of the text will be done. SCRIBE will switch to a fixed-width font for the VERBATIM text, in order that columns will line up properly. The @ codes will all be processed, so it's not completely verbatim. FORMAT differs from VERBATIM only in that it uses a variable-width character set if one is available on the final printing device. In FORMAT mode, you would use the tabbing and formatting commands (described in Chapter 7), rather than the space bar on your terminal, to align columns and achieve the desired effects. 3.4.2.5 ITEMIZE and ENUMERATE ITEMIZE and ENUMERATE each expect a sequence of paragraphs (separated by blank lines, as usual); and each justifies those paragraphs with slightly wider margins and puts a mark in front of each. ITEMIZE puts a tick-mark ("- ") in front of each paragraph, while ENUMERATE puts a number in front of each. If you are not going to refer back to the numbers that ENUMERATE generates, you should use ITEMIZE instead. An ITEMIZE comes out looking like this: - First item - Second item - Third and last An ENUMERATE looks like this: 1. First item 2. Second item PREPARING A MANUSCRIPT PAGE 15 3. Third and last The input text that made those examples was identical save for a substitution of name: the itemization was: @Begin(itemize) First item Second item Third and last @End(itemize) while the enumeration was @Begin(enumerate) First item Second item Third and last @End(enumerate) 3.4.2.6 DESCRIPTION A DESCRIPTION insert is designed for the "command description" style that is so common in reference manuals. The first line of a DESCRIPTION insert will be at the left margin of the page, and the second and remaining lines will be indented substantially, so that the word or phrase at the head of the description stands out. If the sequence "@\" or a ^I (TAB) character is found on the first line of a DESCRIPTION, it will be taken as a signal to tab to the indented margin provided that it has not yet been passed. Thus, this input: @Begin(description) Segment^IOne of the parts into which something naturally separates or is divided; a division, portion, or section. PAGE 16 SCRIBE USERS' MANUAL Section^I A part that is cut off or separated; a distinct part or subdivision of anything, as an object, country, or class. @End(description) will produce this output: Segment One of the parts into which something naturally separates or is divided; a division, portion, or section. Section A part that is cut off or separated; a distinct part or subdivision of anything, as an object, country, or class. 3.4.2.7 EQUATION An EQUATION insert is almost identical to a DISPLAY insert: each line in the manuscript file generates one line in the document, the left and right margins will be inset a bit, and it is printed in the standard body font. The difference is that the EQUATION insert will cause an automatically generated equation number to be printed in the right margin of each line in which a @TAG command (see section 8.1, page 53) appears. The @TAG command is used to mark cross-reference points, and only those equations that will be cross-referenced need be numbered. This input text: @begin(equation) @i[x]@-[n+1] = @i[x]@-[n]-@i[F](@i[x]@-[n])/@i[F]'(@i[x]@-[n]) @r(or) @tag(Newton)@i[x]@-[n+1] = (@i[x]@-[n]+@i[c]/@i[x]@-[n]) @End(equation) might produce output that looks like this (notice the equation number over at the right): x = x -F(x )/F'(x ) n+1 n n n or x = (x +c/x ) (3-12) n+1 n n PREPARING A MANUSCRIPT PAGE 17 3.4.2.8 THEOREM A THEOREM insert is almost identical to a QUOTATION insert: it will produce a single-spaced justified block of text, with the left and right margins pulled in a bit. The difference is that each time you do a @Theorem() or a @Begin(Theorem), SCRIBE will add the prefix text "Theorem" and then print the current theorem number. Thus, this input text: @Theorem(The closed interval [a,b] is compact) ... @begin(Theorem) A closed bounded subset of R@+[n] is compact. @End(Theorem) might produce this output text: Theorem 1-4: The closed interval [a,b] is compact. . . . n Theorem 1-5: A closed bounded subset of R is compact. See section 8.1 for a discussion of how to cross-reference theorem numbers using the @Tag and @Ref commands. 3.5 Footnotes 1 To get a footnote into running text, simply insert the sequence @foot(body of footnote) into your text at the point where the superscripted footnote marker should appear. The footnote in the previous sentence was generated by To get a footnote@foot(Like this one) into running text, simply Notice that SCRIBE automatically generates footnote numbers and puts them in the proper places; don't put the numbers in yourself. --------------- 1 Like this one PAGE 18 SCRIBE USERS' MANUAL In providing such a simple footnote mechanism, we feel a responsibility to advise you to use it sparingly. Footnotes seriously interfere with the readability of a paragraph, and their excessive use will distract the reader rather than help him. 3.6 Indexing Some document types request that an index be generated at the end of the document. This index does not magically become full of entries; rather, you have to tell SCRIBE what to put in the index. It's really quite simple. You use the @Index command, and provide the text of the index entry. SCRIBE will fill in the correct page number and see to it that the entries are in alphabetical order. At any point in the text, you may put an index entry of the form @index(Text to be indexed) Nothing will appear in the running text output at that point, but "Text to be indexed" will appear in the index with the correct page number: Text to be indexed 18 @Index works like @Foot in that it doesn't interrupt the sequence of the text. For example, the input Place the peaches and apples@index(peaches)@index(apples) in a glass jug and pour in the wine.@index(wine) A few teaspoons of sugar may be added if a sweeter drink is preferred, though it is not normally done. will produce this output: Place the peaches and apples in a glass jug and pour in the wine. A few teaspoons of sugar may be added if a sweeter drink is preferred, though it is not normally done. You may consult the index of this manual to see how those three entries look. You may put SCRIBE commands into the index text if you want, but if you include any that cause a paragraph break you will get an unsatisfactory result. As usual, if you want an @ sign to appear in the index, you have to use two: PREPARING A MANUSCRIPT PAGE 19 @Index(@@index command) The index entries will be sorted into alphabetical order according to the standard "Ascii" code. If you've put an "@" sign at the front of an index entry (as we have in the example of the last paragraph), then it will be sorted as if "@" were the first letter. A facility exists whereby you can make things appear in the index out of normal alphabetical order; you will have to consult the Experts' Manual to learn how to use it. 3.7 Special Characters Remember that a computer keyboard normally has only 95 characters on it. People frequently want to include special characters, whether a Greek letter like @g[P] or @g[z], or a mathematical symbol like ?< or ?7. These special characters are not available on the keyboard as individual keys. If you are using an output device that is capable of printing special characters, you can get SCRIBE to print them for you. If you are not using such an output device, you can get SCRIBE to leave space for you to write in the characters by hand. 3.7.1 Getting SCRIBE to Print Special Characters SCRIBE lets you specify special characters via multiple-character "escape sequences". They are called "escape sequences" (a piece of computer jargon) because you escape from the normal meaning of the character. For example, if your manuscript file contains if A ?< B then @g(L) must be 0 then your finished output will contain if A ?< B then @g(L) must be 0 The @g(L) to print a lambda is a "font-change" code, which changes to the Greek font. Font-change codes are described in section 3.3; page GREEKMAP has a table of the Greek letters that you can get with the @g command. The "?<" is a special-character escape sequence to generate the less-or-equal character. A table of the special-character codes is on page CHARMAP. 3.7.2 Faking Special Characters If the printing device that you are using cannot print the character you have asked for, SCRIBE will leave a blank spot there so that you can put the PAGE 20 SCRIBE USERS' MANUAL character in by hand. If you don't want to learn how to produce special characters, you can do the same thing: just leave a blank spot in your manuscript and then write the character in with a pen. Anywhere you put the sequence "@#", SCRIBE will leave a blank space large enough to write one character. Thus, if your manuscript file contains Kaiser Wilhelmstra@#e then SCRIBE will replace that "@#" by a wide space, printing: Kaiser Wilhelmstra e whereupon you would take pen in hand and write in the "?#" character: Kaiser Wilhelmstra?#e If you will need to write special characters in by hand, SCRIBE will produce a list that shows you where this must be done; you need just sit down with the list and a black pen and write the characters in. DOCUMENT TYPES AND STYLES PAGE 21 4. Document Types and Styles Remembering our view that SCRIBE aspires to be a substitute for a secretary, consider the case in which a secretary is handed a rough draft of something and told to "make a letter" or "make a memo." Part of his job is to know about basic document types and to be able to produce them as needed. SCRIBE also knows about basic document types, and will produce the kind of document that you tell it to. Each time SCRIBE is run, it produces a document of a particular "Document Type" for a particular printing device. A Document Type includes a specification of page format, paragraphing style, margins, heading and subheading style, and so forth. Some document types are very specialized, such as the one named "IEEE", which produces documents in the style and layout demanded by the various IEEE journals. Other document types are very general, such as the one named "TEXT", which produces paragraphed, justified text on numbered pages. Novice SCRIBE users should use the TEXT document type first (it's the document type that you get if you don't ask for any particular one). As they gain more experience with the system or as they find the need to produce more complicated documents, they should try other document types. 4.1 SCRIBE's Database of Document Types Document types are defined by entries in SCRIBE's database. When you request SCRIBE to produce a particular document type, it searches its database for the definition and then reads in the definition, thereby setting itself up to produce the requested document. If SCRIBE cannot find in its database a document type with the name that you ask for, it will tell you and then just halt; it can't really go on. 4.2 Specifying a Document Type: the @Make command The @Make command specifies document type. @Make(LETTER), for example, specifies the "LETTER" document type; @Make(TEXT) specifies the TEXT document type. The @Make command must come at the beginning of a manuscript file or it will not be honored. By "beginning" we mean before any text or commands that aren't "setup" commands. The five "setup" commands are @Make, @Device, @Style, @Font, and @Part. If you use any of these five commands, all of them must come before any of the other commands. SCRIBE knows about the document types that are listed in figure 4-1, which is to say that it is the list of names that you can put in a @Make command. Since SCRIBE is still under development, we expect that the set of available document types will be expanded in due time. In the Experts' Manual that is a companion to the one you are now reading, PAGE 22 SCRIBE USERS' MANUAL REPORT A document with a title page, divided into numbered chapters, sections, subsections, and the like; an automatic table of contents and outline will be generated. MANUAL Like REPORT, but with an index. This manual was produced using document type MANUAL. ARTICLE A sectioned document like REPORT, but without chapters; SECTION is the highest-level of sectioning. LETTERHEAD A business letter with CMU letterhead. LETTER A personal letter; you provide the return address POSTER A single-page poster or announcement SLIDE An overhead-projector slide. Font and line spacing have been chosen to maximize readability. Figure 4-1: SCRIBE Document Types you can find out how to define your own document types or modify the appearance of existing ones. We recommend that you not attempt this until you are an experienced SCRIBE user. In the meantime, you may use one of the variant document styles described in the next section, or you may use the @Style and @Font commands that are described in chapter 9 to get small changes in format and style and type face. 4.3 Style Variations SCRIBE's standard document type for producing user manuals is called "MANUAL". This SCRIBE manual was produced in that style. Different people like different styles, though, and one particular "Manual" style isn't going to please everybody. SCRIBE therefore has a mechanism for changing the style of formatting without changing the basic document type. This manual was produced in form 1 of the document type "Manual". The @Make command that was used to produce it was @Make(Manual,Form 1) If it had been instead @Make(Manual,Form 2) then the form-2 "Manual" format would have been used instead; if the @Make command had been just DOCUMENT TYPES AND STYLES PAGE 23 @Make(Manual) then the normal "Manual" format would have been produced. These "forms", or style variations, have been produced by various SCRIBE users who didn't like the standard style. Form-1 "Manual" format uses different type fonts, while form-2 "Manual" uses wider margins and wider line spacing. Each time a new installation starts using SCRIBE, they find that they don't like certain things about its formats. The new users typically make small style changes to the document-type definitions in the SCRIBE data base. As those small changes filter back to CMU, they get installed in our master version of the data base as variant styles of our basic document types. PAGE 24 SCRIBE USERS' MANUAL 5. Titles, Headings, Sections, and the Table of Contents Almost every document has a title. Some have title pages. Others have headings and subheadings here and there in the text. In this chapter, you will find out how to get various kinds of titles and headings. As usual, we'll start with some vocabulary. A document has one and only one title. This title goes on the title page, at the top of the first page, or something like that. A document can have many headings. Sometimes you might want to put a few subheadings inside a heading. If you give numbers to headings and subheadings, then they become sections. At the top (and/or bottom) of every page are the page headings, sometimes known in the printing business as "running headers". Different document types use different schemes to produce headings or sections. This manual, for example, was produced using the document type "MANUAL"; it is divided into numbered chapters, sections, and subsections and has a table of contents. A smaller document might have sections but not chapters; a short piece of text might have just a heading or two. The particular SCRIBE commands that you should use to get headings in your document depend on what kind of a document you are producing. 5.1 Headings in a Document Without a Table of Contents There is a simple set of heading commands to produce headings for documents without tables of contents. They are simple because all they have to do is print the heading: they don't have to give it a number or put it in the table of contents. Use MajorHeading to get large letters, centered. Heading to get medium-size letters, centered. SubHeading to get normal-size boldface letters, flush to the left margin. Thus, this input sequence: @MajorHeading(This is a Major Heading) @Heading(This is a Heading) @Subheading(This is a Subheading) will produce this output: TITLES, HEADINGS, SECTIONS, AND THE TABLE OF CONTENTS PAGE 25 THIS IS A MAJOR HEADING THIS IS A HEADING This is a Subheading That's all there is to it. Since these heading commands are really just insert names, you can use the "long form" call on them also: @begin(MajorHeading) This is a Major Heading @End(MajorHeading) @begin(Heading) This is a Heading @End(Heading) @begin(SubHeading) This is a Subheading @End(SubHeading) will produce the same results as the previous example. 5.2 Headings in a Document Having a Table of Contents A document having a table of contents must use a different set of commands for headings. They are different because they must both print the headings in the text and make an entry in the table of contents. Usually these commands will automatically number the chapters and sections, though in some document types they will not. The use of these sectioning commands is as simple as can be: @Chapter(Chapter Title) declares (and prints) a chapter title; @Section(Section Title) declares (and prints) a section title. In document types REPORT and MANUAL, you get the following sectioning commands: Left heading center heading Right heading Chapter, Section, SubSection, and Paragraph Appendix and AppendixSection UnNumbered PrefaceSection In document type ARTICLE, you get the same list except "Chapter"; the highest-order sectioning command in an ARTICLE is "Section". UnNumbered uses the same style and font size as Chapter, but it is not assigned a chapter number. The easiest way to show you what these commands do is to draw your attention to the table of contents at the front of this manual, and to reproduce here the first few sectioning commands that were used in it: @PrefaceSection(Preface) @Chapter(Introduction) @section(Some Explanation for Non-Programmers) @section(Some Explanation for Programmers) @chapter(Getting Started) @section(Preparing Input for Scribe) @section(Running Scribe) @Section(Printing Devices) @Subsection(Getting SCRIBE to Print Special Characters) @SubSection(Faking Special Characters) @Chapter(Preparing a Manuscript) Notice that Chapter, Appendix, UnNumbered, and PrefaceSection all cause SCRIBE to start at the top of a new page. 5.3 Numbering Pages and Page Headings The information printed at the top or bottom of each page is called a page heading (or page footing). Normally SCRIBE will number the pages for you, putting a page number centered at the top of all pages after the first. You may, if you like, change the page headings to any text that you want. The page heading and footing areas are divided into three parts: a left part, a center part, and a right part. These parts are printed at the left, center, and right sides of the heading or footing area. The headings and footings of this page are labeled to show you the position of these six fields. Page headings and footings are declared with the @Pageheading and @PageFooting commands. The commands for this page said: Left footing center footing Right footing TITLES, HEADINGS, SECTIONS, AND THE TABLE OF CONTENTS PAGE 27 @Pageheading(left "Left heading",center "center heading", right "Right heading") @Pagefooting(left "Left footing",center "center footing", right "Right footing") The text fields inside the quotes can contain anything, including SCRIBE commands. To get the current page number, use "@Value(Page)". To get the date, use "@Value(Date)". Thus, this command: @PageHeading(left "Reference Manual",center "@value(Date)", ,right "@value(page)") will cause the pages to have "Reference Manual" in the top left corner, the current date in the top center, and the page number in the top right corner. Section 10.4.1 will tell you more about the @Value command. The @Pageheadinng and @Pagefooting commands may take an optional parameter, IMMEDIATE. If the IMMEDIATE parameter is present: @PageHeading(Immediate,Left="Left heading",....) then the heading of the current page will be changed. In the absence of the "Immediate" parameter, the newly-declared heading or footing won't take effect until the following page. You may declare different page headings to be used on odd and even pages. If you are going to be reproducing your document printed on both sides of the paper, then you will want odd and even headings to be the mirror image of one another. Use two different @PageHeading commands, one containing the keyword "odd" and the other containing the keyword "even". The commands that generated the page headings for this manual are: @pageheading(even,right "@c[SCRIBE Users' Manual]", left "@c[Page @ref(page)]") @pageheading(odd,left "@c[@Title(Chapter)]", right "@c[Page @ref(page)]") The @Title command is described in section 10.4.2. PAGE 28 SCRIBE USERS' MANUAL 5.4 Title Pages The document types REPORT and MANUAL (and their variations) include a simple mechanism for generating title pages. Surround the title page text with a @Begin(TitlePage) and a @End(TitlePage). These will cause the title page to be on a page by itself, and text within the title page to be centered. At CMU, the title page for a technical report should have the title, author, and date of publication visible within a "box" that will be reproduced on the cover of the report. To put text in this box, use the insert type "TitleBox". If you do a @Begin(TitleBox), the next line of text will be positioned at the very top of the title box region. When you @End(TitleBox), text assembly will shift down to a region of the page that is no longer in the title box. To get large or medium letters inside the title box, use the "MajorHeading" or "Heading" commands described in section 5.1. The insert type "CopyrightNotice" is used to put a copyright notice on the title page. If you type this text into the manuscript file: @CopyrightNotice(L. Frank Baum) then SCRIBE will put the following line on your title page, at an appropriate spot near the bottom: Copyright -C- 1978 L. Frank Baum for the current year. The insert type "ResearchCredit" is used to put a research funding credit at the bottom of the title page. Any text that you put between a @Begin(ResearchCredit) and @End(ResearchCredit) will be placed in an appropriate spot at the bottom of the page, justified and single spaced. See appendix I.1 for an example of a title page. FIGURES AND TABLES PAGE 29 6. Figures and Tables Figures and tables are inserted into the manuscript file in very much the same way as any other kind of insert: you mark the beginning with a @Begin(Figure) or @Enter(Figure), and mark the end with an @End(Figure) or @Leave(Figure). Between those delimiters you place the commands necessary to produce the figure. A figure has three parts: 1. A figure body. The figure body can be something you paste onto the finished document. It can be an image picture printed on the XGP. It can be text produced with SCRIBE. How you produce it is your own business. 2. A caption. All figures must have captions. You provide the text of the caption, and you decide how it is to be placed with respect to the figure body. 3. A figure number. Figures are numbered sequentially. SCRIBE will automatically assign numbers to figures, and you can use the standard SCRIBE cross-reference mechanism (see section 8.1) to refer to them. 6.1 Generating Figure Bodies You may generate the body of a figure using any of the standard SCRIBE environments, such as FORMAT, VERBATIM, or EXAMPLE. You may also generate the body of a figure using the special commands @Blankspace or @Picture. The @Blankspace command leaves a blank space in your document; the @Picture command (which works only on the XGP, and then only on the CMU XGP) inserts an image 1 picture into the document . Figure 6-1: Sample Image Picture 6.1.1 The @Blankspace Command The @Blankspace command makes a blank space of a specified size. --------------- 1 Image pictures are binary files produced by the SPACS program, the PLOT program, and others. These programs are mentioned in the CMU Introductory Users' Manual and are fully documented in other manuals. PAGE 30 SCRIBE USERS' MANUAL @Blankspace(3 inches) makes a blank space about 3 inches high; @Blankspace(16 cm) makes a blank space about 16 centimeters high. We say "about", because SCRIBE will always leave a small margin above and below the blank space that you request. You may use the distance units "inches", "in", "inch", "cm", "mm", or "lines". If you specify the amount of blank space in lines, then the amount that you actually get will depend on the font and printing device being used. 6.1.2 The @Picture Command The @Picture command needs two arguments: the size of the image picture, measured in XGP scan lines, and the name of the PDP-10 file that will contain the image picture at the time you are printing the document on the XGP. A typical @Picture command might be: @Picture(622,File "TEMP:IOBUS.IMG[F100CH00]") This command will generate an image picture that is 622 scan lines high (about 3.4 inches), and whose definition can be found in the file "TEMP:IOBUS.IMG" on 1 the account F100CH00 . 6.2 Generating Figure Captions Figure captions are generated with the @Caption command. The call is just @Caption(Text of Figure Caption) SCRIBE will add the word "Figure" and the correct figure number; what will get printed in the finished document will be something like: Figure 3-6: Text of Figure Caption . --------------- 1 CMU Computer Science Department users please note: the file name and PPN specified here are evaluated on CMU-10B, regardless of which machine you run SCRIBE on. If you have different account numbers on different machines, make sure that you use the 10-B account numbers in the @Picture command FIGURES AND TABLES PAGE 31 6.3 Figure Numbers Figures are numbered automatically during the processing of the @Caption command. If you don't put a caption on a figure, it won't get a number. If you want to reference the figure in the text of the document, you will want to put a@Tag command into the body of the figure. The right place to put the @Tag is after the @Caption. If you put it before the @Caption, you will get the wrong figure number assigned to the tag, because the number will not yet have been incremented. 6.4 Full-page figures If you want to make sure that a figure occupies an entire page, use "FullPageFigure" instead of "Figure": @begin(FullPageFigure) <figure body> @Caption(figure caption) @End(FullPageFigure) The figure will be given a page to itself. If you want the caption at the bottom of the page, you must put in the right amount of spacing yourself. If you want to leave a blank figure page in the document, use the @Blankpage command: @Blankpage(1) will leave one "blank" figure page. This figure page will have page headings and footings, and will be given a page number, but nothing will be printed on it. You may remember that there is a @Newpage command (section 7.4.2), which starts a new page and can leave a specified number of blank pages. @Blankpage differs from @Newpage in a subtle but important way. When SCRIBE encounters a @Newpage command, it skips immediately to the top of the next page. When SCRIBE encounters a @Blankpage command, it makes a note about the blank page request but continues on the current page; then when it finally comes to the end of the current page, it will put in the extra blank page(s) at that point. The sequence PAGE 32 SCRIBE USERS' MANUAL @Begin(FullPageFigure) @End(FullPageFigure) will yield exactly the same effect as @Blankpage(1) . FORMAT CONTROL: TABS, COLUMNS, AND CURSOR MOVEMENT PAGE 33 7. Format Control: Tabs, Columns, and Cursor Movement SCRIBE provides several ways to get text or numbers formatted into columns. For simple formats or small amounts of tabular material, the VERBATIM environment serves admirably. For more complex formatting, typewriter-style tab stops, set in fixed columns, are available; they may be used in any environment, but FORMAT is a frequent choice. 7.1 VERBATIM For small amounts of tabular material, it might be easiest to format "by hand" at the terminal and use a VERBATIM insert. In VERBATIM, SCRIBE copies each line of the input manuscript file to one line in the output, and uses a fixed-width font so that characters will line up correctly. For example, if the input manuscript file contains this text: @begin(Verbatim) Directory listing 26-Jun-78 0:56:57 Name Extension Len Prot Access ---Creation--- ARTICL MAK 25 <155> 24-Jun-78 11:59 22-Jun-78 TEXT MAK 3 <055> 24-Jun-78 0:56 24-Jun-78 MCFREP MAK 9 <055> 26-Jun-78 18:30 24-Jun-78 MANUAL MAK 48 <055> 25-Jun-78 22:48 24-Jun-78 Total of 85 blocks in 4 files on DSKC: [C410BR10] @End(Verbatim) then the finished document, when printed, will look like this: Directory listing 26-Jun-78 0:56:57 Name Extension Len Prot Access ---Creation--- ARTICL MAK 25 <155> 24-Jun-78 11:59 22-Jun-78 TEXT MAK 3 <055> 24-Jun-78 0:56 24-Jun-78 MCFREP MAK 9 <055> 26-Jun-78 18:30 24-Jun-78 MANUAL MAK 48 <055> 25-Jun-78 22:48 24-Jun-78 Total of 85 blocks in 4 files on DSKC: [C410BR10] The fixed-width font is important so that columns will line up correctly: if we printed that same text in our normal font (which has different widths for different characters), it would come out looking like this: PAGE 34 SCRIBE USERS' MANUAL Directory listing 26-Jun-78 0:56:57 Name Extension Len Prot Access ---Creation--- ARTICL MAK 25 <155> 24-Jun-78 11:59 22-Jun-78 TEXT MAK 3 <055> 24-Jun-78 0:56 24-Jun-78 MCFREP MAK 9 <055> 26-Jun-78 18:30 24-Jun-78 MANUAL MAK 48 <055> 25-Jun-78 22:48 24-Jun-78 Total of 85 blocks in 4 files on DSKC: [C410BR10] 7.2 Tabs and Tabs Stops SCRIBE has a tab-stop mechanism that works pretty much the way tabs on a typewriter work. Tabs may be set in any horizontal position, and when a "tab" command is found, SCRIBE will move right to the next tab stop and start formatting there. 7.2.1 Setting Tab Stops It's very simple to clear and set SCRIBE tabs. The @TabClear command will clear all tabs, and the @Tabs command will set them. Thus, the sequence @Tabclear @Tabs(1inch,2inches,3inches) will clear all tabs and then set new tabs 1, 2 and 3 inches from the left margin of the current environment. The @TabDivide command will divide the formatting area into a particular number of columns, making them however wide they must be in order to fit that many columns on the page. Thus, @TabDivide(5) will set 4 tab stops, each 1/5th of the way across the page. The right margin serves as the final tab stop. The @. command sets a tab in the current cursor position. Thus, the sequence @tabclear This line @.is for setting @.tab stops. @\^@\^ FORMAT CONTROL: TABS, COLUMNS, AND CURSOR MOVEMENT PAGE 35 will clear all tabs and then set two new tabs. The document will show the lines This line is for setting tab stops. ^ ^ The exact location of these new tabs depends on the font in use. The first one will be set at the distance that the letters "This line" occupy on the page. 7.2.2 Tabbing to a Tab Stop The @\ command tells SCRIBE to move its formatting cursor to the right until it encounters the next tab stop. If there is no tab stop to the right of the cursor position, then it will be moved to the right margin. The ^I or TAB character on your terminal's keyboard does not generate a SCRIBE tab, but rather is converted into a series of blank spaces. 7.3 Fancy Cursor Control This section tells you how to do more elaborate cursor control. These fancy cursor-control features can be used, for example, to generate wierd mathematical formatting. If you don't see how these features would be useful to you, then they aren't. 7.3.1 Overprinting The @ovp command allows you to overprint things. @ovp[text] lays down "text" and then backspaces over it. Thus Simple example of @ovp(=)/ overprinting. will generate the output Simple example of = overprinting. If you use the @ovp command, your document will most likely not give satisfactory results on a printing device other than the one you are used to, because the appearance of overstruck letters varies markedly from one printing device to another. If you want to overprint an underline character you would PAGE 36 SCRIBE USERS' MANUAL be better served to use the @U command, because different output devices use different characters for underlining. You can use @ovp to fabricate an approximation to some special characters. The sequence "@ovp(?+)/" will generate "?+, which is a rough approximation to the mathematical symbol for "is not a subset of". If you are going to be producing a lot of special characters on the XGP, you would be better off making a private character set file that contains those special characters; see Section PRIVATEFONTS. If you are so motivated, you can create real junk with the @ovp command: This line is @ovp(Carefully)overstruck produces: This line is Carefullyk 7.3.2 The Return Marker SCRIBE maintains a "return marker", which is a fixed memory of a particular horizontal position on the page. You set the return marker by putting "@!" in your text. Wherever "@!" occurs, the return marker will be set to the current horizontal cursor position. Whenever SCRIBE finds an "@/", it moves the cursor to the return marker. This will work regardless of whether the cursor was to the left or right of the return marker. One use of the return marker is building super-subscripts: A@!@+[i]@/@-[j] generates i A j FORMAT CONTROL: TABS, COLUMNS, AND CURSOR MOVEMENT PAGE 37 7.3.3 Centering, Flush Left, and Flush Right SCRIBE has commands that make it take pieces of text and center them or flush them right. Left flush is no big trick. To flush a text fragment right, it must be flushed "against" something. Usually text is flushed to the right margin, like this but text can be flushed right against any tab stop: text flushed right against a tab stop To flush a text fragment to the right, you have to delimit the fragment to be flushed and you have to tell SCRIBE what to flush it against. The code "@>" (looking vaguely like a right arrow) says "begin a flush-right operation". If there is a tab sequence (@\) later in the line, then SCRIBE will find the column that the tab sequence tabs to, and then flush right against that column position. If there is no tab sequence later in the line, then SCRIBE will flush the rest of the line against the right margin. It's time for an example. This input: @tabdivide(3) 1.@>Flushed to right margin 2.@>to tab stop@\ 3.@>longer line flushed to different tab stop@\ 4.This line starts in the middle @>and flushes from here produces this output: 1. Flushed to right margin 2. to tab stop 3. longer line flushed to different tab stop 4.This line starts in the middle and flushes from here Since there is no @\ in line 1 after the @> code, the remainder of the line is flushed against the right margin. Line 2 has a @\ tab code at the end, so the line is flushed right against the tab stop to which that @\ tabs. Line 3 is PAGE 38 SCRIBE USERS' MANUAL like line 2, except that by the time the @\ code is reached, the line has already passed the first tab stop, so the @\ moves to the second tab stop and the line is flushed to that second tab stop. Line 4 shows a fragment of a line being flushed right. Before talking about the commands that center, let's talk about what we mean by centering. Centering requires that there be a left and right marker of some kind, and that the text be centered between them. For example, this line is centered in the page but this is centered in this is centered in the left half of the right half of the page the page SCRIBE uses tab stops and margins as the reference points for centering. If there are no tab stops set, it will always use the current left and right margins as centering guides. If there are tab stops, then SCRIBE will use them instead. More detail in a minute. To center something, you have to mark the left and right ends of the thing to be centered. Mark the left end always with "@=". You may mark the right end with "@\" (a tab), with another "@=", with a "@>", or with the end of the line. If you mark the right end with nothing, then SCRIBE will center the remainder of the line and use the right margin for a right-hand centering guide. When SCRIBE finds a @= (begin centering) code or a @> (begin flushright) code, it first checks to see if there was a previous unclosed @= or @> on the same line. If there was, then SCRIBE simulates a @\ code (tab), which closes the previous center or rightflush code. If this all sounds much too complicated, then contemplate the following example. This input: FORMAT CONTROL: TABS, COLUMNS, AND CURSOR MOVEMENT PAGE 39 @begin(format) @TabDivide(4) 1.a@\b@\c@\d 2.@=e@\@=f@\@=g@\@=h 3.@=i@=j@=k@=l 4.Left@=Center@>right 5.Left@=Center@>right@\ @TabClear 6.Left@=Center@>right @End(format) produces this output: 1.a b c d 2. e f g h 3. i j k l 4.Left Center right 5.Left Center right 6.Left Center right In line 1, the "b", "c", and "d" are positioned immediately after the three tab stops set by @TabDivide(4), so they will serve as markers to help you see the position of those tab stops. Line 2 has four letters, one centered in each of the four columns. Each of them is in a centering field marked on the left with a "@=" code and on the right with a "@\" (tab) code. Line 3 produces the same effect without the "@\" codes; the "@=" code serves like a "@\" then the "@\" is missing. Compare lines 4, 5, and 6. In line 4, a centering zone is begun by a "@="; the next code on the line is the "@>". Since there is no "@\" to close the centered zone, the "@>" first simulates a "@\", thereby tabbing to the first tab column, and centering the "Center" word between the left margin and the first tab stop. There is no "@\" code to end the "@>" flush-right code, so the rest of the line (i.e. the word "right") is flushed to the right margin. Line 5 is identical to line 4 except that there is a "@\" code at the end, which causes "right" to be flushed to the appropriate tab stop and not to the right margin. Line 6 is identical to line 4, but the tab stops have been cleared by a @TabClear command. This makes the "Center" right marker be the right margin, since there is not a tab stop for it to settle on. 7.4 Controlling Word, Line, and Page Breaks SCRIBE sometimes decides to break a line at a place that you don't like; sometimes it might break a page between two lines that really ought to be together on the same page. This section tells you how to get things kept together. It also tells you how to force word breaks, line breaks, and page PAGE 40 SCRIBE USERS' MANUAL breaks. 7.4.1 Controlling Word and Line Breaks SCRIBE breaks lines between words. To change where it breaks a line, we must change what it thinks is a word. Words are separated by blanks, so what we need is a means of making SCRIBE think that a blank is part of a word rather than a separator between two of them. A blank that is part of a word is called a significant blank. The need for significant blanks arises often in mathematical formatting. If you are going to write x = y, you don't want the x on one line and the = y on another: you want to make the blanks into significant blanks. There are two ways to do this. The sequence "@ " (an @ sign and then a space) generates a significant blank, which is treated by SCRIBE exactly as if it were a letter. Thus, you could write x@ =@ y to make a single word out of that equation. For long and complicated equations, it gets a bit tedious to put an "@ " instead of every blank; it's also quite hard to read. SCRIBE therefore provides a command that makes all blanks in its range into significant blanks: @w. So @w[x = y] produces the same results as our previous example. The @| command is used to tell SCRIBE that it may break a word at that point. If your text contains "Abra@|cadabra", for example, then the output document might contain "Abracadabra" printed together as a single word, or it might contain "Abra" on one line and "cadabra" on the next line, depending on how the line filling happened. "@|" is stronger than @w -- if you use "@|" inside a @w group, the "@|" will win, and a word break will be allowed there. If you want to force a line break to occur before it otherwise might, use the "@*" command. When SCRIBE is justifying text and comes across an "@*", it will start a new line without justifying the old one. If SCRIBE encounters a "@*" while processing unjustified text, it will be treated as if it were an end-of-line. FORMAT CONTROL: TABS, COLUMNS, AND CURSOR MOVEMENT PAGE 41 7.4.2 Controlling Page Breaks Normally SCRIBE will start a new page when the old one is full, regardless of what it is doing at the time. If SCRIBE happens to be processing an insert at the moment that the page becomes full, the insert will be split across two pages. It is often desirable to ensure that an insert will not be split across a page. There are two ways to proceed if an insert will not fit on a page: start a new page (leaving blank space at the bottom of the previous page), or "float" the insert to the top of a nearby page and continue the text uninterrupted at that point. Both of these options are available in SCRIBE. To ask for them, you need to use the long-form insert specification (with @Begin and @End). To allow an insert to float if it won't fit on the current page, add the keyword FLOAT to the @Begin marker: @Begin(Verse,Float) Text of verse @End(Verse) If the verse insert won't fit, the text will continue without interruption, and the insert will appear on the top of the next page. To require that a new page be started if an insert doesn't fit on the current page, use the keyword GROUP: @Begin(Display,Group) Text of display insert @End(Display) The @HINGE command may be put into a GROUPed insert to allow it to be broken at that point. If one or more @Hinge commands are in a GROUPed insert, it will be treated as a sequence of smaller inserts, each one being GROUPed. @Hinge will be ignored if it appears anywhere but inside a GROUPed insert. @Hinge always forces a new output line. If you would like to force a page break to occur prematurely, use the @Newpage command. "@Newpage" causes SCRIBE to start at the top of a new page. "@NEWPAGE(how many)" causes it to leave <how many> blank pages, then start at the top of a new page. These pages will not be totally blank; rather they will have page headings and/or footings. If you would like completely blank pages, just put blank paper in your document at that point. PAGE 42 SCRIBE USERS' MANUAL 8. Cross Reference, Bibliography, and Citation SCRIBE does automatic bookkeeping of cross references of various kinds. One kind of cross reference is the bibliographic citation, a reference to something mentioned in the bibliography. Another kind of cross reference is the text reference, which is a reference to some other part of the document. 8.1 Cross References A cross reference is a notation like "see page 13" or "see chapter 5". If you are typing a document by hand, it is a major feat to get cross references right; and if you change anything, they are suddenly wrong again. The Joy of Cooking, an 800-page kitchen classic, averages 7 to 8 cross references per page. We shudder to think of the work that it took to get all 5000 to 6000 of them right. SCRIBE will do cross referencing automatically, by letting you define codewords to mark places in the text, then filling in the correct page or section number wherever you reference the codeword. There are two separate kinds of cross references, but their use is nearly identical. You may refer to the page or section number containing a piece of text, or you may refer to a specific equation or theorem or example by number. These are called text references and object references respectively. 8.1.1 Text References: the @LABEL Command The mechanism for text references is quite simple. If you put the sequence @LABEL(Codeword), for some codeword that you choose, anywhere in a document, SCRIBE will note the page and section number at the spot where the @Label appeared. If you put @REF(Codeword) somewhere else, SCRIBE will fill in the section number of the text that contains the corresponding @Label; if you put @PAGEREF(Codeword), SCRIBE will fill in the page number of the corresponding label. To take an example from this manual, we said on page 16 that ... each line in which a @TAG command (see section 8.1, page 42) appears. The manuscript file text that generated that line actually contains: ... each line in which a @@TAG command (see section @ref(Xrefs), page @pageref(Xrefs)) appears. CROSS REFERENCE, BIBLIOGRAPHY, AND CITATION PAGE 43 Someplace in section 8.1 there is a @Label(Xrefs) command. "Xrefs" is a codeword that was picked more or less arbitrarily to stand for that section. You must choose your own codewords and spell them the same everywhere in the document. If a @REF at the beginning of a document references a @LABEL at the end, SCRIBE will use the page number that was generated the last time the document was processed. If the document has never been processed before, then there won't be any "last time", and SCRIBE will tell you to process the file a second time if you want the cross references right. If you have made changes to a document, some of the cross references might be wrong the first time you SCRIBE it after making those changes. If this happens, SCRIBE will tell you; you then have the option of printing the file as it stands (with the errors, but knowing that it's not your final copy and that you don't need perfection), or of re-running SCRIBE to get the cross references right. They will be right the second time because the correct values for all labels will have been stored in an auxiliary file, which SCRIBE will read in before the second processing. Since the normal evolutionary development of a document involves alternate editing and reprocessing, the references will be correct almost all of the time, and if you want perfection on a particular run, it is simple enough to run it through twice. SCRIBE builds an "AUX" file that contains the various pieces of information that it must remember from one run to the next. Cross-reference labels are included in this AUX file. If you are processing a file named, say, "RECIPE.MSS", then SCRIBE will store its auxiliary information in a file named "RECIPE.AUX". 8.1.2 Object References: the @TAG Command One of the most valuable features of SCRIBE is its ability to number things for you, and thus to renumber them if changes are made. Automatic page numbering is pretty much taken for granted; we have already mentioned the automatic numbering of sections (Section 5.2) and of equations or theorems (Section 3.4.2). SCRIBE will number anything it can count; you can also attach a cross-reference tag to anything that SCRIBE can count. Let's talk about the difference between the @Label command and the @Tag command; this difference is a bit subtle. A sectioned document has many different sequences of numbers that identify the pieces of it. Pages are numbered sequentially; chapters and sections and such are usually numbered independently of the pages. Figures and tables are often numbered within a PAGE 44 SCRIBE USERS' MANUAL chapter, ignoring section numbers. If you want to attach a codeword to the section number of the section that contains a particular theorem or example or figure or table, then use @Label. If you want to attach a codeword to the theorem number or example number or equation number, rather than to the section that it is contained in, use the @Tag command. It's time for some examples. You should remember from section 3.4.2 that the THEOREM and EQUATION environments are used to print theorems and equations and automatically to assign numbers to them. You may place an @Tag command inside a THEOREM or an EQUATION to define a label so that you may reference the equation or theorem number. You may also place a @Label command inside a THEOREM or an EQUATION so that you may reference the section number or page number on which the theorem or equation occurs. This unlikely input text: @begin(Theorem) @tag(imbed) @label(ImbedSec) If G is a non-self-embedding context-free grammar, then L(G) is a regular set. @End(Theorem) It follows immediately from Theorem @ref(Imbed), that ... [and in a later section...] We showed in section @ref(ImbedSec) in Theorem @ref(imbed) ... might produce this output text: Theorem 4.10: If G is a non-self-embedding context-free grammar, then L(G) is a regular set. ...It follows immediately from Theorem 4.10, that ... We showed in section 4.6 in Theorem 4.10 ... 8.2 Bibliography and Citation A bibliography is a labeled list of books, articles, papers, and the like. A citation is a marker in the text that refers to an entry in the bibliography. Thus, if a section of your bibliography looks like this: [15] E. W. Dijkstra. Co-operating Sequential Processes. In F. Genuys, editor, Programming Languages, pages 43-110. Academic Press, 1968. CROSS REFERENCE, BIBLIOGRAPHY, AND CITATION PAGE 45 [16] Mary-Claire van Leunen. A Handbook for Scholars. Alfred A. Knopf, 1978. [17] A. van Wijngaarden, B. J. Mailloux, J. E. L. Peck, and C. H. A. Koster. Report on the Algorithmic Language ALGOL 68. Mathematisch Centrum, Amsterdam, 1969. then text with citations might look like this: M. van Leunen, in her lively and detailed book, argues against the bibliographic footnote [16]. The original language, which was rather more cumbersome to learn and to use, is defined in van Wijngaarden et al [17]. The SCRIBE bibliography facility does three things: 1. Selects from a database the bibliographic entries that are actually cited, 2. Formats them into a bibliography and assigns a number or label to each, and 3. Causes the correct numbers to be placed in the citations in the text. 8.2.1 Bibliography Files Because SCRIBE selects and prints only those entries in a bibliography that are actually cited in the text, you may use a common bibliography "database" for many different documents. This database is in a separate file which we will call the bibliography file. Each entry will be given an identifier, or name, by which it is cited. These identifiers work in very much the same way as do the @label/@ref cross-reference keywords (see section 8.1): an identifier is defined in one place (the bibliography) amd cited in others (@cite commands in the text). The bibliography file thus consists of a series of entries, each with an identifier. Each entry also has an entry type and a list of data fields. For example, the bibliography file entries for our examples of the previous section might be PAGE 46 SCRIBE USERS' MANUAL @InBook(Dijkstra69, Author "E. W. Dijkstra", Title "Co-operating Sequential Processes", Editor "F. Genuys", Title "Programming Languages", Publisher "Academic Press", Date "1969" ) @Book(VanLeunen78,Author "Mary-Claire van Leunen", Title "A Handbook for Scholars", Publisher "Alfred A. Knopf", Date "1978" ) @Report(ALGOL68,Author "A. van Wijngaarden, B. J. Mailloux, J. E. L. Peck, and C. H. A. Koster", Title "Report on the Algorithmic Language ALGOL 68", Publisher "Mathematisch Centrum, Amsterdam", Date "1969" ) In this example, the names "Dijkstra69", "VanLeunen78", and "ALGOL68" are the identifiers by which these bibliography entries will be cited. The text of the document would contain @Cite commands that reference those identifiers. Any text following a bibliography file entry is assumed to be an annotation or commentary on that entry, and will be included in the bibliography printed in your document. Normally SCRIBE will look for a file with an extension of ".BIB" as the bibliography file for a document; i.e. if your manuscript file is "THESIS.MSS", SCRIBE will use "THESIS.BIB" as the bibliography file. You may use the @Use command, described in section 10.5, to request that SCRIBE use some different file for the bibliography file for your document. 8.2.2 Citations Citations are simple. Just put a @cite command into your text at the spot where the citation should appear. @Cite takes one or more identifiers to tell it what to cite: @cite(Knuth59) @cite(Guarino78,Cooprider78) CROSS REFERENCE, BIBLIOGRAPHY, AND CITATION PAGE 47 These will be processed by SCRIBE into standard form citations: [12] [5,16] 8.2.3 Alternate Citation Styles Some people don't like straight numeric citations, though it is the form most frequently needed in preparing papers for publication. Some journals require other forms, though, and therefore provides a style parameter to change citation style. You may choose: 1. Straight numeric citation. This is normally the default: [6]. 2. Author's last name and year: [Guarino78]. 3. First 3 characters of author's last name, and year: [Gua78]. 4. Print the identifier instead of a generated label. You may set the bibliography style using the CITATION parameter to the @Style command: @Style(CITATION=1) or @Style(CITATION=4), etc. Some document types may include a specification of CITATION style of other than 1; this is why we said that style 1 is normally the default rather than style 1 is the default. PAGE 48 SCRIBE USERS' MANUAL 9. Changing Things Although SCRIBE's basic approach to document production is to provide its users with a large menu of document types and discourage them from tinkering with details, we recognize that the urge to tinker is incurable. SCRIBE therefore provides two commands that may be used to make small changes in the format and style of a document. 9.1 Changing Type Font: The @Font Command The @Font command tells SCRIBE to use a particular type font. For use with SCRIBE, a "font" is a collection of type faces, chosen to look harmonious when used together. A font will often contain 10 to 15 different type faces in diferent sizes and styles. For example, a typical font will contain Roman, Boldface and Italic in both body text size and footnote text size; it will also contain various sizes of heading and title fonts, usually without italics and boldface. A font, like a document type, is defined by an entry in SCRIBE's database. This font database entry is a list of information of the form "when I say @B, I mean Times Roman Bold; when I say @R, I mean Times Roman Medium." An entry like that would be found in a font whose name was "Times Roman", which would be specified by the command @Font(TimesRoman). 9.2 A List of Available Fonts At CMU at the time of this writing (August 1978), the following fonts are available for use with SCRIBE. Many different character-set files exist for the XGP, but very few of them are attractive enough and readable enough to warrant printing a document in them. Each SCRIBE font uses 10 to 15 different character-set files. Here is the list; a sample of each is in appendix FONTSAMPLES: News Gothic 10 News Gothic 12 Nonie 12 Nonie 9 Meteor 12 Meteor 9 Baskerville 12 Bodoni 10 The number associated with a font is its height in "points", which is a unit of printer's measure. A 10-point type like News Gothic 10 is about the same size as a standard Elite typewriter font. For Diablo printers, a font simply specifies a type wheel and a list of CHANGING THINGS PAGE 49 special characters to be constructed with it; SCRIBE knows about these fonts (typewheels) for the Diablo: Elite Pica Although users may create their own fonts by creating their own database entries, we defer description of this process to the Experts' Manual. If you have a private character set for the XGP that you would like to use, see section PRIVATEFONTS. The HELP text for SCRIBE, which you can see by typing HELP SCRIBE to the monitor, will give you instructions for finding out the current list of available fonts. 9.3 The @Style Command The @Style command changes the settings of certain of SCRIBE's internal parameters. These parameters form a sort of "genetic code"; each parameter is somewhat like a gene. There is a parameter that controls whether or not SCRIBE makes a flush right margin. There is a parameter that controls how much space SCRIBE leaves between lines; another that controls the distance that each paragraph is indented. The database entry for a document type presets the value of all SCRIBE parameters. You may use the @Style command to override these values. All @Style commands used in a document must come at the beginning; you can't change styles in mid-document. Let's consider a small example. The document type TEXT specifies no paragraph indentation; it adds an extra blank line between paragraphs instead. If you wanted to change to standard typewriter-style indentation (5 spaces), you could put the command @Style(Indentation,5) into your manuscript file. SCRIBE would then indent paragraphs 5 spaces. If you also wanted to suppress the extra blank line between paragraphs, you could say @Style(Indentation 5, Spread 0) or alternatively you could say PAGE 50 SCRIBE USERS' MANUAL @Style(Indentation 5) @Style(Spread 0) The word "Spread" was chosen to mean inter-paragraph spacing solely because it would be pretty tedious to type @style(Inter-ParagraphSpacing 0). Some style parameters expect names instead of numbers; others expect quoted strings. For example: @Style(Justification Off) will turn off right-margin justification, while @Style(Footnotes "*") tells SCRIBE to use asterisks instead of numbers when enumerating footnotes. 9.4 A List of STYLE Parameters This table lists the style parameters that you can specify in the @Style command, and briefly describes what they do. Indentation Controls paragraph indentation in text. A horizontal distance should be provided: @Style(Indentation 5) means to indent 5 spaces. If you want backwards indentation, give it a negative number. Spacing Controls inter-line spacing. A vertical distance should be provided: "2" means "2 lines", i.e. double space. If you want, say, one-and-a-half spacing, then say @Style(Spacing 1.5) The default spacing that you get depends on the document type being produced. Spread Controls the inter-paragraph spacing, i.e. the extra space, over and above the line spacing, that will be put between paragraphs. Justification A "Yes", "No", "On", or "Off" tells SCRIBE whether or not to CHANGING THINGS PAGE 51 justify the right margin. Don't put the word in quotes: @Style(Justification Off) @Style(Justification On) LeftMargin This parameter will change the size of the left margin of the pages. For example, @Style(LeftMargin 1.3 inches) will cause the page to have a 1.3-inch left margin. The "margin" of a page is the white space at the edge of the paper, so if you specify a bigger number here, it will make a bigger white space and hence leave a smaller print line. RightMargin This parameter will change the size of the right margin. The RightMargin parameter and the PaperWidth parameter both affect the length of the printed lines. Remember that the "margin" is the white space at the edge of the paper, so increasing the size of the RightMargin parameter will increase the size of the margin, hence decreasing the amount of space taken by the print line. TopMargin Changes the top margin of the page. BottomMargin Changes the bottom margin of the page. The BottomMargin parameter and the PaperLength parameter both affect the size of the printing area on the page. PaperLength Used to specify the length of the paper that you are using. For example, @Style(PaperLength 14 inches) specifies legal-size paper. PaperWidth Used to specify the width of the paper that you are using. Footnotes Controls the way that footnotes are numbered. The normal numbering scheme is numeric: the first footnote is numbered "1", the second one "2", and so forth. @Style(Footnotes "@*") PAGE 52 SCRIBE USERS' MANUAL will cause the numbering to be "*", "**", and so forth. If you want some other numbering scheme used, specify a template. See the Experts' Manual to find out what that means. 9.5 Miscellany This section documents a few odds and ends that don't seem to belong anywhere else. They probably don't belong here either, but they've got to go somewhere. 9.5.1 Changing Command Names If you really don't like SCRIBE's name for some command, you may use the @Equate command to define your own equivalent. The format is @Equate(New=Old,New=Old,...) Let's suppose, for example, that you don't like the name "Enumerate". You think it's too long. You would like to be able to say "@En" instead of "@Enumerate". Then enter at the front of your file the command @Equate(EN=Enumerate) From then on, you will be able to say @begin(en) @end(en) or even just @en{...} You may not use @Equate to change the meaning of an existing name. If you try, say, @Equate(Itemize=Enumerate) SCRIBE will complain mightily and refuse to execute the @Equate. CHANGING THINGS PAGE 53 9.5.2 Changing Counter Values SCRIBE counters are things like "page", "chapter", and "TheoremCounter". They are incremented from time to time from inside SCRIBE, with values ranging from 1 to whatever. Sometimes people don't like the counter numbers to be so well-behaved. SCRIBE therefore provides a command to let you meddle with counter values. For example, the command @set(Page=8,Chapter=4) will set the page number to 8 and the chapter number to 4. If you would like to add or subtract some quantity to or from a counter, use a + or - sign: the command @Set(Page=+3) adds 3 to the current page number. We would like to refer you to the separate compilation facility, described in section 10.2, as a better way of doing the deeds that you are probably trying to accomplish when you go about meddling with counter values. PAGE 54 SCRIBE USERS' MANUAL 10. Producing Large Documents Big documents are proportionately much harder to produce than small ones. The amount of work needed to produce one 200-page document is several times that needed to produce ten 20-page documents. Bookkeeping becomes a chore. The amount of file space used becomes huge. It can take an hour or two of elapsed time just to process a 200-page document through SCRIBE when the system is heavily loaded. SCRIBE has a large-document facility, with several independent mechanisms, that make it easier to produce large documents. The large-document facility includes: - An @include command, that allows a document to be split into multiple files, each one of which is of manageable size. - A @part command that lets you separately process one component file of a document, yet have page numbers, section numbers, chapter numbers, and cross references still come out right. - A @string command that lets you store commonly-used text sequences and recall them by name when they are to appear in the document. - A @use command to request that SCRIBE use some private or custom edition of its database. - An automatically-generated outline of your document, created in a separate file, to help you manage its organization. 10.1 Breaking a Manuscript into Several Smaller Files SCRIBE normally reads sequentially through a manuscript file, processing text and commands as it comes to them. The @Include command makes SCRIBE suspend processing of the main manuscript file, process a second file, then resume processing of the original manuscript file. For example, if your manuscript file contains 00100 The Wicked Witch was both surprised and worried when 00200 she saw the mark on Dorothy's forehead, for she knew 00300 well that neither the Winged Monkey nor she, herself, 00400 dare hurt the girl in any way. 00500 @Include(SUBFIL.MSS[C410BR10]) 00600 At first the Witch was tempted to run away from Dorothy; 00700 but she happened to look into the child's eyes and saw 00800 how simple the soul behind them was, and that the PRODUCING LARGE DOCUMENTS PAGE 55 00900 little girl did not know of the wonderful power the 01000 Silver Shoes gave her. and if the file whose name is SUBFIL.MSS[C410BR10] contains 00100 She looked down at Dorothy's feet, and seeing the 00200 Silver Shoes, began to tremble with fear, for she knew 00300 what a powerful charm belonged to them. then the finished document will contain the text The Wicked Witch was both surprised and worried when she saw the mark on Dorothy's forehead, for she knew well that neither the Winged Monkey nor she, herself, dare hurt the girl in any way. She looked down at Dorothy's feet, and seeing the Silver Shoes, began to tremble with fear, for she knew what a powerful charm belonged to them. At first the Witch was tempted to run away from Dorothy; but she happened to look into the child's eyes and saw how simple the soul behind them was, and that the little girl did not know of the wonderful power the Silver Shoes gave her. @Include requests may be nested, i.e. a file that is processed because of an @Include command may itself contain other @Include commands naming yet more files. The name "@File" is a synonym for "@Include", and may be used interchangeably with it. To break up a large document into component manuscript files, it is best to build a small "root" file that contains the @Make, @Device, and @Style commands and then has a series of @Include commands that include all of the text. Each of these @Include commands includes one part of the document. It is usually convenient to divide a document into separate chapter files, with one @Include for each chapter, but any division that is convenient for you is acceptable. Figure 10-1 shows the root file for the CMU Computer Primer, a large document produced with SCRIBE. It prints the title page, then includes in turn each of the chapter files. The file CH0.MSS contains the preface, introduction, and such. CH1.MSS contains the text of chapter 1, CH2.MSS contains the text of chapter 2, and so forth. The "@Chapter" command is in the included file and not in the root file. PAGE 56 SCRIBE USERS' MANUAL @device(XGP) @make(Primer) @pageheading(left "@c[CMU Computer Primer]",Right "@value(page)") @begin(TitlePage) @begin(TitleBox) @begin(MajorHeading) COMPUTER PRIMER @end(MajorHeading) @begin(Heading) For Computer Science Department Computer Users @end(Heading) by Brian K. Reid @value(Month) @value(Year) @end(TitleBox) @begin(Heading) Carnegie-Mellon University Computer Science Department @end(Heading) @CopyrightNotice(Brian K. Reid) @end(TitlePage) @include(ch0.mss) @Include(ch1.mss) @Include(ch2.mss) @Include(ch3.mss) @Include(ch4.mss) @Include(ch5.mss) @Include(ap1.mss) @Include(ap2.mss) Figure 10-1: Sample Root File 10.2 Separate Processing of Component Files If you have used the @Include command to break your manuscript into small component files, you may process them independently as manuscripts in their own right. By judicious use of the @Part command, which we will shortly describe, PRODUCING LARGE DOCUMENTS PAGE 57 you may separately process the components of a large document for draft copy purposes, yet be able to process the whole thing without having to change any of the components. 10.2.1 Component Files As Separate Documents It frequently arises that some masterful piece of prose will be published as a chapter of a larger work as well as be published on its own. By carefully keeping its head in the sand at the right times, SCRIBE lets you set up files so that they will work both as included parts of a large document and as documents in their own right. SCRIBE ignores certain commands if they are found inside an included file, but processes the same commands if they are found in a root file. This lets you put commands into a file that will be ignored if it is part of a larger document but will be processed if it is being produced as a document in its own right. The commands @Device, @Make, @Style, and @Font will be ignored if they are found in an included file but processed if they are found at the beginning of the root file. The text inside a TitlePage environment (see section 5.4) will also be ignored inside an included file. You may therefore put at the beginning of a file the commands necessary to process it as a stand-alone document, trusting that they will be ignored if it is included as part of a larger document. 10.2.2 Separate Processing of Component Parts For very large documents, the processing time for the full document is large enough for it to be wasteful to re-process and re-print all of the document when only a piece of it has changed. A person working on a small section of a large document would like to be able to produce a draft copy of that section without coping with the whole thing. When each chapter is produced by a different author, the several authors would each like to be able to get proof copies of their chapter apart from the other text. For situations like these, SCRIBE provides a @Part command, which supports separate compilation of fragments of a larger document. To take advantage of this separate compilation facility, place a @Part command at the front of each included file. It should be the first command in the file. The @Part command must provide two items of information: a name for PAGE 58 SCRIBE USERS' MANUAL the part and the file name of the root file of the document. Thus @Part(Chapter3,root "primer.mss") defines a part whose name is "Chapter3" and that is part of the document whose root file is PRIMER.MSS. The name that you choose for the part is just a name, and may be any combination of letters, digits, and "-" characters. Having put @Part commands, each with a different part name but all specifying the correct root file, into the various subfiles, you must process the entire document once to record the part information. When SCRIBE finds a @Part command in an included file, it makes a note of the part name and the page and section numbers at that point. These notes are saved along with the cross-reference data in the AUX file for the document. Once there exists an AUX file with part information stored in it, you may process any part by itself. If SCRIBE finds a @Part command at the beginning of a file it is asked to process, it assumes that you are separately compiling a piece of a larger document and enters a special sub-compilation mode. SCRIBE does three special things in sub-compilation mode: 1. SCRIBE finds the root file and processes the @Device, @Make, @Style, @Font, @Equate, @PageHeading, and @PageFooting commands that are in it. Some other commands, documented only in the Experts' Manual, will also be picked up from the root file. 2. SCRIBE restores the page and section numbers to the correct values for the part being processed. 3. SCRIBE reads in the cross-reference label definitions for the entire document, and not just for the part being processed. The result of this complicated series of acts is that the separately-compiled part will be produced with the correct page and section numbers; if it contains any cross references to labels defined in some other part, the references will be correct. At the end of processing a separately-compiled part, SCRIBE will update and rewrite the AUX file. If the number of pages in the part has changed since the last processing, SCRIBE will correct the stored page number information for parts that follow this one, in order that page numbers will be right if other parts are later processed. The index and table of contents produced by processing a part will reflect PRODUCING LARGE DOCUMENTS PAGE 59 only the contents of that part. If a new part is to be added, the entire root file must be processed to incorporate the new part correctly. 10.3 Defining and Using Text Strings The @String command provides a mechanism for storing a series of characters under a particular name, then including that series of characters in the document by referring to the name in a @Ref command. 10.3.1 The @String Command @String defines names to equal a quoted string: @String(CACM="@i[Communications of the ACM]") @String(EQ4="@i[x]@+[2]+4*@i[x]*@i[y]-17*@i[y]@+[2]") @String(Name="J. Alfred Prufrock", Agency="Rutabaga, Inc.") You need not use quotation marks; any of the delimiters described in section 3.1 will work. To use these text strings that you have defined, call them inside a @Ref command. For example, if the @String commands of the previous example have been processed, then this input: Prior work was published in @ref(CACM). The solution is @ref(EQ4). @Ref(Name) no longer is employed by @ref(Agency). will produce this output: Prior work was published in Communications of the ACM. 2 2 The solution is x +4*x*y-17*y J. Alfred Prufrock no longer is employed by Rutabaga, Inc. If both a text string and a cross-reference label are given the same name, then the @Ref will refer to the text string and not to the cross-reference label. 10.4 Environment Inquiry: Predefined Strings SCRIBE has a mechanism that allows you to include in your document various characteristics of the processing environment, such as the date and the name of the file being processed. These things are called "internal strings" because they are defined inside SCRIBE. PAGE 60 SCRIBE USERS' MANUAL 10.4.1 Internal Strings and the @Value Command The @Value command is used to access internal strings. For example, @Value(Date) will produce the current date at that point in the document, and @Value(Manuscript) will produce the name of the manuscript file. Thus, if you put in your manuscript file the text This document was produced on @Value(Date). then your document will contain the text: This document was produced on 7 August 1978. @Value(Date) will produce the current date. The precise format in which the date will be printed is controlled by the "DATE" parameter to the @Style command. Normally the date will print this way: "7 August 1978". However, if you have put a @Style command at the front of your manuscript file that specifies a DATE style, it might come out in a different format. @Style(Date=1) is the default. @Style(Date=2) gives you "August 7, 1978". @Style(Date=3) gives you "7 Aug 78". @Style(Date=4) gives you " 7 AUG 78". @Style(Date=5) gives you "08/07/78". @Value(Month) will return the full name of the current month, e.g. "August". @Value(Day) will give you the day number in the current month, e.g. "7". @value(Year) will return the current year, e.g. "1978". @Value(Weekday) will give you the name of the current day of the week, e.g. "Monday". @Value(Time) will tell you the time, in 24-hour notation, to the nearest minute, when the current SCRIBE run began; e.g. "02:26". To get a "time stamp" that records the date and time of processing, use @Value(TimeStamp); it will give you a value like "7 August 1978 at 02:26". You can also inquire about the files that SCRIBE is working on. @Value(Manuscript) tells you the name of the manuscript file that SCRIBE is processing, e.g. "USERL.MSS". @Value(SourceFile) tells you the particular place in the manuscript file or the @Included subfile that SCRIBE is processing at that moment, e.g. "UMCH10.MSS, 05800/5. And if you really must know, @value(ScribeVersion) tells you the version of SCRIBE that is doing the processing, e.g. "CMU 0E(110)-5". If you are producing a document with a table of contents, then you may inquire as to the number or title of the current section. @Value(SectionTitle) gives you the title of the chapter, section, subsection, or whatever is PRODUCING LARGE DOCUMENTS PAGE 61 appropriate, e.g. "Internal Strings and the @Value Command". @Value(SectionNumber) gives you its number, e.g. "10.4.1". @Value(Page) tells you the current page number, e.g. "61". 10.4.2 Current Values of Counters If the @Ref command is applied to a counter, e.g. PAGE or CHAPTER, it will give the current numeric reference value of that counter. If the @Title command is applied to a counter, it will give the current title associated with that counter. Thus, at this point in the SCRIBE manual, "@Title(Chapter)" returns "Producing Large Documents" and "@ref(Chapter)" returns "10". There is a bit of ambiguity between @Value(Page) and @Ref(Page): they both do exactly the same thing. Early versions of SCRIBE did not have the @Value command, so @Ref(Page) is left in the system for compatibility. If you ask for the title of a counter that has no title, a null string will be returned: "@Title(Page)" returns "". 10.5 File Names and the @Use Command The "@Use" command directs SCRIBE to use other database, bibliography, and auxiliary files than it normally would. For example, SCRIBE will normally look for an AUX file with the same name as the manuscript file: if your manuscript file is "PRIMER.MSS", the AUX file would be "PRIMER.AUX". If you put the command @Use(AuxFile "OTHER.AUX") at the front of your manuscript, then SCRIBE will use "OTHER.AUX" instead of "PRIMER.AUX". The extension ".AUX" will always be used. To request that SCRIBE use some particular bibliography file, use the @Use command with the parameter "Bibliography": @Use(Bibliography "PROSYS.BIB[C410HB00]") The extension ".BIB" is not required, any extension is allowed. The @Use command may also be used to direct SCRIBE to use a nonstandard version of the database. If you put the command PAGE 62 SCRIBE USERS' MANUAL @Use(Database "somewhere") at the very beginning of your root file, then SCRIBE will interpret "somewhere" as the location of a database and will look there for everything that it needs. The precise nature of the "somewhere" string depends on the details of the computer system in use; sample strings for various popular computer systems are "<Jones>", "[M100MD0C]", and "[51,1062]". WARNING If you develop your own version of the SCRIBE database, the software maintainer disavows any responsibility to maintain compatibility between your private database and future versions of the program. EPILOGUE AND SERMON PAGE 63 11. Epilogue and Sermon The guiding principle that shaped every aspect of the design of SCRIBE is that most people who produce documents don't know or care about the details of the formatting involved. To this end, those details are determined by information in SCRIBE's database and not by commands from the user. The benefits of this somewhat arrogant approach are legion. For those people who really don't care about details, it is possible to produce attractive formatted output with very little work and even less decision-making. To produce a document for a different printing device, the simple change of one @Device command will yield a completely different set of formats, designed to look attractive on the new device. The cost of this approach is that it is not always possible to get every character to land on the page in precisely the spot that you think it ought to. Trying to force SCRIBE to format one way while it is trying to format in another way is like pulling teeth: possible but painful. Please don't use pliers on SCRIBE. If you find yourself fighting with SCRIBE, you are probably not using it right. If you catch yourself constantly thumbing through the table of commands and style parameters, trying to find the command or parameter that will force some particular character to a particular column, then you are not using SCRIBE correctly. And if you ever catch yourself, even once, wanting to use the @Blankspace command outside a figure, then you are definitely using SCRIBE wrong. If you find yourself fighting SCRIBE, think carefully about what that means: SCRIBE is trying to produce a document in one format, while you want it to be in another. You have several recourses: 1. Learn to like the standard SCRIBE formats. This is by far the simplest approach. Not everyone needs to be a typographer. 2. Look at all of the variant styles that are in the SCRIBE database. Perhaps one of them will please you. You can get these variant styles by using the "Form" parameter to the @Make command; see section 4.3 for details. 3. If none of the standard or variant styles pleases you, then you are a very finicky person. To indulge your finickiness you are going to have to work hard. If you are not willing to work hard, go back to step 1; it might be more appealing the second time around. If you are willing to work hard, then go get a copy of the Experts' Manual, curl up in a comfortable place, and read it from cover to cover. If PAGE 64 SCRIBE USERS' MANUAL that doesn't stop you, then roll up your sleeves and go make your own document style. Please tell me about it when it's done, so that I can add it to the SCRIBE database for other people to use. One final behest: please don't complain to me about the formats that SCRIBE produces. SCRIBE is capable of producing almost any format at all, but it comes from the factory equipped to produce formats that I happen to like. If you don't like my formats, don't complain to me about it. Either learn to like them or make your own. A FEW EXAMPLES PAGE 65 I. A Few Examples This appendix is full of random examples. All of them were motivated because early users of SCRIBE often asked, "How do I do such-and-so". There is no particular logic to the sequencing of these examples. I.1 How to Make a Title Page Document Types REPORT, MANUAL, and ARTICLE contain a title page facility; you can also say "@Make(TitlePage)" and produce just the title page. This input file produced the title page for this manual: @begin(TitlePage) @begin(TitleBox) @MajorHeading(SCRIBE Introductory User's Manual) @Heading(First Edition) Brian K. Reid @value(Date) @end(TitleBox) @begin(Heading) Carnegie-Mellon University Computer Science Department @end(Heading) This manual corresponds to SCRIBE version @value(ScribeVersion). @CopyrightNotice(Brian K. Reid) @Begin(ResearchCredit) The research that produced SCRIBE was funded in part by the Rome Air Development Center under Contract No. F306-2-75-C-0218, in part by Army Research Contract No. DAAG29-77-C-0034, and in part by the Defense Advanced Research Projects Agency under contract No. F44620-73-C-0074. @End(ResearchCredit) @end(TitlePage) The "TitlePage" environment will be on a page by itself; i.e. a page break will be taken before it and after it. The "TitleBox" environment is used to line up text with the box on CMU technical report covers. Anything that you put inside the environment "TitleBox" will be positioned on the page so that it will show through the cutout box. PAGE 66 SCRIBE USERS' MANUAL The "ResearchCredit" environment puts justified text at the bottom of the title page. The "CopyrightNotice" environment generates the centered notice, and positions it in a particular place on the page. I.2 Equations and Cross References This example is taken from Volume 1 of The Art of Computer Programming by Donald E. Knuth. It shows the use of the SCRIBE equation numbering scheme, and it shows the use of cross-references to equations earlier in the text. Here is the input file: Let @i[P(n)] be some statement about the integer @i[n]; for example, @i[P(n)] might be "@i[n] times (@i[n] + 3) is an even number," or "if @i[n] ?> 10, then 2@+[@i[n]] > @i[n]@+[3]." Suppose we want @i[to prove that P(n) is true for all positive integers n]. An important way to do this is: @Begin(Enumerate) Give a proof that @i[P(1)] is true; @Tag(BaseStep) Give a proof that "if all of @i[P](1), @i[P](2), . . . , @i[P](@i[n]) are true, then @i[P](@i[n]+1) is also true"; this proof should be valid for any positive integer @i[n]. @Tag(InductStep) @End(Enumerate) As an example, consider the following series of equations, which many people have discovered independently since ancient times: @equation( 1 = 1@+[2], 1 + 3 = 2@+[2], 1 + 3 + 5 = 3@+[2], 1 + 3 + 5 + 7 = 4@+[2], 1 + 3 + 5 + 7 + 9 = 5@+[2]. ) We can formulate the general property as follows: @equation{ 1 + 3 + . . . + (2@i[n] - 1) = @i[n]@+[2] @Tag(Induction) } Let us, for the moment, call this equation @i[P(n)]; we wish to prove that @i[P(n)] is true for all positive @i[n]. Following the procedure outlined above, we have: @Begin(Enumerate) "@i[P](1) is true since 1 = 1@+[2]." "If all of @i[P](1), . . . , @i[P](@i[n]) are true, then, in particular, @i[P](@i[n]) is true, so Eq. @Ref(Induction) holds; adding 2@i[n] + 1 A FEW EXAMPLES PAGE 67 to both sides, we obtain @begin(equation) 1 + 3 + . . . + (2@i[n] - 1) + (2@i[n] + 1) = @i[n]@+[2] + 2@i[n] + 1 = (@i[n] + 1)@+[2] @End(equation) which proves that @i[P](@i[n] + 1) is also true." @End(Enumerate) We can regard this method as an @i[algorithmic proof procedure]. In fact, the following algorithm produces a proof of @i[P](@i[n]) for any positive integer @i[n], assuming that steps @Ref(BaseStep) and @Ref(InductStep) above have been worked out. and here is the output that it produces: Let P(n) be some statement about the integer n; for example, P(n) n might be "n times (n + 3) is an even number," or "if n ?> 10, then 2 > 3 n ." Suppose we want to prove that P(n) is true for all positive integers n. An important way to do this is: 1. Give a proof that P(1) is true; 2. Give a proof that "if all of P(1), P(2), . . . , P(n) are true, then P(n+1) is also true"; this proof should be valid for any positive integer n. As an example, consider the following series of equations, which many people have discovered independently since ancient times: 2 2 2 2 1 = 1 , 1 + 3 = 2 , 1 + 3 + 5 = 3 , 1 + 3 + 5 + 7 = 4 , 2 1 + 3 + 5 + 7 + 9 = 5 . We can formulate the general property as follows: 2 1 + 3 + . . . + (2n - 1) = n (1) Let us, for the moment, call this equation P(n); we wish to prove that P(n) is true for all positive n. Following the procedure outlined above, we have: 2 1. "P(1) is true since 1 = 1 ." 2. "If all of P(1), . . . , P(n) are true, then, in particular, P(n) is true, so Eq. 1 holds; adding 2n + 1 to both sides, we obtain PAGE 68 SCRIBE USERS' MANUAL 2 2 1+3+ ... +(2n-1)+(2n+1)=n +2n+1=(n+1) which proves that P(n + 1) is also true." We can regard this method as an algorithmic proof procedure. In fact, the following algorithm produces a proof of P(n) for any positive integer n, assuming that steps 1. and 2. above have been worked out. I.3 Printing on Model Paper Academic journals frequently request that papers submitted for publication be typed on "model paper", which they provide. Model paper is usually larger than the normal 8.5-by-11 inch size, and has various blue lines on it that demarcate the area in which your paper is supposed to go. It is usually convenient to proof your document on normal-sized paper, then convert it to the format required by the journal. There are dozens of different kinds of model paper in use. Ideally, SCRIBE would have a document type for each, so you could just say "@Make(NorthHolland)", for example, and generate model paper for North-Holland journals. In time these document types will become available; right now they are not. There are two approaches to the preparation of model paper. You may use the Diablo, typing directly on the paper, or you may cut and paste. In either case, you will need to be able to control page size, margins, and line spacing. 1 All of the information that you need to produce model paper is in chapter 9, but it may not have been obvious to you how to put it all together. Figure 11-1 shows an excerpt of a sample manuscript file used to prepare a document to be typed directly on the model paper with the Diablo typewriter. To print with the XGP to cut and paste, you would use a similar approach. I.4 Business Letters SCRIBE will format a business letter for you and print it either on the XGP, simulating stationery, or on the Diablo, typed on real stationery. Your manuscript file will be in the same format either way. Figure 11-2 shows a sample manuscript file that will produce a business letter, albeit a whimsical one. Figure 11-3 shows how that letter would look when printed on the XGP. --------------- 1 If you choose to cut and paste, I recommend Carter's Glue Sticks for the pasting part. THE FORMAT OF BIBLIOGRAPHY FILES PAGE 69 @device(Diablo) @Font(Elite10) @Style(PaperLength 12inches,Paperwidth 9inches) @Style(TopMargin 1inch,BottomMargin 1.3inches) @Style(LeftMargin 1.2inches,RightMargin 1.6Inches) @Style(Spacing 1,Justification Off) @Style(Indentation 3) @enter(Heading) THE HARPY SPEECH UNDERSTANDING SYSTEM Bruce Lowerre Raj Reddy Carnegie-Mellon University Pittsburgh, PA 15213 @leave(Heading) @Heading(ABSTRACT) HARPY is one of the first systems to demonstrate that high performance, large vocabulary connected speech recognition systems can in fact be realized economically for task-oriented (restricted) languages. In this chapter we present, using simple examples, the principles of organization of the Harpy system. We will illustrate how knowledge sources (KSs) are specified, how the knowledge compiler integrates the KSs into a unified directional graph representation, and how this knowledge is utilized. In conclusion, we will discuss many of the limitations of the present system and how these can be eliminated or reduced in future systems. @heading(INTRODUCTION) Figure 11-1: Sample text for paper typed onto model paper PAGE 70 SCRIBE USERS' MANUAL @device(XGP) @make(Letterhead) @begin(Address) Mr. J. Z. Williams Market Research Analyst Williams Pharmaceuticals 1234 Main Street Elkhart, Indiana 42103 @end(Address) @begin(Body) Dear Mr. Williams: Your company's television ads recommend that people take two Alka-Seltzers at a time. I buy them in bottles of 25. I find that this leaves me with one extra Alka-Seltzer at the end of each bottle. Could you be so kind as to help me decide what to do with these poor orphaned pills, lest they go to waste? @end(body) Sincerely, Brian Reid @begin(Notations) BKR/xgp @end(Notations) Figure 11-2: Manuscript file to make a business letter THE FORMAT OF BIBLIOGRAPHY FILES PAGE 71 PAGE 72 SCRIBE USERS' MANUAL Figure 11-3: XGP output produced by sample letter file THE FORMAT OF BIBLIOGRAPHY FILES PAGE 73 II. The Format of Bibliography Files As we mentioned in chapter 8, a bibliography file is a sequence of bibliography entries. This appendix describes the details of the format of these entries. Each bibliography entry takes the form @what(identifier, information list) where "what" is one of BOOK, ARTICLE, THESIS, INBOOK, REPORT, or MISC. The "information list" is a list of data about the entry, each datum consisting of a parameter word and a quoted string. Each type of entry needs a different set of information. For example, an ARTICLE needs a JOURNAL parameter, while a THESIS needs a SCHOOL parameter. The complete set of parameters is: AUTHOR The name of the author or authors. Put names in the order JOURNAL The title of the journal or its standard abbreviation. ISSUE The number within volume of the journal issue. VOLUME For journals, the journal volume number. For multi-volume books, the book volume number. DATE The publication date. TITLE The title of the article, paper, book, or thesis being cited. BOOKTITLE If a chapter of a book is being cited, the book title must also be given. EDITOR If a chapter of a book is being cited, the name of the editor of the book must be given. PAGE If desired, a page number or numbers may be provided. SCHOOL The name of the school at which a thesis was submitted. If an unnecessary parameter is included in an entry, it will be ignored. If a necessary parameter is omitted from an entry, a warning message will be issued when the file is processed. PAGE 74 SCRIBE USERS' MANUAL Index @ sign, meaning 4 @! command 36 @# command 20 @* command 40 @+ command 10 @- command 10 @. command 34 @/ command 36 @= command 38 @> command 37 @Appendix command 25 @Appendixsection command 25 @B command 10 @Begin command 10, 11 @BlankPage command 31 @Blankspace command 29 @C command 10 @Caption command 30 @Chapter command 25 @Cite command 45 @CopyrightNotice command 28 @Device command 5, 21, 55 @End command 10, 11 @Enter command 11 @Equate command 52 @file command 55 @Font command 21, 22, 48 1 @Foot command 17 @G command 10, 19 @Heading command 24 @Hinge command 41 @I command 10 @Include command 54 @Index command 18 @Label command 42, 45 @Leave command 11 @MajorHeading command 24 --------------- 1 @Foot command 17 INDEX PAGE 75 @Make command 21, 55 @Newpage command 31, 41 @O command 9, 10 @ovp command 35 @P command 10 @PageFooting command 26 @PageHeading command 26 @Pageref command 42 @Paragraph command 25 @Part command 21, 57 @Picture command 30 @Prefacesection command 25 @R command 10 @Ref command 17, 42, 45, 59 @ResearchCredit command 28 @S command 9 @Section command 25 @Set command 53 @String command 59 @Style command 21, 22, 49, 50, 55, 60 @SubHeading command 24 @Subsection command 25 @T command 10 @Tabclear command 34 @TabDivide command 34 @Tabs command 34 @Tag command 16, 17, 43 @Theorem command 17 @TitleBox command 28 @TitlePage command 28 @U command 10, 35 @UN command 10 @UnNumbered command 25 @Use command 61 @UX command 10 @Value command 60 @W command 40 @\ command 35, 38 @| command 40 Alphabetic space 20, 40 Annotation in Bibliography 46 APPENDIX command 25 APPENDIXSECTION command 25 PAGE 76 SCRIBE USERS' MANUAL Apples 18 ARTICLE document type 21, 65 AUX file 43, 58, 61 B command 10 BEGIN command 10, 11 Bibliographic citations 42 Bibliography 44 Bibliography annotation 46 Bibliography database 45 Bibliography entry parameters 73 Bibliography entry selection 45 Bibliography entry type 45 Bibliography file 45, 61 Blank lines 4, 14 Blank Pages 31 BLANKPAGE command 31 BLANKSPACE command 29 Boldface, how to get 10 BOTTOMMARGIN style parameter 51 Bracketing 8 C command 10 CAPTION command 30 Captions for figures 30 CENTER insert 11, 13 Centering 38 Changing command names 52 CHAPTER command 25 Chapter titles 25 Character fonts 19 Citation 44 CITATION style parameter 47 Citation styles 47 Citations 42, 46 CITE command 45 Clearing tab stops 34 Codewords 42 Column formatting 33, 34 Command names, changing 52 Copyright notice, how to produce 28 COPYRIGHTNOTICE command 28, 66 Counters 53 Cross reference codewords 42 INDEX PAGE 77 Cross reference example 42 Cross references 16, 42, 45 Cross references, errors in 43 Cursor control 35 Database 61 Date, current 60 Day of week 60 Delimiters 8, 11 Delimiters, nesting 8 DESCRIPTION insert 11, 15 DEVICE command 5, 21, 55 Devices 9 Diablo 48 Diablo HyType printer 6 DISPLAY insert 11, 13 Document file 5 Document types 21 Document types, how to define 21 Document types, how to modify 48 Document, definition of 2 Double-spacing 50 END command 11 ENTER command 11 ENUMERATE insert 11, 14 EQUATE command 52 EQUATION insert 11, 16 Equation number references 42 Equation numbers 43 Equations, examples 66 Even/odd page headings 27 EXAMPLE insert 11, 13 Example number references 42 Figure bodies, generating 29 Figure captions, generating 30 Figure numbers 31 Figure pages 31 Figures, full page 31 Figures, how to make 29 FILE command 55 File output 6 Fixed-width fonts 33 PAGE 78 SCRIBE USERS' MANUAL FLOAT parameter 41 Flush right 37 FONT command 21, 22, 48 Font height measurement 48 Font-change codes 9 Fonts 9, 19, 33, 48 Fonts, how to create 49 FOOT command 17 Footnote numbering 50, 51 Footnote numbers 17 Footnotes 17, 50 Forcing a line break 40 Forcing a page break 41 FORMAT insert 11, 14, 33 Full-page figures 31 Funding acknowledgement 28 G command 10, 19 Greek letters 10, 19 GROUP 41 GROUP parameter 41 HEADING command 24 Headings 14, 24 HINGE command 41 I command 10 Identifier 45 IMMEDIATE parameter to @Pageheading 27 INCLUDE command 54 INDENTATION style parameter 50 INDEX command 18 Indexing 18 Insert, long form 10, 25 Insert, short form 11 Inserts 10, 11 Inserts, long form 41 Inter-line spacing 50 Inter-paragraph spacing 49, 50 Internal strings 60 Italics 8 Italics, how to get 10 ITEMIZE insert 11, 14 INDEX PAGE 79 Joy of Cooking 42 Justification 50 JUSTIFICATION style parameter 50 LABEL command 42, 45 Large letters 24 LEAVE command 11 LEFTMARGIN style parameter 51 LETTER document type 21 Letterhead 68 LETTERHEAD document type 21 Line break, forcing 40 Line breaks 40 Line length 51 Line printer output 5, 6, 9 Line width 51 MAJORHEADING command 24 MAKE command 21, 55 MANUAL document type 21, 25, 65 Manuscript File, definition of 2 Manuscript file, preparation of 4 Manuscript file, processing of 5 Margins, changing 51 Mathematical formatting 35 Month 60 MSS file extension 4 Nested delimiters 8 New page 31 New paragraph 4 NEWPAGE command 31, 41 Numbering pages 26 O command 9, 10 Object references 42, 43 Odd/even page headings 27 Output characters 9 Output devices 6 Output files 5 Overbar 10 Overbar code 9 Overprinting 35 Overstriking 10 PAGE 80 SCRIBE USERS' MANUAL OVP command 35 P command 10 Page breaks 41 Page Headings 24, 26 Page length 51 Page number references 42 Page number, changing 53 Page numbering 43 Page numbers 26 Page, starting at top of new 31, 41 PAGEFOOTING command 26 PAGEHEADING command 26 PAGEREF command 42 PAPERLENGTH style parameter 51 PAPERWIDTH style parameter 51 PARAGRAPH command 25 Paragraph indentation 49, 50 Paragraphs 4, 14 PART command 21, 57 Peaches 18 PICTURE command 30 POSTER document type 21 PREFACESECTION command 25 Printing devices 5, 6 Quotation 10, 11 QUOTATION insert 11 Quotations 3 R command 10 REF command 17, 42, 45, 59 References 42 REPORT document type 21, 25, 65 RESEARCHCREDIT command 28 RESEARCHCREDIT insert 65 Return marker 36 RIGHTMARGIN style parameter 51 Roman typeface, how to get 10 Root file 55, 57 Running headers 24 Running SCRIBE 4 S command 9 INDEX PAGE 81 Script code 9 SECTION command 25 Section number references 42 Section title 25 Sectioning a document 24 Separate compilation facility 57 SET command 53 Setting tab stops 34 Setup commands 21 Significant space 20, 40 SLIDE document type 21 Small capitals, how to get 10 SPACING style parameter 50 Spread 50 SPREAD style parameter 50 STRING command 59 Strings, text 59 STYLE command 21, 22, 49, 50, 55, 60 SUBHEADING command 24 Subheadings 24 Subscripts, how to get 10 SUBSECTION command 25 Superscripts, how to get 10 T command 10 TAB character (Ctrl I) 35 Tab stops 33, 34, 38 Tabbing 35 TABCLEAR command 34 TABDIVIDE command 34 Table of Contents 25 Tables, how to make 29 Tabs 15, 34, 37 TABS command 34 TAG command 16, 17, 43 TEXT document type 21 Text reference 42 Text references 42 Text strings 59 THEOREM command 17 THEOREM insert 11, 17 Theorem number references 42 Theorem numbers 43 Time, finding 60 PAGE 82 SCRIBE USERS' MANUAL Times Roman font 48 Title page 24 Title page, example 65 Title page, how to produce 28 TITLEBOX command 28 TITLEPAGE command 28 TITLEPAGE insert 65 TOPMARGIN style parameter 51 Typewheels for Diablo 48 Typewriter font 10 U command 10, 35 UN command 10 Underlining 10, 35 Underlining, how to get 10 UNNUMBERED command 25 USE command 61 UX command 10 VALUE command 60 Variable-width fonts 33 VERBATIM insert 11, 14, 33 VERSE insert 11, 12 W command 40 Wine 18 Word break 40 Word breaks, forcing 40 Word breaks, preventing 40 Xerox Graphics Printer 6 XGP 48 XGP output 6, 9 Year 60 Yogurt 29 TABLE OF CONTENTS PAGE I Table of Contents 1. Introduction 2 1.1 Some Explanation for Non-Programmers 2 1.2 Some Explanation for Programmers 3 2. Getting Started 4 2.1 Preparing Input for Scribe 4 2.2 Running Scribe 4 2.3 Printing Devices 5 3. Preparing a Manuscript 8 3.1 Delimiters 8 3.2 Printing Device Considerations 9 3.3 Italics, Underlining, Etcetera 9 3.4 Inserts 10 3.4.1 Specifying an Insert 10 3.4.2 Simple Inserts 11 3.4.2.1 QUOTATION and VERSE 12 3.4.2.2 EXAMPLE and DISPLAY 13 3.4.2.3 CENTER 13 3.4.2.4 VERBATIM and FORMAT 14 3.4.2.5 ITEMIZE and ENUMERATE 14 3.4.2.6 DESCRIPTION 15 3.4.2.7 EQUATION 16 3.4.2.8 THEOREM 17 3.5 Footnotes 17 3.6 Indexing 18 3.7 Special Characters 19 3.7.1 Getting SCRIBE to Print Special Characters 19 3.7.2 Faking Special Characters 19 4. Document Types and Styles 21 4.1 SCRIBE's Database of Document Types 21 4.2 Specifying a Document Type: the @Make command 21 4.3 Style Variations 22 5. Titles, Headings, Sections, and the Table of Contents 24 5.1 Headings in a Document Without a Table of Contents 24 PAGE II SCRIBE USERS' MANUAL 5.2 Headings in a Document Having a Table of Contents 25 5.3 Numbering Pages and Page Headings 26 5.4 Title Pages 28 6. Figures and Tables 29 6.1 Generating Figure Bodies 29 6.1.1 The @Blankspace Command 29 6.1.2 The @Picture Command 30 6.2 Generating Figure Captions 30 6.3 Figure Numbers 31 6.4 Full-page figures 31 7. Format Control: Tabs, Columns, and Cursor Movement 33 7.1 VERBATIM 33 7.2 Tabs and Tabs Stops 34 7.2.1 Setting Tab Stops 34 7.2.2 Tabbing to a Tab Stop 35 7.3 Fancy Cursor Control 35 7.3.1 Overprinting 35 7.3.2 The Return Marker 36 7.3.3 Centering, Flush Left, and Flush Right 37 7.4 Controlling Word, Line, and Page Breaks 39 7.4.1 Controlling Word and Line Breaks 40 7.4.2 Controlling Page Breaks 41 8. Cross Reference, Bibliography, and Citation 42 8.1 Cross References 42 8.1.1 Text References: the @LABEL Command 42 8.1.2 Object References: the @TAG Command 43 8.2 Bibliography and Citation 44 8.2.1 Bibliography Files 45 8.2.2 Citations 46 8.2.3 Alternate Citation Styles 47 9. Changing Things 48 9.1 Changing Type Font: The @Font Command 48 9.2 A List of Available Fonts 48 9.3 The @Style Command 49 9.4 A List of STYLE Parameters 50 9.5 Miscellany 52 TABLE OF CONTENTS PAGE III 9.5.1 Changing Command Names 52 9.5.2 Changing Counter Values 53 10. Producing Large Documents 54 10.1 Breaking a Manuscript into Several Smaller Files 54 10.2 Separate Processing of Component Files 56 10.2.1 Component Files As Separate Documents 57 10.2.2 Separate Processing of Component Parts 57 10.3 Defining and Using Text Strings 59 10.3.1 The @String Command 59 10.4 Environment Inquiry: Predefined Strings 59 10.4.1 Internal Strings and the @Value Command 60 10.4.2 Current Values of Counters 61 10.5 File Names and the @Use Command 61 11. Epilogue and Sermon 63 I. A Few Examples 65 I.1 How to Make a Title Page 65 I.2 Equations and Cross References 66 I.3 Printing on Model Paper 68 I.4 Business Letters 68 II. The Format of Bibliography Files 73 Index 74