From 8aba8681861260506ff05b7abfb3c58e76d9f039 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Fri, 14 Jun 2019 08:14:47 +0200 Subject: [PATCH] R - typesetting software. Written in C by Alan Snyder. Later maintained by Eliot Moss. --- Makefile | 2 +- bin/r/ts.r42 | Bin 0 -> 479529 bytes build/misc.tcl | 9 + doc/info/rguide.info | 4855 ++++++++++++++++++++++++++++++++++++++++++ doc/programs.md | 1 + 5 files changed, 4866 insertions(+), 1 deletion(-) create mode 100755 bin/r/ts.r42 create mode 100755 doc/info/rguide.info diff --git a/Makefile b/Makefile index 0ba0e7bd..9604aa08 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,7 @@ DOC = info _info_ sysdoc sysnet syshst kshack _teco_ emacs emacs1 c kcc \ combat pdl minits mits_s chaos hal -pics- imlac maint BIN = sys1 sys2 emacs _teco_ lisp liblsp alan inquir sail comlap c decsys \ graphs draw datdrw fonts fonts1 fonts2 games macsym maint imlac \ - _www_ gt40 llogo bawden sysbin -pics- lmman + _www_ gt40 llogo bawden sysbin -pics- lmman r MINSRC = midas system $(DDT) $(SALV) $(KSFEDR) $(DUMP) # These are not included on the tape. diff --git a/bin/r/ts.r42 b/bin/r/ts.r42 new file mode 100755 index 0000000000000000000000000000000000000000..20445eed67fd79d9b04b1eafea4a71e8e741efff GIT binary patch literal 479529 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 r; ts rr +# .info.; r info -> r; r info +# .info.; r recent -> r; r recent +# r; r macros -> r; r30 rmac +# r; rmacro 1 -> r; r macros +# sys3; ts itype -> r; ts itype + # C library for drawing on a TV display. respond "*" ":cwd clib\r" respond "*" ":cc tv.>\r" diff --git a/doc/info/rguide.info b/doc/info/rguide.info new file mode 100755 index 00000000..a0135785 --- /dev/null +++ b/doc/info/rguide.info @@ -0,0 +1,4855 @@ +This is the file containing the INFO-ized documentation on using +R with its standard macro package. + +File: RGUIDE, Node: Top, Up: (DIR), Next: Generalities + +This file describes how to use R with its standard macro +package, and contains information on essentially all features +available. The earlier sections of this file deal with general +topics of using R, and explain some of the common things that +most R users need to understand (at least a little) to use R +effectively. We have tried to write all parts so that the +beginning user can glean enough information to get started, but +also so that the advanced user can get help on all but the most +arcane things. + +Whereas the goal of the R Reference Manual (see node +Documentation for pointers to documentation) is to explain +precisely everything in R, the goal of this file is describe +how to use things effectively. Another difference is that the +reference manual describes "raw" R, that is, R minus the macro +package, but it is the macro package that provides most of the +"friendly" features users exploit. Here we desire to explain +the use of the macro package as it is, and also how to tailor +it to do slightly different things. We also give some guidance +and lore on how to debug documents, and hints on writing your +own macros. However, to do all this, we must explain a lot of +things, many of which need not be understood by novices. + +Therefore, the sections are usually written so that they start +with simple cases, with simple examples that can be used almost +like recipes. Then they progress to explanations of what is +really going on and more advanced examples. Novices should +start at the beginning -- Generalities, since this gives a +brief orientation, and tells you about a number of simple +mechanical things. If just starting, you should also go +through the first four or five sections at least. Do not worry +if there are things you do not understand on first reading; +they should become clear as you start actually preparing +documents. + +Comments and suggestions on the form and content of this guide +would be appreciated. Send them to EBM@XX. + +* Menu: + +* Generalities:: This node contains such information as + where to find documentation, conventions + used in this file, the place of R in the + document preparation process, etc. + Also, how to report bugs, how to get on + the mailing list, etc. + +* Setup:: How to set up the beginning of your file + to use the standard macro package. + +* Input:: How R scans a file. In particular, how + to get 'funny' characters to work right, + etc. + +* Registers:: How string and number registers work. + This knowledge is necessary for you to + get anything other than the default + actions of the macro package. + +* Expressions:: How to write down numerical expressions, + including more complicated horizontal + and vertical measurements, such as "twice + the current indentation", etc. + +* Backslash:: The various roles of \ in R. + +* Justification:: A review of how filling and adjusting + work in R. The role of the space + character. + +* Fonts:: The various facilities for switching + fonts are described here. + +* Macro Invocation:: How to call macros. This describes how + to deal with getting special characters + into macro arguments, etc. + +* Page Layout:: How the standard macro package lays out + the page into vertical sections (top + margin, text area, bottom margin, etc.) + +* Line Spacing:: How R determines the distance between + lines, and how you can control it. + +* Line Layout:: How R lays out each output line, and + macro package facilities for setting + line margins. + +* Horizontal Positioning:: + How to control fine positioning of items + on the output line. + +* Text Features:: This discusses a raft of little, useful + things, such as super- and subscripting, + underscoring, overstriking, output + translation, and hyphenation. + +* Alignment:: How to get things on different lines to + line up vertically in various ways. + +* Sectioning:: The macros available for organizing a + document into chapters, sections, + appendices, etc. + +* Footnotes:: How to use the footnote facility. + +* Figures:: How to use the figure and table + facility. + +* Lists:: The facility for lists of things, e.g.: + + 1. This is the first item in a list. + + 2. This is the second item, and is a bit + longer, so it takes up more than one + line. + + The list facility is quite flexible and + powerful. + +* Table of contents:: How to get a table of contents, and how + to control its appearance. + +* Keeping:: How to keep things on a single line or a + single page. + +* Setoff Things:: Here we describe the facilities + available for setting things off in the + text. Examples of this kind of thing + are quotations, equations, program text, + and various kinds of pictures and + tables. + +* Math:: Here we describe the facilities + available for doing mathematical + equations and formulae, and give some + hints on how to go beyond what is + standardly available. + +* Columnar tables:: Introduction to methods of making tables + that consist of vertical columns that + must be aligned in a particular way. + +* References:: Introduction to the packages available + for producing bibliographies and keyed + references in running text. + +* Writing Macros:: Conventions and hints on macro writing + in general. Specific hints are + given in other places. + +* Debugging:: Some hints on how to debug problems + encountered. + +* Miscellaneous:: Some comments on things not discussed elsewhere. + +File: RGUIDE, Node: Generalities, Up: Top, Previous: Top, Next: Setup + +Here we give you some orientation as to what R does and to get +started using it. The next node, Setup, gives you tips on +organizing your input file. + +* Menu: + +* What R does:: R's place in the document preparation + process. + +* Documentation:: What is available and where to find it. + How to report bugs. How to get on the + mailing list. + +* Filenames:: Things you should know about how R deals + with filenames. + +* Output Devices:: Things you should know about using the + various output devices available with R. + +* Invoking R:: How to run R. + +File: RGUIDE, Node: What R does, Up: Generalities, Next: Documentation + +R is a text formatting program. Its place in the process of +preparing documents is illustrated by the following picture: + +you -> editor -> input file -> R -> output file -> output program -> document + | + +--> error messages + +The above picture means that the common way of preparing a +document involves these steps, in order: + +1. You prepare an INPUT FILE using your favorite editing +program. A FILE is a repository of data in the computer +system. The way most of out editors work, you simply type the +text in to the editor, and then when you think it is ready, to +give the editor a special command, telling it to write what you +have typed in, to a file on the computer system. You can also +edit files you have made before, to correct mistakes, add new +text, etc. The most commonly used editors are EMACS, RMODE, +and TED. + +2. You then run R, telling it to process the input file you +created with the editor. The term "invoking" means the same as +"running" in this context. People will say "Run R" or "Invoke +R" just about as readily. R then produces an OUTPUT FILE, and +possibly some error messages and other information. + +3. If there are no errors, then you invoke the appropriate +program to send the output file to the output device. Here are +the programs you would use for the most common situations: + + Device on ITS on TOPS-20 (XX) + + PRESS (Dover) DOVER, DOVR DOVERSEND (and DOVER, coming soon) + XGP XGP XGPSEND + LPT TPL + +If there are error messages, or the document does not have the +desired appearance, you back back to step 1, and create a new +input file that you think will work better. It may take doing +this half a dozen times to get rid of the "bugs" in a new +version of a document. + +R normally prints its error messages on your terminal as it +runs. However, it is often better to save them in a file, so +that you don't have to write down what is on your screen to +avoid losing the messages. See the section on invoking R for +information on how to do this. + +Some of the other text formatters available are: (Opinions +expressed are mine, but I have found many experienced users to +agree with most of these statements.) + + SCRIBE - has approximately the same capabilities as R, + and about the same strong and weak points. + Easier for the novice to use than R, but maybe + harder for the expert to get what s/he wants. + Can do single or multiple pass processing. + Not available on ITS at this time, maybe never. + TJ6 - a very simple minded, easy to use formatter, with + superficial similarities to R. Most people find + TJ6 too simple: there are too many things it + cannot do. Available only on ITS. + PUB - a powerful but often arcane formatter. Slower + than R, but it can do a few more things than R + can. Available only on ITS. + TEX - Good for mathematical things like equations and + tables, but not as easy to use as some of the + other formatters. Not as convenient as other + formatters on non-mathematical documents. + Available only on ITS + +In sum, R may not be for you. But you should know that R is +the only text formatter we have that runs under all our +computer systems. + +The diagram of the document preparation process that we drew +above is overly simple: sometimes one processes the input text +some before giving it to R, and sometimes one processes the +output file some before printing it out. An example of the +first situation is this: you can run a spelling checking and +correcting program (e.g., ISPELL) to find spelling errors +before running R. Some examples of the second situation are: +you may use a program that extracts only the pages that have +changed between versions of a document (e.g., @ or XGPDIFF), or +you may have to run RALP on line printer output (see node +Devices). + +File: RGUIDE, Node: Documentation, Up: Generalities, Previous: What R does, Next: Filenames + +The documentation on R itself consists of the R Reference +Manual. That document is pretty good for the experienced +and/or sophisticated user, but is tough going for the novice +(sort of like reading an encyclopedia!) The manual exists in +online readable form (suitable to read into a text editor, +etc.) as R;RDOC LPT on ITS, and DOC:R20.MANUAL on XX. To +acquire a nice looking copy, send MC:R;MANUAL PRESS to the +Dover. If you don't know how, talk to somebody who does. + +There is an R Primer in preparation by another person (Judi +Jones). That document should complement this one, in that the +Primer is something you can sit down and read all at once. +This guide goes farther, and is therefore longer. We recommend +that most parts be skimmed on first reading. Having two +different explanations of the same thing should help; we have +tried hard to make sure that the two documents do not say +contradictory or wrong things. + +Documentation on the macro package consists of this file, and +also R;RMACRO INFO (RMACRO.INFO on XX -- from now on, assume +the XX name is the one corresponding to the ITS name unless +told otherwise). Either file may be printed on your terminal +or a line printer. (This file is INFO;RMACRO INFO.) The other +file may be retired if this one works out. + +The macro package itself comes in two parts. By special +dispensation, the larger part, R;R30M RMAC, is pre-loaded into +R when you get it. The smaller part, R;R30 RMAC, is inserted +by R;R MACROS, and must be read every time. It activates the +larger package, and helps in option selection. However, if you +desire to inspect these file, you should look at these +versions: R;R30M RML and R;R30 RML. (RML = R Macro Language.) +The difference is that the RML files are nicely indented and +have comments, whereas the RMAC files have been compacted by +throwing away the indentation and comments. If you want to +write things in the "R Macro Language" yourself, you should +realize that R will not accept them as they are, because the // +comment form is not understood by R. You can use ^K instead of +//, or you can convert your RML file to an RMAC file using the +TECO macro in R;RML >. For XX users, there is a program in +RML.EXE that will do the job; just type RML file-name, +and it will create a new file, with second name RMAC, with the +compacted version in it. + +Documentation on auxiliary macro packages is usually included +as comments in the beginning of the file containing the extra +macros. + +There is a mailing list, INFO-R, to which messages concerning +changes to R and the standard macro package are sent. If you +wish to be added or removed from that list, send mail to the R +maintainer (currently EBM@XX). + +The file R;R ARCHIV contains a record of all changes made to R +in recent history (it goes back several years), except the most +recent changes, which are described in R;R RECENT. + +R;RMACRO RECENT contains information about recent changes to +the standard macro package. R;R STATS gives a summary of R +usage from the time R began, by user, in order of amount of +stuff processed. + +The primary home of all R files and documentation is XX; ITS +and other versions are updated from there. + +Complaints, suggestions, and problems may be referred to the +maintainer (EBM@XX), by sending mail directly, or by using +:BUG R on ITS (which is the same as :MAIL BUG-R@AI). Please do +what you can on your own first! See the node on Debugging for +hints. + +File: RGUIDE, Node: Filenames, Up: Generalities, Previous: Documentation, Next: Output Devices + +Read the section pertinent to your system, and then read the +note at the end. + +On ITS: + Full filenames on ITS have the form: + device:directory;name1 name2 + In the .so command of R, you may + omit device: if it is DSK: + omit directory; if it is your directory, or R; + omit name2 if it is >, R, or RMAC + In the .fo command of R, you may + omit device: if it is DSK: + omit directory; if it is your directory, FONTS;, + FONTS1;, FONTS2;, XFONT;, or R; + omit name2 if it is KST + NOTE: In the command line, filenames may NOT have spaces + in them. Thus, ':r foo >' will NOT do what you might + expect! However, the second name need not be given if + it is R, RMAC, or >. If you must supply a second name, + there are two ways: + :r "foo bar" -- put the file name in double quotes + The other way involves a different format of filenames, + and is explained in the reference manual. + +On TOPS-20: + Full filenames on TOPS20 have the form: + device:name1.name2.version + In the .so command of R, you may + omit device: if it is DSK: + omit if it is your directory or PS: + omit name2 if it is R or RMAC + omit version it is the most recent one (0) + In the .fo command of R, you may + omit device: if it is DSK: + omit directory; if it is your directory, + PS:, PS:, PS:, + PS:, or PS: + omit name2 if it is KST + omit version if it is the most recent one + +NOTE: To make files more easily portable from system to system, +you should try to arrange things so that you can omit the +device, directory and name2 fields in as many cases as +possible. R was purposely designed to make this easy in most +cases. For example, unless you made up a font file yourself +and gave it a funny name, you never need to state the device or +directory for a font. Similarly, it is conventional to set +your input file's name2 to be > on ITS (R on XX), and to use a +name2 of >, R, or RMAC for auxiliary input files. If you do +so, then you will not have to state the name2 to R. Since +almost all files will be in your directory or the R directory, +this means that most of the time you need only state the name1 +of the desired file. In the cases where you need name2, +writing the filename as name1.name2 works on all systems. +There is no nice way to include a directory or device that can +be read on all systems with no changes. Therefore, we suggest +that you omit as many of the filename fields as you can. + +File: RGUIDE, Node: Output Devices, Up: Generalities, Previous: Filenames, Next: Invoking R + +R can produce output for several different printing devices. +These devices are distinguished mainly because to get the same +appearance of an input file on different devices requires +different instructions in the output file which is sent to the +device. Another reason for distinguishing the devices is their +different capabilities. For example, the XGP, Dover, and +Varian all support multiple fonts with characters of varying +widths. The Diablo supports a single font, but can do +relatively fine grained positioning on the page, and line +printers have a single, coarsely positioned font. (Font means +typeface.) + +R is designed so that it is comparatively easy to make up a +single file that can be output on several different devices by +just telling R what device you want. Of course, R can't do +anything about some devices not having the special characters +you may want, but with a little care, on can often get +reasonable drafts from less fancy devices. + +When R produces output for a given device, the name2 of the +output file is set to the device name. For example, if your +input file is called FOO.R, and you produce output for the XGP +device, the output file will be called FOO.XGP. The only +exceptions to this rule are the Diablo device and 12 pitch line +printer output; see the reference manual for details. + +Below is a list of the devices and their interesting +properties. See also the Setup node and the Invoking R node. + +LPT - line printer. A single font, fixed character width +device. Generally, files produced for the LPT are also +suitable for inspection with a text editor. This is often +helpful in debugging. Although you only get one output font, +you can have R mark things supposed to be in different fonts by +underscoring them, printing the characters several times (to +darken their appearance), or capitalizing them. See .FO in the +reference manual for details on that. + NOTE: the macro package assumes that LPT files will be +printed by a program on the operating system, and makes certain +adjustments not described in the reference manual. If this is +a problem, set the number register LPT_HACK to 0 before loading +the macro package. + NOTE: if you use superscripts, subscripts, or related +things, R will give you a message "postprocessing needed". In +such cases you should run RALP (random access line printer). +Just type + :RALP FOO where FOO is the name of your input file +(RALP FOO on TOPS-20, etc.). + +PRESS - press file. This is the format accepted by a number of +devices constructed by Xerox Corp., including our Dover (but +NOT the XGP, also made by Xerox). This supports multiple fonts +and very fine positioning (units of 10 millionths of a meter in +theory, 384 dots to the inch on the Dover). Press fonts are +those available on a special list (see FONTS;DOVER FONTS). +There may be a complete catalog of these available sometime; a +few copies of a limited catalog might still be available from +Anne Rubin in Room 529. Unfortunately, the fonts available for +the XGP and the Dover are different, even similar ones have +different names. The first 1/3 of an inch (at the top of the +page) cannot be used (hardware limitation). + +XGP - Xerox Graphics Printer. Capabilities similar to the +Dover. Output quality is not as good, and printing is much +slower on the XGP, but many more fonts are available, and it is +easier to make up new ones than for the Dover (it is almost +impossible for the Dover). Each font comes from a different +file, so the fonts are specified by giving the name of the file +containing the font. Most of these fonts live in FONTS, +FONTS1, and XFONT, with some "personal" ones in FONTS2 and +elsewhere. The old catalog is out of print. A new catalog +will be available after the ongoing font reorganization is +complete. The XGP device cannot go up the page; all other +devices can, more or less. + +VARIAN - Varian printer/plotter. This has almost exactly the +same properties as the XGP, including the available fonts. It +is connected to the 4th floor 11/70 UNIX system. You should +talk to them for more information. + +DIABLO - Xerox 1700 terminal (Diablo mechanism) - This is +similar to a line printer in that is has only one, fixed width, +typeface, but it can do fine positioning both horizontally and +vertically. Output is very sharp with a carbon ribbon. See +the file R;DIABLO INFO for more information on using the Xerox +1700 on the 5th floor. + +File: RGUIDE, Node: Invoking R, Up: Generalities, Previous: Output Devices + +In this node, we discuss the command line in general, list the +specific options and flags available, and, at the end, give +some special notes for ITS and TOPS-20 users. + +Using the command line. + + When you run R, you do it by typing the name of R +(e.g., "R") followed by the name of your input file. For +example: + + (ITS) :r foo + (TOPS-20) r20 foo + +This handles many common situations, but there are a number of +options you can specify. Most options are FLAGs. A flag is +one or two letters, preceded by a dash (-), with the whole +thing separated from anything else on the line by spaces. For +example: :r foo -x -s + +The flags are discussed in three groups below. In addition to +the filename and flags, there are two other things that may +appear on the command line. One is a request to send the error +messages to a file instead of the terminal screen. To send +error message to the file foo.bar, put >foo.bar at the END of +the command line. For example: + :r foo -x -t >foo.err + +The other kind of thing that may appear on the command line, is +an initial setting of a number register, like this: reg=value. +Here is an example: + :r foo -x figure_debug=1 + + +Device options: + + You can override any .dv in your file and get R to +produce output for a particular device by putting the right +flag in the command line. Here are the flags for each device: + -p Press + -x XGP + -l LPT + -di DIABLO + -v VARIAN + + +Miscellaneous options: + -s prints extra statistics + -t does a TRACE of the execution (see node Debugging) + -d debug -- causes some extra output regarding + figures, footnotes, etc. (see node Debugging) + + +Pitch and Lines per inch options: + + You can override the default pitch and/or lines per +inch, or any .pi or .lp commands in your file, by putting the +right flag in the command line. This is useful mainly for the +Diablo device, but pitch applies to to the LPT device as well. + -10p use 10 pitch (10 characters to the inch; Pica) + -12p use 12 pitch (12 characters to the inch; Elite) + -6l use 6 lines per inch as single spacing + -8l use 8 lines per inch as single spacing + + +Special things to know on ITS. + + Don't forget that filenames in the command line cannot +contain spaces! This includes both the input filename and the +name of the file to receive error messages, if any. If this is +a problem, see node Filenames for a way around it. + +Special things to know on TOPS-20. + + Because "R" is a command on TOPS-20 (meaning "run the +program whose name follows"), R is called R20 on TOPS-20. So, +you might invoke R this way: R20 foo -p >foo.errors + +File: RGUIDE, Node: Setup, Up: Top, Previous: Generalities, Next: Input + +If you are new to R, I suggest you put the lines shown below at +the beginning of your file, until you understand better what it +all means. (It is explained below, but it may take using R for +a while until you will understand it.) + +.dv press +.if press +. fo 0 TimesRoman12 +. fo 1 TimesRoman12b +. fo 2 TimesRoman12i +. fo 3 TimesRoman18 +.else +. fo 0 times.12rom +. fo 1 times.12bold +. fo 2 times.12ital +. fo 3 times.18rom +. end if +.tr @ +.so r.macros + + +The .DV line means that your default device will be the Dover +(Press file format). The ".if press" says if the device really +is PRESS (you can override it in the command line; see node +Invoking R) then continue with the immediately following .FO's; +otherwise, continue from the .ELSE. This used to get one set +of font definitions when you use the Dover, and another set +when using the XGP (or any other device). This is really the +only way to do it. + +The .FO lines define four fonts: + font 0 - a normal text font, I have given you Times + Roman, 12 point (1 point = 1/72 inch; points are + a standard unit of measurement in typesetting). + font 1 - a bold font, set to match the normal font + font 2 - an italic font, also matching the normal font + font 3 - a big font, for chapter headings, etc. + +You may use any fonts you like, of course, and you may define +more, to get special symbols, greek characters, etc. But the +standard macro package always assumes that font 0 is a normal +font, font 1 is a bold font, font 2 is an italic font, and font +3 is a big font. For the diablo or lpt, it does not matter at +all what fonts you put down, but you must put something down +for these 4 fonts. For more about fonts, see node Fonts. + +The .TR command sets things up so that the character '@' will +print as a space instead of an @. Now that may not sound +useful, but it is, because the space character, ' ', does not +exactly print as a space, but usually means "put some white +space here, or, if you are close to the end of a line, start a +new line". The node Input starts to explain the difference, +and node Justification explains this particular case in detail. + +The .SO command activates the standard macro package. It turns +out that most of the macro package is loaded into the R that +you run, since it takes a while to read it into R, and people +use R all the time. BUT! you must still turn it on by reading +a smaller file that starts things off. You must have no text +or blank lines before this .SO. + +The above setup gives you the standard macro package with its +default options. If you decide there are things you don't like +about some feature or other, consult the appropriate section, +to understand what things can be adjusted, and how. Then, you +may wish to insert some lines to override the default options. +These lines should go just before the .SO above. You will most +likely have to read up on string and number registers (next +node) and possibly input processing (Input) to understand how +to get what you want. + +File: RGUIDE, Node: Input, Up: Top, Previous: Setup, Next: Registers + +This node describes things you should know about how R +processes your input file. + +At all times, R reads a character at a time from some place, +until it reaches the end of your file. The various places R +can be reading from include: + + Files + String and number registers + Macro bodies + Macro arguments + and a few other internal sorts of things + +For example, when R reads the setup described in the previous +node, it is reading from your input file, from the beginning to +the end. However, when it sees the .SO, it starts reading from +the named file (R.MACROS). Then, when it reaches the end of +that file, it returns to where it left off in your file. This +process can be carried to MANY levels (about 20-30 in the +current R). The reference manual refers to this changing of +where R reads from as "input stream switching". + +The next thing to understand is that except for stream +switching commands, which effectively disappear, the characters +read are grouped into lines, which are processed one at a time. +Normally each line that you type becomes a single input line; +if you find yourself typing a lot of long lines, read up on the +line continuation feature in node Continuation lines. + +There are two different kinds of input lines: + + Requests and macro invocations, and + Text + +Requests and macro invocations are readily recognizable: they +are the lines that start with "." or "'". For example, the +line + .dv press +is a request line. The request is the thing following the "." +(dv in this case), and the rest of the line forms the ARGUMENTS +to the request. Of course, the meaning of these arguments +depends on the request. + +Macro invocations LOOK exactly like request lines. The only +distinction is that requests are built-in, and macros are +written in terms of requests. This distinction is not very +important, but it may help you to know the two terms. Here is +an example macro invocation: + + .chapter "Title of Chapter One." + +Text lines are line that do not start with "." or "'", and +most, but not all, characters on a text line will appear in the +output. Let us examine the situation here in more detail, +since you may need to know most of this to construct good input +files. + +Assume R encounters an ordinary character, say "D". What R +will do is put something in the output file that tells the +output device to print whatever corresponds to a "D" in the +current font. We phrased the previous sentence in a somewhat +awkward way to make a point: just because you have a "D" in +your input file does not mean that the appearance of the +character will be that of a "D". In fact, R knows nothing +about the actual appearance of characters at all! R only knows +how big they are, so it can figure out where to put them on the +page. + +Some characters that appear in the running text are used to +tell R to change what it is doing in some way. These +characters are the CONTROL CHARACTERS. They are called control +characters both because they control R's behavior and because +most of the particular characters in question are normally +typed as ASCII control characters. An example is ^F +(pronounced "control F"), which is used to change the current +font. NOTE: we write control characters as two characters in +this document (an "^" followed by a letter) to avoid certain +mechanical difficulties, but "^" followed by "F" is NOT the +same as control-F. + +Control characters bring us straight into a thorny problem, +however. Fonts can have characters associated with ANY of the +ASCII characters, including the ASCII control characters -- how +can we possibly get the symbol corresponding to a ^F if ^F +means change fonts? What we do is this. Inside R there are +two kinds of control characters, which we will call the R +CONTROL CHARACTERS and the TEXT CONTROL CHARACTERS. An R +control character performs a special function, such as ^F +changing the font. A text control character causes a character +to be added to the text output. + +When a control character is written by itself, it is taken as +an R control character, i.e., it performs its special function. +However, the R control character ^Q has the particular function +of taking the next character, no matter what that character is, +and turning it into a text control character. In sum, ^F means +change fonts, and ^Q^F means output the character corresponding +to ^F in the current font. ^Q^Q, therefore, is the way to get +a text control-Q, etc. + +NOTE: most editors require a special command for you to get a +control character into your file, and that command is usually +^Q. For example, to get a ^F into your buffer, you must type +^Q^F in most of our editors. Further, to get ^Q^F into your +buffer, you must type ^Q^Q^Q^F, etc. To get a ^_ or ^Z into +your buffer on ITS requires more devious means -- ask somebody. +(The same holds for getting ^C into your buffer on TOPS-20.) +Fortunately, these characters are almost never used. + +NOTE: for some help on techniques to ease problems with +characters that are hard to type, or hard to get R to accept +(e.g., ^J, ^M, and ^L) see the discussion of escape characters +in node Backslash. + +For completeness here is a list of the R control characters: + + ^A, ^B, ^C, ..., ^Z the ASCII control characters + \ + space that is, " " + . and ' when appearing at the beginning of a line + (So, to get a . at a beginning of a line, write + "^Q.".) + +Most of these are explained fairly well in the R manual. You +should definitely read about the control characters ^A through +^Z. You already know that control-. and control-' are used in +request and macro invocation lines. Control-\ is explained in +node Backslash, and Control-space is explained in node +Justification. + +Additional Features: + Normally control characters in the input turn into the +corresponding R control characters. You may use the .CC and +.NC requests to change the exact mapping, however. + + .cc c p - causes the input character "p" to become an R + control "c" + + .nc p - causes the input character "p" to become a text "p" + +You might also be interested in reading the description of +escape characters in node Backslash. + +File: RGUIDE, Node: Registers, Up: Top, Previous: Input, Next: Expressions + +R has NUMBER REGISTERS and STRING REGISTERS, which are very +useful. It is hard to give an easy to understand explanation +of exactly how they work, but they turn out to be easy to use +in the common situations. Let us consider an example. + +Say that you find you are typing ^F5^Q^N^F... quite a lot, +because it is a special character used many times in your +document. Let us say that it is a summation sign (capital +sigma). You can define a string register to give you a handy +abbreviation for that: + .sr sum ^F5^Q^N^F* +Then, wherever you want the summation sign to appear, just +write "^Ssum". The .SR command ("string register") has two +ARGUMENTS, a name for the string register ("sum" in this case), +and the stuff to put in it. The name begins after the space +after the .SR, and continues to the next space. Register names +(this holds for number registers, too) can have only these +characters in them: A through Z, 0 through 9, and _. Case +(upper or lower) is ignored. + +The stuff that goes into a string register starts with the +first non-space, non-tab character and continues to the end of +the line. If you need the first character of the stuff in a +string register to be a space or a tab, precede it by a +backslash. For example: .sr foo \ abc + +The above puts space, a, b, c into the string register FOO. If +you want to set a string register so that it has nothing in it, +then just put nothing after its name, e.g.: .sr foo + +Whereas as string registers hold strings (a technical name for +a bunch of characters), number registers hold numbers. Number +registers hold whole numbers (integers) only, and positive and +negative numbers are allowed. The biggest number you can put +into a number register depends upon what computer system you +are using, but is always at least 15000. As we saw before, the +contents of a string register can be made to appear by typing +^S followed by the string register name. To get the value of a +number register to appear, we use ^N followed by the number +registers name. Similarly, we use .nr to set a number +register. Here is a simple example: + .nr foo 105 + The serial number of the stolen item was ^Nfoo. + +What will appear in the output is: + The serial number of the stolen item was 105. + +The particular example above could have been done with a string +register. The important thing about number registers is that +you can use them to make calculations, to count things, etc. A +simple example is that the macro package has a number register +named chapter that always holds the number of the current +chapter. This is nice because it lets us write down once the +format for the header line of a new chapter: + ^Nchapter. ^Schapter_title +Instead of writing that down in each place, we do this: + .sr chapter_form \^Nchapter. \^Schapter_title +The exact meaning of the backslashes is made clear in node +Backslash, but suffice it to say that if you leave them out, +you will certainly not get what you want. Anyway, when we want +the line to come out, we can just do: + ^Schapter_form +and the chapter number and title will come out. + +Number registers can also be inserted as Roman numerals (upper +or lower case), or alphabetics (1 => A, 2 => B, 3 => C, etc.) +by putting a special character just after the ^N. See the +reference manual's description of ^N for a list of these. + +Similarly, string registers may be inserted in upper case, +lower case, or capitalized (first letter upper case, rest +lower) by putting a special character just after the ^S. +Again, we refer you to the reference manual for details. + +IMPORTANT: Remember how we describes R as reading a character +at a time in node Input? Well, when a ^N or ^S is encountered, +R reads along until it finds a character that cannot be part of +a register name. All the characters is has read between the ^N +or ^S and that point are grouped together to make a register +name, and then the value of the register is looked up. There +are some problems you might encounter because of the way this +works. For example: + .nr foo 100 + 10 times 10 times 10 equals ^Nfoo0. +In this example, R will try to look up a number register called +foo0, and will NOT try to find foo. The way out of this +problem is to write the second line like this: + 10 times 10 times 10 equals ^Nfoo!0. +We say that the ! TERMINATES (ends) the register name. By +special dispensation, the ! is thrown away. Therefore, + .sr foo BAR + And I say FOO ^Sfoo! +will print as: + And I say FOO BAR +Whereas + And I say FOO ^Sfoo!! +will print as + And I say FOO BAR! + +One final situation should be mentioned, which is less common, +but you might need to know about it. It is possible to read +part of the name of a register from another register: + .sr b bar + .nr foobar 1000 + 10*10*10 = ^Nfoo^Sb. +will print as: + 10*10*10 = 1000. +You may need to use ! in such situations. Here is a hairy +example for you to think about: + .sr b bar + .sr f foo + .sr foobar form + R is a text ^S^Sf!^Sb!!atter. + +File: RGUIDE, Node: Expressions, Up: Top, Previous, Registers, Next: Backslash + +An expression is a way of writing down a little computation for +R to perform. Expressions are used in many requests. Some of +these requests, for example, .NR, are looking for just a +number, and others are looking for a description of a +horizontal or vertical distance. (Horizontal and vertical +distances are distinguished mainly because they involve +different actions on the part of output devices.) + +The simplest thing you can put in an expression is a number, +such as 1, or 2.5, or .001, etc. If the situation calls for a +whole number, R will round the expression to the nearest whole +number for you; halves round down. + +The next simplest thing you can put in an expression is the +name of a number register. It will be treated as if you put a +^N in front of it. Note that there are occasions where you +must put an ! after the number register name to show R where it +ends (see node Registers for more information on this use of +!). + +Beyond simple numbers and number registers, you can compute and +combine expressions into larger expressions using the various +OPERATORS. The reference manual has complete details, but here +are some of the highlights. + + +, -, *, / stand for addition, subtraction, + multiplication, and division + +, - may also be used in the sense of +1, -1, -n, etc. + parentheses, ( and ). may be used to group parts of an + expression, e.g., (a+b)/(c+d) + +No spaces should appear in an expression. + +Besides computing numbers, expressions can be used in the sense +of logical or truth values; 0 means false, and not 0 means +true. For example, .if press says go on if "press" is true, +namely, if the number register press is not 0, which happens +only when the output device is Press. Here are some of the +operators used this way: + ==, ~= return 1 (true) if the left-hand and + right-hand expressions are equal (==) or not + equal (~=), and return 0 otherwise. + <, <=, >=, > return 1 if the left-hand expression is + less than, less than or equal, greater than or + equal, or greater than the right-hand + expression. + &, | returns 1 only when both (&) or at least one (|) + of the left- and right-hand expressions is true + ~ returns the opposite truth value, i.e., it means + "not", as in ~(a&b) + +Here are some examples taken from the macro package: + + .nr chapter chapter+1 + .if toc_level>0 + .if ~ignore_level (a trick; the same as .if ignore_level==0) + .if table_of_figures&~ignore_level + .if (last_fig_pos~=vpos)|(last_fig_page~=page) + .nv one_line ls*fheight/100 + +Horizontal and Vertical Expressions: + + These consist of a regular expression, possibly +followed by a letter to indicate some measurement unit, e.g., c +indicates centimeters. See nodes Page Layout and Line Layout +for more details on these units. Here are some examples to +show what you can do: + .sp (fheight+100)m + .hp ll-rindent!m + ^V(+delta1!m) + .hs -(wid1+wid2)/2m + + +File: RGUIDE, Node: Backslash, Up: Top, Previous: Expressions, Next: Justification + +This node may (and perhaps should) be omitted on first reading. + +The \ characters turns into R control-\ when read, unless +quoted with ^Q (see node Input for that discussion). The +purpose of the R control-\ character has not been made clear, +however. It turns out that there are four distinct uses of \ +in R: + as a text character (when quoted with ^Q) + to indicate ESCAPE CHARACTERS + to PROTECT R control characters + to indicate continuation lines + +* Menu: + +* Escape characters:: How to make a convenient abbreviation + for a hard to type character; how to get + a text ^J, ^M, or ^L. + +* Protecting:: A discussion of protected control + characters; essential for advanced work. + +* Continuation lines:: How to get continuation lines -- a real + convenience feature. + +File: RGUIDE, Node: Escape characters, Up: Backslash, Next: Protecting + +Escape characters provide a convenient way of writing down +characters that are otherwise hard to type. There are 26 +escape characters, called escape-A, escape-B, ..., escape-Z. +They are written \a, \b, ..., \z (you can use upper case +letters if you like, but they mean the same as the lower case +letter). The .EC command is used to say what character you +want a particular escape character to really be. For example: + + .ec c ^C + +will cause \c to mean ^C (that is, R control-C) whenever it is +seen in the input. Most escape characters mean nothing when R +starts, and it will print an error message if you use them. +However, the following are pre-defined, because it is +impossible to get them otherwise: + + \n as text ^J (n for newline) + \r as text ^M (r for return (carriage return)) + \p as text ^L (p for page (form feed)) + +It is not recommended that you try to get these characters any +other way -- it may work on some systems and not others, +because different combinations of these are used to indicate +line boundaries. + +File: RGUIDE, Node: Protecting, Up: Backslash, Previous: Escape characters, Next: Continuation lines + +Here we describe the primary use of \ in macros and string +registers, which is to "protect" control characters, i.e., +prevent the control character's action from being performed +until the right time. This is best explained by means of some +examples that illustrate the problem that \ is intended to +solve. + +We take our first example straight from the standard macro +package. There is a string register named center_heading that +is inserted (using ^S) in the middle of the top of the page, to +print a heading. Normally it prints: + - page - +where page is the current page number. Now, consider how we +might DEFINE center_heading originally. Here is a try: + .sr center_heading - ^Npage - +This is a good try, and shows some understanding of how string +and number registers work. However, it will result in this +being printed at the top of every page: + - 1 - +The problem is that the value of the number register "page" is +sampled at the time the string register "center_heading" is +defined, so center_heading's contents turn out to be "- 1 -" +instead of "- ^Npage -". What we need is a way of saying "I +want to put a ^N into the string register, not look up the +number register right now". That is exactly the function of \. +Here is the correct way to set center_heading to get the +desired effect: + .sr center_heading - \^Npage - + +Now you may be able to understand an earlier word of wisdom +that we asked you to take on faith, namely: + .sr foo \ abc +puts a space, a, b, and c into string register foo. What you +are getting is a protected control space. A protected control +space is clearly not the same as a control space, and it is +control spaces that are skipped between the arguments to a .SR. +So now you should understand both why the \ is required, and +why it works. + +Backslashes can be used to protect ANY R control character from +being INTERPRETED (interpreted means being gobbled and causing +a special action), however it is needed only in the cases where +the control character would be interpreted anyway. The +reference manual explains the exact situation in more detail, +but the only control characters that commonly require +protection are ^N, ^S, and ^A. Sometimes you might have to +protect a control-., control-', control-space, control-I (tab), +control-J (newline), ^Q, or ^K, but those situations tend to be +more rare. + +Multiple backslashes. + + Occasionally it is required to put more than one \ in +front of a control character. Here is an example: + .sr heading ^Sleft_heading^C^Scenter_heading^R^Sright_heading +This is supposed to set up a single string register so that +when inserted with ^S it will print the left heading on the +left, the center heading centered (the ^C centers stuff), and +the right heading flush against the right edge (^R does that). +But those headings are each defined separately in different +string registers. Once again we run into the problem that if +we do: + .sr center_heading - \^Npage - +we will not get nice headers. The reason is that although +center_heading has "- ^Npage -" in it, when we put +center_heading into heading, the characters are read again, and +the ^N will be interpreted, resulting in heading containing +this: ...^C- 1 -^R... which is not what we wanted. One +solution is to define center_heading this way: + .sr center_heading - \\^Npage - + +We say that the ^N is protected TWICE in this case. R is +willing to let you protect a control character many times (at +least 9, anyway). In general, something may be read many times +if it is moved from register to register, and it is necessary +to know how many times it is moved in order to get the number +of \'s right. + +Because this is inconvenient to do, and makes changes hard, +another feature was introduced to make doing this kind of thing +easier. If the ^S used to insert a string register is followed +immediately by a ":", then every control character in the +string has an extra \ put in front of it before it is inserted +in the input stream. This prevents interpretation of any +control characters in the string, and means that the initial +setup requires just one backslash. Here is the example above +reworked with this ":" feature: + .sr center_heading - \^Npage - + .sr heading ^S:left_heading^C^S:center_heading^R^S:right_heading + +You should know that there are cases where multiple backslashes +are still needed; however, these generally occur in more +sophisticated things, such as macros that define macros, etc. + +File: RGUIDE, Node: Continuation lines, Up: Backslash, Previous: Protecting + +If you put "\!" at the end of a line, then the \, !, and the +newline all disappear from R's input, as if they were never +there. This is convenient when you have long request lines, or +long lines in nofill mode, etc., where it is important that R +THINK that the input is all on one line. However, when R tells +you a line number, as in an error message, the number is the +real line number in the file. This makes it easy to find the +relevant place in your file. \! can be used to throw away ANY +immediately following character, but I have never thought of +anything that is useful for except continuation lines. + +File: RGUIDE, Node: Justification, Up: Top, Previous: Backslash, Next: Fonts + +There are several sub-topics here, indicated in the menu below: + +* Menu: + +* Filling:: Fill vs. Nofill mode + This describes how R decides what to put on each + output line. + +* Breaking:: What happens when R decides it is time to start + a new output line in fill mode. + +* Adjusting:: This describes what R does with the stuff on an + output line once it has accumulated it. The + most interesting part is the process commonly + known as justification, in which spaces are + widened to give straight edges for text on both + the right and the left. + + +File: RGUIDE, Node: Filling, Up: Justification, Next: Breaking + +In NOFILL mode, each output line corresponds to exactly one +input line (except for continuation lines; see node +Continuation Lines). That is, lines are not FILLED out with +words from succeeding lines to try to make them reach to the +right margin. Nofill mode is appropriate for tables, program +code, diagrams, etc. It is often used for title page +information as well. + +In FILL mode, words from more than one input line are +accumulated so as to fill out the space from the left margin to +the right margin, as closely as possible without overflowing. +Fill mode is used for normal text. The newlines at the end of +each input line are turned into justifiable spaces (R +control-spaces, that is). If you have a period, question mark, +or exclamation point at the end of an input line, an extra +space is inserted, because it is accepted style to separate +sentences by two spaces instead of one. You should not leave +spaces at the end of input lines unless you really want them in +the output, because they will not be thrown away unless the +line just happens to break there. + +If an input line starts with a space, tab, or ^P in fill mode, +then any partial line is output before that input line is +processed. The same holds for a blank line. So, for items +indented by hand with spaces, tabs, etc., you do not have to go +to nofill mode or put in .BR's to suppress filling from line to +line. To get rid of the line break caused by putting a space or +tab at the beginning of a line, you may do one of three things: + + Rearrange the input so that none of the affected lines + starts with a space, tab, etc. + + Use continuation lines to make the lines look like a + single input line to R (see node Continuation Lines). + + Use ^G to glue the two lines together. The ^G may be + placed at the end of the line preceding the one that + starts with spaces, or at the very beginning of the line + starting with spaces (before the spaces). + +Details of what happens when a line is broken are presented in +the next node, Breaking. + +To get into fill (nofill) mode, the .FI (.NF) request is used. +These requests permit you to set the adjustment mode at the +same time (see node Adjusting). Another way to control filling +is the FILL number register. In many cases the number register +is the appropriate thing to use when writing a macro (see +Writing Macros). + +File: RGUIDE, Node: Breaking, Up: Justification, Next: Adjusting, Previous: Filling, Next: + +Breaks happen in two ways: + + 1. when a line gets too much text on it in fill mode, + and must be broken to start a new line; and + + 2. when any partial line is requested to be output, so + that the next line will start fresh. + +The second kind of break happens as a "side-effect" of a number +of requests. Such requests are said to "break". For example, +the .SP request, which is used to generate white space, is a +breaking request. The idea here, as with most breaking +requests, is that you probably want any partial line output +BEFORE the space rather than AFTER it. All requests that +break, cause the break before they do anything else. To +suppress the break, precede the request with ' instead of ".". +For example, 'SP will not break, where .SP will. It is +considered good style to use "." everywhere, except those +places where you really need to suppress a break. + +The second kind of break also happens when a blank line, or a +line starting with a space, tab, or ^P is encountered. Again, +it was done this way because it is usually what you want. Node +Filling mentions ways of suppressing this. + +The first kind of break, the kind caused by overflowing a line +in fill mode, is different from the second kind of break in two +main ways. First, it is determined implicitly by R, as it +computes how big each letter, etc., is. Second, after deciding +where to break the line, the text on the line to be output is +justified according to the current adjustment mode (see the +next node, Adjusting). + +About spaces: + R will not break a line in the middle of a text word, +but will break it almost anywhere else. In particular, R will +break at a control-space (which is what the space character +normally turns into -- see node Input). One way to prevent a +break at a bad place is to use a text space instead of a +control space. This can be done by writing "^Q ", but most +people use .TR to TRANSLATE some other character to a text +space when output. Node Setup suggests that you include the +line ".tr @" in your setup, which will cause @ to be translated +into a text space on output. That way you can write @ wherever +you want a space that will not be broken. For example, "foo +bar" may be broken in the middle, but "foo@bar" will not. +However, you should know that it is control spaces that are +widened during adjustment (see node Adjusting), and text spaces +will not be widened. If you need more sophisticated behavior, +see nodes "Math", and "Writing Macros", for techniques that may +be used to build up formulae or expressions that you do not +want broken in the middle. + +File: RGUIDE, Node: Adjusting, Up: Justification, Previous: Filling + +Once R has determined what items will go on a particular output +line, that line may be JUSTIFIED before being output. There +are several different ways this can be done, and they are +controlled by the current ADJUSTMENT MODE. Let us first +discuss the effects of the different adjustment modes, and when +adjustment will and will not be done, and then describe how to +set the adjustment mode. + +R has four distinct adjustment modes: + + LEFT adjusted - The line is output against the left + margin, and spaces are not widened. This leads + to a ragged right edge. + RIGHT adjusted - The line is output against the right + margin, and spaces are not widened. This leads + to a ragged left edge. + CENTERED - The line is output centered between the + margins; both edges will be ragged. + BOTH - Spaces in the line are widened so that the edges + of the line come just to the margins. This is + what most people refer to as justification. + NOTE: only control-spaces are widened; text + spaces are considered to be part of words are + not disturbed. + +The adjustment modes are entirely independent of fill vs. +nofill mode: all eight combinations of fill and adjust modes +are legal, though some are not very useful. Here are the most +useful ones: + + fill both - used for most text + nofill left - the usual usage of nofill mode, for + diagrams, programs, equations, etc. + nofill center - often used to center one or a few lines + for a header, title page, etc. + +Fill left is sometimes useful for things that look better with +a ragged right edge than with big spaces between the words. +Bibliographies have a tendency to look better in fill left than +in fill both. + +The other four combinations, nofill left, nofill both, fill +center, and fill right, just do not seem to be very useful. + +R performs adjustment of every output line except those output +in fill both mode by an explicit break. (An explicit break is +the type of break labelled by a 2 in node Breaking.) +Adjustment is suppressed in this case so that the last lines of +paragraphs will not be stretched out across the whole line. + +If you use center or right adjustment in combination with tabs, +^P, or other absolute positioning requests, the result you get +is hard to describe, and probably not what you want. So, you +should simply avoid doing that. + +The ^C and ^R characters provide a more powerful way to center +and right-flush items, even within columns in a line. See node +Line Layout for more details. + +Setting the Adjustment mode. + + R actually remembers the last adjustment mode used with +fill mode, and the last one used with nofill mode, separately. +If you use .FI or .NF with no argument, or set the FILL number +register, the adjustment mode changes automatically to the last +adjustment mode you used with whatever fill moe you are going +to. On the other hand, you may give an argument to .FI (.NF) +to have to the fill adjust mode (nofill adjust mode) set +explicitly. That argument consists of a single letter, one of +L, R, C, and B. For example: + .nf c + .fi B + .nf L + .fi l +and so on. The best style is probably to set the adjust mode +every time, so you don't have to remember what is was before, +but it is a matter of personal taste. + The fill adjustment mode starts as "both", and the +nofill adjustment mode starts as "left", on the grounds that +these are the most common settings. + +In addition to the .FI and .NF requests, the adjust mode may be +examined and changed via three number registers: ADJUST, +ADJUST_FILL, and ADJUST_NOFILL. See the reference and node +Writing Macros for more details. + +File: RGUIDE, Node: Fonts, Up: Top, Previous: Justification, Next: Macro Invocation + +There are a number of different aspects of this subject: + +* Menu: + +* .FO:: How to tell R what fonts you want, and what + fonts are. + +* Switching Fonts:: How to change what font R is using. + +* Selecting Fonts:: How to control what fonts the macro + package will use for various things. + +File: RGUIDE, Node: .FO, Up: Fonts, Next: Switching Fonts + +R permits you to use many different typefaces, called fonts, in +a single document. Typically one chooses a font for normal +text, and italic and boldface fonts that go well with it. +Also, it is common (and the macro package assumes it) to define +a larger font for section headers, titles, etc. Beyond that, +it is usually a question of fonts with special characters, such +as Greek letters and mathematical symbols, smaller or larger +fonts for special use (such as a small font for footnotes), and +fixed width fonts for diagrams and programs. + +R permits up to sixteen fonts to be defined. Each is defined +using the .FO command. You might think that we would number +them 1 through 16, but we wanted to be able to designate a font +with a single letter. So, we "number" them 0 through 9 and A +through F. You cannot change fonts in the middle of a +document; you are limited to 16 fonts overall. + +The .FO line has these parts: + + .FO + +The part consists of a FONT DESIGNATOR, namely, +one of 0 through 9 or A through F. The says what +font to associate with that font number. The treatment of this +field depends on the output device: + + XGP - you should supply the name of a KST file + describing the font + VARIAN - you should supply the name of a VFT file + PRESS - you should supply the name of a Dover font + LPT, DIABLO - the field is ignored, and may be blank + +For more information on the fonts available and how to specify +them, read the following nodes, or consult the reference +manual: Filenames, Output Devices, Setup + +The part of the .FO line is usually omitted. +However, you can do some useful things with it. One is to +separately control what file the XGP will use for a font versus +what file R uses to see how big it is. See the reference +manual for details. The other thing you can do is to have R +highlight text that is supposed to appear in a different font +when you are producing output for a single font device (LPT or +DIABLO). For each font, R is willing to do one of four things: + + Nothing - Output the text with no modification. + Overprint - Print the text several times, to make it + look bold. The number register NOVER controls + how many times each letter will be typed; it + starts set to 2 (print twice). + Underscore - Underscore all characters output in the + given font. + Capitalize - Capitalize all lowercase letter in the + given font. + +By default, R does font 0 normally (no special highlighting), +and all other fonts are underscored. You can change this, for +each font individually, by putting a letter in parentheses as +the for a given font. The letters are: + + n = nothing, o = overprint, c = capitalize, u = underscore + +Examples: + + .fo 0 25fg (u) + .fo 1 25fgb (O) + .fo 2 25fgi (n) + .fo 3 37vrb (C) + +File: RGUIDE, Node: Switching Fonts, Up: Fonts, Previous: .FO, Next: Selecting Fonts + +The most common case of changing fonts is to one or a few words +in another font. For example, a single word or expression in +italics or boldface, or a special character, such as a Greek +letter or mathematical symbol. R provides a very easy way to +do that. You just put ^Fx where you want to change to the +different font, where "x" is the font designator character for +the font you want. If that sounds confusing, and example +should make it clear. Say that your Greek letter font is font +6. To get a sigma, just put ^F6s... (the ... will be filled +in in a moment). Similarly, to switch to font A, just write +^FA, etc. + +In most cases it is possible to do all font switching +explicitly like this, so the ... above might be filled in with +^F0 to switch back to the normal font: ^F6s^F0. However, +there is a better way -- the special expression ^F* means go +back to whatever font you had before the last ^F setting. +Thus, ^F6s^F* means "go to font 6; output an s (sigma); go back +to the font you had before". R remembers a whole bunch (10) of +these previous fonts, so you can do things like: + ^F2Here is some bold text with one ^F1italic^F* word.^F* +It is considered good style to use the ^F* feature wherever you +can, because it leads to fewer errors. Note also that R will +produce a warning message if enough ^F*'s are done so that it +would have to back up more than 10 fonts' worth. That situation +is called "font ring-buffer underflow". + +Hint: When you have a special symbol that is in a different +font, and you use it in many places, you may find it helps to +define a string register abbreviation. For example: + .sr sig ^F6s^F* +Here is where ^F* is a MUST, so that you will not switch back +to the wrong font. Using a string register this way has two +strong advantages. First, when you see a use in the text, it +is easier to tell what you are dealing with: ^Ssig conveys +more information that ^F6s^F*, and results in a little less +clutter on your screen. The other advantage is that if you +change the number of the font, or decide to switch to another +character, you need only change the string register definition +line, instead of every use of a sigma in your file. So, give +string registers a try! + +It you have a large amount of stuff to do in another font, you +can use the .FS request. For example: + .fs 2 + ... several lines in italics ... + .fs +.FS takes a font designator character as its argument, so to +switch to font C, you can write: .fs c (or .fs C). A .fs with +no letter after it, such as the second one in the example, +works like ^F* -- it means to go back to the previous font. + +The standard macro package provides several features to aid you +in font switching; see the next node, Selecting Fonts, for more +details. + +There is a fine point of difference between ^F and .FS, that +usually does not make any difference. However, we mention it +here so you will know about it. Besides the idea of the +CURRENT FONT, which is the font R uses at any given time for +outputting characters, there is also something called the +PRINCIPAL FONT. The height of the principal font governs line +separation calculations, along with a number of other factors. +(The details are in node Line Spacing.) The principal font +also determines the with of a control-space character. The +point here is that ^F changes only the current font, but .FS +changes both the current font and the principal font. + +The number registers FONT and PFONT control the current and +principal font, respectively. They provide an alternate +mechanism for font switching that is often the most appropriate +one for use in macros. + +In cases where you desire to change both the current and +principal fonts to be a particular font, and you do not wish to +use .FS because it uses the font stack, you may use the SET_FONT +macro. It takes one argument, a numerical expression (number +register names allowed), and sets FONT and PFONT to that number. +Here are some examples: + .set_font italic_font + .set_font 3 + .set_font 13 + +File: RGUIDE, Node: Selecting Fonts, Up: Fonts, Previous: Switching Fonts + +The macro package provides a number of features related to fonts +that should be of assistance to you in document preparation. +First, it provides two ways of switching to fonts that do not +require you to remember which number corresponds to which font. + +Method 1: There are several string registers defined that +contain a ^F and a font designator, to switch to a particular +font. These string registers are: + NF - switch to the normal font + BF - switch to the bold font + IF - switch to the italic font +These start with the right values in them for the macro +package's normal assignment of fonts: + normal = 0; bold = 1; italic = 2; big = 3. +Naturally you can change the contents of the string registers +as you please. Perhaps even more useful, you can convince the +macro package to use different names for the string registers +in question, if the above names are inappropriate. These +string registers contain the NAMES to use for the string +registers mentioned above: + nf_reg -- name of string register for the normal font; + starts as NF + bf_reg -- same for bold font; starts as BF + if_reg -- same for italic font; starts as IF +However, any changes to these last three must be done BEFORE +you insert the standard macro package (i.e., before you do the +.SO of the file R.MACROS), and can never be changed later. This +feature is introduced so that you can use the names NF, BF, or +IF for something else without screwing up the macro package or +yourself. + +Method 2: The macro package provides several macros for +outputting text in a selected font: + NORM - outputs its arguments in the normal font + BOLD - outputs its arguments in the bold font + ITAL - outputs its arguments in the italic font + BIG - outputs its arguments in the big font +These macros are intended to be invoked inline with ^X (see +node Macro Invocation for further discussion). Here is an +example use: ^Xbold(Most of this is bold, but this +^Xital(word) is italic.) You may define more such macros in a +very simple way: + .def_font_macro foo num +will define a macro with name "foo" that outputs its arguments +in whatever font the number register "num" contains. Here is +an example: + .fo 7 hippo + .nr greek_font 7 + .def_font_macro greek greek_font +and then later: ^Xgreek(a b g d) will print alpha, beta, +gamma, delta. + +For flexibility, the macro package permits you to control what +font it considers to be the normal font, italic font, bold font, +and big font in the above two methods. As we have said in +several places, these start as follows: + NORMAL_FONT - 0 + BOLD_FONT - 1 + ITALIC_FONT - 2 + BIG_FONT - 3 +However, by setting the number registers mentioned above, you +will change what the macro package will use. For example, if +you type ".nr bold_font 6" then ^Sbf and ^Xbold will use font +6 instead of font 1. You can change the bold_font number +register, or any of the others, as often as you wish. + +In fact, the macro package will automatically change the +definitions of NORMAL_FONT, etc., in certain special cases. +One of those cases is footnotes. Within a footnote, +normal_font, italic_font, and bold_font are temporarily set to +footnote_font, footnote_italic_font and footnote_bold_font. +This is because many people like to have footnotes printed in a +smaller font. Here is how you might do that: + First, put these lines in your setup, i.e., before the +line with ".so r.macros": + .fo 4 timesroman8 + .fo 5 timesroman8b + .fo 6 timesroman8i + .nr footnote_font 4 + .nr footnote_bold_font 5 + .nr footnote_ital_font 6 +Of course you can use any fonts you like, and they don't have +to be 4, 5, and 6, or in order, or anything. The important +thing is that the number for footnote_font be the number of the +font you want for normal text in footnotes, etc. One thing you +should realize is that if your font is one of A through F, you +must use the letter in the .FO, but the corresponding number +(10 through 15) in the .NR. For example: + .fo A timesroman8 + .nr footnote_font 10 + +If you are using a setup as described in node Setup, with one +set of fonts for the Dover, and another set for the XGP and +otehr devices, you will have to do 2 .FO's, one for each case. +The .NR need only be done once, just before the .SO, provided +you used the same font numbers for the different devices, which +you probably should do, or you will just confuse yourself. + +If you ever need to convert a font NUMBER to a font DESIGNATOR, +there are some pre-defined string registers that do it. The +string register _font_n (where n ranges from 0 to 15) contains +the font designator for the font with number n. For example: + .fs ^S_font_^Nital_font + +Here is a list of the things for which you can separately +control what font will be used. The names are the names of +number registers that you can set to select the font you want +for the given thing. They all have "reasonable" defaults. +Below, toc = table of contents. + + headings: heading_font + footings: footing_font + footnotes: fnfont for the superscript number, + footnote_font, footnote_bold_font, and + footnote_ital_font for the body + figures and tables: + figure_font and table_font for the bodies; + figure_title_font and table_title_font for the + title lines; + figtab_toc_font for the toc entries. + chapters: chapter_font for the header line; + chapter_toc_font for the toc line. + sections: section_font for the header line; + section_toc_font for the toc line. + appendices use the chapter fonts. + subsections, subsubsections, subsubsubsections, and + achapters use the section fonts. + +In addition, there are a number of places where the macro +package will use big_font, etc., itself. These are mentioned +in the appropriate sections later. The default values for the +registers listed above are set when you read in R.MACROS, but +only if you have not previously set them. Further, the default +values are set according to the values of normal_font, +bold_font, etc., in effect at the time you read in R.MACROS. + +File: RGUIDE, Node: Macro Invocation, Up: Top, Previous: Fonts, Next: Page Layout + +This node describes how to type in arguments to macros. Both +normal macro invocation (with "." and ' at the beginning of a +line), and inline macro invocation (with ^X) are discussed. +Note that most of the nice features of the macro package come +to you as macros, so it is important to know how to use them. + +General information: + + All macro invocations consist of the NAME of the macro +to invoke, and zero or more MACRO ARGUMENTS, supplied after the +macro name, in order. The effect of a macro invocation is to +cause some previously defined sequence of R commands to be +processed, very similar to .SO or ^S or ^N. The macro +arguments are available to these commands (via the ^A control +character). Further discussion of exactly how it all works +appears in node Writing Macros. + +Normal Macro Invocation: + + A normal macro invocation takes one of two forms: + + .macro-name arg0 arg1 arg2 ... argN +or 'macro-name arg0 arg1 arg2 ... argN + +There may be any number of spaces and tabs between the "." or ' +and the macro name. Then zero or more arguments follow. There +are several forms that may be used to express an individual +argument: + +Form 1: The argument is simply written down. This is the +easiest form to use, and the most common. However, it has some +limitations. You cannot have an unprotected control-space or +control-tab in this form of argument (because spaces and tabs +are used to separate arguments), or an unprotected control-J +(newline) (because newlines terminate the whole macro +invocation line). So, you must either protect such characters +with backslash (see node Backslash), or, in the case of spaces, +you could use a text space or a character that translates to +text space. Nodes Input and Justification explain this in more +detail. + +Form 2: The argument is surrounded by double quote characters +("). This form of macro argument may control unprotected spaces +and tabs, but cannot contain an unprotected control-J (newline). +Also, to get a " character in as part of the argument, you must +write two quote marks in a row. For example, .foo """" invokes +foo with a single argument consisting of the single character ". +Here is another example of a form 2 argument: + .chapter "Effects of Swapping on System Performance." + +Form 3: The argument is surrounded by { and }. This form of +macro argument may contain unprotected spaces, tabs, and +control-J's, and is therefore the only form of argument that +can extend over more than one input line without special care. +Its only limitation is that the curly brackets, { and }, must +be BALANCED inside the argument. If an argument of this form +extends over too many lines, an error message is printed (to +help you find unmatched curly brackets). See the reference +manual for details. Here is an example of this form of macro +argument: + .chapter {Effects of Swapping on System Performance.} + +Inline Macro Invocation. + + An inline macro invocation one of these forms: + ^Xmacro-name +or ^Xmacro-name! +or ^Xmacro-name(arg0 arg1 ... argN) + +The first and second kinds are used when the macro is to be +supplied no arguments at all. The ! can be used all the time, +and must be used in cases where the next character read might +be included in the macro name. See node registers for further +discussion and example of this use of !. The last form is used +when the macro has 1 or more arguments. The forms the +arguments may take are essentially the same as the forms for +normal macro invocation, which are listed above. There is only +one difference: you may not have unbalanced parentheses in an +argument of form 1. What actually happens is that every time +an open parenthesis is seen, the argument scanning continues at +least until the matching close parenthesis. This permits +nested use of ^X, as shown here: + ^Xdiv(a+b ^Xdiv(c d*e)) +The arguments to the first invocation are "a+b" and "^Xdiv(c d*e)", +and the arguments to the second invocation are "c" and "d*e". + +Differences between the two kinds of macro invocation. + + The main difference between the two forms is that +normal macro invocation may be used anywhere, and takes effect +immediately, whereas inline macro invocation only takes effect +when the ^X is seen when scanning text (as opposed to reading +request lines). Another important difference is that any text +produced by inline macro invocations is automatically glued to +surrounding words (assuming they are adjacent). + Most of the macro in the macro package are designed to +be invoked using normal macro invocation. Others are intended +to be invoked inline, and explanations of them will mention +that fact. Do not expect good results if you invoke a macro in +a fashion other from that intended for it, because the +principles of design of the two kinds of macros are a bit +different. + +File: RGUIDE, Node: Page Layout, Up: Top, Previous: Macro Invocation, Next: Line Layout + +The standard macro package splits each output page up into a number of +regions, from top to bottom. These are: + + the header area + the text area + the footer area + +We describe each in turn, and at the end, introduce some +convenient macros used for setting up margins, and explain R's +notation(s) for vertical distances and their meanings. We also +mention miscellaneous requests used for vertical positioning. + +Headers: + + Headers are things like the page number, etc., printed +at the top of each page. The default is to print "- page# -" +centered at the top of the page. The string registers +left_heading, center_heading, and right_heading contain the +actual headings, so you can change them freely. + The number register section_headings, if set to 1 (it +is normally 0) will set left_heading to the contents of +section_title, and right_heading to the contents of +section_number_title, for each page. See node Sectioning for +details of what those registers contain. (Section_title is the +title of the current section, and section_number_title is +something like "Section 1.3".) + The number register both_sides controls whether to swap +the headers on pages with even numbers. It is defaultly off +(0), but you should set it to 1 for documents to be reproduces +by printing on both sides of the paper. + Headers are normally suppressed on the first page (page +1), but if you set the number register print_page1_headings to +1, then they will be printed. If you want no headings at all, +set the number register print_headings to 0. The number +register heading_font control what font will be used to print +the headings (defaultly normal_font). + The number register heading_pos contains the vertical +position at which to print the headings (if any). This is +expressed in mils (thousandths of inches), measured from the +top of the page. Thus, the default value, 500, print the +headings 1/2 inch from the top of the page. If it makes a +difference, the distance is from the top of the page to the +baseline of the header line. + +Text area: + + The text area starts below the headers. The exact +position is controlled by the number register top_margin_size. +Thus, according to R, the headers are printed in the margin. +The default value for top_margin_size is 1000, and its units +and meaning are like those of heading_pos, so text normally +starts one inch from the top of the page. + The text area end just above the footers. The distance +from the end of the text area to the end of the page is defined +by the number register bottom_margin_size, and is defaultly +1000 (i.e., one inch). Note that figures, tables, and +footnotes are always printed in the text area, even when +printed at the bottom of the page. For more details on them, +see the relevant node. + +Footers: + + Footers are like headers, except they are printed at the +bottom of the page. Their appearance is controlled by number +and string registers analogous to the ones for headings; we +simply list them below, and indicate the default values: + + print_footings - 0 (i.e., normally NOT printed) + footing_font - normal_font + left_footing, center_footing, right_footing - string + registers, all normally empty + footing_pos - 500 (mils, measured from top of bottom + margin, i.e., end of text area) + footing_height - 167 (mils, increase it if you use a + large font; its purpose is too obscure to go + into here) + +The number register both_sides controls swapping of footers as +well as headers. Footers will be printed on page 1 (if +print_footings is on (1)). + +Setting margins: + + You could set up all the margins yourself, and for +complicated things, you maybe required to do that. But there +are two macros available that handle most of the common cases. + +The old macro: MARGIN + + This macro takes four arguments, each suitable for a .VX +(see description of vertical units and requests, below), in this +order: top margin size, bottom margin size, left margin size, +and right margin size. Note that headers are printed WITHIN the +top margin, and footers within the bottom margin. Also, this +macro does NOT change heading_pos or footing_pos, or take +both_sides into account. The macro described below is probably +better -- MARGIN is being retained for compatibility. + This example sets the margins to the way they start: + .margin 1i 1i 1i 1i + +The better macro: SMARGINS + + This macro takes four to six arguments. The first four +arguments are the top, bottom, left, and right margin sizes, in +that order, however, the top and bottom margin sizes indicate +the amount of white space desired. That is, headers and +footers will not be printed in these margins. The fifth +argument, which is optional, allows you to specify the distance +between the headers and the start of the text area (defaultly +1/2 inch) and the sixth argument (also optional), can be used +to specify the distance from the end of the text area to the +footers. + This macro takes the settings of print_headings and +print_footings into account, so as to provide the maximum text +area that is consistent with the margins requested. That is, +if you do not print headers (footers), then the space that +would otherwise be used for them will be used for text. + SMARGINS also takes both_sides into account when +setting up the left and right margins. + This example sets the margins to the way they start: + .smargins .5i .5i 1i 1i .5i .5i + +Vertical expressions: + + A vertical expression consists of a whole number, or a +number with a decimal fraction, optionally followed by a +letter. here are the different meanings for the letters; +assume the number was "n": + + no letter - n times the default line height; the default + line height is directly related to the height + of the principal font. For details see node + Line Spacing. + a - n micas. One mica = 10 microns = .01 centimeters = + 1/2540 inch. Because a mica is less than a mil, + conversions to/from micas may not be exact. + c - n centimeters. + i - n inches. + l - n lines. This is like n with no letter, except that + it is additionally multiplies by the line + spacing factor, LS. See node Line Spacing for + more details. + m - n mils. 1 mil = 1/1000 inch = 2.54 micas. + u - n units, where a unit is the smallest distance by + which the output device can position text + vertically. This should be avoided because it + introduces dependencies on particular devices. + It is included because it is sometimes necessary. + +In situations calling for a vertical expression, you may use +any of these freely. For example, the .SP request takes a +single argument, a vertical expression, so all of the following +are legal: + .sp 1 + .sp 1l + .sp 2.5c + .sp 135u + .sp .5i + .sp 150m + .sp 650a +More complicated expressions are permitted, too. See node +Expressions for details and examples. + +Relevant requests: + + .VX n v1 v2 v3 ... vK - set the number register n to be the + number of mils in the sum of the distances given + by the vertical expressions v1, v2, ..., vK. + For example, .vx vpos vpos!m 10l + .VV n v1 v2 v3 ... vK - equivalent to: + .NV n n + .VX n v1 v2 v3 ... vk + .SP v - leave an amount of white space equal to the + vertical distance specified by the vertical + expression v. A blank line is equivalent to a + .SP with no arguments, which is equivalent to + .SP 1 + .VP v - go to position v on the page. 0 means the top, + 1i means one inch from the top, etc. + + Some other relevant requests are described in Line + Spacing. Also, ^V(+v) and ^V(-v) are described in Line + layout. The reference manual section on line spacing + discusses this in more detail, including the VPOS and + LVPU number registers. + +NOTE: 1i in a vertical expression is not equivalent to 1i in a +horizontal expression, because horizontal items (e.g., HPOS) +and vertical items (e.g., VPOS) are stored internally in +different units. + +File: RGUIDE, Node: Line Spacing, Up: Top, Previous: Page Layout, Next: Line Layout + +There are several factors that control the space between lines +in R. They are: + the height of the principal font + the leading + the line spacing factor (LS) +and the actual height of the line + +The nominal spacing between consecutive output lines is the +DEFAULT LINE HEIGHT times the line spacing factor LS. That is, +the distance between the baselines of two lines will be: + default line height * ls / 100 +The division by 100 is there because LS is in units of +hundredths of line heights. In vertical expressions, the +number n means n times the default line height, whereas nl (n +lines) means n times the default line height times the line +spacing factor. + +The default line height is defined this way: + default line height = fheight * (100 + leading) / 100 +where fheight is the height of the principal font (the distance +from the bottom of the character that goes the farthest below +the baseline to the top of the character that goes the farthest +above the baseline). FHEIGHT is available in the number +register of the same name, as is LS. The number register +LEADING gives the default percent white space between lines, and +starts as 20. This choice is governed by long established +aesthetic principles of the printing industry, so you should not +change it lightly. The appropriate place to make an adjustment +is usually LS, and R provides the .LS request for that purpose. +Note that .LS takes the line spacing factor "straight", so that +the value of the LS number register is 100 times the value you +write in a .LS. For example, .ls 2 will give you double spaced +output. R starts with LS equal to 100 (single spacing). + +Historical note: Leading is pronounced "ledding", and refers to +the fact that in printing the space between lines in filled with +thin strips made of lead. + +The above discussion concerns the NOMINAL spacing of lines. R +calculates the exact height of each line above and below the +baseline (the HABOVE and HBELOW built-in number registers +provide access to this information), and R will move a line down +to make sure that it does not overlap the previous line. This +happens more often if LEADING is set to a smaller value, or if +you use a lot of subscripts, superscripts, or characters from a +large font. If you do not like it, your only recourse is to +increase the line spacing, or get rid of the offending tall +character(s). + +File: RGUIDE, Node: Line Layout, Up: Top, Previous: Line Spacing, Next: Horizontal Positioning + +R divides the space across the output page into a number of +regions, from left to right: + + the left margin + the indentation + the text area + the right indent + the right margin + +The sizes of these are defined by the values in various number +registers, and can be controlled by setting the number +registers or using some R requests. + +Below is a description of the interesting things in left to +right order. At the end is a description of horizontal +expressions. + + Left margin - Defined by what is called the OFFSET, +which may be different for even and odd numbered pages, so that +document to be reproduced on both sides of the paper can be +handled nicely. This can be examined via the EO, OO, and POFF +number registers, but can be set only via the .EO and .OO +requests. The default is one inch for both even and odd +offsets. For more details on changing margins, see the +discussion near the end of node Page Layout. + + NOTE: The offset defines the origin of horizontal +position calculations, specifically, HPOS is 0 when you are at +a distance from the left edge of the paper equal to the offset. +Also, the horizontal position is never permitted to be less +than 0. + + Indentation - The indentation is defined by the value +of the INDENT number register, and is the distance from the +offset to where the current text line should start. The +indentation is typically 0, but it is not unusual to indent a +group a text lines, as in the case of a quotation, for example. +If you want a number of indented items, you may find the list +macros convenient; see node Lists for more information about +them. The indentation can be changed "manually" with the .IN +request. This takes three forms, illustrated below: + .in 1i set the indentation to one inch + .in +1i increase the indentation by one inch + .in -1i decrease the indentation by one inch +Usually a matched pair of the last two forms is better than +setting the indentation explicitly, because it allows something +to be moved around, etc., with fewer errors. Node Alignment +discusses a very safe and easy to use method changing the +indentation, which you should read about. + In addition to the indentation, which is used for +indenting a group of lines, there is also a feature called the +TEMPORARY INDENTATION, which takes effect for just the next +line. It can be set only via the .TI request, which has three +forms just like those for .IN. Note that a relative temporary +indentation is relative to the indentation. This request is +often used for making paragraphs, e.g.: + + .de para define a macro for starting a paragraph + . sp 1l it will first leave a blank line + . ti +5 and then indent the first line by 5 characters + . em + + Text area - The text area extends from the indentation, +plus any temporary indentation, to the right indentation. +Thus, the actual length of the text area is defined implicitly. + + Right indentation - The right indentation is the +distance from the right margin to the end of the text area. +Increasing the right indentation makes the text area smaller; +that is, the indentation and the right indentation are both +measured toward to center of the page. The right indentation +is controlled by the number register RINDENT, which may be set +directly, or via the .IR request, which works just like the .IN +request. The right indentation starts as 0. + + Right margin - The right margin is defined implicitly +by the offset and line length. That is, the right margin +starts at that place which is the offset plus the line length +from the left edge of the paper. For 8.5 inch wide paper, and +the default offset (1 inch) and default line length (6.5 +inches), the right margin will be 1 inch. See node Page Layout +for descriptions of two macros to assist in setting up margins. +The line length is defined by the number register LL, and can +be set directly or via the .LL request. + +Horizontal expressions: + + Horizontal expression are very similar to vertical +expressions. A horizontal expression consists of an expression +(see node Expressions), possibly followed by a letter to +indicate a unit of measurement. Here are the possibilities, +assuming the value of the expression is n: + + no letter - n times the average character width. The + average character width is the width of the "0" + character, unless it is less than the width of a + space (in which case the width of the space is + used), or greater then the width of two spaces + (in which case the width of two spaces is used). + The font used for this is the principal font, + NOT the current font. + a - n micas + c - n centimeters + i - n inches + m - n mils + +There are .HX and .HV requests that are analogous to the .VX +and .VV requests discussed in node Page Layout. You should +NEVER use .HX or .HV to compute a vertical distance, or .VX or .VV +to compute a horizontal distance, because the internal units +may be different. For example, on the XGP the units are XGP +dots, and there are 192 per inch horizontally, but 200 per inch +vertically. Even though R gives you the measurements in mils, +it uses these units internally, so you must not confuse the two +directions. + +File: RGUIDE, Node: Horizontal Positioning, Up: Top, Previous: Line Layout, Next: Text Features + +There are several sub-topics here; you should definitely read +the first two. Also, you should have read node Line Layout +first. + +* Menu: + +* Absolute Positioning:: How to get to a particular place + across the page. + +* Relative Positioning:: When to use .HS instead of .HP. + +* Tabs:: Using ^I (tab) and tab stops. + +* Centering and Righting:: ^C and ^R in the general case. + +File: RGUIDE, Node: Absolute Positioning, Up: Horizontal Positioning, Next: Relative Positioning + +The current horizontal position is determined by the value in +the number register HPOS. It is measured from the offset (the +right edge of the left margin), and increases to the right. +Outputting text and spaces or tabs increases the horizontal +position by the width of the characters output. (For details on +tabs, see node Tabs.) There are three ways to set the +horizontal position to a particular value: + + set HPOS, with .HX or .NR + use ^P + use .HP + +Setting number registers should be familiar to you (see node +Registers). + + .HP h +will set the horizontal position to h (h is a horizontal +expression; see nodes Line Layout and Expressions.) You may +also say: + .HP +h + .HP -h +to increment or decrement the horizontal position by h. +However, if you are thinking of doing that, you probably should +be using relative positioning (see node Relative Positioning). + + ^P(h) also goes to position h (h is a horizontal +expression here), with a difference, though. It always moves +right by at least the width of a space, and gives an error +message if the position you asked for is to the left of where +it ends up. Thus, it prevents overprinting, and cannot be used +for going backwards. + +If you are trying to get things on different lines to line up, +read node Alignment. + +Some details: + +Any absolute positioning command (tab, ^P, .HP, or setting +HPOS) suppresses BOTH mode adjustment on its left. The main +implication of this is that absolute positioning is usually +inappropriate in the middle of a line in fill mode. + +The value of HPOS corresponds to where you are now, not where +you would be after the line is adjusted. (The latter would +require predicting the future.) Therefore, the value of HPOS +is not necessarily useful when the adjustment mode is anything +but LEFT mode. + +File: RGUIDE, Node: Relative Positioning, Up: Horizontal Positioning, Previous: Absolute Positioning, Next: Tabs + +The .HS request (HS = horizontal space) is used for relative +positioning. + .HS h +goes forward (or backward if h is negative) the amount +specified by the horizontal expression h. Unlike .HP and +friends, this works in fill mode. Further, although R may +break a line at an absolute position command, it will never +break a line at a .HS. So, .HS is the method of choice for +building up formulae and expressions like this: + |A| + U a + i=1 i +However, before embarking on doing such things by hand, read +node Math -- it will tell you about the macros already there to +help with this sort of thing. + +File: RGUIDE, Node: Tabs, Up: Horizontal Positioning, Previous: Relative Positioning, Next: Centering and Righting + +R has a built-in tab stop mechanism that lets you set a large +number of tab stops. The R control character control-I (tab) +goes to the next tab stop, if any. (It always moves over at +least one space width.) These are the requests available for +manipulating tabs: + .ta h1 h2 ... hn - Removes all existing tab stops, and + sets stops at the positions specified by the + horizontal expressions h1, h2, ..., hn. R + starts with a dozen or so stops set at intervals + of 8 characters. That is, .ta 8 16 24 ... + .tg name exp - Number register "name" is set to the + position of the exp'th tab stop. + .tu h - "Unset" (clear) any tab at position h. + .ts h - Set a tab stop at position h. +See the reference manual for more details. + +Note: The normal tab stops are set by character positions, +which, if you remember, are defined by the nominal width of the +principal font, which may not be the current font. So do not +expect a tab to be 8 spaces in the current font unless you do +this: + .fs n -- makes the font both the principal and current font + .rtabs -- does a .ta 8 16 24 .... +Of course, even this will not work if you are using a variable +width font. If this is a problem, read node Alignment. + +File: RGUIDE, Node: Centering and Righting, Up: Horizontal Positioning, Previous: Tabs + +The actual action caused by ^C and ^R is to center or +right-flush the following text between the first absolute +positioning command on the left and the first one on the right. +For this purpose, the margins constitute absolute positioning +commands. In this case, the margins include any indentation, +temporary indentation, or right indentation. Thus, the +position of centered text will be different for different +values of INDENT. + +Between any adjacent pair of absolute positioning commands, you +may have centered items, right-flushed items, or both. The way +you write it down goes like this: + pos1 left adjusted items^Ccentered items^Rright-flushed items pos2 + +Before trying to make up fancy tables by hand, you should read +node Columnar Tables. It describes macro packages that make it +a lot easier for you. + +File: RGUIDE, Node: Text Features, Up: Top, Previous: Horizontal Positioning, Next: Alignment + +There are many interesting things you can do in text. We have +gathered together here the ones that are not discussed elsewhere. + +* Menu: + +* Superscripts and Subscripts:: + How to do simple superscripts and + subscripts, and also more fine vertical + adjustment of characters on a line. + +* Underscoring:: How to underscore text; how to control + whether white space is also underscored; + all the other details of underscoring. + +* Overstriking:: How to create new characters and special + symbols by printing more than one + character in the same position. + +* Hyphenation:: A description of the minimal assistance + R provides in this regard. + +* Substitution:: How an arbitrary string can be + substituted for a character in the + output. (More useful than it sounds!) + +File: RGUIDE, Node: Superscripts and Subscripts, Up: Text Features, Next: Underscoring + +Superscripting and subscripting are special cases of changes to +what is called the VERTICAL OFFSET. The vertical offset is +controlled by the number register VOFF, and is the distance +above the baseline at which output characters are to be placed. +It is normally 0, meaning characters will be placed on the +baseline. Making VOFF greater than 0 causes subsequent output +to be above the baseline, and making VOFF negative, outputs +characters below the baseline. Although it may be a little +confusing, VPOS, the current vertical position (which +determines where the baseline is) increases DOWN the page, +whereas VOFF increases UP the page. + +Here are the methods available for adjusting the vertical +offset: + setting VOFF - generally used only in macros + ^U - up: increase VOFF by a device dependent amount + (set so that it looks good for superscripts) + ^D - down: decrease VOFF by the same amount that ^U + increases it; good for subscripts. + ^V(v) - Change the vertical offset by v; v is a + vertical expression (see nodes Page Layout and + Expressions). The change may be positive or + negative. + ^Z - set the vertical offset to 0. + +Here are some examples: + a^Di^U - a subscript i + x^Un^D - x superscript n + m^Di^Dj^U^U - appears something like this: m + i + j +^U and ^D should always be used in matched pairs. If the +vertical offset is not 0 at the end of an output line, R will +print a warning message, going something like this: +"unterminated superscripts" (or subscripts). + +Likewise, ^V should be used in matched pairs of ^V(+...) and +^V(-...) to avoid the same error. When setting VOFF directly +you must remember to set if back. Also, you should keep in +mind that relative adjustments (e.g., .nr voff voff+10) can +more easily be included in larger formulae than absolute ones. +Hence, we do not recommend the use of ^Z. + +In addition to using the control characters directly, there is a +(possibly somewhat more convenient) pair of macros for doing +superscripts and subscripts. Here is how to use them: + + ^Xsub(item1 item2 ... itemN) - will output the N items + shifted down by one ^D, and automatically shift back up + when done. Further, it guarantees that there will be no + line breaks in between the items. + + ^Xsup(item1 item2 ... itemN) - works exactly the same + way, except that it output the items shifted up. + +Here are some little examples: + + a^Xsub(i) -- a + i + + a^Xsub(i^Xsub(j)) -- a + i + j + + n + x^Xsup(n) -- x + + 2 + (n ) + x^Xsup((n^Xsup(2))) -- x + +(These would look better on the XGP or Dover.) + +If you are trying to think of ways to build up more complicated +mathematical formulae, you should read node Math for a detailed +discussion. + +File: RGUIDE, Node: Underscoring, Up: Text Features, Previous: Superscripts and Subscripts, Next: Overstriking + +Here is a list of the various things about underscoring thAt +are under your control: + + whether underscoring is being done + whether white space is to be underscored or just text characters + the position of the underscoring with respect to the baseline + the thickness of the underscore + +The number register UL controls whether underscoring is +currently being done (0 means no underscoring, 1 means +underscoring). However, the most common way of doing +underscoring is with control characters: + + ^B - begin: start underscoring (set UL to 1) + ^E - end: stop underscoring (set UL to 0) + +For example: + + The third ^Bword^E in this sentence will be underscored. + +The number register UL_SPACE controls whether white space will +be underscored, or just text characters. If it is 0, only text +will be underscored; if it is 1, white space will be, too. +Note: if a text character prints as white space (e.g., a text +space usually does), then it will be underscored in any case. +Remember: R does not know anything about the appearance of text +characters. UL_SPACE starts set to 0, so white space is +normally NOT underscored. + +The position of underscoring with respect to the baseline is +determined by the underscore offset, which is kept in the +number register UOFF. It is measured in the same fashion as +VOFF (see node Superscripting and Subscripting). It starts +with a device dependent value that gives underscoring with a +pleasing appearance. You may change the underscore offset by +setting UOFF directly, or by using the .UO request, documented +in the reference manual. Generally the only good reason for +changing the underscore offset is to draw a horizontal line, as +in the DIV macro (see node Math). Naturally the fineness with +which UOFF can be adjusted depends on the capabilities of the +output device. + +The thickness of underscoring is initially set to a pleasing +value (device dependent). You may change it with the .UT +request, documented in the reference manual. Of course, not +all output devices support this feature. + +File: RGUIDE, Node: Overstriking, Up: Text Features, Previous: Underscoring, Next: Hyphenation + +R provides the ability to print more than one character in the +same position, and thus overstrike. This can be used to create +new symbols (similar to the way APL overstrikes, for those of +you familiar with that), and also permits you to add +diacritical marks such as the French accent ague, accent grave, +and circumflex ("hat"). Here is a description of the feature. + +As R accumulates a word, character by character, you can think +of there being a row of boxes. Normally R places one character +in each box, from left to right. However, the control +character ^H (backspace) directs R to back up one box. By +backing up and then adding more characters, more than one +character may be placed in each box. When it comes time to +print the word, R examines each box in turn, and prints its +contents. The exact method of printing the contents of one of +the boxes is to print each of the characters of the box +centered in a space equal to the width of the widest character. +Hence, even if you back up several boxes by using more than one +^H, the characters in that box will still line up. + +NOTE: ^H works only WITHIN a single text word; you cannot back +up over (control) spaces, or positioning commands, etc. If you +are considering using ^H for multiple characters, you should +probably be thinking of using .HS (see nodes Horizontal +Positioning and Alignment) or some of the convenient macros for +mathematical formulae (see node Math). + +HINT: A string register is a convenient way of "abbreviating" a +special symbol that requires several characters to print. For +example: + .sr ne =^H/ + .sr ahat a^H^ +This method has the additional advantage that if you later +change your mind about how to make the special symbol (e.g., +you find a font that has it), you need change only yhr register +definition. Further, string registers are the only way to go +when the symbol must be constructed in different ways for +different output devices: + .if lpt + . sr ne =^H/ + .else + . sr ne ^F6^Q^R^F* + . end if + +File: RGUIDE, Node: Hyphenation, Up: Text Features, Previous: Overstriking, Next: Substitution + +R does not provide an automatic hyphenation facility. However, +it does provide two control characters to assist in manual +hyphenation: + ^Y - Insert an invisible hyphen here + ^W - A word break is legal here +An INVISIBLE HYPHEN produces no output unless R break the output +line at the ^Y, in which case it prints as a hyphen ("-"). +Thus, it can be inserted in a word that you wish to have broken +to improve the appearance of a given output line. Using ^Y is +better than inserting a hyphen by hand because ^Y will continue +to do the right thing even if you change the document around +later such that the word in question no longer falls at the end +of an output line. Here is an example use: + hyphen^Yation + +^W is similar, but is intended for words that already have a +hyphen in them: + ambassador-^Wat-large + +Generally people do not use ^Y and ^W much, but insert them +only in places where they are really needed. Of course, you +usually cannot tell that a break is needed until you have +printed your document. + +File: RGUIDE, Node: Substitution, Up: Text Features, Previous: Hyphenation + +R provides a very general and powerful facility for substituting +arbitrary strings for single characters in the output. This can +be used to do a number of things; here are some examples: + + You can have a convenient to type character translated + into one that is inconvenient to type, and thus make + your typing easier. + + You can "fix" a character, e.g., move it up or down a + little before printing it, or substitute a character + from another font. + + You can have a character turn into an inline macro + invocation that generates exactly what you want; + similarly, you could have the character insert a string + register, or directly come several characters. A + specific example might be translating something to =^H/ + so it looks like a "not equal" sign. + + You can translate a character into a control character, + to avoid any special meaning of the control character + until it is actually output. (We present a specific, + very useful example below.) + +We now describe what is available, and give some examples. +Substitution, also known as OUTPUT TRANSLATION is controlled by +the .TR and .TC requests: + .tr c s + .tc f c s +Each causes occurrences of a TEXT character "c" to be replaced +by the string "s". .TR does it for all fonts; .TC does it only +for the font "f". ("f" is a single character font designator.) +.TR translations are performed first, and then .TC ones. In a .TR, +if the string "s" is omitted, it is assumed to consist of a +single character: a text space. Thus, the line + .tr @ +that occurs in the example setup file in node Setup, causes +occurrences of @ in text to be changed to text spaces. That +particular use of .TR is the most common. + +Output translation does not occur until just before the +character would be assembled into a text word. In particular, +it does not happen to anything on a request line. This fact +can be used to advantage. For example: + .tr ` \ (Translate backquote to control-space) +can be useful in that it makes expression of macro arguments +and other things easier by giving you a character that +eventually becomes a text space, but does not appear as a text +space when macro arguments are being scanned. Here is an +example used: + .chapter Suggestions`for`Further`Research. +I have found this particular translation to be useful in case +where I do not want my text editor to break a line (I usually +have it set in a mode that breaks long lines as I type them). +For example: + ^Xital(This`is`some`text`in`italics.) +This is useful because inline macro invocations (^X) cannot +span more than one input line. + +Suppressing Translation: + + Doing ".tr @" is all well and good, but how can I ever +print a real @ character? You could turn the translation off +and back on: + .tr @ @ + ....@..... + .tr @ +Note that .TR and .TC special case the translation of a +character to itself to mean to remove any translation of the +character in question. + There is an easier way to suppress translation in +particular instances, however. The control character ^O +suppresses any translation of the next text character. Thus, +"^O@" will cause a real @ to be printed when you have done +".tr @". + +NOTE: The characters substituted in an output translation are +themselves subject to further translation. (Translation is +implemented by gobbling the output character and making it look +as if you had really typed the substituted string.) So, if you +did this: + .tc 5 $ ^V(-10m)$^V(+10m) +in an attempt to shift the $ character of font 5 down 10 mils, +you would bomb out, because the new $ will be translated, too. +What you should say is: + .tc 5 $ ^V(-10m)^O$^V(+10m) + +Input translation: + R does not have a complete input translation facility. +For what is available, see node Input, or read up on the .CC, +.NC, and .EC requests in the reference manual, as well as the +discussion of the input mapping, etc. + +File: RGUIDE, Node: Alignment, Up: Top, Previous: Text Features, Next: Sectioning + +This node discusses how to get things on different lines to +line up vertically. We assume that you are familiar with the +material in nodes Line Layout and Horizontal Positioning. +There are several different methods you can use; we outline +them below, calling attention to their advantages and +disadvantages for particular situations. We suggest that you +read about all of them, because each is good in different +cases. + +Method 1: Guessing. Sometimes just putting in spaces and tabs, +or "eyeballing" a distance can produce reasonable results, but +don't count on it. In particular, when using spaces and tabs, +items on different lines will line up only if you are using a +fixed width font, and you set the tab stops to 8, 16, 24, ..., +while the font in question is the principal font. For example: + .fs n -- make the font both the principal and current font + .rtabs -- a macro in the standard package that sets a + lot of tabs at the requisite intervals (8, 16, 24, ...) +In the case of a fixed width font this method works well because +the "guessing" has become exact. + +Method 2: Logical Tab Stops. In addition to the built-in tab +mechanism of R, the macro package provide a somewhat different +mechanism, which, unfortunately, also goes by the name of tabs +and tab stops. To tell the two apart, we have introduced the +term "logical tab stop" for the kind of tab stop implemented in +the macro package. A logical tab stop is name for a place +across the page. Here are the main macros involved (we +illustrate how you invoke them): + + ^Xs(name) - sets the logical tab stop called "name" so + that it "remembers" the current horizontal position. + This is implemented like this: + .de s + . nr tab_pos\^A0 hpos + . em + + ^Xt(name) - Go to the place remembered by the logical + tab stop called "name". + + ^Xp(name) - Just like ^Xt(name), except that it uses ^P, + so it never goes backwards, and prints an error message + if you try. + + ^Xbtab(name) - Just like ^Xt(name), except that it does + a line break first (i.e., it starts a new line). + +Here is an example. Say that you want your output to look like +this: foobar (arg1, + arg2, + arg3) + +Here are two ways to do it with the macros given above: + foobar (^Xs(1)arg1, + ^Xt(1)arg2, + ^Xt(1)arg3) + + foobar (^Xs(1)arg1, +^Xbtab(1)arg2, +^Xbtab(1)arg3) + +Here are some things you should notice: + + When using ^Xp or ^Xt at the beginning of a line, it is +a good idea to precede them by a space. This forces a line +break. Otherwise the tabbing may be attempted on the previous +line. ^Xbtab solves this problem. + + The argument to the ^Xs, ^Xt, etc., macros can be any +string of characters so long as it can be part of a register +name. (These characters are A through Z (case not +distinguished), 0 through 9, and _; for more information, see +node Registers.) + +Method 3: Indentation. If the kind of alignment you desire is +to have several lines all start at the same place, the +indentation may be the most convenient thing for you to use. +Node Line Layout has a detailed explanation of the indentation +and how to change it. However, the macro package provides some +macros that can help you: + + .align name - Set the indentation to the position + remembered by logical tab stop "name". + + .unalign - Return to the previous indentation. + + ^Xa(name) - Has the same effect as doing ^Xs(name) and + then ".align name", but happens all at once, and can be + used in-line. + +The earlier example could be expressed with these macros as +follows: foobar (^Xa(1)arg1, +arg2, +arg3) +.unalign + +This should be done in nofill mode; or else you could put a .BR +after each line, to force it out. + +The ^Xa and .align macros can be nested, as illustrated here: + + foobar (^Xa(1)arg1, +ralph (^Xa(2)inner-arg1, +inner-arg2), +.unalign +arg3) +.unalign + +Additional Features: + + For fancier alignment, such as different parts of +formulae, expressions, or equations, see node Math. For +outputting column oriented tables, see node Columnar Tables. + + ^Xc(name item1 item2 ... itemn) - will output the +items, separated by spaces, centered about the logical tab +position called "name". Naturally you must do a ^Xs(name) +sometime before doing this. + +File: RGUIDE, Node: Sectioning, Up: Top, Previous: Alignment, Next: Footnotes + +The standard macro package provides considerable assistance in +structuring a document into sections such as chapter, sections, +and appendices. For processing a large document in separate +pieces, see the macro package in R;SECT RMAC (it has its own +instructions at the beginning of the file). + +The kinds of sections supported by the standard macro package +are: + chapters + sections + subsections + subsubsections + subsubsubsections + appendices + achapters (chapters within appendices) + +These have the following nesting relationships: + + subsubsubsections are part of subsubsections + subsubsections are part of subsections + subsection are part of sections + sections are part of chapters, achapters, or appendices + achapters are part of appendices + +Note: There is a flag (number register) called achapters, +which says whether to use achapters or not (0 means no +achapters, 1 means achapters are all right). If achapters is +1, then sections may not be part of appendices, but may be part +of achapters. If achapters is 0, then achapters should not be +used at all. + +Here are the available macros: + + .chapter + .section + .subsection + .subsubsection + .subsubsubsection + .appendix + .achapter + +Each of these starts a section of the indicated kind. Each of +the macros takes a single argument, the name of the section. +For example: + .chapter "Suggestions for Future Research." +The current chapter number, section number, etc., are managed +automatically. They are available in these number registers: + + chapter, section, subsection, subsubsection, + subsubsubsection, appendix. + +In every case these are the numbers of the CURRENT section, and +are incremented when you define a new section of that kind. +For example, before any .chapter's, the chapter number register +will be 0; the first .chapter increments it to 1, etc. Also, +when a sectioning macro is invoked, the counter for the next +smaller kind of section is set to 0. For example, .chapter +sets section to 0. In sum, the numbering is done the "right +way", with numbers always starting at 1. Of course, you can +change the numbers freely. For example, if for some reason you +want the first section in some chapter to be numbered 0, just +set section to -1 after the .chapter and before the first +.section. + +Note: The chapter number register is used to number the +achapters in an appendix, if you are using achapters. + +The sectioning macros have two main effects: + + A header line is produced. + A line may be added to the table of contents. + +For details about the table of contents, see node Table of +Contents. + +The different things you can control about the header line are: + + The space produced before the line; + the amount of the .NE before the line; + the font used for the line; + the form of the header line itself; + the space produced after the line. + +Most of these are controlled by string registers, and in most +cases there is one register chapter_... that controls the value +used for chapters, appendices, and achapters, and one register +section_... that controls it for sections, subsections, etc. +Here are the various STRING registers, and their default +values: + chapter_space_before 1 (.sp ...) + section_space_before 1 (.sp ...) + chapter_need 5l (.ne ...) + section_need 4l (.ne ...) + chapter_space_after 1 (.sp ...) + section_space_after 1 (.sp ...) + + chapter_form \^Ssection_number. \^Ssection_title + section_form \^Ssection_number \^Ssection_title + subsection_form same as section_form + subsubsection_form same as section_form + subsubsubsection_form same as section_form + appendix_form ^C\^Ssection_number_title - \^Ssection_title + achapter_form same as chapter_form + +The string register section_title is always set to the title of +the section, namely, the argument to the sectioning macro. The +string registers section_number and section_number_title are a +bit more complicated, and we will talk about them in a minute. + +The font used for the header line is controlled by a NUMBER +register: + chapter_font big_font + section_font normal_font + +Now, here is how the section_number string register is set by +the various macros: + + chapter - \^Nchapter + section - \^Schapter_number.\^Nsection + subsection - \^Schapter_number.\^Nsection.\^Nsubsection + subsubsection, subsubsubsection - similarly + appendix - \^Schapter_number + achapter - \^Schapter_number + +And here is how the chapter_number string register is set by the +relevant macros: + + chapter - \^Nchapter + appendix - \^N:appendix (Roman numerals: I, II, III, ...) + achapter - \^N:appendix.\^Nchapter + +Lastly, here is how section_number_title is set by the relevant +macros: + + all except appendix - Section \^Ssection_number + appendix - Appendix \^Ssection_number + +Other details: + + Chapters normally start on a new page, but this is +controlled by the number register chapter_starts_page. If it +is 0, then a new page will not be started for each chapter; if +it is 1 (it starts as 1), then a new page will be started. +Part of this process is the forcing out of any figures, +footnotes, etc., for the previous chapter. Appendices always +start on a new page, and achapters never do. The appropriate +way to start a new section at the top of a page is to do: + .top_of_page +If you want any pending figures, etc., output first, do a + .force_out +before the .top_of_page. These macros interface more smoothly +with the macro package than .BP, for example. + Before going on, here are a few comments about .BP, .PN, +and the PAGE and NEXT_PAGE number registers. PAGE always +contains the number of the current page, and NEXT_PAGE always +contains the number of the next page to be output. Setting +NEXT_PAGE does not affect PAGE, but any time PAGE is set, +NEXT_PAGE is set to one plus the new value of PAGE. For +example, .NR PAGE 103 will set NEXT_PAGE to 104. If for some +reason you stack and unstack PAGE with .NV, both the stacking +and unstacking operations set PAGE, and therefore change +NEXT_PAGE. .BP sets NEXT_PAGE to its argument, if any; then it +sets PAGE to NEXT_PAGE; finally it causes a new page to be +started. .PN merely sets NEXT_PAGE; .NR NEXT_PAGE works just as +well. As mentioned above, it is suggested that you use +.top_of_page instead of .BP; but .PN is all right. + + Normally, page numbers increase throughout the +document. However, you can optionally number them on a +per-chapter basis, which causes the page number to be reset to 1 +at the start of each chapter. This feature is controlled by the +number register pages_per_chapter: if it is 0, pages are +numbered normally; if it is 1, pages are numbered per-chapter. +Almost all places in the macro package print the page number by +inserting the string register page_number, which is set as +follows: + normal page numbering: \^Npage + per-chapter numbering: \^Schapter_number-\^Npage +Of course you can change it if you wish. Note that when +per-chapter numbering is used, pages before the first chapter +will have page numbers like 0-1, 0-2, etc. + + Similarly, figure and table numbers increase throughout +the document, unless you set figures_per_chapter to 1, and then +they will be numbered per chapter (0 means use normal +numbering). The way the number of a figure or table is printed +is controlled by the contents of the string registers shown +below, with their setting in each case: + + figure_number_form + normal: \^Ncurrent_figure (1, 2, 3, ...) + per-chapter: \^Schapter_number.\^Ncurrent_figure + table_number_form + normal: \^N:current_table (A, B, C, ...) + per-chapter: \^Schapter_number.\^N:current_table + +When the figures_per_chapter number register is set to 1, the +footnote number will also be reset at the first opportunity in +each chapter. See node Footnotes for more details. + +File: RGUIDE, Node: Footnotes, Up: Top, Previous: Sectioning, Next: Figures + +The standard macro package has a fairly good footnote facility. +Here we describe what it does, and how to use it in the normal +case, and then describe what parts of it you may change, and +how to do it. + +The normal way of constructing a footnote when in fill mode is +like this (for instructions about how to do it when in nofill +mode, read on): + + .foot + ... body of the footnote ... + .efoot + +This text should be placed at exactly the point where you want +the superscript footnote number to appear. The body of the +footnote will be output at the bottom of the page. Footnotes +are output before any figures or tables that will appear at the +bottom of the page, and footnotes always come out in order. +The footnotes will be separated from the text by a short +horizontal line, and from the figures below them (if there are +any), by a long horizontal line. Each footnote will be +preceded by its number, the same number that appeared where you +did the .foot. If you omit or misspell EFOOT, then R will +throw everything up to the next .efoot (if any) into the +footnote. Typically the results of this are disastrous, and +result in error message like "macro fn_xxx getting big" and +possibly even "STORAGE FULL". + +If you do the above when in nofill mode, you will probably not +get what you want. Here is the recommended method for doing a +footnote when you are in nofill mode (the footnote itself will +be in fill mode, unless you do a .nf inside its body): + + Here is the first part of the line^Sfn ^G + .sfoot + ... the footnote + .efoot + and here is the rest of the line. + +If you really wanted the footnote number at the end of a line, +then omit the space and ^G. There are other ways that will sort +of work, but all I have tested have one flaw or another. + +If the footnote is too large to fit in the space remaining on +the current page, you can do one of two things: + + leave the space blank, and move the current line and the + footnote to the next page; or + + move the footnote to the next page, but continue with + text on the current page until it is full. + +The choice is controlled by the short_page number register: if +it is 0, then R will fill up the current page; if it is 1, then +the rest of the current page will be blank. The short_page +register starts set to 1. R cannot split a footnote into two +pieces. The primitives available in R make it somewhere +between extremely difficult and impossible to do that, so don't +ask for it - there is no easy fix. + +Normally R will start numbering footnotes on each page with 1. +However, the number register reset_per_page controls this +behavior. If it is set to 1, as it normally is, then the +numbers will start with 1 each time. But if you set +reset_per_page to 0, then the numbers will increase from page +to page. The number register figures_per_chapter controls +whether the footnote numbers are reset at the beginning of each +chapter; see node Sectioning for further information. + +Special care is exercised in the macro package so that +footnotes within figures (and other kept things) will work +right. However, do not expect it to work for any but the +simplest situations. + +Here are the other things about footnotes that you can adjust (N +means a number register, S means a string register), and their +default values: + + fn - S - ^U\^Ncfn^D in font fnfont; This is what is + output at the .foot. + + fnfont - N - normal_font - the font used to print the + superscript footnote number at the .foot. + + footnote_font - N - normal_font + footnote_bold_font - N - bold_font + footnote_italic_font - N - italic_font + These control the settings of normal_font, + italic_font, and bold_font in the footnote body. The + font in the footnote body starts set to footnote_font. + + footnote_spacing - S - 1 (.ls ...) The value for the + line spacing to be used in the footnote body. + + footnote_starter - S - ^Q \^Ncfn.^Q ^Q The string + printed at the beginning of the footnote body. The + number register cfn contains the the number of the + current footnote. + + footnote_sep_width - S - 2.5i The width of the line + separating the footnotes from the text (at the bottom of + the page). + + footnote_space_before - S - 1 The space to output + (.sp ...) before the footnote separator line. + + footnote_space_after - S - 1 The space to output + after the footnote separator line. + +NOTE: footnote_space_before and footnote_space_after should be +set before loading the macro package -- they are sampled once +and ignored thereafter. They are evaluated in the header +environment with the principal font set to heading_font. + +Let us say that you wanted your footnote references to be with +special symbols instead of numbers. For example, suppose that +you wanted to use *, **, ***, etc. Here is one way you could do +it: + .sr star1 * + .sr star2 ** + .sr star3 *** + ... as many as you think are necessary ... + .sr footnote_starter ^Q \^Sstar\^Ncfn^Q ^Q + .sr fn ^F\^S_font_\^Nfnfont!!^U\^Sstar\^Ncfn^D^F* + +If you had a more complicated set of special symbols, you might +want to use a macro to compute the right one to use: + + .sr fn ^F\^S_font_\^Nfnfont!!^U^Xfnsym(\^Ncfn)^D^F* + .sr footnote_starter ^Q ^Xfnsym(\^Ncfn)^Q ^Q + .de fnsym + . for count 1 \^A0 + *^G + . end for + . em + +(or any other macro in the place of the little one above). + +Hint: If R complains about undefined number or string registers +in a footnote, you may have done something like this: + + .foot + ... + .nr foo 5 + ... + ...^Nfoo... + ... + .efoot + +The above will not work because the body of a footnote is +always stuffed into a macro. The problem is that the .NR will +not be executed until the macro is expanded, but interpretation +of the ^N will be attempted while the macro is being defined. +The solution is to put a backslash before the ^N. + +File: RGUIDE, Node: Figures, Up: Top, Previous: Footnotes, Next: Lists + +The standard macro package provides a reasonably good figure +and table facility. We will describe the simplest way to use +it, and then explain the different options and how you can set +them up to tailor the facility to your preference. It should +be noted that the tables we are talking about here are no the +same as what the macro package calls "inline tables" (see node +Setoff Things), or highly structured tables with rows and +columns (see node Columnar Tables for more on them). It turns +out that the kind of tables we describe here are almost exactly +the same as figures: they are just called tables. Below we will +use the term figure to mean both tables and figures unless we +explicitly indicate otherwise. + +The concept of figure supported by the macro package is bunch +of text, space, etc., of arbitrary size. The macro package +will keep it on a single page, unless it is bigger than one +page. Further, figures will be produced in order. The +additional distinction between figures and other kept things +(see node Keeping) is that figures are automatically numbered +and labelled, and they may have table of contents lines +automatically created. + +Special care is used in the macro package to ensure that +figures within kept things will work right. However, do not +expect it to work for any but the simplest cases. + +There are two kinds of figures: normal figures, and page +figures. Page figures always come out on a separate page, and +always start at the top of the page. Page figures are more +efficient to produce than normal figures, because they do not +have to be expanded an extra time to discover their size; but +the placing of normal figures in the output is more flexible. + +Here is the way to define a figure: + + .begin_figure "the title of the figure" + ... the body of the figure ... + .finish_figure + +The body of a figure is always made into a macro, so the hint at +the end of node Footnotes applies for figures, too. + +If you want a page figure, just substitute .begin_page_figure +for .begin_figure; the .finish_figure remains the same. + +Defining tables works exactly the same way, except that the +macro names are different: + + .begin_table, + .begin_page_table, and + .finish_table + +Output Appearance and Options: + + Figures and tables are always output in order of +definition. As previously mentioned, page figures are always +output on separate pages. Normally, regular figures and table +will be output at the bottom of the current page, after any +footnotes, if there is room. If there is not room, figures and +tables will be output at the top of the next page. The macro +package will output as many figures, tables, and footnotes as +it can on each page, and (with the exception of page figures) +any "extra" space on a page will be filled with text, if there +is any. + If you want the macro package to output figures +(tables) where they appear, provided they fit, then you should +set the number register immediate_figure (immediate_table) to +1; it is normally 0. + Regular figures will be separated from any text or +footnotes above them by a FIGURE SEPARATOR. A figure separator +will also appear between adjacent figures, and after a figure, +if it might have text under it. A figure separator consists of +a horizontal line, of width figure_sep_width, preceded by space +of size figure_space_before and followed by space of size +figure_space_after. These three are all string registers, with +the default values indicated below: + + figure_sep_width - ll-indent!m (across the whole page) + figure_space_before - 1 + figure_space_after - 1 + +NOTE: figure_space_before and figure_space_after should be set +before loading the standard macro package, because they are +sampled once and ignored thereafter. They are evaluated in the +header environment with the principal font set to heading_font. + +Getting the Current Figure Number: + + The number registers current_figure and current_table +contain the number of the NEXT figure, but this will be just the +per-chapter number if per_chapter is set (see node Sectioning). +The string registers figure_number_form and table_number_form +are better, because they are adjusted when per_chapter is set. +So, you could refer to a figure in the text like this: + + ... are shown in Figure ^Sfigure_number_form. + .begin_figure ... + ... + .finish_figure + +To refer to the figure AFTER it is defined, you should sample +the value of figure_number_form and stick it in a string +register. For example: + + .sr prog1_figure Figure ^Sfigure_number_form + .begin_figure "The first program:" + ... + .finish_figure + .... See ^Sprog1_figure for details. + +The Title Line: + + The form of the title line in a figure (table) is +controlled by a string register, figure_title_form +(table_title_form). The default value is: + + figure_title_form - \^Sfigure_name_form. \^Sfigure_title + table_title_form - \^Stable_name_form. \^Stable_title + +Both of these actually have a ^F to switch to another font, and +a ^F* to switch back at the end. The fonts used are controlled +by these number registers, with the indicated default values: + + figure_title_font - bold_font + table_title_font - bold_font + +The string registers figure_title and table_title are always +set to the argument to the begin_xxx macro, that is, the title +that you supplied. + +The string registers xxx_name_form have these default values: + + figure_name_form - Fig. \^Sfigure_number_form + table_name_form - Table \^Stable_number_form + +The arrangement of figure_number_form and table_number_form +depends on the setting of per_chapter. Node Sectioning +explains this in detail. + +The title is normally printed at the top of the figure, before +the body. To have it printed at the bottom, after the body of +the figure, set the number register print_figure_title_top +(print_table_title_top) to 0; it is normally set to 1. To +suppress printing of a title line completely, set the number +register print_figure_title (print_table_title) to 0; it is +also normally set to 1. + +Options in the Body: + + There are several things you can control about the +setting up of the figure body; defaults will be listed below. +First, the string register figtab_spacing controls the initial +setting of the line spacing factor (.ls ...). The number +registers figure_font and table_font control the initial +setting of the principal and current font. The string register +figure_before (table_before) is inserted just before the body; +it will always appear on a separate line if it contains +anything. The string register figure_after (table_after) will +be inserted after the body of the figure (and after the title +line, if it is printed at the bottom of the figure). Here are +the default values for these registers: + + figtab_spacing - 1 + figure_font - normal_font + table_font - normal_font + figure_before, table_before, figure_after, table_after: + all empty + +Each figure always start in nofill mode, with left adjustment (.nf l). + +Table of Contents Information: + + For information on this, see node Table of Contents. + +File: RGUIDE, Node: Lists, Up: Top, Previous: Figures, Next: Table of contents + +The standard macro package has a convenient and highly flexible +facility for producing lists of items, such as this: + + 1. The first item of the list, which exntds + over two output lines. + + 2. The second, which uses just one line. + + 3. The third, which also uses just one line. + +The basic idea is straightforward, but there are a whole raft +of things you can adjust about lists, so we will have to get +more detailed about it. Also, there is a facility permitting +you to define other things that act like lists, but either set +up the parameters in a particular, unusual way, or need some +special capability not provided. We defer discussion of this +latter facility until the end of this node. + +We will call the different parts of a list, as in the text that +follows 1, 2, and 3, above, ELEMENTS of the list. There are +two kinds of lists: NORMAL LISTS and INVERTED LISTS. They are +distinguished by whether the first line of each element is +indented to the right or to the left of the rest of the lines +of that element. Normal lists indent to the right, as in +typical paragraphs; inverted lists indent to the left. The +example list above is a normal list, here is an inverted one: + + 1. This is the first line of a list element that + covers more than one line. As you can see, the + first line sticks out to the left. + + 2. ... + + 3. ... + +You may think that the terminology itself is inverted! (But +that's the way it was done originally, so we will not change +it.) Additionally, the elements of a list may be produced in +fill mode or nofill mode. We thus have four different list +macros: + + .list normal, filled + .ilist inverted, filled + .nofill_list normal, not filled + .nofill_ilist inverted, not filled + +To actually use these macros, you proceed as follows: + + .list + ... text for first element ... + .next + ... text for second element ... + .next + . + . + . + .next + ... text for last element ... + .end_list + +All four list macros use the SAME .next and .end_list macros in +this structure. Now here are the various things you can +control (default values for registers are indicated below). The +position of the first line of each element, and of succeeding +lines, is controlled by the string registers list_left_margin +and list_indent, as follows: + + normal list + first line at: list_left_margin plus list_indent + others at: list_left_margin + inverted list + first line at: list_left_margin + others at: list_left_margin plus list_indent + +These two (list_left_margin and list_indent) are string +registers containing horizontal expressions. You should know +that list_left_margin is not an absolute position, but rather +the amount by which the indentation is to be increased within a +list. If you have a list inside a list, the indentation will +be increased twice. The string register list_right_margin +controls the amount by which the right indentation is increased +in each list, in similar fashion. + +The rest of the options are a little bit simpler. The string +register list_begin_space is the amount to .SP before the first +list element; the string register list_after_space is the +amount to .SP after the last element; and the string register +list_space is the amount to .SP between list elements. Lastly, +the string register list_spacing is used to set .LS for each +element, and list_keep is the amount to .NE before each +element. + +Here are the default values for all of these registers: + + list_left_margin - 800m + list_right_margin - 800m + list_indent - 0 + list_begin_space - 1 + list_after_space - 1l + list_space - 1 + list_spacing - 1 + list_keep - 3 + +The lists we wrote down in the examples at the beginning of +this node would NOT be produced by the default values. In +particular, list_indent would have to be set to something like +8 to get an appearance similar to the examples (which were done +by hand). + +Some other useful things to know: + + Lists may be used within lists with no difficulties; it +was specifically designed so that this would work and thus +permit lists to be used for making outlines, etc. + The number register list_count contains the number of +the current element in the current list at all times, going 1, +2, 3, etc. This can be used to number the elements of a list +automatically, and is particularly effect when used in +combination with the list_start string register. List_start is +inserted at the beginning of each list element. It is normally +empty, but if you do the following, you will get automatically +numbered list elements with no effort on your part: + + .sr list_start \^Nlist_count. + +(There are two spaces at the end of the above line, so you will +get two spaces between the number and the list element text. + One other nice feature is that a tab stop is set at the +position list_left_margin plus list_indent, that is, at the +farther right of the places where the first line of each element +starts and the succeeding lines start. This permits the text +of an inverted list to be all lined up, with a number on the +left, and so forth. For example, setting list_start to be +list_count followed by a tab (instead of two spaces as above) +will produce output like this when used with inverted lists and +a non-zero list_indent (about 4 or 5 tends to be nice): + + 1. Here is the first element. Note how the second + line comes right under the first. + + 2. The second element + + Although we did not tell you before, list_indent and +list_space may be set to specific values for a single call of a +list macro by passing the value(s) as arguments to the list +macro. For example: + + .list 6 - set indent to 6 for this list only + .ilist 4 2.5 - set indent to 4 and space to 2.5 for + this list only + +Making your own list macros: + + Besides the very flexible list facility presented above, +it is possible to construct your own set of list macros in a +very simple way. In fact, there are two different things you +can do. If you want to have something that works exactly like +lists, but sets up the string and number registers a particular +way, you can do this: + + .de foo + . begin standard_list -- use this name + . nv list_... ... -- set up the registers your way + . ... -- use .nv and .sv + . _list_ + . em + +You use it like this: + + .foo + ... first element + .next + ... second element, etc. + .next + ... + .end_list + +The name "foo" can be anything you like. The four things in +brackets should be filled in by you so that you get normal or +inverted lists (0 = normal, 1= inverted), and fill or nofill +lists (0 = nofill, 1 = fill). The last two arguments, +opt-indent and opt-space, are the same as the optional +arguments to .list, etc., and you can fill them in or not, as +you please. It may interest you to know that .list, .ilist, +etc., are built just this way, to call _list_ as above. + + The other way to make your own list macros is somewhat +different. Here you get three new macros, to play the roles of +.list, .next, and .end_list. The idea is that you can take +advantage of the macro package writer's expertise and +cleverness to do the hard-to-figure-out part. You supply four +macros defining what to do at the beginning and end of each +item, and the beginning and end of the list as a whole, and then +use a special macro to make up the three ADDITIONAL macros, +which play the role of .list, .next, and .end_list. The +advantage is that the three macros automatically nest (in the +send that .list can be used inside a list) and the correct +environment switching and initialization is done for you. +Here are the details: + + Step 1. Define four little macros, having names not + used before. We will assume you called them "before", + "before_each", "after_each", and "after". The idea is + that "before" will be called before the first element, + "before_each" before each element, "after_each" after + each element, and "after" after the last element. For + your information, the entire list is in a begin block, + and each element (including the invocations of + before_each and after_each) is in an additional nested + begin block. This simplifies writing your macros (see + node Writing Macros for more information). + + Step 2. Decide on the name you want for the three + macros that will take the place of .list, .next, and + .end_list. These names MUST be different from any other + macros, including the ones you defined in step 1. We + will assume you called them "first", "middle", and + "last", for explanatory purposes. + + Step 3. Invoke def_list_macro: + + .def_list_macro first middle last before before_each after_each after + +The def_list_macro invocation will DEFINE three new macros +called "first", "middle", and "last"; those are the macros you +use in the body of your document: + + .first + ... first element ... + .middle + ... + .middle + ... + .last + +More Details: + + Any arguments to "first" will be passed through, +unchanged, to "before"; similarly, any arguments to "last" will +be passed through to "after". Any arguments to "middle" will +be ignored. + All processing is done in a temporary environment that +is initialized from the environment at the time of the call to +"first". If you like, you can supply an additional argument to +def_list_macro: the name of an environment to use for +initializing the temporary environment each time. The +advantage of doing it this way is that many things you may wish +to set (current and principal font, line spacing, tab stops, +etc.) will be done automatically when the temporary environment +is created. All you need do is setup one environment once at +the beginning, and give that environment's name to +def_list_macro. + The macros defined (e.g., "first", "middle", and +"last") will nest correctly, just as lists do, and will nest +nicely in other similar structures, too. + There is an empty macro, called NULL, that you can use +for those macros that you wish to do nothing. For example, if +everything you want to do in your lists can be set up by just +initializing the environment, then the following will do: + + .ev newenv + ... set things up ... + .ev text + .def_list_macro first middle last null null null null newenv + +A similar "roll your own feature" is presented for setoff +things in node Setoff Things. You may wish to examine that, +too. + +File: RGUIDE, Node: Table of contents, Up: Top, Previous: Lists, Next: Keeping + +Here we describe the table of contents feature of the standard +macro package, including the various options and the format +control available to you. + +The macro package accumulates a table of contents through the +document, and prints it at the end, with the correct page +numbers. For this method (printing at the end) to work, you +are required to tell R where the table of contents is to +appear, and how many pages long it will be. If you request a +table of contents, it will be produced automatically. + +To indicate the placement and size of the table of contents, you +do this at the place you want the table of contents to appear: + + .begin_table_of_contents n + +where "n" is the number of pages in the table of contents. If +you get this number wrong, an error message will be printed +when the table of contents is actually generated. From the +information it supplies, you can correct "n" and run the +document off again to get a document with correct page numbers. + +Options: + + You may control which of chapters, sections, +subsections, etc., appendices, and achapters will have entries +in the table of contents by setting the toc_level number +register. Here is how it works. Each kind of sectioning macro +has a level number: + + chapter - 1 + section - 2 + subsection - 3 + subsubsection - 4 + subsubsubsection - 5 + appendix - 1 + achapter - 2 + +When toc_level is set to "n", then only those kinds of sections +with level numbers less than or equal to "n" will have entries +in the table of contents. The default setting is 2, which +means that chapters, sections, appendices, and achapters will +all be entered, but none of the others. + +You may have lines printed on your terminal as each section is +encountered, indicating page numbers, etc. To get this, set +the tty_table_of_contents number register to 1 (it is normally +0). + +You may have a table of figures and/or table of tables in the +table of contents if you wish. The number registers +table_of_figures and table_of_tables will cause such tables to +be produced, if they are set to 1. They are normally set to 0. +No table of figures will be produced if there are no figures; +likewise for tables, so it does not hurt to set the number +registers to 1 even when you have no figures or tables. + +R normally assumes that the table of figures and table of +tables, if any, will consume one page, together. If this is +incorrect, set the number register tof_size to the number of +pages actually needed by the table of figures, and tot_size to +number of pages actually needed by the table of tables. For +tof_size, round fractions of pages DOWN; for tot_size, round +fractions of pages UP. This permits R to know on which page +the table of tables actually starts. Note that the table of +figures and table of tables are considered to be part of the +table of contents for .begin_table_of_contents' purposes, so +the number you supply should be the sum of the number pages +used by the table of contents proper and the number of pages +used by the table of figures and table of tables, if any. + +The only other options are whether the include a line for each +of the tables (table of contents, table of figures, and table +of tables) in the table of contents itself. The number +registers print_toc_toc_entry, print_tof_toc_entry, and +print_tot_toc_entry control each of these separately. When set +to 1, a line will appear in the table of contents for the +corresponding thing (unless no table of figures (table of +tables) is to be produced, in which case the line for table of +figures (table of tables) is suppressed). These numbers +registers are all normally 0 (meaning these lines are not +normally produced). + +Format Control: + + The detailed format of almost everything in the table +of contents is under your control. This leads to a whole bunch +of string and number registers, but we will try to sort them +out into easy to understand categories below. + + The FORM registers: + +These string registers contain what is actually added to the +table of contents by the different macros (.chapter, .section, +.begin_figure, etc.). Here they are, with their default values. +To get details on the string registers they use, you may have to +refer to node Sectioning or node Figures. + +chapter_toc_form - \^Ssection_number. \^Ssection_title ^T.^R \^Spage_number +section_toc_form - \^Ssection_number \^Ssection_title ^T.^R \^Spage_number +subsection_toc_form, subsubsection_toc_form, subsubsubsection_toc_form: + all just like section_toc_form +appendix_toc_form - \^Ssection_number_title. \^Ssection_title ^T.^R \^Spage_number +achapter_toc_form - just like chapter_toc_form + +figure_toc_form - \^Sfigure_name_form. \^Sfigure_title ^T.^R \\^Spage_number +table_toc_form - \^Stable_name_form. \^Stable_title ^T.^R \\^Spage_number + Note that the page_number string register insert is quoted twice. + This is because figures and tables are produced as macros and cause + another reading of the xxx_toc_form. The double quotation is needed + so that the table of contents entry reflects the page on which the + figure (table) is inserted, rather than where the macro was made. (TAR) + +toc_toc_form - Table of Contents ^T.^R \^Ntoc_start_page +tof_toc_form - Table of Figures ^T.^R \^Ntof_start_page +tot_toc_form - Table of Tables ^T.^R \^Ntot_start_page + Note: the xxx_start_page number registers are set up by + begin_table_of_contents, automatically. + + + The INDENT and FONT registers: + +There are a number of string registers that control the +indentation of the various form lines described above, and also +a several number registers describing what font to use for the +lines. Here is a list of them with their default values: + + chapter_toc_indent - 0 + section_toc_indent - 8 + subsection_toc_indent - 8 + subsubsection_toc_indent - 8 + subsubsubsection_toc_indent - 8 + appendix_toc_indent - 0 + achapter_toc_indent - 0 + figtab_toc_indent - 0 + + chapter_toc_font - big_font + also used for appendix and achapter + section_toc_font - normal_font + also used for subsection, subsubsection, and subsubsubsection. + figtab_toc_font - normal_font + + Registers controlling spacing: + +There are some string registers that control how much to .SP +before a given kind of table of contents entry, how much to .SP +after it, and how much to .NE before it. Here they are with +their defaults: + + chapter_toc_space_before - 1 + chapter_toc_space_after - 1 + chapter_toc_need - 5l + the above are used for appendix and achapter, too + section_space_before - 1 + section_space_after - 1 + section_need - 4l + the above are used for subsection, subsubsection, + and subsubsubsection, too. + figtab_toc_need - 5l + + + The Table of Contents, Table of Figures, and Table of + Tables announcements: + +The beginning of each of these is normally announced with a +header line. (This is not the same as the entries for these in +the table of contents itself.) Naturally, the announcement is +inserted only if there is a corresponding table to output. The +string registers below control the form and spacing of these +announcement lines: + + toc_blurb - ^C^F\^S_font_\^Nbig_font!!CONTENTS^F* + tof_blurb - ^C^F\^S_font_\^Nbig_font!!FIGURES^F* + tot_blurb - ^C^F\^S_font_\^Nbig_font!!TABLES^F* + toc_title - Table of Contents + tof_title - Table of Figures + tot_title - Table of Tables + toc_before_space - 4 + toc_between_space - 2 + tof_before_space - 2 + tof_between_space - 2 + tot_need - 5l + tot_before_space - 2 + tot_between_space - 2 + +Some of these need a little more description. The xxx_blurb +lines are the announcement lines themselves. The +xxx_before_space registers give the amount to .SP before the +corresponding announcement line. The xxx_between_space +registers give the amount to .SP after the announcement and +before the corresponding table. The tot_need register gives +the amount to .NE before the table of tables announcement. It +is needed because it is the only one of the the three that +might not start at the beginning of a new page. The title +string registers are used to set the section titles. The only +effect they might have is on the headings of the pages in the +table of contents, if you set the headings according to the +section title. + +File: RGUIDE, Node: Keeping, Up: Top, Previous, Table of Contents, Next: Setoff Things + +The term "keeping" (in this context) is used to mean keeping +some body of text on a single line or a single page. + +Line keeping: + + There are several ways you can keep something on one +line. Often the easiest is to make sure that it has no spaces, +tabs, or absolute horizontal position commands (^P, .hp, etc.; +see node Horizontal Positioning) in it. Note that the spaces +of concern are R control-spaces, and text spaces are no +problem. The ".tr @" line of the example set up file in node +Setup gives you a simple way of typing text spaces -- use @. +See nodes Input and Substitution for more details on that kind +of mechanism. + When building complicated formulae, not only must you +be careful not to use spaces, etc., you must remember to use +relative positioning (.HS) instead of absolute positioning. +The macros described in node Math all work that way. Another +slightly tricky point: if you write your own macros, don't +forget to put a ^G at the end any text outputting lines. The +^G will prevent the newline at the end of the line in the macro +from turning into a space in fill mode (or, worse, causing a +line break in nofill mode). + Your last alternative, which works for anything, is to +use the LKEEP macro. It works best when used inline: + ^Xlkeep(Here are some words to keep on one line.) +This macro works by using the WIDTH macro (see node Writing +Macros) to find out how big its arguments are (there can be any +number of arguments to LKEEP), and then either sticking them +in, if there is room, or doing a .BJ first if there is not. +See the reference manual for information on .BJ, if you need +it. + +Page Keeping: + + The simplest and cheapest way to keep something on a +single page is to use .NE. The .NE request takes a single +argument, a vertical expression, and if there is not that much +space on the current page, it causes a new page to be started. +Note: the macro package redefines .NE, so that it will take +into account the space used by any footnotes, figures, etc, +that will be coming out at the bottom of the current page; but +the meaning of .NE is essentially unchanged from the standard +request. + Another method is to put the text in question into a +figure or table, which are always kept on a single page. But +that is not always appropriate. In such cases you may use the +KEEP macro to keep the text on one page. It works like this: + + .keep + ... stuff to keep on one page ... + .end_keep + +This works by first stuffing the text between the .keep and +.end_keep into a macro, and then finding out how big it is with +the SIZE macro (see node Writing Macros). Then it does a .NE of +the required amount, and lastly, outputs the actual text. + +Sometimes you will have to remember that the body of a keep +becomes a macro first. The reason is that certain things will +require an extra backslash to make them work right. For +example: + + .keep + .nr foo 5 + ..... ^Nfoo ... + .end_keep + +will not work, because the .NR will NOT have been done at the +time the ^N will attempt to evaluate number register FOO. You +will get an error message like "undefined number register". +The solution is to but a backslash in front of the ^N, or to +move the .NR to before the .KEEP. + +Another kind of thing that will not work in a .keep is: + + .nr foo foo+1 + +This will not do what you expect, because the macro is expanded +twice -- once to find its size, and once to produce the output. +Any things like that can be made to work right by making them +conditional: + + .if ~ignore_level + . nr foo foo+1 + . end if + +(The ignore_level number register is non-zero when we are +expanding something to determine its size.) + +Special care is taken in the macro package to make this work +right when you have a figure or footnote in a kept thing. It +is done by having the figure and footnote macros do most of +their normal work when we are just finding out the sizes of +things, but the figure and footnote macros suppress the actual +queueing for output. It is conceivable that there are +complicated situations for which the methods used will not +work. + +Node Setoff Things describes some macros that do keeping for +you. It also describes how to build your own macros that do +so. + +If none of the things we have described suits your needs, you +should read up on macros (node Writing Macros), and read +R;KEEP DOC for details on using .keep in your own macros. + +File: RGUIDE, Node: Setoff Things, Up: Top, Previous: Keeping, Next: Math + +By "setoff things", we mean blocks of text that are set off +from the normal flow of text. Examples of such things are +quotations, program examples, big equations, diagrams, etc. +The figure mechanism provides one form of setoff things, but it +is not appropriate for everything. In particular, figures will +tend to entered in the table of contents, and have an automatic +naming and numbering scheme, which you may not want to use for +everything. Of course, tables give you another set of +these names and numbers, but there are still many cases where +you might want "anonymous" set off items. + +The list macros, discussed in node List, explain how to get a +list of set off items, and how to tailor the list facility. +However, that mechanism is also inappropriate for items that do +not appear in lists. + +To handle these situations, the macro package provides some +macros for you to use, which can be tailored somewhat. In +addition, it provides a way for you to build more macros that +work in a similar way. This second facility is nice when you +have several or many items that must all be done in a similar, +and is essential when you have several different types of +things, each of which has many occurrences. We will describe +the macros that are provided automatically first, and then tell +you how to build your own macros for different kinds of things. + +The simplest set of macros provided are .table and .end_table. +The "tables" produced by these are NOT the same as the tables +made by .begin_table and .finish_table. The coincidence of +names is unfortunate, but historical. The table macros work +like this: + + .table 3i + ... stuff to set off ... + .end_table + +You can specify any size you like in the .table line; it is used +to do a .NE. If you leave it blank, 5 is used. The only +options you can set are three string registers: + + table_begin_space - 1 - amount to .SP before body + table_end_space - 1l - amount to .SP after bofy + table_spacing - 1 - setting for .LS in body + +There are two other sets of macros provided initially, which +are more flexible than the table macros shown above. One set +does a .keep of its body, to make sure it stays on a single +page, and the other set does not. Otherwise they function the +same way. The keeping form is considerably more expensive, so +we suggest that you use it only when necessary. See node +Keeping for more discussion on how to keep things on one page. + +Here we illustrate how you would use the two sets of macros: + + .example + ... setoff stuff ... + .end_example + + .kept_example + ... setoff stuff, to be kept on one page ... + .end_kept_example + +Note that "example", etc., are the REAL names of these macros! +(That is, we wrote .example because it is actually the name of +the macro, not because we were writing an example.) + +That's all there is to it. There are a number of options you +can control about how the set off text will be produced. Here +is a list of the registers you can set, their default values, +and their effects. The number registers are presented first, +and then the string registers: + + example_font - normal_font - sets the principal and current font + example_fill - 0 - fill nor nofill? (1 = fill) + example_adjust - 0 - adjustment mode (0 = left, 3 = both) + example_tabs - 16 - number of tab stops to set + + example_left_margin - 500m - amount to increase indent + example_right_margin - 500m - amount to increase rindent + example_spacing - 1 - .ls ... + example_begin_space - 1l - amount to .sp before body + example_end_space - 1l - amount to .sp after body + example_tab_width - 8 - distance between tab stops + +All other things are initialized from the current environment. +The body itself is produced in a temporary environment, and is +always inside a begin block. Of course, in a kept_example, the +body will be stored in a macro, its size determined, and then +it will be output, as in .keep. See node Keeping for details +on problems you might run into because of that. + +The tab stops are set starting at the indentation, so if you +have example_font set to select a fixed width font, things will +line up the way they do on the screen in your editor. + +Examples of either kind may be nested in the other, with no +problems, EXCEPT: don't put a kept_example inside a +kept_example. There is no need to do so, anyway. + +Making your own setoff macros: + + There are two kinds of things you can do in terms of +making macros tailored to what you want to do: + + 1 - Have a macro set up the example options, and then + use the table or example macros essentially unchanged, or + + 2 - Construct an analogous set of macros where you set + up things yourself. + +In the first case, you write macros according to these +skeletons: + + .de new_table -- or any other NEW macro name + . begin standard_table + . nv .... -- use .NV and .SV to set options + . table1 \^A0 -- pass argument through + . em + + Used as: + .new_table + ... body ... + .end_table -- same as before + + .de new_example -- analogous to new_table + . begin standard_example + . nv ... + . example1 + . em + + Used as: + .new_example + ... body ... + .end_example + + .de new_kept_example -- analogous to new_table + . begin standard_example + . nv ... + . kept_example1 + . em + + Used as: + .new_kept_example + ... body ... + .end_kept_example + +Note: .table and .end_table, .example and .end_example, and +.kept_example and .end_kept_example are defined in terms of +table1, end_table1, example1, end_example1, kept_example1, +and end_kept_example1 just to make it easy for you to do what is +shown above. + +If the above method do not meet your needs, perhaps method 2 +will. In this second method, you write two macros: one to set +up and do what needs to be done before the body of the things +you are defining, and one to be done after. Then you use a +special macro to create two NEW macros, which call upon your +macros, but have these additional features: + + They nest properly; + They switch environments correctly; + They set up an extra begin block for you. + +Here are the details: + + Step 1 - Define two little macros, one to be invoked + before the setoff stuff, to set things up, and one to do + anything needed at the end. We will assume for the sake + of argument that you called them "before" and "after". + + Step 2 - Pick two previously unused names. If they are + "first" and "last", then they "fill in the blanks" in + this way when you use them: + + .first + ... setoff stuff ... + .last + + Step 3 - Use .def_setoff_macro to actually construct the + macros "first" and "last" in terms of "before" and + "after", like this: + + .def_setoff_macro first last before after + +If you want either of the "before" or "after" macros to do +nothing, you can use the NULL macro, which does nothing. For +example: + + .def_setoff_macro foo bar setup null + +There is also a macro called .def_kept_setoff_macro that works +in exactly the same way as .det_setoff_macro, except that it +does a .keep of the body of the setoff stuff. It may interest +you to know that the table and example macros are actually +constructed this way with def_setoff_macro and +def_kept_setoff_macro. + +More details you should know: + + The macros constructed by def_setoff_macro and +def_kept_setoff_macro will call your "before" and "after" +macros in a temporary environment in a begin block. The body +of any particular use will be expanded in this same environment +and begin block. Any arguments given to "first" will be passed +directly to "before", and any arguments to "last" will be +passed to "after". That is how itable gets the size of the +table in a .table, for example. In a kept setoff macro, the +"before" and "after" macros are invoked inside the .keep, +inside an extra begin block, if this makes any difference to +you. + The temporary environment created by your "first" macro +is normally initialized from the environment current at the +time "first" is invoked, but if you give def_setoff_macro or +def_kept_setoff_macro one more argument, it will use it as the +name of an environment, and initialize the temporary +environment from that environment. If everything of interest +to you can be expressed in an environment, then this provides a +very simple and efficient way to tailor a macro. For example, +say that you have set up the "foo" environment to be what you +need. Then the following will create two macros that "do the +right thing": + + .def_setoff_macro first last null null foo + +File: RGUIDE, Node: Math, Up: Top, Previous: Setoff Things, Next: Columnar Tables + +There are a number of little macros in the standard macro +package for assisting you in writing mathematical formulae, +equations, and the like. They have been made up to work well +together, and you should read node Writing Macros before +attempting to write your own macros for this sort of thing. + +These macros are setup so that if you place surrounding things +directly adjacent on both sides (no control-spaces, that is), +then whole formulae will move as a unit. + +Features provided: + + Some of these features have been described elsewhere, +but we will give you a complete list, anyway: + + superscripting and subscripting -- Simple situations are + handled as described in node Superscripting and + Subscripting, but some of the more common + complicated cases are described below. + + aligning items -- Node Alignment has a complete + discussion; see also node Columnar Tables. + +The rest of the list is a macro by macro description: + + arg1 +^Xdiv(arg1 arg2) generates: ---- + arg2 + + Notes: Works for any arguments, including other invocations + of div. The line will be as long as the longer of the + two arguments. + + ___ +^Xsqroot(arg) generates: \/arg + + Notes: The string register SQROOT can be set to a nice + square root symbol in some font, if you like; it starts + set to a backslash followed by a slash, as above. The + line at the top is drawn from the beginning to the end + of arg, one line up. The string register SQVOFF can be + set to change the vertical position of the line; it is + the distance from the baseline of "arg" to the position + where you want the line. It is normally set to + "fheight!m". The string register SQHOFF can be set to + the amount by which you want the line to extend to the + left beyond "arg". It may be positive or negative; it + starts at 0. The idea is to set it so that the line + just joins up with your chosen square root sign. + + Only one size of square root is supported, but you could + easily write a macro that sets the SQROOT, SQHOFF, and + SQVOFF string registers for a variety of different + square root symbols, and get different sizes that way. + You may have to put ^V adjustments into the string + register SQROOT to get a pleasing appearance (see node + Supscripting and Subscripting). + + item1 +^Xabove(item1 item2) - generates: item2 + That is, item1 centered above item2; item2 on the + baseline. The string register ABOVE_SEP controls the + amount of white space between item1 and item2; it is a + vertical expression, normally "20m". + +^Xbelow(item1 item2) - generates: item2 + item1 + That is, item1 centered below item2; item2 on the + baseline. The string register BELOW_SEP controls the + amount of white space between the two; it is a vertical + expression, normally "20m". + + item3 +^Xbottop(item1 item2 item3) - generates: item1 + item2 + That is, item1 with item2 centered below it, and item3 + centered above it. This is goos for summations, unions, + etc. For example, ^Xbottop(U n=1 |a|)^b^Xsub(n) + becomes: |a| + U a + n=1 n + The string registers BOTTOP_TOP_SEP and BOTTOP_BOT_SEP + control the amount amount of white space between item1 + and item3 and item2 (respectively). They are normally + both set to "20m". + + item2 +^Xsubsup(item1 item2) generates: + item1 + + (But closer together vertically.) This can be used to + give something both superscripts and subscripts + simultaneously. For example, a^Xsubsup(j i) produces + this: i + a + j + The top and bottom items are normally done with a single + ^U or ^D. If your formulae overlap when output that + way, you should include extra vertical adjustment in the + items themselves, e.g.: a^Xsubsup(^Di^Xsup(j)^U ^Um^Xsub(n)^D) + to produce this: m + n + a + j + i + and so forth. + +Well, that's it. But with care, you should be able to build +similar macros or special cases readily; and the above handle a +lot of things anyway. Node Writing Macros gives some hints on +writing your own macros for this kind of thing. + +File: RGUIDE, Node: Columnar Tables, Up: Top, Previous: Math, Next: References + +There is not too much we can do here except describe some +general principals, and point you to available macro packages. + +R can do pretty good horizontal positioning, and draw horizontal +lines, but its notion of the page is a bit primitive, and it +would be non-trivial to try to draw vertical lines. So don't +expect to be able to draw boxes around stuff, etc., very easily. + +It is not too hard to get straight columns, even with optional +centering and right flushing of items in columns (using ^C and +^R), but you get multiple columns of FILLED text very easily +(it requires writing macros to do the justification - ugh!). + +If you want the width of a column determined by the widest +element in it, then the text will have to be scanned three +times, at least: once to put it in a macro, a second time to +find the sizes, and a third time to actually output it. The +WIDTH and SIZE macros do just that kind of thing. They are +described in more detail in node Writing Macros. + +You can get a simple columnar table in this fashion: + + 1.1^P(pos2)1.2^P(pos3)...^P(posK-1)1.K + 2.1^P(pos2)2.2^P(pos3)...^P(posK-1)2.K + ... + N.1^P(pos2)N.2^P(pos3)...^P(posK-1)N.K + +Naturally, you can change indent to adjust the position of the +first column, or even precede it with ^P's. You can use ^C or +^R before an item to center or right flush it in its column, +etc. All the column macro packages generate output like this +when done, but they may do a lot of work first to figure out +the ^P positions, and possibly rearrange the items from the way +you supplied them. + +A technique even easier than the above is to use a fixed width +font, and line things uyp in your text editor. Of course, it is +not as flexible, and fixed width fonts don't look as good, +typically. You can also try it with variable width fonts, but +you will probably have to adjust it some to get the desired +appearance. + +The package in R;TAB RMAC is simple to use, and may save you a +lot of trouble over the above, by-hand methods. It has good +instructions at the beginning of the file. The package in +R;COLUMN RMAC can do more than the TAB package, and is only +slightly harder to use. It also has instructions at the +beginning. If you plan to do any amount of tabular work, you +should read up on these -- they can save you a lot of grief. + +File: RGUIDE, Node: References, Up: Top, Previous: Columnar Tables, Next: Writing Macros + +There are several packages available for assisting you with +constructing bibliographies and references. They are: + R;REF RMAC + R;REF1 RMAC + R;REF2 RMAC + R;REF3 RMAC +The general method of use for each is the same: + +1. At the beginning of your file, you define the references, in +the order in which you wish them to appear in the bibliography. +(The bibliography itself will be remembered and produced later.) +Each reference is defined this way: + + .ref Foo67 + Foobar, John, Hacking at M.I.T., April, 1967. + .em + +2. To refer to any of these in the text, you insert the string +register of the name given in the .ref line: + + ... and so was Foobar's work [^SFoo67]. ... + +3. At the place where you want the bibliography to appear, do +this: + .insert_refs + +If you need something different, just take one of these +packages (they are all very much the same), and make a private +copy, modified as you see fit. You should be able to inspect +them and see what they do fairly readily by now. + +Here are the details on the four packages provided: + + In each, the number registers ref_margin and ref_indent +are used to set up the margins when the bibliography is output. +The INDENT is set to the sum of ref_margin and ref_indent, and +the RINDENT is set to ref_margin. The first line of each +reference will begin at ref_margin, and hence will stick out to +the left of succeeding lines for the same reference. The bodies +of the references, as opposed to the reference numbers or codes, +will always start at ref_margin plus ref_indent. The +bibliography is produced in fill mode, with the principal and +current fonts both 0. There is a ".ne 3l" before each +reference. + +Note: The beauty of these files is that you can change the +format used by just changing which file you .SO, because they +all use exactly the same initial set up (.ref) the same +referencing scheme (the string registers) and the same +inserting technique (.insert_refs). If there were sufficient +call for some other flavor, it could easily be added. + + REF - The references are numbered, in the order you +originally gave them. So, ^SFoo67 might turn out to be "8", or +something. The bibliography lines start with the reference +number followed by a period, e.g., "1.". The default values +for ref_margin and ref_indent are both 500 (i.e., 500 mils). + + REF1 - The references come out as the keyword string +you used in the .ref line; e.g., ^SFoo67 will print as "Foo67". +The bibliography line would start with "[Foo67]". The defaults +for ref_margin and ref_indent are 500 and 1000, respectively. +(The 100 is to leave room for the [Foo67].) + + REF2 - CACM format: The references should be entered +in alphabetical order. When referred to in the text, the +reference will print as number. The bibliography lines use the +same number, followed by a period, both in boldface (according +to the setting of bold_font when the REF2 package is read). +That is followed only by a space before the rest of the line +appears. When you do .insert_refs, it will output a header +line, "References", in boldface, followed by the references. +The ref_indent number register is ignored; ref_margin is +normally 500. Single spacing is used. + + REF3 - This differs from REF2 only slightly. The +"References" line will be centered, and there will be one blank +line before each reference. + +File: RGUIDE, Node: Writing Macros, Up: Top, Previous: References, Next: Debugging + +There are many topics that could be covered here; we will not +attempt to make you expert in anything, but try to give you +some hints and references. First, there are some mechanisms of +R that you should understand before attempting write anything +except simple macros. We will introduce you to the subjects +listed below, and give you some hints. Beyond that, you should +read the reference manual, and perhaps look at the macro +package itself, to get ideas of more sophisticated techniques +and tricks. + +* Menu: + +* Macro Definition:: How to define a macro, and how macro + expansion works. + +* Environments:: What you should know about them, and a + guide to which things depend on the + current environment, and which do not. + +* Variables and the Stack:: + How to use R variables (as opposed to + registers), and the control structures. + +* Macro Writer's Hints:: + A collection of little suggestions and + techniques. + +File: RGUIDE, Node: Macro Definition, Up: Writing Macros, Next: Environments + +Defining a macro is quite simple (although getting it RIGHT is +another matter!) You just use the .DE request: + + .de + ... body of macro ... + . em + +The macro definition continues until the first line with .EM. +If, for some reason, you need a line with .EM on it in the macro +itself, you must write it this way: + + .de + ... + \. em + ... + . em + +The \ PROTECTS the "." (which is actually a control-.) from +being interpreted until later. The .DE request is actually a +little more flexible: + + .de + +defines a macro that is terminated with "." instead of +".EM". Further, after the macro is defined, the . line +will be executed as a normal request line, so you may have to +define a little macro named , which does nothing: + + .de + . em + +You may in fact define permit a macro to be terminated by one of +a set of terminators: + + .de ... + +This would be useful in a kept form of the LIST macros, where +aech item is accumulated into the body of a macro, but the +terminator may be "next" or "end_list", and you cannot tell in +advance which it will be. Thus, .list and .next could have in +them a .DE line like this: + + .de foo next end_list + +It is considered good style to indent everything in the body of +macro that you can, by a space or two, to make it more +readable. (See also node Variables and the Stack for more +suggestions on this.) + +The .KEEP and .END_KEEP macros (see node Keeping) use the +optional terminator feature, something like this: + + .de keep + ... + . de keep_holder end_keep + . em + + .de end_keep + ... + . em + +That is, when .KEEP is run, it will cause the definition of a +new macro, KEEP_HOLDER, which will hold your kept stuff, up +through the next .END_KEEP. The .END_KEEP is also invoked, +which has the effect of doing an appropriate .NE, and then +invoking the recently defined KEEP_HOLDER to actually produce +your kept item. (The actual macros are more complicated, to +take care of other problems, but this is the essence of the +scheme used.) + +When a macro is DEFINED with .DE, nothing in its body is +"evaluated", EXCEPT any unprotected ^N's, ^S's, or ^A's. These +are evaluated so that the mechanism will be powerful enough +that you can write macros that define macros, etc. If you are +NOT defining a macro in a macro, then the general rule is that +every ^N, ^S, and ^A should have one backslash in front of it +to protect it. That way it will not be evaluated when the +macro is defined, but rather when the macro is invoked. If you +define a macro in a macro, then most of the ^N's, ^S's and ^A's +will need TWO backslashes, etc. The macro .def_setoff_macro is +good example of this sort of thing. + +Control-A: + +The R control character, control-A, is the method by which +macros gain access to their arguments. (Node Macro Invocation +describes how the argument are defined for each invocation; +perhaps you should review it if you do not feel comfortable +with the subject.) The arguments are referred to by position, +the first one begin numbered 0, the second argument 1, etc. To +get argument N, you write ^AN (or, more likely, \^AN). +Actually, that works only if N is between 0 and 9. ^A(exp) can +be used for an arbitrary expression, including ones bigger than +9. The number register NARGS contains the number of arguments +supplied to the current macro. For example: + + . for n 0 nargs-1 + . ... \^A(n) ... + . end for + +Macros can even distinguish whether they are called with a +control-. or control-', with "^A.", which yields "1" if the +macro was called with control-., and "0" otherwise. "0" is +also the result if the macro was called with ^X. + + One way of thinking of macros is as if they are like +string registers. In fact, they work almost exactly the same +way. Of course they are defined differently, and different +things trigger their insertion, but both are essentially a text +substitution mechanism. What that means is, that the insertion +of a string register, or invocation of a macro, are little more +than just the substitution of the contents of the string +register (the body of the macro) in the place of the call, in +the input stream. That is in fact how they are implemented. +So, although macros are like programs, there are ways in which +they are NOT like programs, too. + For example, besides grouping together requests in +order to perform a specific function, macros are also used to +hold text to be printed later. That is how table of contents, +references, keeping, etc., are implemented. For these things, +it is often convenient to add a little bit to the macro each +time; the .AM request does that. It is also possible to access +a macro body as a string. See the reference manual for details +on these features, and also for information on the string +processing available. + +File: RGUIDE, Node: Environments, Up: Writing Macros, Previous: Macro Definition, Next: Variables and the Stack + + In R, certain properties controlling the appearance of the +output are part of an ENVIRONMENT. The interesting thing about +this is that if you change to another environment, all those +properties change, "magically" and instantaneously. + Environments have names, and the name of the current +environment is always available in the string register ENV. In +fact, on way to change to other environments is to change ENV. +The other relevant requests are: + + .EV e - Change to environment "e". If it does not + exist, then create it, initialized in a standard way. + + .ES e - Save all parameters of the current environment, + INCLUDING ANY PARTIAL OUTPUT LINE, in environment "e". + A new environment is created if "e" does not exist. + + .XE e - Expunge (throw away) environment "e". If "e" is + the current environment, it will not be thrown away + until another environment is selected. + + The initial environment is called TEXT. Some other +environments used in the macro package are CONTENTS (table of +contents), TABLES (figures and tables), FOOTNOTES (footnotes), +HEADER (headers and footers), IGNORExxx (in IGNORE), LISTENVxxx +(in lists), and SETOFFENVxxx (in setoff things). In general, +things are done in other environments to prevent irrevocable +side-effects, such as a line break that would force out a +partial line in the wrong place. + +Here is a list of the things that are kept with each +environment: + + the partial output line + principal and current font, and a font stack for ^F and .FS + (FONT, PFONT) + line spacing (LS) + fill and adjust modes (FILL, ADJUST, ADJUST_FILL, ADJUST_NOFILL) + vertical offset (VOFF) + indentation (INDENT, RINDENT, and temporary indent) + tab stops (.TA, etc.) + underscoring (UL, UL_SPACE, and UOFF) + +Everything else is common to everything is R, so care must be +used to change such things back if you want to change a value +temporarily. See node Variables and the Stack for some hints +about that. + +File: RGUIDE, Node: Variables and the Stack, Up: Writing Macros, Previous: Environments, Next: Macro Writer's Hints + +To make saving and restoration of values easier, and reduce +problems arising from unwittingly using the same register name +in two or more places, R provides what we call a STACK of +values for string and number registers. This stack work in +conjunction with the flow control requests, .BE, .IF, .EF, .WH, +and .FR. We will explain the meaning of the control structures +in a moment. For now, all you need to know is that we will +call the lines read between a .BE, .IF, .EF, .WH, or .FR and +the next .EN a BLOCK, and say that we are in a BLOCK during the +time those lines are read. + +When you are in a block, the .NV and .SV requests may be used to +save the previous value of a number or string register, and set +the register to a new value. The register need not have a +previous value. Here is an example: + + .be bar + . nv foo 10 + .... + . en + +The nice thing about this is that when the .EN comes by, all +the .NV's and .SV's done since the .BE will be undone. In this +way we can use FOO in the block above temporarily without +caring whether FOO was being used somewhere else. This feature +is convenient a lot of the time, but becomes essential when +writing macros such as .LIST, which can be nested inside +themselves. + +Stylistic note: + + The macro package is set up so that the following long +names are equivalent to the short names given in the R manual. +It is considered good style to use the long names, and we will +do so from now on: + + .begin .be + .else .ef -- use the appropriate one of these two + .elseif .ef -- + .for .fr + .while .wh + .end .en + .lbegin .if -- when used just to introduce a new block + +It is also customary to put the name of the kind of thing ended +after .END, e.g.: + + .for n 1 nargs + ... + . end for + +Further, it is good style to indent one or two spaces for each +level of blocks you are in. For example: + + .de foo + . lbegin + . nv foo 0 + . for n 1 nargs + . nr foo foo+n + . end for + . end lbegin + . em + +[The above is a useless macro!] + +In addition to .NV and .SV, there are two requests, .HV and .VV +that make it easier to do calculations in blocks. .HV and .VV +work exactly like .HX and .VX, except that they save the number +register that they will be changing. The saving is done after +the new value is computed, but before it is stored, which is +true of .NV and .SV, too, so the following works: + + .hv indent indent!m 1i + +An obscurity: + + In some cases care must be used about the order in +which things are saved and restored, but it usually does not +make too much difference. Here is a case where it does: + + .nv fill 0 + .nv adjust 0 + +The problem here comes if someone change FILL later. Say a .FI +is done. Then when the .END is encountered, ADJUST will be +restored. BUT, it will be the fill mode adjust that is +restored, not the nofill mode adjust. Therefore, when you wish +to save and restore FILL and ADJUST safely, you can either do +this: + + .nv fill 0 + .nv adjust_nofill 0 + +(or similarly for fill mode), or this, which works when you do +not know in advance what the new fill mode will be: + + .nv fill \^A0 + .nv adjust 0 + .nv fill \^A0 + +This works because FILL is restored before ADJUST, so that the +correct adjust mode is restored. If you thought of just +swapping the order of saving fill and adjust, that won't work +because then the wrong adjust mode may be set up, etc. + +It is possible that you might run into other situations like +the one shown above, but we believe not. + +Control Structure: + + The reference manual discusses this in detail, but here +are a few tips: + + .FOR and .WHILE can be used only in macros (because they + involve going backwards, so the text must be handy) + + Only .BEGIN can be put in a macro without a matching + .END in the same macro. The LIST, EXAMPLE, KEEP, and + other macros provide examples of its use. + + .LBEGIN is a convenient way to start a new block for + saving and restoring some registers. + + Sometimes you have to introduce a variable before you + have a value for it, so that it will not be lost. For + example: + .if ... + . nv foo exp1 + .else + . nv foo exp2 + . end if + + will not work. You should do this instead: + + .nv foo 0 + .if ... + . nr foo exp1 + .else + . nr foo exp2 + . endif + +One last hint: Don't forget that every time around a loop +(.FOR or .WHILE), and every macro invocation involves scanning +a potentially large amount of text, and R's speed in limited by +its character processing rate. + +File: RGUIDE, Node: Macro Writer's Hints, Up: Writing Macros, Previous: Variables and the Stack + +Below is a list of little hints, in no particular order, that +may help you in writing your own macros. + +Finding sizes of things: + + The macro package provides two very useful macros for +this, .SIZE and .WIDTH. They work like this: + + .width arg - Finds out the width of "arg", and saves it + in the number register WIDTH (in mils). It also saves + its height above the baseline in the number register HA, + and its height below the baseline in HB. + + .size name - Finds of the vertical size of the macro + "name", when expanded. The number register SIZE will + contain the size in mils. + +Both macros work by expanding their arguments in a temporary +environment set up specially so as to cause no side-effects. +The macro .IGNORE provides that environment. If you feel the +need to write other size finding macros, make sure you +understand the operation of WIDTH and SIZE, first; read the +macro package! If you are not very careful you can cause weird +things to happen to your output. + +Gluing: + + When writing macros that output little pieces of text, +don't forget that usually you want to follow each text line in +the macro with a ^G, so that the newline will not be output as +a space, or cause a line break. Note that you can put ^G's at +the start of a line, to eat the PREVIOUS newline, provided +there has not been a breaking request in between. However, +macros that are invoked inline have an implicit ^G both before +an after them. So, generally a ^G is necessary only at the end +of each text line in a macro. + +Mathematical Macros: + + The crucial things to remember are: + + Don't forget ^G's. + Use the variable stack, so your expressions will nest. + Use .WIDTH to find widths and heights of + expressions; in particular, this kind of + construction will not work in every case: + .nr temp hpos + ... output something ... + .hs temp-hpos!m + It fails because the outputting might force a line + break, which makes the second measurement of hpos + bogus compared to the first one. + Use .HS, never ^P, .HP, or setting HPOS. + Use relative adjustments to VOFF (^U, ^D, ^V(+...), + ^V(-...)). + When drawing a line with underscores, be careful that + the states of UL, UL_SPACE, and UOFF will be + restored correctly. For example: + .lbegin + . nv ul 1 + . nv ul_space 1 + . nv uoff voff + . hs ... + . end lbegin + +Passing Arguments: + + If you wish to pass the arguments of one macro through +to another macro, you can use the following lines: + + . sr args \^A:0 + . for n 1 nargs-1 + . sr args \^S:args \^A:(n) + . end for + . foo \^S:args + +The ":"'s are required if you want to make sure that control +characters in the arguments are not interpreted too soon. +Naturally this works with any number of arguments. A slight +variation will "glue" all the arguments together into one +argument, with spaces in between: + + ... + . foo {\^S:args} + +There are other useful variations on this trick. + +File: RGUIDE, Node: Debugging, Up: Top, Previous: Writing Macros, Next: Miscellaneous + +This node is organized as a collection of minor hints and +techniques, in no particular order. + +Debug and friends: + + R supports a number register called DEBUG, which is +normally 0, but is set to 1 if you put a -D in the command line +(see node Invoking R for details on the command line). There +is no other way to set DEBUG. DEBUG is tested at various +places int he macro package, and if it is set, additional +information will be printed on your terminal (or in your error +message file). In addition, there are number registers called +HEADER_DEBUG, FOOTER_DEBUG, FIGURE_DEBUG, and FOOTNOTE_DEBUG, +which give extra information concerning the feature they name. +They are normally off (0); setting them to 1 turns them on. +They maybe turned on and off at your whim. + This information can be very helpful is figuring out +problems such mysterious blank pages near a figure or footnote, +etc. [Note: a common cause of that kind of misbehavior is +something that changes size between the time its size is +measured and it is actually printed. Naturally figures, +footnotes, etc., are not SUPPOSED to change size, but sometimes +they do, if you put "funny" stuff in them.] + +Tracing: + + R has a very useful trace feature, controlled by the +TRACE number register. Normally it is 0 (off); setting it to 1 +turns tracing on. Another way to turn tracing on is to put -T +in the command line (see node Invoking R), but it is often more +useful to turn tracing on just in the region of the problem. +For example: + + .nr trace 1 + ... + .nr trace 0 + +You can turn tracing on and off as much as you like. + What you get when tracing is on is two extra files +describing what R actually saw. If the first name of your input +file is FOO, they will be called FOO RTA and FOO RTB (for R +Trace A and R Trace B). The A file shows every character +scanned. For example, if you have written: + + .sr foo ^Sralph!or + +then the A file will show both scanning of the string register +name "ralph", and the characters that come out of it, etc. + The B file is a "higher level" trace, often easier to +wade through to find the problem. The B trace shows only the +actual values seen by each request. For example, in a .nr, all +it will show is ".NR FOO 1045" where 1045 was the value of what +might have been a quite involved expression. Other things are +made briefer and standardized in similar ways. + Tracing can be very useful, but the output can be HUGE, +because of all the extra stuff that happens behind your back in +the macro package. That is why we suggest you be selective in +the region that you trace. + About the only thing tracing cannot do is show you what +you output looks like. For debugging a document, you can often +figure things out by examining in your text editor output for +the LPT device. But sometimes the problem only shows up on a +particular device, and then you must apply your deductive +powers. + +Some Common Mistakes: + + Forgetting a ^F* to switch fonts back. + + Forgetting a matching .END, .FINISH_FIGURE, .EFOOT, + .END_LIST, etc. Some of these will cause R to attempt + to put large parts of your file into a macro, and say + "macro getting big", or even STORAGE OVERFLOW. (On the + larger computers, these mistakes are the main causes of + STORAGE OVERFLOW.) + + Causing a line break by forgetting a ^G, or inserting a + space or newline in the inappropriate place. + + Not getting a line break, because you are not in nofill + mode, or you omitted a space somewhere. + + Omitting a backslash where you need it. This often + results in an "undefined register" message. + +File: RGUIDE, Node: Miscellaneous, Up: Top, Previous: Debugging, Next: Top + +Here are some of the things that we did not discuss. You are on +your own (see the reference manual, etc.) + + Indexing, .II, .ID. + Traps, .ST, .CT, .RT + Writing to files, .WF, .WS, .WM, .WL, .WA, .WE + Terminal I/O, .RL, .TM + Miscellaneous Requests: .PN, .BJ, .ND, .SD, .XN, .XS, + .SB, .SI, .SC, .SL, .RM, .EQ, .MS, .NX, .RD, + .EX, .XC, .PR, .PW, .PL + Other control characters: ^K + Other built-in registers: DAY, ENABLED, END_OF_SENTENCE, + EVEN, FHEIGHT, FWIDTH, HABOVE, HBELOW, + INTERACTIVE, LPI, LVPU, MACRO_ARG_LIMIT, + MACRO_LIMIT, MARGIN_LIMIT, MAXHPOS, MONTH, + PAGE_EMPTY, PBOTTOM, PL, PLEFT, PRIGHT, + PRINTING, PTOP, RUNTIME, SPACING, STATS, + VERSION, VPLOST, VTRAP, YEAR, CFDATE, CFILENAME, + CFTIME, DATE, DEVICE, FDATE, FILENAME, FTIME, + LINENO, MACRO, SDATE, TIME, USER + +Not to mention many things internal to the macro package. diff --git a/doc/programs.md b/doc/programs.md index 785c75e6..9c373295 100644 --- a/doc/programs.md +++ b/doc/programs.md @@ -261,6 +261,7 @@ - PWORD, replacement for ATSIGN HACTRN that requires registered logins. - QB, the game of Qubic. - QUOTE, prints out a random quote. +- R, typesetting software. - REATTA, reattaches disowned jobs to terminal. - RECORD, save TV display contents as text file. - REDRCT, redirect IP routing.