svcadm(8)을 검색하려면 섹션에서 8 을 선택하고, 맨 페이지 이름에 svcadm을 입력하고 검색을 누른다.
groff_ms(7)
groff_ms(7) Miscellaneous Information Manual groff_ms(7)
Name
groff_ms - GNU roff manuscript macro package for formatting documents
Synopsis
groff -ms [option ...] [file ...]
groff -m ms [option ...] [file ...]
Description
The GNU implementation of the ms macro package is part of the groff
document formatting system. The ms package is suitable for the compo‐
sition of letters, memoranda, reports, and books.
These groff macros support cover page and table of contents generation,
automatically numbered headings, several paragraph styles, a variety of
text styling options, footnotes, and multi-column page layouts. ms
supports the gtbl(1), eqn(1), pic(1), and refer(1) preprocessors for
inclusion of tables, mathematical equations, diagrams, and standardized
bibliographic citations.
This implementation is mostly compatible with the documented interface
and behavior of AT&T Unix Version 7 ms. Many extensions from 4.2BSD
(Berkeley) and Tenth Edition Research Unix have been recreated.
Usage
The ms macro package expects a certain amount of structure: a well-
formed document contains at least one paragraphing or heading macro
call. To compose a simple document from scratch, begin it by calling
.LP or .PP. Longer documents have a structure as follows.
Document type
Calling the RP macro at the beginning of your document puts the
document description (see below) on a cover page. Otherwise, ms
places this information on the first page, followed immediately
by the body text. Some document types found in other ms imple‐
mentations are specific to AT&T or Berkeley, and are not sup‐
ported in groff ms.
Format and layout
By setting registers and strings, you can configure your docu‐
ment's typeface, margins, spacing, headers and footers, and
footnote arrangement. See subsection “Document control set‐
tings” below.
Document description
A document description consists of any of: a title, one or more
authors' names and affiliated institutions, an abstract, and a
date or other identifier. See subsection “Document description
macros” below.
Body text
The main matter of your document follows its description (if
any). ms supports highly structured text consisting of para‐
graphs interspersed with multi-level headings (chapters, sec‐
tions, subsections, and so forth) and augmented by lists, foot‐
notes, tables, diagrams, and similar material. The preponder‐
ance of subsections below covers these matters.
Table of contents
Macros enable the collection of entries for a table of contents
(or index) as the material they discuss appears in the document.
You then call a macro to emit the table of contents at the end
of your document. The table of contents must necessarily follow
the rest of the text since GNU troff is a single-pass formatter;
it thus cannot determine the page number of a division of the
text until it has been set and output. Since ms output was de‐
signed for the production of hard copy, the traditional proce‐
dure was to manually relocate the pages containing the table of
contents between the cover page and the body text. Today, page
resequencing is more often done in the digital domain. An index
works similarly, but because it typically needs to be sorted af‐
ter collection, its preparation requires separate processing.
Document control settings
The following tables list the document control registers, strings, and
special characters. For any parameter whose default is unsatisfactory,
define it before calling any ms macro other than RP.
cb s s s cb cb cb cb lf(CR) lx l lf(CR). Margin settings Pa‐
rameter Definition Effective Default _ \n[PO] Page offset (left
margin) next page 1i (0) \n[LL] Line length next para‐
graph 6.5i (65n) \n[LT] Title line length next paragraph 6.5i
(65n) \n[HM] Top (header) margin next page 1i \n[FM] Bottom
(footer) margin next page 1i _
cb s s s cb cb cb cb lf(CR) lx l lf(CR). Titles (headers,
footers) Parameter Definition Effective Default _ \*[LH] Left
header text next header empty \*[CH] Center header text next
header -\n[%]- \*[RH] Right header text next header empty
\*[LF] Left footer text next footer empty \*[CF] Center
footer text next footer empty \*[RF] Right footer text next
footer empty _
cb s s s cb cb cb cb lf(CR) lx l lf(CR). Text settings Parame‐
ter Definition Effective Default _ \n[PS] Point size next
paragraph 10p \n[VS] Vertical spacing (leading) next para‐
graph 12p \n[HY] Hyphenation mode next paragraph 6 \*[FAM] Font
family next paragraph T _
cb s s s cb cb cb cb lf(CR)2 lx l lf(CR). Paragraph settings
Parameter Definition Effective Default _ \n[PI] Indenta‐
tion next paragraph 5n \n[PD] Paragraph distance (spacing) next
paragraph 0.3v (1v) \n[QI] Quotation indentation next para‐
graph 5n \n[PORPHANS] # of initial lines kept next paragraph 1 _
cb s s s cb cb cb cb lf(CR) lx l lf(CR). Heading settings Para‐
meter Definition Effective Default _ \n[PSINCR] Point size in‐
crement next heading 1p \n[GROWPS] Size increase depth
limit next heading 0 \n[HORPHANS] # of following lines
kept next heading 1 \*[SN-STYLE] Numbering style (alias) next
heading \*[SN-DOT] _
\*[SN-STYLE] can alternatively be made an alias of \*[SN-NO-DOT] with
the als request.
cb s s s cb cb cb cb lf(CR) lx l lf(CR). Footnote settings Pa‐
rameter Definition Effective Default _ \n[FI] Indenta‐
tion next footnote 2n \n[FF] Format next footnote 0
\n[FPS] Point size next footnote \n[PS]-2p \n[FVS] Vertical spac‐
ing (leading) next footnote \n[FPS]+2p \n[FPD] Paragraph distance
(spacing) next footnote \n[PD]/2 \*[FR] Line length ratio spe‐
cial 11/12 _
cb s s s cb cb cb cb lf(CR) lx l lf(CR). Display settings Pa‐
rameter Definition Effective Default _ \n[DD] Display distance
(spacing) special 0.5v (1v) \n[DI] Display indentation spe‐
cial 0.5i _
cb s s s cb cb cb cb lf(CR) lx l lf(CR). Other settings Para‐
meter Definition Effective Default _ \n[MINGW] Minimum gutter
width next page 2n \n[TC-MARGIN] TOC page number margin
width next PX call \w'000' \[TC-LEADER] TOC leader charac‐
ter next PX call .\h'1m' _
For entries marked “special” in the “Effective” column, see the discus‐
sion in the applicable section below. The PO, LL, and LT register de‐
faults vary by output device and paper format; the values shown are for
typesetters using U.S. letter paper, and then terminals. See section
“Paper format” of groff(1). The PD and DD registers use the larger
value if the vertical motion quantum of the output device is too coarse
for the smaller one; usually, this is the case only for output to ter‐
minals and emulators thereof. The “gutter” affected by \n[MINGW] is
the gap between columns in multiple-column page arrangements. The
TC-MARGIN register and TC-LEADER special character affect the format‐
ting of tables of contents assembled by the XS, XA, and XE macros.
Document description macros
Define information describing the document by calling the macros below
in the order shown; .DA or .ND can be called to set the document date
(or other identifier) at any time before (a) the abstract, if present,
or (b) its information is required in a header or footer. Use of these
macros is optional, except that .TL is mandatory if any of .RP, .AU,
.AI, or .AB is called, and .AE is mandatory if .AB is called.
.RP [no-repeat-info] [no-renumber]
Use the “report” (AT&T: “released paper”) format for your docu‐
ment, creating a separate cover page. The default arrangement
is to place most of the document description (title, author
names and institutions, and abstract, but not the date) at the
top of the first page. If the optional no-repeat-info argument
is given, ms produces a cover page but does not repeat any of
its information on subsequently (but see the DA macro below re‐
garding the date). Normally, .RP sets the page number following
the cover page to 1. Specifying the optional no-renumber argu‐
ment suppresses this alteration. Optional arguments can occur
in any order. “no” is recognized as a synonym of no-repeat-info
for AT&T compatibility.
.TL Specify the document title. ms collects text on input lines
following this call into the title until reaching .AU, .AB, or a
heading or paragraphing macro call.
.AU Specify an author's name. ms collects text on input lines fol‐
lowing this call into the author's name until reaching .AI, .AB,
another .AU, or a heading or paragraphing macro call. Call it
repeatedly to specify multiple authors.
.AI Specify the preceding author's institution. An .AU call is use‐
fully followed by at most one .AI call; if there are more, the
last .AI call controls. ms collects text on input lines follow‐
ing this call into the author's institution until reaching .AU,
.AB, or a heading or paragraphing macro call.
.DA [x ...]
Typeset the current date, or any arguments x, in the center
footer, and, if .RP is also called, left-aligned at the end of
the document description on the cover page.
.ND [x ...]
Typeset the current date, or any arguments x, if .RP is also
called, left-aligned at the end of the document description on
the cover page. This is groff ms's default.
.AB [no]
Begin the abstract. ms collects text on input lines following
this call into the abstract until reaching an .AE call. By de‐
fault, ms places the word “ABSTRACT” centered and in italics
above the text of the abstract. The optional argument “no” sup‐
presses this heading.
.AE End the abstract.
Text settings
The FAM string, a GNU extension, sets the font family for body text;
the default is “T”. The PS and VS registers set the type size and ver‐
tical spacing (distance between text baselines), respectively. The
font family and type size are ignored on terminal devices. Setting
these parameters before the first call of a heading, paragraphing, or
(non-date) document description macro also applies them to headers,
footers, and (for FAM) footnotes.
The HY register defines the automatic hyphenation mode used with the hy
request. Setting \n[HY] to 0 is equivalent to using the nh request.
This is a Tenth Edition Research Unix extension.
Typographical symbols
ms provides a few strings to obtain typographical symbols not easily
entered with the keyboard. These and many others are available as spe‐
cial character escape sequences—see groff_char(7).
\*[-] Interpolate an em dash.
\*[Q]
\*[U] Interpolate typographer's quotation marks where available, and
neutral double quotes otherwise. \*[Q] is the left quote and
\*[U] the right.
Paragraphs
Paragraphing macros break, or terminate, any pending output line so
that a new paragraph can begin. Several paragraph types are available,
differing in how indentation applies to them: to left, right, or both
margins; to the first output line of the paragraph, all output lines,
or all but the first. All paragraphing macro calls cause the insertion
of vertical space in the amount stored in the PD register, except at
page or column breaks, or adjacent to displays.
The PORPHANS register defines the minimum number of initial lines of
any paragraph that must be kept together to avoid isolated lines at the
bottom of a page. If a new paragraph is started close to the bottom of
a page, and there is insufficient space to accommodate \n[PORPHANS]
lines before an automatic page break, then a page break is forced be‐
fore the start of the paragraph. This is a GNU extension.
.LP Set a paragraph without any (additional) indentation.
.PP Set a paragraph with a first-line left indentation in the amount
stored in the PI register.
.IP [marker [width]]
Set a paragraph with a left indentation. The optional marker is
not indented and is empty by default. width overrides the in‐
dentation amount in \n[PI]; its default unit is “n”. Once spec‐
ified, width applies to further .IP calls until specified again
or a heading or different paragraphing macro is called.
.QP Set a paragraph indented from both left and right margins by
\n[QI].
.QS
.QE Begin (QS) and end (QE) a region where each paragraph is in‐
dented from both margins by \n[QI]. The text between .QS and
.QE can be structured further by use of other paragraphing
macros.
.XP Set an “exdented” paragraph—one with a left indentation of
\n[PI] on every line except the first (also known as a hanging
indent). This is a Berkeley extension.
Headings
Use headings to create a hierarchical structure for your document. The
ms macros print headings in bold using the same font family and, by de‐
fault, type size as the body text. Headings are available with and
without automatic numbering. Text on input lines following the macro
call becomes the heading's title. Call a paragraphing macro to end the
heading text and start the section's content.
.NH [depth]
Set an automatically numbered heading. ms produces a numbered
heading in the form a.b.c..., to any level desired, with the
numbering of each depth increasing automatically and being reset
to zero when a more significant depth is increased. “1” is the
most significant or coarsest division of the document. Only
non-zero values are output. If depth is omitted, it is taken to
be 1. If you specify depth such that an ascending gap occurs
relative to the previous NH call—that is, you “skip a depth”, as
by “.NH 1” and then “.NH 3”, groff ms emits a warning on the
standard error stream.
.NH S heading-depth-index ...
Alternatively, you can give NH a first argument of “S”, followed
by integers to number the heading depths explicitly. Further
automatic numbering, if used, resumes using the specified in‐
dices as their predecessors. This feature is a Berkeley exten‐
sion.
After .NH is called, the assigned number is made available in the
strings SN-DOT (as it appears in a printed heading with default format‐
ting, followed by a terminating period) and SN-NO-DOT (with the termi‐
nating period omitted). These are GNU extensions.
You can control the style used to print numbered headings by defining
an appropriate alias for the string SN-STYLE. By default, \*[SN-STYLE]
is aliased to \*[SN-DOT]. If you prefer to omit the terminating period
from numbers appearing in numbered headings, you may alias it to
\*[SN-NO-DOT]. Any such change in numbering style becomes effective
from the next use of .NH following redefinition of the alias for
\*[SN-STYLE]. The formatted number of the current heading is available
in \*[SN] (a feature first documented by Berkeley); this string facili‐
tates its inclusion in, for example, table captions, equation labels,
and .XS/.XA/.XE table of contents entries.
.SH [depth]
Set an unnumbered heading. The optional depth argument is a GNU
extension indicating the heading depth corresponding to the
depth argument of .NH. It matches the type size at which the
heading is set to that of a numbered heading at the same depth
when the \n[GROWPS] and \n[PSINCR] heading size adjustment mech‐
anism is in effect.
The PSINCR register defines an increment in type size to be applied to
a heading at a lesser depth than that specified in \n[GROWPS]. The
value of \n[PSINCR] should be specified in points with the “p” scaling
unit and may include a fractional component.
The GROWPS register defines the heading depth above which the type size
increment set by \n[PSINCR] becomes effective. For each heading depth
less than the value of \n[GROWPS], the type size is increased by
\n[PSINCR]. Setting \n[GROWPS] to a value less than 2 disables the in‐
cremental heading size feature.
In other words, if the value of GROWPS register is greater than the
depth argument to a .NH or .SH call, the type size of a heading pro‐
duced by these macros increases by \n[PSINCR] units over \n[PS] multi‐
plied by the difference of \n[GROWPS] and depth.
The \n[HORPHANS] register operates in conjunction with the NH and SH
macros to inhibit the printing of isolated headings at the bottom of a
page; it specifies the minimum number of lines of the subsequent para‐
graph that must be kept on the same page as the heading. If insuffi‐
cient space remains on the current page to accommodate the heading and
this number of lines of paragraph text, a page break is forced before
the heading is printed. Any display macro call or tbl, pic, or eqn re‐
gion between the heading and the subsequent paragraph suppresses this
grouping.
Typeface and decoration
The ms macros provide a variety of ways to style text. Attend closely
to the ordering of arguments labeled pre and post, which is not intu‐
itive. Support for pre arguments is a GNU extension.
.B [text [post [pre]]]
Style text in bold, followed by post in the previous font style
without intervening space, and preceded by pre similarly. With‐
out arguments, ms styles subsequent text in bold until the next
paragraphing, heading, or no-argument typeface macro call.
.R [text [post [pre]]]
As .B, but use the roman style (upright text of normal weight)
instead of bold. Argument recognition is a GNU extension.
.I [text [post [pre]]]
As .B, but use an italic or oblique style instead of bold.
.BI [text [post [pre]]]
As .B, but use a bold italic or bold oblique style instead of
upright bold. This is a Tenth Edition Research Unix extension.
.CW [text [post [pre]]]
As .B, but use a constant-width (monospaced) roman typeface in‐
stead of bold. This is a Tenth Edition Research Unix extension.
.BX [text]
Typeset text and draw a box around it. On terminal devices, re‐
verse video is used instead. If you want text to contain space,
use unbreakable space or horizontal motion escape sequences (\~,
\space, \^, \|, \0, or \h).
.UL [text [post]]
Typeset text with an underline. post, if present, is set after
text with no intervening space.
.LG Set subsequent text in larger type (2 points larger than the
current size) until the next type size, paragraphing, or heading
macro call. You can specify this macro multiple times to en‐
large the type size as needed.
.SM Set subsequent text in smaller type (2 points smaller than the
current size) until the next type size, paragraphing, or heading
macro call. You can specify this macro multiple times to reduce
the type size as needed.
.NL Set subsequent text at the normal type size (\n[PS]).
When pre is used, a hyphenation control escape sequence \% that would
ordinarily start text must start pre instead.
groff ms also offers strings to begin and end super- and subscripting.
These are GNU extensions.
\*{
\*} Begin and end superscripting, respectively.
\*<
\*> Begin and end subscripting, respectively.
Indented regions
You may need to indent a region of text while otherwise formatting it
normally. Indented regions can be nested.
.RS Begin a region where headings, paragraphs, and displays are in‐
dented (further) by \n[PI].
.RE End the (next) most recent indented region.
Keeps, boxed keeps, and displays
On occasion, you may want to keep several lines of text, or a region of
a document, together on a single page, preventing an automatic page
break within certain boundaries. This can cause a page break to occur
earlier than it normally would.
You can alternatively specify a floating keep: if a keep cannot fit on
the current page, ms holds its contents and allows text following the
keep (in the source document) to fill in the remainder of the current
page. When the page breaks, whether by reaching the end or bp request,
ms puts the floating keep at the beginning of the next page.
.KS Begin a keep.
.KF Begin a floating keep.
.KE End (floating) keep.
As an alternative to the keep mechanism, the ne request forces a page
break if there is not at least the amount of vertical space specified
in its argument remaining on the page.
A boxed keep has a frame drawn around it.
.B1 Begin a keep with a box drawn around it.
.B2 End boxed keep.
Boxed keep macros cause breaks; if you need to box a word or phrase
within a line, see the BX macro in section “Highlighting” above. Box
lines are drawn as close as possible to the text they enclose so that
they are usable within paragraphs. If you wish to place one or more
paragraphs in a boxed keep, you may improve their appearance by calling
.B1 after the first paragraphing macro, and by adding a small amount of
vertical space before calling .B2.
If you want a boxed keep to float, you will need to enclose the .B1 and
.B2 calls within a pair of .KF and .KE calls.
Displays turn off filling; lines of verse or program code are shown
with their lines broken as in the source document without requiring br
requests between lines. Displays can be kept on a single page or al‐
lowed to break across pages. The DS macro begins a kept display of the
layout specified in its first argument; non-kept displays are begun
with dedicated macros corresponding to their layout.
.DS L
.LD Begin (DS: kept) left-aligned display.
.DS [I [indent]]
.ID [indent]
Begin (DS: kept) display indented by indent if specified, \n[DI]
otherwise.
.DS B
.BD Begin (DS: kept) block display: the entire display is left-
aligned, but indented such that the longest line in the display
is centered on the page.
.DS C
.CD Begin (DS: kept) centered display: each line in the display is
centered.
.DS R
.RD Begin (DS: kept) right-aligned display. This is a GNU exten‐
sion.
.DE End any display.
The distance stored in \n[DD] is inserted before and after each pair of
display macros; this is a Berkeley extension. In groff ms, this dis‐
tance replaces any adjacent inter-paragraph distance or subsequent
spacing prior to a section heading. The DI register is a GNU exten‐
sion; its value is an indentation applied to displays created with .DS
and .ID without arguments, to “.DS I” without an indentation argument,
and to equations set with “.EQ I”. Changes to either register take ef‐
fect at the next display boundary.
Tables, figures, equations, and references
The ms package is often used with the gtbl, pic, eqn, and refer pre‐
processors. The \n[DD] distance is also applied to regions of the doc‐
ument preprocessed with eqn, pic, and gtbl. Mark text meant for pre‐
processors by enclosing it in pairs of tokens as follows, with nothing
between the dot and the macro name. The preprocessors match these to‐
kens only at the start of an input line.
.TS [H]
.TE Demarcate a table to be processed by the tbl preprocessor. The
optional H argument instructs ms to repeat table rows (often
column headings) at the top of each new page the table spans, if
applicable; calling the TH macro marks the end of such rows.
gtbl(1) provides a comprehensive reference to the preprocessor
and offers examples of its use.
.PS
.PE
.PF .PS begins a picture to be processed by the pic preprocessor;
either of .PE or .PF ends it, the latter with “flyback” to the
vertical position at its top.
.EQ [align [label]]
.EN Demarcate an equation to be processed by the eqn preprocessor.
The equation is centered by default; align can be C, L, or I to
(explicitly) center, left-align, or indent it by \n[DI], respec‐
tively. If specified, label is set right-aligned.
.[
.] Demarcate a bibliographic citation to be processed by the refer
preprocessor. refer(1) provides a comprehensive reference to
the preprocessor and the format of its bibliographic database.
When refer emits collected references (as might be done on a “Works
Cited” page), it interpolates the string \*[REFERENCES] as an unnum‐
bered heading (.SH).
Attempting to place a multi-page table inside a keep can lead to un‐
pleasant results, particularly if the tbl “allbox” option is used.
Footnotes
A footnote is typically anchored to a place in the text with a marker,
which is a small integer, a symbol, or arbitrary user-specified text.
\** Place an automatic number, an automatically generated numeric
footnote marker, in the text. Each time this string is interpo‐
lated, the number it produces increments by one. Automatic num‐
bers start at 1. This is a Berkeley extension.
Enclose the footnote text in FS and FE macro calls to set it at the
nearest available “foot”, or bottom, of a text column or page.
.FS [marker]
Begin a footnote. The .FS-MARK hook (see below) is called with
any supplied marker argument, which is then also placed at the
beginning of the footnote text. If marker is omitted, the next
pending automatic number enqueued by interpolation of the *
string is used, and if none exists, nothing is prefixed.
.FE End footnote text.
groff ms provides a hook macro, FS-MARK, for user-determined operations
to be performed when the FS macro is called. It is passed the same ar‐
guments as .FS itself. By default, this macro has an empty definition.
.FS-MARK is a GNU extension.
Footnote text is formatted as paragraphs are, using analogous parame‐
ters. The registers FI, FPD, FPS, and FVS correspond to PI, PD, PS,
and VS, respectively; FPD, FPS, and FVS are GNU extensions.
The FF register controls the formatting of automatically numbered foot‐
note paragraphs, and those for which .FS is given a marker argument, at
the bottom of a column or page as follows.
0 Set an automatic number, or a specified FS marker argu‐
ment, as a superscript (on typesetter devices) or sur‐
rounded by square brackets (on terminals). The footnote
paragraph is indented as with .PP if there is an .FS ar‐
gument or an automatic number, and as with .LP otherwise.
This is the default.
1 As 0, but set the marker as regular text, and follow an
automatic number with a period.
2 As 1, but without indentation (like .LP).
3 As 1, but set the footnote paragraph with the marker
hanging (like .IP).
Language and localization
groff ms provides several strings that you can customize for your own
purposes, or redefine to adapt the macro package to languages other
than English. It is already localized for Czech, German, French, Ital‐
ian, and Swedish. Load the desired localization macro package after
ms; see groff_tmac(5).
cb cb lf(CR) lf(CR). String Default _ \*[REFERENCES] Ref‐
erences \*[ABSTRACT] \f[I]ABSTRACT\f[] \*[TOC] Table of Con‐
tents \*[MONTH1] January \*[MONTH2] February
\*[MONTH3] March \*[MONTH4] April \*[MONTH5] May
\*[MONTH6] June \*[MONTH7] July \*[MONTH8] August
\*[MONTH9] September \*[MONTH10] October
\*[MONTH11] November \*[MONTH12] December _
The default for ABSTRACT includes font selection escape sequences to
set the word in italics.
Headers and footers
There are multiple ways to produce headers and footers. One is to de‐
fine the strings LH, CH, and RH to set the left, center, and right
headers, respectively; and LF, CF, and RF to set the left, center, and
right footers. This approach suffices for documents that do not dis‐
tinguish odd- and even-numbered pages.
Another method is to call macros that set headers or footers for odd-
or even-numbered pages. Each such macro takes a delimited argument
separating the left, center, and right header or footer texts from each
other. You can replace the neutral apostrophes (') shown below with
any character not appearing in the header or footer text. These macros
are Berkeley extensions.
.OH 'left'center'right'
.OF 'left'center'right'
.EH 'left'center'right'
.EF 'left'center'right'
The OH and EH macros define headers for odd- (recto) and even-
numbered (verso) pages, respectively; the OF and EF macros de‐
fine footers for them.
With either method, a percent sign % in header or footer text is re‐
placed by the current page number. By default, ms places no header on
a page numbered “1” (regardless of its number format).
.P1 Typeset the header even on page 1. To be effective, this macro
must be called before the header trap is sprung on any page num‐
bered “1”. This is a Berkeley extension.
For even greater flexibility, ms permits redefinition of the macros
called when the page header and footer traps are sprung. PT (“page
trap”) is called by ms when the header is to be written, and BT (“bot‐
tom trap”) when the footer is to be. The groff page location trap that
ms sets up to format the header also calls the (normally undefined) HD
macro after .PT; you can define .HD if you need additional processing
after setting the header. The HD hook is a Berkeley extension. Any
such macros you (re)define must implement any desired specialization
for odd-, even-, or first numbered pages.
Tab stops
Use the ta request to set tab stops as needed.
.TA Reset the tab stops to the ms default (every 5 ens). Redefine
this macro to create a different set of default tab stops.
Margins
Control margins using the registers summarized in the “Margins” portion
of the table in section “Document control settings” above. There is no
setting for the right margin; the combination of page offset \n[PO] and
line length \n[LL] determines it.
Multiple columns
ms can set text in as many columns as reasonably fit on the page. The
following macros force a page break if a multi-column layout is active
when they are called. \n[MINGW] is the default minimum gutter width;
it is a GNU extension. When multiple columns are in use, keeps and the
HORPHANS and PORPHANS registers work with respect to column breaks in‐
stead of page breaks.
.1C Arrange page text in a single column (the default).
.2C Arrange page text in two columns.
.MC [column-width [gutter-width]]
Arrange page text in multiple columns. If you specify no argu‐
ments, it is equivalent to the 2C macro. Otherwise, column-
width is the width of each column and gutter-width is the mini‐
mum distance between columns.
Creating a table of contents
Define an entry to appear in the table of contents by bracketing its
text between calls to the XS and XE macros. A typical application is
to call them immediately after NH or SH and repeat the heading text
within them. The XA macro, used within .XS/.XE pairs, supplements an
entry—for instance, when it requires multiple output lines, whether be‐
cause a heading is too long to fit or because style dictates that page
numbers not be repeated. You may wish to indent the text thus wrapped
to correspond to its heading depth; this can be done in the entry text
by prefixing it with tabs or horizontal motion escape sequences, or by
providing a second argument to the XA macro. .XS and .XA automatically
associate the page number where they are called with the text following
them, but they accept arguments to override this behavior. At the end
of the document, call TC or PX to emit the table of contents; .TC re‐
sets the page number to i (Roman numeral one), and then calls PX. All
of these macros are Berkeley extensions.
.XS [page-number]
.XA [page-number [indentation]]
.XE Begin, supplement, and end a table of contents entry. Each en‐
try is associated with page-number (otherwise the current page
number); a page-number of “no” prevents a leader and page number
from being emitted for that entry. Use of .XA within .XS/.XE is
optional; it can be repeated. If indentation is present, a sup‐
plemental entry is indented by that amount; ens are assumed if
no unit is indicated. Text on input lines between .XS and .XE
is stored for later recall by .PX.
.PX [no]
Switch to single-column layout. Unless “no” is specified, cen‐
ter and interpolate \*[TOC] in bold and two points larger than
the body text. Emit the table of contents entries.
.TC [no]
Set the page number to 1, the page number format to lowercase
Roman numerals, and call PX (with a “no” argument, if present).
The remaining features in this subsection are GNU extensions. groff ms
obviates the need to repeat heading text after .XS calls. Call .XN and
.XH after .NH and .SH, respectively. Text to be appended to the for‐
matted section heading, but not to appear in the table of contents en‐
try, can follow these calls.
.XN heading-text
Format heading-text and create a corresponding table of contents
entry; the indentation is computed from the depth argument of
the preceding NH call.
.XH depth heading-text
As .XN, but use depth to determine the indentation.
groff ms encourages customization of table of contents entry produc‐
tion. (Re-)define any of the following macros as desired.
.XN-REPLACEMENT heading-text
.XH-REPLACEMENT depth heading-text
These hook macros implement .XN and .XH, and call XN-INIT and
XH-INIT, respectively, then call XH-UPDATE-TOC with the argu‐
ments given them.
.XH-INIT
.XN-INIT
These hook macros do nothing by default.
.XH-UPDATE-TOC depth heading-text
Bracket heading-text with XS and XE calls, indenting it by 2 ens
per level of depth beyond the first.
You can customize the style of the leader that bridges each table of
contents entry with its page number; define the TC-LEADER special char‐
acter by using the char request. A typical leader combines the dot
glyph “.” with a horizontal motion escape sequence to spread the dots.
The width of the page number field is stored in the TC-MARGIN register.
Differences from AT&T ms
The groff ms macros are an independent reimplementation, using no AT&T
code. Since they take advantage of the extended features of groff,
they cannot be used with AT&T troff. groff ms supports features de‐
scribed above as Berkeley and Tenth Edition Research Unix extensions,
and adds several of its own.
• The internals of groff ms differ from the internals of AT&T ms.
Documents that depend upon implementation details of AT&T ms may not
format properly with groff ms. Such details include macros whose
function was not documented in the AT&T ms manual (“Typing Documents
on the UNIX System: Using the -ms Macros with Troff and Nroff”, M.
E. Lesk, Bell Laboratories, 1978).
• The error-handling policy of groff ms is to detect and report er‐
rors, rather than to ignore them silently.
• Tenth Edition Research Unix supported P1/P2 macros to bracket code
examples; groff ms does not.
• groff ms does not work in GNU troff's AT&T compatibility mode. If
loaded when that mode is enabled, it aborts processing with a diag‐
nostic message.
• Multiple line spacing is not supported. Use a larger vertical spac‐
ing instead.
• groff ms uses the same header and footer defaults in both nroff and
troff modes as AT&T ms does in troff mode; AT&T's default in nroff
mode is to put the date, in U.S. traditional format (e.g., “January
1, 2021”), in the center footer (the CF string).
• Many groff ms macros, including those for paragraphs, headings, and
displays, cause a reset of paragraph rendering parameters, and may
change the indentation; they do so not by incrementing or decrement‐
ing it, but by setting it absolutely. This can cause problems for
documents that define additional macros of their own that try to ma‐
nipulate indentation. Use .RS and .RE instead of the in request.
• AT&T ms interpreted the values of the registers PS and VS in points,
and did not support the use of scaling units with them. groff ms
interprets values of the registers PS, VS, FPS, and FVS, equal to or
larger than 1,000 (one thousand) as decimal fractions multiplied
by 1,000. (Register values are converted to and stored as basic
units. See “Measurements” in the groff Texinfo manual or in
groff(7)). This threshold makes use of a scaling unit with these
parameters practical for high-resolution devices while preserving
backward compatibility. It also permits expression of non-integral
type sizes. For example, “groff -rPS=10.5p” at the shell prompt is
equivalent to placing “.nr PS 10.5p” at the beginning of the docu‐
ment.
• AT&T ms's AU macro supported arguments used with some document
types; groff ms does not.
• Right-aligned displays are available. The AT&T ms manual observes
that “it is tempting to assume that “.DS R” will right adjust lines,
but it doesn't work”. In groff ms, it does.
• To make groff ms use the default page offset (which also specifies
the left margin), the PO register must stay undefined until the
first ms macro is called. This implies that \n[PO] should not be
used early in the document, unless it is changed also: accessing an
undefined register automatically defines it.
• groff ms supports the PN register, but it is not necessary; you can
access the page number via the usual % register and invoke the af
request to assign a different format to it if desired. (If you re‐
define the ms PT macro and desire special treatment of certain page
numbers—like “1”—you may need to handle a non-Arabic page number
format, as groff ms's .PT does; see the macro package source. groff
ms aliases the PN register to %.)
• The AT&T ms manual documents registers CW and GW as setting the de‐
fault column width and “intercolumn gap”, respectively, and which
applied when .MC was called with fewer than two arguments. groff ms
instead treats .MC without arguments as synonymous with .2C; there
is thus no occasion for a default column width register. Further,
the MINGW register and the second argument to .MC specify a minimum
space between columns, not the fixed gutter width of AT&T ms.
• The AT&T ms manual did not document the QI register; Berkeley and
groff ms do.
• The register GS is set to 1 by the groff ms macros, but is not used
by the AT&T ms package. Documents that need to determine whether
they are being formatted with groff ms or another implementation
should test this register.
Unix Version 7 macros not implemented by groff ms
Several macros described in the Unix Version 7 ms documentation are
unimplemented by groff ms because they are specific to the requirements
of documents produced internally by Bell Laboratories, some of which
also require a glyph for the Bell System logo that groff does not sup‐
port. These macros implemented several document type formats (EG, IM,
MF, MR, TM, TR), were meaningful only in conjunction with the use of
certain document types (AT, CS, CT, OK, SG), stored the postal ad‐
dresses of Bell Labs sites (HO, IH, MH, PY, WH), or lacked a stable de‐
finition over time (UX).
Legacy features
groff ms retains some legacy features solely to support formatting of
historical documents; contemporary ones should not use them because
they can render poorly. See groff_char(7) instead.
AT&T ms accent mark strings
AT&T ms defined accent mark strings as follows.
Cb Lb Lf(CR) L. String Description _ \*['] Apply acute accent
to subsequent glyph. \*[`] Apply grave accent to subsequent glyph.
\*[:] Apply dieresis (umlaut) to subsequent glyph. \*[^] Apply
circumflex accent to subsequent glyph. \*[~] Apply tilde accent to
subsequent glyph. \*[C] Apply caron to subsequent glyph.
\*[,] Apply cedilla to subsequent glyph.
Berkeley ms accent mark and glyph strings
Berkeley ms offered an AM macro; calling it redefined the AT&T accent
mark strings (except for \*C), applied them to the preceding glyph, and
defined additional strings, some for spacing glyphs.
.AM Enable alternative accent mark and glyph-producing strings.
Cb Lb Lf(CR) L. String Description _ \*['] Apply acute accent
to preceding glyph. \*[`] Apply grave accent to preceding glyph.
\*[:] Apply dieresis (umlaut) to preceding glyph. \*[^] Apply
circumflex accent to preceding glyph. \*[~] Apply tilde accent to
preceding glyph. \*[,] Apply cedilla to preceding glyph.
\*[/] Apply stroke (slash) to preceding glyph. \*[v] Apply
caron to preceding glyph. \*[_] Apply macron to preceding glyph.
\*[.] Apply underdot to preceding glyph. \*[o] Apply ring ac‐
cent to preceding glyph. _ \*[?] Interpolate inverted question
mark. \*[!] Interpolate inverted exclamation mark. \*[8] In‐
terpolate small letter sharp s. \*[q] Interpolate small letter o
with hook accent (ogonek). \*[3] Interpolate small letter yogh.
\*[d-] Interpolate small letter eth. \*[D-] Interpolate capital
letter eth. \*[th] Interpolate small letter thorn. \*[TH] In‐
terpolate capital letter thorn. \*[ae] Interpolate small ae liga‐
ture. \*[AE] Interpolate capital ae ligature. \*[oe] Interpo‐
late small oe ligature. \*[OE] Interpolate capital oe ligature.
Naming conventions
The following conventions are used for names of macros, strings, and
registers. External names available to documents that use the groff ms
macros contain only uppercase letters and digits.
Internally, the macros are divided into modules. Conventions for iden‐
tifier names are as follows.
• Names used only within one module are of the form module*name.
• Names used outside the module in which they are defined are of the
form module@name.
• Names associated with a particular environment are of the form
environment:name; these are used only within the par module.
• name does not have a module prefix.
• Constructed names used to implement arrays are of the form
array!index.
Thus the groff ms macros reserve the following names:
• Names containing the characters *, @, and :.
• Names containing only uppercase letters and digits.
Files
/usr/share/groff/1.23.0/tmac/s.tmac
implements the package.
/usr/share/groff/1.23.0/tmac/refer-ms.tmac
implements refer(1) support for ms.
/usr/share/groff/1.23.0/tmac/ms.tmac
is a wrapper enabling the package to be loaded with “groff -m
ms”.
Authors
The GNU version of the ms macro package was written by James Clark and
contributors. This document was written by Clark, Larry Kollar
⟨lkollar@despammed.com⟩, and G. Branden Robinson ⟨g.branden.robinson@
gmail.com⟩.
See also
A manual is available in source and rendered form. On your system, it
may be compressed and/or available in additional formats.
/usr/share/doc/groff-1.23.0/ms.ms
/usr/share/doc/groff-1.23.0/ms.ps
“Using groff with the ms Macro Package”; Larry Kollar and
G. Branden Robinson.
/usr/share/doc/groff-1.23.0/msboxes.ms
/usr/share/doc/groff-1.23.0/msboxes.pdf
“Using PDF boxes with groff and the ms macros”; Deri James.
BOXSTART and BOXSTOP macros are available via the sboxes exten‐
sion package, enabling colored, bordered boxes when the pdf out‐
put device is used.
Groff: The GNU Implementation of troff, by Trent A. Fisher and Werner
Lemberg, is the primary groff manual. You can browse it interactively
with “info groff”.
groff(1), troff(1), gtbl(1), pic(1), eqn(1), refer(1)
ATTRIBUTES
See attributes(7) for descriptions of the following attributes:
box; cbp-1 | cbp-1 l | l . ATTRIBUTE TYPE ATTRIBUTE VALUE = Availabil‐
ity text/groff = Stability Uncommitted
NOTES
Source code for open source software components in Oracle Solaris can
be found at https://www.oracle.com/downloads/opensource/solaris-source-
code-downloads.html.
This software was built from source available at:
https://github.com/oracle/solaris-userland
The original community source was downloaded from:
https://ftp.gnu.org/gnu/groff/groff-1.23.0.tar.gz
Further information about this software can be found on the open source
community website at https://www.gnu.org/software/groff.
groff 1.23.0 1 December 2025 groff_ms(7)