Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ pic(1) — BSD/386 1.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

troff(1)

tex(1)

PIC(1)



PIC(1)                                                     PIC(1)


NAME
       pic - compile pictures for troff or TeX

SYNOPSIS
       pic [ -pvxzC ] [ filename ...  ]
       pic -t [ -cvzC ] [ filename ...  ]

DESCRIPTION
       pic  compiles  descriptions  of  pictures  embedded within
       troff or TeX input files into commands that are understood
       by  TeX  or troff.  Each picture starts with a line begin-
       ning with .PS and ends with a  line  beginning  with  .PE.
       Anything  outside of .PS and .PE is passed through without
       change.

       It is the user's  responsibility  to  provide  appropriate
       definitions of the PS and PE macros.  When the macro pack-
       age being used does not supply such definitions (for exam-
       ple,  old versions of -ms), appropriate definitions can be
       obtained with -mpic: these will center each picture.

OPTIONS
       Options that do not take arguments may be grouped behind a
       single  -.   The special option -- can be used to mark the
       end of the options.  A filename of - refers to  the  stan-
       dard input.

       -C     Recognize .PS and .PE even when followed by a char-
              acter other than space or newline.

       -p     Grops mode.  Use this if the output of pic will  be
              processed by troff and grops.  In this mode pic can
              make use the \X'ps: anything'  command.   Currently
              it does this only for the aligned attribute.

       -t     TeX mode.

       -c     Be  more  compatible with tpic.  Implies -t.  Lines
              beginning with \ are not passed  through  transpar-
              ently.   Lines beginning with .  are passed through
              with the initial .  changed to \.  A line beginning
              with  .ps  is  given special treatment: it takes an
              optional  integer  argument  specifying  the   line
              thickness  (pen  size)  in  milliinches;  a missing
              argument restores the previous line thickness;  the
              default  line thickness is 8 milliinches.  The line
              thickness thus specified takes effect only  when  a
              non-negative  line thickness has not been specified
              by use of the thickness attribute or by setting the
              linethick variable.

       -v     Print the version number.

       -x     Assume   a  troff  driver  that  supports  the  pic



Groff Version 1.05      November 22, 1992                       1




PIC(1)                                                     PIC(1)


              extensions to the standard troff drawing  commands.
              These  are described in groffout(5).  These exten-
              sions can be used  with  device-independent  troff,
              provided that the version being used passes through
              unrecognised drawing commands in the standard  way.
              This implies -z.

       -z     Draw  dots using zero-length lines. This applies to
              both TeX mode and troff mode.

       The following options supported by other versions  of  pic
       are ignored:

       -D     Draw  all  lines using the \D escape sequence.  pic
              always does this.

       -T dev Generate output for the troff device dev.  This  is
              unnecessary  because  the troff output generated by
              pic is device-independent.

USAGE
       This section describes only the  differences  between  pic
       and  the  original  pic.   Many  of these differences also
       apply to newer versions of pic.

   TeX mode
       TeX mode is enabled by the -t option.  In  TeX  mode,  pic
       will  define  a  vbox called \graph for each picture.  You
       must yourself print that vbox using, for example, the com-
       mand

              \centerline{\box\graph}

       Actually,  since  the  vbox has a height of zero this will
       produce slightly more vertical  space  above  the  picture
       than below it;

              \centerline{\raise 1em\box\graph}

       would avoid this.

       You must use a TeX driver that supports the tpic specials,
       version 2.

       Lines beginning with \ are passed through transparently; a
       %  is  added  to  the  end  of  the line to avoid unwanted
       spaces.  You can safely use this feature to  change  fonts
       or  to  change  the value of \baselineskip.  Anything else
       may well produce undesirable  results;  use  at  your  own
       risk.   Lines  beginning  with  a period are not given any
       special treatment.

   Commands




Groff Version 1.05      November 22, 1992                       2




PIC(1)                                                     PIC(1)


       for variable = expr1 to expr2 [by [*]expr3] do X body X
              Set variable to expr1.  While the value of variable
              is  less than or equal to expr2, do body and incre-
              ment variable by expr3; if by is not given,  incre-
              ment variable by 1.  If expr3 is prefixed by * then
              variable will instead be multiplied  by  expr3.   X
              can be any character not occurring in body.

       if expr then X if-true X [else Y if-false Y]
              Evaluate  expr;  if it is non-zero then do if-true,
              otherwise do if-false.  X can be any character  not
              occurring  in  if-true.  Y can be any character not
              occurring in if-false.

       print arg...
              Concatenate the arguments and print as  a  line  on
              stderr.   Each  arg  must be an expression, a posi-
              tion, or text.  This is useful for debugging.

       command arg...
              Concatenate the arguments and pass them through  as
              a line to troff orTeX.  Each arg must be an expres-
              sion, a position, or  text.   This  has  a  similar
              effect to a line beginning with .  or \, but allows
              the values of variables to be passed through.

       sh X command X
              Pass command to a shell.  X can  be  any  character
              not occurring in command.

       copy "filename"
              Include filename at this point in the file.

       copy ["filename"] thru X body X [until "word"]
       copy ["filename"] thru macro [until "word"]
              This  construct  does  body  once  for each line of
              filename; the line is  split  into  blank-delimited
              words, and occurrences of $i in body, for i between
              1 and 9, are replaced by the i-th word of the line.
              If  filename is not given, lines are taken from the
              current input up to .PE.  If  an  until  clause  is
              specified, lines will be read only until a line the
              first word of which is word; that line will then be
              discarded.  X can be any character not occurring in
              body.  For example,

                     .PS
                     copy thru % circle at ($1,$2) % until "END"
                     1 2
                     3 4
                     5 6
                     END
                     box
                     .PE



Groff Version 1.05      November 22, 1992                       3




PIC(1)                                                     PIC(1)


              is equivalent to

                     .PS
                     circle at (1,2)
                     circle at (3,4)
                     circle at (5,6)
                     box
                     .PE

              The commands to be performed for each line can also
              be taken from a macro defined earlier by giving the
              name of the macro as the argument to thru.

       reset
       reset variable1, variable2 ...
              Reset pre-defined  variables  variable1,  variable2
              ...  to  their default values.  If no arguments are
              given, reset all  pre-defined  variables  to  their
              default  values.   Note  that  assigning a value to
              scale also causes all  pre-defined  variables  that
              control  dimensions  to  be  reset to their default
              values times the new value of scale.

       plot expr ["text"]
              This is a text object which is constructed by using
              text  as  a format string for sprintf with an argu-
              ment of expr.  If text is omitted a  format  string
              of  "%g"  is  used.  Attributes can be specified in
              the same way as for a normal text object.  Be  very
              careful  that  you  specify  an  appropriate format
              string; pic does only very limited checking of  the
              string.  This is deprecated in favour of sprintf.

       variable:=expr
              This  is  similar to = except variable must already
              be defined, and  the  value  of  variable  will  be
              changed  only in the innermost block in which it is
              defined.  (By contrast, = defines the  variable  in
              the  current  block  if  it  is not already defined
              there, and then changes the value  in  the  current
              block.)

       Arguments of the form

              X anything X

       are also allowed to be of the form

              { anything }

       In  this case anything can contain balanced occurrences of
       { and }.  Strings may contain X or imbalanced  occurrences
       of { and }.




Groff Version 1.05      November 22, 1992                       4




PIC(1)                                                     PIC(1)


   Expressions
       The   syntax   for   expressions  has  been  significantly
       extended:

       x ^ y (exponentiation)
       sin(x)
       cos(x)
       atan2(y, x)
       log(x) (base 10)
       exp(x) (base 10, ie 10x)
       sqrt(x)
       int(x)
       rand() (return a random number between 0 and 1)
       rand(x) (return a random number between 1  and  x;  depre-
       cated)
       max(e1, e2)
       min(e1, e2)
       !e
       e1 && e2
       e1 || e2
       e1 == e2
       e1 != e2
       e1 >= e2
       e1 > e2
       e1 <= e2
       e1 < e2
       "str1" == "str2"
       "str1" != "str2"

       String  comparison  expressions  must  be parenthesised in
       some contexts to avoid ambiguity.

   Other Changes
       A bare expression, expr, is acceptable as an attribute; it
       is equivalent to dir expr, where dir is the current direc-
       tion.  For example

              line 2i

       means draw a line 2 inches long in the current  direction.

       The maximum width and height of the picture are taken from
       the variables maxpswid and maxpsht.  Initially these  have
       values 8.5 and 11.

       Scientific notation is allowed for numbers.  For example
              x = 5e-2

       Text attributes can be compounded.  For example,
              "foo" above ljust
       is legal.

       There  is  no  limit  to  the depth to which blocks can be
       examined.  For example,



Groff Version 1.05      November 22, 1992                       5




PIC(1)                                                     PIC(1)


              [A: [B: [C: box ]]] with .A.B.C.sw at 1,2
              circle at last [].A.B.C
       is acceptable.

       Arcs now have compass points determined by the  circle  of
       which the arc is a part.

       Circles  and  arcs  can  be dotted or dashed.  In TeX mode
       splines can be dotted or dashed.

       Boxes can have rounded corners.  The rad attribute  speci-
       fies the radius of the quarter-circles at each corner.  If
       no rad or diam attribute is given, a radius of  boxrad  is
       used.   Initially,  boxrad  has  a value of 0.  A box with
       rounded corners can be dotted or dashed.

       The .PS line can have a second argument specifying a maxi-
       mum height for the picture.  If the width of zero is spec-
       ified the width will be ignored in computing  the  scaling
       factor for the picture.  Note that pic will always scale a
       picture by the same  amount  vertically  as  horizontally.
       This  is  different from the DWB 2.0 pic which may scale a
       picture by a different amount vertically than horizontally
       if a height is specified.

       Each  text object has an invisible box associated with it.
       The compass points of a text object are determined by this
       box.   The  implicit  motion associated with the object is
       also determined by this box.  The dimensions of  this  box
       are  taken  from  the  width and height attributes; if the
       width attribute is not supplied then  the  width  will  be
       taken  to  be textwid; if the height attribute is not sup-
       plied then the height will be taken to be  the  number  of
       text  strings  associated  with  the  object times textht.
       Initially textwid and textht have a value of 0.

       In places where a quoted  text  string  can  be  used,  an
       expression of the form

              sprintf("format", arg,...)

       can  also be used; this will produce the arguments format-
       ted according to format,  which  should  be  a  string  as
       described in printf(3) appropriate for the number of argu-
       ments supplied, using only the e, f, g or % format charac-
       ters.

       The  thickness  of  the lines used to draw objects is con-
       trolled by the linethick variable.  This gives the  thick-
       ness  of  lines in points.  A negative value means use the
       default thickness: in TeX output mode, this  means  use  a
       thickness of 8 milliinches; in TeX output mode with the -c
       option, this means use the line thickness specified by .ps
       lines;  in  troff  output mode, this means use a thickness



Groff Version 1.05      November 22, 1992                       6




PIC(1)                                                     PIC(1)


       proportional to the pointsize.  A zero  value  means  draw
       the thinnest possible line supported by the output device.
       Initially  it  has  a  value  of  -1.   There  is  also  a
       thick[ness] attribute.  For example,

              circle thickness 1.5

       would  draw  a circle using a line with a thickness of 1.5
       points.  The thickness of lines is  not  affected  by  the
       value  of  the  scale variable, nor by the width or height
       given in the .PS line.

       Boxes (including boxes with rounded corners), circles  and
       ellipses  can  be  filled  by  giving then an attribute of
       fill[ed].  This takes an optional argument of  an  expres-
       sion  with  a  value  between 0 and 1; 0 will fill it with
       white, 1 with black, values in between with a  proportion-
       ally gray shade.  A value greater than 1 can also be used:
       this means fill with the shade of gray that  is  currently
       being  used  for  text  and  lines.  Normally this will be
       black, but output devices  may  provide  a  mechanism  for
       changing this.  Without an argument, then the value of the
       variable fillval will be used.  Initially this has a value
       of 0.5.  The invisible attribute does not affect the fill-
       ing of objects.  Any text associated with a filled  object
       will  be  added  after the object has been filled, so that
       the text will not be obscured by the filling.

       Arrow heads will be drawn as solid triangles if the  vari-
       able  arrowhead is non-zero and either TeX mode is enabled
       or the -x option has been given.  Initially arrowhead  has
       a value of 1.

       The  troff  output  of  pic is device-independent.  The -T
       option is therefore redundant.  All numbers are  taken  to
       be in inches; numbers are never interpreted to be in troff
       machine units.

       Objects can have  an  aligned  attribute.   This  is  only
       available with the -p option.  Any text associated with an
       object having the aligned attribute will be rotated  about
       the  center  of  the  object  so that it is aligned in the
       direction from the start point to the  end  point  of  the
       object.   Note that this attribute will have no effect for
       objects whose start and end points are coincident.

FILES
       /usr/share/tmac/tmac.pic   Example definitions of  the  PS
                                  and PE macros.

SEE ALSO
       troff(1), groffout(5), tex(1)
       Tpic: Pic for TeX
       AT&T Bell Laboratories, Computing Science Technical Report



Groff Version 1.05      November 22, 1992                       7




PIC(1)                                                     PIC(1)


       No. 116, PIC  --  A  Graphics  Language  for  Typesetting.
       (This  can  be  obtained  by  sending  a  mail  message to
       netlib@research.att.com      with      a      body      of
       `send 116 from research/cstr'.)

BUGS
       Input characters that are illegal for groff (ie those with
       ASCII code 0 or between 013 and 037 octal or between  0200
       and 0237 octal) are rejected even in TeX mode.

       The interpretation of fillval is incompatible with the pic
       in 10th edition Unix, which interprets 0 as black and 1 as
       white.












































Groff Version 1.05      November 22, 1992                       8


Typewritten Software • bear@typewritten.org • Edmonds, WA 98026