man(1) Manual page archive


     IDEAL(1)                                                 IDEAL(1)

     NAME
          ideal - troff preprocessor for drawing pictures

     SYNOPSIS
          ideal [ option ... ] [ file ... ]

     DESCRIPTION
          Ideal is a constraint-based troff(1) preprocessor for type-
          setting figures in the complex plane.  A line beginning
          `.IS' marks the start of an ideal program, .IE or .IF marks
          the end.  .IE leaves the typesetting baseline below the bot-
          tom of the picture; .IF (flyback) leaves it at the top.  The
          options are

          -Tdev
               Produce instructions for troff(1) device dev. -a is a
               synonym for -Taps; -t for -T202.

          -tex Produce output for tex(1).

          -p   Produce plot(1) instructions.  Erases come unbidden at
               every .IS.

          -4   Produce instructions for a Tektronix 4014 and wait at
               each .IE for an input character before erasing and
               starting the next picture.

          -n   Produce raw ideal output, which passes unharmed through
               nroff.

          -v   Print calculated values of variables on standard error.

          Ideal programs are built of `boxes'; boxes look like C func-
          tions, in that they are named and delimited by braces.  They
          may include the following kinds of statements, each termi-
          nated by a semicolon:

          var     declares one or more complex variables local to the
                  box.  Variable names are made up of letters and dig-
                  its, and start with a letter; do not use any of the
                  following keywords as variable names: `at',
                  `bdlist', `boundary', `box', `conn', `construct',
                  `draw', `exterior', `interior', `left', `opaque',
                  `put', `right', `spline', `text', `to', `using',
                  `var'
          equation
                  declares relative positions of significant points of
                  the box
          conn    asks for a straight-line path through named points
          pen     asks for a box to be replicated along a line between

     IDEAL(1)                                                 IDEAL(1)

                  two points
          left    left-justifies text with respect to a point
          text    centers text with respect to a point
          right   right-justifies text with respect to a point
          spline  draws a spline guided by the named points
          put     asks for an instance of a box to be drawn
          opaque  asks for a box to erase lines already in the picture
                  that are covered by its bounding polygon
          boundary
                  specifies the bounding polygon for an opaque box
          construct
                  builds a partial picture on a separate `sheet of
                  paper'
          draw    adds the contents of the named constructed box to
                  the current picture

          Ideal expects all components of a picture to be specified as
          boxes; instructions to draw the entire picture should com-
          prise a box called `main'.  Boxes are remembered across
          .IS/.IE boundaries; if you won't need a box again, you can
          reclaim the space it requires by including the command
          ...forget boxname on a line between any .IS/.IE pair after
          the last use of boxname. Box `main' is an exception to this
          rule: it is always forgotten at .IE.

          During its first pass, ideal solves all the equations to
          determine the locations of all points it needs to know.
          These equations must be linear equations in complex vari-
          ables, although they may include non-linear operators: ideal
          plugs in for as many variables, and does as much function
          evaluation, as it can before solving the linear equation.
          It waits until it has absolutely no hope of reducing an
          equation to a linear equation before complaining.  Ideal
          knows about the following functions:

          f[z,w]  == z+(w-z)f, fraction f of the way from z to w
          re(z)   real part of complex number
          im(z)   imaginary part of complex number
          conj(z) complex conjugate of complex number
          abs(z)  absolute value (modulus) of complex number
          cis(z)  the unit vector cos(x) + i*sin(x) where x = re(z)
                  and x is measured in degrees (radians if the line
                  ...radians appeared more recently in the file than
                  the line ...degrees)
          E(x)    == cis(360 x ) if x is measured in degrees
          angle(z)
                  angle of complex number, arctan(im(z)/re(z))

          During the second pass, ideal draws the picture.

          To draw a circle, include the line ...libfile circle between
          the .IS and .IE lines, and put the box named `circle',

     IDEAL(1)                                                 IDEAL(1)

          giving enough information that the circle can be determined;
          for instance, give the center and the radius, or give three
          points through which the circle passes, or give the center
          and a point on the circle.  The circle has center `center',
          radius `radius', and passes through z1, z2, and z3.

          To draw an arc, include the line ...libfile arc between the
          .IS and .IE lines, and put the box named `arc', again giving
          enough information to determine the arc; for instance, give
          the center, radius, and starting and ending angles, or give
          three points on the arc--where to start, where to end, and
          somewhere in between.  The arc has center `center', radius
          `radius', starts at point `start', passes through point
          `midway' at angle `midang', and ends at point `end' at angle
          `endang'.  If no `midway' is specified, the arc is drawn
          counterclockwise from `start' to `end'.

          The picture will be scaled to a default width of four inches
          and centered in a column of six inches.  The default width
          can be changed by a ...width command, which includes a num-
          ber in inches.  The default column width can be changed by a
          ...colwid command.  To defeat ideal's notion of the size of
          the picture, you can include lines of the form ...minx,
          ...miny, ...maxx, or ...maxy; these give the various coordi-
          nates of the bounding box of the picture in the coordinate
          system used by the picture.

          Ideal supports both C-style comments (between `/*' and `*/'
          brackets - which nest), and shell-style comments (between
          `#' and newline).

     EXAMPLES
          ...libfile circle
          triangle {
               var z1, z2, z3;
               conn z1 to z2 to z3 to z1;
          }
          main {
               put T: triangle {
                    z1 = 0; z2 = 1; z3 = (2,2);
               }
               put circle {
                    z1 = T.z1; z2 = T.z2; z3 = T.z3;
               }
          }

     SEE ALSO
          troff(1), pic(1), ped(9.1), doctype(1)
          C. J. Van Wyk, `IDEAL User's Manual', this manual, Volume 2

     BUGS
          Ideal is relatively unforgiving about syntax errors.

     IDEAL(1)                                                 IDEAL(1)

          Bounding box computation is naive for arcs and text strings.