Manual Page Result
0
Command: pic | Section: 1 | Source: UNIX v10 | File: pic.1
PIC(1) General Commands Manual PIC(1)
NAME
pic, tpic - troff and tex preprocessors for drawing pictures
SYNOPSIS
pic [ files ]
tpic [ files ]
DESCRIPTION
Pic is a troff(1) preprocessor for drawing figures on a typesetter.
Pic code is contained between .PS and .PE lines:
.PS optional-width optional-height
element-list
.PE
If optional-width is present, the picture is made that many
inches wide, regardless of any dimensions used internally. The
height is scaled in the same proportion unless optional-height
is present. If .PF is used instead of .PE, the typesetting po-
sition after printing is restored to what it was upon entry.
A line of the form
.PS<file causes pic to treat the the named file as if it stood
in place of the .PS line.
An element-list is a list of elements:
primitive attribute-list
placename : element
placename : position
var = expr
direction
{ element-list }
[ element-list ]
for var = expr to expr by expr do { anything }
if expr then { anything } else { anything }
copy file, copy thru macro, copy file thru macro
sh { commandline }
print expr
reset optional var-list
troff-command
Elements are separated by newlines or semicolons; a long element may be
continued by ending the line with a backslash. Comments are introduced
by a # and terminated by a newline. Variable names begin with a lower
case letter; place names begin with upper case. Place and variable
names retain their values from one picture to the next.
After each primitive the current position moves in the current direc-
tion (up,down, left,right (default)) by the size of the primitive. The
current position and direction are saved upon entry to a {...} block
and restored upon exit. Elements within a block enclosed in [...] are
treated as a unit; the dimensions are determined by the extreme points
of the contained objects. Names, variables, and direction of motion
within a block are local to that block.
troff-command is any line that begins with a period. Such a line is
assumed to make sense in the context where it appears; generally, this
means only size and font changes. Changes to vertical spacing will
produce broken pictures.
The primitive objects are:
box circle ellipse arc line arrow spline move text-list
is a synonym for
An attribute-list is a sequence of zero or more attributes; each at-
tribute consists of a keyword, perhaps followed by a value.
h(eigh)t expr wid(th) expr
rad(ius) expr diam(eter) expr
up opt-expr down opt-expr
right opt-expr left opt-expr
from position to position
at position with corner
by expr, expr then
dotted opt-expr dashed opt-expr
chop opt-expr -> <- <->
invis same
text-list expr
Missing attributes and values are filled in from defaults. Not all at-
tributes make sense for all primitives; irrelevant ones are silently
ignored. The attribute causes the geometrical center to be put at the
specified place; causes the position on the object to be put at the
specified place. For lines, splines and arcs, and refer to arrowhead
size. A bare expr implies motion in the current direction.
Text is normally an attribute of some primitive; by default it is
placed at the geometrical center of the object. Stand-alone text is
also permitted. A text list is a list of text items:
text-item:
"..." positioning ...
sprintf("format", expr, ...) positioning ...
positioning:
center ljust rjust above below
If there are multiple text items for some primitive, they are arranged
vertically and centered except as qualified. Positioning requests ap-
ply to each item independently. Text items may contain in-line troff
commands for size and font changes, local motions, etc., but make sure
that these are balanced so that the entering state is restored before
exiting.
A position is ultimately an x,y coordinate pair, but it may be speci-
fied in other ways.
position:
expr, expr
place +- expr, expr
place +- ( expr, expr )
( position, position )x from one, y the other
expr [of the way] between position and position
expr < position , position >
( position )
place:
placename optional-corner
corner of placename
nth primitive optional-corner
corner of nth primitive
Here
An optional-corner is one of the eight compass points or the center or
the start or end of a primitive.
optional-corner:
.n .e .w .s .ne .se .nw .sw .c .start .end
corner:
top bot left right start end
Each object in a picture has an ordinal number; nth refers to this.
nth:
nth, nth last
The built-in variables and their default values are:
boxwid = 0.75 boxht = 0.5
circlerad = 0.25 arcrad = 0.25
ellipsewid = 0.75 ellipseht = 0.5
linewid = 0.5 lineht = 0.5
movewid = 0.5 moveht = 0.5
textwid = 0 textht = 0
arrowwid = 0.05 arrowht = 0.1
dashwid = 0.1 arrowhead = 2
scale = 1
These may be changed at any time, and the new values remain in force
from picture to picture until changed again or reset by a statement.
Variables changed within [ and ] revert to their previous value upon
exit from the block. Dimensions are divided by scale during output.
Expressions in pic are evaluated in floating point. All numbers repre-
senting dimensions are taken to be in inches.
expr:
expr op expr
- expr
! expr
( expr )
variable
number
place .x place .y place .ht place .wid place .rad
sin(expr) cos(expr) atan2(expr,expr) log(expr) exp(expr)
sqrt(expr) max(expr,expr) min(expr,expr) int(expr) rand()
op:
+ - * / % < <= > >= == != && ||
The define and undef statements are not part of the grammar.
define name { replacement text }
undef name
Occurrences of $1, $2, etc., in the replacement text will be replaced
by the corresponding arguments if name is invoked as
name(arg1, arg2, ...)
Non-existent arguments are replaced by null strings. Replacement text
may contain newlines. The undef statement removes the definition of a
macro.
Tpic is a tex(1) preprocessor that accepts pic language. It produces
Tex commands that define a box called \graph, which contains the pic-
ture. The box may be output this way:
\centerline{\box\graph}
EXAMPLES
arrow "input" above; box "process"; arrow "output" above
move
A: ellipse
circle rad .1 with .w at A.e
circle rad .05 at 0.5 <A.c, A.ne>
arc from A.c to A.se rad 0.5
arrow "input" above; box "process"; arrow "output" above move A: el-
lipse
circle rad .1 with .w at A.e
circle rad .05 at 0.5 <A.c, A.ne>
arc from A.c to A.se rad 0.5
SEE ALSO
cip(9.1), ideal(1), ped(9.1), grap(1), dag(1), doctype(1), troff(1)
B. W. Kernighan, `PIC--a Graphics Language for Typesetting', this man-
ual, Volume 2
PIC(1)