Linux 版 (精华区)
发信人: netiscpu (说不如做), 信区: Linux
标 题: [B] Red Hat Linux Unleashed (17)
发信站: 紫 丁 香 (Sat Jul 25 03:10:48 1998), 转信
groff
_________________________________________________________________
o Embedding Commands
o Controlling Character Appearance
# Sizes and Line Spacing
# Fonts
# Indenting and Line Length
# Other Character Controls
o Macros
o Using mm
# Lists
# Font Changes
# Footnotes
o Summary
_________________________________________________________________
17
groff
This chapter looks at the groff text-formatting utility. Specifically,
you will learn the following:
* What groff is
* How to do basic text formatting
* How to create macros
* What the mm macro package is
The groff program is the GNU version of nroff and troff,
text-formatting languages that have been used in UNIX for many years.
The groff system includes versions of troff, nroff, eqn, tbl, and
other UNIX text-formatting utilities. The groff language is used
primarily to compile man pages written and stored in groff/nroff
format into a form that can be printed or displayed on-screen.
The nroff language was designed to provide text formatting in
lineprinters, whereas troff was developed for phototypesetters. The
commands in the two languages are identical, although some commands
that cannot be processed by a lineprinter are ignored by nroff. In
most cases, you don't use nroff or troff directly, but use a macro
package to access them.
For the most part, nroff and troff have fallen into disuse with the
development of powerful word processors and desktop-publishing
packages. Their sole remaining use is for formatting man pages, which
continue to be used widely.
Both nroff and troff have many commands that you will never require.
Therefore, in this chapter we will look at the basic command set
necessary for you to use the groff version of the two languages, and
how they can be used for man page-specific applications. If you really
want to use groff for advanced text formatting, you should pick up a
dedicated book on the subject.
Embedding Commands
One aspect of groff that may take a little getting used to is that the
way you type lines in the file isn't necessarily the way they will be
displayed in the finished output. The groff system runs text lines
together as much as possible. For example, the source file
This is fine stuff.
It is really interesting and
could keep me busy for hours.
covers three lines in the source, but when formatted, it's run
together by groff to look like this:
This is fine stuff. It is really interesting and could keep me busy for hours.
with line breaks wherever necessary because of the page layout. This
has an advantage in that you don't have to worry about making
everything look properly formatted within the source. However, the
disadvantage is that you might not have any idea what the output will
look like until you see it!
A look at a groff source file shows that it is all ASCII characters
that contain the usual text of the displayed output and a set of
commands starting with a period, like this:
This is a bunch of text that will be displayed.
Here is even more text.
.ps 14
The line above is a groff command, identified by the
period in the first column of the line.
Most groff commands are on a line by themselves, although a few can be
embedded anywhere on a line. These commands are usually prefaced by a
backslash, much as the shell uses the backslash as an escape
character. An example of a line with embedded commands is
This \fBline\fR has two embedded \fIgroff\fR commands.
Although there will be times when you want to use embedded commands,
the majority are the commands on a single line, starting with a
period.
Controlling Character Appearance
The groff language has a few commands for controlling the way
characters look when printed or displayed. These include changing the
size and line spacing of characters, as well as controlling fonts.
Sizes and Line Spacing
Character size and line spacing are not usually useful when displaying
text on-screen, unless you are using a bitmapped terminal. They are
used for printed documents, though. You can change the size of text
with the .ps (point size) command:
This is the default 10-point size.
.ps 14
This is now in 14-point size.
.ps 20
This is a point size of 20.
.ps 6
And this is a really small point size of six.
______________________________________________________________
NOTE: A point is 1/72 of an inch, so a 36-point character size is
half an inch high. The 12-point size used most commonly is 1/6-inch
high. Different versions of groff support different point sizes,
but most versions support 6, 7, 8, 9, 10, 11, 12, 14, 16, 20, 24,
28, and 36 points. If you set a value that is not supported, it is
rounded up to the next highest value (to a maximum of 36). The
default point size is 10. If you use the .ps command without a
value, groff reverts to the previous value.
______________________________________________________________
Within a sentence, the point size can be changed with the
line-embedded command \s followed by the point size. For example:
This is in 10-point, while \s20this is in 20,\s10 and back to 10 again.
The \s command should be followed by a legal point size. The special
command \s0 causes groff to revert to its previous value. Relative
changes are also supported, so you could embed commands such as \s+2
and \s-2, although only a single digit can be specified (so you can't
change by more than nine points).
Line spacing is the vertical spacing between lines. Vertical spacing
is not tied to point size, so it should be adjusted manually. As a
general rule, use a vertical spacing about 20 percent larger than the
point size. The default vertical spacing is 11.
Line spacing is controlled by the .vs (vertical space) command. In the
next example, we change the point size and the vertical spacing to
permit the characters to be printed clearly without overlap:
This is in normal 10-point, 11 vertical space size.
.ps 12
.vs 14
This is in 12-point with 14 vertical spacing.
If you use the .vs command without a value, groff reverts to the
previous value.
If you want to force spacing for some reason, such as to separate
sections of text, you can use the .sp (space) command. Used with no
argument, .sp gives one blank line. It can also take arguments of i
for inches and p for points:
This is default 10-point 11 vertical spaced text.
.sp
We have a blank line above this because of the command.
.sp 3.5i
This is three and a half inches below the previous line.
You can use fractions in most groff commands, as this example shows.
Fonts
Changing fonts requires the command .ft (font type). In the early days
of troff, only four fonts were supported: Roman, Roman bold, Roman
italic, and a set of special characters. Other fonts had to be
specially loaded in the phototypesetter. For this reason, groff
defaults to Roman.
To switch to Roman bold, you use the command .ft B, while .ft I
switches, not surprisingly, to Roman italic. To return to the normal
Roman font, the command .ft R is used, although on most systems, .ft
by itself will suffice:
This is in normal Roman font.
.ft B
This is bold.
.ft I
This is italics.
.ft
This is back to normal Roman font.
You can switch fonts with a line-embedded command, too, using \f
followed by either I or B, switching back with R to the normal font:
This is normal, \fBbold\fR and \fIitalics\fR.
Because underline wasn't supported on most system printers, underlined
text was converted to italic. The underline command .ux would
italicize the next x lines of text.
Because we now have many thousands more fonts to work with than Roman,
we must be able to change fonts within groff. The command to change
fonts is .fp (font physically mounted), which also requires a number
to indicate what position the font was mounted in the phototypesetter
(old stuff, isn't it?). For example, if Helvetica were mounted in font
position three and we referred to it by the font letter H, the command
.fp 3 H
would instruct the phototypesetter to switch to Helvetica in font
position three. groff still retains these old-style commands.
Indenting and Line Length
The line length is set to default to 6.5 inches within groff. To
override this value, the .ll (line length) command is used with an
argument indicating the units. For example, the command
.ll 7i
switches groff to use a seven-inch line length. The maximum length
accepted is usually about 7.5 inches, so to use paper wider than that
you have to move the left margin over to compensate with the .po (page
offset) command. The value .po 0 sets the left margin as far over as
is possible.
To indent text, you use the .in (indent) command. It takes a number
and an indicator of the units as arguments, as the following example
shows:
This is normal stuff.
.in 0.75I
This is indented three-quarters of an inch.
To move the right margin to the left so that you can make a
distinctive block of text within a normal chunk, you use the .ll (line
length) command you saw earlier:
This is normal text, and goes on and on.Even more text that continues
the tradition.
.in 1i
.ll -1i
This is now indented one inch to the left, and the right margin is
indented one inch from the normal right margin. This makes the text
stand out a little.
.in -1i
.ll +1i
And this is back to normal. The block will stand out nicely amongst
all this normal text.
You will notice that we used relative movements of plus and minus a
value in this example to make it easier. This way, we don't have to
measure the page. You can revert to original values with the command
.in and .ll with no arguments, as well.
An indent and line-length change is effective until the next command
changes it. Sometimes you want to affect only a single line, though.
If you want to indent only a single line, use the .ti (temporary
indent) command:
This is really fine stuff. You can tell, 'cause I'm still awake.
.ti 3i
This line is temporarily indented by three inches, but the next line
will be back to normal.
Tabs are used to set column output. Usually, tabs are used with groff
only for unfilled text, which means material you would display in
columns. Tab stops are set, by default, every half inch. To override
these values, you use the .ta (tab) command. The command
.ta 1i 2i 3i 4i 5i 6i
sets the tabs at every inch instead. You can think of the setting of
tabs within groff much as they are done on a typewriter, from left to
right. Tabs are usually set for columns of numbers or tables, but the
groff macro gtbl is much better at this. (You get a look at gtbl in
the next chapter.)
Other Character Controls
The groff system has special instructions for controlling the size of
individual letters, as well as formulas and special characters such as
Greek letters. However, because it is unlikely that groff is used for
this type of output these days, we'll ignore the capabilities. If you
want more information on how to provide these special features, check
the groff man pages or consult a good troff book.
Macros
A macro is a shorthand notation for a set of commands or strings. Many
commands used to write man pages are macros. To give a practical
example of a groff macro, suppose we want every paragraph to start
with a blank line and a temporary indent of half an inch. The groff
commands to do this are
.sp
.ti +.5i
Instead of typing these two lines every paragraph, we can define a
macro of one character (or more) that does it for us.
To define the macro, we use the .de (define) command followed by the
name of the macro and the commands. It would look like this, placed
somewhere at the top of the source code:
.de PP
.sp
.ti +.5I
..
The last line with two periods indicates the end of the definition.
Now, whenever we use the command .PP it will be executed as the lines
in the macro.
______________________________________________________________
NOTE: Make sure that you don't define a macro with the name of a
reserved groff command, or the macro will not be executed.
______________________________________________________________
Using mm
The mm (memorandum macros) package is not really part of nroff or
troff, although both can use it. The mm program reads a source file
much as groff does and translates it to output. Many of the mm macros
are used for man pages. Indeed, many users find the nroff and troff
commands too awkward or complicated, whereas mm is fully able to meet
all their basic formatting needs.
To add mm commands, you use the period in the first column as with
groff. The mm macros are usually quite simple, and easy to work with
and use. We can look at the most important of them here.
Like groff, mm runs text together when reformatting, regardless of
line breaks in the source file. To force a new paragraph, use the .P
command. It forces a line break and adds a blank line to the output.
Paragraphs are usually formatted so that they are flush left.
Headings are created with the .H command. For example, the command
.H This is a Heading
will create a break, output the heading text in bold, and leave a bit
of a space between the heading and the text that follows it.
There can be seven levels of headings; 1 is the highest and 7 is the
lowest. To specify the heading level, add the number as the first
argument after the .H command:
.H 2 This is a level 2 heading
The mm heading macro will number the headings automatically, although
you can suppress the numbering with the .HU (heading unnumbered)
command. To reset the numbering (at a section break, for example), use
the .nr (number register) command followed by the heading level and
the number to use. For example, the command
.nr H2 1
will restart the numbering of second-level headings at 1.
Lists
Lists are easily created in mm with the .LI (list) command and the .LE
(list end) command. This creates a bulleted list. For example, the
command
.LI
thing 1
.LI
thing 2
.LE
thing 3
creates a bulleted list of the three bits of text. You can create a
list with dashes instead of bullets using the .DL (dash list) command.
The mark list command, .ML, creates a list with the character of your
choice.
If you want a numbered list, use the .AL (automatic list) command.
Lists with no arguments are created with Arabic numbers. To create an
alphabetical list (A, B, C, and so on), use the macro command .AL A.
Roman numerals (i, ii, iii, iv, v, and so on) can be used with the .AL
I command.
You can nest list types as necessary. For example, the command
.AL I
.LI
groff
.AL
.LI
macros
.LI
mm
.LE
.LI
gtbl
.LI
geqn
.LE
will create output that looks like this:
I. groff
1. macros
2. mm
II. gtbl
III. geqn
You have to be careful when terminating each list with an .LE command
to ensure that you terminate the proper one. Experimentation and
practice help you get the hang of this. You may have noticed that it
takes a lot of commands to make a little list!
Font Changes
Changing fonts with mm is quite simple. When working from a period
command, the command .B (bold) creates bold text until an .R (restore)
command, while .I (italic) does the same until an .R command. If you
want to bold or italicize only one word, you can do it after the
period command, as this example shows:
This is normal text
.B
This is bold.
So is this.
.R
This is normal.
This is a single
.Bbold
word, though.
When you change only one word, you don't need a .R command.
Changes can be performed within text in the same manner as with groff:
This is an \fIitalics set of words\fR until here.
Footnotes
To create a footnote, use the .FS (footnote start) and .FE (footnote
end) commands. Every footnote on a single page will be collected and
printed at the bottom. Footnotes are automatically numbered unless you
specify another character:
This is normal text.
.FS
This is a footnote with its proper number in front of it.
.FE
This is more normal text.
.FS *
But this is a footnote marked with an asterisk.
.FE
This is even more normal text. At the bottom of the page
will be a numbered footnote and an asterisked footnote.
You can use any valid character for the optional footnote mark,
including special characters supported by groff.
Summary
As you might expect, there is a lot to both groff and mm that we
haven't looked at. Because groff is seldom used these days, we covered
only the most important aspects. As I said earlier, if you want to
learn more about groff or mm, find a good reference book on the
subject.
--
Enjoy Linux!
-----It's FREE!-----
※ 修改:.netiscpu 于 Jul 25 03:48:33 修改本文.[FROM: mtlab.hit.edu.cn]
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: mtlab.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:203.822毫秒