Annotation of researchv10dc/man/adm/man1/ideal.1, revision 1.1.1.1

1.1       root        1: .EQ
                      2: delim $$
                      3: .EN
                      4: .TH IDEAL 1
                      5: .CT 1 writing_troff graphics
                      6: .SH NAME
                      7: ideal \(mi troff preprocessor for drawing pictures
                      8: .SH SYNOPSIS
                      9: .B ideal
                     10: [
                     11: .BI -p
                     12: ]
                     13: [
                     14: .BI -4
                     15: ]
                     16: [
                     17: .BI -n
                     18: ]
                     19: [
                     20: .I file ...
                     21: ]
                     22: .SH DESCRIPTION
                     23: .I Ideal
                     24: is a constraint-based
                     25: .IR troff (1)
                     26: preprocessor for typesetting figures in the complex plane.
                     27: A line beginning 
                     28: .L .IS
                     29: marks the start of an
                     30: .I ideal
                     31: program,
                     32: .B .IE
                     33: or
                     34: .BR .IF 
                     35: marks the end.
                     36: .B .IE
                     37: leaves the typesetting baseline below the bottom of the picture;
                     38: .B .IF
                     39: (flyback) leaves it at the top.
                     40: .PP
                     41: Under option
                     42: .BR -p ,
                     43: .I ideal
                     44: produces
                     45: .IR plot (1)
                     46: instructions.
                     47: Erases come unbidden at every
                     48: .BR .IS ,
                     49: so you might prefer using the
                     50: .B -4
                     51: option, which produces instructions for a Tektronix
                     52: 4014, and waits at each
                     53: .B .IE
                     54: for an input character
                     55: before erasing and starting the next picture.
                     56: The
                     57: .B -n
                     58: option produces raw
                     59: .IR ideal
                     60: output, which passes unharmed through
                     61: .I nroff.
                     62: .PP
                     63: .I Ideal
                     64: programs are built of
                     65: `boxes';
                     66: boxes look like C functions,
                     67: in that they are named and delimited by braces.
                     68: They may include the following kinds of statements,
                     69: each terminated by a semicolon:
                     70: .TF spline
                     71: .TP
                     72: .B var
                     73: declares one or more complex variables local to the box.
                     74: Variable names are made up of letters and digits, and
                     75: start with a letter; do not use any of the following
                     76: keywords as variable names:
                     77: .LR at ,
                     78: .LR bdlist ,
                     79: .LR boundary ,
                     80: .LR box ,
                     81: .LR conn ,
                     82: .LR construct ,
                     83: .LR draw ,
                     84: .LR exterior ,
                     85: .LR interior ,
                     86: .LR left ,
                     87: .LR opaque ,
                     88: .LR put ,
                     89: .LR right ,
                     90: .LR spline ,
                     91: .LR text ,
                     92: .LR to ,
                     93: .LR using ,
                     94: .L var
                     95: .TP
                     96: .I equation
                     97: declares relative positions of significant points of the box
                     98: .TP
                     99: .B conn
                    100: asks for a straight-line path through named points
                    101: .TP
                    102: .B pen
                    103: asks for a box to be replicated along a line between two points
                    104: .TP
                    105: .B left
                    106: left-justifies text with respect to a point
                    107: .TP
                    108: .B text
                    109: centers text with respect to a point
                    110: .TP
                    111: .B right
                    112: right-justifies text with respect to a point
                    113: .TP
                    114: .B spline
                    115: draws a spline guided by the named points
                    116: .TP
                    117: .B put
                    118: asks for an instance of a box to be drawn
                    119: .TP
                    120: .B opaque
                    121: asks for a box to erase lines already in the picture that
                    122: are covered by its bounding polygon
                    123: .TP
                    124: .B boundary
                    125: specifies the bounding polygon for an opaque box
                    126: .TP
                    127: .B construct
                    128: builds a partial picture on a separate `sheet of paper'
                    129: .TP
                    130: .B draw
                    131: adds the contents of the named constructed box to the current picture
                    132: .PD
                    133: .PP
                    134: .I Ideal
                    135: expects all components of a picture to be specified as boxes;
                    136: instructions to draw the entire picture should comprise a box called
                    137: .LR main .
                    138: Boxes are remembered across
                    139: .BR .IS / .IE
                    140: boundaries;
                    141: if you won't need a box again, you can reclaim the
                    142: space it requires by including the command
                    143: .BI ...forget " boxname"
                    144: on a line between any
                    145: .BR .IS / .IE
                    146: pair after the last use of
                    147: .I boxname.
                    148: Box
                    149: .L main
                    150: is an exception to this rule:
                    151: it is always forgotten at
                    152: .BR .IE .
                    153: .PP
                    154: During its first pass,
                    155: .I ideal
                    156: solves all the equations to determine the locations of all points
                    157: it needs to know.
                    158: These equations must be linear equations in complex variables,
                    159: although they may include non-linear operators:
                    160: .I ideal
                    161: plugs in for as many variables, and does as much function evaluation,
                    162: as it can before solving the linear equation.
                    163: It waits until it has absolutely no hope of reducing an equation
                    164: to a linear equation before complaining.
                    165: .I Ideal
                    166: knows about the following functions:
                    167: .TF f[z,w]
                    168: .TP
                    169: .IB f [ z , w ]
                    170: $==~z+ (w-z)f $,
                    171: fraction $f$ of the way from $z$ to $w$
                    172: .TP
                    173: .BI re( z )
                    174: real part of complex number
                    175: .TP
                    176: .BI im( z )
                    177: imaginary part of complex number
                    178: .TP
                    179: .BI conj( z )
                    180: complex conjugate of complex number
                    181: .TP
                    182: .BI abs( z )
                    183: absolute value (modulus) of complex number
                    184: .TP
                    185: .BI cis( z )
                    186: the unit vector $cos^x~+~i^sin^x$, where
                    187: $x~=~roman re (z)$ and $x$ is measured in degrees
                    188: (radians if the line
                    189: .B ...radians
                    190: appeared more
                    191: recently in the file than the line
                    192: .BR ...degrees )
                    193: .TP
                    194: .BI E( x )
                    195: $==~roman cis (360x)$ if $x$ is measured in degrees
                    196: .TP
                    197: .BI angle( z )
                    198: angle of complex number,
                    199: $ roman arctan ( roman im (z)/ roman re(z))$
                    200: .PD
                    201: .PP
                    202: During the second pass,
                    203: .I ideal
                    204: draws the picture.
                    205: .PP
                    206: To draw a circle,
                    207: include the line
                    208: .B ...libfile circle
                    209: between the
                    210: .B .IS
                    211: and
                    212: .B .IE
                    213: lines,
                    214: and
                    215: .B put
                    216: the box named
                    217: .LR circle ,
                    218: giving enough information that
                    219: the circle can be determined;
                    220: for instance, give the center and the radius,
                    221: or give three points through which the circle passes,
                    222: or give the center and a point on the circle.
                    223: The circle has center
                    224: .LR center ,
                    225: radius
                    226: .LR radius ,
                    227: and passes through
                    228: .BR z1 ,
                    229: .BR z2 ,
                    230: and
                    231: .B z3.
                    232: .PP
                    233: To draw an arc,
                    234: include the line
                    235: .B ...libfile arc
                    236: between the
                    237: .B .IS
                    238: and
                    239: .B .IE
                    240: lines,
                    241: and
                    242: .B put
                    243: the box named
                    244: .LR arc ,
                    245: again giving enough information to determine the arc;
                    246: for instance, give the center, radius, and starting and ending angles,
                    247: or give three points on the arc--where to start, where to end, and somewhere
                    248: in between.
                    249: The arc has center
                    250: .LR center ,
                    251: radius
                    252: .LR radius ,
                    253: starts at point
                    254: .LR start ,
                    255: passes through point
                    256: .L midway
                    257: at angle
                    258: .LR midang ,
                    259: and
                    260: ends at point
                    261: .L end
                    262: at angle
                    263: .LR endang .
                    264: If no
                    265: .L midway
                    266: is specified, the arc is drawn counterclockwise from
                    267: .L start
                    268: to
                    269: .LR end .
                    270: .PP
                    271: The picture will be scaled to a default width of four inches
                    272: and centered in a column of six inches.
                    273: The default width can be changed by a
                    274: .B ...width
                    275: command,
                    276: which includes a number in inches.
                    277: The default column width can be changed by a
                    278: .B ...colwid
                    279: command.
                    280: To defeat
                    281: .I ideal's
                    282: notion of the size of the picture, you can include lines of
                    283: the form
                    284: .BR ...minx ,
                    285: .BR ...miny ,
                    286: .BR ...maxx ,
                    287: or
                    288: .BR ...maxy ;
                    289: these give the various coordinates of the bounding box of the
                    290: picture in the coordinate system used by the picture.
                    291: .PP
                    292: .I Ideal
                    293: supports both C-style comments (between
                    294: .L /*
                    295: and
                    296: .L */
                    297: brackets \(em which nest),
                    298: and shell-style comments (between
                    299: .L #
                    300: and newline).
                    301: .SH EXAMPLES
                    302: .EX
                    303: .mk
                    304: \&...libfile circle
                    305: triangle {
                    306:        var z1, z2, z3;
                    307:        conn z1 to z2 to z3 to z1;
                    308: }
                    309: main {
                    310:        put T: triangle { 
                    311:                z1 = 0; z2 = 1; z3 = (2,2);
                    312:        }
                    313:        put circle {
                    314:                z1 = T.z1; z2 = T.z2; z3 = T.z3;
                    315:        }
                    316: }
                    317: .EE
                    318: .de xx
                    319: ..
                    320: .if n .ig xx
                    321: .rt
                    322: .IS
                    323: ...width 6
                    324: ...libfile circle
                    325: ...minx -8
                    326: triangle {
                    327:        var z1, z2, z3;
                    328:        conn z1 to z2 to z3 to z1;
                    329: }
                    330: main {
                    331:        put T: triangle { 
                    332:                z1 = 0; z2 = 1; z3 = (2,2);
                    333:        }
                    334:        put circle {
                    335:                z1 = T.z1; z2 = T.z2; z3 = T.z3;
                    336:        }
                    337: }
                    338: .IE
                    339: .xx
                    340: .SH "SEE ALSO"
                    341: .IR troff (1),
                    342: .IR pic (1), 
                    343: .IR ped (9.1), 
                    344: .IR doctype (1)
                    345: .br
                    346: C. J. Van Wyk,
                    347: `IDEAL User's Manual',
                    348: this manual, Volume 2
                    349: .SH BUGS
                    350: .I Ideal
                    351: is relatively unforgiving about syntax errors.
                    352: .br
                    353: Bounding box computation is naive for arcs and text strings.
                    354: .EQ
                    355: delim off
                    356: .EN

unix.superglobalmegacorp.com

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