Annotation of lucent/sys/man/1/pic, revision 1.1.1.1

1.1       root        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 " optional-width optional-height " < 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:        \f2text-list\fP \f2expr\fP
                    143: .EE
                    144: Missing attributes and values are filled in from defaults.
                    145: Not all attributes make sense for all primitives;
                    146: irrelevant ones are silently ignored.
                    147: The attribute
                    148: .L at
                    149: causes the geometrical center to be put at the specified place;
                    150: .L with
                    151: causes the position on the object to be put at the specified place.
                    152: For lines, splines and arcs,
                    153: .L height
                    154: and
                    155: .L width
                    156: refer to arrowhead size.
                    157: A bare
                    158: .I expr
                    159: implies motion in the current direction.
                    160: .PP
                    161: Text is normally an attribute of some primitive;
                    162: by default it is placed at the geometrical center of the object.
                    163: Stand-alone text is also permitted.
                    164: A text list
                    165: is a list of text items:
                    166: .EX
                    167: \f2  text-item\fP:
                    168:        "..." \f2positioning ...\fP
                    169:        sprintf("\f2format\fP", \f2expr\fP, \f2...\fP) \f2positioning ...\fP
                    170: \f2  positioning\fP:
                    171:        center  ljust  rjust  above  below
                    172: .EE
                    173: If there are multiple text items for some primitive,
                    174: they are arranged vertically and centered except as qualified.
                    175: Positioning requests apply to each item independently.
                    176: Text items may contain
                    177: .I troff
                    178: commands for size and font changes, local motions, etc.,
                    179: but make sure that these are balanced
                    180: so that the entering state is restored before exiting.
                    181: .PP
                    182: A position is ultimately an
                    183: .I x,y
                    184: coordinate pair, but it may be specified in other ways.
                    185: .EX
                    186: \f2  position\fP:
                    187:        \f2expr, expr\fP
                    188:        \f2place\fP ± \f2expr, expr\fP
                    189:        \f2place\fP ± ( \f2expr, expr\fP )
                    190:        ( \f2position\fP,\f2 position\fP )      \f2x\fP\fR from one, \f2y\fP\fR the other\fP
                    191:        \f2expr\fP [\fLof the way\fP] between \f2position\fP and \f2position\fP
                    192:        \f2expr\fP < \f2position\fP , \f2position\fP >
                    193:        ( \f2position\fP )
                    194: .EE
                    195: .PP
                    196: .EX
                    197: \f2  place\fP:
                    198:        \f2placename\fP \f2optional-corner\fP
                    199:        \f2corner\fP of \f2placename\fP
                    200:        \f2nth\fP \f2primitive\fP \f2optional-corner\fP
                    201:        \f2corner\fP of \f2nth\fP \f2primitive\fP
                    202:        Here
                    203: .EE
                    204: An
                    205: .IR optional-corner
                    206: is one of the eight compass points
                    207: or the center or the start or end of a primitive.
                    208: .EX
                    209: \f2  optional-corner\fP:
                    210:        .n  .e  .w  .s  .ne  .se  .nw  .sw  .c  .start  .end
                    211: \f2  corner\fP:
                    212:        top  bot  left  right  start  end
                    213: .EE
                    214: Each object in a picture has an ordinal number;
                    215: .IR nth
                    216: refers to this.
                    217: .EX
                    218: \f2  nth\fP:
                    219:        \f2n\fPth\f2,     n\fPth last
                    220: .EE
                    221: .PP
                    222: The built-in variables and their default values are:
                    223: .EX
                    224: .ta .5i 2.5i
                    225:        boxwid 0.75     boxht 0.5
                    226:        circlerad 0.25  arcrad 0.25
                    227:        ellipsewid 0.75 ellipseht 0.5
                    228:        linewid 0.5     lineht 0.5
                    229:        movewid 0.5     moveht 0.5
                    230:        textwid 0       textht 0
                    231:        arrowwid 0.05   arrowht 0.1
                    232:        dashwid 0.1     arrowhead 2
                    233:        scale 1
                    234: .EE
                    235: These may be changed at any time,
                    236: and the new values remain in force from picture to picture until changed again
                    237: or reset by a
                    238: .L reset
                    239: statement.
                    240: Variables changed within
                    241: .B [
                    242: and
                    243: .B ]
                    244: revert to their previous value upon exit from the block.
                    245: Dimensions are divided by
                    246: .B scale
                    247: during output.
                    248: .PP
                    249: Expressions in
                    250: .I pic
                    251: are evaluated in floating point.
                    252: All numbers representing dimensions are taken to be in inches.
                    253: .EX
                    254: \f2  expr\fP:
                    255:        \f2expr\fP \f2op\fP \f2expr\fP
                    256:        - \f2expr\fP
                    257:        ! \f2expr\fP
                    258:        ( \f2expr\fP )
                    259:        variable
                    260:        number
                    261:        \f2place\fP .x  \f2place\fP .y  \f2place\fP .ht  \f2place\fP .wid  \f2place\fP .rad
                    262:        sin(\f2expr\fP)  cos(\f2expr\fP)  atan2(\f2expr,expr\fP)  log(\f2expr\fP)  exp(\f2expr\fP)
                    263:        sqrt(\f2expr\fP)  max(\f2expr,expr\fP)  min(\f2expr,expr\fP)  int(\f2expr\fP)  rand()
                    264: \f2  op\fP:
                    265:        +  -  *  /  %  <  <=  >  >=  ==  !=  &&  ||
                    266: .EE
                    267: .PP
                    268: The
                    269: .B define
                    270: and
                    271: .B undef
                    272: statements are not part of the grammar.
                    273: .EX
                    274:        define \f2name\fP { \f2replacement text\fP }
                    275:        undef \f2name\fP
                    276: .EE
                    277: Occurrences of
                    278: .BR $1 ,
                    279: .BR $2 ,
                    280: etc.,
                    281: in the replacement text
                    282: will be replaced by the corresponding arguments if
                    283: .I name
                    284: is invoked as
                    285: .EX
                    286:        \f2name\fP(\f2arg1\fP, \f2arg2\fP, ...)
                    287: .EE
                    288: Non-existent arguments are replaced by null strings.
                    289: Replacement text
                    290: may contain newlines.
                    291: The
                    292: .B undef
                    293: statement removes the definition of a macro.
                    294: .PP
                    295: .I Tpic
                    296: is a
                    297: .IR tex (1)
                    298: preprocessor that accepts
                    299: .IR pic
                    300: language.
                    301: It produces Tex commands that define a box called
                    302: .BR \egraph ,
                    303: which contains the picture.
                    304: The box may be output this way:
                    305: .IP
                    306: .L
                    307: \ecenterline{\ebox\egraph}
                    308: .SH EXAMPLES
                    309: .EX
                    310: arrow "input" above; box "process"; arrow "output" above
                    311: move
                    312: A: ellipse 
                    313:    circle rad .1 with .w at A.e
                    314:    circle rad .05 at 0.5 <A.c, A.ne>
                    315:    circle rad .065 at 0.5 <A.c, A.ne>
                    316:    spline from last circle.nw left .25 then left .05 down .05
                    317:    arc from A.c to A.se rad 0.5
                    318:    for i = 1 to 10 do { line from A.s+.025*i,.01*i down i/50 } 
                    319: .EE
                    320: .PP
                    321: .PS
                    322: arrow "input" above; box "process"; arrow "output" above
                    323: move
                    324: A: ellipse 
                    325:    circle rad .1 with .w at A.e
                    326:    circle rad .05 at 0.5 <A.c, A.ne>
                    327:    circle rad .065 at 0.5 <A.c, A.ne>
                    328:    spline from last circle.nw left .25 then left .05 down .05
                    329:    arc from A.c to A.se rad 0.5
                    330:    for i = 1 to 10 do { line from A.s+.025*i,.01*i down i/50 } 
                    331: .PE
                    332: .SH SOURCE
                    333: .B /sys/src/cmd/pic
                    334: .SH "SEE ALSO"
                    335: .IR grap (1), 
                    336: .IR doctype (1),
                    337: .IR troff (1)
                    338: .br
                    339: B. W. Kernighan,
                    340: ``PIC\(ema Graphics Language for Typesetting'',
                    341: .I
                    342: Unix Research System Programmer's Manual,
                    343: Tenth Edition, Volume 2

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.