[net.text] nroff -ms figure numbering

jlh@loral.UUCP (Jim Vaxkiller) (11/05/86)

I've got a little problem here I could use some help on.  I'm writing
a fairly large document (30-50 pages) that will have lots of figures
in it.  I use floating keeps to keep the figures together, but keep
losing track of what number I'm on.  I'm also screwed anytime I add
or delete a figure.  Does someone out there have a nifty little
macro to automatically number my figures for me?  Sure would help
if they did.

My system is nroff (ditroff for the laser printer), the ms macro
package, UN*X 4.2 BSD (may have some 4.3 ms macros, I'm not sure).
Also, it probably makes no difference but my document is spread out
over around 9 files, arranged so I can format the whole thing at once
or just get a title page, the part I'm working on, and a table of
contents.


Jim Harkins 
Loral Instrumentation, San Diego
{ucbvax, ittvax!dcdwest, akgua, decvax, ihnp4}!sdcsvax!sdcc6!loral!jlh

avi@hpcehfe.HP.COM (Avi Naiman) (11/08/86)

> I use floating keeps to keep the figures together, but keep
> losing track of what number I'm on.  I'm also screwed anytime I add
> or delete a figure.  Does someone out there have a nifty little
> macro to automatically number my figures for me?

Here are some string definitions that use *roff's autoincrement
capability for number registers.  Fr is used for referencing
the figure in your text, and Fn for numbering the figure in a
caption.  [Er and En can be used to reference the same figure
a number of times before autoincrementing to the next number.]

.\"--------------------
.\" Figure Referencing and Numbering
.ds Fr \\n+(Fr
.ds Er \\n(Fr
.ds Fn \\n+(Fn
.ds En \\n(Fn
.\"--------------------

For example:

	See figure \*(Fr.
	This is the figure \*(Fn.


Here are more elaborate versions of the same strings, allowing you
to incorporate a section or chapter number into the figure number.
The section number can be similary autoincremented in a New Section
Macro.

.\"--------------------
.\" Figure Referencing and Numbering
.ds Fr \\n(Cn\.\\n+(Fr
.ds Er \\n(Cn\.\\n(Fr
.ds Fn \\n(Cn\.\\n+(Fn
.ds En \\n(Cn\.\\n(Fn
.\"--------------------

Finally, the two macros Fs (Figure start) and Fe (Figure end) allow
you to use a consistent graphic design for your figures.

Fs takes two arguments: the first specifies the amount of white space
(in inches) to leave for cutting and pasting in a figure (this can be
ommitted if your figure is generated from within *roff, e.g. a pic figure);
the second is the number to use for labeling the figure at the beginning
of the caption.  These macros have been developed for use with the ms
macro package and use floating keeps to push the figure to the next page
if there isn't enough room on the current one.

The graphic design involves rules before and after the figure,
an indented, shortened paragraph for the caption (using a reduced
point size), and appropriate white space between the elements.

.\"--------------------
.\" Figure Start
.de Fs
.KF
.if t .sp 0.25i
.if n .sp 2
.if t \s14\h'|0u'\l'6i\(ul'\s0
.if n \s14\h'|0u'\l'6i\(ul'\s0
.in +0.5i
.ll -0.5i
.nr LL -0.5i
.if t .ps -2
.if t .nr PS -2
.if t .vs -6
.if t .nr VS -6
.if t .sp \\$1i
.if n .sp 6u*\\$1
.if t .IP "Figure \\$2\." 0.75i
.if n .IP "Figure \\$2\." 14n
..

.\"--------------------
.\" Figure End
.de Fe
.br
.RT
.in -0.5i
.ll +0.5i
.nr LL +0.5i
.if t .ps +2
.if t .nr PS +2
.if t .vs +6
.if t .nr VS +6
.if t \s14\h'|0u'\l'6i\(ul'\s0
.if n \s14\h'|0u'\l'6i\(ul'\s0
.if t .sp 0.25i
.if n .sp 2
.KE
..

For example, the following text (with the macros above inserted)
run through nroff -ms produces the result below:

.nr Cn 1
.nr Fr 0 1
.nr Fn 0 1
.PP
This is text.  This is text.  This is text.  This is text.  This is text.
This is text.  This is text.  This is text.  This is text.  This is text.
This is text.  This is text.  This is text.  This is text.  This is text.
This is text.  This is text.  This is text.  This is text.  This is text.
Figure \*(Fr is a figure.
.Fs 2 \*(Fn
This is the figure.
.Fe
.PP
This is text.  This is text.  This is text.  This is text.  This is text.
This is text.  This is text.  This is text.  This is text.  This is text.
This is text.  This is text.  This is text.  This is text.  This is text.
This is text.  This is text.  This is text.  This is text.  This is text.






     This is text.  This is text.  This is  text.   This  is
text.   This is text.  This is text.  This is text.  This is
text.  This is text.  This is text.  This is text.  This  is
text.   This is text.  This is text.  This is text.  This is
text.  This is text.  This is text.  This is text.  This  is
text.  Figure 1.1 is a figure.


____________________________________________________________







     Figure 1.1.   This is the figure.
____________________________________________________________



     This is text.  This is text.  This is  text.   This  is
text.   This is text.  This is text.  This is text.  This is
text.  This is text.  This is text.  This is text.  This  is
text.   This is text.  This is text.  This is text.  This is
text.  This is text.  This is text.  This is text.  This  is
text.


Yours to enjoy,
Avi Naiman