Scroll to navigation

groff_me(7) Miscellaneous Information Manual groff_me(7)


groff_me - “me” macro package for formatting roff documents


groff -me [option ...] [file ...]
groff -m me [option ...] [file ...]


The GNU implementation of the me macro package is part of the groff document formatting system. The me package of macro definitions for the roff language provides a convenient facility for preparing technical papers in various formats. This version is based on the me distributed with 4.4BSD and can be used with the GNU troff formatter as well as those descended from AT&T troff.

Some formatter requests affect page layout unpredictably when used in conjunction with this package; however, the following may be used with impunity after the first call to a paragraphing macro like lp or pp. Some arguments are optional; see groff(7) for details, particularly of requests whose argument list is designated with an ellipsis. An asterisk * marks groff extensions.

ad c set text adjustment mode to c
af r f assign format f to register r
am m e append to macro m until e called
as s t append rest of line t to string s
bp n begin new page numbered n
br break output line
ce n center next n output lines
cp n en-/disable AT&T troff compatibility mode*
de m e define macro m until e called
do t interpret input t with compatibility mode off*
ds s t define rest of line t as string s
el t interpret t if corresponding ie false
fc c d set field delimiter c and padding glyph d
fi enable filling
hc c set hyphenation character to c
hy m set automatic hyphenation mode to m
ie p t as if, but enable interpretation of later el
if p t if condition p, interpret rest of line t
in h set indentation to distance h
lc c set leader repetition glyph to c
ls n set line spacing to n
mc c h set (right) margin glyph to c at distance h
mk r mark vertical position in register r
na disable adjustment of text
ne v need vertical space of distance v
nf disable filling
nh disable automatic hyphenation
nr r n i assign register r value n with auto-increment i
ns begin no-space mode
pl v set page length to v
pn n set next page number to n
po h set page offset to h
rj n right-align next n output lines*
rm m remove macro, string, or request m
rn m n rename macro, string, or request m to n
rr r remove register r
rs resume spacing (end no-space mode)
rt v return to vertical position set by mk, or v
so f source (interpolate) input file f
sp n insert n lines of vertical space
ta ... set tab stops
tc c set tab repetition glyph to c
ti h set temporary indentation (next line only) to h
tl ... output three-part title
tr ... translate characters
ul n underline next n output lines

Except on title pages (produced by calling tp), me suppresses the output of vertical space at the tops of pages (after the output of any page header); the sp request will thus not work there. You can instead call bl or enclose the desired spacing request in a diversion, for instance by calling (b and )b. me also intercepts the ll request; see the “me Reference Manual” for details.

Name space

Objects in me follow a rigid naming convention. To avoid conflict, any user-defined register, string, or macro names should be single numerals or uppercase letters, or any longer sequence of letters and numerals with at least one uppercase letter. (For portability between BSD and groff me, limit names to two characters, and avoid the name [ (left square bracket).) The names employed by any preprocessors in use should also not be repurposed.


$0 post-section heading hook
$1 pre-section depth 1 hook
$2 pre-section depth 2 hook
$3 pre-section depth 3 hook
$4 pre-section depth 4 hook
$5 pre-section depth 5 hook
$6 pre-section depth 6 hook
$C post-chapter title hook
$H page/column heading hook
$c output chapter number and title
$f output footer
$h output header
$p output section heading
$s output footnote area separator
(b begin block
(c begin centered block
(d begin delayed text
(f begin footnote
(l begin list
(q begin long quotation
(x begin index entry
(z begin floating keep
)b end block
)c end centered block
)d end delayed text
)f end footnote
)l end list
)q end long quotation
)x end index entry
)z end floating keep
++ set document segment type
+c begin chapter
1c end multi-column layout
2c begin multi-column layout
EN end eqn equation
EQ begin eqn equation
GE end grn picture with drawing position at bottom
GF end grn picture with drawing position at top
GS start grn picture
IE end ideal picture with drawing position at bottom
IF end ideal picture with drawing position at top
IS start ideal picture
PE end pic picture with drawing position at bottom
PF end pic picture with drawing position at top
PS start pic picture
TE end tbl table
TH end heading for multi-page tbl table
TS start tbl table
b embolden argument
ba set base indentation
bc begin new column
bi embolden and italicize argument
bx box argument
ef set even-numbered page footer
eh set even-numbered page header
ep end page
fo set footer
he set header
hl draw horizontal line
hx suppress next page's headers/footers
i italicize argument
ip begin indented paragraph
ld reset localization and date registers and strings*
ll set line length
lp begin fully left-aligned paragraph
np begin numbered paragraph
of set odd-numbered page footer
oh set odd-numbered page header
pd output delayed text
pp begin first-line indented paragraph
q quote argument
r set argument in roman
re reset tab stops
sh begin numbered section
sm set argument at smaller type size
sx change section depth
sz set type size and vertical spacing
tp begin title page
u underline argument
uh begin unnumbered section
xl set line length (local)
xp output index

Some macros are provided for “old” roff(1) compatibility. The “me Reference Manual” describes alternatives for modern documents.

ar use Arabic numerals for page numbers
bl insert space (even at page top; cf. sp)
ix set indentation without break
m1 set page top to header distance
m2 set header to text distance
m3 set text to footer distance
m4 set footer to page bottom distance
n1 begin output line numbering
n2 end or alter output line numbering
pa begin page
ro use Roman numerals for page numbers
sk skip next page


$0 section depth
$1 first section number component
$2 second section number component
$3 third section number component
$4 fourth section number component
$5 fifth section number component
$6 sixth section number component
$c current column number
$d delayed text number
$f footnote number
$i paragraph base indentation
$l column width
$m number of available columns
$p numbered paragraph number
$s column spacing (indentation)
bi display (block) indentation
bm distance from text area to page bottom
bs display (block) pre/post space
bt block threshold for keeps
ch current chapter number
df display font
dv vertical spacing of displayed text (as percentage)*
es equation pre/post space
ff footnote font
fi footnote indentation (first line only)
fm footer margin
fp footnote type size in points
fs footnote prespace
fu footnote undent (right indentation)
hm header margin
ii indented paragraph indentation
no line numbering offset*
pf paragraph font
pi paragraph indentation
po page offset
pp paragraph type size in points
ps paragraph prespace
qi long quotation left/right indentation
qp long quotation type size in points
qs long quotation pre/post space
sf section title font
si section indentation per level of depth
so additional section title offset
sp section title type size in points
ss section prespace
sx super/subscript line height increase*
tf title font
tm distance from page top to text area
tp title type size in points
tv vertical spacing of text (as percentage)*
xs index entry prespace
xu index undent (right indentation)
y2 year of the century*
y4 year*
yr year minus 1900
zs floating keep pre/post space


# delayed text marker
$n concatenated section number
* footnote marker
- em dash
< begin subscripting
> end subscripting
dw weekday name
lq left double quotation mark
mo month name
rq right double quotation mark
td date
wa term for “appendix” used by .$c*
wc term for “chapter” used by .$c*
{ begin superscripting
} end superscripting


implements the package.
implements refer(1) support for me.
is a wrapper enabling the package to be loaded with “groff -m me”.


Early roff macro packages often limited their names to a single letter, which followed the formatter's m flag letter, resulting in mm, ms, mv, mn, and so on. The “e” in “me” stands for “Eric P. Allman”, who wrote the macro package and the original technical papers documenting it while an undergraduate at the University of California.

See also

Two manuals are available in source and rendered form. On your system, they may be compressed and/or available in additional formats.

is “Writing Papers with Groff Using -me”, by Eric P. Allman, adapted for groff by James Clark.
is the “me Reference Manual”, by Eric P. Allman, adapted for groff by James Clark and G. Branden Robinson.

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”.

For preprocessors supported by me, see eqn(1), grn(1), pic(1), refer(1), and tbl(1).

groff(1), troff(1), groff(7)

12 March 2024 groff 1.23.0