home *** CD-ROM | disk | FTP | other *** search
- .\" @(#)tt09 6.1 (Berkeley) 5/23/86
- .\"
- .NH
- Titles, Pages and Numbering
- .PP
- This is an area where things get tougher,
- because nothing is done for you automatically.
- Of necessity, some of this section is a cookbook,
- to be copied literally until you get some experience.
- .PP
- Suppose you want a title at the top of each page,
- saying just
- .sp 3p
- .lt 2.8i
- .tl 'left top'center top'right top'
- .lt
- .sp 3p
- In
- .UL roff ,
- one can say
- .P1 2
- ^he 'left top'center top'right top'
- ^fo 'left bottom'center bottom'right bottom'
- .P2
- to get headers and footers automatically on every page.
- Alas, this doesn't work so easily in
- .UL troff ,
- a serious hardship for the novice.
- Instead you have to do a lot of specification (or use
- a macro package, which makes it effortless).
- .PP
- You have to say what the actual title is (easy);
- when to print it (easy enough);
- and what to do at and around the title line (harder).
- Taking these in reverse order,
- first we define a macro
- .BD .NP
- (for `new page') to process
- titles and the like at the end of one page
- and the beginning of the next:
- .P1
- ^de NP
- \(fmbp
- \(fmsp 0.5i
- \&.tl 'left top'center top'right top'
- \(fmsp 0.3i
- ^^
- .P2
- To make sure we're at the top of a page,
- we issue a `begin page' command
- .BD \(fmbp ,
- which causes a skip to top-of-page
- (we'll explain the
- .BD \(fm
- shortly).
- Then we space down half an inch,
- print the title
- (the use of
- .BD .tl
- should be self explanatory; later we will discuss parameterizing the titles),
- space another 0.3 inches,
- and we're done.
- .PP
- To ask for
- .BD .NP
- at the bottom of each page,
- we have to say something like
- `when the text is within an inch
- of the bottom of the page,
- start the processing
- for a new page.'
- This is done with a `when' command
- .BD .wh :
- .P1
- ^wh \-1i NP
- .P2
- (No `.' is used before NP;
- this is simply the name of a macro, not a macro call.)
- The minus sign means
- `measure up from the bottom of the page',
- so
- `\-1i' means `one inch from the bottom'.
- .PP
- The
- .BD .wh
- command appears in the input outside the definition of
- .BD .NP ;
- typically the input would be
- .P1
- ^de NP
- ^^^
- ^^
- ^wh \-1i NP
- .P2
- .PP
- Now what happens?
- As text is actually being output,
- .UL troff
- keeps track of its vertical position on the page,
- and after a line is printed within one inch from the bottom,
- the
- .BD .NP
- macro is activated.
- (In the jargon, the
- .BD .wh
- command sets a
- .ul
- trap
- at the specified place,
- which is `sprung' when that point is passed.)
- .BD .NP
- causes a skip to the top of the next page
- (that's what the
- .BD \(fmbp
- was for),
- then prints the title with the appropriate margins.
- .PP
- Why
- .BD \(fmbp
- and
- .BD \(fmsp
- instead of
- .BD .bp
- and
- .BD .sp ?
- The answer is that
- .BD .sp
- and
- .BD .bp ,
- like several other commands,
- cause a
- .ul
- break
- to take place.
- That is, all the input text collected but not yet printed
- is flushed out as soon as possible,
- and the next input line is guaranteed to start
- a new line of output.
- If we had used
- .BD .sp
- or
- .BD .bp
- in the
- .BD .NP
- macro,
- this would cause a break in the middle
- of the current output line when a new page is started.
- The effect would be to print the left-over part of that line
- at the top of the page, followed by the next input line on a new output line.
- This is
- .ul
- not
- what we want.
- Using
- .BD \(fm
- instead of
- .BD .
- for a command
- tells
- .UL troff
- that
- no break is to take place _
- the output line
- currently being filled
- should
- .ul
- not
- be forced out before the space or new page.
- .PP
- The list of commands that cause a break
- is short and natural:
- .P1
- ^bp ^br ^ce ^fi ^nf ^sp ^in ^ti
- .P2
- All others cause
- .ul
- no
- break,
- regardless of whether you use a
- .BD .
- or a
- .BD \(fm .
- If you really need a break, add a
- .BD .br
- command at the appropriate place.
- .PP
- One other thing to beware of _
- if you're changing fonts or point sizes a lot,
- you may find that
- if you cross a page boundary
- in an unexpected font or size,
- your titles come out in that size and font
- instead of what you intended.
- Furthermore, the length of a title is independent of the current line length,
- so titles will come out at the default length of 6.5 inches
- unless you change it,
- which is done with the
- .BD .lt
- command.
- .PP
- There are several ways to fix the problems of point sizes
- and fonts in titles.
- For the simplest applications, we can change
- .BD .NP
- to set the proper size and font for the title,
- then restore the previous values, like this:
- .P1 2
- .ta .8i
- ^de NP
- \(fmbp
- \(fmsp 0.5i
- ^ft R \e" set title font to roman
- ^ps 10 \e" and size to 10 point
- ^lt 6i \e" and length to 6 inches
- ^tl 'left'center'right'
- ^ps \e" revert to previous size
- ^ft P \e" and to previous font
- \(fmsp 0.3i
- ^^
- .P2
- .PP
- This version of
- .BD .NP
- does
- .ul
- not
- work if the fields in the
- .BD .tl
- command contain size or font changes.
- To cope with that
- requires
- .UL troff 's
- `environment' mechanism,
- which we will discuss in Section 13.
- .PP
- To get a footer at the bottom of a page,
- you can modify
- .BD .NP
- so it does
- some processing before
- the
- .BD \(fmbp
- command,
- or split the job into a footer macro invoked
- at the bottom margin and a header macro invoked
- at the top of the page.
- These variations are left as exercises.
- .WS
- .PP
- Output page numbers are computed automatically
- as each page is produced (starting at 1),
- but no numbers are printed unless you ask for them explicitly.
- To get page numbers printed,
- include the character
- .BD %
- in the
- .BD .tl
- line at
- the position where you want the number to appear.
- For example
- .P1
- ^tl ''- % -''
- .P2
- centers the page number inside hyphens, as on this page.
- You can set the page number at any time
- with either
- .BD .bp\ n ,
- which immediately starts a new page numbered
- .BD n ,
- or with
- .BD .pn\ n ,
- which sets the page number for the next page
- but doesn't cause a skip to the new page.
- Again,
- .BD .bp\ +n
- sets the page number to
- .BD n
- more than its current value;
- .BD .bp
- means
- .BD .bp\ +1 .
-