summaryrefslogtreecommitdiffstats
path: root/contrib/groff/man
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/groff/man')
-rw-r--r--contrib/groff/man/Makefile.sub9
-rw-r--r--contrib/groff/man/groff.man2785
-rw-r--r--contrib/groff/man/groff_char.man18
-rw-r--r--contrib/groff/man/groff_font.man37
-rw-r--r--contrib/groff/man/roff.man520
5 files changed, 3358 insertions, 11 deletions
diff --git a/contrib/groff/man/Makefile.sub b/contrib/groff/man/Makefile.sub
index 9b87114..020d20f 100644
--- a/contrib/groff/man/Makefile.sub
+++ b/contrib/groff/man/Makefile.sub
@@ -1,2 +1,7 @@
-MAN5=groff_font.n groff_out.n
-MAN7=groff_char.n
+MAN5=\
+ groff_font.n \
+ groff_out.n
+MAN7=\
+ groff_char.n \
+ groff.n \
+ roff.n
diff --git a/contrib/groff/man/groff.man b/contrib/groff/man/groff.man
new file mode 100644
index 0000000..73c9188
--- /dev/null
+++ b/contrib/groff/man/groff.man
@@ -0,0 +1,2785 @@
+.\" st -*- nroff -*-
+.ig
+groff.7
+
+This file is part of groff, the GNU roff type-setting system.
+
+Copyright (C) 2000 Free Software Foundation, Inc.
+written by Bernd Warken <bwarken@mayn.de>
+
+Last update: 17 May 2000
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being this .ig-section and AUTHOR, with no
+Front-Cover Texts, and with no Back-Cover Texts.
+
+A copy of the Free Documentation License is included as a file called
+FDL in the main directory of the groff source package.
+..
+.
+.\" --------------------------------------------------------------------
+.\" Setup
+.\" --------------------------------------------------------------------
+.
+.if n \{\
+. mso tmac.tty-char
+. ftr CR R
+. ftr CI I
+. ftr CB B
+.\}
+.
+.if '\*[.T]'dvi' \{\
+. ftr CB CW
+.\}
+.
+.\" a comment macro which does nothing
+.de c
+..
+.
+.\" a tab string
+.ds t "\t
+.
+.eo
+.
+.c text lines in macro definitions or bracketed sections \{...\}
+.de text
+. if 1 \&\$*\&
+..
+.
+.de option
+. ds @tmp@ \f(CB\$1\fP
+. shift 1
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.als shellcommand option
+.
+.c --------- characters ---------
+.
+.de character
+. ds @tmp@ \f(CB\$1\fP
+. shift
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de 'char
+. ds @tmp@ \(oq\f(CB\$1\fP\(cq
+. shift
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de ''char
+. ds @tmp@ \(lq\f(CB\$1\fP\(rq
+. shift
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.c --------- requests ---------
+.
+.c request synopsis
+.de REQ
+. ds @tmp@ \&\$1
+. shift 1
+. IP "\f(CB\&\*[@tmp@] \fP\f(CI\&\$*\fP" 10n
+. rm @tmp@
+..
+.
+.de request
+. ds @tmp@ \f(CB\$1\fP
+. shift 1
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.c --------- macro or function arguments ---------
+.
+.de argument
+. ds @tmp@ \f(CI\$1\fP
+. shift 1
+. while (\n[.$] >= 2) \{\
+. as @tmp@ \/\f(CR\$1\fP\f(CI\,\$2\fP
+. shift 2
+. \}
+. if \n[.$] .as @tmp@ \/\f(CR\$1\fP
+. text \*[@tmp@]
+. rm @tmp@
+..
+.
+.c argument followed by a numerical expression
+.de argterm
+. ds @tmp@ \f(CI\$1\fP\|\f(CR\$2\fP
+. shift 2
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.c --------- numerical elements ---------
+.
+.de number
+. ds @tmp@ \f(CR\$1\fP
+. shift 1
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de prefixednumber
+. ds @tmp@ \&\$1\ \f(CR\$2\fP
+. shift 2
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.als scaleindicator request
+.
+.de scalednumber
+. ds @tmp@ \f(CR\$1\fP\f(CB\$2\fP
+. shift 2
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de operator
+. ds @tmp@ \(oq\f(CB\$1\fP\(cq
+. shift
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.c --------- escape sequences ---------
+.
+.de esc[arg]
+. ds @tmp@ \f(CB\(rs\$1[\fP\f(CI\$2\fP\f(CB]\fP
+. shift 2
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de esc(arg
+. ds @tmp@ \f(CB\(rs\$1(\fP\f(CI\$2\fP
+. shift 2
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de escarg
+. ds @tmp@ \f(CB\(rs\$1\fP\f(CI\$2\fP
+. shift 2
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de esc[]
+. ds @tmp@ \f(CB\(rs[\fP\f(CI\$1\fP\f(CB]\fP
+. shift
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de esc(
+. ds @tmp@ \f(CB\(rs(\fP\f(CI\$1\fP
+. shift
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de esc
+. ds @tmp@ \f(CB\(rs\$1\fP
+. shift
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de (esc
+. ds @tmp@ \f(CB\(rs(\$1\fP
+. shift
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.de [esc]
+. ds @tmp@ \f(CB\(rs[\$1]\fP
+. shift
+. text \*[@tmp@]\$*
+. rm @tmp@
+..
+.
+.c escape sequence synopsis
+.de ESC
+. ds @tmp@ \&\$1
+. shift 1
+. IP "\f(CB\(rs\&\*[@tmp@]\fP\f(CI\&\$*\fP"
+. rm @tmp@
+..
+.
+.c synopsis for escape sequences with a long name
+.de ESC[]
+. ds @arg1@ \&\$1
+. ds @arg2@ \&\$2
+. shift 2
+. IP "\f(CB\(rs\&\*[@arg1@][\fP\f(CI\&\*[@arg2@]\fP\f(CB]\&\$*\fP"
+. rm @arg1@
+. rm @arg2@
+..
+.
+.c synopsis escape sequence with quoted argument
+. de ESCq
+. ds @tmp@ \&\$1
+. shift 1
+. IP "\f(CB\(rs\&\*[@tmp@]\(cq\fP\f(CI\h'-0.2m'\$*\/\fP\f(CB\(cq\fP"
+. rm @tmp@
+..
+.
+.c synopsis for 2-escapes (special characters)
+.de ESc
+. ds @tmp@ \$1
+. TP 14n
+. text \f(CB\(rs(\&\*[@tmp@]\ \ \ \fP\fR\(\*[@tmp@]\fP
+. shift 1
+. text \$*.
+. rm @tmp@
+..
+.
+.c --------- registers ---------
+.
+.c synopsis for registers
+.de REG
+. TP 10n
+. text \&\f(CR\(rsn[\fP\f(CB\$1\fP\f(CR]\fP
+. shift 1
+.if \n[.$] \&\$*
+..
+.
+.als register request
+.
+.c --------- warnings ---------
+.
+.als warning request
+.
+.c description of warnings
+.de Warning
+. ne (2v + 1)
+. TP 12n
+. text \f(CB\$1\fP
+. text \f(CI\$2\fP
+. br
+..
+.
+.ec
+.
+.\" --------------------------------------------------------------------
+.\" Title
+.\" --------------------------------------------------------------------
+.
+.TH GROFF @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
+.SH NAME
+groff \- a short reference for the GNU roff language
+.
+.\" --------------------------------------------------------------------
+.SH DESCRIPTION
+.\" --------------------------------------------------------------------
+.I groff
+stands for
+.I GNU roff
+and is the free implementation of the roff type-setting system.
+See
+.BR roff (@MAN7EXT@)
+for a survey and the background of the groff system.
+.LP
+This document gives only short descriptions of the predefined roff
+language elements as used in groff.
+Both the classical features and the groff extensions are provided.
+.LP
+Historically, the
+.I roff language
+was called
+.IR troff .
+.I groff
+is compatible with the classical system and provides proper extensions.
+So in GNU, the terms
+.IR roff ,
+.IR troff ,
+and
+.I groff language
+could be used as synonyms.
+However
+.I troff
+slightly tends to refer more to the classical aspects, whereas
+.I groff
+emphasizes the GNU extensions, and
+.I roff
+is the general term for the language.
+.LP
+This file is only a short version of the complete documentation that is
+found in the
+.I groff
+.BR info (1)
+file, which contains more detailed, actual, and concise information.
+.LP
+The general syntax for writing groff documents is relatively easy, but
+writing extensions to the roff language can be a bit harder.
+.LP
+The roff language is line-oriented.
+There are only two kinds of lines, control lines and text lines.
+The control lines start with a control character, by default a period
+.''char .
+or a single quote
+.''char ' ;
+all other lines are text lines.
+.LP
+.B Control lines
+represent commands, optionally with arguments.
+They have the following syntax.
+The leading control character can be followed by a command name;
+arguments, if any, are separated by blanks from the command name and
+among themselves, for example,
+.RS
+.LP
+\&\.command_name arg1 arg2
+.RE
+.LP
+For indentation, any number of space or tab characters can be inserted
+between the leading control character and the command name, but the control
+character must be on the first position of the line.
+.LP
+.B Text lines
+represent the parts that will be printed.
+They can be modified by escape sequences, which are recognized by a
+leading backslash
+.'char \(rs .
+These are in-line or even in-word formatting elements or functions.
+Some of these take arguments separated by single quotes
+.''char ' ,
+others are regulated by a length encoding introduced by an open
+parenthesis
+.'char (
+or enclosed in brackets
+.'char [
+and
+.'char ] .
+.LP
+The roff language provides flexible instruments for writing language
+extension, such as macros.
+When interpreting macro definitions, the roff system enters a special
+operating mode, called the
+.BR "copy mode" .
+.LP
+The copy mode behavior can be quite tricky, but there are some rules
+that ensure a safe usage.
+.IP 1.
+Printable backslashes must be denoted as
+.esc e .
+To be more precise,
+.esc e
+represents the current escape character.
+To get a backslash glyph, use
+.esc (rs .
+.IP 2.
+Double all backslashes.
+.IP 3.
+Begin all text lines with the special non-spacing character
+.esc & .
+.LP
+This does not produce the most efficient code, but it should work as a
+first measure.
+For better strategies, see the groff info file and
+.BR groff_tmac (@MAN5EXT@).
+.LP
+Reading roff source files is easier, just reduce all double backslashes
+to a single one in all macro definitions.
+.
+.\" --------------------------------------------------------------------
+.SH "GROFF ELEMENTS"
+.\" --------------------------------------------------------------------
+The roff language elements add formatting information to a text file.
+The fundamental elements are predefined commands and variables that make
+roff a full-blown programming language.
+.LP
+There are two kinds of roff commands, possibly with arguments.
+.B Requests
+are written on a line of their own starting with a dot
+.'char .
+or a
+.''char ' ,
+whereas
+.B Escape sequences
+are in-line functions and in-word formatting elements starting with a
+backslash
+.'char \(rs .
+.LP
+The user can define her own formatting commands using the
+.request .de
+request. These commands are called
+.BR macros ,
+but they are used exactly like requests. Macro packages are pre-defined
+sets of macros written in the groff language.
+A user's possibilities to create escape sequences herself is very
+limited, only special characters can be mapped.
+.LP
+The groff language provides several kinds of variables with
+different interfaces.
+There are pre-defined variables, but the user can define her own
+variables as well.
+.LP
+.B String
+variables store character sequences.
+They are set with the
+.request .ds
+request and retrieved by the
+.esc *
+escape sequences.
+.LP
+.B Register
+variables can store numerical values, numbers with a scale unit, and
+occasionally string-like objects.
+They are set with the
+.request .nr
+request and retrieved by the
+.esc n
+escape sequences.
+.LP
+.B Environments
+allow the user to temporarily store global formatting parameters like
+line length, font size, etc. for later reuse.
+This is done by the
+.request .ev
+request.
+.LP
+.B Fonts
+are identified either by a name or by an internal number.
+The current font is chosen by the
+.request .ft
+request or by the
+.esc f
+escape sequences.
+Each device has special fonts, but the following fonts are available for
+all devices.
+.B R
+is the standard font Roman.
+.B B
+is its
+.B bold
+counterpart.
+The
+.I italic
+font is called
+.B I
+is everywhere available, but on text devices, it is displayed as an
+underlined Roman font.
+For the graphical output devices, there exist constant-width pendants of
+these font,
+.BR CR ,
+.BR CI ,
+and
+.BR CB .
+On text devices, all characters have a constant width anyway.
+.LP
+Moreover, there are some advanced roff elements.
+A
+.B diversion
+stores information into a macro for later usage.
+A
+.B trap
+is a positional condition like a certain number of lines from page top
+or in a diversion or in the input.
+Some action can be prescribed to be run automatically when the condition
+is met.
+.LP
+More detailed information can be found in the groff info file.
+.
+.\" --------------------------------------------------------------------
+.SH "CONTROL CHARACTERS"
+.\" --------------------------------------------------------------------
+There is a small set of characters that have a special controlling task
+in certain conditions.
+.TP
+.character .
+A dot is only special at the beginning of a line or after the
+condition in the requests
+.request .if ,
+.request .ie ,
+.request .el ,
+and
+.request .while .
+There it is the control character that introduces a request (or macro).
+The special behavior can be delayed by using the
+.esc .
+escape.
+By using the
+.request .cc
+request, the control character can be set to a different character,
+making the dot
+.'char .
+a non-special character.
+.IP ""
+In all other positions, it just means a dot character.
+In text paragraphs, it is advantageous to start each sentence at a line
+of its own.
+.TP
+.character '
+The single quote has two controlling tasks. At the beginning of a line
+and in the conditional requests it is the non-breaking control
+character.
+That means that it introduces a request like the dot, but with the
+additional property that this request doesn't cause a linebreak.
+By using the
+.request .c2
+request, the non-break control character can be set to a different
+character.
+.IP ""
+As a second task, it is the most commonly used argument separator in
+some functional escape sequences (but any pair of characters not part
+of the argument will work).
+In all other positions, it denotes the single quote or apostrophe
+character.
+Groff provides a printable representation with the
+.esc (cq
+escape sequence.
+.TP
+.character \(dq
+The double quote is used to enclose arguments in requests and macros.
+The escaped double quote
+.esc \(dq
+introduces a comment.
+Otherwise, it is not special.
+Groff provides a printable representation with the
+.esc (dq
+escape sequence.
+.TP
+.character \(rs
+The backslash usually introduces an escape sequence (this can be
+changed with the
+.request ec
+request).
+A printed version of the escape character is the
+.esc e
+escape; a backslash glyph can be obtained by
+.esc (rs .
+.TP
+.character (
+The open parenthesis is only special in escape sequences when
+introducing an escape name or argument consisting of exactly two
+characters.
+In groff, this behavior can be replaced by the \f(CB[]\fP construct.
+.TP
+.character [
+The opening bracket is only special in groff escape sequences; there it
+is used to introduce a long escape name or long escape argument.
+Otherwise, it is non-special, e.g. in macro calls.
+.TP
+.character ]
+The closing bracket is only special in groff escape sequences; there it
+terminates a long escape name or long escape argument.
+Otherwise, it is non-special.
+.TP
+\f(CIspace\fP
+Space characters are only functional characters. They separate the
+arguments in requests or macros, and the words in text lines.
+They are subject to groff's horizontal spacing calculations.
+To get a defined space width, escape sequences like
+.'char "\(rs\ "
+(this is the escape character followed by a space),
+.esc | ,
+.esc ^ ,
+or
+.esc h
+should be used.
+.IP \f(CInewline\fP
+In text paragraphs, newlines mostly behave like space characters.
+Continuation lines can be specified by an escaped newline, i.e., by
+specifying a backslash
+.'char \(rs
+as the last character of a line.
+.IP \f(CItab\fP
+If a tab character occurs during text the interpreter makes a horizontal
+jump to the next pre-defined tab position.
+There is a sophisticated interface for handling tab positions.
+.
+.\" --------------------------------------------------------------------
+.SH "NUMERICAL EXPRESSIONS"
+.\" --------------------------------------------------------------------
+A
+.B numerical value
+is a signed or unsigned integer or float with or without an appended
+scale indicator.
+A
+.B scale indicator
+is a one-character abbreviation for a unit of measurement.
+A number followed by a scale indicator signifies a size value.
+By default, numerical values do not have a scale indicator, i.e., they are
+normal numbers.
+.LP
+The roff language defines the following scale indicators.
+.LP
+.na
+.nh
+.TS
+center, tab(@);
+LfCB Lw(4i).
+c@Centimeter
+i@Inch
+P@Pica\ \(eq\ 1/6\ inch
+p@Point\ \(eq\ 1/72\ inch
+m@T{
+Em\ \(eq\ \fRthe font size in points (width of letter `\f(CRm\fR')
+T}
+M@100th \fRof an \f(CREm
+n@En\ \(eq\ Em/2
+u@\fRBasic unit for actual output device
+v@\fRVertical line space in basic units
+z@T{
+scaled point\ \(eq\ 1/\f(CIsizescale\fR of a point (defined in
+font \fIDESC\fP file)
+T}
+.TE
+.LP
+.ad
+.hy
+.B Numerical expressions
+are combinations of the numerical values defined above with
+the arithmetical operators
+.operator + ,
+.operator \- ,
+.operator * ,
+.operator / ,
+.operator %
+.RI ( modulo ),
+the comparative operators
+.operator ==
+(this is the same as
+.operator = ),
+.operator <= ,
+.operator >= ,
+.operator < ,
+.operator > ,
+the logical operators
+.operator &
+.RI ( and ),
+.operator :
+.RI ( or ),
+.operator !
+.RI ( not ),
+and the parentheses
+.operator (
+and
+.operator ) .
+.LP
+Moreover,
+.I groff
+added the following operators for numerical expressions:
+.LP
+.na
+.nh
+.TS
+center, tab(@);
+LfCB Lw(4i).
+e1\f(CB>?\fPe2@The maximum of \f(CIe1\fP and \f(CIe2\fP.
+e1\f(CB<?\fPe2@The minimum of \f(CIe1\fP and \f(CIe2\fP.
+\f(CB(\fPc\f(CB;\fPe\f(CB)@T{
+Evaluate \f(CIe\fP using \f(CIc\fP as the default scaling
+indicator.
+T}
+.TE
+.LP
+.ad
+.hy
+For details see the groff info file.
+.
+.\" --------------------------------------------------------------------
+.SH CONDITIONS
+.\" --------------------------------------------------------------------
+.B Conditions
+occur in tests raised by the
+.request .if ,
+.request .ie ,
+and the
+.request .while
+requests.
+The following table characterizes the different types of conditions.
+.LP
+.na
+.nh
+.TS
+center, tab(@);
+LfCB Lw(4i).
+\f(CIN\fP@T{
+A numerical expression \f(CIN\fP yields true if its value
+is\ \f(CR>0\fP.
+T}
+!\f(CIN\fP@T{
+True if the value of \f(CIN\fP is\ \f(CR\(<=0\fP.
+T}
+\&'\f(CIs1\fP'\f(CIs2\fP'@T{
+True if string\ \f(CIs1\fP is identical to string\ \f(CIs2\fP.
+T}
+!'\f(CIs1\fP'\f(CIs2\fP'@T{
+True if string\ \f(CIs1\fP is not identical to string\ \f(CIs2\fP.
+T}
+c\f(CIch@T{
+True if there is a character\ \f(CIch\fP available.
+T}
+d\f(CIname@T{
+True if there is a string, macro, diversion, or request
+called \f(CIname\fP.
+T}
+e@Current page number is even.
+o@Current page number is odd.
+n@Formatter is \fBnroff\fP.
+r\f(CIreg@T{
+True if there is a register named \f(CIreg\fP.
+T}
+t@Formatter is \fBtroff\fR.
+.TE
+.LP
+.ad
+.hy
+.
+.\" --------------------------------------------------------------------
+.SH REQUESTS
+.\" --------------------------------------------------------------------
+This section provides a short reference for the predefined requests.
+In groff, request and macro names can be arbitrarily long.
+No bracketing or marking of long names is needed.
+.LP
+Most requests take one or more arguments.
+The arguments are separated by space characters (no tabs!); there is no
+inherent limit for their length or number.
+An argument can be enclosed by a pair of double quotes: This is very handy
+if an argument contains space characters, e.g.,
+.argument "\(dqarg\ with\ space\(dq"
+denotes a single argument.
+.LP
+Some requests have optional arguments with a different behaviour.
+Not all of these details are outlined here.
+Refer to the groff info file for all details.
+.LP
+In the following request specifications, most argument names were chosen
+to be descriptive.
+Only the following denotations need clarification.
+.LP
+.na
+.nh
+.TS
+center, tab(@);
+LfCI Lw(4i).
+c@denotes a single character.
+font@T{
+a font either specified as a font name or a font number.
+T}
+anything@T{
+all characters up to the end of the line or within \f(CB\(rs{\fP
+and \f(CB\(rs}\fP.
+T}
+n@T{
+is a numerical expression that evaluates to an integer value.
+T}
+N@T{
+is an arbitrary numerical expression, signed or unsigned.
+T}
+\(+-N@T{
+has three meanings depending on its sign, described below.
+T}
+.TE
+.LP
+.ad
+.hy
+If an expression defined as
+.argument \(+-N
+starts with a
+.operator +
+sign the resulting value of the expression will be added to an already
+existing value inherent to the related request, e.g. adding to a number
+register.
+If the expression starts with a
+.operator -
+the value of the expression will be subtracted from the request value.
+.LP
+Without a sign,
+.argument N
+replaces the existing value directly.
+To assign a negative number either prepend\ \c
+.number 0
+or enclose the negative number in parentheses.
+.
+.\" --------------------------------------------------------------------
+.SS "REQUEST SHORT REFERENCE"
+.\" --------------------------------------------------------------------
+.PD 0
+.
+.REQ .
+Empty line, ignored. Useful for structuring documents.
+.
+.REQ .\(rs\(dq anything
+Complete line is a comment.
+.
+.REQ .ab string
+Print
+.argument string
+on standard error, exit program.
+.
+.REQ .ad
+Begin line adjustment for output lines in current adjust mode.
+.
+.REQ .ad c
+Start line adjustment in mode
+.argument c
+(\f(CIc\fP\f(CR\|\^\(eq\|l,r,b,n\fP).
+.
+.REQ .af register c
+Assign format
+.argument c
+to
+.argument register
+(\f(CIc\fP\f(CR\|\^\(eq\|l,i,I,a,A\fP).
+.
+.REQ .aln alias register
+Create alias name for
+.argument register .
+.
+.REQ .als alias object
+Create alias name for request, string, macro, or diversion
+.argument object .
+.
+.REQ .am macro
+Append to
+.argument macro
+until
+.request ..
+is called.
+.
+.REQ .am macro end
+Append to
+.argument macro
+until
+.request .end
+is called.
+.
+.REQ .as stringvar anything
+Append
+.argument anything
+to
+.argument stringvar .
+.
+.REQ .asciify diversion
+Unformat special ASCII characters in
+.argument diversion .
+.
+.REQ .backtrace
+Print a backtrace of the input on stderr.
+.
+.REQ .bd font N
+Embolden
+.argument font
+by
+.argterm N -1
+units.
+.
+.REQ .bd S font N
+Embolden Special Font
+.argument S
+when current font is
+.argument font .
+.
+.REQ .bp
+Eject current page and begin new page.
+.
+.REQ .bp \(+-N
+Eject current page; next page number
+.argument \(+-N .
+.
+.REQ .blm macro
+Set the blank line macro to
+.argument macro .
+.
+.REQ .br
+Line break.
+.
+.REQ .break
+Break out of a while loop.
+.
+.REQ .c2
+Reset no-break control character to
+.''char ' .
+.
+.REQ .c2 c
+Set no-break control character to
+.argument c .
+.
+.REQ .cc
+Reset control character to
+.'char . .
+.
+.REQ .cc c
+Set control character to
+.argument c .
+.
+.REQ .ce
+Center the next input line.
+.
+.REQ .ce N
+Center following
+.argument N
+input lines.
+.
+.REQ .cf filename
+Copy contents of file
+.argument filename
+unprocessed to stdout or to the diversion.
+.
+.REQ .cflags mode c1 c2 ...
+Treat characters
+.argument c1 ,
+.argument c2 ,
+.argument ...
+according to
+.argument mode
+number.
+.
+.REQ .ch trap N
+Change
+.argument trap
+location
+to
+.argument N .
+.
+.REQ .char c anything
+Define character
+.argument c
+to string
+.argument anything .
+.
+.REQ .chop object
+Chop the last character off macro, string, or diversion
+.argument object .
+.
+.REQ .close stream
+Close the
+.argument stream .
+.
+.REQ .continue
+Finish the current iteration of a while loop.
+.
+.REQ .cp
+Enable compatibility mode.
+.
+.REQ .cp N
+If
+.I N
+is zero disable compatibility mode, otherwise enable it.
+.
+.REQ .cs font N M
+Set constant character width mode for
+.argument font
+to
+.argterm N /36
+ems with em
+.argument M .
+.
+.REQ .cu N
+Continuous underline in nroff, like
+.request .ul
+in troff.
+.
+.REQ .da macro
+Divert and append to
+.argument macro .
+.
+.REQ .de macro
+Define or redefine
+.argument macro
+until
+.request ..
+is called.
+.
+.REQ .de macro end
+Define or redefine
+.argument macro
+until
+.request .end
+is called.
+.
+.REQ .di
+End current diversion.
+.
+.REQ .di macro
+Divert to
+.argument macro .
+.
+.REQ .do name
+Interpret
+.request .name
+with compatibility mode enabled.
+.
+.REQ .ds stringvar anything
+Set
+.argument stringvar
+to
+.argument anything .
+.
+.REQ .dt N trap
+Set diversion trap to position
+.argument N
+(default scale indicator\ \c
+.scaleindicator v ).
+.
+.REQ .ec
+Reset escape character to
+.'char \(rs .
+.
+.REQ .ec c
+Set escape character to
+.argument c .
+.
+.REQ .el anything
+Else part for if-else (\c
+.argument .ie )
+request.
+.
+.REQ .em macro
+The
+.argument macro
+will be run after the end of input.
+.
+.REQ .eo
+Turn off escape character mechanism.
+.
+.REQ .ev
+Switch to previous environment.
+.
+.REQ .ev env
+Push down environment number or name
+.argument env
+and switch to it.
+.
+.REQ .evc env
+Copy the contents of environment
+.argument env
+to the current environment.
+No pushing or popping.
+.
+.REQ .ex
+Exit from roff processing.
+.
+.REQ .fam name
+Set the current font family to
+.argument name .
+.
+.REQ .fc
+Disable field mechanism.
+.
+.REQ .fc a
+Set field delimiter to
+.argument a
+and pad character to space.
+.REQ .fc a b
+Set field delimiter to
+.argument a
+and pad character to
+.argument b .
+.
+.REQ .fi
+Fill output lines.
+.
+.REQ .fl
+Flush output buffer.
+.
+.REQ .fp n font
+Mount
+.argument font
+on position
+.argument n .
+.
+.REQ .fp n internal external
+Mount font with long
+.argument external
+name to short
+.argument internal
+name on position
+.argument n .
+.
+.REQ .fspecial font s1 s2...
+When the current font is
+.argument font ,
+then the fonts
+.argument s1 ,
+.argument s2 ,
+.argument ...
+will be special.
+.
+.REQ .ft
+Return to previous font.
+Same as
+.request \(rsfP .
+.REQ .ft font
+Change to font name or number
+.argument font ;
+same as
+.esc[arg] f font
+escape sequence.
+.
+.REQ .ftr font1 font2
+Translate
+.argument font1
+to
+.argument font2 .
+.
+.REQ .hc
+Remove additional hyphenation indicator character.
+.
+.REQ .hc c
+Set up additional hyphenation indicator character\ \c
+.argument c .
+.
+.REQ .hcode c1 code1 c2 code2 ...
+Set the hyphenation code of character
+.argument c1
+to
+.argument code1 ,
+that of
+.argument c2
+to
+.argument code2 ,
+etc.
+.
+.REQ .hla lang
+Set the current hyphenation language to
+.argument lang .
+.
+.REQ .hlm n
+Set the maximum number of consecutive hyphenated lines to
+.argument n .
+.
+.REQ .hpf file
+Read hyphenation patterns from
+.argument file .
+.
+.REQ .hw words
+List of
+.argument words
+with exceptional hyphenation.
+.
+.REQ .hy N
+Switch to hyphenation mode
+.argument N .
+.
+.REQ .hym n
+Set the hyphenation margin to
+.argument n
+(default scale indicator\ \c
+.scaleindicator m ).
+.
+.REQ .hys n
+Set the hyphenation space to
+.argument n .
+.
+.REQ .ie cond anything
+If
+.argument cond
+then
+.argument anything
+else goto
+.request .el .
+.
+.REQ .if cond anything
+If
+.argument cond
+then
+.argument anything ;
+otherwise do nothing.
+.
+.REQ .ig
+Ignore text until
+.request ..
+is called.
+.
+.REQ .ig end
+Ignore text until
+.request .end .
+.
+.REQ .in
+Change to previous indent value.
+.
+.REQ .in \(+-N
+Change indent according to
+.argument \(+-N
+(default scale indicator\ \c
+.scaleindicator m ).
+.
+.REQ .it N trap
+Set an input-line count trap at position
+.argument N .
+.
+.REQ .kern
+Enable pairwise kerning.
+.
+.REQ .kern n
+If
+.argument n
+is zero, disable pairwise kerning, otherwise enable it.
+.
+.REQ .lc
+Remove leader repetition character.
+.
+.REQ .lc c
+Set leader repetition character to\ \c
+.argument c .
+.
+.REQ .length register anything
+Write the length of the string
+.argument anything
+in
+.argument register .
+.
+.REQ .lf N file
+Set input line number to
+.argument N
+and filename to
+.argument file .
+.
+.REQ .lg N
+Ligature mode on if
+.argterm N >0 .
+.
+.REQ .ll
+Change to previous line length.
+.
+.REQ .ll \(+-N
+Set line length according to
+.argument \(+-N
+(default size
+.scalednumber 6.5 i ,
+default scale indicator\ \c
+.scaleindicator m ).
+.
+.REQ .ls
+Change to the previous value of additional intra-line skip.
+.
+.REQ .ls N
+Set additional intra-line skip value to
+.argument N ,
+i.e.,
+.argterm N -1
+blank lines are inserted after each text output line.
+.
+.REQ .lt \(+-N
+Length of title (default scale indicator\ \c
+.scaleindicator m ).
+.
+.REQ .mc
+Margin character off.
+.
+.REQ .mc c
+Print character
+.argument c
+after each text line at actual distance from right margin.
+.
+.REQ .mc c N
+Set margin character to
+.argument c
+and distance to
+.argument N
+from right margin (default scale indicator\ \c
+.scaleindicator m ).
+.
+.REQ .mk register
+Mark current vertical position in
+.argument register .
+.
+.REQ .mso file
+The same as the .so request except that
+.I file
+is also searched in the tmac directories.
+.
+.REQ .na
+No output-line adjusting.
+.
+.REQ .ne
+Need a one-line vertical space.
+.
+.REQ .ne N
+Need
+.argument N
+vertical space (default scale indicator\ \c
+.scaleindicator v ).
+.
+.REQ .nf
+No filling or adjusting of output-lines.
+.
+.REQ .nh
+No hyphenation.
+.
+.REQ .nm
+Number mode off.
+.
+.REQ .nm \(+-N M S I
+In line number mode, set number, multiple, spacing, and indent.
+.
+.REQ .nn
+Do not number next line.
+.
+.REQ .nn N
+Do not number next
+.argument N
+lines.
+.
+.REQ .nr register \(+-N M
+Define or modify
+.argument register
+using
+.argument \(+-N
+with auto-increment
+.argument M .
+.
+.REQ .nroff
+Make the built-in condition
+.B n
+true and
+.B t
+false.
+.
+.REQ .ns
+Turn no-space mode on.
+.
+.REQ .nx filename
+Next file.
+.
+.REQ .open stream filename
+Open
+.register filename
+for writing and associate the stream named
+.register stream
+with it.
+.
+.REQ .opena stream filename
+Like
+.request .open
+but append to it.
+.
+.REQ .os
+Output vertical distance that was saved by the
+.request .sv
+request.
+.
+.REQ .pc
+Reset page number character to\ \c
+.'char % .
+.
+.REQ .pc c
+Page number character.
+.
+.REQ .pi program
+Pipe output to
+.argument program
+(nroff only).
+.
+.REQ .pl
+Set page length to default
+.scalednumber 11 i .
+The current page length is stored in
+.register .p .
+.
+.REQ .pl \(+-N
+Change page length to
+.argument \(+-N
+(default scale indicator\ \c
+.scaleindicator v ).
+.
+.REQ .pm
+Print macro names and sizes (number of blocks of 128 bytes).
+.
+.REQ ".pm t"
+Print only total of sizes of macros (number of 128 bytes blocks).
+.
+.REQ .pn \(+-N
+Next page number
+.argument N .
+.
+.REQ .pnr
+Print the names and contents of all currently defined number registers
+on stderr.
+.
+.REQ .po
+Change to previous page offset. The current page offset is available in
+.register .o .
+.
+.REQ .po \(+-N
+Page offset
+.argument N .
+.
+.REQ .ps
+Return to previous point-size.
+.REQ .ps \(+-N
+Point size; same as
+.esc[arg] s \(+-N .
+.
+.REQ .psbb filename
+Get the bounding box of a PostScript image
+.argument filename .
+.
+.REQ .pso command
+This behaves like the
+.request .so
+request except that input comes from the standard output of
+.argument command .
+.
+.REQ .ptr
+Print the names and positions of all traps (not including input line
+traps and diversion traps) on stderr.
+.
+.REQ .rchar c1 c2...
+Remove the definitions of characters
+.argument c1 ,
+.argument c2 ,
+.argument ...
+.
+.REQ .rd prompt
+Read insertion.
+.
+.REQ .rj n
+Right justify the next
+.argument n
+input lines.
+.
+.REQ .rm name
+Remove request, macro, or string
+.argument name .
+.
+.REQ .rn old new
+Rename request, macro, or string
+.argument old
+to
+.argument new .
+.
+.REQ .rnn reg1 reg2
+Rename register
+.argument reg1
+to
+.argument reg2 .
+.
+.REQ .rr register
+Remove
+.argument register .
+.
+.REQ .rs
+Restore spacing; turn no-space mode off.
+.
+.REQ .rt \(+-N
+Return
+.I (upward only)
+to marked vertical place (default scale indicator\ \c
+.scaleindicator v ).
+.
+.REQ .shc
+Reset soft hyphen character to
+.esc (hy .
+.
+.REQ .shc c
+Set the soft hyphen character to
+.argument c .
+.
+.REQ .shift n
+In a macro, shift the arguments by
+.argument n \ \c
+positions.
+.
+.REQ .so filename
+Include source file.
+.
+.REQ .sp
+Skip one line vertically.
+.
+.REQ .sp N
+Space vertical distance
+.argument N
+up or down according to sign of
+.argument N
+(default scaling indicator\ \c
+.scaleindicator v ).
+.
+.REQ .special s1 s2 ...
+Fonts
+.argument s1 ,
+.argument s2 ,
+etc. are special and will be searched for characters not in the current font.
+.
+.REQ .ss N
+Space-character size set to
+.argument N /12
+of the spacewidth in the current font.
+.
+.REQ .ss N M
+Space-character size set to
+.argterm N /12
+and sentence space size set to
+.argterm M /12
+of the spacewidth in the current font (\f(CR\(eq1/3 em\fP).
+.
+.REQ .sty n style
+Associate
+.argument style
+with font position
+.argument n .
+.
+.REQ .substring register n1 n2
+Replace the string in
+.argument register
+with the substring defined by the indices
+.argument n1
+and
+.argument n2 .
+.
+.REQ .sv
+Save
+.scalednumber 1 v
+of vertical space.
+.
+.REQ .sv N
+Save the vertical distance
+.argument N
+for later output with
+.request .os
+request.
+.
+.REQ .sy command-line
+Execute program
+.argument command-line .
+.
+.REQ ".ta T" N
+Set tabs after every position that is a multiple of
+.argument N
+(default scaling indicator\ \c
+.scaleindicator m ).
+.REQ .ta n1 n2 ... nn \f(CBT\fP r1 r2 ... rn
+Set tabs at positions
+.argument n1 ,
+.argument n2 ,
+\&...,
+.argument nn ,
+then set tabs at
+.argument nn + r1 ,
+.argument nn + r2 ,
+\&...,
+.argument nn + rn ,
+then at
+.argument nn + rn + r1 ,
+.argument nn + rn + r2 ,
+\&...,
+.argument nn + rn + rn ,
+and so on.
+.
+.\".REQ .tar
+.\"Restore internally saved tab positions.
+.\".
+.\".REQ .tas
+.\"Save tab positions internally.
+.
+.REQ .tc
+Remove tab repition character.
+.REQ .tc c
+Set tab repetition character to\ \c
+.argument c .
+.
+.REQ .ti \(+-N
+Temporary indent next line (default scaling indicator\ \c
+.scaleindicator m ).
+.
+.REQ .tkf font s1 n1 s2 n2
+Enable track kerning for
+.argument font .
+.
+.REQ .tl \f(CB\(cq\fPleft\f(CB\(cq\fPcenter\f(CB\(cq\fPright\f(CB\(cq\fP
+Three-part title.
+.
+.REQ .trf filename
+Transparently output the contents of file
+.argument filename .
+.
+.REQ .tm anything
+Print
+.argument anything
+on terminal (UNIX standard message output).
+.
+.REQ .tr abcd....
+Translate
+.argument a
+to
+.argument b ,
+.argument c
+to
+.argument d ,
+etc. on output.
+.
+.REQ .trnt abcd....
+This is the same as the
+.request .tr
+request except that the translations do not apply to text that is
+transparently throughput into a diversion with
+.esc ! .
+.
+.REQ .troff
+Make the built-in condition
+.B t
+true and
+.B n
+false.
+.
+.REQ .uf font
+Underline font set to
+.argument font
+(to be switched to by
+.request .ul ).
+.
+.REQ .ul N
+Underline (italicize in troff)
+.argument N
+input lines.
+.
+.REQ .vpt n
+Enable vertical position traps if
+.argument n
+is non-zero, disable them otherwise.
+.
+.REQ .vs
+Change to previous vertical base line spacing.
+.
+.REQ .vs N
+Set vertical base line spacing to
+.argument N .
+Default value is
+.scalednumber 12 p .
+.
+.REQ .warn n
+Set warnings code to
+.argument n .
+.
+.REQ .wh N trap
+Set location trap; negative means from page bottom.
+.
+.REQ .while cond anything
+While condition
+.argument cond
+is true, accept
+.argument anything
+as input.
+.
+.REQ .write stream anything
+Write
+.argument anything
+to the stream named
+.argument stream .
+.
+.PD
+.LP
+Besides these standard groff requests, there might be further macro
+calls.
+They can originate from a macro package (see
+.BR roff (@MAN7EXT@)
+for an overview) or from a preprocessor.
+.LP
+Preprocessor macros are easy to be recognized. They enclose their code
+into a pair of characteristic macros.
+.LP
+.TS
+box, center, tab (@);
+c | c | c
+CfCB | CfCB | CfCB.
+preprocessor@start macro@ end macro
+=
+eqn@.PS@.PE
+grap@.G1@.G2
+grn@.GS@.GE
+pic@.PS@.PE
+refer@.R1@.R2
+soelim@\fInone@\fInone
+tbl@.TS@.TE
+.TE
+.LP
+.
+.\" --------------------------------------------------------------------
+.SH "ESCAPE SEQUENCES"
+.\" --------------------------------------------------------------------
+.
+Escape sequences are in-line language elements usually introduced by
+a backslash
+.'char \(rs
+and followed by an escape name and sometimes by a required argument.
+Input processing is continued directly after the escaped character or
+the argument resp. without an intervening separation character.
+So there must be a way to determine the end of the escape name and the end
+of the argument.
+.LP
+This is done by enclosing names (escape name and arguments consisting of
+a variable name) by a pair of brackets
+.esc[] name
+and constant arguments (number expressions and characters) by apostrophes
+(ASCII 0x27) like
+.IR \(cqconstant\(cq .
+.LP
+There are abbreviations for short names.
+Two character escape names can be specified by an opening parenthesis like
+.esc( xy
+without a closing counterpart.
+And all one-character names different from the special characters
+.'char [
+and
+.'char (
+can even be specified without a marker in the form
+.esc \fP\f(CIc .
+.LP
+Constant arguments of length
+.number 1
+can omit the marker apostrophes, too, but there is no two-character
+analogue.
+.LP
+While 1-character escape sequences are mainly used for in-line functions
+and system related tasks, the 2-letter names following the
+.esc( ""
+construct are used for special characters predefined by the roff system.
+Names with more than two characters
+.esc[] name
+mostly denote user defined named characters (see the
+.request .char
+request).
+.
+.\" --------------------------------------------------------------------
+.SS "SINGLE CHARACTER ESCAPES"
+.\" --------------------------------------------------------------------
+.
+.PD 0
+.
+.\" --------- comments ---------
+.
+.ESC \(dq
+Beginning of a comment.
+Everything up to the end of the line is ignored.
+.
+.ESC #
+Everything up to and including the next newline is ignored.
+This is interpreted in copy mode.
+This is like
+.esc \(dq
+except the ignoring of the terminating newline.
+.
+.\" --------- strings ---------
+.
+.ESC * s
+The string stored in the string variable with 1-character name
+.argument s .
+.
+.ESC *( st
+The string stored in the string variable with 2-character name
+.argument st .
+.
+.ESC[] * stringvar
+The string stored in the string variable with arbitrary length name
+.argument stringvar .
+.
+.\" --------- macro arguments ---------
+.
+.ESC $0
+The name by which the current macro was invoked. The
+.request .als
+request can make a macro have more than one name.
+.
+.ESC $ x
+Macro argument with 1-place number
+.argument x ,
+where
+.argument x
+is a digit between 1 and 9.
+.
+.ESC $( xy
+Macro argument with 2-digit number
+.argument xy .
+.
+.ESC[] $ nexp
+Macro argument with number
+.argument nexp ,
+where
+.argument nexp
+is a numerical expression evaluating to an integer \(>=1.
+.
+.ESC $*
+In a macro, the concatenation of all the arguments separated by spaces.
+.
+.ESC $@
+In a macro, the concatenation of all the arguments with each surrounded
+by double quotes, and separated by spaces.
+.
+.\" --------- escaped characters ---------
+.
+.ESC \(rs
+reduces to a single backslash; useful to delay its interpretation as
+escape character in copy mode.
+For a printable backslash, use
+.esc e .
+.
+.ESC \(cq
+The acute accent \(aa; same as
+.esc( aa .
+Unescaped: apostrophe, right quotation mark, single quote (ASCII 0x27).
+.
+.ESC `
+The grave accent \(ga; same as
+.esc( ga .
+Unescaped: left quote, backquote (ASCII 0x60).
+.
+.ESC \-
+The \- sign in the current font.
+.
+.ESC .
+An uninterpreted dot (period), even at start of line.
+.
+.ESC %
+Default optional hyphenation character.
+.
+.ESC !
+Transparent line indicator.
+.
+.ESC ? anything\fB?\fP
+In a diversion, this will transparently embed
+.argument anything
+in the diversion.
+.argument anything
+is read in copy mode.
+See also the escape sequences
+.esc !
+and
+.esc ? .
+.
+.
+.\" --------- spacing ---------
+.
+.ESC \& space
+Unpaddable space-size space character (no line break).
+.
+.ESC 0
+Digit width.
+.
+.ESC |
+1/6\ em narrow space character; zero width in nroff.
+.
+.ESC ^
+1/12\ em half-narrow space character; zero width in nroff.
+.
+.ESC &
+Non-printable, zero width character.
+.
+.ESC )
+Like
+.esc &
+except that it behaves like a character declared with the cflags
+request to be transparent for the purposes of end of sentence
+recognition.
+.
+.ESC /
+Increases the width of the preceding character so that the spacing
+between that character and the following character will be correct if
+the following character is a roman character.
+.
+.ESC ,
+Modifies the spacing of the following character so that the spacing
+between that character and the preceding character will correct if the
+preceding character is a roman character.
+.
+.ESC ~
+Unbreakable space that stretches like a normal inter-word space when a
+line is adjusted.
+.
+.ESC \& newline
+Ignored newline, for continuation lines.
+.
+.\" --------- structuring ---------
+.
+.ESC {
+Begin conditional input.
+.
+.ESC }
+End conditional input.
+.
+.\" --------- longer escape names ---------
+.
+.ESC ( st
+The special character with 2-character name
+.argument st ,
+see section
+.BR "SPECIAL CHARACTERS" .
+.
+.ESC[] \& name
+The named character with arbitrary length name
+.argument name .
+.
+.\" --------- alphabetical escapes ---------
+.
+.ESC a
+Non-interpreted leader character.
+.
+.ESCq A anything
+If
+.argument anything
+acceptable as name of a string, macro, diversion, register,
+environment or font it is
+.number 1
+otherwise
+.number 0 .
+.
+.ESCq b abc...
+Bracket building function.
+.
+.ESC c
+Interrupt text processing.
+.
+.ESCq C char
+The character called
+.argument char ;
+same as
+.esc[] char ,
+but compatible to other roff versions.
+.
+.ESC d
+Forward (down) 1/2 em vertical unit (1/2 line in nroff).
+.
+.ESCq D charseq
+Draw a graphical element defined by the characters in
+.argument charseq ;
+see groff info file for details.
+.
+.ESC e
+Printable version of the current escape character.
+.
+.ESC E
+Equivalent to an escape character, but is not interpreted in copy-mode.
+.
+.ESC f F
+Change to font with 1-character name or 1-digit number
+.argument F .
+.
+.ESC f( fo
+Change to font with 2-characer name or 2-digit number
+.argument fo .
+.
+.ESC[] f font
+Change to font with arbitrary length name or number expression
+.argument font .
+.
+.ESC[] g reg
+Return format of register with name
+.argument reg
+suitable for
+.request .af .
+Alternative forms
+.esc(arg g xy
+and
+.escarg g x .
+.
+.ESCq h N
+Local horizontal motion; move right
+.argument N
+(left if negative).
+.
+.ESCq H N
+Set height of current font to
+.argument N .
+.
+.ESC[] k reg
+Mark horizontal input place in register with arbitrary length name
+.argument reg .
+Alternative forms
+.esc(arg k xy
+and
+.escarg k x .
+.
+.ESCq l Nc
+Horizontal line drawing function (optionally using character
+.argument c ).
+.
+.ESCq L Nc
+Vertical line drawing function (optionally using character
+.argument c ).
+.
+.ESC n r
+The numerical value stored in the register variable with the 1-character
+name
+.argument r .
+.
+.ESC n( re
+The numerical value stored in the register variable with the 2-character
+name
+.argument re .
+.
+.ESC[] n reg
+The numerical value stored in the register variable with arbitrary
+lenght name
+.argument reg .
+.
+.ESCq N n
+Typeset the character with code
+.argument n
+in the current font, no special fonts are searched. Useful for adding
+characters to a font using the
+.request .char
+request.
+.
+.ESCq o abc...
+Overstrike characters
+.argument a ,
+.argument b ,
+.argument c ,
+etc.
+.
+.ESC p
+Break and spread output line.
+.
+.ESC r
+Reverse 1\ em vertical motion (reverse line in nroff).
+.
+.ESCq R name \(+-n
+The same as
+.request .nr
+.argument name
+.argument \(+-n .
+.
+.ESC[] s \(+-N
+Set the point size to
+.I N
+scaled points. Note the alternative forms
+.BI \(rss \(+- [ N ]\c
+,
+.BI \(rss' \(+-N '\c
+,
+.BI \(rss \(+- ' N '\c
+,
+.esc(arg s \(+-xy ,
+.BI \(rss \(+- ( xy\c
+,
+.escarg s \(+-x .
+Same as
+.request .ps
+request.
+.
+.ESCq S N
+Slant output
+.argument N
+degrees.
+.
+.ESC t
+Non-interpreted horizontal tab.
+.
+.ESC u
+Reverse (up) 1/2 em vertical motion (1/2 line in nroff).
+.
+.ESCq v N
+Local vertical motion; move down
+.argument N
+(up if negative).
+.
+.ESC[] V env
+The contents of the environment variable
+.argument env .
+Alternative forms
+.esc(arg V xy
+and
+.escarg V x .
+.
+.ESCq w string
+The width of the character sequence
+.argument string .
+.
+.ESCq x N
+Extra line-space function (negative before, positive after).
+.
+.ESCq X string
+Output
+.argument string
+as device control function.
+.
+.ESC[] Y name
+Output string variable or macro
+.argument name
+uninterpreted as device control function.
+Alternative forms
+.esc(arg Y xy
+and
+.escarg Y x .
+.
+.ESC z c
+Print
+.argument c
+with zero width (without spacing).
+.
+.ESCq Z anything
+Print
+.argument anything
+and then restore the horizontal and vertical position;
+.argument anything
+may not contain tabs or leaders.
+.PD
+.LP
+The escape sequences
+.esc e ,
+.esc . ,
+.esc \(dq ,
+.esc $ ,
+.esc * ,
+.esc a ,
+.esc n ,
+.esc t ,
+.esc g ,
+and
+.escarg \& newline
+are interpreted in copy mode.
+.LP
+Escape sequences starting with
+.esc (
+or
+.esc [
+do not represent single character escape sequences, but introduce escape
+names with two or more characters.
+.LP
+If a backslash is followed by a character that does not constitute a
+defined escape sequence the backslash is silently ignored and the
+character maps to itself.
+.
+.\" --------------------------------------------------------------------
+.SS "SPECIAL CHARACTERS"
+.\" --------------------------------------------------------------------
+Common special characters are predefined by escape sequences of the form
+.(esc \fP\f(CIxy
+with characters
+.argument x
+and
+.argument y .
+Some of these exist in the usual font while most of them are only
+available in the special font. Below you'll find a selection of the most
+important glyphs; a complete list can be found in
+.BR groff_char (@MAN7EXT@).
+.RS
+.LP
+.PD 0
+.
+.ESc bu Bullet sign
+.ESc co Copyright
+.ESc ct Cent
+.ESc dd Double dagger
+.ESc de Degree
+.ESc dg Dagger
+.ESc em Em-dash
+.ESc hy Hyphen
+.ESc rg Registered sign
+.ESc sc Section sign
+.ESc ul Underline character
+.ESc == Identical
+.ESc >= Larger or equal
+.ESc <= Less or equal
+.ESc != Not equal
+.ESc -> Right arrow
+.ESc <- Left arrow
+.ESc +- Plus-minus sign
+.PD
+.RE
+.
+.\" --------------------------------------------------------------------
+.SH REGISTERS
+.\" --------------------------------------------------------------------
+Registers are variables that store a value.
+In groff, most registers store numerical values (see section
+.B NUMERICAL EXPRESSIONS
+above), but some can also hold a string value.
+.LP
+Each register is given a name.
+Arbitrary registers can be defined and set with the request
+.request .nr
+.argument register .
+.LP
+The value stored in a register can be retrieved by the escape sequences
+introduced by
+.esc n .
+.LP
+Most useful are predefined registers.
+In the following the notation
+.argument name
+is used to refer to a register called
+.register name
+to make clear that we speak about registers.
+Please keep in mind that the
+.esc en[]
+decoration is not part of the register name.
+.
+.\" --------------------------------------------------------------------
+.SS "READ-ONLY REGISTERS"
+.\" --------------------------------------------------------------------
+The following registers have predefined values that should not be
+modified by the user (usually, registers starting with a dot a read-only).
+Mostly, they provide information on the current settings or store results
+from request calls.
+.LP
+.PD 0
+.REG .$ Number of arguments in the current macro.
+.REG .A
+Set to
+.number 1
+in
+.B troff
+if option
+.B \-A
+is used; always
+.number 1
+in
+.BR nroff .
+.REG .H Available horizontal resolution in basic units.
+.REG .T
+Set to
+.number 1
+if option
+.B \-T
+is used.
+.REG .V Available vertical resolution in basic units.
+.REG .a
+Post-line extra line-space most recently utilized using
+.escarg x 'N' .
+.REG .C 1 if compatibility mode is in effect, 0 otherwise.
+.REG .c Current input line number.
+.REG .cdp
+The depth of the last character added to the current environment.
+It is positive if the character extends below the baseline.
+.REG .ce
+The number of lines remaining to be centered, as set by the
+.request .ce
+request.
+.REG .cht
+The height of the last character added to the current environment.
+It is positive if the character extends above the baseline.
+.REG .csk
+The skew of the last character added to the current environment.
+The skew of a character is how far to the right of the center of a character
+the center of an accent over that character should be placed.
+.REG .d
+Current vertical place in current diversion; equal to register
+.register nl .
+.REG .ev The name or number of the current environment (string-valued).
+.REG .f Current font number.
+.REG .fam The current font family (string-valued).
+.REG .fp The number of the next free font position.
+.REG .g
+Always 1 in GNU troff.
+Macros should use it to test if running under groff.
+.REG .h Text base-line high-water mark on current page or diversion.
+.REG .hla
+The current hyphenation language as set by the
+.B .hla
+request.
+.REG .hlc
+The number of immediately preceding consecutive hyphenated lines.
+.REG .hlm
+The maximum allowed number of consecutive hyphenated lines, as set by
+the
+.request .hlm
+request.
+.REG .hy
+The current hyphenation flags (as set by the
+.request .hy
+request).
+.REG .hym
+The current hyphenation margin (as set by the
+.request .hym
+request).
+.REG .hys
+The current hyphenation space (as set by the
+.request .hys
+request).
+.REG .i Current ident.
+.REG .in The indent that applies to the current output line.
+.REG .kern
+.number 1
+if pairwise kerning is enabled,
+.number 0
+otherwise.
+.REG .l Current line length.
+.REG .lg
+The current ligature mode (as set by the
+.request .lg
+request).
+.REG .ll The line length that applies to the current output line.
+.REG .lt
+The title length (as set by the
+.request .lt
+request).
+.REG .n Length of text portion on previous output line.
+.REG .ne
+The amount of space that was needed in the last
+.request .ne
+request that caused a trap to be sprung.
+Useful in conjunction with
+.register .trunc .
+.REG .o Current page offset.
+.REG .p Current page length.
+.REG .pn
+The number of the next page: either the value set by a
+.request .pn
+request, or the number of the current page plus\ 1.
+.REG .ps The current pointsize in scaled points.
+.REG .psr The last-requested pointsize in scaled points.
+.REG .rj
+The number of lines to be right-justified as set by the rj request.
+.REG .s Current point size as a decimal fraction.
+.REG .sr
+The last requested pointsize in points as a decimal fraction
+(string-valued).
+.REG .t Distance to the next trap.
+.REG .tabs
+A string representation of the current tab settings suitable for use as
+an argument to the
+.request .ta
+request.
+.REG .trunc
+The amount of vertical space truncated by the most recently sprung
+vertical position trap, or, if the trap was sprung by a
+.request .ne
+request, minus the amount of vertical motion produced by
+.request .ne .
+request.
+In other words, at the point a trap is sprung, it represents the difference
+of what the vertical position would have been but for the trap, and what the
+vertical position actually is.
+Useful in conjunction with the
+.register .ne
+register.
+.REG .ss
+The value of the parameters set by the first argument of the
+.request .ss
+request.
+.REG .sss
+The value of the parameters set by the second argument of the
+.request .ss
+request.
+.REG .u Equal to 1 bin fill mode and 0 in nofill mode.
+.REG .v Current vertical line spacing.
+.REG .vpt
+.number 1
+if vertical position traps are enabled,
+.number 0
+otherwise.
+.REG .w Width of previous character.
+.REG .warn
+The sum of the number codes of the currently enabled warnings.
+.REG .x The major version number.
+.REG .y The minor version number.
+.REG .Y The revision number of groff.
+.REG .z Name of current diversion.
+.REG llx
+Lower left x-coordinate (in PostScript units) of a given PostScript
+image (set by
+.request .psbb ).
+.REG lly
+Lower left y-coordinate (in PostScript units) of a given PostScript
+image (set by
+.request .psbb ).
+.REG rsb Like
+.register sb ,
+but takes account of the heights and depths of characters.
+.REG rst
+Like
+.register st ,
+but takes account of the heights and depths of characters.
+.REG sb
+Depth of string below base line (generated by width function
+.esc w ).
+.REG skw
+Right skip width from the center of the last character in the
+.esc w
+argument.
+.REG ssc
+The amount of horizontal space (possibly negative) that should be added
+to the last character before a subscript (generated by width function
+.esc w ).
+.REG st
+Height of string above base line (generated by width function
+.esc w ).
+.REG urx
+Upper right x-coordinate (in PostScript units) of a given PostScript
+image (set by
+.request .psbb ).
+.REG ury
+Upper right y-coordinate (in PostScript units) of a given PostScript
+image (set by
+.request .psbb ).
+.PD
+.
+.\" --------------------------------------------------------------------
+.SS "WRITABLE REGISTERS"
+.\" --------------------------------------------------------------------
+The following registers can be read and written by the user.
+They have predefined default values, but these can be modified for
+customizing a document.
+.LP
+.PD 0
+.REG % Current page number.
+.REG c. Current input line number.
+.REG ct Character type (set by width function
+.esc w ).
+.REG dl Maximal width of last completed diversion.
+.REG dw Current day of week (1-7).
+.REG dy Current day of month (1-31).
+.REG hp Current horizontal position at input line.
+.REG ln Output line number.
+.REG mo Current month (1-12).
+.REG nl Vertical position of last printed text base-line.
+.REG slimit
+If greater than 0, the maximum number of objects on the input stack.
+If \(<=0 there is no limit, i.e., recursion can continue until virtual
+memory is exhausted.
+.REG systat
+The return value of the
+.I system()
+function executed by the last
+.request .sy
+request.
+.REG year The current year (year 2000 compliant).
+.REG yr
+Current year minus 1900. For Y2K compliance use register
+.register year
+instead.
+.PD
+.
+.\" --------------------------------------------------------------------
+.SH WARNINGS
+.\" --------------------------------------------------------------------
+Each warning generated by groff is identified by a name and a code
+number. The codes are powers of 2 to allow bit-encoding with a single
+integer. There are also names that can be used to refer to groups of
+warnings.
+.LP
+The name associated with a warning is used by the
+.option \-w
+and
+.option \-W
+options;
+the number code is used by the
+.request .warn
+request and by the
+.esc[arg] n warn
+register.
+.LP
+.PD 0
+.Warning all group
+All warnings except
+.warning di ,
+.warning mac
+and
+.warning reg .
+Intended to cover all warnings with traditional macro packages.
+.Warning break 4
+In fill mode, lines which could not be broken so that their length was
+less than the line length. This is enabled by default.
+.Warning char 1
+Non-existent characters. This is enabled by default.
+.Warning delim 8
+Missing or mismatched closing delimiters.
+.Warning di 256
+Use of
+.request .di
+or
+.request .da
+without an argument when there is no current diversion.
+.Warning el 16
+Use of the
+.request .el
+request with no matching
+.request .ie
+request.
+.Warning escape 32768
+Unrecognized escape sequence. Then the escape character is ignored.
+.Warning font 131072
+Non-existent fonts. This is enabled by default.
+.Warning ig 262144
+Illegal escapes in text ignored with the
+.request \.ig
+request. These are conditions that are errors when they occur outside
+of ignored text.
+.Warning mac 512
+Use of undefined strings, macros, and diversions. Automatically handled
+as empty. Usually, only one warning per name.
+.Warning missing 8192
+Request that is missing non-optional arguments.
+.Warning input 16384
+Illegal input character.
+.Warning number 2
+Invalid numeric expressions. This is enabled by default.
+.Warning range 64
+Out of range arguments.
+.Warning reg 1024
+Use of undefined number register. Automatically defined as having
+value 0. Usually, only one warning per name.
+.Warning right-brace 4096
+Use of
+.esc }
+where a number was expected.
+.Warning scale 32
+Meaningless scaling indicators.
+.Warning space 65536
+Missing space between a request or macro and its argument. Then no
+macro is automatically defined. This is enabled by default. This
+warning will never occur in compatibility mode.
+.Warning syntax 128
+Dubious syntax in numeric expressions.
+.Warning tab 2048
+Inappropriate use of a tab character (either in an unquoted macro
+argument or where a number was expected).
+.Warning w group
+All warnings.
+.PD
+.LP
+.TS
+tab(@), box, expand;
+c c c | c c c | c c c
+R RI CB | R RI CB | R RI CB.
+Bit@Code@Warning@Bit@Code@Warning@Bit@Code@Warning
+_
+0@1@char@8@256@di@16@65536@space
+1@2@number@9@512@mac@17@131072@font
+2@4@break@10@1024@reg@18@262144@ig
+3@8@delim@11@2048@tab
+4@16@el@12@4096@right-brace
+5@32@scale@13@8192@missing
+6@64@range@14@16384@input
+7@128@syntax@15@32768@escape
+.TE
+.LP
+.
+.\" --------------------------------------------------------------------
+.SH COMPATIBILITY
+.\" --------------------------------------------------------------------
+.I groff
+provides a
+.B compatibility mode
+that allows to process roff code written for classical
+.troff
+or for other implementations of roff in a consistent way.
+.LP
+Compatibility mode can be turned on with the
+.option \-C
+command line option, and turned on or off with the
+.request .cp
+request. The number register
+.esc(arg n .C
+is
+.number 1
+if compatibility mode is on,
+.number 0
+otherwise.
+.LP
+This became necessary because the GNU concept for long names causes some
+incompatibilities.
+.I Classical troff
+will interpret
+.IP
+.B
+\&.dsabcd
+.LP
+as defining a string
+.B ab
+with contents
+.BR cd .
+Normally,
+.I groff
+will interpret this as a call of a macro named
+.request dsabcd .
+.LP
+Also
+.I classical troff
+will interpret
+.esc *[
+or
+.esc n[
+as references to a string or number register called
+.register [ .
+In
+.I GNU native
+.IR mode ,
+however, this will normally be interpreted as the start of a long name.
+.LP
+In
+.I compatibility
+.IR mode ,
+groff will interpret these things in the traditional way, but long names
+are not recognized.
+.LP
+On the other hand, groff in
+.I GNU native mode
+does not allow to use the escape sequences
+.esc e ,
+.esc | ,
+.esc ^ ,
+.esc & ,
+.esc } ,
+.esc { ,
+.esc "\ " (space),
+.esc ' ,
+.esc ` ,
+.esc - ,
+.esc _ ,
+.esc ! ,
+.esc % ,
+and
+.esc c
+in names of strings, macros, diversions, number registers, fonts or
+environments, whereas
+.I classical troff
+does. The
+.esc A
+escape sequence can be helpful in avoiding these escape sequences in
+names.
+.LP
+Fractional pointsizes cause one noteworthy incompatibility.
+In
+.I classical
+.IR troff ,
+the
+.request .ps
+request ignores scale indicators and so
+.RS
+.LP
+.B .ps\ 10u
+.RE
+.LP
+will set the pointsize to 10 points, whereas in groff native mode the
+pointsize will be set to 10 scaled points.
+.LP
+In
+.I groff
+mode, there is a fundamental difference between unformatted input
+characters, and formatted output characters.
+Everything that affects how an output character will be output is stored
+with the character; once an output character has been constructed it is
+unaffected by any subsequent requests that are executed, including the
+.request .bd ,
+.request .cs ,
+.request .tkf ,
+.request .tr ,
+or
+.request .fp
+requests.
+.LP
+Normally output characters are constructed from input characters at the
+moment immediately before the character is added to the current output
+line.
+Macros, diversions and strings are all, in fact, the same type of object;
+they contain lists of input characters and output characters in any
+combination.
+.LP
+An output character does not behave like an input character for the
+purposes of macro processing; it does not inherit any of the special
+properties that the input character from which it was constructed might
+have had.
+The following example will make things clearer.
+.LP
+.RS
+.nf
+.ft B
+\&.di x
+\(rs\(rs\(rs\(rs
+\&.br
+\&.di
+\&.x
+.ft
+.fi
+.RE
+.LP
+In
+.I GNU mode
+this will be printed as
+.esc \(rs .
+So each pair of input backslashes
+.'char \(rs\(rs
+is turned into a single output backslash
+.'char \(rs
+and the resulting output backslashes are not interpreted as escape
+characters when they are reread.
+.LP
+.I Classical troff
+would interpret them as escape characters when they were reread and
+would end up printing a single backslash
+.'char \(rs .
+.LP
+The correct way to get a printable
+.'char \(rs
+is to use the
+.esc e
+escape sequence. This will always print a single instance of the
+current escape character, regardless of whether or not it is used in a
+diversion. It will also work in both GNU mode and compatibility mode.
+.LP
+To store an escape sequence in a diversion that will be interpreted when
+the diversion is reread, either the traditional
+.esc !
+transparent output facility or the
+new
+.esc ?
+escape sequence can be used.
+.
+.\" --------------------------------------------------------------------
+.SH BUGS
+.\" --------------------------------------------------------------------
+At the moment, the documentation of the groff system is in a state of
+change and evolution. It is possible that there are small
+inconsistencies between different documents temporarily.
+.LP
+The
+.B WARNINGS
+section belongs to
+.BR troff (@MAN1EXT@).
+.
+.\" --------------------------------------------------------------------
+.SH AUTHOR
+.\" --------------------------------------------------------------------
+This document is part of groff, the GNU roff distribution. It was
+written by Bernd Warken <bwarken@mayn.de>.
+.LP
+It is distributed under the terms of the FDL (GNU Free Documentation
+License) version 1.1 or later. You should have received a copy of the
+FDL on your system, it is also available on-line under
+.RS
+.LP
+.IR http://www.gnu.org/copyleft/fdl.html .
+.RE
+.LP
+Formerly, the extensions of the groff language were kept in the manual
+page
+.BR troff (@MAN1EXT@).
+This document contains the essential parts of that documentation, but
+the gory details are found in the groff info file.
+.
+.\" --------------------------------------------------------------------
+.SH "SEE ALSO"
+.\" --------------------------------------------------------------------
+The main source of information for the groff language is the
+.B groff
+.BR info (1)
+file.
+.LP
+For a survey of roff and the groff system and further documentation
+pointers see
+.BR roff (@MAN7EXT@).
+.LP
+The formatter programs are described in
+.BR groff (@MAN1EXT@)
+and
+.BR troff (@MAN1EXT@);
+a complete of all predefined glyph names can be found in
+.BR groff_char (@MAN7EXT@).
+.LP
+The classical
+.I troff
+documentation is available on-line at
+.RS
+.LP
+.I http://cm.bell-labs.com/cm/cs/cstr.html
+.RE
+and
+.RS
+.IR http://www.kohala.com/start/troff/ .
diff --git a/contrib/groff/man/groff_char.man b/contrib/groff/man/groff_char.man
index 18085dc..fd9f4ce 100644
--- a/contrib/groff/man/groff_char.man
+++ b/contrib/groff/man/groff_char.man
@@ -1,5 +1,5 @@
.ig \"-*- nroff -*-
-Copyright (C) 1989-1995 Free Software Foundation, Inc.
+Copyright (C) 1989-2000 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -45,7 +45,9 @@ This manual page lists the standard
.B groff
input characters.
Only the characters that are available for the device that
-is being used to print this manual page will be displayed.
+is being used to print or view this manual page will be
+.ie \n(.g displayed (the device currently used is `\*(.T').
+.el displayed.
The
.I "Input code"
column applies to characters which can be
@@ -379,6 +381,7 @@ Output Input Input PostScript Notes
.C2 OK \& "check mark, tick"
.C2 Of ordfeminine
.C2 Om ordmasculine
+.C2 pc periodcentered
.C2 S1 onesuperior
.C2 S2 twosuperior
.C2 S3 threesuperior
@@ -399,7 +402,7 @@ Output Input Input PostScript Notes
.C2 br br "box rule with traditional troff metrics"
.C2 ru ru "baseline rule"
.C2 ul ul "underline with traditional troff metrics"
-.C2 bv bv "bold vertical"
+.C2 bv bv "bar vertical"
.C2 bs bell
.C2 ci circle
.C2 bu bullet
@@ -436,7 +439,9 @@ Output Input Input PostScript Notes
.C2 lq quotedblleft
.C2 rq quotedblright
.C2 oq quoteleft "single open quote"
+.C2 cq quoteright "single closing quote (ASCII 39)"
.C2 aq quotesingle "apostrophe quote"
+.C2 dq quotedbl "double quote (ASCII 34)"
.C2 or bar
.C2 at at
.C1 - minus "minus sign from current font"
@@ -533,6 +538,9 @@ Output Input Input PostScript Notes
.C2 ib reflexsubset
.C2 ip reflexsuperset
.C2 ap similar
+.C2 is integral
+.C2 sr radical "square root"
+.C2 rn \& overline
.C2 pd partialdiff "partial differentiation sign"
.C2 c* circlemultiply "multiply sign in a circle"
.C2 c+ circleplus "plus sign in a circle"
@@ -549,8 +557,8 @@ Output Input Input PostScript Notes
.C2 CR carriagereturn "carriage return symbol"
.C2 st suchthat
.C2 /_ angle
-.C2 << "" "much less"
-.C2 >> "" "much greater"
+.C2 << \& "much less"
+.C2 >> \& "much greater"
.C2 wp weierstrass "Weierstrass p"
.C2 lz lozenge
.C2 an arrowhorizex "horizontal arrow extension"
diff --git a/contrib/groff/man/groff_font.man b/contrib/groff/man/groff_font.man
index 97b6480..8b9e3b4 100644
--- a/contrib/groff/man/groff_font.man
+++ b/contrib/groff/man/groff_font.man
@@ -130,6 +130,16 @@ will cause no font to be mounted on the corresponding font position.
The default font family is
.IR fam .
.TP
+.B use_charnames_in_special
+This command indicates that troff should encode named characters inside
+special commands.
+.TP
+.B pass_filenames
+requests that troff tells the driver the source file name being processed.
+This is achieved by another tcommand:
+.B F
+.IR filename .
+.TP
.B charset
This line and everything following in the file are ignored.
It is allowed for the sake of backwards compatibility.
@@ -139,6 +149,13 @@ Other commands are ignored by
.B troff
but may be used by postprocessors to store arbitrary information
about the device in the DESC file.
+.LP
+Here a list of obsolete keywords which are recognized by
+.B groff
+but completely ignored:
+.BR spare1 ,
+.BR spare2 ,
+.BR biggestfont .
.SS Font file format
A font file has two sections. The first section is a sequence
of lines each containing a sequence of blank delimited
@@ -165,7 +182,8 @@ Characters
are ligatures; possible ligatures are
.BR ff ,
.BR fi ,
-.BR fl
+.BR fl ,
+.B ffi
and
.BR ffl .
For backwards compatibility, the list of ligatures may be terminated
@@ -209,8 +227,10 @@ Each line gives information for one character.
A line comprises a number of fields separated
by blanks or tabs. The format is
.IP
-.I
-name metrics type code comment
+.I name metrics type code
+.RI [ entity_name ]
+.RB [ --
+.IR comment ]
.LP
.I name
identifies the character:
@@ -279,7 +299,16 @@ or
.B 0X
it will be intepreted as hexadecimal.
.LP
-Anything on the line after the code field will be ignored.
+The
+.I entity_name
+field gives an ascii string identifying the glyph which the postprocessor
+uses to print the character.
+This field is optional and has been introduced so that the html device driver
+can encode its character set.
+For example, the character `\e[Po]' is represented as `&pound;' in html 4.0.
+.LP
+Anything on the line after the encoding field resp. after `-\&-' will
+be ignored.
.LP
The
.I metrics
diff --git a/contrib/groff/man/roff.man b/contrib/groff/man/roff.man
new file mode 100644
index 0000000..793ce61
--- /dev/null
+++ b/contrib/groff/man/roff.man
@@ -0,0 +1,520 @@
+.\" -*- nroff -*-
+.ig
+roff.7
+
+This file is part of groff, the GNU roff type-setting system.
+
+Copyright (C) 2000 Free Software Foundation, Inc.
+written by Bernd Warken <bwarken@mayn.de>
+
+Last update: 17 May 2000
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being this .ig-section and AUTHOR, with no
+Front-Cover Texts, and with no Back-Cover Texts.
+
+A copy of the Free Documentation License is included as a file called
+FDL in the main directory of the groff source package.
+..
+.
+.\" --------------------------------------------------------------------
+.\" Setup
+.\" --------------------------------------------------------------------
+.
+.if n \{\
+. mso tmac.tty-char
+. ftr CR R
+. ftr CI I
+. ftr CB B
+.\}
+.
+.\" text lines in macro definitions or bracketed sections \{...\}
+.de text
+. if 1 \&\\$*\&
+..
+.
+.de option
+. ds @tmp@ \f(CB\\$1\fP
+. shift 1
+. text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.
+.de 'char
+. ds @tmp@ `\f(CB\\$1\fP'
+. shift
+. text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.
+.de esc
+. ds @tmp@ \f(CB\e\\$1\fP
+. shift
+. text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.
+.de argname
+. ds @tmp@ \f(CI\\$1\fP
+. shift 1
+. text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.
+.de prefixednumber
+. ds @tmp@ \&\\$1\ \f(CR\\$2\fP
+. shift 2
+. text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.
+.\" --------------------------------------------------------------------
+.\" Title
+.\" --------------------------------------------------------------------
+.TH ROFF @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
+.SH NAME
+roff \- a survey of the roff typesetting system
+.\" --------------------------------------------------------------------
+.SH DESCRIPTION
+.\" --------------------------------------------------------------------
+.I roff
+is the general name for a set of type-setting programs, known under
+names like
+.IR troff ,
+.IR nroff ,
+.IR groff ,
+etc.
+.LP
+The roff type-setting system consists of a formatting language, macro
+packages, preprocessors, postprocessors for output devices, user
+front-end programs, and conversion tools.
+.LP
+The most common roff system today is the free software implementation
+.I groff
+(from `GNU\ roff').
+The pre-groff implementations are referred to as `classical' (dating
+back as long as 1973).
+.LP
+.I groff
+is backward-compatible to its classical ancestors, but has many
+extensions, and is still evolving.
+As it is available for almost every computer system it is the de-facto
+roff standard today.
+.LP
+In spite of its age, roff is in wide use today, e.g., the manual pages
+on UNIX systems
+.RI ( man-pages )
+are written in roff.
+The roff output for text devices is still unmatched, and its graphical
+output has the same quality as the other free type-setting programs and
+is better than some of the commercial systems.
+.LP
+This document gives only an overview and provides pointers to further
+documentation.
+
+This document is not maintained and might be out of date. For the real
+documentation refer to the groff info file that contains the detailed,
+actual and concise reference information.
+.\" --------------------------------------------------------------------
+.SH "FORMATTING LANGUAGE"
+.\" --------------------------------------------------------------------
+There are three terms that refer to the language of the
+.I roff
+system.
+The term
+.I troff language
+is used when the classical aspects of
+.I roff
+are stressed, the term
+.I groff language
+includes the GNU extensions, whereas
+.I roff language
+is the general term.
+.LP
+The main source of documentation for all aspects of the
+.I groff language
+is the groff info file. The manual page
+.BR groff (@MAN7EXT@)
+gives a short description of all predefined language elements.
+.LP
+Documents using roff are normal text files decorated by formatting
+elements.
+It is very easy to write high-quality documents by using one of the
+macro packages.
+These are like high-level programming languages, while the bare roff
+language compares to a low-level language like C or assembler.
+.LP
+The roff language is a full programming language providing low-level
+requests, definition of macros, escape sequences, string variables,
+number or size registers, and C-like flow controls.
+.ig /
+In the 1980s, it was even possible to write the common utilities for
+system administration by only using troff.
+There were contests on writing the most unreadable program fake by
+exclusively using troff.
+Because of security impacts, these dangerous features were removed in
+.IR groff .
+./
+.LP
+Some clarification on the language elements seems to be wanted.
+Requests are basic formatting commands defined by programming languages
+like C, C++, etc., whereas macros are formatting commands that are
+written in the roff language.
+A document writer will not note any difference in usage for requests or
+macros, both are written on a line on their own starting with a dot
+.'char . .
+But the user may define her own macros if desired.
+.LP
+Escape sequences are in-line elements starting with a backslash
+.'char \e .
+They are used to implement various features, including the insertion of
+non-ASCII characters with
+.esc ( ,
+the content of strings with
+.esc *
+and register variables with
+.esc n ,
+font changes with
+.esc f ,
+in-line comments with
+.esc \(dq ,
+the escaping of special control characters like
+.esc \e ,
+and many other features.
+.\" --------------------------------------------------------------------
+.SH FORMATTERS
+.\" --------------------------------------------------------------------
+Formatters are the front-end programs that analyze a groff document and
+translate it into a form that is suitable for a special device.
+The traditional
+.I roff
+had two formatters,
+.B nroff
+for text devices and
+.B troff
+for graphical devices.
+.LP
+These programs still exist in the
+.I groff
+implementation, but usually they are accessed through a program called
+.BR groff .
+This combined and extended the old functionality into a single program.
+It has many command-line options, most of them herited from
+.BR troff .
+To ease the option jungle, the user-friendly utility
+.B grog
+(from `groff guess') was created.
+It tries to guess from the document which arguments should be used and
+displays a suitable command line.
+Though not being perfect, it is a good starting point.
+.\" --------------------------------------------------------------------
+.SH PREPROCESSORS
+.\" --------------------------------------------------------------------
+The classical preprocessors that are still available in groff.
+.RS
+.LP
+.PD 0
+.TP
+.I eqn
+for including mathematical equations.
+.TP
+.I grap
+for constructing graphical elements (this preprocessor doesn't come with
+groff; it is an extra package).
+.TP
+.I grn
+for including gremlin pictures.
+.TP
+.I pic
+for creating diagrams.
+.TP
+.I refer
+for bibliographic references.
+.TP
+.I soelim
+for including other roff files.
+.TP
+.I tbl
+for rectangular tables.
+.PD
+.RE
+.LP
+Each of these preprocessors defines its own language that is translated
+into roff code when run through the preprocessor program.
+So parts written in these languages may be included within a roff
+document.
+Such an enhanced document is run through one or more corresponding
+preprocessors before it is fed into the actual formatter.
+.LP
+The preprocessor programs extract and transform the document parts
+determined for them.
+They can be called either in a UNIX pipeline with their program name or
+automatically with a groff option.
+.LP
+.TS
+center, box, tab (@);
+C | C
+CfCB | CfCB.
+preprocessor@groff option
+=
+eqn@\-e
+grap@\-G
+grn@\-g
+pic@\-p
+refer@\-R
+tbl@\-r
+soelim@\-s
+.TE
+.LP
+.
+.\" --------------------------------------------------------------------
+.SH "MACRO PACKAGES"
+.\" --------------------------------------------------------------------
+Macro packages are collections of macros that are suitable to format a
+special kind of documents in a convenient way.
+This greatly eases the usage of roff.
+The macro definitions of a package are kept in a file called
+.BI tmac. name
+where
+.I name
+is the internal roff name for this package.
+All tmac files are stored in a single or few directories at standard
+positions.
+.LP
+A macro package that is used in a document is specified by the command line
+option
+.option \-m
+for the formatter like
+.option "troff\ \-m"
+.argname name
+or
+.option "groff\ \-m"
+.argname name .
+General details on the naming of macro packages and their placement is
+found in
+.BR tmac (@MAN5EXT@).
+.LP
+Famous classical macro packages are
+.IR man ,
+.IR mandoc ,
+and
+.I mdoc
+for manual pages and
+.IR me ,
+.IR ms ,
+and
+.I mm
+for books, articles, and letters.
+Besides these collections, groff provides an increasing number of new
+macro packages for various applications, for example integration of or
+conversion into other file formats.
+.\" --------------------------------------------------------------------
+.SH "FILE NAME EXTENSIONS"
+.\" --------------------------------------------------------------------
+Manual pages (man-pages) take the section number as a file name
+extension, e.g., the filename for this document is
+.IR roff.7 ,
+i.e., it is kept in
+.prefixednumber section 7
+of the man-pages.
+.LP
+The classical macro packages take the package name as an extension, e.g.
+.IB file. me
+for a document using the
+.I me
+macro package,
+.IB file. mm
+for
+.IR mm ,
+.IB file. ms
+for
+.IR ms ,
+.IB file. pic
+for
+.I pic
+files,
+etc.
+.ig
+.LP
+But there is no general naming scheme for roff documents, though
+.IB file. roff
+or
+.IB file. rof
+seems to be a good choice.
+.LP
+File name extensions can be very handy in conjunction with the
+.BR less (1)
+pager.
+It provides the possibility to feed all input into a command-line pipe that
+is specified in the shell environment variable
+.B LESSOPEN
+This process is not well documented, so here an example
+.B LESSOPEN='|lesspipe %s'
+where
+.B lesspipe
+is either a system supplied command or a shell script of your own.
+..
+.\" --------------------------------------------------------------------
+.SH EDITING
+.\" --------------------------------------------------------------------
+Most text editors provide support for editing documents using roff.
+Especially useful is the
+.B nroff-mode
+in all flavors of the Emacs editor.
+.\" --------------------------------------------------------------------
+.SH ENVIRONMENT
+.\" --------------------------------------------------------------------
+.TP
+.SM
+.B GROFF_TMAC_PATH
+A colon separated list of directories in which to search for
+macro files, see
+.BR tmac (@MAN5EXT@).
+.TP
+.SM
+.B GROFF_TYPESETTER
+Default device.
+.TP
+.SM
+.B GROFF_FONT_PATH
+A colon separated list of directories in which to search for the
+.BI dev name
+directory.
+.B troff
+will search in directories given in the
+.option \-F
+option before these, and in standard directories
+.RB ( .:/usr/local/share/groff/font:/usr/lib/font )
+after these.
+.\" --------------------------------------------------------------------
+.SH FILES
+.\" --------------------------------------------------------------------
+By default,
+.I groff
+installs all of its library files in a directory tree under
+.IR /usr/local/share/groff .
+This location might vary for different systems.
+In the following, this directory is referred to as
+.IR <groff_dir> .
+.LP
+.TP
+.IB <groff_dir> /tmac/troffrc
+Initialization file for troff.
+.TP
+.IB <groff_dir> /tmac/tmac. name
+Macro files.
+.TP
+.IB <groff_dir> /font/dev name /DESC
+Device description file for device
+.IR name .
+.TP
+.IB <groff_dir> /font/dev name / F
+Font file for font
+.I F
+of device
+.IR name .
+.\" --------------------------------------------------------------------
+.SH BUGS
+.\" --------------------------------------------------------------------
+The groff documentation is in evolution at the moment.
+It is possible that small inconsistencies between different documents exist
+temporarily.
+.\" --------------------------------------------------------------------
+.SH AUTHOR
+.\" --------------------------------------------------------------------
+This document is part of groff, the GNU roff distribution. It was
+written by Bernd Warken <bwarken@mayn.de>.
+.LP
+It is distributed under the terms of the FDL (GNU Free Documentation
+License) version 1.1 or later. You should have received a copy of the
+FDL on your system, it is also available on-line under
+.RS
+.LP
+.IR <http://www.gnu.org/copyleft/fdl.html> .
+.RE
+.\" --------------------------------------------------------------------
+.SH "SEE ALSO"
+.\" --------------------------------------------------------------------
+The main source of information is the
+.I groff
+.BR info (1)
+file.
+.LP
+The predefined elements of the
+.I groff
+language are also documented in the manual page
+.BR groff (@MAN7EXT@).
+.LP
+Formatters and their wrappers:
+.BR groff (@MAN1EXT@),
+.BR grog (@MAN1EXT@),
+.BR nroff (@MAN1EXT@),
+and
+.BR troff (@MAN1EXT@).
+.LP
+Postprocessors for the output devices:
+.BR grodvi (@MAN1EXT@),
+.BR grohtml (@MAN1EXT@),
+.BR grolbp (@MAN1EXT@),
+.BR grolj4 (@MAN1EXT@),
+.BR grops (@MAN1EXT@),
+and
+.BR grotty (@MAN1EXT@).
+.LP
+Standard preprocessors:
+.BR eqn (@MAN1EXT@),
+.BR grn (@MAN1EXT@),
+.BR grap (1),
+.BR pic (@MAN1EXT@),
+.BR refer (@MAN1EXT@),
+.BR soelim (@MAN1EXT@),
+and
+.BR tbl (@MAN1EXT@).
+.LP
+The man pages for macro packages include
+.BR groff_tmac (@MAN5EXT@),
+.BR groff_man (@MAN7EXT@),
+.BR groff_markup (@MAN7EXT@),
+.BR groff_mdoc (@MAN7EXT@),
+.BR groff_mdoc.samples (@MAN7EXT@),
+.BR groff_me (@MAN7EXT@),
+.BR groff_mm (@MAN7EXT@),
+.BR groff_mmroff (@MAN7EXT@),
+.BR groff_ms (@MAN7EXT@),
+and
+.BR groff_msafer (@MAN7EXT@).
+.LP
+The following utilities are available:
+.BR addftinfo (@MAN1EXT@),
+.BR afmtodif (@MAN1EXT@),
+.BR hpftodit (@MAN1EXT@),
+.BR indxbib (@MAN1EXT@),
+.BR lookbib (@MAN1EXT@),
+.BR pfbtops (@MAN1EXT@),
+.BR tfmtodit (@MAN1EXT@),
+and
+.BR gxditview (@MAN1EXT@).
+.LP
+For details on the GNU implementation of the
+.I roff
+system see
+.BR groff_char (@MAN7EXT@),
+.BR groff_font (@MAN7EXT@),
+.BR groff_out (@MAN7EXT@),
+and the file
+.I README
+in the main directory of the groff source distribution.
+These also give details on how to contact or join the
+.I groff
+developer group.
+.LP
+Many classical
+.troff
+documents are still available on-line.
+Especially informative are the original Bell Labs proceedings for the old,
+free UNIX 7 found at
+.I http://cm.bell-labs.com/cm/cs/cstr.html
+and the collection of the late Richard S. Stevens at
+.IR http://www.kohala.com/start/troff/ .
OpenPOWER on IntegriCloud