summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/rmpage/rmpage.tex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/rmpage/rmpage.tex
Initial commit
Diffstat (limited to 'macros/latex/contrib/rmpage/rmpage.tex')
-rw-r--r--macros/latex/contrib/rmpage/rmpage.tex5528
1 files changed, 5528 insertions, 0 deletions
diff --git a/macros/latex/contrib/rmpage/rmpage.tex b/macros/latex/contrib/rmpage/rmpage.tex
new file mode 100644
index 0000000000..c87f865e1d
--- /dev/null
+++ b/macros/latex/contrib/rmpage/rmpage.tex
@@ -0,0 +1,5528 @@
+% copyright 1996 and 1997 R. McDonnell
+% email rebecca@astrid.u-net.com
+
+\documentclass[11pt,loose,twoside,touchwider,longish,
+ noheaders,a4paper,notstdmargins]{report}
+
+\usepackage{rmpage,% rmstuffnew,
+shortvrb,tabularx,layout,xspace}
+
+% Extracted from rmstuffnew.sty
+\makeatletter
+% Might as well
+%
+\newcommand*{\OzTeX}{O\kern-.03em z\kern-.15em\TeX}
+\newcommand*{\OzTools}{O\kern-.03em z\kern-.10em Tools}
+% This command is horrible and doesn't work right with LaTeX2e.
+% Please forgive it.
+%
+% Could probably re-implement \unit with 2e's requiremathmode stuff. RTFM.
+%
+\newcommand*{\unit}[1]{\ifmmode\@unit{\hbox{#1}}\else$\@unit{\hbox{#1}}$\fi}%
+
+\let\units=\unit
+
+\def\@unit#1{{\setbox0=\hbox{#1}\ifdim\wd0<1.125em\,\else\>\fi\box0}}
+
+
+% at char for tt family
+\newcommand*{\at}{\char'100}
+\makeatother
+% End extracted from rmstuffnew.sty
+
+%
+% Note: Search and replace %% \DeclareOption -> \asleepoption
+% \DeclareOption -> \awakeoption
+%
+\def\awakefount{\mdseries\ttfamily}
+\def\asleepfount{\mdseries\ttfamily\slshape}
+\def\awakeoption#1{\item[{\awakefount#1}]}
+\def\asleepoption#1{\item[{\asleepfount#1}]}
+
+\newenvironment{ikkystuff}{\begin{quotation}\small}{\end{quotation}}
+
+\newcommand*{\keypress}[1]{{\ttfamily #1}}
+\newcommand*{\filename}[1]{{\ttfamily #1}}
+\newcommand*{\packname}[1]{{\sffamily #1}}
+\DeclareRobustCommand*{\comname}[1]{{\ttfamily\makeatletter\bs #1\makeatother}}
+\newcommand*{\envname}[1]{{\ttfamily #1}}
+\newcommand*{\classname}[1]{{\ttfamily #1}}
+\newcommand*{\optname}[1]{{\ttfamily #1}}
+
+\newcommand*{\rmpage}{\classname{rmpage}\xspace}
+
+\MakeShortVerb{\|}
+
+\author{Rowland McDonnell\\
+\texttt{rebecca@astrid.u-net.com}}
+
+\title{The \packname{rmpage} package\\Alpha documentation---trust
+nothing!}
+
+\date{Some time ago}
+
+\edef\RMsaveparskip{\the\parskip}
+\edef\RMsaveparindent{\the\parindent}
+
+\newcommand{\shorty}{\setlength\parskip{\RMsaveparskip}%
+\setlength\parindent{\RMsaveparindent}}
+
+\newcommand{\squish}{\setlength\itemsep{0pt}}
+
+\begin{document}
+
+\maketitle
+
+\begin{abstract}
+
+The \rmpage package lets you change page layout parameters in small
+steps over a range of values using options. It can set |\textwidth|
+appropriately for the main fount, and ensure that the text fits inside
+the printable area of a printer.
+
+An \rmpage-formatted document can be typeset identically without
+\rmpage after a single cut and paste operation. Local configuration
+can set defaults: for all documents; or by class, by printer, and by
+paper size.
+
+The geometry package is better if you want to set layout parameters to
+particular measurements.
+
+\end{abstract}
+
+
+\tableofcontents
+
+\chapter{Introduction}
+
+This documentation needs re-writing and tidying up, and \rmpage needs
+finishing, but the package is 99\% finished even if the
+documentation's a mess -- I'm not happy with it but it's probably
+usable, so here it is.
+
+The \packname{rmpage} package has five files:
+\filename{rmpage.tex} (documentation), \filename{rmpage.sty} (the
+package file itself), \filename{rmplocal.gfc} (a configuration file),
+and \filename{rmpgen.cfg} (another configuration file), and
+\filename{readme}.
+
+Only \filename{rmpage.sty} and \filename{rmpgen.cfg} \emph{need} to be
+on your \TeX\ search path -- read on to find out more about
+configuring \packname{rmpage}.
+
+I seem to have ground to a halt on this package -- it's worked fairly
+well for some time and I don't seem to have been able to get things
+together to sort out the documentation and stuff. I've come across
+one bug only in the last year, so I thought the best idea would be to
+upload the package to CTAN so someone else could use it, and perhaps
+any feedback I get might persuade me to pull my finger out and tidy it
+all up.
+
+The \filename{dtx} files aren't ready to be typeset yet---this is the
+only \LaTeX able documentation.
+
+What I do with \rmpage in the future depends mainly on what you tell
+me: if you've used \rmpage (or decided not to), I would consider it a
+great kindness if you told me why. I'm also interested in what you
+like and dislike, any suggestions you have, and anything else about
+this package and its documentation---an email message just saying
+`\rmpage is rubbish, \packname{geometry}'s much better for\ldots'
+would be useful if that's what you think.
+
+The chapters on how things work and all the options still need a lot
+of work, and the chapter on configuration isn't how I'd like it to be.
+This document will eventually be finished and included in a proper
+\filename{.dtx} file. I thought releasing this package now was best,
+because I've suddenly become employed, and this final polishing will
+take quite a long time.
+
+\rmpage sets \LaTeX\ page layout parameters to user-controlled
+values, without the user having to deal with particular measurements,
+check whether the result will fit inside the printing area of the
+selected printer, and so on. This is done with options like:
+\optname{wider}, \optname{noheaders}, \optname{lower}, and
+\optname{morecolsep}; all changable layout parameters can be varied
+in small steps over a range of values.
+
+\rmpage only changes parameters like \comname{textwidth} and
+\comname{columnsep}: those lengths that affect where the text goes on
+the page and how much of the page it occupies. It doesn't change
+layout parameters that affect the internal appear of your text, such
+as paragraph indents, spacing around section headings and the like.
+One of the design aims was to make changing page layout similar to a
+wysiwyg word processor, where you can use the mouse to fiddle with the
+page layout, making things a bit bigger and smaller until it's just
+right.
+
+There's a configuration file for you to play with and hooks galore:
+\rmpage is meant to be configured the way you want it---if you
+normally use A4 paper and produce most documents without headers, you
+can configure \rmpage to give you that by default, over-ridable by
+passing options from your document. If you follow the instructions,
+local configuration won't stop you producing documents with a modified
+layout that typeset identically on different systems---you can even
+copy the modified layout data into your document, and it'll typeset
+identically on a \LaTeX\ installation without \rmpage.
+
+The package is meant to be used directly in \LaTeX\
+documents, and for creating local classes. I have used it, for
+example, to create a class for producing theses according to the
+regulations. I can play about with the layout as much as I like,
+because \rmpage will ensure that the final document is within
+specification---some of the code that does this can be seen in the
+configuration file.
+
+
+Aside: this documentation was hell to write---I hadn't realized what a
+monster this package was until I came to document it. With a bit of
+luck, you'll be able to use \rmpage as your flexible friend like I do.
+I never write a \LaTeX\ document without it. And strangely, even
+though \rmpage has been over a year in the making, and has been used
+constantly in that time, I spotted lots of improvements that needed
+doing and bugs that needed removing while I was writing this
+documentation, which I didn't start seriously until I thought I'd
+finished the first release version of the package. I have a suspicion
+that writing detailed documentation of software is a very, very useful
+part of getting it right, especially when the software's moderately
+complicated. Personally, I'm now suspicious of anything that isn't
+documented thoroughly; I've looked at the various packages I've got
+from CTAN and use myself, and I find that those with thorough, clear
+documentation of what they do \emph{and} how they do it are the ones
+that seem most usesful and flexible. The poorer-documented packages
+appear to be less well thought out and less able to do things my way,
+rather than the author's. By the way, when I refer to an explanation
+of how something works, I'm not talking about the annotated code with
+added jargon that the \LaTeX\ core appears to be turning into. This
+is fairly useful and probably inevitable, but people like me who
+aren't expert hackers can't understand it and can't find out how to
+understand it, which is worse.
+
+
+\section{\LaTeX's standard classes}
+
+\label{gen:standardclassproblems}
+
+\LaTeX's standard classes have all been designed well, and the
+\LaTeXe\ versions have a cunning way of calculating
+\comname{textwidth} and \comname{textheight} that adapts the page
+layout to the size of paper, which is useful for people like me who
+never print on US letter paper.
+
+But the standard \LaTeX\ page layout was intended for paper sizes near
+US letter, and assumes you'll be using headers and footers. If
+you're not, things begin to look a bit off; your printed
+pages have a larger white space at the top than at the bottom, which
+looks `bottom heavy'---standard typographical design has the larger
+gap at the bottom rather than the top, which looks better to the eye,
+even if only because we're used to it. Personally, I rarely use
+headers, which means the standard \LaTeX\ classes produce an
+unpleasant output most of the time. And for some reason, the standard
+classes don't allow enough space in the header box for type sizes
+bigger than 10pt. This is one of life's inexplicable mysteries.
+
+If you have different sized margins, the standard classes always make
+the outside margin the larger one, and the margins are in fixed
+proportions to each other. This is fine for conventional typeography,
+but not so good if you're formatting things to go in a ring-binder,
+for example. Some flexibility in this matter would be good.
+
+And there's the matter of the fixed text height and width of the
+standard classes. Now then, this is a good idea in one respect,
+because the user doesn't get to typeset lines that are too long or too
+short without having to do a bit of work. On the other hand, I for
+one have often \LaTeX ed a letter which has \emph{just} run on to two
+pages; being able to extend the page a small amount would be good
+under these circumstances. Admittedly, \LaTeXe\ introduced the
+\comname{enlargethispage} command which can help out, but if you make
+a page more than one or two lines longer this way, the results look a
+bit iffy---this command only extends \comname{textheight}, which
+reduces the size of the bottom margin, and can make the page look
+bottom-heavy.
+
+A more subtle problem with the standard fixed widths is that one
+factor affecting the ease of reading is the line width in characters,
+not in inches. So if you're using a fount with a different number of
+characters per inch, you can end up with a line that is noticably too
+long (Zapf Chancery), or too short (Lucida Casual).
+
+\section{How does \rmpage help?}
+
+\rmpage has options (the details come later) to format a page for
+typesetting with or without headers or footers, and always leaves
+enough space for a \comname{normalsize} line of text in the header
+box. You can specify which margin you want to be the larger one, and
+adjust the relative proportions of the inside and outside margins.
+And there are options to change: the width and height of the text
+taking into account the size of the main text fount; the position of
+the text on the page (up and down, and left and right); space between
+columns, above footers, below headers; size and position of marginal
+paragraphs; and lots, lots, more, so hurry! Buy now while the sale's
+still on!
+
+\rmpage isn't like the \packname{geometry} package: you rarely work
+with measurements\@. \rmpage's options are of the form:
+\optname{wider}/\optname{narrower} or
+\optname{moreheadsep}/\optname{lessheadsep}, and they scale sizes up
+and down over a large range in fairly small steps if you want. And
+unlike the \packname{Koma-Script} bundle of packages, you're not
+limited to a fixed aspect ratio printing area. Not that there's
+anything wrong with \packname{Koma-Script} or \packname{geometry}:
+they do a different job.
+
+\rmpage can take into account different founts, number of columns, and
+all sorts of things, including the physical printing area of your
+printer.
+
+Options exist to change all (I think I got them all) of \LaTeX's basic
+page layout parameters, and some new parameters that I created for:
+setting the size of marginal paragraphs, and changing the position of
+the text area in relation to the paper area. There are some \LaTeX\
+page layout parameters that you don't get to affect
+directly; this is because of the way I looked at page layout when I
+wrote \rmpage. These include \comname{evesidemargin},
+\comname{topmargin}, and some others, which are fine for a computer
+assembling a page, but not so good for me, trying to describe a
+layout I want in terms I like.
+
+I have paramaterized everything that didn't run away, so you can, for
+example, write a thesis class that limits the text area as
+specified in the regulations, but still allows the user some
+flexibility if it's needed.
+
+And \rmpage knows about a lot more paper sizes, including envelopes
+and ISO long sizes, which it attempts to handle in an intelligent
+fashion (it knows one's likely to want to print out 1/3 A3 on A4
+paper, for example).
+
+\section{Installing \rmpage}
+
+You can install \rmpage by running \LaTeX\ on the file
+\filename{rmpage.ins}. The \filename{dtx} files might be useful if
+you want to dig around inside \rmpage, otherwise throw them away with
+the \filename{ins} files. Put the \filename{sty}, \filename{pko},
+\filename{cfg}, and \filename{gfc} files somewhere in your \TeX\
+search path.
+
+The file \filename{rmpage.sty} is the package you call from your
+\LaTeX\ document, and the \filename{cfg} files contains most of the
+options and locally-configurable things. Please don't change any of
+these files---make a copy called \filename{rmplocal.cfg} of either:
+\filename{rmpgen.cfg} or \filename{rmplocal.gfc}, and change that
+instead. The file \filename{rmplocal.gfc} is the same as
+\filename{rmpgen.cfg} with some options commented out to make it
+faster.
+
+\rmpage is meant to be configured to suit you; I suggest that everyone
+changes the default options in \filename{rmplocal.cfg}. Don't do this
+just yet unless you really want to---have a read of
+chapter~\ref{chap:use} and section~\ref{optcfg:settingup} first.
+
+
+\section{Compatibility}
+\label{intro:compatibility}
+
+\rmpage has been tested with the June 1996 release of \LaTeX. It
+appears to work well with the \classname{article}, \classname{report},
+\classname{letter}, \classname{book}, and \classname{slides} classes,
+and a number of local classes based on these. \rmpage doesn't work
+well with the \classname{ltxdoc} class, because of what
+\classname{ltxdoc} does with marginal paragraphs. Mind you,
+\classname{ltxdoc} doesn't seem to have much success with marginal
+paragraphs anyway. \rmpage seems happy with the \classname{ltxguide}
+class, but I've not tested it thoroughly.
+
+Because \rmpage only changes \LaTeX\ parameters at the beginning of a
+\LaTeX\ run, it doesn't in general have trouble working with other
+packages and classes as long as \rmpage is loaded last. \rmpage
+includes code to help it work with the \packname{PSNFSS} packages, the
+\packname{beton} package, and the \packname{foils} class. The
+\packname{beton} package needed a little extra work because it changes
+\comname{baselineskip} after all packages have been loaded;
+\packname{foils} uses four (rather than three) extra-large base point
+sizes, which again took a little extra code. The \packname{PSNFSS}
+package support is just for convenience, so you can load a fount with
+one option rather than a \comname{usepackage} command and an option
+to \rmpage.
+
+In general, if \rmpage is loaded after the document's normal size
+fount has been selected, and after the document class has finished
+setting the various text layout parameters, there should be no
+problems---. If you are combining \rmpage with a package that also
+changes page layout parameters, you will have to find out how both
+packages work to ensure you get what you want. Loading \rmpage last
+is usually enough to ensure everything works right. For example,
+\rmpage must be loaded after \packname{setspace} has been used to set
+the line spacing for a document, so that \rmpage can set
+\comname{textheight} to a valid value.
+
+\begin{ikkystuff}
+Two things to watch for are changes to the main document
+fount, and changes to \comname{baselineskip}. \rmpage calculates
+\comname{textheight} as an integer multiple of \comname{baselineskip}
+plus \comname{topskip}. If these are changed after \rmpage has been
+called, you'll probably have lots of bad page breaks.
+\comname{textwidth} is normally taken to be a certain number of
+average-sized characters; if \rmpage has a false idea about the
+typeface and size you are using, \comname{textwidth} will probably
+not be set appropriately.
+
+If you ensure that normal size in the normal body fount with the
+normal \comname{baselineskip} has been selected before loading
+\rmpage, everything should always be fine. The \packname{beton}
+package sets \comname{baselineskip} \comname{AtBeginDocument}; other
+packages and classes which do this kind of thing will almost certainly
+need attention to get \rmpage to work right.
+\end{ikkystuff}
+
+\section{What made me write \rmpage}
+
+I started using \LaTeX~2.09 about eight or nine years ago when I was
+an undergraduate ('ere, Colin, 'ave you got a word processor on that
+bloody great workstation of yours? No, but I've got something
+better\ldots) and quickly realised that the standard formats looked
+daft on A4 paper. No worries, there was this \packname{a4l} style
+file that sort of sorted things out. After a bit, I wanted slightly
+wider columns, sometimes centred on the page and sometimes not. I
+found out how to write style files and eventually I ended up with a
+suite of simple style files that let you fiddle with the printing area
+by selecting one file for the kind of text area you wanted: centred,
+not centred, wide, very wide, long, standard \LaTeX\ length, my
+standard length, all hard-coded to A4 paper with no headers.
+
+I was chewing over the idea of introducing the idea of paper sizes
+myself, so I could write style files that weren't hard-coded to any
+particular paper size, when \LaTeXe\ came out with the job already
+done, and packages you could pass options to and all that good stuff.
+
+So what I did was use my original \LaTeX\ 2.09 packages to form the
+basis of the original \rmpage, which let you do everything the
+original styles did, but all in one file instead of over a dozen, and
+let you format your text on any size paper with or without headers or
+footers. I decided what I really wanted was a package that gave me
+wysiwyg-style flexibility (you know, the way you can extend line
+length just a bit with the mouse, without worrying about the actual
+numbers) without producing poor layouts, and taking advantage of
+\LaTeX's `extensive macro capability'\footnote{Whoever first used this
+phrase should be shot, after the politicians but before the lawyers}
+to build in a bit of intelligence.
+
+I looked at the \LaTeXe\ way of calculating the text region, and used
+those ideas in my package, and started adding options to change more
+aspects of the printing area. And more, and more, and more. The
+result was a mess that could change almost anything, and supported any
+size paper, different printers, and so.
+
+The transmogrification from the original large mess to the current
+large mess was in two main steps: I started out by tidying up bits of
+code piecemeal, rationalized command names and the like, and tried to
+work out how everything worked together. I'd done as much of this as
+I could, then started to document \rmpage systematically for myself,
+making notes on what I intended to change when I'd finished
+documenting the package.
+
+Eventually I got fed up, and decided that a good spring cleaning was
+in order. I read some typeography books, some British Standards
+(which are mainly ISO standards too, so I'm not being parochial)
+looked at the \packname{koma-script}, \packname{vmargin}, and
+\packname{geometry} packages, and cleaned up the code good and proper,
+none of this pussy-footing around with careful plans. I parameterized
+some things which had escaped the first time round, changed the
+numbers to give a rational, \ae sthetically pleasing, and functional
+spread of values for everything\footnote{That's my story, and I'm
+sticking to it.}, and got the whole thing more-or-less sorted, with a
+few extra bits thrown in where they were missing. The result seems
+much more useful that my original careful plan would have produced, so
+I'm happy. Writing the documentation has smoothed out several things
+I wasn't very happy with to begin with, improved some features, added
+some others, and unearthed more bugs than was reasonable given that
+I'd tested the bloody thing, honest.
+
+\section{Future plans}
+
+What I do with \rmpage depends mainly on what you tell me; if you've
+used \rmpage (or decided not to), I would consider it a great kindness
+if you let me know what you think about it---two words or two pages:
+whatever you might tell me would be useful and appreciated. I'm
+interested in what you like and dislike, any suggestions you have, and
+anything else about this package and its documentation, gonzo
+ontology, the books of Harlan Ellison and Robert Anton Wilson, good
+beer, fast bikes, and prawn crackers, but don't worry about most of
+that.
+
+I intend to make the \rmpage code more elegant, and make \rmpage more
+\emph{useful}---if you think of any useful changes or additions,
+please let me know. Of course I'll try to fix any bugs and
+misfeatures that you report.
+
+I'm working on reducing the restrictions on the use of options---I
+hope to arrange things so that more options can be used in an
+\comname{ExecuteOptions} statement, and things like that.
+
+A project that I'll finish eventually is a version of \rmpage that can
+be processed with \packname{doc} and \packname{docstrip} in the
+conventional way, but don't hold your breath---it's taken me perhaps
+two years to get this far. But I will fix bugs quicker than that.
+
+\chapter{Using \rmpage}
+\label{chap:use}
+
+Section~\ref{use:changingpagelayout} on
+page~\pageref{use:changingpagelayout} of this chapter describes how to
+use \rmpage to change the page layout. The sections before that are
+background information intended to explain the jargon and conventions
+I use in this document, and a little about the philosophy behind
+\rmpage---all of which should make the rest of this an easier read.
+
+\rmpage is a \LaTeX{} package written to change the page layout. You
+can control it with options, and by editing a configuration file.
+You don't need to edit the configuration file for \rmpage to be
+useful, but doing so can save you time and effort. I suggest you read
+this chapter and play with \rmpage a little, then read
+chapter~\ref{chap:config} on page~\pageref{chap:config} to find out
+about local configuration.
+
+\rmpage is a normal \LaTeX\ package, so put:
+\begin{verbatim}
+\usepackage{rmpage}
+\end{verbatim}
+in the preamble of your document.
+
+You can pass options directly to \rmpage in the optional argument of
+the \comname{usepackage} command, but I almost always put all my
+options in the optional argument of the \comname{documentclass}
+command. This is because \rmpage uses several standard options; if I
+made a habit of passing options to \rmpage directly, I might forget
+that the document class needs to know about (for example) the
+\optname{twocolumn} option.
+
+\rmpage was designed to change \LaTeX's page layout parameters, but it
+doesn't change all of them in a direct way---read on to see what I
+mean. If you aren't familiar with \LaTeX's basic page layout
+parameters, have a look at a copy of the \LaTeX\ manual, ask a
+convenient guru, or use the \packname{layout} package to show you what
+they are---I think that what they are is obvious from their names, but
+I'm not a Finnish \LaTeX\ novice, so my opinion is clearly suspect.
+
+Figure~\ref{fig:layout} on page~\pageref{fig:layout} shows the output
+from the \packname{layout} package's \comname{layout} command. I've
+fooled the \comname{layout} command into thinking this is a one-sided
+document, and this document is formatted without headers, so you can't
+see clearly that there is a box of height \comname{headheight} a
+distance \comname{headsep} above the main text body. This box
+contains the header, if one exists.
+
+\section{\rmpage's view of a page}
+
+The user interface to \rmpage takes the view that a page consists of
+a physical paper size, with a non-printable border around its inside
+edge. \rmpage will not produce a layout that attempts to put ink
+beyond the printable region thus defined.
+
+\rmpage considers the \emph{main text block} to consist of the header,
+body text, and footer. This is the region that \rmpage moves up and
+down with \optname{altitude} options, and left to right with
+\optname{offset} options. The body text is part of the main text
+block, and is the matter that fits inside the area defined by
+\comname{textwidth} and \comname{textheight}.
+
+Marginal paragraphs stick on the side of the main text block. They
+begin a certain distance from the side of the body text, and extend to
+within a certain distance of the edge of the page, or to a certain
+maximum width.
+
+The space between the main text block and the edge of the paper: top,
+bottom, left, and right; is considered as four different margins,
+measured from the edges of the paper. \LaTeX's
+\comname{evensidemargin}, \comname{oddsidemargin}, and
+\comname{topmargin} parameters measure margins differently, from a
+point one inch in from the top left hand corner of the paper.
+
+Asking for \optname{noheaders} or \optname{nofooters} reduces the size
+of the space left for the approriate element to
+0\units{pt}---respectively \comname{headheight} \emph{and}
+\comname{headsep}, or \comname{footskip}, so the main text block might
+consist of body text only.
+
+\section{Parameter naming conventions}
+
+I refer to various parameters in this document, so you might find it
+useful to know what the names are supposed to mean.
+
+In general, parameter names ending in |clearance|, |clear|, or
+|margin| refer to a distance from the edge of the paper. Parameter
+names containing |sep| refer to a distance between text elements on
+the page. |mpar| means marginal paragraph; |width| refers to
+horizontal dimensions; |height| or |length| refer to vertical
+dimensions.
+
+Parameter names ending in |option| contain numbers that control what
+value the parameter referred to is set to. Parameter names containing
+|min| or |max| are minimum or maximum limits for the parameter
+referred to.
+
+All \rmpage's parameters and commands begin with \comname{RM}; those
+beginning with \comname{RM@} are not meant to be set outside a class,
+package, or configuration file. The one exception to this is the
+\comname{sloppiness} command.
+
+
+\section{Don't read me}
+
+Without any options specified by your document or the configuration
+file, on paper about A4 or US letter size, \rmpage will produce a
+slightly different format to the standard classes: \comname{textwidth}
+and the position of the text body on the page will be a fraction of a
+point different; everything else should be the same (if not, you've
+found a fault---please let me know). Smaller paper sizes, around A5
+or half US letter, will have a noticeable wider \comname{textwidth}.
+You can force \rmpage to make \comname{textwidth} and
+\comname{textheight} identical to the standard values (so line and
+page breaks are not changed) with the \optname{stdwidth} and
+\optname{stdlength} options; main text block positioning is never
+identical to standard.
+
+\rmpage with the standard configuration file follows \LaTeX's defaults
+and produces layouts very close to standard \LaTeX. You can change
+this by editing the configuration file---see chapter~\ref{chap:config}
+for the details. I wrote \rmpage expecting that everyone would edit
+the configuration file to match their preferences; for example, if you
+usually don't use headers, or if you usually don't print on US letter
+paper.
+
+If you are using typefaces other than the standard Computer Modern
+Roman, or a package that changes \comname{baselineskip}, have a look
+at section~\ref{intro:compatibility} on
+page~\pageref{intro:compatibility} and
+section~\ref{use:changingpagelayout} on
+page~\pageref{use:changingpagelayout}---there are things that need
+doing to avoid a poor layout.
+
+The observant will notice that I prefer spelling things according to
+the Oxford English Dictionary, rather than Webster's. Fear not: I
+realize that \LaTeX\ follows US English convention, so \rmpage
+includes options spelt both ways where there's a difference.
+
+\section{Option naming conventions}
+
+\rmpage's options are largely of the form: \optname{narrowest},
+\optname{narrower}, \optname{narrowish}, \optname{normalwidth}; or
+\optname{mostheadsep}, \optname{moreheadsep},
+\optname{moreishheadsep}, \optname{normalheadsep}. These two examples
+are each part of an option set (they continue with \optname{widish}
+and \optname{lessishheadsep}). Any option without \optname{touch} or
+\optname{t@uch} in its name is considered a main option.
+
+You should use only one main option from each set at a time---if you
+do use more than one, \rmpage will apply the settings of the option
+that is declared last in the package file.
+
+The \optname{touch} options all step up or down one third of the way
+(usually in a geometrical sequence) to the next main option. The
+\optname{t@uch} options are identical, but can only be used in class
+and package files. The following two examples produce an identical
+\comname{textwidth}:
+\begin{verbatim}
+\usepackage[wider,t@uchwider,touchwider]{rmpage}
+\usepackage[widest,touchnarrower]{rmpage}
+\end{verbatim}
+
+The following three examples produce a smoothly increasing
+\comname{textwidth}:
+\begin{verbatim}
+\usepackage[touchwider]{rmpage}
+\usepackage[widish,touchnarrower]{rmpage}
+\usepackage[widish]{rmpage}
+\end{verbatim}
+
+It's complete okay, but slightly silly because it has no effect, to
+combine, say, \optname{touchwider} and \optname{touchnarrower}.
+
+\section{Changing the page layout}
+\label{use:changingpagelayout}
+
+\rmpage is controlled by options passed to it in the conventional way,
+and by various things you can do to the configuration file. This
+section explains the basic use of most of the options.
+Chapter~\ref{chap:alltheoptions} on page~\pageref{chap:alltheoptions}
+lists all the options and what they do. Chapter~\ref{chap:config} on
+page~\pageref{chap:config} deals with the configuration file.
+
+
+\subsection{Width of the main text block}
+
+\label{use:width}
+
+According to the text books, the optimum width of a block of text is
+about 1.5--2.5 alphabets in the main fount. This is about 45--75
+characters (including spaces and punctuation) or ordinary English
+prose. When you set the width of the main text block, \rmpage
+measures the width of one column, and warns you if it exceeds these
+limits. Note that the standard width is at the upper limit for
+optimum readability; any increase will produce a warning. I very
+strongly suggest you use multiple columns if you find yourself using a
+width wider than \optname{widish}.
+
+\rmpage has options for producing multiple column layouts: see
+section~\ref{use:multiplecolumns} on
+page~\pageref{use:multiplecolumns} for more details. If you are
+producing displayed material (a single large table on a page, for
+example), read the section below, called `On other width setting
+controls'.
+
+\rmpage sets the width of the main text block (the header, body text,
+and footer) with these options, which are referred to as the width
+option set:
+\begin{tabbing}
+\optname{narrowest}, \= \optname{narrower}, \= \optname{narrow}, \=
+\optname{narrowish}.\kill
+\optname{widest}, \> \optname{wider}, \> \optname{wide}, \>
+\optname{widish}, \\
+\optname{normalwidth},\\
+\optname{narrowest}, \> \optname{narrower}, \> \optname{narrow}, \>
+\optname{narrowish}.
+\end{tabbing}
+
+Make sure you only use one of the above options at a time. The
+\optname{touch} options can be used with any of the main options; they
+are often exactly what's needed what used alone: \optname{touchwider}
+and \optname{touchlonger} have often reduced my document's
+page count to what I wanted.
+
+The options:
+\begin{tabbing}
+\optname{touchwider} \= \optname{touchnarrower} \\
+\optname{t@uchwider} \> \optname{t@uchnarrower}
+\end{tabbing}
+give a width one third of the way towards the next main option. The
+\optname{t@uch} options can only be used in a class or package file.
+
+There are four main width options that pay no attention to the
+\optname{touch} options. They are:
+\begin{tabbing}
+\optname{halfinchmargins} \= \kill
+\optname{stdwidth} \> Exactly the width calculated by the standard classes\\
+\optname{fullwidth} \> The full width of the printable region\\
+\optname{oneinchmargins} \>
+The left and right margins sum to 2\units{in}---average 1\units{in}\\
+\optname{halfinchmargins} \>
+The left and right margins sum to 1\units{in}---average 0.5\units{in}
+\end{tabbing}
+The \optname{fullwidth} option fills the width of the printable region
+as well as it can, ensuring the specified relationship between the
+inside and outside margins. You will usually get a larger
+\optname{textwidth} if you also ask for \optname{centre} or
+\optname{center}; see section~\ref{use:horizontalpos} on
+page~\pageref{use:horizontalpos}.
+
+The \optname{one-} and \optname{halfinchmargins} options give inside
+and outside margins of that measurement only if you are printing
+centred; otherwise, the average margin size is as specified (e.g.,
+inside 1.2\units{in}, outside 0.8\units{in}; $(1.2 + 0.8) / 2 = 1$)
+
+\subsubsection{Other width setting controls}
+
+The initial \comname{textwidth} is normally calculated as the smaller
+of two different widths: one, a certain number of characters; the
+other, a certain fraction of the \comname{paperwidth}. The precise
+figures depend on the width options you've used.
+
+This is not always appropriate---for example, if you are producing
+a weekly timetable on A4 landscape paper, I can't see why
+\rmpage should pay attention to the character-based width. So I
+created these options:
+\begin{tabbing}
+\optname{characterwidthset} \= Choose the character-based width
+regardless \\
+\optname{paperwidthset} \> Choose the paper-based width regardless \\
+\optname{bothwidthset} \> Default: choose the smaller of the two
+widths\\
+\end{tabbing}
+
+Note that \rmpage never ignores its paper-based limits: saying
+\optname{characterwidthset} will produce a printable layout that takes
+notice of all the restrictions documented elsewhere.
+
+I've provided a \optname{ringbinding} option which sets the minimum
+allowed inside margin to at least 15\units{mm} if you are printing in
+portrait orientation, and does nothing but warn you if you are using
+landscape orientation. It's probably not a good idea to use this with
+long paper sizes, but no check is made.
+
+\subsection{Length of the main text block}
+\label{use:length}
+
+\rmpage sets the height of the main text block (the header, body text,
+and footer) with these options, which are referred to as the length
+option set:
+\begin{tabbing}
+\optname{shortest}, \= \optname{shorter}, \= \optname{short}, \=
+\optname{shortish}.\kill
+\optname{longest}, \> \optname{longer}, \> \optname{long}, \>
+\optname{longish}, \\
+\optname{normallength},\\
+\optname{shortest}, \> \optname{shorter}, \> \optname{short}, \>
+\optname{shortish}.
+\end{tabbing}
+Make sure you only use one of the above options at a time. The
+\optname{touch} options can be used with any of the main options; they
+are often exactly what's needed what used alone: \optname{touchwider}
+and \optname{touchlonger} have often reduced my document's
+page count to what I wanted.
+
+The options:
+\begin{tabbing}
+\optname{touchlonger} \= \optname{touchshorter} \\
+\optname{t@uchlonger} \> \optname{t@uchshorter}
+\end{tabbing}
+give a width one third of the way towards the next main option. The
+\optname{t@uch} options can only be used in a class or package file.
+
+
+The height you get is (where $Z$ is an integer; the body text is $Z+1$
+lines long):
+\begin{displaymath}
+Z \times \mbox{\comname{baselineskip}} + \mbox{\comname{topskip}} +
+\mbox{\comname{headheight}} + \mbox{\comname{headsep}} +
+\mbox{\comname{footskip}}
+\end{displaymath}
+
+The length of the main text block is set to be a certain fraction of
+\comname{paperheight}, so \comname{textheight} will increase if you
+turn headers or footers off.
+
+\subsection{Headers and footers}
+\label{use:headfoot}
+
+\rmpage doesn't select a page style to use or not use headers or
+footers---you've got to arrange for that to be done separately with a
+\comname{pagestyle} command. It does calculate a page layout that does
+or does not allow space for a header or a footer. If you turn
+footers off and forget to choose a footer-free page style, the result
+is mildly comical.
+
+You can allow space (or not) for headers and footers using these
+options:
+\begin{tabbing}
+\optname{headers} \= \optname{noheaders} \\
+\optname{footers} \> \optname{nofooters}
+\end{tabbing}
+Telling \rmpage not to allow space for either headers or footers will increase
+\comname{textheight}, and vice-versa. See section~\ref{use:length}
+for more about this.
+
+\LaTeX's standard classes allow a box 12\units{pt} high for headers.
+This is too small for point sizes greater than 12\units{pt}, so
+\rmpage changes the size of the box containing the header to be
+\comname{baselineskip}. If you want to use a header which is a
+different height to that, define the command \comname{RMheadheight} to
+be whatever the height is before calling \rmpage. For example, if
+your header is to be 32\units{pt} high, do this:
+\begin{verbatim}
+\providecommand{\RMheadheight}{32pt}
+\usepackage{rmpage}
+\end{verbatim}
+
+If you don't usually use headers, I suggest that you edit the
+configuration file so, by default, \rmpage calculates a page layout
+that doesn't allow space for them. See chapter~\ref{chap:config} on
+page~\pageref{chap:config} for how to do this.
+
+These options let you change the space between the header and the body
+text---use only one of these at a time:
+\begin{tabbing}
+\optname{lessishheadsep} \= \optname{moreheadsep} \=
+\optname{moreishheadsep} \kill
+\optname{mostheadsep} \> \optname{moreheadsep} \>
+\optname{moreishheadsep} \\
+\optname{normalheadsep} \\
+\optname{lessishheadsep} \> \optname{lessheadsep} \> \optname{leastheadsep}
+\end{tabbing}
+
+These options let you change the space between the footer and the body
+text---use only one of these at a time:
+\begin{tabbing}
+\optname{lessishfootskip} \= \optname{morefootskip} \=
+\optname{moreishfootskip} \kill
+\optname{mostfootskip} \> \optname{morefootskip} \>
+\optname{moreishfootskip} \\
+\optname{normalfootskip} \\
+\optname{lessishfootskip} \> \optname{lessfootskip} \> \optname{leastfootskip}
+\end{tabbing}
+The \optname{footskip} options scale the gap between the \emph{top} of the
+footer and the bottom of the body text---the calculation assumes that
+the footer is one line high. The standard \LaTeX\ parameter
+\comname{footskip} is the distance from the bottom of the body text
+to the bottom of the footer.
+
+Both the option sets above have corresponding \optname{touch}
+options---these can be used with any of the main options above:
+\begin{tabbing}
+\optname{touchmorefootskip} \= \optname{touchlessfootskip} \\
+\optname{t@uchmorefootskip} \> \optname{t@uchlessfootskip}\\
+\optname{touchmoreheadsep} \> \optname{touchlessheadsep}\\
+\optname{t@uchmoreheadsep} \> \optname{t@uchlessheadsep}
+\end{tabbing}
+These options increase or decrease the corresponding parameter one
+third of the way towards the value given by the next main option.
+
+
+\subsection{Position of the main text block}
+
+\subsubsection{Vertical position}
+\label{use:verticalpos}
+
+You can raise and lower the position of the main text block on the page
+using the altitude set of options:
+\begin{tabbing}
+\optname{highest} \= \optname{higher} \= \optname{lower} \= \optname{highish} \kill
+\optname{highest} \> \optname{higher} \> \optname{high} \> \optname{highish}\\
+\optname{normalaltitude}\\
+\optname{lowish} \> \optname{low} \> \optname{lower} \> \optname{lowest}
+\end{tabbing}
+Be sure you only use one of the main options above at a time. The
+\optname{touch} options below can be used with any of the main options.
+
+The options:
+\begin{tabbing}
+\optname{touchhigher} \= \optname{touchlower} \\
+\optname{t@uchhigher} \> \optname{t@uchlower}
+\end{tabbing}
+give a width one third of the way towards the next main option. The
+\optname{t@uch} options can only be used in a class or package file.
+
+The text books say that the white space at the bottom of a page should
+be larger than the white space at the top. \LaTeX's and \rmpage's
+standard setting splits the space evenly between top and bottom; this
+results in an apparently larger space at the bottom---the printing
+appears to finish at the bottom of the body text, because the footer
+is usually just a page number.
+
+The altitude options consider the top margin to be the space above the
+top of the header box, and the bottom margin to be the space below the
+footer baseline. They work by changing the ratio between these two
+spaces; the sum of the top and bottom margins is not changed.
+
+But if you ask for a page layout which would result in text exceeding
+the various vertical limits, \rmpage will increase the top or bottom
+margin as appropriate without attempting to retain a fixed ratio
+between them. For example, if the layout would extend 2\units{mm} off
+the top of the printable area, the top margin would be increased by
+2\units{mm} and the bottom margin would remain the same.
+
+This is different to the horizontal position options, which do ensure
+a fixed ratio between the inside and outside margins; if the inside
+margin is reduced, the outside margin is reduced to retain the
+requested proportions.
+
+These two ways of doing things were deliberate design decisions; if
+anyone thinks I've got it wrong, please email me and try to persuade
+me that you're right.
+
+\subsubsection{Horizontal position}
+\label{use:horizontalpos}
+
+The horizontal positioning of the main text block is controlled by
+three types of options which: vary the ratio between the larger and
+smaller margins, switch the larger margin from the inside to the
+outside, and force both margins to be the same size or not.
+
+The options:
+\begin{tabbing}
+\optname{notcentre} or \optname{notcenter} \= \kill
+\optname{centre} or \optname{center} \> Equal inside and outside
+margins \\
+\optname{notcentre} or \optname{notcenter} \> Usually unequal inside
+and outside margins.
+\end{tabbing}
+control whether or not the text will be centred horizontally. Using
+the \optname{centre} option forces the inside and outside margins to be
+the same; the \optname{notcentre} option means they can be different.
+Be sure you only use one of these options at a time.
+
+The options:
+\begin{tabbing}
+\optname{notstdmargins} \= \kill
+\optname{stdmargins} \> Outside margin larger \\
+\optname{notstdmargins} \> Inside margin larger
+\end{tabbing}
+control which of the two margins on a page will be the larger when you
+have requested a \optname{notcentre}d layout. \LaTeX's convention,
+and standard typographical convention, has the larger of the two
+margins on the outside. This is given by \optname{stdmargins} (an
+abbreviation for standard margins). The \optname{notstdmargins}
+option gives the opposite effect---it is not standard practice to have
+the inside margin larger than the outside margin, although it is
+useful when you're producing material for a ring binder.
+Be sure you only use one of these options at a time.
+
+
+
+You can shift the main text block from right to left using the
+\optname{offset} set of options:
+\begin{tabbing}
+\optname{lessishoffset} \= \optname{moreoffset} \= \optname{moreishoffset} \kill
+\optname{mostoffset} \> \optname{moreoffset} \> \optname{moreishoffset}\\
+\optname{normaloffset}\\
+\optname{lessishoffset} \> \optname{lessoffset} \> \optname{leastoffset}\\
+\end{tabbing}
+These options change the difference between the inside and outside
+margin: \optname{leastoffset} gives you centred printing, with equal
+inside and outside margins. \optname{mostoffset} produces inside and
+outside margins in the proportions $87\% : 13\%$.
+
+These options produce a particular ratio between the inside and
+outside margins. If you have asked for a very wide
+\comname{textwidth} which is limited by the non-printing margin of
+your printer, \comname{textwidth} might be reduced to produce margins
+in the requested proportions. If you have symmetrical left and right
+non-printing margins on your printer, you can only completely fill the
+available width if you request centred printing with the
+\optname{centre} or \optname{leastoffset} options.
+
+Be sure you only use one of the main options above at a time. The
+\optname{touch} options below can be used with any of the main options.
+
+The options:
+\begin{tabbing}
+\optname{touchmoreoffset} \= \optname{touchlessoffset} \\
+\optname{t@uchmoreoffset} \> \optname{t@uchlessoffset}
+\end{tabbing}
+give an offset one third of the way towards the next main option. The
+\optname{t@uch} options can only be used in a class or package file.
+
+An oddity to watch out for is this: \optname{leastoffset} produces the
+least offset between the left and right margins, namely none. If you
+use the \optname{leastoffset} and the \optname{touchlessoffset}
+options together, you get what I call a negative offset. That is, if
+you've asked for \optname{stdmargins}, you'll end up with a larger
+inside margin than outside, and if you've asked for
+\optname{notstdmargins}, you get a larger outside margin than inside.
+\rmpage will draw your attention to this is it happens.
+
+\subsection{Marginal paragraphs}
+\label{use:marginalparapgraphs}
+
+Marginal paragraphs begin a distance \comname{marginparsep} away from
+the side of the main text block, and extend to a distance
+\comname{RM@mparclearance} from the edge of the paper. The maximum
+width of a marginal paragraph is given by \comname{RM@maxmparwidth}.
+
+With a conventional layout on paper similar to A4, marginal paragraphs
+usually fill the space from \comname{marginparsep} (about 4\units{mm})
+away from the main text block, to \comname{RM@mparclearance} (about
+10\units{mm}) in from the edge of the paper.
+\comname{RM@maxmparwidth} (about 50\units{mm}) is not usually a limit.
+
+All of these parameters can be controlled by options.
+\comname{marginparsep} is a standard \LaTeX\ length which is initially
+set by the class file; the other two are \rmpage commands, and are
+initially set to a fraction of \comname{paperwidth}.
+
+The options:
+\begin{tabbing}
+\optname{leastmparsep} \= \optname{moremparsep} \=
+\optname{moreishmparsep} \kill
+\optname{mostmparsep} \> \optname{moremparsep} \>
+\optname{moreishmparsep} \\
+\optname{normalmparsep} \\
+\optname{leastmparsep} \> \optname{lessmparsep} \>
+\optname{lessishmparsep}
+\end{tabbing}
+control the size of the gap between the marginal paragraph and the
+main text block.
+
+Be sure you only use one of the main options above at a time. The
+\optname{touch} options below can be used with any of the main options.
+
+The options:
+\begin{tabbing}
+\optname{touchmoremparsep} \= \optname{touchlessmparsep} \\
+\optname{t@uchmoremparsep} \> \optname{t@uchlessmparsep}
+\end{tabbing}
+give an offset one third of the way towards the next main option. The
+\optname{t@uch} options can only be used in a class or package file.
+
+The options:
+\begin{tabbing}
+\optname{lessmparclearance} \= \optname{lessishmparclearance} \=
+\optname{moreishmparclearance}\kill
+\optname{mostmparclearance} \> \optname{moremparclearance} \>
+\optname{moreishmparclearance}\\
+\optname{normalmparclearance} \\
+\optname{lessmparclearance} \> \optname{lessishmparclearance} \>
+\optname{leastmparclearance}
+\end{tabbing}
+control the size of the gap between the marginal paragraph and the
+edge of the paper.
+
+Be sure you only use one of the main options above at a time. The
+\optname{touch} options below can be used with any of the main options.
+
+The options:
+\begin{tabbing}
+\optname{touchmoremparclearance} \= \optname{touchlessmparclearance} \\
+\optname{t@uchmoremparclearance} \> \optname{t@uchlessmparclearance}
+\end{tabbing}
+give an offset one third of the way towards the next main option. The
+\optname{t@uch} options can only be used in a class or package file.
+
+The options:
+\begin{tabbing}
+\optname{lessmaxmparwidth} \= \optname{lessishmaxmparwidth} \=
+\optname{moreishmaxmparwidth}\kill
+\optname{mostmaxmparwidth} \> \optname{moremaxmparwidth} \>
+\optname{moreishmaxmparwidth}\\
+\optname{normalmaxmparwidth} \\
+\optname{lessmaxmparwidth} \> \optname{lessishmaxmparwidth} \>
+\optname{leastmaxmparwidth}
+\end{tabbing}
+control the maximum size of marginal paragraphs; marginal paragraphs
+usually stop \comname{RM@mparclearance} away from the edge of the
+paper, but there is the additional limit that marginal paragraphs
+cannot be larger than {RM@maxmparwidth}.
+
+Be sure you only use one of the main options above at a time. The
+\optname{touch} options below can be used with any of the main options.
+
+The options:
+\begin{tabbing}
+\optname{touchmoremaxmparwidth} \= \optname{touchlessmaxmparwidth} \\
+\optname{t@uchmoremaxmparwidth} \> \optname{t@uchlessmaxmparwidth}
+\end{tabbing}
+give an offset one third of the way towards the next main option. The
+\optname{t@uch} options can only be used in a class or package file.
+
+If you want an unusual layout with a very much larger than usual
+maximum marginal paragraph width, or a very much larger than usual gap
+between the marginal paragraph and the edge of the paper, the
+\optname{largebase} options will double the initial size of these
+parameters. This means that all the sizes produced by the
+corresponding options above are doubled. The \optname{normalbase}
+options give the default size.
+
+The additional options:
+
+\noindent\begin{tabularx}{\textwidth}{lX}
+&\\
+\optname{normalbasemaxmparwidth} & Normal maximum size marginal
+paragraphs \\
+\optname{largebasemaxmparwidth} & Double sized maximum size marginal
+paragraphs \\
+\optname{normalbasemparclear} & Normal gap between the edge of the paper
+and the end of marginal paragraphs. \\
+\optname{largebasemparclear}& Double sized gap between the edge of the paper
+and the end of marginal paragraphs. \\
+&\\
+\end{tabularx}
+are intended to be used only when the range of sizes
+given by the conventional options aren't enough; \optname{more} and
+\optname{touchmore} combine to double the size of any of the marginal
+paragraph parameters (the precise factor is 2.0394).
+
+\subsection{Multiple columns}
+\label{use:multiplecolumns}
+
+There are two things to consider with a multiple column layout: the
+text columns themselves, and the gap in between.
+
+\subsubsection{The width of text columns}
+
+If you are producing a layout with more than one column, \rmpage
+usually needs to know how many columns, because it takes into account
+the width of each text column, measured against the width of the
+average character.
+
+If you're using \LaTeX's standard \optname{onecolumn} or
+\optname{twocolumn} options, \rmpage takes note:
+\begin{tabbing}
+\optname{onecolumn} \= Default. Produce a layout assuming one text column \\
+\optname{twocolumn} \> Produce a layout assuming two text columns
+\end{tabbing}
+You must pass these options to the class file by placing them in the
+optional argument to the \comname{documentclass} command, or your text
+will not be set in the number of columns you expect.
+
+You might be producing a multiple column layout using the
+\packname{multicol} package. If so, you should use different options
+passed to \rmpage to tell it how many text columns your document will
+be set in. The following options---\optname{onecolumnwidth} is the
+default---tell \rmpage to calculate a layout
+assuming the text body will be set in the named number of text columns:
+\par
+\vspace{\baselineskip}
+\begin{raggedright}
+\optname{tencolumnwidth}
+\optname{ninecolumnwidth}
+\optname{eightcolumnwidth}
+\optname{sevencolumnwidth}
+\optname{sixcolumnwidth}
+\optname{fivecolumnwidth}
+\optname{fourcolumnwidth}
+\optname{threecolumnwidth}
+\optname{twocolumnwidth}
+\optname{onecolumnwidth}
+\end{raggedright}
+\vspace{\baselineskip}
+
+% \begin{tabbing}
+% \optname{sevencolumnwidth} \= \kill
+% \optname{tencolumnwidth} \> Produce a layout assuming ten text columns\\
+% \optname{ninecolumnwidth} \> Produce a layout assuming nine text
+% columns\\
+% \optname{eightcolumnwidth} \> Produce a layout assuming eight text
+% columns\\
+% \optname{sevencolumnwidth} \> Produce a layout assuming seven text
+% columns\\
+% \optname{sixcolumnwidth} \> Produce a layout assuming six text columns\\
+% \optname{fivecolumnwidth} \> Produce a layout assuming five text columns\\
+% \optname{fourcolumnwidth} \> Produce a layout assuming four text
+% columns\\
+% \optname{threecolumnwidth} \>Produce a layout assuming three text columns \\
+% \optname{twocolumnwidth} \> Produce a layout assuming two text columns\\
+% \optname{onecolumnwidth} \> Default. Produce a layout assuming one text column
+% \end{tabbing}
+Make sure you only use one of the twelve options above at a time.
+
+If you are producing a document with different numbers of columns in
+different places, try starting out by telling \rmpage that you are
+using the smallest number of columns in your document. For example,
+if your document has three columns in some places and four columns in
+others, pass the \optname{threecolumnwidth} option to \rmpage. If the
+width needs changing after that, begin by trying the \optname{width}
+options in section~\ref{use:width} on page~\pageref{use:width}.
+
+\subsubsection{The space between columns}
+
+The main options:
+\begin{tabbing}
+\optname{lessishcolsep} \= \optname{morecolsep} \=
+\optname{moreishcolsep} \kill
+\optname{mostcolsep} \> \optname{morecolsep} \>
+\optname{moreishcolsep} \\
+\optname{normalcolsep} \\
+\optname{lessishcolsep} \> \optname{lesscolsep} \> \optname{leastcolsep}
+\end{tabbing}
+increase or decrease the separation between the columns---they scale
+the standard \LaTeX\ \comname{columnsep} parameter. The default
+\optname{normalcolsep} option does nothing---you get \LaTeX's standard
+column separation. Make sure you only use one of these main options
+above at a time.
+
+The \optname{touch} options below are meant to be used with any of the
+main options, and increase or decrease the gap between the columns one
+third of the way towards the next main option.
+\begin{tabbing}
+\optname{touchmorecolsep} \= \optname{touchlesscolsep} \\
+\optname{t@uchmorecolsep} \> \optname{t@uchlesscolsep}\\
+\end{tabbing}
+
+If you don't like \LaTeX's standard \comname{columnsep}, the options
+below calculate a different default value:
+
+\noindent
+\begin{tabularx}{\textwidth}{lX}
+&\\
+\optname{adaptivecolumnsep} & Calculates a normal \comname{columnsep}
+which is 2.3 times the average character width of the selected
+fount---a 0.1\units{pt} increase for 10\units{pt} Computer Modern
+Roman; quite a bit different for other founts.\\
+\optname{noadaptivecolumnsep} & Default: gives you the standard
+\comname{columnsep}, which can be changed by any of the
+\optname{colsep} options above\\
+&\\
+\end{tabularx}
+
+The \comname{columnsep} produced by the \optname{adaptivecolumnsep}
+option can be scaled by any of the \optname{colsep} options.
+
+
+\subsection{Paper size}
+\label{use:papersize}
+
+\rmpage knows about three types of paper size options: main size, long
+size, and orientation.
+
+\subsubsection{Orientation---landscape or portrait}
+\label{use:orientation}
+
+There are two options to select the paper orientation:
+\begin{tabbing}
+\optname{landscape} \= Ensures that the longest side is horizontal\\
+\optname{portrait} \> Default. Ensures that the shortest side is
+horizontal
+\end{tabbing}
+Make sure you only use one of these at a time.
+
+\subsubsection{Long sizes}
+\label{use:longpapersizes}
+
+A long paper size is based on a larger paper size; it formed by
+cutting off the specified fraction of a parent paper size, divided
+along the longer edge. For example, the common long size 2/3~A4 is
+$210\units{mm} \times 2/3 297\units{mm} = 210\units{mm} \times
+198\units{mm}$.
+
+These sizes are only formally defined for ISO A and B sizes. \rmpage
+will make any main paper size into a long size with one of these
+options:
+\begin{tabbing}
+notlongpaper \= Default. Does nothing.\\
+7/8longpaper \> Multiply the parent paper size length by 7/8 \\
+3/4longpaper \> Multiply the parent paper size length by 3/4 \\
+2/3longpaper \> Multiply the parent paper size length by 2/3 \\
+5/8longpaper \> Multiply the parent paper size length by 5/8 \\
+1/2longpaper \> Multiply the parent paper size length by 1/2 \\
+3/8longpaper \> Multiply the parent paper size length by 3/8 \\
+1/3longpaper \> Multiply the parent paper size length by 1/3 \\
+1/4longpaper \> Multiply the parent paper size length by 1/4 \\
+1/8longpaper \> Multiply the parent paper size length by 1/8
+\end{tabbing}
+Make sure you only use one of these options at a time. They must be
+used with a main paper size option; the \optname{letterpaper} main
+paper size option is used by default.
+
+The resulting paper size is made \optname{portrait} by default, or
+\optname{landscape} if you've used that option, and printing limits
+are calculated based on the assumption that you will be printing on
+the parent paper size. That is, \rmpage assumes that if you've asked
+for 2/3 long A4, you'll be printing on the top 2/3 of a sheet of A4,
+not a cut sheet of 2/3~A4. Or that if you've asked for 1/4 long A4,
+you'll be printing 4 pages on one sheet of A4.
+
+See the chapters~\ref{chap:htw} and~\ref{chap:config} to find out how
+and why this is done, and how to change these assumptions.
+
+\subsubsection{Main sizes}
+\label{use:mainpapersizes}
+
+There's a lot more paper sizes available now; have a look at
+sections~\ref{optrmp:paper-sizes} and~\ref{optcfg:papersizes} for the
+full list. Any of the main paper sizes can be turned into a long paper
+size (see the section on long paper sizes above), and any paper size
+can be made landscape or portrait.
+
+The available paper sizes include:
+\begin{tabbing}
+\optname{dlpaper} and \optname{c7/6paper} \= \kill
+\optname{letterpaper}, \optname{executivepaper}, \\
+and \optname{legalpaper}. \> US paper sizes \\
+\optname{a0paper} to \optname{a10paper} \> ISO stationery sizes \\
+\optname{b0paper} to \optname{b10paper} \> ISO poster sizes \\
+\optname{c0paper} to \optname{c7paper} \> ISO envelopes \\
+\optname{dlpaper} and \optname{c7/6paper} \> ISO envelopes \\
+\optname{no10envelopepaper} \> US envelopes \\
+\optname{foolscapefoliopaper} \> obsolete stationery \\
+\end{tabbing}
+There's over 70 sizes in all---to find out how paper sizes are
+declared to \rmpage, and how to add new one, see chapters~\ref{chap:htw}
+and~\ref{chap:config}.
+
+\subsection{Founts}
+\label{use:founts}
+
+The standard \LaTeX\ classes calculate a \comname{textwidth} on the
+assumption that you will be using Computer Modern Roman as the main
+body text fount. But the legibility of a line of text depends in
+part on the the width of a line measured in characters, and
+different founts have a different average character widths, so it's
+sensible to calculate a different \comname{textwidth} if you're using
+a different main body text fount.
+
+\rmpage will calculate an appropriate \comname{textwidth} if you use
+one of the options below to tell it what you are using as your main
+body text fount.
+\begin{tabbing}
+\optname{lucasualwidth} \= \kill
+\optname{avantwidth} \> \packname{PSFNSS} Adobe Avant Garde. \\
+\optname{bookmanwidth} \> \packname{PSFNSS} Adobe Bookman. \\
+\optname{chancerywidth} \> \packname{PSFNSS} Adobe Zapf Chancery.\\
+\optname{cmrwidth} \> Default. Computer Modern Roman. \\
+\optname{concretewidth} \> Donald Knuth's Concrete Roman. \\
+\optname{courierwidth} \> \packname{PSFNSS} Adobe Courier. \\
+\optname{helvetwidth} \> \packname{PSFNSS} Adobe Helvetica. \\
+\optname{lucasualwidth} \> \packname{bh} Lucida casual. \\
+\optname{newcentwidth} \> \packname{PSFNSS} Adobe New Century Schoolbook. \\
+\optname{palatinowidth} \> \packname{PSFNSS} Adobe Palatino. \\
+\optname{timeswidth} \> \packname{PSFNSS} Adobe Times. \\
+\optname{utopiawidth} \> \packname{PSFNSS} Adobe Utopia. \\
+\optname{thisfountwidth} \> Bases \comname{textwidth} on the
+currently selected fount.
+\end{tabbing}
+The \optname{thisfountwidth} is useful if you are using a fount not
+covered by the standard options: it works by measuring the average
+character width of the fount that was selected when \rmpage was
+loaded. For this to work properly, you must ensure that the main body
+text fount has been selected before loading \rmpage. For example, if
+you are loading Adobe Baskerville in your preamble, you could ask
+\rmpage to set an appropriate \comname{textwidth} like this:
+\begin{verbatim}
+\documentclass[thisfountwidth]{article}
+\renewcommand{\rmdefault}{pgm}
+\rmfamily
+\usepackage{rmpage}
+\begin{document}
+...
+\end{verbatim}
+If you haven't told \rmpage to shut up with the \optname{yorkshire}
+option, it will tell you which fount it's using as the basis for
+\comname{textwidth}---this is useful for people like me who get
+horribly confused by the details of fount selection.
+
+If you want to use one of the \packname{PSNFSS} packages to load a
+fount as well as set a \comname{textwidth} based on this fount, you
+can use one of these options:
+\begin{tabbing}
+\optname{loadchancery} \= \kill
+\optname{loadavant} \> Requires the \packname{avant} package. \\
+\optname{loadbookman} \> Requires the \packname{bookman} package.\\
+\optname{loadchancery} \> Requires the \packname{chancery} package.\\
+\optname{loadhelvet} \> Requires the \packname{helvet} package.\\
+\optname{loadnewcent} \> Requires the \packname{newcent} package.\\
+\optname{loadpalatino} \> Requires the \packname{palatino} package.\\
+\optname{loadtimes} \> Requires the \packname{times} package.\\
+\optname{loadutopia} \> Requires the \packname{utopia} package.
+\end{tabbing}
+Each of these \optname{loadfount} options does three things:
+\begin{enumerate}
+\item Loads the named package
+\item Calculates a \comname{textwidth} based on the named fount
+\item Sets the typesetting parameters to looser values.
+\end{enumerate}
+
+The typesetting parameters are only loosened a little. The change
+does not affect the \LaTeX{} commands \comname{fussy} and
+\comname{sloppy}, so using the \comname{onecolumn} and
+\comname{twocolumn} commands will over-ride this change. You can
+duplicate the effect of this loosening with the \comname{sloppiness}
+command---see section~\ref{use:tightness} on
+page~\pageref{use:tightness} for more details.
+
+If you've asked for a \optname{twocolumn} layout, you get typesetting
+parameters close to the standard \LaTeX\ sloppy values, unless you
+over-ride this looseness. Because the \packname{multicol} package
+makes its own arrangements, you don't get the sloppy values if you
+asked for \optname{twocolumnwidth} to \optname{tencolumnwidth};
+\rmpage sets the typesetting parameters as if you were using a one
+column layout. Please email me if you have any thoughts on this
+matter.
+
+The three \optname{loadfount} options below are a little different to
+the \packname{PSNFSS} fount loading options above:
+
+\noindent
+\begin{tabularx}{\textwidth}{lX}
+%
+&\\
+%
+\optname{loadconcrete} & Requires the \packname{beton} package;
+calculates \comname{textheight} based on \packname{beton}'s modified
+\comname{baselineskip}; sets \comname{textwidth} for Concrete Roman;
+doesn't loosen typesetting. See section~\ref{use:beton} on
+page~\pageref{use:beton} for more on \packname{beton}.\\
+%
+\optname{loadcourier} & Makes the default roman fount Courier, sets an
+appropriate \comname{textwidth}, and asks for \optname{loose}
+typesetting. I think this is ugly and crude: you might be better off
+using the \packname{times} package and \comname{ttfamily}\\
+%
+\optname{loadlucasual} & Requires the \packname{lucasual} package;
+sets loose typesetting and a \comname{textwidth} to match Lucida
+Casual. Needs the \packname{lucasual} files;
+available from CTAN at \filename{fonts/psfonts/bh/lucasual/}. \\
+%
+&\\
+\end{tabularx}
+
+
+\subsection{Printers}
+\label{use:printers}
+
+It can be useful to let \rmpage know about your intended output
+device, because it can ensure that the layout it produces will fit
+inside the printable region of the paper. At the moment, there
+aren't very many printer options that match real printers. As I get
+more information, I shall add more real printer options.
+
+You can add an option for your own printer, or change the way your
+\rmpage installation set non-printing margins for your printer---the
+details are described in section~\ref{cfg:printertype} on
+page~\pageref{cfg:printertype}.
+
+The available printer options that I'l admit to here are:
+\begin{tabbing}
+\optname{pessimisticprinter} \= \kill
+\optname{fullbleedprinter} \> Prints right to the edge of the paper\\
+\optname{generalprinter} \> This should be fine for anyone\\
+\optname{optimisticprinter} \> \\
+\optname{pessimisticprinter} \> Uses the largest non-printing margins
+I've found\\
+\optname{dw500printer} \> Any HP 500 series inkjet\\
+\optname{dw600printer} \> Any HP 600 series inkjet\\
+\end{tabbing}
+
+\subsection{Date format}
+\label{use:dateformat}
+
+You can change the way the \comname{today} command prints the date
+with the options below:
+\begin{tabbing}
+\optname{ukdate} \= \optname{othernicedate} \= \kill
+\optname{ukdate} \> \optname{nicedate} \> 5th November 1693\\
+\optname{usdate} \> \optname{othernicedate} \> Default: July 4, 1776
+\end{tabbing}
+Only the \optname{ukdate} and \optname{nicedate} options make any
+changes: the \optname{usdate} and \optname{othernicedate} options do
+nothing.
+
+The options names happened like this: I once wrote a \LaTeX\ style
+file called \packname{nicedate}, which produced the same effect as
+\rmpage's \optname{nicedate} option---I like dates printed like that,
+you see. When I included the \packname{nicedate} code in \rmpage, it
+made sense to add a complementary option; hence \optname{othernicedate}.
+
+\optname{othernicedate} seems preferable to \optname{nastydate}, but
+it's not terribly memorable, so I created the synonyms
+\optname{ukdate} and \optname{usdate}. I'm not keen on these option
+names, but I can at least remember them. If you can think of
+something different, please let me know.
+
+\subsection{The \packname{beton} package}
+\label{use:beton}
+
+The easy way of using Frank Jensen's \packname{beton} package---to use
+Donald Knuth's Concrete Roman founts---with \rmpage is to pass the
+\optname{loadconcrete} option to \rmpage. This will load the
+\packname{beton} package, and set vertical and horizontal layout
+parameters for the Concrete Roman founts:
+\begin{verbatim}
+\documentclass[loadconcrete,concrete-math]{article}
+\usepackage{rmpage}
+\end{verbatim}
+The example above tells \rmpage to load the concrete founts using the
+\packname{beton} package. All global options are passed to all
+packages, so \packname{beton} and \rmpage are passed
+\optname{loadconcrete} and \optname{concrete-math}. \rmpage ignores
+\optname{concrete-math} and acts on \optname{loadconcrete}; while
+\packname{beton} ignores \optname{loadconcrete} and acts on
+\optname{concrete-math}.
+
+Because the \packname{beton} package changes \comname{baselineskip},
+but the changes don't take effect until the \verb|begin{document}|
+command has been executed, and \rmpage needs to know about the value
+of \comname{baselineskip} when it's setting \comname{textheight}, the
+\packname{beton} package needs special support in \rmpage.
+Everything's taken care of if you use the \optname{loadconcrete}
+option. If you want to load \packname{beton} with a
+\comname{usepackage} command, you should do this:
+\begin{itemize}
+\item Load \packname{beton} before \rmpage
+\item Pass the \optname{beton} option to \rmpage
+\item Pass the \optname{concretewidth} option to \rmpage---see
+section~\ref{use:founts} on page~\pageref{use:founts}.
+\end{itemize}
+Like this, for example:
+\begin{verbatim}
+\documentclass[beton,concretewidth]{report}
+\usepackage{beton}
+\usepackage{rmpage}
+\begin{document}
+...
+\end{verbatim}
+There's no need to pass the \optname{beton} option to \rmpage if
+you're also passing the \optname{stdbaselineskip} option to
+\packname{beton}, but it will do no harm.
+
+\rmpage needs code that is in \packname{beton}~v1.3, 5th March 1995,
+to get things right. This version of \packname{beton} was current in
+August 1996. I've made \rmpage check the definition of the
+\packname{beton} command it uses, but if you have any doubts that
+\rmpage is doing its job properly, you can try this:
+\begin{verbatim}
+\documentclass[beton,chatty]{article}
+\usepackage{beton}
+\usepackage{rmpage}
+\begin{document}
+\typeout{\the\baselineskip\space according to beton}
+\end{document}
+\end{verbatim}
+Look through the console output for the lines that look like this
+(the numbers will vary depending on paper size etc):
+\begin{verbatim}
+\textheight is:
+ 48 x 13.0pt + 10.0pt = 634.0pt
+\end{verbatim}
+This is a report of the number of lines in the text body ($48+1=49$ in
+this case), and how the final \comname{textheight} is arrived at. The
+second number---13\units{pt} in this case---is \comname{baselineskip}
+as seen by \rmpage. If this number is the same as the
+\comname{baselineskip} according to \packname{beton}---as reported on
+the console---everything's probably okay. (The last term in the sum
+above is \comname{topskip}).
+
+\subsection{Typesetting parameters}
+\label{use:tightness}
+
+\LaTeX's \comname{sloppy} command tells \TeX\ to be less fussy about
+linebreaking. It's sometimes useful to be able to tell \TeX\ to be
+less fussy than normal, but not as sloppy as \comname{sloppy}. A good
+example is typesetting with founts installed by Alan Jeffries's
+\packname{fontInst} package----for example, the founts in the
+\packname{PSNFSS} bundle of packages. Because these founts have a
+tighter inter-word space to Computer Modern Roman, Alan Jeffries
+recommends slightly looser typesetting parameters to usual, but not as
+loose as \comname{sloppy}---the values were reported by Sebastian
+Rahtz in his `Notes on setup of PostScript fonts for \LaTeX2', 14th
+August 1994. Oh dear: but Rahtz reports in `\filename{PSNFSS2e.tex}'
+(05/11/96) that \packname{fontinst} now produces founts with looser
+inter-word spacing, and suggests that the extra looseness is no longer
+required. I reckon a little extra looseness helps (the founts do seem
+to be tighter than the computer modern family), so the
+\optname{loadPSfount} options have been changed to use the
+\optname{looseish} settings normally, or the \optname{sloppyish}
+settings if you've asked for two columns.
+
+(What \packname{fontInst} mainly does is make \filename{vf},
+\filename{tfm}, \filename{fd}, and \filename{sty} files from
+\filename{afm} files, so you can use with \LaTeX\ founts which haven't
+been created with {\sffamily\scshape Metafont}. It's available from
+CTAN.)
+
+\rmpage has an option that selects similar typesetting parameters, and
+variants: two fussier and two sloppier. Each option can in effect be
+selected at any point in your document, using the \comname{sloppiness}
+command as shown.
+\begin{tabbing}
+\optname{looseish} \= \kill
+\optname{tight} \> Default. Standard \LaTeX\ \comname{fussy} settings. |\sloppiness{0}|\\
+\optname{looseish} \> |\sloppiness{1}| \\
+\optname{loose} \> Similar to Jeffries's suggestion |\sloppiness{2}| \\
+\optname{looser} \> |\sloppiness{3}|\\
+\optname{loosest} \> |\sloppiness{4}|\\
+\optname{sloppyish} \> For two columns |\sloppiness{5}|\\
+\end{tabbing}
+The default changes to \optname{loose} if you have use a
+\optname{loadfount} option which loads a \packname{FontInst} fount.
+See section~\ref{use:founts} on page~\pageref{use:founts} for more
+information.
+
+Note that \sloppiness{0} is \emph{not} equivalent to \fussy; because
+standard \LaTeX's \comname{sloppy} and \comname{fussy} commands
+change fewer parameters to \rmpage's \comname{sloppiness} commands,
+the \comname{fussy} command won't give you fussy typsetting if used
+after one of \rmpage's typesetting commands or options.
+
+
+\chapter{Old Using \rmpage}
+
+
+
+
+
+\section{Some options}
+
+\rmpage is more useful when you start using options: there's quite a
+lot of them, grouped in fairly consistently named sets. For example,
+you can select \rmpage's normal \comname{textwidth} by saying
+\optname{normalwidth}. If you want a slightly larger
+\comname{textwidth}, use the \optname{widish} option instead. The
+\optname{wide}, \optname{wider}, and \optname{widest} options will
+give you a progressively wider \comname{textwidth}. On the other
+hand, you can use the \optname{narrowish} option to get a slightly
+narrower \comname{textwidth} to standard, and the
+\optname{narrow},\optname{narrower}, and \optname{narrowest} options
+do exactly what you might expect.
+
+When you are dealing with a set of options like the width options
+above (all 13 of them; there's four odd ones I've not mentioned), be
+sure you only use one at a time. \rmpage doesn't check, and you can
+get unexpected results if there's more than one option used from each
+set.
+
+\begin{description}\shorty
+
+\item[Text width]
+%
+\optname{narrowest}, \optname{narrower},
+\optname{narrow}, \optname{narrowish}, \optname{normalwidth},
+\optname{wideish}, \optname{wide}, \optname{wider}, and
+\optname{widest}
+%
+ select a progressively larger \comname{textwidth}.
+%
+\optname{fullwidth} gives you the widest \comname{textwidth} that'll
+fit inside the printing region; \optname{stdwidth} selects the same
+width as you would get with the standard classes;
+\optname{oneinchmargins} selects a \comname{textwidth} that gives you
+an average margin size of one inch---the inside and outside margins
+add up to two inches; \optname{halfinchmargins} is similar, but the
+inside and outside margins add up to one inch rather than two.
+
+\rmpage looks out for the \optname{onecolumn} and \optname{twocolumn}
+options, and calculates a possibly larger \comname{textwidth} if you
+say \optname{twocolumn}. The class file is responsible for telling
+\TeX\ to set text in two columns, so these options shouldn't be passed
+to \rmpage only.
+
+If you're using the \packname{multicol} package, you can pass to
+\rmpage the options: \optname{twocolumnwidth},
+\optname{threecolumnwidth}, \optname{fourcolumnwidth}, and so on up to
+\optname{tencolumnwidth}. This will give you a \comname{textwidth}
+based on that number of columns.
+
+\item[Text height]
+%
+\optname{shortest}, \optname{shorter}, \optname{short},
+\optname{shortish}, \optname{normallength}, \optname{longish},
+\optname{long}, \optname{longer}, \optname{longest} select a
+progressively longer \comname{textheight}.
+%
+\optname{fulllength} gives you the longest \comname{textheight} that
+will fit inside the printing region; \optname{stdlength} gives you
+the \comname{textheight} you'd get with the standard class.
+
+\item[Headers and footers]
+%
+The \optname{headers} and \optname{footers} option leave space for
+headers and footers respectively; \optname{noheaders} and
+\optname{nofooters} give you page layout designed for no headers or
+no footers, respectively.
+
+\optname{leastheadsep}, \optname{lessheadsep},
+\optname{lessishheadsep}, \optname{normalheadsep},
+\optname{moreishheadsep}, \optname{moreheadsep}, and
+\optname{mostheadsep} enlarge and shrink the gap between the top of
+the text body and the bottom of the header; they work by scaling the
+standard value---\optname{normalheadsep} does nothing.
+
+\optname{leastfootskip}, \optname{lessfootskip},
+\optname{lessishfootskip}, \optname{normalfootskip},
+\optname{moreishfootskip}, \optname{morefootskip}, and
+\optname{mostfootskip} enlarge and shrink the gap between the bottom of
+the text body and the bottom of the footer; they work by scaling the
+standard value---\optname{normalfootskip} does nothing.
+
+\item[Positioning the text body horizontally]
+%
+\rmpage looks out for the standard \LaTeX\ class options:
+\optname{twoside} and \optname{oneside}. \rmpage will produce a
+layout either giving you a text body intended for printing on one side
+of the paper, or alternating with odd pages on a right-hand page, and
+even pages on a left-hand page.
+
+The \optname{centre} (or \optname{center}) option places the text body
+on the page with equal margins to the left and right. The
+\optname{notcentre} (or \optname{notcenter}) option places the text
+body with possibly unequal margins to the left and right.
+
+If you've asked for \optname{notcentre}, you will find that the larger
+margin is on the inside (intended for ring-binding). This effect is
+produced with the \optname{notstdmargins} option. The
+\optname{stdmargins} options reverses this, so the larger margin is on
+the outside (just like the standard classes).
+
+\optname{leastoffset}, \optname{lessoffset},
+\optname{lessishoffset}, \optname{normaloffset},
+\optname{moreishoffset}, \optname{moreoffset}, and
+\optname{mostoffset} enlarge and shrink the difference between the
+larger and smaller margin. \optname{leastoffset} gives you
+\optname{centre}d printing; there are subtle differences between
+\optname{leastoffset} and \optname{centre}.
+
+\item[Positioning the text body vertically]
+%
+\optname{lowest}, \optname{lower}, \optname{low}, \optname{lowish},
+\optname{normalaltitude}, \optname{highish}, \optname{high},
+\optname{higher}, and \optname{highest}, shift the text body up and
+down the page---they are referred to as the altitude option set in
+this document (I know, but do you have any better ideas?)
+
+\item[Paper and printers]
+%
+\optname{landscape} and \optname{portrait} force that orientation,
+whatever the size paper.
+
+There's lots of new paper sizes: see section~\ref{gen:papersizes} on
+page~\pageref{gen:papersizes}. You can ask for
+\optname{7/8longpaper}, \optname{3/4longpaper},
+\optname{5/8longpaper}, and so on down to \optname{1/8longpaper}.
+This calculates what's called a long paper size, based on the main
+paper size selected, by dividing the main paper size into the
+specified fraction along the long edge. For example, A4 is
+$210\units{mm} \times 297\units{mm}$; 1/3 long A4 is $210\units{mm}
+\times 99\units{mm}$.
+
+\optname{lj4printer} tells \rmpage you're using a Hewlett-Packard
+LaserJet 4 printer, and it'll calculate your page layout using
+appropriate non-printing margins. There are similar options for
+several other printers; you can add your own printer if it's not
+already here, and set any to be your default. For more details, see
+section~\ref{optcfg:printers} on page~\pageref{optcfg:printers}.
+
+\end{description}
+
+\section{Some other options}
+
+
+Several option sets have corresponding \optname{touch} options. These
+options increase or decrease whatever the parameter is by an amount in
+between the current main option and the next one. Generally, the
+sequence of values is a smooth geometrical one.
+
+For example, passing \optname{wide,} \optname{touchwider} to \rmpage
+gives you a \comname{textwidth} a third of the way up from \optname{wide}
+to \optname{wider}. \optname{wider,} \optname{touchnarrower} gives
+you a \comname{textwidth} a third of the way down from
+\optname{wider} to \optname{wide}.
+
+A touch option can be used with a main option (any option which doesn't
+have \optname{touch} or \optname{t@uch} in the name is a main option;
+not all main options have \optname{touch} options). The
+\optname{t@uch} options should only be used in class and package
+files. They have exactly the same effect as a \optname{touch}
+option, so saying \optname{wider,} \optname{touchnarrrower,}
+\optname{t@uchnarrower} gives you the same width as \optname{wider,}
+\optname{touchwider}.
+
+\begin{description}\shorty
+
+\item[Text width setting]
+%
+\optname{paperwidthset} makes \rmpage set the \comname{textwidth} going by
+paper-based \comname{textwidth} only; \optname{characterwidthset} goes
+by character-based \comname{textwith} only, but still pays attention
+to the printing limits specified by the paper size and printer
+selected. \optname{bothwidthset} is the default setting.
+
+\optname{paperwidthset} was created so I could produce a layout for a
+time-table, fitting on A4 landscape paper. Paying attention to the
+number of characters in a line is inappropriate for that job, hence
+the option. The other two options are the natural complements.
+
+\end{description}
+
+
+The \optname{touchlonger}, \optname{touchshorter},
+\optname{touchwider}, and \optname{touchnarrower} options increase or
+decrease \comname{textheight} or \comname{textwidth} one third of the
+way (in a geometrical sequence) towards the next main increment. That
+is, if you've said \optname{wide} and \optname{touchwider}, the width
+you get will be one third of the way towards the width given by
+\optname{wider}.
+
+
+\section{Layout details}
+\label{gen:layout}
+
+The standard \LaTeX\ package, \packname{layout}, displays all the page
+layout parameters and their values. This document loads the package
+and uses the \comname{layout} command to display the values. You can
+see the results of the \comname{layout} command in figure~\ref{fig:layout}.
+
+\begin{figure}[h!t]
+\noindent
+% dirty trick to fool \layout into producing a diagram for one page
+% only, that can float where it needs to.
+\begin{parbox}{\textwidth}\makeatletter
+ {
+ \relax
+ \makeatletter
+ \if@twoside\relax
+ \@twosidefalse
+ \typeout{twoside fudge}
+ \layout
+ \makeatletter
+ \@twosidetrue
+ \makeatother
+ \else
+ \typeout{No twoside fudge}
+ \layout
+ \fi
+ }\makeatother
+\end{parbox}
+{\footnotesize
+\vspace*{8\baselineskip}}
+\caption{The output of the \comname{layout} command \label{fig:layout}}
+\thispagestyle{plain}
+\end{figure}
+
+Note that the layout for this document was calculated by \rmpage,
+which was told to leave no space for a header with the
+\optname{noheaders} option; that is why both \comname{headheight} and
+\comname{headsep} have zero size.
+
+
+\section{Paper sizes}
+\label{gen:papersizes}
+
+\rmpage knows about lots of paper sizes, including ISO long sizes.
+The ISO standard which defines the A and B series of sizes also
+defines long sizes. For example, A4 paper is defined as $210 \times
+297\units{mm}$. The long size $1/3\units{A4}$ is $210 \times
+99\units{mm}$---the long size is the base size divided into the
+specifed number of parts along the long edge. Because you can apply
+this division to any piece of paper you like, \rmpage is happy to make
+non-ISO sizes into ISO-style long sizes. This means that Americans
+who want to print small booklets with two pages fitting on one sheet
+of letter paper can produce pages very easily with \rmpage, by asking
+for \optname{letterpaper} and \optname{1/2longpaper}. You can do the
+same thing with A4 paper, but why not just ask for \optname{a5paper}?
+One commonly-used long size is 2/3 A4, which is often used for company
+invoices and commercial letters; it's often used in landscape
+orientation ($210\units{mm} \times 198\units{mm}$) so it fits neatly
+into a world designed for A4-wide paper.
+
+\begin{ikkystuff}
+If you are going to print two pages on one sheet of US letter paper,
+as I suggested, \rmpage standard way of deciding what to set the
+non-printing margins to might be inappropriate. If so, look at
+the printer paper setting code in the configuration file, and specify
+clearances for the appropriate printer and paper combinations.
+Section~\ref{cfg:printerpaper} on page~\pageref{cfg:printerpaper} has
+more details on this.
+
+A good reason for not asking for \optname{a4paper} and then
+\optname{1/2longpaper}, is that if the configuration file has
+particular settings for A5 paper, it won't apply them to this long
+paper size, even though it's the same physical size. A good reason
+for doing so is that you might want that.
+\end{ikkystuff}
+
+\rmpage accepts these paper options (and more):
+
+\begin{tabbing}
+\optname{a0paper} \= to \= \optname{a10paper}, \\
+\optname{b0paper} \> to \> \optname{b10paper}, \\
+\optname{c0paper} \> \optname{c7paper},\= \optname{c7/6paper},\= \optname{dlpaper},
+\optname{no10envelopepaper},\\
+etc\\
+\end{tabbing}
+
+Options not listed here include some non-ISO envelope sizes, old
+British book sizes and so on: the odder sizes are kept in the
+configuration file. See section~\ref{optcfg:papersizes} on
+page~\pageref{optcfg:papersizes} for more details.
+
+You can get a long size by passing one of these options along with a
+paper size option: \optname{notlongpaper}, \optname{7/8longpaper},
+\optname{3/4longpaper}, \optname{2/3longpaper},
+\optname{5/8longpaper}, \optname{1/2longpaper},
+\optname{3/8longpaper}, \optname{1/3longpaper},
+\optname{1/4longpaper}, or \optname{1/8longpaper}.
+
+\rmpage makes an honest attempt to work out how you'll be printing
+these long sizes out (see section \ref{htw:paperprinter}), but its
+decision might apply limits that aren't what you want. If so, you'll
+have to add some code to the configuration file to over-ride its
+guess. Section~\ref{cfg:printerpaper} on page~\pageref{cfg:printerpaper} has
+more on how to do this.
+
+
+By the way, because A3 printers aren't unheard of, and because you can
+print (say) 1/3 long A2 on A3 paper, it makes perfect sense to include
+an option to define A2 paper. It seemed churlish not to go all the
+way up to A0. 2/3 A4 is apparently a size commonly used for printing
+business invoices and the like. If anyone really does use \rmpage for
+producing A3 pages, please let me know---it's something I've been
+wondering about.
+
+If anyone would like to let me know about more US paper sizes, I'd be
+happy to include them in future versions of \rmpage.
+
+
+\section{Setting the body text size}
+\label{gen:bodytextsize}
+
+There's more detail on how this works in
+sections~\ref{htw:textheightcalculation}
+and~\ref{htw:textwidthcalculation}.
+
+The range of values available for \comname{textwidth} and
+\comname{textheight} is a compromise. I wanted to keep the number of
+options down, produce a wide spread of values, with a small minimum
+step size.
+
+The way things have turned out, the step size from one length option
+to the next is, in general, different to the step size from one width
+option to the next. So you can't maintain a particular balance of
+top:outside and bottom:inside margins (or whatever) by moving up to
+the next width and length option. There's no easy way round this---I
+wrote \rmpage to set \comname{textheight} and \comname{textwidth}
+independently, because that seemed most sensible at the time. To
+ensure a fixed aspect ratio would mean I would have to re-write it to
+include code to scale up and down through a range of aspect ratios,
+which might have to be related to the aspect ratio of the paper, and
+allow you to scale the overall size of the text body up and down.
+This is a big job. I'd like to be able to set the text size that way
+as well as the way \rmpage does it at the moment, but it'll have to
+wait---I suspect I'll have to re-structure the entire package to be
+able to support both ways of doing things without getting completely
+mixed up.
+
+I decided to set both the width and height of the text body by scaling
+up and down geometric series. The \comname{textheight} series was
+chosen by deciding that the \optname{longest} length should fill an
+ordinary page of A4, assuming a 6\units{mm} non-printing border. The
+\optname{normallength} length was set to the standard value (this is
+only strictly true if you're using headers and footers), which defined
+the geometric series. The \optname{shortest} length on A4 is about
+163\units{mm}, just over half the page. It turns out that the series
+produces a central minimum step (\optname{normallength} plus
+\optname{touchlonger}) that is about one line (13\units{pt}, near
+enough), so I think it's appropriate.
+
+The \comname{textwidth} paper-based width series was derived
+similarly; the final values give a spread based on a \optname{widest}
+value that fills an A4 page to within about 7\units{mm} of the edge,
+and down to just over half the page. The \comname{textwidth}
+character-based width series has been more of a headache; the current
+(\filename{rmpwnorm.pko v 0.52}) version gives a spread from about 75
+characters in the middle, to about 98 and 57 characters at the
+extremes. The central minimum step (\optname{normalwidth} plus
+\optname{touchlonger}) is just under 2~characters, which seems
+suitably small. The problem with the character-based width setting is
+that the standard \comname{textwidth} is at the upper limit for easy
+reading; the widest available width, being wider than this, is far,
+far, far too wide for easy reading; but the minimum
+\comname{textwidth} doesn't get close to the minimum
+\comname{textwidth} for easy reading. But that probably won't matter
+too much; the minimum width is less than half an A4 page if you're
+using 11\units{pt} Computer Modern Roman in one column, which seems
+small enough for most things I can think of (you might want a layout
+which places figures and extensive side notes in the margin; if most
+of the marginal note space were to be filled, having a very large
+margin and small \comname{textwidth} makes sense.)
+
+
+\section{Founts-}
+\label{gen:founts}
+
+
+\section{Marginal paragraphs-}
+\label{gen:mpars}
+
+\rmpage looks at the everything including the sunspot cycle and the
+phase of the moon when it calculates the width of marginal paragraphs.
+Section~\ref{optcfg:mpars} on page~\pageref{optcfg:mpars} lists all the
+options that control marginal paragraph size, and has some more
+information.
+
+Note this: the default margin for marginal notes is the outside
+margin for twosided printing, and the right-hand margin for one sided
+printing. The standard \LaTeX\ command \comname{reversemarginpar}
+will reverse the marginal note placement; \comname{normalmarginpar}
+will put it back to normal. If you are printing twocolumn, the
+marginal notes end up in the nearest margin.
+
+\rmpage pays attention to all of this, and makes the marginal notes as
+large as possible given the margin they will appear in. The size is
+constrained by various parameters, controlled by the
+\optname{maxmparwidth}, \optname{mparsep}, and \optname{mparclearance}
+sets of options.
+
+The |clearance| parameter---the length \comname{RM@mparclearance}---is
+the minimum gap between the marginal note and the edge of the paper,
+subject to the additional restraint of the available printing area.
+It's hardwired to 0.4\units{in} in standard \LaTeXe; \rmpage sets it
+to be a fraction of \comname{paperwidth} which works out to be
+0.4\units{in} if you're using US letter paper. The |sep|
+parameter---the length \comname{marginparsep}---is the gap between the
+marginal note and the body text---this is a standard \LaTeX\
+parameter. The |maxwidth| parameter---the length
+\comname{RM@maxmparwidth}---is the maximum allowed width: 2\units{in}
+in standard \LaTeX, a fraction of \comname{paperwidth} which works out
+to 2\units{in} if you're using US letter paper with \rmpage. There
+are also the \optname{small} and \optname{large}
+\optname{basemparclear} and \optname{basemaxmparwidth} options. The
+large versions of these options set the normal parameter size to twice
+the usual default value.
+
+So if you're going to switch to \comname{reversemarginpar} in your
+document, do so \emph{before} you load \rmpage. If you're going to
+switch from one to the other, before you load \rmpage select the one
+which allows the least space for marginal paragraphs.
+
+If you're deeply interested in the workings of marginal paragraph size
+and placement, have a look at the \filename{dtx} files: I think the
+basic idea is obvious. Note that the parameters
+\verb|\RM@mparclearance| \verb|\RM@maxmparwidth| can be set to any
+positive value by one of the hooks (\verb|\RM@PrinterPaperSettings|
+might be a good one to use) in your configuration file: negative
+values are used by way of flags to set initial values.
+
+
+\section{The configuration files}
+
+\rmpage uses a configuration file to do lots of stuff. The way it
+works is this: if you're \LaTeX ing with \rmpage a file called
+\filename{ermintrude.tex}, and a file \filename{ermintrude.rmp} exists
+on the \TeX\ search path, then \filename{ermintrude.rmp} is used by
+\rmpage as the configuration file for that run. If not, then \rmpage
+looks for a file given by the command \comname{\RMconfigfile}. If
+that file exists (if the command hasn't been defined before \rmpage is
+loaded, it's set to \filename{rmplocal}; the file is searched for with
+and without the \filename{cfg} extension added). If that file can't
+be found, \rmpage looks for \filename{rmpgen.cfg}, which is a
+standard configuration file with everything enabled.
+
+The file \filename{rmplocal.gfc} is meant to be renamed
+\filename{rmplocal.cfg} and changed locally. Have a read of the
+comments in the file first, and change the optional argument to the
+\comname{ProvidesFile} command to say that the file's been changed by
+you.
+
+The idea is that you don't change \filename{rmpgen.cfg}; it exists so
+everyone has a standard configuration file that will produce identical
+results. You can tell \rmpage to use it in any given document by
+saying:
+\begin{verbatim}
+|\newcommand{\RMconfigfile}{rmpgen.cfg}|
+...
+\usepackage{rmpage}
+\end{verbatim}
+in the preamble of the document, \emph{before} loading \rmpage. But please
+ do change \filename{rmplocal.cfg}, if you like.
+
+The configuration file exists for these things:
+\begin{itemize}
+
+\item Declare additional standard options
+
+\item Declare user options
+
+\item Set local defaults
+
+\item Place code in various hooks to be executed inside \rmpage, for
+supporting local classes, particular combinations of printer and
+paper, and so on.
+
+\end{itemize}
+
+Every installation of \rmpage should have a modified configuration
+file for at least one reason: option processing is slow, and the fewer
+options you have, the faster it works. Folk with twin 225MHz
+PPC604e processors, or something huge and humming with the word `Sun'
+on the front probably don't care about \LaTeX ing speed, but I do.
+
+The idea is this: edit \filename{rmpgen.cfg} and comment out all
+the options you think you won't often use. You can always uncomment
+them later. There's quite a few of these standard options that are
+commented out to begin with; you might want to uncomment some of them
+(if, for example, you're in the habit of printing on crown folio
+paper). By the way, don't add or delete anything anywhere above the
+local option declaration section; if you do, upgrading to a new
+version of \rmpage might turn out to be more awkward than you'd like,
+and I'll come round and pester you, steal all your milk and put my
+feet up on the sofa.
+
+Setting local defaults isn't hard either: there's an
+\comname{ExecuteOptions} statement with my local defaults in it.
+Take them out and replace them with what you want. If you use a
+LaserJet 4 printer and US letter paper, and most of your output goes
+into ring binders, say:
+\begin{verbatim}
+\ExecuteOptions{lj4printer,letterpaper,usdate,notstdmargins}
+\end{verbatim}
+Note that I've assumed someone printing on US letter paper want dates
+formatted US style. If you don't want \optname{notstdmargins}, say
+\optname{stdmargins}.
+
+There are some options that you can't specify in any
+\comname{ExecuteOptions} statement seen by \rmpage: the \optname{touch}
+options aren't allowed---they must be executed after their
+corresponding `ordinary' options, which can't be arranged if they're
+bunged in an \comname{ExecuteOptions} statement. Try it if you
+like: \rmpage will whinge at you.
+
+If you want to declare a new printer type, for example, just copy one
+of the existing option declarations to the section marked
+`\textsc{begin local option declaration}', change the name and the
+parameters, and there you go.
+
+You might want to set up particular printer/paper settings; there's a
+place for that and an example of how to do it in
+\filename{rmplocal.cfg}. Have a look and a fiddle: if I could do it,
+it shouldn't be hard for someone as clever as you.
+
+Adding code to the hooks in a useful fashion is best left to those who
+like fiddling around: have a look at the guts of \filename{rmpage.dtx}
+and so on. Hopefully you'll get the hang of how I did things, and
+you'll be able to add code to suit your installation. I intend to
+document the whole thing properly eventually, but I only have 24 hours
+in each day. Try to stick to the conventions I've established: it'll
+make it more likely that your code will work properly with future
+versions of \rmpage. My intention is to keep things more-or-less as
+they are, but this is the first version on public release, and I don't
+know what changes will be needed yet.
+
+\section{Sending \rmpage-formatted documents elsewhere}
+
+There's a few potential problems with sending to other people
+documents that you've formatted with the help of \rmpage. One is that
+they might not have \rmpage, and another is that even if they do have
+\rmpage, it is possible that you have specified options that produce
+layout parameters that are dependent on your particular printer, which
+your recipient might not have, and even if they do have that
+particular printer, they might have local configuration
+code---particularly printer/paper specific settings---that produces a
+slightly different result.
+
+There's several different things you might do, depending on the
+circumstances---the thing to do is think about where your document's
+going, what's going to happen to it, and how you want it formatted.
+
+In the usual run of things, a document that's been formatted with
+\LaTeX\ and intended for general release is likely to be printed on A4
+paper and US letter paper, so you have installation-dependent
+differences\footnote{A4 paper is $210\units{mm} \times 297\units{mm}$
+or $8.27\units{inches} \times 11.69\units{inches}$; US letter paper
+is $8.5\units{inches} \times 11\units{inches}$ or $215.9\units{mm}
+\times 279.4\units{mm}$} even without \rmpage---it's always worth
+checking that this difference won't cause a problem (so US authors:
+check that your document works on A4 paper, and everyone else in the
+world make an effort for those isolated Americans. Look, just go
+metric, will you? I read maps in miles and drink beer in
+pints\footnote{real pints, not your sawn-off US version}, but really,
+metric units make life so much easier. If us \emph{and} the Italians
+have made the switch, so can you. Italians? Yes, Italians: just
+which empire do you think is referred to in the phrase `Imperial
+units' Yes, that's right, the Roman Empire. How about advancing into
+the 19th century before the 21st begins, eh? Sorry, a minor rant, but
+one that I think should be made occasionally.)
+
+Ignoring paper sizes for the moment, if your recipent has a copy of
+\rmpage, format your document with the \optname{pessimisticprinter}
+option, ensure that the result is acceptable, and send the thing.
+
+If your local configuration file has non-printer-specific settings
+that affect the output, you might send a copy of it (included in the
+preamble of your file before the |\usepackage{rmpage}| command,
+using the \envname{filecontents} environment) under the name
+\filename{jobname.rmp}. That is, if the document is in a file called
+\filename{canes-venaciti.tex}, call the configuration file
+\filename{canes-venaciti.rmp} and it will be used as the
+configuration file for that document only.
+
+Or you could run \LaTeX\ with the \optname{chatty} option specified to
+\rmpage, and copy all the page layout parameters from the console
+window and paste them into the preamble of your document. If your
+version of \LaTeX\ doesn't allow you to copy text from the console
+window (\OzTeX~2.0 for the Macintosh does; I don't know about other
+versions), copy the text from the \filename{log} file. Then comment
+out the call to \rmpage. The problem with this is that it fixes
+everything, including paper sizes, so a recipient who uses A4 paper
+won't be impressed if they\footnote{A useful way of avoiding he/she
+that has an ancient history} get a document hard-formatted for US
+letter paper, and vice-versa. Of course, you could provide two sets
+of page layout parameters, with a note to the recipient to choose one
+or the other. This is messy, but it might produce the most reliable and
+legible results.
+
+A possible way round the paper problem is to assume that no-one will
+be printing on anything other than US letter or A4 paper, and the
+people receiving the document won't mind if the layout isn't very
+good. That way, you might use the \optname{letter4paper} paper size.
+This paper size is $210\units{mm} \times 8.5\units{inches}$, and
+documents formatted with it will fit on A4 and US letter paper without
+formatting changes. Mind you, the results won't be very nice, and
+worse on US letter paper than on A4---\optname{letter4paper} pages
+printed on A4 will be a little too short, which enlarges the gap at
+the bottom. Very often, this isn't too noticeable. But
+\optname{letter4paper} pages printed on US letter paper will have the
+text body too far to the left, which tends to look very awkward.
+
+\section{Speed and what to do about it}
+
+\rmpage chews up a lot of processor time when it is being processed at
+the start of a \LaTeX\ run, but adds nothing to subsequent processing
+time---all it does is change page layout parameters. Narrow columns
+or short pages give \TeX\ a harder time in line and page breaking,
+which might increase processing time, but I wouldn't worry about that
+if I were you---the underfull \comname{hbox}es and \comname{vbox}es
+will cause you more problems that the extra 0.2s time.
+
+One verion of \rmpage (v0.65) added 18.5\units{s} to a \LaTeX\ run on
+my Mac. The same version of \rmpage added 19.1s to the processing
+time when I used it with the comments left in (before being processed
+by \packname{docstrip}). This is an increase of 0.6s or 3\%.
+Version~0.86 added 16\units{s} with comments, or 15\units{s} without,
+an increase of 7\%. In this case, file size was reduced from
+200\units{K} to 85\units{K}. It seems that, on my computer, the main
+benefit of using \packname{docstrip} to remove comments from an input
+file is reduced file size, not reduced processing time. A
+not-terribly-formal test concluded that each character in the first
+argument to each \comname{DeclareOption} command added about
+10\units{ms} to processing time---I saved 1.6\units{s} with
+version~0.72 by commenting-out eight options containing 176
+characters.
+
+My computer is a Macintosh Performa 475 12/160 with a 25MHz 68LC040
+microprocessor; I am told this processor is roughly equivalent to a
+40MHz 80486SX. For the tests noted above I used OzTeX version 2.0.1
+and 2.1 under system B1 7.1 P5 SU3.
+
+You can speed up \rmpage quite a lot. A large amount of the time
+taken by \rmpage is in processing options---\LaTeXe's option
+processing mechanism is very slow. Commenting out options in the
+config file is very effective at reducing processing time (it's the
+length of the option names, not the amount of code, that increases
+this processing time).
+
+For example, \rmpage version~0.66 increased the time to process a
+document by 21.2s; with 73 options commented out, \rmpage only added
+12.1s. This is an improvement of nearly 60\%. This is why there are
+two config files supplied with \rmpage: a slow one with all the
+options enabled, and a faster one with some options commented out.
+
+You can make \rmpage work faster by commenting out (don't delete
+them---you never know when you might need them) all the options you
+think you won't use very often. If you do want to use one of these
+commented-out options, uncomment it (and all the options in the same
+group---you'll see what this means when you look at the file) and
+leave it uncommented. The Alpha text editor for Macintoshes can
+comment out a group of lines if you select the lines and press
+\keypress{cmd-D}; it can reverse the process if you press
+\keypress{cmd-opt-D}. I expect other text editors can do the same job
+somehow: it might be worth finding out how to do this with your text
+editor if you don't already know
+
+Some versions of \TeX\ under some operating systems take quite a time
+to find files to be input. If this is the case on your computer, you
+might be able to reduce processing time quite a lot by placing
+frequently-used files in a place that is searched early on. I have a
+list of folders in my \filename{TeX-inputs} folder that looks a bit
+like this:
+
+\begin{verbatim}
+aa LaTeX
+ab Rat2e <--- rmpage is in here
+ab tools
+ac mfnfss
+ac other 2e <--- other people's packages
+ac other fd
+ac PSNFSS
+ba .cfg files etc
+ba other 2.09
+ba Rat old
+bb chicken <--- Liverpool John Moore's University logo
+bb new fds
+bb other LaTeX
+bb some AMS-LaTeX
+za afm
+za fontinst
+za fontinst examples
+za fontinst inputs
+zz Graphics
+zz Plain
+zz Rat ex + tmp
+\end{verbatim}
+
+It's a compromise between speed and ease of management: I can change
+parts of my \LaTeX\ system without getting a headache, and it's not
+too slow for me. The commonly-used folders are prefixed
+\filename{aa}, \filename{ab}, end so on; the rarely used ones are
+prefixed \filename{zz}. My version of \LaTeX\ is set up to search the
+folders early on in the alphabet first: this is not necessarily the
+case with any other version of \LaTeX, even versions of \OzTeX\ with
+the \filename{tex-inputs} list specified differently.
+
+Some \TeX\ implementations take a lot of time to search multiple
+directories, and are faster with fewer directories to search. If this
+is the case with your implementation, putting your input files into
+fewer directories might help. The only way I know to find if this is
+the case is to sit down and do lots of tests: it might be quicker in
+the long run not to bother.
+
+
+\chapter{A brief lecture on typography}
+
+I'm not a professional typographer, and this won't turn you into one.
+Caveat emptor\footnote{buyer beware}, and remember how much this cost
+you. If you want to learn about typography, do the sensible thing and
+get some books out of the library. But given that I'm giving you
+typographical controls, I'd better give you some idea how to use them
+intelligently. If you have any expertise in typography and think you
+can do better than this, please do! You've got my email address\ldots
+
+The notes below are what I think are the main points of ordinary
+typography the average \LaTeX\ user needs to know about, dealing with
+the areas of typography that \rmpage gives you new control over; this
+had no pretensions to being a course in typography---visit that
+library!
+
+\section{Introduction}
+
+The usual reason for writing something is so that people can read and
+digest the content---the reader is usually not interested in the form
+of written work, just the words themselves. It follows that the form
+in which your words are presented should usually be un-noticed by the
+reader: easy to read, conventional, and pleasing to the eye. The
+eye-catching typography used by advertisers does have its
+place, but this short piece concentrates on mundane typography:
+setting chunks of text, one word after another, line after line, to
+form a document which is unobtrusive to read. After all, if you were
+battling with the mathematics of elastohydrodynamics, you wouldn't
+appreciate a layout that was as hard to decipher as the content.
+
+First thing is this: it's easy to make a right mess of things when you
+can control the layout of a page, but many of the mistakes one can
+make are in setting the paragraph indentation, vertical space around
+displayed material, headings, and the like. \rmpage doesn't touch
+these, so you can forget about fouling up that area of design for
+now. As for the things you can control: don't stray too far from the
+normal settings, and the results should be fine.
+
+The easiest mistake to make is in setting the width of the body
+text---\comname{textwidth} in \LaTeX\ terms. Typography texts warn
+that the most common fault is making the body text too narrow (less
+than about 45 average characters); but my experience is that the
+average non-typographer is more likely to make the body text too wide
+(more than about 75 average characters).
+
+The best advice to begin with is follow convention---most books on
+typography make the point that your design has succeeded if no-one
+notices it, so stick with the conventional. Of course, you've got to
+find out what conventional is. Look at professionally designed
+typography: at how the text body sits on the page of a book, and in
+magazines and newspapers---is the text high, low, or in the middle?
+closer to the binding edge or the outside edge? How big, in visual
+relationship to each other and the text body, are the margins top,
+bottom, inside and outside? What about columns of text in magazines and
+newspapers---how wide are they, what's the gap between columns like
+in relationship to the column width, the size of the average word
+space, and the page margins? How does the column width affect
+readability---think about the effect of column width on line-breaking
+and the flow of reading.
+
+You'll notice that conventionally, lines of text longer than about 75
+characters are avoided, as are lines less than about 45 characters;
+and the outside margin is usually larger than the inside margin, for
+the very straighforward reason that the outside margin is the one
+that's most delicate and most handled. If it's big, damage to the
+paper is less likely to deface the text. The bottom margin is usually
+bigger than the top margin for the same reason---and even though this
+reason is a sound practical one, if you produce a page with a smaller
+bottom margin than top margin, it looks very odd to most people. It's
+also fairly conventional for the aspect ratio of the text to match the
+aspect ratio of the paper---if the text is half the width of the
+paper, it'll be half the height as well.
+
+The standard \LaTeX\ classes produce a page layout that's generally in
+line with those conventions, so if you don't pass extreme options to
+\rmpage, you can't go far wrong. Of course, if you're aiming for a
+particular effect for a good reason, such as filling a page with a
+time-table, you might want the longest and widest text area possible.
+If you find that you \emph{are} using an extreme option (\optname{longest},
+for example), think very carefully about why you are doing it, what
+effect this option produces, and whether this is desirable. If you're
+just trying to cram that much text on one page, two columns is
+probably better.
+
+Because typography is to some extent an artistic endeavour, there is
+no such thing as an ideal layout, although some are clearly
+inappropriate. But after a few hours at the keyboard, it's easy to
+lose the ability to judge the passing of time, let alone the effect a
+design has on a new reader. I find that it often pays to trust
+initial reactions, especially when comparing a set of alternatives.
+So, if you're in doubt about which of your final two choices to use,
+ask someone else what they think of them.
+
+\section{Positioning the text body}
+
+Convention has it that the outside margin is larger than the inside
+margin, and that the bottom margin is larger than the top margin.
+It's not unusual to match the sizes of the outside margin and the top
+margin. The \packname{Koma-script} documentation reports that Jan
+Tschichold recommends that the bottom margin should be twice the size
+of the top margin, and the outside margin should be twice the size of
+the inside margin.
+
+The reason \rmpage defaults to having the inside margin larger than
+the outside margin is this: most of what I typeset ends up in
+ring-binders, where you need a large inside margin to avoid punching
+holes in the text. You can change this default setting by editing an
+\comname{ExecuteOptions} statement in the configuration file---see
+chapter~\ref{chap:config}. You can change this default in the
+\filename{rmplocal.cfg} file by putting the \optname{stdmargins}
+option in the default \comname{ExecuteOptions} statement. If you
+don't like the amount by which the inside margin is bigger than the
+outside margin---bearing in mind that one convention has the outside
+margin matching the top margin---you can change it with the
+\optname{offset} option set.
+
+If the top margin looks bigger than the bottom margin, the page looks
+`bottom heavy' and rather odd. It is possible that the only reason
+for this is that everyone lays out pages with a smaller top margin,
+but follow this convention to begin with. \rmpage actually makes the
+top and bottom margins the same size, just as the standard classes do;
+the bottom margin looks larger because the bottom margin
+\emph{appears} to begin at the bottom of the text body; \LaTeX\
+measures it from the bottom of the footer.
+
+i couldn't figure out a reliable way of getting \rmpage to calculate
+\emph{apparent} ratios of top and bottom margins, so you'll have to
+balance this by eye. The \optname{altitude}, \optname{long}, and
+\optname{short} option sets can help.
+
+\section{Size of the text body}
+
+Conventionally, one text column is 1.5 to 2.5 alphabets wide; the
+standard \LaTeX\ widths give you about 2.5 alphabets wide (which is
+about the average width of 75 characters of normal prose, hence
+Lamport's comment in the \LaTeX\ book. 1.5 alphabets is about 44
+average characters, but \rmpage warns when you get below 39 characters
+wide---\TeX's a better line breaker than a human typesetter. \rmpage
+warns you if you exceed the 75---39 character limits; too wide and too
+narrow are both awkward to read, and too narrow makes for rotten line
+breaks.\footnote{I'm lying: \rmpage warns when you exceed the
+standard number of characters per line, which is 78.5 characters for
+10pt, 74.8 for 11pt, and 75.5 characters for 12pt.} \rmpage does
+report the final \comname{textwidth} in terms of what it thinks are
+average characters, which should help to give you an idea of what's
+going on.
+
+If you must fill a very wide space, try using multiple columns. If
+you must use narrow columns, ragged right setting sometimes looks
+better, although a multiple-column narrow-columned layout might need
+to have \comname{columnsep} adjusted with \rmpage's \optname{colsep}
+options---look at a newspaper to get the idea.
+
+The problem with long lines is this: when you get to the end of one
+line, you need to find the start of the next one. If the lines are
+too long, this job is made harder. The problem with short lines is
+twofold: the job of finding the start of a line is a bother, so the
+less you have to do it the better; and short lines make for rotten
+line breaks, which makes it harder to follow the text.
+
+Tschichold recommends that the aspect ratio of the text body be made
+to match the aspect ratio of the paper. This refers to the
+\emph{apparent} aspect ratios---apparent paper size depends on the
+binding used, and apparent text body size depends on the nature of the
+headers and footers. I couldn't come up with a reliable way of
+calculating the comparative apparent aspect ratios, so if you want
+these aspect ratios matched, you'll have to do it by eye. The
+\optname{altitude}, \optname{offset}, \optname{long}, \optname{short},
+\optname{wide}, \optname{narrow} option sets can help. Note that to
+my eye at least, matching aspect ratios often matters less than
+matching top and outside margins, which does appear often to make a
+big difference to my comfort with a layout on small (A5 or so) pages.
+And in any case, the match need not be spot on---but quite what near
+enough is can't be specified exactly. Sometimes an
+almost-but-not-quite match is fine, sometimes it looks awful and
+you're better off with a deliberate `I'm clearly not trying to match
+these dimensions' layout.
+
+\section{Typefaces}
+
+The main thing the average \LaTeX\ user is concerned with is
+legibility, and the computer modern typefaces score highly here. I
+have just seen a volume of conference proceedings (Proceedings of the
+Applied Optics Divisional Conference of The Insitute of Physics, held
+at Reading 16--19 September 1996) in which most papers were produced
+with \LaTeX, using the publisher's style file. To my eye, the papers
+typeset in Times look most legible at a glance; the papers typeset in
+Computer Modern feel easier to read when you get down to it. I
+mention this to make the point that just because something looks
+right, doesn't mean that it's easier to read---not that Times is
+anything but a famously legible typeface.
+
+As a general rule, serif typefaces are easier to read in blocks of
+text, and sans serif typefaces are easier to read as isolated words
+or phrases. This explains the choice of typeface on road signs and in
+newspapers. Typefaces with a heavy emphasis on vertical strokes---such
+as the Bodoni beloved of US newspaper headlines---disrupt the
+left-right flow of reading, whereas typefaces with a more horizontal
+emphasis, such as Times or Baskerville, ease the left-right flow of
+reading.
+
+Choosing founts is a tricky thing---read those typography books! But
+there are some rules which can help you produce pleasant, legible
+pages. Before a real expert shoots me down in flames, I don't claim
+that the list below is `rules for the correct use of typefaces'---it's
+just, erm, `received wisdom', sort of.
+
+\begin{itemize}
+
+\item Always use a serif typeface for your body text.
+
+\item Keep the number of type faces and type families in a design to a
+minimum---use bold, italic, different sized, and maybe slanted
+type faces from the one family where appropriate.
+
+\item Always follow convention---don't invent a new convention
+unless you really need to.
+
+\item Don't mix similar but different typefaces---Times for the body
+copy and New Century Schoolbook for captions looks awful.
+
+\item But do mix very different typefaces---Times for the body copy
+and Helvetica (which I personally loath with a deep loathing) for
+captions or headings, for example, can be very effective.
+
+\item Use a body text size from 9\units{pt} to 12\units{pt}; some
+books suggest no more than 11\units{pt} for body text, and I reckon
+10\units{pt} is a bit too small at 300\unit{dpi}, but fine at
+600\unit{dpi}.
+
+\item Never, ever, underline unless you absolutely have to on pain of
+severe dandruff.
+
+\item And George Orwell said in his rules for good English,
+break any of these rules rather than do anything outright barbarous.
+
+\end{itemize}
+
+
+\chapter{All the options (rmpage v0.69 and rmplocal.cfg v0.11)}
+
+\label{chap:alltheoptions}
+
+Most of the options in \rmpage work by setting an internal paramters,
+which is later used to decide what value to set something to as part
+of a more involved calculation. Sometimes more than one parameter is
+used in this decision. The description of each option tells you what
+this parameter is set to, and what effect the option has.
+
+
+
+
+\section{Options in \rmpage}
+
+This is a list of the options contained in the file \rmpage; there's
+lots more in the configuration file. None of the options in \rmpage
+are commented out, nor are any of the options in the configuration
+file \filename{rmpgen.cfg}. Some of the options in the configuration file
+\filename{rmplocal.gfc} have been commented out for speed's sake; this file
+will be used by \rmpage if you rename it \filename{rmplocal.cfg}
+
+\subsection{Reporting dimensions and tracing calculations}
+
+
+These options control the amount of stuff that \rmpage litters your
+console window with. They do this by setting the \verb|\RM@chatlevel|
+parameter, which is looked at by a bunch of reporting commands---look
+at \rmpage for the details about these. The default is
+\optname{taciturn}; you get a handful of dimensions and warnings get
+printed on the console. I expect that most people won't find
+\optname{garrulous} useful. The \optname{yorkshire} causes \rmpage to
+print nought: this is a British regional joke that I'm allowed to make
+because I live in Lancashire, which is another British regional joke.
+(C.f. Ian MacMillan on `4th Column', BBC R4 6/10/96: ``'Ey oop. All
+right. That should be enough for a column. Y'see, I'm from South
+Yorkshire, and we don't talk a lot.')
+
+\begin{description}\shorty\squish
+\awakeoption{garrulous} \rmpage reports everything I thought might be
+useful someday. It used to be worse. Sets \verb|\RM@chatlevel| to 0
+
+\awakeoption{chatty} \rmpage reports all \LaTeX\ layout parameters that
+it changes, plenty of \rmpage's own parameters, and some information
+about what's going on as it caluculates them. Sets \verb|\RM@chatlevel| to 1
+
+\awakeoption{taciturn} Default. \rmpage reports the height and width of the
+text and paper, the width of the text in characters, and a few other
+things. Warnings are also printed. Sets \verb|\RM@chatlevel| to 2.
+
+\awakeoption{yorkshire} Allows \rmpage to print errors only, although
+warnings are put in the log file with a few other bits. Sets
+\verb|\RM@chatlevel| to 3
+\end{description}
+
+\subsection{Paper sizes}
+\label{optrmp:paper-sizes}
+
+More paper types are defined in the configuration file, as are the
+long paper sizes. Each paper size is given a code number, because
+it's easier and faster to check for a number than a name. If you want
+to define your own paper sizes, I suggest you use code numbers above
+1000 so that future versions of \rmpage don't have standard sizes than
+conflict with your sizes. The paper size number 0 doesn't have much of a
+role in life yet, but I'm working on it.
+
+The \optname{landscape} and \optname{portrait} options force the paper
+size to be in that orientation; the standard class swap
+\comname{textheight} and \comname{textwidth} when you ask for
+landscape. Landscape orientation is defined as the long side being
+horizontal; portrait orientation is defined as the short side
+horizontal. 2/3 A4 is usually used in landscape orientation ($210
+\times 198\units{mm}$, as are DL envelopes. Some printer drivers,
+when dealing with DL envelopes, call `landscape', `portrait', and
+vice-versa.
+
+\rmpage knows about lots of sizes; some of them are large, obsolete, or
+untrimmed paper sizes which I don't expect will be directly useful to
+anyone. It just seemed inelegant to leave them out. Perhaps
+I have a warped sense of \ae sthetics. If you have a Macintosh with
+QuickDraw~GX, you can tell your printer driver about any paper size
+that your printer is physically able to deal with, so these odd sizes
+might be more useful than I think.
+
+If any Americans would like to send me the dimensions of some more US
+paper sizes (including envelopes), I'll include them in future
+versions. The only places I could find US paper size data were
+\LaTeX\ classes and my printer's manual.
+
+According to BS4000:
+\begin{quotation}
+ The ISO A series is based on A0, with a surface
+area of $1\units{m}^{2}$. Each ISO B paper size is a geometric mean between
+adjacent A sizes, with sides in the same proportions.
+
+Each size shall be acheived by dividing the size immediately above it
+into two equal parts, the division being parallel to the shorter
+side. Consequently, the areas of two successive sizes shall be in the
+ratio $2:1$.
+
+All the size in each series shall be geometrically similar to one
+another.
+\end{quotation}
+
+What this means is that the ratio of the sides must be $1:\sqrt{2}$,
+so that A0 is $841\units{mm} \times 1189\units{mm}$.
+
+Tolerances are specified thus:
+
+\begin{tabbing}
+$150\mathrm{mm}<\mathrm{sizes}\leq 600\mathrm{mm}$ \= $\pm2 \mathrm{mm}$\kill
+$\mathrm{sizes}\leq 150 \mathrm{mm}$ \> $\pm1.5 \mathrm{mm}$ \\
+$150\mathrm{mm}<\mathrm{sizes}\leq 600\mathrm{mm}$ \> $\pm2 \mathrm{mm}$\\
+$600\mathrm{mm}<\mathrm{sizes}\mathrm{mm}$ \> $\pm3 \mathrm{mm}$\\
+\end{tabbing}
+
+Long ISO sizes are created by dividing ordinary ISO sizes into slices,
+cutting parallel to the short edge, e.g.,
+
+\begin{tabbing}
+1/3 A4 \= $99 \times 210$ \\
+1/4 A4 \> $74 \times 210$ \\
+1/8 A8 \> $13 \times 74 $ \\
+\end{tabbing}
+
+2/3 A4 is apparently a common size commercially, used for invoices and
+the like. It is defined as $198 \times 210 \mathrm{mm}$. Note that
+the standard defines sizes to the nearest millimetre, but \rmpage does
+\emph{not} round the calculated long sizes, nor does it ensure that
+only ISO sizes are processed by the `long' options.
+
+\rmpage does not limit you to making long sizes out of ISO paper only
+because you can chop up any bit of paper you like. The reason \rmpage
+does not round long sizes to the nearest millimetre is that if you are
+printing on a piece of ready-cut long paper, \rmpage's maximum
+deviation from the specified size, 0.5\unit{mm}, is within tolerance;
+and if you are making your own long paper by cutting up a straight
+size, rounding to the nearest millimetre on a 1/8 size could result in
+a 4\unit{mm} error by the time you cut the strip furthest from your
+datum edge, which is outside the specified tolerance for the size of
+the sheet you are cutting. The fact that not rounding is easier to
+code is, of course, entirely co-incidental and played no part in the
+design decision.
+
+Data source for the old British book sizes: Pears Cyclopedia, 68th
+edition, 1959-1960. Pelham Books Ltd., 1959. (General Compendium,
+page N13). A, B, and other untrimmed sizes taken from BS4000. C3,
+C4, C5, C6, DL, and non-ISO envelope sizes taken from BS4264. C0, C1,
+C2, C7, and C7/6 taken from The Cambridge Factfinder, Cambridge
+University Press, 1993.
+
+
+Each paper type is given a number:
+
+\begin{tabbing}
+0=undefined, 1=letter, 2=legal, 3=executive,\\
+9=letter4paper\\
+10=a0, \= \ldots , \= 20=a10 (a4=14, a5=15)\\
+30=b0, \> \ldots , \> 40=b10\\
+50=c0, \> \ldots , \> 57=c7, 58=dl, 59=c7/6,\\
+64=bslargelegalenvelope, \= 65=bscalendarenvelope\kill
+60=bspopseedenvelope, \> 61=bspopnonisoenvelope, \\
+62=bsbrochureenvelope, \> 63=bslegalenvelope,\\
+64=bslargelegalenvelope, \> 65=bscalendarenvelope\\
+66=no10envelopepaper\\
+85=medium quarto, \= 80=imperial quarto, \= 81=imperial octavo\kill
+70=foolscap folio, \> 71=foolscap quarto, \> 72=foolscap octavo\\
+73=crown folio, \> 74=crown quarto, \> 75=crown octavo\\
+76=royal folio, \> 77=royal quarto, \> 78=royal octavo\\
+79=imperial folio, \> 80=imperial quarto, \> 81=imperial octavo\\
+82=large crown octavo\\
+83=demy quarto, \> 84=demy octavo\\
+85=medium quarto, \> 86=medium octavo\\
+93=sra0, \= 94=sra1, \= 95=sra2\kill
+90=ra0, \> 91=ra1, \> 92=ra2,\\
+93=sra0, \> 94=sra1, \> 95=sra2\\
+98=metric large quad crown paper, \= 99=metric quad demy paper\kill
+96=metric double crown paper, \> 97=metric quad crown paper\\
+98=metric large quad crown paper, \> 99=metric quad demy paper\\
+100=metric small quad royal paper\\
+\end{tabbing}
+
+The paper types are divided up like this:
+\begin{tabbing}
+10 \= C sizes plus dlpaper defined by 10 options: for envelopes, etc.
+\= (50-59)\kill
+ 3 \> US sizes recognised by 3 options \> (1-3)\\
+ 1 \> bodge size recognised by 1 option \> (9)\\
+11 \> A sizes defined by 11 options: for writing paper, books, etc. \>
+(10-20)\\
+11 \> B sizes defined by 11 options: for posters, etc. \> (30-40)\\
+10 \> C sizes plus dlpaper defined by 10 options: for envelopes, etc.
+ \> (50-59)\\
+ 6 \> BS4264 envelope sizes defined by 6 options: \> (60-65)\\
+ 1 \> US envelope size defined by 1 option: \> (66)\\
+17 \> old British sizes defined by 18 options. \> (70-86)\\
+11 \> BS4000 untrimmed sizes defined by 11 options \> (90-100)\\
+\\
+71 \> different paper sizes defined by 72 options.
+\end{tabbing}
+
+
+
+\begin{description}\shorty\squish
+
+\awakeoption{letterpaper} Sets |\RM@papertype| to 1
+-- 11in by 8.5in
+
+\awakeoption{legalpaper} Sets |\RM@papertype| to 2
+-- 14in by 8.5in
+
+\awakeoption{executivepaper} Sets |\RM@papertype| to 3
+-- 10.5in by 7.25in
+
+\awakeoption{a4paper} Sets |\RM@papertype| to 14
+-- 297mm by 210mm
+
+\awakeoption{a5paper} Sets |\RM@papertype| to 15
+-- 210mm by 148mm
+
+\awakeoption{b5paper} Sets |\RM@papertype| to 35
+-- 250mm by 176mm
+
+\awakeoption{c6paper} Sets |\RM@papertype| to 56
+-- 162mm by 114mm
+
+\awakeoption{dlpaper} Sets |\RM@papertype| to 58
+220mm by 110mm. Ordinary envelopes.
+
+\awakeoption{no10envelopepaper} Sets |\RM@papertype| to 66
+9.5in by 4.12in. Ordinary US envelopes.
+
+\end{description}
+
+% long paper type numbers:
+%
+% 0 = not long (or 1)
+% 1 = 7/8 2 = 3/4 3 = 2/3 4 = 5/8 5 = 1/2
+% 6 = 3/8 7 = 1/3 8 = 1/4 9 = 1/8
+%
+% long paper options in rmplocal.cfg
+
+\subsection{Typesetting tightness}
+\label{optrmp:tightness}
+
+These options only exists because \rmpage can load the
+\packname{PSNFSS} founts, and Karl Berry says that these founts
+(produced with \packname{FontInst}) have too little slack in the
+inter-word space for \TeX\ to be able to form paragraphs well with the
+standard typesetting parameters.
+
+These options must be executed before the \optname{load<fount>}
+options. That's inevitable if I have these option declarations before
+the \optname{load<fount>} option declarations, and use
+\comname{ProcessOptions} rather than \comname{ProcessOptions*}. This
+is so that these options can over-ride the default typesetting
+tightness (\optname{looseish}) requested by the \optname{load<fount>}
+options.
+
+\begin{description}\shorty\squish
+\awakeoption{tight} Default. Leaves the typesetting parameters alone. Defines
+\verb|\RM@looseoption| to be 0.
+
+\awakeoption{looseish} Changes the typesetting parameters to be
+something in between the adjacent options. Defines
+\verb|\RM@looseoption| to be 1
+
+\awakeoption{loose} Changes the typesetting parameters to something
+close to Alan Jeffries's recommendations. Defines \verb|\RM@looseoption|
+to be 2
+
+\awakeoption{looser} Changes the typesetting parameters to be
+something in between the adjacent options. Defines
+\verb|\RM@looseoption| to be 3
+
+\awakeoption{loosest} Changes the typesetting parameters to something
+close to twice as sloppy as Karl Berry's recommendations. Defines
+\verb|\RM@looseoption| to be 4
+
+\awakeoption{sloppyish} Changes the typesetting parameters to be even
+looser than \verb|\sloppy|, for two column typesetting with
+\packname{PSFNSS} founts. Defines \verb|\RM@looseoption| to be 5.
+
+\end{description}
+
+
+\subsection{Textheight setting}
+\label{optrmp:textheight}
+
+These request a \comname{textheight} shorter or longer than normal.
+If you allow space for headers and footers with the \optname{headers}
+and \optname{footers} options, \optname{normallength} gives you the
+same \comname{textheight} as you'd get with the standard classes. The
+other lengths are scaled up and down from the normal value in a
+geometrical sequence. (Actually, the total space above and below the
+text body including headers and footers is the dimension that's scaled
+in a geometrical sequence, but that shouldn't bother you too much.)
+
+The \optname{touchlength} options add or subtract one from the value
+set here.
+
+There are also \optname{stdlength} and \optname{fulllength} options in
+the configuration file; see section~\ref{optcfg:odd-lengths} on
+page~\pageref{optcfg:odd-lengths}.
+
+\begin{description}\shorty\squish
+\awakeoption{shortest} Sets |\RM@lengthoption=3|; this
+number gives you: $|\RM@totalheadfootclearance|=0.5200|\paperheight|$
+\awakeoption{shorter} Sets |\RM@lengthoption=6|
+\awakeoption{short} Sets |\RM@lengthoption=9|
+\awakeoption{shortish} Sets |\RM@lengthoption=12|
+\awakeoption{normallength} Default. Sets |\RM@lengthoption=15|; this
+number gives you: $|\RM@totalheadfootclearance|=0.2130|\paperheight|$
+\awakeoption{longish} Sets |\RM@lengthoption=18|
+\awakeoption{long} Sets |\RM@lengthoption=21|
+\awakeoption{longer} Sets |\RM@lengthoption=24|
+\awakeoption{longest} Sets |\RM@lengthoption=27|; this
+number gives you: $|\RM@totalheadfootclearance|=0.0872|\paperheight|$
+\end{description}
+%
+%
+\subsection{Headers and footers}
+
+These options only deal with the gap between text body and the header
+(or footer). See section~\ref{optrmp:hfonoff} on
+page~\pageref{optrmp:hfonoff} for options to turn the headers and footers
+on and off.
+
+The way these options work is by setting a parameter which is passed
+to the |\RM@scalebyoption| command, to scale the required page layout
+parameter by a value in a geometric sequence. Have a look at the
+command in \rmpage for the details.
+
+\comname{headsep} is just multiplied by the requested value.
+\comname{footskip} is the distance from the bottom of the text body to
+the bottom of the footer. To approximate a scaling of the distance
+between the top of the footer and the bottom of the text, \rmpage
+assumes that the footer is a single line that is \comname{baselineskip}
+high, and subtracts \comname{baselineskip} from \comname{footskip}
+before scaling, and adds it back afterwards. This seems to work well
+enough.
+
+The value set by the options below can be modified by the
+\optname{touchheadsep} and \optname{touchfootskip} options, which add
+or subtract one from the appropriate parameter.
+
+% Headsep is scaled by option
+%
+\begin{description}\shorty\squish
+\awakeoption{leastheadsep} Sets |\RM@headsepoption=3|
+\awakeoption{lessheadsep} Sets |\RM@headsepoption=6|
+\awakeoption{lessishheadsep} Sets |\RM@headsepoption=9|
+\awakeoption{normalheadsep} Default. Sets |\RM@headsepoption=12|
+\awakeoption{moreishheadsep} Sets |\RM@headsepoption=15|
+\awakeoption{moreheadsep} Sets |\RM@headsepoption=18|
+\awakeoption{mostheadsep} Sets |\RM@headsepoption=21|
+%
+% Footskip is scaled by option
+%
+\awakeoption{leastfootskip} Sets |\RM@footskipoption=3|
+\awakeoption{lessfootskip} Sets |\RM@footskipoption=6|
+\awakeoption{lessishfootskip} Sets |\RM@footskipoption=9|
+\awakeoption{normalfootskip} Default. Sets |\RM@footskipoption=12|
+\awakeoption{moreishfootskip} Sets |\RM@footskipoption=15|
+\awakeoption{morefootskip} Sets |\RM@footskipoption=18|
+\awakeoption{mostfootskip} Sets |\RM@footskipoption=21|
+\end{description}
+%
+% The marginpar setting options are now in rmplocal.cfg
+
+\subsection{Columnsep}
+\label{optrmp:columnsep}
+
+\comname{columnsep} is a standard \LaTeX\ parameter: it is the space
+in between columns of text on a multiple column page. The
+\optname{colsep} options scale \comname{columnsep} using the internal
+\comname{RM@scalebyoption} command: see
+section~\ref{htw:headfootmpar} on page~\pageref{htw:headfootmpar}
+for details. Briefly, \optname{normalcolsep} does nothing;
+\optname{mostcolsep} multiplies \comname{colsep} by 2.5;
+\optname{leastcolsep} divides \comname{columnsep} by 2.5; and
+intermediate options use a factor in between along a geometrical
+sequence.
+
+There are corresponding \optname{touchcolsep} options. They must be
+executed after these main options, which is easily arranged---see
+section~\ref{optcfg:touchoptions} on page~\pageref{optcfg:touchoptions} for
+the details.
+
+\begin{description}\shorty\squish
+\awakeoption{leastcolsep} Sets \comname{RM@columnsepoption} to 3
+\awakeoption{lesscolsep} Sets \comname{RM@columnsepoption} to 6
+\awakeoption{lessishcolsep} Sets \comname{RM@columnsepoption} to 9
+\awakeoption{normalcolsep} Default. Sets \comname{RM@columnsepoption} to 12
+\awakeoption{moreishcolsep} Sets \comname{RM@columnsepoption} to 15
+\awakeoption{morecolsep} Sets \comname{RM@columnsepoption} to 18
+\awakeoption{mostcolsep} Sets \comname{RM@columnsepoption} to 21
+\end{description}
+
+
+If \comname{RM@adaptivecolseptrue}, then \comname{columnsep} is set to
+be a fraction of the number of points per character. This isn't
+always appropriate, and the flag is set to false by default.
+
+\begin{description}\shorty\squish
+\awakeoption{adaptivecolsep} \comname{columnsep} is set to be 2.3
+times the width of one average character, according to \rmpage's
+reckoning. This new value can be scaled by the
+\optname{mostcolsep} to \optname{leastcolsep} options.
+
+The standard \comname{columnsep} is 2.03 times the width of one
+average 10\units{pt} Computer Modern Roman character. This is a
+useful option if you are creating a style based on a fount size larger
+than 12\units{pt}. Otherwise, it seems to be a good idea on Mondays,
+Wednesdays, and Fridays; not so good on Tuesdays, Thursdays, and
+Saturdays; and on Sundays, I write Ogham on tree bark.
+
+\awakeoption{noadaptivecolsep} Default. \comname{columnsep} is not
+changed from its default value, although it might be scaled by the
+\optname{mostcolsep} to \optname{leastcolsep} options.
+
+\end{description}
+%
+% stdmargins: large margin outside, small margin inside.
+% notdstdmargins: large margin inside, small margin outside.
+%
+%
+% Note that the width option setting options need to be executed in
+% the order they are declared here: so that you can increment or
+% decrement narrowest---widest; but stdwidth, half and one inchmargins,
+% and fullwidth are all fixed options.
+%
+% One easy way of ensuring this is to keep these options declared in
+% this order and use \ProcessOptions rather than \ProcessOptions*
+%
+\subsection{Width of the text body}
+\label{optrmp:textwidth}
+
+The width options let you ask for a larger or smaller
+\comname{textwidth}. Following the basic idea of the standard
+classes, \rmpage calculates two different \comname{textwidths}: one
+is based on the number of characters in a line; the other is based on
+the size of the paper. The smaller of these two guesses is used as
+the basis for the final \comname{textwidth}---\comname{textwidth} is
+also constrained by \comname{RM@mintextwidth},
+\comname{RM@maxtextwidth}, \comname{RM@mininsidemargin},
+\comname{RM@minoutsidemargin}, \comname{RM@minleftclearance}, and
+\comname{RM@minrightclearance}.
+
+\rmpage is inclined to print out warnings if it has to change its
+preferred \comname{textwidth} because of one of the above
+restrictions---the \optname{yorkshire} option will silence these
+warnings if you find them irritating.
+
+The \optname{normalwidth} option gives a \comname{textwidth} close to
+the standard \LaTeX\ width on US letter or A4 paper, where the
+character-based width is usually used (wide founts like Lucida Casual
+are the exception to this). \comname{textwidth} is larger than usual
+if you print on smaller paper, where the paper-based
+\comname{textwidth} is used. The options ranging out to
+\optname{widest} and \optname{narrowest} request a
+\comname{textwidth} varying in a smooth geometrical sequence, but
+remember that the smaller of the two widths (character-based and
+paper-based) is used, and there are several other restrictions on
+\comname{textwidth}, so this smooth progression may not be apparent
+as you step up or down through the options. The gory details are in
+the file \filename{rmpnorm}.
+
+You can control which of the two widths---character-based or
+paper-based---is used as the final \comname{textwidth}. See the next
+section (section~\ref{gen:widthsettingcontrol}) for details.
+
+The \optname{stdwidth} option forces \rmpage to calculate the
+\comname{textwidth} in the same way as the standard classes, except
+that the final value is still subject to the restrictions listed
+above. So it is possible to ask for \optname{stdwidth} and get a
+\comname{textwidth} that is not what you'd've got with the a standard
+class. \rmpage will warn you if this happens.
+
+\begin{description}\shorty\squish
+
+\awakeoption{widest} Paper-based textwidth is set to 1.3096 times the
+\optname{normalwidth} value; character-based textwidth is set to 1.9761
+times the \optname{normalwidth} value. Sets \comname{RM@widthoption} to 26
+
+\awakeoption{wider} Sets \comname{RM@widthoption} to 23
+
+\awakeoption{wide} Sets \comname{RM@widthoption} to 20
+
+\awakeoption{wideish} Sets \comname{RM@widthoption} to 17
+
+\awakeoption{normalwidth} Default. Paper-based \comname{textwidth} is
+set to |0.7138\paperwidth|; character-based \comname{textwidth} is set
+to 78.5 characters (10\units{pt}), 74.8 characters (11\units{pt}), or
+75.5 characters (12\units{pt})---this produces a character-based
+\comname{textwidth} very close to the standard width setting code.
+Sets \comname{RM@widthoption} to 14
+
+\awakeoption{narrowish} Sets \comname{RM@widthoption} to 11
+
+\awakeoption{narrow} Sets \comname{RM@widthoption} to 8
+
+\awakeoption{narrower} Sets \comname{RM@widthoption} to 5
+
+\awakeoption{narrowest} Paper-based textwidth is set to 0.7636 times the
+\optname{normalwidth} value; character-based textwidth is set to 0.5061
+times the \optname{normalwidth} value. Sets \comname{RM@widthoption} to 2
+
+%
+% The touchwidth options are in rmplocal.cfg now.
+%
+\awakeoption{stdwidth} Attempts to produce a page with the same
+\comname{textwidth} as the standard classes would give. Sets
+\comname{RM@widthoption} to 32
+
+\awakeoption{halfinchmargins} Attempts to produce a page with a total
+horizontal margin space of one inch. If you have asked for
+\optname{centre}d printing, \rmpage will try to produce half inch
+margins either side.
+Sets \comname{RM@widthoption} to 31
+
+\awakeoption{oneinchmargins} Attempts to produce a page with a total
+horizontal margin space of two inches. If you have asked for
+\optname{centre}d printing, \rmpage will try to produce one inch
+margins either side.
+Sets \comname{RM@widthoption} to 30
+
+\awakeoption{fullwidth} Produces the widest possible
+\comname{textwidth} given all other restrictions. Sets
+\comname{RM@widthoption} to 29
+%
+\end{description}
+
+\subsection{Width setting control}
+\label{gen:widthsettingcontrol}
+
+These control which dimensions \rmpage takes notice of when setting
+\comname{textwidth}---\rmpage can look at the size of the paper and
+the number of characters when it's setting \comname{textwidth}.
+Normally it looks at both, and picks the one that results in the
+smallest \comname{textwidth}. The code that does this is in the width
+setting \filename{pko} file; it works out what to do based on the
+value of the |\RM@setwidthby| command.
+
+If you ask for one of these widths: \optname{oneinchmargin},
+\optname{halfinchmargin}, and \optname{fullwidth}, you shouldn't also
+ask for \optname{characterwidthset}, because the width options ask
+for widths that are inherently based on the size of the paper.
+\rmpage will point out this mistake if you make it, and carry on as if
+you'd not said \optname{characterwidthset}.
+
+I'm not that keen on these option names, especially
+\optname{bothwidthset} which is formed in a regular sequence with the
+other two, and ends up both ugly and not very descriptive; if you can
+come up with something better, please let me know.
+
+%
+% 0 = set width by character and paper-based widths (default)
+% 1 = set width by character-based width only
+% 2 = set width by paper-based width only
+%
+% The bothwidth option is redundant, which is a good thing because I
+% really don't like the name
+
+\begin{description}\shorty\squish
+\awakeoption{bothwidthset} Default. Use both paper and character
+based \comname{textwidth} requests to set \comname{textwidth}.
+Defines|\RM@setwidthby| to be 0
+
+\awakeoption{characterwidthset} Use the character based \comname{textwidth}
+request only to set \comname{textwidth}. Defines |\RM@setwidthby| to be 1
+
+\awakeoption{paperwidthset} Use the paper based \comname{textwidth}
+request only to set \comname{textwidth}. Defines |\RM@setwidthby| to be 2
+\end{description}
+%
+
+
+\subsection{Margins}
+\label{optrmp:margins}
+
+The options in this section control the horizontal position of the
+text body. The \optname{twoside} and \optname{oneside} options are
+standard options that \rmpage understand; the rest of them are new in
+\rmpage.
+
+It's probably best to read about all of these options, not just some
+of them, because they all interact to some extent.
+
+
+\begin{description}\shorty\squish
+
+\awakeoption{twoside} Places the text body for printing on both sides
+of the paper, taking into account the requested offest and which
+margin you want to be the larger one (inside or out).
+
+Sets \verb|\RM@twosidetrue| and \verb|\@mparswitchtrue|; the latter
+step is performed by the standard classes. I'm not certain this is
+the right thing to do; it means you get the standard classes' effect
+if you pass this option to \rmpage only. But you might want to avoid
+the standard classes' effect\ldots{} But if you're that clever, you
+can reset the switch yourself.
+
+
+\awakeoption{oneside} Default. Places the text body for printing on
+both sides of the paper, taking into account the requested offest and
+which margin you want to be the larger one (inside or out). Sets
+\verb|\RM@twosidefalse|
+
+\awakeoption{centre} Forces the left and right margins to be the same
+size. Sets \verb|\RM@centretrue|.
+
+\awakeoption{notcentre} Default. Allows the left and right margins
+to be different sizes. Sets \verb|\RM@centrefalse|
+
+\end{description}
+
+
+The options in the list below control which margin is the larger one.
+Conventional book typesetting and \LaTeX\ makes the outside margin the
+larger one; \rmpage makes the inside margin the larger one. This is
+because most of what I produce is bound in loose-leaf ring-binders,
+where having a small inside margin often results in a holes in the
+text.
+
+You can change this default setting by changing the
+\optname{notstdmargins} option to \optname{stdmargins} in the default
+\comname{ExecuteOptions} statement in your local configuration file.
+You will find this statement just below the line in the configuration
+file that reads: \textsc{change this line to match your local
+preferences}.
+
+\begin{description}\shorty\squish
+
+\awakeoption{stdmargins} Default. Outside margin is the larger one. Sets
+\comname{RM@stdmarginstrue}
+
+\awakeoption{notstdmargins} Inside margin in the larger
+one. Sets \comname{RM@stdmarginsfalse}
+
+\end{description}
+
+
+You can control the relative proportions of the inside and outside
+margins with the \optname{offset} options.
+These offset options don't do anything if the centre option has been
+specified.
+
+The default offset is 60\% of the total horizontal margin space in the
+larger margin, 40\% in the smaller. This the the standard \LaTeXe\
+offset. \optname{leastoffset} gives you equal margins;
+\optname{touchlessoffset} and \optname{leastoffset} together makes the
+nominally larger margin into the smaller one, by a small amount.
+\rmpage will warn you if this happens. \optname{mostoffset} puts
+87\% of the total horizontal margin space into the larger margin; this
+is about as far over to one side as your printer is likely to be able
+to print.
+
+There are \optname{touchoffset} options in the standard configuration
+files---see section~\ref{optcfg:touchoptions} on page~\pageref{optcfg:touchoptions}
+
+Have a look at \filename{rmpnorm} for more details if you need them.
+
+
+\begin{description}\shorty\squish
+\awakeoption{leastoffset} 50\% larger margin. Sets \comname{RM@offsetoption} to 2
+\awakeoption{lessoffset} 53\% larger margin. Sets \comname{RM@offsetoption} to 5
+\awakeoption{lessishoffset} 56\% larger margin. Sets \comname{RM@offsetoption} to 8
+\awakeoption{normaloffset} Default. 60\% larger margin. Sets \comname{RM@offsetoption} to 11
+\awakeoption{moreishoffset} 68\% larger margin. Sets \comname{RM@offsetoption} to 14
+\awakeoption{moreoffset} 77\% larger margin. Sets \comname{RM@offsetoption} to 17
+\awakeoption{mostoffset} 87\% larger margin. Sets \comname{RM@offsetoption} to 20
+\end{description}
+
+The touchoffset options must be executed after the offset options.
+This is easy to arrange: just declare the options with the
+\optname{touch} options after the main options, and use
+\comname{ProcessOptions} rather than \comname{ProcessOptions*} (that
+is, these options must be processed in the order of declaration,
+rather than the order given in the calling commands).
+
+\subsection{Number of columns}
+
+Note that the standard classes set the \comname{@twocolumn} flag true
+or false, depending. \rmpage doesn't, and works quite happily without
+it.
+
+The config file has \optname{onecolumnwidth} to
+\optname{tencolumnwidth} options, which change \comname{textwidth} but
+don't change the number of columns that \LaTeX\ typesets text in. You
+can use the \packname{multicol} package to do that.
+
+\begin{description}\shorty\squish
+
+\awakeoption{onecolumn} Default. This standard option is recognised
+by \rmpage. This option makes the standard classes typeset one column
+to a page; \rmpage\ calculates a character-based \comname{textwidth}
+based on this. Defines \comname{RM@textcols} to be 1.
+
+\awakeoption{twocolumn} This standard option is recognised by \rmpage.
+This option makes the standard classes typeset two columns to a page;
+\rmpage\ calculates a character-based \comname{textwidth} based on
+this. Defines \comname{RM@textcols} to be 2.
+
+\end{description}
+
+\subsection{Paper orientation}
+
+These options really do force the appropriate orientation; the
+standard classes just swap \comname{textheight} and
+\comname{textwidth} when asked for \optname{landscape}. Remember that
+you'll most likely want to print your envelopes landscape, even if
+your printer driver thinks you mean portrait (Hewlett Packard's
+DeskWriter series 6.0 printer driver gets this wrong. Oops.) And
+2/3~A4 is usually used in landscape orientation, even though you'll
+probably think it's portrait---I know I did.
+
+\begin{description}\shorty\squish
+
+\awakeoption{portrait} Default. Forces \comname{textwidth} to be less
+than \comname{textheight}. Sets |\RM@portraittrue|
+
+\awakeoption{landscape} Forces \comname{textwidth} to be more than
+\comname{textheight}. Sets |\RM@portraitfalse|
+
+\end{description}
+
+\subsection{Headers and footers}
+\label{optrmp:hfonoff}
+
+Allows space for headers and footers, or not, as you wish. These
+options \emph{do not} affect the contents of headers and footers in
+any way: if you want to change the \LaTeX\ \comname{pagestyle}, you
+must do that separately.
+
+Turning headers and footers on and off changes \comname{textheight}:
+this is because of the way \rmpage calculates \comname{textheight}.
+
+\rmpage first calculates the sum of the blank space above and below
+all the text on the page; this is a constant fraction of
+\comname{paperheight} for any given length option. What is left over
+after space has been allowed for headers and footers is
+\comname{textheight}
+
+\begin{description}\shorty\squish
+\awakeoption{noheaders} Produce a layout for pages without headers.
+Sets |\RM@headersfalse|; this results in \comname{headheight} and
+\comname{headsep} being set to 0\units{pt}.
+
+\awakeoption{headers} Default. Produce a layout for pages with
+headers. Sets |\RM@headerstrue|; this results in \comname{headheight}
+being set to \comname{baselineskip}.
+
+\awakeoption{nofooters} Produce a layout for pages without footers.
+Sets |\RM@footersfalse|; this results in \comname{footskip} being set
+to 0\units{pt}
+
+\awakeoption{footers} Default. Produce a layout for pages with
+footers. Sets |\RM@footerstrue|.
+
+\end{description}
+
+\subsection{Positioning the text body vertically}
+\label{optrmp:altitude}
+
+These options affect the ratio between the gap below all the text and
+the gap above all the text. The \optname{touchaltitude}
+options change this ratio in increments of $1/24$.
+
+\begin{description}\shorty\squish
+
+\awakeoption{highest} Top:bottom space = 0:8. Sets
+|\RM@headfootbalance=0|
+
+\awakeoption{higher} Top:bottom space = 1:8. Sets
+|\RM@headfootbalance=3|
+
+\awakeoption{high} Top:bottom space = 2:8. Sets
+|\RM@headfootbalance=6|
+
+\awakeoption{highish} Top:bottom space = 3:8. Sets
+|\RM@headfootbalance=9|
+
+\awakeoption{normalaltitude} Default. Top:bottom space = 4:8. Sets
+|\RM@headfootbalance=12|
+
+\awakeoption{lowish} Top:bottom space = 5:8. Sets
+|\RM@headfootbalance=15|
+
+\awakeoption{low} Top:bottom space = 6:8. Sets
+|\RM@headfootbalance=18|
+
+\awakeoption{lower} Top:bottom space = 7:8. Sets
+|\RM@headfootbalance=21|
+
+\awakeoption{lowest} Top:bottom space = 8:8. Sets
+|\RM@headfootbalance=24|
+
+\end{description}
+
+\subsection{Changing the date format}
+
+
+\begin{description}\shorty\squish
+
+\awakeoption{usdate} Default. Sets |\RM@nicedatefalse|, which causes
+nothing to happen; the \comname{today} command is unmolested.
+
+\awakeoption{ukdate} Sets |\RM@nicedatetrue|, which causes the
+\comname{today} command to be re-defined to produce a date of the form
+`4th April 1984'. This is the setting I use as a default; I do this
+by putting the \optname{ukdate} option in the local settings
+\comname{ExecuteOptions} statement in my local configuration file.
+
+\end{description}
+%
+% The option to load founts and set textwidth by fount size are now
+% in rmplocal.cfg
+%
+% Printer types were:
+% 0=fullbleed, 1=general, 2=dw520, 3=dw600, 4=pessimistic
+%
+% all printer options are now in rmplocal.cfg
+%
+% Printer types are:
+% 0=fullbleed, 1=general, 2=pessimistic, 3=optimistic
+% 10=dw300 11=dw500 12=dw600 (HP deskwriter inkjet series)
+% 20=lj2 21=lj3 22=lj4 (HP laserjet laser printer series)
+% 30=canonbjx bubblejet something (Canon bubblejet inkjet series)
+% 40+ whatever else comes up
+%
+% The figures for all these printers are guesses, except for the DW500
+% and DW600: any data on printing margins for the printers above or
+% other commonly-used printers would be gratefully received. I need to
+% know about printing limits at the top, bottom, left, and right for
+% portrait and landscape modes, and whether the data is what the book
+% says or what you measured (preferrably both, but anything'll help).
+% If anyone really uses LaTeX with an A3 printer, do tell: it's
+% something I've been wondering about.
+%
+%
+\subsection{Dealing with the \packname{beton} package}
+\label{optrmp:beton}
+
+The code to let \rmpage work with \packname{beton} felt rather
+complicated to write. The thing about the \packname{beton} package
+is that it changes \comname{baselineskip} to something non-standard.
+\rmpage needs to know what \comname{baselineskip} is so that it can
+set \comname{textheight}, but \packname{beton}'s changes aren't made
+until the \comname{AtBeginDocument} hook is executed by \LaTeX, which
+is after \rmpage has been loaded. I had to steal code from
+\packname{beton}~v1.3 to deal with this, which might cause problems if you
+try to use \rmpage with other versions of \packname{beton}.
+
+
+The result is that if you are using the \packname{beton} package
+without passing it the \optname{standard-baselineskips} option, you should
+specify either the \optname{beton} or the \optname{nobeton} option to
+\rmpage: the first option uses \packname{beton}'s modified
+\comname{baselineskip} to set \comname{textheight}; the second option
+uses the standard \comname{baselineskip}, and can be ommitted if you
+have specified the \optname{standard-baselineskips} option to
+\packname{beton}.
+
+
+The problem with the \optname{beton} option is that if you specify it,
+\rmpage uses code stolen from the guts of \packname{beton}~version~1.3
+to set the appropriate \comname{baselineskip}. There is no guarantee
+that this code will work with other versions of \packname{beton}.
+
+\begin{description}\shorty\squish
+\awakeoption{beton} calculate a \comname{textheight}
+based on the \packname{beton} package's \comname{baselineskip}
+
+\awakeoption{nobeton} calculate a \comname{textheight}
+based on the standard \comname{baselineskip}
+
+Both these options set the |\RM@ifbeton| command to a number. It's
+played about with before and after here. The final value of the
+|\RM@ifbeton| command is given these meanings within \rmpage:
+\end{description}
+
+\noindent
+\begin{tabularx}{\textwidth}{lX}
+
+0&\packname{beton} package loaded and the \optname{beton} option
+specified\\
+
+1&The \packname{beton} package has been loaded with neither the
+\optname{beton} nor the \optname{nobeton} option specified\\
+
+2&\packname{beton} package loaded and the \optname{beton} option not specified\\
+
+3& The \packname{beton} package not loaded with neither the
+\optname{beton} nor the \optname{nobeton} option specified\\
+
+4& The \packname{beton} package not loaded and the \optname{nobeton}
+option specified.
+
+\end{tabularx}
+
+
+
+
+\section{From the configuration file}
+
+The following options are all from the configuration file. There's
+nothing magical about this: they could all just as easily be in
+\filename{rmpage.sty} at the point where the configuration file is
+loaded. But the idea is that you can change the configuration file,
+but not \rmpage, and \rmpage works faster with fewer option. So
+comment out any of these options that you don't use very often (please
+don't delete them: you never know when you might need them).
+
+The distributed configuration file \filename{rmpgen.cfg} has no
+options commented out; this means it's quite slow. The distributed
+configuration file \filename{rmplocal.gfc} does have some options
+commented out---\rmpage works faster using this file. \rmpage will
+not use \filename{rmplocal.gfc} as a configuration file unless you
+tell it to. The most straightforward way to get \rmpage to use this faster
+configuration file is to rename it \filename{rmplocal.cfg}.
+
+The idea is that you don't change \filename{rmpgen.cfg} at all: it's
+intended to be a standard configuration file that any document can use
+to produce identical output on any system by saying
+|\newcommand{\RMconfigfile}{rmpgen.cfg}| in the preamble before the
+|\usepackage{rmpage}| command.
+
+If you are short of disc space, you could delete
+\filename{rmpgen.cfg}, but you might find you have to re-install it
+one day to process a file that requires it.
+
+\filename{rmplocal.cfg} is intended to be changed by anyone. Please
+read the comments in the file first, add a comment at the start of the
+file to identify it as yours, and a note to the same effect in the
+optional argument of the \comname{ProvidesFile}: life can get very
+confused otherwise. Don't add or delete anything except comment
+characters between the \comname{ProvidesFile} command and the line
+\texttt{LOCAL CODE BELOW HERE PLEASE}. Make sensible changes below
+the line \texttt{LOCAL CODE BELOW HERE PLEASE}; read the comments in
+the configuration file and \filename{rmpage.dtx}, and use the commands
+I use for doing things. If you do this, your code should work
+perfectly with future versions of \rmpage.
+
+In the list below, options that look like this: {\asleepfount
+obscurefunction}, are commented out in \filename{rmplocal.gfc}, whilst
+options that look like this: {\awakefount usefulfunction}, are not
+commented out.
+
+
+\subsection{Other paper sizes}
+\label{optcfg:papersizes}
+
+There are some notes on paper sizes in section~\ref{optrmp:paper-sizes}
+on page~\pageref{optrmp:paper-sizes}. I suspect that the larger sizes
+and untrimmed sizes will be useless, but it seemed churlish to leave
+them out.
+
+
+\begin{description}\shorty\squish
+\asleepoption{undefinedpaper} Sets |\RM@papertype| to 0 -- does
+nothing to \comname{paperheight} or \comname{paperwidth}. This paper
+type has no purpose in life, yet.
+
+\asleepoption{letter4paper} Sets |\RM@papertype| to 9; this paper size
+is an unholy bodge with the width of A4 and the height of US
+letter. Documents typeset with this paper size will fit on A4 and US
+letter paper, and look terrible on both. Size is 210mm by 8.5in.
+
+\asleepoption{a0paper} Sets |\RM@papertype| to 10
+-- 1189mm by 841mm
+
+\asleepoption{a1paper} Sets |\RM@papertype| to 11
+-- 841mm by 594mm
+
+\asleepoption{a2paper} Sets |\RM@papertype| to 12
+-- 594mm by 420mm
+
+\awakeoption{a3paper} Sets |\RM@papertype| to 13
+-- 420mm by 297mm
+
+
+\awakeoption{a6paper} Sets |\RM@papertype| to 16
+-- 148mm by 105mm
+
+\asleepoption{a7paper} Sets |\RM@papertype| to 17
+-- 105mm by 74mm
+
+\asleepoption{a8paper} Sets |\RM@papertype| to 18
+-- 74mm by 52mm
+
+\asleepoption{a9paper} Sets |\RM@papertype| to 19
+-- 52mm by 37mm
+
+\asleepoption{a10paper} Sets |\RM@papertype| to 20
+-- 37mm by 26mm
+
+\asleepoption{b0paper} Sets |\RM@papertype| to 30
+-- 1414mm by 1000mm
+
+\asleepoption{b1paper} Sets |\RM@papertype| to 31
+-- 1000mm by 707mm
+
+\asleepoption{b2paper} Sets |\RM@papertype| to 32
+-- 707mm by 500mm
+
+\asleepoption{b3paper} Sets |\RM@papertype| to 33
+-- 500mm by 353mm
+
+\awakeoption{b4paper} Sets |\RM@papertype| to 34
+-- 353mm by 250mm
+
+
+\awakeoption{b6paper} Sets |\RM@papertype| to 36
+-- 176mm by 125mm
+
+\awakeoption{b7paper} Sets |\RM@papertype| to 37
+-- 125mm by 88mm
+
+\asleepoption{b8paper} Sets |\RM@papertype| to 38
+-- 88mm by 62mm
+
+\asleepoption{b9paper} Sets |\RM@papertype| to 39
+-- 62mm by 44mm
+
+\asleepoption{b10paper} Sets |\RM@papertype| to 40
+-- 44mm by 31mm
+
+\asleepoption{c0paper} Sets |\RM@papertype| to 50
+-- 1297mm by 917mm
+
+\asleepoption{c1paper} Sets |\RM@papertype| to 51
+-- 917mm by 648mm
+
+\asleepoption{c2paper} Sets |\RM@papertype| to 52
+-- 648mm by 458mm
+
+\asleepoption{c3paper} Sets |\RM@papertype| to 53
+-- 458mm by 324mm
+
+\asleepoption{c4paper} Sets |\RM@papertype| to 54
+-- 324mm by 229mm
+
+\awakeoption{c5paper} Sets |\RM@papertype| to 55
+-- 229mm by 162mm
+
+\asleepoption{c7paper} Sets |\RM@papertype| to 57
+-- 114mm by 81mm
+
+\asleepoption{c7/6paper} Sets |\RM@papertype| to 59
+-- 162mm by 81mm
+
+\asleepoption{bspopseedenvelopepaper} Sets |\RM@papertype| to 60
+-- 152mm by 102mm. BS4264 UK post office preferred envelope: seed packets,
+wage slips, general packaging. The name is one I invented.
+
+\asleepoption{bspopnonisoenvelopepaper} Sets |\RM@papertype| to 61 --
+229mm by 102mm. BS4264 UK post office preferred envelope: gen
+commercial, non iso sizes. The name is one I invented.
+
+\asleepoption{bsbrochureenvelopepaper} Sets |\RM@papertype| to 62 --
+254mm by 178mm. BS4264 envelope; bulky A5, catalogues, brochures.
+ The name is one I invented.
+
+\asleepoption{bslegalenvelopepaper} Sets |\RM@papertype| to 63 --
+270mm by 216mm.\newline%Horrid bodge
+ BS4264 envelope; legal docs, catalogues, photos. The
+name is one I invented.
+
+\asleepoption{bslargelegalenvelopepaper} Sets |\RM@papertype| to 64 --
+305mm by 127mm. BS4264 envelope; insurance policies, legal docs. The
+name is one I invented.
+
+\asleepoption{bscalendarenvelopepaper} Sets |\RM@papertype| to 65 --
+381mm by 254mm. BS4264 envelope; bulky docs, calendars. The name is
+one I invented.
+
+\awakeoption{foolscapfoliopaper} Sets |\RM@papertype| to 70
+-- 13.5in by 8.5in
+
+\asleepoption{foolscappaper} Sets |\RM@papertype| to 70
+-- 13.5in by 8.5in
+
+\asleepoption{foolscapquartopaper} Sets |\RM@papertype| to 71
+-- 8.5in by 6.75in
+
+\asleepoption{foolscapoctavopaper} Sets |\RM@papertype| to 72
+-- 6.75in by 4.25in
+
+\asleepoption{crownfoliopaper} Sets |\RM@papertype| to 73
+-- 15in by 10in
+
+\asleepoption{crownquartopaper} Sets |\RM@papertype| to 74
+-- 10in by 7.5in
+
+\asleepoption{crownoctavopaper} Sets |\RM@papertype| to 75
+-- 7.5in by 5in
+
+\asleepoption{royalfoliopaper} Sets |\RM@papertype| to 76
+-- 20in by 12.5in
+
+\asleepoption{royalquartopaper} Sets |\RM@papertype| to 77
+-- 12.5in by 10in
+
+\asleepoption{royaloctavopaper} Sets |\RM@papertype| to 78
+-- 10in by 6.25in
+
+\asleepoption{imperialfoliopaper} Sets |\RM@papertype| to 79
+-- 22in by 15.5in
+
+\asleepoption{imperialquartopaper} Sets |\RM@papertype| to 80
+-- 15in by 11in
+
+\asleepoption{imperialoctavopaper} Sets |\RM@papertype| to 81
+-- 11in by 7.5in
+
+\asleepoption{largecrownoctavopaper} Sets |\RM@papertype| to 82
+-- 8in by 5.25in
+
+\asleepoption{demyoquartopaper} Sets |\RM@papertype| to 83
+-- 11.25in by 8.75in
+
+\asleepoption{demyoctavopaper} Sets |\RM@papertype| to 84
+-- 8.75in by 5.625in
+
+\asleepoption{mediumquartopaper} Sets |\RM@papertype| to 85
+-- 12in by 9.5in
+
+\asleepoption{mediumoctavopaper} Sets |\RM@papertype| to 86
+-- 9.5in by 6in
+
+\asleepoption{ra0paper} Sets |\RM@papertype| to 90
+-- 1270mm by 960mm
+
+\asleepoption{ra1paper} Sets |\RM@papertype| to 91
+-- 1270mm by 960mm
+
+\asleepoption{ra2paper} Sets |\RM@papertype| to 92
+-- 1270mm by 960mm
+
+\asleepoption{sra0paper} Sets |\RM@papertype| to 93
+-- 1280mm by 900mm
+
+\asleepoption{sra1paper} Sets |\RM@papertype| to 94
+-- 900mm by 840mm
+
+\asleepoption{sra2paper} Sets |\RM@papertype| to 95
+-- 640mm by 450mm
+
+\asleepoption{metricdoublecrownpaper} Sets |\RM@papertype| to 96
+-- 770mm by 505mm
+
+\asleepoption{metricquadcrownpaper} Sets |\RM@papertype| to 97
+-- 1010mm by 770mm
+
+\asleepoption{metriclargequadcrownpaper} Sets |\RM@papertype| to 98
+-- 1060mm by 820mm
+
+\asleepoption{metricquaddemypaper} Sets |\RM@papertype| to 99
+-- 1030mm by 890mm
+
+\asleepoption{metricsmallquadroyalpaper} Sets |\RM@papertype| to 100
+--\newline%Horrid bodge
+1270mm by 960mm
+
+\end{description}
+
+The long paper sizes are described in detail in
+section~\ref{optrmp:paper-sizes} on page~\pageref{optrmp:paper-sizes}.
+
+\begin{description}\shorty\squish
+
+\asleepoption{notlongpaper} Sets |\RM@longpapertypelong| to 0; not
+long---the default.
+
+\asleepoption{7/8longpaper} Sets |\RM@longpapertypelong| to 1; 7/8
+long. The selected paper size has its longest dimension multiplied by
+7/8.
+
+\awakeoption{3/4longpaper}Sets |\RM@longpapertypelong| to 2; 3/4
+long. The selected paper size has its longest dimension multiplied by
+3/4.
+
+\awakeoption{2/3longpaper}Sets |\RM@longpapertypelong| to 3; 2/3
+long. The selected paper size has its longest dimension multiplied by
+2/3.
+
+\asleepoption{5/8longpaper}Sets |\RM@longpapertypelong| to 4; 5/8
+long. The selected paper size has its longest dimension multiplied by
+2/3.
+
+\asleepoption{1/2longpaper}Sets |\RM@longpapertypelong| to 5; 1/2 long.
+The selected paper size has its longest dimension multiplied by 1/2.
+This is slightly different for asking for the next size down in an ISO
+series; these long sizes are not rounded to the nearest millimetre, as
+are standard ISO paper sizes, and code which sets things up for
+particular printer/paper combinations does not recognize 1/2 long A3
+as A4 (for example).
+
+\asleepoption{3/8longpaper}Sets |\RM@longpapertypelong| to 6; 3/8
+long. The selected paper size has its longest dimension multiplied by
+3/8.
+
+\awakeoption{1/3longpaper}Sets |\RM@longpapertypelong| to 7; 1/3
+long. The selected paper size has its longest dimension multiplied by
+1/3.
+
+\awakeoption{1/4longpaper}Sets |\RM@longpapertypelong| to 8; 1/4
+long. The selected paper size has its longest dimension multiplied by
+1/4.
+
+\asleepoption{1/8longpaper}Sets |\RM@longpapertypelong| to 9; 1/8
+long. The selected paper size has its longest dimension multiplied by
+1/8.
+
+\end{description}
+%%
+%%
+\subsection{Marginal paragraph options}
+\label{optcfg:mpars}
+
+The width of a marginal paragraph is set to the space left in the
+appropriate margin, taking into account all the limits. \rmpage
+thinks the appropriate margin is this: in the case of multi-column
+printing, the smallest margin; in the case of one sided printing,
+normal marginal paragraph placement, in the outside margin; in the
+case of one sided printing, reverse marginal paragraph placement, in
+the inside margin; in the case of two sided printing, normal marginal
+paragraph placement, in the outside margin; and in the case of two
+sided printing, reverse marginal pragraph placement, in the inside
+margin.
+
+The size is calculated on this basis: the standard \LaTeX\ length
+\comname{margin\-par\-sep} gives the space between the text body and the
+marginal paragraph. The new length \comname{RM@mparclearance} gives
+the minimum space between the outside edge of the marginal paragraph
+and the edge of the paper (subject to the additional restrictions of
+\comname{RM@minrightclearance} and \comname{RM@minleftclearance} (but
+not \comname{RM@mininsidemargin} or \comname{RM@minoutsidemargin};
+these apply to the text body only). Within these limits,
+\comname{marginparwidth} cannot be set to greater than the length
+\comname{RM@maxmparwidth}.
+
+This way of setting marginal paragraphs is derived from the standard
+\LaTeXe\ method, which uses 2\units{in} as the largest allowed size,
+and 0.4\units{in} as the minimum gap to the edge of the paper.
+\rmpage's equivalent parameters
+
+You can scale the size of \comname{marginparsep},
+\comname{RM@mparclearance}, and \comname{RM@max\-mpar\-width} using the
+\optname{mparsep}, \optname{mparclearance}, and
+\optname{maxmparwidth} option sets. Look at section~\ref{gen:mpars} on
+page~\pageref{gen:mpars} for more on marginal paragraphs.
+
+If you think that the base value of any of these lengths is too small,
+you can do something about it. With \comname{marginparsep}, you could
+use the \comname{setlength} command to set it to a different value
+before loading \rmpage. For example,
+\begin{verbatim}
+\setlength{\marginparsep}{2\marginparsep}
+\usepackage{rmpage}
+\end{verbatim}
+
+Because the other two parameters are given their initial values in
+\rmpage, this technique won't work. The initial values of
+\comname{RM@mparclearance} and \comname{RM@max\-mpar\-width} are
+calculated as a certain fraction of \comname{paperwidth}; the initial
+value of the appropriate parameter is doubled if you specify the
+\optname{largebasemparclear} or \optname{largebasemaxmparwidth}
+options. You can set either of these parameters in the configuration
+file---the values -666\units{pt} and -667\units{pt} are reserved by
+\rmpage as flag values; any positive length that's not too long is
+okay. Read the source and consider setting these parameters on a
+class-by-class basis if you do need to change them.
+
+
+%%
+%% marginparsep is scaled by option
+The \comname{mparsep} options scale the \comname{marginparsep} length
+using \comname{RM@scale\-by\-option}. See section~\ref{htw:headfootmpar}
+on page~\pageref{htw:headfootmpar} for the details.
+
+\begin{description}\shorty\squish
+\awakeoption{leastmparsep} Sets \comname{RM@mparsepoption} to 3
+\awakeoption{lessmparsep} Sets \comname{RM@mparsepoption} to 6
+\awakeoption{lessishmparsep} Sets \comname{RM@mparsepoption} to 9
+\awakeoption{normalmparsep} Default. Sets \comname{RM@mparsepoption} to 12
+\awakeoption{moreishmparsep} Sets \comname{RM@mparsepoption} to 15
+\awakeoption{moremparsep} Sets \comname{RM@mparsepoption} to 18
+\awakeoption{mostmparsep} Sets \comname{RM@mparsepoption} to 21
+\end{description}
+%%
+
+The \optname{...basemparclear} options need to be executed after
+\comname{paperwidth} has been set. Easily done with
+\comname{ProcessOptions} rather than \comname{ProcessOptions*}, and
+the papersize setting options declared above rather than below. The
+\comname{small\-base\-mpar\-clear} value is set after option processing if
+no other value has been set. If \comname{RM@mpar\-clear\-ance} is
+-666\unit{pt}, the normalbasemparclear value is set; if it's
+-667\unit{pt}, the largebaselinemparclear value is set. The larger
+value is double the smaller value. This setting is done just
+after the \comname{RM@PrinterPaperSettings} hook is executed, which is
+well after \comname{paperwidth} is set. This value is scaled by
+option (using the \comname{RM@mparclearoption} passed to the
+\comname{RM@scalebyoption} command) just before it's used, so one can
+use the \comname{RM@BeforeWidthSetting} hook to change things.
+
+\begin{description}\shorty\squish
+\asleepoption{normalbasemparclear} Default. Sets \comname{RM@mparclearance}
+to -666pt.
+\asleepoption{largebasemparclear} Sets \comname{RM@mparclearance} to -667pt
+%%
+\asleepoption{normalbasemaxmparwidth} Default. Sets \comname{RM@maxmparwidth} to -666pt
+\asleepoption{largebasemaxmparwidth} Sets \comname{RM@maxmparwidth} to -667pt
+\end{description}
+
+The gap between the edge of the paper and the edge of a marginal
+paragraph is 0.4\units{in} (10.16\units{mm}) with \LaTeX's standard
+classes. \rmpage changes this by introducing a new parameter,
+\comname{RM@mparclearance}, which is calculated as a fraction of
+\comname{paperwidth}. Normal \comname{RM@mparclearance} with A4
+portrait paper is 9.88\units{mm}; 0.4\unit{in} with US letter paper).
+
+Touch options for \comname{RM@mparclearance} and
+\comname{RM@maxmparwidth} have been added now.
+
+\begin{description}\shorty\squish
+\awakeoption{leastmparclearance} Sets \comname{RM@mparclearoption} to 3
+\awakeoption{lessmparclearance} Sets \comname{RM@mparclearoption} to 6
+\awakeoption{lessishmparclearance} Sets \comname{RM@mparclearoption} to 9
+\awakeoption{normalmparclearance} Default. Sets \comname{RM@mparclearoption} to 12
+\awakeoption{moreishmparclearance} Sets \comname{RM@mparclearoption} to 15
+\awakeoption{moremparclearance} Sets \comname{RM@mparclearoption} to 18
+\awakeoption{mostmparclearance} Sets \comname{RM@mparclearoption} to 21
+\end{description}
+
+\comname{RM@maxmparwidth} is set as a fraction of
+\comname{paperwidth}, such that with portrait US letter paper, you get
+2\units{in} as standard, just like the standard classes. It's scaled
+by option (see section~\ref{htw:headfootmpar} on
+page~\pageref{htw:headfootmpar} for the details). If you want to
+change the default base value of \comname{RM@maxmparwidth}, the
+\comname{RM@BeforeWidthSetting} hook is an ideal place to do it.
+
+\begin{description}\shorty\squish
+\awakeoption{leastmaxmparwidth} Sets \comname{RM@maxmparwidthoption} to 3
+\awakeoption{lessmaxmparwidth} Sets \comname{RM@maxmparwidthoption} to 6
+\awakeoption{lessishmaxmparwidth} Sets \comname{RM@maxmparwidthoption} to 9
+\awakeoption{normalmaxmparwidth} Default. Sets \comname{RM@maxmparwidthoption} to 12
+\awakeoption{moreishmaxmparwidth} Sets \comname{RM@maxmparwidthoption} to 15
+\awakeoption{moremaxmparwidth} Sets \comname{RM@maxmparwidthoption} to 18
+\awakeoption{mostmaxmparwidth} Sets \comname{RM@maxmparwidthoption} to 21
+\end{description}
+%%
+%%
+\subsection{Touch options}
+\label{optcfg:touchoptions}
+
+All the \optname{touch} options add or subtract one from a counter
+that is used to control the size of a page layout parameter. The
+effect of this is to give the layout parameter a size in between the
+`main' sizes. That is, if you ask for \optname{wide} and
+\optname{touchwider}, \comname{textwidth} is set to a value 1/3 of
+the way (in a geometrical sequence) from \optname{wide} to
+\optname{wider}. This results in even step sizes: \optname{wide},
+\optname{touchwider}, and \optname{t@uchwider} give a width the same
+as \optname{wider} and \optname{touchnarrower}.
+
+The \optname{touch} options are intended to be used in documents; the
+\optname{t@uch} options are intended to be used in class files. The
+reason is this: a class designer can develop a suitable layout by
+passing options to \rmpage. When this is done, the options passed to
+\rmpage can be passed using the \comname{PassOptionsToPackage}
+command in a class file. Any \optname{touch} options should be
+turned into \optname{t@uch} options, so that the controlled parameter
+can be incremented or decremented by a \optname{touch} option in a
+document. Whether this is a good thing is unclear, but it's
+certainly deliberate.
+
+Note that all the \optname{touch} options need to be executed after
+their corresponding `straight' options. To ensure this, none of the
+\optname{touch} can be allowed in an \comname{ExecuteOptions}
+statement. The \comname{RM@notinexecuteoptions} is used in each of
+these option declarations: it produces an error message if used before
+the \comname{RM@donewithoptions} flag is set true, which is
+immediately before the \comname{ProcessOptions} statement.
+
+You can find out more about the affected layout parameters by looking
+at the documentation for the main options corresponding to the
+\optname{touch} options listed here.
+
+\begin{description}\shorty\squish
+\asleepoption{t@uchlonger} Adds 1 to \comname{RM@lengthoption}
+\asleepoption{t@uchshorter} Adds -1 to \comname{RM@lengthoption}
+\awakeoption{touchlonger} Adds 1 to \comname{RM@lengthoption}
+\awakeoption{touchshorter} Adds -1 to \comname{RM@lengthoption}.
+See section~\ref{optrmp:textheight}.
+%%
+\awakeoption{touchmorecolsep} Adds 1 to \comname{RM@columnsepoption}
+\awakeoption{touchlesscolsep} Adds -1 to \comname{RM@columnsepoption}
+\asleepoption{t@uchmorecolsep} Adds 1 to \comname{RM@columnsepoption}
+\asleepoption{t@uchlesscolsep} Adds -1 to \comname{RM@columnsepoption}.
+See section~\ref{optrmp:columnsep}.
+%%
+\awakeoption{touchmoremparsep} Adds 1 to \comname{RM@mparsepoption}
+\awakeoption{touchlessmparsep} Adds -1 to \comname{RM@mparsepoption}
+\asleepoption{t@uchmoremparsep} Adds 1 to \comname{RM@mparsepoption}
+\asleepoption{t@uchlessmparsep} Adds -1 to \comname{RM@mparsepoption}.
+See section~\ref{optcfg:mpars}.
+%%
+\awakeoption{touchmorefootskip} Adds 1 to \comname{RM@footskipoption}
+\awakeoption{touchlessfootskip} Adds -1 to \comname{RM@footskipoption}
+\asleepoption{t@uchmorefootskip} Adds 1 to \comname{RM@footskipoption}
+\asleepoption{t@uchlessfootskip} Adds -1 to \comname{RM@footskipoption}.
+See section~\ref{optrmp:hfonoff}.
+%%
+\awakeoption{touchmoreheadsep} Adds 1 to \comname{RM@headsepoption}
+\awakeoption{touchlessheadsep} Adds -1 to \comname{RM@headsepoption}
+\asleepoption{t@uchmoreheadsep} Adds 1 to \comname{RM@headsepoption}
+\asleepoption{t@uchlessheadsep} Adds -1 to \comname{RM@headsepoption}.
+See section~\ref{optrmp:hfonoff}.
+%%
+\awakeoption{t@uchwider} Adds 1 to \comname{RM@widthoption}
+\asleepoption{t@uchnarrower} Adds -1 to \comname{RM@widthoption}
+\awakeoption{touchwider} Adds 1 to \comname{RM@widthoption}
+\awakeoption{touchnarrower} Adds -1 to \comname{RM@widthoption}.
+See section~\ref{optrmp:textwidth}.
+%%
+\asleepoption{t@uchmoreoffset} Adds 1 to \comname{RM@offsetoption}
+\asleepoption{t@uchlessoffset} Adds -1 to \comname{RM@offsetoption}
+\awakeoption{touchmoreoffset} Adds 1 to \comname{RM@offsetoption}
+\awakeoption{touchlessoffset} Adds -1 to \comname{RM@offsetoption}.
+See section~\ref{optrmp:margins}.
+%%
+\asleepoption{t@uchhigher} Adds -1 to \comname{RM@headfootbalance}
+\asleepoption{t@uchlower} Adds 1 to \comname{RM@headfootbalance}
+\awakeoption{touchhigher} Adds -1 to \comname{RM@headfootbalance}
+\awakeoption{touchlower} Adds 1 to \comname{RM@headfootbalance}.
+See section~\ref{optrmp:altitude}.
+%%
+\asleepoption{t@uchlessmparclearance} Adds -1 to \comname{RM@mparclearoption}
+\asleepoption{t@uchmoremparclearance} Adds 1 to \comname{RM@mparclearoption}
+\asleepoption{touchlessmparclearance} Adds -1 to \comname{RM@mparclearoption}
+\asleepoption{touchmoremparclearance} Adds 1 to \comname{RM@mparclearoption}.
+\newline% Horrid bodge
+See section~\ref{optcfg:mpars}.
+%%
+\asleepoption{t@uchlessmaxmparwidth} Adds -1 to \comname{RM@maxmparwidthoption}
+\asleepoption{t@uchmoremaxmparwidth} Adds 1 to \comname{RM@maxmparwidthoption}
+\asleepoption{touchlessmaxmparwidth} Adds -1 to \comname{RM@maxmparwidthoption}
+\asleepoption{touchmoremaxmparwidth} Adds 1 to \comname{RM@maxmparwidthoption}.
+\newline% Horrid bodge
+See section~\ref{optcfg:mpars}.
+%%
+\end{description}
+
+\subsection{More length options}
+\label{optcfg:odd-lengths}
+
+These options need to be executed after the \optname{touchlength}
+options; otherwise, they'd be in \filename{rmpage.sty}.
+
+
+Most of the \comname{textheight} setting options are in \rmpage
+proper; see \ref{optrmp:textheight} on page~\pageref{optrmp:textheight}.
+
+\begin{description}\shorty\squish
+\awakeoption{fulllength} Sets |\RM@lengthoption=30|. Makes
+\comname{textheight} as long as possible, taking into account the
+various restrictions and the need to keep \comname{textheight} to an
+integer number times \comname{baselineskip} plus \comname{topskip}.
+
+\awakeoption{stdlength} Sets |\RM@lengthoption=0|. Makes
+\comname{textheight} the size it would be if you were using the
+standard \LaTeX\ classes. I'm not sure I've checked everything that
+needs to be checked to ensure that this option always does what you'd
+expect, but I think I have. Note that \rmpage still takes notice of
+footers and headers when you use this option, so you can get the
+standard \comname{textheight} with different vertical positioning of
+the text body.
+
+\end{description}
+
+\subsection{Number of columns}
+
+If you are typesetting text in more than one column, \rmpage needs to
+know so that it can set \comname{textwidth} appropriately.
+
+The standard \LaTeX\ options \optname{onecolumn} and \optname{twocolumn}
+are recognized by \rmpage.
+
+The \optname{...columnwidth} options tell \rmpage that you will be
+typesetting your text in that number of columns, but the only effect
+of the options is to change the \comname{textwidth} calculation. If
+you want to change the number of columns that your text is set in, you
+can use a package like \packname{multicol}.
+
+\begin{ikkystuff}
+These options affect only the character-based \comname{textwidth}
+calculation---for any given width option (\optname{normalwidth},
+\optname{narrower}, or whatever) one text column is allowed to be a
+certain number of characters wide. Use the \optname{...columnwidth}
+options to tell \rmpage how many columns wide your text is, so it can
+calculate \comname{textwidth} appropriately.
+
+\rmpage makes the character-based \comname{textwidth} guess equal to a
+certain number of characters times the number of columns, plus
+\comname{columnsep} times one less than the number of columns.
+\end{ikkystuff}
+
+If your text is something like a single large table (for example, a
+timetable), it might be more appropriate to use the
+\optname{paperwidthset} option to set \comname{textwidth} using the
+paper-based \comname{textwidth} only.
+
+\begin{description}\shorty\squish
+
+\awakeoption{onecolumnwidth} Default.
+ Defines \comname{RM@textcols} to 1
+
+\awakeoption{twocolumnwidth} Defines \comname{RM@textcols} to 2
+
+\awakeoption{threecolumnwidth} Defines \comname{RM@textcols} to 3
+
+\asleepoption{fourcolumnwidth} Defines \comname{RM@textcols} to 4
+
+\asleepoption{fivecolumnwidth} Defines \comname{RM@textcols} to 5
+
+\asleepoption{sixcolumnwidth} Defines \comname{RM@textcols} to 6
+
+\asleepoption{sevencolumnwidth} Defines \comname{RM@textcols} to 7
+
+\asleepoption{eightcolumnwidth} Defines \comname{RM@textcols} to 8
+
+\asleepoption{ninecolumnwidth} Defines \comname{RM@textcols} to 9
+
+\asleepoption{tencolumnwidth} \packname{multicol}'s limit.
+Defines \comname{RM@textcols} to 10
+
+\end{description}
+%%
+%%
+\subsection{Loading founts}
+
+All the options below change how \comname{textwidth} is set, and the
+options with \optname{load} in their name also call one of the
+standard \packname{PSNFSS} packages to load the fount (aside from
+Lucida Casual and Concrete, which aren't \packname{PSFNSS} founts,
+and Courier, which is handled anomalously).
+
+\begin{ikkystuff}
+The only Lucida typeface I have is Lucida Casual, so that's the only
+Lucida typeface that \rmpage deals with explicitly. If you do use
+others, you can have an appropriate \comname{textwidth} set using the
+\optname{thisfountwidth} option.
+
+Given that the \packname{PSFNSS} distribution has support for all the
+Lucida founts, I could be persuaded to include explicit support for
+them in \rmpage if anyone's interested.
+\end{ikkystuff}
+
+Remember that \comname{textwidth} is usually set to be a certain
+number of character wide. Well, not all founts have the same number
+of characters per inch. If you say \optname{timeswidth} to \rmpage,
+it will calculate a \comname{textwidth} based on the measured average
+width of one character in Times of the specified size.
+
+This means that while the standard \LaTeX\ classes would give you a
+\comname{text\-width} that is far too wide for the Times fount (which is
+generally narrower than Computer Modern Roman), \rmpage will give you
+a \comname{textwidth} that is pretty much the same number of
+characters across, which means you retain good legibility (as well as
+similar line and page breaks).
+
+If you say \optname{loadtimes}, \rmpage changes its \comname{textwidth}
+calculation, loads the \packname{PSNFSS} package that loads the Times
+fount family, and (very important, this is) changes the typesetting
+parameters to similar values to the ones suggested by Karl Berry, the
+chap who wrote the \packname{fontinst} program that generated the
+virtual founts used to typeset the \packname{PSNFSS} founts.
+
+If you specify a looseness option yourself---see
+section~\ref{optrmp:tightness} on page~\pageref{optrmp:tightness}---it will
+over-ride the standard looseness set by a \optname{loadfount} option.
+The \optname{load\-concrete} option requests standard tight typesetting,
+and is anyway not recommended: if you want to use the concrete founts,
+try the \packname{beton} package, which does a very good job of
+setting up \LaTeX\ to use these founts. \rmpage can work happily with
+\packname{beton}: see section~\ref{optrmp:beton} on
+page~\pageref{optrmp:beton}.
+
+You can tell \rmpage to set the \comname{textwidth} based on the width
+of a fount it doesn't know about with the \optname{thisfountwidth}
+option. If you use this option, \rmpage will calculate a
+\comname{textwidth} based on the size of the fount that is current
+when \rmpage is loaded. So if you want a \comname{textwidth} based on, say,
+Grunge Update (family name fgr on my computer), you could say:
+\begin{verbatim}
+\documentclass[thisfountwidth,12pt]{article}
+\renewcommand{\rmdefault}{fgr}
+\rmfamily
+\usepackage{rmpage}
+
+\begin{document}
+
+...
+
+\end{verbatim}
+
+\rmpage will tell you which fount it is working with, and the results
+of its calculations. If you get confused by \LaTeX's fount selection
+scheme, read the manual; it confuses me too.
+
+The fount options work like this: each option sets the
+\comname{RM@fountfamily} command to a particular value. Any option
+which sets the \comname{RM@loadfount} flag true forces code later on
+in \rmpage to load the appropriate fount, most of them using one of
+the standard \packname{PSNFSS} packages. The fount loading code is
+written specially for each fount; there's no easy way to add more
+founts to the list that's already dealt with. But you could add code to
+the \comname{RM@AfterProcessOptions} hook if you want to do this; I
+suggest that this code loads the fount, selects it, and defines
+\comname{RM@fountfamily} to be 12, to make the width setting code
+measure its width. There are no hooks in \filename{rmpwnorm.pko} to
+add this sort of thing.
+
+\begin{ikkystuff}
+The thing about using the \optname{loadfount} options is that the
+standard \packname{PSNFSS} packages don't always set the default main
+document typeface (the one you get when you ask for
+\comname{rmfamily}) to be the fount you've asked for. So if you say
+\optname{loadhelvet}, you'll get a \comname{textwidth} based on the
+width of the Helvetica typeface, but Helvetica is the fount you get
+when you ask for \comname{sffamily}, which might not be what you want.
+
+The thing to do is be sure which typeface will be the main document
+face, and ask \rmpage to set the \comname{textwidth} accordingly. You
+might use the appropriate \optname{loadfount} option for this, or load
+the founts you want with separate calls to the appropriate packages in
+your document's preamble.
+\end{ikkystuff}
+
+If you don't have the file needed to load the requested fount
+family, \rmpage complains.
+
+Fount families are set like this:
+\begin{verbatim}
+0=cmr
+1=avant garde 2=bookman 3=zapf chancery 4=helvetica
+5=new century schoolbook 6=palatino 7=times 8=utopia
+9=lucida casual 10=courier 11=concrete 12=this fount width
+13=lucida casual dirty trick
+\end{verbatim}
+
+The dirty trick works like this: if you ask for
+\optname{loadlucidacasual}, rather than \optname{loadluccasua}
+(\comname{RM@fountfamily} 13), the fount loading code later on does a
+|\RequirePackage{lucida-casual}|, and then sets
+\comname{RM@fountfamily} to 9. This lets Rowland use his own
+\filename{.fd} files for Lucida Casual, and allows access to the
+standard \filename{.fd} files. The option to do this is in Rowland's
+curious option section of the configuration file.
+
+
+\begin{description}\shorty\squish
+
+\asleepoption{cmrwidth} Computer modern roman; redundant
+options.\newline% horrid bodge
+Defines \comname{RM@fountfamily} to 0
+
+\asleepoption{loadcmr} Loads nothing; does whinge a little.
+
+\awakeoption{avantwidth} Avant Garde. Defines \comname{RM@fountfamily} to 1
+
+\awakeoption{loadavant} Requires the \packname{avant} package.
+
+\awakeoption{bookmanwidth} Bookman. Defines \comname{RM@fountfamily} to 2
+
+\awakeoption{loadbookman} Requires the \packname{bookman} package.
+
+\awakeoption{chancerywidth} Zapf Chancery. Defines \comname{RM@fountfamily} to 3
+
+\awakeoption{loadchancery} Requires the \packname{chancery} package.
+
+\awakeoption{helvetwidth} Helvetica. Defines \comname{RM@fountfamily} to 4
+
+\awakeoption{loadhelvet} Requires the \packname{helvet} package.
+
+\awakeoption{newcentwidth} New Century Schoolbook. Defines \comname{RM@fountfamily} to 5
+
+\awakeoption{loadnewcent} Requires the \packname{newcent} package.
+
+\awakeoption{palatinowidth} Palatino. Defines \comname{RM@fountfamily} to 6
+
+\awakeoption{loadpalatino} Requires the \packname{palatino} package.
+
+\awakeoption{timeswidth} Times. Defines \comname{RM@fountfamily} to 7
+
+\awakeoption{loadtimes} Requires the \packname{times} package.
+
+\awakeoption{utopiawidth} Utopia. Defines \comname{RM@fountfamily} to 8
+
+\awakeoption{loadutopia} Requires the \packname{utopia} package.
+
+\awakeoption{lucasualwidth} Lucida casual. Defines \comname{RM@fountfamily} to 9
+
+\awakeoption{loadlucasual} Requires the \packname{lucasual} package.
+%% lucida-casual option is now in rmplocal.cfg
+%%
+
+\awakeoption{courierwidth} Courier. Defines \comname{RM@fountfamily} to 10
+
+\asleepoption{loadcourier} This option makes the default roman fount
+Courier. I think this is ugly and crude: you might be better off
+using the times package and \comname{ttfamily}
+
+\awakeoption{concretewidth} Concrete. Defines \comname{RM@fountfamily} to 11
+
+\asleepoption{loadconcrete} This option loads the \packname{beton}
+package and sets \comname{textwidth} for the Concrete Roman founts.
+
+\awakeoption{thisfountwidth} Bases \comname{textwidth} on the current
+fount.\newline% horrid bodge
+Defines \comname{RM@fountfamily} to 12
+
+%%
+\end{description}
+
+\subsection{Stuff for beton support}
+
+\begin{description}\shorty\squish
+\awakeoption{standard-baselineskips} Passes this option to
+\packname{beton} so \rmpage can detect whether this option's been
+passed to \packname{beton}.
+\asleepoption{oldstyle-equation-numbers} Passes this option to
+\packname{beton}.
+\asleepoption{concrete-math} Passes this option to
+\packname{beton}.
+\end{description}
+%%
+%%
+\subsection{Other synonyms for some options}
+
+Why oh why oh why do I have to make my package speak US English?
+(mutter mumble grumble). Yes, all right, it's how the convention's
+worked out. And I've put the original options to change the
+\comname{today} command here too. (It's like this: I once had a
+\LaTeX~2.09 style file called \packname{nicedate} that changed the
+\comname{today} command into something I liked. Then I wrote \rmpage,
+and included the \packname{nicedate} code, activated by the
+\optname{nicedate} option. Obviously, the \optname{nicedate} option
+needed a complementary option, and the obvious name for this option
+was \optname{nastydate}, which eventually got turned into
+\optname{othernicedate}. After I started turning \rmpage into
+something for the rest of the world to look at (which it wasn't
+originally), I added the \optname{ukdate} and \optname{usdate}
+options. But I still like \optname{nicedate}, so I've kept it. So
+there.)
+
+\begin{description}\shorty\squish
+
+\awakeoption{othernicedate} The same as \optname{usdate}; does nothing
+
+\awakeoption{nicedate} The same as \optname{ukdate}; changes date
+format.
+
+\asleepoption{verbose} Synonym for chatty
+\asleepoption{silent} Synonym for yorkshire
+\asleepoption{errorshow} Synonym for yorkshire
+\asleepoption{warningshow} Synonym for taciturn
+\asleepoption{infoshow} Synonym for chatty
+\asleepoption{debugshow} Synonym for garrulous
+
+
+%%
+%% And I object to this, I really do. Why can't people learn to
+%% spell properly?
+%%
+
+\asleepoption{center} The same as \optname{centre}
+
+\asleepoption{notcenter} The same as \optname{notcentre}
+
+\end{description}
+%%
+\subsection{Margin options}
+\label{optcfg:margins}
+
+\begin{description}\shorty\squish
+
+\awakeoption{ringbinding} This option sets the minimum allowed inside
+margin to be at least 15\units{mm} if you are printing in portrait
+orientation. It's in the config file because it must be executed
+after the \optname{landscape} and \optname{portrait} options. It does
+nothing but warn you if you use it in landscape orientation.
+
+Beware that this option takes no notice of long paper sizes at all,
+and is likely to give iffy results if you combine it with them. If
+you have any thoughts about this option, please email me---I'm not
+terribly happy with it.
+
+\end{description}
+
+\subsection{Printer options}
+\label{optcfg:printers}
+
+Each printer option must set these ten parameters:
+
+\begin{description}\shorty\squish
+
+\item[\comname{RM@printertype}] A code number, defined below. This
+number is used by \rmpage to keep track of the printer used; you can
+tell \rmpage to do things for certain printers and not for others.
+
+\item[\comname{RM@ptrrportclear}] The non-printing margin on the
+right-hand side in portrait orientation
+
+\item[\comname{RM@ptrlportclear}] The non-printing margin on the
+left-hand side in portrait orientation
+
+\item[\comname{RM@ptrtportclear}] The non-printing margin at the
+top in portrait orientation
+
+\item[\comname{RM@ptrbportclear}] The non-printing margin at the
+bottom in portrait orientation
+
+\item[\comname{RM@ptrrlandclear}] The non-printing margin on the
+right-hand side in landscape orientation
+
+\item[\comname{RM@ptrllandclear}] The non-printing margin on the
+left-hand side in landscape orientation
+
+\item[\comname{RM@ptrtlandclear}] The non-printing margin at the
+top in landscape orientation
+
+\item[\comname{RM@ptrblandclear}] The non-printing margin at the
+bottom in landscape orientation
+
+\item[\comname{RM@ptrpostol}] Nominally, the amount you expect the
+position of the paper to vary. The value of this command is added to
+each of the \comname{ptr...clear} parameters before they are used.
+
+\end{description}
+
+Printer types are:
+\par
+\noindent
+\begin{tabbing}
+0=fullbleed \= 1=general \= 2=pessimistic \= 3=optimistic\\
+10=dw300 \> 11=dw500 \> 12=dw600 \> (HP deskwriter inkjet series)\\
+20=lj2 \> 21=lj3 \> 22=lj4 \> (HP laserjet laser printer series)\\
+30=canonbjx (Canon bubblejet flurble) \\
+40+ others (whatever comes up)\\
+1000+ local printers to avoid clashes\\
+\end{tabbing}
+
+The figures for all these printers are guesses, except for the DW500
+and DW600: any data on printing margins for the printers above or
+other commonly-used printers would be gratefully received. I need to
+know about printing limits at the top, bottom, left, and right for
+portrait and landscape modes, and whether the data is what the book
+says or what you measured (preferrably both, but anything'll help).
+If anyone really uses \LaTeX\ with an A3 printer, do tell: it's
+something I've been wondering about.
+
+When I've got a better idea of what's going on, I'll define more
+printer options.
+
+\comname{RM@ptrpostol} generally set to 1\unit{mm} (paper sizes are to
+$\pm2$\unit{mm}), except for our DW520 which I keep a careful eye on.
+
+\begin{description}\shorty\squish
+
+\awakeoption{fullbleedprinter} Lets you print all the way to the
+edge of the paper.
+\begin{verbatim}
+\def\RM@printertype{0}
+\def\RM@ptrrportclear{0mm} \def\RM@ptrrlandclear{0mm}
+\def\RM@ptrlportclear{0mm} \def\RM@ptrllandclear{0mm}
+\def\RM@ptrtportclear{0mm} \def\RM@ptrtlandclear{0mm}
+\def\RM@ptrbportclear{0mm} \def\RM@ptrblandclear{0mm}
+\def\RM@ptrpostol{0mm}
+\end{verbatim}
+
+\awakeoption{generalprinter} Arbitrary settings that probably ensure
+a layout inside the printing area on most A4 printers.
+\begin{verbatim}
+\def\RM@printertype{1}
+\def\RM@ptrrportclear{8mm} \def\RM@ptrrlandclear{8mm}
+\def\RM@ptrlportclear{8mm} \def\RM@ptrllandclear{8mm}
+\def\RM@ptrtportclear{8mm} \def\RM@ptrtlandclear{8mm}
+\def\RM@ptrbportclear{15mm} \def\RM@ptrblandclear{15mm}
+\def\RM@ptrpostol{1mm}
+\end{verbatim}
+
+\asleepoption{pessimisticprinter} This uses the worst limits I can remember
+meeting, so it force documents inside the printing area on any printer.
+\begin{verbatim}
+\def\RM@printertype{2}
+\def\RM@ptrrportclear{10mm} \def\RM@ptrrlandclear{19mm}
+\def\RM@ptrlportclear{10mm} \def\RM@ptrllandclear{10mm}
+\def\RM@ptrtportclear{10mm} \def\RM@ptrtlandclear{10mm}
+\def\RM@ptrbportclear{19mm} \def\RM@ptrblandclear{10mm}
+\def\RM@ptrpostol{1mm}
+\end{verbatim}
+
+\asleepoption{optimisticprinter} This uses the best limits I'd expect
+from a real printer.
+\begin{verbatim}
+\def\RM@printertype{3}
+\def\RM@ptrrportclear{3mm} \def\RM@ptrrlandclear{3mm}
+\def\RM@ptrlportclear{3mm} \def\RM@ptrllandclear{3mm}
+\def\RM@ptrtportclear{3mm} \def\RM@ptrtlandclear{3mm}
+\def\RM@ptrbportclear{3mm} \def\RM@ptrblandclear{3mm}
+\def\RM@ptrpostol{0.5mm}
+\end{verbatim}
+
+\asleepoption{dw300printer} A guess.
+\begin{verbatim}
+\def\RM@printertype{11}
+\def\RM@ptrrportclear{6mm} \def\RM@ptrrlandclear{15mm}
+\def\RM@ptrlportclear{6mm} \def\RM@ptrllandclear{7mm}
+\def\RM@ptrtportclear{7mm} \def\RM@ptrtlandclear{6mm}
+\def\RM@ptrbportclear{15mm} \def\RM@ptrblandclear{6mm}
+\def\RM@ptrpostol{1mm}
+\end{verbatim}
+
+\asleepoption{dw500printer} Hewlett-Packard's specification for its
+DeskWriter and DeskJet 500/510/520/540 printers.
+\begin{verbatim}
+\def\RM@printertype{11}
+\def\RM@ptrrportclear{6mm} \def\RM@ptrrlandclear{15mm}
+\def\RM@ptrlportclear{6mm} \def\RM@ptrllandclear{7mm}
+\def\RM@ptrtportclear{7mm} \def\RM@ptrtlandclear{6mm}
+\def\RM@ptrbportclear{15mm} \def\RM@ptrblandclear{6mm}
+\def\RM@ptrpostol{1mm}
+\end{verbatim}
+
+\awakeoption{dw600printer} Measured from a particular HP 600 series
+inkjet printer, with a bit added.
+\begin{verbatim}
+\def\RM@printertype{12}
+\def\RM@ptrrportclear{5mm} \def\RM@ptrrlandclear{15mm}
+\def\RM@ptrlportclear{5mm} \def\RM@ptrllandclear{2mm}
+\def\RM@ptrtportclear{2mm} \def\RM@ptrtlandclear{5mm}
+\def\RM@ptrbportclear{15mm} \def\RM@ptrblandclear{5mm}
+\def\RM@ptrpostol{1mm}
+\end{verbatim}
+
+\asleepoption{lj2printer} an arbitrary guess
+\begin{verbatim}
+\def\RM@printertype{20}
+\def\RM@ptrrportclear{7mm} \def\RM@ptrrlandclear{7mm}
+\def\RM@ptrlportclear{7mm} \def\RM@ptrllandclear{7mm}
+\def\RM@ptrtportclear{7mm} \def\RM@ptrtlandclear{7mm}
+\def\RM@ptrbportclear{7mm} \def\RM@ptrblandclear{7mm}
+\def\RM@ptrpostol{1mm}
+\end{verbatim}
+
+\asleepoption{lj3printer} an arbitrary guess
+\begin{verbatim}
+\def\RM@printertype{21}
+\def\RM@ptrrportclear{6mm} \def\RM@ptrrlandclear{6mm}
+\def\RM@ptrlportclear{6mm} \def\RM@ptrllandclear{6mm}
+\def\RM@ptrtportclear{6mm} \def\RM@ptrtlandclear{6mm}
+\def\RM@ptrbportclear{6mm} \def\RM@ptrblandclear{6mm}
+\def\RM@ptrpostol{1mm}
+\end{verbatim}
+
+\asleepoption{lj4printer} an arbitrary guess
+\begin{verbatim}
+\def\RM@printertype{22}
+\def\RM@ptrrportclear{5mm} \def\RM@ptrrlandclear{5mm}
+\def\RM@ptrlportclear{5mm} \def\RM@ptrllandclear{5mm}
+\def\RM@ptrtportclear{5mm} \def\RM@ptrtlandclear{5mm}
+\def\RM@ptrbportclear{5mm} \def\RM@ptrblandclear{5mm}
+\def\RM@ptrpostol{1mm}
+\end{verbatim}
+
+\asleepoption{canonbjxprinter} an arbitrary guess
+\begin{verbatim}
+\def\RM@printertype{22}
+\def\RM@ptrrportclear{7mm} \def\RM@ptrrlandclear{12mm}
+\def\RM@ptrlportclear{7mm} \def\RM@ptrllandclear{7mm}
+\def\RM@ptrtportclear{7mm} \def\RM@ptrtlandclear{7mm}
+\def\RM@ptrbportclear{12mm} \def\RM@ptrblandclear{7mm}
+\def\RM@ptrpostol{1mm}
+\end{verbatim}
+
+\end{description}
+
+\subsection{Rowland's curious options}
+
+
+These are curious options, defined by me (RJMM) to perform dark and
+eldritch deeds. These aren't intended for hoi polloi, mainly 'cos
+they're a bit iffy in places, but I like them and they might give
+you some ideas.
+
+
+Our DW520 isn't quite to spec.
+
+\begin{description}\shorty\squish
+
+\awakeoption{R+R-dw520printer}
+\begin{verbatim}
+\def\RM@printertype{2}
+\def\RM@ptrrportclear{7mm} \def\RM@ptrrlandclear{15mm}
+\def\RM@ptrlportclear{6mm} \def\RM@ptrllandclear{7mm}
+\def\RM@ptrtportclear{7mm} \def\RM@ptrtlandclear{7mm}
+\def\RM@ptrbportclear{15mm} \def\RM@ptrblandclear{6mm}
+\def\RM@ptrpostol{0.5mm}
+\end{verbatim}
+
+\awakeoption{lucidacasualwidth} Lucida casual
+Defines \comname{RM@fountfamily} to 9
+
+\awakeoption{loadlucidacasual} A dirty trick to load my .fd version of
+lucida casual rather than the PSNFSS version. If you
+\optname{loadlucidacasual}, \comname{RM@fountfamily} is set to 9 after
+the \packname{lucida-casual} package has been
+\comname{RequirePackage}d. That's done by code further on in rmpage,
+specially written for this dirty trick.
+\end{description}
+
+I have written packages that do the same job as the standard
+\filename{size10.clo} etc., files, but for larger sizes. Because the
+standard \LaTeX\ \comname{@ptsize} parameter is intended to be a
+single digit, and I want to use several different sizes, I have
+defined a new parameter that holds the point size of the main body
+type, the command \comname{RM@ptsize}. This parameter is only
+defined for my larger sizes.
+
+Because my size packages can be loaded before or after \rmpage, and
+because both need to know about the point size, \rmpage says
+\begin{verbatim}
+\providecommand{\RM@ptsize}{666}
+\end{verbatim}
+before the extra size options are executed. The options set
+\comname{RM@ptsize} to the appropriate value if this hasn't already
+been done. All my other packages that recognize the larger point size
+options do something similar.
+
+The other thing that \rmpage does with these larger point size
+options is set \comname{@ptsize} to the 12\unit{pt} value; this is to
+fool sections of \rmpage into thinking that it's dealing with a
+12\units{pt} fount.
+
+\begin{description}\shorty\squish
+\awakeoption{14pt} Sets \comname{RM@ptsize} to |14| if needed and
+sets \comname{@ptsize} to 2 (meaning 12\units{12}, to fool \rmpage)
+\awakeoption{24pt} Sets \comname{RM@ptsize} to |24| if needed and
+sets \comname{@ptsize} to 2 (meaning 12\units{12}, to fool \rmpage)
+
+\awakeoption{36pt} Sets \comname{RM@ptsize} to |36| if needed and
+sets \comname{@ptsize} to 2 (meaning 12\units{12}, to fool \rmpage)
+
+\end{description}
+
+
+
+
+
+
+\chapter{How things work}
+\label{chap:htw}
+
+\section{\comname{textheight} calculation}
+\label{htw:textheightcalculation}
+
+The way \rmpage decides on the value of \comname{textheight} is this:
+the length options set a length called
+\comname{RM@totalheadfootclearance} to be certain fraction of the
+\comname{paperheight}. The value of this command will be the sum of
+the blank space above the header and below footer, after it has been
+checked against several restrictions.
+
+\begin{ikkystuff}
+If the \optname{noheaders} option has used, \comname{headheight} and
+\comname{headsep} are both set to 0\units{pt}; if the
+\optname{nofooters} option has been used, \comname{footskip} is set
+to 0\units{pt}. So a given length option will fill the page to the
+same extent whether or not headers or footers are used; turning
+headers and footers off will increase \comname{textheight}.
+\end{ikkystuff}
+
+The first check that's made is that the \comname{textheight} produced
+by this value of \comname{RM@totalheadfootclearance} will not exceed
+the bounds set by \comname{RM@mintextheight} and
+\comname{RM@maxtextheight}. These two commands are intended to be set
+by local code on a class-by-class basis in the configuration file,
+using the \comname{RM@OnClassType} command in the
+\comname{RM@AfterProcessOptions} hook, and define the allowed range of
+\comname{textheight}.
+%
+This check defines the commands:
+\begin{verbatim}
+\RM@maxpractextheight and \RM@mintotalheadfootclearance
+\RM@minpractextheight and \RM@maxtotalheadfootclearance
+\end{verbatim}
+They are calculated from the user supplied limits; they are based on the
+largest and smallest values that \comname{textheight} is allowed to
+have, given the limits of the discrete values it is allowed to take.
+The \comname{practextheight} parameters are unused at the moment;
+they might come in handy one day.
+
+The total space above and below the footer is divided into two: a
+certain fraction of this space to the gap at the top, the rest to the
+gap at the bottom. These two lengths are saved in
+\comname{RM@totalheadclearance} and \comname{RM@totalfootclearance}.
+The \optname{altitude} options control this division of space---see
+section~\ref{optrmp:altitude} on page~\pageref{optrmp:altitude}.
+
+Checks are then made to ensure that nothing will be printed outside
+the allowed printing region along the vertical axis. This is defined
+by the lengths \comname{RM@minheadclearance} and
+\comname{RM@minfootclearance}, which are initially set to the
+non-printing margin top and bottom. \rmpage ensures that these two
+lengths are at least as large as either \comname{RM@mintopmargin} or
+\comname{RM@minbottommargin}, as appropriate---these two parameters
+are intended to be set class-by-class, so you can ensure that your
+layout meets regulations, for example.
+
+\rmpage issues warnings if it decides to make either the top or bottom
+gap larger to fit the text inside the printing region. The warnings
+are issued because changing the top or bottom gap changes the
+\comname{textheight} and vertical position of the text on the page;
+you might have been expecting a smooth increment from the last
+\optname{altitude} or \comname{length} option, or a particular balance
+of space above and below the text given by a particular
+\optname{altitude} option, and it might be useful to know that you've
+not got what you might expect.
+
+
+Finally, \comname{textheight} is set to a value such that:
+\begin{displaymath}
+|\textheight| = \mathrm{integer} \times |\baselineskip| + |\topskip|
+\end{displaymath}
+
+The values of the three \comname{RM@total...clearance} parameters are
+increased to match the reduction in the size of \comname{textheight},
+and \comname{topmargin} is set to whatever it needs to be.
+
+The apparently special case of \optname{stdlength} is handled by
+setting \comname{RM@totalheadfootclearance} to a value that will
+yield the same \comname{textheight} as the standard classes; the
+\classname{book}, \classname{article}, \classname{report}, and
+\classname{letter} classes use one value; the \classname{slides}
+class another. Have a look at \filename{rmpage.dtx} and the standard
+class files to see how this is done. Note that \rmpage gives you the
+same \comname{textheight} as the standard classes whether or not you
+are using headers or footers---the number of text body lines on the
+page is always the same (at least, it always has been in testing).
+There are exceptions to this: it is possible to ask \rmpage to
+position a \optname{stdlength} page on the paper in such a fashion
+that the text would end up outside the printable region. In this
+case, \rmpage will issue a warning and reduce \comname{textheight} to
+fit inside the allowed area.
+
+\begin{ikkystuff}
+The parameters that define the available printing region along the
+vertical axis are \comname{RM@minheadclearance} and
+\comname{RM@minfootclearance}. The values of these
+\comname{RM@...clearance} parameters are set printer by printer, and
+possibly paper-size by paper-size. \rmpage ensure that they are at
+least as large as either {RM@mintopmargin} or
+\comname{RM@minbottommargin}, as appropriate.
+
+If the particular combination of printer and paper has set the flag
+\comname{RM@jackup} to be true, \rmpage will lift the printing region
+to clear an over-large non-printing margin at the bottom of the page.
+This is useful for people with Hewlett-Packard inkjet printers. There
+is no similar facility for automatically lowering the printing region
+or shifting it sideways. This is because a larger than expected
+space at the bottom of the page is rarely a problem, but lower than
+normal or shifted sidedways is usually a problem. These effects may
+be achieved, but you have to do it by using options to have the
+specific effect you want.
+
+Each printer option must define the commands:
+\begin{center}
+\begin{tabular}{lll}
+\comname{RM@ptrrportclear}&\comname{RM@ptrlportclear}&\comname{RM@ptrtportclear}\\
+\comname{RM@ptrbportclear}&\comname{RM@ptrrlandclear}&\comname{RM@ptrllandclear}\\
+\comname{RM@ptrtlandclear}&\comname{RM@ptrblandclear}&\comname{RM@ptrpostol}\\
+\end{tabular}
+\end{center}
+
+They define the non-printing clearances in
+landscape and portrait orientation, and the assumed maximum positional
+error. Code can be added in the \comname{RM@PrinterPaperSettings}
+hook to set particular clearances for particular combinations of
+printer and paper (to cope with, for example, the 19\units{mm}
+non-printing margin at the bottom of an envelope fed into an HP
+DeskWriter 520, which is much larger than the 15\units{mm}
+non-printing margin at the bottom of a normal bit of paper).
+
+
+The \packname{beton} package changes \comname{baselineskip}, but does
+so at the start of the document, using the \comname{AtBeginDocument}
+hook provided by standard \LaTeX. \rmpage needs to know what the
+\comname{baselineskip} of the main document fount will be. To get
+round this problem, \rmpage steals some code from \packname{beton} so
+it can set \comname{baselineskip} to the value it will have after
+\comname{AtBeginDocument}. When the vertical page parameters have
+been calculated, \rmpage puts \comname{baselineskip} back to its
+initial value.
+
+None of this happens unless you load the \packname{beton} package, and
+specify the \packname{beton} option to \rmpage. If you don't want
+\rmpage to use \packname{beton}'s \comname{baselineskip}, specify the
+\optname{nobeton} option to \rmpage. Note that you must load the
+\packname{beton} package before you load \rmpage. Sorry.
+\end{ikkystuff}
+
+\section{\comname{textwidth} calculation}
+\label{htw:textwidthcalculation}
+
+The way \comname{textwidth} is worked out is this: two different
+\comname{textwidth} initial guesses are calculated---one based on the
+width of a certain number of characters allowed in each column, the
+other based on a certain fraction of \comname{paperwidth}---and the
+smaller one is used as the basis for the final \comname{textwidth}.
+The particular number of characters and fraction of \comname{paperwidth}
+is set by the \optname{width} option specified. The default
+\optname{normalwidth} option gives a character-based width very close
+to standard, but the paper-based width is quite a bit larger than
+standard. This is only significant when \rmpage uses the paper-based
+width, as it usually does when you are printing on A5 paper.
+
+\begin{ikkystuff}
+The technique of choosing the smaller of two \comname{textwidth}s:
+one based on the number of characters, and the other based on the
+size of the paper, was derived from the standard classes' way of doing
+things---a fixed width (different for each size) is compared to
+$\mbox{\comname{paperwidth}}-2\units{in}$, and the smaller is used. The
+fixed width is different for each size; the conventional classes use
+hardwired sizes, and the \classname{slides} class uses $65/2 \times
+\mbox{width of (|\hbox{\rmfamily im}|)}$.
+
+\rmpage asks for a normal text-based width based on the same number of
+characters as the standard widths, and compares this to a paper-based
+width that is calculated as $0.7138 \times \mbox{\comname{paperwidth}}$. The
+fraction used gives a larger \comname{textwidth} than the standard
+classes when typesetting on A5 paper, but a smaller \comname{textwidth}
+when typesetting large founts on A4 paper.
+
+The normal character-based \comname{textwidth} calculated by \rmpage
+is different to that calculated by the standard classes because the
+standard classes round calculated dimensions down to the next lowest
+integer number of points. I think this is a mistake, because it
+introduces an unnecessary error in margin sizes, so \rmpage doesn't do
+it (unless you're asking for \optname{stdwidth}, which does truncates
+the calculated value of \comname{textwidth} only).
+
+The special widths: \optname{oneinchmargins},
+\optname{halfinchmargins}, and \optname{fullwidth}, all set the
+paper-based textwidth to a fixed value to leave the specified amount
+of space either side, assuming that you have asked for
+\optname{centre}d printing (\optname{fullwidth} leaves no space).If
+you haven't, the total space either side will add up to what you'd
+expect, but you can get 1.5\units{in} on one side, and 0.5\units{in}
+on the other, for example, if you're using \optname{oneinchmargins}.
+
+\optname{stdwidth} sets both the paper and character-based initial
+guesses to the same value as the standard classes. If the selected
+initial \comname{textwidth} value isn't reduced, the result will be
+the same as the standard classes' calculations (insert standard
+disclaimer here---not because I'm afraid of being sued, but because I
+think you should check that the value of \comname{textwidth} is what
+it should be if it's really important. This is because I think this
+is a complicated piece of software because \TeX's piggin' awful for
+doing maths, and I've not verified the algorithm to my own
+satisfaction. I have tested it, and it appears to work the way I
+want, so that'll have to do for now.)
+
+\end{ikkystuff}
+
+The first check ensures that this first guess is within the bounds of
+\comname{RM@mintextwidth} or \comname{RM@maxtextwidth}. If it's not,
+it's made big or small enough.
+
+\begin{ikkystuff}
+If you've asked for \optname{characterwidthset}, then the paper-based
+\comname{textwidth} is set to a large value; similarly, if you've
+asked for \optname{paperwidthset}, the character-based
+\comname{textwidth} is set to a large value. If you've asked for an
+inherently paper-based width like \optname{oneinchmargins}, both the
+paper and character-based \comname{textwidth}s are set to the
+appropriate value. So if you also ask for
+\optname{characterwidthset}, \rmpage will give you
+\optname{oneinchmargins} anyway, and a complaint.
+\end{ikkystuff}
+
+Now the smallest of the two \comname{textwidth}s is selected as the
+one to use for real, and \rmpage calculates \comname{evensidemargin}
+based on the requested offset---the proportions in which the available
+horizontal space is divided between the larger and smaller margins
+(see section~\ref{optrmp:margins} on page~\pageref{optrmp:margins} for the
+details).
+
+\begin{ikkystuff}
+When \rmpage checks \comname{textwidth}, it takes into account
+whether you're printing two sided or not. The checking code looks a
+bit complicated, because there are two sets of limits that apply to
+the horizontal extent of the text: \comname{RM@minrightclearance} and
+\comname{RM@minleftclearance}; and \comname{RM@minoutsidemargin} and
+\comname{RM@mininsidemargin}. \rmpage looks at the appropriate limits.
+
+The \comname{left} and \comname{right} \comname{minclearance}
+parameters define the possible printing region, as set for the
+requested printer and paper combination; all text must fit inside
+these limits. The \comname{inside} and \comname{outside}
+\comname{minmargin} parameters define the permitted extent of the main
+body text, excluding marginal paragraphs. The \comname{minmargin}
+parameters are defined to be |0pt| by default; they were introduced so
+that I could write a thesis class which had to ensure particular
+minimum margins to meet the regulations. You can see how I used them
+in the \comname{RM@AfterProcessOptions} hook definition in the
+configuration file.
+\end{ikkystuff}
+
+If \comname{evensidemargin} is too small to allow the text to print
+on the page, it is increased, and \comname{textwidth} decreased to
+maintain the requested offset proportions.
+
+Then the right-hand edge of \comname{textwidth} is checked to ensure
+that it is within the allowed printing region. If it's not,
+\comname{textwidth} is reduced. If so, \comname{evensidemargin} must
+be increased to maintain the requested offset proportions, and
+\comname{textwidth} reduced by the same amount to keep the right-hand
+margin the same size.
+
+
+\begin{ikkystuff}
+If you've asked for \comname{fullwidth}, \rmpage won't attempt to
+retain the offset proportions, nor will it issue as many warnings
+about decreasing things to fit.
+\end{ikkystuff}
+
+When that's done, \comname{oddsidemargin} is set to the appropriate
+value: equal to \comname{evensidemargin} if you've asked for one sided
+or centred printing; or equal to the right-hand margin on an
+even-numbered page if you're printing two sided and not centred.
+
+And finally, \rmpage checks that the final value of
+\comname{textwidth} is still larger than \comname{RM@mintextwidth}.
+If it's not, \rmpage can't do anything about it, so just issues an
+error message.
+
+
+\section{Hooks}
+\label{htw:hooks}
+
+There's five hooks:
+
+\begin{tabbing}
+\comname{RM@BeforeProcessOptions}, \= \comname{RM@AfterProcessOptions},\\
+\comname{RM@PrinterPaperSettings}, \\
+\comname{RM@BeforeWidthSetting}, \> \comname{RM@AfterWidthSetting}.\\
+\end{tabbing}
+
+\begin{description}\shorty
+
+\item[\comname{RM@BeforeProcessOptions}] This hook is executed just
+before \comname{ProcessOptions}, and before the \comname{RM@donewithoptions}
+flag has been set to true, so options which can only be
+specified in an \comname{ExecuteOptions} statement can be requested.
+
+\item[\comname{RM@AfterProcessOptions}] This hook is executed well after
+\comname{ProcessOptions}. It is executed after most of the fiddling
+about prior to working out page parameters has been done, just after
+the current class has been identified, but before class-specific code
+is executed. This is the hook to use if you want to add a new class:
+you should preferably set \comname{RM@classtype} with a new option,
+declared either directly in the config file, or by using the
+\comname{RM@BeforeProcessOptions} hook. Then put class-specific code in
+the \comname{RM@AfterProcessOptions} hook; use the \comname{RM@OnClassType}
+command.
+
+\item[\comname{RM@PrinterPaperSettings}] This hook is executed after the
+standard printer/paper specific code has been executed. Use the
+\comname{RM@OnPrinterType}, \comname{RM@OnPortraitPaperType},
+\comname{RM@OnLandscapePaperType}, and \comname{RM@On\-Paper\-Type} commands
+here.
+
+\item[\comname{RM@BeforeWidthSetting}] If you want to use a different
+file for width setting, define \comname{RM@widthsetter} to be the name of the
+file in this hook. The \comname{RM@OnClassType} command can be used to
+select which class this file should be used for. This hook is
+executed after the \comname{RM@OnClassType} command has been set by the
+standard code, and just before the width setting file is loaded.
+
+\item[\comname{RM@AfterWidthSetting}] This hook is executed on returning
+from the width setting file. It's here for \ae sthetic reasons.
+
+\end{description}
+
+\section{Marginal paragraphs}
+\label{htw:mpars}
+
+There is more on setting the size of marginal paragraphs in
+section~\ref{htw:headfootmpar} on page~\pageref{htw:headfootmpar}.
+
+If you are going to use marginal notes in your document, ensure that
+you specify \comname{normalmarginpar} or \comname{reversemarginpar}
+\emph{before} loading \rmpage. This is because \rmpage calculates the
+size of marginal paragraphs based on the space available, and if
+\rmpage thinks you're going to put marginal notes in the margin which
+is largest, and you really put them in the margin that is smallest,
+it'll get the calculation wrong and you'll have marginal notes that
+don't fit on the page.
+
+If you're going to switch between \comname{normalmarginpar} and
+\comname{reversemarginpar} in your document, select whichever one puts
+the marginal notes in the smallest margin before you load \rmpage.
+Messy, I know---sorry.
+
+The standard \LaTeX\ classes, report and article, create marginal
+paragraphs that are a fixed distance away from the text, with a
+minimum clearance from the edge of the paper of 0.8in (one sided
+printing), or 0.4in (two sided printing), and a maximum
+width of 2in.
+
+\rmpage says yah boo sucks to all this.
+
+\section{Dealing with different classes}
+
+\rmpage gives each class a number; the number of the current class is
+stored in the command \comname{RM@classtype}. Classes are detected in
+\rmpage, and in the config file. More than one class can have been
+loaded; the idea is that the first loaded class is defined as the
+current class.
+
+\section{Different paper types and printers}
+\label{htw:paperprinter}
+
+\rmpage knows about non-printing margins, and about different paper
+sizes and orientations. Each printer has its own defined
+non-printing margins, which are used to calculate the non-printing
+margins for each paper size.
+
+The non-printing margins for the selected paper size are calculated and
+stored in the commands:
+
+\begin{tabbing}
+\comname{RM@minrightclearance} \= \comname{RM@mintopclearance} \\
+\comname{RM@minleftclearance} \> \comname{RM@minbottomclearance} \\
+\end{tabbing}
+
+Each printer option must define nine commands so that \rmpage can
+calculate the non-printing margins for each paper size. These
+commands to define the non-printing margins for each printer are:
+
+\begin{tabbing}
+Portrait orientation non-printing margins:\\
+\comname{RM@ptrrportclear} \= right-hand side\\
+\comname{RM@ptrlportclear} \> left-hand side\\
+\comname{RM@ptrbportclear} \> bottom edge \\
+\comname{RM@ptrtportclear} \> top edge \\
+Landscape orientation non-printing margins:
+\comname{RM@ptrrlandclear} \> right-hand side\\
+\comname{RM@ptrllandclear} \> left-hand side\\
+\comname{RM@ptrblandclear} \> bottom edge \\
+\comname{RM@ptrtlandclear} \> top edge \\
+Assumed maximum positional error:
+\comname{RM@ptrpostol} \\
+\end{tabbing}
+
+The \comname{RM@ptrpostol} command holds a length which is added to
+the \comname{RM@minclearance} values right at the end of the
+non-printing margin calculations, \emph{after} the
+\comname{RM@PrinterPaperSettings} hook has been executed. Properly
+speaking, there should be four of these: one for left-right error and
+one for up-down error in both portrait and landscape orientation, but
+I think that one is probably adequate. The standard printer types set
+\comname{RM@ptrpostol} to 1\units{mm}.
+
+\rmpage works out which printer clearance parameters to use as the
+non-printing margins like this;
+
+\begin{enumerate}
+
+\item The flag \comname{RM@portrait} is set true if you are printing
+in portrait orientation, false if you are printing landscape.
+
+\item The flag \comname{RM@portlandinvert} is set true if you are
+using a long paper size which reduces the length of the parent paper
+size to less than the width of the parent paper size.
+
+\item
+\begin{tabbing}
+if \= (|\RM@portrait| and not |\RM@portlandinvert|) \\
+\> or (not |\RM@portrait| and |\RM@portlandinvert|)\\
+then use the |portclear| parameters \\
+\end{tabbing}
+
+\item
+\begin{tabbing}
+if \= (|\RM@portrait| and |\RM@portlandinvert|) \\
+\> or (not |\RM@portrait| and not |\RM@portlandinvert|)\\
+then use the |landclear| parameters\\
+\end{tabbing}
+
+\item If you are using a long paper size that is greater than half the
+parent size, set to 0\unit{pt} the non-printing margin at the edge
+where you cut the parent size to create the long size (assumed to be
+either the right-hand or bottom edge).
+
+\item Execute the \comname{RM@PrinterPaperSettings} hook
+
+\item Add the value of the command \comname{RM@ptrpostol} to the
+non-printing margins
+
+\end{enumerate}
+
+
+\section{Headers, footers, and marginal paragraphs}
+\label{htw:headfootmpar}
+
+This section looks at how to control the size of the gap between the
+main body text and: headers, footers, and marginal paragraphs, as well
+as the gap between marginal paragraphs and the edge of the paper, the
+maximum width of marginal paragraphs, and the gap between columns of
+text in a multiple-column layout.
+
+The details of how the size of marginal paragraphs is calculated are
+in section~\ref{htw:mpars} on page~\pageref{htw:mpars}.
+
+Some lengths used as page layout parameters are set to their final
+values by the command:
+\begin{verbatim}
+\RM@scalebyoption{<length to be scaled>}{<option number>}
+\end{verbatim}
+The |<length to be scaled>| is multiplied by a factor controlled the
+the |<option number>|. The option number is set to 12 by
+default (which means multiply by one), and is allowed to range from 1
+to 23. The multipliers are in a geometrical sequence from 0.3263 to
+3.0646. The option |least...| sets the option number to 3, and gives
+a multiplier of 0.4. The option |most...| set the option number to
+21, and gives a multiplier of 2.5. The |touchmore...| and
+|touchless...| options add or subtract one from the option number, as
+do the |t@uchmore...| and |t@uchless...| options (which are reserved
+for use by class files).
+
+These following lengths are scaled by option; the name of the counter
+storing the controlling option number is given in each case.
+
+\begin{enumerate}
+\item \comname{headsep}---the gap between the top of the text and the
+box containing the head. Controlled by \comname{RM@headsepoption}.
+
+\item \comname{footskip}---the gap between the bottom of the text and
+the baseline of the foot. \rmpage scales the length
+($\mbox{\comname{footskip}}-\mbox{\comname{baselineskip}}$), to scale the
+apparent gap between the (assumed one line) footer and the bottom of
+the text body. Controlled by \comname{RM@footskipoption}.
+
+\item \comname{columnsep}---the gap between columns on a multi-column
+page (nothing to do with tables). Controlled by
+\comname{RM@columnsepoption}.
+
+\item \comname{marginparsep}---the gap between the text body and
+marginal paragraphs. Controlled by \comname{RM@mparsepoption}.
+
+\item \comname{RM@mparclearance}---the minimum gap between the edge of
+the paper and marginal paragraphs. Controlled by \comname{RM@mparclearoption}.
+
+\item \comname{RM@maxmparwidth}---the maximum width of marginal paragraphs.
+ Controlled by \comname{RM@maxmparwidthoption}.
+
+\end{enumerate}
+
+The first four are standard \LaTeX\ lengths, and the only change \rmpage
+makes to them is with \comname{RM@scalebyoption}. The fifth and sixth
+lengths are new parameters set by \rmpage.
+
+You can play about with all of these parameters by passing options to
+\rmpage.
+
+If the spread of values given by the standard options isn't enough,
+you can say:
+\begin{verbatim}
+\setlength\columnsep{3\columnsep}
+\end{verbatim}
+or some such in your preamble, \textbf{before} loading \rmpage. This
+only works for the standard \LaTeX\ parameters.
+
+If you want to do something like this for \comname{RM@mparclearance}
+or \comname{RM@maxmparwidth}, you can use the
+\optname{largebasemparclear} or \optname{largebasemaxmparwidth}
+options. These multiply the corresponding parameter by 2 if it has
+not been set by a configuration file.
+
+\chapter{Configuring \rmpage}
+\label{chap:config}
+
+The configuration file exists so you can tailor your installation of
+\rmpage to your preferences. Some obvious things to set are the
+default printer type, the default paper type, the default date style,
+whether you want the inside or the outside margin larger.
+
+\section{Setting up a new installation}
+\label{optcfg:settingup}
+
+\rmpage will work entirely happily without local configuration, but
+you might want to customize its behaviour, for example to speed it up.
+This chapter explains how.
+
+For the sake of compatibility with everyone else and future versions,
+please keep the file \filename{rmpgen.cfg} unchanged in your \TeX{}
+search path, and make changes only to a copy of one of the standard
+configuration files that came with \rmpage. I suggest you make a copy
+called \filename{rmplocal.cfg}, from either \filename{rmpgen.cfg}
+(everything active) or \filename{rmplocal.gfc} (fastest).
+
+When you create your local configuration file, begin by doing two
+things: add a comment on the top line identifying this file as yours;
+and change the \comname{ProvidesFile} command to match the new name
+and identify the file as yours---don't forget to change the date and
+version number:
+\begin{verbatim}
+\ProvidesFile{rmplocal.cfg}
+ [1381/04/01 v0.1 Wat Tylers's
+ local configuration file for the rmpage package.]
+\end{verbatim}
+
+It's okay to comment out and uncomment options, but don't make any
+other changes above the line in the configuration file that says:
+{\ttfamily\scshape local code below here please}. I won't complain
+if you do, but you'll find it harder to upgrade to new versions of
+\rmpage.
+
+\section{Configuration basics}
+
+I assume that you have made a copy called \filename{rmplocal.cfg} of
+either \filename{rmplocal.gfc} or \filename{rmpgen.cfg}, and that
+you've changed the \comname{ProvidesFile} command. If not, read the
+start of this chapter again. I will refer to \filename{rmplocal.cfg}
+as the config file in this chapter; there are other names a local
+configuation file might have.
+
+Please don't change your config file above the line that says:
+{\ttfamily\scshape local code below here please}. I won't complain if
+you do, but you'll find it harder to upgrade to new versions of
+\rmpage.
+
+\subsection{Unknown option error}
+
+If you are using a copy of \filename{rmplocal.gfc} and \LaTeX{}
+complains about an unknown option, edit your config file and
+uncomment the option you need. The more options that are
+uncommented, the slower \rmpage will work.
+
+\subsection{Default options}
+
+Look through your config file for the line \textsc{change the command
+below to match your local preferences}. There's an
+\comname{ExecuteOptions} statement just below it. This statement sets
+your default options---my default settings are below. I have a
+special printer type, because my printer is old, tired, and
+out-of-spec; I usually print on A4 paper with a large inside margin so
+I can put my printouts in a ring binder, and I like my dates like
+this: 5th November 1996. You can change the argument of this
+statement to match your preferences: if you're an American with a
+LaserJet 4, replace the printer option with \optname{lj4printer},
+change the paper type to \optname{letterpaper}, and the date to
+\optname{usdate}. If most of your output goes in ring-binders, keep
+the \optname{notstdmargins} option; otherwise, change it to
+\optname{stdmargins} to give a conventional large outside margin.
+
+\begin{verbatim}
+%% CHANGE THE COMMAND BELOW TO MATCH YOUR LOCAL PREFERENCES
+%% --------------------------------------------------------
+%%
+\ExecuteOptions{R+R-dw520printer,a4paper,notstdmargins,nicedate}
+%%
+%% --------------------------------------------------------
+\end{verbatim}
+
+You can add almost any option you like to this statement: it sets the
+defaults for everything you typeset with \rmpage. Some of the options
+in \filename{rmplocal} have been commented out to speed things up, so
+you might need to uncomment them to allow them to work. You can tell
+whether an option needs uncommenting from the list of all the options
+in chapter~\ref{chap:alltheoptions} on
+page~\pageref{chap:alltheoptions}: options that look like this:
+{\asleepfount obscureoption} are commented out; options that look like
+this: {\awakefount usefuloption} are not commented out. None of the
+options in \rmpage are commented out---you only need to edit the
+configuration file.
+
+You can have additional default options for particular classes.
+Because the options for particular classes are executed after the
+general defaults, they can over-ride the general defaults. So it's
+quite all right to say \optname{a4paper} in the
+\optname{ExecuteOptions} statement above if you normally print out
+slides on B5~paper, because the \optname{b5paper} option executed
+later on will over-ride the original \optname{a4paper} option.
+
+If you want different default options for different classes, or if you
+intend to use the slides class, read the next section which explains
+all.
+
+\section{Configuring \rmpage for particular classes}
+\label{cfg:classes}
+
+Just below the \comname{ExecuteOptions} statement which sets the
+global defaults, there's a section headed \textsc{default options for
+particular classes}. This is the place intended for your
+class-specific default settings. \rmpage provides a command to do
+this:
+\begin{verbatim}
+\RM@OnClassExecuteOptions{<class name>}{<comma separated options>}
+\end{verbatim}
+It's just an \comname{ExecuteOptions} command that is only executed
+for the named class. For example, my configuration file has the
+statement:
+\begin{verbatim}
+\RM@OnClassExecuteOptions{slides}
+ {centre,ukdate,R+R-dw520printer}
+\end{verbatim}
+Which executes the given options only when I'm using the
+\classname{slides} class. You might like to change this statement to
+match your preferences.
+
+You can have as many of these \comname{RM@OnClassExecuteOptions}
+statements as you like, although one statement for each class is
+probably best. If you are creating a class of your own, say a thesis
+class based on \classname{report}, it's probably best to make sure
+that the default options for your thesis class are executed after the
+default options for the \classname{report} class. That way, the
+\classname{report} class's defaults don't over-ride your thesis
+class's defaults.
+
+If you want to create a new class with the help of \rmpage, read
+section~\ref{cfg:newclass} on page~\pageref{cfg:newclass} for more
+details.
+
+\section{Defining a new printer type}
+\label{cfg:printertype}
+
+\section{Dealing with particular combinations of printer
+and paper}
+\label{cfg:printerpaper}
+
+
+
+\section{Telling \rmpage about a new class}
+\label{cfg:newclass}
+
+If you are going to define a new class type, there are two obvious
+ways of doing it: either declare a new option which sets the
+\comname{RM@classtype} command to your new class number (above 100,
+please), or put a line in the \comname{RM@DefineNewClasses} hook:
+%
+\begin{verbatim}
+\DeclareOption{nuthesisclass}{\def\RM@classtype{101}}
+\end{verbatim}
+or
+\begin{verbatim}
+\newcommand*{\RM@DefineNewClasses}{
+\RM@SetClassType{nuthesis}{101}
+}% endRM@DefineNewClasses
+\end{verbatim}
+
+The advantage of not using an option is greater speed. The advantage
+of using an option is that you can pass the option to \rmpage, and be
+sure that your particular settings are acted upon, even if you change
+the name of your class.
+
+
+You can set default options for a particular class in the config file:
+the \textsc{default options for particular classes} section is for you
+to add:
+\begin{verbatim}
+\RM@ClassExecuteOptions{<class name>}{<options list>}
+\end{verbatim}
+statements for each class you want to \comname{ExecuteOptions} for.
+make sure that if you are building one class upon another (e.g.,
+building nuthesis on report), that you execute the options for the
+base class first (e.g., do report before nuthesis).
+
+
+The \comname{RM@AfterProcessOptions} hook is the ideal place to use
+the \comname{RM@OnClassType} command to set up things for particular
+classes. You can set things like minimum margins, maximum textwidth,
+and the like there. See the config file for some examples.
+
+\subsection{Dealing with options}
+
+If you want to build a new class by modifying a standard class with
+the help of \rmpage, you need to think about what's going to happen
+to options.
+
+You can tell your new class, let's call it the \classname{nuthesis} class,
+to pass options on to \rmpage quite happily, by including a
+line:
+\begin{verbatim}
+\DeclareOption*{\PassOptionsToPackage{rmpage}
+ {\CurrentOption}}
+\end{verbatim}
+in the option declaration section of your class file to pass all
+options you don't deal with to \rmpage (not forgetting to say:
+\begin{verbatim}
+\ProcessOptions
+...
+\RequirePackage{rmpage}
+\end{verbatim}
+later on).
+
+The problem with this is that any options you have set up explicitly
+(for example, you might have pass the \optname{wide} option to rmpage
+to get a particular \comname{textwidth}, and the user might have asked
+for \optname{narrow}. Do \emph{you} know which one takes precendent?)
+might be over-ridden by the user.
+
+The safest way to deal with this is to decide which of \rmpage's options
+you will allow the user to use. You might stick with the
+\begin{verbatim}
+\DeclareOption*{\PassOptionsToPackage{rmpage}
+ {\CurrentOption}}
+\end{verbatim}
+statement in your class file and prepare a special \rmpage
+config file for your new class, which has all other options commented
+out. If you call this config file \filename{rmpage-nuthesis.cfg},
+include the line
+\begin{verbatim}
+\newcommand*{\RMconfigfile}{rmpage-nuthesis.cfg}
+\end{verbatim}
+in your class
+file before loading \rmpage. Or you might use:
+\begin{verbatim}
+\DeclareOption{<option name>}
+ {\PassOptionsToPackage{rmpage}{<option name>}}
+\end{verbatim}
+to pass each allowed option on to \rmpage, and ensure that you're not
+passing options to \rmpage with \comname{DeclareOption*}.
+
+If you have used \rmpage to help you get printing dimensions right for
+a fixed format and you don't want the user to change anything, you
+might find it best to set the various parameters directly in your
+class file, and forget about using \rmpage entirely. You can find out
+what they were set to by looking in the \filename{log} file; by the
+time I've released \rmpage, everything that \rmpage changes damned
+well ought to be noted there, and if not you can curse me for a
+careless fool, and specify the \optname{garrulous} option to \rmpage
+which will print everything and then some in your \TeX\ console
+window. Don't try this if you're going to keep using \rmpage to build
+your class---I have no idea what'll happen.
+
+
+
+\subsection{Things you can do with your new class number}
+
+\subsubsection{Changing textheight setting}
+
+You can define the command \comname{RM@textheightgroup} to any number
+you like. It's probably best to do this in the
+\comname{RM@AfterProcessOptions} hook.
+
+Currently, the initial value of textheight is set by one of two blocks
+of code: one is executed if \comname{RM@textheightgroup} is 0
+(default); the other is executed if \comname{RM@textheightgroup} is 1
+(slides only).
+
+If you set \comname{RM@textheightgroup} to anything other than 0 or 1
+for any of your classes, you will need to add some code to set
+textheight! Put your new code in the
+\comname{RM@BeforeTextheightSetting} hook; have a look at \rmpage to
+see how I did it.
+
+\subsubsection{Changing textwidth setting}
+
+ALL THIS IS WRONG NOW!
+
+You can also define the command \comname{RM@widthsetter} to be any
+filename you like, using any of the hooks executed before the width
+setting code is used. If the command is not defined just before the
+\comname{RM@BeforeWidthSetting} hook is executed, it is defined to be
+rmpwnorm.pko (the extension stands for package option). If the class
+type is 5 (\classname{slides}), the command is then defined to be
+rmpwslid.pko. This filename is the file loaded to set the various
+horizontal parameters. By default, \filename{rmpwnorm.pko} is loaded
+for all classes expect slides, which uses \filename{rmpwslid}. An
+example of this sort of thing is this fragment of config file code:
+
+\noindent
+{\footnotesize
+\begin{verbatim}
+\newcommand*{\RM@AfterProcessOptions}{
+ \RM@OnClassType{101}{% class 101 = nightmare university thesis class
+ % Use different textheight setting code to everything else.
+ \def\RM@textheightgroup{2}
+ % Set minimum margins as specified in the regulations.
+ % Everything else is done by the class file. These commands
+ % are defined to be 1742pt at the start of rmpage, so they
+ % can't be set in the class file.
+ \def\RM@minoutsidemargin{15mm}
+ \def\RM@mininsidemargin{40mm}
+ \def\RM@mintopmargin{15mm}
+ \def\RM@minbottommargin{15mm}
+ % set minimum and maximum textwidth, as defined by the regs
+ \def\RM@mintextwidth{130mm}
+ \def\RM@maxtextwidth{160mm}
+ % load custom width setting code in file vulture-widths.jkl
+ \def\RM@widthsetter{vulture-widths.jkl}
+ }{}
+}
+%
+%
+%
+\newcommand*{\RM@DefineNewClasses}{
+ \RM@SetClassType{rmcv}{20}
+ \RM@SetClassType{rmletter}{21}
+ \RM@SetClassType{bithesis}{22}
+ \RM@SetClassType{ljmueepexam}{23}
+ \RM@SetClassType{nuthesis}{101}
+}% endRM@DefineNewClasses
+%
+%
+% nightmare u. thesis uses fixed total text area height of 7in
+\newcommand*{\RM@BeforeTextheightSetting}{
+ \RM@OnTextheightGroup{2}{%
+ \setlength\RM@totalheadfootclearance{\paperheight}
+ \addtolength\RM@totalheadfootclearance{-7in}
+ }
+}% endRM@BeforeTextheightSetting
+%
+\end{verbatim}
+}
+
+The code fragment above defines a new class type,
+\classname{nuthesis}, number 101, which is a class for preparing
+theses for Nightmare University. This class uses textheight setting
+code that asks for a total text body height of as near to 7\units{in}
+as possible no matter what textheight options are specified, and
+horizontal text parameters are set by the file called
+\filename{vulture-widths.jkl}. The other limits on the printing
+region specified by the university's regulations are placed in the
+\comname{RM@AfterProcessOptions} hook. What I have typed above is in
+addition to any code which might be in those hooks anyway; don't
+remove anything unless you've got a good reason---who knows what might
+go wrong?
+
+
+
+
+\end{document}
+
+
+
+