Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
.TH PIC 1
2
.de PS	\" start picture
3
.	\" $1 is height, $2 is width, both in inches
4
.if \\$1>0 .sp .35
5
.ie \\$1>0 .nr $1 \\$1
6
.el .nr $1 0
7
.in (\\n(.lu-\\$2)/2u
8
.ne \\$1
9
..
10
.de PE	\" end of picture
11
.in
12
.if \\n($1>0 .sp .65
13
..
14
.SH NAME
15
pic, tpic \- troff and tex preprocessors for drawing pictures
16
.SH SYNOPSIS
17
.B pic
18
[
19
.I files
20
]
21
.PP
22
.B tpic
23
[
24
.I files
25
]
26
.SH DESCRIPTION
27
.I Pic
28
is a
29
.IR troff (1)
30
preprocessor for drawing figures on a typesetter.
31
.I Pic
32
code is contained between
33
.B .PS
34
and
35
.B .PE
36
lines:
37
.IP
38
.EX
39
\&.PS \f2optional-width\fP \f2optional-height\fP
40
\f2element-list\fP
41
\&.PE
42
.EE
43
.LP
44
or in a file mentioned in a
45
.B .PS
46
line:
47
.IP
48
.BI .PS " " < file
49
.LP
50
If
51
.IR optional-width
52
is present, the picture is made that many inches wide,
53
regardless of any dimensions used internally.
54
The height is scaled in the same proportion unless
55
.IR optional-height
56
is present.
57
If
58
.B .PF
59
is used instead of
60
.BR .PE ,
61
the typesetting position after printing is restored to what it was
62
upon entry.
63
.PP
64
An
65
.IR element-list
66
is a list of elements:
67
.EX
68
	\f2primitive  attribute-list\fP
69
	\f2placename\fP : \f2element\fP
70
	\f2placename\fP : \f2position\fP
71
	\f2var\fP = \f2expr\fP
72
	\f2direction\fP
73
	{ \f2element-list\fP }
74
	[ \f2element-list\fP ]
75
	for \f2var\fP = \f2expr\fP to \f2expr\fP by \f2expr\fP do { \f2anything\fP }
76
	if \f2expr\fP then { \f2anything\fP } else { \f2anything\fP }
77
	copy \f2file,\fP  copy thru \f2macro,\fP  copy \f2file\fP thru \fPmacro\fP
78
	sh { \f2commandline\fP }
79
	print \f2expr\fP
80
	reset \f2optional var-list\fP
81
	\f2troff-command\fP
82
.EE
83
.PP
84
Elements are separated by newlines or semicolons;
85
a long element may be continued by ending the line with a backslash.
86
Comments are introduced by a
87
.BI #
88
and terminated by a newline.
89
Variable names begin with a lower case letter;
90
place names begin with upper case.
91
Place and variable names retain their values
92
from one picture to the next.
93
.PP
94
After each primitive
95
the current position moves in the current direction
96
.RB ( up , down ,
97
.BR left , right
98
(default)) by the size of the primitive.
99
The current position and direction are saved upon entry
100
to a
101
.BR { ... }
102
block and restored upon exit.
103
Elements within a block enclosed in
104
.BR [ ... ]
105
are treated as a unit;
106
the dimensions are determined by the extreme points
107
of the contained objects.
108
Names, variables, and direction of motion within a block are local to that block.
109
.PP
110
.IR Troff-command
111
is any line that begins with a period.
112
Such a line is assumed to make sense in the context where it appears;
113
generally, this means only size and font changes.
114
.PP
115
The
116
.I primitive
117
objects are:
118
.br
119
.EX
120
	box  circle  ellipse  arc  line  arrow  spline  move  \f2text-list\fP
121
.EE
122
.L arrow
123
is a synonym for
124
.LR "line ->" .
125
.PP
126
An
127
.IR attribute-list
128
is a sequence of zero or more attributes;
129
each attribute consists of a keyword, perhaps followed by a value.
130
.EX
131
.ta .5i 2.5i
132
	h(eigh)t \f2expr\fP	wid(th) \f2expr\fP
133
	rad(ius) \f2expr\fP	diam(eter) \f2expr\fP
134
	up \f2opt-expr\fP	down \f2opt-expr\fP
135
	right \f2opt-expr\fP	left \f2opt-expr\fP
136
	from \f2position\fP	to \f2position\fP
137
	at \f2position\fP	with \f2corner\fP
138
	by \f2expr, expr\fP	then
139
	dotted \f2opt-expr\fP	dashed \f2opt-expr\fP
140
	chop \f2opt-expr\fP	->  <-  <->
141
	invis	same
142
	fill \f2opt-expr\fP
143
	\f2text-list\fP	\f2expr\fP
144
.EE
145
Missing attributes and values are filled in from defaults.
146
Not all attributes make sense for all primitives;
147
irrelevant ones are silently ignored.
148
The attribute
149
.L at
150
causes the geometrical center to be put at the specified place;
151
.L with
152
causes the position on the object to be put at the specified place.
153
For lines, splines and arcs,
154
.L height
155
and
156
.L width
157
refer to arrowhead size.
158
A bare
159
.I expr
160
implies motion in the current direction.
161
.PP
162
Text is normally an attribute of some primitive;
163
by default it is placed at the geometrical center of the object.
164
Stand-alone text is also permitted.
165
A text list
166
is a list of text items:
167
.EX
168
\f2  text-item\fP:
169
	"..." \f2positioning ...\fP
170
	sprintf("\f2format\fP", \f2expr\fP, \f2...\fP) \f2positioning ...\fP
171
\f2  positioning\fP:
172
	center  ljust  rjust  above  below
173
.EE
174
If there are multiple text items for some primitive,
175
they are arranged vertically and centered except as qualified.
176
Positioning requests apply to each item independently.
177
Text items may contain
178
.I troff
179
commands for size and font changes, local motions, etc.,
180
but make sure that these are balanced
181
so that the entering state is restored before exiting.
182
.PP
183
A position is ultimately an
184
.I x,y
185
coordinate pair, but it may be specified in other ways.
186
.EX
187
\f2  position\fP:
188
	\f2expr, expr\fP
189
	\f2place\fP ± \f2expr, expr\fP
190
	\f2place\fP ± ( \f2expr, expr\fP )
191
	( \f2position\fP,\f2 position\fP )	\f2x\fP\fR from one, \f2y\fP\fR the other\fP
192
	\f2expr\fP [\fLof the way\fP] between \f2position\fP and \f2position\fP
193
	\f2expr\fP < \f2position\fP , \f2position\fP >
194
	( \f2position\fP )
195
.EE
196
.PP
197
.EX
198
\f2  place\fP:
199
	\f2placename\fP \f2optional-corner\fP
200
	\f2corner\fP of \f2placename\fP
201
	\f2nth\fP \f2primitive\fP \f2optional-corner\fP
202
	\f2corner\fP of \f2nth\fP \f2primitive\fP
203
	Here
204
.EE
205
An
206
.IR optional-corner
207
is one of the eight compass points
208
or the center or the start or end of a primitive.
209
.EX
210
\f2  optional-corner\fP:
211
	.n  .e  .w  .s  .ne  .se  .nw  .sw  .c  .start  .end
212
\f2  corner\fP:
213
	top  bot  left  right  start  end
214
.EE
215
Each object in a picture has an ordinal number;
216
.IR nth
217
refers to this.
218
.EX
219
\f2  nth\fP:
220
	\f2n\fPth\f2,     n\fPth last
221
.EE
222
.PP
223
The built-in variables and their default values are:
224
.EX
225
.ta .5i 2.5i
226
	boxwid 0.75	boxht 0.5
227
	circlerad 0.25	arcrad 0.25
228
	ellipsewid 0.75	ellipseht 0.5
229
	linewid 0.5	lineht 0.5
230
	movewid 0.5	moveht 0.5
231
	textwid 0	textht 0
232
	arrowwid 0.05	arrowht 0.1
233
	dashwid 0.1	arrowhead 2
234
	scale 1
235
.EE
236
These may be changed at any time,
237
and the new values remain in force from picture to picture until changed again
238
or reset by a
239
.L reset
240
statement.
241
Variables changed within
242
.B [
243
and
244
.B ]
245
revert to their previous value upon exit from the block.
246
Dimensions are divided by
247
.B scale
248
during output.
249
.PP
250
Expressions in
251
.I pic
252
are evaluated in floating point.
253
All numbers representing dimensions are taken to be in inches.
254
.EX
255
\f2  expr\fP:
256
	\f2expr\fP \f2op\fP \f2expr\fP
257
	- \f2expr\fP
258
	! \f2expr\fP
259
	( \f2expr\fP )
260
	variable
261
	number
262
	\f2place\fP .x  \f2place\fP .y  \f2place\fP .ht  \f2place\fP .wid  \f2place\fP .rad
263
	sin(\f2expr\fP)  cos(\f2expr\fP)  atan2(\f2expr,expr\fP)  log(\f2expr\fP)  exp(\f2expr\fP)
264
	sqrt(\f2expr\fP)  max(\f2expr,expr\fP)  min(\f2expr,expr\fP)  int(\f2expr\fP)  rand()
265
\f2  op\fP:
266
	+  -  *  /  %  <  <=  >  >=  ==  !=  &&  ||
267
.EE
268
.PP
269
The
270
.B define
271
and
272
.B undef
273
statements are not part of the grammar.
274
.EX
275
	define \f2name\fP { \f2replacement text\fP }
276
	undef \f2name\fP
277
.EE
278
Occurrences of
279
.BR $1 ,
280
.BR $2 ,
281
etc.,
282
in the replacement text
283
will be replaced by the corresponding arguments if
284
.I name
285
is invoked as
286
.EX
287
	\f2name\fP(\f2arg1\fP, \f2arg2\fP, ...)
288
.EE
289
Non-existent arguments are replaced by null strings.
290
Replacement text
291
may contain newlines.
292
The
293
.B undef
294
statement removes the definition of a macro.
295
.PP
296
.I Tpic
297
is a
298
.IR tex (1)
299
preprocessor that accepts
300
.IR pic
301
language.
302
It produces Tex commands that define a box called
303
.BR \egraph ,
304
which contains the picture.
305
The box may be output this way:
306
.IP
307
.L
308
\ecenterline{\ebox\egraph}
309
.SH EXAMPLES
310
.EX
311
arrow "input" above; box "process"; arrow "output" above
312
move
313
A: ellipse 
314
   circle rad .1 with .w at A.e
315
   circle rad .05 at 0.5 <A.c, A.ne>
316
   circle rad .065 at 0.5 <A.c, A.ne>
317
   spline from last circle.nw left .25 then left .05 down .05
318
   arc from A.c to A.se rad 0.5
319
   for i = 1 to 10 do { line from A.s+.025*i,.01*i down i/50 } 
320
.EE
321
.PP
322
.PS
323
arrow "input" above; box "process"; arrow "output" above
324
move
325
A: ellipse 
326
   circle rad .1 with .w at A.e
327
   circle rad .05 at 0.5 <A.c, A.ne>
328
   circle rad .065 at 0.5 <A.c, A.ne>
329
   spline from last circle.nw left .25 then left .05 down .05
330
   arc from A.c to A.se rad 0.5
331
   for i = 1 to 10 do { line from A.s+.025*i,.01*i down i/50 } 
332
.PE
333
.SH SOURCE
334
.B /sys/src/cmd/pic
335
.SH "SEE ALSO"
336
.IR grap (1), 
337
.IR doctype (1),
338
.IR troff (1)
339
.br
340
B. W. Kernighan,
341
``PIC\(ema Graphics Language for Typesetting'',
342
.I
343
Unix Research System Programmer's Manual,
344
Tenth Edition, Volume 2