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