%-*-tex-*- \ifundefined{writestatus} \input status \relax \fi % \chcode{graph} \def\cqu{} \chapterhead{graph}{\TeX Graph} The graphics package that is a part of \intex\ adds the following capabilities \bl \li $\bullet$ The production of a complete paper/report requiring no additional insertions (except perhaps colour photographs if required). \li $\bullet$ The ability to insert a file, for example a plot or halftone, in Encapsulated PostScript Format (EPSF), and to automatically leave enough space in the text. \li $\bullet$ The mixing of a vector graphics and \TeX\ text. In fact \TeX\ text may now be printed at any arbitrary angle. \el The package requires a sensible PostScript driver. The basic requirements for the driver are as follows: \bl \lb The |\special| commands and the other information in the .dvi file are processed in the order they are found in the .dvi file. This is necessary in order to be able to rotate tables and arbitrary text \dots\ among other things. \lb The driver does not perform PostScript {\tt save} and {\tt restore} commands around |\special| commands. \lb The driver uses the code {\tt ps:} is used to signal a file name and the code {\tt ps::} to signal inline code. \lb The driver sets the {\tt currentpoint} before entering a |\special|. \el \shead{gcomlist}{Command List - \TeX Graph} \begintwocolumn \ext|\absoluteposition| \ext|\absolutescale| \ext|\arcc| \ext|\arcn| \ext|\arrowheadscale| \ext|\arrowheadsize| \ext|\arrowheadtype| \ext|\avec| \ext|\beginsegment| \ext|\beginTeXgraph \btg| \ext|\cavec| \ext|\cav| \ext|\centergraph| \ext|\centerplotfile| \ext|\clvec| \ext|\clv| \ext|\endsegment| \ext|\endTeXgraph \etg| \ext|\graphdim| \ext|\hgraphsize| \ext|\hgraphskip| \ext|\hpix| \ext|\htext| \ext|\includefile| \ext|\incscfile| \ext|\incscmvfile| \ext|\larc| \ext|\lcir| \ext|\linecap| \ext|\linejoin| \ext|\lpatt| \ext|\lvec| \ext|\move| \ext|\penwidth| \ext|\relativeposition| \ext|\relativescale| \ext|\rstext| \ext|\rtext| \ext|\segmentscale| \ext|\unitscale| \ext|\vgraphsize| \ext|\vgraphskip| \ext|\vpix| \ext|\vtext| \endtwocolumn \shead{plotfile}{The Inclusion of Encapsulated PostScript} All the commands that are used to include encapsulated PostScript files read the {\tt Boundingbox} and leave enough space in the text for the graphics. The {\tt Boundingbox} may be at either the beginning or the end of the file. However, if the {\tt Boundingbox} is at the the end, it might take \TeX\ some time to read the entire file to find it. The simplest command for including a graphics file is $$ |\centerplotfile{}|. $$ For instance the (old) IEEE Communications Society logo was brought in simply by saying \beginttverbatim \ninepoint \tt \1medskip \1hrule \1centerplotfile{ieeelogo.ps} \1hrule \1medskip \endttverbatim right here. \medskip \hrule \centerplotfile{ieeelogo.ps} \hrule \medskip The |\hrule| commands were put in to show how much space was left by \TeX Graph. A slightly more complicated example illustrating both rotation and scaling is given below. \bigskip \hrule \centergraph{ \btg \incscfile f:{ieeelogo.ps} sc:.3 d:45 \etg} \hrule \bigskip The code for this is \beginttverbatim \1hrule \1centergraph{ \1btg \1incscfile f:{ieeelogo.ps} sc:.3 d:45 \1etg} \1hrule \endttverbatim Notice that the computation of the space to leave was incorrect. This is due to the difficulty in performing the computations for obtaining the bounding box for an arbitrarily rotated and scaled figure. The most general inclusion command is |\incscmvfile| which allows for arbitrary scaling, rotation, and offset. Finally, the rotation, scaling, and placement may be applied around any of the nine text box reference points described in Section~\ref{tgraph}. \shead{tforms}{\TeX Graph Basics} \TeX Graph has a number of capabilities that range from primitive to powerful. The following list of classes is for reference only. More detail will follow with examples in the various sections to follow. This section may be omitted on first reading. \dssshead{\TeX Graph Classes} \bl \lb Drawing primitives consist of commands for circles, circular arcs, line vectors, vectors with arrowheads, spline curves, spline curves with arrowheads, line dotting commands, and various shades of gray for fills. \lb There are commands for changing whether the distances specified are to be interpreted absolutely, with respect to an origin or relatively with respect to the present position. \lb There is a command to change the (pen)width of the drawn lines and to change the interpreted scale of the units of distance. \lb There is a command to change the default units. However, since arbitrary scaling of units is allowed, this command is of limited use except for those that visualize distances in different dimensions. The dimensions available are those available in \intex. \lb There is a ``graphical segment'' which can be placed at any specific location. Distances inside a graphical segment are interpreted with respect to the segment origin. The distances inside a segment may be either relative or absolute with respect to the segment origin. There is a {\it segment scale} which allows for segments to be scaled relatively with respect to an overall graph. \lb Text, with all the capabilities of \intex\ may be written at any arbitrary angle. \lb \TeX Graph keeps track of the maximum extent of a graph. These are available after the graph is terminated in the variables |\hgraphsize| and |\vgraphsize|. |\hgraphskip| and |\vgraphskip| will cause a horizontal or vertical skip of the appropriate graphsize. {\bf Unfortunately, these values may be incorrect for a number of reasons. } These are \bsl \li $\circ$ Text may stick out the edge of the graph. \li $\circ$ A circle or arc center is outside the main graph area. \li $\circ$ The visible part of a circle or arc may be too far to the right. \li $\circ$ A vertical segment may have inadvertently reset the maximum positions. \esl In some cases it may be necessary to make a fake move to the lower right hand corner of a graph to tell \TeX Graph the correct size \dots\ after you have seen a preliminary version and know what it should be. \lb All of \TeX's definitional capabilities are available. These can be used to replace a complex structure by a single command or to change the surface syntax of \TeX Graph. \lb Explicit use of grouping in \TeX Graph, through $\{ \}$, or |\begingroup|, |\endgroup| pairs is not allowed. This will foul up the positional record keeping inside. Groups may be produced only through the use of segments, namely the |\beginsegment|, |\endsegment| pair. \el \shead{tgraph}{Simple \TeX Graphics} \TeX Graph will allow for rather sophisticated graphics. You can use the definition capabilities of \intex\ to create libraries of symbols for future use. Directions in \TeX Graph are described as horizontal, {\tt h:}, increasing from left to right across the page and vertical, {\tt v:}, increaseing from top to bottom {\bf down} the page. Thus the fundamental directions are $$ \centergraph{\btg \move h:.3 v:.3 \avec h:3 v:.3 \move h:.3 v:.3 \avec h:.3 v:2 \textref h:C v:C \move h:1.5 v:.15 \htext{Horizontal -- {\tt h:}} \move h:.15 v:1 \vtext{Vertical -- {\tt v:}} \etg} $$ \TeX Graph capabilities will be introduced slowly. The following diamond box $$ \centergraph{ \btg \move h:0 v:.5 % moves penup to (0,.5) \lvec h:.5 v:0 % draws a line to (.5,0) \lvec h:1 v:.5 \lvec h:.5 v:1 \lvec h:0 v:.5 \textref h:C v:C % sets the reference point in center of text. \move h:.5 v:.5 \htext {$\sum_{i=1}^n \rho_n$} % horizontal text box \etg} $$ was put in place with \beginttverbatim \ninepoint \tt $$ % a convenient way to use displaymath spacing \1centergraph{ \1beginTeXgraphics % also known as \1btg \1move h:0 v:.5 % moves penup to (0,.5) \1lvec h:.5 v:0 % draws a line to (.5,0) \1lvec h:1 v:.5 \1lvec h:.5 v:.1 \1lvec h:0 v:.5 \1textref h:C v:C % sets the reference point in the center. \1move h:.5 v:.5 \1htext {$\1sum_{i=1}^n \1rho_n$} % horizontal text box \1endTeXgraphics % also known as \1etg } $$ \endttverbatim The command |\centergraph{<...>}| uses the information about plot size to center the graphics horizontally and to leave enough room vertically. Arguments for all \TeX Graph primitive commands are delimited by spaces. The units of the dimensions are implicit, but changable. The default is inches. Thus {\tt h:} is the distance in the horizontal (to right) and {\tt v:} is the distance in the vertical (down) direction. The locations are absolute distances with respect to an origin in the upper left hand corner. \shead{vecforms}{Simple Vector Forms} This introduces some baisc drawing commands. There {\bf must} be either a space or an end of line after each {\tt }\]. The dimensional units are implicit. We usually use {\tt <..>} instead of the less economical {\tt }. \beginblockmode \ext\@|\move h:<..> v:<..>| \nbr This is a move from the current position to the coordinates given by {\tt h:<..> v:<..>}. The pen is up. It may be used to move the current reference point or to describe a boundary when creating a filled polygon. \mbr\ext\@|\lvec h:<..> v:<..>| \nbr This draws a line from the current position to {\tt h:<..> v:<..>}. \mbr\ext\@|\clvec h1:<..> v1:<..> h2:<..> v2:<..> h3:<..> v3:<..>| \nbr This draws a Bezier spline curve from the current point to {\tt h3:<..> v3:<..>} with respect to the control points {\tt h1:<..> v1:<..>} and {\tt h2:<..> v2:<..>}. These curves are very versatile and can create many effects, including loops, by varying the control points. \mbr\ext\@|\clv (

) (

) (

)| \nbr This command is identical to |\clvec| but with a less verbose syntax. \endblockmode Lines may be either solid of various widths, or dotted with custom patterns. In addition the ends of the lines may be of different shapes and joined with different defaults. In most cases you will not have to change the defaults in \TeX Graph but the capability is there. \beginblockmode \ext\@|\penwidth | \nbr This sets the width of the pen or line in the current units. The default is is .015 (in). \mbr\ext\@|\linecap | \nbr This sets the end shapes of the lines using PostScript notation. The default is 1 or a round cap. A value of 0 is a butt cap with the line cut off square exactly to its length. A value of 2 is a square cap with the line extended by a square cap the thikness of half its width. For narrow lines the difference is negligible. \mbr\ext\@|\linejoin | \nbr This sets the form in which lines join (PostScript notation). The default is 1 which corresponds to a round line join. A value of 0 is a mitre or pointed join while a value of 2 is a beveled or flattened join. For thin lines the differences are negligible. \mbr\ext\@|\lpatt p:| \nbr This sets the dotting pattern of the line in PostScript notation. The default is a solid line described by |{[]}|. The simplest form is |{[a]}| where the line is black for {\tt a} pixels and white for 1. |{[a b]}| would mean {\tt a} pixels black followed by {\tt b} pixels white. A specification of |[a1 b1 a2 b2]| would be a cyclic pattern with the line black for the {\tt a?} pixels and white for the corresponding {\tt b?}. \endblockmode \TeX Graph alos supplies lines with arrowheads. These may be combined dotting patterns given above but a decision will have to be made as to whether you want the arrowhead itself dotted. There are three styles of arrowheads \btg \move h:0 v:-.05 \avec h:.3 v:-.05 \arrowheadtype t:O \avec h:.6 v:-.05 \arrowheadtype t:F \avec h:.9 v:-.05 \etg \hgraphskip\ triangle {\tt T}, open {\tt O}, and filled {\tt F}. The size may also be varied. There are no restriction on the direction of the arrows. The commands are \beginblockmode \ext\@|\avec h:<..> v:<..>| \nbr This draws a vector with an arrow head from the current position to {\tt h:<..> v:<..>}. \mbr\ext\@|\cavec h1:<..> v1:<..> h2:<..> v2:<..> h3:<..> v3:<..>| \nbr\ext\@|\cav (

) (

) (

) | \nbr These are the spline versions of the vectors with arrowheads. \mbr\ext\@|\arrowheadtype t:| \nbr The {\tt } is {\tt T O F} for triangle, open, or filled respectively. \mbr\ext\@|\arrowheadsize l: w:| \nbr The {\tt} and {\tt} are in the current units. The default is 0.16in by 0.04in. This size is {\tt independent} of the current scales. This prevents arrowheads from disappearing as a graph is scaled. \mbr\ext\@|\arrowheadscale| This makes the arrowheadsize sensitive to the segment and unit scales in force when it is called. It is not global but is affected by the grouping imposed by |\beginsegment| and |\endsegment| pairs. \endblockmode For most applications, the |\arrowheadsize| and the |\arrowheadscale| will not be needed. The following example of a (partial) block diagram uses these commands. $$ \centergraph{\btg \move h:0 v:.3 \avec h:.5 v:.3 \move h:.5 v:.6 % moves to lower lefthand corner of box \lvec h:.5 v:0 % four sides \lvec h:1.5 v:0 \lvec h:1.5 v:.6 \lvec h:.5 v:.6 \etg} $$ This was produced by the following: \beginttverbatim \ninepoint \tt \1centergraph{\1btg \1move h:0 v:.3 \1avec h:.5 v:.3 % arrow vector leading into box \1move h:.5 v:.6 % moves to lower lefthand corner of box \1lvec h:.5 v:0 % four sides \1lvec h:1.5 v:0 \1lvec h:1.5 v:.6 \1lvec h:.5 v:.6 \1etg} \endttverbatim We can change the type of arrowhead on this and all subsequent arrow vectors by adding adding |\arrowheadtype t:O| before the |\avec ...| to give $$ \centergraph{\btg \move h:0 v:.3 \arrowheadtype t:F % changes default filled \avec h:.5 v:.3 % arrow vector leading into box \move h:.5 v:.6 % moves to lower lefthand corner of box \lvec h:.5 v:0 % four sides \lvec h:1.5 v:0 \lvec h:1.5 v:.6 \lvec h:.5 v:.6 \etg} $$ This was produced by \beginttverbatim \ninepoint \tt \1centergraph{\1btg \1move h:0 v:.3 \1arrowheadtype t:F % changes default filled \1avec h:.5 v:.3 % arrow vector leading into box \1move h:.5 v:.6 % moves to lower lefthand corner of box \1lvec h:.5 v:0 % four sides \1lvec h:1.5 v:0 \1lvec h:1.5 v:.6 \1lvec h:.5 v:.6 \1etg} \endttverbatim \beginblockmode \ext\@|\unitscale | \nbr This command causes all subsequent units in this or enclosed segments to be scaled by the {\tt }. Thus |\unitscale 2.54| would have the effect of changing a figure where the units were originally in inches to be in centimetres. \endblockmode Thus the entire graph is reduced to half size by adding |\unitscale .5|\] at the very beginning. $$ \centergraph{\btg \unitscale .5 \move h:0 v:.3 \arrowheadtype t:F % changes default filled \avec h:.5 v:.3 % arrow vector leading into box \move h:.5 v:.6 % moves to lower lefthand corner of box \lvec h:.5 v:0 % four sides \lvec h:1.5 v:0 \lvec h:1.5 v:.6 \lvec h:.5 v:.6 \etg} $$ Note that the arrowhead has not changed in size. The commands to do this are \beginttverbatim \ninepoint \tt \1centergraph{\1btg \1unitscale .5 % causes all subsequent units to be multiplied % by .5 \1move h:0 v:.3 \1arrowheadtype t:F % changes default filled \1avec h:.5 v:.3 % arrow vector leading into box \1move h:.5 v:.6 % moves to lower lefthand corner of box \1lvec h:.5 v:0 % four sides \1lvec h:1.5 v:0 \1lvec h:1.5 v:.6 \1lvec h:.5 v:.6 \1etg} \endttverbatim If the arrowhead size needed to be reduced in the same scale it is necessary to add |\arrowheadscale| after the |\unitscale| and before the first arrowvector. Thus we get $$ \centergraph{\btg \unitscale .5 % causes all subsequent units to be multiplied % by .5 \move h:0 v:.3 \arrowheadscale % makes arrowhead size sensitive to scalings. \arrowheadtype t:F % changes default filled \avec h:.5 v:.3 % arrow vector leading into box \move h:.5 v:.6 % moves to lower lefthand corner of box \lvec h:.5 v:0 % four sides \lvec h:1.5 v:0 \lvec h:1.5 v:.6 \lvec h:.5 v:.6 \etg} $$ This is produced by \beginttverbatim \ninepoint \tt \1centergraph{\1btg \1unitscale .5 % causes all subsequent units to be multiplied % by .5 \1move h:0 v:.3 \1arrowheadscale % makes arrowhead size sensitive to scalings. \1arrowheadtype t:F % changes default filled \1avec h:.5 v:.3 % arrow vector leading into box \1move h:.5 v:.6 % moves to lower lefthand corner of box \1lvec h:.5 v:0 % four sides \1lvec h:1.5 v:0 \1lvec h:1.5 v:.6 \1lvec h:.5 v:.6 \1etg} \endttverbatim Finally we have an example with dotted Bezier splines. $$ \centergraph{ \btg \lpatt p:{[20 30 20]} \lvec h:0 v:2 \move h:0 v:0 \lpatt p:{[20 20 10 10]} \cav (1 1) (2 1) (3 0) \lpatt p:{[20 20]} \move h:4 v:1 \cav (0 2) (5 2) (1 1) \etg } $$ which was given by \beginttverbatim \1centergraph{ \1btg \1lpatt p:{[20 30 20]} \1lvec h:0 v:2 \1move h:0 v:0 \1lpatt p:{[20 20 10 10]} \1cav (1 1) (2 1) (3 0) \1lpatt p:{[20 20]} \1move h:4 v:1 \1cav (0 2) (5 2) (1 1) \1etg } \endttverbatim This is off center because the width computation includes the (5 2) control point of the Bezier curve. \sshead{text}{Text in Graphs} All text within \TeX Graph is actually typeset by \TeX. Since \TeX\ does this so beautifully, it seems counter productive to do it otherwise. The commands for including text at various angles are \beginblockmode \ext\@|\htext {}| \nbr This puts the text in a horizontal |\hbox| running from left to right. \mbr\ext\@|\vtext {}| \nbr This puts the text in a vertical |\hbox| going upwards. \mbr\ext\@|\rtext d: t:{}| \nbr This puts text in an |\hbox| with an arbitrary rotation of {\tt }. \mbr\ext\@|\rstext d: sc: t:{}| \nbr This puts text in an |\hbox| with an arbitrary rotation of {\tt } and scale {\tt }. \endblockmode Text is placed in an |\hbox|. This box is located at the point in the graph where the |\?text| command is called. In order to make the exact placement of the box in a graph easier, the box is actually oriented at any one of nine reference points. The command is \beginblockmode \ext\@|\textref h: v:| \nbr The choices of {\tt L C R} are Left, Center, and Right respectively in the horizontal and vertical positions. \endblockmode The nine choices are shown below: \medskip \def\bul{\htext {$\bullet$} } \def\tref{\beginsegment \textref h:C v:C \lvec h:1 v:0 \bul \lvec h:2 v:0 \bul \lvec h:2 v:.5 \bul \lvec h:2 v:1 \bul \lvec h:1 v:1 \bul \lvec h:0 v:1 \bul \lvec h:0 v:.5 \bul \lvec h:0 v:0 \bul \move h:1 v:.5 \bul \endsegment} \def\tlabels{\textref h:R v:C %left hand labels \htext{ h:L v:T } \lvec h:.2 v:0 \avec h:.6 v:.4 \move h:0 v:.9 \htext{ h:L v:C } \avec h:.6 v:.9 \move h:0 v:1.8 \htext{ h:L v:B } \lvec h:.2 v:1.8 \avec h:.6 v:1.4 \textref h:L v:C %right hand labels \move h:3.2 v:0 \htext{ h:R v:T } \lvec h:3 v:0 \avec h:2.6 v:.4 \move h:3.2 v:.9 \htext{ h:R v:C } \avec h:2.6 v:.9 \move h:3.2 v:1.8 \htext{ h:R v:B } \lvec h:3 v:1.8 \avec h:2.6 v:1.4 \textref h:C v:B % Center Top \move h:1.6 v:0 \htext{ h:C v:T } \move h:1.6 v:.05 \avec h:1.6 v:.4 \textref h:L v:C % Center Center \move h:2.0 v:.7 \htext{ h:C v:C } \lvec h:1.85 v:.7 \avec h:1.6 v:.9 \textref h:C v:T % Center Bottom \move h:1.6 v:1.8 \htext{ h:C v:B } \move h:1.6 v:1.75 \avec h:1.6 v:1.4 } \medskip \centergraph{\btg \unitscale .7 \arrowheadsize l:.08 w:.02 \arrowheadtype t:O \tlabels \move h:.6 v:.4 \tref \etg} \medskip These reference points move with the box as it is rotated or scaled. As an example we add the following $\rho=\sum_{i=1}^{n}\rho_i$ to the center of the block diagram used previously to give $$ \centergraph{\btg \move h:1.0 v:.3 % moves to center of box \textref h:C v:C % sets text reference to dead center \htext {$\rho=\sum_{i=1}^{n}\rho_i$} % puts in text \move h:0 v:.3 \avec h:.5 v:.3 % arrow vector leading into box \move h:.5 v:.6 % moves to lower lefthand corner of box \lvec h:.5 v:0 % four sides \lvec h:1.5 v:0 \lvec h:1.5 v:.6 \lvec h:.5 v:.6 \etg} $$ The commands to do this are \beginttverbatim \ninepoint \tt \1centergraph{\1btg \1move h:1.0 v:.3 % moves to center of box \1textref h:C v:C % sets text reference to dead center \1htext {$\1rho=\1sum_{i=1}^{n}\1rho_i$} % puts in text \1move h:0 v:.3 \1avec h:.5 v:.3 % arrow vector leading into box \1move h:.5 v:.6 % moves to lower lefthand corner of box \1lvec h:.5 v:0 % four sides \1lvec h:1.5 v:0 \1lvec h:1.5 v:.6 \1lvec h:.5 v:.6 \1etg} \endttverbatim Arbitrary rotation of text or graphics |\rtext|. This example uses |\rtext d:45 t:| in place of the |\htext|. $$ \centergraph{\btg \move h:1.0 v:.3 % moves to center of box \textref h:C v:C % sets text reference to dead center \rtext d:45 t:{$\rho=\sum_{i=1}^{n}\rho_i$} % puts in text \move h:0 v:.3 \avec h:.5 v:.3 % arrow vector leading into box \move h:.5 v:.6 % moves to lower lefthand corner of box \lvec h:.5 v:0 % four sides \lvec h:1.5 v:0 \lvec h:1.5 v:.6 \lvec h:.5 v:.6 \etg} $$ Note that the text spills out over the edges of the box. There is no guarantee that the text will fit in the box. In fact if we take the horizontal example and add a |\unitscale .7 \arrowheadscale| the following results: $$ \centergraph{\btg \unitscale .7 \arrowheadscale \move h:1.0 v:.3 % moves to center of box \textref h:C v:C % sets text reference to dead center \htext {$\rho=\sum_{i=1}^{n}\rho_i$} % puts in text \move h:0 v:.3 \avec h:.5 v:.3 % arrow vector leading into box \move h:.5 v:.6 % moves to lower lefthand corner of box \lvec h:.5 v:0 % four sides \lvec h:1.5 v:0 \lvec h:1.5 v:.6 \lvec h:.5 v:.6 \etg} $$ Note that the font is not scaled. If we use |\rstext d:0 sc:.8 t:<...>| we get $$ \centergraph{\btg \unitscale .7 \arrowheadscale \move h:1.0 v:.3 % moves to center of box \textref h:C v:C % sets text reference to dead center \rstext d:0 sc:.8 t:{$\rho=\sum_{i=1}^{n}\rho_i$} \move h:0 v:.3 \avec h:.5 v:.3 % arrow vector leading into box \move h:.5 v:.6 % moves to lower lefthand corner of box \lvec h:.5 v:0 % four sides \lvec h:1.5 v:0 \lvec h:1.5 v:.6 \lvec h:.5 v:.6 \etg} $$ \shead{vertgraph}{Rotated Graphics and Text} It is possible to place graphics or text at any arbitrary direction on a page. It is only necessary to include it in a |\vtext| for vertical or an |\rtext| for an arbitrary rotation. However, it should be remembered that the reference point is that position on the page where the |\?text| was entered {\bf and} that the text/graphics goes at the appropriate angle. The following shows a simple table angled on the page. To do this correctly, requires that you discover the size of the table. \def\sample{ \btg \lvec h:1 v:0 \incscfile f:ieeelogo.ps sc:.25 d:0 \lvec h:0 v:.5 \htext{\begintable \begintableformat &\center \endtableformat \- \br{\:|}\use{3} PROJECT --- Squidget Forms \er{|} \- \br{\:|} Milestone | Due | Projected \er{|} \- \br{\:|} A | Aug. 94 | Jan. 95 \er{|} \- \br{\:|} B | Dec. 94 | Dec. 95 \er{|} \- \br{\:|} A | Jan. 95 | ? \er{|} \- \endtable} \etg} $$ \centergraph{ \btg \lvec h:0 v:1 % sets origin \rtext d:45 t:{\sample} \lvec h:2 v:2 % sets size of graph ... \etg} $$ This was done with the following set of commands. Note that a |\def| was used to make the construction easier to follow. |\lvec| was used rather than |\move| in order to make the origin movements visible. \beginttverbatim \ninepoint \tt \1def\1sample{ \1btg \1lvec h;1 v:0 \1incscfile f:ieeelogo.ps sc:.25 d:0 \1lvec h:0 v:.5 \1htext{\1begintable \1begintableformat &\1center \1endtableformat \1- \1br{\1:|}\1use{3} PROJECT --- Squidget Forms \1er{|} \1- \1br{\1:|} Milestone | Due | Projected \1er{|} \1- \1br{\1:|} A | Aug. 94 | Jan. 95 \1er{|} \1- \1br{\1:|} B | Dec. 94 | Dec. 95 \1er{|} \1- \1br{\1:|} A | Jan. 95 | ? \1er{|} \1- \1endtable} \1etg} \endttverbatim \beginttverbatim \ninepoint \tt \1medskip \1centergraph{ \1btg \1textref h:C v:C \1lvec h:0 v:1 % sets origin \1rtext d:45 t:{\1sample} \1lvec h:2 v:2 % sets size of graph ... \1etg} \1medskip \endttverbatim In fact, this example was first done as a separate file to learn the appropriate dimensions and then inputted in the appropriate place. \sshead{arcs}{Circles, Arcs and Fills} \TeX Graph uses the circle, arc, and fill commands of PostScript to produce curves. PostScript uses a polygonal fill on the {\bf inside} of the curve. This means that the direction of the arcs are important. The commands are \beginblockmode \ext\@|\lcir r:| \nbr This is a circle with the center at the current loaction and a radius of size {\tt } in the current dimensions. \mbr\ext\@|\arcc r: sd: ed:| \nbr This is an ``unstroked''arc, ie equivalent to a |\move| in the counter clockwise direction from {\tt sd:<..>} to {\tt ed:<..>}. If this is used in a fill, the center of the circle is the beginning of the path. \mbr\ext\@|\arcn r: sd: ed:| \nbr This is the same as |\arcc| except that it is counter clockwise. \mbr\ext\@|\pfill p:| \nbr This completes a path a fills the path with a shade of gray with {\tt p:0} being black and {\tt p:1} being white. \endblockmode The angles are in the directions shown here. $$ \centergraph{ \btg \unitscale .7 \move h:1 v:2 \avec h:1 v:0 \move h:0 v:1 \avec h:2 v:1 \move h:1 v:2.05 \textref h:C v:T \htext{$90^\circ$} \move h:0 v:1 \textref h:R v:C \htext{$180^\circ$ } \move h:1 v:-.05 \textref h:C v:B \htext{$270^\circ$} \move h:2 v:1 \textref h:L v:C \htext{ $0^\circ,\ 360^\circ$ } \etg} $$ \def\fillbox #1 {\move h:.4 v:0 \beginsegment \absoluteposition \lvec h:.5 v:0 \lvec h:.5 v:.5 \lvec h:0 v:.5 \pfill p:{#1} \move h:.25 v:.55 \textref h:C v:T \htext{#1} \endsegment \move h:.4 v:0 % for symmetry } Some shades of gray are as follows: $$ \centergraph{ \btg \relativeposition \fillbox 0 \fillbox .1 \fillbox .2 \fillbox .3 \fillbox .4 \move h:-4 v:.8 \fillbox .5 \fillbox .6 \fillbox .7 \fillbox .8 \fillbox .9 \etg} $$ An example of a use of arcs and fill is given below. $$ \centergraph{\btg \arcc r:2 sd:0 ed:45 \pfill p:.5 \arcc r:1 sd:0 ed:45 \pfill p:1 % fills the inside with white \move h:2 v:1.5 % to leave enough space \etg} $$ This logo is given by \beginttverbatim \ninepoint \tt \1centergraph{\1btg \1arcc r:2 sd:0 ed:45 \1pfill p:.5 \1arcc r:1 sd:0 ed:45 \1pfill p:1 % fills the inside with white \1move h:2 v:1.5 % to leave enough space \1etg} \endttverbatim This shows that a fill of ``white'' (1) is opaque and obliterates the black or gray underneath. Note the single line of dots from the origin. Apparently there is some roundoff. This strategy is necessary in PostScript filling. \shead{seg}{Advanced \TeX Graphics and Segments} The most important advanced feature of \TeX Graph is the graphical segment. These are delimited by |\beginsegment| |\endsegment| pairs. They are used to create graphical items that can be placed at any specific location in a graph. This capability, combined with \TeX's ability to create definitions allows for the creation of libraries of symbols. {\bf Segments are the only groups that should be used within a} |\btg| |\etg| {\bf pair.}\footnote{!}{This is almost true. Groups may be used freely within the argument of either an |\??text|.} A simple example of the use of this facility was the definition of a |\fillbox| to create the box with the fill pattern shown in Section~\ref{arcs}. The definition was \beginttverbatim \ninepoint \tt \1def\1fillbox #1 {\1move h:.4 v:0 \1beginsegment \1absoluteposition \1lvec h:.5 v:0 \1lvec h:.5 v:.5 \1lvec h:0 v:.5 \1pfill p:{#1} \1move h:.25 v:.55 \1textref h:C v:T \1htext{#1} \1endsegment \1move h:.4 v:0 % for symmetry } \endttverbatim The relative position in outside the segment allows the boxes to be placed beside each other with even spacing and no additional instructions. Each segment has a {\it segment reference point}. This is the location in the enclosing segment or |\btg| |\etg|, which is really just a special segment. {\bf Absolute positions} within a segment are actually relative to the {\it segment reference point}. Relative positions are relative. The three boxes below $$ \centergraph{\btg \relativeposition \fillbox .3 \fillbox .5 \fillbox .7 \etg} $$ were produced by \beginttverbatim \ninepoint \tt \1medskip \1centergraph{\1btg \1relativeposition \1fillbox .3 \1fillbox .5 \1fillbox .7 \1etg} \1medskip \endttverbatim Note that the space after the |#1| in the definition for |\fillbox| means that the numbers are delimited by implicit space at the end of the line. If this space had been left out, only the first digit in each of the pattern numbers would have been read and the other would have been printed at some odd place on the page. \sshead{segscale}{Segment Scaling} There are several scaling parameters that can be used with segments. In addition to the |\unitscale| there is a |\segmentscale|. Roughly speaking the |\segmentscale| is used to change the scale of the present and all enclosed segments while the |\unitscale| is used to set the nominal size of segment object. The major difference between the two is that segment scales accumulate while unitscales do not. An example is obtained using the |\fillbox| in a segment. The following three boxes illustrate the effect. $$ \centergraph{\btg \unitscale .3 % changes units \segmentscale 2 % doubles scale of all enclosed segments % actual scale is .3*2=.6 \fillbox .5 \move h:.8 v:0 % moves to right beyond box \beginsegment \unitscale .5 % now unit scale is .5 \segmentscale .7 % reduces scale by .5 -- actual scale is % .5*2*.7=.7 \fillbox .7 \move h:.8 v:0 \beginsegment \unitscale 1 \segmentscale .8 % actual scale is 1*2*.7*.8=1.12 \fillbox .9 \endsegment \endsegment \etg} $$ This example should be studied carefully. The actual commands that produced it are \beginttverbatim \ninepoint \tt \1centergraph{\1btg \1unitscale .3 % changes units \1segmentscale 2 % doubles scale of all enclosed segments % actual scale is .3*2=.6 \1fillbox .5 \1move h:.8 v:0 % moves to right beyond box \1beginsegment \1unitscale .5 % now unit scale is .5 \1segmentscale .7 % reduces scale by .5 -- actual scale is % .5*2*.7=.7 \1fillbox .7 \1move h:.8 v:0 \1beginsegment \1unitscale 1 \1segmentscale .8 % actual scale is 1*2*.7*.8=1.12 \1fillbox .9 \1endsegment % actual scale is back to .5*2*.7=.7 \1endsegment % actual scale is back to .3*2=.6 \1etg} \endttverbatim Note how the segment scale accumulates while the unitscale does not. Note also that the scale reverts to that of the enclosing segment after an |\endsegment|. It is possible to prevent a segment from being affected by the external segment scales by inserting the command |\absolutescale|. This is used for symbols that you wish to have the same size no matter the actual scale of the graph. \sshead{segsum}{Segment Command Summaries} The following is a list of some of the important points concerning segments: \beginblockmode \ext\@|\beginsegment| \nbr This begins a graphical segment and a group. All locations within a segment are relative to the origin of the segment. \mbr\ext\@|\endsegment| \nbr This terminates a segment and the group. The current location upon leaving a segment is the segment origin. \mbr\ext\@|\unitscale | \nbr The {\tt } multiplies the present segment and all enclosed segments unless they have their own |\unitscale|. A |\unitscale| may be changed at any time within a segment. \mbr\ext\@|\segmentscale | \nbr The {\tt } affects the present segment and all enclosed segments unless that segment is protected by an |\absolutescale|. Unlike |\unitscale|, the |\segmentscale| accumulates by multiplying the current scale value. The actual scale used for interpreting position numbers is the product of all of the enclosing segmentscales times the presently active unitscale. \mbr\ext\@|\absoluteposition| \nbr All coordinates are to be interpreted with respect to the current origin. This will either be the graph origin or the origin of the current segment. \mbr\ext\@|\relativeposition| \nbr Coordinate positions are interpreted relative to the previous position. If the previous command was the drawing of an arc or circle, the previous position is the center of the circle. \endblockmode \shead{slides}{Slide Making} A specialized set of commands along with appropriate templates exist to create a transparency. All slides are ``horizontal''. |\fullform| slides take up an entire 8.5 by 11~in. page and are intended for display. |\textform| slides are reduced for text. A |\comment //| command is given that is suppressed when the |\fullform| is used but is printed when |\textform| is used. The text in the slides uses a general scaled font family in the file |spfont.tex|. This family is basically a scaled set of |\tenpoint| fonts. An example is given below: There are two basic forms, the INRS form and a General form. An example of the |\inrsform| is given by \textform \formscale .7 \beginmidinsert \inrsform \hslide HOW TO MAKE SLIDES WITH \intex// \hd{Preliminaries} \bl \lb Input the macro package with {\tt \1input inrssl.tex}. \lc Decide whether {\tt \1fullform} or {\tt \1textform}. \last Decide whether {\tt \1inrsform} or {\tt \1genform}. \el \hd{Making it.} \bl \lb Use {\tt \1hslide // <body> //}. \lb Use {``//''} as the delimiter. \el // \endmidinsert \beginttverbatim \1input inrssl % brings in the slide macros \1textform % sets textform and size \1formscale .7 % further reduces the size of slide by .7 \1beginmidinsert \1inrsform % sets the inrs form \1hslide HOW TO MAKE SLIDES WITH \1intex// \1hd{Preliminaries} \1bl \1lb Input the macro package with {\1tt \1 1input inrssl.tex}. \1lc Decide whether {\1tt \1 1fullform} or {\1tt \1 1textform}. \1last Decide whether {\1tt \1 1inrsform} or {\1tt \1 1genform}. \1el \1hd{Making it.} \1bl \1lb Use {\1tt \1 1hslide <title>// <body> //}. \1lb Use {``//''} as the delimiter. \1el // \1endmidinsert \endttverbatim \beginmidinsert \topdata = {General Engineering Inc.} \botdata = {An Important Presentation} \slidedate = {Jan. 1, 2000} \genform % this calls the general form that uses these token registers \hslide This is the title \cr Split here // \hd{This is an internal header} \bl \lb A listitem starting with a bullet. \lc A listitem starting with a circle. \last A listitem starting with an asterisk. \el // % the // terminates a slide \comment It is possible to add a comment to the bottom of the slide which only shows up when the slide is printed in textform. A comment is terminated with a {//} // \endmidinsert This second slide was given by \beginttverbatim \1topdata = {General Engineering Inc.} \1botdata = {An Important Presentation} \1slidedate = {Jan. 1, 2000} \1genform % the general form that uses these token strings \1hslide This is the title \1cr Split here // \1hd{This is an internal header} \1bl \1lb A listitem starting with a bullet. \1lc A listitem starting with a circle. \1last A listitem starting with an asterisk. \1el // % the // terminates a slide \1comment It is possible to add a comment to the bottom of the slide which only shows up when the slide is printed in textform. A comment is terminated with a {//} // \endttverbatim Arbitrary graphics may be included in a slide using normal \TeX Graph commands. However, the included graphics may not scale correctly when moving from |\fullform| to |\textform|. Under these conditions is is necessary to include the test |\iftextform <....> \else <...> \fi| to switch between the modes. The basic commands in the slide package \beginblockmode \ext\@|\input inrssl| \nbr This command will bring in the INRS\TeX\ slide macro package. \mbr\ext\@|\fullform| \nbr This chooses the full size form intended for creating the transparency. Any |\comment| is suppressed. \mbr\ext\@|\textform| \nbr This chooses the text size of the slide and does not suppress the |\comment| text. \mbr\ext\@|\formscale <scale>| \nbr The entire slide, text, internal graphics, and border, is scaled by the {\tt <scale>} factor. This is done by directly by PostScript. \mbr\ext\@|\hslide <title> // <text> //| This is the basic command for making a slide. The title is terminated with a // and the slide body is also terminated with a //. \mbr\ext\@|\comment <text> //| This is a comment text which is printed in |\textform| but suppressed in |\fullform|. \mbr\ext\@|\inrsform| This will give the standard \INRS\ format with its logo on the top and nothing on the bottom. Text on the bottom may be added using |\botdata| and |\slidedate|. \mbr\ext\@|\genform| \nbr This is a completely general form where only the border is set. \mbr\ext\@|\topdata ={<text>}| This is printed in the |\borderfont| which is the same as the current slide body font. It is printed on the top line above the border with a current position at the left hand corner. \mbr\ext\@|\botdata = {<b-text>}| \mbr\ext\@|\slidedate = {<s-date>}| \nbr These two token strings are printed on the bottom line centered and separated by a --, ie as |<b-text> - <s-date>|. \mbr\ext\@|\iftextform <...> \else <...> \fi| \nbr This is a switch that allows for different actions between fullform and textform. |\textform| is .578=1/1.728 the size of |\fullform|. \mbr\ext\@|\lb \lc \last| \nbr These are three short forms for use in listitems starting with $\bullet$, $\circ$, and {\tt *} respectively. \mbr\ext\@|\hd{<text>}| \nbr This gives a ``header'' inside a slide. It is equivalent to a |\dssshead| in normal text. \endblockmode \shead{grcomform}{Some Additional Command Forms -- \TeX Graph} \beginblockmode \ext\@|\begintexgraph \btg| \nbr This begins \TeX Graph. It will bring in the \TeX Graph macros the first time it is called. It starts a group and a |\vbox|. \mbr\ext\@|\endtexgraph \etg| \nbr Finishes \TeX Graph. It terminates the group started by |\btg|. \mbr\ext\@|\graphdim <units>| \nbr This sets the default units of \TeX Graph. Any valid \TeX\ |<unit>| is valid such as {\tt in, cm, pt,} or {\tt bp}. The current default is {\tt in}. \mbr\ext\@|\hgraphsize| \nbr This maximum horizontal excursion of the graph as computed by \TeX Graph. It is a dimension. \mbr\ext\@|\hgraphskip| \nbr This actually |\hskip \hgraphsize|. \mbr\ext\@|\hpix <number>/<unit>| \nbr This is the horizontal resolution in pixels/unit. The default is {\tt 300/in}. \mbr\ext\@|\vgraphsize| \nbr This maximum vertical excursion of the graph as computed by \TeX Graph. It is a dimension. \mbr\ext\@|\vgraphskip| \nbr This actually |\vskip \vgraphsize|. \mbr\ext\@|\vpix <number>/<unit>| \nbr This is the vertical resolution in pixels/unit. The default is {\tt 300/in}. \endblockmode \ejectpage \done