|
|
1.1 root 1: .\" @(#)tt09 6.1 (Berkeley) 5/23/86
2: .\"
3: .NH
4: Titles, Pages and Numbering
5: .PP
6: This is an area where things get tougher,
7: because nothing is done for you automatically.
8: Of necessity, some of this section is a cookbook,
9: to be copied literally until you get some experience.
10: .PP
11: Suppose you want a title at the top of each page,
12: saying just
13: .sp 3p
14: .lt 2.8i
15: .tl 'left top'center top'right top'
16: .lt
17: .sp 3p
18: In
19: .UL roff ,
20: one can say
21: .P1 2
22: ^he 'left top'center top'right top'
23: ^fo 'left bottom'center bottom'right bottom'
24: .P2
25: to get headers and footers automatically on every page.
26: Alas, this doesn't work so easily in
27: .UL troff ,
28: a serious hardship for the novice.
29: Instead you have to do a lot of specification (or use
30: a macro package, which makes it effortless).
31: .PP
32: You have to say what the actual title is (easy);
33: when to print it (easy enough);
34: and what to do at and around the title line (harder).
35: Taking these in reverse order,
36: first we define a macro
37: .BD .NP
38: (for `new page') to process
39: titles and the like at the end of one page
40: and the beginning of the next:
41: .P1
42: ^de NP
43: \(fmbp
44: \(fmsp 0.5i
45: \&.tl 'left top'center top'right top'
46: \(fmsp 0.3i
47: ^^
48: .P2
49: To make sure we're at the top of a page,
50: we issue a `begin page' command
51: .BD \(fmbp ,
52: which causes a skip to top-of-page
53: (we'll explain the
54: .BD \(fm
55: shortly).
56: Then we space down half an inch,
57: print the title
58: (the use of
59: .BD .tl
60: should be self explanatory; later we will discuss parameterizing the titles),
61: space another 0.3 inches,
62: and we're done.
63: .PP
64: To ask for
65: .BD .NP
66: at the bottom of each page,
67: we have to say something like
68: `when the text is within an inch
69: of the bottom of the page,
70: start the processing
71: for a new page.'
72: This is done with a `when' command
73: .BD .wh :
74: .P1
75: ^wh \-1i NP
76: .P2
77: (No `.' is used before NP;
78: this is simply the name of a macro, not a macro call.)
79: The minus sign means
80: `measure up from the bottom of the page',
81: so
82: `\-1i' means `one inch from the bottom'.
83: .PP
84: The
85: .BD .wh
86: command appears in the input outside the definition of
87: .BD .NP ;
88: typically the input would be
89: .P1
90: ^de NP
91: ^^^
92: ^^
93: ^wh \-1i NP
94: .P2
95: .PP
96: Now what happens?
97: As text is actually being output,
98: .UL troff
99: keeps track of its vertical position on the page,
100: and after a line is printed within one inch from the bottom,
101: the
102: .BD .NP
103: macro is activated.
104: (In the jargon, the
105: .BD .wh
106: command sets a
107: .ul
108: trap
109: at the specified place,
110: which is `sprung' when that point is passed.)
111: .BD .NP
112: causes a skip to the top of the next page
113: (that's what the
114: .BD \(fmbp
115: was for),
116: then prints the title with the appropriate margins.
117: .PP
118: Why
119: .BD \(fmbp
120: and
121: .BD \(fmsp
122: instead of
123: .BD .bp
124: and
125: .BD .sp ?
126: The answer is that
127: .BD .sp
128: and
129: .BD .bp ,
130: like several other commands,
131: cause a
132: .ul
133: break
134: to take place.
135: That is, all the input text collected but not yet printed
136: is flushed out as soon as possible,
137: and the next input line is guaranteed to start
138: a new line of output.
139: If we had used
140: .BD .sp
141: or
142: .BD .bp
143: in the
144: .BD .NP
145: macro,
146: this would cause a break in the middle
147: of the current output line when a new page is started.
148: The effect would be to print the left-over part of that line
149: at the top of the page, followed by the next input line on a new output line.
150: This is
151: .ul
152: not
153: what we want.
154: Using
155: .BD \(fm
156: instead of
157: .BD .
158: for a command
159: tells
160: .UL troff
161: that
162: no break is to take place _
163: the output line
164: currently being filled
165: should
166: .ul
167: not
168: be forced out before the space or new page.
169: .PP
170: The list of commands that cause a break
171: is short and natural:
172: .P1
173: ^bp ^br ^ce ^fi ^nf ^sp ^in ^ti
174: .P2
175: All others cause
176: .ul
177: no
178: break,
179: regardless of whether you use a
180: .BD .
181: or a
182: .BD \(fm .
183: If you really need a break, add a
184: .BD .br
185: command at the appropriate place.
186: .PP
187: One other thing to beware of _
188: if you're changing fonts or point sizes a lot,
189: you may find that
190: if you cross a page boundary
191: in an unexpected font or size,
192: your titles come out in that size and font
193: instead of what you intended.
194: Furthermore, the length of a title is independent of the current line length,
195: so titles will come out at the default length of 6.5 inches
196: unless you change it,
197: which is done with the
198: .BD .lt
199: command.
200: .PP
201: There are several ways to fix the problems of point sizes
202: and fonts in titles.
203: For the simplest applications, we can change
204: .BD .NP
205: to set the proper size and font for the title,
206: then restore the previous values, like this:
207: .P1 2
208: .ta .8i
209: ^de NP
210: \(fmbp
211: \(fmsp 0.5i
212: ^ft R \e" set title font to roman
213: ^ps 10 \e" and size to 10 point
214: ^lt 6i \e" and length to 6 inches
215: ^tl 'left'center'right'
216: ^ps \e" revert to previous size
217: ^ft P \e" and to previous font
218: \(fmsp 0.3i
219: ^^
220: .P2
221: .PP
222: This version of
223: .BD .NP
224: does
225: .ul
226: not
227: work if the fields in the
228: .BD .tl
229: command contain size or font changes.
230: To cope with that
231: requires
232: .UL troff 's
233: `environment' mechanism,
234: which we will discuss in Section 13.
235: .PP
236: To get a footer at the bottom of a page,
237: you can modify
238: .BD .NP
239: so it does
240: some processing before
241: the
242: .BD \(fmbp
243: command,
244: or split the job into a footer macro invoked
245: at the bottom margin and a header macro invoked
246: at the top of the page.
247: These variations are left as exercises.
248: .WS
249: .PP
250: Output page numbers are computed automatically
251: as each page is produced (starting at 1),
252: but no numbers are printed unless you ask for them explicitly.
253: To get page numbers printed,
254: include the character
255: .BD %
256: in the
257: .BD .tl
258: line at
259: the position where you want the number to appear.
260: For example
261: .P1
262: ^tl ''- % -''
263: .P2
264: centers the page number inside hyphens, as on this page.
265: You can set the page number at any time
266: with either
267: .BD .bp\ n ,
268: which immediately starts a new page numbered
269: .BD n ,
270: or with
271: .BD .pn\ n ,
272: which sets the page number for the next page
273: but doesn't cause a skip to the new page.
274: Again,
275: .BD .bp\ +n
276: sets the page number to
277: .BD n
278: more than its current value;
279: .BD .bp
280: means
281: .BD .bp\ +1 .
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.