]> git.lizzy.rs Git - plan9front.git/blob - sys/man/1/pic
paint(1): english
[plan9front.git] / sys / man / 1 / pic
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