NAME
groff_mom - groff “mom” macros; “mom” is a “roff” language, part of “groff”SYNOPSIS
[-Tps [pdfroff-option ...]] [groff-option ...] file ... -mom [option ...] file ... -m mom [option ...] file ...CALLING MOM
mom is a macro set for groff, designed primarily to format documents for PDF and PostScript output. mom provides two categories of macros: macros for typesetting, and macros for document processing. The typesetting macros provide access to groff's typesetting capabilities in ways that are simpler to master than groff's primitives. The document processing macros provide highly customizable markup tags that allow the user to design and output professional-looking documents with a minimum of typesetting intervention. Files processed with pdfmom(1) with or without the -Tps option, produce PDF documents. The documents include a PDF outline that appears in the ‘Contents’ panel of document viewers, and may contain clickable internal and external links. When -Tps is absent, groff's native PDF driver, gropdf, is used to generate the output. When given, the output is still PDF, but processing is passed over to pdfroff, which uses groff's PostScript driver, grops. Not all PDF features are available when -Tps is given; its primary use is to allow processing of files with embedded PostScript images. Files processed with groff -mom (or -m mom) produce PostScript output by default. mom comes with her own very complete documentation in HTML format. A separate PDF manual, Producing PDFs with groff and mom, covers full mom or PDF usage.FILES
- /usr/share/groff/1.22.4/tmac/om.tmac
- – the main macro file /usr/share/groff/1.22.4/tmac/mom.tmac – a wrapper file that calls om.tmac directly.
- /usr/share/doc/groff-base/html/mom/toc.html
- – entry point to the HTML documentation
- /usr/share/doc/groff-base/pdf/mom-pdf.pdf
- – the PDF manual, Producing PDFs with groff and mom
- /usr/share/doc/groff-base/examples/mom/*.mom
- – example files using mom
DOCUMENTATION IN ALPHABETICAL ORDER
This part of the man page contains information just as in groff(7), mom macros and mom escape sequences in alphabetical order. The logical order of mom macros and mom escape sequences is very well documented in- /usr/share/doc/groff-base/html/mom/toc.html
- – entry point to the HTML documentation
QUICK REFERENCE
Quick Reference of Inline Escape Sequences in alphabetical Order
- begin using an initialized colour inline
- move backwards in a line
- \*[BOLDER]
- invoke pseudo bold inline (related to macro .SETBOLDER)
- \*[BOLDERX]
- off pseudo bold inline (related to macro .SETBOLDER)
- move characters pairs closer together inline (related to macro
- .KERN)
- \*[COND]
- invoke pseudo condensing inline (related to macro .CONDENSE)
- \*[CONDX]
- off pseudo condensing inline (related to macro .CONDENSE)
- pseudo-condensed superscript
- temporarily move downwards in a line
- \*[EN-MARK]
- mark initial line of a range of line numbers (for use with line numbered endnotes)
- \*[EXT]
- invoke pseudo extending inline (related to macro .EXTEND)
- \*[EXTX]
- off pseudo condensing inline (related to macro .EXTEND)
- pseudo extended superscript
- move characters pairs further apart inline (related to macro
- .KERN)
- move forward in a line
- \*[LEADER]
- insert leaders at the end of a line
- \*[RULE]
- draw a full measure rule
- change the point size inline (related to macro
- .PT_SIZE)
- \*[SLANT]
- invoke pseudo italic inline (related to macro .SETSLANT)
- \*[SLANTX]
- off pseudo italic inline (related to macro .SETSLANT)
- string tabs (mark tab positions inline)
- superscript
- \*[TB+]
- inline escape for .TN (Tab Next)
- invoke underlining inline (fixed width fonts only)
- temporarily move upwards in a line
Quick Reference of Macros in alphabetical Order
- .AUTOLEAD
- set the linespacing relative to the point size
- .B_MARGIN
- set a bottom margin
- .BR
- break a justified line
- .CENTER
- set line-by-line quad centre
- .CONDENSE
- set the amount to pseudo condense
- .EL
- break a line without advancing on the page
- .EXTEND
- set the amount to pseudo extend
- .FALLBACK_FONT
- establish a fallback font (for missing fonts)
- .FAM
- alias to .FAMILY
- .FAMILY <family>
- set the family type
- .FT
- set the font style (roman, italic, etc.)
- .HI [ <measure> ]
- hanging indent
- .HY
- automatic hyphenation on/off
- .HY_SET
- set automatic hyphenation parameters
- .IB [ <left measure> <right measure> ]
- indent both
- .IBX [ CLEAR ]
- exit indent both
- .IL [ <measure> ]
- indent left
- .ILX [ CLEAR ]
- exit indent left
- .IQ [ CLEAR ]
- quit any/all indents
- .IR [ <measure> ]
- indent right
- .IRX [ CLEAR ]
- exit indent right
- .JUSTIFY
- justify text to both margins
- .KERN
- automatic character pair kerning on/off
- .L_MARGIN
- set a left margin (page offset)
- .LEFT
- set line-by-line quad left
- .LL
- set a line length
- .LS
- set a linespacing (leading)
- .PAGE
- set explicit page dimensions and margins
- .PAGEWIDTH
- set a custom page width
- .PAGELENGTH
- set a custom page length
- .PAPER <paper_type>
- set common paper sizes (letter, A4, etc)
- .PT_SIZE
- set the point size
- .QUAD
- "justify" text left, centre, or right
- .R_MARGIN
- set a right margin
- .RIGHT
- set line-by-line quad right
- .SETBOLDER
- set the amount of emboldening
- .SETSLANT
- set the degree of slant
- .SPREAD
- force justify a line
- .SS
- set the sentence space size
- .T_MARGIN
- set a top margin
- .TI [ <measure> ]
- temporary left indent
- .WS
- set the minimum word space size
DOCUMENTATION OF DETAILS
Details of Inline Escape Sequences in alphabetical Order
- begin using an initialized colour inline
- move wards in a line
- \*[BOLDER]
- \*[BOLDERX] Emboldening on/off
\*[BOLDER] begins emboldening type. \*[BOLDERX] turns the feature
off. Both are inline escapes, therefore they should not appear as separate
lines, but rather be embedded in text lines, like this:
Alternatively, if you wanted the whole line emboldened, you should do
Once \*[BOLDER] is invoked, it remains in effect until turned off.
Note: If you're using the document processing macros with .PRINTSTYLE
TYPEWRITE, mom ignores \*[BOLDER] requests.
- move characters pairs closer together inline (related to macro
- .KERN)
- \*[COND]
- \*[CONDX] Pseudo-condensing on/off
\*[COND] begins pseudo-condensing type. \*[CONDX] turns the
feature off. Both are inline escapes, therefore they should not appear as
separate lines, but rather be embedded in text lines, like this:
\*[COND] remains in effect until you turn it off with \*[CONDX].
IMPORTANT: You must turn \*[COND] off before making any changes to the
point size of your type, either via the .PT_SIZE macro or with the
\s inline escape. If you wish the new point size to be
pseudo-condensed, simply reinvoke \*[COND] afterwards. Equally,
\*[COND] must be turned off before changing the condense percentage
with .CONDENSE.
Note: If you're using the document processing macros with .PRINTSTYLE
TYPEWRITE, mom ignores \*[COND] requests.
- pseudo-condensed superscript
- temporarily move downwards in a line
- \*[EN-MARK]
- mark initial line of a range of line numbers (for use with line numbered endnotes)
- \*[EXT]
- \*[EXTX] Pseudo-extending on/off
\*[EXT] begins pseudo-extending type. \*[EXTX] turns the feature
off. Both are inline escapes, therefore they should not appear as separate
lines, but rather be embedded in text lines, like this:
\*[EXT] remains in effect until you turn it off with \*[EXTX].
IMPORTANT: You must turn \*[EXT] off before making any changes to the
point size of your type, either via the .PT_SIZE macro or with the
\s inline escape. If you wish the new point size to be
pseudo-extended, simply reinvoke \*[EXT] afterwards. Equally,
\*[EXT] must be turned off before changing the extend percentage with
.EXTEND.
Note: If you are using the document processing macros with .PRINTSTYLE
TYPEWRITE, mom ignores \*[EXT] requests.
- pseudo extended superscript
- move characters pairs further apart inline (related to macro
- .KERN)
- move forward in a line
- \*[LEADER]
- insert leaders at the end of a line
- \*[RULE]
- draw a full measure rule
- change the point size inline (related to macro
- .PT_SIZE)
- \*[SLANT]
- \*[SLANTX] Pseudo italic on/off
\*[SLANT] begins pseudo-italicizing type. \*[SLANTX]
turns the feature off. Both are inline escapes, therefore they
should not appear as separate lines, but rather be embedded in text lines,
like this:
Alternatively, if you wanted the whole line pseudo-italicized, you'd do
Once \*[SLANT] is invoked, it remains in effect until turned off.
Note: If you're using the document processing macros with .PRINTSTYLE
TYPEWRITE, mom underlines pseudo-italics by default. To change this
behaviour, use the special macro .SLANT_MEANS_SLANT.
- Mark positions of string tabs
The quad direction must be LEFT or JUSTIFY (see
.QUAD and .JUSTIFY) or the no-fill mode set to
LEFT in order for these inlines to function properly. Please see
IMPORTANT, below.
String tabs need to be marked off with inline escapes before being set up with
the .ST macro. Any input line may contain string tab markers.
<number>, above, means the numeric identifier of the tab.
The following shows a sample input line with string tab markers.
String tab 1 begins at the start of the line and ends after the word
time. String tab 2 starts at good and ends after
men. Inline escapes (e.g. font or point size
changes, or horizontal movements, including padding) are taken into
account when mom determines the position and length of
string tabs.
Up to nineteen string tabs may be marked (not necessarily all on the same line,
of course), and they must be numbered between 1 and 19.
Once string tabs have been marked in input lines, they have to be set
with .ST, after which they may be called, by number, with .TAB.
Note: Lines with string tabs marked off in them are normal input lines, i.e.
they get printed, just like any input line. If you want to set up string tabs
without the line printing, use the .SILENT macro.
IMPORTANT: Owing to the way groff processes input lines and turns
them into output lines, it is not possible for mom to guess the
correct starting position of string tabs marked off in lines that are centered
or set flush right.
Equally, she cannot guess the starting position if a line is fully justified and
broken with .SPREAD.
In other words, in order to use string tabs, LEFT must be active, or, if
.QUAD LEFT or JUSTIFY are active, the line on which the
string tabs are marked must be broken manually with .BR
(but not .SPREAD).
To circumvent this behaviour, I recommend using the PAD to set up string
tabs in centered or flush right lines. Say, for example, you want to use a
string tab to underscore the text of a centered line with a
rule. Rather than this,
you should do:
.CENTER \*[ST1]A line of text\*[ST1X]\c .EL .ST 1 .TAB 1 .PT_SIZE 24 .ALD 3p \*[RULE] .RLD 3p .TQ
.QUAD CENTER .PAD "#\*[ST1]A line of text\*[ST1X]#" .EL .ST 1 .TAB 1 .PT_SIZE 24 .ALD 3p \*[RULE] \" Note that you can't use \*[UP] or \*[DOWN] with \*[RULE] .RLD 3p .TQ
- superscript
- \*[TB+]
- Inline escape for .TN (Tab Next)
- invoke underlining inline (fixed width fonts only)
- temporarily move upwards in a line
Details of Macros in alphabetical Order
- .AUTOLEAD
- set the linespacing relative to the point size
- .B_MARGIN <bottom margin>
- Bottom Margin
Requires a unit of measure
.B_MARGIN sets a nominal position at the bottom of the page beyond which
you don't want your type to go. When the bottom margin is reached, mom
starts a new page. .B_MARGIN requires a unit of measure. Decimal
fractions are allowed. To set a nominal bottom margin of 3/4 inch, enter
Obviously, if you haven't spaced the type on your pages so that the last lines
fall perfectly at the bottom margin, the margin will vary from page to page.
Usually, but not always, the last line of type that fits on a page before the
bottom margin causes mom to start a new page.
Occasionally, owing to a peculiarity in groff, an extra line will fall
below the nominal bottom margin. If you're using the document processing
macros, this is unlikely to happen; the document processing macros are very
hard-nosed about aligning bottom margins.
Note: The meaning of .B_MARGIN is slightly different when you're using
the document processing macros.
.B_MARGIN .75i
- .FALLBACK_FONT <fallback font> [ ABORT | WARN ]
- Fallback Font
In the event that you pass an invalid argument to .FAMILY (i.e. a
non-existent family), mom, by default, uses the fallback
font, Courier Medium Roman (CR), in order to continue
processing your file.
If you'd prefer another fallback font, pass .FALLBACK_FONT the
full family+font name of the font you'd like. For example, if
you'd rather the fallback font were Times Roman Medium Roman,
would do the trick.
Mom issues a warning whenever a font style set with .FT
does not exist, either because you haven't registered the style or because the
font style does not exist in the current family set with
.FAMILY. By default, mom then aborts, which allows you to
correct the problem.
If you'd prefer that mom not abort on non-existent fonts, but
rather continue processing using a fallback font, you can pass
.FALLBACK_FONT the argument WARN, either by itself, or in
conjunction with your chosen fallback font.
Some examples of invoking .FALLBACK_FONT:
.FALLBACK_FONT TR
- .FALLBACK_FONT WARN
- mom will issue a warning whenever you try to access a non-existent font but will continue processing your file with the default fallback font, Courier Medium Roman.
- .FALLBACK_FONT TR WARN
- mom will issue a warning whenever you try to access a non-existent font but will continue processing your file with a fallback font of Times Roman Medium Roman; additionally, TR will be the fallback font whenever you try to access a family that does not exist.
- .FALLBACK_FONT TR ABORT
- mom will abort whenever you try to access a non-existent font, and will use the fallback font TR whenever you try to access a family that does not exist. If, for some reason, you want to revert to ABORT, just enter ".FALLBACK_FONT ABORT" and mom will once again abort on font errors.
- .FAM <family>
- Type Family, alias of .FAMILY
- .FAMILY <family>
- Type Family, alias .FAM
.FAMILY takes one argument: the name of the family you want.
Groff comes with a small set of basic families, each identified by a
1-, 2- or 3-letter mnemonic. The standard families are:
The argument you pass to .FAMILY is the identifier at left, above. For
example, if you want Helvetica, enter
Note: The font macro (.FT) lets you specify both the type family
and the desired font with a single macro. While this saves a few keystrokes, I
recommend using .FAMILY for family, and .FT for
font, except where doing so is genuinely inconvenient. ZCM, for
example, only exists in one style: Italic (I).
Therefore,
makes more sense than setting the family to ZCM, then setting the
font to I.
Additional note: If you are running a version of groff lower than 1.19.2, you
must follow all .FAMILY requests with a .FT request, otherwise
mom will set all type up to the next .FT request in the fallback
font.
If you are running a version of groff greater than or equal to 1.19.2, when you
invoke the .FAMILY macro, mom remembers the font style
(Roman, Italic, etc) currently in use (if the font style
exists in the new family) and will continue to use the same font style
in the new family. For example:
However, if the font style does not exist in the new family, mom will set
all subsequent type in the fallback font (by default, Courier Medium
Roman) until she encounters a .FT request that's valid for the
family.
For example, assuming you don't have the font Medium Condensed Roman
(mom extension CD) in the Helvetica family:
In the above example, you must follow .FAMILY H with a .FT request
that's valid for Helvetica.
Please see the Appendices, Adding fonts to groff, for information
on adding fonts and families to groff, as well as to see a list of the
extensions mom provides to groff's basic R, I,
B, BI styles.
Suggestion: When adding families to groff, I recommend following
the established standard for the naming families and fonts. For example, if
you add the Garamond family, name the font files
GARAMOND then becomes a valid family name you can pass to
.FAMILY. (You could, of course, shorten GARAMOND to just
G, or GD.) R, I, B, and BI after
GARAMOND are the roman, italic, bold and
bold-italic fonts respectively.
A = Avant Garde BM = Bookman H = Helvetica HN = Helvetica Narrow N = New Century Schoolbook P = Palatino T = Times Roman ZCM = Zapf Chancery
.FAMILY H
.FT ZCMI
.FAMILY BM \" Bookman family .FT I \" Medium Italic <some text> \" Bookman Medium Italic .FAMILY H \" Helvetica family <more text> \" Helvetica Medium Italic
.FAMILY UN \" Univers family .FT CD \" Medium Condensed <some text> \" Univers Medium Condensed .FAMILY H \" Helvetica family <more text> \" Courier Medium Roman!
GARAMONDR GARAMONDI GARAMONDB GARAMONDBI
- .FONT R | B | BI | <any other valid font style>
- Alias to .FT
- .FT R | B | BI | <any other valid font style>
- Set font
By default, groff permits .FT to take one of four possible
arguments specifying the desired font:
For example, if your family is Helvetica, entering
will give you the Helvetica bold font. If your family were
Palatino, you'd get the Palatino bold font.
Mom considerably extends the range of arguments you can pass to
.FT, making it more convenient to add and access fonts of differing
weights and shapes within the same family.
Have a look here for a list of the weight/style arguments mom allows. Be
aware, though, that you must have the fonts, correctly installed and named, in
order to use the arguments. (See Adding fonts to groff for instructions
and information.) Please also read the ADDITIONAL NOTE found in the
description of the .FAMILY macro.
How mom reacts to an invalid argument to .FT depends on which
version of groff you're using. If your groff version is greater than or
equal to 1.19.2, mom will issue a warning and, depending on how you've
set up the fallback font, either continue processing using the fallback font,
or abort (allowing you to correct the problem). If your groff version
is less than 1.19.2, mom will silently continue processing, using
either the fallback font or the font that was in effect prior to the invalid
.FT call.
.FT will also accept, as an argument, a full family and
font name.
For example,
will set subsequent type in Helvetica Bold.
However, I strongly recommend keeping family and font separate
except where doing so is genuinely inconvenient.
For inline control of fonts, see Inline Escapes, font
control.
R = (Medium) Roman I = (Medium) Italic B = Bold (Roman) BI = Bold Italic
.FT B
.FT HB
- .HI [ <measure> ]
- Hanging indent — the optional argument requires a unit of measure.
A hanging indent looks like this:
The first line of text hangs outside the left margin.
In order to use hanging indents, you must first have a left indent
active (set with either .IL or .IB). Mom will not hang
text outside the left margin set with .L_MARGIN or outside the
left margin of a tab.
The first time you invoke .HI, you must give it a measure. If you
want the first line of a paragraph to hang by, say, 1 pica, do
Subsequent invocations of .HI do not require you to supply a
measure; mom keeps track of the last measure you gave it.
Generally speaking, you should invoke .HI immediately prior to the line
you want hung (i.e. without any intervening control lines). And because
hanging indents affect only one line, there's no need to turn them off.
IMPORTANT: Unlike IL, IR and IB, measures given to
.HI are NOT additive. Each time you pass a measure to .HI , the
measure is treated literally. Recipe: A numbered list using hanging
indents
Note: mom has macros for setting lists. This recipe exists to
demonstrate the use of hanging indents only.
First, we invoke a left indent with a measure equal to the width of 2 figures
spaces plus a period (using the \w inline escape). At this point, the left
indent is active; text afterwards would normally be indented. However, we
invoke a hanging indent of exactly the same width, which hangs the first line
(and first line only!) to the left of the indent by the same distance (in this
case, that means “out to the left margin”). Because we begin the
first line with a number, a period, and a figure space, the actual text
(The most important point...) starts at exactly the same spot as the
indented lines that follow.
Notice that subsequent invocations of .HI don't require a measure
to be given.
Paste the example above into a file and preview it with
to see hanging indents in action.
The thousand injuries of Fortunato I had borne as best I could, but when he ventured upon insult, I vowed revenge. You who so well know the nature of my soul will not suppose, however, that I gave utterance to a threat, at length I would be avenged...
.IL 1P .HI 1P
.PAGE 8.5i 11i 1i 1i 1i 1i .FAMILY T .FT R .PT_SIZE 12 .LS 14 .JUSTIFY .KERN .SS 0 .IL \w'\0\0.' .HI \w'\0\0.' 1.\0The most important point to be considered is whether the answer to the meaning of Life, the Universe, and Everything really is 42. We have no-one's word on the subject except Mr. Adams'. .HI 2.\0If the answer to the meaning of Life, the Universe, and Everything is indeed 42, what impact does this have on the politics of representation? 42 is, after all not a prime number. Are we to infer that prime numbers don't deserve equal rights and equal access in the universe? .HI 3.\0If 42 is deemed non-exclusionary, how do we present it as the answer and, at the same time, forestall debate on its exclusionary implications?
pdfmom filename.mom | ps2pdf - filename.pdf
- .IB [ <left measure> <right measure> ]
- Indent both — the optional argument requires a unit of measure
.IB allows you to set or invoke a left and a right indent at the same
time.
At its first invocation, you must supply a measure for both indents; at
subsequent invocations when you wish to supply a measure, both must be given
again. As with .IL and .IR, the measures are added to the values
previously passed to the macro. Hence, if you wish to change just one of the
values, you must give an argument of zero to the other.
A word of advice: If you need to manipulate left and right indents
separately, use a combination of .IL and .IR instead of
.IB. You'll save yourself a lot of grief.
A minus sign may be prepended to the arguments to subtract from their
current values. The \w inline escape may be used to specify text-dependent
measures, in which case no unit of measure is required. For example,
left indents text by the width of the word margarine and right indents by
the width of jello.
Like .IL and .IR, .IB with no argument indents by its last
active values. See the brief explanation of how mom handles indents for more
details.
Note: Calling a tab (with .TAB <n>) automatically
cancels any active indents.
Additional note: Invoking .IB automatically turns off .IL
and .IR.
.IB \w'margarine' \w'jello'
- .IL [ <measure> ]
- Indent left — the optional argument requires a unit of measure
.IL indents text from the left margin of the page, or if you're in a
tab, from the left edge of the tab. Once IL is on, the
left indent is applied uniformly to every subsequent line of text, even
if you change the line length.
The first time you invoke .IL, you must give it a measure. Subsequent
invocations with a measure add to the previous measure. A minus sign may be
prepended to the argument to subtract from the current measure. The \w
inline escape may be used to specify a text-dependent measure, in which case
no unit of measure is required. For example,
indents text by the width of the word margarine.
With no argument, .IL indents by its last active value. See the brief
explanation of how mom handles indents for more details.
Note: Calling a tab (with .TAB <n>) automatically
cancels any active indents.
Additional note: Invoking .IL automatically turns off
IB.
.IL \w'margarine'
- .IQ [ <measure> ]
- IQ — quit any/all indents
IMPORTANT NOTE: The original macro for quitting all indents was
.IX. This usage has been deprecated in favour of IQ. .IX
will continue to behave as before, but mom will issue a warning to
stderr indicating that you should update your documents.
As a consequence of this change, .ILX, .IRX and .IBX may
now also be invoked as .ILQ, .IRQ and .IBQ. Both forms
are acceptable.
Without an argument, the macros to quit indents merely restore your original
margins and line length. The measures stored in the indent macros themselves
are saved so you can call them again without having to supply a measure.
If you pass these macros the optional argument CLEAR, they not only
restore your original left margin and line length, but also clear any values
associated with a particular indent style. The next time you need an indent of
the same style, you have to supply a measure again.
.IQ CLEAR, as you'd suspect, quits and clears the values for all indent
styles at once.
- .IR [ <measure> ]
- Indent right — the optional argument requires a unit of measure
.IR indents text from the right margin of the page, or if you're
in a tab, from the end of the tab.
The first time you invoke .IR, you must give it a measure. Subsequent
invocations with a measure add to the previous indent measure. A minus
sign may be prepended to the argument to subtract from the current indent
measure. The \w inline escape may be used to specify a text-dependent measure,
in which case no unit of measure is required. For example,
indents text by the width of the word jello.
With no argument, .IR indents by its last active value. See the brief
explanation of how mom handles indents for more details.
Note: Calling a tab (with .TAB <n>) automatically
cancels any active indents.
Additional note: Invoking .IR automatically turns off
IB.
.IR \w'jello'
- .L_MARGIN <left margin>
- Left Margin
L_MARGIN establishes the distance from the left edge of the printer sheet at
which you want your type to start. It may be used any time, and remains in
effect until you enter a new value.
Left indents and tabs are calculated from the value you pass to
.L_MARGIN, hence it's always a good idea to invoke it before starting
any serious typesetting. A unit of measure is required. Decimal fractions are
allowed. Therefore, to set the left margin at 3 picas (1/2 inch), you'd enter
either
or
If you use the macros .PAGE, .PAGEWIDTH or .PAPER without
invoking .L_MARGIN (either before or afterwards), mom
automatically sets .L_MARGIN to 1 inch.
Note: .L_MARGIN behaves in a special way when you're using the document
processing macros.
.L_MARGIN 3P
.L_MARGIN .5i
- .MCO
- Begin multi-column setting.
.MCO (Multi-Column On) is the macro you use to begin
multi-column setting. It marks the current baseline as the top of your
columns, for use later with .MCR. See the introduction to columns for
an explanation of multi-columns and some sample input.
Note: Do not confuse .MCO with the .COLUMNS macro in the
document processing macros.
- .MCR
- Once you've turned multi-columns on (with .MCO), .MCR, at any time, returns you to the top of your columns.
- .MCX [ <distance to advance below longest column> ]
- Optional argument requires a unit of measure.
.MCX takes you out of any tab you were in (by silently invoking
.TQ) and advances to the bottom of the longest column.
Without an argument, .MCX advances 1 linespace below the longest
column.
Linespace, in this instance, is the leading in effect at the moment .MCX
is invoked.
If you pass the <distance> argument to .MCX, it advances
1 linespace below the longest column (see above) PLUS the
distance specified by the argument. The argument requires a unit of measure;
therefore, to advance an extra 6 points below where .MCX would normally
place you, you'd enter
Note: If you wish to advance a precise distance below the baseline of the
longest column, use .MCX with an argument of 0 (zero; no unit
of measure required) in conjunction with the .ALD macro, like this:
The above advances to precisely 24 points below the baseline of the
longest column.
.MCX 6p
.MCX 0 .ALD 24p
- .NEWPAGE
Whenever you want to start a new page, use .NEWPAGE, by itself with no
argument. Mom will finish up processing the current page and move you
to the top of a new one (subject to the top margin set with
.T_MARGIN).
- .PAGE <width> [ <length> [ <lm> [ <rm> [ <tm> [ <bm> ] ] ] ] ]
All arguments require a unit of measure
IMPORTANT: If you're using the document processing macros, .PAGE
must come after .START. Otherwise, it should go at the top of a
document, prior to any text. And remember, when you're using the document
processing macros, top margin and bottom margin mean something slightly
different than when you're using just the typesetting macros (see Top and
bottom margins in document processing).
.PAGE lets you establish paper dimensions and page margins with a single
macro. The only required argument is page width. The rest are optional, but
they must appear in order and you can't skip over any. <lm>,
<rm>, <tm> and <bm> refer to the left,
right, top and bottom margins respectively.
Assuming your page dimensions are 11 inches by 17 inches, and that's all you
want to set, enter
If you want to set the left margin as well, say, at 1 inch, PAGE would
look like this:
Now suppose you also want to set the top margin, say, at 1–1/2 inches.
<tm> comes after <rm> in the optional arguments, but
you can't skip over any arguments, therefore to set the top margin, you must
also give a right margin. The .PAGE macro would look like this:
Clearly, .PAGE is best used when you want a convenient way to tell
mom just the dimensions of your printer sheet (width and length), or
when you want to tell her everything about the page (dimensions and all the
margins), for example
This sets up an 8½ by 11 inch page with margins of 45 points (5/8-inch)
all around.
Additionally, if you invoke .PAGE with a top margin argument, any macros
you invoke after .PAGE will almost certainly move the baseline of the
first line of text down by one linespace. To compensate, do
immediately before entering any text, or, if it's feasible, make .PAGE
the last macro you invoke prior to entering text.
Please read the Important note on page dimensions and papersize for
information on ensuring groff respects your .PAGE dimensions and
margins.
.PAGE 11i 17i
.PAGE 11i 17i 1i
.PAGE 11i 17i 1i 1i 1.5i | | required right---+ +---top margin margin
.PAGE 8.5i 11i 45p 45p 45p 45p
.RLD 1v
- .PAGELENGTH <length of printer sheet>
- tells mom how long your printer sheet is. It works just like .PAGEWIDTH.
Therefore, to tell mom your printer sheet is 11 inches long, you enter
Please read the important note on page dimensions and papersize for information
on ensuring groff respects your PAGELENGTH.
.PAGELENGTH 11i
- .PAGEWIDTH <width of printer sheet>
The argument to .PAGEWIDTH is the width of your printer sheet.
.PAGEWIDTH requires a unit of measure. Decimal fractions are allowed.
Hence, to tell mom that the width of your printer sheet is 8½
inches, you enter
Please read the Important note on page dimensions and papersize for information
on ensuring groff respects your PAGEWIDTH.
.PAGEWIDTH 8.5i
- .PAPER <paper type>
- provides a convenient way to set the page dimensions for some common printer sheet sizes. The argument <paper type> can be one of: LETTER, LEGAL, STATEMENT, TABLOID, LEDGER, FOLIO, QUARTO, EXECUTIVE, 10x14, A3, A4, A5, B4, B5.
- .PRINTSTYLE
- .PT_SIZE <size of type in points>
- Point size of type, does not require a unit of measure.
.PT_SIZE (Point Size) takes one argument: the size of type
in points. Unlike most other macros that establish the size or
measure of something, .PT_SIZE does not require that you supply
a unit of measure since it's a near universal convention that type
size is measured in points. Therefore, to change the type
size to, say, 11 points, enter
Point sizes may be fractional (e.g. 10.25 or 12.5).
You can prepend a plus or a minus sign to the argument to
.PT_SIZE, in which case the point size will be changed by
+ or - the original value. For example, if the point size
is 12 , and you want 14 , you can do
then later reset it to 12 with
The size of type can also be changed inline.
Note: It is unfortunate that the pic preprocessor has already
taken the name, PS, and thus mom's macro for setting point sizes
can't use it. However, if you aren't using pic, you might want to alias
.PT_SIZE as .PS, since there'd be no conflict. For example
would allow you to set point sizes with .PS.
.PT_SIZE 11
.PT_SIZE +2
.PT_SIZE -2
.ALIAS PS PT_SIZE
- .R_MARGIN <right margin>
- Right Margin
Requires a unit of measure.
IMPORTANT: .R_MARGIN, if used, must come after .PAPER,
.PAGEWIDTH, .L_MARGIN, and/or .PAGE (if a right margin
isn't given to PAGE). The reason is that .R_MARGIN calculates line
length from the overall page dimensions and the left margin.
Obviously, it can't make the calculation if it doesn't know the page width and
the left margin.
.R_MARGIN establishes the amount of space you want between the end of
typeset lines and the right hand edge of the printer sheet. In other words, it
sets the line length. .R_MARGIN requires a unit of measure. Decimal
fractions are allowed.
The line length macro (LL) can be used in place of .R_MARGIN. In either
case, the last one invoked sets the line length. The choice of which to use is
up to you. In some instances, you may find it easier to think of a section of
type as having a right margin. In others, giving a line length may make more
sense.
For example, if you're setting a page of type you know should have 6-pica
margins left and right, it makes sense to enter a left and right margin, like
this:
That way, you don't have to worry about calculating the line length. On the
other hand, if you know the line length for a patch of type should be 17 picas
and 3 points, entering the line length with LL is much easier than calculating
the right margin, e.g.
If you use the macros .PAGE, .PAGEWIDTH or PAPER without
invoking .R_MARGIN afterwards, mom automatically sets
.R_MARGIN to 1 inch. If you set a line length after these macros
(with .LL), the line length calculated by .R_MARGIN is, of
course, overridden.
Note: .R_MARGIN behaves in a special way when you're using the document
processing macros.
.L_MARGIN 6P .R_MARGIN 6P
.LL 17P+3p
After string tabs have been marked off on an input line (see
\*[ST]...\*[STX]), you need to set them by giving them a
direction and, optionally, the QUAD argument.
In this respect, .ST is like .TAB_SET except that you don't have
to give .ST an indent or a line length (that's already taken care of,
inline, by \*[ST]...\*[STX]).
If you want string tab 1 to be left, enter
If you want it to be left and filled, enter
If you want it to be justified, enter
.ST 1 L
.ST 1 L QUAD
.ST 1 J
- .TAB <tab number>
- After tabs have been defined (either with .TAB_SET or .ST), .TAB moves to whatever tab number you pass it as an argument.
For example,
moves you to tab 3.
Note: .TAB breaks the line preceding it and advances 1 linespace. Hence,
produces, on output
If you want the tabs to line up, use .TN (Tab Next) or, more
conveniently, the inline escape \*[TB+]:
which produces
If the text in your tabs runs to several lines, and you want the first lines of
each tab to align, you must use the multi-column macros.
Additional note: Any indents in effect prior to calling a tab are
automatically turned off by TAB. If you were happily zipping down the
page with a left indent of 2 picas turned on, and you call a tab
whose indent from the left margin is 6 picas, your new distance from
the left margin will be 6 picas, not I 6 picas plus the 2 pica
indent.
Tabs are not by nature columnar, which is to say that if the text inside
a tab runs to several lines, calling another tab does not
automatically move to the baseline of the first line in the previous
tab. To demonstrate:
produces, on output
.TAB 3
.TAB 1 A line of text in tab 1. .TAB 2 A line of text in tab 2.
A line of text in tab 1. A line of text in tab 2.
.TAB 1 A line of text in tab 1.\*[TB+] A line of text in tab 2.
A line of text in tab 1. A line of text in tab 2.
TAB 1 Carrots Potatoes Broccoli .TAB 2 $1.99/5 lbs $0.25/lb $0.99/bunch
Carrots Potatoes Broccoli $1.99/5 lbs $0.25/lb $0.99/bunch
- .TB <tab number>
- Alias to .TAB
- .TI [ <measure> ]
- Temporary left indent — the optional argument requires a unit of measure
A temporary indent is one that applies only to the first line of text that comes
after it. Its chief use is indenting the first line of paragraphs.
(Mom's .PP macro, for example, uses a temporary indent.)
The first time you invoke .TI, you must give it a measure. If you want to
indent the first line of a paragraph by, say, 2 ems, do
Subsequent invocations of .TI do not require you to supply a measure;
mom keeps track of the last measure you gave it.
Because temporary indents are temporary, there's no need to turn them
off.
IMPORTANT: Unlike .IL, .IR and IB, measures given to
.TI are NOT additive. In the following example, the second ".TI
2P" is exactly 2 picas.
.TI 2m
.TI 1P The beginning of a paragraph... .TI 2P The beginning of another paragraph...
- .TN
- Tab Next
Inline escape \*[TB+]
TN moves over to the next tab in numeric sequence (tab n+1)
without advancing on the page. See the NOTE in the description of the
.TAB macro for an example of how TN works.
In tabs that aren't given the QUAD argument when they're set up
with .TAB_SET or ST, you must terminate the line preceding
.TN with the \c inline escape. Conversely, if you did give a
QUAD argument to .TAB_SET or ST, the \c must not be
used.
If you find remembering whether to put in the \c bothersome, you may
prefer to use the inline escape alternative to .TN, \*[TB+],
which works consistently regardless of the fill mode.
Note: You must put text in the input line immediately after .TN.
Stacking of .TN's is not allowed. In other words, you cannot do
The above example, assuming tabs numbered from 1 to 4,
should be entered
\& is a zero-width, non-printing character that groff
recognizes as valid input, hence meets the requirement for input text
following .TN.
.TAB 1 Some text\c .TN Some more text\c .TN .TN Yet more text
.TAB 1 Some text\c .TN Some more text\c .TN \&\c .TN Yet more text
- .TQ
- TQ takes you out of whatever tab you were in, advances 1 linespace, and restores the left margin, line length, quad direction and fill mode that were in effect prior to invoking any tabs.
- .T_MARGIN <top margin>
- Top margin
Requires a unit of measure
.T_MARGIN establishes the distance from the top of the printer sheet at
which you want your type to start. It requires a unit of measure, and decimal
fractions are allowed. To set a top margin of 2½ centimetres, you'd
enter
.T_MARGIN calculates the vertical position of the first line of type on a
page by treating the top edge of the printer sheet as a baseline. Therefore,
puts the baseline of the first line of type 1½ inches beneath the top of
the page.
Note: .T_MARGIN means something slightly different when you're using the
document processing macros. See Top and bottom margins in document processing
for an explanation.
IMPORTANT: .T_MARGIN does two things: it establishes the top margin for
pages that come after it and it moves to that position on the current page.
Therefore, .T_MARGIN should only be used at the top of a file (prior to
entering text) or after NEWPAGE, like this:
.T_MARGIN 2.5c
.T_MARGIN 1.5i
.NEWPAGE .T_MARGIN 6P <text>
AUTHORS
mom was written by Peter Schaffter PDF support was provided by Deri James The alphabetical documentation of macros and escape sequences in this man page were written by the mom team.SEE ALSO
groff(1), ,- /usr/share/doc/groff-base/html/mom/toc.html
- – entry point to the HTML documentation
7 March 2023 | groff 1.22.4 |